function commerce_discount_add_line_item in Commerce Discount 7
Creates a discount line item on the provided order.
Parameters
EntityDrupalWrapper $order_wrapper: The wrapped order entity.
string $discount_name: The name of the discount being applied.
array $discount_amount: The discount amount price array (amount, currency_code).
array $data: Optional. An associative array of parameters to include in the line item's data array along with the discount name.
Return value
object The newly created discount line item.
2 calls to commerce_discount_add_line_item()
- commerce_discount_fixed_amount in ./commerce_discount.rules.inc 
- Rules action: Apply fixed amount discount.
- commerce_discount_percentage in ./commerce_discount.rules.inc 
- Rules action: Apply percentage discount.
File
- ./commerce_discount.rules.inc, line 1352 
- Rules integration for the Commerce Discount module.
Code
function commerce_discount_add_line_item(EntityDrupalWrapper $order_wrapper, $discount_name, $discount_amount, $data = array()) {
  // Create a new line item.
  $discount_line_item = commerce_line_item_new('commerce_discount', $order_wrapper
    ->getIdentifier());
  $discount_line_item->data = array(
    'discount_name' => $discount_name,
  ) + $data;
  // Setting the bundle to ensure the entity metadata stores it correctly.
  $info = array(
    'bundle' => 'commerce_discount',
  );
  $discount_line_item_wrapper = entity_metadata_wrapper('commerce_line_item', $discount_line_item, $info);
  // Initialize the line item unit price.
  $discount_line_item_wrapper->commerce_unit_price->amount = 0;
  $discount_line_item_wrapper->commerce_unit_price->currency_code = $discount_amount['currency_code'];
  // Reset the data array of the line item total field to only include a base
  // price component and set the currency code from the order.
  $base_price = array(
    'amount' => 0,
    'currency_code' => $discount_amount['currency_code'],
    'data' => array(),
  );
  $discount_line_item_wrapper->commerce_unit_price->data = commerce_price_component_add($base_price, 'base_price', $base_price, TRUE);
  // Add the discount price component.
  commerce_discount_add_price_component($discount_line_item_wrapper, $discount_name, $discount_amount);
  // Save the incoming line item now so we get its ID and add it to the oder's
  // line item reference field value.
  commerce_line_item_save($discount_line_item);
  $order_wrapper->commerce_line_items[] = $discount_line_item;
  return $discount_line_item;
}