From dbf169eeeaada60f4da06e4c4fcd0144298631ad Mon Sep 17 00:00:00 2001 From: Larissa Reis Date: Fri, 22 Jun 2012 12:08:45 -0300 Subject: [PATCH] Fixes crash in shopping cart reports when product is removed --- plugins/shopping_cart/controllers/shopping_cart_plugin_myprofile_controller.rb | 6 +++--- plugins/shopping_cart/controllers/shopping_cart_plugin_profile_controller.rb | 3 ++- plugins/shopping_cart/lib/shopping_cart_plugin/line_item.rb | 23 +++++++++++++++++++++++ plugins/shopping_cart/test/functional/shopping_cart_plugin_myprofile_controller_test.rb | 18 ++++++++++++------ plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_orders_list.html.erb | 4 ++-- plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_products_list.html.erb | 6 +++--- 6 files changed, 45 insertions(+), 15 deletions(-) create mode 100644 plugins/shopping_cart/lib/shopping_cart_plugin/line_item.rb diff --git a/plugins/shopping_cart/controllers/shopping_cart_plugin_myprofile_controller.rb b/plugins/shopping_cart/controllers/shopping_cart_plugin_myprofile_controller.rb index 9977544..c3c29a9 100644 --- a/plugins/shopping_cart/controllers/shopping_cart_plugin_myprofile_controller.rb +++ b/plugins/shopping_cart/controllers/shopping_cart_plugin_myprofile_controller.rb @@ -33,9 +33,9 @@ class ShoppingCartPluginMyprofileController < MyProfileController @products = {} @orders.each do |order| - order.products_list.each do |id, qp| - @products[id] ||= 0 - @products[id] += qp[:quantity] + order.products_list.each do |id, qp| + @products[id] ||= ShoppingCartPlugin::LineItem.new(id, qp[:name]) + @products[id].quantity += qp[:quantity] end end end diff --git a/plugins/shopping_cart/controllers/shopping_cart_plugin_profile_controller.rb b/plugins/shopping_cart/controllers/shopping_cart_plugin_profile_controller.rb index 731a446..ffb3ebd 100644 --- a/plugins/shopping_cart/controllers/shopping_cart_plugin_profile_controller.rb +++ b/plugins/shopping_cart/controllers/shopping_cart_plugin_profile_controller.rb @@ -228,7 +228,8 @@ class ShoppingCartPluginProfileController < ProfileController def register_order(custumer, items) new_items = {} items.each do |id, quantity| - new_items[id] = {:quantity => quantity, :price => Product.find(id).price} + product = Product.find(id) + new_items[id] = {:quantity => quantity, :price => product.price, :name => product.name} end ShoppingCartPlugin::PurchaseOrder.create!( :seller => profile, diff --git a/plugins/shopping_cart/lib/shopping_cart_plugin/line_item.rb b/plugins/shopping_cart/lib/shopping_cart_plugin/line_item.rb new file mode 100644 index 0000000..11309cf --- /dev/null +++ b/plugins/shopping_cart/lib/shopping_cart_plugin/line_item.rb @@ -0,0 +1,23 @@ +class ShoppingCartPlugin::LineItem + + attr_accessor :product_id, :quantity + + def initialize(product_id, name) + @product_id = product_id + @name = name + @quantity = 0 + end + + def product + @product ||= Product.find_by_id(product_id) + end + + def name + product && product.name || @name + end + + def ==(other) + self.product == other.product && self.name == other.name && self.quantity == other.quantity + end + +end diff --git a/plugins/shopping_cart/test/functional/shopping_cart_plugin_myprofile_controller_test.rb b/plugins/shopping_cart/test/functional/shopping_cart_plugin_myprofile_controller_test.rb index 51b651d..f2ed746 100644 --- a/plugins/shopping_cart/test/functional/shopping_cart_plugin_myprofile_controller_test.rb +++ b/plugins/shopping_cart/test/functional/shopping_cart_plugin_myprofile_controller_test.rb @@ -77,11 +77,11 @@ class ShoppingCartPluginMyprofileControllerTest < ActionController::TestCase end should 'group filtered orders products and quantities' do - p1 = fast_create(Product, :enterprise_id => enterprise.id, :price => 1) - p2 = fast_create(Product, :enterprise_id => enterprise.id, :price => 2) - p3 = fast_create(Product, :enterprise_id => enterprise.id, :price => 3) - po1_products = {p1.id => {:quantity => 1, :price => p1.price}, p2.id => {:quantity => 2, :price => p2.price }} - po2_products = {p2.id => {:quantity => 1, :price => p2.price}, p3.id => {:quantity => 2, :price => p3.price }} + p1 = fast_create(Product, :enterprise_id => enterprise.id, :price => 1, :name => 'p1') + p2 = fast_create(Product, :enterprise_id => enterprise.id, :price => 2, :name => 'p2') + p3 = fast_create(Product, :enterprise_id => enterprise.id, :price => 3, :name => 'p3') + po1_products = {p1.id => {:quantity => 1, :price => p1.price, :name => p1.name}, p2.id => {:quantity => 2, :price => p2.price, :name => p2.name }} + po2_products = {p2.id => {:quantity => 1, :price => p2.price, :name => p2.name }, p3.id => {:quantity => 2, :price => p3.price, :name => p3.name}} po1 = ShoppingCartPlugin::PurchaseOrder.create!(:seller => enterprise, :products_list => po1_products, :status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED) po2 = ShoppingCartPlugin::PurchaseOrder.create!(:seller => enterprise, :products_list => po2_products, :status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED) @@ -91,7 +91,13 @@ class ShoppingCartPluginMyprofileControllerTest < ActionController::TestCase :to => (Time.now + 1.day).strftime(TIME_FORMAT), :filter_status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED - hash = {p1.id => 1, p2.id => 3, p3.id => 2} + lineitem1 = ShoppingCartPlugin::LineItem.new(p1.id, p1.name) + lineitem1.quantity = 1 + lineitem2 = ShoppingCartPlugin::LineItem.new(p2.id, p2.name) + lineitem2.quantity = 3 + lineitem3 = ShoppingCartPlugin::LineItem.new(p3.id, p3.name) + lineitem3.quantity = 2 + hash = {p1.id => lineitem1, p2.id => lineitem2, p3.id => lineitem3} assert_equal hash, assigns(:products) end diff --git a/plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_orders_list.html.erb b/plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_orders_list.html.erb index 125f22f..88e3295 100644 --- a/plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_orders_list.html.erb +++ b/plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_orders_list.html.erb @@ -38,14 +38,14 @@ diff --git a/plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_products_list.html.erb b/plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_products_list.html.erb index f6c3ddb..bd7bcd2 100644 --- a/plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_products_list.html.erb +++ b/plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_products_list.html.erb @@ -6,10 +6,10 @@ <%= _('Product') %> <%= _('Quantity') %> - <% @products.each do |id, quantity|%> + <% @products.each do |id, item|%> - <%= link_to(Product.find(id).name, Product.find(id).url) %> - <%= quantity %> + <%= item.product ? link_to(item.name, item.product.url) : item.name %> + <%= item.quantity %> <% end %> -- libgit2 0.21.2