Exemple #1
0
	def asociar_usuario_fase(self, usuario_id, fase_id):
		"""
		Asocia los permisos de un usuario con una fase, asi los usuarios que posean
		el rol estaran asociados a la fase.

		@type  usuario_id  : String
		@param usuario_id : Codigo del rol

		@type  fase_id   : Integer
		@param fase_id   : Identificador de la fase

		@rtype  : Rol
		@return : El rol que es aplicado a la fase.
		"""

		fase = DBSession.query(Fase).get(fase_id)
		#Se obtienen los permisos del template
		permisos_rol = self.distinct(DBSession.query(Permiso).\
						filter(RolPermisoProyecto.permiso_id == Permiso.permiso_id).\
						filter(RolPermisoProyecto.proyecto_id == fase.proyecto)
						)

		#Se se asocian el rol con la fase
		for permiso in permisos_rol:

			rpu = UsuarioPermisoFase()

			rpu.fase_id = fase_id
			rpu.usuario_id = usuario_id
			rpu.permiso_id = permiso.permiso_id
			#Asocia el rol con los permisos y la fase
			DBSession.add(rpu)
Exemple #2
0
	def borrarRelacion(self, item1, item2, idfase, **kw):

		if not self.puede_borrar(item1, item2, idfase):
			flash ("No se peude borrar la relacion! deja huerfanos", 'warning')
			redirect("/miproyecto/fase/relacion/list/"+idfase)

		#auditar items y aumentar su version
		item_1 = DBSession.query(Item).get(item1)
		item_2 = DBSession.query(Item).get(item2)

		item_util.audit_item(item_1)
		item_util.audit_item(item_2)

		item_1.version += 1
		item_2.version += 1

		item_1.estado = 3
		item_2.estado = 3

		DBSession.add(item_1)
		DBSession.add(item_2)

		DBSession.delete(DBSession.query(RelacionItem).\
					filter(RelacionItem.id_item_actual==item1).\
					filter(RelacionItem.id_item_relacionado==item2).\
					one())

		#marcar en revision los relacionados
		fase = DBSession.query(Fase).get(item_1.fase)
		grafo = item_util.proyectGraphConstructor(fase.proyecto)
		item_util.marcar_en_revision(grafo, item_1.id_item)
		item_util.marcar_en_revision(grafo, item_2.id_item)

		flash("Se ha eliminado la relacion: "+item1+" <--> "+item2)
		redirect("/miproyecto/fase/relacion/list/"+idfase)
Exemple #3
0
 def post_delete(self, *args, **kw):
     """This is the code that actually deletes the record"""
     pks = self.provider.get_primary_fields(self.model)
     d = {}
     for i, arg in enumerate(args):
         d[pks[i]] = arg
         
     """extraer el idFase para poder retornar en el estado anterior """
     idfase= DBSession.query(Item.idFase).filter_by(id=d['id']).first()
     """------------------------------------------------------------"""
     
     """Se crea objeto y cambia de estado """
     itemeDelete=DBSession.query(Item).filter_by(id=d['id']).first()
     itemeDelete.estado="borrado"
     itemeDelete.ultimaversion=0
     
     DBSession.add(itemeDelete)
     
     """---------Se borra las relaciones del Item Borrado--------------"""
     
     relaciones= DBSession.query(RelacionItem).filter((RelacionItem.idItem1==d['id']) | (RelacionItem.idItem2==d['id'])).all()
     
     longitud=len(relaciones)
     
     for x in range(longitud):
         DBSession.delete(relaciones[x])
     
     """---------------------------------------------------------------"""
     
     #self.provider.delete(self.model, d)
     
     #self.provider.delete(self.model, d)
     
     #redirect('./' + '../' * (len(pks) - 1))
     raise redirect('/item/?fid='+str(idfase[0]))
Exemple #4
0
	def asignar_rol_usuario(self,usuario_id , cod_rol, id_proyecto):
		"""
		Asigna un rol asociado a un proyecto al usuario determinado.

		@type  usuario_id  : Integer
		@param usuario_id  : Identificador del usuario

		@type  cod_rol    : String
		@param cod_rol    : Codigo del rol

		@type  id_proyecto : Integer
		@param id_proyecto : Identificador del proyecto al cual se va aplicar el rol

		@rtype  : Rol
		@return : El rol que es asignado al usuario.
		"""
		#Se obtiene el rol con el nombre correspondiente
		rol = rol_util.get_by_codigo(cod_rol)
		#Se verifica si el usuario posee el rol
		rol_usuario = usuario_util.usuario_has_rol(usuario_id, rol)
		#si no posee el rol, se le asigna
		if rol_usuario == None:
			rol_usuario = RolUsuario()
			rol_usuario.usuario_id = usuario_id
			rol_usuario.rol_id = rol.rol_id

			DBSession.add(rol_usuario)

		return rol
Exemple #5
0
	def importar_este_tipo(self, idtipo, idfase):
		"""
		Se obtiene de la BD el tipo de item y sus atributos
		"""
		tipo = DBSession.query(TipoItem).get(idtipo)
		atributos = DBSession.query(AtributoTipoItem).\
						filter(AtributoTipoItem.tipo_item==tipo.id_tipo_item)
		"""
		Se settean los valores de la copia
		El nuevo tipo de item (copia_tipo )pertenecera a esta fase ahora
		"""
		copia_tipo = TipoItem()
		copia_tipo.nombre = tipo.nombre
		copia_tipo.descripcion = tipo.descripcion
		copia_tipo.fase = idfase
		copia_tipo.codigo = tipo.codigo
		'''
		Se settean los valores para cada copia_atributo
		'''
		for atributo in atributos:
			copia_atributo = AtributoTipoItem()
			copia_atributo.nombre = atributo.nombre
			copia_atributo.tipo_id = atributo.tipo_id
			copia_tipo.atributos.append(copia_atributo)

		DBSession.add(copia_tipo)
		flash("El tipo de item "+str(tipo.nombre)+
										" pertenece ahora a esta fase")
		redirect("/miproyecto/fase/tipo_item/importar/"+str(idfase))
Exemple #6
0
    def post_delete(self, *args, **kw):
        """This is the code that actually deletes the record"""
        pks = self.provider.get_primary_fields(self.model)
        d = {}
        for i, arg in enumerate(args):
            d[pks[i]] = arg
        """extraer el idFase para poder retornar en el estado anterior """
        idfase = DBSession.query(Item.idFase).filter_by(id=d['id']).first()
        """------------------------------------------------------------"""
        """Se crea objeto y cambia de estado """
        itemeDelete = DBSession.query(Item).filter_by(id=d['id']).first()
        itemeDelete.estado = "borrado"
        itemeDelete.ultimaversion = 0

        DBSession.add(itemeDelete)
        """---------Se borra las relaciones del Item Borrado--------------"""

        relaciones = DBSession.query(
            RelacionItem).filter((RelacionItem.idItem1 == d['id'])
                                 | (RelacionItem.idItem2 == d['id'])).all()

        longitud = len(relaciones)

        for x in range(longitud):
            DBSession.delete(relaciones[x])
        """---------------------------------------------------------------"""

        #self.provider.delete(self.model, d)

        #self.provider.delete(self.model, d)

        #redirect('./' + '../' * (len(pks) - 1))
        raise redirect('/item/?fid=' + str(idfase[0]))
Exemple #7
0
Fichier : rol.py Projet : mbaez/SAP
	def post(self, args={}, **kw):
		"""
		Evento invocado luego de un evento post en el form de crear
		ecargado de persistir las nuevas instancias.

		@type  args : Hash
		@param args : Argumentos de template

		@type  kw : Hash
		@param kw : Keywords

		"""

		del kw['sprox_id']
		rol = Rol()
		rol.codigo = kw['codigo']
		rol.nombre = kw['nombre']
		rol.descripcion = kw['descripcion']

		for permiso in kw['permisos'] :
			rol.permisos.append(DBSession.query(Permiso).get(permiso))

		DBSession.add(rol)
		flash("El rol ha sido creado correctamente.")
		redirect("/administracion/rol/get_all")
Exemple #8
0
 def setup(self):
     try:
         new_attrs = {}
         new_attrs.update(self.attrs)
         new_attrs.update(self.do_get_dependencies())
         self.obj = self.klass(**new_attrs)
         DBSession.add(self.obj)
         DBSession.flush()
         return self.obj
     except:
         DBSession.rollback()
         raise
Exemple #9
0
 def setUp(self):
     """Prepare model test fixture."""
     try:
         new_attrs = {}
         new_attrs.update(self.attrs)
         new_attrs.update(self.do_get_dependencies())
         self.obj = self.klass(**new_attrs)
         DBSession.add(self.obj)
         DBSession.flush()
         return self.obj
     except:
         DBSession.rollback()
         raise
Exemple #10
0
	def post(self, idfase, args={},**kw):
		"""
		Evento invocado luego de un evento post en el form de crear
		ecargado de persistir las nuevas instancias.

		@type  idfase : Integer
		@param idfase : Identificador de la fase.

		@type  args : Hash
		@param args : Argumentos de template

		@type  kw : Hash
		@param kw : Keywords

		"""
		del kw['sprox_id']
		"""
		se crea la nueva relacion y se le asignan los valores de los combos
		"""
		if kw['item_1'] != None and kw['item_2'] != None:
			relacion = RelacionItem()
			relacion.id_item_actual = kw['item_1']
			relacion.id_item_relacionado = kw['item_2']
			relacion.relacion_parentesco = 2

			DBSession.merge(relacion)

			#auditar items y aumentar su version
			item1 = DBSession.query(Item).get(kw['item_1'])
			item2 = DBSession.query(Item).get(kw['item_2'])

			item_util.audit_item(item1)
			item_util.audit_item(item2)

			item1.version += 1
			item2.version += 1

			DBSession.add(item1)
			DBSession.add(item2)

			#marcar en revision los relacionados
			fase = DBSession.query(Fase).get(item1.fase)
			grafo = item_util.proyectGraphConstructor(fase.proyecto)
			item_util.marcar_en_revision(grafo, item1.id_item)

			flash("La relacion se ha creado correctamente")
			redirect("/miproyecto/fase/relacion/list/"+idfase)

		flash("No se puede crear la relacion", 'warning')
		redirect("/miproyecto/fase/relacion/"+idfase+"/new/")
