Jump to content

Edit History

ps8modules

ps8modules

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);
        }
    }

 

ps8modules

ps8modules

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.

×
×
  • Create New...