Jump to content

Příkaz pro SQL na hromadnou editaci skladové zásoby


Celsi

Recommended Posts

Ahoj prestashopáci,

nevěděl by někdo jak hromadně poslat příkat SQL abych ovlivnil skladovou zásobu všech produktů (včetně variant) co mají společný kód (refference)?

Jediný co umím je pro daný produkt:

UPDATE `ps_stock_available` SET `quantity` = '55' WHERE `ps_stock_available`.`id_stock_available` = 20118;

 

Ale jak docílit toho že by se projela celá databáza a když bude mít produkt například kód ve variantě ABC123, skladová zásoba 10 tak se tato hodnota propíše do všech produktů. Ať už to bude produkt bez variant nebo s variantou.

Lze to nějak?

Link to comment
Share on other sites

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

 

Edited by ps8moduly.cz (see edit history)
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...