Exemple #11
0
	def audit_item(self, item):
		"""
		Registra los cambios realizados al item determinado en el historial
		se persiste los valore del item y su atributos en el historial.

		@type  item  : Integer
		@param item  : Identificador del proyecto al cual se va aplicar el rol
		"""
		historial = HistorialItem()

		historial.id_item = item.id_item
		historial.nombre = item.nombre
		historial.codigo = item.codigo
		historial.estado = item.estado
		historial.tipo_item = item.tipo_item
		historial.fase = item.fase
		historial.version = item.version
		historial.prioridad = item.prioridad
		historial.complejidad = item.complejidad
		historial.descripcion = item.descripcion
		historial.observacion = item.observacion
		historial.linea_base = item.linea_base
		#historial de detalles
		detalles = DBSession.query(DetalleItem).\
					filter(DetalleItem.id_item==historial.id_item).\
					all()
		for detalle in detalles:
			historial_detalle = HistorialDetalleItem()
			historial_detalle.id_detalle = detalle.id_item_detalle
			historial_detalle.id_item = detalle.id_item
			historial_detalle.adjunto = detalle.adjunto
			historial_detalle.observacion = detalle.observacion
			historial_detalle.valor = detalle.valor
			historial.detalles.append(historial_detalle)

		#Obtener las relaciones
		relaciones = DBSession.query(RelacionItem).\
							filter((RelacionItem.id_item_actual or
							RelacionItem.id_item_relacionado) == item.id_item).\
							all()

		for relacion in relaciones:
			historial_relacion = HistorialRelacion()
			historial_relacion.id_item_1 = relacion.id_item_actual
			historial_relacion.id_item_2 = relacion.id_item_relacionado
			historial_relacion.id_tipo_relacion = relacion.relacion_parentesco
			historial.relaciones.append(historial_relacion)

		DBSession.add(historial)
Exemple #12
0
	def post(self, idproyecto, **kw):
		"""
		Evento invocado luego de un evento post en el form de crear
		ecargado de persistir las nuevas instancias.

		@type  idproyecto : Integer
		@param idproyecto : Identificador del Proyecto.

		@type  kw : Hash
		@param kw : Keywords

		"""
		del kw['sprox_id']
		fase = Fase(**kw)
		fase.proyecto = idproyecto
		DBSession.add(fase)
		redirect("/miproyecto/ver/"+idproyecto)
Exemple #13
0
	def post(self, args={}, **kw):
		"""
		Evento invocado luego de un evento post en el form de crear
		ecargado de persistir las nuevas instancias.

		@type  args : Hash
		@param args : Argumentos de template

		@type  kw : Hash
		@param kw : Keywords

		"""

		del kw['sprox_id']
		usuario = Usuario(**kw)
		DBSession.add(usuario)
		flash("El usuario ha sido creado correctamente.")
		redirect("/administracion/usuario/get_all")
Exemple #14
0
    def post(self, *args, **kw):

        userfile = kw['userfile']
        log.debug("kwwww: %s" % kw)

        forbidden_files = [".js", ".htm", ".html"]
        for forbidden_file in forbidden_files:
            if userfile.filename.find(forbidden_file) != -1:
                return redirect("/adjuntos/new")
        filecontent = userfile.file.read()
        new_file = Adjuntos(filename=userfile.filename,
                            filecontent=filecontent)
        DBSession.add(new_file)
        DBSession.flush()
        redirect("/adjuntos/new")

        #self.provider.create(self.model, params=kw)

        raise redirect('/adjuntos/new')
Exemple #15
0
 def post(self, *args, **kw):
     
     userfile=kw['userfile']
     log.debug("kwwww: %s" %kw)
     
     forbidden_files = [".js", ".htm", ".html"]
     for forbidden_file in forbidden_files:
         if userfile.filename.find(forbidden_file) != -1:
             return redirect("/adjuntos/new")
     filecontent = userfile.file.read()
     new_file = Adjuntos(filename=userfile.filename, filecontent=filecontent)
     DBSession.add(new_file)
     DBSession.flush()
     redirect("/adjuntos/new")
     
     
     #self.provider.create(self.model, params=kw)
     
     
     raise redirect('/adjuntos/new')
Exemple #16
0
	def put(self, id, **kw):
		"""
		Evento invocado luego de un evento post en el form de editar
		encargado de persistir las modificaciones de las instancias.

		@type  id : Integer
		@param id : Identificador del item.

		@type  kw : Hash
		@param kw : Keywords

		"""
		kw['id_item'] = id
		
		item = DBSession.query(Item).get(int(kw['id_item']))
		
		item_util.audit_item(item)
		
		archivo =  Archivo()
		archivo.id_item = id

		if kw ['archivo'] != None:
			stream = True
			archivo.archivo = ""

			while stream :
				stream = kw ['archivo'].file.read(1024)
				archivo.archivo += stream

			archivo.file_name = kw ['archivo'].filename
			archivo.content_type = kw ['archivo'].type
			kw ['archivo'].file.close()


		DBSession.add(archivo)

		item.version += 1
		DBSession.merge(item)

		flash("El item atributo ha sido modificado correctamente.")
		redirect('/miproyecto/fase/item/poner_en_revision/'+str(archivo.id_item))
Exemple #17
0
	def post(self,**kw):
		"""
		Evento invocado luego de un evento post en el form de crear
		ecargado de persistir las nuevas instancias.

		@type  kw : Hash
		@param kw : Keywords
		"""

		del kw['sprox_id']
		kw['lider'] = DBSession.query(Usuario).get(kw['lider'])
		kw['estado'] = estado_proyecto_util.get_by_codigo('Inicial')
		proyecto = Proyecto(**kw)
		#persiste el proyecto
		DBSession.add(proyecto)
		#Se anhade el rol de lider
		proy=DBSession.query(Proyecto).filter(Proyecto.nombre==proyecto.nombre).first()

		util.asignar_lider(proy)

		flash("El proyecto ha sido creado correctamente.")
		redirect("/administracion/proyecto/")
Exemple #18
0
	def post(self, idfase, **kw):
		"""
		Evento invocado luego de un evento post en el form de crear
		ecargado de persistir las nuevas instancias.

		@type  idfase : Integer
		@param idfase : Identificador de la fase.

		@type  kw : Hash
		@param kw : Keywords

		"""
		del kw['sprox_id']
		tipo_item = TipoItem(**kw)

		codigo = str(tipo_item.codigo)

		flag = True
		# Se verifica que el codigo del tipo de item sea una secuencia
		# de letras mayusculas
		for caracter in codigo:
			if(not re.match("[A-Z]",caracter)):
				flag = False

		if(not flag):
			flash("El codigo del tipo de item no debe estar conformado solo por letras mayusculas")
			redirect('/miproyecto/fase/tipo_item/' + str(idfase) + '/new')

		tipo_item.fase = idfase
		DBSession.add(tipo_item)
		flash("El tipo de Item ha sido creado correctamente")
		#traer el ultimo tipo insertado para pasarle su id al formulario de atributos
		tipo = DBSession.query(TipoItem).\
							filter(TipoItem.nombre==tipo_item.nombre).\
							filter(TipoItem.descripcion==tipo_item.descripcion).\
							first()
		redirect('/miproyecto/fase/tipo_item/atributos/'
											+str(tipo.id_tipo_item)+'/new')
Exemple #19
0
	def asociar_rol_proyecto(self, cod_rol, proyecto):
		"""
		Crea una copia del template de un rol, anhadiendo al nombre del este
		rol el id de un proyecto.

		@type  cod_rol   : String
		@param cod_rol   : Codigo del rol

		@type  proyecto   : Proyecto
		@param proyecto   : Proyecto al cual se va aplicar el rol

		@rtype  : Rol
		@return : El rol que es aplicado al proyecto.
		"""
		#Se obtine el rol template
		rol_template = rol_util.get_by_codigo(cod_rol)

		if rol_template.is_template ==  True :
			rol = self.get_rol_by_codigo(cod_rol+'_'+str(proyecto.id_proyecto))
		else:
			rol= rol_template
		#Si ya existe el rol para el proyecto
		if rol != None:
			return rol

		#Si no existe el rol para el proyecto lo crea
		rol = Rol()
		#cambia el nombre del rol
		rol.codigo = cod_rol+'_'+str(proyecto.id_proyecto)
		rol.nombre = rol_template.nombre
		rol.descripcion = rol_template.descripcion
		#se periste el rol
		DBSession.add(rol)

		#rol = self.get_rol_by_codigo(rol.nombre)
		#Se obtienen los permisos del template
		permisos_rol = DBSession.query(Permiso).\
						filter(RolPermiso.permiso_id == Permiso.permiso_id).\
						filter(RolPermiso.rol_id == rol_template.rol_id)
		#Anhade a la session el rol para ser persistido
		rol = rol_util.get_by_codigo(rol.codigo)
		#Se copian los permisos del template a rol nuevo
		for permiso in permisos_rol:
			rol.permisos.append(permiso)

			rpp = RolPermisoProyecto()
			rpp.proyecto_id = proyecto.id_proyecto
			rpp.rol_id = rol.rol_id
			rpp.permiso_id = permiso.permiso_id
			#Asocia el rol con los permisos y el proyecto
			#rol._permisos.append(permiso)
			DBSession.add(rpp)

		DBSession.add(rol)
		#En el caso de que
		#self.commit_transaction(can_commit)

		return rol
