Développer avec RBS Change : Import produit via code

  • 79855.1

    12/07/2013 17:48


    nico5
    Rang : Membre
    Bonjour,

    Pour les besoins d'un client je dois importer des produits et des marques d'un ERP vers Change. Il faut donc que je créé des fiches product et brand Change, de toute pièce, via le code.

    Voici les problèmes que je rencontre :
    - la marque se créée mais n'est pas rattachée à un treeId du coup elle n'est pas visible dans le BO
    - le stock du produit n'est pas prix en compte
    - le produit semble ne pas être rattaché à une boutique

    Voici le code de mon import
    pour la création de marque :
    $brandObj = brand_BrandService::getInstance()->getNewDocumentInstance();
    $brandObj->setCodeReference($brandCode);
    $brandObj->setLabel($brandLabel);
    $brandObj->save();


    pour la création du produit :
    $product->setCodeReference($articleNo);
    $product->setLabel($articleNo);
    // Stock
    $product->setStockQuantity($stock);
    
    // Save product
    $product->save();
    
    // Price
    $price = catalog_PriceService::getInstance()->getNewDocumentInstance();
    $price->setProductId($product->getId());
    $price->setShopId(catalog_ShopService::getInstance()->getDefaultShop()->getId());
    $price->setValue($publicPrice);
    // Check discount
    if ($displayPrice < $publicPrice) {
        $price->setDiscountValue($displayPrice);
    }
    catalog_PriceService::getInstance()->insertPrice($price);


    Pouvez-vous m'aider ?
    D'avance merci.
  • 79855.2 en réponse à 79855.1 écrit par nico5

    17/07/2013 15:07


    nico5
    Rang : Membre
    Quelqu'un pourrait-il m'aider ?
  • 79855.3 en réponse à 79855.1 écrit par nico5

    17/07/2013 16:34


    Jean-Michel
    Titre : Community Manager
    Rang : Expert
    Bonjour,

    Pour le problème des marques c'est assez simple, il faut passer en argument de la méthode save() l'id du noeud parent, ce qui peut donner pour une insertion à partir du rootfolder :
    $brandObj = brand_BrandService::getInstance()->getNewDocumentInstance();
    $brandObj->setCodeReference($brandCode);
    $brandObj->setLabel($brandLabel);
    $brandObj->save(ModuleService::getInstance()->getRootFolderId('brand'));
    


    Pour les stocks, avez-vous une gestion des stock spécifique, ou mis en oeuvre le module mysqlstock?

    Pour le problème des produits, il faut les rattacher à un objet de type rayon de premier niveau (shelf) ou sous rayon (subshelf). Et c'est ce rayon qui doit être rattaché à une boutique. Afin que le produit soit visible en FO, il faut qu'un prix public sans restriction d'application soit défini pour la boutique. Afin de voir le produit en FO, il faut aussi que ce dernier soit compilé (en principe il est marqué pour recompilation après un save() et la tâche de compilation s'en occupera lors de sa prochaine exécution).

    Pour une meilleure réponse, pensez à indiquer la version sur laquelle vous rencontrez des difficultés, ainsi que son type (CMS ou eCommerce core).
    Pour tout problème d'installation indiquez le nom de l'hébergeur et s'il s'agit d'un serveur mutualisé ou dédié.
  • 79855.4 en réponse à 79855.3 écrit par Jean-Michel

    19/07/2013 09:30


    nico5
    Rang : Membre
    Merci Jean-Michel.
    Pour la marque et le rayon c'est tout bon.

    Reste le problème du stock, nous avons mis en oeuvre le module mysqlstock.
    Actuellement à fin de mon traitement les produit apparaissent "Indisponible".
    Je souhaiterais qu'ils apparaissent "En stock" avec une quantité spécifique.

    Édité par nico5 19/07/2013 11:59

  • 79855.5 en réponse à 79855.4 écrit par nico5

    23/07/2013 16:14


    Jean-Michel
    Titre : Community Manager
    Rang : Expert
    Pour les stocks il va donc falloir que tu fasses quelque chose de ce type :
    $whsi = mysqlstock_WarehouseService::getInstance();
    $warehousesId = $whsi->getWarehouseIdsByProduct($product);
    $warehouseInUse=true;
    $stocks = array();
    foreach ($warehousesId as $whid)
    {
        $stocks[] = array( 'used' => $warehouseInUse,
                        'warehouse' => $whid,
                        'stockQuantity' => $myQuantity,
                        'stockAlertThreshold' => $product->getStockAlertThreshold(),
                        'lowQuantity' => $myLowQuantity);
    }
    mysqlstock_StockService::getInstance()->updateStockInfo($product, array('stockQttJSON' => JsonService::getInstance()->encode($stocks)));
    


    A noter que toutes les clefs pour les sous tableaux de $stocks doivent être définies.

    Édité par Jean-Michel 23/07/2013 16:36


    Pour une meilleure réponse, pensez à indiquer la version sur laquelle vous rencontrez des difficultés, ainsi que son type (CMS ou eCommerce core).
    Pour tout problème d'installation indiquez le nom de l'hébergeur et s'il s'agit d'un serveur mutualisé ou dédié.
 
Merci de prendre connaissance et de respecter les règles des forums.
 
1471 membres
Aucun membre connecté