From b0abe566ebcb3e37f53bf96b0b9ca8d143af05c0 Mon Sep 17 00:00:00 2001 From: David Cook Date: Fri, 30 Aug 2013 16:28:02 +1000 Subject: [PATCH] Comments --- app/models/spree/line_item_decorator.rb | 5 ++--- app/models/spree/order_decorator.rb | 14 +++++++++----- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/app/models/spree/line_item_decorator.rb b/app/models/spree/line_item_decorator.rb index 21715e468f..b99ca31dd1 100644 --- a/app/models/spree/line_item_decorator.rb +++ b/app/models/spree/line_item_decorator.rb @@ -6,9 +6,8 @@ Spree::LineItem.class_eval do if user.has_spree_role?('admin') scoped else - # User has a distributor on the Order or supplier that supplies a LineItem - joins('LEFT OUTER JOIN spree_variants ON (spree_variants.id = spree_line_items.variant_id)'). - joins('LEFT OUTER JOIN spree_products ON (spree_products.id = spree_variants.product_id)'). + # Find line items that are from orders distributed by the user or supplied by the user + joins(:variant => :product). joins(:order). where('spree_orders.distributor_id IN (?) OR spree_products.supplier_id IN (?)', user.enterprises, user.enterprises). select('spree_line_items.*') diff --git a/app/models/spree/order_decorator.rb b/app/models/spree/order_decorator.rb index 8864860bf4..9b44553419 100644 --- a/app/models/spree/order_decorator.rb +++ b/app/models/spree/order_decorator.rb @@ -20,16 +20,20 @@ Spree::Order.class_eval do if user.has_spree_role?('admin') scoped else - # User has a distributor on an Order or supplier that supplies a Product to an Order - # NOTE: supplier Orders should use LineItem.managed_by to ensure they only see their own LineItems! - joins('LEFT OUTER JOIN spree_line_items ON (spree_line_items.order_id = spree_orders.id)'). - joins('LEFT OUTER JOIN spree_variants ON (spree_variants.id = spree_line_items.variant_id)'). - joins('LEFT OUTER JOIN spree_products ON (spree_products.id = spree_variants.product_id)'). + # Find orders that are distributed by the user or have products supplied by the user + # WARNING: This only filters orders, you'll need to filter line items separately using LineItem.managed_by + with_line_items_variants_and_products_outer. where('spree_orders.distributor_id IN (?) OR spree_products.supplier_id IN (?)', user.enterprises, user.enterprises). select('DISTINCT spree_orders.*') end } + scope :with_line_items_variants_and_products_outer, lambda { + joins('LEFT OUTER JOIN spree_line_items ON (spree_line_items.order_id = spree_orders.id)'). + joins('LEFT OUTER JOIN spree_variants ON (spree_variants.id = spree_line_items.variant_id)'). + joins('LEFT OUTER JOIN spree_products ON (spree_products.id = spree_variants.product_id)') + } + # -- Methods def products_available_from_new_distribution