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 __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 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 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_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 getItemsARelacionar(self,id_item_actual): '''Obtener la lista de items para relacionar @param id_item_actual: id de item con el cual se quiere crear una relacion ''' item = self.getById(id_item_actual) id_fase_actual = item.id_fase fm = FaseManager() fase_actual = fm.getById(id_fase_actual) lbm = LineaBaseManager() lista = self.getItemsFaseActualRelacion(id_fase_actual, id_item_actual) if fase_actual.orden != 1: #no es la primera fase fase_anterior = fm.getFaseAnterior(id_fase_actual) id_fase_anterior = fase_anterior.id_fase lista_items = DBSession.query(Item).filter((Item.id_fase == id_fase_anterior) & (Item.actual == 'true') & (Item.estado == 'finalizado')).all() for item in lista_items: lb = lbm.getById(item.id_linea_base) if lb.estado == 'valido'or lb.estado == 'liberado': lista.append(item) return lista
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 _do_get_provider_count_and_objs(self, buscado="", **kw): lb = LineaBaseManager() Items = lb.buscar(self.buscado, self.fase) return len(Items), Items
def _do_get_provider_count_and_objs(self, buscado="", **kw): pm = LineaBaseManager() Campoes = pm.buscar_por_fase(self.fase) return len(Campoes), Campoes
def crear_nueva_version (self,id_item_viejo): '''funcion para copiar campos de un item''' pm = ItemManager() item_viejo = pm.getById(id_item_viejo) item_nuevo = Item() '''Copiar campos genericos''' # transaction.begin() identificador = item_viejo.identificador item_nuevo.identificador = item_viejo.identificador item_nuevo.observacion = item_viejo.observacion item_nuevo.complejidad = item_viejo.complejidad item_nuevo.descripcion = item_viejo.descripcion item_nuevo.id_linea_base = item_viejo.id_linea_base item_viejo.id_linea_base = None 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 '''cambiar estado''' if item_viejo.estado=='inicial': item_nuevo.estado = 'inicial' else: item_nuevo.estado = 'revision' version = item_nuevo.version pm.add(item_nuevo) pm.update(item_viejo) # transaction.commit() '''Copiar los campos especificos''' transaction.begin() item_viejo = pm.getById(id_item_viejo) if tipo_item : for atributo in item_viejo.atributos: id_campo = atributo.id_campo valor = atributo.valor pm.addAtributo(identificador,id_fase,version,id_campo,valor) transaction.commit() item = pm.getByIdentificadorFaseVersion(identificador,id_fase,version) #Item_nuevo item_viejo = pm.getById(id_item_viejo) '''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 '''Copiar Relaciones''' transaction.begin() item_viejo = pm.getById(id_item_viejo) item = pm.getByIdentificadorFaseVersion(identificador,id_fase,version) #Item_nuevo id_item_nuevo = item.id_item #Id del item nuevo rm = RelacionManager() relaciones = rm.getByItem(item_viejo.id_item) for relacion in relaciones: transaction.begin() if relacion.id_item1 == item_viejo.id_item: item1 = item item2 = pm.getById(relacion.id_item2) else: item1 = pm.getById(relacion.id_item1) item2 = item if item1.actual == 'true' and item2.actual == 'true': #comprobar que sean relaciones validas if item1.id_fase == item2.id_fase : #son items de la misma fase rm.add(item1,item2,'padre-hijo') else: rm.add(item1,item2,'antecesor-sucesor') transaction.commit() '''Marcar para revision Items Relacionados''' lbm = LineaBaseManager() relaciones = rm.getByItem(id_item_nuevo) for relacion in relaciones: transaction.begin() if relacion.id_item1 == id_item_nuevo: 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() transaction.commit() return id_item_nuevo
def put(self, *args, **kw): '''Metodo que actualiza los campos en una edicion de item''' params = kw pm=ItemManager() try: item_viejo, navegacion = self.getNavegacionFromIdItem(int(kw['id_item'])) except: flash(('Direccion no valida.'), 'error') raise redirect("/index") if not(Secure().FiltrarByFase(item_viejo.id_fase, 'modificacion_item')): flash(('USTED NO CUENTA CON PERMISOS SUFICIENTES.'), 'error') raise redirect("/index") complejidad = [1,2,3,4,5,6,7,8,9,10] if params['submit']=="cancelar": raise redirect ('/item/items', id_fase=item_viejo.id_fase) if item_viejo.id_tipo_item: ti = TipoItemManager() tipo= ti.getById(item_viejo.id_tipo_item) campos = tipo.campos error, lista = self.verificarCampos(campos, **kw) if error: 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, navegacion=navegacion) item_nuevo = Item() '''Copiar Campos Genericos''' identificador = params['identificador'] item_nuevo.identificador = identificador item_nuevo.observacion = params['observacion'] item_nuevo.complejidad = params['complejidad'] item_nuevo.descripcion = params['descripcion'] item_nuevo.id_linea_base = item_viejo.id_linea_base item_viejo.id_linea_base = None 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 '''cambiar estado''' if item_viejo.estado=='inicial': item_nuevo.estado = 'inicial' else: item_nuevo.estado = 'revision' version = item_nuevo.version pm.add(item_nuevo) pm.update(item_viejo) '''Copiar los campos especificos''' 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 '''Copiar Relaciones''' transaction.begin() item_viejo = pm.getById(int(kw['id_item'])) item = pm.getByIdentificadorFaseVersion(identificador,id_fase,version) #Item_nuevo id_item_nuevo = item.id_item #Id del item nuevo rm = RelacionManager() relaciones = rm.getByItem(item_viejo.id_item) for relacion in relaciones: transaction.begin() if relacion.id_item1 == item_viejo.id_item: item1 = item item2 = pm.getById(relacion.id_item2) else: item1 = pm.getById(relacion.id_item1) item2 = item if item1.actual == 'true' and item2.actual == 'true': #comprobar que sean relaciones validas if item1.id_fase == item2.id_fase : #son items de la misma fase rm.add(item1,item2,'padre-hijo') else: rm.add(item1,item2,'antecesor-sucesor') transaction.commit() '''Marcar para revision Items Relacionados''' lbm = LineaBaseManager() relaciones = rm.getByItem(id_item_nuevo) for relacion in relaciones: transaction.begin() if relacion.id_item1 == id_item_nuevo: 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() transaction.commit() raise redirect('/item/items', id_fase=id_fase)
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() """Copiar los campos""" item_nuevo.codigo = item_revertir.codigo item_nuevo.identificador = item_revertir.identificador item_nuevo.observacion = item_revertir.observacion item_nuevo.estado = "revision" 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 item_nuevo.id_linea_base = item_revertir.id_linea_base # item_revertir.id_linea_base = None version = 0 # '''Estado del item revertido''' # if item_revertir.estado == 'aprobado': # item_nuevo.estado = 'listo' # else: # item_nuevo.estado = item_revertir.estado 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" 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) transaction.begin() 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) """Recuperar Relaciones""" rm = RelacionManager() item = im.getByIdentificadorFaseVersion(identificador, id_fase, version) # Item_nuevo relaciones = rm.getByItem(item_viejo.id_item) id_item_nuevo = item.id_item for relacion in relaciones: transaction.begin() if relacion.id_item1 == item_viejo.id_item: item1 = item item2 = im.getById(relacion.id_item2) else: item1 = im.getById(relacion.id_item1) item2 = item if item1.actual == "true" and item2.actual == "true": if item1.id_fase == item2.id_fase: # son items de la misma fase if not rm.tieneciclos(item1, item2): # no tiene ciclos rm.add(item1, item2, "padre-hijo") else: rm.add(item1, item2, "antecesor-sucesor") transaction.commit() """Marcar Para revision Item Relacionados""" lbm = LineaBaseManager() relaciones = rm.getByItem(id_item_nuevo) for relacion in relaciones: transaction.begin() if relacion.id_item1 == id_item_nuevo: item_revision = im.getById(relacion.id_item2) else: item_revision = im.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() transaction.commit() raise redirect("/item/items?id_fase=" + str(id_fase))