def agregarAceptado(request, articulo_id): listaAceptados = getArticulosAceptadosYEspeciales() listaEmpatados = getArticulosEmpatados() maxarticulos = getDatosConferencia() if listaAceptados == None: listaAceptados = [] if maxarticulos > len(listaAceptados): articulo = getArticuloPorId(articulo_id) if articulo != None: articulo.empatado = False articulo.rechazadoFaltaCupo = False articulo.aceptado = True articulo.save() listaAceptados = getArticulosAceptadosYEspeciales() listaEmpatados = getArticulosEmpatados() maxarticulos = getDatosConferencia() cantidad = maxarticulos - len(listaAceptados) return render( request, 'Conferencia/desempatar.html', { 'listaAceptados': listaAceptados, 'listaEmpatados': listaEmpatados, 'articulosRestantes': cantidad }) maxarticulos = getDatosConferencia() cantidad = maxarticulos - len(listaAceptados) return render( request, 'Conferencia/desempatar.html', { 'listaAceptados': listaAceptados, 'listaEmpatados': listaEmpatados, 'articulosRestantes': cantidad, 'error_message': "Ya no se puede aceptar mas articulos." })
def generarAceptados(aceptables): # Se verifica si el maximo de articulos es mayor que la longitud de la lista de aceptables # si esto pasa entonces la lista de aceptables pasa a ser la lista de aceptados, sino se busca # cual es la nueva lista de aceptados maxarticulos = getDatosConferencia() especiales = getArticulosAceptadosEspecial() if especiales != None: maxarticulos = maxarticulos - len(especiales) if maxarticulos >= len(aceptables): for art in aceptables: articulo = getArticuloPorId(art.pk) if articulo != None: articulo.aceptado = True articulo.save() return aceptables else: if maxarticulos > 0: aceptados = [] i = 0 while i < maxarticulos: aceptados.append(aceptables[i]) aceptables[i].aceptado = True aceptables[i].save() i += 1 # ultimo es el articulo con promedio de menor valor en la lista de aceptados ultimo = aceptados[maxarticulos - 1] evalUltimo = ultimo.evaluacion #Se establecen los rechazados por cupo porCupo = Evaluacion.objects.filter( promedio__gte=3, promedio__lte=evalUltimo.promedio) if porCupo != None: for ev in porCupo: if ev.arbitros.all().count() >= 2: articulo = ev.articulo articulo.rechazadoFaltaCupo = True articulo.save() # se cuenta cuantas veces aparece el promedio en la lista de aceptados numvecesaccept = calcular_ocurrencia(evalUltimo.promedio, aceptados) # se cuenta cuantas veces aparece el promedio en la lista de aceptables numvecesaceptables = calcular_ocurrencia(evalUltimo.promedio, aceptables) # si el numero de veces de aceptados es distinto del numero de veces de aceptables # se procede a eliminar todos los valores que fueron admitidos en la lista de aceptados if numvecesaccept != numvecesaceptables: promedioEmpatado = evalUltimo.promedio aceptados.remove(ultimo) ultimo.aceptado = False ultimo.save() for articulo in aceptados: if (articulo.evaluacion.promedio == promedioEmpatado): aceptados.remove(articulo) articulo.aceptado = False articulo.save() else: return [] return aceptados
def elegirEspeciales(request): listaAceptados = getArticulosAceptadosYEspeciales() maxarticulos = getDatosConferencia() if listaAceptados != None: cantidad = maxarticulos - len(listaAceptados) else: cantidad = maxarticulos return render( request, 'Conferencia/especiales.html', { 'listaArticulos': getArticulosNoEspeciales(), 'listaEspeciales': articulosEspeciales, 'cantidad': cantidad })
def desempatar(request): listaAceptados = getArticulosAceptadosYEspeciales() listaEmpatados = getArticulosEmpatados() maxarticulos = getDatosConferencia() if listaAceptados != None: cantidad = maxarticulos - len(listaAceptados) else: cantidad = maxarticulos return render( request, 'Conferencia/desempatar.html', { 'listaAceptados': listaAceptados, 'listaEmpatados': listaEmpatados, 'articulosRestantes': cantidad })
def agregarEspecial(request, articulo_id): listaAceptados = getArticulosAceptadosYEspeciales() listaEmpatados = getArticulosEmpatados() maxarticulos = getDatosConferencia() if listaAceptados == None: listaAceptados = [] if maxarticulos > len(listaAceptados): articulo = getArticuloPorId(articulo_id) if articulo != None: articulo.aceptadoEspecial = True articulo.rechazadoPorPromedio = False articulo.rechazadoFaltaCupo = False articulo.empatado = False articulo.save() listaAceptados = getArticulosAceptadosYEspeciales() maxarticulos = getDatosConferencia() cantidad = maxarticulos - len(listaAceptados) return render( request, 'Conferencia/especiales.html', { 'listaArticulos': getArticulosNoEspeciales(), 'listaEspeciales': getArticulosAceptadosEspecial(), 'cantidad': cantidad }) maxarticulos = getDatosConferencia() if listaAceptados != None: cantidad = maxarticulos - len(listaAceptados) else: cantidad = maxarticulos return render( request, 'Conferencia/especiales.html', { 'listaArticulos': getArticulosNoEspeciales(), 'listaEspeciales': articulosEspeciales, 'cantidad': cantidad, 'error_message': "Ya no se pueden aceptar mas articulos." })
def mostrarTiposDeArticulos(request): articulosAceptados = getArticulosAceptadosYEspeciales() maxarticulos = getDatosConferencia() if articulosAceptados != None: cantidad = maxarticulos - len(articulosAceptados) else: cantidad = maxarticulos articulosEmpatados = getArticulosEmpatados() context = RequestContext( request, { 'articulosAceptados': articulosAceptados, 'articulosEmpatados': articulosEmpatados, 'cantidad': cantidad }) return render(request, 'Conferencia/tiposDeSeleccionar.html', context)
def desempatarPorPaises(request): # lista de lista que tendra asociado al articulo con el pais listaFinal = [] listaArticulos = [] # lista de lista que tendra los paises con la cantidad(numero) de articulos listaPaises = [] autores = [] listaArticulos = getArticulos() if listaArticulos != None: for articulo in listaArticulos: # lista temporal que almacena a cada articulo los paises de sus autores listaTemp = [] autores = articulo.autores.all() listaTemp += [articulo] for person in autores: try: country = person.persona.pais except Persona.DoesNotExist: pass listaTemp += [country] flag = False for lista in listaPaises: # en la posicion 0 de la lista estaran los paises, en la 1 el numero de veces if lista[0] == country: if articulo.aceptado == True or articulo.aceptadoEspecial == True: lista[1] += 1 flag = True else: flag = False # forma de llenar la lista de paises if flag == False: if articulo.aceptado == True: listaPaises += [[country, 1]] else: listaPaises += [[country, 0]] listaFinal += [listaTemp] #Se ordena por paises que tienen menor cantidad de articulos a mayor cantidad listaPaises.sort(key=itemgetter(1)) #Se calculan cuantos articulos faltan por aceptar listaAceptados = getArticulosAceptadosYEspeciales() maxarticulos = getDatosConferencia() if listaAceptados != None: maxarticulos = maxarticulos - len(listaAceptados) i = 0 paisValido = False #Se itera entre todos los paises, tomando el que tiene menor cantidad de articulos aceptados primero while i < len(listaPaises): if maxarticulos != 0: elem = listaPaises[i] empatados = getArticulosEmpatados() if empatados != None: j = 0 #Se itera sobre los articulos empatados y si hay uno que contenga el pais elegido en #la iteracion externa, se acepta y se rompe el ciclo. while j < len(listaFinal): list = listaFinal[j] print list if elem[0] in list: paisValido = False if list[0].empatado == True: list[0].empatado = False list[0].rechazadoFaltaCupo = False list[0].aceptado = True list[0].save() maxarticulos = maxarticulos - 1 elem[1] += 1 paisValido = True j = len(listaFinal) j += 1 else: break #paisValido indica si se encontro un articulo entre empatados con el pais seleccionado, en caso #de haber encontrado uno, se ordena de nuevo la lista de manera que quede el pais con menos articulos #de primero y se sigue en la misma posicion. En caso no haber encontrado ninguno, se pasa al siguiente pais. if not paisValido: i += 1 else: listaPaises.sort(key=itemgetter(1)) else: i = len(listaPaises) break return render( request, 'Conferencia/desempatarPorPais.html', { 'listaAceptados': getArticulosAceptadosYEspeciales(), 'articulosRestantes': maxarticulos })
def llenarDiccionarioTopicos(request): listaTopicos = [] topicos = getTopicos() #Se hace una lista con todos los topicos que puede haber en la conferencia y se le asigna la cantidad de #articulos aceptados con ese topico if topicos != None: for top in topicos: listaTopicos = listaTopicos + [[ top.nombre, getNumArticulosDeTopico(top.nombre) ]] #Se ordena de topico que tiene menor cantidad de articulos a mayor cantidad listaTopicos.sort(key=itemgetter(1)) #Se calculan cuantos articulos faltan por aceptar listaAceptados = getArticulosAceptadosYEspeciales() maxarticulos = getDatosConferencia() if listaAceptados != None: maxarticulos = maxarticulos - len(listaAceptados) i = 0 topicoValido = False #Se itera entre todos los topicos, tomando el que tiene menor cantidad de articulos aceptados primero while i < len(listaTopicos): if maxarticulos != 0: elem = listaTopicos[i] empatados = getArticulosEmpatados() if empatados != None: j = 0 #Se itera sobre los articulos empatados y si hay uno que contenga el topico elegido en #la iteracion externa, se acepta y se rompe el ciclo. while j < len(empatados): try: articulo = empatados[j] topicoValido = False top = articulo.topicos.get(nombre=elem[0]) articulo.empatado = False articulo.rechazadoFaltaCupo = False articulo.aceptado = True articulo.save() maxarticulos = maxarticulos - 1 elem[1] += 1 topicoValido = True j = len(empatados) except Topico.DoesNotExist: pass j += 1 else: break #topicoValido indica si se encontro un articulo entre empatados con el topico seleccionado, en caso #de haber encontrado uno, se ordena de nuevo la lista de manera que quede el topico con menos articulos #de primero y se sigue en la misma posicion. En caso no haber encontrado ninguno, se pasa al siguiente topico. if not topicoValido: i += 1 else: listaTopicos.sort(key=itemgetter(1)) else: i = len(listaTopicos) break return render( request, 'Conferencia/desempatarPorTopico.html', { 'listaAceptados': getArticulosAceptadosYEspeciales(), 'articulosRestantes': maxarticulos })
def comprobarPresidente(request, vista_sigue): form = CorreoForm() if request.method == 'POST': form = CorreoForm(request.POST) if form.is_valid(): correoForm = form.cleaned_data['correo'] per = getPersona(correoForm) if per != None: com = getComite(correoForm) if com == None: form = CorreoForm() return render( request, 'Conferencia/comprobarPresidente.html', { 'form': form, 'vistaSiguiente': vista_sigue, 'error_message': "No hay ningun miembro del comite con ese correo" }) else: if com.presidente: listaAceptados = getArticulosAceptadosYEspeciales() listaEmpatados = getArticulosEmpatados() maxarticulos = getDatosConferencia() if listaAceptados != None: cantidad = maxarticulos - len(listaAceptados) else: cantidad = maxarticulos if vista_sigue == "desempatar": return render( request, 'Conferencia/desempatar.html', { 'listaAceptados': listaAceptados, 'listaEmpatados': listaEmpatados, 'articulosRestantes': cantidad }) else: return render( request, 'Conferencia/especiales.html', { 'listaArticulos': getArticulosNoEspeciales(), 'listaEspeciales': getArticulosAceptadosEspecial(), 'cantidad': cantidad }) else: form = CorreoForm() return render( request, 'Conferencia/comprobarPresidente.html', { 'form': form, "vistaSiguiente": vista_sigue, 'error_message': "El miembro del comite debe ser el presidente." }) else: form = CorreoForm() return render( request, 'Conferencia/comprobarPresidente.html', { 'form': form, 'vistaSiguiente': vista_sigue, 'error_message': "Coloque un email valido." })