def objeto(request, id_objeto): """ En esta vista se desplegarán la información del Objeto seleccionado """ obj=Objeto.objects.get(pk=id_objeto) gruposobj = obj.repositorio.grupos.all() gruposu = request.user.groups.all() puedever=False for go in gruposobj: for gu in gruposu: if go == gu: puedever=True if puedever | obj.repositorio.publico: idiom={} nivel_a={} format={} tipo_i={} nivel_i={} contex={} [idiom.update({k:v}) for k,v in opc.get_idiomas()] [nivel_a.update({k:v}) for k,v in opc.get_nivel_agregacion()] [format.update({k:v}) for k,v in opc.get_tipo_recurso()] [tipo_i.update({k:v}) for k,v in opc.get_tipo_interactividad()] [nivel_i.update({k:v}) for k,v in opc.get_nivel_interactividad()] [contex.update({k:v}) for k,v in opc.get_contexto()] if request.user.is_authenticated(): data={'usuario':request.user, 'objeto':obj, 'espec':obj.espec_lom, 'autores':obj.autores.all(), 'keywords':obj.palabras_claves.all(),'idioma':idiom[obj.espec_lom.lc1_idioma],'niv_agr':nivel_a[obj.espec_lom.lc1_nivel_agregacion],'formato':format[obj.espec_lom.lc4_tipo_rec],'tipo_i':tipo_i[obj.espec_lom.lc4_tipo_inter],'nivel_i':nivel_i[obj.espec_lom.lc4_nivel_inter],'context':contex[obj.espec_lom.lc4_contexto]} else: data={'objeto':obj, 'espec':obj.espec_lom, 'autores':obj.autores.all(), 'keywords':obj.palabras_claves.all(),'idioma':idiom[obj.espec_lom.lc1_idioma],'niv_agr':nivel_a[obj.espec_lom.lc1_nivel_agregacion],'formato':format[obj.espec_lom.lc4_tipo_rec],'tipo_i':tipo_i[obj.espec_lom.lc4_tipo_inter],'nivel_i':nivel_i[obj.espec_lom.lc4_nivel_inter],'context':contex[obj.espec_lom.lc4_contexto]} return render_to_response('objeto.html',data,context_instance=RequestContext(request)) else: return HttpResponseRedirect('/')
def validar(request, id_proyecto): """ En esta vista se implementará la lógica para la validación de proyectos """ obj=Objeto.objects.get(proyecto=id_proyecto) gruposu = request.user.groups.all() gruposobj = obj.repositorio.grupos.all() puederevisar=False #Se valida si el proyecto/objeto a revisar está en el mismo grupo que el usuario que va a revisar for go in gruposobj: for gu in gruposu: if go == gu: puederevisar=True #Si el usuario está en el mismo grupo del proyecto/objeto if puederevisar: #Si el perfil del usuario es el de revisor Y si el proyecto no está en fase 1 if request.user.profile.rol == 'rrev' and obj.proyecto.fase != "f1":# errores = False l_errores=[] tipos={} calif=0 l_valores_iniciales=[] l_valoraciones=[]#En caso de que la nota ya haya sido dada se necesitará guardar las nuevas notas para recalcular num_p=0 #Se consultan los indicadores asociados al proyecto l_indicadores = obj.proyecto.indicadores.all().order_by('factor') #Se consultan las operaciones mentales asciadas al proyecto l_operaciones = obj.proyecto.operaciones.all() #Se consultan los paramétros y validaciones parametros=Parametro.objects.all().order_by('tipo', '-ponderacion') check=Validacion.objects.filter(proyecto=obj.proyecto.pk) #Se llena la lista de tipos por aparte [tipos.update({k:v}) for k,v in opc.get_tipo_p()] #se verifica si el proyecto ya tiene validaciones con el fin de crear o modificar la calificación if check.count()>0: consulta=check num_p=0 else: consulta=Validacion.objects.none() num_p=parametros.count() #El set de formularios debe inicializarse con un número de formularios que dependen de si está creando o editando formularioValidar = modelformset_factory(Validacion, extra=num_p, form=ValidarForm) if request.method == 'POST': f_validar=formularioValidar(request.POST) #Verifico todos los datos enviados por formulario para validar si no se ha ingresado alguna calificacion #En caso de faltar alguna calificación, se debe devolver. for key, value in request.POST.iteritems(): if key.find('form') >= 0: if key.find('valoracion') > 0: if value == '0.0': errores=True l_errores.append(key) #Si no hubieron errores y todos los parámetros fueron calificados if not errores: if f_validar.is_valid(): instances=f_validar.save(commit=False) #Se recorre los datos del formulario para reemplazar los valores ocultos (proyecto y parámetro) for index, form in enumerate(instances): form.proyecto=obj.proyecto form.parametro=parametros[index] f_validar.save() #Si la nota se debe actualizar porque ya estaba calificado validaciones=Validacion.objects.filter(proyecto=obj.proyecto.pk) for v in validaciones: #se saca el parámetro de cada validación par=Parametro.objects.get(id=v.parametro.pk) #La calificación es la sumatoria de la multiplicación de la valoración y la ponderación de cada parámetro. calif=calif+(Decimal(v.valoracion)*par.ponderacion) #Si la calificación supera el umbral para la calificación if calif >= opc.get_umbral_calificacion(): obj.proyecto.calificacion='a' else: obj.proyecto.calificacion='r' #Se actualiza la fase del proyecto obj.proyecto.fase='f3' #Se actualiza la nota del proyecto obj.proyecto.nota=calif obj.proyecto.save() return HttpResponseRedirect('/proyecto/'+str(obj.pk)) else: #Los valores iniciales del formaulario son los campos ocultos (proyecto y parámetro) for p in parametros: l_valores_iniciales.append({'proyecto':obj.proyecto.pk, 'parametro':p}) #Se sobreescribe el set de formaularios antes de enviar para que tenga los valores iniciales f_validar = formularioValidar(queryset=consulta, initial=l_valores_iniciales) data={'errores':l_errores, 'indicadores':l_indicadores, 'operaciones':l_operaciones, 'tipos':tipos, 'parametros':parametros, 'formValidar':f_validar, 'usuario':request.user, 'objeto':obj, 'espec':obj.espec_lom, 'autores':obj.autores.all(), 'keywords':obj.palabras_claves.all(), 'proyecto':obj.proyecto} return render_to_response('validar.html',data,context_instance=RequestContext(request)) else: return HttpResponseRedirect('/') else: return HttpResponseRedirect('/')