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. """ if TieneAlgunPermiso(tipo = u"Fase", recurso = u"Item"): proyectos = DBSession.query(Proyecto).filter(Proyecto.estado != \ u"Nuevo").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): if not TieneAlgunPermiso(tipo = u"Fase", recurso = u"Item", \ id_proyecto = proyecto.id) \ .is_met(request.environ): proyectos.remove(proyecto) else: proyectos = list() return len(proyectos), proyectos
def _do_get_provider_count_and_objs(self, buscado="", **kw): """ Se utiliza para listar las fases que cumplan ciertas condiciones y ciertos permisos. """ id_proyecto = unicode(request.url.split("/")[-3]) if TieneAlgunPermiso(tipo = u"Fase", recurso = u"Item", id_proyecto = \ id_proyecto): fases = DBSession.query(Fase).filter(Fase.id_proyecto == \ id_proyecto).order_by(Fase.orden).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) for fase in reversed(fases): if not TieneAlgunPermiso(tipo = u"Fase", recurso = u"Item", \ id_fase = fase.id).is_met(request.environ): fases.remove(fase) elif fase.orden > 1: fase_prev = DBSession.query(Fase).filter(Fase.id_proyecto \ == id_proyecto).filter(Fase.orden == \ fase.orden - 1).one() if not fase_prev.lineas_base: fases.remove(fase) else: fases = list() return len(fases), fases
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 roles que cumplan ciertas condiciones y de acuerdo a ciertos permisos. """ if TieneAlgunPermiso(tipo = "Sistema", recurso = "Rol") \ .is_met(request.environ): roles = DBSession.query(Rol).filter(Rol.nombre.contains( \ self.buscado)).all() else: roles = list() return len(roles), roles
def _do_get_provider_count_and_objs(self, buscado="", **kw): """ Se utiliza para listar las fichas que cumplan ciertas condiciones y ciertos permisos. """ if self.id_usuario == "": fichas = DBSession.query(Ficha).all() elif TieneAlgunPermiso(tipo=u"Sistema", recurso=u"Usuario"): fichas = DBSession.query(Ficha).filter(Ficha.id_usuario == \ self.id_usuario).all() for ficha in reversed(fichas): if not (self.buscado in ficha.usuario.nombre_usuario or \ self.buscado in ficha.rol.nombre or self.buscado in \ ficha.id): fichas.remove(ficha) return len(fichas), fichas
def _do_get_provider_count_and_objs(self, **kw): """ Se utiliza para listar las fases que cumplan ciertas condiciones y ciertos permisos. """ if self.id_proyecto == "": fases = DBSession.query(Fase).order_by(Fase.orden).all() else: fases = DBSession.query(Fase).filter(Fase.id_proyecto == \ self.id_proyecto).order_by(Fase.orden).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) pp = TieneAlgunPermiso(tipo = u"Proyecto", recurso = u"Fase", \ id_proyecto = self.id_proyecto).is_met(request.environ) if not pp: for fase in reversed(fases): pfp = TienePermiso(u"asignar rol cualquier fase", \ id_proyecto = fase.id_proyecto).is_met(request.environ) pfi = TieneAlgunPermiso(tipo = "Fase", recurso = u"Ficha", \ id_proyecto = fase.id_proyecto).is_met(request.environ) pf = TieneAlgunPermiso(tipo = u"Fase", recurso = \ u"Tipo de Item", id_fase = fase.id). \ is_met(request.environ) if not (pf or pfp or pfi): fases.remove(fase) return len(fases), fases
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 index(self): """Muestra la página del módulo de administración.""" p_proy = TieneAlgunPermiso(tipo = u"Sistema", recurso = u"Proyecto") \ .is_met(request.environ) p_d_p = TieneAlgunPermiso(tipo = u"Proyecto").is_met(request.environ) p_fic = TieneAlgunPermiso(tipo = u"Fase", recurso = u"Ficha") \ .is_met(request.environ) p_t_it = TieneAlgunPermiso(tipo = u"Fase", recurso = u"Tipo de Item") \ .is_met(request.environ) d = dict(direccion_anterior = "../", page='index admin') d["permiso_proyectos"] = p_proy or p_fic or p_t_it or p_d_p d["permiso_responsables"] = TieneAlgunPermiso(tipo = u"Sistema", \ recurso = u"Ficha").is_met(request.environ) d["permiso_roles"] = TieneAlgunPermiso(tipo = u"Sistema", \ recurso = u"Rol").is_met(request.environ) d["permiso_usuarios"] = TieneAlgunPermiso(tipo = u"Sistema", \ recurso = u"Usuario").is_met(request.environ) return d
def _do_get_provider_count_and_objs(self, buscado="", **kw): """ Se utiliza para listar solo los tipos de ítem que cumplan ciertas condiciones y de acuerdo a ciertos permisos. """ if self.id_fase == "": tiposItem = DBSession.query(TipoItem).filter(or_(TipoItem.nombre \ .contains(self.buscado), TipoItem.descripcion.contains( \ self.buscado), TipoItem.codigo.contains(self.buscado))) \ .all() else: pf = TieneAlgunPermiso(tipo = u"Fase", recurso = u"Tipo de Item", \ id_fase = self.id_fase).is_met(request.environ) if pf: tiposItem = DBSession.query(TipoItem).filter( \ TipoItem.id_fase == self.id_fase).filter(or_(TipoItem.nombre. \ contains(self.buscado), TipoItem.descripcion.contains( \ self.buscado), TipoItem.codigo.contains(self.buscado))).all() else: tiposItem = list() return len(tiposItem), tiposItem
def _do_get_provider_count_and_objs(self, **kw): """ Se utiliza para listar las fases que cumplan ciertas condiciones y ciertos permisos, en el módulo de gestión. """ if TieneAlgunPermiso(tipo = u"Fase", recurso = u"Linea Base", \ id_proyecto = self.id_proyecto): fases = DBSession.query(Fase).filter(Fase.id_proyecto \ == self.id_proyecto).order_by(Fase.orden).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) aux = list() for fase in fases: band = False if fase.lineas_base: band = True else: t_items = [t for t in fase.tipos_item] items = list() for t in t_items: items = items + [i for i in t.items] for item in items: if item.estado == u"Aprobado" and not item.revisiones: band = True break if not band: aux.append(fase) fasesaux = [f for f in fases if f not in aux] fases = fasesaux else: fases = list() return len(fases), fases
def _do_get_provider_count_and_objs(self, **kw): """ Se utiliza para listar solo los ítems que cumplan ciertas condiciones y de acuerdo a ciertos permisos. """ if TieneAlgunPermiso(tipo = u"Fase", recurso = u"Item", id_fase = \ self.id_fase).is_met(request.environ): items = DBSession.query(Item)\ .filter(Item.id_tipo_item.contains(self.id_fase)) \ .order_by(Item.id).all() for item in reversed(items): buscado = self.buscado in item.id or \ self.buscado in item.nombre or \ self.buscado in str(item.version) or \ self.buscado in item.descripcion or \ self.buscado in item.estado or \ self.buscado in item.observaciones or \ self.buscado in str(item.complejidad) or \ self.buscado in str(item.prioridad) or \ self.buscado in item.tipo_item.nombre if item.linea_base: buscado = buscado or self.buscado in item.linea_base.id if not buscado: items.remove(item) aux = [] for item in items: for item_2 in items: if item.id == item_2.id: if item.version > item_2.version and item_2 not in aux: aux.append(item_2) elif item.version < item_2.version and item not in aux: aux.append(item) items = [i for i in items if i not in aux and i.borrado != True] else: items = list() return len(items), items
def listar_caracteristicas(self, **kw): """ Despliega el valor de las características propias del tipo de ítem de un ítem dado, siempre que el ítem no sea del tipo 'Default' """ self.id_fase = unicode(request.url.split("/")[-3]) if TieneAlgunPermiso(tipo = u"Fase", recurso = u"Item", id_fase = \ self.id_fase).is_met(request.environ): pk = kw["pk_item"] pk_id = unicode(pk.split("-")[0] + "-" + pk.split("-")[1] + "-" + \ pk.split("-")[2] + "-" + pk.split("-")[3]) pk_version = pk.split("-")[4] anexo = DBSession.query(Item.anexo).filter(Item.id == pk_id) \ .filter(Item.version == pk_version).one() anexo = json.loads(anexo.anexo) d = dict() d['anexo'] = anexo d["direccion_anterior"] = "./" return d else: flash(u"El usuario no cuenta con los permisos necesarios", \ u"error") redirect('./')