Jump to content

overrride StockAvailable funcion getQuantityAvailableByProduct


zorrobsas

Recommended Posts

hola, necesito cambiar el origen de donde obtengo el stock disponible. Lo que hice fue hacer un override de StockAvailable. El stock me lo retonar en la ficha del producto sin problemas, el inconveniente que tengo es que una vez que obtiene el stock con mi función modificada. Me deja de funcionar el añadir el producto al carrito. La verdad que he estado buscando, y no se en que estoy fallando. Alguien me puede decir que se ejecuta al momento de hacer el click en el add-to-cart ?
 
 
class StockAvailable extends StockAvailableCore
{
 
    public static function getQuantityAvailableByProduct($id_product = null, $id_product_attribute = null, $id_shop = null)
    {
 
....
$ch=curl_init($url);
....
$stock = json_decode($ch);
$cantidadStock = (int)$stock->stock;
curl_close($ch);
...
return $cantidadStock;
 
    }

 

Link to comment
Share on other sites

hola Javier, el error se daba porque a la función al momento de hacer el add_to_cart en una de todas las pasadas que hace por la función pasa idProduct = 0. El problema ahora es que no encuentro de donde hace el llamado para que le pase un idproduct vacio/nulo/cero.

 

Acote la clase para hacer la prueba

class StockAvailable extends StockAvailableCore
{
    public static function getQuantityAvailableByProduct($id_product = null, $id_product_attribute = null, $id_shop = null)
    {
    PrestaShopLogger::addLog(' Pasa por clase over', 1, null, 'over', (int)$id_product, true);
    return 1000; 
    }
}
Link to comment
Share on other sites

Buenas, entiendo que aun sigues teniendo el problema.

por lo ultimo que escribes, entiendo que en algun momento se llamana a getQuantityAvailableByProduct con $id_product null, verdad?

 

Si lo colocas en la funcion te va a permitir ver su pila de llamadas.

 

$e = new \Exception;
var_dump($e->getTraceAsString());
 
eso lo pones en un if con id_product = 0 , null o lo que sea.
Edited by rimander (see edit history)
  • Like 1
Link to comment
Share on other sites

Buenos,

 

En si no era un error sino un funcionamiento de prestashop.

 

Al momento de agregar al carro. se llama desde CartController a 

 

if ($this->id_product_attribute) {
            if (!Product::isAvailableWhenOutOfStock($product->out_of_stock) && !Attribute::checkAttributeQty($this->id_product_attribute, $qty_to_check)) {
                $this->errors[] = $this->trans('There are not enough products in stock', array(), 'Shop.Notifications.Error');
            }
        } elseif (!$product->checkQty($qty_to_check)) {
            $this->errors[] = $this->trans('There are not enough products in stock', array(), 'Shop.Notifications.Error');
        }
 
la funcion para Null ya que el id Atributo hace referencia al idProducto. 
 
    public static function checkAttributeQty($idProductAttribute, $qty, Shop $shop = null)
    {
        if (!$shop) {
            $shop = Context::getContext()->shop;
        }
 
        $result = StockAvailable::getQuantityAvailableByProduct(null, (int) $idProductAttribute, $shop->id);
 
        return ($result && $qty <= $result);
    }
 
En mi caso como consumo un webservice externo y me manejo solo con ID me terminaba retornando Error y no me agregaba nada al carro. Espero que se entienda. SAludos
  • Like 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...