Browse Source

loggers feitos nos forms de materia e no app norma

pull/2307/head
Cesar Carvalho 7 years ago
parent
commit
2a4f4dbd71
  1. 100
      sapl/materia/forms.py
  2. 20
      sapl/norma/forms.py
  3. 7
      sapl/norma/views.py
  4. 494
      sapl/static/styles/app.css
  5. 1136
      sapl/static/styles/compilacao.css

100
sapl/materia/forms.py

@ -1,6 +1,6 @@
import os
import logging
import django_filters
from crispy_forms.bootstrap import Alert, FormActions, InlineRadios
from crispy_forms.helper import FormHelper
@ -146,6 +146,7 @@ class MateriaSimplificadaForm(ModelForm):
def clean(self):
super(MateriaSimplificadaForm, self).clean()
logger = logging.getLogger(__name__)
if not self.is_valid():
return self.cleaned_data
@ -156,6 +157,8 @@ class MateriaSimplificadaForm(ModelForm):
ano = cleaned_data['ano']
if data_apresentacao.year != ano:
logger.error("- O ano da matéria é diferente"
" do ano na data de apresentação")
raise ValidationError("O ano da matéria não pode ser "
"diferente do ano na data de apresentação")
@ -191,6 +194,7 @@ class MateriaLegislativaForm(ModelForm):
def clean(self):
super(MateriaLegislativaForm, self).clean()
logger = logging.getLogger(__name__)
if not self.is_valid():
return self.cleaned_data
@ -204,6 +208,8 @@ class MateriaLegislativaForm(ModelForm):
if protocolo:
if not Protocolo.objects.filter(numero=protocolo,ano=ano).exists():
logger.error("- Protocolo %s/%s não"
" existe" % (protocolo, ano))
raise ValidationError(_('Protocolo %s/%s não'
' existe' % (protocolo, ano)))
@ -217,15 +223,21 @@ class MateriaLegislativaForm(ModelForm):
ano=ano).exists()
if exist_materia or exist_doc:
logger.error("- Protocolo %s/%s ja possui"
" documento vinculado"
% (protocolo, ano))
raise ValidationError(_('Protocolo %s/%s ja possui'
' documento vinculado'
% (protocolo, ano)))
p = Protocolo.objects.get(numero=protocolo,ano=ano)
if p.tipo_materia != cleaned_data['tipo']:
logger.error("- Tipo do Protocolo deve ser o mesmo do Tipo Matéria")
raise ValidationError(_('Tipo do Protocolo deve ser o mesmo do Tipo Matéria'))
if data_apresentacao.year != ano:
logger.error("- O ano da matéria é diferente "
"do ano na data de apresentação")
raise ValidationError(_("O ano da matéria não pode ser "
"diferente do ano na data de apresentação"))
@ -234,6 +246,8 @@ class MateriaLegislativaForm(ModelForm):
if ano_origem_externa and data_origem_externa and \
ano_origem_externa != data_origem_externa.year:
logger.error("O ano de origem externa da matéria é "
" diferente do ano na data de origem externa")
raise ValidationError(_("O ano de origem externa da matéria não "
"pode ser diferente do ano na data de "
"origem externa"))
@ -266,6 +280,7 @@ class UnidadeTramitacaoForm(ModelForm):
def clean(self):
super(UnidadeTramitacaoForm, self).clean()
logger = logging.getLogger(__name__)
if not self.is_valid():
return self.cleaned_data
@ -278,6 +293,7 @@ class UnidadeTramitacaoForm(ModelForm):
if len(cleaned_data) != 1:
msg = _('Somente um campo deve ser preenchido!')
logger.error("- Somente um campo deve ser preenchido!")
raise ValidationError(msg)
return cleaned_data
@ -327,6 +343,7 @@ class RelatoriaForm(ModelForm):
def clean(self):
super(RelatoriaForm, self).clean()
logger = logging.getLogger(__name__)
if not self.is_valid():
return self.cleaned_data
@ -334,8 +351,10 @@ class RelatoriaForm(ModelForm):
cleaned_data = self.cleaned_data
try:
logger.info("- Tentando obter objeto Comissao.")
comissao = Comissao.objects.get(id=self.initial['comissao'])
except ObjectDoesNotExist:
logger.error("- A localização atual deve ser uma comissão.")
msg = _('A localização atual deve ser uma comissão.')
raise ValidationError(msg)
else:
@ -364,6 +383,7 @@ class TramitacaoForm(ModelForm):
def clean(self):
super(TramitacaoForm, self).clean()
logger = logging.getLogger(__name__)
if not self.is_valid():
return self.cleaned_data
@ -390,30 +410,40 @@ class TramitacaoForm(ModelForm):
if (destino != self.cleaned_data['unidade_tramitacao_local']):
msg = _('A origem da nova tramitação deve ser igual ao '
'destino da última adicionada!')
logger.error("- A origem da nova tramitação deve ser igual ao "
"destino da última adicionada!")
raise ValidationError(msg)
if cleaned_data['data_tramitacao'] > timezone.now().date():
msg = _(
'A data de tramitação deve ser ' +
'menor ou igual a data de hoje!')
logger.error("- A data de tramitação deve ser "
"menor ou igual a data de hoje!")
raise ValidationError(msg)
if (ultima_tramitacao and
data_tram_form < ultima_tramitacao.data_tramitacao):
msg = _('A data da nova tramitação deve ser ' +
'maior que a data da última tramitação!')
logger.error("- A data da nova tramitação deve ser "
"maior que a data da última tramitação!")
raise ValidationError(msg)
if data_enc_form:
if data_enc_form < data_tram_form:
msg = _('A data de encaminhamento deve ser ' +
'maior que a data de tramitação!')
logger.error("- A data de encaminhamento deve ser "
"maior que a data de tramitação!")
raise ValidationError(msg)
if data_prazo_form:
if data_prazo_form < data_tram_form:
msg = _('A data fim de prazo deve ser ' +
'maior que a data de tramitação!')
logger.error("- A data fim de prazo deve ser " +
"maior que a data de tramitação!")
raise ValidationError(msg)
return cleaned_data
@ -446,6 +476,7 @@ class TramitacaoUpdateForm(TramitacaoForm):
def clean(self):
super(TramitacaoUpdateForm, self).clean()
logger = logging.getLogger(__name__)
if not self.is_valid():
return self.cleaned_data
@ -460,6 +491,9 @@ class TramitacaoUpdateForm(TramitacaoForm):
if ultima_tramitacao != self.instance:
if self.cleaned_data['unidade_tramitacao_destino'] != \
self.instance.unidade_tramitacao_destino:
logger.error("- Você não pode mudar a Unidade de Destino desta "
"tramitação, pois irá conflitar com a Unidade "
"Local da tramitação seguinte")
raise ValidationError(
'Você não pode mudar a Unidade de Destino desta '
'tramitação, pois irá conflitar com a Unidade '
@ -506,6 +540,7 @@ class LegislacaoCitadaForm(ModelForm):
def clean(self):
super(LegislacaoCitadaForm, self).clean()
logger = logging.getLogger(__name__)
if not self.is_valid():
return self.cleaned_data
@ -513,11 +548,14 @@ class LegislacaoCitadaForm(ModelForm):
cleaned_data = self.cleaned_data
try:
logger.info("- Tentando obter objeto NormalJuridica.")
norma = NormaJuridica.objects.get(
numero=cleaned_data['numero'],
ano=cleaned_data['ano'],
tipo=cleaned_data['tipo'])
except ObjectDoesNotExist:
logger.error("- A norma a ser inclusa não existe no cadastro"
" de Normas.")
msg = _('A norma a ser inclusa não existe no cadastro'
' de Normas.')
raise ValidationError(msg)
@ -543,10 +581,12 @@ class LegislacaoCitadaForm(ModelForm):
if not self.instance.id:
if filtro_base.exists():
msg = _('Essa Legislação já foi cadastrada.')
logger.error("- Essa Legislação já foi cadastrada.")
raise ValidationError(msg)
else:
if filtro_base.exclude(id=self.instance.id).exists():
msg = _('Essa Legislação já foi cadastrada.')
logger.error("- Essa Legislação já foi cadastrada.")
raise ValidationError(msg)
return cleaned_data
@ -569,11 +609,13 @@ class NumeracaoForm(ModelForm):
def clean(self):
super(NumeracaoForm, self).clean()
logger = logging.getLogger(__name__)
if not self.is_valid():
return self.cleaned_data
try:
logger.info("- Tentando obter objeto MateriaLegislativa.")
MateriaLegislativa.objects.get(
numero=self.cleaned_data['numero_materia'],
ano=self.cleaned_data['ano_materia'],
@ -581,6 +623,8 @@ class NumeracaoForm(ModelForm):
except ObjectDoesNotExist:
msg = _('A matéria a ser inclusa não existe no cadastro'
' de matérias legislativas.')
logger.error("- A matéria a ser inclusa não existe no cadastro "
" de matérias legislativas.")
raise ValidationError(msg)
if Numeracao.objects.filter(
@ -590,6 +634,7 @@ class NumeracaoForm(ModelForm):
numero_materia=self.cleaned_data['numero_materia']
).exists():
msg = _('Essa numeração já foi cadastrada.')
logger.error("- Essa numeração já foi cadastrada.")
raise ValidationError(msg)
return self.cleaned_data
@ -614,6 +659,7 @@ class AnexadaForm(ModelForm):
def clean(self):
super(AnexadaForm, self).clean()
logger = logging.getLogger(__name__)
if not self.is_valid():
return self.cleaned_data
@ -621,6 +667,7 @@ class AnexadaForm(ModelForm):
cleaned_data = self.cleaned_data
try:
logger.info("Tentando obter objeto MateriaLegislativa.")
materia_anexada = MateriaLegislativa.objects.get(
numero=cleaned_data['numero'],
ano=cleaned_data['ano'],
@ -628,17 +675,21 @@ class AnexadaForm(ModelForm):
except ObjectDoesNotExist:
msg = _('A matéria a ser anexada não existe no cadastro'
' de matérias legislativas.')
logger.error("- A matéria a ser anexada não existe no cadastro"
" de matérias legislativas.")
raise ValidationError(msg)
materia_principal = self.instance.materia_principal
if materia_principal == materia_anexada:
logger.error("- Matéria não pode ser anexada a si mesma.")
raise ValidationError(_('Matéria não pode ser anexada a si mesma'))
is_anexada = Anexada.objects.filter(materia_principal=materia_principal,
materia_anexada=materia_anexada
).exists()
if is_anexada:
raise ValidationError(_('Materia já se encontra anexada'))
logger.error("- Matéria já se encontra anexada.")
raise ValidationError(_('Matéria já se encontra anexada'))
cleaned_data['materia_anexada'] = materia_anexada
@ -860,6 +911,7 @@ class AutoriaForm(ModelForm):
def clean(self):
cd = super(AutoriaForm, self).clean()
logger = logging.getLogger(__name__)
if not self.is_valid():
return self.cleaned_data
@ -870,6 +922,7 @@ class AutoriaForm(ModelForm):
if ((not pk and autorias.exists()) or
(pk and autorias.exclude(pk=pk).exists())):
logger.error("- Esse Autor já foi cadastrado.")
raise ValidationError(_('Esse Autor já foi cadastrado.'))
return cd
@ -913,11 +966,13 @@ class AutoriaMultiCreateForm(Form):
def clean(self):
cd = super().clean()
logger = logging.getLogger(__name__)
if 'autores' in self.errors:
del self.errors['autores']
if 'autor' not in cd or not cd['autor'].exists():
logger.error("- Ao menos um autor deve ser selecionado para inclusão")
raise ValidationError(
_('Ao menos um autor deve ser selecionado para inclusão'))
@ -1083,6 +1138,7 @@ class TipoProposicaoForm(ModelForm):
def clean(self):
super(TipoProposicaoForm, self).clean()
logger = logging.getLogger(__name__)
if not self.is_valid():
return self.cleaned_data
@ -1093,11 +1149,14 @@ class TipoProposicaoForm(ModelForm):
if 'tipo_conteudo_related' not in cd or not cd[
'tipo_conteudo_related']:
logger.error("- Seleção de Tipo não definida.")
raise ValidationError(
_('Seleção de Tipo não definida'))
_('Seleção de Tipo não definida.'))
if not content_type.model_class().objects.filter(
pk=cd['tipo_conteudo_related']).exists():
logger.error("- O Registro definido (%s) não está na base de %s."
% (cd['tipo_conteudo_related'], content_type))
raise ValidationError(
_('O Registro definido (%s) não está na base de %s.'
) % (cd['tipo_conteudo_related'], content_type))
@ -1296,9 +1355,11 @@ class ProposicaoForm(forms.ModelForm):
].initial = self.instance.materia_de_vinculo.ano
def clean_texto_original(self):
logger = logging.getLogger(__name__)
texto_original = self.cleaned_data.get('texto_original', False)
if texto_original and texto_original.size > MAX_DOC_UPLOAD_SIZE:
max_size = str(MAX_DOC_UPLOAD_SIZE / (1024 * 1024))
logger.error("- Arquivo muito grande. ( > {0}MB )".format(max_size))
raise ValidationError(
"Arquivo muito grande. ( > {0}MB )".format(max_size))
return texto_original
@ -1319,6 +1380,7 @@ class ProposicaoForm(forms.ModelForm):
def clean(self):
super(ProposicaoForm, self).clean()
logger = logging.getLogger(__name__)
if not self.is_valid():
return self.cleaned_data
@ -1331,14 +1393,17 @@ class ProposicaoForm(forms.ModelForm):
if tm and am and nm:
try:
logger.info("- Tentando obter objeto MateriaLegislativa.")
materia_de_vinculo = MateriaLegislativa.objects.get(
tipo_id=tm,
ano=am,
numero=nm
)
except ObjectDoesNotExist:
logger.error("- Matéria Vinculada não existe!")
raise ValidationError(_('Matéria Vinculada não existe!'))
else:
logger.info("- Matéria vinculada com sucesso.")
cd['materia_de_vinculo'] = materia_de_vinculo
return cd
@ -1414,6 +1479,7 @@ class DevolverProposicaoForm(forms.ModelForm):
def clean(self):
super(DevolverProposicaoForm, self).clean()
logger = logging.getLogger(__name__)
if not self.is_valid():
return self.cleaned_data
@ -1423,6 +1489,7 @@ class DevolverProposicaoForm(forms.ModelForm):
if 'justificativa_devolucao' not in cd or\
not cd['justificativa_devolucao']:
# TODO Implementar notificação ao autor por email
logger.error("- Adicione uma Justificativa para devolução.")
raise ValidationError(
_('Adicione uma Justificativa para devolução.'))
return cd
@ -1493,6 +1560,7 @@ class ConfirmarProposicaoForm(ProposicaoForm):
}
def __init__(self, *args, **kwargs):
logger = logging.getLogger(__name__)
self.proposicao_incorporacao_obrigatoria = \
sapl.base.models.AppConfig.attr(
@ -1514,6 +1582,7 @@ class ConfirmarProposicaoForm(ProposicaoForm):
self.instance = kwargs.get('instance', None)
if not self.instance:
logger.error("- Erro na Busca por proposição a incorporar")
raise ValueError(_('Erro na Busca por proposição a incorporar'))
if self.instance.tipo.content_type.model_class() == TipoDocumento:
@ -1599,6 +1668,7 @@ class ConfirmarProposicaoForm(ProposicaoForm):
def clean(self):
super(ConfirmarProposicaoForm, self).clean()
logger = logging.getLogger(__name__)
if not self.is_valid():
return self.cleaned_data
@ -1606,6 +1676,9 @@ class ConfirmarProposicaoForm(ProposicaoForm):
numeracao = sapl.base.models.AppConfig.attr('sequencia_numeracao')
if not numeracao:
logger.error("- A sequência de numeração (por ano ou geral)"
" não foi configurada para a aplicação em "
"tabelas auxiliares")
raise ValidationError("A sequência de numeração (por ano ou geral)"
" não foi configurada para a aplicação em "
"tabelas auxiliares")
@ -1616,12 +1689,14 @@ class ConfirmarProposicaoForm(ProposicaoForm):
TipoMateriaLegislativa:
if 'regime_tramitacao' not in cd or\
not cd['regime_tramitacao']:
logger.error("- Regime de Tramitação deve ser informado.")
raise ValidationError(
_('Regime de Tramitação deve ser informado.'))
elif self.instance.tipo.content_type.model_class(
) == TipoDocumento and not cd['materia_de_vinculo']:
logger.error("- Documentos não podem ser incorporados sem definir "
"para qual Matéria Legislativa ele se destina.")
raise ValidationError(
_('Documentos não podem ser incorporados sem definir '
'para qual Matéria Legislativa ele se destina.'))
@ -1630,6 +1705,7 @@ class ConfirmarProposicaoForm(ProposicaoForm):
@transaction.atomic
def save(self, commit=False):
logger = logging.getLogger(__name__)
# TODO Implementar workflow entre protocolo e autores
cd = self.cleaned_data
@ -1673,9 +1749,11 @@ class ConfirmarProposicaoForm(ProposicaoForm):
numeracao = None
try:
logger.info("- Tentando obter modelo de sequência de numeração.")
numeracao = sapl.base.models.AppConfig.objects.last(
).sequencia_numeracao
except AttributeError:
except AttributeError as e:
logger.error("- Erro ao obter modelo. " + str(e))
pass
tipo = self.instance.tipo.tipo_conteudo_related
@ -1936,6 +2014,7 @@ class EtiquetaPesquisaForm(forms.Form):
def clean(self):
super(EtiquetaPesquisaForm, self).clean()
logger = logging.getLogger(__name__)
if not self.is_valid():
return self.cleaned_data
@ -1948,12 +2027,15 @@ class EtiquetaPesquisaForm(forms.Form):
# preencheu o Final, ou vice-versa
if (not cleaned_data['data_inicial'] or
not cleaned_data['data_final']):
logger.error("- Caso pesquise por data, os campos de Data Incial e "
"Data Final devem ser preenchidos obrigatoriamente")
raise ValidationError(_(
'Caso pesquise por data, os campos de Data Incial e ' +
'Data Final devem ser preenchidos obrigatoriamente'))
# Caso tenha preenchido, verifica se a data final é maior que
# a inicial
elif cleaned_data['data_final'] < cleaned_data['data_inicial']:
logger.error("- A Data Final não pode ser menor que a Data Inicial")
raise ValidationError(_(
'A Data Final não pode ser menor que a Data Inicial'))
@ -1962,12 +2044,16 @@ class EtiquetaPesquisaForm(forms.Form):
cleaned_data['processo_final']):
if (not cleaned_data['processo_inicial'] or
not cleaned_data['processo_final']):
logger.error("- Caso pesquise por número de processo, os campos de "
"Processo Inicial e Processo Final "
"devem ser preenchidos obrigatoriamente")
raise ValidationError(_(
'Caso pesquise por número de processo, os campos de ' +
'Processo Inicial e Processo Final ' +
'devem ser preenchidos obrigatoriamente'))
elif (cleaned_data['processo_final'] <
cleaned_data['processo_inicial']):
logger.error("- O processo final não pode ser menor que o inicial")
raise ValidationError(_(
'O processo final não pode ser menor que o inicial'))
@ -2009,6 +2095,7 @@ class FichaPesquisaForm(forms.Form):
def clean(self):
super(FichaPesquisaForm, self).clean()
logger = logging.getLogger(__name__)
if not self.is_valid():
return self.cleaned_data
@ -2019,6 +2106,7 @@ class FichaPesquisaForm(forms.Form):
return cleaned_data
if cleaned_data['data_final'] < cleaned_data['data_inicial']:
logger.error("- A Data Final não pode ser menor que a Data Inicial.")
raise ValidationError(_(
'A Data Final não pode ser menor que a Data Inicial'))
@ -2069,6 +2157,7 @@ class ExcluirTramitacaoEmLote(forms.Form):
def clean(self):
super(ExcluirTramitacaoEmLote, self).clean()
logger = logging.getLogger(__name__)
cleaned_data = self.cleaned_data
@ -2085,6 +2174,7 @@ class ExcluirTramitacaoEmLote(forms.Form):
unidade_tramitacao_destino=unidade_tramitacao_destino,
status=status)
if not tramitacao_set.exists():
logger.error("- Não existem tramitações com os dados informados.")
raise forms.ValidationError(
_("Não existem tramitações com os dados informados."))

