Esempio n. 1
0
def actualizar_eliminar_fase(request):
    """
    @summary: Maneja las solicitudes para actualizar y elimninar fases.
              Al eliminar la fase se eliminan sus atributos particulares y los tipos de items que soporta.
    @param request: Delete para eliminar y Put para modificar.
    @return: En caso de recibir un Put retorna la fase creada.
        En caso de recibir un Delete retorna true en caso de exito .                   
    """
    if (request.method == 'DELETE'):
        u = Unpickler()
        entidad = u.restore(request.json_body);
        dao = FaseDAO(request)
        fase = dao.get_by_id(entidad["id"])
        
        #eliminamos los atributos particulares de la fase
        atributo_fase_dao = AtributoFaseDAO(request)
        atributos = atributo_fase_dao.get_query().filter(AtributoFase._fase_id == fase._id).all();
        for atributo in atributos:
            atributo_fase_dao.borrar(atributo);
            
        #eliminamos las asociaciones que puede tener con los tipos de items
        tipo_fase_dao = TipoFaseDAO(request)
        tipos = tipo_fase_dao.get_query().filter(TipoFase._fase_id == fase._id).all();
        for tipo in tipos:
            tipo_fase_dao.borrar(tipo);
        
        dao.borrar(fase)
        return Response(json.dumps({'sucess': 'true'}))
    else:
        #Recibimos un PUT
        u = Unpickler()
        dao = FaseDAO(request)
        entidad = u.restore(request.json_body);
        vieja = dao.get_by_id(entidad["id"])
        vieja._nombre = entidad["_nombre"]
        vieja._orden = entidad["_orden"]
        vieja._comentario = entidad["_comentario"]
        vieja._color = entidad["_color"]
        
        dao.update(vieja)
        lista = []
        p = Pickler()
        lista.append(p.flatten(vieja))
        j_string = p.flatten(lista)
        return Response(json.dumps({'sucess': 'true', 'fases':j_string}))
Esempio n. 2
0
def get_fase_antecesora(request, fase):
    fase_id = fase._id
    proyecto_id = fase._proyecto_id
    rd = FaseDAO(request)
    lista = [];
    #Codigo de fede
    fase_actual = rd.get_by_id(fase_id)
    entidad = rd.get_query().filter(Fase._proyecto_id == proyecto_id, Fase._orden < fase_actual._orden).order_by(Fase._orden.desc()).first()
    return entidad;
Esempio n. 3
0
def obtener_crear_tipofase(request):
    """
    @summary: Maneja las solicitudes para obtener y asociar tipos de items a una fase en particular.
    @param request: Get para recuperar y Post para crear.
    @return: En caso de recibir un Get retorna todos los tipos de items que soporta una fase en especifico.
        En caso de recibir un Post asocia un tipo de item a una fase.                
    """
    if (request.method == 'GET'):
        id = request.GET.get('id')
        rd = TipoFaseDAO(request)
        entidades = rd.get_query().filter(TipoFase._fase_id == id).all()
        lista = [];
        p = Pickler()
        for entidad in entidades:
            a = TipoFaseLindos(entidad._id, entidad._fase._id, entidad._tipo._id, entidad._tipo._nombre)
            lista.append(p.flatten(a))    
        j_string = p.flatten(lista)
        a_ret = json.dumps({'sucess': 'true', 'tipofase':j_string})

        return Response(a_ret)
    elif (request.method == 'POST'):
        u = Unpickler()
        entidad = u.restore(request.json_body);
        
        dao = FaseDAO(request)
        fase = dao.get_by_id(entidad["_fase"])
        dao = TipoItemDAO(request)
        tipo = dao.get_by_id(entidad["_tipo"])
    
        dao = TipoFaseDAO(request)
        nuevo_tipo_fase = TipoFase(fase, tipo)
        dao.crear(nuevo_tipo_fase)
        
        lista = []
        p = Pickler()
        a = TipoFaseLindos(nuevo_tipo_fase._id, nuevo_tipo_fase._fase._id, nuevo_tipo_fase._tipo._id, nuevo_tipo_fase._tipo._nombre)
        lista.append(p.flatten(a))
        j_string = p.flatten(lista)
        a_ret = json.dumps({'sucess': 'true', 'tipofase' : j_string})
    
        return Response(a_ret)
