예제 #1
0
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)
예제 #2
0
파일: tareas.py 프로젝트: 7Software/APMwSc
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)
예제 #3
0
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)
예제 #4
0
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)
예제 #5
0
파일: tareas.py 프로젝트: 7Software/APMwSc
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)
예제 #6
0
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)
예제 #7
0
파일: historias.py 프로젝트: pexison/APMwSc
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)
예제 #8
0
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)
예제 #9
0
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)
예제 #10
0
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)
예제 #11
0
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)
예제 #12
0
파일: tareas.py 프로젝트: ShadowManu/APMwSc
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)
예제 #13
0
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)
예제 #14
0
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)
예제 #15
0
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)
예제 #16
0
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)
예제 #17
0
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)
예제 #18
0
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)
예제 #19
0
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)
예제 #20
0
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)
예제 #21
0
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)
예제 #22
0
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)
예제 #23
0
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)
예제 #24
0
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)
예제 #25
0
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)