Пример #1
0
 def agregar_tipo_fase(self,cancel=False,**data):
     errors = {}
     tipo_fase = None
     if request.method == 'POST':
         if cancel:
             redirect('/tipo_fase')
         form = TipoFaseForm()
         try:
             data = form.to_python(data)
             tipo_fase = Tipo_Fase(nombre_tipo_fase=data.get('nombre_tipo_fase'),descripcion=data.get('descripcion'))
             #if isinstance(tipo_fase,Tipo_Fase) :
             DBSession.add(tipo_fase)
             DBSession.flush()
             #DBSession.commit()
             #transaction.commit() 
             print tipo_fase
             flash("Tipo de Fase agregada!")
         except Invalid, e:
             print e
             tipo_fase = None
             errors = e.unpack_errors()
             flash(_("Favor complete los datos requeridos"),'warning')
         except IntegrityError:
             flash("LLave duplicada")
             DBSession.rollback()
             redirect('/agregar_tipo_fase')
Пример #2
0
    def post_tipo_item(self, nombre_tipo_item, codigo_tipo_item, descripcion, campo, valor):
        tipo_item = Tipo_Item(
            nombre_tipo_item=nombre_tipo_item, codigo_tipo_item=codigo_tipo_item, descripcion=descripcion
        )

        DBSession.add(tipo_item)

        if campo is not None:
            if not isinstance(campo, list):
                campo = [campo]

        if valor is not None:
            if not isinstance(valor, list):
                valor = [valor]

        indice = 0
        id_tipo = Tipo_Item.get_ultimo_id()
        for c in campo:
            if len(c) > 0:
                camp = Tipo_Campos(id_tipo_item=id_tipo, nombre_campo=c, valor_campo=valor[indice])
                DBSession.add(camp)
            indice += 1

        flash("Tipo Item Agregado!")
        redirect("/tipo_item/tipo_item")
Пример #3
0
 def agregar_usuario(self,cancel=False,**data):
     errors = {}
     usuario = None
     if request.method == 'POST':
         if cancel:
             redirect('/usuario')
         form = UsuarioForm()
         try:
             data = form.to_python(data)
             usuario = Usuario(alias=data.get('alias'),nombre=data.get('nombre'),apellido=data.get('apellido'),email_address=data.get('email'),_password=data.get('clave'))
             #if isinstance(usuario,Usuario) :
             DBSession.add(usuario)
             DBSession.flush()
             #DBSession.commit()
             #transaction.commit() 
             print usuario
             flash("Usuario agregado!")
         except Invalid, e:
             print e
             usuario = None
             errors = e.unpack_errors()
             flash(_("Favor complete los datos requeridos"),'warning')
         except IntegrityError:
             flash("LLave duplicada")
             DBSession.rollback()
             redirect('/agregar_usuario')
Пример #4
0
    def post_miembro(self, idusuario, idrol, asmSelect0, fases):

        if idusuario is not None:
            idusuario = int(idusuario)      
        if idrol is not None:
            idrol = int(idrol)      

        if fases is not None:
            if not isinstance(fases, list):
                fases = [fases]
        fases = [DBSession.query(Fase).get(fase) for fase in fases]

        valor=int( Variables.get_valor_by_nombre("proyecto_actual"))
        equipo =  Equipo_Desarrollo(proyecto=valor, idusuario=idusuario, 
							        idrol=idrol, fases=fases)

#        usuario =  Usuario.get_user_by_id(idusuario)
#        rol = Rol.get_rol_by_id(idrol)
#        usuario.roles=[]
#        usuario.roles.append(rol)
        
        DBSession.add(equipo)
        DBSession.flush()

        flash("Miembro Agregado Agregado!")  
        redirect('/equipo/equipo')
