From 8e8306eaa1237dd3f324aeecd6d3a568461e3a24 Mon Sep 17 00:00:00 2001
From: Vadim Eremeev <vadim.eremeev@gmail.com>
Date: Sat, 12 Jan 2013 21:56:51 +0800
Subject: [PATCH] added possibility to remove coupon from order on checkout
 page

---
 .../modules/commerce_coupon/commerce_coupon.info   |    1 +
 .../commerce_coupon/commerce_coupon_ui.module      |   19 ++++++++++++++
 .../includes/views/commerce_coupon.views.inc       |    7 ++++++
 ...ce_coupon_handler_field_coupon_order_remove.inc |   26 ++++++++++++++++++++
 4 files changed, 53 insertions(+)
 create mode 100644 sites/all/modules/commerce_coupon/includes/views/handlers/commerce_coupon_handler_field_coupon_order_remove.inc

diff --git a/sites/all/modules/commerce_coupon/commerce_coupon.info b/sites/all/modules/commerce_coupon/commerce_coupon.info
index 15c87a6..dd060a2 100644
--- a/sites/all/modules/commerce_coupon/commerce_coupon.info
+++ b/sites/all/modules/commerce_coupon/commerce_coupon.info
@@ -17,6 +17,7 @@ files[] = classes/commerce_coupon_type.inc
 ; Views Handler
 files[] = includes/views/handlers/commerce_coupon_handler_field_coupon_granted_amount.inc
 files[] = includes/views/handlers/commerce_coupon_handler_field_coupon_operations.inc
+files[] = includes/views/handlers/commerce_coupon_handler_field_coupon_order_remove.inc
 files[] = includes/views/handlers/commerce_coupon_handler_field_times_used.inc
 ; Information added by drupal.org packaging script on 2012-10-26
 version = "7.x-1.0-beta6+8-dev"
diff --git a/sites/all/modules/commerce_coupon/commerce_coupon_ui.module b/sites/all/modules/commerce_coupon/commerce_coupon_ui.module
index 9a3dee7..be0ac47 100644
--- a/sites/all/modules/commerce_coupon/commerce_coupon_ui.module
+++ b/sites/all/modules/commerce_coupon/commerce_coupon_ui.module
@@ -135,6 +135,15 @@ function commerce_coupon_ui_menu() {
     'weight' => 50,
   );

+  $items['commerce/coupons/order/remove/%commerce_coupon/%'] = array(
+    'title' => 'Delete from order',
+    'page callback' => 'commerce_coupon_ui_coupon_delete_order_form_wrapper',
+    'page arguments' => array(4, 5),
+    'access callback' => TRUE,
+    'weight' => 20,
+  );
+
+
   return $items;
 }

@@ -272,6 +281,16 @@ function commerce_coupon_ui_coupon_delete_form_wrapper($coupon) {
   return drupal_get_form('commerce_coupon_ui_delete_form', $coupon, 'delete');
 }

+
+function commerce_coupon_ui_coupon_delete_order_form_wrapper($coupon, $order_id) {
+  if ($coupon && $order_id) {
+    $order = commerce_order_load($order_id);
+    commerce_coupon_remove_coupon_from_order($order, $coupon);
+  }
+
+  drupal_goto();
+}
+
 /**
  * Sets the breadcrumb for administrative coupon pages.
  *
diff --git a/sites/all/modules/commerce_coupon/includes/views/commerce_coupon.views.inc b/sites/all/modules/commerce_coupon/includes/views/commerce_coupon.views.inc
index 01c9878..d8ba316 100644
--- a/sites/all/modules/commerce_coupon/includes/views/commerce_coupon.views.inc
+++ b/sites/all/modules/commerce_coupon/includes/views/commerce_coupon.views.inc
@@ -33,5 +33,12 @@ function commerce_coupon_views_data_alter(&$data) {
         'click sortable' => TRUE,
       ),
     );
+    $data['commerce_coupon']['remove_from_order'] = array(
+      'field' => array(
+        'title' => t('Remove from Order'),
+        'help' => t('Remove coupon from the order.'),
+        'handler' => 'commerce_coupon_handler_field_coupon_order_remove',
+      ),
+    );
   }
 }
diff --git a/sites/all/modules/commerce_coupon/includes/views/handlers/commerce_coupon_handler_field_coupon_order_remove.inc b/sites/all/modules/commerce_coupon/includes/views/handlers/commerce_coupon_handler_field_coupon_order_remove.inc
new file mode 100644
index 0000000..2c65904
--- /dev/null
+++ b/sites/all/modules/commerce_coupon/includes/views/handlers/commerce_coupon_handler_field_coupon_order_remove.inc
@@ -0,0 +1,26 @@
+<?php
+
+/**
+ * Field for removing a commerce coupon line item.
+ */
+class commerce_coupon_handler_field_coupon_order_remove extends views_handler_field {
+  function construct() {
+    parent::construct();
+
+    $this->additional_fields['coupon_id'] = 'coupon_id';
+  }
+
+  function query() {
+    $this->ensure_my_table();
+    $this->add_additional_fields();
+  }
+
+  function render($values) {
+    $coupon_id = $this->get_value($values, 'coupon_id');
+    return l(
+      t('Remove'),
+      'commerce/coupons/order/remove/'.$coupon_id.'/'.$values->commerce_coupon_order_reference_commerce_coupon_order_id,
+      array('query' => array('destination' => current_path()))
+    );
+  }
+}
--
1.7.9.4+GitX
