Пример #1
0
def view_gantt(request):

    doc = Document()
    wml = doc.createElement("project")
    doc.appendChild(wml)

    id_proyecto = request.GET.get('id_proyecto')

    fase_dao = FaseDAO(request)
    fases = fase_dao.get_query().filter(
        Fase._proyecto_id == id_proyecto).order_by(Fase._orden.asc()).all()
    item_dao = ItemDAO(request)
    xml = "<project>"
    for fase in fases:
        task = Task()
        task.set_fase(fase)
        wml.appendChild(task.get_xml(doc))
        xml += task.to_xml()
        entidades = item_dao.get_items_fase(fase._id)
        for item in entidades:
            task = Task()
            task.set_item(item)
            wml.appendChild(task.get_xml(doc))
            xml += task.to_xml()

    xml += "</project>"
    #    print xml
    # Print our newly created XML
    #    print doc.toprettyxml(indent="  ")
    return Response(xml)
Пример #2
0
def calcular_impacto(request):
    id_item = request.GET.get("id")
    item_dao = ItemDAO(request)
    item = item_dao.get_by_id(id_item);
    impacto = CalculoImpacto(item, request);
    p = Pickler(False, None)
#    ret_json = p.flatten(CalculoImpactoDTO(item, antecesores, None))
    ret_json = p.flatten(impacto.calculo_impacto())
    a_ret = json.dumps({'sucess': 'true', 'impacto':ret_json})
    return Response(a_ret)
Пример #3
0
def get_items(request):
    dao = ItemDAO(request)
    entidades = dao.get_items_globales();
    p = Pickler();
    lista = [];
    for entidad in entidades:
        lista.append(p.flatten(EntidadPadreDTO(entidad)));
    j_string = p.flatten(lista)
    a_ret = json.dumps({'sucess': 'true', 'entidades':j_string})
    return Response(a_ret)
Пример #4
0
 def __init__(self, item, request):
     self.item = item
     self.dao = ItemDAO(request);
     self.linea_base_dao = LineaBaseDAO(request)
     self.item_unidad_dao = ItemUnidadDAO(request)
     self.unidad_recurso_dao = UnidadTrabajoRecursoDAO(request)
     self.recurso_dao = RecursoDAO(request)
     self.antecesores = []
     self.sucesores = []
     self.request = request
     self.item.calculado = True
     self.revisados_atras = []
     self.revisados_adelante = []
     self.revisados = []
Пример #5
0
def get_items_con_linea_base(request):
    rd = ItemDAO(request)
    linea_base_id = request.GET.get('id_linea_base')
    entidades = rd.get_query().filter(Item._linea_base_id == linea_base_id).all()
    lista = [];
    p = Pickler(True, None)
    for entidad in entidades:
        rd = ItemDAO(request)
#        padre = rd.get_by_id(entidad._padre_item_id)
#        antecesor = rd.get_by_id(entidad._antecesor_item_id)
        entidadLinda = ItemDTO(entidad) 
#        entidadLinda = ItemLindo(entidad._id, entidad._nombre, entidad._tipo_item, entidad._fase, entidad._duracion, entidad._descripcion, entidad._condicionado, entidad._version, entidad._estado, entidad._fecha_inicio, entidad._fecha_fin, padre, antecesor) 
        lista.append(p.flatten(entidadLinda))
    j_string = p.flatten(lista)
    a_ret = json.dumps({'sucess': True, 'lista':j_string})
    return Response(a_ret)
