diff --git a/sapl/audiencia/forms.py b/sapl/audiencia/forms.py index 9f55d3e6d..88dd04e4c 100755 --- a/sapl/audiencia/forms.py +++ b/sapl/audiencia/forms.py @@ -1,3 +1,5 @@ +import logging + from django import forms from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.db import transaction @@ -58,6 +60,8 @@ class AudienciaForm(forms.ModelForm): def clean(self): + logger = logging.getLogger(__name__) + cleaned_data = super(AudienciaForm, self).clean() if not self.is_valid(): return cleaned_data @@ -75,6 +79,8 @@ class AudienciaForm(forms.ModelForm): except ObjectDoesNotExist: msg = _('A matéria %s nº %s/%s não existe no cadastro' ' de matérias legislativas.' % (tipo_materia, materia, ano_materia)) + logger.error('- A matéria %s nº %s/%s não existe no cadastro' + ' de matérias legislativas.' % (tipo_materia, materia, ano_materia)) raise ValidationError(msg) else: cleaned_data['materia'] = materia @@ -83,6 +89,7 @@ class AudienciaForm(forms.ModelForm): campos = [materia, tipo_materia, ano_materia] if campos.count(None) + campos.count('') < len(campos): msg = _('Preencha todos os campos relacionados à Matéria Legislativa') + logger.error('- Algum campo relacionado à Matéria Legislativa não foi preenchido.') raise ValidationError(msg) if not cleaned_data['numero']: @@ -99,6 +106,7 @@ class AudienciaForm(forms.ModelForm): if (self.cleaned_data['hora_fim'] < self.cleaned_data['hora_inicio']): msg = _('A hora de fim não pode ser anterior a hora de início') + logger.error('- Hora de fim anterior à hora de início.') raise ValidationError(msg) return cleaned_data diff --git a/sapl/base/forms.py b/sapl/base/forms.py index 028f2c464..a4d095484 100755 --- a/sapl/base/forms.py +++ b/sapl/base/forms.py @@ -1,4 +1,6 @@ import django_filters +import logging + from crispy_forms.bootstrap import FieldWithButtons, InlineRadios, StrictButton from crispy_forms.helper import FormHelper from crispy_forms.layout import HTML, Button, Div, Field, Fieldset, Layout, Row @@ -74,6 +76,7 @@ class UsuarioCreateForm(ModelForm): 'password1', 'password2', 'user_active', 'roles'] def clean(self): + logger = logging.getLogger(__name__) super(UsuarioCreateForm, self).clean() if not self.is_valid(): @@ -81,6 +84,7 @@ class UsuarioCreateForm(ModelForm): data = self.cleaned_data if data['password1'] != data['password2']: + logger.error('- Erro de validação. Senha incorreta.') raise ValidationError('Senhas informadas são diferentes') return data @@ -148,6 +152,7 @@ class UsuarioEditForm(ModelForm): row3) def clean(self): + logger = logging.getLogger(__name__) super(UsuarioEditForm, self).clean() if not self.is_valid(): @@ -155,6 +160,7 @@ class UsuarioEditForm(ModelForm): data = self.cleaned_data if data['password1'] and data['password1'] != data['password2']: + logger.error('- Erro de validação. Senha incorreta.') raise ValidationError('Senhas informadas são diferentes') return data @@ -166,6 +172,7 @@ class SessaoLegislativaForm(ModelForm): exclude = [] def clean(self): + logger = logging.getLogger(__name__) cleaned_data = super(SessaoLegislativaForm, self).clean() if not self.is_valid(): @@ -179,7 +186,7 @@ class SessaoLegislativaForm(ModelForm): data_inicio_leg = legislatura.data_inicio data_fim_leg = legislatura.data_fim pk = self.initial['id'] if self.initial else None - # Queries para verificar se existem Sessões Legislativas no período selecionado no form + # Queries para verificar se existem Sessões Legislativas no período selecionado no form # Caso onde a data_inicio e data_fim são iguais a de alguma sessão já criada primeiro_caso = Q(data_inicio=data_inicio, data_fim=data_fim) # Caso onde a data_inicio está entre o início e o fim de uma Sessão já existente @@ -209,20 +216,27 @@ class SessaoLegislativaForm(ModelForm): ult = 0 if numero <= ult and flag_edit: + logger.error('- O número da Sessão Legislativa é menor ou igual ' + 'que o de Sessões Legislativas passadas') raise ValidationError('O número da Sessão Legislativa não pode ser menor ou igual ' 'que o de Sessões Legislativas passadas') if data_inicio < data_inicio_leg or \ data_inicio > data_fim_leg: + logger.error('- A data de início da Sessão Legislativa está compreendida ' + 'fora da data início e fim da Legislatura selecionada') raise ValidationError('A data de início da Sessão Legislativa deve estar compreendida ' 'entre a data início e fim da Legislatura selecionada') if data_fim > data_fim_leg or \ data_fim < data_inicio_leg: + logger.error('- A data de fim da Sessão Legislativa está compreendida ' + 'fora da data início e fim da Legislatura selecionada') raise ValidationError('A data de fim da Sessão Legislativa deve estar compreendida ' 'entre a data início e fim da Legislatura selecionada') if data_inicio > data_fim: + logger.error('- Data início superior à data fim') raise ValidationError('Data início não pode ser superior à data fim') data_inicio_intervalo = cleaned_data['data_inicio_intervalo'] @@ -230,6 +244,8 @@ class SessaoLegislativaForm(ModelForm): if data_inicio_intervalo and data_fim_intervalo and \ data_inicio_intervalo > data_fim_intervalo: + logger.error(' - Data início de intervalo' + 'superior à data fim de intervalo') raise ValidationError('Data início de intervalo não pode ser ' 'superior à data fim de intervalo') @@ -238,6 +254,9 @@ class SessaoLegislativaForm(ModelForm): data_inicio_intervalo < data_inicio_leg or \ data_inicio_intervalo > data_fim or \ data_inicio_intervalo > data_fim_leg: + logger.error('- A data de início do intervalo não está compreendida entre ' + 'as datas de início e fim tanto da Legislatura quanto da ' + 'própria Sessão Legislativa') raise ValidationError('A data de início do intervalo deve estar compreendida entre ' 'as datas de início e fim tanto da Legislatura quanto da ' 'própria Sessão Legislativa') @@ -246,6 +265,9 @@ class SessaoLegislativaForm(ModelForm): data_fim_intervalo > data_fim_leg or \ data_fim_intervalo < data_inicio or \ data_fim_intervalo < data_inicio_leg: + logger.error('- A data de fim do intervalo não está compreendida entre ' + 'as datas de início e fim tanto da Legislatura quanto da ' + 'própria Sessão Legislativa') raise ValidationError('A data de fim do intervalo deve estar compreendida entre ' 'as datas de início e fim tanto da Legislatura quanto da ' 'própria Sessão Legislativa') @@ -410,11 +432,14 @@ class AutorForm(ModelForm): if self.instance.user else ''}) def valida_igualdade(self, texto1, texto2, msg): + logger = logging.getLogger(__name__) if texto1 != texto2: + logger.error('- Textos diferentes.') raise ValidationError(msg) return True def clean(self): + logger = logging.getLogger(__name__) super(AutorForm, self).clean() if not self.is_valid(): @@ -424,6 +449,8 @@ class AutorForm(ModelForm): cd = self.cleaned_data if 'action_user' not in cd or not cd['action_user']: + logger.error('- Não Informado se o Autor terá usuário ' + 'vinculado para acesso ao Sistema.') raise ValidationError(_('Informe se o Autor terá usuário ' 'vinculado para acesso ao Sistema.')) @@ -433,6 +460,9 @@ class AutorForm(ModelForm): self.instance.user, get_user_model().USERNAME_FIELD) != cd['username']: if 'status_user' not in cd or not cd['status_user']: + logger.error('- Foi trocado ou removido o usuário deste Autor, ' + 'mas não foi informado como se deve proceder ' + 'com o usuário que está sendo desvinculado?') raise ValidationError( _('Foi trocado ou removido o usuário deste Autor, ' 'mas não foi informado como se deve proceder ' @@ -449,6 +479,7 @@ class AutorForm(ModelForm): if cd['action_user'] == 'A': param_username = {get_user_model().USERNAME_FIELD: cd['username']} if not User.objects.filter(**param_username).exists(): + logger.error('- Não existe usuário com username "%s". ' % cd['username']) raise ValidationError( _('Não existe usuário com username "%s". ' 'Para utilizar esse username você deve selecionar ' @@ -457,11 +488,13 @@ class AutorForm(ModelForm): if cd['action_user'] != 'N': if 'username' not in cd or not cd['username']: + logger.error('- Username não informado.') raise ValidationError(_('O username deve ser informado.')) param_username = { 'user__' + get_user_model().USERNAME_FIELD: cd['username']} if qs_autor.filter(**param_username).exists(): + logger.error('Já existe um Autor para este usuário.') raise ValidationError( _('Já existe um Autor para este usuário.')) @@ -471,6 +504,7 @@ class AutorForm(ModelForm): ainda assim para renderizar um message.danger no topo do form. """ if 'tipo' not in cd or not cd['tipo']: + logger.error('Tipo do Autor não selecionado.') raise ValidationError( _('O Tipo do Autor deve ser selecionado.')) @@ -478,18 +512,23 @@ class AutorForm(ModelForm): if not tipo.content_type: if 'nome' not in cd or not cd['nome']: + logger.error('- Nome do Autor não informado.') raise ValidationError( _('O Nome do Autor deve ser informado.')) else: if 'autor_related' not in cd or not cd['autor_related']: + logger.error('- Registro de %s não escolhido para ser ' + 'vinculado ao cadastro de Autor' % tipo.descricao) raise ValidationError( _('Um registro de %s deve ser escolhido para ser ' 'vinculado ao cadastro de Autor') % tipo.descricao) if not tipo.content_type.model_class().objects.filter( pk=cd['autor_related']).exists(): + logger.error('O Registro definido (%s-%s) não está na base ' + 'de %s.' % cd['autor_related'], cd['q'], tipo.descricao) raise ValidationError( - _('O Registro definido (%s-%s) não está na base de %s.' + _('- O Registro definido (%s-%s) não está na base de %s.' ) % (cd['autor_related'], cd['q'], tipo.descricao)) qs_autor_selected = qs_autor.filter( @@ -497,6 +536,8 @@ class AutorForm(ModelForm): content_type_id=cd['tipo'].content_type_id) if qs_autor_selected.exists(): autor = qs_autor_selected.first() + logger.error('- Já existe um autor Cadastrado para ' + '%s' % autor.autor_related) raise ValidationError( _('Já existe um autor Cadastrado para %s' ) % autor.autor_related) @@ -1000,14 +1041,18 @@ class ConfiguracoesAppForm(ModelForm): def clean_mostrar_brasao_painel(self): + logger = logging.getLogger(__name__) mostrar_brasao_painel = self.cleaned_data.get( 'mostrar_brasao_painel', False) casa = CasaLegislativa.objects.first() if not casa: + logger.error('- Não há casa legislativa relacionada.') raise ValidationError("Não há casa legislativa relacionada") if (not bool(casa.logotipo) and mostrar_brasao_painel): + logger.error('Não há logitipo configurado para esta ' + 'Casa legislativa.') raise ValidationError("Não há logitipo configurado para esta " "Casa legislativa.") @@ -1029,6 +1074,7 @@ class RecuperarSenhaForm(PasswordResetForm): super(RecuperarSenhaForm, self).__init__(*args, **kwargs) def clean(self): + logger = logging.getLogger(__name__) super(RecuperarSenhaForm, self).clean() if not self.is_valid(): @@ -1039,6 +1085,7 @@ class RecuperarSenhaForm(PasswordResetForm): if not email_existente: msg = 'Não existe nenhum usuário cadastrado com este e-mail.' + logger.error('- ' + msg) raise ValidationError(msg) return self.cleaned_data @@ -1093,6 +1140,7 @@ class AlterarSenhaForm(Form): form_actions(label='Alterar Senha')) def clean(self): + logger = logging.getLogger(__name__) super(AlterarSenhaForm, self).clean() if not self.is_valid(): @@ -1104,6 +1152,7 @@ class AlterarSenhaForm(Form): new_password2 = data['new_password2'] if new_password1 != new_password2: + logger.error("'Nova Senha' diferente de 'Confirmar Senha'") raise ValidationError("'Nova Senha' diferente de 'Confirmar Senha'") # TODO: colocar mais regras como: tamanho mínimo, @@ -1111,6 +1160,7 @@ class AlterarSenhaForm(Form): # TODO: senha atual igual a senha anterior, etc if len(new_password1) < 6: + logger.error('- A senha informada não tem o mínimo de 6 caracteres') raise ValidationError("A senha informada deve ter no mínimo 6 caracteres") username = data['username'] @@ -1118,13 +1168,17 @@ class AlterarSenhaForm(Form): user = User.objects.get(username=username) if user.is_anonymous(): + logger.error('- Não é possível alterar senha de usuário anônimo') raise ValidationError("Não é possível alterar senha de usuário anônimo") if not user.check_password(old_password): + logger.error('Senha atual informada não confere ' + 'com a senha armazenada') raise ValidationError("Senha atual informada não confere " "com a senha armazenada") if user.check_password(new_password1): + logger.error('Nova senha igual à senha anterior') raise ValidationError("Nova senha não pode ser igual à senha anterior") return self.cleaned_data diff --git a/sapl/base/views.py b/sapl/base/views.py index ce0e8e0cf..f3d14cb30 100755 --- a/sapl/base/views.py +++ b/sapl/base/views.py @@ -1,4 +1,5 @@ import os +import logging from django.contrib.auth import get_user_model from django.contrib.auth.mixins import PermissionRequiredMixin @@ -165,7 +166,9 @@ class AutorCrud(CrudAux): pk_autor = self.object.id url_reverse = reverse('sapl.base:autor_detail', kwargs={'pk': pk_autor}) + logger = logging.getLogger(__name__) try: + logger.info('- Enviando email na edição de Autores.') kwargs = {} user = self.object.user @@ -193,6 +196,7 @@ class AutorCrud(CrudAux): send_mail(assunto, mensagem, remetente, destinatario, fail_silently=False) except: + logger.error('- Erro no envio de email na edição de Autores.') sapl_logger.error( _('Erro no envio de email na edição de Autores.')) return url_reverse @@ -215,7 +219,10 @@ class AutorCrud(CrudAux): pk_autor = self.object.id url_reverse = reverse('sapl.base:autor_detail', kwargs={'pk': pk_autor}) + logger = logging.getLogger(__name__) try: + logger.info('- Enviando email na criação de Autores.') + kwargs = {} user = self.object.user @@ -245,6 +252,8 @@ class AutorCrud(CrudAux): except: sapl_logger.error( _('Erro no envio de email na criação de Autores.')) + logger.error('- Erro no envio de email na criação de Autores.') + return url_reverse @@ -279,6 +288,9 @@ class RelatorioPresencaSessaoView(FilterView): template_name = 'base/RelatorioPresencaSessao_filter.html' def get_context_data(self, **kwargs): + logger = logging.getLogger(__name__) + + context = super(RelatorioPresencaSessaoView, self).get_context_data(**kwargs) context['title'] = _('Presença dos parlamentares nas sessões') @@ -330,12 +342,17 @@ class RelatorioPresencaSessaoView(FilterView): 'ordemdia_porc': 0 }) try: + logger.info('Tentando obter presença do parlamentar.') sessao_count = presenca_sessao.get(parlamentar_id=p.id)[1] except ObjectDoesNotExist: + logger.error('Erro ao obter presença do parlamentar. Definido como 0.') sessao_count = 0 try: + # Presenças de cada Ordem do Dia + logger.info('Tentando obter presença de cada Ordem do Dia.') ordemdia_count = presenca_ordem.get(parlamentar_id=p.id)[1] except ObjectDoesNotExist: + logger.error('Erro ao obter presença de cada Ordem do Dia. Definido como 0.') ordemdia_count = 0 parlamentares_presencas[i].update({ @@ -835,10 +852,14 @@ class CasaLegislativaCrud(CrudAux): class HelpTopicView(TemplateView): def get_template_names(self): + logger = logging.getLogger(__name__) + topico = self.kwargs['topic'] try: + logger.info('- Tentando obter template %s.html.' % topico) get_template('ajuda/%s.html' % topico) except TemplateDoesNotExist: + logger.error('- Erro ao obter template %s.html. Template não existe.' % topico) raise Http404() return ['ajuda/%s.html' % topico]