def Proyecto(request): """ Vista de acceso al usuario con rol de Catalogador, de esta manera se le permitirá crearProyectos """ if request.user.profile.rol == 'rcat': proyectoObj= Objeto.objects.filter(proyecto__isnull=False) gruposu = request.user.groups.all() errores = False error1 = False l_errores=[] if request.method == 'POST': if not request.POST.get('autores1'): l_errores.append('No incluyó autores al objeto.') error1=True if not request.POST.get('palabras_claves'): l_errores.append('No incluyó palabras claves al objeto.') error1=True if not request.POST.get('repositorio'): l_errores.append('No seleccionó repositorio. Si no hay repositorios asociados, consulte a un administrador del sistema para agregar alguno.') error1=True l_autores = request.POST.getlist('autores1') formularioEsp = EspecificacionForm(request.POST) formularioPro = ProyectoForm(request.POST) formularioObj = ObjetosForm(gruposu, request.POST, request.FILES) if not error1: if formularioEsp.is_valid(): if formularioObj.is_valid():#si el válido el objeto if formularioPro.is_valid():#si el válido el proyecto esp=formularioEsp.save()#se guarda la especificaciónLOM primero pc = formularioObj.cleaned_data['palabras_claves']#se toman las palabras claves digitadas re = formularioObj.cleaned_data['repositorio']#se toma el repositorio pro=formularioPro.save(commit=False)#se guarda una instancia temporal ti = formularioEsp.cleaned_data['lc1_titulo'] pro.titulo = ti #se asocia el proyecto con su titulo pro.nota=Decimal('0.0') pro.save() f=formularioObj.save(commit=False)#se guarda un instancia temporañ f.espec_lom = esp # se asocia el objeto con su especificaciónLOM f.creador=request.user # Se asocia el objeto con el usuario que lo crea f.repositorio=re # se asoicia el objeto con su repositorio f.proyecto=pro #se asocia el proyecto con el usuario que lo crea f.save() # se guarda el objeto en la base de datos. if ',' in pc: #si hay comas en las palabras claves lpc=[x.strip() for x in pc.split(',')] # se utilizan las palabras claves como una lista de palabras separadas sin comas ni espacios else: lpc=[x.strip() for x in pc.split(' ')] # se utilizan las palabras claves como una lista de palabras separadas sin espacios for l in lpc: p,b=PalabraClave.objects.get_or_create(palabra_clave=l) # Se crea una palabra clave por cada palabra en la lista if not b: #Si ya existe la palabra entonces se obvia el proceso de crearla p.save() #se guarda la palabra clave en la bd f.palabras_claves.add(p) # se añade cada palabra clave al objeto for l in l_autores: #como el objeto llega como una lista... se debe recorrer per en realidad siempre tiene un solo objeto stri=l.split(',') #se divide la lista por comas que representa cada string de campos del autor for st in stri: # se recorre cada autor s=st.split(' ') # se divide los campos nombres, apellidos y rol en una lista aut,cr=Autor.objects.get_or_create(nombres=s[0].replace('-',' '), apellidos=s[1].replace('-',' '), rol=s[2].replace('-',' ')) if not cr: #Si ya existe el autor entonces se obvia el proceso de crearlo aut.save() #se guarda el autor en la bd f.autores.add(aut) # se añade al campo manytomany con Autores. messages.add_message(request, messages.SUCCESS, 'Objeto Agregado Exitosamente') formularioObj=ObjetosForm(gruposu) formularioEsp=EspecificacionForm() formularioPro=ProyectoForm() else: errores=True else: errores = True else: errores = True else: formularioObj=ObjetosForm(gruposu) formularioEsp=EspecificacionForm() formularioPro=ProyectoForm() return render_to_response('proyecto.html', {'usuario':request.user, 'proyecto':proyectoObj, 'formObj':formularioObj, 'formPro':formularioPro, 'formEsp':formularioEsp,'errores':errores,'l_errores':l_errores}, context_instance=RequestContext(request))
def editObjeto(request,id_objeto): """ Vista de acceso al usuario con rol de Docente, de esta manera se le permitirá modificar objetos """ obj=get_object_or_404(Objeto, pk=int(id_objeto)) kws=obj.palabras_claves.all()#palabras claves del objeto if request.user.profile.rol == 'rdoc': if obj.creador == request.user: error1 = False errores = False l_errores=[] gruposu = request.user.groups.all() esp=obj.espec_lom l_autores = request.POST.getlist('autores1') autores = obj.autores.all() lista_autores=[]#lista para guardar los autores incluidos en el formulario, ya sea para añadir o eliminar. lista_temporal=[]#lista temporal con los datos de los autores sin el caracter - para guardar los autores incluidos en el formulario, ya sea para añadir o eliminar. if request.method == 'POST': if not request.POST.getlist('autores1'): l_errores.append('No incluyó autores al objeto.') error1=True if len(l_autores[0])==0: l_errores.append('No incluyó autores al objeto.') error1=True if not request.POST.get('palabras_claves'): l_errores.append('No incluyó palabras claves al objeto.') error1=True formularioEsp = EspecificacionForm(request.POST, instance=esp) formularioObj = cObjetosForm(request.user, obj, request.POST, request.FILES, instance=obj) if not error1: if formularioEsp.is_valid() & formularioObj.is_valid(): formularioEsp.save() pc = formularioObj.cleaned_data['palabras_claves']#se toman las palabras claves digitadas re = formularioObj.cleaned_data['repositorio']#se toma el repositorio f=formularioObj.save(commit=False)#se guarda un instancia temporal lpc=[x.strip() for x in pc.split(' ')] # se utilizan las palabras claves como una lista de palabras separadas sin espacios for l in lpc: p,b=PalabraClave.objects.get_or_create(palabra_clave=l) # Se crea una palabra clave por cada palabra en la lista if not b: #Si ya existe la palabra entonces se obvia el proceso de crearla p.save() #se guarda la palabra clave en la bd f.palabras_claves.add(p) # se añade cada palabra clave al objeto for kw in kws: #Se recorretodo el conjunto de palabras claves del objeto if kw.palabra_clave not in lpc: #se valida si cada palabra clave todavía se mantiene en lo que el usuario digitó f.palabras_claves.remove(kw) #de no encontrarse la palabra clave debe desasociarse aunque no eliminarse. for l in l_autores: #como el objeto llega como una lista... se debe recorrer per en realidad siempre tiene un solo objeto lista_autores=l.split(',') #se divide la lista por comas que representa cada string de campos del autor for st in lista_autores: # se recorre cada autor lista_temporal.append(st.replace('-',' ')) s=st.split(' ') # se divide los campos nombres, apellidos y rol en una lista aut,cr=Autor.objects.get_or_create(nombres=s[0].replace('-',' '), apellidos=s[1].replace('-',' '), rol=s[2].replace('-',' ')) if not cr: #Si ya existe el autor entonces se obvia el proceso de crearlo aut.save() #se guarda el autor en la bd f.autores.add(aut) # se añade al campo manytomany con Autores. for autor in autores: #Se recorretodo el conjunto de autores del objeto cadena_temporal=autor.nombres+' '+autor.apellidos+' '+autor.rol #cadena que concatena los datos del autor para compararlos con la lista que el usuario digita if cadena_temporal not in lista_temporal: #se valida si cada autor todavía se mantiene en lo que el usuario digitó f.autores.remove(autor) #de no encontrarse el autor, debe desasociarse aunque no eliminarse. f.repositorio=re f.save() #messages.add_message(request, messages.SUCCESS, 'Cambios Actualizados Exitosamente')# no funciona al redireccionar return HttpResponseRedirect('/objeto/'+str(obj.pk)) else: errores=True else: formularioEsp = EspecificacionForm(instance=esp) formularioObj = cObjetosForm(request.user, obj, instance=obj) return render_to_response('editObjeto.html',{'objeto':obj,'usuario':request.user,'formObj':formularioObj,'formEsp':formularioEsp,'autores':autores,'errores':errores,'l_errores':l_errores},context_instance=RequestContext(request)) else: return HttpResponseRedirect('/') else: return HttpResponseRedirect('/')
def editProyecto(request,id_objeto): """ Vista de acceso al usuario con rol de Catalogador, de esta manera se le permitirá modificar objetos """ obj=Objeto.objects.get(pk=id_objeto)#objeto que se está modificando pro=obj.proyecto kws=obj.palabras_claves.all()#palabras claves del objeto if request.user.profile.rol == 'rcat': if obj.creador == request.user: error1 = False errores = False l_errores=[] gruposu = request.user.groups.all() esp=obj.espec_lom l_autores = request.POST.getlist('autores1') autores = obj.autores.all() lista_autores=[]#lista para guardar los autores incluidos en el formulario, ya sea para añadir o eliminar. lista_temporal=[]#lista temporal con los datos de los autores sin el caracter - para guardar los autores incluidos en el formulario, ya sea para añadir o eliminar. if request.method == 'POST': if not request.POST.getlist('autores1'): l_errores.append('No incluyó autores al objeto.') error1=True if len(l_autores[0])==0: l_errores.append('No incluyó autores al objeto.') error1=True if not request.POST.get('palabras_claves'): l_errores.append('No incluyó palabras claves al objeto.') error1=True formularioEsp = EspecificacionForm(request.POST, instance=esp) formularioObj = cObjetosForm(request.user, obj, request.POST, request.FILES, instance=obj) formularioPro = ProyectoForm(request.POST, instance=pro) if not error1: if formularioEsp.is_valid() & formularioObj.is_valid() & formularioPro.is_valid(): formularioEsp.save() pc = formularioObj.cleaned_data['palabras_claves']#se toman las palabras claves digitadas re = formularioObj.cleaned_data['repositorio']#se toma el repositorio pro=formularioPro.save(commit=False)#se guarda una instancia temporal ti = formularioEsp.cleaned_data['lc1_titulo'] pro.titulo = ti #se asocia el proyecto con su titulo pro.save() f=formularioObj.save(commit=False)#se guarda un instancia temporal lpc=[x.strip() for x in pc.split(' ')] # se utilizan las palabras claves como una lista de palabras separadas sin espacios for l in lpc: p,b=PalabraClave.objects.get_or_create(palabra_clave=l) # Se crea una palabra clave por cada palabra en la lista if not b: #Si ya existe la palabra entonces se obvia el proceso de crearla p.save() #se guarda la palabra clave en la bd f.palabras_claves.add(p) # se añade cada palabra clave al objeto for kw in kws: #Se recorre todo el conjunto de palabras claves del objeto if kw.palabra_clave not in lpc: #se valida si cada palabra clave todavía se mantiene en lo que el usuario digitó f.palabras_claves.remove(kw) #de no encontrarse la palabra clave debe desasociarse aunque no eliminarse. for l in l_autores: #como el objeto llega como una lista... se debe recorrer per en realidad siempre tiene un solo objeto lista_autores=l.split(',') #se divide la lista por comas que representa cada string de campos del autor for st in lista_autores: # se recorre cada autor lista_temporal.append(st.replace('-',' ')) s=st.split(' ') # se divide los campos nombres, apellidos y rol en una lista aut,cr=Autor.objects.get_or_create(nombres=s[0].replace('-',' '), apellidos=s[1].replace('-',' '), rol=s[2].replace('-',' ')) if not cr: #Si ya existe el autor entonces se obvia el proceso de crearlo aut.save() #se guarda el autor en la bd f.autores.add(aut) # se añade al campo manytomany con Autores. for autor in autores: #Se recorre todo el conjunto de autores del objeto cadena_temporal=autor.nombres+' '+autor.apellidos+' '+autor.rol #cadena que concatena los datos del autor para compararlos con la lista que el usuario digita if cadena_temporal not in lista_temporal: #se valida si cada autor todavía se mantiene en lo que el usuario digitó f.autores.remove(autor) #de no encontrarse el autor, debe desasociarse aunque no eliminarse. f.repositorio=re f.proyecto=pro f.save() #messages.add_message(request, messages.SUCCESS, 'Cambios Actualizados Exitosamente')# no funciona al redireccionar return HttpResponseRedirect('/proyecto/'+str(obj.pk)) else: errores=True else: formularioEsp = EspecificacionForm(instance=esp) formularioObj = cObjetosForm(request.user, obj, instance=obj) formularioPro = ProyectoForm(instance=pro) return render_to_response('editProyecto.html',{'objeto':obj, 'usuario':request.user,'formObj':formularioObj,'formEsp':formularioEsp,'formPro':formularioPro, 'proyecto':obj.proyecto, 'autores':autores,'errores':errores,'l_errores':l_errores},context_instance=RequestContext(request)) else: return HttpResponseRedirect('/') else: return HttpResponseRedirect('/')
def docObjeto(request): """ Vista de acceso al usuario con rol de Docente, de esta manera se le permitirá crearobjetos """ if request.user.profile.rol == 'rdoc': objetos = Objeto.objects.filter(creador=request.user.id) gruposu = request.user.groups.all() errores = False error1 = False l_errores=[] if request.method == 'POST': if not request.POST.get('autores1'): l_errores.append('No incluyó autores al objeto.') error1=True if not request.POST.get('palabras_claves'): l_errores.append('No incluyó palabras claves al objeto.') error1=True if not request.POST.get('repositorio'): l_errores.append('No seleccionó repositorio. Si no hay repositorios asociados, consulte a un administrador del sistema para agregar alguno.') error1=True l_autores = request.POST.getlist('autores1') formularioEsp = EspecificacionForm(request.POST) formularioObj = ObjetosForm(gruposu, request.POST, request.FILES) if not error1: if formularioEsp.is_valid():#si es válido el formularo de especificaciónLOM if formularioObj.is_valid():#si el válido el objeto esp=formularioEsp.save()#se guarda la especificaciónLOM primero pc = formularioObj.cleaned_data['palabras_claves']#se toman las palabras claves digitadas re = formularioObj.cleaned_data['repositorio']#se toma el repositorio f=formularioObj.save(commit=False)#se guarda un instancia temporañ f.espec_lom = esp # se asocia el objeto con su especificaciónLOM f.creador=request.user # Se asocia el objeto con el usuario que lo crea f.repositorio=re f.save() # se guarda el objeto en la base de datos. if ',' in pc: #si hay comas en las palabras claves lpc=[x.strip() for x in pc.split(',')] # se utilizan las palabras claves como una lista de palabras separadas sin comas ni espacios else: lpc=[x.strip() for x in pc.split(' ')] # se utilizan las palabras claves como una lista de palabras separadas sin espacios for l in lpc: p,b=PalabraClave.objects.get_or_create(palabra_clave=l) # Se crea una palabra clave por cada palabra en la lista if not b: #Si ya existe la palabra entonces se obvia el proceso de crearla p.save() #se guarda la palabra clave en la bd f.palabras_claves.add(p) # se añade cada palabra clave al objeto for l in l_autores: #como el objeto llega como una lista... se debe recorrer per en realidad siempre tiene un solo objeto stri=l.split(',') #se divide la lista por comas que representa cada string de campos del autor for st in stri: # se recorre cada autor s=st.split(' ') # se divide los campos nombres, apellidos y rol en una lista aut,cr=Autor.objects.get_or_create(nombres=s[0].replace('-',' '), apellidos=s[1].replace('-',' '), rol=s[2].replace('-',' ')) if not cr: #Si ya existe el autor entonces se obvia el proceso de crearlo aut.save() #se guarda el autor en la bd f.autores.add(aut) # se añade al campo manytomany con Autores. messages.add_message(request, messages.SUCCESS, 'Objeto Agregado Exitosamente') formularioObj=ObjetosForm(gruposu) formularioEsp=EspecificacionForm() else: errores=True else: errores = True else: formularioObj=ObjetosForm(gruposu) formularioEsp=EspecificacionForm() return render_to_response('docente.html',{'usuario':request.user,'objetos':objetos,'formObj':formularioObj,'formEsp':formularioEsp,'errores':errores,'l_errores':l_errores},context_instance=RequestContext(request)) else: return HttpResponseRedirect('/')