Пример #6
0
def AG_atributos_tipos_item(request): 
    if (request.method == 'GET'):
        if request.GET.get('_item_id') != None:
            item_id = request.GET.get('_item_id');
            itemDAO = ItemDAO(request)
            item = itemDAO.get_ultima_version_item_by_id(item_id);
            atributoTipoItemDAO = AtributoTipoItemDAO(request)
            atributosTipoItem = atributoTipoItemDAO.get_atributos_by_tipo_id(item._tipo_item_id)
    
                
            dao = ItemAtributoDAO(request) 
            entidades = dao.get_query().filter(ItemAtributo._item_id == item._id).all()
            p = Pickler()
            aRet = []
            aRet = atributosTipoItem
            if (request.GET.get('_no_definidos') == "true"):
                for ent in entidades:
                    for atributo in atributosTipoItem:
                        if ent._atributo_id == atributo._id:
                            aRet.remove(atributo);
            entidades = aRet
        else:        
            rd = AtributoTipoItemDAO(request)
            entidades = rd.get_atributos_by_tipo_id(request.GET.get('id'))
        lista = [];
        p = Pickler(True, None)
        for entidad in entidades:
            lista.append(p.flatten(entidad))
        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);
        atributoItemDao = AtributoTipoItemDAO(request);
        
        nueva_entidad = AtributoTipoItem(entidad["_tipo"], entidad["_valor"], entidad["_descripcion"], entidad["_opcional"], entidad["_defecto"], entidad["_tipo_item_id"])
        
        atributoItemDao.crear(nueva_entidad);
        
        lista = []
        p = Pickler()
        lista.append(p.flatten(nueva_entidad))
        j_string = p.flatten(lista)
        
        return Response(json.dumps({'sucess': 'true', 'lista':j_string}))
Пример #7
0
def get_items_sin_linea_base_con_fase(request):
    rd = ItemDAO(request)
    linea_base_id = request.GET.get('id_linea_base')
    fase_id = request.GET.get('id')
    entidades = rd.get_items_aprobados(fase_id);
#    entidades = rd.get_query().filter(Item._linea_base_id == None, Item._fase_id == fase_id).all()
    lista = [];
    p = Pickler(True, None)
    for entidad in entidades:
        if entidad._linea_base_id != None:
            continue;
        rd = ItemDAO(request)
#        padre = rd.get_by_id(entidad._padre_item_id)
#        antecesor = rd.get_by_id(entidad._antecesor_item_id)
        
        
        entidadLinda = ItemDTO(entidad) 
        lista.append(p.flatten(entidadLinda))
    j_string = p.flatten(lista)
    a_ret = json.dumps({'sucess': True, 'lista':j_string})
    return Response(a_ret)
Пример #8
0
def obtener_crear_unidad_trabajo(request):
    """
    @summary: Maneja las solicitudes para obtener y crear unidad de trabajo.
    @param request: Get para recuperar y Post para crear.
    @return: Retorna todos las unidades de trabajo en caso de recibir un Get.
        Retorna la unidad creada en caso de recibir una unidad de trabajo
    """
    if (request.method == 'GET'):
        rd = UnidadTrabajoDAO(request)
        unidades = [];
        unidades = rd.get_all()
        item_id = request.GET.get('_item_id')
#        print item_id
        if (item_id !=None):
            item_dao = ItemDAO(request)
#            unidades = item_dao.get_unidades_disponibles(item_dao.get_by_id(item_id))
            #####################################
            ###La parte comentada de abajo, trae las unidades como le gusta a cocho,
            ###osea, con ese return se podra asignar a cualquier item la misma unidad de trabajo
            ###si es que ya no tiene una asignada
            #####################################
            itemUnidadDao = ItemUnidadDAO(request)
            unidadesAsignadas = itemUnidadDao.get_query().filter(ItemUnidadTrabajo._item_id == item_id).all()
            for unidadAsignada in unidadesAsignadas:
                for unidad in unidades:
                    if (unidad._id == unidadAsignada._unidad_id):
                        unidades.remove(unidad)            
        lista = [];
        p = Pickler()
        for entidad in unidades:
            lista.append(p.flatten(entidad))    
        j_string = p.flatten(lista)
        a_ret = json.dumps({'sucess': 'true', 'unidadtrabajo':j_string})    
        
        return Response(a_ret)
    else:
        #Recibio un Post
        u= Unpickler()
        entidad = u.restore(request.json_body);
        
        nueva_unidad_trabajo = UnidadTrabajo(entidad["_nombre"],entidad["_etiqueta"],entidad["_descripcion"],entidad["_color"])
        dao = UnidadTrabajoDAO(request)
            
        dao.crear(nueva_unidad_trabajo)
        
        lista = []
        p = Pickler()
        lista.append(p.flatten(nueva_unidad_trabajo))
        j_string = p.flatten(lista)
        a_ret = json.dumps({'sucess': 'true', 'unidadtrabajo':j_string})
    
        return Response(a_ret)
