Au début , j'essayé de répondre à votre question en utilisant des règles et Points Utilisateurs module, mais je l' ai vu tout en ajoutant des points de subvention à un utilisateur que l' action il n'y a pas sélecteur de données pour sélectionner l'utilisateur qui a créé le produit. J'ai trouvé le sélecteur de données pour sélectionner l'utilisateur qui est le propriétaire de la commande, mais ce n'est pas votre exigence. (C'est pourquoi j'ai clarifié cela dans les commentaires).
J'ai trouvé une solution de module à votre question. Le module utilise hook_commerce_checkout_complete () . À partir de la page du crochet:
Permet aux modules d'exécuter la logique métier lorsqu'une commande termine le paiement.
Ce crochet coïncide avec l'événement "Le client termine le paiement". Seule la logique métier doit être exécutée lorsqu'elle est invoquée, comme la mise à jour du statut de la commande, l'attribution de la commande à un compte d'utilisateur ou l'envoi d'e-mails de notification. L'interaction avec l'utilisateur doit plutôt se produire via les volets de paiement sur la page de fin de paiement.
Voici le codage du module que j'ai conçu:
Fichier YOURMODULE.info :
name = YOURMODULE
description = Module description
dependencies[] = commerce
dependencies[] = commerce_cart
dependencies[] = commerce_checkout
dependencies[] = userpoints
core = 7.x
MISE
À JOUR Comme suggéré par Clive , j'ai changé le fichier du module afin que ce module personnalisé fonctionne également avec les sites multilingues.
Fichier YOURMODULE.module :
/**
* Implements hook_commerce_checkout_complete().
*/
function YOURMODULE_commerce_checkout_complete($order) {
// Iterate through every commerce line item added in product.
foreach (field_get_items('commerce_order', $order, 'commerce_line_items') as $line_item_id) {
// Load commerce line item by line item id.
$line_item = commerce_line_item_load($line_item_id['line_item_id']);
// We do not want to include shipping cost in userpoints.
if ($line_item->type != 'shipping') {
// Load commerce product by product id.
$product = commerce_product_load(field_get_items('commerce_line_item', $line_item, 'commerce_product')[0]['product_id']);
// Create parameters.
$params = array(
'uid' => $product->uid,
'points' => commerce_currency_amount_to_decimal(field_get_items('commerce_line_item', $line_item, 'commerce_total')[0]['amount'], field_get_items('commerce_line_item', $line_item, 'commerce_total')[0]['currency_code']),
);
// Grant userpoints programmatically.
userpoints_userpointsapi($params);
}
}
}
Liens de référence:
userpoints_userpointsapi ($ params)
API commerce_checkout
commerce_line_item_load ($ line_item_id)
commerce_product_load ($ product_id)
Userpoints: déduire des points par programme
commerce_currency_amount_to_decimal ()