Exemple #20
0
	def post(self, idfase, _method, **kw):
		#del kw['sprox_id']
		#linea_base = LineaBase(**kw)
		lista_codigos = []
		dic = kw
		for d in dic:
			#print 'dddddd = '+ d
			lista_codigos.append(d.replace('_', '-'))

		lista_items = DBSession.query(Item).filter( Item.codigo.in_(lista_codigos) ).\
											all()

		linea_base = LineaBase()
		linea_base.codigo = linea_base_util.gen_codigo('LB',idfase)
		linea_base.estado = estado_linea_base_util.get_by_codigo('Cerrada')
		linea_base.fase = idfase

		for i in lista_items:
			linea_base.items.append(i)

		DBSession.add(linea_base)

		redirect("/miproyecto/fase/linea_base/list/"+str(idfase))
Exemple #21
0
	def post(self, idtipo,args={}, **kw):
		"""
		Evento invocado luego de un evento post en el form de crear
		ecargado de persistir las nuevas instancias.

		@type  idtipo : Integer
		@param idtipo : Identificador del tipo de item.

		@type  args : Hash
		@param args : Argumentos de template

		@type  kw : Hash
		@param kw : Keywords

		"""
		del kw['sprox_id']
		atributo_tipo_item = AtributoTipoItem()
		atributo_tipo_item.tipo_item = idtipo
		atributo_tipo_item.nombre = kw['nombre']
		atributo_tipo_item.tipo_id = kw['tipo']
		DBSession.add(atributo_tipo_item)

		items = DBSession.query(Item).filter(Item.tipo_item==idtipo)

		for item in items :
			detalle = DetalleItem()
			detalle.nombre = atributo_tipo_item.nombre
			detalle.id_atributo_tipo_item = atributo_tipo_item.id_atributo_tipo_item
			detalle.valor = None
			detalle.recurso = None
			item.detalles.append(detalle)
			DBSession.merge(item)
		DBSession.flush()

		flash("El Atributo del tipo de Item ha sido creado correctamente")
		redirect('/miproyecto/fase/tipo_item/atributos/'+idtipo+'/new')
Exemple #22
0
    def put(self, *args, **kw):
        """update"""
        pks = self.provider.get_primary_fields(self.model)
        for i, pk in enumerate(pks):
            if pk not in kw and i < len(args):
                kw[pk] = args[i]

        #self.provider.update(self.model, params=kw)
        
        log.debug('detalleEditado: %s' %kw)
        detalleitem = DBSession.query(DetalleItem).filter_by(id=kw['id']).first()
        
        if str(detalleitem.tipo).__eq__('integer'):
            try:
                int(kw['valor'])
            except:
                flash('\"' + str(detalleitem.nombrecampo) + '\". Debe ingresar un entero', 'error')
                redirect('../'+kw['id']+'/edit')
        elif str(detalleitem.tipo).__eq__('date'):
            """False = fecha no valida
                True = fecha valida"""
            if not (self.fechaValida(kw['valor'])):
                flash('\"' + str(detalleitem.nombrecampo) + '\" Fecha no valida. Formato: dd/mm/aaaa', 'error')
                redirect('../'+kw['id']+'/edit')
        else:
            if kw['valor'].__eq__(''):
                flash('\"' + str(detalleitem.nombrecampo) + '\" no puede ser vacio', 'error')
                redirect('../'+kw['id']+'/edit')
                
        """-----------Se obtiene el ID item a editado-------------"""
        iid=DBSession.query(DetalleItem.iditem).filter_by(id=kw[pk]).first()
        
        """Se crea un nuevo item"""
        itemeditado=DBSession.query(Item).filter_by(id=iid).first()
        itemnuevo=Item()
        itemnuevo.version=itemeditado.version + 1
        itemnuevo.idTipoDeItem=itemeditado.idTipoDeItem
        itemnuevo.idFase=itemeditado.idFase
        itemnuevo.idLineaBase=itemeditado.idLineaBase
        itemnuevo.fechaCreacion=itemeditado.fechaCreacion
        itemnuevo.nrohistorial=itemeditado.nrohistorial
        itemnuevo.ultimaversion=1
        itemeditado.ultimaversion=0
        itemnuevo.estado='modificado'
        itemnuevo.complejidad=itemeditado.complejidad
        itemnuevo.nombre=itemeditado.nombre
        DBSession.add(itemnuevo)

        """Realiza copia de los valores de los atributos especificos"""
            
        atributoeditado=DBSession.query(DetalleItem).filter_by(iditem=itemeditado.id).all()
            
        for objeto in atributoeditado:
            
            
            nuevoDetalle=DetalleItem()
            nuevoDetalle.tipo=objeto.tipo
            nuevoDetalle.nombrecampo=objeto.nombrecampo
            
            if str(objeto.id)==str(kw[pk]):
                nuevoDetalle.valor=kw['valor']
            else:
                nuevoDetalle.valor=objeto.valor

            nuevoDetalle.iditem=itemnuevo.id
            DBSession.add(nuevoDetalle)
                
        """Realiza copia de los adjuntos"""
        adjuntositemeditado=DBSession.query(Adjuntos).filter_by(idItem=itemeditado.id).all()
        
        for adj in adjuntositemeditado:
            itemnuevoadjunto=Adjuntos()
            itemnuevoadjunto.idItem=itemnuevo.id
            itemnuevoadjunto.filename=adj.filename
            itemnuevoadjunto.filecontent=adj.filecontent
            DBSession.add(itemnuevoadjunto)
        
        
        """Copia las relaciones """
        relaciones = DBSession.query(RelacionItem.idItem1,RelacionItem.idItem2).filter((RelacionItem.idItem2==itemeditado.id) | (RelacionItem.idItem1==itemeditado.id)).all()
        longitud = len(relaciones)
        newRelation=RelacionItem()
        for x in range(longitud):
            if int(itemeditado.id) == int(relaciones[x][0]):
                newRelation.idItem1=int(itemnuevo.id)
                newRelation.idItem2=relaciones[x][1]
                DBSession.add(newRelation)
                #self.provider.create(RelacionItem, params=newRelation)
            elif int(itemeditado.id) == int(relaciones[x][1]):
                newRelation.idItem1=relaciones[x][0]
                newRelation.idItem2=int(itemnuevo.id)
                DBSession.add(newRelation)
        
        
        #detalleitem/?iid=113
        
        redirect('../?iid=' + str(itemnuevo.id) )
Exemple #23
0
    def put(self, *args, **kw):
        """update"""

        pks = self.provider.get_primary_fields(self.model)
        for i, pk in enumerate(pks):
            if pk not in kw and i < len(args):
                kw[pk] = args[i]
        """Extrae todos los valores del item a modificar, para luego crear un nuevo item"""

        valoresItem = DBSession.query(
            Item.version, Item.idTipoDeItem, Item.idFase, Item.idLineaBase,
            Item.fechaCreacion, Item.nrohistorial,
            Item.ultimaversion).filter_by(id=kw['id']).first()
        """Se crea una lista, y se le agrega los valores que tendra el item. """
        nuevo = {}
        nuevo['version'] = valoresItem[0] + 1
        nuevo['idTipoDeItem'] = valoresItem[1]
        nuevo['idFase'] = valoresItem[2]
        nuevo['idLineaBase'] = valoresItem[3]
        nuevo['fechaCreacion'] = str(valoresItem[4])
        nuevo['nrohistorial'] = valoresItem[5]
        nuevo['ultimaversion'] = valoresItem[6]
        nuevo['estado'] = 'modificado'
        nuevo['complejidad'] = kw['complejidad']
        nuevo['nombre'] = kw['nombre']
        itemnuevo = self.provider.create(self.model, params=nuevo)
        """Realiza copia de los valores de los atributos especificos"""
        itemeditado = DBSession.query(Item).filter_by(id=kw['id']).first()
        atributoeditado = DBSession.query(DetalleItem).filter_by(
            iditem=itemeditado.id).all()

        for objeto in atributoeditado:
            nuevoDetalle = DetalleItem()
            nuevoDetalle.tipo = objeto.tipo
            nuevoDetalle.nombrecampo = objeto.nombrecampo
            nuevoDetalle.valor = objeto.valor
            nuevoDetalle.iditem = itemnuevo.id
            DBSession.add(nuevoDetalle)
        """Realiza copia de los adjuntos"""
        adjuntositemeditado = DBSession.query(Adjuntos).filter_by(
            idItem=itemeditado.id).all()

        for adj in adjuntositemeditado:
            itemnuevoadjunto = Adjuntos()
            itemnuevoadjunto.idItem = itemnuevo.id
            itemnuevoadjunto.filename = adj.filename
            itemnuevoadjunto.filecontent = adj.filecontent
            DBSession.add(itemnuevoadjunto)
        """-----------------------------"""

        itemeditado = DBSession.query(Item).filter_by(id=kw['id']).first()
        itemeditado.ultimaversion = 0
        itemnuevo = DBSession.query(Item.id).filter_by(
            nrohistorial=nuevo['nrohistorial'], ultimaversion=1).first()
        relaciones = DBSession.query(
            RelacionItem.idItem1, RelacionItem.idItem2).filter(
                (RelacionItem.idItem2 == itemeditado.id)
                | (RelacionItem.idItem1 == itemeditado.id)).all()

        longitud = len(relaciones)
        newRelation = {}

        for x in range(longitud):
            if int(itemeditado.id) == int(relaciones[x][0]):
                newRelation['idItem1'] = int(itemnuevo[0])
                newRelation['idItem2'] = relaciones[x][1]
                self.provider.create(RelacionItem, params=newRelation)
            elif int(itemeditado.id) == int(relaciones[x][1]):
                newRelation['idItem1'] = relaciones[x][0]
                newRelation['idItem2'] = int(itemnuevo[0])
                self.provider.create(RelacionItem, params=newRelation)

        ids = []
        ids.append(int(itemnuevo[0]))
        self.recorrerArbolAtras(ids, int(itemnuevo[0]))
        self.recorrerArbolAdelante(ids, int(itemnuevo[0]))
        ids.remove(int(itemnuevo[0]))
        longitudids = len(ids)

        for x in range(longitudids):
            itemrevision = DBSession.query(Item).filter_by(
                id=ids[x], ultimaversion=1).first()

            if itemrevision != None:
                if itemrevision.estado != 'modificado':
                    itemrevision.estado = 'revision'
                    if itemrevision.idLineaBase != None:
                        lineabase = DBSession.query(LineaBase).filter_by(
                            id=itemrevision.idLineaBase).first()
                        if lineabase.estado == 'cerrada':
                            lineabase.estado = 'comprometida'
                            listalineabase = DBSession.query(
                                LineaBase).filter_by(
                                    idFase=lineabase.idFase).all()
                            desarrollo = True
                            longitud = len(listalineabase)

                            for y in range(longitud):
                                if str(listalineabase[y].estado).__eq__(
                                        'cerrada'):
                                    desarrollo = False

                            if desarrollo:
                                fase = DBSession.query(Fase).filter_by(
                                    id=lineabase.idFase).first()
                                fase.estado = 'desarrollo'

        flash("El item \"" + kw['nombre'] +
              "\" ha sido modificado correctamente")

        redirect('../' + '../item/?fid=' + str(nuevo['idFase']))
