All'inizio ho provato a rispondere alla tua domanda utilizzando il modulo regole e punti utente , ma ho visto che mentre aggiungevo punti Grant a un utente come azione non esiste un selettore di dati per selezionare l'utente che ha creato il prodotto. Ho trovato il selettore dati per selezionare l'utente che è il proprietario dell'ordine, ma non è questo il tuo requisito. (Ecco perché l'ho chiarito nei commenti).
Ho trovato una soluzione di modulo alla tua domanda. Il modulo utilizza hook_commerce_checkout_complete () . Dalla pagina hook:
Consente ai moduli di eseguire la logica aziendale quando un ordine completa il pagamento.
Questo hook coincide con l'evento "Il cliente completa il checkout". Solo la logica aziendale deve essere eseguita quando viene invocata, ad esempio l'aggiornamento dello stato dell'ordine, l'assegnazione dell'ordine a un account utente o l'invio di e-mail di notifica. L'interazione con l'utente dovrebbe invece avvenire attraverso i riquadri di checkout nella pagina di completamento del checkout.
Questa è la codifica del modulo che ho progettato:
File YOURMODULE.info :
name = YOURMODULE
description = Module description
dependencies[] = commerce
dependencies[] = commerce_cart
dependencies[] = commerce_checkout
dependencies[] = userpoints
core = 7.x
AGGIORNAMENTO
Come suggerito da Clive , ho modificato il file del modulo in modo che questo modulo personalizzato funzioni anche con siti multilingue.
File 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);
}
}
}
Link di riferimento:
userpoints_userpointsapi ($ params)
API commerce_checkout
commerce_line_item_load ($ line_item_id)
commerce_product_load ($ product_id)
Userpoint: detrarre punti a livello di codice
commerce_currency_amount_to_decimal ()