Пример #5
0
    def put(self, id_tipo_item, nombre_tipo_item, codigo_tipo_item, descripcion, campo, valor, **kw):

        if id_tipo_item is not None:
            id_tipo_item = int(id_tipo_item)

        tipo_item = Tipo_Item.get_tipo_item_by_id(id_tipo_item)
        campos2 = Tipo_Campos.get_campos_by_tipo_item(tipo_item.id_tipo_item)

        for cam in campos2:
            Tipo_Campos.borrar_by_id(cam.id_tipo_campos)
            DBSession.flush()

        tipo_item.nombre_tipo_item = nombre_tipo_item
        tipo_item.descripcion = descripcion
        tipo_item.codigo_tipo_item = codigo_tipo_item

        if campo is not None:
            if not isinstance(campo, list):
                campo = [campo]

        if valor is not None:
            if not isinstance(valor, list):
                valor = [valor]

        indice = 0

        for c in campo:
            if len(c) > 0:
                camp = Tipo_Campos(id_tipo_item=id_tipo_item, nombre_campo=c, valor_campo=valor[indice])
                DBSession.add(camp)
            indice += 1

        DBSession.flush()
        flash("Tipo de Item modificada!")
        redirect("/tipo_item/tipo_item")
Пример #6
0
    def agregar_privilegio(self, cancel=False, **data):
        nom_proyecto = Variables.get_valor_by_nombre("nombre_proyecto_actual")
        nom_fase = Variables.get_valor_by_nombre("nombre_fase_actual")

        errors = {}
        privilegio = None

        if request.method == "POST":
            if cancel:
                redirect("/privilegio")
            form = PrivilegioForm()
            try:
                data = form.to_python(data)
                privilegio = Privilegios(
                    nombreprivilegio=data.get("nombreprivilegio"), descripcion=data.get("descripcion")
                )

                DBSession.add(privilegio)
                DBSession.flush()
                print privilegio
                flash("Privilegio agregado!")
                redirect("/privilegio")

            except Invalid, e:
                print e
                privilegio = None
                errors = e.unpack_errors()
                flash(_("Favor complete los datos requeridos"), "warning")

            except IntegrityError:
                flash("LLave duplicada")
                DBSession.rollback()
                redirect("/agregar_privilegio")
Пример #7
0
 def agregar_privilegio(self,cancel=False,**data):
     errors = {}
     privilegio = None
     if request.method == 'POST':
         if cancel:
             redirect('/privilegio')
         form = PrivilegioForm()
         try:
             data = form.to_python(data)
             privilegio = Privilegios(nombreprivilegio=data.get('nombreprivilegio'),descripcion=data.get('descripcion'))
             #if isinstance(usuario,Usuario) :
             DBSession.add(privilegio)
             DBSession.flush()
             #DBSession.commit()
             #transaction.commit() 
             print privilegio
             flash("Privilegio agregado!")
         except Invalid, e:
             print e
             privilegio = None
             errors = e.unpack_errors()
             flash(_("Favor complete los datos requeridos"),'warning')
         except IntegrityError:
             flash("LLave duplicada")
             DBSession.rollback()
             redirect('/agregar_privilegio')
Пример #8
0
    def agregar_usuario(self, cancel=False, **data):
        nom_proyecto = Variables.get_valor_by_nombre("nombre_proyecto_actual")
        nom_fase = Variables.get_valor_by_nombre("nombre_fase_actual")

        usuarios = Usuario.get_alias()

        errors = {}
        usuario = None
        if request.method == "POST":
            if cancel:
                redirect("/usuario")
            form = UsuarioForm()
            try:
                data = form.to_python(data)

                usuario = Usuario(
                    alias=data.get("alias"),
                    nombre=data.get("nombre"),
                    apellido=data.get("apellido"),
                    email_address=data.get("email"),
                    nacionalidad=data.get("nacionalidad"),
                    tipodocumento=data.get("tipodocumento"),
                    nrodoc=data.get("nrodoc"),
                    _password=data.get("clave"),
                )

                if usuario.alias not in usuarios:
                    usuario._set_password(data.get("clave"))
                    rol = Rol.get_rol_by_nombre("Usuario Basico")
                    usuario.roles.append(rol)

                    DBSession.add(usuario)
                    DBSession.flush()
                    print usuario
                    flash("Usuario agregado!")
                    redirect("/usuario")
                else:

                    flash(_("Favor cambie el alias es repetido"), "warning")
                    return dict(
                        pagina="usuarios",
                        usuario=usuario,
                        errors=errors,
                        data=data.get("alias"),
                        nom_proyecto=nom_proyecto,
                        nom_fase=nom_fase,
                        usuarios=usuarios,
                    )

            except Invalid, e:
                print e
                usuario = None
                errors = e.unpack_errors()
                flash(_("Favor complete los datos requeridos"), "warning")

            except IntegrityError:
                flash("LLave duplicada")
                DBSession.rollback()
                redirect("/agregar_usuario")
