From 0cfdf361a3334720c95e71192b851bb0f0ab98db Mon Sep 17 00:00:00 2001 From: Ivan Bueno Date: Thu, 7 Feb 2013 13:16:53 -0800 Subject: [PATCH] #1515860 coupon admin line item add form fixed --- commerce_coupon_ui.module | 36 ++++++++++++++++++ includes/commerce_coupon_ui.forms.inc | 72 +++++++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+) diff --git a/commerce_coupon_ui.module b/commerce_coupon_ui.module index 74efadc..04dc2af 100644 --- a/commerce_coupon_ui.module +++ b/commerce_coupon_ui.module @@ -141,6 +141,18 @@ function commerce_coupon_ui_menu() { 'access arguments' => array('access checkout'), 'type' => MENU_CALLBACK, ); + + // Add a coupon to the order + $items['admin/commerce/orders/%commerce_order/coupons'] = array( + 'title' => 'Coupons', + 'description' => 'Add a coupon to the order.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('commerce_coupon_order_add_form', 3), + 'type' => MENU_LOCAL_TASK, + 'access arguments' => array('administer commerce_order entities'), + 'file' => 'includes/commerce_coupon_ui.forms.inc', + 'weight' => 11, + ); return $items; } @@ -447,3 +459,27 @@ function commerce_coupon_ui_validate_coupon_type_unique($type) { return TRUE; } + +/** + * Implements hook_form_alter(). + */ +function commerce_coupon_ui_form_alter(&$form, &$form_state, $form_id) { + if ($form_id == 'commerce_order_ui_order_form') { + if (isset($form['commerce_line_items'])) { + + // Disable updates on coupon line items in the line item manager + foreach ($form['commerce_line_items']['und']['line_items'] as $key => $line_item) { + if ($line_item['line_item']['#value']->type == 'commerce_coupon') { + $form['commerce_line_items']['und']['line_items'][$key]['remove']['#disabled'] = TRUE; + $form['commerce_line_items']['und']['line_items'][$key]['commerce_unit_price']['#disabled'] = TRUE; + $form['commerce_line_items']['und']['line_items'][$key]['quantity']['#disabled'] = TRUE; + } + } + + // Remove coupon from the options when adding line items to the order. + if (isset($form['commerce_line_items']['und']['actions']['line_item_type']['#options']['commerce_coupon'])) { + unset($form['commerce_line_items']['und']['actions']['line_item_type']['#options']['commerce_coupon']); + } + } + } +} \ No newline at end of file diff --git a/includes/commerce_coupon_ui.forms.inc b/includes/commerce_coupon_ui.forms.inc index 1ffb855..9b8adf1 100644 --- a/includes/commerce_coupon_ui.forms.inc +++ b/includes/commerce_coupon_ui.forms.inc @@ -317,3 +317,75 @@ function commerce_coupon_ui_coupon_type_delete_form_submit($form, &$form_state) $form_state['redirect'] = 'admin/commerce/coupons/types'; } + +/** + * Form callback: Add coupon to order + */ +function commerce_coupon_order_add_form($form, &$form_state, $order) { + + $form = array(); + + // Extract the View and display keys from the cart contents pane setting. + list($view_id, $display_id) = explode('|', variable_get('commerce_coupon_checkout_pane_view', 'commerce_coupon_review_pane|checkout')); + if (!empty($view_id) && !empty($display_id)) { + $form['redeemed_coupons'] = array( + '#type' => 'markup', + '#markup' => commerce_embed_view($view_id, $display_id, array($order->order_id)), + ); + } + + // Coupon code input + $form['coupon_code'] = array( + '#type' => 'textfield', + '#title' => t('Coupon Code'), + '#required' => TRUE, + '#description' => t('Enter the coupon code here.'), + ); + + $form['commerce_order'] = array( + '#type' => 'value', + '#value' => $order, + ); + + $form['submit'] = array( + '#type' => 'submit', + '#value' => t('Add coupon') + ); + + return $form; +} + +/** + * Form validation callback: Validate adding coupon to order + */ +function commerce_coupon_order_add_form_validate($form, &$form_state) { + + global $commerce_coupon_validation_error_message; + + // Valdiate the coupon code + if (commerce_coupon_code_is_valid($form_state['values']['coupon_code'], $form_state['values']['commerce_order'])) { + return TRUE; + } + else { + if (isset($commerce_coupon_validation_error_message)) { + $message = $commerce_coupon_validation_error_message; + } + else { + $message = t('The coupon code is not valid for this order.'); + } + + form_set_error('coupon_code', $message); + return FALSE; + } +} + +/** + * Form submit callback: Redeem coupon + */ +function commerce_coupon_order_add_form_submit($form, &$form_state) { + if ($code = $form_state['values']['coupon_code']) { + $commerce_coupon = commerce_coupon_load_by_code($code); + commerce_coupon_redeem_coupon($commerce_coupon, $form_state['values']['commerce_order']); + commerce_cart_order_refresh($form_state['values']['commerce_order']); + } +} -- 1.7.11.msysgit.0