Пример #9
0
 def get_dao(self, clase, request):
     if clase not in self.daos:
         if clase == Item:
             self.daos[Item] = ItemDAO(request)
         if clase == Fase :
             self.daos[Fase] = FaseDAO(request)
         if clase == Proyecto :
             self.daos[Proyecto] = ProyectoDAO(request)
         if clase == LineaBase :
             self.daos[LineaBase] = LineaBaseDAO(request)
         if clase == Esquema :
             self.daos[Esquema] = EsquemaDAO(request)
     return self.daos[clase]
Пример #10
0
def upload(request):
    id_item = request.params['id_item'],
    
    archivo = request.params['archivo'].file.read()
    nombre = request.params['archivo'].filename
    
    archivo_dao = ArchivoDAO(request)
    nuevo_archivo = Archivo(archivo, nombre)
    archivo_dao.crear(nuevo_archivo)
    
    item_dao = ItemDAO(request)
    item = item_dao.get_by_id(id_item)
    
    item_archivo_dao = ItemArchivoDAO(request)
    nuevo_item_archivo = ItemArchivo(item, nuevo_archivo)
    item_archivo_dao.crear(nuevo_item_archivo)
    
#    response= Response(content_type='application/force-download',content_disposition='attachment; filename=' + nuevo_archivo._nombre)
#    response.app_iter= nuevo_archivo._contenido
#    return response
    item_dao.actualizarReferenciasItemNuevaVersion(id_item)
    return Response(json.dumps({'success': True}))
Пример #11
0
def editar_atributo_item(request):
    if (request.method == 'PUT'):
        u = Unpickler()
        
        entidad = u.restore(request.json_body);
        dao = ItemAtributoDAO(request)
        item_atributo = dao.get_by_id(entidad["id"])
        item_dao = ItemDAO(request)
        item_atributo._valor  = entidad["_valor"]
        
        dao.update(item_atributo);
        return Response(json.dumps({'sucess': 'true'}))
        
    elif (request.method == 'DELETE'):
        u = Unpickler()
        entidad = u.restore(request.json_body);
       
        dao = ItemAtributoDAO(request)
        item_unidad = dao.get_by_id(entidad["id"])
        dao.borrar(item_unidad)
        return Response(json.dumps({'sucess': 'true'}))
        
        
Пример #12
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'}))
Пример #13
0
            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'}))
    if (request.method == "DELETE"):
        try:
            id_linea_base = request.matchdict['id']
            item_dao = ItemDAO(request)
            romper_linea_base(request, id_linea_base, item_dao)
            return Response(json.dumps({'sucess': 'true'}))
        except FaseNoEncontradaException, e:
            print e
            return Response(json.dumps({'sucess': 'false'}))
        return Response(json.dumps({'sucess': 'false'}))


def romper_linea_base(request, id_linea_base, item_dao, estado="APROBADO"):
    dao = LineaBaseDAO(request)
    entidad = dao.get_by_id(id_linea_base)
    if entidad == None:
        return
    bases_afectadas = []
    for item in entidad._items:
Пример #14
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}))
Пример #15
0
def guardar_obtener_atributo(request):
    if (request.method == 'POST'):
        u = Unpickler()
        
        entidad = u.restore(request.json_body);
        dao = ItemAtributoDAO(request)
        item_dao = ItemDAO(request)
        item = item_dao.get_by_id(entidad["_item_id"])
        a_tipo_dao = AtributoTipoItemDAO(request)
        
        asignacion = ItemAtributo(entidad["_item_id"], entidad["_atributo_id"], entidad["_valor"] )
        dao.crear(asignacion);
        asignacion._item = item
        atributo = a_tipo_dao.get_by_id(entidad["_atributo_id"])
        asignacion._atributo = atributo 
        asignacion = ItemAtributoDTO(asignacion)
        p = Pickler(True, None)
        aRet = p.flatten(asignacion)
        item_dao.actualizarReferenciasItemNuevaVersion(item._id)
        return Response(json.dumps({'sucess': 'true', 'lista':aRet}))
    elif (request.method == 'GET'):
        item_id = request.GET.get('_item_id');
        p = Pickler(True, None)
        if (item_id == 0 or item_id == "0" or item_id == None):
            j_string = p.flatten([])
            a_ret = json.dumps({'sucess': True, 'lista':j_string})
            return Response(a_ret)
        itemDAO = ItemDAO(request)
        item = itemDAO.get_by_id(item_id);
        atributoTipoItemDAO = AtributoTipoItemDAO(request)
        atributosTipoItem = atributoTipoItemDAO.get_atributos_by_tipo_id(item._tipo_item_id)
#        lista=[]
#        for atributo in atributosTipoItem:
#            dao = ItemAtributoDAO(request) 
#            actual = dao.get_query().filter(ItemAtributo._item_id == item.id , ItemAtributo._atributo_id == atributo._id).order_by(ItemAtributo._version.desc()).first();
#            if actual != None:
#                lista.append(actual)
#        aRet = []
#        if (len(lista)==0):

            
        dao = ItemAtributoDAO(request) 
        entidades = dao.get_query().filter(ItemAtributo._item_id == item._id).all()
       
        aRet = entidades
        
        for atributov in atributosTipoItem:
            if atributov._opcional == False:
                itemAtributo = ItemAtributo(item.id , atributov._id, atributov._defecto)
#                itemAtributo._item = item
#                itemAtributo._atributo = atributo
#                itemAtributoDTO = ItemAtributoDTO(itemAtributo)
                if len(entidades)==0:
                    dao.crear(itemAtributo);
                    aRet.append(itemAtributo)
#                else:
#                    for entidad in entidades:
#                        if (itemAtributo._atributo_id != entidad._atributo_id):
#                            aRet.append(itemAtributo)
        entidadesDTO = [];
        for entidad in aRet:
            dao = AtributoTipoItemDAO(request)
            atributo = dao.get_by_id(entidad._atributo_id)
            entidad._item = item
            entidad._atributo = atributo
            itemAtributoDTO = ItemAtributoDTO(entidad);
            entidadesDTO.append(itemAtributoDTO)
        
        
        
        j_string = p.flatten(entidadesDTO)
        a_ret = json.dumps({'sucess': True, 'lista':j_string})
        
        return Response(a_ret)
Пример #16
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}))
Пример #17
0
class CalculoImpacto:
    def __init__(self, item, request):
        self.item = item
        self.dao = ItemDAO(request);
        self.linea_base_dao = LineaBaseDAO(request)
        self.item_unidad_dao = ItemUnidadDAO(request)
        self.unidad_recurso_dao = UnidadTrabajoRecursoDAO(request)
        self.recurso_dao = RecursoDAO(request)
        self.antecesores = []
        self.sucesores = []
        self.request = request
        self.item.calculado = True
        self.revisados_atras = []
        self.revisados_adelante = []
        self.revisados = []
        
    def imprimir_items(self, items):
        for item in items:
            print "\tITEM con NOMBRE: " + item._nombre
        
    def calculo_impacto(self):