Пример #9
0
    def post_revivir_item(self, id_item, nombre_item , codigo_item, 
                            nombre_tipo_item, estado, complejidad, **kw):
        item = Item.get_item_by_id(id_item)
        item.estado_oculto="Activo"

        DBSession.add(item)
        DBSession.flush()

        flash("item Revivido!")
        redirect('/item/item')
Пример #10
0
    def post_rol(self, nombrerol, descripcion, asmSelect0, privilegios=None):
        if privilegios is not None:
            if not isinstance(privilegios, list):
                privilegios = [privilegios]
        privilegios = [DBSession.query(Privilegios).get(privilegio) for privilegio in privilegios]
        rol = Rol(nombrerol=nombrerol, descripcion=descripcion, privilegios=privilegios)

        DBSession.add(rol)
        DBSession.flush()
        flash("Rol agregado!")
        redirect("/rol")
Пример #11
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
Пример #12
0
    def post_recuperar_item(self, id_item, nombre_item, codigo_item, 
                nombre_tipo_item, estado, complejidad, **kw):

        if id_item is not None:
            id_item=int(id_item)

        if complejidad is not None:
            complejidad=int(complejidad)

        item = Item.version_actual(id_item)
        item.estado_oculto="Desactivado"
        version= item.version+1  

        DBSession.flush()

        item2 = Item.get_item_by_id(id_item)

        item3 = Item (nombre_item=item2.nombre_item,
                        codigo_item=item2.codigo_item, 
                        id_tipo_item=item2.id_tipo_item,
                        orden=item2.orden,
						complejidad=item2.complejidad, estado = item2.estado,
                        fase=item2.fase, proyecto=item2.proyecto,
                        creado_por =item2.creado_por, 
                        fecha_creacion = item2.fecha_creacion ,
                        version =version , estado_oculto="Activo",
                        lb_parcial=item2.lb_parcial,lb_general=item2.lb_general)
	
        DBSession.add(item3)
        DBSession.flush()
        
        adjuntos=Adjunto.get_adjuntos_by_item(item.id_item)
        for adjun in adjuntos:
            adjun.estado_oculto=item.estado_oculto
            DBSession.flush()

        mayor =Item.get_ultimo_id()
        adjuntos=Adjunto.get_adjuntos_by_item(item2.id_item)
        for adjun in adjuntos:
            adj2 = Adjunto(id_item=mayor,archivo=adjun.archivo,
                           nombre_archivo=adjun.nombre_archivo,
                           version=item3.version, 
                           estado_oculto=item3.estado_oculto    )
            DBSession.add(adj2)
            DBSession.flush() 


        flash("item recuperado!")
        redirect('/item/item')
Пример #13
0
    def post_tipo_fase(self, nombre_tipo_fase, tipos_items, descripcion,asmSelect0):
        
        if tipos_items is not None:
            if not isinstance(tipos_items, list):
                tipos_items = [tipos_items]
        tipos_items = [DBSession.query(Tipo_Item).get(tipo_item) for tipo_item 
                                                in tipos_items]

        tipo_fase = Tipo_Fase (nombre_tipo_fase=nombre_tipo_fase,
                    descripcion=descripcion,tipos_items=tipos_items)
  
        DBSession.add(tipo_fase)
        DBSession.flush()
        flash("tipo_fase agregada!")  
        redirect('/tipo_fase/tipo_fase')
