def calcularImpacto(self, id_item, direccion): nodos = [] self.construir(nodos,id_item,id_item, direccion) impacto = 0 iman = ItemManager() fman = FaseManager() for nodo in nodos: print nodo.nombre impacto = impacto + nodo.complejidad print "El impacto es:", impacto graph = pydot.Dot(graph_type='digraph') count = 0 for nodo in nodos: count = count + 1 if count == 1: for nodo in nodos: graph = pydot.Dot(graph_type='digraph') fase1 = fman.getNombreById(nodo.fase) impresion = nodo.nombre + " - Fase "+ fase1 + " - Costo "+str(nodo.complejidad) node_a = pydot.Node(str(impresion), style= "filled", fillcolor = "white") graph.add_node(node_a) else: for nodo in nodos: for relacion in nodo.relaciones: item = iman.getById(relacion) fase1 = fman.getNombreById(nodo.fase) fase2 = fman.getNombreById(item.id_fase) edge = pydot.Edge(nodo.nombre + " - Fase: "+fase1 + " - Costo: "+str(nodo.complejidad), item.identificador + " - Fase: "+fase2 + " - Costo: "+str(item.complejidad)) graph.add_edge(edge) pathname = os.path.dirname(sys.argv[0]) ruta = os.path.abspath(pathname) ruta = ruta + "/sgp/public/images/grafo.png" graph.write_png(ruta) return impacto
def adjuntar_archivo(self,*args,**kw): '''Metodo que obtiene el archivo a adjuntar a un item''' try: item, navegacion = self.getNavegacionFromIdItem(kw['id_item']) except: flash(('Direccion no valida.'), 'error') raise redirect("/index") if not(Secure().FiltrarByFase(item.id_fase, 'modificacion_item')): flash(('USTED NO CUENTA CON PERMISOS SUFICIENTES.'), 'error') raise redirect("/index") '''Consultar si se debe crear un nueva version del item''' contador = kw['contador'] id_item = kw['id_item'] if contador == '0': id_item = self.crear_nueva_version(kw['id_item']) #retorna el id de la nueva version del item contador = 1 fileitem = kw['datafile'] if fileitem.filename: os.path.basename(fileitem.filename.replace("\\", "/" )) f = fileitem.file.read() im = ItemManager() item = im.getById(id_item) im.adjuntarArchivo(item,f,fileitem.filename) else: print 'No se adjunto ningun archivo' print id_item raise redirect('/item/adjuntar',id_item= str(id_item), contador = contador)
def getItemsAprobados(self,id_fase): '''Obtiene los items desaprobados de una determinada fase @param: id_fase @return: lista de items aprobados de la fase''' im = ItemManager() fm = FaseManager() items = im.getItemsAprobados(id_fase) fase_actual = fm.getById(id_fase) lista = [] if fase_actual.orden != 1 : #Comprobar relaciones de los items for item in items : #por cada item en la lista de items aprobados relaciones = self.getByItem(item.id_item) #obtener sus relaciones bandera = False if relaciones: #Si tiene relaciones for relacion in relaciones: if im.esActual(relacion.id_item1) and im.esActual(relacion.id_item2): #la relacion es valida bandera= True break if bandera: lista.append(item) else: #es la primera fase lista = items return lista
def listo(self,**kw): id_item = kw["id_item"] id_item = int(id_item) im = ItemManager() item_listo = im.getById(int(id_item)) fase_retorno = item_listo.id_fase item_listo.estado = 'listo' im.update(item_listo) raise redirect('/item/items?id_fase='+ str(fase_retorno))
def desaprobar(self,**kw): id_item = kw["id_item"] id_item = int(id_item) im = ItemManager() item_aprobar = im.getById(int(id_item)) fase_retorno = item_aprobar.id_fase item_aprobar.estado = 'desaprobado' im.update(item_aprobar) raise redirect('/item/items?id_fase='+ str(fase_retorno))
def listo(self, **kw): id_item = kw["id_item"] id_item = int(id_item) im = ItemManager() item_listo = im.getById(int(id_item)) fase_retorno = item_listo.id_fase item_listo.estado = 'listo' im.update(item_listo) raise redirect('/item/items?id_fase=' + str(fase_retorno))
def desaprobar(self, **kw): id_item = kw["id_item"] id_item = int(id_item) im = ItemManager() item_aprobar = im.getById(int(id_item)) fase_retorno = item_aprobar.id_fase item_aprobar.estado = 'desaprobado' im.update(item_aprobar) raise redirect('/item/items?id_fase=' + str(fase_retorno))
def adjuntar_archivo(self,*args,**kw): fileitem = kw['datafile'] if fileitem.filename: os.path.basename(fileitem.filename.replace("\\", "/" )) f = fileitem.file.read() im = ItemManager() item = im.getById(kw['id_item']) im.adjuntarArchivo(item,f,fileitem.filename) else: print 'No file was uploaded' raise redirect('/item/adjuntar?id_item='+ kw['id_item'])
def post_delete(self, *args, **kw): '''delete''' pm = ItemManager() item = pm.getById(args) if item.estado != 'finalizado': item.estado = 'eliminado' item.actual = 'false' id_fase = item.id_fase pm.update(item) raise redirect('/item/items?id_fase='+ str(id_fase))
def post_delete(self, *args, **kw): '''delete''' pm = ItemManager() item = pm.getById(args) if item.estado != 'finalizado': item.estado = 'eliminado' item.actual = 'false' id_fase = item.id_fase pm.update(item) raise redirect('/item/items?id_fase=' + str(id_fase))
def verificar_action(self, obj): ''' Verifica si se puede relacionar o no un item @param: obj, item que se desea relacionar @return: si puede relacionarse o no''' im = ItemManager() item1 = im.getById(obj.id_item1) item2 = im.getById(obj.id_item2) if item1.id_linea_base != None or item2.id_linea_base!= None: return False else: return True
def adjuntar_archivo(self, *args, **kw): fileitem = kw['datafile'] if fileitem.filename: os.path.basename(fileitem.filename.replace("\\", "/")) f = fileitem.file.read() im = ItemManager() item = im.getById(kw['id_item']) im.adjuntarArchivo(item, f, fileitem.filename) else: print 'No file was uploaded' raise redirect('/item/adjuntar?id_item=' + kw['id_item'])
def buscar_actuales_por_fase(self,id_fase): ''' Obtiene las relaciones de los items actuales de una determinada fase ''' lista = DBSession.query(Relacion).filter((Relacion.id_fase1 == id_fase) |(Relacion.id_fase2 == id_fase)).all() im = ItemManager() lista_return = [] for relacion in lista: item1 = im.getById(relacion.id_item1) item2 = im.getById(relacion.id_item2) if item1.actual == "true" and item2.actual == "true": lista_return.append(relacion) return lista_return
def __actions__(self, obj): """Override this function to define how action links should be displayed for the given record.""" primary_fields = self.__provider__.get_primary_fields(self.__entity__) pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields)) estado = obj.estado lista = [] lista.append(str(obj.id_fase)) lista.append(str(obj.id_item)) if estado != 'finalizado': value = '<div width="10em"><div><a class="edit_link" href="'+pklist+'/edit" title = "Editar" style="text-decoration:none">edit</a>'\ '</div><div>'\ '<form method="POST" action="'+pklist+'" class="button-to">'\ '<input type="hidden" name="_method" value="DELETE" />'\ '<input title = "Editar" class="delete-button" onclick="return confirm(\'Are you sure?\');" value="delete" type="submit" '\ 'style="background-color: transparent; float:left; border:0; color: #286571; display: inline; margin: 0; padding: 0;"/>'\ '</form></div>'\ '<div><a href="/item/adjuntar?id_item='+pklist+'" title="Adjuntar" style="background-color: transparent; float:left; border:0; color: #286571; display: inline; margin: 0; padding: 0 5 0 0;" ><img src="/images/adjunto.png" width="17" height="17" /></a></div>'\ '<div><a href="/item/impacto?id_item='+pklist+'" title="Calcular Impacto" style="background-color: transparent; float:left; border:0; color: #286571; display: inline; margin: 0; padding: 0 5 0 0;" ><img src="/images/calculo_impacto.png" width="17" height="17" /></a></div>' # '<div><a href="/item/impacto?id_item='+pklist+'" style="text-decoration:none">Impacto </a>'\ # '</div>' if estado == "inicial": value +='<div><a href="/item/listo?id_item='+pklist+'" title="Listo" style="background-color: transparent; float:left; border:0; color: #286571; display: inline; margin: 0; padding: 0 5 0 0;" ><img src="/images/listo.png" width="17" height="17" /></a></div>' # # '<div><a href="/item/listo?id_item='+str(obj.id_item)+'" style="text-decoration:none">Listo </a>'\ # '</div>' if estado == 'listo': value +='<div><a href="/item/aprobar?id_item='+pklist+'" title="Aprobar" style="background-color: transparent; float:left; border:0; color: #286571; display: inline; margin: 0; padding: 0 5 0 0;" ><img src="/images/aprobar.png" width="17" height="17" /></a></div>'\ '<div><a href="/item/desaprobar?id_item='+pklist+'" title="Desaprobar" style="background-color: transparent; float:left; border:0; color: #286571; display: inline; margin: 0; padding: 0 5 0 0;" ><img src="/images/desaprobar.png" width="17" height="17" /></a></div>' # value += '<div><a href="/item/aprobar?id_item='+str(obj.id_item)+'" style="text-decoration:none">Aprobar </a>'\ # '</div>'\ # '<div><a href="/item/desaprobar?id_item='+str(obj.id_item)+'" style="text-decoration:none">Desaprobar </a>'\ # '</div>' im = ItemManager() versiones = im.getByCodigo(obj.codigo, obj.id_fase) cantidad = len(versiones) # for version in versiones: # cantidad = cantidad +1 if cantidad > 1 and obj.estado != "finalizado": value += '<div><a href="/itemRevertir/obtener?id_item='+pklist+'" title="Revertir" style="background-color: transparent; float:left; border:0; color: #286571; display: inline; margin: 0; padding: 0 5 0 0;" ><img src="/images/revert.png" width="21" height="21" /></a></div>' # '<div><a href="/itemRevertir/obtener?id_item='+str(obj.id_item)+'" style="text-decoration:none">Revertir </a>'\ # '</div>' else: value = '<div></div>' value +='</div>' return value
def desaprobar(self,**kw): '''metodo para cambiar el estado de un item a desaprobado''' try: id_item = int(kw["id_item"]) item_aprobar, navegacion = self.getNavegacionFromIdItem(id_item) except: flash(('Direccion no valida.'), 'error') raise redirect("/index") if not(Secure().FiltrarByFase(item_aprobar.id_fase, 'desaprobar_item')): flash(('USTED NO CUENTA CON PERMISOS SUFICIENTES.'), 'error') raise redirect("/index") im = ItemManager() fase_retorno = item_aprobar.id_fase item_aprobar.estado = 'desaprobado' im.update(item_aprobar) raise redirect('/item/items?id_fase='+ str(fase_retorno))
def crear(self, *args, **kw): '''crear relaciones''' im = ItemManager() rm = RelacionManager() no_creados=[] seleccion = kw['Aceptar'] if seleccion != 'Cancelar': '''validar relaciones''' id_item_actual = kw['item'] item_actual = im.getById(id_item_actual) id_lista_items = [] id_lista_items = kw['lista_items'] try: id_lista_items.count(1) except: int = id_lista_items id_lista_items = [] id_lista_items.append(int) #por cada item a relacionar for id_item in id_lista_items: item = im.getById(id_item) #obtener el item if rm.relacionDuplicada(item_actual,item): #comprobar si es una relacion duplicada no_creados.append(item.identificador) else: if item.id_fase == item_actual.id_fase : #son items de la misma fase if not rm.tieneciclos(item_actual, item):#no tiene ciclos rm.add(item_actual,item,'padre-hijo') else: no_creados.append(item.identificador) else: '''son de fases distintas''' rm.add(item,item_actual, 'antecesor-sucesor') if no_creados: print no_creados largo=True if len(no_creados)==1: largo=False raise redirect('/relacion/resumen_errores',no_creados=no_creados,id_fase= item_actual.id_fase, largo=largo) else: raise redirect('/relacion?id_fase='+kw['id_fase']) else: raise redirect('/relacion?id_fase='+kw['id_fase'])
def edit(self, *args, **kw): """Display a page to edit the record.""" im = ItemManager() cm = CampoManager() item = im.getById(args) atributos = item.atributos lista = [] if str(item.id_tipo_item) != '': for atributo in atributos: campo = cm.getById(atributo.id_campo) campoValor = CampoValor() campoValor.valor = atributo.valor campoValor.campo = campo.nombre campoValor.tipo = campo.tipo_dato lista.append(campoValor) return dict(item=item, campos=lista, id_fase=item.id_fase)
def listo(self,**kw): '''metodo para cambiar el estado de un item a listo''' try: id_item = int(kw["id_item"]) item_listo, navegacion = self.getNavegacionFromIdItem(id_item) except: flash(('Direccion no valida.'), 'error') raise redirect("/index") if not(Secure().FiltrarByFase(item_listo.id_fase, 'modificacion_item')): flash(('USTED NO CUENTA CON PERMISOS SUFICIENTES.'), 'error') raise redirect("/index") im = ItemManager() fase_retorno = item_listo.id_fase item_listo.estado = 'listo' im.update(item_listo) raise redirect('/item/items',id_fase=fase_retorno)
def tieneciclos(self,item_padre, item_hijo): ''' Verifica si una relacion contiene ciclos @param:item_padre @param: item_hijo return: si existe un ciclo entre los items''' if str(item_padre.id_fase) != str(item_hijo.id_fase): return False relationes = self.buscar_actuales_por_fase(item_padre.id_fase) iman = ItemManager() relations = [] for relacion in relationes: item1 = iman.getById(relacion.id_item1) item2 = iman.getById(relacion.id_item2) if item1.actual == "true" and item2.actual == "true": relations.append(relacion) nodos = [] bandera1 = 0 bandera2 = 0 for relacion in relations: if str(relacion.id_item2) == str(item_padre.id_item): bandera1 = 1 if str(relacion.id_item1) == str(item_hijo.id_item): bandera2 = 1 nodo1 = Nodo(str(relacion.id_item1)) nodo2 = Nodo(str(relacion.id_item2)) if nodos.count(nodo1) == 0: nodos.append(nodo1) if nodos.count(nodo2) == 0: nodos.append(nodo2) if bandera1 != 1 or bandera2 != 1: return False for nodo in nodos: for relacion in relations: if str(relacion.id_item1) == nodo.item1: nodo.relaciones.append(str(relacion.id_item2)) contador = 0 inicio = "" for nodo in nodos: contador = contador + 1 if nodo.item1 == str(item_hijo.id_item): inicio = nodo controlador = 0 analizados = [] bool = self.buscarCiclos(str(item_padre.id_item), inicio, nodos,contador, controlador, analizados) return bool
def edit(self, *args, **kw): """Display a page to edit the record.""" im = ItemManager() cm = CampoManager() item = im.getById(args) atributos = item.atributos lista = [] if str(item.id_tipo_item) != '': for atributo in atributos: campo = cm.getById(atributo.id_campo) campoValor = CampoValor() campoValor.valor = atributo.valor campoValor.campo = campo.nombre campoValor.tipo = campo.tipo_dato lista.append(campoValor) return dict(item=item, campos = lista, id_fase= item.id_fase)
def __actions__(self, obj): primary_fields = self.__provider__.get_primary_fields(self.__entity__) pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields)) estado = obj.estado lista = [] lista.append(str(obj.id_fase)) lista.append(str(obj.id_item)) lbm = LineaBaseManager() estado_lb = "" if obj.id_linea_base != None: linea_base = lbm.getById(obj.id_linea_base) #Si el item esta en una linea base estado_lb = linea_base.estado value = '<div>' if obj.id_linea_base == None or obj.estado == 'revision' or estado_lb == 'liberado' or (obj.estado == 'listo' and obj.id_linea_base != None): if EvaluarPermiso("Modificar/eliminar Item", id_fase = obj.id_fase ).is_met(request.environ): value = '<div width="10em"><div><a class="edit_link" href="'+pklist+'/edit" title = "Editar" style="text-decoration:none">edit</a>'\ '</div><div>'\ '<form method="POST" action="'+pklist+'" class="button-to">'\ '<input type="hidden" name="_method" value="DELETE" />'\ '<input title = "Editar" class="delete-button" onclick="return confirm(\'Are you sure?\');" value="delete" type="submit" '\ 'style="background-color: transparent; float:left; border:0; color: #286571; display: inline; margin: 0; padding: 0;"/>'\ '</form></div>'\ '<div><a href="/item/adjuntar?id_item='+pklist+'" title="Adjuntar" style="background-color: transparent; float:left; border:0; color: #286571; display: inline; margin: 0; padding: 0 5 0 0;" ><img src="/images/adjunto.png" width="17" height="17" /></a></div>' value += '<div><a href="/item/impacto?id_item='+pklist+'" title="Calcular Impacto" style="background-color: transparent; float:left; border:0; color: #286571; display: inline; margin: 0; padding: 0 5 0 0;" ><img src="/images/calculo_impacto.png" width="17" height="17" /></a></div>' if estado == "inicial" or estado == 'revision' or estado== 'desaprobado': if EvaluarPermiso("Modificar/eliminar Item", id_fase = obj.id_fase ).is_met(request.environ): value +='<div><a href="/item/listo?id_item='+pklist+'" title="Listo" style="background-color: transparent; float:left; border:0; color: #286571; display: inline; margin: 0; padding: 0 5 0 0;" ><img src="/images/listo.png" width="17" height="17" /></a></div>' if estado == 'listo': if EvaluarPermiso("Aprobar/Desaprobar Item", id_fase = obj.id_fase ).is_met(request.environ): value +='<div><a href="/item/aprobar?id_item='+pklist+'" title="Aprobar" style="background-color: transparent; float:left; border:0; color: #286571; display: inline; margin: 0; padding: 0 5 0 0;" ><img src="/images/aprobar.png" width="17" height="17" /></a></div>'\ '<div><a href="/item/desaprobar?id_item='+pklist+'" title="Desaprobar" style="background-color: transparent; float:left; border:0; color: #286571; display: inline; margin: 0; padding: 0 5 0 0;" ><img src="/images/desaprobar.png" width="17" height="17" /></a></div>' im = ItemManager() versiones = im.getByCodigo(obj.codigo, obj.id_fase) cantidad = len(versiones) if cantidad > 1 and obj.estado != "finalizado": if EvaluarPermiso("Modificar/eliminar Item", id_fase = obj.id_fase ).is_met(request.environ): value += '<div><a href="/itemRevertir/?id_item='+pklist+'" title="Revertir" style="background-color: transparent; float:left; border:0; color: #286571; display: inline; margin: 0; padding: 0 5 0 0;" ><img src="/images/revert.png" width="21" height="21" /></a></div>' else: value += '<div><a href="/item/impacto?id_item='+pklist+'" title="Calcular Impacto" style="background-color: transparent; float:left; border:0; color: #286571; display: inline; margin: 0; padding: 0 5 0 0;" ><img src="/images/calculo_impacto.png" width="17" height="17" /></a></div>' if ItemManager().sePuedeRelacionar(obj) and EvaluarPermiso("Crear Relacion", id_fase = obj.id_fase ).is_met(request.environ): value+= '<div><a href="/relacion/newRelacion?id_item='+pklist+'" title="Relacionar" style="background-color: transparent; float:left; border:0; color: #286571; display: inline; margin: 0; padding: 0 5 0 0;" ><img src="/images/relaciones.png" width="17" height="17" /></a></div>' value +='</div>' return value
def __actions__(self, obj): """Override this function to define how action links should be displayed for the given record.""" primary_fields = self.__provider__.get_primary_fields(self.__entity__) pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields)) estado = obj.estado lista = [] lista.append(str(obj.id_fase)) lista.append(str(obj.id_item)) if estado != 'finalizado': value = '<div><div><a class="edit_link" href="'+pklist+'/edit" style="text-decoration:none">edit</a>'\ '</div><div>'\ '<form method="POST" action="'+pklist+'" class="button-to">'\ '<input type="hidden" name="_method" value="DELETE" />'\ '<input class="delete-button" onclick="return confirm(\'Are you sure?\');" value="delete" type="submit" '\ 'style="background-color: transparent; float:left; border:0; color: #286571; display: inline; margin: 0; padding: 0;"/>'\ '</form>'\ '<div><a href="/item/impacto?id_item='+pklist+'" style="text-decoration:none">Impacto </a>'\ '</div>' if estado == "inicial": value += '<div><a href="/item/listo?id_item='+str(obj.id_item)+'" style="text-decoration:none">Listo </a>'\ '</div>' if estado == 'listo': value += '<div><a href="/item/aprobar?id_item='+str(obj.id_item)+'" style="text-decoration:none">Aprobar </a>'\ '</div>'\ '<div><a href="/item/desaprobar?id_item='+str(obj.id_item)+'" style="text-decoration:none">Desaprobar </a>'\ '</div>' im = ItemManager() versiones = im.getByCodigo(obj.codigo) cantidad = 0 for version in versiones: cantidad = cantidad + 1 print "cantidad", cantidad if cantidad > 1 and obj.estado != "finalizado": value += '<div><a href="/itemRevertir/obtener?id_item='+str(obj.id_item)+'" style="text-decoration:none">Revertir </a>'\ '</div>' else: value = '<div><div>'\ '</div><div>'\ '<form>'\ '</form>' value += '</div></div>' return value
def post(self,*args, **kw): '''New''' p = Item() pm = ItemManager() params = kw complejidad = [1,2,3,4,5,6,7,8,9,10] if params['tipo_items'] != '-1': ti = TipoItemManager() tipo= ti.getById(params['tipo_items']) campos = tipo.campos error, lista = self.verificarCampos(campos, **kw) if error: return dict(value=kw, model=self.model.__name__,campos = lista,id_fase=params['id_fase'],tipo_items=kw['tipo_items'], comp = complejidad,i =kw['identificador'],o=kw['observacion'], c = int(params['complejidad']), d =kw['descripcion']) if pm.existeIdentificador(params['identificador'],int(params['id_fase'])): flash(('Error: Ya existe un item con el nombre <<' + params['identificador'] + '>> en esta fase.'), 'Error') return dict(value=kw, model=self.model.__name__,campos = lista,id_fase=params['id_fase'],tipo_items=kw['tipo_items'], comp = complejidad,i ="",o=kw['observacion'], c = int(params['complejidad']), d =kw['descripcion']) p.identificador = params['identificador'] p.observacion = params['observacion'] p.estado = 'inicial' p.complejidad = params['complejidad'] p.descripcion = params['descripcion'] p.id_fase = int(session['id_fase']) p.codigo = pm.generar_codigo(int(session['id_fase']), int(params['tipo_items'])) p.version = 1 p.actual = 'true' if params['tipo_items'] != '-1': ti = TipoItemManager() tipo= ti.getById(params['tipo_items']) p.tipo = tipo pm.add(p) if params['tipo_items'] != '-1': ti = TipoItemManager() tipo= ti.getById(params['tipo_items']) campos = tipo.campos for campo in campos: nombre_campo = campo.nombre valor = params[nombre_campo] pm.addAtributo(params['identificador'],params['id_fase'],1,campo.id_campo,valor) item = pm.getByIdentificadorFaseVersion(params['identificador'],params['id_fase'],1) '''Adjuntar nuevos Archivos''' if params['submit'] == 'Adjuntar': '''Hay que adjuntar archivos''' id_item = item.id_item raise redirect('/item/adjuntar?id_item='+ str(id_item)) raise redirect('/item/items?id_fase='+ params['id_fase'])
def validar(self,**kw): if not 'id_linea_base' in kw: flash(('Direccion no valida'), 'error') raise redirect("/index") lbm = LineaBaseManager() im = ItemManager() try: linea_base = lbm.getById(kw['id_linea_base']) except: flash(('Direccion no valida'), 'error') raise redirect("/index") fase = linea_base.fase for item in linea_base.items: item.estado = 'finalizado' im.update(item) linea_base.estado = 'valido' lbm.update(linea_base) raise redirect('/lineaBase?id_fase='+str(fase))
def post (self, **kw): linea_base = LineaBase() lbm = LineaBaseManager() im = ItemManager() id_items = kw['lista_items'] #lista de id_items que formaran parte de la LB for id in id_items: item = im.getById(id) item.estado = 'finalizado' im.update(item) linea_base.items.append(item) linea_base.estado='valido' linea_base.usuario = session['id_usuario'] linea_base.fecha = datetime.datetime.now() linea_base.fase = kw['id_fase'] lbm.add(linea_base) return 'LB Creada con exito'
def newRelacion(self, *args, **kw): """Display a page to show a new record.""" rm = ItemManager() fm = FaseManager() id_fase = kw['id_fase'] items1 = rm.getItemsFaseActual(id_fase) items = rm.getItemsARelacionar(id_fase) items2 = [] for item in items: fase = fm.getNombreById(item.id_fase) i = ItemARelacionar() i.identificador = item.identificador i.fase = fase i.id_item = item.id_item items2.append(i) return dict(value=kw, model=self.model.__name__, items1=items1, items2= items2, id_fase = kw['id_fase'])
def post_delete(self, *args, **kw): '''Metodo que elimina un item''' try: item, navegacion = self.getNavegacionFromIdItem(args[0]) except: flash(('Direccion no valida.'), 'error') raise redirect("/index") if not(Secure().FiltrarByFase(item.id_fase, 'modificacion_item')): flash(('USTED NO CUENTA CON PERMISOS SUFICIENTES.'), 'error') raise redirect("/index") pm = ItemManager() if item.estado != 'finalizado': item.estado = 'eliminado' item.actual = 'false' item.id_linea_base = None id_fase = item.id_fase pm.update(item) transaction.begin() rm = RelacionManager() lbm = LineaBaseManager() relaciones = rm.getByItem(args) '''Marcar para Revision''' for relacion in relaciones: transaction.begin() if relacion.id_item1 == args: item_revision = pm.getById(relacion.id_item2) else: item_revision = pm.getById(relacion.id_item1) item_revision.estado = 'revision' if item_revision.id_linea_base != None: linea_base = lbm.getById(item_revision.id_linea_base) linea_base.estado = 'no valido' lbm.update(linea_base) transaction.commit() '''Eliminar Relaciones''' for relacion in relaciones: rm.delete(relacion) transaction.commit() raise redirect('/item/items',id_fase=id_fase, navegacion=navegacion)
def liberar(self,**kw): if not 'id_linea_base' in kw: flash(('Direccion no valida'), 'error') raise redirect("/index") lbm = LineaBaseManager() im = ItemManager() try: linea_base = lbm.getById(kw['id_linea_base']) except: flash(('Direccion no valida'), 'error') raise redirect("/index") fase = linea_base.fase if not(Secure().FiltrarByFase(fase, 'liberar_lb')): flash(('USTED NO CUENTA CON PERMISOS SUFICIENTES'), 'error') raise redirect("/index") for item in linea_base.items: item.estado = 'aprobado' #para poder editar los items im.update(item) linea_base.estado = 'liberado' lbm.update(linea_base) raise redirect('/lineaBase?id_fase='+str(fase))
def construir(self, nodos,id_item,target,direccion): for elemento in nodos: if elemento.item == id_item: return im = ItemManager() rm = RelacionManager() relations = rm.getByItem(id_item) relaciones = [] for relacion in relations: item1 = im.getById(relacion.id_item1) item2 = im.getById(relacion.id_item2) if target != id_item: if item1.actual == "true" and item2.actual == "true": relaciones.append(relacion) else: if direccion == "adelante" or direccion == "total": if item1.actual == "true" and item2.actual == "true" and relacion.id_item1 == target: relaciones.append(relacion) if direccion == "atras" or direccion == "total": if item1.actual == "true" and item2.actual == "true" and relacion.id_item2 == target: relaciones.append(relacion) nodo = Nodo(id_item) item = im.getById(id_item) nodo.complejidad = item.complejidad nodo.nombre = item.identificador nodo.fase = item.id_fase analizar = [] for relacion in relaciones: if relacion.id_item1 == nodo.item: nodo.relaciones.append(relacion.id_item2) analizar.append(relacion.id_item2) else: analizar.append(relacion.id_item1) nodos.append(nodo) for elemento in analizar: self.construir(nodos,elemento, target, direccion)
def edit(self, *args, **kw): """Display a page to edit the record.""" print "Edit item" im = ItemManager() cm = CampoManager() item = im.getById(args) atributos = item.atributos print len(atributos) lista = [] complejidad = [1,2,3,4,5,6,7,8,9,10] print ("Codigo item: "+ item.codigo) print ("Tipo item: "+ str(item.id_tipo_item)) if str(item.id_tipo_item) != '': for atributo in atributos: campo = cm.getById(atributo.id_campo) campoValor = listaCampos() campoValor.valor = atributo.valor campoValor.nombre = campo.nombre campoValor.tipo_dato = campo.tipo_dato campoValor.error="" lista.append(campoValor) print "lista campos" print lista return dict(id_item=item.id_item, item=item, campos = lista, id_fase= item.id_fase, comp=complejidad)
def post(self, *args, **kw): '''New''' p = Item() pm = ItemManager() cm = CodigoManager() params = kw p.identificador = params['identificador'] p.observacion = params['observacion'] p.estado = 'inicial' p.complejidad = params['complejidad'] p.descripcion = params['descripcion'] p.id_fase = int(session['id_fase']) p.codigo = pm.generar_codigo(int(session['id_fase']), int(params['tipo_items'])) p.version = 1 p.actual = 'true' if params['tipo_items'] != '-1': ti = TipoItemManager() tipo = ti.getById(params['tipo_items']) p.tipo = tipo pm.add(p) if params['tipo_items'] != '-1': ti = TipoItemManager() tipo = ti.getById(params['tipo_items']) campos = tipo.campos for campo in campos: nombre_campo = campo.nombre valor = params[nombre_campo] pm.addAtributo(params['identificador'], params['id_fase'], 1, campo.id_campo, valor) item = pm.getByIdentificadorFaseVersion(params['identificador'], params['id_fase'], 1) '''Adjuntar nuevos Archivos''' if params['submit'] == 'Adjuntar': '''Hay que adjuntar archivos''' id_item = item.id_item raise redirect('/item/adjuntar?id_item=' + str(id_item)) raise redirect('/item/items?id_fase=' + params['id_fase'])
def post (self, **kw): """Agrega una nueva linea base a la base de datos""" if not 'id_fase' in kw: flash(('Direccion no valida'), 'error') raise redirect("/index") if not(Secure().FiltrarByFase(int(kw['id_fase']),'crear_lb')): flash(('USTED NO CUENTA CON PERMISOS SUFICIENTES'), 'error') raise redirect("/index") if kw['Aceptar']=="Cancelar": raise redirect("/lineaBase", id_fase=kw['id_fase']) linea_base = LineaBase() lbm = LineaBaseManager() im = ItemManager() fm = FaseManager() id_items = session['items_lb'] #lista de id_items que formaran parte de la LB try: id_items.sort() except: id_items=[] id_items.append(session['items_lb']) linea_base.estado='valido' linea_base.usuario = session['id_usuario'].id_usuario fecha = datetime.date.today() linea_base.fecha = fecha linea_base.fase = kw['id_fase'] for id in id_items: item = im.getById(id) linea_base.items.append(item) lbm.add(linea_base) for id in id_items: item=im.getById(int(id)) item.estado = 'finalizado' im.update(item) '''Cambiar estado de fases''' if im.fase_finalizada(kw['id_fase']): fm.finalizar_fase(kw['id_fase']) else: fm.fase_en_desarrollo(kw['id_fase']) fm.desarrollar_fase_siguiente(kw['id_fase']) raise redirect('/lineaBase?id_fase='+str(kw["id_fase"]))
def post(self,*args, **kw): '''New''' p = Item() pm = ItemManager() cm = CodigoManager() params = kw p.identificador = params['identificador'] p.observacion = params['observacion'] p.estado = 'inicial' p.complejidad = params['complejidad'] p.descripcion = params['descripcion'] p.id_fase = int(session['id_fase']) p.codigo = pm.generar_codigo(int(session['id_fase']), int(params['tipo_items'])) p.version = 1 p.actual = 'true' if params['tipo_items'] != '-1': ti = TipoItemManager() tipo= ti.getById(params['tipo_items']) p.tipo = tipo pm.add(p) if params['tipo_items'] != '-1': ti = TipoItemManager() tipo= ti.getById(params['tipo_items']) campos = tipo.campos for campo in campos: nombre_campo = campo.nombre valor = params[nombre_campo] pm.addAtributo(params['identificador'],params['id_fase'],1,campo.id_campo,valor) item = pm.getByIdentificadorFaseVersion(params['identificador'],params['id_fase'],1) '''Adjuntar nuevos Archivos''' if params['submit'] == 'Adjuntar': '''Hay que adjuntar archivos''' id_item = item.id_item raise redirect('/item/adjuntar?id_item='+ str(id_item)) raise redirect('/item/items?id_fase='+ params['id_fase'])
def _do_get_provider_count_and_objs(self, buscado="", **kw): pm = ItemManager() Campoes = pm.buscar_por_fase(self.id_fase) return len(Campoes), Campoes
def put(self, *args, **kw): '''update''' params = kw # print params['submit'] pm = ItemManager() item_viejo = pm.getById(int(args[0])) item_nuevo = Item() identificador = params['identificador'] item_nuevo.identificador = identificador item_nuevo.observacion = params['observacion'] item_nuevo.estado = item_viejo.estado item_nuevo.complejidad = params['complejidad'] item_nuevo.descripcion = params['descripcion'] item_nuevo.id_fase = item_viejo.id_fase id_fase = item_viejo.id_fase item_nuevo.codigo = item_viejo.codigo item_nuevo.version = item_viejo.version + 1 item_nuevo.actual = 'true' item_viejo.actual = 'false' item_nuevo.tipo = item_viejo.tipo tipo_item = item_viejo.id_tipo_item version = item_nuevo.version pm.add(item_nuevo) pm.update(item_viejo) '''Copiar los campos''' if tipo_item: ti = TipoItemManager() tipo = ti.getById(tipo_item) campos = tipo.campos for campo in campos: nombre_campo = campo.nombre valor = params[nombre_campo] pm.addAtributo(identificador, id_fase, version, campo.id_campo, valor) item = pm.getByIdentificadorFaseVersion(identificador, id_fase, version) #Item_nuevo item_viejo = pm.getById(int(args[0])) '''Copiar los adjuntos''' if item_viejo.adjuntos: for adjunto in item_viejo.adjuntos: pm.copiarAdjunto(item, adjunto) pm.update(item) pm.update(item_viejo) item = pm.getByIdentificadorFaseVersion(identificador, id_fase, version) #Item_nuevo '''Adjuntar nuevos Archivos''' if params['submit'] == 'Adjuntar': '''Hay que adjuntar archivos''' id_item = item.id_item raise redirect('/item/adjuntar?id_item=' + str(id_item)) raise redirect('/item/items?id_fase=' + str(id_fase))
def getHijos(self): im=ItemManager() hijos = im.getHijos(2) return hijos
def adjuntar(self,*args,**kw): im = ItemManager() item = im.getById(kw['id_item']) return dict(page='index', id_item = kw['id_item'], id_fase= item.id_fase)
def put(self, *args, **kw): '''update''' params = kw pm=ItemManager() item_viejo = pm.getById(int(kw['id_item'])) complejidad = [1,2,3,4,5,6,7,8,9,10] if item_viejo.id_tipo_item != '-1': ti = TipoItemManager() tipo= ti.getById(item_viejo.id_tipo_item) campos = tipo.campos error, lista = self.verificarCampos(campos, **kw) print "despues del error" if error: print "Error en los campos" nuevo = self.getNuevo(item_viejo,**kw) return dict(id_item=item_viejo.id_item, item=nuevo, campos = lista, id_fase= item_viejo.id_fase, comp=complejidad) print "Sin error en la actualizacion del item" item_nuevo = Item() identificador = params['identificador'] item_nuevo.identificador = identificador item_nuevo.observacion = params['observacion'] item_nuevo.estado = item_viejo.estado item_nuevo.complejidad = params['complejidad'] item_nuevo.descripcion = params['descripcion'] item_nuevo.id_fase = item_viejo.id_fase id_fase = item_viejo.id_fase item_nuevo.codigo = item_viejo.codigo item_nuevo.version = item_viejo.version + 1 item_nuevo.actual = 'true' item_viejo.actual = 'false' item_nuevo.tipo = item_viejo.tipo tipo_item = item_viejo.id_tipo_item version = item_nuevo.version pm.add(item_nuevo) pm.update(item_viejo) '''Copiar los campos''' if tipo_item : ti = TipoItemManager() tipo= ti.getById(tipo_item) campos = tipo.campos for campo in campos: nombre_campo = campo.nombre valor = params[nombre_campo] pm.addAtributo(identificador,id_fase,version,campo.id_campo,valor) item = pm.getByIdentificadorFaseVersion(identificador,id_fase,version) #Item_nuevo item_viejo = pm.getById(int(kw['id_item'])) '''Copiar los adjuntos''' if item_viejo.adjuntos : for adjunto in item_viejo.adjuntos: pm.copiarAdjunto(item,adjunto) pm.update(item) pm.update(item_viejo) item = pm.getByIdentificadorFaseVersion(identificador,id_fase,version) #Item_nuevo '''Adjuntar nuevos Archivos''' if params['submit'] == 'Adjuntar': '''Hay que adjuntar archivos''' id_item = item.id_item raise redirect('/item/adjuntar?id_item='+ str(id_item)) print "antes del raise - put item" raise redirect('/item/items?id_fase='+ str(id_fase))
def adjuntar(self, *args, **kw): im = ItemManager() item = im.getById(kw['id_item']) return dict(page='index', id_item=kw['id_item'], id_fase=item.id_fase)
def _do_get_provider_count_and_objs(self, buscado="", **kw): pm = ItemManager() Items = pm.buscar(self.buscado,self.id_fase) return len(Items), Items
def revertir(self,*args,**kw): id_item = kw["id_item"] id_item = int(id_item) im = ItemManager() transaction.begin() item_revertir = im.getById(id_item) item_nuevo = Item() item_nuevo.codigo = item_revertir.codigo item_nuevo.identificador = item_revertir.identificador item_nuevo.observacion = item_revertir.observacion item_nuevo.estado = "inicial" item_nuevo.complejidad = item_revertir.complejidad item_nuevo.id_fase = item_revertir.id_fase item_nuevo.id_tipo_item = item_revertir.id_tipo_item item_nuevo.descripcion = item_revertir.descripcion items_de_fase = im.buscar_por_fase(item_revertir.id_fase) id_fase = item_revertir.id_fase version = 0 for item in items_de_fase: if item.version > version: version = item.version if item.codigo == item_revertir.codigo and item.actual == "true": item.actual = "false" version = version + 1 item_nuevo.version = version item_nuevo.actual = 'true' print "version",version im.add(item_nuevo) transaction.commit() item_viejo = im.getById(id_item) identificador = item_viejo.identificador tipo_item = item_viejo.id_tipo_item if tipo_item : for atributo in item_viejo.atributos: id_campo = atributo.id_campo valor = atributo.valor im.addAtributo(identificador,id_fase,version,id_campo,valor) im.update(item_viejo) item_viejo = im.getById(id_item) item = im.getByIdentificadorFaseVersion(identificador,id_fase,version) #Item_nuevo '''Copiar los adjuntos''' if item_viejo.adjuntos : for adjunto in item_viejo.adjuntos: im.copiarAdjunto(item,adjunto) im.update(item) raise redirect('/item/items?id_fase='+ str(id_fase))
def _do_get_provider_count_and_objs(self, buscado="", **kw): im = ItemManager() item = im.getById(self.id_item) Campoes = im.getAnteriores(item.codigo) return len(Campoes), Campoes
def _do_get_provider_count_and_objs(self, buscado="", **kw): pm = ItemManager() Items = pm.buscar(self.buscado, self.id_fase) return len(Items), Items