Exemplo n.º 1
0
 def POST(self):
     """ Graba un objeto Uso con el respectivo mapeo """
     u = model.Uso()
     data = web.input()
     u.id_uso = data.id_uso
     u.nombre = data.nombre
     # se debe recorrer todas las propiedades existentes
     for p in dbaccess.buscar_propiedades():
         id_p = p.get('id_propiedad')
         val_min = data['%s-min' % id_p]
         val_max = data['%s-max' % id_p]
         if val_min or val_max:
             if val_min and val_max:
                 val_min = int(val_min)
                 val_max = int(val_max)
                 # asegurando efectivamente el orden de los valores
                 a,b = val_min, val_max
                 val_min, val_max = min(a,b), max(a,b)
             elif not val_max: 
                 #val_max = None ...
                 val_min = int(val_min)                    
             elif not val_min:
                 #val_min = None ...
                 val_max = int(val_max)
             u.propiedades[id_p] = model.Rango(val_min,val_max)
     dbaccess.grabar_uso(u) 
Exemplo n.º 2
0
def analizar_uso(uso):
    """ 
    Determina todas las maderas que son compatibles con un uso dado
    """ 
    maderas_analisis = []
    maderas_compatibles = []
    for madera in dbaccess.buscar_maderas():
        madera_analisis = {}
        analisis = []
        for pbd in dbaccess.buscar_propiedades():
            k = pbd.get('id_propiedad')
            if not madera.propiedades.get(k) or not uso.propiedades.get(k): 
                c = model.Compatibilidad(k,None,None)
            elif not uso.propiedades[k].min and madera.propiedades[k] <= uso.propiedades[k].max:
                c = model.Compatibilidad(k,True,pbd.get('obligatoria',''))
            elif not uso.propiedades[k].max and madera.propiedades[k] >= uso.propiedades[k].min:
                c = model.Compatibilidad(k,True,pbd.get('obligatoria',''))
            elif uso.propiedades[k].min <= madera.propiedades[k] <= uso.propiedades[k].max:
                c = model.Compatibilidad(k,True,pbd['obligatoria'])
            else:
                c = model.Compatibilidad(k,False,pbd['obligatoria'])
            analisis.append(c)
        madera_analisis['nombre_madera'] = madera.nombre
        madera_analisis['analisis'] = analisis
        maderas_analisis.append(madera_analisis)
        print uso.nombre,'=>',madera.nombre
        print procesar_presentacion(analisis)
        incompatibles = incompatibilidades(analisis)
        print incompatibles
        if len(madera.propiedades) > 0 and len(incompatibles) == 0:
            maderas_compatibles.append(madera)
            print 'Es COMPATIBLE :)'
        else:
            print 'Es INCOMPATIBLE :('
    return ( maderas_compatibles, maderas_analisis )
Exemplo n.º 3
0
def load_usos_xls(file=path_dbs+'/excel/USOS.xls'):
    """
    Carga los datos de los Rangos codificados de los usos 
    NOTA: Es requisito que en primer lugar esten cargadas las propiedades
    """
    usos = []
    book = xlrd.open_workbook(file)
    sheet = book.sheet_by_index(0)
    # usos
    for r in range(3,sheet.nrows):
        if sheet.cell(r,0).value in ('','CODIGO','PRODUCTO A FABRICAR CON MADERA'): continue
        uso = model.Uso()
        uso.nombre = sheet.cell(r,0).value
        for c in range(1,sheet.ncols):
            if sheet.cell(r,c).value == '': continue
            value = sheet.cell(r,c).value
            minval = int(value.lower().split('a')[0])
            maxval = int(value.lower().split('a')[1])
            #uso.propiedades[c] = {'min':minval ,'max':maxval}
            #uso.propiedades[str(c)] = model.Rango(minval ,maxval)
            # usamos el encabezado para obtener el código de la propiedad
            cod = sheet.cell(2,c).value
            cod = cod.replace(' ','')
            rs = dbaccess.buscar_propiedades(codigo=cod)
            if rs[0]: 
                prop = rs[0]
                uso.propiedades[prop.get('id_propiedad')] = model.Rango(minval ,maxval)
            # otra alternativa
            #uso.propiedades[codigo] = model.Rango(minval ,maxval)
        usos.append(uso)
    return usos
Exemplo n.º 4
0
 def GET(self):
     propiedades = dbaccess.buscar_propiedades()
     uso = None
     if 'id_uso' in web.input():
         id_uso = web.input().id_uso
         uso = dbaccess.buscar_uso(id_uso)
     if uso:
         if len(uso.propiedades) > 0:
             maderas_compatibles, maderas_analisis = logic.analizar_uso(uso)
             return renderizador.analizar_uso(propiedades,uso,maderas_compatibles,maderas_analisis)
         else:
             return "El uso << %s >> no tiene propiedades que analizar" % uso.nombre
