def VSprintTarea(): #GET parameter idSprint = request.args['idSprint'] res = {} if "actor" in session: res['actor']=session['actor'] if 'usuario' not in session: res['logout'] = '/' return json.dumps(res) idPila = int(session['idPila']) idSprint = int(request.args['idSprint']) oSprint = sprints() listaHistorias = oSprint.getAssignedSprintHistory(idSprint, idPila) #Obtenemos las historias asignadas al sprint oTask = task() #Obtenemos Todas las tareas asociadas a todas nuestras historias listaTareas = [] for historia in listaHistorias: tareas = oTask.taskAsociatedToUserHistory(historia.UH_idUserHistory) #Lista de tareas asociada a la historia for tarea in tareas: listaTareas.append(tarea) #Agregamos todas las tareas de la lista de tareas res['fSprintTarea_opcionesTarea'] = [{'key':tarea.HW_idTask,'value':tarea.HW_description}for tarea in listaTareas] res['fSprintTarea'] = {'idPila':idPila, 'idSprint':idSprint} res['idSprint']= idSprint res['usuario'] = session['usuario'] return json.dumps(res)
def AModifTarea(): #POST/PUT parameters params = request.get_json() results = [{'label':'/VHistoria', 'msg':['Tarea modificada']}, {'label':'/VCrearTarea', 'msg':['No se pudo modificar esta tarea.']}, ] res = results[1] # Obtenemos los parámetros idHistoria = int(session['idHistoria']) new_description = params['descripcion'] idTarea = params['idTarea'] new_idCategoria = params['categoria'] new_taskPeso = params['peso'] # Buscamos la tarea a modificar oTarea = task() result = clsTask.query.filter_by(HW_idTask = idTarea).first() # Modificamos la tarea modify = oTarea.updateTask(result.HW_description,new_description,new_idCategoria,new_taskPeso) if modify: res = results[0] res['label'] = res['label'] + '/' + str(idHistoria) if "actor" in res: if res['actor'] is None: session.pop("actor", None) else: session['actor'] = res['actor'] return json.dumps(res)
def AElimDoc(): #POST/PUT parameters params = request.get_json() results = [{'label':'/VHistoria', 'msg':['Documento borrado']}, {'label':'/VHistoria', 'msg':['No se pudo eliminar el documento']}, ] res = results[1] # Obtenemos los parámetros docName= request.args.get('name') taskId= request.args.get('tarea') docsDir=basedir+"/TaskDocuments" dirName=docsDir+"/"+taskId # Eliminamos la tarea oTarea = task() delete = oTarea.deleteDoc(taskId,docName) if os.path.exists(dirName+"/"+docName): os.remove(dirName+"/"+docName) if delete: res = results[0] res['label'] = res['label'] + '/' + str(taskId) if "actor" in res: if res['actor'] is None: session.pop("actor", None) else: session['actor'] = res['actor'] return json.dumps(res)
def ACrearTarea(): #POST/PUT parameters params = request.get_json() results = [{'label':'/VHistoria', 'msg':['Tarea creada']}, {'label':'/VHistoria', 'msg':['No se pudo crear tarea.']}, ] res = results[0] # Obtenemos el id de la historia actual idHistory = int(session['idHistoria']) # Extraemos los parámetros taskDesc = params['descripcion'] idCategoria = params['categoria'] taskPeso = params['peso'] if 'iniciado' in params: started = params['iniciado'] else: started = False if 'fechaInicio' in params: startingDate= params['fechaInicio'] try: startingDate_object = datetime.strptime(startingDate, '%d/%m/%Y') except ValueError: res = results[1] res['label'] = res['label'] + '/'+str(idHistory) return json.dumps(res) else: startingDate_object = None oBackLog = backlog() oTask = task() if 'miembro' in params: miembro = params['miembro'] else: miembro = None insert = oTask.insertTask(taskDesc, idCategoria, taskPeso, idHistory, started, startingDate_object) insertedTask = oTask.searchTask(taskDesc)[0] if miembro == None or miembro < 0: oTask.deleteUserTask(int(insertedTask.HW_idTask)) else: oTask.insertUserTask(int(insertedTask.HW_idTask), int(miembro)) if insert: res = results[0] else: res = results[1] res['label'] = res['label'] + '/' + str(idHistory) if "actor" in res: if res['actor'] is None: session.pop("actor", None) else: session['actor'] = res['actor'] return json.dumps(res)
def ACrearTarea(): #POST/PUT parameters params = request.get_json() results = [{'label':'/VHistoria', 'msg':['Tarea creada']}, {'label':'/VHistoria', 'msg':['No se pudo crear tarea.']}, ] res = results[0] # Obtenemos el id de la historia actual idHistory = int(session['idHistoria']) # Extraemos los parámetros taskDesc = params['descripcion'] idCategoria = params['categoria'] taskPeso = params['peso'] oBackLog = backlog() oTask = task() insert = oTask.insertTask(taskDesc, idCategoria, taskPeso, idHistory) if insert: res = results[0] else: res = results[1] res['label'] = res['label'] + '/' + str(idHistory) if "actor" in res: if res['actor'] is None: session.pop("actor", None) else: session['actor'] = res['actor'] return json.dumps(res)
def AElimTarea(): #POST/PUT parameters params = request.get_json() results = [{'label':'/VHistoria', 'msg':['Tarea borrada']}, {'label':'/VHistoria', 'msg':['No se pudo eliminar la tarea']}, ] res = results[1] # Obtenemos los parámetros idHistoria = int(session['idHistoria']) idTarea = int(session['idTarea']) # Eliminamos la tarea oTarea = task() result = clsTask.query.filter_by(HW_idTask = idTarea).first() delete = oTarea.deleteTask(result.HW_description) if delete: res = results[0] res['label'] = res['label'] + '/' + str(idHistoria) if "actor" in res: if res['actor'] is None: session.pop("actor", None) else: session['actor'] = res['actor'] return json.dumps(res)
def AElimHistoria(): #GET parameter results = [{'label':'/VHistorias', 'msg':['Historia eliminada']}, {'label':'/VHistorias', 'msg':['No se pudo eliminar esta historia']}, ] res = results[1] # Obtenemos el id del producto y de la historia. idPila = int(session['idPila']) idHistoria = int(session['idHistoria']) # Conseguimos la historia a eliminar oUserHistory = userHistory() found = oUserHistory.searchIdUserHistory(idHistoria) if (found != []): # Verificamos si la historia no es una épica if (not oUserHistory.isEpic(idHistoria)): # Conseguimos los actores asosciados a la historia oActorsUserHistory = actorsUserHistory() resultActors = oActorsUserHistory.idActorsAsociatedToUserHistory(idHistoria) if (resultActors != []): # Eliminamos los actores asociados a la historia for actor in resultActors: oActorsUserHistory.deleteActorAsociatedInUserHistory(actor, idPila) # Conseguimos los objetivos asosciados a la historia oObjUserHistory = objectivesUserHistory() resultObjectives = oObjUserHistory.idObjectivesAsociatedToUserHistory(idHistoria) if (resultObjectives != []): # Eliminamos los objetivos asociados a la historia for objetivo in resultObjectives: oObjUserHistory.deleteObjectiveAsociatedInUserHistory(objetivo, idPila) # Conseguimos las tareas asociadas a la historia aTarea = task() resultTask = aTarea.taskAsociatedToUserHistory(idHistoria) if (resultTask != []): # Eliminamos las tareas asociados a la historia for tasky in resultTask: aTarea.deleteTask(tasky.HW_description) # Eliminamos la historia de usuario deleted = oUserHistory.deleteUserHistory(found[0].UH_idUserHistory) if deleted: res = results[0] res['label'] = res['label'] + '/' + str(idPila) if "actor" in res: if res['actor'] is None: session.pop("actor", None) else: session['actor'] = res['actor'] return json.dumps(res)
def ASprintHistoria(): #POST/PUT parameters params = request.get_json() results = [ { 'label': '/VSprint', 'msg': ['Historia Asignado'] }, { 'label': '/VSprint', 'msg': ['Error al Asignar Historia'] }, ] res = results[1] idSprint = int(params['idSprint']) idPila = params['idPila'] idHistoria = params['historia'] oSprint = sprints() oTask = task() oUserHistory = userHistory() #Lista usada para obtener los ids de las historias asigndas historiesList = [] if oSprint.asignSprintHistory(idSprint, idPila, idHistoria): historiesList.append(idHistoria) # Chequeamos si es epica, si lo es agregamos las sub-historias if oUserHistory.isEpic(idHistoria): for idHistoria in oUserHistory.historySuccesors(idHistoria): oSprint.asignSprintHistory(idSprint, idPila, idHistoria) historiesList.append(idHistoria) totalResult = True #Obtenemos las tareas asociadas a cada historia de usuario asignada for idHist in historiesList: taskList = oTask.getAllTask(idHist) if taskList != []: for t in taskList: result = oSprint.asignSprintTask(idSprint, idPila, t.HW_idTask) totalResult = totalResult and result #if totalResult: res = results[0] res['label'] = res['label'] + '/' + str(idSprint) #Action code ends here if "actor" in res: if res['actor'] is None: session.pop("actor", None) else: session['actor'] = res['actor'] return json.dumps(res)
def VPrelaciones(): #GET parameter idPila = request.args['idPila'] res = {} if "actor" in session: res['actor']=session['actor'] #Action code goes here, res should be a JSON structure if 'usuario' not in session: res['logout'] = '/' return json.dumps(res) res['usuario'] = session['usuario'] # Obtenemos el id del producto y de la historia. idPila = request.args['idPila'] oBacklog = backlog() oUserHistory = userHistory() oTask = task() oPrecedence = precedence() #Hacer query para obtener las prelaciones que existen ya en este producto y devolverlas en fPrelaciones lista = [] precedenceList = oPrecedence.getAllPrecedences(idPila) for object in precedenceList: lista.append({'antecedente':object.P_idFirstTask, 'consecuente':object.P_idSecondTask}) res['fPrelaciones'] = {'lista':lista} #res['fPrelaciones'] = {'lista':[ # {'antecedente':1, 'consecuente':2}, # {'antecedente':2, 'consecuente':3}]} res['idPila'] = idPila #Hacer query para obtener las tareas de esta historia y devolverlas con su id y valor en una lista userHistoriesList = oBacklog.userHistoryAsociatedToProduct(int(idPila)) taskList = [] #tasks = [] #Se obtienen todas las tareas de las historias de usuarios for hist in userHistoriesList: taskList.extend(oTask.taskAsociatedToUserHistory(hist.UH_idUserHistory)) #Se transforman las tareas para la vista #for listaT in taskList: # for tarea in listaT: # tasks.append(tarea) res['fPrelaciones_listaTareas'] = [{'key':tarea.HW_idTask, 'value':tarea.HW_description + ' | historia:' + oUserHistory.getUHCodeFromId(tarea.HW_idUserHistory)}for tarea in taskList] #Action code ends here return json.dumps(res)
def AElimSprintHistoria(): #POST/PUT parameters params = request.get_json() results = [ { 'label': '/VSprint', 'msg': ['Historia Eliminado'] }, { 'label': '/VSprint', 'msg': ['Error al eliminar historia'] }, ] res = results[1] idSprint = int(session['idSprint']) idPila = int(session['idPila']) idHistoriaEliminar = int(request.args['id']) oSprint = sprints() oUserHistory = userHistory() oTask = task() deletedHistoryID = [] if oSprint.deleteAssignedSprintHistory(idSprint, idPila, idHistoriaEliminar): # Chequeamos si es epica, si lo es eliminamos sus hijos deletedHistoryID.append(idHistoriaEliminar) if oUserHistory.isEpic(idHistoriaEliminar): for idHistoria in oUserHistory.historySuccesors( idHistoriaEliminar): oSprint.deleteAssignedSprintHistory(idSprint, idPila, idHistoria) deletedHistoryID.append(idHistoria) # Eliminamos sus tareas for idHistoria in deletedHistoryID: tareas = oTask.taskAsociatedToUserHistory(idHistoria) for tarea in tareas: oSprint.deleteAssignedSprintTask(idSprint, idPila, tarea.HW_idTask) res = results[0] res['label'] = res['label'] + '/' + str(idSprint) if "actor" in res: if res['actor'] is None: session.pop("actor", None) else: session['actor'] = res['actor'] return json.dumps(res)
def VTarea(): #GET parameter # Obtenemos el id de la historia y de la tarea idTarea = int(request.args['idTarea']) idHistoria = int(session['idHistoria']) found = clsUserHistory.query.filter_by(UH_idUserHistory = idHistoria).first() codHistoria = found.UH_codeUserHistory res = {} if "actor" in session: res['actor']=session['actor'] idTarea = request.args.get('idTarea') oTarea = task() result = clsTask.query.filter_by(HW_idTask = idTarea).first() categoryList = clsCategory.query.all() if result.HW_completed: estado = 'completa' else: estado = 'incompleta' if 'usuario' not in session: res['logout'] = '/' return json.dumps(res) res['usuario'] = session['usuario'] res['codHistoria'] = codHistoria res['fTarea_opcionesCategoria'] = [ {'key':cat.C_idCategory ,'value':cat.C_nameCate+" ("+str(cat.C_weight)+")",'peso':result.HW_weight}for cat in categoryList] res['fTarea'] = {'idHistoria':idHistoria,'idTarea': idTarea,'descripcion': result.HW_description, 'categoria': result.HW_idCategory, 'peso':result.HW_weight, 'estado':estado} session['idTarea'] = idTarea res['idTarea'] = idTarea res['idHistoria'] = idHistoria documentos = taskDocs_by_taskId(idTarea) if documentos is None: print("documentos esta vacio") res = {'msg':'No hay documentos para adjuntos a esta tarea'} else: docsJson = [] for documento in documentos: docsJson.append({'name': documento.getName(), 'descripcion': documento.getDescription(), 'url':'TaskDocuments/'+idTarea+'/'+documento.getName()}) res['documentos']=docsJson return json.dumps(res)
def AModifTarea(): #POST/PUT parameters params = request.get_json() results = [{'label':'/VHistoria', 'msg':['Tarea modificada']}, {'label':'/VHistoria', 'msg':['No se pudo modificar esta tarea.']}, ] res = results[1] # Obtenemos los parámetros idHistoria = int(session['idHistoria']) new_description = params['descripcion'] idTarea = params['idTarea'] new_idCategoria = params['categoria'] new_taskPeso = params['peso'] new_miembro = params['miembro'] started = params['iniciado'] startingDate= params['fechaInicio'] try: startingDate_object = datetime.strptime(startingDate, '%d/%m/%Y') except ValueError: res = results[1] res['label'] = res['label'] + '/'+str(idHistoria) return json.dumps(res) # Buscamos la tarea a modificar oTarea = task() result = clsTask.query.filter_by(HW_idTask = idTarea).first() # Modificamos la tarea modify = oTarea.updateTask(result.HW_description,new_description,new_idCategoria,new_taskPeso,started,startingDate_object) if new_miembro == None or new_miembro < 0: oTarea.deleteUserTask(int(idTarea)) else: oTarea.insertUserTask(int(idTarea), int(new_miembro)) if modify: res = results[0] res['label'] = res['label'] + '/' + str(idHistoria) if "actor" in res: if res['actor'] is None: session.pop("actor", None) else: session['actor'] = res['actor'] return json.dumps(res)
def AIncompletarTarea(): params = request.get_json() idTarea = request.args.get('idTarea') results = [{'label':'/VTarea/'+idTarea, 'msg':['La tarea fue marcada como incompleta']}, {'label':'/VTarea/'+idTarea, 'msg':['Error al modificar tarea']}, ] res = results[1] # Obtenemos el id del Producto. idPila = int(session['idPila']) # Extraemos los valores oTarea = task() incompleted = oTarea.incompleteTask(int(idTarea)) if incompleted == True: res = results[0] return json.dumps(res)
def ASprintHistoria(): #POST/PUT parameters params = request.get_json() results = [{'label':'/VSprint', 'msg':['Historia Asignado']}, {'label':'/VSprint', 'msg':['Error al Asignar Historia']}, ] res = results[1] idSprint = int(params['idSprint']) idPila = params['idPila'] idHistoria = params['historia'] oSprint = sprints() oTask = task() oUserHistory = userHistory() #Lista usada para obtener los ids de las historias asigndas historiesList = [] if oSprint.asignSprintHistory(idSprint,idPila, idHistoria): historiesList.append(idHistoria) # Chequeamos si es epica, si lo es agregamos las sub-historias if oUserHistory.isEpic(idHistoria): for idHistoria in oUserHistory.historySuccesors(idHistoria): oSprint.asignSprintHistory(idSprint,idPila, idHistoria) historiesList.append(idHistoria) totalResult = True #Obtenemos las tareas asociadas a cada historia de usuario asignada for idHist in historiesList: taskList = oTask.getAllTask(idHist) if taskList != []: for t in taskList: result = oSprint.asignSprintTask(idSprint,idPila, t.HW_idTask) totalResult = totalResult and result #if totalResult: res = results[0] res['label'] = res['label'] + '/' + str(idSprint) #Action code ends here if "actor" in res: if res['actor'] is None: session.pop("actor", None) else: session['actor'] = res['actor'] return json.dumps(res)
def AElimSprintHistoria(): #POST/PUT parameters params = request.get_json() results = [{'label':'/VSprint', 'msg':['Historia Eliminado']}, {'label':'/VSprint', 'msg':['Error al eliminar historia']}, ] res = results[1] idSprint = int(session['idSprint']) idPila = int(session['idPila']) idHistoriaEliminar = int(request.args['id']) oSprint = sprints() oUserHistory = userHistory() oTask = task() deletedHistoryID=[] if oSprint.deleteAssignedSprintHistory(idSprint,idPila,idHistoriaEliminar): # Chequeamos si es epica, si lo es eliminamos sus hijos deletedHistoryID.append(idHistoriaEliminar) if oUserHistory.isEpic(idHistoriaEliminar): for idHistoria in oUserHistory.historySuccesors(idHistoriaEliminar): oSprint.deleteAssignedSprintHistory(idSprint,idPila, idHistoria) deletedHistoryID.append(idHistoria) # Eliminamos sus tareas for idHistoria in deletedHistoryID: tareas = oTask.taskAsociatedToUserHistory(idHistoria) for tarea in tareas: oSprint.deleteAssignedSprintTask(idSprint, idPila, tarea.HW_idTask) res = results[0] res['label'] = res['label'] + '/' + str(idSprint) if "actor" in res: if res['actor'] is None: session.pop("actor", None) else: session['actor'] = res['actor'] return json.dumps(res)
def VSprintTarea(): #GET parameter idSprint = request.args['idSprint'] res = {} if "actor" in session: res['actor'] = session['actor'] if 'usuario' not in session: res['logout'] = '/' return json.dumps(res) idPila = int(session['idPila']) idSprint = int(request.args['idSprint']) oSprint = sprints() listaHistorias = oSprint.getAssignedSprintHistory( idSprint, idPila) #Obtenemos las historias asignadas al sprint oTask = task() #Obtenemos Todas las tareas asociadas a todas nuestras historias listaTareas = [] for historia in listaHistorias: tareas = oTask.taskAsociatedToUserHistory( historia.UH_idUserHistory) #Lista de tareas asociada a la historia for tarea in tareas: listaTareas.append( tarea) #Agregamos todas las tareas de la lista de tareas res['fSprintTarea_opcionesTarea'] = [{ 'key': tarea.HW_idTask, 'value': tarea.HW_description } for tarea in listaTareas] res['fSprintTarea'] = {'idPila': idPila, 'idSprint': idSprint} res['idSprint'] = idSprint res['usuario'] = session['usuario'] return json.dumps(res)
def VHistoria(): #GET parameter res = {} # Obtenemos el id del producto y de la historia. idPila = int(session['idPila']) idHistory = int(request.args.get('idHistoria')) if "actor" in session: res['actor'] = session['actor'] if 'usuario' not in session: res['logout'] = '/' return json.dumps(res) res['usuario'] = session['usuario'] scale = { 0: 'No tiene escala asignada por ser Épica', 1: 'Alta', 2: 'Media', 3: 'Baja' } oBacklog = backlog() oObjective = objective() oTarea = task() oUserHist = userHistory() oActUserHist = actorsUserHistory() oObjUserHist = objectivesUserHistory() # Obtenemos la historia que queremos modificar. history = oUserHist.searchIdUserHistory(idHistory) history = history[0] # Obtenemos todas las acciones, actores y objetivos asociados al producto. actorList = oBacklog.actorsAsociatedToProduct(idPila) accionList = oBacklog.accionsAsociatedToProduct(idPila) objectiveList = oBacklog.objectivesAsociatedToProduct(idPila) # Obtenemos todas las historias de usuarios excepto la actual historias = oUserHist.getAllUserHistoryId(idPila) for hist in historias: if hist.UH_idUserHistory == idHistory: historias.remove(hist) break # Obtenemos todos los objetivos que son no trasnversales. for object in objectiveList: idObjective = object.O_idObjective transverse = oObjective.verifyObjectiveTransverse(idObjective) if int(transverse) == 1: objectiveList.remove(object) taskList = oTarea.getAllTask(idHistory) # Obtenemos los actores asociados a una historia de usuario. actors = oActUserHist.idActorsAsociatedToUserHistory(idHistory) # Obtenemos los objetivos asociados a una historia de usuario. objectives = oObjUserHist.idObjectivesAsociatedToUserHistory(idHistory) # Obtenemos la escala asociada a la historia (la que se selecciono para el producto) typeScale = oBacklog.scaleType(idPila) # Obtenemos la escala asignada a la historia actual numScale = history.UH_scale # Obtenemos las pruebas de la historia actual testsList = oUserHist.testsAsociatedToUserHistory(idHistory) resultScale = [] if numScale == 0: resultScale = [(0, scale[0])] else: # Obtenemos el tipo de escala asociado al producto (id,valor) if typeScale == 1: resultScale = [(i, scale[i]) for i in range(1, 3 + 1)] elif typeScale == 2: resultScale = [(i, i) for i in range(1, 20 + 1)] res['fHistoria_opcionesHistorias'] = [{ 'key': hist.UH_idUserHistory, 'value': hist.UH_codeUserHistory } for hist in historias] res['fHistoria_opcionesHistorias'].append({'key': 0, 'value': 'Ninguno'}) res['fHistoria_opcionesTiposHistoria'] = [{ 'key': 1, 'value': 'Opcional' }, { 'key': 2, 'value': 'Obligatoria' }] res['fHistoria_opcionesActores'] = [{ 'key': act.A_idActor, 'value': act.A_nameActor } for act in actorList] res['fHistoria_opcionesAcciones'] = [{ 'key': acc.AC_idAccion, 'value': acc.AC_accionDescription } for acc in accionList] res['fHistoria_opcionesObjetivos'] = [{ 'key': obj.O_idObjective, 'value': obj.O_descObjective } for obj in objectiveList] res['fHistoria_opcionesPrioridad'] = [{ 'key': scale[0], 'value': scale[1] } for scale in resultScale] if history.UH_completed: estado = 'completa' else: estado = 'incompleta' startingDate_object_new = datetime.strftime(history.UH_fechaInicio, '%d/%m/%Y') res['fHistoria'] = { 'super': history.UH_idSuperHistory, 'idHistoria': idHistory, 'idPila': history.UH_idBacklog, 'codigo': history.UH_codeUserHistory, 'actores': actors, 'accion': history.UH_idAccion, 'objetivos': objectives, 'tipo': history.UH_accionType, 'prioridad': history.UH_scale, 'iniciado': history.UH_iniciado, 'fechaInicio': startingDate_object_new, 'estado': estado } res['data2'] = [{ 'idTarea': tarea.HW_idTask, 'descripcion': tarea.HW_description } for tarea in taskList] res['pruebas'] = [{ 'idTarea': test.AT_idAT, 'descripcion': test.AT_description, 'url': test.AT_urlScript } for test in testsList] session['idHistoria'] = idHistory res['idHistoria'] = idHistory session['idPila'] = idPila res['idPila'] = idPila return json.dumps(res)
def VTarea(): #GET parameter # Obtenemos el id de la historia y de la tarea idTarea = int(request.args['idTarea']) idHistoria = int(request.args['idHistoria']) found = clsUserHistory.query.filter_by(UH_idUserHistory = idHistoria).first() codHistoria = found.UH_codeUserHistory res = {} if "actor" in session: res['actor']=session['actor'] idTarea = request.args.get('idTarea') oTarea = task() result = clsTask.query.filter_by(HW_idTask = idTarea).first() categoryList = clsCategory.query.all() oTeam = team() miembroList = oTeam.getTeam(found.UH_idBacklog) if result.HW_completed: estado = 'completa' else: estado = 'incompleta' if 'usuario' not in session: res['logout'] = '/' return json.dumps(res) res['usuario'] = session['usuario'] res['codHistoria'] = codHistoria res['fTarea_opcionesCategoria'] = [ {'key':cat.C_idCategory ,'value':cat.C_nameCate+" ("+str(cat.C_weight)+")",'peso':result.HW_weight}for cat in categoryList] res['fTarea_opcionesMiembro'] = [{'key':-1,'value':'Sin asignacion'}] + [ {'key':miembro.EQ_idEquipo ,'value':miembro.EQ_username} for miembro in miembroList] startingDate_object_new = datetime.strftime(result.HW_fechaInicio, '%d/%m/%Y') res['fTarea'] = {'idHistoria':idHistoria, 'idTarea': idTarea, 'descripcion': result.HW_description, 'categoria': result.HW_idCategory, 'peso':result.HW_weight, 'miembro': result.HW_idEquipo, 'estado': estado, 'iniciado': result.HW_iniciado, 'fechaInicio': startingDate_object_new } session['idTarea'] = idTarea res['idTarea'] = idTarea res['idHistoria'] = idHistoria documentos = taskDocs_by_taskId(idTarea) if documentos is None: print("documentos esta vacio") res = {'msg':'No hay documentos para adjuntos a esta tarea'} else: docsJson = [] for documento in documentos: docsJson.append({'name': documento.getName(), 'descripcion': documento.getDescription(), 'url':'TaskDocuments/'+idTarea+'/'+documento.getName()}) res['documentos']=docsJson return json.dumps(res)
def AModifTarea(): #POST/PUT parameters params = request.get_json() results = [ { 'label' : '/VHistoria' , 'msg' : ['Tarea modificada'] } , { 'label' : '/VHistoria' , 'msg' : ['Error al modificar tarea'] } ] res = results[1] # Obtenemos los parámetros idHistoria = int(session['idHistoria']) new_description = params['descripcion'] idTarea = params['idTarea' ] new_idCategoria = params['categoria' ] new_taskPeso = params['peso' ] new_estimatedTime = params['tiempo' ] interaccion = params['interaccion'] reglasNegocio = params['reglasNegocio'] usoEntidades = params['usoEntidades'] operacionesDB = params['operacionesDB'] new_miembro = params['miembro' ] started = params['iniciado' ] startingDate = params['fechaInicio'] completed = params['completed' ] finishingDate = params['fechaFin' ] hours_spent = params['Horas_Trabajadas'] try: startingDate_object = datetime.strptime(startingDate, '%Y-%m-%d') except TypeError: startingDate_object = None except ValueError: res = results[1] res['label'] = res['label'] + '/'+str(idHistoria) return json.dumps(res) try: finishingDate_object = datetime.strptime(finishingDate, '%Y-%m-%d') except TypeError: finishingDate_object = None except ValueError: res = results[1] res['label'] = res['label'] + '/'+str(idHistoria) return json.dumps(res) # Buscamos la tarea a modificar oTarea = task() result = clsTask.query.filter_by(HW_idTask = idTarea).first() # Modificamos la tarea modify = oTarea.updateTask( result.HW_description , new_description , new_idCategoria , new_taskPeso , new_estimatedTime , interaccion , reglasNegocio , usoEntidades , operacionesDB , started , startingDate_object , completed , finishingDate_object ,hours_spent ) if not modify: res = results[1] # res['msg'][0] = res['msg'][0] + ": La fecha de culminación debe ser mayor o igual que la de inicio." if new_miembro == None or new_miembro < 0: oTarea.deleteUserTask(int(idTarea)) else: oTarea.insertUserTask(int(idTarea), int(new_miembro)) if modify: res = results[0] res['label'] = res['label'] + '/' + str(idHistoria) if "actor" in res: if res['actor'] is None: session.pop("actor", None) else: session['actor'] = res['actor'] return json.dumps(res)
def VPrelaciones(): #GET parameter idPila = request.args['idPila'] res = {} if "actor" in session: res['actor'] = session['actor'] #Action code goes here, res should be a JSON structure if 'usuario' not in session: res['logout'] = '/' return json.dumps(res) res['usuario'] = session['usuario'] # Obtenemos el id del producto y de la historia. idPila = request.args['idPila'] oBacklog = backlog() oUserHistory = userHistory() oTask = task() oPrecedence = precedence() #Hacer query para obtener las prelaciones que existen ya en este producto y devolverlas en fPrelaciones lista = [] precedenceList = oPrecedence.getAllPrecedences(idPila) for object in precedenceList: lista.append({ 'antecedente': object.P_idFirstTask, 'consecuente': object.P_idSecondTask }) res['fPrelaciones'] = {'lista': lista} #res['fPrelaciones'] = {'lista':[ # {'antecedente':1, 'consecuente':2}, # {'antecedente':2, 'consecuente':3}]} res['idPila'] = idPila #Hacer query para obtener las tareas de esta historia y devolverlas con su id y valor en una lista userHistoriesList = oBacklog.userHistoryAsociatedToProduct(int(idPila)) taskList = [] #tasks = [] #Se obtienen todas las tareas de las historias de usuarios for hist in userHistoriesList: taskList.extend(oTask.taskAsociatedToUserHistory( hist.UH_idUserHistory)) #Se transforman las tareas para la vista #for listaT in taskList: # for tarea in listaT: # tasks.append(tarea) res['fPrelaciones_listaTareas'] = [{ 'key': tarea.HW_idTask, 'value': tarea.HW_description + ' | historia:' + oUserHistory.getUHCodeFromId(tarea.HW_idUserHistory) } for tarea in taskList] #Action code ends here return json.dumps(res)
def VHistorias(): #GET parameter res = {} # Obtenemos el id del producto y de la historia. idPila = int(request.args.get('idPila', 1)) if "actor" in session: res['actor'] = session['actor'] oTask = task() oActor = role() oAccion = accions() oObjective = objective() oBacklog = backlog() oUserHistory = userHistory() oActUserHist = actorsUserHistory() oObjUserHIst = objectivesUserHistory() # Obtenemos las historias asociadas al producto idPila. userHistoriesList = oBacklog.userHistoryAsociatedToProduct(idPila) pesos = [] userHistories = [] options = {1: 'podria ', 2: 'puede '} priorities = {0: 'Epica', 1: 'Alta', 2: 'Media', 3: 'Baja'} priorities2 = {i: str(i) for i in range(1, 20 + 1)} priorities2[0] = 'Epica' # Obtenemos el tipo de escala seleccionada en el producto asociado a la historia. typeScale = oBacklog.scaleType(idPila) # Obtenemos los valores de cada historia en un diccionario y almacenamos esos # diccionarios en un arreglo. for hist in userHistoriesList: result = oUserHistory.transformUserHistory(hist.UH_idUserHistory) userHistories.append(result) tupla = (hist.UH_idUserHistory, oTask.historyWeight(hist.UH_idUserHistory)) pesos.append(tupla) # Obtenemos el maximo de la escala if typeScale == 1: iterations = 3 elif typeScale == 2: iterations = 20 historiesSortedByPriority = [] # Ordenamos las tuplas por prioridad for i in range(iterations + 1): idsHistories = [] for hist in userHistories: if hist['priority'] == i: # Convertimos a escala Alta, Media, Baja si es necesario if typeScale == 1: hist['priority'] = priorities[i] elif typeScale == 2: hist['priority'] = priorities2[i] historiesSortedByPriority.append(hist) # Almacenamos los ids de las historias ordenadas idsHistories.append(hist['idHistory']) # Eliminamos de userHistories las historias ordenadas. for id in idsHistories: for hist in userHistories: if hist['idHistory'] == id: userHistories.remove(hist) break res['data0'] = [{ 'idHistoria': hist['idHistory'], 'prioridad': hist['priority'], 'peso': oTask.lookup(pesos, hist['idHistory']), 'enunciado': 'En tanto ' + hist['actors'] + hist['accions'] + ' para ' + hist['objectives'] } for hist in historiesSortedByPriority] session['idPila'] = idPila res['idPila'] = idPila return json.dumps(res)
def VHistorias(): #GET parameter res = {} # Obtenemos el id del producto y de la historia. idPila = int(request.args.get('idPila',1)) if "actor" in session: res['actor'] = session['actor'] oTask = task() oActor = role() oAccion = accions() oObjective = objective() oBacklog = backlog() oUserHistory = userHistory() oActUserHist = actorsUserHistory() oObjUserHIst = objectivesUserHistory() # Obtenemos las historias asociadas al producto idPila. userHistoriesList = oBacklog.userHistoryAsociatedToProduct(idPila) pesos = [] userHistories = [] options = {1:'podria ',2:'puede '} priorities = {0:'Epica',1:'Alta',2:'Media',3:'Baja'} priorities2 = {i:str(i)for i in range(1,20+1)} priorities2[0] = 'Epica' # Obtenemos el tipo de escala seleccionada en el producto asociado a la historia. typeScale = oBacklog.scaleType(idPila) # Obtenemos los valores de cada historia en un diccionario y almacenamos esos # diccionarios en un arreglo. for hist in userHistoriesList: result = oUserHistory.transformUserHistory(hist.UH_idUserHistory) userHistories.append(result) tupla = (hist.UH_idUserHistory,oTask.historyWeight(hist.UH_idUserHistory)) pesos.append(tupla) # Obtenemos el maximo de la escala if typeScale == 1: iterations = 3 elif typeScale == 2: iterations = 20 historiesSortedByPriority = [] # Ordenamos las tuplas por prioridad for i in range(iterations + 1): idsHistories = [] for hist in userHistories: if hist['priority'] == i: # Convertimos a escala Alta, Media, Baja si es necesario if typeScale == 1: hist['priority'] = priorities[i] elif typeScale == 2: hist['priority'] = priorities2[i] historiesSortedByPriority.append(hist) # Almacenamos los ids de las historias ordenadas idsHistories.append(hist['idHistory']) # Eliminamos de userHistories las historias ordenadas. for id in idsHistories: for hist in userHistories: if hist['idHistory'] == id: userHistories.remove(hist) break res['data0'] = [{'idHistoria':hist['idHistory'], 'prioridad' :hist['priority'], 'peso' :oTask.lookup(pesos,hist['idHistory']), 'enunciado' :'En tanto ' + hist['actors'] + hist['accions'] + ' para ' + hist['objectives']}for hist in historiesSortedByPriority] session['idPila'] = idPila res['idPila'] = idPila return json.dumps(res)
def VHistoria(): #GET parameter res = {} # Obtenemos el id del producto y de la historia. idPila = int(session['idPila']) idHistory = int(request.args.get('idHistoria')) if "actor" in session: res['actor']=session['actor'] if 'usuario' not in session: res['logout'] = '/' return json.dumps(res) res['usuario'] = session['usuario'] scale = {0:'No tiene escala asignada por ser Épica',1:'Alta',2:'Media',3:'Baja'} oBacklog = backlog() oObjective = objective() oTarea = task() oUserHist = userHistory() oActUserHist = actorsUserHistory() oObjUserHist = objectivesUserHistory() # Obtenemos la historia que queremos modificar. history = oUserHist.searchIdUserHistory(idHistory) history = history[0] # Obtenemos todas las acciones, actores y objetivos asociados al producto. actorList = oBacklog.actorsAsociatedToProduct(idPila) accionList = oBacklog.accionsAsociatedToProduct(idPila) objectiveList = oBacklog.objectivesAsociatedToProduct(idPila) # Obtenemos todas las historias de usuarios excepto la actual historias = oUserHist.getAllUserHistoryId(idPila) for hist in historias: if hist.UH_idUserHistory == idHistory: historias.remove(hist) break # Obtenemos todos los objetivos que son no trasnversales. for object in objectiveList: idObjective = object.O_idObjective transverse = oObjective.verifyObjectiveTransverse(idObjective) if int(transverse) == 1: objectiveList.remove(object) taskList = oTarea.getAllTask(idHistory) # Obtenemos los actores asociados a una historia de usuario. actors = oActUserHist.idActorsAsociatedToUserHistory(idHistory) # Obtenemos los objetivos asociados a una historia de usuario. objectives = oObjUserHist.idObjectivesAsociatedToUserHistory(idHistory) # Obtenemos la escala asociada a la historia (la que se selecciono para el producto) typeScale = oBacklog.scaleType(idPila) # Obtenemos la escala asignada a la historia actual numScale = history.UH_scale # Obtenemos las pruebas de la historia actual testsList = oUserHist.testsAsociatedToUserHistory(idHistory) resultScale = [] if numScale == 0: resultScale = [(0,scale[0])] else: # Obtenemos el tipo de escala asociado al producto (id,valor) if typeScale == 1: resultScale = [(i,scale[i]) for i in range(1,3+1)] elif typeScale == 2: resultScale = [(i,i) for i in range(1,20+1)] res['fHistoria_opcionesHistorias'] = [{'key':hist.UH_idUserHistory,'value':hist.UH_codeUserHistory}for hist in historias] res['fHistoria_opcionesHistorias'].append({'key':0,'value':'Ninguno'}) res['fHistoria_opcionesTiposHistoria'] = [{'key':1,'value':'Opcional'},{'key':2,'value':'Obligatoria'}] res['fHistoria_opcionesActores'] = [{'key':act.A_idActor,'value':act.A_nameActor}for act in actorList] res['fHistoria_opcionesAcciones'] = [{'key':acc.AC_idAccion,'value':acc.AC_accionDescription}for acc in accionList] res['fHistoria_opcionesObjetivos'] = [{'key':obj.O_idObjective,'value':obj.O_descObjective}for obj in objectiveList] res['fHistoria_opcionesPrioridad'] = [{'key':scale[0], 'value':scale[1]}for scale in resultScale] if history.UH_completed: estado = 'completa' else: estado = 'incompleta' startingDate_object_new = datetime.strftime(history.UH_fechaInicio, '%d/%m/%Y') res['fHistoria'] = {'super':history.UH_idSuperHistory , 'idHistoria':idHistory, 'idPila':history.UH_idBacklog, 'codigo':history.UH_codeUserHistory,'actores':actors, 'accion':history.UH_idAccion, 'objetivos':objectives, 'tipo':history.UH_accionType, 'prioridad':history.UH_scale, 'iniciado': history.UH_iniciado, 'fechaInicio': startingDate_object_new, 'estado': estado} res['data2'] = [{'idTarea':tarea.HW_idTask, 'descripcion':tarea.HW_description}for tarea in taskList] res['pruebas'] = [{'idTarea':test.AT_idAT, 'descripcion':test.AT_description, 'url': test.AT_urlScript} for test in testsList] session['idHistoria'] = idHistory res['idHistoria'] = idHistory session['idPila'] = idPila res['idPila'] = idPila return json.dumps(res)
def VTarea(): #GET parameter # Obtenemos el id de la historia y de la tarea idTarea = int(request.args['idTarea']) idHistoria = int(request.args['idHistoria']) found = clsUserHistory.query.filter_by(UH_idUserHistory = idHistoria).first() codHistoria = found.UH_codeUserHistory res = {} if "actor" in session: res['actor'] = session['actor'] idTarea = request.args.get('idTarea') oTarea = task() result = clsTask.query.filter_by(HW_idTask = idTarea).first() categoryList = clsCategory.query.all() oTeam = team() miembroList = oTeam.getTeam(found.UH_idBacklog) if 'usuario' not in session: res['logout'] = '/' return json.dumps(res) res['usuario'] = session['usuario'] res['codHistoria'] = codHistoria res['fTarea_opcionesCategoria'] = [ { 'key' : cat.C_idCategory , 'value' : cat.C_nameCate + " (" + str(cat.C_weight) + ")" , 'peso' : result.HW_weight } for cat in categoryList ] res['fTarea_opcionesMiembro'] = [ { 'key' : -1 , 'value' : 'Sin asignacion' } ] + [ { 'key' : miembro.EQ_idEquipo , 'value' : miembro.EQ_username } for miembro in miembroList ] res['fTarea_opcionesComplejidad'] = [ { 'key' : 1 , 'value' : "Sencillo" } ] + [ { 'key' : 2 , 'value' : "Promedio" } ] + [ { 'key' : 3 , 'value' : "Complejo" } ] try: startingDate_object_new = datetime.strftime(result.HW_fechaInicio, '%Y-%m-%d') except TypeError: startingDate_object_new = result.HW_fechaInicio try: finishingDate_object_new = datetime.strftime(result.HW_fechaFin, '%Y-%m-%d') except TypeError: finishingDate_object_new = result.HW_fechaFin res['fTarea'] = { 'idHistoria' : idHistoria , 'idTarea' : idTarea , 'descripcion' : result.HW_description , 'categoria' : result.HW_idCategory , 'peso' : result.HW_weight , 'miembro' : result.HW_idEquipo , 'tiempo' : result.HW_estimatedTime , 'iniciado' : result.HW_iniciado , 'fechaInicio' : startingDate_object_new , 'completed' : result.HW_completed , 'fechaFin' : finishingDate_object_new , 'interaccion' : result.HW_interaccion , 'reglasNegocio' : result.HW_reglasNegocio , 'usoEntidades' : result.HW_usoEntidades , 'operacionesDB': result.HW_operacionesDB , 'Horas_Trabajadas': result.HW_horasEmpleadas } session['idTarea'] = idTarea res ['idTarea'] = idTarea res ['idHistoria'] = idHistoria documentos = taskDocs_by_taskId(idTarea) if documentos is None: print("documentos esta vacio") res = {'msg' : 'No hay documentos para adjuntos a esta tarea'} else: docsJson = [] for documento in documentos: docsJson.append( { 'name' : documento.getName() , 'descripcion' : documento.getDescription() , 'url' : 'TaskDocuments/' + idTarea + '/' + documento.getName() }) res['documentos'] = docsJson return json.dumps(res)