Пример #14
0
    def post_fase(self, nombre_fase, id_tipo_fase, tipos_items, descripcion,
                    asmSelect0):
        """
        Permite agregar una nueva fase al proyecto.
        """
        proyecto=int(Variables.get_valor_by_nombre("proyecto_actual"))
        nombres=Fase.get_nombres_by_id(proyecto)

        if not isinstance(nombres, list):
            nombres = [nombres]

        if nombre_fase not in nombres:

            if id_tipo_fase is not None:
                id_tipo_fase = int(id_tipo_fase)

            if tipos_items is not None:
                if not isinstance(tipos_items, list):
                    tipos_items = [tipos_items]
            tipos_items = [DBSession.query(Tipo_Item).get(tipo_item) for tipo_item 
                                                    in tipos_items]

            fase = Fase (nombre_fase=nombre_fase, id_tipo_fase=id_tipo_fase, 
                        estado="nuevo", linea_base="abierta", 
                        descripcion=descripcion,tipos_items=tipos_items,
                        proyecto=0,orden=0)
      
            DBSession.add(fase)
            DBSession.flush()
            flash("Fase agregada!")  
            redirect('/fase/fase')

        else:
            nom_proyecto=Variables.get_valor_by_nombre("nombre_proyecto_actual")
            nom_fase=Variables.get_valor_by_nombre("nombre_fase_actual")

            tipos_fases = Tipo_Fase.get_tipo_fases()
            tipos_items = Tipo_Item.get_tipos_items()

            values = dict(nombre_fase=nombre_fase, 
                            descripcion=descripcion,
                            )
            flash("Nombre de Fase es repetido!")
            return dict(pagina="agregar_fase",values=values, tipos_fases=tipos_fases,
                            tipos_items=tipos_items,nom_proyecto=nom_proyecto
                            ,nom_fase=nom_fase)
Пример #15
0
 def guardar(self,adjunto):
     """
     Guarda el adjunto.         
     """
     DBSession.add(adjunto)
     DBSession.flush()
Пример #16
0
    def put_proyecto(self, id_proyecto, nombre_proyecto, idusuario, descripcion,
                         asmSelect0, tipos_fases,**kw):
        nom_proyecto=Variables.get_valor_by_nombre("nombre_proyecto_actual")
        nom_fase=Variables.get_valor_by_nombre("nombre_fase_actual")

        if id_proyecto is not None:
            id_proyecto=int(id_proyecto)

        if idusuario is not None:
            idusuario=int(idusuario)

        nombres=Proyecto.get_nombres()
        proyecto = DBSession.query(Proyecto).get(id_proyecto)

        if not isinstance(nombres, list):
            nombres = [nombres]
        nombres.remove(proyecto.nombre_proyecto)

        if nombre_proyecto not in nombres:

            miembro=Equipo_Desarrollo.get_miembro_by_usuario_by_proyecto(
                        proyecto.idusuario,proyecto.id_proyecto)

            id_miembro=miembro.id_equipo
            Equipo_Desarrollo.borrar_by_id(id_miembro)
            DBSession.flush()

            fases=Fase.get_fase_by_proyecto(proyecto.id_proyecto)

            for fase in fases:
			    Fase.borrar_by_id(fase.id_fase)
			    DBSession.flush()

            if not isinstance(tipos_fases, list):
			    tipos_fases = [tipos_fases]
            tipos_fases = [DBSession.query(Tipo_Fase).get(tipo_fase) 
                                for tipo_fase in tipos_fases]

            cant=1
            for tipo_fase in tipos_fases:
                fase = Fase (nombre_fase=tipo_fase.nombre_tipo_fase, 
                                id_tipo_fase=tipo_fase.id_tipo_fase, estado ="Nuevo", 
							    proyecto=proyecto.id_proyecto,orden=cant,
                                linea_base="Abierta", 
                                descripcion=tipo_fase.descripcion)

                DBSession.add(fase)
                DBSession.flush()
                cant+=1

            proyecto.idusuario = idusuario
            proyecto.nombre_proyecto=nombre_proyecto
            proyecto.descripcion = descripcion
            proyecto.tipos_fases = tipos_fases
            proyecto.estado="Desactivado"

            DBSession.flush()

            fases = Fase.get_fase_by_proyecto(Proyecto.get_ultimo_id())
            nom="Lider Proyecto"
            mirol=Rol.get_rol_by_nombre(nom)

            equipo = Equipo_Desarrollo(proyecto=Proyecto.get_ultimo_id(), 
                                        idusuario=idusuario, 
						                idrol=mirol.idrol,fases=fases)
            DBSession.add(equipo)
            DBSession.flush()
            fases = Fase.get_fase_by_proyecto(proyecto.id_proyecto)

            flash("Proyecto Modificado!")  
            return dict(pagina="/fase/listar_fase", fases=fases,
                            nom_proyecto=nom_proyecto,nom_fase=nom_fase)
        else:

            flash("nombre proyecto repetido!")  
            redirect('/proyecto/editar_proyecto?id_proyecto=%d' % id_proyecto)
