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)
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 )
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
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
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
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)
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 )
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
def GET(self): usos = dbaccess.buscar_usos() propiedades = dbaccess.buscar_propiedades() return renderizador.usos(propiedades,usos)
def GET(self): maderas = dbaccess.buscar_maderas() propiedades = dbaccess.buscar_propiedades() return renderizador.maderas(propiedades,maderas)
def GET(self): propiedades = dbaccess.buscar_propiedades() # TODO: check why not work # return renderizador.propiedades(propiedades) return renderizador.propiedades(dbaccess.bd.propiedades.find())