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 | 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> | ... | ... |