function uc_discounts_uc_order in Ubercart Discounts (Alternative) 7.2
Implements hook_uc_order().
Manages loading and saving of discounts associated with orders.
1 call to uc_discounts_uc_order()
- uc_discounts_apply in uc_discounts/
uc_discounts.module - Applies the discounts to an order by creating the necessary line items.
File
- uc_discounts/
uc_discounts.module, line 236
Code
function uc_discounts_uc_order($op, $order, $arg2) {
switch ($op) {
case 'load':
// Get order's codes from database.
$order->uc_discounts_codes = uc_discounts_get_codes_for_order($order->order_id);
break;
case 'save':
// If discount line items need updating.
if (!empty($order->uc_discounts_line_items_need_updating)) {
// Delete existing order codes.
uc_discounts_order_codes_delete($order->order_id);
// Save order's discount codes as string.
if (!empty($order->uc_discounts_codes)) {
$codes_string = uc_discounts_codes_to_str($order->uc_discounts_codes);
$new_discount_order_code = array(
'order_id' => $order->order_id,
'codes' => $codes_string,
);
drupal_write_record('uc_discounts_order_codes', $new_discount_order_code);
}
// Get order line items.
if (is_array($order->line_items)) {
$existing_line_items = $order->line_items;
}
else {
$existing_line_items = uc_order_load_line_items($order, TRUE);
}
// Use new_order_line_items to populate $order->line_items by:
// - Storing all non-discounts line items.
// - Storing new discount line items.
$new_order_line_items = array();
// Delete existing discount line items.
foreach ($existing_line_items as $line_item) {
if ($line_item["type"] == UC_DISCOUNTS_LINE_ITEM_TYPE) {
uc_order_delete_line_item($line_item["line_item_id"]);
}
else {
$new_order_line_items[] = $line_item;
}
}
// Add discount line items.
if (!empty($order->uc_discounts_line_items)) {
foreach ($order->uc_discounts_line_items as $line_item) {
if ($line_item['amount'] != 0) {
uc_order_line_item_add($order->order_id, $line_item['type'], $line_item['title'], $line_item['amount'], $line_item['weight'], $line_item['data']);
$new_order_line_items[] = $line_item;
}
}
}
// Update order line items (see new_order_line_items notes above).
$order->line_items = $new_order_line_items;
$order->uc_discounts_line_items_need_updating = FALSE;
// Force tax recalculation. Currently unused but may be required if line
// item weights change.
// module_invoke("uc_taxes", "order", "save", $order, "");
}
break;
case 'update':
// If status changes to 'canceled' then delete order discount uses.
if ($arg2 == 'canceled' && $order->order_status != 'canceled') {
uc_discounts_uses_delete_for_order($order->order_id);
}
break;
case 'submit':
// Ensure stored discounts are accurate by recalculating and comparing
// stored amounts.
$result = uc_discounts_apply($order, FALSE, TRUE);
return array(
array(
'pass' => $result['success'],
'message' => $result['message'],
),
);
case 'delete':
// Delete existing order codes.
uc_discounts_order_codes_delete($order->order_id);
// @todo Determine if uses should be deleted or put global setting in for
// user to decide.
break;
}
}