Comment manipuler les prix tiers d’un produit Magento

Terminons notre semaine de découverte du code Magento en abordant une fonctionnalité bien pratique : les prix tiers (« tiers prices » en V.O.).

Magento-observer

Les prix tiers sont des prix « conditionnés ». Un produit a au minimum un prix -fixe- et éventuellement un prix spécial pour une durée déterminée ou non. Les prix tiers permettent de définir des prix spécifiques à une quantité achetée et / ou à un groupe d’acheteur.

Ce qui permet -par exemple- de proposer un catalogue dédié aux professionnels avec des prix minorés ou d’inciter à l’achat avec une politique de prix dégressifs sur la quantité.

Le code proposé ci-dessous est exécuté dans un batch PHP basé sur le modèle décrit dans l’article Comment créer un batch Magento.

Commençons par voir comment ajouter un prix tiers à un produit qui n’en a aucun.

Un prix tiers est défini sous la forme d’un array PHP contenant au minimum les 4 clés suivantes :

$tierPrice = array(
	'website' => 'all', // ou l'ID du site
	'customer_group_id' => 2, // ou 'all'
	'qty'  => 20, // obligatoire et non null, 1 = pour ne pas gérer les quantités
	'price'  => 19.99,          
);

C’est la méthode update de la classe Mage_Catalog_Model_Product_Attribute_Tierprice_Api qui va se charger de mettre à jour les prix tiers de notre produit, la méthode attend un tableau de 1 à n prix tiers :

$tierPrices[] = $tierPrice;

Les données sont prêtes, ajoutons les à notre produit ID:738 :

try 
{                
	$api = new Mage_Catalog_Model_Product_Attribute_Tierprice_Api();
	$api->update( 738 , $tierPrices );      	
}
catch (Exception $ex) 
{  
	echo "Erreur lors de la création des prix tiers : {$e->getMessage()} \n";                      
}

Vérification sur l’admin : le prix tiers est bien présent dans notre produit.

magento-tier-price

Ajouter des prix tiers c’est bien. Mais bien souvent, on a besoin de modifier ceux d’un produit existant. Rien de plus simple, il suffit de récupérer le array PHP des prix d’un produit :

$api = new Mage_Catalog_Model_Product_Attribute_Tierprice_Api();
$tiersPrices = $api->info( 738 );  // mon produit ID:738
var_dump($tiersPrices) ;

… qui nous donne :

array(1) {
  [0]=>
  array(4) {
    ["customer_group_id"]=>
    int(1) "2"
    ["website"]=>
    string(3) "all"
    ["qty"]=>
    string(7) "20.0000"
    ["price"]=>
    string(7) "19.9900"
  }
}

Puis de modifier le prix tiers existant, voir en ajouter un autre :

$tiersPrices[0]['customer_group_id'] = 'all';
$tiersPrices[] = array(
	'website' => 'all', 
	'customer_group_id' => 'all', 
	'qty'  => 50, 
	'price'  => 14.99,          
);

Et hop rebelote :

$api->update( 738 , $tiersPrices );

Mes prix tiers sont à jour :

magento-tier-price-2

Et de ce côté-là, la documentation officielle ne nous aide pas beaucoup. Heureusement le code “core” est bien construit et suffisamment lisible pour retrouver ses petits et comprendre comment « eux » ils font.

A bientôt.

Articles relatifs

Leave a Reply