Exemple #24
0
    def edit(self, *args, **kw):
        """este codigo es ejecutado cuando se revierte un item """

        pks = self.provider.get_primary_fields(self.model)

        kw = {}
        for i, pk in enumerate(pks):
            kw[pk] = args[i]
        value = self.edit_filler.get_value(kw)
        """-----------Se obtiene el item a revertir -------------"""
        item = DBSession.query(Item).filter_by(id=kw['id']).first()
        """------------------------------------------------------"""
        """------obtine el numero de la mayor version del item---"""
        versionmayor = DBSession.query(Item.version).filter_by(
            nrohistorial=item.nrohistorial, ultimaversion=1).first()
        """------------------------------------------------------"""
        """ ---el item con la version mayor, cambia su ultimaversion a cero --- """
        item3 = DBSession.query(Item).filter_by(nrohistorial=item.nrohistorial,
                                                ultimaversion=1).first()
        log.debug('item3= %s' % item3)
        item3.ultimaversion = 0

        log.debug("versionmayor= %s" % versionmayor[0])

        item2 = Item()
        item2.nombre = item.nombre
        item2.idTipoDeItem = item.idTipoDeItem
        item2.idFase = item.idFase
        item2.idLineaBase = item.idLineaBase
        """el item a revertir aumenta su version a la ultima y el
        el item con la ultima version, "ultima version" pasa a 0 """
        item2.version = versionmayor[0] + 1
        item2.ultimaversion = 1
        item2.estado = item.estado
        item2.complejidad = item.complejidad
        item2.fechaCreacion = item.fechaCreacion
        item2.nrohistorial = item.nrohistorial
        DBSession.add(item2)
        """Realiza copia de los valores de los atributos especificos"""

        atributoeditado = DBSession.query(DetalleItem).filter_by(
            iditem=item.id).all()

        for objeto in atributoeditado:
            nuevoDetalle = DetalleItem()
            nuevoDetalle.tipo = objeto.tipo
            nuevoDetalle.nombrecampo = objeto.nombrecampo
            nuevoDetalle.valor = objeto.valor
            nuevoDetalle.iditem = item2.id  #el ID del nuevo item
            DBSession.add(nuevoDetalle)
        """Realiza copia de los adjuntos"""
        adjuntositemeditado = DBSession.query(Adjuntos).filter_by(
            idItem=item.id).all()

        for adj in adjuntositemeditado:

            log.debug("adj: %s" % adj)
            itemnuevoadjunto = Adjuntos()
            itemnuevoadjunto.idItem = item2.id
            itemnuevoadjunto.filename = adj.filename
            itemnuevoadjunto.filecontent = adj.filecontent
            DBSession.add(itemnuevoadjunto)
        """Copia las relaciones """
        relaciones = DBSession.query(
            RelacionItem.idItem1,
            RelacionItem.idItem2).filter((RelacionItem.idItem2 == item.id) | (
                RelacionItem.idItem1 == item.id)).all()
        longitud = len(relaciones)

        for x in range(longitud):
            newRelation = RelacionItem()

            if int(item.id) == int(relaciones[x][0]):
                newRelation.idItem1 = int(item2.id)
                newRelation.idItem2 = relaciones[x][1]
                DBSession.add(newRelation)
                #self.provider.create(RelacionItem, params=newRelation)
            elif int(item.id) == int(relaciones[x][1]):
                newRelation.idItem1 = relaciones[x][0]
                newRelation.idItem2 = int(item2.id)
                DBSession.add(newRelation)

        redirect('../' + '../item/?fid=' + str(item.idFase))
Exemple #25
0
	def post(self, idfase, args={},**kw):
		"""
		Evento invocado luego de un evento post en el form de crear
		ecargado de persistir las nuevas instancias.

		@type  idfase : Integer
		@param idfase : Identificador de la fase.

		@type  args : Hash
		@param args : Argumentos de template

		@type  kw : Hash
		@param kw : Keywords

		"""

		del kw['sprox_id']
		item = Item()
		item.nombre = kw['nombre']
		item.descripcion = kw['descripcion']
		item.complejidad = kw['complejidad']
		item.prioridad = kw['prioridad']
		item.observacion = kw['observacion']
		item.fase = idfase
		# Se crea con estado En Desarrollo por defecto
		item.estado = 2
		item.tipo_item = kw['tipo_item_relacion']
		item.version = 1

		tipo_item = DBSession.query(TipoItem).get(item.tipo_item)

		#anhadir detalles al item segun el tipo de item al cual corresponda
		item.detalles = item_util.anadir_detalles(tipo_item)

		item.codigo = item_util.gen_cod(idfase, item.tipo_item)
		DBSession.add(item)
		DBSession.flush()

		# Se guarda la relacion elegida en el formulario
		if(kw['relaciones'] != None):

			relacion = RelacionItem()
			#el padre es el item que se selecciono en el combo
			relacion.id_item_actual = kw['relaciones']
			#el item nuevo es el hijo
			relacion.id_item_relacionado = item.id_item
			item_relacionado = DBSession.query(Item).get(kw['relaciones'])

			#auditar el item
			item_util.audit_item(item_relacionado)
			item_relacionado.version += 1

			DBSession.merge(item_relacionado)
			DBSession.flush()

			if(item_relacionado.fase == int(idfase)):
				#relacion padre-hijo
				relacion.relacion_parentesco = 1
			else:
				relacion.relacion_parentesco = 2

 			DBSession.add(relacion)
			DBSession.flush()

		#flash("El item se ha creado correctamente")
		redirect('/miproyecto/fase/item/ver/'+str(item.id_item))
Exemple #26
0
 def edit(self, *args, **kw):
     
     """este codigo es ejecutado cuando se revierte un item """
    
     pks = self.provider.get_primary_fields(self.model)
     
     kw = {}
     for i, pk in  enumerate(pks):
         kw[pk] = args[i]
     value = self.edit_filler.get_value(kw)
     
     """-----------Se obtiene el item a revertir -------------"""
     item=DBSession.query(Item).filter_by(id=kw['id']).first()
     """------------------------------------------------------"""
     
     
     """------obtine el numero de la mayor version del item---"""
     versionmayor= DBSession.query(Item.version).filter_by(nrohistorial=item.nrohistorial ,ultimaversion=1).first()
     """------------------------------------------------------"""
     
     """ ---el item con la version mayor, cambia su ultimaversion a cero --- """
     item3=DBSession.query(Item).filter_by(nrohistorial=item.nrohistorial,ultimaversion=1).first()
     log.debug('item3= %s'%item3 )
     item3.ultimaversion=0
     
     
     
     
     log.debug("versionmayor= %s" %versionmayor[0])
     
     item2=Item()
     item2.nombre=item.nombre
     item2.idTipoDeItem=item.idTipoDeItem
     item2.idFase=item.idFase
     item2.idLineaBase=item.idLineaBase
     
     """el item a revertir aumenta su version a la ultima y el
     el item con la ultima version, "ultima version" pasa a 0 """
     item2.version= versionmayor[0]+1
     item2.ultimaversion=1
     item2.estado=item.estado
     item2.complejidad=item.complejidad
     item2.fechaCreacion=item.fechaCreacion
     item2.nrohistorial=item.nrohistorial
     DBSession.add(item2)
     
     """Realiza copia de los valores de los atributos especificos"""
         
     atributoeditado=DBSession.query(DetalleItem).filter_by(iditem=item.id).all()
         
         
     for objeto in atributoeditado:
         nuevoDetalle=DetalleItem()
         nuevoDetalle.tipo=objeto.tipo
         nuevoDetalle.nombrecampo=objeto.nombrecampo
         nuevoDetalle.valor=objeto.valor
         nuevoDetalle.iditem=item2.id #el ID del nuevo item
         DBSession.add(nuevoDetalle)
             
     """Realiza copia de los adjuntos"""
     adjuntositemeditado=DBSession.query(Adjuntos).filter_by(idItem=item.id).all()
         
     for adj in adjuntositemeditado:
             
         log.debug("adj: %s" %adj)
         itemnuevoadjunto=Adjuntos()
         itemnuevoadjunto.idItem=item2.id
         itemnuevoadjunto.filename=adj.filename
         itemnuevoadjunto.filecontent=adj.filecontent
         DBSession.add(itemnuevoadjunto)
         
         
     
     """Copia las relaciones """
     relaciones = DBSession.query(RelacionItem.idItem1,RelacionItem.idItem2).filter((RelacionItem.idItem2==item.id) | (RelacionItem.idItem1==item.id)).all()
     longitud = len(relaciones)
     
     for x in range(longitud):
         newRelation=RelacionItem()
         
         if int(item.id) == int(relaciones[x][0]):
             newRelation.idItem1=int(item2.id)
             newRelation.idItem2=relaciones[x][1]
             DBSession.add(newRelation)
             #self.provider.create(RelacionItem, params=newRelation)
         elif int(item.id) == int(relaciones[x][1]):
             newRelation.idItem1=relaciones[x][0]
             newRelation.idItem2=int(item2.id)
             DBSession.add(newRelation)
     
     redirect('../'+'../item/?fid=' + str(item.idFase))
