Commit 3f3550d3fd6947eba4cd4e14bd165331b15c10bd
1 parent
b99c27c5
Exists in
master
and in
28 other branches
[shopping-cart plugin] Delivery and some fixes
Showing
8 changed files
with
71 additions
and
21 deletions
Show diff stats
plugins/shopping_cart/controllers/shopping_cart_plugin_myprofile_controller.rb
| ... | ... | @@ -4,8 +4,7 @@ class ShoppingCartPluginMyprofileController < MyProfileController |
| 4 | 4 | def edit |
| 5 | 5 | if request.post? |
| 6 | 6 | begin |
| 7 | - profile.shopping_cart = params[:shopping_cart] == '1' ? true : false | |
| 8 | - profile.save! | |
| 7 | + profile.update_attributes!(params[:profile_attr]) | |
| 9 | 8 | session[:notice] = _('Option updated successfully.') |
| 10 | 9 | rescue Exception => exception |
| 11 | 10 | session[:notice] = _('Option wasn\'t updated successfully.') | ... | ... |
plugins/shopping_cart/db/migrate/20110513112133_add_shopping_cart_delivery_to_profile.rb
0 → 100644
| ... | ... | @@ -0,0 +1,12 @@ |
| 1 | +class AddShoppingCartDeliveryToProfile < ActiveRecord::Migration | |
| 2 | + | |
| 3 | + def self.up | |
| 4 | + add_column :profiles, :shopping_cart_delivery, :boolean, :default => false | |
| 5 | + add_column :profiles, :shopping_cart_delivery_price, :decimal, :default => 0 | |
| 6 | + end | |
| 7 | + | |
| 8 | + def self.down | |
| 9 | + remove_column :profiles, :shopping_cart_delivery | |
| 10 | + remove_column :profiles, :shopping_cart_delivery_price | |
| 11 | + end | |
| 12 | +end | ... | ... |
plugins/shopping_cart/lib/shopping_cart_plugin/cart_helper.rb
| ... | ... | @@ -15,8 +15,20 @@ module ShoppingCartPlugin::CartHelper |
| 15 | 15 | float_to_currency_cart(items.map { |id, quantity| sell_price(Product.find(id)) * quantity}.sum, environment) |
| 16 | 16 | end |
| 17 | 17 | |
| 18 | - def items_table(items, environment, by_mail = false) | |
| 19 | - '<table id="cart-items-table" cellpadding="2" cellspacing="0" | |
| 18 | + def items_table(items, profile, by_mail = false) | |
| 19 | + environment = profile.environment | |
| 20 | + 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) | |
| 23 | + items << [delivery.id, 1] | |
| 24 | + end | |
| 25 | + | |
| 26 | + quantity_opts = { :class => 'cart-table-quantity' } | |
| 27 | + quantity_opts.merge!({:align => 'center'}) if by_mail | |
| 28 | + price_opts = {:class => 'cart-table-price'} | |
| 29 | + price_opts.merge!({:align => 'right'}) if by_mail | |
| 30 | + | |
| 31 | + table = '<table id="cart-items-table" cellpadding="2" cellspacing="0" | |
| 20 | 32 | border="'+(by_mail ? '1' : '0')+'" |
| 21 | 33 | style="'+(by_mail ? 'border-collapse:collapse' : '')+'">' + |
| 22 | 34 | content_tag('tr', |
| ... | ... | @@ -26,18 +38,19 @@ module ShoppingCartPlugin::CartHelper |
| 26 | 38 | ) + |
| 27 | 39 | items.map do |id, quantity| |
| 28 | 40 | product = Product.find(id) |
| 29 | - quantity_opts = { :class => 'cart-table-quantity' } | |
| 30 | - quantity_opts.merge!({:align => 'center'}) if by_mail | |
| 31 | - price_opts = {:class => 'cart-table-price'} | |
| 32 | - price_opts.merge!({:align => 'right'}) if by_mail | |
| 33 | 41 | content_tag('tr', |
| 34 | 42 | content_tag('td', product.name) + |
| 35 | 43 | content_tag('td', quantity, quantity_opts ) + |
| 36 | 44 | content_tag('td', get_price(product, environment), price_opts ) |
| 37 | 45 | ) |
| 38 | - end.join("\n") + | |
| 46 | + end.join("\n") | |
| 47 | + | |
| 48 | + total = get_total(items, environment) | |
| 49 | + delivery.destroy if profile.shopping_cart_delivery | |
| 50 | + | |
| 51 | + table + | |
| 39 | 52 | content_tag('th', _('Total:'), :colspan => 2, :class => 'cart-table-total-label') + |
| 40 | - content_tag('th', get_total(items, environment), :class => 'cart-table-total-value') + | |
| 53 | + content_tag('th', total, :class => 'cart-table-total-value') + | |
| 41 | 54 | '</table>' |
| 42 | 55 | end |
| 43 | 56 | ... | ... |
plugins/shopping_cart/test/functional/shopping_cart_plugin_myprofile_controller_test.rb
| ... | ... | @@ -20,7 +20,7 @@ class ShoppingCartPluginMyprofileControllerTest < Test::Unit::TestCase |
| 20 | 20 | should 'be able to enable shopping cart' do |
| 21 | 21 | enterprise.shopping_cart = false |
| 22 | 22 | enterprise.save |
| 23 | - post :edit, :profile => enterprise.identifier, :shopping_cart => '1' | |
| 23 | + post :edit, :profile => enterprise.identifier, :profile_attr => {:shopping_cart => '1'} | |
| 24 | 24 | enterprise.reload |
| 25 | 25 | |
| 26 | 26 | assert enterprise.shopping_cart |
| ... | ... | @@ -29,9 +29,34 @@ class ShoppingCartPluginMyprofileControllerTest < Test::Unit::TestCase |
| 29 | 29 | should 'be able to disable shopping cart' do |
| 30 | 30 | enterprise.shopping_cart = true |
| 31 | 31 | enterprise.save |
| 32 | - post :edit, :profile => enterprise.identifier, :shopping_cart => '0' | |
| 32 | + post :edit, :profile => enterprise.identifier, :profile_attr => {:shopping_cart => '0'} | |
| 33 | 33 | enterprise.reload |
| 34 | 34 | |
| 35 | 35 | assert !enterprise.shopping_cart |
| 36 | 36 | end |
| 37 | + | |
| 38 | + should 'be able to enable shopping cart delivery' do | |
| 39 | + enterprise.shopping_cart_delivery = false | |
| 40 | + enterprise.save | |
| 41 | + post :edit, :profile => enterprise.identifier, :profile_attr => {:shopping_cart_delivery => '1'} | |
| 42 | + enterprise.reload | |
| 43 | + | |
| 44 | + assert enterprise.shopping_cart_delivery | |
| 45 | + end | |
| 46 | + | |
| 47 | + should 'be able to disable shopping cart delivery' do | |
| 48 | + enterprise.shopping_cart_delivery = true | |
| 49 | + enterprise.save | |
| 50 | + post :edit, :profile => enterprise.identifier, :profile_attr => {:shopping_cart_delivery => '0'} | |
| 51 | + enterprise.reload | |
| 52 | + | |
| 53 | + assert !enterprise.shopping_cart_delivery | |
| 54 | + end | |
| 55 | + | |
| 56 | + should 'be able to choose the delivery price' do | |
| 57 | + price = 4.35 | |
| 58 | + post :edit, :profile => enterprise.identifier, :profile_attr => {:shopping_cart_delivery_price => price} | |
| 59 | + enterprise.reload | |
| 60 | + assert enterprise.shopping_cart_delivery_price == price | |
| 61 | + end | |
| 37 | 62 | end | ... | ... |
plugins/shopping_cart/views/shopping_cart_plugin/mailer/customer_notification.html.erb
plugins/shopping_cart/views/shopping_cart_plugin/mailer/supplier_notification.html.erb
plugins/shopping_cart/views/shopping_cart_plugin_myprofile/edit.html.erb
| 1 | 1 | <h1> <%= _('Cart options') %> </h1> |
| 2 | 2 | |
| 3 | -<%# form_for :profile, profile, :url => {:action => 'edit'} do %> | |
| 4 | -<% form_tag :action => 'edit' do %> | |
| 5 | - <%= labelled_check_box(_('Enabled?'), :shopping_cart, '1', profile.shopping_cart) %> | |
| 3 | +<% form_for(:profile_attr, profile, :url => {:action => 'edit'}, :html => {:method => 'post'}) do |f| %> | |
| 4 | +<%# form_tag :action => 'edit' do %> | |
| 5 | + <%= labelled_form_field(_('Enabled?'), f.check_box(:shopping_cart)) %> | |
| 6 | + <%= labelled_form_field(_('Delivery?'), f.check_box(:shopping_cart_delivery)) %> | |
| 7 | + <%= labelled_form_field(_('Delivery price:'), f.text_field(:shopping_cart_delivery_price)) %> | |
| 6 | 8 | <br style='clear: both'/> |
| 7 | 9 | <br style='clear: both'/> |
| 8 | 10 | <div> | ... | ... |
plugins/shopping_cart/views/shopping_cart_plugin_profile/buy.html.erb
| ... | ... | @@ -3,22 +3,21 @@ |
| 3 | 3 | <% form_for(:customer, person, :url => {:action => 'send_request'}, |
| 4 | 4 | :html => {:onsubmit => "return Cart.send_request(this)", :id => 'cart-request-form' }) do |f| %> |
| 5 | 5 | <div id="cart-form-main"> |
| 6 | - <%= labelled_form_field('* ' + _("Full name"), f.text_field(:name, :class => 'required') ) %> | |
| 6 | + <%= labelled_form_field('* ' + _("Name"), f.text_field(:name, :class => 'required') ) %> | |
| 7 | 7 | <%= labelled_form_field('* ' + _("Email"), f.text_field(:email, :class => 'required email') ) %> |
| 8 | - <%= labelled_form_field('* ' + _("Phone number"), f.text_field(:contact_phone, :class => 'required') ) %> | |
| 8 | + <%= labelled_form_field('* ' + _("Contact phone"), f.text_field(:contact_phone, :class => 'required') ) %> | |
| 9 | 9 | </div> |
| 10 | 10 | <fieldset><legend><%=_('Delivery Address')%></legend> |
| 11 | 11 | <%= labelled_form_field(_('Address (street and number)'), f.text_field(:address)) %> |
| 12 | 12 | <%= labelled_form_field( _("City"), f.text_field(:city)) %> |
| 13 | 13 | <%= labelled_form_field( _("State"), f.text_field(:state)) %> |
| 14 | - <%= select_country(_('Country'), :customer, :country, {:class => 'type-select'}, {:selected => person.country}) %> | |
| 15 | 14 | <%= labelled_form_field(_('ZIP code'), f.text_field(:zip_code)) %> |
| 16 | 15 | </fieldset> |
| 17 | 16 | <div id="cart-form-actions"> |
| 18 | 17 | <%= submit_button(:send, _('Send buy request')) %> |
| 19 | 18 | </div> |
| 20 | 19 | <% end %> |
| 21 | - <%= items_table(session[:cart][:items], @environment) %> | |
| 20 | + <%= items_table(session[:cart][:items], profile) %> | |
| 22 | 21 | </div> |
| 23 | 22 | |
| 24 | 23 | <script type="text/javascript"> | ... | ... |