From 884580b294586c1d0fe0b5de4993a3384c8a1270 Mon Sep 17 00:00:00 2001 From: jucallme Date: Mon, 2 Apr 2012 12:45:00 -0300 Subject: [PATCH 1/2] current status --- commerce_coupon.module | 1 - commerce_coupon.rules.inc | 60 ++++++++++++++++++++++++++ commerce_coupon.rules_defaults.inc | 63 ++++++++++++++++++++++++++++ includes/commerce_coupon.checkout_pane.inc | 50 ++++++++++++++++++---- 4 files changed, 164 insertions(+), 10 deletions(-) diff --git a/commerce_coupon.module b/commerce_coupon.module index 52a29fc..2647f8a 100644 --- a/commerce_coupon.module +++ b/commerce_coupon.module @@ -799,7 +799,6 @@ function commerce_coupon_log_load_by_order_and_coupon($order_id, $commerce_coupo */ function commerce_coupon_log_save(CommerceCouponLog $log) { $log->changed = REQUEST_TIME; - ; return $log->save(); } diff --git a/commerce_coupon.rules.inc b/commerce_coupon.rules.inc index d825df5..83ea8ff 100644 --- a/commerce_coupon.rules.inc +++ b/commerce_coupon.rules.inc @@ -103,6 +103,33 @@ function commerce_coupon_rules_action_info() { ), ); + $actions['commerce_coupon_action_set_granted_percent_amount'] = array( + 'label' => t('Set granted coupon amount'), + 'parameter' => array( + 'commerce_coupon_log' => array( + 'type' => 'commerce_coupon_log', + 'label' => t('Commerce Coupon Log'), + ), + 'percent' => array( + 'type' => 'decimal', + 'label' => t('Percent Amount'), + ), + 'amount' => array( + 'type' => 'decimal', + 'label' => t('Balance Amount'), + ), + 'currency_code' => array( + 'type' => 'text', + 'label' => t('Currency Code'), + ), + ), + 'group' => t('Commerce Coupon'), + 'base' => 'commerce_coupon_action_is_invalid_coupon', + 'callbacks' => array( + 'execute' => 'commerce_coupon_action_set_granted_percent_amount', + ), + ); + $actions['commerce_coupon_action_get_coupons_for_order'] = array( 'label' => t('Get coupons for order'), 'parameter' => array( @@ -245,6 +272,39 @@ function commerce_coupon_action_set_granted_amount($commerce_coupon_log, $amount } +function commerce_coupon_action_set_granted_percent_amount($commerce_coupon_log, $percent, $amount, $currency_code) { + if (!($commerce_coupon_log instanceof EntityMetadataWrapper)) { + $commerce_coupon_log = entity_metadata_wrapper('commerce_coupon_log', $commerce_coupon_log); + } + + $coupon = $commerce_coupon_log->coupon; + + // Get the price component to use in this price. + $price_component_name = 'commerce_coupon_' . $coupon->type; + drupal_alter('commerce_coupon_price_component_name', $price_component_name, $coupon); + + // Set the unit price on the line item object. + $commerce_coupon_log->commerce_granted_amount->amount = ($amount * $percent / 100); + $commerce_coupon_log->commerce_granted_amount->currency_code = $currency_code; + + + // Add the base price to the components array. + if (!commerce_price_component_load($commerce_coupon_log->commerce_granted_amount->value(), $price_component_name)) { + $commerce_coupon_log->commerce_granted_amount->data = commerce_price_component_add( + $commerce_coupon_log->commerce_granted_amount->value(), + $price_component_name, + $commerce_coupon_log->commerce_granted_amount->value(), + TRUE, + FALSE + ); + } + + commerce_coupon_log_save($commerce_coupon_log->value()); + + +} + + function commerce_coupon_action_get_coupons_for_order($commerce_coupon) { if (!$commerce_coupon) { return array(); diff --git a/commerce_coupon.rules_defaults.inc b/commerce_coupon.rules_defaults.inc index 8f039e1..ddfab41 100644 --- a/commerce_coupon.rules_defaults.inc +++ b/commerce_coupon.rules_defaults.inc @@ -49,5 +49,68 @@ function commerce_coupon_default_rules_configuration() { )); $rules['commerce_coupon_basic_validate_uses_of_coupon'] = $rule; + + // Create fixed amount rule + $rule = rules_reaction_rule(array(), array( + 'commerce_coupon_line_item' => array( + 'type' => 'commerce_coupon_line_item', + 'label' => 'commerce coupon line item') + ) + ); + + $rule->label = t('Calculate coupon with fixed amount'); + $rule->active = TRUE; + + $rule + ->event('commerce_coupon_redeem') + ->condition('entity_has_field', array('entity:select' => 'coupon', 'field' => 'commerce_coupon_fixed_amount')) + ->condition(rules_and()->condition('data_is_empty', array('data:select' => 'coupon:commerce-coupon-fixed-amount'))->negate() ) + ->condition('data_is', array('data:select' => 'coupon:commerce-coupon-fixed-amount:amount', 'op' => '>', 'value' => 0)) + ->action('commerce_coupon_action_create_coupon_line_item', array( + 'commerce_coupon:select' => 'coupon', + 'commerce_order:select' => 'commerce-order', + 'amount:select' => 'coupon:commerce-coupon-fixed-amount:amount', + 'currency_code:select' => 'coupon:commerce-coupon-fixed-amount:currency-code' + )) + ->action('commerce_coupon_action_set_granted_amount', array( + 'commerce_coupon_log:select' => 'coupon-log', + 'amount:select' => 'coupon:commerce-coupon-fixed-amount:amount', + 'currency_code:select' => 'coupon:commerce-coupon-fixed-amount:currency-code' + )); + + $rules['commerce_coupon_basic_fixed_amount'] = $rule; + + + // Create percent amount rule + $rule = rules_reaction_rule(array(), array( + 'commerce_coupon_line_item' => array( + 'type' => 'commerce_coupon_line_item', + 'label' => 'commerce coupon line item') + ) + ); + + $rule->label = t('Calculate coupon with percent amount'); + $rule->active = TRUE; + + $rule + ->event('commerce_coupon_redeem') + ->condition('entity_has_field', array('entity:select' => 'coupon', 'field' => 'commerce_coupon_percent_amount')) + ->condition(rules_and()->condition('data_is_empty', array('data:select' => 'coupon:commerce-coupon-percent-amount'))->negate() ) + ->condition('data_is', array('data:select' => 'coupon:commerce-coupon-percent-amount', 'op' => '>', 'value' => 0)) + ->action('commerce_coupon_action_create_coupon_line_item', array( + 'commerce_coupon:select' => 'coupon', + 'commerce_order:select' => 'commerce-order', + 'amount:select' => 'coupon:commerce-coupon-percent-amount', + 'currency_code:select' => 'commerce-order:commerce-order-total:currency-code' + )) + ->action('commerce_coupon_action_set_granted_percent_amount', array( + 'commerce_coupon_log:select' => 'coupon-log', + 'percent:select' => 'coupon:commerce-coupon-percent-amount', + 'amount:select' => 'commerce-order:commerce-order-total:amount', + 'currency_code:select' => 'commerce-order:commerce-order-total:currency-code' + )); + + $rules['commerce_coupon_basic_percent_amount'] = $rule; + return $rules; } diff --git a/includes/commerce_coupon.checkout_pane.inc b/includes/commerce_coupon.checkout_pane.inc index 9fe3096..a2b30aa 100644 --- a/includes/commerce_coupon.checkout_pane.inc +++ b/includes/commerce_coupon.checkout_pane.inc @@ -12,7 +12,8 @@ */ function commerce_coupon_pane_checkout_form($form, &$form_state, $checkout_pane, $order) { $pane_form = array(); - + $pane_form['#prefix'] = '
'; + $pane_form['#suffix'] = '
'; // Store the payment methods in the form for validation purposes. $pane_form['coupon_code'] = array( '#type' => 'textfield', @@ -20,6 +21,21 @@ function commerce_coupon_pane_checkout_form($form, &$form_state, $checkout_pane, '#description' => t('Enter here your coupon code.'), ); + $pane_form['coupon_add'] = array( + '#type' => 'button', + '#value' => t('Add coupon'), + '#ajax' => array( + 'callback' => 'commerce_coupon_add_coupon_callback', + 'wrapper' => 'coupon-call-back', + ), + "#limit_validation_errors" => array(), + ); + + $pane_form['order'] = array( + '#type' => 'value', + '#value' => $order + ); + // Extract the View and display keys from the cart contents pane setting. list($view_id, $display_id) = explode('|', variable_get('commerce_coupon_review_pane_view', 'commerce_coupon_review_pane|default')); if (!empty($view_id) && !empty($display_id)) { @@ -32,6 +48,29 @@ function commerce_coupon_pane_checkout_form($form, &$form_state, $checkout_pane, return $pane_form; } +/** + * Callback for the ajax button coupon_add. + */ +function commerce_coupon_add_coupon_callback($form, &$form_state) { + list($view_id, $display_id) = explode('|', variable_get('commerce_coupon_review_pane_view', 'commerce_coupon_review_pane|default')); + if (!empty($view_id) && !empty($display_id)) { + //dsm($form_state['values']['commerce_coupon']); + $order = $form_state['values']['commerce_coupon']['order']; + $code = $form_state['values']['commerce_coupon']['coupon_code']; + if (!empty($code) && commerce_coupon_code_is_valid($code, $order)) { + $coupon = commerce_coupon_load_by_code($code); + commerce_coupon_redeem_coupon($coupon, $order); + // clear the value, as we dont want errors when the user hits submit on fnal check out, as we would try add the value in the field again. + $form['commerce_coupon']['coupon_code']['#value'] = ''; + } + else { + drupal_set_message(t('Your coupon code is not valid.'), 'error'); + } + $form['commerce_coupon']['redeemed_coupons']['#markup'] = '
' . commerce_embed_view($view_id, $display_id, array($order->order_id)) . '
'; + } + return $form['commerce_coupon']; +} + function commerce_coupon_pane_checkout_form_validate($form, &$form_state, $checkout_pane, $order) { //@todo I think global function should start and end with an underscore global $commerce_coupon_validation_error_message; @@ -56,10 +95,8 @@ function commerce_coupon_pane_checkout_form_validate($form, &$form_state, $check form_set_error('commerce_coupon][coupon_code', $message); return FALSE; } - } - function commerce_coupon_pane_checkout_form_submit($form, &$form_state, $checkout_pane, $order) { if ($code = $form_state['values']['commerce_coupon']['coupon_code']) { $commerce_coupon = commerce_coupon_load_by_code($code); @@ -67,8 +104,6 @@ function commerce_coupon_pane_checkout_form_submit($form, &$form_state, $checkou } } - - /** * Implements the callback for the checkout pane review form */ @@ -80,8 +115,6 @@ function commerce_coupon_pane_review($form, $form_state, $checkout_pane, $order) return commerce_embed_view($view_id, $display_id, array($order->order_id)); } - - /** * Checkout pane callback: returns the cart contents pane's settings form. */ @@ -118,5 +151,4 @@ function commerce_coupon_pane_settings_form($checkout_pane) { ); return $form; -} - +} \ No newline at end of file -- 1.7.5.4 From d98ee8f08894ea7ac77052b2b471a4677ff370d1 Mon Sep 17 00:00:00 2001 From: jucallme Date: Mon, 2 Apr 2012 12:46:24 -0300 Subject: [PATCH 2/2] current status --- includes/commerce_coupon.checkout_pane.inc | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) diff --git a/includes/commerce_coupon.checkout_pane.inc b/includes/commerce_coupon.checkout_pane.inc index a2b30aa..b14ba8f 100644 --- a/includes/commerce_coupon.checkout_pane.inc +++ b/includes/commerce_coupon.checkout_pane.inc @@ -54,7 +54,6 @@ function commerce_coupon_pane_checkout_form($form, &$form_state, $checkout_pane, function commerce_coupon_add_coupon_callback($form, &$form_state) { list($view_id, $display_id) = explode('|', variable_get('commerce_coupon_review_pane_view', 'commerce_coupon_review_pane|default')); if (!empty($view_id) && !empty($display_id)) { - //dsm($form_state['values']['commerce_coupon']); $order = $form_state['values']['commerce_coupon']['order']; $code = $form_state['values']['commerce_coupon']['coupon_code']; if (!empty($code) && commerce_coupon_code_is_valid($code, $order)) { -- 1.7.5.4