def post(self, **kw): """ Registra el nuevo proyecto creado. """ p = Proyecto() p.descripcion = kw['descripcion'] p.nombre = kw['nombre'] p.estado = 'Nuevo' p.nro_fases = int(kw['nro_fases']) ids_proyectos = DBSession.query(Proyecto.id).all() if ids_proyectos: proximo_id_proyecto = proximo_id(ids_proyectos) else: proximo_id_proyecto = "PR1" p.id = proximo_id_proyecto if kw['lider']: objeto_usuario = DBSession.query(Usuario).filter(Usuario.id == \ kw['lider']).one() p.lider = objeto_usuario ids_fichas = DBSession.query(Ficha.id).filter(Ficha.id_usuario == \ kw['lider']).all() r = DBSession.query(Rol).filter(Rol.id == u'RL2').one() ficha = Ficha() ficha.usuario = objeto_usuario ficha.rol = r ficha.proyecto = p if ids_fichas: proximo_id_ficha = proximo_id(ids_fichas) else: proximo_id_ficha = "FI1-" + kw["lider"] ficha.id = proximo_id_ficha DBSession.add(p) DBSession.add(ficha) else: DBSession.add(p) raise redirect('./')
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 post(self, **kw): """Registra la nueva ficha creada""" if not DBSession.query(Ficha).filter(Ficha.id_usuario == \ kw['usuario']).filter(Ficha.id_rol == kw['rol']) \ .filter(Ficha.id_fase == self.id_fase).count(): f = Ficha() ids_fichas = DBSession.query(Ficha.id).filter(Ficha.id_usuario == \ kw['usuario']).all() if ids_fichas: proximo_id_ficha = proximo_id(ids_fichas) else: proximo_id_ficha = "FI1-" + kw['usuario'] f.id = proximo_id_ficha usuario = DBSession.query(Usuario).filter(Usuario.id == \ kw['usuario']).one() rol = DBSession.query(Rol).filter(Rol.id == kw['rol']).one() fase = DBSession.query(Fase).filter(Fase.id == self.id_fase).one() proyecto = fase.proyecto f.usuario = usuario f.rol = rol f.proyecto = proyecto f.fase = fase DBSession.add(f) else: flash(u"La ficha ya existe", u"error") raise redirect('./')
def importar_caracteristica(self, id_tipo_item_viejo, id_tipo_item_nuevo): """ Realiza la importación de características de un tipo de ítem a otro. @param id_tipo_item_viejo: id del tipo de ítem a ser importado. @param id_tipo_item_nuevo: id del tipo de ítem que será creado en base al importado. @type id_tipo_item_viejo: unicode @type id_tipo_item_nuevo: unicode """ caracteristicas = DBSession.query(Caracteristica) \ .filter(Caracteristica.id_tipo_item == id_tipo_item_viejo).all() for caracteristica in caracteristicas: c = Caracteristica() c.nombre = caracteristica.nombre c.tipo = caracteristica.tipo c.descripcion = caracteristica.descripcion ids_caracteristicas = DBSession.query(Caracteristica.id) \ .filter(Caracteristica.id_tipo_item == id_tipo_item_nuevo).all() if ids_caracteristicas: proximo_id_caracteristica = proximo_id(ids_caracteristicas) else: proximo_id_caracteristica = "CA1-" + id_tipo_item_nuevo c.id = proximo_id_caracteristica c.tipo_item = DBSession.query(TipoItem).filter(TipoItem.id == \ id_tipo_item_nuevo).one() DBSession.add(c)
def importar_fase(self, *args, **kw): """ Realiza la importación de una fase de un proyecto a otro. """ id_proyecto = unicode(request.url.split("/")[-8]) f = Fase() id_fase = unicode(request.url.split("/")[-2]) fase_a_importar = DBSession.query(Fase).filter(Fase.id == id_fase) \ .one() existe_nombre = DBSession.query(Fase).filter(Fase.id_proyecto == \ id_proyecto).filter(Fase.nombre == fase_a_importar.nombre).count() f.nombre = fase_a_importar.nombre if existe_nombre: f.nombre = f.nombre + "'" f.orden = self.obtener_orden(id_proyecto) fecha_inicio = datetime.datetime.now() f.fecha_inicio = datetime.date(int(fecha_inicio.year), \ int(fecha_inicio.month),int(fecha_inicio.day)) f.descripcion = fase_a_importar.descripcion f.estado = u'Inicial' ids_fases = DBSession.query(Fase.id).filter(Fase.id_proyecto == \ id_proyecto).all() if ids_fases: proximo_id_fase = proximo_id(ids_fases) else: proximo_id_fase = "FA1-" + id_proyecto f.id = proximo_id_fase f.proyecto = DBSession.query(Proyecto).filter(Proyecto.id == \ id_proyecto).one() DBSession.add(f) self.importar_tipo_item(id_fase, f.id) flash(u"Se importó de forma exitosa") raise redirect('./../../../../..')
def importar_tipo_item(self, id_fase_vieja, id_fase_nueva): """ Realiza la importación de un tipo de ítem de una fase a otra. @param id_fase_vieja: id de la fase a ser importada. @param id_fase_nueva: id de la fase que será creada en base a la importada. @type id_fase_vieja: unicode @type id_fase_nueva: unicode """ tipos_item = DBSession.query(TipoItem).filter(TipoItem.id_fase == \ id_fase_vieja).all() for tipo_item in tipos_item: t = TipoItem() t.codigo = tipo_item.codigo t.nombre = tipo_item.nombre t.descripcion = tipo_item.descripcion ids_tipos_item = DBSession.query(TipoItem.id) \ .filter(TipoItem.id_fase == id_fase_nueva).all() if ids_tipos_item: proximo_id_tipo_item = proximo_id(ids_tipos_item) else: proximo_id_tipo_item = "TI1-" + id_fase_nueva t.id = proximo_id_tipo_item t.fase = DBSession.query(Fase).filter(Fase.id == id_fase_nueva) \ .one() DBSession.add(t) cont = DBSession.query(Caracteristica) \ .filter(Caracteristica.id_tipo_item == t.id).count() self.importar_caracteristica(tipo_item.id, t.id)
def importar_caracteristica(self, id_tipo_item_viejo, id_tipo_item_nuevo): """ Importa las características correspondientes al tipo de ítem a importar. @param id_tipo_item_viejo: Id del tipo de item a importar. @type id_tipo_item_viejo: Unicode. @param id_tipo_item_nuevo: Id del tipo de item nuevo o importado. @type id_tipo_item_nuevo: Unicode """ caracteristicas = DBSession.query(Caracteristica) \ .filter(Caracteristica.id_tipo_item == id_tipo_item_viejo).all() for caracteristica in caracteristicas: c = Caracteristica() c.nombre = caracteristica.nombre c.tipo = caracteristica.tipo c.descripcion = caracteristica.descripcion ids_caracteristicas = DBSession.query(Caracteristica.id) \ .filter(Caracteristica.id_tipo_item == id_tipo_item_nuevo).all() if ids_caracteristicas: proximo_id_caracteristica = proximo_id(ids_caracteristicas) else: proximo_id_caracteristica = "CA1-" + id_tipo_item_nuevo c.id = proximo_id_caracteristica c.tipo_item = DBSession.query(TipoItem).filter(TipoItem.id == \ id_tipo_item_nuevo).one() DBSession.add(c)
def importar_tipo_item(self, *args, **kw): """ Importa un tipo de ítem a una fase determinada. """ id_fase = unicode(request.url.split("/")[-10]) t = TipoItem() id_tipo_item = unicode(request.url.split("/")[-2]) tipo_item_a_importar = DBSession.query(TipoItem) \ .filter(TipoItem.id == id_tipo_item).one() existe_nombre = DBSession.query(TipoItem).filter(TipoItem.id_fase == \ id_fase).filter(TipoItem.nombre == \ tipo_item_a_importar.nombre).count() existe_codigo = DBSession.query(TipoItem).filter(TipoItem.id_fase == \ id_fase).filter(TipoItem.codigo == \ tipo_item_a_importar.codigo).count() t.nombre = tipo_item_a_importar.nombre t.codigo = tipo_item_a_importar.codigo if existe_nombre: t.nombre = t.nombre + "'" if existe_codigo: t.codigo = t.codigo + "'" t.descripcion = tipo_item_a_importar.descripcion ids_tipos_item = DBSession.query(TipoItem.id) \ .filter(TipoItem.id_fase == id_fase).all() if ids_tipos_item: proximo_id_tipo_item = proximo_id(ids_tipos_item) else: proximo_id_tipo_item = "TI1-" + id_fase t.id = proximo_id_tipo_item t.fase = DBSession.query(Fase).filter(Fase.id == id_fase).one() DBSession.add(t) self.importar_caracteristica(id_tipo_item, t.id) flash("Se importo 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 post(self, **kw): """ Registra el nuevo rol creado. """ r = Rol() r.nombre = kw['nombre'] r.descripcion = kw['descripcion'] r.tipo = kw['tipo'] ids_roles = DBSession.query(Rol.id).all() if ids_roles: proximo_id_rol = proximo_id(ids_roles) else: proximo_id_rol = "RL1" r.id = proximo_id_rol DBSession.add(r) raise redirect('./')
def post(self, **kw): """ Registra el nuevo tipo de ítem creado. """ t = TipoItem() t.descripcion = kw['descripcion'] t.nombre = kw['nombre'] t.codigo = kw['codigo'].upper() ids_tipos_item = DBSession.query(TipoItem.id).filter(TipoItem.id_fase \ == self.id_fase).all() if ids_tipos_item: proximo_id_tipo_item = proximo_id(ids_tipos_item) else: proximo_id_tipo_item = "TI1-" + self.id_fase t.id = proximo_id_tipo_item t.fase = DBSession.query(Fase).filter(Fase.id == self.id_fase).one() DBSession.add(t) raise 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('./')
def post(self, **kw): c = Caracteristica() c.descripcion = kw['descripcion'] c.nombre = kw['nombre'] c.tipo = kw['tipo'] ids_caracteristicas = DBSession.query(Caracteristica.id).filter( \ Caracteristica.id_tipo_item == self.id_tipo_item).all() if ids_caracteristicas: proximo_id_caracteristica = proximo_id(ids_caracteristicas) else: proximo_id_caracteristica = "CA1-" + self.id_tipo_item c.id = proximo_id_caracteristica c.tipo_item = DBSession.query(TipoItem).filter(TipoItem.id == \ self.id_tipo_item).one() DBSession.add(c) self.set_null(c) 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 post(self, **kw): """Registra la nueva fase creada.""" f = Fase() f.nombre = kw['nombre'] f.orden = kw['orden'] f.descripcion = kw['descripcion'] f.estado = 'Inicial' ids_fases = DBSession.query(Fase.id).filter(Fase.id_proyecto == \ self.id_proyecto).all() if ids_fases: proximo_id_fase = proximo_id(ids_fases) else: proximo_id_fase = "FA1-" + self.id_proyecto f.id = proximo_id_fase proyecto = DBSession.query(Proyecto).filter(Proyecto.id == \ self.id_proyecto).one() f.proyecto = proyecto DBSession.add(f) self.crear_tipo_default(f.id) raise 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("./")
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 put(self, *args, **kw): """ Registra los cambios realizados a un proyecto. """ id_proyecto = args[0] proyecto_modificado = DBSession.query(Proyecto).filter(Proyecto.id == \ id_proyecto).one() pks = self.provider.get_primary_fields(self.model) for i, pk in enumerate(pks): if pk not in kw and i < len(args): kw[pk] = args[i] usuario = None if kw['lider']: id_lider = kw['lider'] viejo_lider_proyecto_tupla = DBSession.query(Proyecto.id_lider). \ filter(Proyecto.id == id_proyecto).one() if viejo_lider_proyecto_tupla: viejo_lider_proyecto_id = viejo_lider_proyecto_tupla.id_lider ficha = DBSession.query(Ficha).filter(Ficha.id_proyecto == \ id_proyecto).filter(Ficha.id_usuario == \ viejo_lider_proyecto_id).filter(Ficha.id_rol == u'RL2') \ .scalar() if ficha: usuario = DBSession.query(Usuario).filter(Usuario.id == \ id_lider).one() ids_fichas = DBSession.query(Ficha.id).filter(Ficha. \ id_usuario == id_lider).all() if ids_fichas: proximo_id_ficha = proximo_id(ids_fichas) else: proximo_id_ficha = "FI1-" + id_lider ficha.id = proximo_id_ficha ficha.usuario = usuario DBSession.add(ficha) else: ids_fichas = DBSession.query(Ficha.id).filter(Ficha.\ id_usuario == id_lider).all() rol = DBSession.query(Rol).filter(Rol.id == u'RL2').one() proyecto = DBSession.query(Proyecto).filter(Proyecto.id \ == id_proyecto).one() usuario = DBSession.query(Usuario).filter(Usuario.id == \ id_lider).one() fi = Ficha() fi.usuario = usuario fi.rol = rol fi.proyecto = proyecto if ids_fichas: proximo_id_ficha = proximo_id(ids_fichas) else: proximo_id_ficha = "FI1-" + id_lider fi.id = proximo_id_ficha DBSession.add(fi) else: viejo_lider_proyecto_tupla = DBSession.query(Proyecto.id_lider). \ filter(Proyecto.id == id_proyecto).one() if viejo_lider_proyecto_tupla: viejo_lider_proyecto_id = viejo_lider_proyecto_tupla.id_lider ficha_lider_a_eliminar = DBSession.query(Ficha).filter \ (Ficha.id_proyecto == id_proyecto). \ filter(Ficha.id_usuario == \ viejo_lider_proyecto_id).filter \ (Ficha.id_rol == u'RL2').scalar() DBSession.delete(ficha_lider_a_eliminar) proyecto_modificado.lider = usuario proyecto_modificado.nombre = kw["nombre"] proyecto_modificado.descripcion = kw["descripcion"] if "nro_fases" in kw: proyecto_modificado.nro_fases = kw["nro_fases"] redirect('../')