def guardarTipoItem(self, t_item, idT_Item, listaAtributos, idProyecto, idFase):
        sesion=Session()
        ti=t_item;
          
        if(idT_Item!=0): #es un tipo de item a modificar
            ti=sesion.query(TipoItem).filter(TipoItem.idTipoItem==idT_Item).first()
            ti.setValues(t_item.nombreTipoItem,t_item.descripcion, t_item.estado)
            
            #se traen todos los atributos de la BD correspondiente a ese item
            atribListaBD=sesion.query(Atributos).filter(Atributos.tipoItemId==idT_Item).all();
            print(atribListaBD)
            ids=[]
            #se agregar a una lista los ID's de esos atributos en BD
            for atribBD in atribListaBD:
                ids.append(atribBD.idAtributo)
                
            print(ids)
            
            #si existe atributo en la lista 
            for atr in listaAtributos:
                atr.tipoItemId=idT_Item;
                if atr.idAtributo in ids: #si el atributo esat en la lista se eliminar, o sino significa que es nuevo
                    ids.remove(atr.idAtributo)
                sesion.merge(atr)
            
            #todo lo que sobra en la lista se elimina
            for idAEliminar in ids:
                sesion.query(Atributos).filter(Atributos.idAtributo==idAEliminar).delete();
                    
        else:#es un tipo de item nuevo
            miFase=sesion.query(Fase).filter(Fase.idFase==idFase).first()
            ti.fase=miFase;
            ti.atributosItem=listaAtributos #como es nuevo se asume que todos sus atributos son nuevos
            #ti.Atributos.append()
        '''se obtiene la fase para relacionar al tipo de item'''
        
        sesion.add(ti)
        #ti=sesion.query(TipoItem).filter(TipoItem.nombreTipoItem==t_item.nombreTipoItem).first()
        sesion.commit()
         
        #sesion.add(listaAtributos[0])
        """for atrib in listaAtributos:
            atrib.tipoItemId=ti.idTipoItem;
            print 'lalalall' +str(atrib.tipoItemId)
            sesion.add(atrib)"""
            #ti.atributosItem.append(atrib);

        #for atrib in listaAtributos:
        #    atrib.tipoitem=t_item
        
        sesion.close()
        
        return make_response("f,Tipo de item guardado correctamente")
