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")
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")