def prueba_rollo(codigo=None): """ Si no se especifica, manda el último rollo (A) fabricado. """ if not codigo: r = pclases.Rollo.select(orderBy="-id")[0] else: try: r = pclases.Rollo.selectBy(codigo=codigo)[0] except IndexError: # Será un rollo B entonces. try: r = pclases.RolloDefectuoso.selectBy(codigo=codigo)[0] except IndexError: # Es un rollo C. No queda otra. r = pclases.RolloC.selectBy(codigo=codigo)[0] logging.info("Insertando rollo %s (%s) [%s]...", r.codigo, r.articulo.productoVenta.descripcion, r.puid) murano.create_rollo(r) if r.articulo.parteDeProduccion: logging.warning( "WARNING: Considerando consumos del parte de producción completo.") for c in r.articulo.parteDeProduccion.consumos: logging.info("Consumiendo %f de %s...", c.cantidad, c.productoCompra.descripcion) murano.consumir(c.productoCompra, c.cantidad) # Para probar, consumiré la partida de carga completa: if r.articulo.parteDeProduccion.partidaCarga: for b in r.articulo.parteDeProduccion.partidaCarga.balas: # El almacén donde estaba la bala **antes** de consumirla está # en Murano. En ginn el almacén es None. Confiamos en Murano # (mediante la función delete_articulo del módulo murano) # para buscar e indicar de qué almacén debe consumir la bala. # Sería muy complicado (y más lento) determinarlo en ginn antes # de lanzar el consumo a la pasarela. logging.info("Consumiendo %s (%s)...", b.codigo, b.puid) murano.delete_articulo(b.articulo)
def prueba_objeto(objeto, consumir=False): """ Inserta el objeto recibido, sea del tipo de producto que sea. """ # pylint: disable=too-many-branches if isinstance(objeto, (pclases.Rollo, pclases.RolloDefectuoso, pclases.RolloC)): if not consumir: logging.info("Insertando rollo %s (%s)...", objeto.codigo, objeto.puid) murano.create_rollo(objeto) else: prueba_rollo(objeto.codigo) elif isinstance(objeto, (pclases.Bala, pclases.BalaCable)): if not consumir: logging.info("Insertando bala %s (%s)...", objeto.codigo, objeto.puid) murano.create_bala(objeto) else: prueba_bala(objeto.codigo) elif isinstance(objeto, pclases.Bigbag): if not consumir: logging.info("Insertando bigbag %s (%s)...", objeto.codigo, objeto.puid) murano.create_bigbag(objeto) else: prueba_bigbag(objeto.codigo) elif isinstance(objeto, pclases.Caja): if not consumir: logging.info("Insertando caja %s (%s)...", objeto.codigo, objeto.puid) murano.create_caja(objeto) else: raise NotImplementedError("No se permite la creación de cajas " "sueltas con consumo. Se debe insertar" " el palé completo.") # prueba_caja(objeto.codigo) elif isinstance(objeto, pclases.Pale): if not consumir: logging.info("Insertando palé %s (%s)...", objeto.codigo, objeto.puid) murano.create_pale(objeto) else: prueba_pale(objeto.codigo) else: raise NotImplementedError("%s no soportado" % (objeto.puid))