Ahoj.
Takto je to špatné.
Rozumnější je napsat PHP script.
V tabulce ps_stock_available se u produktu s kombinacemi zapisuje hodnota pro danou kombinaci a poté součet všech kombinací.
Script by použil dostupné PrestaShop funkce a bylo by vystaráno.
Ukázka:
<?php header("Access-Control-Allow-Origin: *"); include('../config/config.inc.php'); include('../init.php'); $context = Context::getContext(); $db = Db::getInstance(); $findReference = 'ABC123'; $newQty = '10'; $getProducts = $db->executeS("SELECT id_product FROM "._DB_PREFIX_."product WHERE reference LIKE '%".$findReference."%'"); $getProductsAttribute = $db->executeS("SELECT id_product, id_product_attribute FROM "._DB_PREFIX_."product_attribute WHERE reference LIKE '%".$findReference."%'"); if ($getProducts) { foreach ($getProducts as $p) { $hasAttributes = $db->getValue('SELECT COUNT(id_product_attribute) as $cnt FROM '._DB_PREFIX_.'product_attribute WHERE id_product = '.$p['id_product']); if ($hasAttributes > 0) { // existují atributy pro produkt s referencí $findReference, měl by se počet rozdělit mezi všechny kombinace ? /* upravit dle potřeby, například dělit počet $getQty = ($newQty / $hasAttributes); if (is_float($getQty)) { $quantity = floor($getQty); $rest = ($newQty - ($quantity * $hasAttributes)); // zbytek po dělení, to znamená, že musíme jednomu atributu přičíst zbytek } else { $quantity = $qty; $rest = 0; } $getAllAttributes = $db->executeS('SELECT id_product_attribute FROM '._DB_PREFIX_.'product_attribute WHERE id_product = '.$p['id_product']); $i = 0; foreach ($getAllAttributes as $ga) { $i++; if ($rest > 0) { if ($i == '1') { StockAvailable::updateQuantity($p['id_product'], $ga['id_product_attribute'], ($quantity + $rest)); } else { StockAvailable::updateQuantity($p['id_product'], $ga['id_product_attribute'], $quantity); } } } */ } else { StockAvailable::updateQuantity($p['id_product'], '0', $newQty); } } } if ($getProductsAttribute) { foreach ($getProductsAttribute as $pa) { StockAvailable::updateQuantity($pa['id_product'], $pa['id_product_attribute'], $newQty); } }