Exemple #2
0
 def guardarItem(self, item, idI, lista, esReversion):
     """
     Metodo utilizado para guardar los datos del item
     @type  item: Item
     @param item: Item controlado a guardar
     @type  idI: String
     @param idI: Id del item a guardar. Si item es nuevo id es 0
     @type lista: Atributos[]
     @param lista:lista de atributos
     @type esReversion:String
     @param esReversion:Indica si es una reversion 
     """
     sesion=Session()
     i=item;
     i.version=1;
     if(idI!=0): #si es que es un item a modificar
         i=sesion.query(Item).filter(Item.idItem==idI).first()
         
         #se crea un nuevo item para el historial 
         histoItem=HistorialItem(i.nombreItem, i.version, i.prioridad, i.costo, i.complejidad, i.fechaInicio, i.fechaFinalizacion, \
                     i.tipoItem_id,i.estado, i.descripcion, \
                     i.fechaCreacion, i.autorVersion_id, i.idItem)
         sesion.add(histoItem);
         
         if (esReversion>0):
             r=sesion.query(Relacion).filter(Relacion.hijo_id==i.idItem).all()
             
             for rela in r: #se agrega la relaciones actuales al historial
                 histoRel=HistorialRelacion(rela.padre_id, rela.hijo_id, rela.versionHijo)
                 #rela.versionHijo=rela.versionHijo+1;
                 sesion.add(histoRel);
                 #sesion.merge(rela);
             #se borra las relaciones existentes en la tabla Relacion
             sesion.query(Relacion).filter(Relacion.hijo_id==i.idItem).delete();
             
             
             q2=sesion.query(HistorialRelacion).filter(HistorialRelacion.hijo_id==i.idItem)\
                                          .filter(HistorialRelacion.versionHijo==esReversion)\
                                          .all()
             for relInsertar in q2:
                 relReversionada=Relacion(relInsertar.padre_id,relInsertar.hijo_id,i.version+1);
                 sesion.add(relReversionada)
             
         else: #es un imte a modificar SOLO SE COPIA LAS RELACIONES ACTUALES AL HISTORIAL
             #SE CAMBIA LA VERSION A VERSION EN LA TABLA RELACION
             r=sesion.query(Relacion).filter(Relacion.hijo_id==i.idItem).all()
             
             for rela in r: #se agrega la relaciones actuales al historial
                 histoRel=HistorialRelacion(rela.padre_id, rela.hijo_id, rela.versionHijo)
                 rela.versionHijo=rela.versionHijo+1;
                 sesion.add(histoRel);
                 sesion.merge(rela);
         #el estado no debe cambiar con "modificar item"        
         item.estado=i.estado        
         i.setValues(item.nombreItem, item.prioridad, item.costo, item.complejidad, item.fechaInicio, item.fechaFinalizacion, \
                     i.tipoItem_id,item.estado, item.descripcion, \
                     item.fechaCreacion, item.autorVersion_id, item.idFase)
         i.version=i.version+1;
         i.tag=item.tag
        
     
     else: #item nuevo
         2+2 #nada se hace se agrega nada mas
         tipoItem=sesion.query(TipoItem).filter(TipoItem.idTipoItem==i.tipoItem_id).first()
         if(tipoItem is not None and tipoItem.estado=='activo'):
             tipoItem.estado='inst'
             sesion.merge(tipoItem)
     
     sesion.add(i);
     si=None
     
     if(idI==0):
         si=sesion.query(Item).filter(Item.nombreItem==item.nombreItem).first();
         if (si is not None):
             for at in lista:
                         iti=InstanciaTipoItem(si.idItem, at["nombreAtributo"], at["tipoPrimario"])
                         sesion.add(iti)
                             
                         #sesion.commit()
                             
                         c=sesion.query(InstanciaTipoItem).filter(InstanciaTipoItem.idItem==si.idItem)\
                                     .filter(InstanciaTipoItem.nombreCampo==at["nombreAtributo"]).first()
                         idc=c.idInstanciaTipoItem;
                         if at["tipoPrimario"]=="Texto":
                            
                             inst_cad=InstanciaCadena(at["valor"])
                             inst_cad.instanciaTipoItem_id=idc;
                             inst_cad.version=si.version;
                             sesion.add(inst_cad)
                             #sesion.commit();
                             
                         elif at["tipoPrimario"]=="Numerico":
                             
                             inst_cad=InstanciaNumerico(at["valor"])
                             inst_cad.instanciaTipoItem_id=idc;
                             inst_cad.version=si.version;
                             sesion.add(inst_cad)
                             #sesion.commit();
                         elif at["tipoPrimario"]=="Entero":
                            
                             inst_cad=InstanciaEntero(at["valor"])
                             inst_cad.instanciaTipoItem_id=idc;
                             inst_cad.version=si.version;
                             sesion.add(inst_cad)
                             #sesion.commit();
                         elif at["tipoPrimario"]=="Fecha":
                             
                             inst_cad=InstanciaFecha(at["valor"])
                             inst_cad.instanciaTipoItem_id=idc;
                             inst_cad.version=si.version;
                             sesion.add(inst_cad)
                             #sesion.commit();
                         
         else:
             sesion.close()
             return make_response('t,no se puDOinsertar el Item')
     else: #item a modificar
         #se obtiene el item a modificar
         si=sesion.query(Item).filter(Item.idItem==idI).first()
         
         if (si is not None):
             for at in lista:
                         c=sesion.query(InstanciaTipoItem).filter(InstanciaTipoItem.idItem==si.idItem)\
                                     .filter(InstanciaTipoItem.nombreCampo==at["nombreAtributo"]).first()
                         idc=c.idInstanciaTipoItem;
                         if at["tipoPrimario"]=="Texto":
                            
                             inst_cad=InstanciaCadena(at["valor"])
                             inst_cad.instanciaTipoItem_id=idc;
                             inst_cad.version=si.version; 
                             sesion.add(inst_cad)
                             #sesion.commit(); 
                             
                         elif at["tipoPrimario"]=="Numerico":
                             
                             inst_cad=InstanciaNumerico(at["valor"])
                             inst_cad.instanciaTipoItem_id=idc;
                             inst_cad.version=si.version;
                             sesion.add(inst_cad)
                             #sesion.commit();
                         elif at["tipoPrimario"]=="Entero":
                            
                             inst_cad=InstanciaEntero(at["valor"])
                             inst_cad.instanciaTipoItem_id=idc;
                             inst_cad.version=si.version;
                             sesion.add(inst_cad)
                             #sesion.commit();
                         elif at["tipoPrimario"]=="Fecha":
                             
                             inst_cad=InstanciaFecha(at["valor"])
                             inst_cad.instanciaTipoItem_id=idc;
                             inst_cad.version=si.version;
                             sesion.add(inst_cad)
                             #sesion.commit();
                         
         else:
             sesion.close()
             return make_response('t,no pudo insertar el Item2')
     
     sesion.commit()
     sesion.close()
     
     return make_response("f,Item guardado correctamente")