#        self.calculo_impacto_atras(self.item)
#        self.calculo_impacto_adelante(self.item)
        self._calculo_impacto(self.item)
        
        bases = self.verificar_lineas_base(self.antecesores, [])
        bases = self.verificar_lineas_base(self.sucesores, bases)
        bases = self.verificar_linea_base_item(self.item, bases)
        costo_antecesores = self.calcular_costo_items(self.antecesores)
        costo_sucesores = self.calcular_costo_items(self.sucesores)
        return CalculoImpactoDTO(self.item, self.antecesores, self.sucesores, bases, costo_antecesores, costo_sucesores)
        
    
    def verificar_lineas_base (self, items, bases):
        for item in items:
            item_fresco = self.dao.get_ultima_version_item_by_id(item._item_id)
            linea = self.linea_base_dao.get_by_id(item_fresco._linea_base_id)
            if linea != None and self._esta_adentro(linea, bases) == False:
                bases.append(linea)
        return bases
    
    def verificar_linea_base_item(self, item, bases):
        if item._linea_base_id == None:
            return bases;
        linea = self.linea_base_dao.get_by_id(item._linea_base_id)
        if linea != None and self._esta_adentro(linea, bases) == False:
            bases.append(linea)
        return bases
    
    
        
    def _calculo_impacto(self, item, lista=AUX_NADA):
        if item == None: 
            return
        if self._esta_adentro(item, self.revisados) == False:
            self.revisados.append(item)
        else:
            return
        
        #ATRAS
        antecesor = self.get_item(item._antecesor_item_id)
        if antecesor != None:
            if lista == "":
                self._calculo_impacto(antecesor, AUX_ATRAS)
            if lista == AUX_ATRAS:
                self._calculo_impacto(antecesor, lista)
        padre = self.get_item(item._padre_item_id)
        if padre != None:
            if lista == AUX_NADA:
                self._calculo_impacto(padre, AUX_ATRAS)
            if lista == AUX_ATRAS:
                self._calculo_impacto(padre, lista)

        #ADELANTE
        hijos = self.dao.get_query().filter(Item._padre_item_id == item._id).all()
        for hijo in hijos:
            hijo_ultima_version = self.dao.get_ultima_version_item_by_id(hijo._item_id)
            if hijo_ultima_version._padre_item_id == item._id:
                if lista == AUX_NADA:
                    self._calculo_impacto(hijo_ultima_version, AUX_SUCESOR)
                if lista == AUX_SUCESOR :
                    self._calculo_impacto(hijo_ultima_version, lista)
                    

        sucesores = self.dao.get_query().filter(Item._antecesor_item_id == item._id).all()
        for sucesor in sucesores:
            sucesor_ultima_version = self.dao.get_ultima_version_item_by_id(sucesor._item_id)
            if sucesor_ultima_version._antecesor_item_id == item._id:
                if lista == AUX_NADA:
                    self._calculo_impacto(sucesor_ultima_version, AUX_SUCESOR)
                if lista == AUX_SUCESOR:
                    self._calculo_impacto(sucesor_ultima_version, lista)
                    

        if lista == AUX_SUCESOR:
            self.sucesores.append(item)
        if lista == AUX_ATRAS:
            self.antecesores.append(item)
        

    def get_item(self, item_id):
        if item_id == None:
            return None
        item_temporal = self.dao.get_by_id(item_id)
        antecesor = self.dao.get_ultima_version_item_by_id(item_temporal._item_id)
        return antecesor
    
    def _esta_adentro(self, item, lista):
        for entidad in lista:
            if entidad._id == item._id:
                return True;
        return False
    
    def calcular_costo_items(self, items):
        costo = 0;
        for item in items:
            costo_item = self.costo_item(item)
            item._costo = costo_item;
            costo += costo_item;
        return costo;
    
    def costo_item(self, item):
        items_unidades = self.item_unidad_dao.get_query().filter(ItemUnidadTrabajo._item_id == item._id).all();
        costo = 0;
        for item_unidad in items_unidades:
            costo_unidad = self.costo_unidad(item_unidad._unidad_id)
            costo += costo_unidad
        return costo
        

    def costo_unidad(self, unidad_id):
        unidad_recursos = self.unidad_recurso_dao.get_query().filter(UnidadTrabajo_Recurso._unidad_trabajo_id == unidad_id).all()
        costo = 0
        for unidad_recurso in unidad_recursos:
            recurso = self.recurso_dao.get_by_id(unidad_recurso._recurso_id)
            costo += self.get_costo_recurso(recurso)
        return costo
            
    def get_costo_recurso(self, recurso):
        if isinstance(recurso, RecursoPersona) :
            return recurso._costo_hora
        return recurso._costo_cantidad