Esempio n. 4
0
def rest(request):

    if (request.method == 'POST'):
        try:
            u = Unpickler()
            objeto = u.restore(request.json_body)
            if (objeto['_fase'] == ''):
                raise FaseNoEncontradaException()
            fase_dao = FaseDAO(request)
            fase = fase_dao.get_by_id(objeto['_fase'])

            if (objeto['_items'] == None or objeto['_items'] == ''):
                raise NoItemLineaBaseException()
            item_dao = ItemDAO(request)
            items = []
            for item_id in objeto['_items']:
                items.append(item_dao.get_by_id(item_id))

            dao_item = ItemDAO(request)
            nItems = []
            for item in items:
                n_item = Item(item._item_id, item._nombre, item._tipo_item,
                              item._fase, item._duracion, item._descripcion,
                              item._condicionado, item._version + 1,
                              "BLOQUEADO", item._fecha_inicio,
                              item._completado, item._padre_item_id,
                              item._antecesor_item_id, item._color)
                dao_item.crear(n_item)
                nItems.append(n_item)
                actualizar_referencias_item(n_item, item_dao, item._id, False)
                item_dao.actualizarEstadosFaseyProyecto(n_item)
                item_dao.actualizarReferenciasItemNuevaVersion(n_item._id)

            linea_base = LineaBase(objeto['_nombre'], objeto['_descripcion'],
                                   fase, nItems)
            dao = LineaBaseDAO(request)
            dao.crear(linea_base)
            p = Pickler()
            aRet = p.flatten(linea_base)
            return Response(json.dumps({'sucess': 'true', 'entidades': aRet}))
        except FaseNoEncontradaException, e:
            print e
            return Response(json.dumps({'sucess': 'false'}))
        return Response(json.dumps({'sucess': 'false'}))
Esempio n. 5
0
    def actualizarEstadosFaseyProyecto(self, item):
        fase_dao = FaseDAO(self._request)
        proyecto_dao = ProyectoDAO(self._request)
        fase = fase_dao.get_by_id(item._fase_id)
        proyecto = proyecto_dao.get_by_id(fase._proyecto_id)

        if item._estado == 'ACTIVO':
            items_fase = self.get_items_fase(fase._id)
            cambiar = True
            for item_fase in items_fase:
                if item_fase._estado == 'REVISION' or item_fase._estado == 'COMPROMETIDO':
                    cambiar = False
            if (cambiar == True):
                if fase._estado != 'ACTIVA':
                    fase_dao.update_estado_entidad(fase._id, 'ACTIVA')
                if proyecto._estado != 'ACTIVO':
                    proyecto_dao.update_estado_entidad(proyecto._id, 'ACTIVO')
        elif item._estado == 'REVISION' or item._estado == 'COMPROMETIDO':
            if fase._estado != 'COMPROMETIDA':
                fase_dao.update_estado_entidad(fase._id, 'COMPROMETIDA')
            if proyecto._estado != 'COMPROMETIDO':
                proyecto_dao.update_estado_entidad(proyecto._id,
                                                   'COMPROMETIDO')
        elif item._estado == 'BLOQUEADO' or item._estado == 'APROBADO':
            items_fase = self.get_items_fase(fase._id)
            cambiarFinalizado = 0
            cambiarActivo = 0
            for item_fase in items_fase:
                if item_fase._estado == 'BLOQUEADO' or item_fase._estado == 'APROBADO':
                    cambiarFinalizado += 1
                if item_fase._estado == 'ACTIVO' or item_fase._estado == 'APROBADO':
                    cambiarActivo += 1
            if (cambiarFinalizado == len(items_fase)):
                if fase._estado != 'FINALIZADA':
                    fase_dao.update_estado_entidad(fase._id, 'FINALIZADA')
                if proyecto._estado != 'FINALIZADO':
                    proyecto_dao.update_estado_entidad(proyecto._id,
                                                       'FINALIZADO')
                return
            if (cambiarActivo == len(items_fase)):
                if fase._estado != 'ACTIVA':
                    fase_dao.update_estado_entidad(fase._id, 'ACTIVA')
                if proyecto._estado != 'ACTIVO':
                    proyecto_dao.update_estado_entidad(proyecto._id, 'ACTIVO')
