Commit f91560291e809c887dc2d8268a8f737924163a6f
1 parent
7843b795
Exists in
master
and in
28 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,9 +4,16 @@ class ShoppingCartPluginMyprofileController < MyProfileController | ||
| 4 | append_view_path File.join(File.dirname(__FILE__) + '/../views') | 4 | append_view_path File.join(File.dirname(__FILE__) + '/../views') |
| 5 | 5 | ||
| 6 | def edit | 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 | if request.post? | 14 | if request.post? |
| 8 | begin | 15 | begin |
| 9 | - profile.update_attributes!(params[:profile_attr]) | 16 | + @settings.save! |
| 10 | session[:notice] = _('Option updated successfully.') | 17 | session[:notice] = _('Option updated successfully.') |
| 11 | rescue Exception => exception | 18 | rescue Exception => exception |
| 12 | session[:notice] = _('Option wasn\'t updated successfully.') | 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 @@ | @@ -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,8 +11,21 @@ class ShoppingCartPlugin < Noosfero::Plugin | ||
| 11 | _("A shopping basket feature for enterprises") | 11 | _("A shopping basket feature for enterprises") |
| 12 | end | 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 | def add_to_cart_button(item, enterprise = context.profile) | 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 | lambda { | 29 | lambda { |
| 17 | link_to(_('Add to basket'), "add:#{item.name}", | 30 | link_to(_('Add to basket'), "add:#{item.name}", |
| 18 | :class => 'cart-add-item', | 31 | :class => 'cart-add-item', |
| @@ -39,11 +52,12 @@ class ShoppingCartPlugin < Noosfero::Plugin | @@ -39,11 +52,12 @@ class ShoppingCartPlugin < Noosfero::Plugin | ||
| 39 | end | 52 | end |
| 40 | 53 | ||
| 41 | def control_panel_buttons | 54 | def control_panel_buttons |
| 55 | + settings = Noosfero::Plugin::Settings.new(context.profile, ShoppingCartPlugin) | ||
| 42 | buttons = [] | 56 | buttons = [] |
| 43 | if context.profile.enterprise? | 57 | if context.profile.enterprise? |
| 44 | buttons << { :title => _('Shopping basket'), :icon => 'shopping-cart-icon', :url => {:controller => 'shopping_cart_plugin_myprofile', :action => 'edit'} } | 58 | buttons << { :title => _('Shopping basket'), :icon => 'shopping-cart-icon', :url => {:controller => 'shopping_cart_plugin_myprofile', :action => 'edit'} } |
| 45 | end | 59 | end |
| 46 | - if context.profile.enterprise? && context.profile.shopping_cart | 60 | + if context.profile.enterprise? && settings.enabled |
| 47 | buttons << { :title => _('Purchase reports'), :icon => 'shopping-cart-purchase-report', :url => {:controller => 'shopping_cart_plugin_myprofile', :action => 'reports'} } | 61 | buttons << { :title => _('Purchase reports'), :icon => 'shopping-cart-purchase-report', :url => {:controller => 'shopping_cart_plugin_myprofile', :action => 'reports'} } |
| 48 | end | 62 | end |
| 49 | 63 |
plugins/shopping_cart/lib/shopping_cart_plugin/cart_helper.rb
| @@ -17,9 +17,11 @@ module ShoppingCartPlugin::CartHelper | @@ -17,9 +17,11 @@ module ShoppingCartPlugin::CartHelper | ||
| 17 | 17 | ||
| 18 | def items_table(items, profile, by_mail = false) | 18 | def items_table(items, profile, by_mail = false) |
| 19 | environment = profile.environment | 19 | environment = profile.environment |
| 20 | + settings = Noosfero::Plugin::Settings.new(profile, ShoppingCartPlugin) | ||
| 20 | items = items.to_a | 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 | items << [delivery.id, 1] | 25 | items << [delivery.id, 1] |
| 24 | end | 26 | end |
| 25 | 27 | ||
| @@ -47,7 +49,7 @@ module ShoppingCartPlugin::CartHelper | @@ -47,7 +49,7 @@ module ShoppingCartPlugin::CartHelper | ||
| 47 | end.join("\n") | 49 | end.join("\n") |
| 48 | 50 | ||
| 49 | total = get_total(items, environment) | 51 | total = get_total(items, environment) |
| 50 | - delivery.destroy if profile.shopping_cart_delivery | 52 | + delivery.destroy if settings.delivery |
| 51 | 53 | ||
| 52 | table + | 54 | table + |
| 53 | content_tag('th', _('Total:'), :colspan => 2, :class => 'cart-table-total-label') + | 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,46 +13,42 @@ class ShoppingCartPluginMyprofileControllerTest < ActionController::TestCase | ||
| 13 | attr_reader :enterprise | 13 | attr_reader :enterprise |
| 14 | 14 | ||
| 15 | should 'be able to enable shopping cart' do | 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 | end | 21 | end |
| 23 | 22 | ||
| 24 | should 'be able to disable shopping cart' do | 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 | end | 29 | end |
| 32 | 30 | ||
| 33 | should 'be able to enable shopping cart delivery' do | 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 | end | 37 | end |
| 41 | 38 | ||
| 42 | should 'be able to disable shopping cart delivery' do | 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 | end | 45 | end |
| 50 | 46 | ||
| 51 | should 'be able to choose the delivery price' do | 47 | should 'be able to choose the delivery price' do |
| 52 | price = 4.35 | 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 | end | 52 | end |
| 57 | 53 | ||
| 58 | should 'filter the reports correctly' do | 54 | should 'filter the reports correctly' do |
| @@ -112,4 +108,11 @@ class ShoppingCartPluginMyprofileControllerTest < ActionController::TestCase | @@ -112,4 +108,11 @@ class ShoppingCartPluginMyprofileControllerTest < ActionController::TestCase | ||
| 112 | po.reload | 108 | po.reload |
| 113 | assert_equal ShoppingCartPlugin::PurchaseOrder::Status::CONFIRMED, po.status | 109 | assert_equal ShoppingCartPlugin::PurchaseOrder::Status::CONFIRMED, po.status |
| 114 | end | 110 | end |
| 111 | + | ||
| 112 | + private | ||
| 113 | + | ||
| 114 | + def settings | ||
| 115 | + @enterprise.reload | ||
| 116 | + Noosfero::Plugin::Settings.new(@enterprise, ShoppingCartPlugin) | ||
| 117 | + end | ||
| 115 | end | 118 | end |
plugins/shopping_cart/views/shopping_cart_plugin_myprofile/edit.html.erb
| 1 | <h1> <%= _('Basket options') %> </h1> | 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 | <br style='clear: both'/> | 7 | <br style='clear: both'/> |
| 8 | <br style='clear: both'/> | 8 | <br style='clear: both'/> |
| 9 | <div> | 9 | <div> |