# Create your views here.
# encoding:utf-8
from pyjasperclient import JasperClient
from django.http import HttpResponseRedirect, HttpResponse
from django.utils.encoding import smart_str
from servicio.models import Alumno, Area, Pregunta, Resultado, Respuesta
from servicio.forms import *
from django.http import HttpResponseRedirect, HttpResponse
from django.template import RequestContext, loader
from django.shortcuts import get_object_or_404, render, render_to_response, redirect
from django.core.urlresolvers import reverse, reverse_lazy
from django.forms import ModelForm
from django.forms.formsets import formset_factory
from django.db.models import Count
from django.contrib import messages
from django.forms import ModelForm
from django.contrib import auth
from django.contrib.auth.decorators import login_required
from django.template.response import TemplateResponse
from datetime import datetime
from django.core.paginator import Paginator, InvalidPage, EmptyPage
from django.core.mail import send_mail, BadHeaderError, EmailMultiAlternatives #libreria para correo
from django.conf import settings
from django.views.generic import ListView, DetailView, CreateView, View
def login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = auth.authenticate(username=username, password=password)
mensaje = ''
if user is not None and user.is_active:
# Correct password, and the user is marked "active"
auth.login(request, user)
# Redirect to a success page.
return HttpResponseRedirect('/areas/administrador/')
else:
messages.error(request, 'error de autenticacion')
return TemplateResponse(request, 'index.html', {'msj': mensaje})
else:
return HttpResponseRedirect('/areas/acceder/')
"""
Desloguea al usuario y regresa al template principal.html
"""
@login_required(login_url='/areas/acceder/')
def administrador(request):
mensaje = ''
return TemplateResponse(request, 'dashboard_base.html', {'msj': mensaje})
@login_required(login_url='/areas/')
def logout(request):
auth.logout(request)
template = loader.get_template('principal.html')
context = RequestContext(request, {})
return HttpResponse(template.render(context))
"""
Se manda a llamar al template index.html para iniciar sesion
"""
def acceder(request):
return render_to_response('index.html', context_instance=RequestContext(request))
def principal(request):
template = loader.get_template('principal.html')
context = RequestContext(request, {
})
return HttpResponse(template.render(context))
@login_required(login_url='/areas/acceder/')
def perfil(request, user_id):
return TemplateResponse(request, 'perfil.html')
'''
Se manda a llamar al template cuestionarioform.html que es el formulario para registrar el cuestionario y luego
devuelve todos los registros con el template mostrarcuestionario.html
'''
@login_required(login_url='/areas/acceder/')
def crearcuestionario(request):
if request.method == 'POST':
form = CuestionarioForm(request.POST)
if form.is_valid():
form.save()
datos = Cuestionario.objects.all()
messages.success(request, 'Cuestionario registrada')
return HttpResponseRedirect('/areas/mostrarcuestionario/')
else:
form = CuestionarioForm()
area_side = 'closed'
menu_alumno = 'closed'
menu_pregunta = 'closed'
menu_respuesta = 'closed'
menu_resultado = 'closed'
menu_cuestionario = 'active'
return render_to_response('cuestionarioform.html',
{'form': form, 'area_side': area_side, 'menu_alumno': menu_alumno,
'menu_pregunta': menu_pregunta, 'menu_respuesta': menu_respuesta,
'menu_resultado': menu_resultado}, context_instance=RequestContext(request))
'''
Muestra todos los cuestionarios registrados, con el template mostrarcuestionario.html
'''
@login_required(login_url='/areas/acceder/')
def mostrarcuestionario(request):
area_side = 'closed'
menu_alumno = 'closed'
menu_pregunta = 'closed'
menu_respuesta = 'closed'
menu_resultado = 'closed'
menu_cuestionario = 'active'
datos = Cuestionario.objects.all().order_by('id')
return render_to_response('mostrarcuestionario.html',
{'datos': datos, 'area_side': area_side, 'menu_alumno': menu_alumno,
'menu_pregunta': menu_pregunta, 'menu_respuesta': menu_respuesta,
'menu_resultado': menu_resultado}, context_instance=RequestContext(request))
'''
Muestra los datos de un cuestionario, permite su edicion, y vuelve a mostrar
el template con todas los cuestionarios registrados
'''
@login_required(login_url='/areas/acceder/')
def editarcuestionario(request, cuestionario_id):
area_side = 'closed'
menu_alumno = 'closed'
menu_pregunta = 'closed'
menu_respuesta = 'closed'
menu_resultado = 'closed'
menu_cuestionario = 'active'
cuestionario = Cuestionario.objects.get(pk=cuestionario_id)
if request.method == 'POST':
form = CuestionarioForm(request.POST, instance=cuestionario)
if form.is_valid():
form.save()
datos = Cuestionario.objects.all()
messages.success(request, 'Se actualizo el cuestionario')
return HttpResponseRedirect('/areas/mostrarcuestionario/')
else:
form = CuestionarioForm(instance=cuestionario)
return render_to_response('cuestionarioform.html',
{'form': form, 'cuestionario': cuestionario, 'area_side': area_side,
'menu_alumno': menu_alumno, 'menu_pregunta': menu_pregunta,
'menu_respuesta': menu_respuesta, 'menu_resultado': menu_resultado},
context_instance=RequestContext(request))
'''
Permite eliminar un registro del modelo:cuestionario y muestra nuevamente los cuestionarios registrados
'''
@login_required(login_url='/areas/acceder/')
def borrarcuestionario(request, cuestionario_id):
cuestionario = Cuestionario.objects.get(pk=cuestionario_id)
cuestionario.delete()
datos = Cuestionario.objects.all()
messages.warning(request, 'Se elimino el cuestionario')
return HttpResponseRedirect('/areas/mostrarcuestionario/')
"""
Se manda a llamar al template areaform.html que es el formulario para registrar el area y luego
devuelve todos los registros con el template mostrararea.html
"""
@login_required(login_url='/areas/acceder/')
def creararea(request):
if request.method == 'POST':
form = AreaForm(request.POST)
if form.is_valid():
form.save()
datos = Area.objects.all()
messages.success(request, 'Área registrada')
return HttpResponseRedirect('/areas/mostrararea/')
else:
form = AreaForm()
area_side = 'active'
menu_alumno = 'closed'
menu_pregunta = 'closed'
menu_respuesta = 'closed'
menu_resultado = 'closed'
menu_cuestionario = 'closed'
return render_to_response('areaform.html', {'form': form, 'area_side': area_side, 'menu_alumno': menu_alumno,
'menu_pregunta': menu_pregunta, 'menu_respuesta': menu_respuesta,
'menu_resultado': menu_resultado},
context_instance=RequestContext(request))
@login_required(login_url='/areas/acceder/')
def mostrararea(request):
area_side = 'active'
menu_alumno = 'closed'
menu_pregunta = 'closed'
menu_respuesta = 'closed'
menu_resultado = 'closed'
menu_cuestionario = 'closed'
datos = Area.objects.all().order_by('id')
return render_to_response('mostrararea.html', {'datos': datos, 'area_side': area_side, 'menu_alumno': menu_alumno,
'menu_pregunta': menu_pregunta, 'menu_respuesta': menu_respuesta,
'menu_resultado': menu_resultado},
context_instance=RequestContext(request))
"""
Muestra los datos de un area especifica , permite su edicion, y vuelve a mostrar
el template con todas las areas registradas
"""
@login_required(login_url='/areas/acceder/')
def editararea(request, area_id):
area_side = 'active'
menu_alumno = 'closed'
menu_pregunta = 'closed'
menu_respuesta = 'closed'
menu_resultado = 'closed'
menu_cuestionario = 'closed'
area = Area.objects.get(pk=area_id)
if request.method == 'POST':
form = AreaForm(request.POST, instance=area)
if form.is_valid():
form.save()
datos = Area.objects.all()
messages.success(request, 'Se actualizo el área')
return HttpResponseRedirect('/areas/mostrararea/')
else:
form = AreaForm(instance=area)
return render_to_response('areaform.html',
{'form': form, 'area': area, 'area_side': area_side, 'menu_alumno': menu_alumno,
'menu_pregunta': menu_pregunta, 'menu_respuesta': menu_respuesta,
'menu_resultado': menu_resultado}, context_instance=RequestContext(request))
"""
Permite eliminar un registro del modelo:area y muestra nuevamente las areas registradas
"""
@login_required(login_url='/areas/acceder/')
def borrararea(request, area_id):
area = Area.objects.get(pk=area_id)
area.delete()
datos = Area.objects.all()
messages.warning(request, 'Se elimino el área')
return HttpResponseRedirect('/areas/mostrararea/')
"""
Se manda a llamar al template directivoform.html que es el formulario para registrar el directivo y luego
devuelve todos los registros con el template mostrardirectivo.html
"""
@login_required(login_url='/areas/acceder/')
def creardirectivo(request):
if request.method == 'POST':
form = DirectivoForm(request.POST)
if form.is_valid():
form.save()
datos = Directivo.objects.all().order_by('nombre')
messages.success(request, 'Directivo registrado')
return HttpResponseRedirect('/areas/mostrardirectivo/')
else:
form = DirectivoForm()
area_side = 'active'
menu_alumno = 'closed'
menu_pregunta = 'closed'
menu_respuesta = 'closed'
menu_resultado = 'closed'
menu_cuestionario = 'closed'
return render_to_response('directivoform.html', {'form': form, 'area_side': area_side, 'menu_alumno': menu_alumno,
'menu_pregunta': menu_pregunta, 'menu_respuesta': menu_respuesta,
'menu_resultado': menu_resultado},
context_instance=RequestContext(request))
"""
Muestra todas las directivos registrados, con el template mostrardirectivo.html
"""
@login_required(login_url='/areas/acceder/')
def mostrardirectivo(request):
area_side = 'active'
menu_alumno = 'closed'
menu_pregunta = 'closed'
menu_respuesta = 'closed'
menu_resultado = 'closed'
menu_cuestionario = 'closed'
datos = Directivo.objects.all().order_by('id')
return render_to_response('mostrardirectivo.html',
{'datos': datos, 'area_side': area_side, 'menu_alumno': menu_alumno,
'menu_pregunta': menu_pregunta, 'menu_respuesta': menu_respuesta,
'menu_resultado': menu_resultado},
context_instance=RequestContext(request))
"""
Muestra los datos de un area especifica , permite su edicion, y vuelve a mostrar
el template con todas las areas registradas
"""
@login_required(login_url='/areas/acceder/')
def editardirectivo(request, directivo_id):
area_side = 'active'
menu_alumno = 'closed'
menu_pregunta = 'closed'
menu_respuesta = 'closed'
menu_resultado = 'closed'
menu_cuestionario = 'closed'
directivo = Directivo.objects.get(pk=directivo_id)
if request.method == 'POST':
form = DirectivoForm(request.POST, instance=directivo)
if form.is_valid():
form.save()
datos = Directivo.objects.all()
messages.success(request, 'Se actualizo el Directivo')
return HttpResponseRedirect('/areas/mostrardirectivo/')
else:
form = DirectivoForm(instance=directivo)
return render_to_response('directivoform.html',
{'form': form, 'directivo': directivo, 'area_side': area_side, 'menu_alumno': menu_alumno,
'menu_pregunta': menu_pregunta, 'menu_respuesta': menu_respuesta,
'menu_resultado': menu_resultado}, context_instance=RequestContext(request))
"""
Permite eliminar un registro del modelo:Directivo y muestra nuevamente las Directivos registrados
"""
@login_required(login_url='/areas/acceder/')
def borrardirectivo(request, directivo_id):
directivo = Directivo.objects.get(pk=directivo_id)
directivo.delete()
datos = Directivo.objects.all()
messages.warning(request, 'Se elimino el directivo')
return HttpResponseRedirect('/areas/mostrardirectivo/')
"""
Se manda a llamar al template preguntaform.html que es el formulario para registrar las preguntas y luego
devuelve todos los registros con el template mostrarpregunta.html
"""
@login_required(login_url='/areas/acceder/')
def crearpregunta(request):
if request.method == 'POST':
form = CrearPreguntaForm(request.POST)
if form.is_valid():
respuesta = request.POST.get('respuesta')
acierto = request.POST.get('acierto')
if (acierto == None):
acierto = False
pregunta = form.save()
res = Respuesta(pregunta=pregunta, nom_respuesta=respuesta, acierto=acierto)
res.save()
messages.success(request, 'Pregunta registrada')
#return HttpResponseRedirect('/expediente/%s/datosmenor/'%(expediente.menor.id)
return HttpResponseRedirect('/areas/%s/editarpreguntasres/'%(pregunta.id))
#return HttpResponseRedirect('/areas/mostrarpregunta/')
else:
form = CrearPreguntaForm()
pregunta_side = 'active'
menu_alumno = 'closed'
menu_area = 'closed'
menu_respuesta = 'closed'
menu_resultado = 'closed'
menu_cuestionario = 'closed'
return render_to_response('crearpreguntaform.html',
{'form': form}, context_instance=RequestContext(request))
"""
Muestra todas las preguntas registradas con las opciones de editar y eliminar
"""
@login_required(login_url='/areas/acceder/')
def mostrarpregunta(request):
pregunta_side = 'active'
menu_alumno = 'closed'
menu_area = 'closed'
menu_respuesta = 'closed'
menu_resultado = 'closed'
menu_cuestionario = 'closed'
datos = Pregunta.objects.all().order_by('area')
return render_to_response('mostrarpregunta.html',
{'datos': datos, 'pregunta_side': pregunta_side, 'menu_alumno': menu_alumno,
'menu_area': menu_area, 'menu_respuesta': menu_respuesta,
'menu_resultado': menu_resultado}, context_instance=RequestContext(request))
'''
funcion que actualiza y redirecciona asi mismo pero con el id de la pregunta que acaba de actualizar
'''
@login_required(login_url='/areas/acceder/')
def editarpreguntasres(request, pregunta_id):
pregunta = Pregunta.objects.get(pk=pregunta_id)
if request.method == 'POST':
form = CrearPreguntaForm(request.POST, instance=pregunta)
if form.is_valid():
respuesta = request.POST.get('respuesta')
acierto = request.POST.get('acierto')
if (acierto == None):
acierto = False
pregunta=form.save()
res = Respuesta(pregunta=pregunta, nom_respuesta=respuesta, acierto=acierto)
res.save()
messages.success(request, 'Pregunta registrada')
return HttpResponseRedirect('/areas/%s/editarpreguntasres/'%(pregunta.id))
#return HttpResponseRedirect('/areas/mostrarpregunta/')
else:
msj = 'Favor de llenar los campos requeridos'
messages.success(request, msj)
else:
form = CrearPreguntaForm(instance=pregunta)
return render_to_response('crearpreguntaform.html',
{'form': form, 'pregunta': pregunta}, context_instance=RequestContext(request))
"""
Devuelve una lista de respuesta, listaareas y la pregunta , que seran necesarias para crear dinamicamente el "preguntaform.html"
"""
@login_required(login_url='/areas/acceder/')
def editarpreguntas(request, pregunta_id):
listarespuesta = Respuesta.objects.filter(pregunta_id=pregunta_id)
pregunta = Pregunta.objects.get(pk=pregunta_id)
listaareas = Area.objects.all()
#res=Resultado.objects.all().filter(respuesta__pregunta__area=y.id )
return render_to_response('preguntaform.html', {'listaareas': listaareas, 'listarespuesta': listarespuesta,'pregunta':pregunta}, context_instance=RequestContext(request))
'''
funcion que sirve para editar la pregunta, area y las respuestas
'''
@login_required(login_url='/areas/acceder/')
def editarpreguntarespuestas(request, pregunta_id):
pregunta = request.POST.get("pregunta")
area = request.POST.get("areas")
a = Area.objects.get(pk=area)
acierto = request.POST.getlist("acierto")
if request.method == 'POST':
pre = Pregunta(pk=pregunta_id, nombre_pregunta=pregunta, area=a)
pre.save()
res= Respuesta.objects.filter(pregunta_id=pregunta_id)
for r in res:
print(r,'r')
if request.POST.get(u'%s' % r.id, ''):
e1 = request.POST.get(u'%s' % r.id)
e2 = request.POST.get(u'%s' % r)
print(e1, 'e1')
print(e2, 'e2')
if (e2 == '1'):
re = Respuesta(pk=r.id, pregunta_id=pregunta_id, nom_respuesta=e1, acierto = True)
re.save()
else:
re = Respuesta(pk=r.id, pregunta_id=pregunta_id, nom_respuesta=e1, acierto = False)
re.save()
messages.success(request, 'Datos Actualizados')
datos = Pregunta.objects.all().order_by('area')
return HttpResponseRedirect('/areas/mostrarpregunta/')
else:
form = PreguntaForm(instance=pregunta)
return render_to_response('preguntaform.html', {'form': form},
context_instance=RequestContext(request))
"""
Permite eliminar un registro del modelo:Pregunta y muestra nuevamente las preguntas registradas
"""
@login_required(login_url='/areas/acceder/')
def borrarpregunta(request, pregunta_id):
pregunta = Pregunta.objects.get(pk=pregunta_id)
pregunta.delete()
datos = Pregunta.objects.all().order_by('area')
messages.warning(request, 'Se elimino la pregunta')
return HttpResponseRedirect('/areas/mostrarpregunta/')
"""
Muestra todas las respuestas registradas con las opciones de editar y eliminar
"""
@login_required(login_url='/areas/acceder/')
def crearrespuesta(request):
if request.method == 'POST':
form = RespuestaForm(request.POST)
if form.is_valid(): # valida los datos del formulario
form.save()
datos = Respuesta.objects.all().order_by('pregunta')
messages.success(request, 'Respuesta registrada')
return HttpResponseRedirect('/areas/mostrarrespuesta/')
#return render_to_response('mostrarrespuesta.html',{'datos':datos},context_instance=RequestContext(request))
else:
form = RespuestaForm()
respuesta_side = 'active'
menu_alumno = 'closed'
menu_area = 'closed'
menu_cuestionario = 'Active'
menu_pregunta = 'closed'
menu_resultado = 'closed'
return render_to_response('respuestaform.html',
{'form': form, 'respuesta_side': respuesta_side, 'menu_alumno': menu_alumno,
'menu_area': menu_area, 'menu_pregunta': menu_pregunta, 'menu_resultado': menu_resultado,
'menu_cuestionario': menu_cuestionario}, context_instance=RequestContext(request))
@login_required(login_url='/areas/acceder/')
def mostrarrespuesta(request):
datos = Respuesta.objects.all().order_by('pregunta')
respuesta_side = 'active'
menu_alumno = 'closed'
menu_area = 'closed'
menu_pregunta = 'closed'
menu_resultado = 'closed'
menu_cuestionario = 'closed'
return render_to_response('mostrarrespuesta.html',
{'datos': datos, 'respuesta_side': respuesta_side, 'menu_alumno': menu_alumno,
'menu_area': menu_area, 'menu_pregunta': menu_pregunta,
'menu_resultado': menu_resultado}, context_instance=RequestContext(request))
"""
Muestra los datos de un respuesta especifica , permite su edicion, y vuelve a mostrar
el template con todas las respuesta registradas
"""
@login_required(login_url='/areas/acceder/')
def editarrespuesta(request, respuesta_id):
respuesta = Respuesta.objects.get(pk=respuesta_id)
pregunta = Pregunta.objects.get(pk=respuesta.pregunta.id)
listarespuesta= Respuesta.objects.filter(pregunta_id=pregunta)
listaareas=Area.objects.all()
return render_to_response('preguntaform.html', {'listaareas': listaareas, 'listarespuesta': listarespuesta,'pregunta':pregunta}, context_instance=RequestContext(request))
"""
Permite eliminar un registro del modelo:Respuesta y muestra nuevamente las respuestas registradas
"""
@login_required(login_url='/areas/acceder/')
def borrarrespuesta(request, respuesta_id):
respuesta = Respuesta.objects.get(pk=respuesta_id)
respuesta.delete()
datos = Respuesta.objects.all().order_by('pregunta')
messages.warning(request, 'Se elimino la respuesta')
return HttpResponseRedirect('/areas/mostrarrespuesta/')
@login_required(login_url='/areas/acceder/')
def eliminarrespuestas(request, respuesta_id):
respuesta = Respuesta.objects.get(pk=respuesta_id)
respuesta.delete()
datos = Respuesta.objects.all().order_by('pregunta')
messages.warning(request, 'Se elimino la respuesta')
return HttpResponseRedirect('/areas/mostrarpregunta/')
"""
Se manda a llamar al template respuestaform.html que es el formulario para registrar las respuestas y luego
devuelve todos los registros con el template mostrarrespuesta.html
"""
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def nuevoalumno(request):
if request.method == 'POST':
form = AlumnoForm(request.POST)
if form.is_valid():
#form.save()
nombre_alumno = form.cleaned_data['nombre_alumno']
appat = form.cleaned_data['appat']
apma = form.cleaned_data['apma']
area = request.POST.get("area")
dependencia = form.cleaned_data['dependencia']
d = request.POST.get('dependencia')
c = form.cleaned_data['cuestionario']
cuestionario =Cuestionario.objects.get(pk=c.id)
#dependencia = form.cleaned_data['dependencia_id'],
lista_preguntas = Pregunta.objects.filter(area__cuestionario_id=c).order_by('?')
#lista_respuesta = Respuesta.objects.all() # Se envia todos los datos necesarios para crear el cuestionario
paqueteP=RequestContext(request,{'lista_preguntas':lista_preguntas, 'nombre_alumno':nombre_alumno,'appat':appat,'apma':apma,
'dependencia':dependencia,'area':area,'cuestionario':cuestionario})
#paqueteP = RequestContext(request,
#{'lista_preguntas': lista_preguntas, 'lista_respuesta': lista_respuesta, 'cuestionario': cuestionario})
return render_to_response('Cuestionario.html', paqueteP, context_instance=RequestContext(request))
else:
form = AlumnoForm()
return render_to_response('alumnoform.html', {'form': form}, context_instance=RequestContext(request))
"""
Muestra todas los alumnos registrados con las opciones de editar y eliminar
"""
@login_required(login_url='/areas/acceder/')
def detallecuestionario(request, alumno_id):
datos = Alumno.objects.get(id=alumno_id)
lista_preguntas = Pregunta.objects.filter(area__cuestionario_id=datos.cuestionario.id)
lista_resultados = Resultado.objects.filter(alumno_id=alumno_id)
lista_respuestas = Respuesta.objects.filter(pregunta__in=lista_preguntas).exclude(resultado__in=lista_resultados)
#for x in respuestas:
#lista_respuestas = Respuesta.objects.filter(pk=x.respuesta_id)
#for y in lista_respuestas:
# print(y.pregunta,'pregunta')
#print(y.nom_respuesta,'respuesta')
#respuestas = Resultado.objects.filter(encuesta_id=pk)
return render_to_response('detalle_cuestionario.html',
{'lista_resultados': lista_resultados, 'datos': datos, 'lista_preguntas': lista_preguntas,
'lista_respuestas': lista_respuestas}, context_instance=RequestContext(request))
@login_required(login_url='/areas/acceder/')
def mostraralumno(request):
datos = Alumno.objects.all().order_by('id')
alumno_side = 'active'
menu_area = 'closed'
menu_pregunta = 'closed'
menu_respuesta = 'closed'
menu_resultado = 'closed'
menu_cuestionario = 'closed'
return render_to_response('mostraralumno.html', {'datos': datos, 'alumno_side': alumno_side, 'menu_area': menu_area,
'menu_pregunta': menu_pregunta, 'menu_respuesta': menu_respuesta,
'menu_resultado': menu_resultado},
context_instance=RequestContext(request))
"""
Muestra los datos de un alumno especifico , permite su edicion, y vuelve a mostrar
el template con todas los alumnos registrados
"""
@login_required(login_url='/areas/acceder/')
def detallealumno(request, alumno_id):
datos = Alumno.objects.get(id=alumno_id)
datosid = str(datos.id)
con = Cuestionario.objects.filter(id=datos.cuestionario.id)
#area = Area.objects.filter(cuestionario_id = con)
ciclopreguntas = Pregunta.objects.filter(area__cuestionario__alumno__pk=alumno_id)
for pregunta in ciclopreguntas:
cicloresultado = Resultado.objects.filter(alumno__pk=alumno_id, respuesta__pregunta=pregunta)
for resultado in cicloresultado:
if resultado.cont_respuesta == 0:
Resultado.objects.filter(alumno__pk=alumno_id, respuesta__pregunta=pregunta).update(cont_respuesta=0)
for pregunta in ciclopreguntas:
respuestascorrectas=Respuesta.objects.filter(pregunta=pregunta,acierto=True)
resultadoscorrectos=Resultado.objects.filter(respuesta__pregunta=pregunta,respuesta__acierto=True,alumno__pk=alumno_id)
if respuestascorrectas.count()!=resultadoscorrectos.count():
resultadoscorrectos.update(cont_respuesta=0)
#lista_alumnos= Alumno.objects.all().filter(alumno=alumno_id)
lista_areas = Area.objects.filter(cuestionario_id=con)
res = []
total_area = []
alum2 = {}
total = {}
alum = {}
for y in lista_areas:
res = Resultado.objects.values('respuesta__pregunta').filter(respuesta__pregunta__area=y.id, alumno=alumno_id,
cont_respuesta=1).annotate(preguntacount=Count('respuesta__pregunta'))
alum[y.id] = res.count()
alum2[alumno_id] = alum
for y in lista_areas:
total_area = Pregunta.objects.all().filter(area=y.id)
total[y.id] = total_area.count()
alumno_side = 'active'
menu_area = 'closed'
menu_pregunta = 'closed'
menu_respuesta = 'closed'
menu_resultado = 'closed'
menu_cuestionario = 'closed'
return render_to_response('detallealumno.html',
{'datosid': datosid, 'lista_areas': lista_areas, 'alum2': alum2, 'total': total,
'datos': datos, 'alumno_side': alumno_side, 'menu_area': menu_area,
'menu_pregunta': menu_pregunta, 'menu_respuesta': menu_respuesta,
'menu_resultado': menu_resultado}, context_instance=RequestContext(request))
@login_required(login_url='/areas/acceder/')
def graficaralumno(request, alumno_id):
datos = Alumno.objects.get(id=alumno_id)
datosid = str(datos.id)
con = Cuestionario.objects.filter(id=datos.cuestionario.id)
#area = Area.objects.filter(cuestionario_id = con)
ciclopreguntas = Pregunta.objects.filter(area__cuestionario__alumno__pk=alumno_id)
for pregunta in ciclopreguntas:
cicloresultado = Resultado.objects.filter(alumno__pk=alumno_id, respuesta__pregunta=pregunta)
for resultado in cicloresultado:
if resultado.cont_respuesta == 0:
Resultado.objects.filter(alumno__pk=alumno_id, respuesta__pregunta=pregunta).update(cont_respuesta=0)
for pregunta in ciclopreguntas:
respuestascorrectas=Respuesta.objects.filter(pregunta=pregunta,acierto=True)
resultadoscorrectos=Resultado.objects.filter(respuesta__pregunta=pregunta,respuesta__acierto=True,alumno__pk=alumno_id)
if respuestascorrectas.count()!=resultadoscorrectos.count():
resultadoscorrectos.update(cont_respuesta=0)
#lista_alumnos= Alumno.objects.all().filter(alumno=alumno_id)
lista_areas = Area.objects.filter(cuestionario_id=con)
res = []
total_area = []
alum2 = {}
total = {}
alum = {}
for y in lista_areas:
res = Resultado.objects.values('respuesta__pregunta').filter(respuesta__pregunta__area=y.id, alumno=alumno_id,
cont_respuesta=1).annotate(preguntacount=Count('respuesta__pregunta'))
alum[y.id] = res.count()
alum2[alumno_id] = alum
for y in lista_areas:
total_area = Pregunta.objects.all().filter(area=y.id)
total[y.id] = total_area.count()
alumno_side = 'active'
menu_area = 'closed'
menu_pregunta = 'closed'
menu_respuesta = 'closed'
menu_resultado = 'closed'
menu_cuestionario = 'closed'
return render_to_response('conteoRespuestas.html',
{'datosid': datosid, 'lista_areas': lista_areas, 'alum2': alum2, 'total': total,
'datos': datos, 'alumno_side': alumno_side, 'menu_area': menu_area,
'menu_pregunta': menu_pregunta, 'menu_respuesta': menu_respuesta,
'menu_resultado': menu_resultado}, context_instance=RequestContext(request))
@login_required(login_url='/areas/acceder/')
def editaralumno(request, alumno_id):
alumno_side = 'active'
menu_area = 'closed'
menu_pregunta = 'closed'
menu_respuesta = 'closed'
menu_resultado = 'closed'
alumno = Alumno.objects.get(pk=alumno_id)
if request.method == 'POST':
form = AlumnoForm(request.POST, instance=alumno)
if form.is_valid():
form.save()
datos = Alumno.objects.all().order_by('id')
messages.success(request, 'Se actualizo el alumno')
return HttpResponseRedirect('/areas/mostraralumno/')
else:
form = AlumnoForm(instance=alumno)
return render_to_response('alumnoform2.html', {'form': form, 'alumno_side': alumno_side, 'menu_area': menu_area,
'menu_pregunta': menu_pregunta, 'menu_respuesta': menu_respuesta,
'menu_resultado': menu_resultado},
context_instance=RequestContext(request))
"""
Permite eliminar un registro del modelo:Alumno y muestra nuevamente los alumnos registrados
"""
@login_required(login_url='/areas/acceder/')
def borraralumno(request, alumno_id):
alumno = Alumno.objects.get(pk=alumno_id)
alumno.delete()
datos = Alumno.objects.all().order_by('id')
messages.warning(request, 'Se elimino el alumno')
return HttpResponseRedirect('/areas/mostraralumno/')
def califica_pregunta(pregunta, respuesta):
respuesta_correcta = pregunta.respuesta_set.get(acierto=True)
return respuesta_correcta == respuesta
def resultado(request): # recibe los datos que provienen del template cuestionario
re = []
r = []
e = []
if request.method == 'POST':
lista_preguntas = request.POST.getlist('pregunta')
nombre_alumno = request.POST.get('nombre_alumno')
appat = request.POST.get('appat')
apma = request.POST.get('apma')
cuestionario = request.POST.get('cuestionario')
dependencia = request.POST.get('dependencia')
area = request.POST.get('area')
c = Cuestionario.objects.get(pk=cuestionario)
d = Dependencia.objects.get(pk=dependencia)
alu = Alumno.objects.create(nombre_alumno=nombre_alumno, appat=appat, apma=apma, cuestionario_id=c.id, dependencia_id=d.id, area=area)
a = alu.id
for preguntas in lista_preguntas:
if request.POST.getlist(u'%s' % preguntas, ''):
e1 = request.POST.getlist(u'%s' % preguntas)
for e in e1:
res = Respuesta.objects.filter(pk=e, pregunta_id=preguntas)
for r in res:
if r.acierto == True:
re = Resultado()
re.alumno_id = a
re.respuesta_id = r.id
re.cont_respuesta = 1
re.save()
else:
re = Resultado()
re.alumno_id = a
re.respuesta_id = r.id
re.cont_respuesta = 0
re.save()
return HttpResponseRedirect(reverse('servicio:termino'))
def termino(request):
paquete = {}
return render_to_response('termino.html', paquete, context_instance=RequestContext(request))
@login_required(login_url='servicio:acceder')
def conteo_respuestas(request):
lista_alumnos = Alumno.objects.all()
lista_areas = Area.objects.all().order_by('id')
#for x in lista_alumnos:
#lista_areas=Area.objects.filter(cuestionario_id=x.cuestionario_id)
#print x.cuestionario_id
#print (lista_areas)
#con = Cuestionario.objects.get(id__in = lista_alumnos.cuestionario_id)
#print (con)
res = []
total_area = []
alum2 = {}
total = {}
alum = {}
for x in lista_alumnos:
alum = {}
for y in lista_areas:
res = Resultado.objects.all().filter(respuesta__pregunta__area=y.id, alumno=x.id, cont_respuesta=1)
alum[y.id] = res.count()
alum2[x.id] = alum
for y in lista_areas:
total_area = Pregunta.objects.all().filter(area=y.id)
total[y.id] = total_area.count()
resultado_side = 'active'
menu_area = 'closed'
menu_pregunta = 'closed'
menu_respuesta = 'closed'
menu_alumno = 'closed'
paquete = {'lista_alumnos': lista_alumnos, 'lista_areas': lista_areas, 'alum2': alum2, 'total': total, 'alum': alum,
'resultado_side': resultado_side, 'menu_alumno': menu_alumno, 'menu_area': menu_area,
'menu_pregunta': menu_pregunta, 'menu_respuesta': menu_respuesta}
#print paquete
return render_to_response('conteoRespuestas.html', paquete, context_instance=RequestContext(request))
@login_required(login_url='servicio:acceder')
def conteo_respuestas_tabla(request):
lista_alumnos = Alumno.objects.all()
lista_areas = Area.objects.all().order_by('id')
res = []
total_area = []
alum2 = {}
total = {}
alum = {}
for x in lista_alumnos:
alum = {}
for y in lista_areas:
res = Resultado.objects.all().filter(respuesta__pregunta__area=y.id, alumno=x.id, cont_respuesta=1)
alum[y.id] = res.count()
alum2[x.id] = alum
for y in lista_areas:
total_area = Pregunta.objects.all().filter(area=y.id)
total[y.id] = total_area.count()
resultado_side = 'active'
menu_area = 'closed'
menu_pregunta = 'closed'
menu_respuesta = 'closed'
menu_alumno = 'closed'
paquete = {'lista_alumnos': lista_alumnos, 'lista_areas': lista_areas, 'alum2': alum2, 'total': total,
'resultado_side': resultado_side, 'menu_area': menu_area, 'menu_pregunta': menu_pregunta,
'menu_respuesta': menu_respuesta, 'menu_alumno': menu_alumno}
return render_to_response('conteoRespuestasTabla.html', paquete, context_instance=RequestContext(request))
@login_required(login_url='/areas/acceder/')
def principal_admin(request):
lista_alumnos = Alumno.objects.all().order_by('-fecha')[:3]
lista_areas = Area.objects.all().order_by('id')
res = []
total_area = []
alum2 = {}
total = {}
alum = {}
for x in lista_alumnos:
alum = {}
for y in lista_areas:
res = Resultado.objects.filter(respuesta__pregunta__area=y.id, alumno=x.id, cont_respuesta=1)
alum[y.id] = res.count()
alum2[x.id] = alum
for y in lista_areas:
total_area = Pregunta.objects.all().filter(area=y.id)
total[y.id] = total_area.count()
inicio_side = 'active'
menu_alumno = 'closed'
menu_area = 'closed'
menu_pregunta = 'closed'
menu_respuesta = 'closed'
menu_resultado = 'closed'
paquete = {'lista_alumnos': lista_alumnos, 'lista_areas': lista_areas, 'alum2': alum2, 'total': total,
'inicio_side': inicio_side, 'menu_alumno': menu_alumno, 'menu_area': menu_area,
'menu_pregunta': menu_pregunta, 'menu_respuesta': menu_respuesta, 'menu_resultado': menu_resultado}
return render_to_response('conteoRespuestas.html', paquete, context_instance=RequestContext(request))
@login_required(login_url='/areas/acceder/')
def buscarAlum(request):
resultado_side = 'active'
menu_area = 'closed'
menu_pregunta = 'closed'
menu_respuesta = 'closed'
menu_alumno = 'closed'
if request.method == 'POST':
form = FormularioBusqueda(request.POST, request.FILES)
if form.is_valid():
nombre_alumno = form.cleaned_data['nombre_alumno']
appat = form.cleaned_data['appat']
apma = form.cleaned_data['apma']
lista_alumnos = Alumno.objects.all().filter(nombre_alumno__icontains=nombre_alumno, appat__icontains=appat,
apma__icontains=apma)
lista_areas = Area.objects.all().order_by('id')
res = []
total_area = []
alum2 = {}
total = {}
alum = {}
for x in lista_alumnos:
alum = {}
for y in lista_areas:
res = Resultado.objects.all().filter(respuesta__pregunta__area=y.id, alumno=x.id, cont_respuesta=1)
alum[y.id] = res.count()
alum2[x.id] = alum
for y in lista_areas:
total_area = Pregunta.objects.all().filter(area=y.id)
total[y.id] = total_area.count()
paquete = {'lista_alumnos': lista_alumnos, 'lista_areas': lista_areas, 'alum2': alum2, 'total': total,
'nombre_alumno': nombre_alumno, 'resultado_side': resultado_side, 'menu_area': menu_area,
'menu_pregunta': menu_pregunta, 'menu_respuesta': menu_respuesta, 'menu_alumno': menu_alumno}
return render_to_response('conteoRespuestas.html', paquete, context_instance=RequestContext(request))
else:
form = FormularioBusqueda() #debo retornar a la platilla de busqueda
return render_to_response('buscar.html', {'form': form, 'resultado_side': resultado_side, 'menu_area': menu_area,
'menu_pregunta': menu_pregunta, 'menu_respuesta': menu_respuesta,
'menu_alumno': menu_alumno}, context_instance=RequestContext(request))
@login_required(login_url='/areas/acceder/')
def pagina(request):
lista_preguntas = Pregunta.objects.all().order_by('?')
lista_respuesta = Respuesta.objects.all() # Se envia todos los datos necesarios para crear el cuestionario
paqueteP = RequestContext(request, {'lista_preguntas': lista_preguntas, 'lista_respuesta': lista_respuesta})
return render_to_response('Cuestionario2.html', paqueteP, context_instance=RequestContext(request))
@login_required(login_url='/areas/acceder/')
def mostrarResultado(request, alumno_id):
lista_alumnos = Alumno.objects.all().filter(alumno=alumno_id)
lista_areas = Area.objects.all().order_by('id')
res = []
total_area = []
alum2 = {}
total = {}
alum = {}
for x in lista_alumnos:
alum = {}
for y in lista_areas:
res = Resultado.objects.all().filter(respuesta__pregunta__area=y.id, alumno=x.id, cont_respuesta=1)
alum[y.id] = res.count()
alum2[x.id] = alum
for y in lista_areas:
total_area = Pregunta.objects.all().filter(area=y.id)
total[y.id] = total_area.count()
inicio_side = 'active'
menu_alumno = 'closed'
menu_area = 'closed'
menu_pregunta = 'closed'
menu_respuesta = 'closed'
menu_resultado = 'closed'
paquete = {'lista_alumnos': lista_alumnos, 'lista_areas': lista_areas, 'alum2': alum2, 'total': total,
'inicio_side': inicio_side, 'menu_alumno': menu_alumno, 'menu_area': menu_area,
'menu_pregunta': menu_pregunta, 'menu_respuesta': menu_respuesta, 'menu_resultado': menu_resultado}
return render_to_response('conteoRespuestas.html', paquete, context_instance=RequestContext(request))
def envio(request, alumno_id=0):
#correos = ",".join(["'"+s.email+"'" for s in obj.responsable.all()])
#usuarios = ",\n".join([ s.first_name + " " +s.last_name for s in obj.responsable.all()])
alumno = Alumno.objects.get(pk=alumno_id)
con = Cuestionario.objects.filter(id=alumno.cuestionario.id)
direc = Directivo.objects.filter(cuestionario_id=con)
lista_areas = Area.objects.filter(cuestionario_id=con)
#correo = 'mrpaxo297@gmail.com'
correo = ",".join(["'" + s.correo + "'" for s in direc])
text_content = ''
#correos = ",".join(["'"+s.email+"'" for s in obj.responsable.all()])
#try:
#msj = str('a continuacion le envio los resultados del examen del Alumno %s %s %s %s .' %
#(alumno.nombre_alumno, alumno.appat, alumno.apma, alumno.cuestionario.nombre_cuestionario),
msj = 'A continuacion le envio los resultados del examen del Alumno : ' + '
' + '
'
msj = msj + 'NOMBRE: ' + str(alumno.nombre_alumno) + '
'
msj = msj + 'APELLIDO PATERNO: ' + str(alumno.appat) + '
'
msj = msj + 'APELLIDO MATERNO: ' + str(alumno.apma) + '
'
msj = msj + 'EXAMEN: ' + str(alumno.cuestionario.nombre_cuestionario) + '
'
msj = msj + 'AREAS DEL EXAMEN: ' + '
' + '
'
for y in lista_areas:
res = Resultado.objects.values('respuesta__pregunta').filter(respuesta__pregunta__area=y.id, alumno=alumno_id,
cont_respuesta=1).annotate(preguntacount=Count('respuesta__pregunta'))
#res = Resultado.objects.all().filter(respuesta__pregunta__area=y.id, alumno=alumno_id, cont_respuesta=1)
res2 = Pregunta.objects.all().filter(area=y.id)
#alum[x.id]=res.count()
a = (res).count()
b = (res2).count()
msj = msj + smart_str(y.nombre_area) + '
'
msj = msj + str(a) + ' aciertos ' + ' de ' + str(b) + ' preguntas ' + '
' + '
'
subject = request.POST.get('subject', 'Resultado de examen')
message = request.POST.get('message', msj)
#from_email = request.POST.get('from_email', 'mrpaxo297@gmail.com')
from_email = request.POST.get('from_email', 'dgtic@tabasco.gob.mx')
var_email = str(correo)
'''if subject and message and from_email:
try:
send_mail(subject, message, from_email, [var_email])
messages.info(request, 'El correo fue enviado')
return HttpResponseRedirect('/areas/mostraralumno/')
except BadHeaderError:
return HttpResponse('Invalid header found.')
else:
return HttpResponse('Make sure all fields are entered and valid.')
#except:
messages.info(request, 'Error')
return HttpResponseRedirect('/areas/conteo/')'''
try:
for s in direc:
subject, from_email, to = 'Examen asignado (%s)' % s.cuestionario.nombre_cuestionario, 'dgtic@tabasco.gob.mx', s.correo
msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
msg.attach_alternative(message, "text/html")
msg.send()
messages.success(request, 'Se ha enviado la informacion ')
#send_mail(subject, message, from_email, [str(responsablefor.email)])
except BadHeaderError:
pass__author__ = 'paco'
return HttpResponseRedirect('/areas/mostraralumno/')
class JasperMix(object):
url = settings.JASPERSERVER
username = 'jasperadmin'
password = 'jasperadmin'
def generateReport(self, path, namefile, params={}, tipo=None):
"""
Gennara reportes atravez del jasperserver
:param path:
:param namefile:
:param params:
:param tipo: default is PDF
"""
j = JasperClient(self.url, self.username, self.password)
ret = j.runReport(path, ("PDF" if not tipo else tipo), params)
f = file(namefile, 'w')
f.write(ret['data'])
f.close()
class imprimir(View, JasperMix):
def get(self, request, *args, **kwargs):
alumno_id = kwargs.get('alumno_id')
print settings.MEDIA_ROOT
try:
self.generateReport(
'/exameninformatico/produccion/resultado',
settings.MEDIA_ROOT + 'resultado' + str(alumno_id) + '.PDF',
{
'alumno_id': alumno_id
},
'PDF'
)
return HttpResponseRedirect('/media/resultado' + str(alumno_id) + '.PDF')
except Exception, e:
messages.error(self.request, 'ocurrio un error durante la carga del reporte: [%s]' % str(e))
return HttpResponseRedirect(reverse('servicio:mostraralumno'))