Posting in the Magento forums has been disabled pending the implementation of a new and improved forum solution which should better serve the community.

For new questions please post at magento.stackexchange.com, the community-run support site for the Magento community. We will be providing updates on the new forum solution soon. For questions or concerns please email community@magento.com.

Magento Forum

Aggiornamento quantità prodotti
 
Soniag001
Member
 
Total Posts:  51
Joined:  2012-02-19
 

Avrei necessità di aggioranre le quantità dei prodotti del mio e-commerce in base alle giacenze sul mio gestionale.
Premesso che di cambiare gestionale non se ne parla, che ho già una procedura funzionante fatta sfruttando le api di magento ma che mi da alcuni problemi volevo provare a sfruttare un web services in .net che già uso per altre cose su db e fare aggiornare a lui le quantità.

Ho verificato che basterebbe trovare la sku sj catalog_product_entity e una volta trovato il product_id andare su cataloginventory_stock_item e aggiornare la quantità. Ho fatto una prova manualmente e tutto sembra funzionare, per vostra esperienza può essere una cosa che va bene? devo aggiornare altre tabelle?

 
Magento Community Magento Community
Magento Community
Magento Community
 
TreInnova
Guru
 
Avatar
Total Posts:  465
Joined:  2009-02-20
Fano
 
Soniag001 - 25 July 2013 07:07 AM

Avrei necessità di aggioranre le quantità dei prodotti del mio e-commerce in base alle giacenze sul mio gestionale.
Premesso che di cambiare gestionale non se ne parla, che ho già una procedura funzionante fatta sfruttando le api di magento ma che mi da alcuni problemi volevo provare a sfruttare un web services in .net che già uso per altre cose su db e fare aggiornare a lui le quantità.

Ho verificato che basterebbe trovare la sku sj catalog_product_entity e una volta trovato il product_id andare su cataloginventory_stock_item e aggiornare la quantità. Ho fatto una prova manualmente e tutto sembra funzionare, per vostra esperienza può essere una cosa che va bene? devo aggiornare altre tabelle?

Ciao Sonia,
quando un prodotto esce dallo stock viene posto come non disponibile.
Hai pensato anche a questa eventualità?
ti riporto uno spaccato di codice utilizzato dal modulo Magmi che abbiamo utlizzato spesso come modello per eseguire degli import export da gestionale.

public function updateStock($pid,$item,$isnew)
    
{

        $scols
=$this->getStockCols();
        
#take only stock columns that are in item
        
$itstockcols=array_intersect(array_keys($item),$scols);
        
#no stock columns set, item exists, no stock update needed.
        
if(count($itstockcols)==&& !$isnew)
        
{
            
return;
        
}
        $csit
=$this->tablename("cataloginventory_stock_item");
        
$css=$this->tablename("cataloginventory_stock_status");
        
#calculate is_in_stock flag
        
if(isset($item["qty"]))
        
{
            
if(!isset($item["manage_stock"]))
            
{
                $item[
"manage_stock"]=1;
                
$item["use_config_manage_stock"]=0;
            
}

            $mqty
=(isset($item["min_qty"])?$item["min_qty"]:0);
            
$is_in_stock=isset($item["is_in_stock"])?$item["is_in_stock"]:($item["qty"]>$mqty?1:0);
            if(!
$is_in_stock && $item["qty"]>$mqty)
            
{
                $is_in_stock
=1;
            
}
            $item[
"is_in_stock"]=$is_in_stock;
        
}
        
#take only stock columns that are in  item after item update
        
$common=array_intersect(array_keys($item),$scols);

        
#create stock item line if needed
        
$stock_id=(isset($item["stock_id"])?$item["stock_id"]:1);
        
$sql="INSERT IGNORE INTO `$csit` (product_id,stock_id) VALUES (?,?)";
        
$this->insert($sql,array($pid,$stock_id));

        if(
count($common)>0)
        
{
            $cols
=$this->arr2columns($common);
            
$stockvals=$this->filterkvarr($item,$common);

            
#fill with values
            
$svstr=$this->arr2update($stockvals);
            if(isset(
$item["qty"]))
            
{
                $relqty
=NULL;
                
//test for relative qty
                
if($item["qty"][0]=="+" || $item["qty"][0]=="-")
                
{
                    $relqty
=getRelative($item["qty"]);
                
}
                
//if relative qty
                
if($relqty!=NULL)
                
{
                    
//update UPDATE statement value affectation
                    
$svstr=preg_replace("/(^|,)qty=\?/","$1qty=qty$relqty?",$svstr);
                    
$stockvals["qty"]=$item["qty"];
                    
$svstr=str_replace("is_in_stock=?","is_in_stock=(qty>min_qty)",$svstr);
                    unset(
$stockvals["is_in_stock"]);
                
}
            }
            $sql
="UPDATE `$csit` SET $svstr WHERE product_id=? AND stock_id=?";
            
$this->update($sql,array_merge(array_values($stockvals),array($pid,$stock_id)));
        
}

        $data
=array();
        
$wsids=$this->getItemWebsites($item);
        
$csscols=array("website_id","product_id","stock_id","qty","stock_status");
        
$cssvals=$this->filterkvarr($item,$csscols);
        
$stock_id=(isset($cssvals["stock_id"])?$cssvals["stock_id"]:1);
        
$stock_status=(isset($cssvals["stock_status"])?$cssvals["stock_status"]:1);
        
//new auto synchro on lat inserted stock item values for stock status.
        //also works for multiple stock ids.
        
$sql="INSERT INTO `$css` SELECT csit.product_id,ws.website_id,cis.stock_id,csit.qty,? as stock_status
                FROM `
$csit` as csit 
                JOIN "
.$this->tablename("core_website")." as ws ON ws.website_id IN (".$this->arr2values($wsids).") 
                JOIN "
.$this->tablename("cataloginventory_stock")." as cis ON cis.stock_id=?
                WHERE product_id=?
                ON DUPLICATE KEY UPDATE stock_status=VALUES(`stock_status`),qty=VALUES(`qty`)"
;
        
$data[]=$stock_status;
        
$data=array_merge($data,$wsids);
        
$data[]=$stock_id;
        
$data[]=$pid;
        
$this->insert($sql,$data);
        unset(
$data);
    
}
Nello specifico questo metodo aggiorna lo stock.
Spero di esserti stato utile,
buon lavoro
filippo.
 
Magento Community Magento Community
Magento Community
Magento Community
 
Soniag001
Member
 
Total Posts:  51
Joined:  2012-02-19
 

Grazie gentilissimo!
Da quanto ho visto aggiorni le due tabelle che ho citato + lo stock giusto?
Ho fatto un ulteriore prova ed effettivamente non aggiornando lo stock il “problema” se pur superficiale c’è. Premetto che sotto la quantità 10 ho impostato di non permettere ordini ho aggiornato dal db un prodotto a quantità 2 ed effettivamente lo vedevo ma non melo faceva ordinare, se invece la quantità la imposto dal backend non lo vedo proprio sul sito.

Sonia

 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
Back to top