def calcular_impacto(self, *args, **kw): """Calcula el impacto""" id = args[0] id_item = int(id) item = Item.por_id(id_item) page = "Calculo de impacto de item: %s" % item.codigo atras = "../%s" % id #if UrlParser.parse_nombre(request.url, "fases"): # atras = "../%s/edit" % id item = Item.por_id(id_item) sumatoria, grafo = item.calcular_impacto() id_proyecto = UrlParser.parse_id(request.url, "proyectos_desarrollo") #fase = Fase.por_id(item.id_fase) proy = Proyecto.por_id(id_proyecto) impacto = (float(sumatoria) / float(proy.complejidad_total)) * 100 return dict(atras=atras, impacto=str(impacto), page=page, ct=str(proy.complejidad_total), suma=str(sumatoria), grafo=grafo)
def calcular_impacto(self, *args, **kw): """Calcula el impacto""" id = args[0] id_item = int(id) item = Item.por_id(id_item) page = "Calculo de impacto de item: %s" % item.codigo atras = "../%s" % id #if UrlParser.parse_nombre(request.url, "fases"): # atras = "../%s/edit" % id item = Item.por_id(id_item) sumatoria, grafo = item.calcular_impacto() id_proyecto = UrlParser.parse_id(request.url, "proyectos_desarrollo") #fase = Fase.por_id(item.id_fase) proy = Proyecto.por_id(id_proyecto) impacto = (float(sumatoria)/float(proy.complejidad_total)) * 100 return dict(atras=atras, impacto=str(impacto), page=page, ct=str(proy.complejidad_total), suma=str(sumatoria), grafo=grafo )
def edit(self, *args, **kw): """Despliega una pagina para realizar modificaciones""" #id_fase = UrlParser.parse_id(request.url, "fases") id_item = UrlParser.parse_id(request.url, "items") atras = "./" #if UrlParser.parse_nombre(request.url, "fases"): # atras = "../../edit" item = Item.por_id(id_item) puede_modificar = PoseePermiso( 'modificar item', id_fase=item.id_fase).is_met(request.environ) if not puede_modificar: flash(pp.message % pp.nombre_permiso, 'warning') redirect("./") tmpl_context.widget = self.edit_form #tmpl_context.tabla_atributos = self.atributos.table #atributos = self.atributos.table_filler \ # .get_value(id_version=item.id_propiedad_item) #tmpl_context.tabla_relaciones = RelacionItemTable(DBSession) #rel_table_filler = RelacionItemTableFiller(DBSession) #relaciones = rel_table_filler.get_value(id_version=item.id_propiedad_item) value = self.edit_filler.get_value(values={'id_item': id_item}) page = u"Modificar Ítem: %s" % value["codigo"] return dict( value=value, page=page, #id=str(id_item), #puede_relacionar=puede_modificar, #atributos=atributos, #relaciones=relaciones, 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 _do_get_provider_count_and_objs(self, id_fase=None, id_item=None, **kw): """ Recupera los ítems para los cuales tenemos algún permiso. Si el usuario se encuentra en una fase, retorna solo los ítems que pertenecen a dicha fase. """ if id_item: item = Item.por_id(id_item) return 1, [item] count, lista = super(ItemTableFiller, self).\ _do_get_provider_count_and_objs(**kw) filtrados = [] ''' if id_fase: id_fase = int(id_fase) ''' for it in lista: if (it.id_fase == id_fase and \ AlgunPermiso(tipo= "Tipo", id_tipo_item=it.id_tipo_item).is_met(request.environ)): filtrados.append(it) return len(filtrados), filtrados '''
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""" value = '<div>' clase = 'actions_fase' item = Item.por_id(obj.id_item_actual) p_item = PropiedadItem.por_id(item.id_propiedad_item) id = obj.id_propiedad_item controller = "./" + str(obj.id_propiedad_item) controller2 = "./" if (UrlParser.parse_nombre(request.url, "post_buscar")):#desde post_buscar controller = "../" + str(obj.id_propiedad_item) controller2 = "../" value += '<div>' + \ '<a href="' + controller + '/edit" ' + \ 'class="' + clase + '">Detalles</a>' + \ '</div><br />' value += '<div>' + \ '<a href="' + controller + '/atributos" ' + \ 'class="' + clase + '">Atributos</a>' + \ '</div><br />' if PoseePermiso('modificar item', id_tipo_item=item.id_tipo_item).is_met(request.environ): if p_item.estado not in [u"Bloqueado", u"Eliminado", u"Revisión-Bloq"] and\ id != p_item.id_propiedad_item: value += '<div>' + \ '<a href="' + controller2 + 'revertir/'+ str(id) + '" ' + \ 'class="' + clase + '">Volver a versión</a>' + \ '</div><br />' value += '<div>' + \ '<a href="' + controller +'/adjuntos" ' + \ 'class="' + clase + '">Adjuntos</a>' + \ '</div><br />' value += '<div>' + \ '<a href="' + controller +'/relaciones_ph" ' + \ 'class="' + clase + '">Relaciones P-H</a>' + \ '</div><br />' value += '<div>' + \ '<a href="' + controller +'/relaciones_as" ' + \ 'class="' + clase + '">Relaciones A-S</a>' + \ '</div><br />' value += '<div>' + \ '<a href="' + controller +'/historial" ' + \ 'class="' + clase + '">Historial</a>' + \ '</div><br />' value += '</div>' return value
def post_delete(self, *args, **kw): #se lo llama desde la pagina de edit, al marcar las relaciones #y luego seleccionar Eliminar. Ajax. id_item = UrlParser.parse_id(request.url, "items") item = Item.por_id(id_item) p_item = PropiedadItem.por_id(item.id_propiedad_item) ids = [] id = None if kw: for k, pk in kw.items(): if not k.isalnum(): continue ids.append(int(pk)) else: try: id = int(args[0]) if (id > 0): ids.append(id) except: id = 0 flash(u"Argumento invalido", "warning") p_item.eliminar_relaciones(ids) usuario = Usuario.by_user_name(request.identity['repoze.who.userid']) item.guardar_historial(u"eliminar-relaciones", usuario) if (id): redirect("../") else: transaction.commit() #return "/items/%d/edit" % id_item return './'
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 edit(self, *args, **kw): """Despliega una pagina para realizar modificaciones""" #id_fase = UrlParser.parse_id(request.url, "fases") id_item = UrlParser.parse_id(request.url, "items") atras = "./" #if UrlParser.parse_nombre(request.url, "fases"): # atras = "../../edit" item = Item.por_id(id_item) puede_modificar = PoseePermiso('modificar item', id_fase=item.id_fase).is_met(request.environ) if not puede_modificar: flash(pp.message % pp.nombre_permiso, 'warning') redirect("./") tmpl_context.widget = self.edit_form #tmpl_context.tabla_atributos = self.atributos.table #atributos = self.atributos.table_filler \ # .get_value(id_version=item.id_propiedad_item) #tmpl_context.tabla_relaciones = RelacionItemTable(DBSession) #rel_table_filler = RelacionItemTableFiller(DBSession) #relaciones = rel_table_filler.get_value(id_version=item.id_propiedad_item) value = self.edit_filler.get_value(values={'id_item': id_item}) page = u"Modificar Ítem: %s" % value["codigo"] return dict(value=value, page=page, #id=str(id_item), #puede_relacionar=puede_modificar, #atributos=atributos, #relaciones=relaciones, 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 _do_get_provider_count_and_objs(self, id_version=None, **kw): """ Recupera las relaciones de la versión del ítem indicado. """ count, lista = super(RelacionTableFiller, self).\ _do_get_provider_count_and_objs(**kw) tipo = "a-s" if (UrlParser.parse_nombre(request.url, "relaciones_ph")): tipo = "p-h" filtrados = [] if id_version: p_item = PropiedadItem.por_id(id_version) item = Item.por_id(p_item.id_item_actual) #ver este permiso ap = AlgunPermiso(tipo='Fase', id_fase=item.id_fase).is_met(request.environ) if ap: for rpi in p_item.relaciones: if (rpi.relacion in lista) and \ rpi.relacion.tipo == Relacion.tipo_relaciones[tipo]: filtrados.append(rpi.relacion) return len(filtrados), filtrados
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 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 __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 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 __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 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_delete(self, id_item): """Elimina un item""" item = Item.por_id(int(id_item)) user = Usuario.by_user_name(request.credentials["repoze.what.userid"]) try: item.eliminar(user) flash(u"Ítem Eliminado") except EliminarItemError, err: flash(unicode(err), 'warning')
def post(self, archivo=None, **kw): id_item = UrlParser.parse_id(request.url, "items") item = Item.por_id(id_item) user = Usuario.by_user_name(request.credentials["repoze.what.userid"]) contenido = archivo.value #archivo.file.read() try: item.adjuntar_archivo(archivo.filename, contenido, user) except AdjuntarArchivoError, err: flash(unicode(err), 'warning')
def post_delete(self, id_archivo): """Elimina un archivo externo""" id_item = UrlParser.parse_id(request.url, "items") item = Item.por_id(id_item) user = Usuario.by_user_name(request.credentials["repoze.what.userid"]) try: item.eliminar_archivo_adjunto(int(id_archivo), user) except EliminarArchivoAdjuntoError, err: flash(unicode(err), 'warning')
def aprobar(self, *args, **kw): """ Aprueba un ítem. """ item = Item.por_id(int(args[0])) user = Usuario.by_user_name(request.credentials["repoze.what.userid"]) try: item.aprobar(user) flash(u"Ítem Aprobado") except CondicionAprobarError, err: flash(unicode(err), 'warning')
def revivir(self, *args, **kw): """ Revive un ítem que se encuentra en estado eliminado. """ item = Item.por_id(int(args[0])) user = Usuario.by_user_name(request.credentials["repoze.what.userid"]) try: item.revivir(user) flash(u"Ítem Revivido") except RevivirItemError, err: flash(unicode(err), 'warning')
def desaprobar(self, *args, **kw): """ Desaprueba un ítem. """ user = Usuario.by_user_name(request.credentials["repoze.what.userid"]) item = Item.por_id(int(args[0])) try: item.desaprobar(user) flash(u"Ítem Desaprobado") except DesAprobarItemError, err: flash(unicode(err), 'warning')
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 relacionar_ph(self, *args, **kw): #recibe los elementos seleccionados en relacionar_item #relaciona, y retorna. Ajax id_item = UrlParser.parse_id(request.url, "items") item = Item.por_id(id_item) p_item = PropiedadItem.por_id(item.id_propiedad_item) ids = [] id = None if kw: for k, pk in kw.items(): if not k.isalnum(): continue ids.append(int(pk)) else: try: id = int(args[0]) if (id > 0): ids.append(id) except: id = 0 flash(u"Argumento inválido", "warning") retorno, creado = p_item.agregar_relaciones(ids, 'p-h') if (creado ): #si por lo menos se pudo crear una relacion se guarda en el #historial usuario = Usuario.by_user_name( request.identity['repoze.who.userid']) item.guardar_historial(u"relacionar-PH", usuario) mensaje = "" if (retorno == u"" and not creado): mensaje = u"No se crearon relaciones" elif (retorno != u""): mensaje = u"No se pudo crear la relación con %s" % retorno #no sé como pasar strings como parámetro, fea solución indice = session.get('indice_mensaje', 0) session['indice_mensaje'] = indice + 1 session[str(indice)] = mensaje if (id): redirect('../mensajes/%d' % indice) else: transaction.commit() #return "/items/%d/edit" % id_item return './mensajes/%d' % indice
def _do_get_provider_count_and_objs(self, id_item=None, **kw): """ Recupera las versiones del ítem en cuestión. """ count, lista = super(VersionTableFiller, self).\ _do_get_provider_count_and_objs(**kw) filtrados = [] if id_item: id_item = int(id_item) item = Item.por_id(id_item) for p_item in reversed(item.propiedad_item_versiones): if p_item in lista: filtrados.append(p_item) return len(filtrados), filtrados
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 revertir(self, *args, **kw): """ Revierte el ítem en cuestion a la version indicada. """ id_item = UrlParser.parse_id(request.url, "items") id_version = int(args[0]) if not id_item: redirect("../") item = Item.por_id(id_item) pp = PoseePermiso('modificar item', id_tipo_item=item.id_tipo_item) if not pp.is_met(request.environ): flash(pp.message % pp.nombre_permiso, 'warning') redirect("../") user = Usuario.by_user_name(request.credentials["repoze.what.userid"]) item.revertir(id_version, user) redirect("../")
def get_all(self, *args, **kw): """ Retorna todos los registros Retorna una página HTML si no se especifica JSON """ puede_crear = False id_item = UrlParser.parse_id(request.url, "items") id_version = UrlParser.parse_id(request.url, "versiones") titulo = self.title archivos = {} 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 = self.table_filler. \ get_value(id_version=id_version, **kw) 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 = self.table_filler. \ get_value(id_version=item.id_propiedad_item, **kw) tmpl_context.widget = self.table return dict(lista_elementos=archivos, page=titulo, titulo=titulo, modelo=self.model.__name__, columnas=self.columnas, opciones=self.opciones, url_action=self.tmp_action, puede_crear=puede_crear, atras=atras )
def _do_get_provider_count_and_objs(self, id_version=None, **kw): """ Recupera los atributos de la versión del ítem indicado. """ count, lista = super(AtributoItemTableFiller, self).\ _do_get_provider_count_and_objs(**kw) filtrados = [] if id_version: p_item = PropiedadItem.por_id(id_version) item = Item.por_id(p_item.id_item_actual) ap = AlgunPermiso(tipo='Fase', id_fase=item.id_fase).is_met(request.environ) if ap: for attr_por_item in p_item.atributos: if attr_por_item in lista: filtrados.append(attr_por_item) return len(filtrados), filtrados
def check(self, obj, **kw): bloq = ' ' 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 in [u"Bloqueado", u"Revisión-Bloq", u"Eliminado"] or\ obj.id_anterior == id_item and p_otro.estado != u"Eliminado"): bloq = ' disabled="" ' #se permite eliminar desde el item anterior las relaciones colgadas checkbox = '<input type="checkbox" class="checkbox_tabla"' + bloq + 'id="' + str(obj.id_relacion) + '"/>' return checkbox
def check(self, obj, **kw): bloq = ' ' 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 in [u"Bloqueado", u"Revisión-Bloq", u"Eliminado"] or\ obj.id_anterior == id_item and p_otro.estado != u"Eliminado"): bloq = ' disabled="" ' #se permite eliminar desde el item anterior las relaciones colgadas checkbox = '<input type="checkbox" class="checkbox_tabla"' + bloq + 'id="' + str( obj.id_relacion) + '"/>' return checkbox
def put(self, *args, **kw): """update""" if "sprox_id" in kw: del kw["sprox_id"] id_item = UrlParser.parse_id(request.url, "items") if UrlParser.parse_nombre(request.url, "versiones"): #No debe poder modificarse, solo visualizar. TODO redirect('../') if id_item: #desde controller de items. id = int(args[0]) #identificador del atributo item = Item.por_id(id_item) p_item = PropiedadItem.por_id(item.id_propiedad_item) valor = kw["valor"] user_name = request.credentials["repoze.what.userid"] user = Usuario.by_user_name(user_name) try: p_item.modificar_atributo(user, id, valor) except ModificarItemError, err: flash(unicode(err), 'warning')
def put(self, *args, **kw): """ Actualiza un item. Específicamente su prioridad, complejidad, observaciones o descripcion. """ if "sprox_id" in kw: del kw["sprox_id"] kw["complejidad"] = int(kw["complejidad"]) kw["prioridad"] = int(kw["prioridad"]) atras = "./" id_item = UrlParser.parse_id(request.url, "items") #if UrlParser.parse_nombre(request.url, "fases"): # atras = "../../edit" item = Item.por_id(id_item) user_name = request.credentials["repoze.what.userid"] user = Usuario.by_user_name(user_name) try: item.modificar(user, **kw) except ModificarItemError, err: flash(unicode(err), "warning")
def edit(self, *args, **kw): """Despliega una pagina para realizar modificaciones""" id_item = UrlParser.parse_id(request.url, "items") id_version = UrlParser.parse_id(request.url, "versiones") id = int(args[0]) #identificador del atributo titulo = self.title if id_version: #desde controller de versiones p_item = PropiedadItem.por_id(id_version) titulo = u"Atributo de Versión: %d" % p_item.version elif id_item: #desde controller de items. item = Item.por_id(id_item) titulo = u"Atributo de Ítem: %s" % item.codigo value = self.edit_filler.get_value( values={'id_atributos_por_item': id}) tmpl_context.widget = self.edit_form return dict(value=value, page=titulo, atras="../")
def relacionar_as(self, *args, **kw): #recibe los elementos seleccionados en relacionar_item #relaciona, y retorna. Ajax id_item = UrlParser.parse_id(request.url, "items") item = Item.por_id(id_item) p_item = PropiedadItem.por_id(item.id_propiedad_item) ids = [] id = None if kw: for k, pk in kw.items(): if not k.isalnum(): continue ids.append(int(pk)) else: try: id = int(args[0]) if (id > 0): ids.append(id) except: id = 0 flash(u"Argumento inválido", "warning") p_item.agregar_relaciones(ids, 'a-s') usuario = Usuario.by_user_name(request.identity['repoze.who.userid']) item.guardar_historial(u"relacionar-AS", usuario) mensaje = "" indice = session.get('indice_mensaje', 0) session['indice_mensaje'] = indice + 1 session[str(indice)] = mensaje if (id): redirect('../mensajes/%d' % indice) else: transaction.commit() #return "/items/%d/edit" % id_item return './mensajes/%d' % indice
def get_one(self, *args, **kw): #id_fase = UrlParser.parse_id(request.url, "fases") id_item = UrlParser.parse_id(request.url, "items") atras = "../" #if UrlParser.parse_nombre(request.url, "fases"): # atras = "../../edit" item = Item.por_id(id_item) puede_crear = False id_fase = UrlParser.parse_id(request.url, "fases_desarrollo") nuevo = "./new" if (UrlParser.parse_id(request.url, "items")): nuevo = "../new" if id_fase: # desde el controlador de fases puede_crear = PoseePermiso("crear item", id_fase=id_fase).is_met(request.environ) #atras = "/fases/%d/edit/" % id_fase fase = Fase.por_id(id_fase) if puede_crear: puede_crear = fase.puede_crear_item() titulo = u"Ítem: %s" % item.codigo items = self.table_filler.get_value(id_item=item.id_item, **kw) tmpl_context.widget = self.table return dict(lista_elementos=items, page=titulo, atras=atras, titulo=titulo, modelo=self.model.__name__, columnas=self.columnas, opciones=self.opciones, url_action="../", puede_crear=puede_crear, comboboxes=self.comboboxes, nuevo=nuevo ) '''
def get_all(self, *args, **kw): """ Retorna todos los registros Retorna una página HTML si no se especifica JSON """ titulo = self.title id_item = UrlParser.parse_id(request.url, "items") if id_item: item = Item.por_id(id_item) titulo = u"Versiones del Ítem: %s" % item.codigo tmpl_context.widget = self.table versiones = self.table_filler.get_value(id_item=id_item, **kw) return dict(lista_elementos=versiones, page=titulo, titulo=self.title, modelo=self.model.__name__, columnas=self.columnas, opciones=self.opciones, url_action=self.tmp_action, comboboxes=self.comboboxes, atras="../")
def get_one(self, *args, **kw): #id_fase = UrlParser.parse_id(request.url, "fases") id_item = UrlParser.parse_id(request.url, "items") atras = "../" #if UrlParser.parse_nombre(request.url, "fases"): # atras = "../../edit" item = Item.por_id(id_item) puede_crear = False id_fase = UrlParser.parse_id(request.url, "fases_desarrollo") nuevo = "./new" if (UrlParser.parse_id(request.url, "items")): nuevo = "../new" if id_fase: # desde el controlador de fases puede_crear = PoseePermiso("crear item", id_fase=id_fase).is_met(request.environ) #atras = "/fases/%d/edit/" % id_fase fase = Fase.por_id(id_fase) if puede_crear: puede_crear = fase.puede_crear_item() titulo = u"Ítem: %s" % item.codigo items = self.table_filler.get_value(id_item=item.id_item, **kw) tmpl_context.widget = self.table return dict(lista_elementos=items, page=titulo, atras=atras, titulo=titulo, modelo=self.model.__name__, columnas=self.columnas, opciones=self.opciones, url_action="../", puede_crear=puede_crear, comboboxes=self.comboboxes, nuevo=nuevo) '''
def edit(self, *args, **kw): """ Despliega una pagina donde se puede ver el estado del ítem para la versión dada. """ id_item = UrlParser.parse_id(request.url, "items") id = int(args[0]) value = self.edit_filler.get_value(values={'id_propiedad_item': id}) item = Item.por_id(id_item) page = u"Versión %d del Ítem: %s" % (value["version"], item.codigo) tmpl_context.widget = self.edit_form #tmpl_context.tabla_atributos = self.atributos.table #atributos = self.atributos.table_filler.get_value(id_version=id) #tmpl_context.tabla_relaciones = self.relaciones.table #relaciones = self.relaciones.table_filler.get_value(id_version=id) atras = "../" return dict(value=value, page=page, id=str(id_item), #atributos=atributos, #relaciones=relaciones, atras=atras )
def edit(self, *args, **kw): """Despliega una pagina para realizar modificaciones""" id_item = UrlParser.parse_id(request.url, "items") id_version = UrlParser.parse_id(request.url, "versiones") id = int(args[0]) #identificador del atributo titulo = self.title if id_version: #desde controller de versiones p_item = PropiedadItem.por_id(id_version) titulo = u"Atributo de Versión: %d" % p_item.version elif id_item: #desde controller de items. item = Item.por_id(id_item) titulo = u"Atributo de Ítem: %s" % item.codigo value = self.edit_filler.get_value(values={'id_atributos_por_item': id}) tmpl_context.widget = self.edit_form return dict(value=value, page=titulo, atras="../" )
def get_all(self, *args, **kw): """ Retorna todos los registros Retorna una página HTML si no se especifica JSON """ titulo = self.title id_item = UrlParser.parse_id(request.url, "items") if id_item: item = Item.por_id(id_item) titulo = u"Versiones del Ítem: %s" % item.codigo tmpl_context.widget = self.table versiones = self.table_filler.get_value(id_item=id_item, **kw) return dict(lista_elementos=versiones, page=titulo, titulo=self.title, modelo=self.model.__name__, columnas=self.columnas, opciones=self.opciones, url_action=self.tmp_action, comboboxes=self.comboboxes, atras="../" )
def edit(self, *args, **kw): """ Despliega una pagina donde se puede ver el estado del ítem para la versión dada. """ id_item = UrlParser.parse_id(request.url, "items") id = int(args[0]) value = self.edit_filler.get_value(values={'id_propiedad_item': id}) item = Item.por_id(id_item) page = u"Versión %d del Ítem: %s" % (value["version"], item.codigo) tmpl_context.widget = self.edit_form #tmpl_context.tabla_atributos = self.atributos.table #atributos = self.atributos.table_filler.get_value(id_version=id) #tmpl_context.tabla_relaciones = self.relaciones.table #relaciones = self.relaciones.table_filler.get_value(id_version=id) atras = "../" return dict( value=value, page=page, id=str(id_item), #atributos=atributos, #relaciones=relaciones, atras=atras)
def _do_get_provider_count_and_objs(self, id_item=None, tipo=None, **kw): """ Recupera los ítems para los cuales tenemos algún permiso. y está o no relacionado al campo relacionado. Si el usuario se encuentra en una fase, retorna solo los ítems que pertenecen a dicha fase. """ #count, lista = super(ItemTableFiller, self).\ # _do_get_provider_count_and_objs(**kw) filtrados = [] if id_item: item = Item.por_id(int(id_item)) if (tipo == 'P-H'): items_fase_actual = DBSession.query(Item)\ .filter(and_(Item.id_propiedad_item == PropiedadItem.id_propiedad_item,\ Item.id_item != item.id_item, Item.id_fase == item.id_fase, PropiedadItem.estado != u"Eliminado"))\ .all() for it in items_fase_actual: if (not it.esta_relacionado(id_item)): filtrados.append(it) if (tipo == 'A-S'): fase = Fase.por_id(item.id_fase) items_fase_anterior = DBSession.query(Item)\ .filter(and_(Item.id_propiedad_item == PropiedadItem.id_propiedad_item,\ Item.id_fase == Fase.id_fase, Fase.id_proyecto == fase.id_proyecto, PropiedadItem.estado == u"Bloqueado", \ Fase.posicion == fase.posicion - 1, fase.posicion != 1))\ .all() for it in items_fase_anterior: if (not it.esta_relacionado(id_item)): filtrados.append(it) return len(filtrados), filtrados
def eliminar_relaciones(self, *args, **kw): #se lo llama desde la pagina de edit, al marcar las relaciones #y luego seleccionar Eliminar. Ajax. id_item = UrlParser.parse_id(request.url, "items") item = Item.por_id(id_item) p_item = PropiedadItem.por_id(item.id_propiedad_item) ids = [] if kw: for k, pk in kw.items(): if not k.isalnum(): continue ids.append(int(pk)) p_item.eliminar_relaciones(ids) usuario = Usuario.by_user_name(request.identity['repoze.who.userid']) item.guardar_historial(u"eliminar-relaciones", usuario) transaction.commit() #return "/items/%d/edit" % id_item 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_item = UrlParser.parse_id(request.url, "items") if id_item: item = Item.por_id(id_item) titulo = u"Versiones del Ítem: %s" % item.codigo tmpl_context.widget = self.table buscar_table_filler = VersionTableFiller(DBSession) buscar_table_filler.filtros = kw versiones = buscar_table_filler.get_value(id_item=id_item) return dict(lista_elementos=versiones, page=self.title, titulo=self.title, modelo=self.model.__name__, columnas=self.columnas, url_action='../', comboboxes=self.comboboxes, opciones=self.opciones, atras='../../')