def post(self, **kw): """ Registra la nueva línea base creada.""" lista_ids_item = list() l = LineaBase() l.descripcion = kw['descripcion'] ids_lineas_base = DBSession.query(LineaBase.id) \ .filter(LineaBase.id_fase == self.id_fase).all() if ids_lineas_base: proximo_id_linea_base = proximo_id(ids_lineas_base) else: proximo_id_linea_base = "LB1-" + self.id_fase l.id = proximo_id_linea_base l.fase = DBSession.query(Fase).filter(Fase.id == self.id_fase).one() l.cerrado = True l.consistente = True for item in kw['items']: lista_ids_item.append((item.split("/")[0], item.split("/")[-1])) for i in lista_ids_item: items = DBSession.query(Item).filter(Item.id == i[0]).all() for item in items: l.items.append(item) DBSession.add(l) flash(u"Creación realizada de forma exitosa") raise redirect('./')
def dividir(self, **kw): """ Permite formar una línea base a partir de dos o más líneas base existentes previamente. """ id_proyecto = self.id_fase.split("-")[1] if TienePermiso("separar linea base", id_proyecto=id_proyecto, id_fase=self.id_fase).is_met(request.environ): if "pk_linea_base" in kw: self.id_primera_lb = kw["pk_linea_base"] items = DBSession.query(Item).filter( Item.id_linea_base == self.id_primera_lb) items_a_mostrar = UnificarItem(items) if "seleccionados" in kw: lb = LineaBase() lb.descripcion = kw["descripcion"] ids_lineas_base = DBSession.query(LineaBase.id) \ .filter(LineaBase.id_fase == self.id_fase) \ .all() proximo_id_linea_base = proximo_id(ids_lineas_base) lb.id = proximo_id_linea_base lb.fase = DBSession.query(Fase) \ .filter(Fase.id == self.id_fase).one() lb.cerrado = False lb.consistente = True DBSession.add(lb) if type(kw["seleccionados"]).__name__ == "unicode": item = DBSession.query(Item) \ .filter(Item.id == kw["seleccionados"]).all() for aux in item: aux.linea_base = DBSession.query(LineaBase) \ .filter(LineaBase.id == lb.id).one() consistencia_lb(lb) else: for item_seleccionado in kw["seleccionados"]: items = DBSession.query(Item) \ .filter(Item.id == item_seleccionado).all() for item in items: item.linea_base = DBSession.query(LineaBase) \ .filter(LineaBase.id == lb.id) \ .one() primera_lb = DBSession.query(LineaBase) \ .filter(LineaBase.id == self.id_primera_lb).one() consistencia_lb(primera_lb) redirect('./.') d = dict(items=items_a_mostrar, model="Lineas Base") d["accion"] = "dividir" d["direccion_anterior"] = "./" return d else: flash(u"El usuario no cuenta con los permisos necesarios", u"error") redirect('./')
def unir(self, **kw): """ Permite realizar la unión entre dos o más líneas base de manera que formen una sola. """ id_proyecto = self.id_fase.split("-")[1] if TienePermiso("unir lineas base", id_proyecto=id_proyecto, id_fase=self.id_fase).is_met(request.environ): if "seleccionados" in kw: lb = LineaBase() lb.descripcion = kw["descripcion"] ids_lineas_base = DBSession.query(LineaBase.id) \ .filter(LineaBase.id_fase == self.id_fase) \ .all() proximo_id_linea_base = proximo_id(ids_lineas_base) lb.id = proximo_id_linea_base lb.fase = DBSession.query(Fase) \ .filter(Fase.id == self.id_fase).one() lb.cerrado = False lb.consistente = False DBSession.add(lb) consistente = True for lb_seleccionada in kw["seleccionados"]: items = DBSession.query(Item).filter( Item.id_linea_base == lb_seleccionada).all() a_eliminar = DBSession.query(LineaBase) \ .filter(LineaBase.id == lb_seleccionada).one() DBSession.delete(a_eliminar) for item in items: item.linea_base = DBSession.query(LineaBase) \ .filter(LineaBase.id == lb.id).one() consistencia_lb(lb) DBSession.add(lb) redirect('./') lineas_base = DBSession.query(LineaBase.id) \ .filter(LineaBase.id_fase == self.id_fase) \ .filter(LineaBase.cerrado == False).all() d = dict(model="Linea Base", accion="./") d["lineas_base"] = lineas_base d["direccion_anterior"] = "./" return d else: flash(u"El usuario no cuenta con los permisos necesarios", u"error") redirect('./')