Browse Source

alterações de IDE

pull/3337/head
Leandro Roberto 5 years ago
parent
commit
b3d3666e62
  1. 50
      sapl/base/forms.py
  2. 21
      sapl/materia/forms.py
  3. 7
      sapl/protocoloadm/forms.py
  4. 56
      sapl/utils.py

50
sapl/base/forms.py

@ -116,7 +116,8 @@ class UsuarioCreateForm(ModelForm):
data = self.cleaned_data data = self.cleaned_data
if data['password1'] != data['password2']: if data['password1'] != data['password2']:
self.logger.warning('Erro de validação. Senhas informadas são diferentes.') self.logger.warning(
'Erro de validação. Senhas informadas são diferentes.')
raise ValidationError('Senhas informadas são diferentes') raise ValidationError('Senhas informadas são diferentes')
return data return data
@ -235,7 +236,8 @@ class UsuarioEditForm(ModelForm):
self.helper = SaplFormHelper() self.helper = SaplFormHelper()
self.helper.layout = Layout( self.helper.layout = Layout(
'username', 'username',
FieldWithButtons('token', StrictButton('Renovar', id="renovar-token", css_class="btn-outline-primary")), FieldWithButtons('token', StrictButton(
'Renovar', id="renovar-token", css_class="btn-outline-primary")),
rows, rows,
form_actions( form_actions(
more=[ more=[
@ -250,7 +252,8 @@ class UsuarioEditForm(ModelForm):
data = self.cleaned_data data = self.cleaned_data
if data['password1'] and data['password1'] != data['password2']: if data['password1'] and data['password1'] != data['password2']:
self.logger.warning("Erro de validação. Senhas informadas são diferentes.") self.logger.warning(
"Erro de validação. Senhas informadas são diferentes.")
raise ValidationError('Senhas informadas são diferentes') raise ValidationError('Senhas informadas são diferentes')
return data return data
@ -315,7 +318,8 @@ class SessaoLegislativaForm(FileFieldCheckMixin, ModelForm):
if numero <= ult and flag_edit: if numero <= ult and flag_edit:
self.logger.warning( self.logger.warning(
'O número da SessaoLegislativa ({}) é menor ou igual ' 'O número da SessaoLegislativa ({}) é menor ou igual '
'que o de Sessões Legislativas passadas ({})'.format(numero, ult) 'que o de Sessões Legislativas passadas ({})'.format(
numero, ult)
) )
raise ValidationError('O número da Sessão Legislativa não pode ser menor ou igual ' raise ValidationError('O número da Sessão Legislativa não pode ser menor ou igual '
'que o de Sessões Legislativas passadas') 'que o de Sessões Legislativas passadas')
@ -325,7 +329,8 @@ class SessaoLegislativaForm(FileFieldCheckMixin, ModelForm):
self.logger.warning( self.logger.warning(
'A data de início ({}) da SessaoLegislativa está compreendida ' 'A data de início ({}) da SessaoLegislativa está compreendida '
'fora da data início ({}) e fim ({}) da Legislatura ' 'fora da data início ({}) e fim ({}) da Legislatura '
'selecionada'.format(data_inicio, data_inicio_leg, data_fim_leg) 'selecionada'.format(
data_inicio, data_inicio_leg, data_fim_leg)
) )
raise ValidationError('A data de início da Sessão Legislativa deve estar compreendida ' raise ValidationError('A data de início da Sessão Legislativa deve estar compreendida '
'entre a data início e fim da Legislatura selecionada') 'entre a data início e fim da Legislatura selecionada')
@ -342,13 +347,15 @@ class SessaoLegislativaForm(FileFieldCheckMixin, ModelForm):
if data_inicio > data_fim: if data_inicio > data_fim:
self.logger.warning( self.logger.warning(
'Data início ({}) superior à data fim ({}).'.format(data_inicio, data_fim) 'Data início ({}) superior à data fim ({}).'.format(
data_inicio, data_fim)
) )
raise ValidationError( raise ValidationError(
'Data início não pode ser superior à data fim') 'Data início não pode ser superior à data fim')
if data_fim.year > data_inicio.year + 1: if data_fim.year > data_inicio.year + 1:
raise ValidationError('A Sessão Legislativa só pode ter, no máximo, dois anos de período.') raise ValidationError(
'A Sessão Legislativa só pode ter, no máximo, dois anos de período.')
data_inicio_intervalo = cleaned_data['data_inicio_intervalo'] data_inicio_intervalo = cleaned_data['data_inicio_intervalo']
data_fim_intervalo = cleaned_data['data_fim_intervalo'] data_fim_intervalo = cleaned_data['data_fim_intervalo']
@ -357,7 +364,8 @@ class SessaoLegislativaForm(FileFieldCheckMixin, ModelForm):
data_inicio_intervalo > data_fim_intervalo: data_inicio_intervalo > data_fim_intervalo:
self.logger.warning( self.logger.warning(
'Data início de intervalo ({}) superior à ' 'Data início de intervalo ({}) superior à '
'data fim de intervalo ({}).'.format(data_inicio_intervalo, data_fim_intervalo) 'data fim de intervalo ({}).'.format(
data_inicio_intervalo, data_fim_intervalo)
) )
raise ValidationError('Data início de intervalo não pode ser ' raise ValidationError('Data início de intervalo não pode ser '
'superior à data fim de intervalo') 'superior à data fim de intervalo')
@ -766,7 +774,8 @@ class AutorForm(ModelForm):
class AutorFilterSet(django_filters.FilterSet): class AutorFilterSet(django_filters.FilterSet):
nome = django_filters.CharFilter(label=_('Nome do Autor'), lookup_expr='icontains') nome = django_filters.CharFilter(
label=_('Nome do Autor'), lookup_expr='icontains')
class Meta: class Meta:
model = Autor model = Autor
@ -1063,20 +1072,24 @@ class RelatorioPresencaSessaoFilterSet(django_filters.FilterSet):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.form.fields['exibir_ordem_dia'] = forms.BooleanField(required=False, label='Exibir presença das Ordens do Dia') self.form.fields['exibir_ordem_dia'] = forms.BooleanField(
required=False, label='Exibir presença das Ordens do Dia')
self.form.initial['exibir_ordem_dia'] = True self.form.initial['exibir_ordem_dia'] = True
self.form.fields['exibir_somente_titular'] = forms.BooleanField(required=False, label='Exibir somente parlamentares titulares') self.form.fields['exibir_somente_titular'] = forms.BooleanField(
required=False, label='Exibir somente parlamentares titulares')
self.form.initial['exibir_somente_titular'] = False self.form.initial['exibir_somente_titular'] = False
self.form.fields['exibir_somente_ativo'] = forms.BooleanField(required=False, label='Exibir somente parlamentares ativos') self.form.fields['exibir_somente_ativo'] = forms.BooleanField(
required=False, label='Exibir somente parlamentares ativos')
self.form.initial['exibir_somente_ativo'] = False self.form.initial['exibir_somente_ativo'] = False
self.form.fields['legislatura'].required = True self.form.fields['legislatura'].required = True
self.filters['data_inicio'].label = 'Período (Inicial - Final)' self.filters['data_inicio'].label = 'Período (Inicial - Final)'
tipo_sessao_ordinaria = self.filters['tipo'].queryset.filter(nome='Ordinária') tipo_sessao_ordinaria = self.filters['tipo'].queryset.filter(
nome='Ordinária')
if tipo_sessao_ordinaria: if tipo_sessao_ordinaria:
self.form.initial['tipo'] = tipo_sessao_ordinaria.first() self.form.initial['tipo'] = tipo_sessao_ordinaria.first()
@ -1341,7 +1354,6 @@ class RelatorioMateriasTramitacaoFilterSet(django_filters.FilterSet):
label='Autor da Matéria', label='Autor da Matéria',
queryset=Autor.objects.all()) queryset=Autor.objects.all())
@property @property
def qs(self): def qs(self):
parent = super(RelatorioMateriasTramitacaoFilterSet, self).qs parent = super(RelatorioMateriasTramitacaoFilterSet, self).qs
@ -1353,7 +1365,7 @@ class RelatorioMateriasTramitacaoFilterSet(django_filters.FilterSet):
model = MateriaEmTramitacao model = MateriaEmTramitacao
fields = ['materia__ano', 'materia__tipo', fields = ['materia__ano', 'materia__tipo',
'tramitacao__unidade_tramitacao_destino', 'tramitacao__unidade_tramitacao_destino',
'tramitacao__status','materia__autores'] 'tramitacao__status', 'materia__autores']
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(RelatorioMateriasTramitacaoFilterSet, self).__init__( super(RelatorioMateriasTramitacaoFilterSet, self).__init__(
@ -1385,7 +1397,7 @@ class RelatorioMateriasTramitacaoFilterSet(django_filters.FilterSet):
self.form.helper.form_method = 'GET' self.form.helper.form_method = 'GET'
self.form.helper.layout = Layout( self.form.helper.layout = Layout(
Fieldset(_('Pesquisa de Matéria em Tramitação'), Fieldset(_('Pesquisa de Matéria em Tramitação'),
row1, row2, row3, row4,row5, row1, row2, row3, row4, row5,
buttons,) buttons,)
) )
@ -1637,7 +1649,8 @@ class RecuperarSenhaForm(PasswordResetForm):
if not email_existente: if not email_existente:
msg = 'Não existe nenhum usuário cadastrado com este e-mail.' msg = 'Não existe nenhum usuário cadastrado com este e-mail.'
self.logger.warning( self.logger.warning(
'Não existe nenhum usuário cadastrado com este e-mail ({}).'.format(self.data['email']) 'Não existe nenhum usuário cadastrado com este e-mail ({}).'.format(
self.data['email'])
) )
raise ValidationError(msg) raise ValidationError(msg)
@ -1726,7 +1739,8 @@ class AlterarSenhaForm(Form):
if user.is_anonymous: if user.is_anonymous:
self.logger.warning( self.logger.warning(
'Não é possível alterar senha de usuário anônimo ({}).'.format(username) 'Não é possível alterar senha de usuário anônimo ({}).'.format(
username)
) )
raise ValidationError( raise ValidationError(
"Não é possível alterar senha de usuário anônimo") "Não é possível alterar senha de usuário anônimo")

21
sapl/materia/forms.py

@ -7,7 +7,7 @@ from django import forms
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.core.exceptions import ObjectDoesNotExist, ValidationError
from django.core.files.base import File from django.core.files.base import File
from django.db import models, transaction from django.db import transaction
from django.db.models import F, Max, Q from django.db.models import F, Max, Q
from django.forms import ModelChoiceField, ModelForm, widgets from django.forms import ModelChoiceField, ModelForm, widgets
from django.forms.forms import Form from django.forms.forms import Form
@ -15,9 +15,6 @@ from django.forms.models import ModelMultipleChoiceField
from django.forms.widgets import CheckboxSelectMultiple, HiddenInput, Select from django.forms.widgets import CheckboxSelectMultiple, HiddenInput, Select
from django.urls import reverse from django.urls import reverse
from django.utils import timezone from django.utils import timezone
from django.utils.encoding import force_text
from django.utils.html import format_html
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 django_filters
@ -28,15 +25,15 @@ from sapl.compilacao.models import (STATUS_TA_IMMUTABLE_PUBLIC,
STATUS_TA_PRIVATE) STATUS_TA_PRIVATE)
from sapl.crispy_layout_mixin import (form_actions, SaplFormHelper, from sapl.crispy_layout_mixin import (form_actions, SaplFormHelper,
SaplFormLayout, to_column, to_row) SaplFormLayout, to_column, to_row)
from sapl.materia.models import (AssuntoMateria, Autoria, MateriaAssunto, from sapl.materia.models import (AssuntoMateria, MateriaAssunto,
MateriaLegislativa, Orgao, MateriaLegislativa, Orgao,
RegimeTramitacao, StatusTramitacao, RegimeTramitacao, StatusTramitacao,
TipoDocumento, TipoProposicao, TipoDocumento, TipoProposicao,
UnidadeTramitacao, ConfigEtiquetaMateriaLegislativa) ConfigEtiquetaMateriaLegislativa)
from sapl.norma.models import (LegislacaoCitada, NormaJuridica, from sapl.norma.models import (LegislacaoCitada, NormaJuridica,
TipoNormaJuridica) TipoNormaJuridica)
from sapl.parlamentares.models import Legislatura, Partido, Parlamentar from sapl.parlamentares.models import Legislatura, Partido
from sapl.protocoloadm.models import (Anexado, DocumentoAdministrativo, from sapl.protocoloadm.models import (DocumentoAdministrativo,
Protocolo) Protocolo)
from sapl.utils import (autor_label, autor_modal, from sapl.utils import (autor_label, autor_modal,
ChoiceWithoutValidationField, ChoiceWithoutValidationField,
@ -44,7 +41,7 @@ from sapl.utils import (autor_label, autor_modal,
FilterOverridesMetaMixin, gerar_hash_arquivo, FilterOverridesMetaMixin, gerar_hash_arquivo,
lista_anexados, MateriaPesquisaOrderingFilter, lista_anexados, MateriaPesquisaOrderingFilter,
models_with_gr_for_model, qs_override_django_filter, models_with_gr_for_model, qs_override_django_filter,
RangeWidgetOverride, SEPARADOR_HASH_PROPOSICAO, SEPARADOR_HASH_PROPOSICAO,
validar_arquivo, YES_NO_CHOICES) validar_arquivo, YES_NO_CHOICES)
from .models import (AcompanhamentoMateria, Anexada, Autoria, from .models import (AcompanhamentoMateria, Anexada, Autoria,
@ -2789,7 +2786,8 @@ class FichaSelecionaForm(forms.Form):
class StatusTramitacaoFilterSet(django_filters.FilterSet): class StatusTramitacaoFilterSet(django_filters.FilterSet):
descricao = django_filters.CharFilter(label=_("Descrição do Status"), method='multifield_filter') descricao = django_filters.CharFilter(
label=_("Descrição do Status"), method='multifield_filter')
class Meta: class Meta:
model = StatusTramitacao model = StatusTramitacao
@ -2806,7 +2804,8 @@ class StatusTramitacaoFilterSet(django_filters.FilterSet):
self.form.helper = SaplFormHelper() self.form.helper = SaplFormHelper()
self.form.helper.form_method = "GET" self.form.helper.form_method = "GET"
self.form.helper.layout = Layout( self.form.helper.layout = Layout(
Fieldset(_("Pesquisa de Status de Tramitacao"), row0, form_actions(label="Pesquisar")) Fieldset(_("Pesquisa de Status de Tramitacao"),
row0, form_actions(label="Pesquisar"))
) )

7
sapl/protocoloadm/forms.py

@ -2,12 +2,12 @@ import logging
import re import re
from crispy_forms.bootstrap import InlineRadios, Alert, FormActions from crispy_forms.bootstrap import InlineRadios, Alert, FormActions
from crispy_forms.layout import (Button, Column, Div, Fieldset, HTML, from crispy_forms.layout import (Button, Div, Fieldset, HTML,
Layout, Submit) Layout, Submit)
from django import forms from django import forms
from django.core.exceptions import (MultipleObjectsReturned, from django.core.exceptions import (MultipleObjectsReturned,
ObjectDoesNotExist, ValidationError) ObjectDoesNotExist, ValidationError)
from django.db import models, transaction from django.db import transaction
from django.db.models import Max from django.db.models import Max
from django.forms import ModelForm from django.forms import ModelForm
from django.utils import timezone from django.utils import timezone
@ -20,13 +20,12 @@ from sapl.crispy_layout_mixin import (form_actions, SaplFormHelper,
from sapl.materia.models import (MateriaLegislativa, from sapl.materia.models import (MateriaLegislativa,
TipoMateriaLegislativa, TipoMateriaLegislativa,
UnidadeTramitacao) UnidadeTramitacao)
from sapl.protocoloadm.models import Protocolo
from sapl.utils import (AnoNumeroOrderingFilter, autor_label, autor_modal, from sapl.utils import (AnoNumeroOrderingFilter, autor_label, autor_modal,
choice_anos_com_documentoadministrativo, choice_anos_com_documentoadministrativo,
choice_anos_com_materias, choice_anos_com_materias,
choice_anos_com_protocolo, choice_force_optional, choice_anos_com_protocolo, choice_force_optional,
FileFieldCheckMixin, FilterOverridesMetaMixin, FileFieldCheckMixin, FilterOverridesMetaMixin,
lista_anexados, RangeWidgetOverride, RANGE_ANOS, lista_anexados, RANGE_ANOS,
validar_arquivo, YES_NO_CHOICES) validar_arquivo, YES_NO_CHOICES)
from .models import (Anexado, AcompanhamentoDocumento, from .models import (Anexado, AcompanhamentoDocumento,

56
sapl/utils.py

@ -1,23 +1,16 @@
from itertools import groupby from functools import wraps
import django_filters
import hashlib import hashlib
from itertools import groupby
import logging import logging
import magic from operator import itemgetter
import os import os
import re
import unicodedata
import platform import platform
import re
import tempfile import tempfile
from crispy_forms.layout import Button, HTML
from easy_thumbnails import source_generators
from floppyforms import ClearableFileInput
from functools import wraps
from operator import itemgetter
from reversion_compare.admin import CompareVersionAdmin
from unicodedata import normalize as unicodedata_normalize from unicodedata import normalize as unicodedata_normalize
from unipath.path import Path import unicodedata
from crispy_forms.layout import Button, HTML
from django import forms from django import forms
from django.apps import apps from django.apps import apps
from django.conf import settings from django.conf import settings
@ -35,6 +28,12 @@ from django.forms.widgets import SplitDateTimeWidget
from django.utils import six, timezone from django.utils import six, timezone
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
from easy_thumbnails import source_generators
from floppyforms import ClearableFileInput
import magic
from reversion_compare.admin import CompareVersionAdmin
from unipath.path import Path
from sapl.crispy_layout_mixin import (form_actions, SaplFormHelper, from sapl.crispy_layout_mixin import (form_actions, SaplFormHelper,
SaplFormLayout, to_row) SaplFormLayout, to_row)
@ -64,7 +63,7 @@ def num_materias_por_tipo(qs, attr_tipo='tipo'):
# select_related eh importante por questoes de desempenho, pois caso # select_related eh importante por questoes de desempenho, pois caso
# contrario ele realizara uma consulta ao banco para cada iteracao, # contrario ele realizara uma consulta ao banco para cada iteracao,
# na key do groupby (uma alternativa é só usar tipo_id, na chave). # na key do groupby (uma alternativa é só usar tipo_id, na chave).
qs2 = qs.select_related(attr_tipo).order_by(attr_tipo+'_id') qs2 = qs.select_related(attr_tipo).order_by(attr_tipo + '_id')
for key, values in groupby(qs2, key=sort_function): for key, values in groupby(qs2, key=sort_function):
# poderia usar qtdes[key] = len(list(values)) aqui, mas # poderia usar qtdes[key] = len(list(values)) aqui, mas
@ -76,16 +75,16 @@ def num_materias_por_tipo(qs, attr_tipo='tipo'):
def validar_arquivo(arquivo, nome_campo): def validar_arquivo(arquivo, nome_campo):
if len(arquivo.name) > 200: if len(arquivo.name) > 200:
raise ValidationError( raise ValidationError(
"Certifique-se de que o nome do arquivo no " \ "Certifique-se de que o nome do arquivo no "
"campo '" + nome_campo + "' tenha no máximo 200 caracteres " \ "campo '" + nome_campo + "' tenha no máximo 200 caracteres "
"(ele possui {})".format(len(arquivo.name)) "(ele possui {})".format(len(arquivo.name))
) )
if arquivo.size > MAX_DOC_UPLOAD_SIZE: if arquivo.size > MAX_DOC_UPLOAD_SIZE:
raise ValidationError( raise ValidationError(
"O arquivo " + nome_campo + " deve ser menor que " \ "O arquivo " + nome_campo + " deve ser menor que "
"{0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb".format( "{0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb".format(
(MAX_DOC_UPLOAD_SIZE/1024)/1024, (MAX_DOC_UPLOAD_SIZE / 1024) / 1024,
(arquivo.size/1024)/1024 (arquivo.size / 1024) / 1024
) )
) )
@ -178,7 +177,9 @@ def montar_row_autor(name):
return autor_row return autor_row
#TODO: Esta função é utilizada? # TODO: Esta função é utilizada?
def montar_helper_autor(self): def montar_helper_autor(self):
autor_row = montar_row_autor('nome') autor_row = montar_row_autor('nome')
self.helper = SaplFormHelper() self.helper = SaplFormHelper()
@ -1010,12 +1011,13 @@ def mail_service_configured(request=None):
def lista_anexados(principal, isMateriaLegislativa=True): def lista_anexados(principal, isMateriaLegislativa=True):
anexados_total = [] anexados_total = []
if isMateriaLegislativa: #MateriaLegislativa if isMateriaLegislativa: # MateriaLegislativa
from sapl.materia.models import Anexada from sapl.materia.models import Anexada
anexados_iterator = Anexada.objects.filter(materia_principal=principal) anexados_iterator = Anexada.objects.filter(materia_principal=principal)
else: #DocAdm else: # DocAdm
from sapl.protocoloadm.models import Anexado from sapl.protocoloadm.models import Anexado
anexados_iterator = Anexado.objects.filter(documento_principal=principal) anexados_iterator = Anexado.objects.filter(
documento_principal=principal)
anexadas_temp = list(anexados_iterator) anexadas_temp = list(anexados_iterator)
@ -1024,12 +1026,14 @@ def lista_anexados(principal, isMateriaLegislativa=True):
if isMateriaLegislativa: if isMateriaLegislativa:
if anx.materia_anexada not in anexados_total: if anx.materia_anexada not in anexados_total:
anexados_total.append(anx.materia_anexada) anexados_total.append(anx.materia_anexada)
anexados_anexado = Anexada.objects.filter(materia_principal=anx.materia_anexada) anexados_anexado = Anexada.objects.filter(
materia_principal=anx.materia_anexada)
anexadas_temp.extend(anexados_anexado) anexadas_temp.extend(anexados_anexado)
else: else:
if anx.documento_anexado not in anexados_total: if anx.documento_anexado not in anexados_total:
anexados_total.append(anx.documento_anexado) anexados_total.append(anx.documento_anexado)
anexados_anexado = Anexado.objects.filter(documento_principal=anx.documento_anexado) anexados_anexado = Anexado.objects.filter(
documento_principal=anx.documento_anexado)
anexadas_temp.extend(anexados_anexado) anexadas_temp.extend(anexados_anexado)
if principal in anexados_total: if principal in anexados_total:
anexados_total.remove(principal) anexados_total.remove(principal)
@ -1058,10 +1062,12 @@ class OverwriteStorage(FileSystemStorage):
Muda o comportamento padrão do Django e o faz sobrescrever arquivos de Muda o comportamento padrão do Django e o faz sobrescrever arquivos de
mesmo nome que foram carregados pelo usuário ao invés de renomeá-los. mesmo nome que foram carregados pelo usuário ao invés de renomeá-los.
''' '''
def get_available_name(self, name, max_length=None): def get_available_name(self, name, max_length=None):
if self.exists(name): if self.exists(name):
os.remove(os.path.join(settings.MEDIA_ROOT, name)) os.remove(os.path.join(settings.MEDIA_ROOT, name))
return name return name
def get_tempfile_dir(): def get_tempfile_dir():
return '/tmp' if platform.system() == 'Darwin' else tempfile.gettempdir() return '/tmp' if platform.system() == 'Darwin' else tempfile.gettempdir()

Loading…
Cancel
Save