Esempio n. 6
0
def obtener_crear_atributofase(request):
    """
    @summary: Maneja las solicitudes para obtener y crear atributos particulares de una fase.
    @param request: Get para recuperar y Post para crear.
    @return: En caso de recibir un Get retorna todos los atributos particulares de una fase en especifico.
        En caso de recibir un Post retorna el atributo particular creado.                 
    """
    if (request.method == 'GET'):
        id = request.GET.get('id')
        rd = AtributoFaseDAO(request)
        entidades = rd.get_query().filter(AtributoFase._fase_id == id).all()
        lista = [];
        p = Pickler()
        for entidad in entidades:
            lista.append(p.flatten(entidad))    
        j_string = p.flatten(lista)
        a_ret = json.dumps({'sucess': 'true', 'atributofase':j_string})

        return Response(a_ret)
    else:    
        #recibio un Post
        u = Unpickler()
        entidad = u.restore(request.json_body);
        
        dao = FaseDAO(request)
        fase = dao.get_by_id(entidad["_fase_id"])
    
        dao = AtributoFaseDAO(request)
        nuevo_atributo = AtributoFase(entidad["_nombre"], fase, entidad["_descripcion"], entidad["_valor"])
        dao.crear(nuevo_atributo)
        
        lista = []
        p = Pickler()
        lista.append(p.flatten(nuevo_atributo))
        j_string = p.flatten(lista)
        a_ret = json.dumps({'sucess': 'true', 'atributofase':j_string})
    
        return Response(a_ret)
Esempio n. 7
0
def obtener_crear_fases(request):
    """
    @summary: Maneja las solicitudes para obtener y crear fases.
              Las fases nuevas soportan por defecto un tipo de item.
    @param request: Get para recuperar y Post para crear.
    @return: En caso de recibir un Get retorna todas las fases de un proyecto en especifico.
        En caso de recibir un Post retorna la fase creada.
    """
    

    if (request.method == 'GET'):
        proyecto_id = request.GET.get('id')
        fase_id = request.GET.get('fase_id')
        
        rd = FaseDAO(request)
        lista = [];
        p = Pickler(False, None)
        #Codigo de fede
        if (fase_id != None and fase_id != ""):
            fase_actual = rd.get_by_id(fase_id)
            entidad = rd.get_query().filter(Fase._proyecto_id == proyecto_id, Fase._orden < fase_actual._orden).order_by(Fase._orden.desc()).first()
            if (entidad != None):
                entidadLinda = FaseLinda(entidad._id, entidad._nombre, entidad._proyecto_id, entidad._orden, entidad._comentario, entidad._estado, entidad._color)
                lista.append(p.flatten(entidadLinda))    
        elif (proyecto_id != None and proyecto_id != ""):
            #Codigo de leo
            #recuperamos todas las fases del proyecto
            entidades = rd.get_query().filter(Fase._proyecto_id == proyecto_id).all()
            for entidad in entidades:
                entidadLinda = FaseLinda(entidad._id, entidad._nombre, entidad._proyecto_id, entidad._orden, entidad._comentario, entidad._estado, entidad._color)
                lista.append(p.flatten(entidadLinda)) 
       
        j_string = p.flatten(lista)
        a_ret = json.dumps({'sucess': 'true', 'fases':j_string})    
        
        return Response(a_ret)
    else:
        #Recibimos un POST
        u = Unpickler()
        entidad = u.restore(request.json_body);
        
        dao = ProyectoDAO(request)
        proyecto = dao.get_by_id(entidad["_proyecto_id"])
    
        dao = FaseDAO(request)
        nueva_fase = Fase(entidad["_nombre"], proyecto, entidad["_orden"], entidad["_comentario"], entidad["_estado"], entidad["_color"])
        dao.crear(nueva_fase)
        
        #le asociamos el tipo de item
#        dao_tipo_item = TipoItemDAO(request)
#        tipo_item = dao_tipo_item.get_by_id(1)
#        nuevo_tipo_fase = TipoFase(nueva_fase,tipo_item)
#        dao_tipo_fase = TipoFaseDAO(request)
#        dao_tipo_fase.crear(nuevo_tipo_fase)
        
        lista = []
        p = Pickler()
        lista.append(p.flatten(nueva_fase))
        j_string = p.flatten(lista)
        a_ret = json.dumps({'sucess': 'true', 'fases':j_string})
    
        return Response(a_ret)
