Skip to main content
replaced http://drupal.stackexchange.com/ with https://drupal.stackexchange.com/
Source Link

I am using Drupal Commerce. Now I have to alter the product price programmatically. After search on google and here, I found some people did it: Alter cart unit price and total amountAlter cart unit price and total amount

Then I made a test by using hook_commerce_cart_order_refresh(). Here is my code:

function mymodule_commerce_cart_order_refresh($order_wrapper){
    foreach ($order_wrapper->commerce_line_items as $delta => $line_item_wrapper) {
        $line_item = $line_item_wrapper->value();
        $qty = $line_item->quantity;
        $line_item->commerce_unit_price['und']['0']['amount']=100;
        $line_item->commerce_total['und']['0']['amount']=$qty*100;
        commerce_line_item_save($line_item);
    }
}

It changed the cart and order line item unit price and line item totoal amont. But the order total will not changed. Still calculated on the old price.

I also notice somebody have the same question:Order Total not updating after I change the line item priceOrder Total not updating after I change the line item price , but I don't know that answer how it works. It said using following code:

The solution was to use commerce_price_add_component()

$line_item_wrapper = entity_metadata_wrapper("commerce_line_item", $commerce_line_item);
$line_item_wrapper->commerce_unit_price->data = commerce_price_component_add(
    $line_item_wrapper->commerce_unit_price->value(),
    'base_price',
    array(
            'amount' => $booking_price,
            'currency_code' => 'AUD',
            'data' => array(),
    ),
    TRUE
);

But I don't know where to use the above code, put in a hook?

Is some one can give me a idea?

I am using Drupal Commerce. Now I have to alter the product price programmatically. After search on google and here, I found some people did it: Alter cart unit price and total amount

Then I made a test by using hook_commerce_cart_order_refresh(). Here is my code:

function mymodule_commerce_cart_order_refresh($order_wrapper){
    foreach ($order_wrapper->commerce_line_items as $delta => $line_item_wrapper) {
        $line_item = $line_item_wrapper->value();
        $qty = $line_item->quantity;
        $line_item->commerce_unit_price['und']['0']['amount']=100;
        $line_item->commerce_total['und']['0']['amount']=$qty*100;
        commerce_line_item_save($line_item);
    }
}

It changed the cart and order line item unit price and line item totoal amont. But the order total will not changed. Still calculated on the old price.

I also notice somebody have the same question:Order Total not updating after I change the line item price , but I don't know that answer how it works. It said using following code:

The solution was to use commerce_price_add_component()

$line_item_wrapper = entity_metadata_wrapper("commerce_line_item", $commerce_line_item);
$line_item_wrapper->commerce_unit_price->data = commerce_price_component_add(
    $line_item_wrapper->commerce_unit_price->value(),
    'base_price',
    array(
            'amount' => $booking_price,
            'currency_code' => 'AUD',
            'data' => array(),
    ),
    TRUE
);

But I don't know where to use the above code, put in a hook?

Is some one can give me a idea?

I am using Drupal Commerce. Now I have to alter the product price programmatically. After search on google and here, I found some people did it: Alter cart unit price and total amount

Then I made a test by using hook_commerce_cart_order_refresh(). Here is my code:

function mymodule_commerce_cart_order_refresh($order_wrapper){
    foreach ($order_wrapper->commerce_line_items as $delta => $line_item_wrapper) {
        $line_item = $line_item_wrapper->value();
        $qty = $line_item->quantity;
        $line_item->commerce_unit_price['und']['0']['amount']=100;
        $line_item->commerce_total['und']['0']['amount']=$qty*100;
        commerce_line_item_save($line_item);
    }
}

It changed the cart and order line item unit price and line item totoal amont. But the order total will not changed. Still calculated on the old price.

I also notice somebody have the same question:Order Total not updating after I change the line item price , but I don't know that answer how it works. It said using following code:

The solution was to use commerce_price_add_component()

$line_item_wrapper = entity_metadata_wrapper("commerce_line_item", $commerce_line_item);
$line_item_wrapper->commerce_unit_price->data = commerce_price_component_add(
    $line_item_wrapper->commerce_unit_price->value(),
    'base_price',
    array(
            'amount' => $booking_price,
            'currency_code' => 'AUD',
            'data' => array(),
    ),
    TRUE
);

But I don't know where to use the above code, put in a hook?

Is some one can give me a idea?

Tweeted twitter.com/#!/StackDrupal/status/427887012415561728
Source Link
Tim Yao
  • 455
  • 4
  • 10

Drupal Commerce order total amount not update after I programmatically changed line item's price

I am using Drupal Commerce. Now I have to alter the product price programmatically. After search on google and here, I found some people did it: Alter cart unit price and total amount

Then I made a test by using hook_commerce_cart_order_refresh(). Here is my code:

function mymodule_commerce_cart_order_refresh($order_wrapper){
    foreach ($order_wrapper->commerce_line_items as $delta => $line_item_wrapper) {
        $line_item = $line_item_wrapper->value();
        $qty = $line_item->quantity;
        $line_item->commerce_unit_price['und']['0']['amount']=100;
        $line_item->commerce_total['und']['0']['amount']=$qty*100;
        commerce_line_item_save($line_item);
    }
}

It changed the cart and order line item unit price and line item totoal amont. But the order total will not changed. Still calculated on the old price.

I also notice somebody have the same question:Order Total not updating after I change the line item price , but I don't know that answer how it works. It said using following code:

The solution was to use commerce_price_add_component()

$line_item_wrapper = entity_metadata_wrapper("commerce_line_item", $commerce_line_item);
$line_item_wrapper->commerce_unit_price->data = commerce_price_component_add(
    $line_item_wrapper->commerce_unit_price->value(),
    'base_price',
    array(
            'amount' => $booking_price,
            'currency_code' => 'AUD',
            'data' => array(),
    ),
    TRUE
);

But I don't know where to use the above code, put in a hook?

Is some one can give me a idea?