#encoding:utf-8 from django.db.models import Avg, Max, Min, Count, Sum from django.contrib.auth.decorators import login_required from CertamenTabasco.models import * from django.contrib.auth import logout from django.template.response import TemplateResponse from django.core.urlresolvers import reverse from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import render from django.contrib.auth import authenticate, login from django.shortcuts import redirect from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.platypus import Table, TableStyle, SimpleDocTemplate,PageTemplate, Paragraph, Spacer, Image from reportlab.lib.pagesizes import letter, landscape, A4, portrait from reportlab.lib.units import cm, mm, inch, pica from reportlab.lib.enums import TA_JUSTIFY, TA_RIGHT, TA_LEFT, TA_CENTER from reportlab.lib import colors import os from django.utils.encoding import smart_str, smart_unicode from reportlab.rl_config import defaultPageSize import locale PAGE_HEIGHT=defaultPageSize[1]; PAGE_WIDTH=defaultPageSize[0] Title = '' pageinfo = "" from reportlab.platypus import PageBreak # Create your views here. def login_(request): return TemplateResponse(request,'login.html') def logout_user(request): response = logout(request) return HttpResponseRedirect('/login') def login_user(request): username = request.POST['username'] password = request.POST['password'] user = authenticate(username=username, password=password) mensaje = '' if user is not None: if user.is_active: login(request, user) r = Ronda.objects.get(activo=True) j = Juez.objects.get(pk=user.id) e = Evento.objects.get(pk=j.evento.id) request.session["evento_id"] = j.evento.id request.session["juez_id"] = user.id request.session["sjuez"] = j request.session["sevento"] = e #return HttpResponse(str(request.session["sjuez"].last_name), content_type='plain/text') #return TemplateResponse(request, 'saludo.html', {'juez': j, 'ronda':r}) return HttpResponseRedirect( '/welcome/' ) else: mensaje = mensaje + 'cuenta desactivada' else: mensaje = mensaje + 'Usuario no valido, verifique sus credenciales' return TemplateResponse(request, 'login.html', {'msj': mensaje}) def welcome(request): juez = request.session['sjuez'] ronda= Ronda.objects.get(activo=True) #print juez #print ronda return TemplateResponse(request, 'saludo.html', {'juez' : juez, 'ronda' : ronda}) @login_required() def rondas(request, pk): print 'Vista: RONDAS' print 'pk: %s' % pk evento = request.session["sevento"] print 'evento: %s' % evento juez = request.session["sjuez"] print 'juez: %s' % juez ronda = Ronda.objects.get(pk=pk) print 'ronda: %s' % ronda request.session["sronda"] = ronda mensaje = ''# juez.rol.id if pk=='4': print 'pk = %s' % pk participantes = Participante.objects.all().filter(ronda_id=pk) print 'participantes = %s' % participantes calificacion = Calificacion.objects.all().filter(evento_id=evento, juez_id = juez.id, ronda_id = ronda) print 'calificacion = %s' % calificacion calificado = False if calificacion.count() != 0: calificado = True rondaAbierta = 1 #return HttpResponse(VotacionTerminadaR3(evento.id, ronda.id)) if VotacionTerminadaR3(evento.id, ronda.id): rondaAbierta = 0 print rondaAbierta return TemplateResponse(request, 'rondafinal.html', {'participantes':participantes, 'ronda':ronda, 'calificado':calificado, 'evento':evento, 'juez':juez, 'rondaAbierta':rondaAbierta ,'msj':mensaje}) inner_qs = Calificacion.objects.values_list('participante_id').filter( evento_id=juez.evento.id, ronda_id=pk, juez_id=juez.id).order_by('id') print inner_qs p = Participante.objects.all().filter(ronda_id=pk).exclude(id__in=inner_qs) #mensaje = '' if p.count()==1 and ronda.participantes_salida == 1: return HttpResponseRedirect('/flor/'+str(p[0].id)) if VotacionTerminada(request, juez): votacionTerminadadeRonda = Calificacion.objects.filter(evento_id=juez.evento.id).values('participante').annotate(calif =Sum('calificacion')).order_by('-calif').filter(juez_id = juez.id)[:ronda.participantes_entrada] #mensaje = VotacionTerminada(request) ra=0 return TemplateResponse(request, 'ronda.html', {'participantes':p, 'juez':juez, 'ronda' : ronda, 'rondaAbierta':ra, 'msj':mensaje}) else: ra=1 #mensaje = 'Faltan jueces por terminar la ronda' return TemplateResponse(request, 'ronda.html', {'participantes':p, 'juez':juez, 'ronda' : ronda, 'rondaAbierta':ra, 'msj':mensaje}) @login_required() def votar(request, participante): participante = Participante.objects.get(pk=participante) #juez = Juez.objects.get(pk=request.session["juez_id"]) juez = request.session["sjuez"] ronda = request.session['sronda'] #criterios = Criterio.objects.all() criterios = ronda.criterio.all() print 'criterios: %s' % criterios request.session['formularioEnviado'] = False return TemplateResponse(request, 'votar.html', { 'juez':juez, 'ronda' : ronda, 'participante' : participante, 'criterios' : criterios } ) #def confirmaDesempate(request): # if request.method == 'POST' def confirmar(request): vj=request.session["sjuez"] juez = request.session["sjuez"] ronda = request.session["sronda"] ra = 0 juecesall = Juez.objects.all().filter(activo=True) participantesporronda = Participante.objects.all().filter(ronda_id=ronda.id) if request.method == 'POST': # If the form has been submitted... vb = None if 'Belleza' in request.POST: vb = request.POST['Belleza'] vd = None if 'Desenvolvimiento' in request.POST: vd = request.POST['Desenvolvimiento'] va = None if 'Aplausos' in request.POST: va = request.POST['Aplausos'] vi = None if 'Discurso' in request.POST: vi = request.POST['Discurso'] vl = None if 'Puntos' in request.POST: vl = request.POST['Puntos'] vp = request.POST['participante_id'] vj = request.POST['juez_id'] ve = request.POST['evento_id'] vt = request.POST['total'] vu = vj r = Participante.objects.get(id = vp) vr = r.ronda_id #mensaje = request.session.get('formularioEnviado', vp) registrado = False if Calificacion.objects.filter(ronda_id=vr, juez_id=vj, usuario_id=vu, participante_id=vp, evento_id=ve).count() ==4: registrado = True mensaje = '' if not request.session.get('formularioEnviado', True) and not registrado: if vb != None: cbelleza = Criterio.objects.get(nombre='Belleza') vc = Calificacion(criterio_id=cbelleza.id, calificacion=vb, ronda_id=vr, juez_id=vj, usuario_id=vu, participante_id=vp, evento_id=ve) vc.save() if vd != None: cdesenvolvimiento = Criterio.objects.get(nombre='Desenvolvimiento') vc = Calificacion(criterio_id=cdesenvolvimiento.id, calificacion=vd, ronda_id=vr, juez_id=vj, usuario_id=vu, participante_id=vp, evento_id=ve) vc.save() if va != None: caplausos = Criterio.objects.get(nombre='Aplausos') vc = Calificacion(criterio_id=caplausos.id, calificacion=va, ronda_id=vr, juez_id=vj, usuario_id=vu, participante_id=vp, evento_id=ve) vc.save() if vi != None: cdiscurso = Criterio.objects.get(nombre='Discurso') vc = Calificacion(criterio_id=cdiscurso.id, calificacion=vi, ronda_id=vr, juez_id=vj, usuario_id=vu, participante_id=vp, evento_id=ve) vc.save() if vl != None: cpuntos = Criterio.objects.get(nombre='Puntos') vc = Calificacion(criterio_id=cpuntos.id, calificacion=vl, ronda_id=vr, juez_id=vj, usuario_id=vu, participante_id=vp, evento_id=ve) vc.save() request.session['formularioEnviado'] = True #else: #juez = Juez.objects.get(pk=request.session["juez_id"]) inner_qs = Calificacion.objects.values_list('participante_id').filter(juez_id=juez.id, evento_id=juez.evento.id, ronda_id=vr).order_by('id') p = Participante.objects.filter(ronda_id=ronda.id).exclude(id__in=inner_qs) # Verificamos fin de ronda para crear la ronda siguiente # rondas = Ronda.objects.get(id=vr) if VotacionTerminada(request, juez) : votacionTerminadadeRonda = Calificacion.objects.filter(evento_id=juez.evento.id).values('participante').annotate(calif =Sum('calificacion')).order_by('-calif').filter(juez_id = juez.id)[:ronda.participantes_entrada] ra = 0 return TemplateResponse(request, 'ronda.html', {'participantes':p, 'juez':juez, 'ronda' : rondas, 'rondaAbierta':ra, 'msj':mensaje}) else: ra = 1 return TemplateResponse(request, 'ronda.html', #EJEMPLO DE COMENTARIO {'participantes':p, 'juez':juez, 'ronda' : rondas, 'rondaAbierta':ra, 'msj':mensaje}) def generar(request, pk): juez = request.session["sjuez"] print 'juez: %s' % juez ronda = request.session['sronda'] print 'ronda: %s' % ronda mensaje = '' votacionTerminadadeRonda = Calificacion.objects.filter(evento_id=juez.evento.id, ronda_id=ronda.id).values('participante__imagen__imagen', 'participante__municipio__nombre','participante').annotate(calif =Sum('calificacion')).order_by('-calif')#[:ronda.participantes_entrada] print 'votacionTerminadadeRonda: %s' % votacionTerminadadeRonda empate = False print 'empate: %s' % empate limite = int(ronda.participantes_salida) empatadas = votacionTerminadadeRonda.filter(calif=votacionTerminadadeRonda[limite-1]['calif']) print 'Empatadas: %s' % empatadas mensaje += str(empatadas.count()) print 'mensaje: ( empatadas.count() )%s' % mensaje # if empatadas.count() != 1: # empate = True # if votacionTerminadadeRonda[0:ronda.participantes_salida+empatadas.count()-1].count() == ronda.participantes_salida: # empate = False print 'ronda_padre = %s' % ronda.id print 'tipo_ronda = %s' % 2 print 'ronda participantes_entrada = %s' % ronda.participantes_entrada rondasiguiente = Ronda.objects.get(ronda_padre = ronda.id, tipo_ronda=2, participantes_entrada=ronda.participantes_entrada, activo = False) print 'ronda siguiente = %s' % rondasiguiente calificaionPivote = 0 calificaionPivote = empatadas[0]['calif'] for i in range(votacionTerminadadeRonda.count()-1,ronda.participantes_salida-1,-1): if calificaionPivote ==votacionTerminadadeRonda[i]['calif']: empate=True break #mensaje = '' totalempatados = empatadas.count() if empate: votacionTerminadadeRonda = votacionTerminadadeRonda[0:i+1] return TemplateResponse(request, 'desempate.html', {'ronda':ronda, 'msj':mensaje, 'participantesEmpatadas': empatadas, 'totalParticipantes': votacionTerminadadeRonda, 'calificaionPivote':calificaionPivote}) else: print 'ronda_padre = %s' % ronda.id print 'tipo_ronda = %s' % 1 print 'ronda activo = %s' % False rondasiguiente = Ronda.objects.get(ronda_padre = ronda.id, tipo_ronda=1, activo=False) votacionTerminadadeRonda = Calificacion.objects.filter(evento_id=juez.evento.id, ronda_id=ronda.id).values('participante').annotate(calif =Sum('calificacion')).order_by('-calif')[:ronda.participantes_salida] # for i in range(0, ronda.participantes_salida): # participante = Participante.objects.get(pk=votacionTerminadadeRonda[i]['participante']) # participante.ronda = rondasiguiente # participante.save() # ronda.activo= False # ronda.save() # rondasiguiente.activo = True # rondasiguiente.save() for participante in votacionTerminadadeRonda: participante = Participante.objects.get(pk=participante['participante']) participante.ronda = rondasiguiente participante.save() ronda.activo= False ronda.save() rondasiguiente.activo = True rondasiguiente.save() return TemplateResponse(request, 'saludo.html', {'juez': juez, 'ronda':rondasiguiente, 'msj':mensaje}) return TemplateResponse(request, 'resultados.html', {'tabla':votacionTerminadadeRonda, 'juez':juez, 'ronda' : ronda, 'msj':mensaje}) def reporteRonda(request, ronda_id): estilo=getSampleStyleSheet() elements = [] respuesta = HttpResponse(mimetype='application/pdf') doc = SimpleDocTemplate(respuesta,pagesize=portrait(letter), rightMargin=5*mm,leftMargin=5*mm, topMargin=2.5*cm,bottomMargin=3*cm) data = [] data2 = [] h1=estilo['h1'] estilo.add( ParagraphStyle( name = 'Centrado' ) ) Centrado = estilo["Centrado"] Centrado.alignment = TA_CENTER Centrado.fontName = "Helvetica" Centrado.fontSize = 10 estilo.add( ParagraphStyle (name = 'Justificado') ) Justificado = estilo['Justificado'] Justificado.alignment = TA_JUSTIFY Justificado.fontName = "Helvetica" Justificado.fontSize = 10 estilo.add( ParagraphStyle (name = 'Arriba') ) Arriba = estilo['Arriba'] Arriba.alignment = TA_RIGHT Arriba.fontName = "Helvetica" Arriba.fontSize = 10 estilo.add( ParagraphStyle( name = 'Izquierda' ) ) Izquierda = estilo["Izquierda"] Izquierda.alignment = TA_LEFT es_titulo = estilo['h3'] es_titulo.alignment=TA_CENTER ronda = Ronda.objects.get(ronda_padre = ronda_id,tipo_ronda__id=1) print ronda.ronda_padre try: d =Calificacion.objects.filter(ronda_id=ronda.ronda_padre).values('ronda_id','participante_id', 'participante__municipio__nombre').annotate(total =Sum('calificacion')).order_by('-total') # creamos título con estilo titulo = Paragraph('Resultado de la ronda '+ smart_str(ronda.ronda_padre), es_titulo) elements.append(titulo) # titulo2=Paragraph("Introducción a PDF", es_titulo) # elements.append(titulo2) elements.append(Spacer(0, inch*.3)) except Exception, e: pass dto=Paragraph("No.", es_titulo) dto1=Paragraph("Municipio",es_titulo) dto2=Paragraph("Total", es_titulo) #dto3=Paragraph("Fecha de Registro", es_titulo) # dto4=Paragraph("Asunto", es_titulo) # dto5=Paragraph("Estatus", es_titulo) data.append([dto,dto1,dto2]) notario=Notario.objects.all()[0] print notario.nombre par=Participante.objects.all().exclude(ronda=ronda.ronda_padre) print par solicitudes = Calificacion.objects.filter(ronda_id=ronda.ronda_padre,participante__in=par).values('ronda_id','participante_id', 'participante__municipio__nombre').annotate(total =Sum('calificacion')).order_by('-total') if solicitudes: x=0 for registro in solicitudes: x=x+1 dto=x dto1=Paragraph(smart_str(registro['participante__municipio__nombre']), es_titulo) dto2=Paragraph(smart_str(registro['total']), Izquierda) #dto3=Paragraph(smart_str(registro.fecha_registro).title(),Izquierda) # dto4=Paragraph(smart_str(registro.solicitud[0:600]), Justificado) # dto5=Paragraph(smart_str(registro.estatus), Centrado) data.append([dto,dto1,dto2]) # data.append([registro.id, registro.beneficiario, registro.beneficiario.direccion, registro.solicitud]) else: pass t_datos = Table(data, [ 1 * cm, 10 * cm, 3* cm, ], repeatRows=1, style=[('GRID',(0,0),(-1,-1),0.5,colors.grey), ('FONTSIZE',(0,0),(-1,-1),10), ('BACKGROUND',(0,0),(-1,0), '#66BC23' ), ('BOX',(-1,0),(0,0),0.25,colors.black), ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black) ]) elements.append(t_datos) dto1=Paragraph("Eliminadas",es_titulo) data2.append(['',dto1]) nopar=Participante.objects.filter(ronda=ronda.ronda_padre) eliminadaEmpate=Participante.objects.filter(ronda=ronda.ronda_padre,estatus__id=2) solicitudes2 = Calificacion.objects.filter(ronda_id=ronda.ronda_padre,participante__in=nopar).values('ronda_id','participante_id', 'participante__municipio__nombre').annotate(total =Sum('calificacion')).order_by('-total') if solicitudes2: x=0 for registro in solicitudes2: emmm='' for yy in eliminadaEmpate: if yy.id == int(registro['participante_id']): emmm=' Por desempate ' x=x+1 dto=x dto1=Paragraph(smart_str( registro['participante__municipio__nombre']+ emmm ), es_titulo) dto2=Paragraph(smart_str( registro['total'] ), Izquierda) #dto3=Paragraph(smart_str(registro.fecha_registro).title(),Izquierda) # dto4=Paragraph(smart_str(registro.solicitud[0:600]), Justificado) # dto5=Paragraph(smart_str(registro.estatus), Centrado) data2.append([dto,dto1,dto2]) # data.append([registro.id, registro.beneficiario, registro.beneficiario.direccion, registro.solicitud]) else: pass elements.append(Spacer(0, inch*.5)) t_datos = Table(data2, [ 1 * cm, 10 * cm, 3* cm, ], repeatRows=1, style=[('GRID',(0,0),(-1,-1),0.5,colors.grey), ('FONTSIZE',(0,0),(-1,-1),10), ('BACKGROUND',(0,0),(-1,0), '#F22536' ), ('BOX',(-1,0),(0,0),0.25,colors.black), ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black) ]) elements.append(t_datos) imagen = os.path.join("http://template.tabasco.gob.mx/assets/images/escudo.png") imagen2=os.path.join(os.path.dirname(os.path.abspath(__file__)),'static/imagenes/LOGO.jpg') #imagen2=os.path.dirname(os.path.realpath(__file__ ),'static/imagenes/LOGO.jpg') def myFirstPage(canvas, doc): canvas.saveState() canvas.drawImage(imagen2, 3*cm, 24.2*cm, 85,80) canvas.drawImage(imagen, 17*cm,24.5*cm, 80,70) canvas.drawString(7.8*cm, 26.5 * cm, "Gobierno del Estado de Tabasco") canvas.drawString(7.5 *cm,26 * cm, "Eleccion Flor de Oro Tabasco 2014 ") # canvas.drawString(5.0*cm, 25.5 * cm, "Dependencias Registradas en el sistema de Atención Ciudadana") canvas.drawString(280, 210, "Notario") canvas.drawString(200, 190, "__________________________________") canvas.drawString(240, 175, str(notario)) canvas.setFont('Helvetica',9) canvas.restoreState() def myLaterPages(canvas, doc): canvas.saveState() # canvas.drawImage(imagen2, 3*cm, 18.0*cm, 80,60) # canvas.drawImage(imagen, 23*cm, 18.0*cm, 80,65) canvas.setFont('Helvetica-Bold',12) # canvas.drawString(10.5*cm, 19.5 * cm, "Gobierno del Estado de Tabasco") # canvas.drawString(10.2*cm, 19.0 * cm, "Coordinación de Atención Ciudadana") # canvas.drawString(8.0*cm, 18.5 * cm, "Dependencias Registradas en el sistema de Atención Ciudadana") #canvas.drawString(15*cm, 24* cm, "Reporte" ) #canvas.drawString(15*cm, 24* cm, "Reporte" ) canvas.restoreState() doc.build(elements, onFirstPage = myFirstPage, onLaterPages = myLaterPages) return respuesta def reporteParticipante(request, participante_id): pass #FUNCIONES def VotacionTerminada(request, juez_id): print 'Funcion: votacionTerminada' #ronda = request.session['sronda'] ronda = Ronda.objects.get(activo = 1) print 'ronda: %s' % ronda.criterio.count() #juez = request.session['sjuez'] juez = Juez.objects.get(pk=juez_id) print 'juez: %s' % juez #evento = request.session['sevento'] evento = Evento.objects.get(pk=juez.evento.id) print 'evento: %s' % evento juecesall = Juez.objects.all().filter(activo=True) participantesporronda = Participante.objects.all().filter(ronda_id=ronda.id) criterios = Criterio.objects.filter(activo=True) mensaje = 'f1 votacion por ronda, por juez ' + str(Calificacion.objects.filter(evento = juez.evento, ronda = ronda).count()) mensaje = mensaje + ' total jueces ' + str(juecesall.count()) mensaje = mensaje + ' particiopantes ronda ' + str(participantesporronda.count()) mensaje = mensaje + ' jueces * participantes * criterio: ' + str(juecesall.count() * participantesporronda.count() * ronda.criterio.count()) request.session["mensaje"] = mensaje print mensaje if Calificacion.objects.filter(evento = evento, ronda = ronda).count() == (juecesall.count() * participantesporronda.count() * ronda.criterio.count()): return True else: return False def Votacion_Terminada(request): juez = request.session['sjuez'] ronda = request.session['sronda'] try: voju = votacionJueces.objects.get(evento= juez.evento, ronda = ronda) except Exception, e: voju = votacionJueces(evento= juez.evento, ronda = ronda, total = 0) voju.save() total = voju.total juecesall = Juez.objects.all().filter(activo=True) if total == juecesall.count(): return True else: return False def incrementar(request, participante_id): juez = request.session["sjuez"] ronda = request.session["sronda"] evento = request.session["sevento"] participante = Participante.objects.get(pk=participante_id) calificacion = Calificacion.objects.all().filter(evento_id = evento.id, participante_id = participante.id, juez_id =juez.id).order_by('calificacion')[:1] calificacion = Calificacion.objects.get(pk=calificacion) calificacion.calificacion += 1 mensaje = str(calificacion.calificacion) calificacion.save() # agregar requiest.post para guardar registros de calificaciones desempate # return HttpResponseRedirect( '/generar/'+ str(ronda.id) ) def monitor(request, pk): ronda = Ronda.objects.get(pk = pk) juez = Juez.objects.all().order_by('id') juez = juez[0] evento = Evento.objects.get(pk=juez.evento_id) query = ' select (SELECT username FROM auth_user where id = juez_id) as juez,(SELECT nombre FROM "CertamenTabasco_rol" where id = juez_id) as rol, juez_id, ronda_id, count(*) from "CertamenTabasco_calificacion" group by juez_id, ronda_id; select "l".username, "l".id, "r".ronda_id, count("r".ronda_id) as total from auth_user "l" left join "CertamenTabasco_calificacion" "r" on l.id = r.juez_id where l.is_active = true and l.is_staff = false and ronda_id = %s ' % str(ronda.id) query += ' and evento_id = %s group by r.juez_id, r.ronda_id, l.username, l.id order by 4 desc, 1 ; ' % str(evento.id) votojueces = Calificacion.objects.raw( query ) mensaje = '' posiciones = Calificacion.objects.filter(evento_id=evento, ronda_id=ronda.id).values('ronda_id','participante_id', 'participante__municipio__nombre').annotate(total =Sum('calificacion')).order_by('-total') jueces = Juez.objects.all().filter(activo=True).order_by('last_name') return TemplateResponse(request, 'resultados.html', {'jueces':jueces, 'votojueces':votojueces, 'posiciones':posiciones, 'juez':juez, 'ronda' : ronda, 'msj':mensaje, 'estatusronda':VotacionTerminada(request,juez)}) # if juez.rol.nombre == 'Control': # pass # elif str(juez.rol) == 'Juez Presidente': # html = juez.rol # return HttpResponse(html) # else: # html = 'No tiene permiso para ver este sitio ' + str(juez.rol) # return HttpResponse(html) def generarronda(request, pk): if request.method == 'POST': # If the form has been submitted... ronda = request.session["sronda"] juez = request.session['sjuez'] mensaje = '' #participantes que pasan 15,5,19,9,13,8,1,18 ppart = request.POST['participante']+'-1' noppart= request.POST['noparticipante']+'-1' ppart = ppart.split(',') noppart = noppart.split(',') print 'ronda_id (ronda_padre) = %s' % pk rondasiguiente = Ronda.objects.get(ronda_padre = pk, tipo_ronda=1, activo=False) html = ppart #return HttpResponse(html) participantes = Participante.objects.filter(id__in=ppart) noparticipante= Participante.objects.filter(id__in=noppart) estatus=Estatus.objects.get(nombre='RECHAZADA') for participante in noparticipante: participante.estatus =estatus participante.save() for participante in participantes: participante.ronda = rondasiguiente participante.save() ronda.activo= False ronda.save() rondasiguiente.activo = True rondasiguiente.save() #return HttpResponse(mensaje) return TemplateResponse(request, 'saludo.html', {'juez': juez, 'ronda':rondasiguiente, 'msj':mensaje}) def ceremonia(request): print 'Vista CEREMONIA' #juez = request.session['sjuez'] ronda = Ronda.objects.get(activo = 1) print 'ronda: %s' % ronda juez = Juez.objects.all()[:1] print 'juez: %s' % juez if VotacionTerminada(request, juez): print 'VotacionTerminada = TRUE' posiciones = Calificacion.objects.filter(ronda_id=ronda.id).values('participante__imagen__imagen', 'participante__municipio__nombre','participante').annotate(calif =Sum('calificacion')).order_by('-calif') #pasan = Calificacion.objects.filter(ronda_id=ronda.id).values('participante__imagen__imagen', 'participante__municipio__nombre','participante').annotate(calif =Sum('calificacion')).order_by('-calif')[0:ronda.participantes_salida] pasan = posiciones[0:ronda.participantes_salida] print 'pasan: %s' % pasan.count() #nopasan = Calificacion.objects.filter(ronda_id=ronda.id).values('participante__imagen__imagen', 'participante__municipio__nombre','participante').annotate(calif =Sum('calificacion')).order_by('-calif')[ronda.participantes_salida:posiciones.count()] nopasan = posiciones[ronda.participantes_salida:posiciones.count()] print 'nopasan: %s' % nopasan.count() print 'nopasan: %s' % nopasan if posiciones.count()>1: calificaionPivote = posiciones[ronda.participantes_salida-1:ronda.participantes_salida][0]['calif'] print 'salen - 1: %d' % (ronda.participantes_salida-1) print 'salen: %s' % ronda.participantes_salida print 'calificaionPivote: %s' % calificaionPivote for i in range(posiciones.count()-1,0,-1): print i if calificaionPivote ==posiciones[i]['calif']: break empatadas = posiciones.filter(calif=calificaionPivote) totalempatados = empatadas.count() posiciones = posiciones[0:i+1] print 'i + totalempatados %d' % (i + totalempatados) if empatadas.count() > 1 and i >= ronda.participantes_salida : # AQUI vamos empate = 6 estado = 2 return TemplateResponse(request, 'ceremonia.html', {'empatadas':posiciones, 'empate':empate, 'puntosempate':calificaionPivote, 'estado':estado}) html='' calificando = Calificacion.objects.filter(ronda_id = ronda) participantes = Participante.objects.all().filter(ronda_id= ronda) print 'Participantes: %s ' % participantes.count() if participantes.count()==1: return HttpResponseRedirect('/flor/'+str(participantes[0].id)) print 'calificaciones por ronda %s ' % calificando.count() if calificando.count()==0: html += str(ronda) estado = 0 return TemplateResponse(request, 'ceremonia.html', {'participantes':participantes, 'html':html, 'ronda':ronda, 'estado':estado}) else: html = str(ronda) print 'html %s' % html estado = 1 return TemplateResponse(request, 'ceremonia.html', {'html':html, 'ronda':ronda, 'estado':estado, 'participantes':participantes}) def flor(request, participante_id): participante= Participante.objects.all().get(id=participante_id) return TemplateResponse(request, 'flor.html', {'participante':participante}) def inc(request, evento_id, participante_id, ronda_id, juez_id): calificacion = Calificacion.objects.all().filter(evento_id = evento_id,ronda_id=ronda_id, participante_id = participante_id, juez_id =juez_id).order_by('calificacion')[:1] #return HttpResponse(calificacion.count()) if calificacion.count() == 0: cbelleza = Criterio.objects.get(nombre='Belleza') vc = Calificacion(criterio_id=cbelleza.id, calificacion=1, ronda_id=ronda_id, juez_id=juez_id, usuario_id=juez_id, participante_id=participante_id, evento_id=evento_id) vc.save() else: calificacion = Calificacion.objects.get(pk=calificacion) calificacion.calificacion += 1 calificacion.save() return HttpResponseRedirect('/ronda/'+ronda_id) def VotacionTerminadaR3(evento_id, ronda_id): juecesall = Juez.objects.all().filter(activo=True) participantesporronda = Participante.objects.all().filter(ronda_id=ronda_id)[:1] print participantesporronda criterios = Criterio.objects.filter(activo=True, nombre='Belleza') ronda = Ronda.objects.get(pk = ronda_id) mensaje ='' mensaje += 'f2 votacion por ronda, por juez ' + str(Calificacion.objects.filter(evento = evento_id, ronda = ronda_id).count()) mensaje += ' total jueces ' + str(juecesall.count()) mensaje += ' particiopantes ronda ' + str(participantesporronda.count()) mensaje += ' jueces * participantes * criterio' + str(juecesall.count() * participantesporronda.count() * ronda.criterio.count()) #return mensaje #print mensaje print 'calificaciones por evento por ronda %s' % Calificacion.objects.filter(evento = evento_id, ronda = ronda_id).count() print 'jueces = %s' % juecesall.count() print 'participantes por ronda = %s' % participantesporronda.count() print 'criterios = %s' % ronda.criterio.count() print '%s' % juecesall.count() * participantesporronda.count() * ronda.criterio.count() if Calificacion.objects.filter(evento = evento_id, ronda = ronda_id).count() == juecesall.count() * participantesporronda.count() * ronda.criterio.count(): return True else: return False