Commit f91560291e809c887dc2d8268a8f737924163a6f
1 parent
7843b795
Exists in
master
and in
29 other branches
Moving shopping_cart settings from profiles table to settings
Showing
6 changed files
with
78 additions
and
33 deletions
Show diff stats
plugins/shopping_cart/controllers/shopping_cart_plugin_myprofile_controller.rb
... | ... | @@ -4,9 +4,16 @@ class ShoppingCartPluginMyprofileController < MyProfileController |
4 | 4 | append_view_path File.join(File.dirname(__FILE__) + '/../views') |
5 | 5 | |
6 | 6 | def edit |
7 | + if params[:settings] | |
8 | + params[:settings][:enabled] = params[:settings][:enabled] == '1' | |
9 | + params[:settings][:delivery] = params[:settings][:delivery] == '1' | |
10 | + params[:settings][:delivery_price] = params[:settings][:delivery_price].to_d | |
11 | + end | |
12 | + | |
13 | + @settings = Noosfero::Plugin::Settings.new(profile, ShoppingCartPlugin, params[:settings]) | |
7 | 14 | if request.post? |
8 | 15 | begin |
9 | - profile.update_attributes!(params[:profile_attr]) | |
16 | + @settings.save! | |
10 | 17 | session[:notice] = _('Option updated successfully.') |
11 | 18 | rescue Exception => exception |
12 | 19 | session[:notice] = _('Option wasn\'t updated successfully.') | ... | ... |
plugins/shopping_cart/db/migrate/20121022190819_move_fields_included_on_profiles_table_to_settings.rb
0 → 100644
... | ... | @@ -0,0 +1,19 @@ |
1 | +class MoveFieldsIncludedOnProfilesTableToSettings < ActiveRecord::Migration | |
2 | + def self.up | |
3 | + Profile.find_each do |profile| | |
4 | + settings = Noosfero::Plugin::Settings.new(profile, ShoppingCartPlugin) | |
5 | + settings.enabled = profile.shopping_cart | |
6 | + settings.delivery = profile.shopping_cart_delivery | |
7 | + settings.delivery_price = profile.shopping_cart_delivery_price | |
8 | + settings.save! | |
9 | + end | |
10 | + | |
11 | + remove_column :profiles, :shopping_cart | |
12 | + remove_column :profiles, :shopping_cart_delivery | |
13 | + remove_column :profiles, :shopping_cart_delivery_price | |
14 | + end | |
15 | + | |
16 | + def self.down | |
17 | + say "This migration can not be reverted!" | |
18 | + end | |
19 | +end | ... | ... |
plugins/shopping_cart/lib/shopping_cart_plugin.rb
... | ... | @@ -11,8 +11,21 @@ class ShoppingCartPlugin < Noosfero::Plugin |
11 | 11 | _("A shopping basket feature for enterprises") |
12 | 12 | end |
13 | 13 | |
14 | + def self.enabled_default_setting | |
15 | + true | |
16 | + end | |
17 | + | |
18 | + def self.delivery_default_setting | |
19 | + false | |
20 | + end | |
21 | + | |
22 | + def self.delivery_price_default_setting | |
23 | + 0 | |
24 | + end | |
25 | + | |
14 | 26 | def add_to_cart_button(item, enterprise = context.profile) |
15 | - if enterprise.shopping_cart && item.available | |
27 | + settings = Noosfero::Plugin::Settings.new(enterprise, ShoppingCartPlugin) | |
28 | + if settings.enabled && item.available | |
16 | 29 | lambda { |
17 | 30 | link_to(_('Add to basket'), "add:#{item.name}", |
18 | 31 | :class => 'cart-add-item', |
... | ... | @@ -39,11 +52,12 @@ class ShoppingCartPlugin < Noosfero::Plugin |
39 | 52 | end |
40 | 53 | |
41 | 54 | def control_panel_buttons |
55 | + settings = Noosfero::Plugin::Settings.new(context.profile, ShoppingCartPlugin) | |
42 | 56 | buttons = [] |
43 | 57 | if context.profile.enterprise? |
44 | 58 | buttons << { :title => _('Shopping basket'), :icon => 'shopping-cart-icon', :url => {:controller => 'shopping_cart_plugin_myprofile', :action => 'edit'} } |
45 | 59 | end |
46 | - if context.profile.enterprise? && context.profile.shopping_cart | |
60 | + if context.profile.enterprise? && settings.enabled | |
47 | 61 | buttons << { :title => _('Purchase reports'), :icon => 'shopping-cart-purchase-report', :url => {:controller => 'shopping_cart_plugin_myprofile', :action => 'reports'} } |
48 | 62 | end |
49 | 63 | ... | ... |
plugins/shopping_cart/lib/shopping_cart_plugin/cart_helper.rb
... | ... | @@ -17,9 +17,11 @@ module ShoppingCartPlugin::CartHelper |
17 | 17 | |
18 | 18 | def items_table(items, profile, by_mail = false) |
19 | 19 | environment = profile.environment |
20 | + settings = Noosfero::Plugin::Settings.new(profile, ShoppingCartPlugin) | |
20 | 21 | items = items.to_a |
21 | - if profile.shopping_cart_delivery | |
22 | - delivery = Product.create!(:name => _('Delivery'), :price => profile.shopping_cart_delivery_price, :product_category => ProductCategory.last) | |
22 | + if settings.delivery | |
23 | + delivery = Product.new(:name => _('Delivery'), :price => settings.delivery_price) | |
24 | + delivery.save(false) | |
23 | 25 | items << [delivery.id, 1] |
24 | 26 | end |
25 | 27 | |
... | ... | @@ -47,7 +49,7 @@ module ShoppingCartPlugin::CartHelper |
47 | 49 | end.join("\n") |
48 | 50 | |
49 | 51 | total = get_total(items, environment) |
50 | - delivery.destroy if profile.shopping_cart_delivery | |
52 | + delivery.destroy if settings.delivery | |
51 | 53 | |
52 | 54 | table + |
53 | 55 | content_tag('th', _('Total:'), :colspan => 2, :class => 'cart-table-total-label') + | ... | ... |
plugins/shopping_cart/test/functional/shopping_cart_plugin_myprofile_controller_test.rb
... | ... | @@ -13,46 +13,42 @@ class ShoppingCartPluginMyprofileControllerTest < ActionController::TestCase |
13 | 13 | attr_reader :enterprise |
14 | 14 | |
15 | 15 | should 'be able to enable shopping cart' do |
16 | - enterprise.shopping_cart = false | |
17 | - enterprise.save | |
18 | - post :edit, :profile => enterprise.identifier, :profile_attr => {:shopping_cart => '1'} | |
19 | - enterprise.reload | |
16 | + settings.enabled = false | |
17 | + settings.save! | |
18 | + post :edit, :profile => enterprise.identifier, :settings => {:enabled => '1'} | |
20 | 19 | |
21 | - assert enterprise.shopping_cart | |
20 | + assert settings.enabled | |
22 | 21 | end |
23 | 22 | |
24 | 23 | should 'be able to disable shopping cart' do |
25 | - enterprise.shopping_cart = true | |
26 | - enterprise.save | |
27 | - post :edit, :profile => enterprise.identifier, :profile_attr => {:shopping_cart => '0'} | |
28 | - enterprise.reload | |
24 | + settings.enabled = true | |
25 | + settings.save! | |
26 | + post :edit, :profile => enterprise.identifier, :settings => {:enabled => '0'} | |
29 | 27 | |
30 | - assert !enterprise.shopping_cart | |
28 | + assert !settings.enabled | |
31 | 29 | end |
32 | 30 | |
33 | 31 | should 'be able to enable shopping cart delivery' do |
34 | - enterprise.shopping_cart_delivery = false | |
35 | - enterprise.save | |
36 | - post :edit, :profile => enterprise.identifier, :profile_attr => {:shopping_cart_delivery => '1'} | |
37 | - enterprise.reload | |
32 | + settings.delivery = false | |
33 | + settings.save! | |
34 | + post :edit, :profile => enterprise.identifier, :settings => {:delivery => '1'} | |
38 | 35 | |
39 | - assert enterprise.shopping_cart_delivery | |
36 | + assert settings.delivery | |
40 | 37 | end |
41 | 38 | |
42 | 39 | should 'be able to disable shopping cart delivery' do |
43 | - enterprise.shopping_cart_delivery = true | |
44 | - enterprise.save | |
45 | - post :edit, :profile => enterprise.identifier, :profile_attr => {:shopping_cart_delivery => '0'} | |
46 | - enterprise.reload | |
40 | + settings.delivery = true | |
41 | + settings.save! | |
42 | + post :edit, :profile => enterprise.identifier, :settings => {:delivery => '0'} | |
47 | 43 | |
48 | - assert !enterprise.shopping_cart_delivery | |
44 | + assert !settings.delivery | |
49 | 45 | end |
50 | 46 | |
51 | 47 | should 'be able to choose the delivery price' do |
52 | 48 | price = 4.35 |
53 | - post :edit, :profile => enterprise.identifier, :profile_attr => {:shopping_cart_delivery_price => price} | |
54 | - enterprise.reload | |
55 | - assert enterprise.shopping_cart_delivery_price == price | |
49 | + post :edit, :profile => enterprise.identifier, :settings => {:delivery_price => price} | |
50 | + | |
51 | + assert settings.delivery_price == price | |
56 | 52 | end |
57 | 53 | |
58 | 54 | should 'filter the reports correctly' do |
... | ... | @@ -112,4 +108,11 @@ class ShoppingCartPluginMyprofileControllerTest < ActionController::TestCase |
112 | 108 | po.reload |
113 | 109 | assert_equal ShoppingCartPlugin::PurchaseOrder::Status::CONFIRMED, po.status |
114 | 110 | end |
111 | + | |
112 | + private | |
113 | + | |
114 | + def settings | |
115 | + @enterprise.reload | |
116 | + Noosfero::Plugin::Settings.new(@enterprise, ShoppingCartPlugin) | |
117 | + end | |
115 | 118 | end | ... | ... |
plugins/shopping_cart/views/shopping_cart_plugin_myprofile/edit.html.erb
1 | 1 | <h1> <%= _('Basket options') %> </h1> |
2 | 2 | |
3 | -<% form_for(:profile_attr, profile, :url => {:action => 'edit'}, :html => {:method => 'post'}) do |f| %> | |
4 | - <%= labelled_form_field(_('Enabled?'), f.check_box(:shopping_cart)) %> | |
5 | - <%= labelled_form_field(_('Delivery?'), f.check_box(:shopping_cart_delivery)) %> | |
6 | - <%= labelled_form_field(_('Delivery price:'), f.text_field(:shopping_cart_delivery_price)) %> | |
3 | +<% form_for(:settings, @settings, :url => {:action => 'edit'}, :html => {:method => 'post'}) do |f| %> | |
4 | + <%= labelled_form_field(_('Enabled?'), f.check_box(:enabled)) %> | |
5 | + <%= labelled_form_field(_('Delivery?'), f.check_box(:delivery)) %> | |
6 | + <%= labelled_form_field(_('Delivery price:'), f.text_field(:delivery_price)) %> | |
7 | 7 | <br style='clear: both'/> |
8 | 8 | <br style='clear: both'/> |
9 | 9 | <div> | ... | ... |