Esempio n. 8
0
def ag_atributos_tipos_item(request): 
    if (request.method == 'GET'):
        item_dao = ItemDAO(request)
        fase_id = request.GET.get('id')     
        #Parte cocho
        if request.GET.get('id_linea_base') != None:
            return get_items_con_linea_base(request)
        if request.GET.get('linea_base') == "false" and request.GET.get('id') != None:
            return get_items_sin_linea_base_con_fase(request);
         #END parte cocho
        if request.GET.get('esquema') != None:
            if request.GET.get('disponibles') == "true":
                todas = item_dao.get_items_fase(fase_id)
                entidades_item_id = item_dao.get_items_esquema(request.GET.get('esquema'))
                for item in todas : 
                    for entidad in entidades_item_id:
                        if item._id == entidad._id:
                            todas.remove(item) 
                entidades_item_id = todas
            else:
                entidades_item_id = item_dao.get_items_esquema(request.GET.get('esquema'))
        elif request.GET.get('tipo') == "ELIMINADO":
            entidades_item_id = item_dao.get_items_eliminados(fase_id)
        elif request.GET.get('tipo') == "VERSIONES":
            entidades_item_id = item_dao.get_items_por_version(request.GET.get("item_id"))
        elif fase_id == None:
            return Response(json.dumps({'sucess': 'true', 'lista':[]}))
        else: 
            entidades_item_id = item_dao.get_items_fase(fase_id);
        lista = [];
        p = Pickler(True, None)
        for entidad in entidades_item_id:
            rd = ItemDAO(request)
            padre = rd.get_by_id(entidad._padre_item_id)
            antecesor = rd.get_by_id(entidad._antecesor_item_id)
            entidadLinda = ItemDTO(entidad)
            if padre != None:
                entidadLinda._padre = ItemDTO(padre)
            if antecesor != None:
                entidadLinda._antecesor = ItemDTO(antecesor)
            lista.append(p.flatten(entidadLinda))
        j_string = p.flatten(lista)
        a_ret = json.dumps({'sucess': True, 'lista':j_string})
        
        return Response(a_ret)
    elif (request.method == 'POST'):
        u = Unpickler()
        entidad = u.restore(request.json_body);
        dao_fase = FaseDAO(request)
        fase = dao_fase.get_by_id(entidad["_fase"])
        
        if entidad['_tipo_item'] == '':
            return Response(json.dumps({'sucess': 'false', 'message':'Debe seleccionar un Tipo de Item para guardar'}))
        dao_tipo_item = TipoItemDAO(request)
        tipo_item = dao_tipo_item.get_by_id(entidad["_tipo_item"]["_id"])

        dao_item_ante = ItemDAO(request)
        if(entidad["_antecesor"] == "" or  entidad["_antecesor"] == None):
            antecesor = None
            antecesor_id = None
        else:
            antecesor = dao_item_ante.get_by_id(entidad["_antecesor"])
            antecesor_id = antecesor._id
        dao_item_padre = ItemDAO(request)
        if(entidad["_padre"] == "" or  entidad["_padre"] == None):
            padre = None
            padre_id = None
        else:
            padre = dao_item_padre.get_by_id(entidad["_padre"])
            padre_id = padre._id                          
        seq = Sequence('item_id_seq')
        item_id = DBSession.execute(seq)
        
        if entidad["_fecha_inicio"]!= None and len(entidad["_fecha_inicio"])>1:
            if entidad["_fecha_inicio"].find("T")>=0:
                formato_entrada = "%Y-%m-%dT%H:%M:%S"
                fecha_inicio = datetime.datetime.strptime(entidad["_fecha_inicio"],formato_entrada)
            else:
                formato_entrada = "%Y-%m-%d %H:%M:%S"
                fecha_inicio = datetime.datetime.strptime(entidad["_fecha_inicio"],formato_entrada)
        else:
            fecha_inicio = ""
        
        if padre != None and fecha_inicio != "":
            if len(padre._fecha_inicio) > 1:
                if padre._fecha_inicio.find("T")>=0:
                    formato_entrada = "%Y-%m-%dT%H:%M:%S"
                else:
                    formato_entrada = "%Y-%m-%d %H:%M:%S"
                padre_inicio = datetime.datetime.strptime(padre._fecha_inicio, formato_entrada)
                if fecha_inicio < padre_inicio:
                    return Response(json.dumps({'sucess': 'false', 'message':'La fecha es menor a la fecha de inicio del padre'}))
        if antecesor != None and fecha_inicio != "":
            if len(antecesor._fecha_inicio)>1:
                if antecesor._fecha_inicio.find("T")>=0:
                    formato_entrada = "%Y-%m-%dT%H:%M:%S"
                else:
                    formato_entrada = "%Y-%m-%d %H:%M:%S"
                antecesor_inicio = datetime.datetime.strptime(antecesor._fecha_inicio, formato_entrada)
                if fecha_inicio <  antecesor_inicio:
                    return Response(json.dumps({'sucess': 'false', 'message':'La fecha es menor a la fecha de inicio del antecesor'}))
        nuevo_item = Item(item_id, entidad["_nombre"], tipo_item, fase, entidad["_duracion"], entidad["_descripcion"], entidad["_condicionado"], entidad["_version"], entidad["_estado"], fecha_inicio, entidad["_completado"], padre_id, antecesor_id, entidad["_color"])
        itemDao = ItemDAO(request)
        itemDao.crear(nuevo_item)
        itemDao.actualizarEstadosFaseyProyecto(nuevo_item)
        nuevo_item = ItemDTO(nuevo_item)
        lista = []
        p = Pickler()
        lista.append(p.flatten(nuevo_item))

        j_string = p.flatten(lista)
        if (request.GET.get('actualizar') == "true"):
            if (request.GET.get('rev') == True):
                itemDao.actualizarReferenciasItemNuevaVersion(nuevo_item._id, entidad["_id"])
            else:
                itemDao.actualizarReferenciasItemNuevaVersion(nuevo_item._id)
        return Response(json.dumps({'sucess': 'true', 'lista':j_string}))
