def crear_version_sin_relaciones(self, it, id_item): """ Crea una nueva versión de un ítem dado sin sus relaciones. @param it: Item a partir del cual se creará una nueva versión. @type it: L{Item} @param id_item: Id del ítem a reversionar. @type id_item: String """ actual = DBSession.query(Item).filter(Item.id == id_item) \ .order_by(desc(Item.version)).first() nueva_version = Item() nueva_version.id = it.id nueva_version.codigo = it.codigo nueva_version.version = actual.version + 1 nueva_version.nombre = it.nombre nueva_version.descripcion = it.descripcion nueva_version.estado = u"En desarrollo" nueva_version.observaciones = it.observaciones nueva_version.prioridad = it.prioridad nueva_version.complejidad = it.complejidad nueva_version.borrado = it.borrado nueva_version.anexo = it.anexo nueva_version.tipo_item = it.tipo_item nueva_version.revisiones = actual.revisiones nueva_version.linea_base = actual.linea_base nueva_version.archivos = it.archivos return nueva_version
def crear_version(self, it): """ Crea una nueva version del ítem al cual se añade el archivo. """ nueva_version = Item() nueva_version.id = it.id nueva_version.codigo = it.codigo nueva_version.version = it.version + 1 nueva_version.nombre = it.nombre nueva_version.descripcion = it.descripcion nueva_version.estado = it.estado nueva_version.observaciones = it.observaciones nueva_version.prioridad = it.prioridad nueva_version.complejidad = it.complejidad nueva_version.borrado = it.borrado nueva_version.anexo = it.anexo nueva_version.tipo_item = it.tipo_item nueva_version.linea_base = it.linea_base nueva_version.archivos = it.archivos for relacion in relaciones_a_actualizadas(it.relaciones_a): aux = relacion.id.split("+") r = Relacion() r.id = "-".join(aux[0].split("-")[0:-1]) + "-" + \ unicode(nueva_version.version) + "+" +aux[1] r.item_1 = nueva_version r.item_2 = relacion.item_2 for relacion in relaciones_b_actualizadas(it.relaciones_b): r = Relacion() aux = relacion.id.split("+") r.id = aux[0] + "+" + "-".join(aux[1].split("-")[0:-1]) + "-" + \ unicode(nueva_version.version) r.item_1 = relacion.item_1 r.item_2 = nueva_version return nueva_version
def post(self, **kw): """ Registra el nuevo ítem creado. """ i = Item() i.descripcion = kw['descripcion'] i.nombre = kw['nombre'] i.estado = 'En desarrollo' i.observaciones = kw['observaciones'] i.prioridad = kw['prioridad'] i.complejidad = kw['complejidad'] i.version = 1 i.borrado = False caract = DBSession.query(Caracteristica) \ .filter(Caracteristica.id_tipo_item == kw['tipo_item']).all() anexo = dict() for nom_car in caract: anexo[nom_car.nombre] = kw[nom_car.nombre] i.anexo = json.dumps(anexo) ids_items = DBSession.query(Item.id) \ .filter(Item.id_tipo_item == kw["tipo_item"]).all() if ids_items: proximo_id_item = proximo_id(ids_items) else: proximo_id_item = "IT1-" + kw["tipo_item"] i.id = proximo_id_item i.tipo_item = DBSession.query(TipoItem) \ .filter(TipoItem.id == kw["tipo_item"]).one() DBSession.add(i) i.codigo = i.tipo_item.codigo + "-" + i.id.split("-")[0][2:] raise redirect('./')
def crear_version(self, it, borrado = None, item_borrado = None): """ Crea una nueva versión de un ítem dado. Permite también borrar una relación de esta nueva versión si se especifica. @param it: Item a partir del cual se creará una nueva versión. @type it: L{Item} @param borrado: Relación a eliminar. @type borrado: L{Relacion} """ nueva_version = Item() nueva_version.id = it.id nueva_version.codigo = it.codigo nueva_version.version = it.version + 1 nueva_version.nombre = it.nombre nueva_version.descripcion = it.descripcion nueva_version.estado = it.estado nueva_version.observaciones = it.observaciones nueva_version.prioridad = it.prioridad nueva_version.complejidad = it.complejidad nueva_version.anexo = it.anexo nueva_version.revisiones = it.revisiones nueva_version.tipo_item = it.tipo_item nueva_version.archivos = it.archivos if item_borrado: nueva_version.borrado = True nueva_version.linea_base = None else: nueva_version.linea_base = it.linea_base nueva_version.borrado = it.borrado for relacion in it.relaciones_a: if not relacion == borrado: aux = relacion.id.split("+") r = Relacion() r.id = "-".join(aux[0].split("-")[0:-1]) + "-" + \ unicode(nueva_version.version) + "+" +aux[1] r.item_1 = nueva_version r.item_2 = relacion.item_2 for relacion in it.relaciones_b: if not relacion == borrado: r = Relacion() aux = relacion.id.split("+") r.id = aux[0] + "+" + "-".join(aux[1].split("-")[0:-1]) + \ "-" + unicode(nueva_version.version) r.item_1 = relacion.item_1 r.item_2 = nueva_version return nueva_version
def crear_version(self, it, borrado=None, item_borrado=None): """ Crea una nueva versión de un ítem dado. Permite también borrar una relación de esta nueva versión si se especifica. @param it: Item a partir del cual se creará una nueva versión. @type it: L{Item} @param borrado: Relación a eliminar. @type borrado: L{Relacion} """ nueva_version = Item() nueva_version.id = it.id nueva_version.codigo = it.codigo nueva_version.version = it.version + 1 nueva_version.nombre = it.nombre nueva_version.descripcion = it.descripcion nueva_version.estado = it.estado nueva_version.observaciones = it.observaciones nueva_version.prioridad = it.prioridad nueva_version.complejidad = it.complejidad nueva_version.anexo = it.anexo nueva_version.revisiones = it.revisiones nueva_version.tipo_item = it.tipo_item nueva_version.archivos = it.archivos if item_borrado: nueva_version.borrado = True nueva_version.linea_base = None else: nueva_version.linea_base = it.linea_base nueva_version.borrado = it.borrado for relacion in it.relaciones_a: if not relacion == borrado: aux = relacion.id.split("+") r = Relacion() r.id = "-".join(aux[0].split("-")[0:-1]) + "-" + \ unicode(nueva_version.version) + "+" +aux[1] r.item_1 = nueva_version r.item_2 = relacion.item_2 for relacion in it.relaciones_b: if not relacion == borrado: r = Relacion() aux = relacion.id.split("+") r.id = aux[0] + "+" + "-".join(aux[1].split("-")[0:-1]) + \ "-" + unicode(nueva_version.version) r.item_1 = relacion.item_1 r.item_2 = nueva_version return nueva_version
def put(self, *args, **kw): """ Registra los cambios realizados a un ítem. """ nombre_caract = DBSession.query(Caracteristica.nombre) \ .filter(Caracteristica.id_tipo_item == kw['tipo_item']).all() anexo = dict() for nom_car in nombre_caract: anexo[nom_car.nombre] = kw[nom_car.nombre] anexo = json.dumps(anexo) clave_primaria = args[0] pk_version = unicode(clave_primaria.split("-")[4]) pk_id = unicode(clave_primaria.split("-")[0] + "-" + \ clave_primaria.split("-")[1] + "-" + \ clave_primaria.split("-")[2] + "-" + \ clave_primaria.split("-")[3]) clave = {} clave[0] = pk_id clave[1] = pk_version it = DBSession.query(Item).filter(Item.id == pk_id).filter( \ Item.version == pk_version).scalar() pks = self.provider.get_primary_fields(self.model) for i, pk in enumerate(pks): if pk not in kw and i < len(clave): kw[pk] = clave[i] band = 0 nueva_version = Item() nueva_version.id = it.id nueva_version.codigo = it.codigo nueva_version.version = int(pk_version) + 1 nueva_version.nombre = it.nombre nueva_version.descripcion = it.descripcion nueva_version.estado = u"En desarrollo" nueva_version.observaciones = it.observaciones nueva_version.prioridad = it.prioridad nueva_version.complejidad = it.complejidad nueva_version.borrado = it.borrado nueva_version.anexo = it.anexo if not it.descripcion == kw['descripcion']: band = 1 nueva_version.descripcion = kw['descripcion'] if not it.nombre == kw['nombre']: band = 1 nueva_version.nombre = kw['nombre'] if not it.observaciones == kw['observaciones']: band = 1 nueva_version.observaciones = kw['observaciones'] if not it.prioridad == int(kw['prioridad']): band = 1 nueva_version.prioridad = kw['prioridad'] if not it.complejidad == int(kw['complejidad']): band = 1 nueva_version.complejidad = kw['complejidad'] if not it.anexo == anexo: band = 1 nueva_version.anexo = anexo if band: nueva_version.tipo_item = it.tipo_item nueva_version.linea_base = it.linea_base nueva_version.archivos = it.archivos nueva_version.revisiones = it.revisiones for relacion in relaciones_a_actualizadas(it.relaciones_a): aux = relacion.id.split("+") r = Relacion() r.id = "-".join(aux[0].split("-")[0:-1]) + "-" + \ unicode(nueva_version.version) + "+" +aux[1] r.item_1 = nueva_version r.item_2 = relacion.item_2 for relacion in relaciones_b_actualizadas(it.relaciones_b): r = Relacion() aux = relacion.id.split("+") r.id = aux[0] + "+" + "-".join(aux[1].split("-")[0:-1]) + \ "-" + unicode(nueva_version.version) r.item_1 = relacion.item_1 r.item_2 = nueva_version DBSession.add(nueva_version) r_act = relaciones_a_actualizadas(it.relaciones_a) listaux = [r.item_2 for r in r_act] ids_items_direc_relacionados_1 = DBSession.query( \ Relacion.id_item_2, Relacion.version_item_2) \ .filter(Relacion.id_item_1 == pk_id) \ .filter(Relacion.version_item_1 == pk_version).all() for tupla_id_item_version in (ids_items_direc_relacionados_1): id_item = tupla_id_item_version[0] version_item = tupla_id_item_version[1] item_revision = DBSession.query(Item) \ .filter(Item.id == id_item) \ .filter(Item.version == version_item).one() if item_revision in listaux: r = Revision() ids_revisiones = DBSession.query(Revision.id) \ .filter(Revision.id_item == id_item).all() if ids_revisiones: proximo_id_revision = proximo_id(ids_revisiones) else: proximo_id_revision = "RV1-" + id_item r.id = proximo_id_revision r.item = item_revision r.descripcion = "Modificacion del item relacionado '\ 'directamente: " + pk_id DBSession.add(r) else: self.provider.update(self.model, params=kw) redirect('../')