Exemple #27
0
	def revertir_item (self, historial_item):
		"""
		Dada una entidad HistorialItem que representa una version
		anterior del item en si se obtiene de la tabla las entradas de
		esa version para que el item recupere los valores de esa version
		"""
		#debe ser una version posterior a la actual
		item = DBSession.query(Item).get(historial_item.id_item)
		detalles = item.detalles
		print "Recuperar el item "+str(item)
		item.nombre = historial_item.nombre
		item.codigo = historial_item.codigo
 		item.estado_actual = estado_item_util.get_by_codigo('Revision')
		#item.estado = item.estado_actual.id_estado_item
		item.tipo_item = historial_item.tipo_item
		item.fase = historial_item.fase
		item.version += 1
		item.prioridad = historial_item.prioridad
		item.complejidad = historial_item.complejidad
		item.descripcion = historial_item.descripcion
		item.observacion = historial_item.observacion
		item.linea_base = None

		#Se borran todos los archivos
		print "Borrando todos los archivos acutales"
		for archivo in item.archivos :
			DBSession.delete(archivo)
		#Se reestauran todos los arachivos
		item.archivos = []
		DBSession.merge(item)
		print "Anhadiendo nuevos archivos."
		for archivo in historial_item.archivos :
			print "archivo: "+ str(archivo)
			new_archivo = Archivo()
			new_archivo.archivo = archivo.archivo
			new_archivo.file_name = archivo.file_name
			new_archivo.content_type = archivo.content_type
			new_archivo.id_item = item.id_item

			DBSession.add(new_archivo)


		print "Recuperar los detalles"
		#recuperar los detalles
		historial_detalles = DBSession.query(HistorialDetalleItem).\
			filter(HistorialDetalleItem.id_historial == historial_item.id_historial_item).\
			all()

		#variable para indexar las posiciones que corresponden a los valores
		#de esa version
		atributo_mapper = {}
		index = 0

		"""
		Se establecen los detalles actuales del item a None
		para que el item conserve los campos definidos por su tipo de
		item. El item recuperara los valores de la version a la cual se
		quiere revertir
		"""
		for detalle in item.detalles:
			detalle.valor = None
			detalle.observacion = None
			atributo_mapper[detalle.id_atributo_tipo_item] = index
			index += 1

		for hist_detalle in historial_detalles:

			index = atributo_mapper[hist_detalle.id_atributo_tipo_item]

			item.detalles[index].observacion = hist_detalle.observacion
			item.detalles[index].valor = hist_detalle.valor

		DBSession.merge(item)

		#borrar las relaciones actuales
		relaciones = DBSession.query(RelacionItem).\
							filter(or_(RelacionItem.id_item_actual == item.id_item,
							RelacionItem.id_item_relacionado == item.id_item)).\
							all()
		print relaciones

		for relacion in relaciones:
			#se verifica que no deje huerfanos
			if not self.deja_huerfanos(relacion):
				print 'borrando relacion'
				DBSession.delete(relacion)

		print "Recuperar las relaciones"
		#recuperar los relaciones
		historial_relaciones = DBSession.query(HistorialRelacion).\
			filter(HistorialRelacion.id_item_1 == item.id_item or
			HistorialRelacion.id_item_2 == item.id_item).\
			all()

		print historial_relaciones

		for hist_relacion in historial_relaciones:
			relacion = RelacionItem()
			if(DBSession.query(Item).get(hist_relacion.id_item_1)!=None and
				DBSession.query(Item).get(hist_relacion.id_item_2)!=None):
				relacion.id_item_actual = hist_relacion.id_item_1
				relacion.id_item_relacionado = hist_relacion.id_item_2
				relacion.relacion_parentesco = hist_relacion.id_tipo_relacion
				DBSession.merge(relacion)

		print "Merge"
		DBSession.merge(item)
		print "Flush"
		DBSession.flush()
		return
Exemple #28
0
	def audit_item(self, item):
		"""
		Registra los cambios realizados al item determinado en el historial
		se persiste los valore del item y su atributos en el historial.

		@type  item  : Integer
		@param item  : Identificador del proyecto al cual se va aplicar el rol
		"""
		historial = HistorialItem()

		historial.id_item = item.id_item
		historial.nombre = item.nombre
		historial.codigo = item.codigo
		historial.estado = item.estado
		historial.tipo_item = item.tipo_item
		historial.fase = item.fase
		historial.version = item.version
		historial.prioridad = item.prioridad
		historial.complejidad = item.complejidad
		historial.descripcion = item.descripcion
		historial.observacion = item.observacion

		#~ #historial de detalles
		#~ detalles = DBSession.query(DetalleItem).\
					#~ filter(DetalleItem.id_item==item.id_item).\
					#~ all()
		for archivo in item.archivos :
			historial_archivo = HistorialArchivo()
			historial_archivo.archivo = archivo.archivo
			historial_archivo.file_name = archivo.file_name
			historial_archivo.content_type = archivo.content_type
			historial_archivo.id_historial =  historial.id_historial_item
			historial_archivo.id_item = archivo.id_item

			historial.archivos.append(historial_archivo)

		for detalle in item.detalles:
			historial_detalle = HistorialDetalleItem()
			historial_detalle.id_detalle = detalle.id_item_detalle
			historial_detalle.id_atributo_tipo_item = detalle.id_atributo_tipo_item
			historial_detalle.id_item = detalle.id_item
			historial_detalle.observacion = detalle.observacion
			historial_detalle.valor = detalle.valor

			historial.detalles.append(historial_detalle)

		#Obtener las relaciones
		relaciones = DBSession.query(RelacionItem).\
							filter(or_(RelacionItem.id_item_actual == item.id_item,
							RelacionItem.id_item_relacionado == item.id_item)).\
							all()

		print relaciones

		for relacion in relaciones:
			historial_relacion = HistorialRelacion()
			historial_relacion.id_item_1 = relacion.id_item_actual
			historial_relacion.id_item_2 = relacion.id_item_relacionado
			historial_relacion.id_tipo_relacion = relacion.relacion_parentesco
			historial.relaciones.append(historial_relacion)

		DBSession.add(historial)
		DBSession.flush()
Exemple #29
0
    def new(self, iid=None, *args, **kw):
        """Aqui entra solo para mostrar la vista y para guardar, el descargar
        borrar esta implementado en root"""

        log.debug('iid: %s' % iid)
        log.debug('adjuntos: %s' % kw)
        longitud = len(kw)
        log.debug('longitud: %s' % longitud)
        if longitud == 0:
            #current_files = DBSession.query(Adjuntos).all()
            current_files = DBSession.query(Adjuntos).filter_by(
                idItem=iid).all()

            return dict(current_files=current_files,
                        model=self.model.__name__,
                        iid=iid)
        else:
            if iid == "save":
                iid = kw['idItem']

            idItem = kw['idItem']
            userfile = kw['userfile']
            log.debug('idItem: %s' % idItem)
            if userfile == '':
                flash("No ha selecionado ningun archivo", "error")
                redirect("../new/?iid=" + str(iid))
            """
            forbidden_files = [".js", ".htm", ".html"]
            for forbidden_file in forbidden_files:
                if userfile.filename.find(forbidden_file) != -1:
                    return redirect("../adjuntos/new")
            filecontent = userfile.file.read()
            new_file = Adjuntos(filename=userfile.filename, filecontent=filecontent,idItem=idItem )
            DBSession.add(new_file)
            DBSession.flush()
            """
            """Realiza una copia del item cuando se adjunta un archivo y aumenta su version"""
            itemeditado = DBSession.query(Item).filter_by(id=idItem).first()
            itemnuevo = Item()
            itemnuevo.version = itemeditado.version + 1
            itemnuevo.idTipoDeItem = itemeditado.idTipoDeItem
            itemnuevo.idFase = itemeditado.idFase
            itemnuevo.idLineaBase = itemeditado.idLineaBase
            itemnuevo.fechaCreacion = itemeditado.fechaCreacion
            itemnuevo.nrohistorial = itemeditado.nrohistorial
            itemnuevo.ultimaversion = 1
            itemeditado.ultimaversion = 0
            itemnuevo.estado = 'modificado'
            itemnuevo.complejidad = itemeditado.complejidad
            itemnuevo.nombre = itemeditado.nombre
            DBSession.add(itemnuevo)
            """Realiza copia de los valores de los atributos especificos"""

            atributoeditado = DBSession.query(DetalleItem).filter_by(
                iditem=itemeditado.id).all()

            for objeto in atributoeditado:
                nuevoDetalle = DetalleItem()
                nuevoDetalle.tipo = objeto.tipo
                nuevoDetalle.nombrecampo = objeto.nombrecampo
                nuevoDetalle.valor = objeto.valor
                nuevoDetalle.iditem = itemnuevo.id
                DBSession.add(nuevoDetalle)
            """Copia las relaciones """
            relaciones = DBSession.query(
                RelacionItem.idItem1, RelacionItem.idItem2).filter(
                    (RelacionItem.idItem2 == itemeditado.id)
                    | (RelacionItem.idItem1 == itemeditado.id)).all()
            longitud = len(relaciones)

            for x in range(longitud):
                newRelation = RelacionItem()
                log.debug('Creando relaciones')
                if int(itemeditado.id) == int(relaciones[x][0]):
                    newRelation.idItem1 = int(itemnuevo.id)
                    newRelation.idItem2 = relaciones[x][1]
                    DBSession.add(newRelation)
                    #self.provider.create(RelacionItem, params=newRelation)
                elif int(itemeditado.id) == int(relaciones[x][1]):
                    newRelation.idItem1 = relaciones[x][0]
                    newRelation.idItem2 = int(itemnuevo.id)
                    DBSession.add(newRelation)
            """Realiza copia de los adjuntos"""
            adjuntositemeditado = DBSession.query(Adjuntos).filter_by(
                idItem=itemeditado.id).all()

            for adj in adjuntositemeditado:
                itemnuevoadjunto = Adjuntos()

                log.debug("adj: %s" % adj)
                itemnuevoadjunto = Adjuntos()
                itemnuevoadjunto.idItem = itemnuevo.id
                itemnuevoadjunto.filename = adj.filename
                itemnuevoadjunto.filecontent = adj.filecontent
                DBSession.add(itemnuevoadjunto)

            forbidden_files = [".js", ".htm", ".html"]
            for forbidden_file in forbidden_files:
                if userfile.filename.find(forbidden_file) != -1:
                    return redirect("../adjuntos/new")
            filecontent = userfile.file.read()

            log.debug('itemnuevo: %s' % itemnuevo.id)

            new_file = Adjuntos(filename=userfile.filename,
                                filecontent=filecontent,
                                idItem=itemnuevo.id)
            DBSession.add(new_file)
            #DBSession.flush()

            #self.provider.create(self.model, params=nuevo)

            log.debug('adjuntositemeditado: %s' % adjuntositemeditado)

            redirect("../new/?iid=" + str(itemnuevo.id))