Пример #17
0
    def post_proyecto(self, nombre_proyecto, idusuario, tipos_fases, asmSelect0,
                            descripcion,start=0,end=5,indice=None,texto=""):

        nom_proyecto=Variables.get_valor_by_nombre("nombre_proyecto_actual")
        nom_fase=Variables.get_valor_by_nombre("nombre_fase_actual")

        nombres=Proyecto.get_nombres()

        if not isinstance(nombres, list):
            nombres = [nombres]

        if nombre_proyecto not in nombres:
            if idusuario is not None:
                idusuario = int(idusuario)

            if tipos_fases is not None:
                if not isinstance(tipos_fases, list):
                    tipos_fases = [tipos_fases]
    
                tipos_fases = [DBSession.query(Tipo_Fase).get(tipo_fase) 
                                    for tipo_fase in tipos_fases]

            proyecto = Proyecto (nombre_proyecto=nombre_proyecto, 
                                    idusuario=idusuario, 
                                    descripcion=descripcion, 
                                    tipos_fases=tipos_fases,
                                    estado ="Desactivado")
            DBSession.add(proyecto)
            DBSession.flush()

            proy=int(Proyecto.get_ultimo_id())
            cant=1
            lista=[]
            for tipo_fase in tipos_fases:
                fase = Fase (nombre_fase=tipo_fase.nombre_tipo_fase, 
                                id_tipo_fase=tipo_fase.id_tipo_fase, 
                                estado ="Nuevo",proyecto=proy,
                                orden=cant,linea_base="Abierta", 
                                descripcion=tipo_fase.descripcion)

                DBSession.add(fase)
                DBSession.flush()
                lista.append(fase)
                cant+=1

            nom="Lider Proyecto"
            mirol=Rol.get_rol_by_nombre(nom)
            fases2=Fase.get_fase_by_proyecto(proy)
            equipo = Equipo_Desarrollo(proyecto=Proyecto.get_ultimo_id(), 
                                        idusuario=idusuario, 
                                        idrol=mirol.idrol,fases=fases2)

            DBSession.add(equipo)
            DBSession.flush()


            fases,len_fases = Fase.get_fase_by_proyecto_por_pagina(proy,start,end)


            ############
            paginado = 5
            if start <> 0:
                end=int(start.split('=')[1]) #obtiene el fin de pagina
                start=int(start.split('&')[0]) #obtiene el inicio de pagina
            #print start,end
            total = len(Fase.get_fase_by_proyecto(proy))
            pagina_actual = ((start % end) / paginado) + 1
            if ((start % end) % paginado) <> 0:
                pagina_actual = pagina_actual + 1
             
            #roles = Fase.get_fase_by_proyecto_por_pagina(proy,start,end)
            ###########
            param="/fase/fase"
            flash("Proyecto Agregado!")  
            return dict(pagina="../fase/fase", fases=fases,
                                nom_proyecto=nom_proyecto,nom_fase=nom_fase,
                                inicio=start,fin=end,paginado=paginado,
                                pagina_actual=pagina_actual,total=total,
                                param=param)

        else:
            nom_proyecto=Variables.get_valor_by_nombre("nombre_proyecto_actual")
            nom_fase=Variables.get_valor_by_nombre("nombre_fase_actual")

            usuarios = Usuario.get_usuarios()
            tipos_fases = Tipo_Fase.get_tipo_fases()	

            flash("Nombre del Proyecto ya existe!")  
            redirect('../proyecto/agregar_proyecto')
Пример #18
0
    def post_item(self, nombre_item, complejidad, adjunto, id_tipo_item,
                    asmSelect0,padres=None):

        items= Item.get_nombres_items()

        if nombre_item not in items:
        
            if id_tipo_item is not None:
                id_tipo_item = int(id_tipo_item)

            if complejidad is not None:
                complejidad=int(complejidad)

            if adjunto is not None:
                if not isinstance(adjunto, list):
                    adjunto = [adjunto]

            if padres is not None:
                if not isinstance(padres, list):
                    padres = [padres]
                padres = [DBSession.query(Item).get(padre) for padre
                                         in padres]

