def get_all(self, *args, **kw): """ Retorna todos los registros Retorna una página HTML si no se especifica JSON """ id_proyecto = UrlParser.parse_id(request.url, "proyectos") atras = "../" if not id_proyecto: id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase") atras = "../../" puede_crear = PoseePermiso( "crear fase", id_proyecto=id_proyecto).is_met(request.environ) proy = Proyecto.por_id(id_proyecto) if proy.estado == "Iniciado": puede_crear = False titulo = self.title % proy.nombre fases = self.table_filler.get_value(id_proyecto=id_proyecto, **kw) tmpl_context.widget = self.table return dict(lista_elementos=fases, page=titulo, titulo=titulo, modelo=self.model.__name__, columnas=self.columnas, opciones=self.opciones, url_action=self.tmp_action, puede_crear=puede_crear, comboboxes=self.comboboxes, atras=atras)
def __actions__(self, obj): """Links de acciones para un registro dado""" if UrlParser.parse_nombre(request.url, "versiones"): #no se hace nada desde el controlador de versiones. return '<div></div>' value = '<div>' clase = 'actions_fase' id = str(obj.id_relacion) controller = "./" + id id_item = UrlParser.parse_id(request.url, "items") if id_item: item = Item.por_id(id_item) p_item = PropiedadItem.por_id(item.id_propiedad_item) otro = obj.obtener_otro_item(id_item) p_otro = PropiedadItem.por_id(otro.id_propiedad_item) if (p_item.estado not in [u"Bloqueado", u"Revisión-Bloq", u"Eliminado"] and\ obj.id_anterior != id_item or p_otro.estado == u"Eliminado"): if (PoseePermiso('modificar item', id_fase=item.id_fase).is_met( request.environ)): value += '<div><form method="POST" action="' + controller + '" class="button-to">'+\ '<input type="hidden" name="_method" value="DELETE" />' +\ '<input onclick="return confirm(\'¿Está seguro?\');" value="Eliminar" type="submit" '+\ 'style="background-color: transparent; float:left; border:0; color: #286571; display: inline;'+\ 'margin: 0; padding: 0;' + clase + '"/>'+\ '</form></div><br />' value += '</div>' return value
def post_buscar(self, *args, **kw): """ Controlador que recibe los parámetros de búsqueda para devolver el resultado esperado. """ id_proyecto = UrlParser.parse_id(request.url, "proyectos") #action = self.tmp_action % id_proyecto if not id_proyecto: id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase") #action = self.tmp_action_fase % id_proyecto puede_crear = PoseePermiso( "crear fase", id_proyecto=id_proyecto).is_met(request.environ) proy = Proyecto.por_id(id_proyecto) if proy.estado == "Iniciado": puede_crear = False titulo = self.title % proy.nombre tmpl_context.widget = self.table buscar_table_filler = FaseTableFiller(DBSession) buscar_table_filler.filtros = kw fases = buscar_table_filler.get_value(id_proyecto=id_proyecto) atras = '../' return dict(lista_elementos=fases, page=titulo, titulo=titulo, modelo=self.model.__name__, columnas=self.columnas, url_action="../", puede_crear=puede_crear, comboboxes=self.comboboxes, opciones=self.opciones, atras=atras)
def __actions__(self, obj): """Links de acciones para un registro dado""" value = '<div>' clase = 'actions' url_cont = "./" + str(obj.id_tipo_item) id_tipo = UrlParser.parse_id(request.url, "tipositems") if id_tipo: url_cont = "../" + str(obj.id_tipo_item) if UrlParser.parse_nombre(request.url, "post_buscar"): url_cont = "../" + str(obj.id_tipo_item) value += '<div>' + \ '<a href="' + url_cont + '/edit" ' + \ 'class="' + clase + '">Ver</a>' + \ '</div><br />' value += '<div>' + \ '<a href="' + url_cont + '/atributostipoitem/" ' + \ 'class="' + clase + '">Atributos</a>' + \ '</div><br />' value += '</div>' return value
def item_relacionado(self, obj, **kw): id_item = UrlParser.parse_id(request.url, "items") id_version = UrlParser.parse_id(request.url, "versiones") if not id_item: id_item = id_version otro = obj.obtener_otro_item(id_item) return otro.codigo
def __actions__(self, obj): """Links de acciones para un registro dado""" if UrlParser.parse_nombre(request.url, "versiones"): #no se hace nada desde el controlador de versiones. return '<div></div>' value = '<div>' clase = 'actions_fase' id = str(obj.id_atributos_por_item) controller = "./atributos/" + id id_item = UrlParser.parse_id(request.url, "items") item = Item.por_id(id_item) if UrlParser.parse_nombre(request.url, "atributos"): controller = id #if PoseePermiso('modificar item', # id_fase=item.id_fase).is_met(request.environ): if PoseePermiso('modificar item', id_tipo_item=item.id_tipo_item).is_met( request.environ): value += '<div>' + \ '<a href="./'+ controller +'/edit" ' + \ 'class="' + clase + '">Modificar</a>' + \ '</div><br />' value += '</div>' return value
def __actions__(self, obj): """Links de acciones para un registro dado""" clase = 'actions' value = "<div>" url = "./" if UrlParser.parse_nombre(request.url, "post_buscar"): url = "../" value += '<div>' + \ '<a href="' + url + str(obj.id_usuario) + '/" ' + \ 'class="' + clase + '">Ver</a>' + \ '</div><br />' id_tipo_item = UrlParser.parse_id(request.url, "tipositems") if PoseePermiso("asignar-desasignar rol", id_tipo_item=id_tipo_item).is_met(request.environ): value += '<div>' + \ '<a href="./'+ str(obj.id_usuario) + \ "/rolesasignados/" '" ' + \ 'class="' + clase + '">Roles Asig.</a>' + \ '</div><br />' value += '<div>' + \ '<a href="./' + str(obj.id_usuario) + \ "/rolesdesasignados/" '" ' + \ 'class="' + clase + '">Roles Desasig.</a>' + \ '</div><br />' value += '</div>' return value
def __actions__(self, obj): """Links de acciones para un registro dado""" if UrlParser.parse_nombre(request.url, "versiones"): #no se hace nada desde el controlador de versiones. return '<div></div>' value = '<div>' clase = 'actions_fase' id = str(obj.id_relacion) controller = "./" + id id_item = UrlParser.parse_id(request.url, "items") if id_item: item = Item.por_id(id_item) p_item = PropiedadItem.por_id(item.id_propiedad_item) otro = obj.obtener_otro_item(id_item) p_otro = PropiedadItem.por_id(otro.id_propiedad_item) if (p_item.estado not in [u"Bloqueado", u"Revisión-Bloq", u"Eliminado"] and\ obj.id_anterior != id_item or p_otro.estado == u"Eliminado"): if (PoseePermiso('modificar item', id_fase=item.id_fase).is_met(request.environ) ): value += '<div><form method="POST" action="' + controller + '" class="button-to">'+\ '<input type="hidden" name="_method" value="DELETE" />' +\ '<input onclick="return confirm(\'¿Está seguro?\');" value="Eliminar" type="submit" '+\ 'style="background-color: transparent; float:left; border:0; color: #286571; display: inline;'+\ 'margin: 0; padding: 0;' + clase + '"/>'+\ '</form></div><br />' value += '</div>' return value
def _my_update_params(self, d, nullable=False): id_proyecto = UrlParser.parse_id(request.url, "proyectos") if not id_proyecto: id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase") if id_proyecto: proy = Proyecto.por_id(id_proyecto) options = [] id_fase = UrlParser.parse_id(request.url, "fases") if id_fase: fase = Fase.por_id(id_fase) proy = Proyecto.por_id(fase.id_proyecto) if self.accion == "edit": options.append((fase.posicion, str(fase.posicion))) if (proy.estado != u"Iniciado"): pos = range(1, proy.numero_fases + 1) pos.pop(fase.posicion - 1) options.extend(pos) elif self.accion == "new": if (not id_proyecto): return d np = proy.numero_fases + 1 options.append((np, str(np))) options.extend(range(1, np)) d['options'] = options return d
def __actions__(self, obj): """Links de acciones para un registro dado""" id_proyecto = UrlParser.parse_id(request.url, "proyectos") if id_proyecto: url_cont = "/proyectos/%d/" % id_proyecto else: id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase") url_cont = "/proyectos_fase/%d/" % id_proyecto id_fase = UrlParser.parse_id(request.url, "fases") url_cont += "fases/%d/" url_cont %= id_fase id = str(obj.id_usuario) clase = 'actions' value = "<div>" value += '<div>' + \ '<a href="' + url_cont + "nomiembrosfase/" + id + '" ' + \ 'class="' + clase + '">Ver</a>' + \ '</div><br />' if PoseePermiso("asignar-desasignar rol", id_fase=id_fase).is_met(request.environ): value += '<div>' + \ '<a href="'+ url_cont + "nomiembrosfase/" + id + \ '/rolesdesasignados/" ' + \ 'class="' + clase + '">Asignar Rol</a>' + \ '</div><br />' value += '</div>' return value
def post_buscar(self, *args, **kw): id_fase = UrlParser.parse_id(request.url, "fases") id_usuario = UrlParser.parse_id(request.url, "nomiembrosfase") usuario = Usuario.por_id(id_usuario) fase = Fase.por_id(id_fase) puede_asignar = PoseePermiso("asignar-desasignar rol", id_fase=id_fase).is_met(request.environ) titulo = u"Roles Desasignados para: %s" % usuario.nombre_usuario tmpl_context.widget = self.table buscar_table_filler = MiembrosFaseRolesTableFiller(DBSession) buscar_table_filler.filtros = kw roles = buscar_table_filler.get_value(usuario=usuario, asignados=False, id_fase=id_fase, **kw) atras = "../../" return dict(lista_elementos=roles, page=titulo, titulo=titulo, columnas=self.columnas, opciones=self.opciones, comboboxes=self.comboboxes, url_action="../", atras=atras, puede_asignar=puede_asignar)
def post_buscar(self, *args, **kw): id_proyecto = UrlParser.parse_id(request.url, "proyectos") id_usuario = UrlParser.parse_id(request.url, "miembros") usuario = Usuario.por_id(id_usuario) proy = Proyecto.por_id(id_proyecto) puede_desasignar = PoseePermiso("asignar-desasignar rol", id_proyecto=id_proyecto).is_met(request.environ) titulo = "Roles de: %s" % usuario.nombre_usuario tmpl_context.widget = self.table buscar_table_filler = MiembrosProyectoRolesTableFiller(DBSession) buscar_table_filler.filtros = kw usuarios = buscar_table_filler.get_value(usuario=usuario, id_proyecto=id_proyecto, **kw) atras = "/proyectos/%d/miembros/" % id_proyecto return dict(lista_elementos=usuarios, page=titulo, titulo=titulo, columnas=self.columnas, opciones=self.opciones, comboboxes=self.comboboxes, url_action="../", atras=atras, puede_desasignar=puede_desasignar)
def get_all(self, *args, **kw): """ Retorna todos los registros Retorna una página HTML si no se especifica JSON """ id_item = UrlParser.parse_id(request.url, "items") item = Item.por_id(id_item) controller = "relacionar_as" tipo = "A-S" if (UrlParser.parse_nombre(request.url, "relaciones_ph")): controller = "relacionar_ph" tipo = "P-H" #TODO ACENTO EN RELACION page = u"Relacion {tipo} con ítem: {codigo}".format(tipo=tipo, codigo=item.codigo) tmpl_context.tabla_items = item_relacion_table items = item_relacion_table_filler.get_value(id_item=id_item,\ tipo=tipo, **kw) atras = "../" return dict(items=items, page=page, title=self.title, controlador=controller, atras=atras)
def post(self, *args, **kw): """ Crea un nuevo rol plantilla o con contexto""" id_fase = UrlParser.parse_id(request.url, "fases") url_action = "./" pp = PoseePermiso('crear rol', id_fase=id_fase) kw["id_fase"] = id_fase id_proyecto = UrlParser.parse_id(request.url, "proyectos") if not id_proyecto: id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase") kw["id_proyecto"] = id_proyecto if not pp.is_met(request.environ): flash(pp.message % pp.nombre_permiso, 'warning') redirect(url_action) #url que redirige al new y rellena los parametros que ya ingreso error_url = url_action + "new" #agregamos los parametros que ya ingreso el usuario. nombre = kw.get("nombre_rol", None).encode("utf-8") nombre_q = urllib.quote(nombre) desc = kw.get("descripcion", None).encode("utf-8") desc_q = urllib.quote(desc) params = "?nombre_rol=" + nombre_q + "&descripcion=" + desc_q error_url += params if not (kw.has_key("permisos") and kw["permisos"]): flash("Debe seleccionar al menos un permiso", 'warning') redirect(error_url) else: Rol.crear_rol(**kw) flash(u"El Rol se ha creado correctamente") redirect(url_action)
def __actions__(self, obj): """Links de acciones para un registro dado""" value = '<div>' clase = 'actions' id_proyecto = UrlParser.parse_id(request.url, "proyectos") if id_proyecto: url_cont = "/proyectos/%d/" % id_proyecto else: id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase") url_cont = "/proyectos_fase/%d/" % id_proyecto id_fase = UrlParser.parse_id(request.url, "fases") url_cont += "fases/%d/rolesfase/" url_cont %= id_fase perm_mod = PoseePermiso('modificar rol', id_fase=id_fase) perm_del = PoseePermiso('eliminar rol', id_fase=id_fase) if perm_mod.is_met(request.environ): value += '<div>' + \ '<a href="' + url_cont + str(obj.id_rol) + "/edit"+ \ '" class="' + clase + '">Modificar</a>' + \ '</div><br />' if perm_del.is_met(request.environ): value += '<div><form method="POST" action="./' + str(obj.id_rol) + '" class="button-to">'+\ '<input type="hidden" name="_method" value="DELETE" />' +\ '<input onclick="return confirm(\'Está seguro?\');" value="Eliminar" type="submit" '+\ 'style="background-color: transparent; float:left; border:0; color: #286571;'+\ 'display: inline; margin: 0; padding: 0; margin-left:-3px;" class="' + clase + '"/>'+\ '</form></div><br />' value += '</div>' return value
def post_buscar(self, *args, **kw): id_proyecto = UrlParser.parse_id(request.url, "proyectos") id_fase = UrlParser.parse_id(request.url, "fases") atras = "../" if not id_proyecto: id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase") if not id_proyecto: id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase_ti") id_fase = UrlParser.parse_id(request.url, "fases_ti") atras = "../../../" proy = Proyecto.por_id(id_proyecto) puede_crear = puede_crear = PoseePermiso("crear tipo item", id_fase=id_fase).is_met(request.environ) if proy.estado != "Iniciado": puede_crear = False fase = Fase.por_id(id_fase) titulo = self.title % fase.nombre tmpl_context.widget = self.table buscar_table_filler = self.table_filler.__class__(DBSession) buscar_table_filler.filtros = kw tipos_items = buscar_table_filler.get_value(id_fase=id_fase) return dict(lista_elementos=tipos_items, page=titulo, titulo=titulo, modelo=self.model.__name__, columnas=self.columnas, opciones=self.opciones, url_action="../", puede_crear=puede_crear, atras=atras )
def get_all(self, *args, **kw): """ Retorna todos los registros Retorna una página HTML si no se especifica JSON """ id_item = UrlParser.parse_id(request.url, "items") id_version = UrlParser.parse_id(request.url, "versiones") titulo = self.title atributos = {} atras="../../" if id_version: #desde controller de versiones p_item = PropiedadItem.por_id(id_version) titulo = u"Atributos de Version: %d" % p_item.version atributos = self.table_filler. \ get_value(id_version=id_version, **kw) elif id_item: #desde controller de items. item = Item.por_id(id_item) titulo = u"Atributos de Ítem: %s" % item.codigo atras="../" atributos = self.table_filler. \ get_value(id_version=item.id_propiedad_item, **kw) tmpl_context.widget = self.table return dict(lista_elementos=atributos, page=titulo, titulo=titulo, modelo=self.model.__name__, # columnas=self.columnas, # opciones=self.opciones, url_action=self.tmp_action, atras=atras )
def __actions__(self, obj): """Links de acciones para un registro dado""" if UrlParser.parse_nombre(request.url, "versiones"): #no se hace nada desde el controlador de versiones. return '<div></div>' value = '<div>' clase = 'actions_fase' id = str(obj.id_atributos_por_item) controller = "./atributos/" + id id_item = UrlParser.parse_id(request.url, "items") item = Item.por_id(id_item) if UrlParser.parse_nombre(request.url, "atributos"): controller = id #if PoseePermiso('modificar item', # id_fase=item.id_fase).is_met(request.environ): if PoseePermiso('modificar item', id_tipo_item=item.id_tipo_item).is_met(request.environ): value += '<div>' + \ '<a href="./'+ controller +'/edit" ' + \ 'class="' + clase + '">Modificar</a>' + \ '</div><br />' value += '</div>' return value
def __actions__(self, obj): """Links de acciones para un registro dado""" id_proyecto = UrlParser.parse_id(request.url, "proyectos") if id_proyecto: url_cont = "/proyectos/%d/" % id_proyecto else: id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase") url_cont = "/proyectos_fase/%d/" % id_proyecto id_fase = UrlParser.parse_id(request.url, "fases") url_cont += "fases/%d/" url_cont %= id_fase clase = 'actions' value = "<div>" value += '<div>' + \ '<a href="' + url_cont + "miembrosfase/" + str(obj.id_usuario) + '" ' + \ 'class="' + clase + '">Ver</a>' + \ '</div><br />' if PoseePermiso("asignar-desasignar rol", id_proyecto=id_proyecto).is_met(request.environ): value += '<div>' + \ '<a href="'+ url_cont + "miembrosfase/" + str(obj.id_usuario) + \ "/rolesasignados/" '" ' + \ 'class="' + clase + '">Roles Asig.</a>' + \ '</div><br />' value += '<div>' + \ '<a href="'+ url_cont + "miembrosfase/" + str(obj.id_usuario) + \ "/rolesdesasignados/" '" ' + \ 'class="' + clase + '">Roles Desasig.</a>' + \ '</div><br />' value += '</div>' return value
def estado(self, obj, **kw): id_item = UrlParser.parse_id(request.url, "items") id_version = UrlParser.parse_id(request.url, "versiones") if not id_version: item = Item.por_id(id_item) rti = DBSession.query(RelacionPorItem).\ filter(and_(RelacionPorItem.id_propiedad_item\ == item.id_propiedad_item,\ RelacionPorItem.id_relacion == obj.id_relacion))\ .first() else: p_item = PropiedadItem.por_id(id_version) rti = DBSession.query(RelacionPorItem).\ filter(and_(RelacionPorItem.id_propiedad_item\ == p_item.id_propiedad_item,\ RelacionPorItem.id_relacion == obj.id_relacion))\ .first() color = u"inherit;" estado = u"No" if(rti.revisar): color = u"#ff0000;" estado = u'Sí' value = '<div style="color:' + color + '">' + estado + '</div>' return value
def post_buscar(self, *args, **kw): id_proyecto = UrlParser.parse_id(request.url, "proyectos") id_usuario = UrlParser.parse_id(request.url, "miembros") usuario = Usuario.por_id(id_usuario) proy = Proyecto.por_id(id_proyecto) puede_asignar = PoseePermiso("asignar-desasignar rol", id_proyecto=id_proyecto).is_met( request.environ) titulo = u"Roles Desasignados para: %s" % usuario.nombre_usuario tmpl_context.widget = self.table buscar_table_filler = MiembrosProyectoRolesTableFiller(DBSession) buscar_table_filler.filtros = kw roles = buscar_table_filler.get_value(usuario=usuario, asignados=False, id_proyecto=id_proyecto, **kw) atras = "/proyectos/%d/miembros/" % id_proyecto return dict(lista_elementos=roles, page=titulo, titulo=titulo, columnas=self.columnas, opciones=self.opciones, comboboxes=self.comboboxes, url_action="../", atras=atras, puede_asignar=puede_asignar)
def get_all(self, *args, **kw): """ Retorna todos los registros Retorna una página HTML si no se especifica JSON """ id_proyecto = UrlParser.parse_id(request.url, "proyectos") id_usuario = UrlParser.parse_id(request.url, "nomiembros") usuario = Usuario.por_id(id_usuario) proy = Proyecto.por_id(id_proyecto) titulo = u"Roles Desasignados para: %s" % usuario.nombre_usuario puede_asignar = PoseePermiso("asignar-desasignar rol", id_proyecto=id_proyecto).is_met(request.environ) if request.response_type == 'application/json': return self.table_filler.get_value(usuario=usuario, asignados=False, id_proyecto=id_proyecto, **kw) if not getattr(self.table.__class__, '__retrieves_own_value__', False): roles = self.table_filler.get_value(usuario=usuario, asignados=False, id_proyecto=id_proyecto, **kw) else: roles = [] tmpl_context.widget = self.table atras = "/proyectos/%d/nomiembros/" % id_proyecto return dict(lista_elementos=roles, page=titulo, titulo=titulo, columnas=self.columnas, opciones=self.opciones, comboboxes=self.comboboxes, url_action=self.action, atras=atras, puede_asignar=puede_asignar)
def __actions__(self, obj): """Links de acciones para un registro dado""" value = '<div>' clase = 'actions_fase' id_item = UrlParser.parse_id(request.url, "items") item = Item.por_id(id_item) p_item = PropiedadItem.por_id(item.id_propiedad_item) id = str(obj.id_archivo_externo) #if PoseePermiso('modificar item', # id_fase=item.id_fase).is_met(request.environ): if PoseePermiso('modificar item', id_tipo_item=item.id_tipo_item).is_met(request.environ): value += '<div>' + \ '<a href="./descargar/' + id + '" ' + \ 'class="' + clase + '">Descargar</a>' + \ '</div><br />' if not UrlParser.parse_nombre(request.url, "versiones") and \ p_item.estado not in [u"Eliminado", u"Bloqueado", u"Revisión-Bloq"]: #No se puede eliminar desde el controlador de versiones. value += '<div><form method="POST" action="' + id + '" class="button-to">'+\ '<input type="hidden" name="_method" value="DELETE" />' +\ '<input onclick="return confirm(\'¿Está seguro?\');" value="Eliminar" type="submit" '+\ 'style="background-color: transparent; float:left; border:0; color: #286571; display: inline;'+\ 'margin: 0; padding: 0;' + clase + '"/>'+\ '</form></div><br />' value += '</div>' return value
def estado(self, obj, **kw): id_item = UrlParser.parse_id(request.url, "items") id_version = UrlParser.parse_id(request.url, "versiones") if not id_version: item = Item.por_id(id_item) rti = DBSession.query(RelacionPorItem).\ filter(and_(RelacionPorItem.id_propiedad_item\ == item.id_propiedad_item,\ RelacionPorItem.id_relacion == obj.id_relacion))\ .first() else: p_item = PropiedadItem.por_id(id_version) rti = DBSession.query(RelacionPorItem).\ filter(and_(RelacionPorItem.id_propiedad_item\ == p_item.id_propiedad_item,\ RelacionPorItem.id_relacion == obj.id_relacion))\ .first() color = u"inherit;" estado = u"No" if (rti.revisar): color = u"#ff0000;" estado = u'Sí' value = '<div style="color:' + color + '">' + estado + '</div>' return value
def asignar_roles(self, *args, **kw): """ Asigna los roles seleccionados a un usuario """ if kw: pks = [] for k, pk in kw.items(): if not k.isalnum(): continue pks.append(int(pk)) transaction.begin() id_user = UrlParser.parse_id(request.url, "miembros") id_proyecto = UrlParser.parse_id(request.url, "proyectos") user = Usuario.por_id(id_user) roles = DBSession.query(Rol).filter(Rol.id_rol.in_(pks)).all() for r in roles: if r.tipo.find( u"Plantilla") >= 0: #crear rol a partir de plantilla rol_new = Rol.nuevo_rol_desde_plantilla(plantilla=r, id=id_proyecto) rol_new.usuarios.append(user) else: r.usuarios.append(user) transaction.commit() flash("Roles Asignados correctamente") else: flash("Seleccione por lo menos un rol", "warning") return "./"
def post_buscar(self, *args, **kw): id_fase = UrlParser.parse_id(request.url, "fases") id_usuario = UrlParser.parse_id(request.url, "miembrosfase") usuario = Usuario.por_id(id_usuario) fase = Fase.por_id(id_fase) puede_desasignar = PoseePermiso("asignar-desasignar rol", id_fase=id_fase).is_met( request.environ) titulo = "Roles de: %s" % usuario.nombre_usuario tmpl_context.widget = self.table buscar_table_filler = MiembrosFaseRolesTableFiller(DBSession) buscar_table_filler.filtros = kw usuarios = buscar_table_filler.get_value(usuario=usuario, id_fase=id_fase, **kw) atras = "../../" return dict(lista_elementos=usuarios, page=titulo, titulo=titulo, columnas=self.columnas, opciones=self.opciones, comboboxes=self.comboboxes, url_action="../", atras=atras, puede_desasignar=puede_desasignar)
def get_all(self, *args, **kw): """ Retorna todos los registros Retorna una página HTML si no se especifica JSON """ id_item = UrlParser.parse_id(request.url, "items") id_version = UrlParser.parse_id(request.url, "versiones") titulo = self.title atributos = {} atras = "../../" if id_version: #desde controller de versiones p_item = PropiedadItem.por_id(id_version) titulo = u"Atributos de Version: %d" % p_item.version atributos = self.table_filler. \ get_value(id_version=id_version, **kw) elif id_item: #desde controller de items. item = Item.por_id(id_item) titulo = u"Atributos de Ítem: %s" % item.codigo atras = "../" atributos = self.table_filler. \ get_value(id_version=item.id_propiedad_item, **kw) tmpl_context.widget = self.table return dict( lista_elementos=atributos, page=titulo, titulo=titulo, modelo=self.model.__name__, # columnas=self.columnas, # opciones=self.opciones, url_action=self.tmp_action, atras=atras)
def get_one(self, *args, **kw): id_tipo = int(args[0]) id_proyecto = UrlParser.parse_id(request.url, "proyectos") id_fase = UrlParser.parse_id(request.url, "fases") if not id_proyecto: id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase") if not id_proyecto: id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase_ti") id_fase = UrlParser.parse_id(request.url, "fases_ti") proy = Proyecto.por_id(id_proyecto) puede_crear = puede_crear = PoseePermiso("crear tipo item", id_fase=id_fase).is_met(request.environ) if proy.estado != "Iniciado": puede_crear = False ti = self.table_filler.get_value(id_tipo=id_tipo, **kw) tmpl_context.widget = self.table fase = Fase.por_id(id_fase) titulo = self.title % fase.nombre atras = '../' return dict(lista_elementos=ti, page=titulo, titulo=titulo, modelo=self.model.__name__, columnas=self.columnas, opciones=self.opciones, url_action=self.action, puede_crear=puede_crear, atras=atras )
def asignar_roles(self, *args, **kw): """ Asigna los roles seleccionados a un usuario """ if kw: pks = [] for k, pk in kw.items(): if not k.isalnum(): continue pks.append(int(pk)) transaction.begin() id_user = UrlParser.parse_id(request.url, "nomiembros") id_proyecto = UrlParser.parse_id(request.url, "proyectos") user = Usuario.por_id(id_user) roles = DBSession.query(Rol).filter(Rol.id_rol.in_(pks)).all() for r in roles: if r.tipo.find(u"Plantilla") >= 0: #crear rol a partir de plantilla rol_new = Rol.nuevo_rol_desde_plantilla(plantilla=r, id=id_proyecto) rol_new.usuarios.append(user) else: r.usuarios.append(user) transaction.commit() flash("Roles Asignados correctamente") else: flash("Seleccione por lo menos un rol", "warning") return "./"
def get_all(self, *args, **kw): """ Retorna todos los registros Retorna una página HTML si no se especifica JSON """ id_proyecto = UrlParser.parse_id(request.url, "proyectos") atras = "../" if not id_proyecto: id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase") atras = "../../" puede_crear = PoseePermiso("crear fase", id_proyecto=id_proyecto).is_met(request.environ) proy = Proyecto.por_id(id_proyecto) if proy.estado == "Iniciado": puede_crear = False titulo = self.title % proy.nombre fases = self.table_filler.get_value(id_proyecto=id_proyecto, **kw) tmpl_context.widget = self.table return dict(lista_elementos=fases, page=titulo, titulo=titulo, modelo=self.model.__name__, columnas=self.columnas, opciones=self.opciones, url_action=self.tmp_action, puede_crear=puede_crear, comboboxes=self.comboboxes, atras=atras )
def __actions__(self, obj): """Links de acciones para un registro dado""" value = '<div>' clase = 'actions_fase' id_proyecto = UrlParser.parse_id(request.url, "proyectos") url_proy = "/proyectos/" if not id_proyecto: #desde el submenu fase. id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase") url_proy = "/proyectos_fase/" url_cont = url_proy + "%d/fases/" url_cont %= id_proyecto if PoseePermiso('modificar fase', id_fase=obj.id_fase).is_met(request.environ): value += '<div>' + \ '<a href="'+ url_cont + str(obj.id_fase) + '/edit" ' + \ 'class="' + clase + '">Modificar</a>' + \ '</div><br />' value += '<div>' + \ '<a href="'+ url_cont + str(obj.id_fase) + '/rolesfase" ' + \ 'class="' + clase + '">Roles de Fase</a>' + \ '</div><br />' value += '<div>' + \ '<a href="'+ url_cont + str(obj.id_fase) + '/tipositems" ' + \ 'class="' + clase + '">Tipos de Ítem</a>' + \ '</div><br />' value += '<div>' + \ '<a href="'+ url_cont + str(obj.id_fase) + '/miembrosfase" ' + \ 'class="' + clase + '">Usuarios</a>' + \ '</div><br />' ''' value += '<div>' + \ '<a href="'+ url_cont + str(obj.id_fase) + '/nomiembrosfase" ' + \ 'class="' + clase + '">No miembros</a>' + \ '</div><br />' ''' proy = Proyecto.por_id(obj.id_proyecto) if proy.estado != "Iniciado" and \ PoseePermiso('eliminar fase', id_fase=obj.id_fase).is_met(request.environ): value += '<div><form method="POST" action="' + str(obj.id_fase) + '" class="button-to">'+\ '<input type="hidden" name="_method" value="DELETE" />' +\ '<input onclick="return confirm(\'¿Está seguro?\');" value="Eliminar" type="submit" '+\ 'style="background-color: transparent; float:left; border:0; color: #286571; display: inline;'+\ 'margin: 0; padding: 0; margin-left: -3px; margin-top: -3px;' + clase + '"/>'+\ '</form></div><br />' value += '</div>' return value
def item_relacionado_estado(self, obj, **kw): id_item = UrlParser.parse_id(request.url, "items") id_version = UrlParser.parse_id(request.url, "versiones") if not id_item: id_item = id_version otro = obj.obtener_otro_item(id_item) p_otro = PropiedadItem.por_id(otro.id_propiedad_item) return p_otro.estado
def __actions__(self, obj): """Links de acciones para un registro dado""" value = '<div>' clase = 'actions' url_cont = "./" + str(obj.id_tipo_item) id_tipo = UrlParser.parse_id(request.url, "tipositems") if id_tipo: url_cont = "../" + str(obj.id_tipo_item) if UrlParser.parse_nombre(request.url, "post_buscar"): url_cont = "../" + str(obj.id_tipo_item) pp = PoseePermiso('redefinir tipo item', id_tipo_item=obj.id_tipo_item) #if PoseePermiso('redefinir tipo item').is_met(request.environ): if pp.is_met(request.environ): value += '<div>' + \ '<a href="' + url_cont + '/edit" ' + \ 'class="' + clase + '">Modificar</a>' + \ '</div><br />' value += '<div>' + \ '<a href="' + url_cont + '/atributostipoitem/" ' + \ 'class="' + clase + '">Atributos</a>' + \ '</div><br />' value += '<div>' + \ '<a href="'+ url_cont + '/miembrostipo" ' + \ 'class="' + clase + '">Usuarios</a>' + \ '</div><br />' ''' value += '<div>' + \ '<a href="'+ url_cont + '/nomiembrostipo" ' + \ 'class="' + clase + '">No miembros</a>' + \ '</div><br />' ''' value += '<div>' + \ '<a href="'+ url_cont + '/rolestipo" ' + \ 'class="' + clase + '">Roles de Tipo</a>' + \ '</div><br />' if obj.puede_eliminarse(): if pp.is_met(request.environ): value += '<div><form method="POST" action="' + str(obj.id_tipo_item) + '" class="button-to">'+\ '<input type="hidden" name="_method" value="DELETE" />' +\ '<input onclick="return confirm(\'Está seguro?\');" value="Eliminar" type="submit" '+\ 'style="background-color: transparent; float:left; border:0; color: #286571;'+\ 'display: inline; margin: 0; padding: 0; margin-left:-3px;" class="' + clase + '"/>'+\ '</form></div><br />' value += '</div>' return value
def _my_update_params(self, d, nullable=False): options = [] id_fase = UrlParser.parse_id(request.url, "fases") if not id_fase: id_fase = UrlParser.parse_id(request.url, "fases_desarrollo") if id_fase: fase = Fase.por_id(id_fase) for ti in fase.tipos_de_item: options.append( (ti.id_tipo_item, '%s (%s)' % (ti.nombre, ti.codigo))) d["options"] = options return d
def new(self, *args, **kw): """Display a page to show a new record.""" id_proyecto = UrlParser.parse_id(request.url, "proyectos") atras = "./" if not id_proyecto: id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase") atras = "../../" if not id_proyecto: redirect(atras) tmpl_context.widget = self.new_form return dict(value=kw, page="Nueva Fase", atras=atras)
def _my_update_params(self, d, nullable=False): options = [] id_fase = UrlParser.parse_id(request.url, "fases") if not id_fase: id_fase = UrlParser.parse_id(request.url, "fases_desarrollo") if id_fase: fase = Fase.por_id(id_fase) for ti in fase.tipos_de_item: options.append((ti.id_tipo_item, '%s (%s)' % (ti.nombre, ti.codigo))) d["options"] = options return d
def get_all(self, *args, **kw): """ Retorna todos los registros Retorna una página HTML si no se especifica JSON """ id_item = UrlParser.parse_id(request.url, "items") id_version = UrlParser.parse_id(request.url, "versiones") titulo = self.title relaciones = [] tabla = self.table puede_relacionar = False puede_nueva = False atras = "../../" if id_version: #desde controller de versiones p_item = PropiedadItem.por_id(id_version) titulo = u"Relaciones de Version: %d" % p_item.version relaciones = self.table_filler. \ get_value(id_version=id_version, **kw) elif id_item: #desde controller de items. item = Item.por_id(id_item) titulo = u"Relaciones de Ítem: %s" % item.codigo atras = "../" relaciones = relacion_item_table_filler. \ get_value(id_version=item.id_propiedad_item, **kw) tabla = relacion_item_table puede_relacionar = PoseePermiso('modificar item', \ id_tipo_item=item.id_tipo_item).is_met(request.environ) fase = Fase.por_id(item.id_fase) if (UrlParser.parse_nombre(request.url, "relaciones_as")): if (fase.posicion > 1): puede_nueva = True else: puede_nueva = True tmpl_context.widget = tabla return dict( lista_elementos=relaciones, page=titulo, titulo=titulo, modelo=self.model.__name__, #columnas=self.columnas, #opciones=self.opciones, #comboboxes=self.comboboxes, url_action=self.tmp_action, puede_relacionar=puede_relacionar, atras=atras, puede_nueva=puede_nueva)
def get_all(self, *args, **kw): """ Retorna todos los registros Retorna una página HTML si no se especifica JSON """ id_item = UrlParser.parse_id(request.url, "items") id_version = UrlParser.parse_id(request.url, "versiones") titulo = self.title relaciones = [] tabla = self.table puede_relacionar = False puede_nueva = False atras = "../../" if id_version: #desde controller de versiones p_item = PropiedadItem.por_id(id_version) titulo = u"Relaciones de Version: %d" % p_item.version relaciones = self.table_filler. \ get_value(id_version=id_version, **kw) elif id_item: #desde controller de items. item = Item.por_id(id_item) titulo = u"Relaciones de Ítem: %s" % item.codigo atras = "../" relaciones = relacion_item_table_filler. \ get_value(id_version=item.id_propiedad_item, **kw) tabla = relacion_item_table puede_relacionar = PoseePermiso('modificar item', \ id_tipo_item=item.id_tipo_item).is_met(request.environ) fase = Fase.por_id(item.id_fase) if (UrlParser.parse_nombre(request.url, "relaciones_as")): if (fase.posicion > 1): puede_nueva = True else: puede_nueva = True tmpl_context.widget = tabla return dict(lista_elementos=relaciones, page=titulo, titulo=titulo, modelo=self.model.__name__, #columnas=self.columnas, #opciones=self.opciones, #comboboxes=self.comboboxes, url_action=self.tmp_action, puede_relacionar=puede_relacionar, atras=atras, puede_nueva=puede_nueva )
def _my_update_params(self, d, nullable=False): options = [] options.append((None, '-----------------')) #Solo tipos de otros proyectos id_proyecto = UrlParser.parse_id(request.url, "proyectos") id_fase = UrlParser.parse_id(request.url, "fases") if not id_proyecto: id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase") if not id_proyecto: id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase_ti") id_fase = UrlParser.parse_id(request.url, "fases_ti") if (self.accion == "new"): #de otros proyectos. if id_proyecto: tipos_items = DBSession.query(TipoItem) \ .filter(TipoItem.id_proyecto != id_proyecto) \ .all() for ti in tipos_items: options.append((ti.id_tipo_item, '%s (%s)' % (ti.nombre, ti.codigo))) #importa de otras fases tambien if id_fase: fase = Fase.por_id(id_fase) id_proyecto = fase.id_proyecto tipos_items_fase = DBSession.query(TipoItem) \ .filter(and_(TipoItem.id_proyecto == id_proyecto, TipoItem.id_fase != id_fase)) \ .all() ''' tipos_items_fase = DBSession.query(TipoItem) \ .filter(or_(TipoItem.id_proyecto != id_proyecto, and_(TipoItem.id_proyecto == id_proyecto, TipoItem.id_fase != id_fase))) \ .all() ''' for ti in tipos_items_fase: #solo si posee algun permiso sobre el tipo de item #if (AlgunPermiso(tipo="Tipo", id_tipo_item=ti.id_tipo_item)): options.append((ti.id_tipo_item, '%s (%s)' % (ti.nombre, ti.codigo))) d['options'] = options return d
def post_buscar(self, *args, **kw): """ Controlador que recibe los parámetros de búsqueda para devolver el resultado esperado. """ id_item = UrlParser.parse_id(request.url, "items") id_version = UrlParser.parse_id(request.url, "versiones") titulo = self.title archivos = {} puede_crear = False buscar_table_filler = AdjuntoTableFiller(DBSession) buscar_table_filler.filtros = kw atras="../../../" if id_version: #desde controller de versiones p_item = PropiedadItem.por_id(id_version) titulo = u"Archivos Adjuntos de Versión: %d" % p_item.version archivos = buscar_table_filler. \ get_value(id_version=id_version) elif id_item: #desde controller de items. item = Item.por_id(id_item) puede_crear = PoseePermiso("modificar item", id_tipo_item=item.id_tipo_item).is_met(request.environ) if puede_crear: p_item = PropiedadItem.por_id(item.id_propiedad_item) if p_item.estado in [u"Bloqueado", u"Revisión-Bloq", u"Eliminado"]: puede_crear = False titulo = u"Archivos Adjuntos de Ítem: %s" % item.codigo atras="../../" archivos = buscar_table_filler. \ get_value(id_version=item.id_propiedad_item) tmpl_context.widget = self.table return dict(lista_elementos=archivos, page=titulo, titulo=titulo, modelo=self.model.__name__, columnas=self.columnas, url_action='../', puede_crear=puede_crear, opciones=self.opciones, atras=atras )
def desasignar_roles(self, *args, **kw): """ Desasigna los roles seleccionados a un usuario """ if kw: pks = [] for k, pk in kw.items(): if not k.isalnum(): continue pks.append(int(pk)) transaction.begin() id_user = UrlParser.parse_id(request.url, "miembrosfase") user = Usuario.por_id(id_user) c = 0 while c < len(user.roles): r = user.roles[c] if r.id_rol in pks: if r.nombre_rol == "Miembro de Fase": msg = "No puedes eliminar el rol {nr}. Si deseas " msg += "que el usuario deje de ser miembro, debes " msg += "hacerlo en la pagina de Miembros de la Fase." flash(msg.format(nr=r.nombre_rol), "warning") DBSession.rollback() return "./" del user.roles[c] else: c += 1 transaction.commit() flash("Roles Desasignados correctamente") else: flash("Seleccione por lo menos un rol", "warning") return "./"
def post_buscar(self, *args, **kw): """ Controlador que recibe los parámetros de búsqueda para devolver el resultado esperado. """ titulo = self.title id_p_item = UrlParser.parse_id(request.url, "versiones") if id_p_item: p_item = PropiedadItem.por_id(id_p_item) titulo = u"Cambios en versión: %d" % p_item.version tmpl_context.widget = self.table buscar_table_filler = HistorialItemTableFiller(DBSession) buscar_table_filler.filtros = kw items = buscar_table_filler.get_value(id_usuario=id_usuario, **kw) return dict(lista_elementos=items, page=titulo, titulo=self.title, modelo=self.model.__name__, columnas=self.columnas, opciones=self.opciones, url_action=self.tmp_action, atras="../../../" )
def _do_get_provider_count_and_objs(self, id_tipo_item=None,**kw): """ Se muestra la lista de atributos del tipo de ítem si se tiene un permiso necesario. """ if AlgunPermiso(tipo="Tipo", id_tipo_item=id_tipo_item).is_met(request.environ): count, lista = super(AtributosPorTipoItemTableFiller, self)._do_get_provider_count_and_objs(**kw) id_tipo = UrlParser.parse_id(request.url, "tipositems") ti = TipoItem.por_id(id_tipo) pks = [] actual = ti while actual: for attr in actual.atributos: pks.append(attr.id_atributos_por_tipo_item) actual = TipoItem.por_id(actual.id_padre) filtrados = [] for attr in lista: if attr.id_atributos_por_tipo_item in pks: filtrados.append(attr) return len(filtrados), filtrados #query = DBSession.query(AtributosPorTipoItem) \ # .filter(AtributosPorTipoItem \ # .id_atributos_por_tipo_item.in_(pks)) #return query.count(), query.all() return 0, []
def post_buscar(self, *args, **kw): """ Controlador que recibe los parámetros de búsqueda para devolver el resultado esperado. """ titulo = self.title id_p_item = UrlParser.parse_id(request.url, "versiones") if id_p_item: p_item = PropiedadItem.por_id(id_p_item) titulo = u"Cambios en versión: %d" % p_item.version tmpl_context.widget = self.table buscar_table_filler = HistorialItemTableFiller(DBSession) buscar_table_filler.filtros = kw items = buscar_table_filler.get_value(id_usuario=id_usuario, **kw) return dict(lista_elementos=items, page=titulo, titulo=self.title, modelo=self.model.__name__, columnas=self.columnas, opciones=self.opciones, url_action=self.tmp_action, atras="../../../")
def get_all(self, *args, **kw): """ Retorna todos los registros Retorna una página HTML si no se especifica JSON """ id_proyecto = UrlParser.parse_id(request.url, "proyectos") atras = "../" proy = Proyecto.por_id(id_proyecto) puede_crear = False titulo = self.title % proy.nombre tipo_items = self.table_filler.get_value(id_proyecto=id_proyecto, **kw) tmpl_context.widget = self.table url_action = self.action return dict(lista_elementos=tipo_items, page=titulo, titulo=titulo, modelo=self.model.__name__, columnas=self.columnas, opciones=self.opciones, url_action=url_action, puede_crear=puede_crear, atras=atras )
def _to_python(self, value, state): nro_doc = Usuario.by_nro_documento(value) id_usuario = UrlParser.parse_id(request.url, "usuarios") if nro_doc != None and id_usuario != nro_doc.id_usuario: raise Invalid('Nro de Documento ya existe en sistema', value, state) return value
def post_buscar(self, *args, **kw): """ Retorna todos los registros Retorna una página HTML si no se especifica JSON """ id_tipo_item = UrlParser.parse_id(request.url, "tipositems") puede_crear = False tipo = TipoItem.por_id(id_tipo_item) titulo = self.title % tipo.nombre filler = AtributosPorTipoItemTableFiller(DBSession) filler.filtros = kw atributos = filler.get_value(id_tipo_item=id_tipo_item, **kw) tmpl_context.widget = self.table url_action = self.action atras = "../" return dict(lista_elementos=atributos, page=titulo, titulo=titulo, modelo=self.model.__name__, columnas=self.columnas, opciones=self.opciones, comboboxes=self.comboboxes, url_action="../", puede_crear=puede_crear, atras=atras )
def get_all(self, *args, **kw): """ Retorna todos los registros Retorna una página HTML si no se especifica JSON """ id_proyecto = UrlParser.parse_id(request.url, "proyectos") proy = Proyecto.por_id(id_proyecto) #titulo = "Miembros del Proyecto: %s" % proy.nombre titulo = "Lista de Usuarios" puede_remover = PoseePermiso("asignar-desasignar rol", id_proyecto=id_proyecto).is_met( request.environ) if request.response_type == 'application/json': return self.table_filler.get_value(id_proyecto=id_proyecto, **kw) if not getattr(self.table.__class__, '__retrieves_own_value__', False): miembros = self.table_filler.get_value(id_proyecto=id_proyecto, **kw) else: miembros = [] tmpl_context.widget = self.table atras = "/proyectos/%d/" % id_proyecto return dict(lista_elementos=miembros, page=titulo, titulo=titulo, columnas=self.columnas, opciones=self.opciones, url_action=self.action, atras=atras, puede_remover=puede_remover)
def desasignar_roles(self, *args, **kw): """ Desasigna los roles seleccionados a un usuario """ if kw: pks = [] for k, pk in kw.items(): if not k.isalnum(): continue pks.append(int(pk)) transaction.begin() id_user = UrlParser.parse_id(request.url, "usuarios") user = Usuario.por_id(id_user) c = 0 while c < len(user.roles): if user.roles[c].id_rol in pks: r = user.roles[c] if r.nombre_rol == u"Administrador del Sistema" and \ len(r.usuarios) == 1: #verificamos que haya mas de un administrador #del sistema msg = "No puedes eliminar el rol {nr}. Solo existe " msg += "un {nr}, y es usted." flash(msg.format(nr=r.nombre_rol), "warning") return "./" del user.roles[c] else: c += 1 transaction.commit() flash("Roles Desasignados correctamente") return "./"
def __actions__(self, obj): """Links de acciones para un registro dado""" value = '<div>' clase = 'actions' id = str(obj.id_atributos_por_tipo_item) id_tipo = UrlParser.parse_id(request.url, "tipositems") if PoseePermiso('redefinir tipo item', id_tipo_item=obj.id_tipo_item).is_met(request.environ): value += '<div>' + \ '<a href="./' + id + '/edit" ' + \ 'class="' + clase + '">Modificar</a>' + \ '</div><br />' if obj.puede_eliminarse(): if PoseePermiso('redefinir tipo item', id_tipo_item=obj.id_tipo_item).is_met(request.environ): value += '<div><form method="POST" action="' + id + '" class="button-to">'+\ '<input type="hidden" name="_method" value="DELETE" />' +\ '<input onclick="return confirm(\'Está seguro?\');" value="Eliminar" type="submit" '+\ 'style="background-color: transparent; float:left; border:0; color: #286571;'+\ 'display: inline; margin: 0; padding: 0; margin-left:-3px;" class="' + clase + '"/>'+\ '</form></div><br />' value += '</div>' return value