Exemple #30
0
	def put(self, id_item, **kw):
		item =  DBSession.query(Item).get(id_item)
		# Se registra en el historial el item antes de ser modificado
		item_util.audit_item(item)
		# Se modifica el item
		item.descripcion = kw['descripcion']
		#item.codigo = kw['codigo']
		item.nombre = kw['nombre']
		item.complejidad = kw['complejidad']
		item.prioridad = kw['prioridad']
		item.observacion = kw['observacion']
		item.version = int(item.version) + 1
		item.estado = 2 # En Desarrollo
		#Se persiste el item
		DBSession.merge(item)
		DBSession.flush()

		#se verifica si ya tenia un padre
		relacion = DBSession.query(RelacionItem).\
					filter(RelacionItem.id_item_relacionado==item.id_item).\
					filter(RelacionItem.relacion_parentesco==1).\
					all()

		#se borra las relacion padre hijo si existia
		if relacion != []:
			DBSession.delete(relacion[0])

		# Si se elijio NONE en las relaciones no se hace nada
		if(kw['relaciones'] != None):

			item_padre_antecesor = DBSession.query(Item).get(kw['relaciones'])

			item_util.audit_item(item_padre_antecesor)
			item_padre_antecesor.version += 1

			DBSession.merge(item_padre_antecesor)
			DBSession.flush()

			#tipo de relacion 1 padre-hijo, 2 antecesor sucesor
			tipo_relacion = 2
			if item_padre_antecesor.fase == int(item.fase):
				tipo_relacion = 1

			rel = RelacionItem()
			rel.relacion_parentesco = tipo_relacion
			rel.id_item_actual = kw['relaciones']
			rel.id_item_relacionado = item.id_item
			DBSession.add(rel)

			DBSession.flush()

		fase = DBSession.query(Fase).get(item.fase)
		grafo = item_util.proyectGraphConstructor(fase.proyecto)
		item_util.marcar_en_revision(grafo, item.id_item)

		#la linea del item modificado permanece abierta
		if item.linea_base != None:
			linea = item.linea_base
			linea.estado = estado_linea_base_util.get_by_codigo('Abierta')

		flash("El item " +str(item.nombre)+ " ha sido modificado correctamente.")
		redirect('/miproyecto/fase/item/ver/'+str(item.id_item))
Exemple #31
0
   def post(self, *args, **kw):
       
 
       """Se crea un nuevo item"""
       itemeditado=DBSession.query(Item).filter_by(id=kw['idItem1']).first()
       itemnuevo=Item()
       itemnuevo.version=itemeditado.version + 1
       itemnuevo.idTipoDeItem=itemeditado.idTipoDeItem
       itemnuevo.idFase=itemeditado.idFase
       itemnuevo.idLineaBase=itemeditado.idLineaBase
       itemnuevo.fechaCreacion=itemeditado.fechaCreacion
       itemnuevo.nrohistorial=itemeditado.nrohistorial
       itemnuevo.ultimaversion=1
       itemeditado.ultimaversion=0
       itemnuevo.estado='modificado'
       itemnuevo.complejidad=itemeditado.complejidad
       itemnuevo.nombre=itemeditado.nombre
       DBSession.add(itemnuevo)
       DBSession.flush()
       
       """-------------------------"""
       
       
       """ Crea las nuevas relaciones"""
       
       kw['idItem1']=itemnuevo.id
       """ Se crea las relaciones"""
       ids=kw['idItem2']
       longitud=len(kw['idItem2'])
       for indice in range(longitud):
           kw['idItem2']=ids[indice] 
           self.provider.create(self.model, params=kw)
           
       ids=kw['idItem2Anterior']
       longitud=len(kw['idItem2Anterior'])
       for indice in range(longitud):
           kw['idItem2']=ids[indice] 
           self.provider.create(self.model, params=kw)
   
       
       """Realiza copia de los valores de los atributos especificos"""
           
       atributoeditado=DBSession.query(DetalleItem).filter_by(iditem=itemeditado.id).all()
           
       for objeto in atributoeditado:
           nuevoDetalle=DetalleItem()
           nuevoDetalle.tipo=objeto.tipo
           nuevoDetalle.nombrecampo=objeto.nombrecampo
           nuevoDetalle.valor=objeto.valor
           nuevoDetalle.iditem=itemnuevo.id
           DBSession.add(nuevoDetalle)
               
       """Realiza copia de los adjuntos"""
       adjuntositemeditado=DBSession.query(Adjuntos).filter_by(idItem=itemeditado.id).all()
       
       for adj in adjuntositemeditado:
           itemnuevoadjunto=Adjuntos()
           itemnuevoadjunto.idItem=itemnuevo.id
           itemnuevoadjunto.filename=adj.filename
           itemnuevoadjunto.filecontent=adj.filecontent
           DBSession.add(itemnuevoadjunto)
       
       
       """Copia las relaciones """
       #itemnuevo=DBSession.query(Item.id).filter_by(nrohistorial=nuevo['nrohistorial'], ultimaversion=1).first()
       relaciones = DBSession.query(RelacionItem.idItem1,RelacionItem.idItem2).filter((RelacionItem.idItem2==itemeditado.id) | (RelacionItem.idItem1==itemeditado.id)).all()
       
       longitud = len(relaciones)
       
       
       for x in range(longitud):
           newRelation = {}
           if int(itemeditado.id) == int(relaciones[x][0]):
               newRelation['idItem1']=int(itemnuevo.id)
               newRelation['idItem2']=relaciones[x][1]
               self.provider.create(RelacionItem, params=newRelation)
           elif int(itemeditado.id) == int(relaciones[x][1]):
               newRelation['idItem1']=relaciones[x][0]
               newRelation['idItem2']=int(itemnuevo.id)
               self.provider.create(RelacionItem, params=newRelation)
       
       
       raise redirect('./?iid='+str(kw['idItem1']))