#----------------------------------------

            tipo_item =Tipo_Item.get_tipo_item_by_id(id_tipo_item)
            pre_codigo=tipo_item.codigo_tipo_item

            proy_act=int (Variables.get_valor_by_nombre("proyecto_actual"))
            fas_act=int (Variables.get_valor_by_nombre("fase_actual"))
            fase=Fase.get_fase_by_id(fas_act)

            codigo_item=Item.crear_codigo(id_tipo_item,
                                            pre_codigo,proy_act,fas_act)

            item = Item (nombre_item=nombre_item, codigo_item=codigo_item,
                            id_tipo_item=id_tipo_item, 
	                        complejidad=complejidad, estado = "nuevo", 
                            fase=fas_act,proyecto=proy_act,orden=fase.orden,
	                        creado_por=Variables.get_valor_by_nombre("usuario_actual"),
	                        fecha_creacion = time.ctime(), version =1 ,
                            estado_oculto="Activo",lb_parcial=0,lb_general=0
	                        )

            DBSession.add(item)
            DBSession.flush()

#----------------------------------------

            for padre in padres:
                if padre.nombre_item == "master":
                    padres.remove(padre)
           
            mayor =int(Item.get_ultimo_id())
        
            relacion = Relaciones (id_item_hijo=mayor,padres=padres)

#----------------------------------------
            id_item2=Item.get_ultimo_id()        
            tipos_campos=Tipo_Campos.get_campos_by_tipo_item(id_tipo_item)

            for tipo in tipos_campos:
                camp =Campos(id_item=id_item2,
                             nombre_campo=tipo.nombre_campo,
                             tipo_campo= tipo.valor_campo)
                DBSession.add(camp)
            DBSession.flush()


#----------------------------------------

            if adjunto is not None:
                for adj in adjunto:
                    if len(str(adj))==0:
                        break
                    if len(adj.filename)==0:
                        break

                    data = adj.file.read()
                    encode=base64.b64encode(data)
                    var=binascii.a2b_base64(encode)
                    adj = Adjunto (id_item=mayor, archivo=var,
                                nombre_archivo=adj.filename, version =item.version ,
                                    estado_oculto=item.estado_oculto)

                    DBSession.add(adj)
                    DBSession.flush() 

            flash("Item Agregado!")  
            redirect('/item/item')

        else:

            nom_fase=Variables.get_valor_by_nombre("nombre_fase_actual")
            nom_proyecto=Variables.get_valor_by_nombre("nombre_proyecto_actual")

            id_fase=int(Variables.get_valor_by_nombre("fase_actual"))
            padres=Item.get_item_activados()                                        #cambiar esta funcion y solo traer lo que no forman ciclos
            fase = Fase.get_fase_by_id(id_fase)	
            tipos_items=fase.tipos_items

            values = dict(nombre_item=nombre_item,
						id_tipo_item=id_tipo_item, 
						complejidad=complejidad,
						)

            flash("Nombre de Item ya existente!")
            return dict(pagina="agregar_item",values=values,
                        tipos_items=tipos_items,nom_proyecto=nom_proyecto,
                        nom_fase=nom_fase,padres=padres)