20
sapl/norma/forms.py

@ -1,5 +1,6 @@
import django_filters
import logging
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Fieldset, Layout
from django import forms
@ -128,6 +129,7 @@ class NormaJuridicaForm(ModelForm):
def clean(self):
logger = logging.getLogger(__name__)
cleaned_data = super(NormaJuridicaForm, self).clean()
if not self.is_valid():
@ -143,12 +145,17 @@ class NormaJuridicaForm(ModelForm):
cleaned_data['numero_materia'] and
cleaned_data['ano_materia']):
try:
logger.info("- Tentando obter objeto MateriaLegislativa.")
materia = MateriaLegislativa.objects.get(
tipo_id=cleaned_data['tipo_materia'],
numero=cleaned_data['numero_materia'],
ano=cleaned_data['ano_materia'])
except ObjectDoesNotExist:
logger.error("- Matéria Legislativa %s/%s (%s) é inexistente." % (
self.cleaned_data['numero_materia'],
self.cleaned_data['ano_materia'],
cleaned_data['tipo_materia'].descricao))
raise forms.ValidationError(
_("Matéria Legislativa %s/%s (%s) é inexistente." % (
self.cleaned_data['numero_materia'],
@ -164,14 +171,18 @@ class NormaJuridicaForm(ModelForm):
data = cleaned_data['data']
if data.year != ano:
logger.error("O ano da norma é diferente "
"do ano no campo data")
raise ValidationError("O ano da norma não pode ser "
"diferente do ano no campo data")
return cleaned_data
def clean_texto_integral(self):
logger = logging.getLogger(__name__)
texto_integral = self.cleaned_data.get('texto_integral', False)
if texto_integral and texto_integral.size > MAX_DOC_UPLOAD_SIZE:
max_size = str(MAX_DOC_UPLOAD_SIZE / (1024 * 1024))
logger.error("- Arquivo muito grande. ( > {0}MB )".format(max_size))
raise ValidationError(
"Arquivo muito grande. ( > {0}MB )".format(max_size))
return texto_integral
@ -194,12 +205,14 @@ class AnexoNormaJuridicaForm(ModelForm):
}
def clean(self):
logger = logging.getLogger(__name__)
cleaned_data = super(AnexoNormaJuridicaForm, self).clean()
if not self.is_valid():
return cleaned_data
anexo_arquivo = self.cleaned_data.get('anexo_arquivo', False)
if anexo_arquivo and anexo_arquivo.size > MAX_DOC_UPLOAD_SIZE:
max_size = str(MAX_DOC_UPLOAD_SIZE / (1024 * 1024))
logger.error("- Arquivo muito grande. ( > {0}MB )".format(max_size))
raise ValidationError(
"Arquivo muito grande. ( > {0}MB )".format(max_size))
return cleaned_data
@ -239,17 +252,20 @@ class NormaRelacionadaForm(ModelForm):
def clean(self):
super(NormaRelacionadaForm, self).clean()
logger = logging.getLogger(__name__)
if not self.is_valid():
return self.cleaned_data
cleaned_data = self.cleaned_data
try:
logger.info("- Tentando obter objeto NormaJuridica. ")
norma_relacionada = NormaJuridica.objects.get(
numero=cleaned_data['numero'],
ano=cleaned_data['ano'],
tipo=cleaned_data['tipo'])
except ObjectDoesNotExist:
logger.error("- A norma a ser relacionada não existe.")
msg = _('A norma a ser relacionada não existe.')
raise ValidationError(msg)
else:
@ -310,6 +326,7 @@ class NormaPesquisaSimplesForm(forms.Form):
def clean(self):
super(NormaPesquisaSimplesForm, self).clean()
logger = logging.getLogger(__name__)
if not self.is_valid():
return self.cleaned_data
@ -321,12 +338,15 @@ class NormaPesquisaSimplesForm(forms.Form):
if (data_inicial and data_final and
data_inicial > data_final):
logger.error("- Data Final menor que a Data Inicial")
raise ValidationError(_(
'A Data Final não pode ser menor que a Data Inicial'))
else:
condicao1 = data_inicial and not data_final
condicao2 = not data_inicial and data_final
if condicao1 or condicao2:
logger.error("- Caso pesquise por data, os campos de Data Inicial e "
"Data Final devem ser preenchidos obrigatoriamente")
raise ValidationError(_('Caso pesquise por data, os campos de Data Inicial e ' +
'Data Final devem ser preenchidos obrigatoriamente'))

7
sapl/norma/views.py

@ -1,5 +1,6 @@
import re
import logging
from django.contrib.auth.mixins import PermissionRequiredMixin
from django.core.exceptions import ObjectDoesNotExist
@ -204,11 +205,14 @@ class NormaCrud(Crud):
return self.search_url
def get_initial(self):
logger = logging.getLogger(__name__)
try:
logger.info('- Tentando obter objeto de modelo da esfera da federação.')
esfera = sapl.base.models.AppConfig.objects.last(
).esfera_federacao
self.initial['esfera_federacao'] = esfera
except:
logger.error('- Erro ao obter objeto de modelo da esfera da federação.')
pass
self.initial['complemento'] = False
return self.initial
@ -240,17 +244,20 @@ class NormaCrud(Crud):
def recuperar_norma(request):
logger = logging.getLogger(__name__)
tipo = TipoNormaJuridica.objects.get(pk=request.GET['tipo'])
numero = request.GET['numero']
ano = request.GET['ano']
try:
logger.info('- Tentando obter norma.')
norma = NormaJuridica.objects.get(tipo=tipo,
ano=ano,
numero=numero)
response = JsonResponse({'ementa': norma.ementa,
'id': norma.id})
except ObjectDoesNotExist:
logger.error('- Norma buscada não existe. Definida com ementa vazia e id 0.')
response = JsonResponse({'ementa': '', 'id': 0})
return response

494
sapl/static/styles/app.css

@ -0,0 +1,494 @@
@charset "UTF-8";
.logo img {
width: 40px;
height: 40px;
margin: 5px 15px; }
.vcenter {
display: inline-block;
vertical-align: middle;
float: none;
padding: 10px; }
nav.navbar {
border-radius: 0;
font-size: 15px; }
nav .navbar-nav > li > a {
padding-top: 0px;
padding-bottom: 0px;
line-height: 75px; }
nav .navbar-nav > li > a:hover {
background-color: #23527c; }
nav .navbar-nav > li:nth-child(2) > .dropdown-menu {
right: auto; }
nav .navbar-nav:last-child > li:last-child a {
padding-right: 0px; }
.masthead {
padding: 10px; }
.masthead .nav {
clear: both; }
.masthead .navbar-brand {
color: inherit;
font-size: 24px; }
.masthead .navbar-brand img.img-responsive {
height: 95px;
margin-right: 15px; }
.masthead .navbar-brand small {
color: #93A4AA;
font-size: 75%;
line-height: 25px; }
.navbar {
margin-bottom: 0; }
.navbar-brand {
padding: 0px; }
h1, .h1 {
font-size: 30px; }
h2, .h2 {
font-size: 24px; }
h3, .h3 {
font-size: 20px; }
h4, .h4 {
font-size: 16px; }
h5, .h5 {
font-size: 14px; }
h6, .h6 {
font-size: 12px; }
.page-header {
margin: 20px 0px 10px; }
.btn:hover, .btn:focus {
color: inherit; }
.caret {
/* Por padrão caret aponta para baixo*/ }
.caret.top {
transform: rotate(180deg); }
.btn-default.btn-excluir {
color: #d9534f; }
.btn-default.btn-excluir:hover {
color: #fff;
border-color: #de6764;
background-color: #de6764; }
.controls-file {
padding: 10px;
border: 1px solid #d6e1e5;
border-radius: 4px; }
.controls-file label.checkbox-inline {
margin: 0px;
display: block; }
.help-block-danger {
margin: 15px;
padding: 15px;
border: 2px dashed #f00; }
.controls-radio-checkbox {
padding: 0px;
border: 1px solid #d6e1e5;
border-radius: 4px;
min-height: 20px; }
.controls-radio-checkbox .help-block {
margin: 15px;
padding: 15px;
border: 2px dashed #d6e1e5; }
.controls-radio-checkbox label {
padding: 5px; }
.controls-radio-checkbox label .icons {
top: 5px;
left: 8px; }
.controls-radio-checkbox label.checkbox-inline, .controls-radio-checkbox label.radio-inline {
padding: 8px;
padding-left: 36px; }
.controls-radio-checkbox label.checkbox-inline .icons, .controls-radio-checkbox label.radio-inline .icons {
top: 8px;
left: 8px; }
.controls-radio-checkbox .checkbox, .controls-radio-checkbox .radio, .controls-radio-checkbox .checkbox-inline, .controls-radio-checkbox .radio-inline {
margin: 0; }
.controls-radio-checkbox .checkbox:hover, .controls-radio-checkbox .radio:hover, .controls-radio-checkbox .checkbox-inline:hover, .controls-radio-checkbox .radio-inline:hover {
background-color: #d6e1e5; }
p.control-label {
font-weight: bold; }
.legend {
display: block;
width: 100%;
padding: 0;
margin-bottom: 20px;
font-size: 21px;
line-height: inherit;
color: #333333;
border: 0;
border-bottom: 1px solid #e5e5e5;
clear: both; }
.grid-gutter-width-right {
margin-right: 15px; }
html {
position: relative;
min-height: 100%; }
body {
margin-bottom: 160px; }
.footer {
position: absolute;
bottom: 0;
width: 100%;
/* Set the fixed height of the footer here */
height: 140px;
background: #364347 none repeat scroll 0% 0%;
color: white;
text-align: center; }
.footer p {
color: white;
margin-top: 10px; }
.footer .container {
padding-top: 25px; }
label {
margin-bottom: 0;
line-height: 1; }
.control-label {
margin: 0; }
.form-control-static {
padding-top: 0;
min-height: auto; }
.form-control-static img {
max-width: 100%; }
.pagination {
padding-top: 25px; }
.modal .alert {
margin-bottom: 0; }
fieldset fieldset {
font-size: 95%; }
fieldset fieldset legend {
font-size: 18px; }
.avatar-parlamentar {
height: 128px;
width: 128px;
margin: 0 auto;
display: table; }
/* INDEX */
#conteudo {
position: relative;
padding: 2em 1.5em 1.5em 1.5em;
overflow: hidden;
font-size: 100%;
text-align: left;
min-height: 350px;
max-width: 1000px;
margin: 0 auto; }
#conteudo a:hover {
color: #444;
-webkit-transition: 0.3s ease-in;
-moz-transition: 0.3s ease-in;
-o-transition: 0.3s ease-in; }
#homeIndex {
text-align: center; }
.homeBanner span {
color: white;
font-size: 32px;
font-weight: 600;
display: inline-block;
vertical-align: middle;
padding: 2px 45px 4px;
border: 2px solid; }
.homeBanner::after {
display: inline-block;
vertical-align: middle;
height: 100%; }
.homeBlock {
display: inline-block;
position: relative;
background-color: #F3F3F3;
width: 190px;
height: 260px;
margin: 3px;
text-align: center;
font-size: 0;
overflow: hidden; }
.homeBlock > a {
display: block;
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0; }
.homeBlock::after {
content: '';
display: inline-block;
vertical-align: middle;
height: 100%;
overflow: visible;
clear: none;
visibility: initial; }
.homeContent {
position: relative;
padding: 10px;
text-align: justify;
font-size: 14px;
color: #FFF;
opacity: 0;
transition: opacity 0.5s ease;
display: inline-block;
vertical-align: middle; }
.homeContent p {
display: block;
line-height: 13px;
font-size: 80%;
color: white; }
.homeIcon {
position: relative;
display: inline-block;
width: 105px;
height: 105px;
border-radius: 50%;
background: #364347;
z-index: 1; }
.homeIcon::before {
content: '';
position: absolute;
width: 100%;
height: 100%;
border-radius: 50%;
background: #364347;
top: 0;
left: 0;
transform: scale(0.95);
transition: transform 0.6s ease; }
.homeIcon img {
position: absolute;
margin: auto;
top: 0;
bottom: 0;
right: 0;
left: 0;
transition: opacity 0.4s 0.4s ease; }
.homeFront {
position: absolute;
top: 46%;
width: 100%;
font-size: 0;
transform: translateY(-60%); }
.homeFront h2 {
position: absolute;
margin-top: 18px;
font-size: 22px;
font-weight: 700;
color: #595959 !important;
width: 100%;
padding: 0 6%;
z-index: 0; }
.homeTitle {
display: block;
height: 32px;
text-align: center;
width: 100%;
opacity: 0;
transition: opacity 0.4s ease; }
.homeTitle::before {
content: '';
display: inline-block;
vertical-align: middle;
height: 100%; }
.homeTitle h2 {
display: inline-block;
vertical-align: middle;
max-width: 110px;
font-size: 14px;
color: white !important;
line-height: 1em; }
.homeTitle img {
display: inline-block;
vertical-align: middle;
height: 30px;
margin-right: 5px; }
.homeBlock:hover .homeIcon::before {
transform: scale(3.6) translateY(7px); }
.homeBlock:hover .homeContent {
opacity: 1;
transition-delay: 0.2s; }
.homeBlock:hover .homeIcon img {
opacity: 0;
transition-duration: 0.2s;
transition-delay: 0s; }
.homeBlock:hover .homeTitle {
opacity: 1; }
h1, h2, h3, h4, h5, h6, form, dl, dt, dd, p, div, img, a {
margin: 0;
padding: 0; }
p {
margin: 0.5em 0; }
/* FIM INDEX */
/* TEMPLATE AJUDA */
.manual li {
display: list-item;
line-height: 1.5em;
padding-right: 0; }
.manual li a {
background-color: transparent;
border: none;
border-radius: none;
padding: 0; }
.manual, .manual ul {
padding-left: 1.5em;
list-style-type: none;
margin-top: 0;
font-size: 100%; }
/* FIM TEMPLATE AJUDA */
.container-tabaux .sidebar-tabaux {
background: #fafafa;
margin-top: -70px;
padding: 10px;
border: 1px solid #eee; }
.container-tabaux .sidebar-tabaux .navbar-right {
margin: 0; }
.container-tabaux .sidebar-tabaux .nav-pills > li + li {
margin-left: 0px; }
.container-tabaux .sidebar-tabaux li {
width: 100%; }
.container-tabaux .sidebar-tabaux span {
display: none; }
.container-tabaux .sidebar-tabaux .dropdown-menu {
padding: 0px;
right: 10px;
margin-top: -5px;
overflow: hidden; }
.container-tabaux .sidebar-tabaux .dropdown-menu a {
border: 0px; }
.container-tabaux ul {
list-style: none;
padding: 0; }
.container-tabaux .list {
font-family: "SourceSansProSemiBold", Helvetica, Arial, sans-serif;
font-size: 0px;
display: table;
width: 100%;
margin: 0; }
.container-tabaux .list ul {
display: table;
width: 100%;
margin: 0; }
.container-tabaux .list li {
width: calc(50%);
display: inline-block;
position: relative; }
.container-tabaux .list > li {
width: 100%;
border-bottom: 1px solid #eee;
padding-bottom: 20px;
margin-bottom: 20px; }
.container-tabaux .list .head_title {
color: #364347;
font-size: 2.4rem;
text-transform: none; }
.container-tabaux .list a span {
display: none; }
.btn-cancel-iframe {
position: relative;
text-align: right;
opacity: 0.5; }
.btn-cancel-iframe:hover {
opacity: 1; }
.btn-cancel-iframe a {
padding: 10px;
display: inline-block; }
@media (max-width: 1199px) {
.masthead .navbar-brand {
font-size: 22px; }
.masthead .navbar-brand img.img-responsive {
height: 60px;
width: 60px;
margin-right: 7.5px; }
.navbar-nav > li > a {
padding-left: 10.71429px;
padding-right: 10.71429px; } }
@media (max-width: 1091px) {
.navbar-nav > li > a {
padding-left: 7.5px;
padding-right: 7.5px; } }
@media (min-width: 1092px) and (max-width: 1199px) {
.container {
width: 1070px; } }
@media print {
a[href]:after {
content: none !important; } }
/* Estilização da Listagem de Votos em sessões plenárias */
#styleparlamentar {
border: 0px solid #d6e1e5;
border-top-color: #d6e1e5;
border-right-color: #d6e1e5;
border-bottom-color: #d6e1e5;
border-left-color: #d6e1e5;
border-image-source: initial;
border-image-slice: initial;
border-image-repeat: initial;
font-size: 16px;
line-height: 1.467;
padding: 7px 12px;
height: 40px;
-webkit-appearance: none;
border-radius: 4px;
-webkit-box-shadow: none;
box-shadow: none;
margin-left: 1.0em; }

1136
sapl/static/styles/compilacao.css

File diff suppressed because it is too large
Loading…
Cancel
Save