Exemple #32
0
    def new(self,fid=None ,*args, **kw):
        """Display a page to show a new record."""
        tmpl_context.widget = self.new_form
        
        
        log.debug('kwwwwnew: %s' %kw)
        
        
        longitud=len(kw)        
        if longitud==0:
            tiposdeitems=DBSession.query(TipoDeItem.id,TipoDeItem.nombre).filter(TipoDeItem.idFase != fid).all()
            return dict(value={"fid": fid}, model=self.model.__name__ ,importar_options=tiposdeitems)
        else:
           
            ids= kw['TiposDeItemImportar']
            log.debug('ids: %s' %ids)
            longitud= len(ids)
            
                
                
                
            for indice in range(longitud):
                """Hace una copia del tipo de item cambiando el idFase """
                idTipo= ids[indice]
                tipo=DBSession.query(TipoDeItem).filter_by(id=idTipo).first()
                
                log.debug('tiposss: %s' %tipo)
                
                tipocopia=TipoDeItem()
                tipocopia.nombre=tipo.nombre
                tipocopia.descripcion=tipo.descripcion
                log.debug('tipocopia: %s' %tipocopia)
                tipocopia.idFase=fid
                DBSession.add(tipocopia) #NuevoTipoItem es el nuevo objeto guardado
                
                
                NuevoTipoItem=DBSession.query(TipoDeItem.id).filter_by(nombre=tipocopia.nombre, descripcion=tipocopia.descripcion, idFase=fid).first()
                
                
                #Se copia los los atributos especificos del tipo de item
                campos=DBSession.query(Campos).filter_by(idTipoDeItem=idTipo).all()
                log.debug(campos)
                long2=len(campos)
                log.debug("long2: %s" %long2)
                
                for x in range(long2):
                    #se copia los campos pertenecientes al tipo de item pero con "idTipoDeItem" distinto
                    
                    log.debug("forrrr: %s" %x)
                    campocopia=Campos()
                    campocopia.nombre=campos[x].nombre
                    campocopia.tipoDeDato=campos[x].tipoDeDato
                    campocopia.idTipoDeItem=NuevoTipoItem.id
                    DBSession.add(campocopia) 
                    
                
                
            
        pid=DBSession.query(Fase.idproyec).filter_by(id=fid).first()
            
        redirect("../../fase/?pid="+ str(pid[0]))
        
        
        
            
            
            

        """ids= kw['idFase']
Exemple #33
0
    def delete(self, fileid):

        #log.debug("Soy Archivo Borrado")
        """Se extrae el ID del Item que supuestamente se borrará, para crear un nuevo Item """
        iid = DBSession.query(Adjuntos.idItem).filter_by(id=fileid).first()
        """Se crea un nuevo item"""
        itemeditado = DBSession.query(Item).filter_by(id=iid).first()
        itemnuevo = Item()
        itemnuevo.version = itemeditado.version + 1
        itemnuevo.idTipoDeItem = itemeditado.idTipoDeItem
        itemnuevo.idFase = itemeditado.idFase
        itemnuevo.idLineaBase = itemeditado.idLineaBase
        itemnuevo.fechaCreacion = itemeditado.fechaCreacion
        itemnuevo.nrohistorial = itemeditado.nrohistorial
        itemnuevo.ultimaversion = 1
        itemeditado.ultimaversion = 0
        itemnuevo.estado = 'modificado'
        itemnuevo.complejidad = itemeditado.complejidad
        itemnuevo.nombre = itemeditado.nombre
        DBSession.add(itemnuevo)
        """Realiza copia de los valores de los atributos especificos"""

        atributoeditado = DBSession.query(DetalleItem).filter_by(
            iditem=itemeditado.id).all()

        for objeto in atributoeditado:
            nuevoDetalle = DetalleItem()
            nuevoDetalle.tipo = objeto.tipo
            nuevoDetalle.nombrecampo = objeto.nombrecampo
            nuevoDetalle.valor = objeto.valor
            nuevoDetalle.iditem = itemnuevo.id
            DBSession.add(nuevoDetalle)
        """Realiza copia de los adjuntos"""
        adjuntositemeditado = DBSession.query(Adjuntos).filter_by(
            idItem=itemeditado.id).all()

        for adj in adjuntositemeditado:
            log.debug("adjuntoBorraado: %s" % adj.id)
            log.debug("fileid: %s" % fileid)

            if str(adj.id) != str(
                    fileid):  #No se copiará el archivo "supuestamente" borrado
                log.debug("fileid2: %s" % fileid)
                itemnuevoadjunto = Adjuntos()
                itemnuevoadjunto.idItem = itemnuevo.id
                itemnuevoadjunto.filename = adj.filename
                itemnuevoadjunto.filecontent = adj.filecontent
                DBSession.add(itemnuevoadjunto)
        """Copia las relaciones """
        relaciones = DBSession.query(
            RelacionItem.idItem1, RelacionItem.idItem2).filter(
                (RelacionItem.idItem2 == itemeditado.id)
                | (RelacionItem.idItem1 == itemeditado.id)).all()
        longitud = len(relaciones)

        for x in range(longitud):
            newRelation = RelacionItem()
            log.debug('Creando relaciones')
            if int(itemeditado.id) == int(relaciones[x][0]):
                newRelation.idItem1 = int(itemnuevo.id)
                newRelation.idItem2 = relaciones[x][1]
                DBSession.add(newRelation)
                #self.provider.create(RelacionItem, params=newRelation)
            elif int(itemeditado.id) == int(relaciones[x][1]):
                newRelation.idItem1 = relaciones[x][0]
                newRelation.idItem2 = int(itemnuevo.id)
                DBSession.add(newRelation)

        return redirect("../../adjuntos/new/?iid=" + str(itemnuevo.id))
Exemple #34
0
    def new(self,iid=None ,*args, **kw):
        
        """Aqui entra solo para mostrar la vista y para guardar, el descargar
        borrar esta implementado en root"""
        
        
        log.debug('iid: %s' %iid)
        log.debug('adjuntos: %s' %kw)
        longitud=len(kw)
        log.debug('longitud: %s' %longitud)
        if longitud==0:
            #current_files = DBSession.query(Adjuntos).all()
            current_files = DBSession.query(Adjuntos).filter_by(idItem=iid).all()
            
            return dict(current_files=current_files, model=self.model.__name__,iid=iid)
        else:
            if iid=="save":
                iid=kw['idItem']
                
            
            
            idItem=kw['idItem']
            userfile=kw['userfile']
            log.debug('idItem: %s' %idItem)
            if userfile=='':
                flash("No ha selecionado ningun archivo", "error")
                redirect("../new/?iid="+str(iid))
            """
            forbidden_files = [".js", ".htm", ".html"]
            for forbidden_file in forbidden_files:
                if userfile.filename.find(forbidden_file) != -1:
                    return redirect("../adjuntos/new")
            filecontent = userfile.file.read()
            new_file = Adjuntos(filename=userfile.filename, filecontent=filecontent,idItem=idItem )
            DBSession.add(new_file)
            DBSession.flush()
            """
            """Realiza una copia del item cuando se adjunta un archivo y aumenta su version"""
            itemeditado= DBSession.query(Item).filter_by(id=idItem).first()
            itemnuevo=Item()
            itemnuevo.version=itemeditado.version + 1
            itemnuevo.idTipoDeItem=itemeditado.idTipoDeItem
            itemnuevo.idFase=itemeditado.idFase
            itemnuevo.idLineaBase=itemeditado.idLineaBase
            itemnuevo.fechaCreacion=itemeditado.fechaCreacion
            itemnuevo.nrohistorial=itemeditado.nrohistorial
            itemnuevo.ultimaversion=1
            itemeditado.ultimaversion=0
            itemnuevo.estado='modificado'
            itemnuevo.complejidad=itemeditado.complejidad
            itemnuevo.nombre=itemeditado.nombre
            DBSession.add(itemnuevo)
            
            """Realiza copia de los valores de los atributos especificos"""
            
            atributoeditado=DBSession.query(DetalleItem).filter_by(iditem=itemeditado.id).all()
            
            
            for objeto in atributoeditado:
                nuevoDetalle=DetalleItem()
                nuevoDetalle.tipo=objeto.tipo
                nuevoDetalle.nombrecampo=objeto.nombrecampo
                nuevoDetalle.valor=objeto.valor
                nuevoDetalle.iditem=itemnuevo.id
                DBSession.add(nuevoDetalle)
                
                
            """Copia las relaciones """
            relaciones = DBSession.query(RelacionItem.idItem1,RelacionItem.idItem2).filter((RelacionItem.idItem2==itemeditado.id) | (RelacionItem.idItem1==itemeditado.id)).all()
            longitud = len(relaciones)
            
            for x in range(longitud):
                newRelation=RelacionItem()
                log.debug('Creando relaciones')
                if int(itemeditado.id) == int(relaciones[x][0]):
                    newRelation.idItem1=int(itemnuevo.id)
                    newRelation.idItem2=relaciones[x][1]
                    DBSession.add(newRelation)
                    #self.provider.create(RelacionItem, params=newRelation)
                elif int(itemeditado.id) == int(relaciones[x][1]):
                    newRelation.idItem1=relaciones[x][0]
                    newRelation.idItem2=int(itemnuevo.id)
                    DBSession.add(newRelation)
                
        
                
            """Realiza copia de los adjuntos"""
            adjuntositemeditado=DBSession.query(Adjuntos).filter_by(idItem=itemeditado.id).all()

            for adj in adjuntositemeditado:
                itemnuevoadjunto=Adjuntos()
                
                log.debug("adj: %s" %adj)
                itemnuevoadjunto=Adjuntos()
                itemnuevoadjunto.idItem=itemnuevo.id
                itemnuevoadjunto.filename=adj.filename
                itemnuevoadjunto.filecontent=adj.filecontent
                DBSession.add(itemnuevoadjunto)
            
            
            
            forbidden_files = [".js", ".htm", ".html"]
            for forbidden_file in forbidden_files:
                if userfile.filename.find(forbidden_file) != -1:
                    return redirect("../adjuntos/new")
            filecontent = userfile.file.read()
            
            log.debug('itemnuevo: %s' %itemnuevo.id)
            
            new_file = Adjuntos(filename=userfile.filename, filecontent=filecontent,idItem=itemnuevo.id )
            DBSession.add(new_file)
            #DBSession.flush()
            
            
            
                
            #self.provider.create(self.model, params=nuevo)
            
            log.debug('adjuntositemeditado: %s' %adjuntositemeditado)
                
           
                
            
            
            
            
            redirect("../new/?iid="+str(itemnuevo.id))
Exemple #35
0
    def put(self, *args, **kw):
        """update"""
        
        pks = self.provider.get_primary_fields(self.model)
        for i, pk in enumerate(pks):
            if pk not in kw and i < len(args):
                kw[pk] = args[i]
        
        
        """Extrae todos los valores del item a modificar, para luego crear un nuevo item"""
        
        valoresItem=DBSession.query(Item.version ,Item.idTipoDeItem ,Item.idFase ,Item.idLineaBase ,Item.fechaCreacion ,Item.nrohistorial,Item.ultimaversion).filter_by(id=kw['id']).first()
        
        """Se crea una lista, y se le agrega los valores que tendra el item. """
        nuevo={}
        nuevo['version']=valoresItem[0]+1
        nuevo['idTipoDeItem']=valoresItem[1]
        nuevo['idFase']=valoresItem[2]
        nuevo['idLineaBase']=valoresItem[3]
        nuevo['fechaCreacion']=str(valoresItem[4])
        nuevo['nrohistorial']=valoresItem[5]
        nuevo['ultimaversion']=valoresItem[6]
        nuevo['estado']='modificado'
        nuevo['complejidad']=kw['complejidad']
        nuevo['nombre']=kw['nombre']
        itemnuevo=self.provider.create(self.model, params=nuevo)
        
        """Realiza copia de los valores de los atributos especificos"""
        itemeditado=DBSession.query(Item).filter_by(id=kw['id']).first()    
        atributoeditado=DBSession.query(DetalleItem).filter_by(iditem=itemeditado.id).all()
            
        for objeto in atributoeditado:
            nuevoDetalle=DetalleItem()
            nuevoDetalle.tipo=objeto.tipo
            nuevoDetalle.nombrecampo=objeto.nombrecampo
            nuevoDetalle.valor=objeto.valor
            nuevoDetalle.iditem=itemnuevo.id
            DBSession.add(nuevoDetalle)
                
        """Realiza copia de los adjuntos"""
        adjuntositemeditado=DBSession.query(Adjuntos).filter_by(idItem=itemeditado.id).all()
        
        for adj in adjuntositemeditado:
            itemnuevoadjunto=Adjuntos()
            itemnuevoadjunto.idItem=itemnuevo.id
            itemnuevoadjunto.filename=adj.filename
            itemnuevoadjunto.filecontent=adj.filecontent
            DBSession.add(itemnuevoadjunto)
        """-----------------------------"""
        
        itemeditado=DBSession.query(Item).filter_by(id=kw['id']).first()
        itemeditado.ultimaversion=0
        itemnuevo=DBSession.query(Item.id).filter_by(nrohistorial=nuevo['nrohistorial'], ultimaversion=1).first()
        relaciones = DBSession.query(RelacionItem.idItem1,RelacionItem.idItem2).filter((RelacionItem.idItem2==itemeditado.id) | (RelacionItem.idItem1==itemeditado.id)).all()
        
        longitud = len(relaciones)
        newRelation = {}
        
        for x in range(longitud):
            if int(itemeditado.id) == int(relaciones[x][0]):
                newRelation['idItem1']=int(itemnuevo[0])
                newRelation['idItem2']=relaciones[x][1]
                self.provider.create(RelacionItem, params=newRelation)
            elif int(itemeditado.id) == int(relaciones[x][1]):
                newRelation['idItem1']=relaciones[x][0]
                newRelation['idItem2']=int(itemnuevo[0])
                self.provider.create(RelacionItem, params=newRelation)

        ids=[]
        ids.append(int(itemnuevo[0]))
        self.recorrerArbolAtras(ids, int(itemnuevo[0]))
        self.recorrerArbolAdelante(ids, int(itemnuevo[0]))
        ids.remove(int(itemnuevo[0]))
        longitudids = len(ids)

        for x in range(longitudids):
            itemrevision = DBSession.query(Item).filter_by(id=ids[x], ultimaversion=1).first()
            
            if itemrevision != None:
                if itemrevision.estado != 'modificado':
                    itemrevision.estado = 'revision'
                    if itemrevision.idLineaBase != None:
                        lineabase = DBSession.query(LineaBase).filter_by(id=itemrevision.idLineaBase).first()
                        if lineabase.estado == 'cerrada':
                            lineabase.estado = 'comprometida'
                            listalineabase = DBSession.query(LineaBase).filter_by(idFase = lineabase.idFase).all()
                            desarrollo = True
                            longitud = len(listalineabase)
                            
                            for y in range (longitud):
                                if str(listalineabase[y].estado).__eq__('cerrada'):
                                    desarrollo = False
                                    
                            if desarrollo:
                                fase = DBSession.query(Fase).filter_by(id = lineabase.idFase).first()
                                fase.estado = 'desarrollo'

        flash("El item \"" +kw['nombre'] +"\" ha sido modificado correctamente")
            
        redirect('../' +'../item/?fid=' + str(nuevo['idFase']))
Exemple #36
0
    def post(self, *args, **kw):
        """Se crea un nuevo item"""
        itemeditado = DBSession.query(Item).filter_by(id=kw['idItem1']).first()
        itemnuevo = Item()
        itemnuevo.version = itemeditado.version + 1
        itemnuevo.idTipoDeItem = itemeditado.idTipoDeItem
        itemnuevo.idFase = itemeditado.idFase
        itemnuevo.idLineaBase = itemeditado.idLineaBase
        itemnuevo.fechaCreacion = itemeditado.fechaCreacion
        itemnuevo.nrohistorial = itemeditado.nrohistorial
        itemnuevo.ultimaversion = 1
        itemeditado.ultimaversion = 0
        itemnuevo.estado = 'modificado'
        itemnuevo.complejidad = itemeditado.complejidad
        itemnuevo.nombre = itemeditado.nombre
        DBSession.add(itemnuevo)
        DBSession.flush()
        """-------------------------"""
        """ Crea las nuevas relaciones"""

        kw['idItem1'] = itemnuevo.id
        """ Se crea las relaciones"""
        ids = kw['idItem2']
        longitud = len(kw['idItem2'])
        for indice in range(longitud):
            kw['idItem2'] = ids[indice]
            self.provider.create(self.model, params=kw)

        ids = kw['idItem2Anterior']
        longitud = len(kw['idItem2Anterior'])
        for indice in range(longitud):
            kw['idItem2'] = ids[indice]
            self.provider.create(self.model, params=kw)
        """Realiza copia de los valores de los atributos especificos"""

        atributoeditado = DBSession.query(DetalleItem).filter_by(
            iditem=itemeditado.id).all()

        for objeto in atributoeditado:
            nuevoDetalle = DetalleItem()
            nuevoDetalle.tipo = objeto.tipo
            nuevoDetalle.nombrecampo = objeto.nombrecampo
            nuevoDetalle.valor = objeto.valor
            nuevoDetalle.iditem = itemnuevo.id
            DBSession.add(nuevoDetalle)
        """Realiza copia de los adjuntos"""
        adjuntositemeditado = DBSession.query(Adjuntos).filter_by(
            idItem=itemeditado.id).all()

        for adj in adjuntositemeditado:
            itemnuevoadjunto = Adjuntos()
            itemnuevoadjunto.idItem = itemnuevo.id
            itemnuevoadjunto.filename = adj.filename
            itemnuevoadjunto.filecontent = adj.filecontent
            DBSession.add(itemnuevoadjunto)
        """Copia las relaciones """
        #itemnuevo=DBSession.query(Item.id).filter_by(nrohistorial=nuevo['nrohistorial'], ultimaversion=1).first()
        relaciones = DBSession.query(
            RelacionItem.idItem1, RelacionItem.idItem2).filter(
                (RelacionItem.idItem2 == itemeditado.id)
                | (RelacionItem.idItem1 == itemeditado.id)).all()

        longitud = len(relaciones)

        for x in range(longitud):
            newRelation = {}
            if int(itemeditado.id) == int(relaciones[x][0]):
                newRelation['idItem1'] = int(itemnuevo.id)
                newRelation['idItem2'] = relaciones[x][1]
                self.provider.create(RelacionItem, params=newRelation)
            elif int(itemeditado.id) == int(relaciones[x][1]):
                newRelation['idItem1'] = relaciones[x][0]
                newRelation['idItem2'] = int(itemnuevo.id)
                self.provider.create(RelacionItem, params=newRelation)

        raise redirect('./?iid=' + str(kw['idItem1']))
Exemple #37
0
    def delete(self, fileid):
        
        #log.debug("Soy Archivo Borrado")
        
        """Se extrae el ID del Item que supuestamente se borrará, para crear un nuevo Item """       
        iid=DBSession.query(Adjuntos.idItem).filter_by(id=fileid).first()

        """Se crea un nuevo item"""
        itemeditado=DBSession.query(Item).filter_by(id=iid).first()
        itemnuevo=Item()
        itemnuevo.version=itemeditado.version + 1
        itemnuevo.idTipoDeItem=itemeditado.idTipoDeItem
        itemnuevo.idFase=itemeditado.idFase
        itemnuevo.idLineaBase=itemeditado.idLineaBase
        itemnuevo.fechaCreacion=itemeditado.fechaCreacion
        itemnuevo.nrohistorial=itemeditado.nrohistorial
        itemnuevo.ultimaversion=1
        itemeditado.ultimaversion=0
        itemnuevo.estado='modificado'
        itemnuevo.complejidad=itemeditado.complejidad
        itemnuevo.nombre=itemeditado.nombre
        DBSession.add(itemnuevo)
        
        """Realiza copia de los valores de los atributos especificos"""
            
        atributoeditado=DBSession.query(DetalleItem).filter_by(iditem=itemeditado.id).all()
            
        for objeto in atributoeditado:
            nuevoDetalle=DetalleItem()
            nuevoDetalle.tipo=objeto.tipo
            nuevoDetalle.nombrecampo=objeto.nombrecampo
            nuevoDetalle.valor=objeto.valor
            nuevoDetalle.iditem=itemnuevo.id
            DBSession.add(nuevoDetalle)
                
        """Realiza copia de los adjuntos"""
        adjuntositemeditado=DBSession.query(Adjuntos).filter_by(idItem=itemeditado.id).all()
        
        for adj in adjuntositemeditado:
            log.debug("adjuntoBorraado: %s" %adj.id)
            log.debug("fileid: %s" %fileid)
   
            if str(adj.id) != str(fileid): #No se copiará el archivo "supuestamente" borrado
                log.debug("fileid2: %s" %fileid)
                itemnuevoadjunto=Adjuntos()
                itemnuevoadjunto.idItem=itemnuevo.id
                itemnuevoadjunto.filename=adj.filename
                itemnuevoadjunto.filecontent=adj.filecontent
                DBSession.add(itemnuevoadjunto)
        
 
        
        
        """Copia las relaciones """
        relaciones = DBSession.query(RelacionItem.idItem1,RelacionItem.idItem2).filter((RelacionItem.idItem2==itemeditado.id) | (RelacionItem.idItem1==itemeditado.id)).all()
        longitud = len(relaciones)
        
        for x in range(longitud):
            newRelation=RelacionItem()
            log.debug('Creando relaciones')
            if int(itemeditado.id) == int(relaciones[x][0]):
                newRelation.idItem1=int(itemnuevo.id)
                newRelation.idItem2=relaciones[x][1]
                DBSession.add(newRelation)
                #self.provider.create(RelacionItem, params=newRelation)
            elif int(itemeditado.id) == int(relaciones[x][1]):
                newRelation.idItem1=relaciones[x][0]
                newRelation.idItem2=int(itemnuevo.id)
                DBSession.add(newRelation)

        return redirect("../../adjuntos/new/?iid="+str(itemnuevo.id))