import random
from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin
from django.core.urlresolvers import reverse_lazy
from django.shortcuts import (
render, redirect, get_object_or_404
)
from django.views.generic import ListView, FormView
from multi_form_view import MultiModelFormView
from .forms import *
from participantes.forms import (
FormsetParticipanteEvento
)
from .models import Evento
from participantes.models import (
Participante, ParticipanteEvento
)
class RegisterEvent(LoginRequiredMixin, FormView):
"""!
Muestra el formulario de registro de usuarios
@author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
@copyright GNU Public License versión 3 (GPLv3)
@date 20-11-2017
@version 1.0.0
"""
template_name = "register.event.html"
form_class = EventoForm
form_participante = FormsetParticipanteEvento
success_url = reverse_lazy('base:inicio')
def get_context_data(self, **kwargs):
context = super(RegisterEvent, self).get_context_data(**kwargs)
if 'form' not in context:
context['form'] = self.form_class()
if 'form2' not in context:
context['form2'] = self.form_participante(queryset=Participante.objects.none())
return context
def post(self, request, *args, **kwargs):
nuevo_evento = self.form_class(request.POST).save(commit=False)
nuevo_participante = self.form_participante(request.POST)
consulta_api = random.randrange(0, 500)
if self.form_class(request.POST).is_valid() and nuevo_participante.is_valid():
nuevo_evento.serial = consulta_api
nuevo_evento.save()
#nuevo_participante.save()
# Control para guardar y asignar participante al evento
for form in nuevo_participante:
if form.cleaned_data.get('DELETE') and form.instance.pk:
form.instance.delete()
else:
instance = form.save(commit=False)
parametros = {
'nombres': instance.nombres,
'apellidos': instance.apellidos,
'correo': instance.correo
}
nuevo_participante, create= Participante.objects.update_or_create(pasaporte=instance.pasaporte, defaults=parametros)
#instance.save()
asigna_evento = ParticipanteEvento(fk_participante=nuevo_participante,
fk_evento=nuevo_evento)
print(asigna_evento.pk)
asigna_evento.save()
messages.success(self.request, "El usaurio %s, ha creado con exito,\
un nuevo envento %s" %
(str(self.request.user),
str(nuevo_evento)))
else:
messages.error(self.request, "Existe un error en el Formualario %s" %
(str(self.form_class.errors, self.form_participante.errors)))
return redirect(self.success_url)
class ListEvent(ListView):
"""!
Muestra el listado de eventos
@author Rodrigo Boet (rboet at cenditel.gob.ve)
@copyright GNU Public License versión 3 (GPLv3)
@date 20-11-2017
@version 1.0.0
"""
model = Evento
template_name = "evento.list.html"
paginate_by = 5
class SignEvent(FormView):
"""!
Muestra el formulario para buscar y luego firmar documento
@author Rodrigo Boet (rboet at cenditel.gob.ve)
@copyright GNU Public License versión 3 (GPLv3)
@date 20-11-2017
@version 1.0.0
"""
form_class = FirmaEventoForm
template_name = "evento.firma.html"
def get_context_data(self, **kwargs):
"""!
Metodo que permite cargar de nuevo valores en los datos de contexto de la vista
@author Rodrigo Boet (rboet at cenditel.gob.ve)
@copyright GNU/GPLv3
@date 20-11-2017
@param self {object} Objeto que instancia la clase
@param kwargs {object} Objeto que contiene los datos de contexto
@return Retorna los datos de contexto
"""
kwargs['nombre_evento'] = Evento.objects.get(pk=int(self.kwargs['pk']))
return super(SignEvent, self).get_context_data(**kwargs)