2

In drupal commerce, using the commerce payment payment module, I would like to display the amount paid and order balance in paid order like on the example below.

Subtotal ------------- 20

TAX --------------------- 3

Total ------------------ 23

Amount paid ----- 23

Order balance ---- 0

How could I achieve this ?

I'm close to get what I want. I created a module
I still have an issue : I don't know how to get the order_ID ?

<?php

/**
* @file
* Commerce Order Total and Balance Module.
*/

// implement hook_commerce_price_formatted_components_alter()
function commerce_order_total_and_balance_commerce_price_formatted_components_alter(&$component_types) {

// TO DO : retreive the order ID (or the order object)
$order_id = 142;

// load the order
$order = commerce_order_load($order_id);

// get the balance
$balance = commerce_payment_order_balance($order);

// rename and reorder component_type
$component_types['base_price']['title'] = 'Total HT';
$component_types['base_price']['weight'] = -90;

// rename and reorder component_type
$component_types['tax|20_vat']['weight'] = -80;

// rename and reorder component_type
$component_types['commerce_price_formatted_amount']['title'] = 'Total TTC';
$component_types['commerce_price_formatted_amount']['weight'] = -50;

if ($balance['amount'] <= 0) { // we display total payments and order balance only if order balance is zero or less
  // add component_type "total_paid"
  $component_types['total_paid']['title'] = 'Montant pay&#233;';
  $component_types['total_paid']['weight'] = -40;
  $component_types['total_paid']['price']['currency_code'] =      $component_types['commerce_price_formatted_amount']['price']['currency_code'];
  $component_types['total_paid']['price']['amount'] = $component_types['commerce_price_formatted_amount']['price']['amount']-$balance['amount'];
  
  // add component_type "order_balance"
  $component_types['order_balance']['title'] = 'Solde';
  $component_types['order_balance']['weight'] = -30;
  $component_types['order_balance']['price'] = $balance; 
 }
}
1
  • Please EDIT your question to also clarify which related modules you're using. Sep 15 '15 at 15:01
0

There is no way via the user interface that I'm aware of to add lines to the order total display that lists out price components like this. However, via code you have the ability to alter the array of formatted price components however you want at the point of display.

Drupal Commerce 1.x includes hook_commerce_price_formatted_components_alter() for this, letting you alter existing rows in the components list or add some to it that wouldn't otherwise be included. You can add lines that check the payment transactions associated with an order to see how much has been paid and that use commerce_payment_order_balance() to show the balance.

0
0

I was looking for the same

In the doc api for drupal commerce there is

<?php
  function hook_commerce_price_formatted_components_alter(&$components, $price, $entity) {
    // No example.
  }
?>

in $entity you will have your order !

have a look there hook_commerce_price_formatted_components_alter

1
  • Thanks a lot for the "$entity" trick, now it works perfectly fine.
    – Thibaut51
    Nov 2 '15 at 9:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.