Пример #19
0
    def put_item(self, id_item, nombre_item, nombre_tipo_item, complejidad,
                    id_campos,nombre_campo,tipo_campo,dato,
                     padres,asmSelect0,adjunto=None,adjuntados=None):

        if id_item is not None:
            id_item=int(id_item)


        item = Item.get_item_by_id(id_item)
        items= Item.get_nombres_items()
        items.remove(item.nombre_item)
        
        if nombre_item not in items:

            if id_campos is not None:
                if not isinstance(id_campos, list):
                    id_campos = [id_campos]

            if nombre_campo is not None:
                if not isinstance(nombre_campo, list):
                    nombre_campo = [nombre_campo]

            if tipo_campo is not None:
                if not isinstance(tipo_campo, list):
                    tipo_campo = [tipo_campo]

            if dato is not None:
                if not isinstance(dato, list):
                    dato = [dato]


            if complejidad is not None:
                complejidad=int(complejidad)

            if adjuntados is not None:
                if not isinstance(adjuntados, list):
                    adjuntados = [adjuntados]
                if len(adjuntados)<1:
                    adjuntados =[]

            if adjunto is not None:
                if not isinstance(adjunto, list):
                    adjunto = [adjunto]

            if padres is not None:
                if not isinstance(padres, list):
                    padres = [padres]
                padres = [DBSession.query(Item).get(padre) for padre
                                         in padres]


            item.estado_oculto="Desactivado"
            DBSession.flush()

            version=item.version+1

            item2 = Item (nombre_item=nombre_item ,
                         codigo_item=item.codigo_item ,
                         id_tipo_item=item.id_tipo_item , 
                         complejidad=complejidad,
                         estado = item.estado ,
                         orden=item.orden,
                         fase=int(Variables.get_valor_by_nombre
                                ("fase_actual")),
                         proyecto=int(Variables.get_valor_by_nombre
                                ("proyecto_actual")),
                         creado_por=Variables.get_valor_by_nombre
                                ("usuario_actual"),
                        fecha_creacion = time.ctime() ,
                        version =version ,estado_oculto="Activo",
                        lb_parcial=item.lb_parcial,lb_general=item.lb_general)

            DBSession.add(item2)
            DBSession.flush()

            indice=0
            id_item=Item.get_ultimo_id()        
            for c in id_campos:
                if len(c)>0:
                    camp =Campos(id_item=id_item,
                                    nombre_campo=nombre_campo[indice],
                                    tipo_campo=tipo_campo[indice],
                                    dato=dato[indice])
                    DBSession.add(camp)
                    indice+=1

            mayor =Item.get_ultimo_id()
            relacion = Relaciones (id_item_hijo=mayor,padres=padres)

            if adjunto is not None:
                for adj in adjunto:
                    if len(str(adj))==0:
                        break
                    if len(adj.filename)==0:
                        break
                    data = adj.file.read()
                    encode=base64.b64encode(data)
                    var=binascii.a2b_base64(encode)
                    adj = Adjunto (id_item=mayor, archivo=var,
                                    nombre_archivo=adj.filename,version=item2.version,
                                    estado_oculto=item2.estado_oculto)

                    DBSession.add(adj)
                    DBSession.flush() 

            adjuntos=Adjunto.get_adjuntos_by_item(item.id_item)
            for adjun in adjuntos:
                if adjuntados is not None:
                    if adjun.nombre_archivo in adjuntados:
                        adj2 = Adjunto(id_item=mayor,archivo=adjun.archivo,
                                       nombre_archivo=adjun.nombre_archivo,
                                       version=item2.version, 
                                       estado_oculto=item2.estado_oculto    )
                        DBSession.add(adj2)
                        DBSession.flush() 
                
                adjun.estado_oculto=item.estado_oculto
                DBSession.flush()

            flash("Item Modificado!")
            redirect('/item/item')

        else:
            nom_proyecto=Variables.get_valor_by_nombre("nombre_proyecto_actual")
            nom_fase=Variables.get_valor_by_nombre("nombre_fase_actual")

            padres=Item.get_item_activados()                                        #cambiar esta funcion y solo traer lo que no forman ciclos
            id_fase=int(Variables.get_valor_by_nombre("fase_actual"))          
            fase = Fase.get_fase_by_id(id_fase)	
            tipos_items=fase.tipos_items

            lista=[]
            lista.append(item.nombre_tipo_item )
            item = DBSession.query(Item).get(id_item)

            values = dict(id_item=id_item, 
				            nombre_item=nombre_item,        
				            codigo_item=item.codigo_item,
    			            complejidad=complejidad,
				            )

            adjuntos=Adjunto.get_adjuntos_by_item(item.id_item)
     
            adjuntados=[]
            for adj in adjuntos:        
                var = dict(id_adjunto=adj.id_adjunto,
                                nombre_archivo=adj.nombre_archivo)
                adjuntados.append(var)

            padres2=[]        
            padr=Relaciones.get_mis_padres(id_item)
            for pad in padr:
                padres2.append(pad.id_item)

            flash("EL NOMBRE DEL ITEM YA ESXISTE!")
            return dict(pagina="editar_item",values=values,adjuntados=adjuntados,
                            nom_proyecto=nom_proyecto,nom_fase=nom_fase,
                            lista=lista,tipos_items=tipos_items,padres=padres,
                            padres2=padres2)