Esempio n. 9
0
def bm_atributo(request):
    if (request.method == 'PUT' or request.method == 'DELETE'):
        u = Unpickler()
        
        
        entidad = u.restore(request.json_body);
        item_dao = ItemDAO(request);
        dao_fase = FaseDAO(request)
        fase = dao_fase.get_by_id(entidad["_fase"]["_id"])
        
        dao_tipo_item = TipoItemDAO(request)
        tipo_item = dao_tipo_item.get_by_id((entidad["_tipo_item"]["_id"]))

        dao_item_ante = ItemDAO(request)
        if(entidad["_antecesor"] == "" or  entidad["_antecesor"] == None):
            antecesor = None
            antecesor_id = None
        else:
            if isinstance(entidad["_antecesor"], int) != True:
                antecesor_id = entidad["_antecesor"]["_id"]
                antecesor = dao_item_ante.get_by_id(antecesor_id)
            else:
                antecesor = dao_item_ante.get_by_id(entidad["_antecesor"])
                antecesor_id = antecesor._id
           
        dao_item_padre = ItemDAO(request)
        if(entidad["_padre"] == "" or  entidad["_padre"] == None):
            padre = None
            padre_id = None
        else:
            if isinstance(entidad["_padre"], int) != True:
                padre_id = entidad["_padre"]["_id"]
                padre = dao_item_padre.get_by_id(padre_id)
            else:
                padre = dao_item_padre.get_by_id(entidad["_padre"])
                padre_id = padre._id
        item_viejo = item_dao.get_by_id(entidad["id"])
        id_viejo = item_viejo._id;
        
        formato_entrada = "%Y-%m-%dT%H:%M:%S"
        if entidad["_fecha_inicio"]!= None and len(entidad["_fecha_inicio"])>1:
            if entidad["_fecha_inicio"].find("T")>=0:
                formato_entrada = "%Y-%m-%dT%H:%M:%S"
                fecha_inicio = datetime.datetime.strptime(entidad["_fecha_inicio"],formato_entrada)
            else:
                formato_entrada = "%Y-%m-%d %H:%M:%S"
                fecha_inicio = datetime.datetime.strptime(entidad["_fecha_inicio"],formato_entrada)
        else:
            fecha_inicio = ""
        
        if padre != None and fecha_inicio != "":
            if len(padre._fecha_inicio)>1:
                if padre._fecha_inicio.find("T")>=0:
                    formato_entrada = "%Y-%m-%dT%H:%M:%S"
                else:
                    formato_entrada = "%Y-%m-%d %H:%M:%S"
                padre_inicio = datetime.datetime.strptime(padre._fecha_inicio, formato_entrada)
                if fecha_inicio <  padre_inicio:
                    return Response(json.dumps({'sucess': 'false', 'message':'La fecha de inicio asignada es menor a la fecha de inicio del padre'}))
        if antecesor != None and fecha_inicio != "":
            if len(antecesor._fecha_inicio)>1:
                if antecesor._fecha_inicio.find("T")>=0:
                        formato_entrada = "%Y-%m-%dT%H:%M:%S"
                else:
                    formato_entrada = "%Y-%m-%d %H:%M:%S"
                if len(antecesor._fecha_inicio)>1:
                    antecesor_inicio = datetime.datetime.strptime(antecesor._fecha_inicio, formato_entrada)
                    if fecha_inicio <  antecesor_inicio:
                        return Response(json.dumps({'sucess': 'false', 'message':'La fecha de inicio asignada es menor a la fecha de inicio del antecesor'}))
        
        
        if entidad['_estado'] == "APROBADO":
            print "HOLAAAAAAAAAAAAAAAAAAAAAA"
            print entidad['_padre']
            item_padre = get_entidad(entidad['_padre'], item_dao)
            if (item_padre!= None):
                if item_padre._estado == 'ELIMINADO' or item_padre._estado == 'REVISION':
                    return Response(json.dumps({'sucess': 'false', 'message':('No se puede Aprobar. El Padre del Item se encuentra en estado: ' + str(item_padre._estado))}))
            else:
                item_antecesor = get_entidad(entidad['_antecesor'], item_dao)
                fase_antecesora = get_fase_antecesora(request, fase)
                if fase_antecesora != None:
                    if item_antecesor == None:
                        return Response(json.dumps({'sucess': 'false', 'message':'No se puede Aprobar. El Item no tiene antecesor ni padre'}))
                    else :
                        if item_antecesor._estado == 'ELIMINADO' or item_antecesor._estado == 'REVISION':
                            return Response(json.dumps({'sucess': 'false', 'message':('No se puede Aprobar. El Antecesor del Item se encuentra en estado: ' + str(item_antecesor._estado))}))
                        if item_antecesor._linea_base_id == None :
                            return Response(json.dumps({'sucess': 'false', 'message':'No se puede Aprobar. Antecesor no tiene linea base'}))

        nuevo_item = Item(item_viejo._item_id, entidad["_nombre"], tipo_item, fase, entidad["_duracion"], entidad["_descripcion"], entidad["_condicionado"], entidad["_version"], entidad["_estado"], fecha_inicio, entidad["_completado"], padre_id, antecesor_id, entidad["_color"])

        if request.method == "DELETE":
            nuevo_item._estado = "ELIMINADO"
            nuevo_item._version += 1

        item_dao.crear(nuevo_item);
        padre = item_dao.get_by_id(nuevo_item._padre_item_id)
        antecesor = item_dao.get_by_id(nuevo_item._antecesor_item_id)
        if (nuevo_item._estado == "APROBADO" or nuevo_item._estado == "BLOQUEADO") == False: 
            actualizar_referencias_item(nuevo_item, item_dao, id_viejo)
        else:
            actualizar_referencias_item(nuevo_item, item_dao, id_viejo, False)
        item_dao.actualizarEstadosFaseyProyecto(nuevo_item)
        nuevo_item = ItemDTO(nuevo_item)
        if padre != None:
            nuevo_item._padre = ItemDTO(padre)
        if antecesor != None:
            nuevo_item._antecesor = ItemDTO(antecesor)
        p = Pickler(False, None)
        aRet = p.flatten(nuevo_item)
        if (request.GET.get('actualizar') == "true"):
            if (request.GET.get('rev') == "true"):
                item_dao.actualizarReferenciasItemNuevaVersion(nuevo_item._id, entidad["id"])
            else:
                item_dao.actualizarReferenciasItemNuevaVersion(nuevo_item._id)
        return Response(json.dumps({'sucess': 'true', 'lista':aRet}))