--- uc_coupon.module.orig 2009-11-20 11:44:02.000000000 -0500 +++ uc_coupon.module 2009-12-11 16:04:33.000000000 -0500 @@ -1013,7 +1013,8 @@ function uc_coupon_validate($code) { $result->code = $code; $result->cid = $coupon->cid; $result->title = t('Coupon: @code', array('@code' => $code)); - + $result->type = $coupon->type; + $result->value = $coupon->value; if ($coupon->type == 'percentage') { $result->amount = $applicable_total * $coupon->value / 100; } @@ -1056,20 +1057,30 @@ function uc_cart_pane_coupon($form_state return $form; } -function uc_cart_pane_coupon_submit($form, &$form_state) { - if ($form_state['values']['code']) { - $code = strtoupper(check_plain($form_state['values']['code'])); - $coupon = uc_coupon_validate($code); - if (!$coupon->valid) { - unset($_SESSION['uc_coupon']); - drupal_set_message($coupon->message, 'error'); - } - else { - $_SESSION['uc_coupon'] = $code; - drupal_set_message(t('A coupon discount of !amount will be deducted from your order total at checkout.', array('!amount' => uc_currency_format($coupon->amount)))); - } - } -} +/** ++ * Submit handler for uc_cart_pane_coupon. ++ */ + function uc_cart_pane_coupon_submit($form, &$form_state) { + if ($form_state['values']['code']) { + $code = strtoupper(check_plain($form_state['values']['code'])); + $coupon = uc_coupon_validate($code); + if (!$coupon->valid) { + unset($_SESSION['uc_coupon']); + $_SESSION['uc_coupon'] = 0; + drupal_set_message($coupon->message, 'error'); + } + else { + $_SESSION['uc_coupon'] = $code; + drupal_set_message(t('The coupon has been applied to your order.')); + $_SESSION['uc_coupon_valid'] = $coupon->amount; + $_SESSION['uc_coupon_value'] = $coupon->value; + $_SESSION['uc_coupon_type'] = $coupon->type; + $coupon->message = t('The coupon has been applied to your order.'); + drupal_set_message($coupon->message); + } + } + } + /** * Implementation of hook_order(). @@ -1391,3 +1402,40 @@ function uc_coupon_token_values($type, $ return $values; } + + + + +/** + * Implementation of hook_form_alter(). + */ +function uc_coupon_form_alter(&$form, $form_state, $form_id) { + if ($form_id == 'uc_cart_view_form') { + if (!variable_get('uc_checkout_enabled', TRUE)) { + // dpm($form); + } + } +} + + +/** + * Implementation of hook_uc_cart_alter(). + * When cart-based discounts are used, alter the cart prices. + */ +function uc_coupon_uc_cart_alter(&$items) { + if (isset($_SESSION['uc_coupon_valid']) && $_SESSION['uc_coupon_valid']) { + if (count($items)) { + foreach ($items as $key => $item) { + if (!isset($item->altered)) { + if ($_SESSION['uc_coupon_type'] == 'percentage') { + $items[$key]->price = $items[$key]->price * ((100 - $_SESSION['uc_coupon_value']) / 100); + } + if ($_SESSION['uc_coupon_type'] == 'price') { + $items[$key]->price = $item->price - ($_SESSION['uc_coupon_value'] / count($items)); + } + $items[$key]->altered = TRUE; + } + } + } + } +}