Sistema de Informações Gerenciais do Interlegis
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

185 lines
7.0 KiB

# -*- coding: utf-8 -*-
from __future__ import absolute_import
from braces.views import FormValidMessageMixin
from django.conf import settings
from django.contrib.auth.mixins import LoginRequiredMixin
from django.core.urlresolvers import reverse
from django.utils import timezone
from django.views.generic import DetailView, FormView, TemplateView
from django.core.mail import send_mail
from sigi.apps.crud.utils import str2bool
from django.contrib.auth.tokens import default_token_generator
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from django.utils.encoding import force_bytes
from sigi.apps.crud.base import (Crud, CrudBaseMixin, CrudCreateView,
CrudListView, CrudUpdateView, CrudDetailView)
from .forms import (HabilitarEditForm, MudarSenhaForm, UsuarioEditForm,
UsuarioForm)
from .models import Usuario, ConfirmaEmail, User
from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect
class UsuarioCrud(Crud):
model = Usuario
help_path = u''
class CreateView(CrudCreateView):
form_class = UsuarioForm
form_valid_message = u'Cadastro realizado com sucesso. Aguarde a \
validação do seu perfil.'
def get_success_url(self):
# TODO: colocar isso aqui em get_success_url parece esquisito
# kwargs = {}
# user = User.objects.get(email=self.request.POST.get(u'email'))
# confirmar_email = ConfirmaEmail(
# email=user.email,
# token=default_token_generator.make_token(user),
# user_id=urlsafe_base64_encode(force_bytes(user.pk)))
# confirmar_email.save()
#
# kwargs[u'token'] = confirmar_email.token
# kwargs[u'uidb64'] = confirmar_email.user_id
# assunto = u"Cadastro no Sistema de Atendimento ao Usuário"
# full_url = self.request.get_raw_uri(),
# url_base = full_url[0][:full_url[0].find(u'usuario') - 1],
# mensagem = (u"Este e-mail foi utilizado para fazer cadastro no " +
# u"Sistema de Atendimento ao Usuário do Interlegis.\n" +
# u"Caso você não tenha feito este cadastro, por favor" +
# u" ignore esta mensagem.\n" + url_base[0] +
# reverse(u'usuarios:confirmar_email', kwargs=kwargs))
# remetente = settings.EMAIL_HOST_USER
# destinatario = [confirmar_email.email,
# settings.EMAIL_HOST_USER]
# send_mail(assunto, mensagem, remetente, destinatario,
# fail_silently=False)
return reverse(u'index_atendimento')
class ListView(LoginRequiredMixin, CrudListView):
pass
class UpdateView(LoginRequiredMixin, CrudUpdateView):
form_class = UsuarioEditForm
def get_initial(self):
if self.get_object():
tel1 = self.get_object().primeiro_telefone
self.initial[u'primeiro_tipo'] = tel1.tipo
self.initial[u'primeiro_ddd'] = tel1.ddd
self.initial[u'primeiro_numero'] = tel1.numero
self.initial[u'primeiro_principal'] = tel1.principal
tel2 = self.get_object().segundo_telefone
if tel2:
self.initial[u'segundo_tipo'] = tel2.tipo
self.initial[u'segundo_ddd'] = tel2.ddd
self.initial[u'segundo_numero'] = tel2.numero
self.initial[u'segundo_principal'] = tel2.principal
return self.initial.copy()
@property
def layout_key(self):
return u'UsuarioEdit'
class DetailView(LoginRequiredMixin, CrudDetailView):
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
tel1 = context[u'object'].primeiro_telefone
tel1 = [(u'Primeiro Telefone'),
(u'[%s] - %s' % (tel1.ddd, tel1.numero))]
tel2 = context[u'object'].segundo_telefone or u''
if tel2:
tel2 = [(u'Segundo Telefone'),
(u'[%s] - %s' % (tel2.ddd, tel2.numero))]
context[u'telefones'] = [tel1, tel2]
return context
@property
def layout_key(self):
return u'UsuarioDetail'
class BaseMixin(CrudBaseMixin):
list_field_names = [u'username', u'nome_completo',
u'data_criacao', u'habilitado',
u'data_ultima_atualizacao']
class HabilitarDetailView(CrudDetailView):
template_name = u"usuarios/habilitar_detail.html"
def get(self, request, *args, **kwargs):
context = {}
context[u'pk'] = self.kwargs[u'pk']
context[u'usuario'] = Usuario.objects.get(pk=self.kwargs[u'pk'])
return self.render_to_response(context)
class HabilitarEditView(FormView):
template_name = u"crud/form.html"
def get(self, request, *args, **kwargs):
context = {}
usuario = Usuario.objects.get(pk=self.kwargs[u'pk'])
form = HabilitarEditForm(instance=usuario)
context[u'pk'] = self.kwargs[u'pk']
context[u'form'] = form
return self.render_to_response(context)
def post(self, request, *args, **kwargs):
form = HabilitarEditForm(request.POST)
usuario = Usuario.objects.get(pk=self.kwargs[u'pk'])
usuario.habilitado = str2bool(form.data[u'habilitado'])
usuario.data_ultima_atualizacao = timezone.now()
usuario.save()
return self.form_valid(form)
def get_success_url(self):
return reverse(u'usuarios:usuario_list')
class MudarSenhaView(FormValidMessageMixin, FormView):
template_name = u"crud/form.html"
form_class = MudarSenhaForm
form_valid_message = u'Senha alterada com sucesso. É necessário fazer \
login novamente.'
def get(self, request, *args, **kwargs):
context = {}
usuario = Usuario.objects.get(pk=self.kwargs[u'pk'])
form = MudarSenhaForm(instance=usuario)
context[u'pk'] = self.kwargs[u'pk']
context[u'form'] = self.get_form()
return self.render_to_response(context)
def form_valid(self, form):
usuario = Usuario.objects.get(pk=self.kwargs[u'pk'])
u = usuario.user
u.set_password(form.cleaned_data[u'password'])
u.save()
return super(MudarSenhaView, self).form_valid(form)
def get_success_url(self):
return reverse(u'index_atendimento')
class ConfirmarEmailView(TemplateView):
template_name = u"usuarios/confirma_email.html"
def get(self, request, *args, **kwargs):
uid = urlsafe_base64_decode(self.kwargs[u'uidb64'])
user = User.objects.get(id=uid)
user.is_active = True
user.save()
context = self.get_context_data(**kwargs)
return self.render_to_response(context)