Exemplo n.º 5
0
 def GET(self):
     propiedades = dbaccess.buscar_propiedades()
     #madera = model.Madera()
     madera = None
     if 'id_madera' in web.input():
         id_madera = web.input().id_madera
         madera = dbaccess.buscar_madera(id_madera)
     if madera:
         if len(madera.propiedades) > 0:
             usos_compatibles, usos_analisis = logic.analizar_madera(madera)
             return renderizador.analizar_madera(propiedades,madera,usos_compatibles,usos_analisis)
         else:
             return "La madera << %s >> no tiene propiedades que analizar" % madera.nombre
Exemplo n.º 6
0
 def POST(self):
     """ Graba una madera """
     m = model.Madera()
     data = web.input()
     m.id_madera = data.id_madera
     m.nombre = data.nombre
     # Se debe recorrer todas las propiedades existentes
     for p in dbaccess.buscar_propiedades():
         id_p = p.get('id_propiedad')
         valor =  data['prop-'+id_p]
         if valor: 
             m.propiedades[id_p] = int(data['prop-'+id_p])
     dbaccess.grabar_madera(m)
Exemplo n.º 7
0
def analizar_madera(madera):
    """ 
    Analiza la compatibilidad una  madera. 
    Determinando todos los usos compatibles 
    """ 
    print madera.nombre
    usos_analisis = []
    usos_compatibles = []
    for uso in dbaccess.buscar_usos():
        analisis = [] # para cada uso
        uso_analisis = {} # tiene dos partes
        presentacion = {}
        # se retornarán solo las propiedades que constan en el 'uso'
        #for k in uso.propiedades.keys():...
        for pbd in dbaccess.buscar_propiedades():
            k = pbd.get('id_propiedad') 
            # propiedad no existe en 'uso' o en 'madera'
            if not uso.propiedades.get(k) or not madera.propiedades.get(k):
                #c = model.Compatibilidad(k,None,None)
                c = model.Compatibilidad(k,True,False)
            elif not uso.propiedades[k].min and madera.propiedades[k] <= uso.propiedades[k].max:
                c = model.Compatibilidad(k,True,pbd.get('obligatoria',''))
            elif not uso.propiedades[k].max and madera.propiedades[k] >= uso.propiedades[k].min:
                c = model.Compatibilidad(k,True,pbd.get('obligatoria',''))
            elif uso.propiedades[k].min <= madera.propiedades[k] <= uso.propiedades[k].max:
                c = model.Compatibilidad(k,True,pbd.get('obligatoria',''))
            else:
                c = model.Compatibilidad(k,False,pbd.get('obligatoria',''))
            analisis.append(c)
        #se puede colocar todo el objeto uso....
        uso_analisis['nombre_uso'] = uso.nombre
        uso_analisis['analisis'] = analisis
        usos_analisis.append(uso_analisis)
        # por necesidad de presentacion del nombre del uso
        presentacion = procesar_presentacion(analisis)
        presentacion['nombre_uso'] = uso.nombre
        print uso.nombre, presentacion
        incompatibles = incompatibilidades(analisis)
        #if len(uso.propiedades) > 0 and len(incompatibles) == 0:
        if len(incompatibles) == 0:
            usos_compatibles.append(uso)
            print incompatibles,'Es COMPATIBLE :)'
        else:
            print incompatibles,'Es INCOMPATIBLE :('
    return ( usos_compatibles, usos_analisis )
Exemplo n.º 8
0
def load_maderas_xls(file=path_dbs+'/excel/MADERAS.xls'):
    """ Carga las propiedades codificadas ya establecidas de las maderas """
    maderas = []
    book = xlrd.open_workbook(file)
    sheet = book.sheet_by_index(0)
    for r in range(3,sheet.nrows):
        if sheet.cell(r,0).value in ('','CODIGO','PRODUCTO A FABRICAR CON MADERA'): continue
        madera = model.Madera()
        for c in range(1,sheet.ncols):
            if sheet.cell(r,c).value == '': continue
            val = int(sheet.cell(r,c).value)
            cod = sheet.cell(2,c).value.replace(' ','')
            rs = dbaccess.buscar_propiedades(codigo=cod)
            if rs[0]: 
                prop = rs[0]
                madera.propiedades[prop.get('id_propiedad')] = val
                madera.nombre = sheet.cell(r,0).value
        maderas.append(madera)
    return maderas
Exemplo n.º 9
0
 def GET(self):
     usos = dbaccess.buscar_usos()
     propiedades = dbaccess.buscar_propiedades()
     return renderizador.usos(propiedades,usos)
Exemplo n.º 10
0
 def GET(self):
     maderas = dbaccess.buscar_maderas()
     propiedades = dbaccess.buscar_propiedades() 
     return renderizador.maderas(propiedades,maderas)
Exemplo n.º 11
0
 def GET(self):
     propiedades = dbaccess.buscar_propiedades()
     # TODO: check why not work
     # return renderizador.propiedades(propiedades)
     return renderizador.propiedades(dbaccess.bd.propiedades.find())