From e6e063670cd90522a0bd57bb3af2167e1007c06a Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 1 May 2015 14:49:34 +1000 Subject: [PATCH] Allow managers to remove line items from order Managers of an order cycle and the distributor of an order are allowed to remove a line item from the order. --- .../spree/admin/line_items_controller_decorator.rb | 8 ++++++++ app/models/spree/ability_decorator.rb | 3 +++ 2 files changed, 11 insertions(+) create mode 100644 app/controllers/spree/admin/line_items_controller_decorator.rb diff --git a/app/controllers/spree/admin/line_items_controller_decorator.rb b/app/controllers/spree/admin/line_items_controller_decorator.rb new file mode 100644 index 0000000000..ca83baa00b --- /dev/null +++ b/app/controllers/spree/admin/line_items_controller_decorator.rb @@ -0,0 +1,8 @@ +Spree::Admin::LineItemsController.class_eval do + private + + def load_order + @order = Spree::Order.find_by_number!(params[:order_id]) + authorize! :update, @order + end +end diff --git a/app/models/spree/ability_decorator.rb b/app/models/spree/ability_decorator.rb index e66c03aa72..c6126d7171 100644 --- a/app/models/spree/ability_decorator.rb +++ b/app/models/spree/ability_decorator.rb @@ -144,6 +144,9 @@ class AbilityDecorator end can [:admin, :bulk_management], Spree::Order if user.admin? || user.enterprises.any?(&:is_distributor) can [:admin, :create], Spree::LineItem + can [:destroy], Spree::LineItem do |item| + user.admin? || user.enterprises.include?(order.distributor) || user == order.order_cycle.manager + end can [:admin, :index, :read, :create, :edit, :update, :fire], Spree::Payment can [:admin, :index, :read, :create, :edit, :update, :fire], Spree::Shipment