From f3447f2898dffa8b94a67425abeed0790b79f6a9 Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Tue, 13 Aug 2013 10:14:51 +1000 Subject: [PATCH] Remove shipping method field from product distributions --- .../admin/shipping_methods_controller_decorator.rb | 13 ++++++------- app/models/product_distribution.rb | 1 - ...ove_shipping_method_from_product_distribution.rb | 9 +++++++++ db/schema.rb | 3 +-- spec/lib/open_food_web/group_buy_report_spec.rb | 7 +++---- .../order_and_distributor_report_spec.rb | 2 +- 6 files changed, 20 insertions(+), 15 deletions(-) create mode 100644 db/migrate/20130812233634_remove_shipping_method_from_product_distribution.rb diff --git a/app/controllers/spree/admin/shipping_methods_controller_decorator.rb b/app/controllers/spree/admin/shipping_methods_controller_decorator.rb index 9077c7a41e..035f83e408 100644 --- a/app/controllers/spree/admin/shipping_methods_controller_decorator.rb +++ b/app/controllers/spree/admin/shipping_methods_controller_decorator.rb @@ -3,19 +3,18 @@ module Spree ShippingMethodsController.class_eval do before_filter :do_not_destroy_referenced_shipping_methods, :only => :destroy + # This method was originally written because ProductDistributions referenced shipping + # methods, and deleting a referenced shipping method would break all the reports that + # queried it. + # This has changed, and now all we're protecting is Orders, which is a spree resource. + # Do we really need to protect it ourselves? Does spree do this, or provide some means + # of preserving the shipping method information for past orders? def do_not_destroy_referenced_shipping_methods order = Order.where(:shipping_method_id => @object).first if order flash[:error] = "That shipping method cannot be deleted as it is referenced by an order: #{order.number}." redirect_to collection_url and return end - - product_distribution = ProductDistribution.where(:shipping_method_id => @object).first - if product_distribution - p = product_distribution.product - flash[:error] = "That shipping method cannot be deleted as it is referenced by a product distribution: #{p.id} - #{p.name}." - redirect_to collection_url and return - end end end end diff --git a/app/models/product_distribution.rb b/app/models/product_distribution.rb index 44ce0d494b..fbad4e6dd9 100644 --- a/app/models/product_distribution.rb +++ b/app/models/product_distribution.rb @@ -1,7 +1,6 @@ class ProductDistribution < ActiveRecord::Base belongs_to :product, :class_name => 'Spree::Product' belongs_to :distributor, :class_name => 'Enterprise' - belongs_to :shipping_method, :class_name => 'Spree::ShippingMethod' belongs_to :enterprise_fee validates_presence_of :product_id, :on => :update diff --git a/db/migrate/20130812233634_remove_shipping_method_from_product_distribution.rb b/db/migrate/20130812233634_remove_shipping_method_from_product_distribution.rb new file mode 100644 index 0000000000..cf3fee3020 --- /dev/null +++ b/db/migrate/20130812233634_remove_shipping_method_from_product_distribution.rb @@ -0,0 +1,9 @@ +class RemoveShippingMethodFromProductDistribution < ActiveRecord::Migration + def up + remove_column :product_distributions, :shipping_method_id + end + + def down + add_column :product_distributions, :shipping_method_id, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index ac3280a415..aa6a4475a3 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20130809075103) do +ActiveRecord::Schema.define(:version => 20130812233634) do create_table "adjustment_metadata", :force => true do |t| t.integer "adjustment_id" @@ -229,7 +229,6 @@ ActiveRecord::Schema.define(:version => 20130809075103) do create_table "product_distributions", :force => true do |t| t.integer "product_id" t.integer "distributor_id" - t.integer "shipping_method_id" t.datetime "created_at" t.datetime "updated_at" t.integer "enterprise_fee_id" diff --git a/spec/lib/open_food_web/group_buy_report_spec.rb b/spec/lib/open_food_web/group_buy_report_spec.rb index ec23cab070..23bfc70957 100644 --- a/spec/lib/open_food_web/group_buy_report_spec.rb +++ b/spec/lib/open_food_web/group_buy_report_spec.rb @@ -13,8 +13,7 @@ module OpenFoodWeb @variant1 = create(:variant) @variant1.product.supplier = @supplier1 @variant1.product.save! - shipping_method = create(:shipping_method) - product_distribution = create(:product_distribution, :product => @variant1.product, :distributor => distributor, :shipping_method => create(:shipping_method)) + product_distribution = create(:product_distribution, :product => @variant1.product, :distributor => distributor) shipping_instructions = "pick up on thursday please!" order1 = create(:order, :distributor => distributor, :bill_address => bill_address, :special_instructions => shipping_instructions) @@ -29,7 +28,7 @@ module OpenFoodWeb @variant2 = create(:variant) @variant2.product.supplier = @supplier1 @variant2.product.save! - product_distribution = create(:product_distribution, :product => @variant2.product, :distributor => distributor, :shipping_method => create(:shipping_method)) + product_distribution = create(:product_distribution, :product => @variant2.product, :distributor => distributor) line_item22 = create(:line_item, :variant => @variant2, :order => order2) order2.line_items << line_item22 @@ -39,7 +38,7 @@ module OpenFoodWeb @variant3 = create(:variant, :weight => nil) @variant3.product.supplier = @supplier2 @variant3.product.save! - product_distribution = create(:product_distribution, :product => @variant3.product, :distributor => distributor, :shipping_method => create(:shipping_method)) + product_distribution = create(:product_distribution, :product => @variant3.product, :distributor => distributor) order3 = create(:order, :distributor => distributor, :bill_address => bill_address, :special_instructions => shipping_instructions) line_item31 = create(:line_item, :variant => @variant3, :order => order3) diff --git a/spec/lib/open_food_web/order_and_distributor_report_spec.rb b/spec/lib/open_food_web/order_and_distributor_report_spec.rb index cabeb5010f..d003254f7b 100644 --- a/spec/lib/open_food_web/order_and_distributor_report_spec.rb +++ b/spec/lib/open_food_web/order_and_distributor_report_spec.rb @@ -11,7 +11,7 @@ module OpenFoodWeb @distributor_address = create(:address, :address1 => "distributor address", :city => 'The Shire', :zipcode => "1234") @distributor = create(:distributor_enterprise, :address => @distributor_address) product = create(:product) - product_distribution = create(:product_distribution, :product => product, :distributor => @distributor, :shipping_method => create(:shipping_method)) + product_distribution = create(:product_distribution, :product => product, :distributor => @distributor) @shipping_instructions = "pick up on thursday please!" @order = create(:order, :distributor => @distributor, :bill_address => @bill_address, :special_instructions => @shipping_instructions) @payment_method = create(:payment_method)