def crear_revision(self, item, msg): """ Crea una revisión cuando al borrar una relación un ítem queda huérfano, se le genera una revisión al mismo. """ rv = Revision() ids_revisiones = DBSession.query(Revision.id) \ .filter(Revision.id_item == item.id).all() if ids_revisiones: proximo_id_revision = proximo_id(ids_revisiones) else: proximo_id_revision = "RV1-" + item.id rv.id = proximo_id_revision rv.item = item rv.descripcion = msg DBSession.add(rv)
def crear_revision(self, item, msg): """ Crea una nueva revisión y la agrega a un item dado. @param item: Item al cual se agregará la revisión @type item: L{Item} @param msg: Mensaje de la revisión @type msg: String """ rv = Revision() ids_revisiones = DBSession.query(Revision.id) \ .filter(Revision.id_item == item.id).all() if ids_revisiones: proximo_id_revision = proximo_id(ids_revisiones) else: proximo_id_revision = "RV1-" + item.id rv.id = proximo_id_revision rv.item = item rv.descripcion = msg DBSession.add(rv)
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('../')