def __actions__(self, obj): """ Define las acciones posibles para cada tipo de ítem. """ primary_fields = self.__provider__.get_primary_fields(self.__entity__) pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields)) id_tipo_item = unicode(pklist.split("-")[0]) value = '<div>' if id_tipo_item != u"TI1": if TienePermiso("modificar tipo de item", id_fase = self.id_fase) \ .is_met(request.environ): value = value + '<div><a class="edit_link" href="'+pklist+ \ '/edit" style="text-decoration:none" TITLE =' \ ' "Modificar"></a>'\ '</div>' value = value + '<div><a class="caracteristica_link" href="' \ +pklist+'/caracteristicas" style="text-decoration:none"' \ ' TITLE = "Caracteristicas"></a></div>' if TienePermiso("eliminar tipo de item", id_fase = self.id_fase) \ .is_met(request.environ): value = value + '<div>'\ '<form method="POST" action="'+pklist+ \ '" class="button-to" TITLE = "Eliminar">'\ '<input type="hidden" name="_method" value="DELETE" />'\ '<input class="delete-button" onclick="return confirm' \ '(\'¿Está seguro?\');" value="delete" type="submit" '\ 'style="background-color: transparent; float:left;' \ ' border:0; color: #286571; display: inline; margin: 0;' \ ' padding: 0;"/>'\ '</form>'\ '</div>' value = value + '</div>' return value
def __actions__(self, obj): """ Define las acciones posibles para cada archivo. """ primary_fields = self.__provider__.get_primary_fields(self.__entity__) pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields)) item = DBSession.query(Item).filter(Item.id == self.id_item) \ .filter(Item.version == self.version).one() bloqueado = False if item.linea_base: if item.linea_base.cerrado: bloqueado = True value = '<div>' if TienePermiso("descargar archivo", id_fase = item.tipo_item.fase \ .id).is_met(request.environ): value = value + '<div><a class="descarga_link"' \ ' href="descargar?id_archivo='+ pklist + \ '" style="text-decoration:none" TITLE= "Descargar"></a>'\ '</div>' if TienePermiso("modificar item", id_fase = item.tipo_item.fase.id) \ .is_met(request.environ) and not bloqueado: value = value + '<div>'\ '<form method="POST" action="'+ pklist + \ '" class="button-to" TITLE= "Eliminar">'\ '<input type="hidden" name="_method" value="DELETE" />'\ '<input class="delete-button" onclick="return confirm' \ '(\'¿Está seguro?\');" value="delete" type="submit" '\ 'style="background-color: transparent; float:left; border:0;' \ ' color: #286571; display: inline; margin: 0; padding: 0;"/>'\ '</form>'\ '</div>' value = value + '</div>' return value
def _do_get_provider_count_and_objs(self, buscado = "", **kw): """ Se utiliza para listar solo las fichas que cumplan ciertas condiciones y de acuerdo a ciertos permisos. """ if self.id_fase == "": fichas = DBSession.query(Ficha) \ .filter(Ficha.id.contains(self.buscado)).all() else: id_proyecto = self.id_fase.split("-")[1] permiso_asignar_rol_fase = TienePermiso("asignar rol fase", \ id_fase = self.id_fase).is_met(request.environ) permiso_asignar_rol_cualquier_fase = TienePermiso( \ "asignar rol cualquier fase", id_proyecto = \ id_proyecto).is_met(request.environ) if permiso_asignar_rol_fase or permiso_asignar_rol_cualquier_fase: fichas = DBSession.query(Ficha).filter(Ficha.id_fase == \ self.id_fase).all() for ficha in reversed(fichas): if ficha.rol.tipo != u"Fase": fichas.remove(ficha) elif not (self.buscado in ficha.usuario.nombre_usuario or \ self.buscado in ficha.rol.nombre or self.buscado in \ ficha.id or self.buscado in ficha.proyecto.nombre or \ self.buscado in ficha.fase.nombre): fichas.remove(ficha) else: fichas = list() return len(fichas), fichas
def buscar(self, **kw): """ Lista las fases de acuerdo a un criterio de búsqueda introducido por el usuario. """ buscar_table_filler = FaseTableFiller(DBSession) if "parametro" in kw: buscar_table_filler.init(kw["parametro"], self.id_proyecto) else: buscar_table_filler.init("", self.id_proyecto) tmpl_context.widget = self.table value = buscar_table_filler.get_value() d = dict(value_list = value, model = "fase", accion = "./buscar") cant_fases = DBSession.query(Fase).filter(Fase.id_proyecto == \ self.id_proyecto).count() otroproyecto = DBSession.query(Proyecto).filter(Proyecto.id != \ self.id_proyecto).filter(Proyecto.fases != None).count() if cant_fases < DBSession.query(Proyecto.nro_fases).filter( \ Proyecto.id == self.id_proyecto).scalar(): d["suficiente"] = True else: d["suficiente"] = False d["model"] = "Fases" d["permiso_crear"] = TienePermiso("crear fase", id_proyecto = \ self.id_proyecto).is_met(request.environ) d["permiso_importar"] = TienePermiso("importar fase", id_proyecto = \ self.id_proyecto).is_met(request.environ) and otroproyecto d["direccion_anterior"] = "../.." return d
def __actions__(self, obj): """ Define las acciones posibles para cada proyecto. """ primary_fields = self.__provider__.get_primary_fields(self.__entity__) pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields)) value = '<div>' if TienePermiso("modificar proyecto").is_met(request.environ): value = value + '<div><a class="edit_link" href="'+pklist+ \ '/edit" style="text-decoration:none" TITLE= "Modificar"></a>'\ '</div>' pp = TieneAlgunPermiso(tipo = u"Proyecto", recurso = u"Fase", \ id_proyecto = pklist).is_met(request.environ) pf = TieneAlgunPermiso(tipo = u"Fase", recurso = u"Tipo de Item", \ id_proyecto = pklist).is_met(request.environ) pfp = TienePermiso(u"asignar rol cualquier fase", \ id_proyecto = pklist).is_met(request.environ) pfi = TieneAlgunPermiso(tipo = "Fase", recurso = u"Ficha", \ id_proyecto = pklist).is_met(request.environ) if pp or pf or pfp or pfi: value = value + '<div><a class="fase_link" href="'+pklist+ \ '/fases" style="text-decoration:none" TITLE= "Fases"></a>'\ '</div>' if TienePermiso("asignar rol proyecto", id_proyecto = pklist).is_met( \ request.environ): value = value + '<div><a class="responsable_link" href="'+pklist+ \ '/responsables" style="text-decoration:none" '\ 'TITLE= "Responsables"></a>'\ '</div>' if TienePermiso("eliminar proyecto").is_met(request.environ): value = value + '<div><form method="POST" action="'+pklist+ \ '" class="button-to" TITLE= "Eliminar">'\ '<input type="hidden" name="_method" value="DELETE" />'\ '<input class="delete-button" onclick="return confirm' \ '(\'¿Está seguro?\');" value="delete" type="submit" '\ 'style="background-color: transparent; float:left; '\ 'border:0; color: #286571; display: inline; margin: 0; '\ 'padding: 0;"/>'\ '</form></div>' pr = DBSession.query(Proyecto).get(pklist) estado_proyecto(pr) cant_fases = DBSession.query(Fase).filter(Fase.id_proyecto == pklist) \ .count() if cant_fases == pr.nro_fases and pr.estado == u"Nuevo" and \ TienePermiso("setear estado proyecto en desarrollo"). \ is_met(request.environ): value = value + '<div><a class="inicio_link" href="iniciar/' \ +pklist+'" style="text-decoration:none">Inicia proyecto' \ '</a></div>' value = value + '</div>' return value
def _do_get_provider_count_and_objs(self, buscado="", **kw): """ Se utiliza para listar solo los proyectos que cumplan ciertas condiciones y de acuerdo a ciertos permisos. """ self.opcion = unicode(request.url.split("/")[-3]) if self.opcion == unicode("tipo_item"): self.id_fase = unicode(request.url.split("/")[-4]) if TienePermiso("importar tipo de item", id_fase=self.id_fase): proyectos = DBSession.query(Proyecto).join(Proyecto.fases) \ .filter(Proyecto.fases != None).order_by(Proyecto.id) \ .all() for proyecto in reversed(proyectos): buscado = self.buscado in str(proyecto.nro_fases) or \ self.buscado in str(proyecto.fecha_inicio) or \ self.buscado in str(proyecto.fecha_fin) or \ self.buscado in proyecto.lider.nombre_usuario or \ self.buscado in proyecto.nombre or \ self.buscado in proyecto.descripcion or \ self.buscado in proyecto.estado if not buscado: proyectos.remove(proyecto) for proyecto in reversed(proyectos): band = True for fase in proyecto.fases: if len(fase.tipos_item) > 1 and \ fase.id != self.id_fase: band = False if band: proyectos.remove(proyecto) else: proyectos = list() else: self.id_proyecto = unicode(request.url.split("/")[-4]) if TienePermiso("importar fase", id_proyecto=self.id): proyectos = DBSession.query(Proyecto).filter(Proyecto.id != \ self.id_proyecto).filter(Proyecto.fases != \ None).order_by(Proyecto.id).all() for proyecto in reversed(proyectos): buscado = self.buscado in str(proyecto.nro_fases) or \ self.buscado in str(proyecto.fecha_inicio) or \ self.buscado in str(proyecto.fecha_fin) or \ self.buscado in proyecto.lider.nombre_usuario or \ self.buscado in proyecto.nombre or \ self.buscado in proyecto.descripcion or \ self.buscado in proyecto.estado if not buscado: proyectos.remove(proyecto) else: proyectos = list() return len(proyectos), proyectos
def __actions__(self, obj): """ Define las acciones posibles para cada relación. """ primary_fields = self.__provider__.get_primary_fields(self.__entity__) pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields)) value = '<div>' relacion = DBSession.query(Relacion).get(pklist) item = DBSession.query(Item).filter(Item.id == self.id_item).filter( \ Item.version == self.version_item).one() bloqueado = False if item.linea_base: if item.linea_base.cerrado: bloqueado = True if TienePermiso("eliminar relaciones", id_fase = item.tipo_item.fase \ .id).is_met(request.environ) and not bloqueado and \ relacion.item_2 == item: value = value + '<div>'\ '<form method="POST" action="'+pklist+'" class="button-to">'\ '<input type="hidden" name="_method" value="DELETE" />'\ '<input class="delete-button" onclick="return confirm' \ '(\'¿Está seguro?\');" value="delete" type="submit" '\ 'style="background-color: transparent; float:left; border:0;' \ ' color: #286571; display: inline; margin: 0; padding: 0;"/>'\ '</form>'\ '</div>' value = value + '</div>' return value
def __actions__(self, obj): """ Define las acciones posibles para cada ficha. """ primary_fields = self.__provider__.get_primary_fields(self.__entity__) pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields)) value = '<div>' fase = DBSession.query(Fase).get(self.id_fase) permiso_asignar_rol_cualquier_fase = TienePermiso \ ("asignar rol cualquier fase", id_proyecto = \ fase.id_proyecto).is_met(request.environ) permiso_asignar_rol_fase = TienePermiso("asignar rol fase", id_fase = \ self.id_fase).is_met(request.environ) if permiso_asignar_rol_fase or permiso_asignar_rol_cualquier_fase: value = value + '<div>'\ '<form method="POST" action="'+pklist+'" class="button-to">'\ '<input type="hidden" name="_method" value="DELETE" />'\ '<input class="delete-button" onclick="return confirm' \ '(\'Está seguro?\');" value="delete" type="submit" '\ 'style="background-color: transparent; float:left; border:0;' \ ' color: #286571; display: inline; margin: 0; padding: 0;"/>'\ '</form>'\ '</div>' value = value + '</div>' return value
def __actions__(self, obj): """ Define las acciones posibles para cada ítem. """ primary_fields = self.__provider__.get_primary_fields(self.__entity__) pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields)) id_item = pklist.split("/")[0] version_item = pklist.split("/")[1] pklist = id_item + "-" + version_item item = DBSession.query(Item).filter(Item.id == id_item) \ .filter(Item.version == version_item).one() value = '<div>' bloqueado = False if item.linea_base: if item.linea_base.cerrado: bloqueado = True if TienePermiso("reversionar item", id_fase = item.tipo_item.fase.id) \ .is_met(request.environ) and not bloqueado: value = value + '<div><a class="reversion_link" href=' \ '"revertir?item='+pklist+'" style="text-decoration:none" TITLE ='\ ' "Revertir"></a>'\ '</div>' value = value + '<div><a class="relacion_link" href="'+pklist+ \ '/relaciones" style="text-decoration:none" TITLE =' \ '"Relaciones"></a></div>' value = value + '<div><a class="archivo_link" href="'+pklist+ \ '/archivos" style="text-decoration:none" TITLE = "Archivos"></a>'\ '</div>' if item.anexo != "{}": value = value + '<div><a class="caracteristica_link" href=' \ '"listar_caracteristicas?pk_item='+pklist+ \ '" style="text-decoration:none" TITLE =' \ ' "Ver caracteristicas"></a></div>' value = value + '</div>' return value
def _do_get_provider_count_and_objs(self, **kw): """ Se utiliza para listar solo los proyectos que cumplan ciertas condiciones y de acuerdo a ciertos permisos. """ proyectos = DBSession.query(Proyecto).order_by(Proyecto.id).all() for proyecto in reversed(proyectos): buscado = self.buscado in str(proyecto.nro_fases) or \ self.buscado in str(proyecto.fecha_inicio) or \ self.buscado in str(proyecto.fecha_fin) or \ self.buscado in proyecto.lider.nombre_usuario or \ self.buscado in proyecto.nombre or \ self.buscado in proyecto.descripcion or \ self.buscado in proyecto.estado if not buscado: proyectos.remove(proyecto) ps = TieneAlgunPermiso(tipo = u"Sistema", recurso = u"Proyecto") \ .is_met(request.environ) if not ps: for proyecto in reversed(proyectos): pfp = TienePermiso(u"asignar rol cualquier fase", \ id_proyecto = proyecto.id).is_met(request.environ) pfi = TieneAlgunPermiso(tipo = "Fase", recurso = u"Ficha", \ id_proyecto = proyecto.id).is_met(request.environ) pp = TieneAlgunPermiso(tipo = u"Proyecto", recurso = u"Fase", \ id_proyecto = proyecto.id).is_met(request.environ) pf = TieneAlgunPermiso(tipo = u"Fase", recurso = u"Tipo de Item", id_proyecto = proyecto.id). \ is_met(request.environ) if not (pp or pf or pfp or pfi): proyectos.remove(proyecto) return len(proyectos), proyectos
def costo(self, *args, **kw): """ Calcula el costo de impacto de un ítem dado y despliega una representación gráfica del mismo. """ if TienePermiso("calcular costo de impacto", id_fase = self.id_fase) \ .is_met(request.environ): id_item = kw["id_item"] if os.path.isfile('saip/public/images/grafo.png'): os.remove('saip/public/images/grafo.png') item = DBSession.query(Item).filter(Item.id == id_item) \ .order_by(desc(Item.version)).first() grafo = pydot.Dot(graph_type='digraph', size="8, 16") valor, grafo, band = costo_impacto(item, grafo) grafo.write_png('saip/public/images/grafo.png') d = dict() d["costo"] = valor d["model"] = "Items" d["direccion_anterior"] = "./" return d else: flash(u"El usuario no cuenta con los permisos necesarios", \ u"error") redirect('./')
def __actions__(self, obj): """ Define las acciones posibles para cada línea base. """ primary_fields = self.__provider__.get_primary_fields(self.__entity__) pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields)) value = '<div>' id_proyecto = pklist.split("-")[2] linea_base = DBSession.query(LineaBase).filter(LineaBase.id == pklist)\ .one() items = DBSession.query(Item).filter( Item.id_linea_base == pklist).all() items_a_mostrar = UnificarItem(items) cant_items = len(items_a_mostrar) consistencia_lb(linea_base) fase = DBSession.query(Fase).filter(Fase.id == self.id_fase).one() estado_fase(fase) if linea_base.cerrado: if TienePermiso("abrir linea base", id_proyecto=id_proyecto, id_fase=self.id_fase).is_met(request.environ): value = value + '<div><a class="abrir_link" ' \ 'href="abrir?pk_linea_base='+pklist+'" ' \ 'style="text-decoration:none" TITLE = "Abrir"></a></div>' if not linea_base.cerrado: if TienePermiso("separar linea base", id_proyecto = id_proyecto, id_fase = self.id_fase).is_met(request.environ) \ and cant_items > 1: value = value + '<div><a class="dividir_link" href=' \ '"dividir?pk_linea_base='+pklist+'" style="text-decoration:' \ 'none" TITLE = "Dividir"></a></div>' if linea_base.consistente: if TienePermiso("cerrar linea base", id_proyecto=id_proyecto, id_fase=self.id_fase).is_met(request.environ): value = value + '<div><a class="cerrar_link" href=' \ '"cerrar?pk_linea_base='+pklist+'" style="text-' \ 'decoration:none" TITLE = "Cerrar"></a></div>' if cant_items >= 1: value = value + '<div><a class="item_link" href=' \ '"'+pklist+'/items" style="text-decoration:' \ 'none" TITLE = "Listar Items"></a></div>' value = value + '</div>' return value
def get_all(self, *args, **kw): """ Lista las fichas existentes de acuerdo a condiciones establecidas en L{ficha_fase_controller.FichaTableFiller ._do_get_provider_count_and_objs}. """ ficha_table_filler.init("", self.id_fase) d = super(FichaFaseController, self).get_all(*args, **kw) id_proyecto = self.id_fase.split("-")[1] existe_rol = DBSession.query(Rol).filter(Rol.tipo == u'Fase').count() d["permiso_crear"] = (TienePermiso("asignar rol fase", id_fase = \ self.id_fase).is_met(request.environ) or TienePermiso( \ "asignar rol cualquier fase", id_proyecto = id_proyecto) \ .is_met(request.environ)) and existe_rol d["model"] = "Responsables" d["accion"] = "./buscar" d["direccion_anterior"] = "../.." return d
def get_all(self): """Lista las fases de acuerdo a lo establecido en L{fase_controller_2.FaseTableFiller._do_get_provider_count_and_objs}. """ if TienePermiso("importar tipo de item").is_met(request.environ) \ or TienePermiso("importar fase").is_met(request.environ): fase_table_filler.init("") tmpl_context.widget = self.table d = dict() d["value_list"] = self.fase_filler.get_value() d["model"] = "Fases" d["accion"] = "./buscar" d["direccion_anterior"] = "../.." return d else: flash(u"El usuario no cuenta con los permisos necesarios", \ u"error") raise redirect('./')
def new(self, *args, **kw): """ Despliega una página para la creación de una nueva ficha de fase. """ id_proyecto = self.id_fase.split("-")[1] permiso_asignar_rol_fase = TienePermiso("asignar rol fase", \ id_fase = self.id_fase).is_met(request.environ) permiso_asignar_rol_cualquier_fase = TienePermiso( \ "asignar rol cualquier fase", id_proyecto = id_proyecto) \ .is_met(request.environ) if permiso_asignar_rol_fase or permiso_asignar_rol_cualquier_fase: d = super(FichaFaseController, self).new(*args, **kw) d["direccion_anterior"] = "./" return d else: flash(u"El usuario no cuenta con los permisos necesarios", \ u"error") raise redirect('./')
def __actions__(self, obj): """ Define las acciones posibles para cada fase en administración. """ primary_fields = self.__provider__.get_primary_fields(self.__entity__) pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields)) fase = DBSession.query(Fase).filter(Fase.id == pklist).one() estado_fase(fase) value = '<div>' if TienePermiso("modificar fase", id_proyecto = fase.id_proyecto). \ is_met(request.environ): value = value + '<div><a class="edit_link" href="'+pklist+ \ '/edit" style="text-decoration:none" TITLE= "Modificar"></a>'\ '</div>' permiso_tipo_item = TieneAlgunPermiso(tipo = u"Fase", recurso = \ u"Tipo de Item", id_fase = pklist). \ is_met(request.environ) permiso_asignar_rol_cualquier_fase = TienePermiso \ ("asignar rol cualquier fase", id_proyecto = \ self.id_proyecto).is_met(request.environ) permiso_asignar_rol_fase = TienePermiso("asignar rol fase", id_fase = \ pklist).is_met(request.environ) if permiso_tipo_item: value = value + '<div><a class="tipo_item_link" href="'+pklist+ \ '/tipo_item" style="text-decoration:none" TITLE=' \ '"Tipos de item"></a></div>' if permiso_asignar_rol_fase or permiso_asignar_rol_cualquier_fase: value = value + '<div><a class="responsable_link" href="'+pklist+ \ '/responsables" style="text-decoration:none" TITLE=' \ '"Responsables"></a></div>' if TienePermiso("eliminar fase", id_proyecto = fase.id_proyecto). \ is_met(request.environ): value = value + '<div>'\ '<form method="POST" action="'+pklist+ \ '" class="button-to" TITLE= "Eliminar">'\ '<input type="hidden" name="_method" value="DELETE" />'\ '<input class="delete-button" onclick="return confirm' \ '(\'¿Está seguro?\');" value="delete" type="submit" '\ 'style="background-color: transparent; float:left; border:0;' \ ' color: #286571; display: inline; margin: 0; padding: 0;"/>'\ '</form>'\ '</div>' value = value + '</div>' return value
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 get_all(self, *args, **kw): """Lista las relaciones de acuerdo a lo establecido en L{relacion_controller.RelacionTableFiller._do_get_provider_count_and_objs}. """ relacion_table_filler.init("", self.id_item, self.version_item) d = super(RelacionController, self).get_all(*args, **kw) item = DBSession.query(Item).filter(Item.id == self.id_item) \ .filter(Item.version == self.version_item).one() d["accion"] = "./buscar" d["fases"] = list() d["model"] = "Relaciones" lista = [x.id_item_2 for x in item.relaciones_a] + \ [x.id_item_1 for x in item.relaciones_b] fase_actual = DBSession.query(Fase).filter(Fase.id == \ item.tipo_item.id_fase).one() band = False ts_item = [t for t in fase_actual.tipos_item] items = list() for t_item in ts_item: items = items + t_item.items for it in reversed(items): if it.borrado: items.remove(it) for it in items: if it.id not in lista and it.id != self.id_item and \ it.estado == u"Aprobado" and not it.revisiones: band = True break if band: d["fases"].append(fase_actual) fase_ant = DBSession.query(Fase).filter(Fase.id_proyecto == \ item.tipo_item.fase.id_proyecto).filter(Fase.orden == \ item.tipo_item.fase.orden - 1).first() if fase_ant: band = False ts_item = [t for t in fase_ant.tipos_item] items = list() for t_item in ts_item: items = items + t_item.items for it in reversed(items): if it.borrado: items.remove(it) for it in items: if it.id not in lista and it.linea_base: if it.linea_base.cerrado and it.linea_base.consistente: band = True break if band: d["fases"].append(fase_ant) bloqueado = False if item.linea_base: if item.linea_base.cerrado: bloqueado = True if d["fases"]: d["permiso_crear"] = TienePermiso("crear relaciones", id_fase = \ fase_actual.id).is_met(request.environ) and not bloqueado else: d["permiso_crear"] = False d["direccion_anterior"] = "../.." return d
def buscar(self, **kw): """ Lista las líneas base de acuerdo a un criterio de búsqueda introducido por el usuario. """ buscar_table_filler = LineaBaseTableFiller(DBSession) if "parametro" in kw: buscar_table_filler.init(kw["parametro"], self.id_fase) else: buscar_table_filler.init("", self.id_fase) tmpl_context.widget = self.table value = buscar_table_filler.get_value() d = dict(value_list=value, model="Lineas Base") d["accion"] = "./buscar" d["permiso_crear"] = TienePermiso("crear linea base", id_fase=self.id_fase).is_met( request.environ) d["permiso_unir"] = TienePermiso("unir lineas base", id_fase=self.id_fase).is_met( request.environ) cant = DBSession.query(LineaBase).filter(LineaBase.cerrado == False) \ .filter(LineaBase.id_fase == self.id_fase).count() if cant < 2: d["lineas_base"] = False else: d["lineas_base"] = True items = DBSession.query(Item).filter(Item.id_tipo_item .contains(self.id_fase)).filter(Item.borrado == False) \ .filter(Item.id_linea_base == None).filter(Item.estado == u"Aprobado").all() aux = [] for item in items: for item_2 in items: if item.id == item_2.id: if item.version > item_2.version: aux.append(item_2) elif item.version < item_2.version: aux.append(item) items = [i for i in items if i not in aux and not es_huerfano(i)] cant_items = len(items) if cant_items == 0: d["permiso_crear"] = False d["direccion_anterior"] = "../.." return d
def get_all(self, *args, **kw): """ Lista los ítems existentes de acuerdo a condiciones establecidas en el L{item_controller.ItemTableFiller ._do_get_provider_count_and_objs}. """ item_table_filler.init("", self.id_fase) d = super(ItemController, self).get_all(*args, **kw) items_borrados = DBSession.query(Item).filter(Item.id.contains( \ self.id_fase)).filter(Item.borrado == True).count() d["permiso_recuperar"] = TienePermiso("recuperar item", id_fase = \ self.id_fase).is_met(request.environ) and items_borrados d["permiso_crear"] = TienePermiso("crear item", id_fase = \ self.id_fase).is_met(request.environ) d["accion"] = "./buscar" d["tipos_item"] = DBSession.query(TipoItem).filter( \ TipoItem.id_fase == self.id_fase) d["model"] = "Items" d["direccion_anterior"] = "../.." return d
def get_all(self, *args, **kw): """ Lista los roles existentes de acuerdo a condiciones establecidas en el L{rol_controller.RolTableFiller._do_get_provider_count_and_objs}. """ d = super(RolController, self).get_all(*args, **kw) d["permiso_crear"] = TienePermiso("crear rol").is_met(request.environ) d["accion"] = "./buscar" d["model"] = "roles" d["direccion_anterior"] = "../" return d
def buscar(self, **kw): """ Lista las fichas de fase de acuerdo a un criterio de búsqueda introducido por el usuario. """ id_proyecto = self.id_fase.split("-")[1] existe_rol = DBSession.query(Rol).filter(Rol.tipo == u'Fase').count() buscar_table_filler = FichaTableFiller(DBSession) if "parametro" in kw: buscar_table_filler.init(kw["parametro"], self.id_fase) else: buscar_table_filler.init("",self.id_fase) tmpl_context.widget = self.table value = buscar_table_filler.get_value() d = dict(value_list=value, model="Responsables", accion = "./buscar") d["permiso_crear"] = (TienePermiso("asignar rol fase", id_fase = \ self.id_fase).is_met(request.environ) or TienePermiso( \ "asignar rol cualquier fase", id_proyecto = id_proyecto) \ .is_met(request.environ)) and existe_rol d["direccion_anterior"] = "../.." return d
def new(self, *args, **kw): """ Permite la creación de una nueva fase para un determinado proyecto. """ if TienePermiso("crear fase", id_proyecto = self.id_proyecto). \ is_met(request.environ): d = super(FaseController, self).new(*args, **kw) d["direccion_anterior"] = "./" return d else: flash(u" El usuario no cuenta con los permisos necesarios", \ u"error" ) raise redirect('./')
def new(self, *args, **kw): """ Despliega una página para la creación de una nueva ficha de sistema. """ if TienePermiso("asignar rol sistema").is_met(request.environ): d = super(FichaSistemaController, self).new(*args, **kw) d["direccion_anterior"] = "./" return d else: flash(u"El usuario no cuenta con los permisos necesarios", \ u"error") raise redirect('./')
def get_all(self, *args, **kw): """ Lista los tipos de ítem existentes de acuerdo a condiciones establecidas en el L{tipo_item_controller.TipoItemTableFiller ._do_get_provider_count_and_objs}. """ tipo_item_table_filler.init("", self.id_fase) d = super(TipoItemController, self).get_all(*args, **kw) otrafase = DBSession.query(Fase).filter(Fase.id != self.id_fase) \ .filter(Fase.tipos_item != None).all() otrafase = [f for f in otrafase if len(f.tipos_item) > 1] d["permiso_crear"] = TienePermiso("crear tipo de item", id_fase = \ self.id_fase).is_met(request.environ) d["permiso_importar"] = TienePermiso("importar tipo de item", \ id_fase = self.id_fase).is_met(request.environ) \ and otrafase d["accion"] = "./buscar" d["model"] = "Tipos de item" d["direccion_anterior"] = "../.." return d
def edit(self, *args, **kw): """ Despliega una página para la modificación de un proyecto. """ if TienePermiso("modificar proyecto").is_met(request.environ): d = super(ProyectoController, self).edit(*args, **kw) d["direccion_anterior"] = "../" return d else: flash(u"El usuario no cuenta con los permisos necesarios", \ u"error") raise redirect('./')
def get_all(self): """ Lista los proyectos existentes de acuerdo a condiciones establecidas en el L{proyecto_controller_2.ProyectoTableFiller ._do_get_provider_count_and_objs}. """ if TienePermiso("importar tipo de item").is_met(request.environ) or \ TienePermiso("importar fase").is_met(request.environ): proyecto_table_filler.init("") tmpl_context.widget = self.table d = dict() d["value_list"] = self.proyecto_filler.get_value() d["model"] = "proyectos" d["accion"] = "./buscar" d["direccion_anterior"] = "../" return d else: flash(u"El usuario no cuenta con los permisos necesarios", \ u"error") raise redirect('./')
def _do_get_provider_count_and_objs(self, **kw): """ Se utiliza para listar las fases que cumplan ciertas condiciones y ciertos permisos. """ self.id_proyecto = unicode(request.url.split("/")[-3]) self.opcion = unicode(request.url.split("/")[-5]) self.id_fase = unicode(request.url.split("/")[-6]) if self.opcion == unicode("tipo_item"): if TienePermiso("importar tipo de item", id_fase=self.id_fase): fases = DBSession.query(Fase).filter(Fase.id_proyecto == \ self.id_proyecto).filter(Fase.id != self.id_fase) \ .order_by(Fase.orden).all() fases = [f for f in fases if len(f.tipos_item) > 1] for fase in reversed(fases): buscado = self.buscado in fase.nombre or \ self.buscado in fase.descripcion or \ self.buscado in str(fase.orden) or \ self.buscado in str(fase.fecha_inicio) or \ self.buscado in str(fase.fecha_fin) or \ self.buscado in fase.estado if not buscado: fases.remove(fase) else: fases = list() else: if TienePermiso("importar fase", id_proyecto=self.id_proyecto): fases = DBSession.query(Fase).filter(Fase.id_proyecto == \ self.id_proyecto).all() for fase in reversed(fases): buscado = self.buscado in fase.nombre or \ self.buscado in fase.descripcion or \ self.buscado in str(fase.orden) or \ self.buscado in str(fase.fecha_inicio) or \ self.buscado in str(fase.fecha_fin) or \ self.buscado in fase.estado if not buscado: fases.remove(fase) else: proyectos = list() return len(fases), fases
def edit(self, *args, **kw): """ Despliega una página para la modificación de un tipo de ítem """ self.id_fase = unicode(request.url.split("/")[-4]) if TienePermiso("modificar tipo de item").is_met(request.environ): d = super(TipoItemController, self).edit(*args, **kw) d["direccion_anterior"] = "../" return d else: flash(u"El usuario no cuenta con los permisos necesarios", \ u"error") raise redirect('./')
def buscar(self, **kw): """ Lista los tipos de ítem de acuerdo a un criterio de búsqueda introducido por el usuario. """ buscar_table_filler = TipoItemTableFiller(DBSession) if "parametro" in kw: buscar_table_filler.init(kw["parametro"], self.id_fase) else: buscar_table_filler.init("", self.id_fase) tmpl_context.widget = self.table value = buscar_table_filler.get_value() d = dict(value_list = value, model = "Tipos de item", \ accion = "./buscar") otrafase = DBSession.query(Fase).filter(Fase.id != self.id_fase) \ .filter(Fase.tipos_item != None).count() d["permiso_crear"] = TienePermiso("crear tipo de item", id_fase = \ self.id_fase).is_met(request.environ) d["permiso_importar"] = TienePermiso("importar tipo de item", \ id_fase = self.id_fase).is_met(request.environ) and otrafase d["direccion_anterior"] = "../.." return d