forgeos_commerce_front 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. data/COPYING +339 -0
  2. data/COPYING.LESSER +165 -0
  3. data/Gemfile +2 -0
  4. data/LICENSE +2 -0
  5. data/README.textile +28 -0
  6. data/app/assets/images/commerce_front/cart/calulate.png +0 -0
  7. data/app/assets/images/commerce_front/cart/cart.png +0 -0
  8. data/app/assets/images/commerce_front/cart/change_quantity.png +0 -0
  9. data/app/assets/images/commerce_front/cart/delete.png +0 -0
  10. data/app/assets/images/commerce_front/cart/reduction.png +0 -0
  11. data/app/assets/images/commerce_front/cart/steps_left.png +0 -0
  12. data/app/assets/images/commerce_front/cart/steps_right.png +0 -0
  13. data/app/assets/images/commerce_front/product.jpg +0 -0
  14. data/app/assets/javascripts/commerce_front/functions.js +10 -0
  15. data/app/assets/javascripts/commerce_front/init.js +4 -0
  16. data/app/assets/javascripts/commerce_front/jquery.jnotify.min.js +21 -0
  17. data/app/assets/stylesheets/commerce_front/_cart.css.sass +97 -0
  18. data/app/assets/stylesheets/commerce_front/_common.css.sass +13 -0
  19. data/app/assets/stylesheets/commerce_front/_forms.css.sass +15 -0
  20. data/app/assets/stylesheets/commerce_front/_jnotify.css.sass +65 -0
  21. data/app/assets/stylesheets/commerce_front/style.css.sass +4 -0
  22. data/app/controllers/addresses_controller.rb +71 -0
  23. data/app/controllers/application_controller.rb +21 -0
  24. data/app/controllers/cart_controller.rb +144 -0
  25. data/app/controllers/newsletters_controller.rb +20 -0
  26. data/app/controllers/order_controller.rb +413 -0
  27. data/app/controllers/orders_controller.rb +32 -0
  28. data/app/controllers/person_sessions_controller.rb +23 -0
  29. data/app/controllers/users_controller.rb +164 -0
  30. data/app/helpers/application_helper.rb +73 -0
  31. data/app/helpers/cart_helper.rb +25 -0
  32. data/app/helpers/order_helper.rb +59 -0
  33. data/app/models/address.rb +18 -0
  34. data/app/models/notifier.rb +88 -0
  35. data/app/models/order.rb +13 -0
  36. data/app/models/user.rb +16 -0
  37. data/app/models/user_address.rb +15 -0
  38. data/app/views/addresses/_address_form.html.haml +18 -0
  39. data/app/views/addresses/_multiple_address_form.html.haml +27 -0
  40. data/app/views/cart/_free_products.html.haml +3 -0
  41. data/app/views/cart/_tbody.html.haml +25 -0
  42. data/app/views/cart/_total.html.haml +46 -0
  43. data/app/views/cart/index.html.haml +32 -0
  44. data/app/views/notifier/newsletter.html.haml +2 -0
  45. data/app/views/notifier/reset_password.html.haml +9 -0
  46. data/app/views/notifier/validation_user_account.html.haml +9 -0
  47. data/app/views/notifier/waiting_for_cheque_notification.html.haml +2 -0
  48. data/app/views/order/_form_address.html.haml +44 -0
  49. data/app/views/order/_tbody.html.haml +21 -0
  50. data/app/views/order/_total.html.haml +50 -0
  51. data/app/views/order/cheque_payment.html.haml +1 -0
  52. data/app/views/order/create.html.haml +76 -0
  53. data/app/views/order/deliveries.html.haml +28 -0
  54. data/app/views/order/new.html.haml +26 -0
  55. data/app/views/order/so_colissimo.html.haml +8 -0
  56. data/app/views/orders/index.html.haml +34 -0
  57. data/app/views/person_sessions/_form.html.haml +23 -0
  58. data/app/views/person_sessions/new.html.haml +1 -0
  59. data/app/views/person_sessions/new_reset_password.html.haml +7 -0
  60. data/app/views/users/_edit_form.html.haml +61 -0
  61. data/app/views/users/_form_create.html.haml +27 -0
  62. data/app/views/users/_form_quick_create.html.haml +16 -0
  63. data/app/views/users/_login_or_new.html.haml +10 -0
  64. data/app/views/users/forgotten_password.html.haml +12 -0
  65. data/app/views/users/new.html.haml +1 -0
  66. data/app/views/users/new_password.html.haml +10 -0
  67. data/app/views/users/show.html.haml +1 -0
  68. data/config/commerce.example.yml +27 -0
  69. data/config/initializers/commerce_front.rb +6 -0
  70. data/config/locales/fr.yml +85 -0
  71. data/config/routes.rb +17 -0
  72. data/db/migrate/20110311134232_add_form_attributes_to_addresses.rb +9 -0
  73. data/lib/field_error_proc_changer.rb +19 -0
  74. data/lib/forgeos/commerce_front.rb +6 -0
  75. data/lib/forgeos/commerce_front/engine.rb +10 -0
  76. data/lib/forgeos/commerce_front/version.rb +5 -0
  77. data/lib/forgeos_commerce_front.rb +1 -0
  78. data/lib/tasks/install.rake +13 -0
  79. data/recipes/deploy.rb +6 -0
  80. data/test/dummy/Rakefile +7 -0
  81. data/test/dummy/app/assets/javascripts/application.js +9 -0
  82. data/test/dummy/app/assets/stylesheets/application.css +7 -0
  83. data/test/dummy/app/controllers/application_controller.rb +3 -0
  84. data/test/dummy/app/helpers/application_helper.rb +2 -0
  85. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  86. data/test/dummy/config.ru +4 -0
  87. data/test/dummy/config/application.rb +42 -0
  88. data/test/dummy/config/boot.rb +10 -0
  89. data/test/dummy/config/database.yml +25 -0
  90. data/test/dummy/config/environment.rb +5 -0
  91. data/test/dummy/config/environments/development.rb +27 -0
  92. data/test/dummy/config/environments/production.rb +51 -0
  93. data/test/dummy/config/environments/test.rb +39 -0
  94. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  95. data/test/dummy/config/initializers/inflections.rb +10 -0
  96. data/test/dummy/config/initializers/mime_types.rb +5 -0
  97. data/test/dummy/config/initializers/secret_token.rb +7 -0
  98. data/test/dummy/config/initializers/session_store.rb +8 -0
  99. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  100. data/test/dummy/config/locales/en.yml +5 -0
  101. data/test/dummy/config/routes.rb +58 -0
  102. data/test/dummy/log/development.log +0 -0
  103. data/test/dummy/public/404.html +26 -0
  104. data/test/dummy/public/422.html +26 -0
  105. data/test/dummy/public/500.html +26 -0
  106. data/test/dummy/public/favicon.ico +0 -0
  107. data/test/dummy/script/rails +6 -0
  108. data/test/forgeos_commerce_front_test.rb +7 -0
  109. data/test/test_helper.rb +10 -0
  110. metadata +197 -0
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "http://rubygems.org"
2
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,2 @@
1
+ ForgeosCommerce comes with two licenses: the LGPL (see COPYING.LESSER)
2
+ and the GPL (see COPYING) ones.
@@ -0,0 +1,28 @@
1
+ h1. ForgeosCommerceFront
2
+
3
+ ForgeosCommerceFront is an extension which add front fonctionnalities
4
+
5
+ VERSION : 0.1.0
6
+
7
+ h1. Prerequisites
8
+
9
+ h2. Plugins
10
+
11
+ * ForgeosCore
12
+ * ForgeosCMS
13
+ * ForgeosCommerce
14
+
15
+ h2. Initialize
16
+
17
+ <pre><code>
18
+ $ ./script/generate plugin_migration forgeos_commerce_front
19
+ </code></pre>
20
+
21
+ Launch FogeosCommerce Install :
22
+
23
+ <pre><code>
24
+ $ rake forgeos:commerce_front:install
25
+ </code></pre>
26
+
27
+
28
+ Powered by "Webpulser":http://www.webpulser.com
@@ -0,0 +1,10 @@
1
+ function notifications(){
2
+ $.getJSON('/notifications', function(data) {
3
+ if (data.notice != null)
4
+ $.jnotify(data.notice, 5000);
5
+ if (data.error != null)
6
+ $.jnotify(data.error,'error',true);
7
+ if (data.warning != null)
8
+ $.jnotify(data.warning,'warning', 5000);
9
+ });
10
+ }
@@ -0,0 +1,4 @@
1
+ jQuery(document).ready(function(){
2
+ // jnotify
3
+ notifications();
4
+ });
@@ -0,0 +1,21 @@
1
+ /*
2
+ * jNotify jQuery Plug-in
3
+ *
4
+ * Copyright 2010 Giva, Inc. (http://www.givainc.com/labs/)
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ *
18
+ * Date: 2010-09-30
19
+ * Rev: 1.1.00
20
+ */
21
+ (function(B){B.jnotify=function(K,M,L){return new C(K,M,L)};B.jnotify.version="1.1.00";var J,D=[],E=0,H=false,I=false,G,F,A={type:"",delay:2000,sticky:false,closeLabel:"&times;",showClose:true,fadeSpeed:1000,slideSpeed:250,classContainer:"jnotify-container",classNotification:"jnotify-notification",classBackground:"jnotify-background",classClose:"jnotify-close",classMessage:"jnotify-message",init:null,create:null,beforeRemove:null,remove:null,transition:null};B.jnotify.setup=function(K){A=B.extend({},A,K)};B.jnotify.play=function(M,N){if(H&&(M!==true)||(D.length==0)){return }H=true;var L=D.shift();F=L;var K=(arguments.length>=2)?parseInt(N,10):L.options.delay;G=setTimeout(function(){G=0;L.remove(function(){if(D.length==0){H=false}else{if(!I){B.jnotify.play(true)}}})},K)};B.jnotify.pause=function(){clearTimeout(G);if(G){D.unshift(F)}I=H=true};B.jnotify.resume=function(){I=false;B.jnotify.play(true,0)};function C(P,N){var M=this,K=typeof N;if(K=="number"){N=B.extend({},A,{delay:N})}else{if(K=="boolean"){N=B.extend({},A,{sticky:true})}else{if(K=="string"){N=B.extend({},A,{type:N,delay:((arguments.length>2)&&(typeof arguments[2]=="number"))?arguments[2]:A.delay,sticky:((arguments.length>2)&&(typeof arguments[2]=="boolean"))?arguments[2]:A.sticky})}else{N=B.extend({},A,N)}}}this.options=N;if(!J){J=B('<div class="'+A.classContainer+'" />').appendTo("body");if(B.isFunction(N.init)){N.init.apply(M,[J])}}function O(S){var R='<div class="'+N.classNotification+(N.type.length?(" "+N.classNotification+"-"+N.type):"")+'"><div class="'+N.classBackground+'"></div>'+(N.sticky&&N.showClose?('<a class="'+N.classClose+'">'+N.closeLabel+"</a>"):"")+'<div class="'+N.classMessage+'"><div>'+S+"</div></div></div>";E++;var Q=B(R);if(N.sticky){Q.find("a."+N.classClose).bind("click.jnotify",function(){M.remove()})}if(B.isFunction(N.create)){N.create.apply(M,[Q])}return Q.appendTo(J)}this.remove=function(U){var Q=L.find("."+N.classMessage),S=Q.parent();var R=E--;if(B.isFunction(N.beforeRemove)){N.beforeRemove.apply(M,[Q])}function T(){S.remove();if(B.isFunction(U)){U.apply(M,[Q])}if(B.isFunction(N.remove)){N.remove.apply(M,[Q])}}if(B.isFunction(N.transition)){N.transition.apply(M,[S,Q,R,T,N])}else{Q.fadeTo(N.fadeSpeed,0.01,function(){if(R<=1){T()}else{S.slideUp(N.slideSpeed,T)}});if(E<=0){S.fadeOut(N.fadeSpeed)}}};var L=O(P);if(!N.sticky){D.push(this);B.jnotify.play()}return this}})(jQuery);
@@ -0,0 +1,97 @@
1
+ .checkout_links
2
+ margin-top: 20px
3
+ background-color: #f4f4f4
4
+ height: 40px
5
+ margin-left: auto
6
+ margin-right: auto
7
+ +borderCorner
8
+ width: 385px
9
+ .checkout_link
10
+ +borderCorner
11
+ display: block
12
+ float: left
13
+ margin-right: 20px
14
+ line-height: 40px
15
+ padding: 0 5px
16
+ &.checkout_link_0
17
+ margin-left: 20px
18
+ span
19
+ a
20
+ color: #666666
21
+ text-decoration: none
22
+ &:hover
23
+ background-color: #ff9900
24
+ span
25
+ a
26
+ color: white
27
+ &.current_checkout_link
28
+ background-color: #ff9900
29
+ span
30
+ a
31
+ color: white
32
+
33
+ .cart_content
34
+ p
35
+ text-align: none !important
36
+ #cart_table
37
+ width: 100%
38
+ margin: 10px 0
39
+ thead
40
+ tr
41
+ border:
42
+ bottom: 1px solid #ff6600
43
+ th
44
+ padding: 5px
45
+ tbody
46
+ tr
47
+ background:
48
+ color: #eeeeee
49
+ margin-bottom: 20px
50
+ border:
51
+ bottom: 20px solid white
52
+ td
53
+ &.article
54
+ .product_info
55
+ a
56
+ display: block
57
+ span
58
+ display: block
59
+ vertical-align: middle
60
+ border:
61
+ right: 1px dotted #cccccc
62
+ padding: 10px
63
+ &.center
64
+ text-align: center
65
+ &.total_price
66
+ border:
67
+ right: 0
68
+ .delete_product
69
+ background:
70
+ image: url("/images/commerce_front/cart/delete.png")
71
+ repeat: no-repeat
72
+ position: center
73
+ height: 30px
74
+ width: 30px
75
+ display: block
76
+ text-indent: -9999px
77
+ margin: auto
78
+ .less_product, .more_product
79
+ background:
80
+ image: url("/images/commerce_front/cart/change_quantity.png")
81
+ repeat: no-repeat
82
+ position: center
83
+ text-align: center
84
+ color: white
85
+ font-weight: bold
86
+ float: left
87
+ margin: 2px 5px 0
88
+ width: 27px
89
+ height: 17px
90
+ line-height: 17px
91
+ .quantity
92
+ border: 1px solid #eeeeee
93
+ +borderCorner
94
+ float: left
95
+ margin: 0
96
+ width: 40px
97
+ text-align: center
@@ -0,0 +1,13 @@
1
+ =borderCorner($topLeft: 4px, $topRight: 4px, $bottomRight: 4px, $bottomLeft: 4px)
2
+ -moz-border-radius-topleft: $topLeft
3
+ -moz-border-radius-topright: $topRight
4
+ -moz-border-radius-bottomright: $bottomRight
5
+ -moz-border-radius-bottomleft: $bottomLeft
6
+ -webkit-border-top-left-radius: $topLeft
7
+ -webkit-border-top-right-radius: $topRight
8
+ -webkit-border-bottom-right-radius: $bottomRight
9
+ -webkit-border-bottom-left-radius: $bottomLeft
10
+ border-top-left-radius: $topLeft
11
+ border-top-right-radius: $topRight
12
+ border-bottom-right-radius: $bottomRight
13
+ border-bottom-left-radius: $bottomLeft
@@ -0,0 +1,15 @@
1
+ textarea, input[type="text"], input[type="password"]
2
+ border: solid 1px #b2b2b2
3
+ +borderCorner
4
+ &.error_on_this_field
5
+ border-color: red
6
+
7
+ .field_error
8
+ color: red
9
+
10
+ .account_form
11
+ label,
12
+ textarea,
13
+ input[type="text"],
14
+ input[type="password"]
15
+ display: block
@@ -0,0 +1,65 @@
1
+ .jnotify-container
2
+ position: fixed
3
+ top: 0
4
+ left: 0
5
+ width: 100%
6
+ z-index: 100000
7
+ .jnotify-notification
8
+ position: relative
9
+ .jnotify-background
10
+ position: absolute
11
+ top: 0
12
+ left: 0
13
+ width: 100%
14
+ height: 100%
15
+ background-color: #e3f0db
16
+ filter: alpha(opacity = 90)
17
+ -moz-opacity: 0.9
18
+ opacity: 0.9
19
+ z-index: 1
20
+ a.jnotify-close
21
+ position: absolute
22
+ top: 2px
23
+ right: 5px
24
+ padding: 0 5px
25
+ font: bold 1.4em Arial, Helvetica, sans-serif
26
+ line-height: 1em
27
+ color: #567b1b
28
+ text-decoration: none
29
+ z-index: 3
30
+ cursor: pointer
31
+ &:link, &:visited, &:focus, &:hover
32
+ position: absolute
33
+ top: 2px
34
+ right: 5px
35
+ padding: 0 5px
36
+ font: bold 1.4em Arial, Helvetica, sans-serif
37
+ line-height: 1em
38
+ color: #567b1b
39
+ text-decoration: none
40
+ z-index: 3
41
+ cursor: pointer
42
+ .jnotify-message
43
+ position: relative
44
+ z-index: 2
45
+ padding: 20px
46
+ text-align: center
47
+ color: #567b1b
48
+ font: bold 1.4em Arial, Helvetica, sans-serif
49
+ line-height: 1.2em
50
+ *
51
+ font-size: 1em
52
+ .jnotify-notification-error
53
+ .jnotify-background
54
+ background-color: #d79eac
55
+ .jnotify-close, .jnotify-message
56
+ color: #a72947 !important
57
+ .jnotify-notification-warning
58
+ .jnotify-background
59
+ background-color: #fff7d1
60
+ .jnotify-close, .jnotify-message
61
+ color: #c2a928 !important
62
+
63
+ /* notification type == "error"
64
+
65
+ /* notification type == "warning"
@@ -0,0 +1,4 @@
1
+ @import common
2
+ @import forms
3
+ @import jnotify
4
+ @import cart
@@ -0,0 +1,71 @@
1
+ class AddressesController < ApplicationController
2
+ #before_filter :manage_address, :only => [:create]
3
+ #before_filter :login_required, :only => [:show, :update]
4
+ before_filter :get_address, :only => [:show, :update]
5
+ skip_before_filter :verify_authenticity_token
6
+
7
+ def show
8
+ respond_to do |format|
9
+ format.html { page_not_found }
10
+ format.json { render :json => @address.to_json }
11
+ end
12
+ end
13
+
14
+ def new
15
+ @address = UserAddress.new(params[:address])
16
+ render(:update) do |page|
17
+ page.replace_html '#delivery_address .account-form', :partial => 'address_form', :locals => {:address => @address}
18
+ end
19
+ end
20
+
21
+ def update
22
+ if @address.update_attributes(params[:address])
23
+ flash[:notice] = I18n.t('address_update_ok').capitalize
24
+ else
25
+ flash[:error] = "Une erreur est survenue lors de la mise à jour de l'addresse"
26
+ end
27
+ render(:update) do |page|
28
+ page.replace_html '#delivery_address .account-form', :partial => 'address_form', :locals => {:address => @address}
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ #def manage_address
35
+ # if params[:user] && params[:user][:address_invoice_attributes]
36
+ # params[:user][:address_invoice_attributes][:name] = params[:user][:lastname]
37
+ # params[:user][:address_invoice_attributes][:firstname] = params[:user][:firstname]
38
+ # params[:user][:address_invoice_attributes][:phone] = params[:user][:phone]
39
+ # params[:user][:address_invoice_attributes][:email] = params[:user][:email]
40
+ # params[:user][:address_invoice_attributes][:designation] = 'Première adresse'
41
+ # params[:user][:address_invoice_attributes][:civility] = params[:civility]
42
+
43
+ # params[:user][:address_delivery_attributes] = params[:user][:address_invoice_attributes]
44
+ # params[:user][:address_delivery_attributes][:designation] = 'Seconde adresse'
45
+ # end
46
+ #end
47
+
48
+ def get_address
49
+ @address = UserAddress.first(:conditions => ['id = ? AND person_id IS NOT NULL', params[:id]])
50
+ if not @address
51
+ flash[:error] = 'Utilisateur non trouvé'
52
+ return render :nothing => true, :status => 404
53
+ elsif not current_user
54
+ flash[:error] = 'Vous devez être connecté pour avoir accès à cette ressource'
55
+ return render :nothing => true, :status => 401
56
+ elsif current_user.id != @address.person_id
57
+ flash[:error] = 'Accès interdit'
58
+ return render :nothing => true, :status => 401
59
+ end
60
+ end
61
+
62
+ def destroy
63
+ if @address.destroy
64
+ flash[:notice] = "L'adresse a bien été supprimée"
65
+ else
66
+ flash[:error] = "Une erreur est survenue lors de la suppression de l'adresse"
67
+ end
68
+ render :nothing => true
69
+ end
70
+
71
+ end
@@ -0,0 +1,21 @@
1
+ # Filters added to this controller apply to all controllers in the application.
2
+ # Likewise, all the methods added will be available for all controllers.
3
+
4
+ #require 'app/models/product'
5
+ class ApplicationController < ActionController::Base
6
+ helper :all # include all helpers, all the time
7
+
8
+ def get_login_link
9
+ render :partial => '/users/login_link'
10
+ end
11
+
12
+ def set_locale_with_config
13
+ if Forgeos::CONFIG[:multilang]
14
+ set_locale_without_config
15
+ elsif locale = Forgeos::CONFIG[:default_locale]
16
+ I18n.locale = locale
17
+ ActiveRecord::Base.locale = locale
18
+ end
19
+ end
20
+ alias_method_chain :set_locale, :config
21
+ end
@@ -0,0 +1,144 @@
1
+ require 'ruleby'
2
+ class CartController < ApplicationController
3
+ include Ruleby
4
+ skip_before_filter :verify_authenticity_token, :only => [:add_product]
5
+ skip_before_filter :get_menu, :only => [:update_quantity, :delete_product]
6
+ before_filter :special_offer, :only => [:index, :add_voucher]
7
+ before_filter :check_voucher_code, :only => [:add_voucher]
8
+ before_filter :voucher, :only => [:index, :add_voucher]
9
+
10
+ def index
11
+
12
+ end
13
+
14
+ ## add a product
15
+ def add_product
16
+ if params[:id]
17
+ current_cart.add_product_id( params[:id],1 )
18
+ redirect_to(:action => 'index')
19
+ else
20
+ redirect_to(:back)
21
+ end
22
+ end
23
+
24
+ ## delete or add a product
25
+ def update_quantity
26
+ cart_product = current_cart.cart_items.find_by_id(params[:id])
27
+ unless cart_product.nil?
28
+ new_quantity = params[:quantity].to_i
29
+ if cart_product.quantity < new_quantity ## add a product
30
+ if !cart_product.product.stop_sales
31
+ cart_product.update_attributes( :quantity => new_quantity )
32
+ elsif cart_product.product.stock >= new_quantity
33
+ cart_product.update_attributes( :quantity => new_quantity )
34
+ else
35
+ flash[:quantity_warning] = "Le stock disponible est insuffisant."
36
+ end
37
+ else ## delete a product
38
+ cart_product.update_attributes( :quantity => new_quantity )
39
+ end
40
+ end
41
+
42
+ current_cart.reload
43
+
44
+ special_offer
45
+ voucher
46
+
47
+ if request.xhr?
48
+ render(:update) do |page|
49
+ page.replace_html 'tbody', :partial => 'tbody'
50
+ page.replace_html 'cart_total', :partial => 'total'
51
+ page.replace_html 'free_products', :partial => 'free_products'
52
+ end
53
+ end
54
+ end
55
+
56
+ def delete_product
57
+ cart_product = current_cart.cart_items.find_by_id(params[:id])
58
+ current_cart.cart_items.find_all_by_product_id(cart_product.product_id).collect(&:delete) unless cart_product.nil?
59
+ current_cart.reload
60
+ special_offer
61
+ voucher
62
+ if request.xhr?
63
+ render(:update) do |page|
64
+ page.replace_html 'tbody', :partial => 'tbody'
65
+ page.replace_html 'cart_total', :partial => 'total'
66
+ end
67
+ end
68
+ end
69
+
70
+ def add_voucher
71
+ voucher = VoucherRule.find_by_id(current_cart.voucher)
72
+ if voucher.nil?
73
+ session.delete(:voucher_code)
74
+ render(:update) do |page|
75
+ page.replace_html 'voucher_message' , "<span>Le code promo #{@voucher_code} est invalide2.</span>"
76
+ page.replace_html 'tbody', :partial => 'tbody'
77
+ page.replace_html 'cart_total', :partial => 'total'
78
+ page.replace_html 'free_products', :partial => 'free_products'
79
+ end
80
+ else
81
+ session[:voucher_code] = voucher.code
82
+ render(:update) do |page|
83
+ page.replace_html 'voucher_message' , "<span>Code validé ! #{voucher.name}</span>"
84
+ page.replace_html 'tbody', :partial => 'tbody'
85
+ page.replace_html 'cart_total', :partial => 'total'
86
+ page.replace_html 'free_products', :partial => 'free_products'
87
+ end
88
+ end
89
+ end
90
+
91
+ def get_cart_items_count
92
+ render :text => "#{current_cart.cart_items.count} articles"
93
+ end
94
+
95
+ private
96
+ def check_voucher_code
97
+ @voucher_code = params[:voucher_code] || session[:voucher_code]
98
+ voucher = VoucherRule.find_all_by_active_and_code(true,@voucher_code)
99
+ #get_transporters ## because the shipping was maybe offer with a voucher
100
+ render(:update) do |page|
101
+ page.replace_html 'voucher_message' , "<span>Le code promo #{@voucher_code} est invalide.</span>"
102
+ page.replace_html 'tbody', :partial => 'tbody'
103
+ page.replace_html 'cart_total', :partial => 'total'
104
+ session.delete(:voucher_code) if session[:voucher_code]
105
+ end if voucher.blank? or voucher.nil?
106
+ end
107
+
108
+ def special_offer
109
+ begin
110
+ engine :special_offer_engine do |e|
111
+ rule_builder = SpecialOffer.new(e)
112
+ rule_builder.cart = current_cart
113
+ @free_product_ids = []
114
+ rule_builder.free_product_ids = @free_product_ids
115
+ rule_builder.rules
116
+ current_cart.cart_items.each do |cart_product|
117
+ e.assert cart_product.product
118
+ end
119
+ e.assert current_cart
120
+ e.match
121
+ end
122
+ rescue Exception
123
+ end
124
+ end
125
+
126
+ def voucher
127
+ begin
128
+ engine :voucher_engine do |e|
129
+ rule_builder = Voucher.new(e)
130
+ rule_builder.cart = current_cart
131
+ rule_builder.code = @voucher_code || session[:voucher_code]
132
+ rule_builder.free_product_ids = @free_product_ids
133
+ rule_builder.rules
134
+ current_cart.cart_items.each do |cart_product|
135
+ e.assert cart_product.product
136
+ end
137
+ e.assert current_cart
138
+ e.match
139
+ end
140
+ rescue Exception
141
+ end
142
+ end
143
+
144
+ end