Commit c73a84e2851b15dd5209fa1b84ec849e716c8da7
1 parent
f9156029
Exists in
master
and in
28 other branches
Free delivery price for shopping_cart
Showing
5 changed files
with
44 additions
and
15 deletions
Show diff stats
plugins/shopping_cart/controllers/shopping_cart_plugin_myprofile_controller.rb
| ... | ... | @@ -8,6 +8,7 @@ class ShoppingCartPluginMyprofileController < MyProfileController |
| 8 | 8 | params[:settings][:enabled] = params[:settings][:enabled] == '1' |
| 9 | 9 | params[:settings][:delivery] = params[:settings][:delivery] == '1' |
| 10 | 10 | params[:settings][:delivery_price] = params[:settings][:delivery_price].to_d |
| 11 | + params[:settings][:free_delivery_price] = params[:settings][:free_delivery_price].to_d | |
| 11 | 12 | end |
| 12 | 13 | |
| 13 | 14 | @settings = Noosfero::Plugin::Settings.new(profile, ShoppingCartPlugin, params[:settings]) | ... | ... |
plugins/shopping_cart/controllers/shopping_cart_plugin_profile_controller.rb
plugins/shopping_cart/lib/shopping_cart_plugin/cart_helper.rb
| ... | ... | @@ -8,22 +8,26 @@ module ShoppingCartPlugin::CartHelper |
| 8 | 8 | end |
| 9 | 9 | |
| 10 | 10 | def get_price(product, environment, quantity=1) |
| 11 | - float_to_currency_cart(sell_price(product)*quantity, environment) | |
| 11 | + float_to_currency_cart(price_with_quantity(product,quantity), environment) | |
| 12 | 12 | end |
| 13 | 13 | |
| 14 | - def get_total(items, environment) | |
| 15 | - float_to_currency_cart(items.map { |id, quantity| sell_price(Product.find(id)) * quantity}.sum, environment) | |
| 14 | + def price_with_quantity(product, quantity=1) | |
| 15 | + quantity = 1 if !quantity.kind_of?(Numeric) | |
| 16 | + sell_price(product)*quantity | |
| 17 | + end | |
| 18 | + | |
| 19 | + def get_total(items) | |
| 20 | + items.map { |id, quantity| price_with_quantity(Product.find(id),quantity)}.sum | |
| 21 | + end | |
| 22 | + | |
| 23 | + def get_total_on_currency(items, environment) | |
| 24 | + float_to_currency_cart(get_total(items), environment) | |
| 16 | 25 | end |
| 17 | 26 | |
| 18 | 27 | def items_table(items, profile, by_mail = false) |
| 19 | 28 | environment = profile.environment |
| 20 | 29 | settings = Noosfero::Plugin::Settings.new(profile, ShoppingCartPlugin) |
| 21 | 30 | items = items.to_a |
| 22 | - if settings.delivery | |
| 23 | - delivery = Product.new(:name => _('Delivery'), :price => settings.delivery_price) | |
| 24 | - delivery.save(false) | |
| 25 | - items << [delivery.id, 1] | |
| 26 | - end | |
| 27 | 31 | |
| 28 | 32 | quantity_opts = { :class => 'cart-table-quantity' } |
| 29 | 33 | quantity_opts.merge!({:align => 'center'}) if by_mail |
| ... | ... | @@ -31,6 +35,16 @@ module ShoppingCartPlugin::CartHelper |
| 31 | 35 | price_opts.merge!({:align => 'right'}) if by_mail |
| 32 | 36 | items.sort! {|a, b| Product.find(a.first).name <=> Product.find(b.first).name} |
| 33 | 37 | |
| 38 | + if settings.delivery | |
| 39 | + if settings.free_delivery_price && get_total(items) >= settings.free_delivery_price | |
| 40 | + delivery = Product.new(:name => _('Free delivery'), :price => 0) | |
| 41 | + else | |
| 42 | + delivery = Product.new(:name => _('Delivery'), :price => settings.delivery_price) | |
| 43 | + end | |
| 44 | + delivery.save(false) | |
| 45 | + items << [delivery.id, ''] | |
| 46 | + end | |
| 47 | + | |
| 34 | 48 | table = '<table id="cart-items-table" cellpadding="2" cellspacing="0" |
| 35 | 49 | border="'+(by_mail ? '1' : '0')+'" |
| 36 | 50 | style="'+(by_mail ? 'border-collapse:collapse' : '')+'">' + |
| ... | ... | @@ -48,7 +62,7 @@ module ShoppingCartPlugin::CartHelper |
| 48 | 62 | ) |
| 49 | 63 | end.join("\n") |
| 50 | 64 | |
| 51 | - total = get_total(items, environment) | |
| 65 | + total = get_total_on_currency(items, environment) | |
| 52 | 66 | delivery.destroy if settings.delivery |
| 53 | 67 | |
| 54 | 68 | table + | ... | ... |
plugins/shopping_cart/views/shopping_cart_plugin_myprofile/edit.html.erb
| ... | ... | @@ -3,7 +3,12 @@ |
| 3 | 3 | <% form_for(:settings, @settings, :url => {:action => 'edit'}, :html => {:method => 'post'}) do |f| %> |
| 4 | 4 | <%= labelled_form_field(_('Enabled?'), f.check_box(:enabled)) %> |
| 5 | 5 | <%= labelled_form_field(_('Delivery?'), f.check_box(:delivery)) %> |
| 6 | - <%= labelled_form_field(_('Delivery price:'), f.text_field(:delivery_price)) %> | |
| 6 | + <% display_delivery_options = @settings.delivery ? 'auto' : 'none' %> | |
| 7 | + <fieldset id='delivery_options' style="display: <%= display_delivery_options %>"><legend><%=_('Delivery Options')%></legend> | |
| 8 | + <%= labelled_form_field(_('Price:'), f.text_field(:delivery_price)) %> | |
| 9 | + <%= labelled_form_field(_('Free delivery price:'), f.text_field(:free_delivery_price)) %> | |
| 10 | + <%= content_tag('small', _('Empty stands for no free delivery price.')) %> | |
| 11 | + </fieldset> | |
| 7 | 12 | <br style='clear: both'/> |
| 8 | 13 | <br style='clear: both'/> |
| 9 | 14 | <div> |
| ... | ... | @@ -11,3 +16,9 @@ |
| 11 | 16 | <%= button :back, _('Back to control panel'), :controller => 'profile_editor' %> |
| 12 | 17 | </div> |
| 13 | 18 | <% end%> |
| 19 | + | |
| 20 | +<script> | |
| 21 | + jQuery('#settings_delivery').click(function(){ | |
| 22 | + jQuery('#delivery_options').toggle('fast'); | |
| 23 | + }); | |
| 24 | +</script> | ... | ... |
plugins/shopping_cart/views/shopping_cart_plugin_profile/buy.html.erb
| ... | ... | @@ -7,11 +7,13 @@ |
| 7 | 7 | <%= labelled_form_field('* ' + _("Email"), f.text_field(:email, :class => 'required email') ) %> |
| 8 | 8 | <%= labelled_form_field('* ' + _("Contact phone"), f.text_field(:contact_phone, :class => 'required') ) %> |
| 9 | 9 | </div> |
| 10 | - <fieldset><legend><%=_('Delivery Address')%></legend> | |
| 11 | - <%= labelled_form_field(_('Address (street and number)'), f.text_field(:address)) %> | |
| 12 | - <%= labelled_form_field( _("City"), f.text_field(:city)) %> | |
| 13 | - <%= labelled_form_field(_('ZIP code'), f.text_field(:zip_code)) %> | |
| 14 | - </fieldset> | |
| 10 | + <% if @settings.delivery %> | |
| 11 | + <fieldset><legend><%=_('Delivery Address')%></legend> | |
| 12 | + <%= labelled_form_field(_('Address (street and number)'), f.text_field(:address)) %> | |
| 13 | + <%= labelled_form_field( _("City"), f.text_field(:city)) %> | |
| 14 | + <%= labelled_form_field(_('ZIP code'), f.text_field(:zip_code)) %> | |
| 15 | + </fieldset> | |
| 16 | + <% end %> | |
| 15 | 17 | <div id="cart-form-actions"> |
| 16 | 18 | <%= submit_button(:send, _('Send buy request')) %> |
| 17 | 19 | </div> | ... | ... |