Example #1
0
File: views.py Project: legus/siova
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))
Example #2
0
File: views.py Project: legus/siova
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('/')