camaleon_ecommerce 1.2 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/plugins/ecommerce/admin_product.js.coffee +17 -1
- data/app/controllers/plugins/ecommerce/admin/coupons_controller.rb +1 -1
- data/app/controllers/plugins/ecommerce/admin/orders_controller.rb +24 -21
- data/app/controllers/plugins/ecommerce/admin/payment_methods_controller.rb +2 -34
- data/app/controllers/plugins/ecommerce/admin/prices_controller.rb +3 -6
- data/app/controllers/plugins/ecommerce/admin/settings_controller.rb +2 -1
- data/app/controllers/plugins/ecommerce/admin/shipping_methods_controller.rb +2 -2
- data/app/controllers/plugins/ecommerce/admin/tax_rates_controller.rb +1 -1
- data/app/controllers/plugins/ecommerce/admin_controller.rb +2 -2
- data/app/controllers/plugins/ecommerce/front/checkout_controller.rb +34 -18
- data/app/controllers/plugins/ecommerce/front/orders_controller.rb +3 -4
- data/app/controllers/plugins/ecommerce/front_controller.rb +26 -11
- data/app/decorators/plugins/ecommerce/cart_decorator.rb +5 -5
- data/app/decorators/plugins/ecommerce/coupon_decorator.rb +8 -27
- data/app/decorators/plugins/ecommerce/order_decorator.rb +1 -1
- data/app/decorators/plugins/ecommerce/product_decorator.rb +33 -20
- data/app/decorators/plugins/ecommerce/product_item_decorator.rb +8 -2
- data/app/decorators/plugins/ecommerce/product_variation_decorator.rb +1 -1
- data/app/helpers/plugins/ecommerce/ecommerce_email_helper.rb +7 -6
- data/app/helpers/plugins/ecommerce/ecommerce_functions_helper.rb +276 -33
- data/app/helpers/plugins/ecommerce/ecommerce_helper.rb +59 -56
- data/app/models/plugins/ecommerce/attribute.rb +3 -0
- data/app/models/plugins/ecommerce/cart.rb +31 -7
- data/app/models/plugins/ecommerce/legacy_order.rb +1 -30
- data/app/models/plugins/ecommerce/order.rb +11 -5
- data/app/models/plugins/ecommerce/order_detail.rb +1 -0
- data/app/models/plugins/ecommerce/payment_method.rb +9 -5
- data/app/models/plugins/ecommerce/product_variation.rb +6 -0
- data/app/services/plugins/ecommerce/cart_service.rb +4 -17
- data/app/views/camaleon_cms/html_mailer/order_canceled.html.erb +2 -2
- data/app/views/camaleon_cms/html_mailer/order_confirmed.html.erb +2 -2
- data/app/views/camaleon_cms/html_mailer/order_received.html.erb +5 -3
- data/app/views/camaleon_cms/html_mailer/order_received_admin.html.erb +3 -3
- data/app/views/camaleon_cms/html_mailer/order_shipped.html.erb +2 -2
- data/app/views/camaleon_cms/html_mailer/recovery_cart.html.erb +3 -3
- data/app/views/plugins/ecommerce/admin/coupons/form.html.erb +11 -11
- data/app/views/plugins/ecommerce/admin/coupons/index.html.erb +11 -11
- data/app/views/plugins/ecommerce/admin/orders/form.html.erb +2 -2
- data/app/views/plugins/ecommerce/admin/orders/index.html.erb +53 -63
- data/app/views/plugins/ecommerce/admin/payment_methods/form.html.erb +30 -24
- data/app/views/plugins/ecommerce/admin/payment_methods/index.html.erb +8 -8
- data/app/views/plugins/ecommerce/admin/payment_methods/show.html.erb +22 -22
- data/app/views/plugins/ecommerce/admin/prices/form.html.erb +6 -6
- data/app/views/plugins/ecommerce/admin/prices/index.html.erb +8 -8
- data/app/views/plugins/ecommerce/admin/product_attributes.html.erb +1 -1
- data/app/views/plugins/ecommerce/admin/products/_variations.html.erb +4 -4
- data/app/views/plugins/ecommerce/admin/products/index.html.erb +5 -5
- data/app/views/plugins/ecommerce/admin/settings/index.html.erb +20 -8
- data/app/views/plugins/ecommerce/admin/shipping_methods/form.html.erb +5 -5
- data/app/views/plugins/ecommerce/admin/shipping_methods/index.html.erb +8 -9
- data/app/views/plugins/ecommerce/admin/shipping_methods/show.html.erb +4 -4
- data/app/views/plugins/ecommerce/admin/tax_rates/form.html.erb +3 -3
- data/app/views/plugins/ecommerce/admin/tax_rates/index.html.erb +7 -7
- data/app/views/plugins/ecommerce/front/checkout/index.html.erb +4 -4
- data/app/views/plugins/ecommerce/front/login.html.erb +3 -6
- data/app/views/plugins/ecommerce/front/orders/show.html.erb +7 -1
- data/app/views/plugins/ecommerce/partials/_cart_widget.html.erb +14 -29
- data/app/views/plugins/ecommerce/partials/checkout/_details.html.erb +1 -1
- data/app/views/plugins/ecommerce/partials/checkout/_payments.html.erb +100 -99
- data/app/views/plugins/ecommerce/partials/checkout/_user_info.html.erb +2 -2
- data/app/views/post_types/commerce/{_product_widget.html.erb → _post_list_item.html.erb} +0 -0
- data/app/views/post_types/commerce/_product_info.html.erb +45 -0
- data/app/views/post_types/commerce/single.html.erb +63 -85
- data/config/camaleon_plugin.json +3 -8
- data/config/custom_models.rb +28 -4
- data/config/locales/en.yml +27 -12
- data/config/locales/es.yml +70 -57
- data/config/routes.rb +1 -0
- data/db/migrate/20161202182552_add_cookie_key_to_cart.rb +5 -0
- data/lib/ecommerce/version.rb +1 -1
- metadata +7 -14
- data/app/helpers/plugins/ecommerce/ecommerce_payment_helper.rb +0 -6
- data/app/models/plugins/ecommerce/legacy_cart.rb +0 -50
- data/app/services/plugins/ecommerce/product_item_service.rb +0 -29
- data/app/services/plugins/ecommerce/product_service.rb +0 -17
- data/app/services/plugins/ecommerce/site_service.rb +0 -21
- data/app/services/plugins/ecommerce/user_cart_service.rb +0 -12
- data/app/services/plugins/ecommerce/user_product_service.rb +0 -29
- data/app/views/post_types/commerce.html.erb +0 -22
- data/app/views/post_types/commerce/category.html.erb +0 -23
@@ -2,17 +2,16 @@ class Plugins::Ecommerce::Front::OrdersController < Plugins::Ecommerce::FrontCon
|
|
2
2
|
before_action :commerce_authenticate
|
3
3
|
before_action :set_bread
|
4
4
|
def index
|
5
|
-
@orders = current_site.orders.set_user(
|
5
|
+
@orders = current_site.orders.set_user(cama_current_user).decorate
|
6
6
|
render "index"
|
7
7
|
end
|
8
8
|
|
9
9
|
def show
|
10
|
-
@order = current_site.orders.find_by_slug(params[:order]).decorate
|
10
|
+
@order = current_site.orders.set_user(cama_current_user).find_by_slug(params[:order]).try(:decorate)
|
11
|
+
return redirect_to(url_for(action: :index), error: t('plugins.ecommerce.messages.order_not_found', default: "Order not found", order: params[:order])) unless @order.present?
|
11
12
|
@ecommerce_breadcrumb << [t('plugins.ecommerce.messages.detail_order', default: "Detail order: #%{order}", order: params[:order])]
|
12
13
|
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
15
|
private
|
17
16
|
def set_bread
|
18
17
|
@ecommerce_breadcrumb << [t('plugins.ecommerce.messages.my_orders', default: 'My Orders'), url_for(action: :index)]
|
@@ -1,5 +1,5 @@
|
|
1
1
|
class Plugins::Ecommerce::FrontController < CamaleonCms::Apps::PluginsFrontController
|
2
|
-
|
2
|
+
prepend_before_action :init_flash
|
3
3
|
before_action :ecommerce_add_assets_in_front
|
4
4
|
before_action :save_cache_redirect, only: [:login, :register]
|
5
5
|
def login
|
@@ -8,11 +8,12 @@ class Plugins::Ecommerce::FrontController < CamaleonCms::Apps::PluginsFrontContr
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def do_login
|
11
|
-
if login_user_with_password(params[:
|
12
|
-
|
13
|
-
|
11
|
+
if login_user_with_password(params[:email], params[:password])
|
12
|
+
callback_login(@user)
|
13
|
+
login_user(@user, false, (cookies[:e_return_to] || plugins_ecommerce_orders_path))
|
14
|
+
return cookies.delete(:e_return_to)
|
14
15
|
else
|
15
|
-
flash[:error] = t('plugins.ecommerce.messages.invalid_access', default: 'Invalid access')
|
16
|
+
flash[:cama_ecommerce][:error] = t('plugins.ecommerce.messages.invalid_access', default: 'Invalid access')
|
16
17
|
return login
|
17
18
|
end
|
18
19
|
end
|
@@ -24,11 +25,13 @@ class Plugins::Ecommerce::FrontController < CamaleonCms::Apps::PluginsFrontContr
|
|
24
25
|
end
|
25
26
|
|
26
27
|
def do_register
|
28
|
+
params[:camaleon_cms_user][:username] = params[:camaleon_cms_user][:email] if params[:camaleon_cms_user].present?
|
27
29
|
@user = current_site.users.new(params.require(:camaleon_cms_user).permit(:first_name, :last_name, :username, :email, :password, :password_confirmation))
|
28
30
|
if @user.save
|
29
|
-
flash[:notice] = t('plugins.ecommerce.messages.created_account', default: "Account created successfully")
|
30
|
-
|
31
|
-
|
31
|
+
flash[:cama_ecommerce][:notice] = t('plugins.ecommerce.messages.created_account', default: "Account created successfully")
|
32
|
+
callback_login(@user)
|
33
|
+
login_user(@user, false, (cookies[:e_return_to] || plugins_ecommerce_orders_path))
|
34
|
+
return cookies.delete(:e_return_to)
|
32
35
|
else
|
33
36
|
return register
|
34
37
|
end
|
@@ -36,14 +39,26 @@ class Plugins::Ecommerce::FrontController < CamaleonCms::Apps::PluginsFrontContr
|
|
36
39
|
|
37
40
|
private
|
38
41
|
def save_cache_redirect
|
39
|
-
cookies[:
|
42
|
+
cookies[:e_return_to] = params[:return_to] if params[:return_to].present?
|
40
43
|
end
|
41
44
|
|
42
45
|
def commerce_authenticate
|
43
46
|
unless cama_sign_in?
|
44
|
-
flash[:error] = t('camaleon_cms.admin.login.please_login')
|
45
|
-
cookies[:
|
47
|
+
flash[:cama_ecommerce][:error] = t('camaleon_cms.admin.login.please_login')
|
48
|
+
cookies[:e_return_to] = request.referer
|
46
49
|
redirect_to plugins_ecommerce_login_path
|
47
50
|
end
|
48
51
|
end
|
52
|
+
|
53
|
+
def init_flash
|
54
|
+
flash[:cama_ecommerce] = {} unless flash[:cama_ecommerce].present?
|
55
|
+
end
|
56
|
+
|
57
|
+
# callback after log in
|
58
|
+
def callback_login(user)
|
59
|
+
if cookies[:e_cart_id].present?
|
60
|
+
e_current_cart(ecommerce_get_visitor_key).change_user(user)
|
61
|
+
cookies.delete(:e_cart_id)
|
62
|
+
end
|
63
|
+
end
|
49
64
|
end
|
@@ -1,20 +1,20 @@
|
|
1
1
|
class Plugins::Ecommerce::CartDecorator < Draper::Decorator
|
2
2
|
delegate_all
|
3
3
|
def the_sub_total
|
4
|
-
|
4
|
+
h.e_parse_price(object.sub_total)
|
5
5
|
end
|
6
6
|
|
7
7
|
def the_total_discounts
|
8
|
-
|
8
|
+
h.e_parse_price(object.total_discounts)
|
9
9
|
end
|
10
10
|
|
11
11
|
def the_total_amount
|
12
|
-
|
12
|
+
h.e_parse_price(object.total_amount)
|
13
13
|
end
|
14
14
|
alias_method :the_price, :the_total_amount
|
15
15
|
|
16
16
|
def the_tax_total
|
17
|
-
|
17
|
+
h.e_parse_price(object.tax_total)
|
18
18
|
end
|
19
19
|
|
20
20
|
def the_weight_total
|
@@ -22,6 +22,6 @@ class Plugins::Ecommerce::CartDecorator < Draper::Decorator
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def the_total_shipping
|
25
|
-
|
25
|
+
h.e_parse_price(object.total_shipping)
|
26
26
|
end
|
27
27
|
end
|
@@ -1,52 +1,33 @@
|
|
1
1
|
class Plugins::Ecommerce::CouponDecorator < CamaleonCms::TermTaxonomyDecorator
|
2
2
|
delegate_all
|
3
3
|
|
4
|
-
#
|
5
|
-
# `helpers` (aka `h`). You can override attributes, for example:
|
6
|
-
#
|
7
|
-
# def created_at
|
8
|
-
# helpers.content_tag :span, class: 'time' do
|
9
|
-
# object.created_at.strftime("%a %m/%d/%y")
|
10
|
-
# end
|
11
|
-
# end
|
12
|
-
|
4
|
+
# return the code of the coupon
|
13
5
|
def the_code
|
14
6
|
object.slug.to_s.upcase
|
15
7
|
end
|
16
8
|
|
9
|
+
# return humanized the amount/value of the coupon
|
17
10
|
def the_amount
|
18
11
|
opts = object.options
|
19
12
|
case opts[:discount_type]
|
20
13
|
when 'percent'
|
21
14
|
"#{opts[:amount].to_f}%"
|
22
15
|
when 'money'
|
23
|
-
|
24
|
-
else
|
25
|
-
"Free"
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def the_symbol
|
30
|
-
opts = object.options
|
31
|
-
case opts[:discount_type]
|
32
|
-
when 'percent'
|
33
|
-
"%"
|
34
|
-
when 'money'
|
35
|
-
h.current_site.current_unit
|
16
|
+
h.e_parse_price(opts[:amount].to_f)
|
36
17
|
else
|
37
|
-
|
18
|
+
I18n.t('plugins.ecommerce.table.free_shipping', default: 'Free Shipping')
|
38
19
|
end
|
39
20
|
end
|
40
21
|
|
22
|
+
# return the html text status of the coupon
|
41
23
|
def the_status
|
42
24
|
opts = object.options
|
43
25
|
if "#{opts[:expirate_date]} 23:59:59".to_datetime.to_i < Time.now.to_i
|
44
|
-
"<span class='label label-danger'>#{I18n.t('
|
26
|
+
"<span class='label label-danger'>#{I18n.t('plugins.ecommerce.table.expired')} </span>"
|
45
27
|
elsif object.status.to_s.to_bool
|
46
|
-
"<span class='label label-success'>#{I18n.t('
|
28
|
+
"<span class='label label-success'>#{I18n.t('plugins.ecommerce.active')} </span>"
|
47
29
|
else
|
48
|
-
"<span class='label label-default'>#{I18n.t('
|
30
|
+
"<span class='label label-default'>#{I18n.t('plugins.ecommerce.not_active')} </span>"
|
49
31
|
end
|
50
|
-
|
51
32
|
end
|
52
33
|
end
|
@@ -2,7 +2,7 @@ class Plugins::Ecommerce::OrderDecorator < Draper::Decorator
|
|
2
2
|
delegate_all
|
3
3
|
|
4
4
|
def the_status(include_date_action = false)
|
5
|
-
res = if object.bank_pending?
|
5
|
+
res = if object.bank_pending? || object.on_delivery_pending?
|
6
6
|
"<span class='label label-warning'>#{h.t("plugins.ecommerce.messages.order_status.#{object.status}", default: object.status.titleize)}</span>"
|
7
7
|
elsif object.canceled?
|
8
8
|
"<span class='label label-danger'>#{h.t("plugins.ecommerce.messages.order_status.#{object.status}", default: object.status.titleize)}</span>"
|
@@ -8,12 +8,12 @@ class Plugins::Ecommerce::ProductDecorator < CamaleonCms::PostDecorator
|
|
8
8
|
if variation_id.present?
|
9
9
|
get_variation(variation_id).sku
|
10
10
|
else
|
11
|
-
object.get_field_value('ecommerce_sku').to_s
|
11
|
+
is_variation_product? ? get_default_variation.sku : object.get_field_value('ecommerce_sku').to_s
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
15
|
def the_price(variation_id = nil)
|
16
|
-
|
16
|
+
h.e_parse_price(price(variation_id))
|
17
17
|
end
|
18
18
|
|
19
19
|
def the_weight(variation_id = nil)
|
@@ -24,7 +24,7 @@ class Plugins::Ecommerce::ProductDecorator < CamaleonCms::PostDecorator
|
|
24
24
|
if variation_id.present?
|
25
25
|
get_variation(variation_id).weight || 0
|
26
26
|
else
|
27
|
-
object.get_field_value('ecommerce_weight').to_f || 0
|
27
|
+
is_variation_product? ? (get_default_variation.weight || 0) : object.get_field_value('ecommerce_weight').to_f || 0
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
@@ -32,10 +32,19 @@ class Plugins::Ecommerce::ProductDecorator < CamaleonCms::PostDecorator
|
|
32
32
|
if variation_id.present?
|
33
33
|
get_variation(variation_id).qty || 0
|
34
34
|
else
|
35
|
-
object.get_field_value('ecommerce_qty') || 0
|
35
|
+
is_variation_product? ? (get_default_variation.qty || 0) : object.get_field_value('ecommerce_qty').to_i || 0
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
+
# return the total (Integer) of products available to sell (doesn't include the qty of the current cart)
|
40
|
+
def the_qty_real(variation_id = nil)
|
41
|
+
return the_qty_real(get_default_variation.id) if !variation_id.present? && is_variation_product?
|
42
|
+
carts = h.current_site.carts.active_cart.joins(:product_items)
|
43
|
+
_q = variation_id.present? ? {variation_id: variation_id} : {product_id: object.id}
|
44
|
+
_qty_in_carts = carts.where.not(id: h.e_current_cart.id).where("#{Plugins::Ecommerce::ProductItem.table_name}" => _q).sum("#{Plugins::Ecommerce::ProductItem.table_name}.qty")
|
45
|
+
the_qty - _qty_in_carts
|
46
|
+
end
|
47
|
+
|
39
48
|
def the_photos
|
40
49
|
object.get_field_values('ecommerce_photos') || []
|
41
50
|
end
|
@@ -52,7 +61,7 @@ class Plugins::Ecommerce::ProductDecorator < CamaleonCms::PostDecorator
|
|
52
61
|
if variation_id.present?
|
53
62
|
get_variation(variation_id).amount || 0
|
54
63
|
else
|
55
|
-
object.get_field_value(:ecommerce_price).to_f || 0
|
64
|
+
is_variation_product? ? (get_default_variation.amount || 0) : object.get_field_value(:ecommerce_price).to_f || 0
|
56
65
|
end
|
57
66
|
end
|
58
67
|
|
@@ -69,7 +78,7 @@ class Plugins::Ecommerce::ProductDecorator < CamaleonCms::PostDecorator
|
|
69
78
|
end
|
70
79
|
|
71
80
|
def the_tax(variation_id = nil)
|
72
|
-
tax(variation_id)
|
81
|
+
h.e_parse_price(tax(variation_id))
|
73
82
|
end
|
74
83
|
|
75
84
|
def tax(variation_id = nil)
|
@@ -84,9 +93,9 @@ class Plugins::Ecommerce::ProductDecorator < CamaleonCms::PostDecorator
|
|
84
93
|
|
85
94
|
def the_stock_status(variation_id = nil)
|
86
95
|
if in_stock?(variation_id) && the_qty_real.to_i > 0
|
87
|
-
"<span class='label label-success'>#{I18n.t('
|
96
|
+
"<span class='label label-success'>#{I18n.t('plugins.ecommerce.product.in_stock')}</span>"
|
88
97
|
else
|
89
|
-
"<span class='label label-danger'>#{I18n.t('
|
98
|
+
"<span class='label label-danger'>#{I18n.t('plugins.ecommerce.product.not_in_tock')}</span>"
|
90
99
|
end
|
91
100
|
end
|
92
101
|
|
@@ -96,23 +105,12 @@ class Plugins::Ecommerce::ProductDecorator < CamaleonCms::PostDecorator
|
|
96
105
|
|
97
106
|
def the_featured_status
|
98
107
|
if eco_featured?
|
99
|
-
"<span class='label label-primary'>#{I18n.t('
|
108
|
+
"<span class='label label-primary'>#{I18n.t('plugins.ecommerce.product.featured')}</span>"
|
100
109
|
else
|
101
110
|
""
|
102
111
|
end
|
103
112
|
end
|
104
113
|
|
105
|
-
# return the total of products available to sell
|
106
|
-
def the_qty_real(variation_id = nil)
|
107
|
-
if h.current_user
|
108
|
-
Plugins::Ecommerce::UserProductService.new(
|
109
|
-
h.current_site, h.current_user, object, variation_id).available_qty
|
110
|
-
else
|
111
|
-
Plugins::Ecommerce::ProductService.new(
|
112
|
-
h.current_site, object, variation_id).available_qty
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
114
|
# check if there are enough products to be purchased
|
117
115
|
def can_added?(qty, variation_id = nil)
|
118
116
|
(the_qty_real(variation_id) - qty).to_i >= 0
|
@@ -136,4 +134,19 @@ class Plugins::Ecommerce::ProductDecorator < CamaleonCms::PostDecorator
|
|
136
134
|
def is_variation_product?
|
137
135
|
@_cache_is_variation_product ||= self.product_variations.any?
|
138
136
|
end
|
137
|
+
|
138
|
+
# return (Hash) all variations qty for each variation, sample: {1: 10, 5: 2, 3: 0}
|
139
|
+
def map_variations_the_qty_real
|
140
|
+
res = {}
|
141
|
+
return res unless is_variation_product?
|
142
|
+
object.product_variations.eager_load(:product).each do |var|
|
143
|
+
res[var.id] = var.product.decorate.the_qty_real
|
144
|
+
end
|
145
|
+
res
|
146
|
+
end
|
147
|
+
|
148
|
+
# return the first variation of a product
|
149
|
+
def get_default_variation
|
150
|
+
@_cama_cache_get_default_variation ||= object.product_variations.first
|
151
|
+
end
|
139
152
|
end
|
@@ -5,7 +5,7 @@ class Plugins::Ecommerce::ProductItemDecorator < Draper::Decorator
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def the_sub_total
|
8
|
-
|
8
|
+
h.e_parse_price(object.sub_total)
|
9
9
|
end
|
10
10
|
|
11
11
|
def the_price
|
@@ -31,7 +31,13 @@ class Plugins::Ecommerce::ProductItemDecorator < Draper::Decorator
|
|
31
31
|
|
32
32
|
# update quantity of product or product variation used in current cart item
|
33
33
|
def decrement_qty!
|
34
|
-
|
34
|
+
val = get_product.the_qty(object.variation_id) - object.qty
|
35
|
+
if object.variation_id.present?
|
36
|
+
product_variation.update_column(:qty, val)
|
37
|
+
else
|
38
|
+
product.update_field_value('ecommerce_qty', val)
|
39
|
+
end
|
40
|
+
val
|
35
41
|
end
|
36
42
|
|
37
43
|
# verify if the quantity of the cart item is avilable
|
@@ -13,17 +13,17 @@ module Plugins::Ecommerce::EcommerceEmailHelper
|
|
13
13
|
|
14
14
|
flash[:notice] = t('plugins.ecommerce.messages.payment_completed', default: "Payment completed successfully")
|
15
15
|
args = {order: order}; hooks_run("commerce_after_payment_completed", args)
|
16
|
-
|
16
|
+
|
17
17
|
order
|
18
18
|
end
|
19
19
|
|
20
20
|
def commerce_send_order_received_email(order, is_after_bank_confirmation = false)
|
21
21
|
data = _commerce_prepare_send_order_email_data(order)
|
22
22
|
if is_after_bank_confirmation
|
23
|
-
cama_send_email(order.user.email, t('
|
23
|
+
cama_send_email(order.user.email, t('plugins.ecommerce.mail.order_confirmed.subject'), {template_name: 'order_confirmed', extra_data: data[:extra_data], attachs: data[:files]})
|
24
24
|
else
|
25
25
|
data.delete(:files) unless order.paid?
|
26
|
-
cama_send_email(order.user.email, t('
|
26
|
+
cama_send_email(order.user.email, t('plugins.ecommerce.email.order_received.subject'), {template_name: 'order_received', extra_data: data[:extra_data], attachs: data[:files]})
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
@@ -31,7 +31,7 @@ module Plugins::Ecommerce::EcommerceEmailHelper
|
|
31
31
|
data = _commerce_prepare_send_order_email_data(order)
|
32
32
|
data[:owners].each do |user|
|
33
33
|
data[:extra_data][:admin] = user
|
34
|
-
cama_send_email(user.email, t('
|
34
|
+
cama_send_email(user.email, t('plugins.ecommerce.email.order_received_admin.subject'), {template_name: 'order_received_admin', extra_data: data[:extra_data], attachs: data[:files]})
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
@@ -40,7 +40,7 @@ module Plugins::Ecommerce::EcommerceEmailHelper
|
|
40
40
|
:fullname => order.user.fullname,
|
41
41
|
:order => order
|
42
42
|
}
|
43
|
-
send_email(order.user.email, t('
|
43
|
+
send_email(order.user.email, t('plugins.ecommerce.email.recovery_cart.subject'), '', nil, [], 'recovery_cart', nil, extra_data)
|
44
44
|
Rails.logger.info "Send recovery to #{order.user.email} with order #{order.slug}"
|
45
45
|
end
|
46
46
|
|
@@ -96,7 +96,8 @@ module Plugins::Ecommerce::EcommerceEmailHelper
|
|
96
96
|
:shipping_address => order.get_meta('shipping_address'),
|
97
97
|
:subtotal => order.cache_the_sub_total,
|
98
98
|
:total_cost => order.cache_the_total,
|
99
|
-
:order => order
|
99
|
+
:order => order,
|
100
|
+
:order_details_html => render_to_string(file: 'plugins/ecommerce/front/orders/show', layout: false, locals: {as_partial: true, order: order.decorated? ? order : order.decorate})
|
100
101
|
}
|
101
102
|
order_service = Plugins::Ecommerce::OrderService.new(current_site, order)
|
102
103
|
data[:owners] = order_service.product_owners
|
@@ -1,47 +1,291 @@
|
|
1
1
|
#encoding: utf-8
|
2
2
|
module Plugins::Ecommerce::EcommerceFunctionsHelper
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
3
|
+
# return the settings for ecommerce (Hash)
|
4
|
+
def ecommerce_get_settings
|
5
|
+
current_site.get_meta("_setting_ecommerce", {})
|
6
|
+
end
|
7
|
+
|
8
|
+
# return the visitor key which is used to relate the cart until login/register
|
9
|
+
def ecommerce_get_visitor_key
|
10
|
+
cookies[:e_cart_id] ||= cama_get_session_id unless cama_current_user.present?
|
11
|
+
end
|
12
|
+
|
13
|
+
# return the current cart for current user
|
14
|
+
def e_current_cart(custom_visitor_key = nil)
|
15
|
+
@_cache_e_current_cart ||= current_site.carts.set_user(custom_visitor_key || cama_current_user || ecommerce_get_visitor_key).active_cart.first_or_create(name: "Cart by #{Time.current.to_s}").decorate
|
16
|
+
end
|
17
|
+
|
18
|
+
# return all shipping country codes supported for shipping
|
19
|
+
def e_shipping_countries
|
20
|
+
ecommerce_get_settings[:shipping_countries] || ISO3166::Country.codes
|
21
|
+
end
|
22
|
+
|
23
|
+
# return (Array) all the currencies for visitors
|
24
|
+
def e_visitor_unit_currencies
|
25
|
+
ecommerce_get_settings[:visitor_unit_currencies] || ['USD']
|
26
|
+
end
|
27
|
+
|
28
|
+
# draw a select dropdown with all frontend currencies and actions to change current currency
|
29
|
+
# long_mode: (Boolean, default false)
|
30
|
+
# attrs = (Hash) attributes of the select drodown, sample: {class: 'form-control'}
|
31
|
+
def e_draw_ecommerce_currencies(long_mode = false, attrs = {})
|
32
|
+
return '' if e_visitor_unit_currencies.count <= 1
|
33
|
+
res = '<select '+attrs.collect{|k, v| "#{k}='#{v}'" }.join(" ")+' onchange="window.location.href=window.location.href.split(\'cama_change_currency\')[0]+(window.location.href.search(\'\\\?\') > 1 ? \'&\' : \'?\')+\'cama_change_currency=\'+this.value">'
|
34
|
+
e_visitor_unit_currencies.each do |unit|
|
35
|
+
cur = e_get_currency_by_code(unit)
|
36
|
+
res << "<option value='#{unit}' #{'selected' if e_current_visitor_currency == unit}>#{long_mode ? "#{cur[:label]} (#{cur[:symbol]})": cur[:symbol]}</option>"
|
11
37
|
end
|
12
|
-
|
38
|
+
res << '</select>'
|
13
39
|
end
|
14
40
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
41
|
+
# set a new currency if new_currency is present
|
42
|
+
# return current currency defined by the current visitor
|
43
|
+
def e_current_visitor_currency(new_currency = nil)
|
44
|
+
session[:e_current_visitor_currency] = new_currency if new_currency.present?
|
45
|
+
session[:e_current_visitor_currency] || 'USD'
|
46
|
+
end
|
47
|
+
|
48
|
+
# return all currency weights supported by the plugin
|
49
|
+
def e_get_currency_weights
|
50
|
+
@_cache_e_get_currency_weights ||= lambda{
|
51
|
+
weights = {kg: t('plugins.ecommerce.select.kilogram'), lb: t('plugins.ecommerce.select.pound'), dr: t('plugins.ecommerce.select.dram'), gr: t('plugins.ecommerce.select.grain'), g: t('plugins.ecommerce.select.gram'), mg: t('plugins.ecommerce.select.milligram'), oz: t('plugins.ecommerce.select.ounce'), t: t('plugins.ecommerce.select.tonne'), UK: t('plugins.ecommerce.select.hundredweight')}
|
52
|
+
hooks_run('ecommerce_weights', weights)
|
53
|
+
weights
|
20
54
|
}.call
|
21
55
|
end
|
22
56
|
|
23
|
-
|
24
|
-
|
57
|
+
# return the currency details with code = code
|
58
|
+
def e_get_currency_by_code(code)
|
59
|
+
e_get_all_currencies[code.to_s.upcase] || {}
|
60
|
+
end
|
61
|
+
|
62
|
+
# return the currency defined for admin panel
|
63
|
+
def e_system_currency
|
64
|
+
ecommerce_get_settings[:current_unit] || 'USD'
|
25
65
|
end
|
26
66
|
|
27
|
-
#
|
28
|
-
def
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
data[:product_title] = post.the_title
|
33
|
-
data[:price] = post.get_field_value(:ecommerce_price)
|
34
|
-
data[:weight] = post.get_field_value(:ecommerce_weight)
|
35
|
-
data[:tax_rate_id] = post.get_field_value(:ecommerce_tax)
|
36
|
-
tax_product = current_site.tax_rates.find(data[:tax_rate_id]).options[:rate].to_f rescue 0
|
37
|
-
data[:tax_percent] = tax_product
|
38
|
-
data[:tax] = data[:price].to_f * data[:tax_percent] / 100 rescue 0
|
39
|
-
data[:currency_code] = current_site.currency_code
|
40
|
-
metas = {}
|
41
|
-
post.metas.map{|m| metas[m.key] = m.value }
|
42
|
-
data.merge(post: attributes, fields: post.get_field_values_hash, meta: metas)
|
67
|
+
# render price formatted of a product with current currency
|
68
|
+
def e_parse_price(price)
|
69
|
+
currency = cama_is_admin_request? ? e_system_currency : e_current_visitor_currency
|
70
|
+
args = {currency: currency, price: price, data: "#{currency} #{sprintf('%.2f', e_parse_to_current_currency(price))}"}; hooks_run('ecommerce_parse_price', args) # permit to customize price format
|
71
|
+
args[:data]
|
43
72
|
end
|
44
73
|
|
74
|
+
# convert the amount of system currency into visitor current currency
|
75
|
+
# amount: (Number) which will be exchanged into current visitor's currency
|
76
|
+
# return the modified amount (Integer)
|
77
|
+
def e_parse_to_current_currency(amount)
|
78
|
+
amount = amount.to_f
|
79
|
+
args = {amount: amount, from: e_system_currency, to: e_current_visitor_currency, exchange: nil}
|
80
|
+
return amount if cama_is_admin_request? || args[:from] == args[:to] || amount.to_f.round(2) == 0.00
|
81
|
+
|
82
|
+
currency = cama_ecommerce_post_type.get_option(e_current_visitor_currency, {}, 'currencies')
|
83
|
+
return (currency[:exchange] * amount).round(2) if currency[:date] == Date.today.to_s && currency[:base] == e_system_currency
|
84
|
+
|
85
|
+
hooks_run('ecommerce_calculate_exchange', args) # permit to use custom exchange app by setting the value in :exchange attribute
|
86
|
+
return (args[:exchange] * amount).round(2) if args[:exchange].present?
|
87
|
+
|
88
|
+
# request to google's finance converter site
|
89
|
+
res = open("https://www.google.com/finance/converter?a=1&from=#{args[:from]}&to=#{args[:to]}").read
|
90
|
+
res = res.scan(/\<span class=bld\>(.+?)\<\/span\>/).first.first.split(' ') # => ["69.3000", "BOB"]
|
91
|
+
exchange = res.first.to_f.round(4)
|
92
|
+
cama_ecommerce_post_type.set_option(e_current_visitor_currency, {date: Date.today.to_s, exchange: exchange, base: e_system_currency}, 'currencies')
|
93
|
+
(exchange * amount).round(2)
|
94
|
+
end
|
95
|
+
|
96
|
+
# return all currencies to use as a base currency
|
97
|
+
def e_get_all_currencies
|
98
|
+
@_cache_e_get_all_currencies ||= lambda{
|
99
|
+
currencies = {
|
100
|
+
'AED' => {symbol: 'AED', label: t('plugins.ecommerce.currencies.aed', default: 'United Arab Emirates Dirham')},
|
101
|
+
'AFN' => {symbol: 'AFN', label: t('plugins.ecommerce.currencies.afn', default: 'Afghan Afghani')},
|
102
|
+
'ALL' => {symbol: 'ALL', label: t('plugins.ecommerce.currencies.all', default: 'Albanian Lek')},
|
103
|
+
'AMD' => {symbol: 'AMD', label: t('plugins.ecommerce.currencies.amd', default: 'Armenian Dram')},
|
104
|
+
'ANG' => {symbol: 'ANG', label: t('plugins.ecommerce.currencies.ang', default: 'Netherlands Antillean Guilder')},
|
105
|
+
'AOA' => {symbol: 'AOA', label: t('plugins.ecommerce.currencies.aoa', default: 'Angolan Kwanza')},
|
106
|
+
'ARS' => {symbol: 'ARS', label: t('plugins.ecommerce.currencies.ars', default: 'Argentine Peso')},
|
107
|
+
'AUD' => {symbol: 'A$', label: t('plugins.ecommerce.currencies.aud', default: 'Australian Dollar')},
|
108
|
+
'AWG' => {symbol: 'AWG', label: t('plugins.ecommerce.currencies.awg', default: 'Aruban Florin')},
|
109
|
+
'AZN' => {symbol: 'AZN', label: t('plugins.ecommerce.currencies.azn', default: 'Azerbaijani Manat')},
|
110
|
+
'BAM' => {symbol: 'BAM', label: t('plugins.ecommerce.currencies.bam', default: 'Bosnia-Herzegovina Convertible Mark')},
|
111
|
+
'BBD' => {symbol: 'BBD', label: t('plugins.ecommerce.currencies.bbd', default: 'Barbadian Dollar')},
|
112
|
+
'BDT' => {symbol: 'BDT', label: t('plugins.ecommerce.currencies.bdt', default: 'Bangladeshi Taka')},
|
113
|
+
'BGN' => {symbol: 'BGN', label: t('plugins.ecommerce.currencies.bgn', default: 'Bulgarian Lev')},
|
114
|
+
'BHD' => {symbol: 'BHD', label: t('plugins.ecommerce.currencies.bhd', default: 'Bahraini Dinar')},
|
115
|
+
'BIF' => {symbol: 'BIF', label: t('plugins.ecommerce.currencies.bif', default: 'Burundian Franc')},
|
116
|
+
'BMD' => {symbol: 'BMD', label: t('plugins.ecommerce.currencies.bmd', default: 'Bermudan Dollar')},
|
117
|
+
'BND' => {symbol: 'BND', label: t('plugins.ecommerce.currencies.bnd', default: 'Brunei Dollar')},
|
118
|
+
'BOB' => {symbol: 'BOB', label: t('plugins.ecommerce.currencies.bob', default: 'Bolivian Boliviano')},
|
119
|
+
'BRL' => {symbol: 'R$', label: t('plugins.ecommerce.currencies.brl', default: 'Brazilian Real')},
|
120
|
+
'BSD' => {symbol: 'BSD', label: t('plugins.ecommerce.currencies.bsd', default: 'Bahamian Dollar')},
|
121
|
+
'BTC' => {symbol: '฿', label: t('plugins.ecommerce.currencies.btc', default: 'Bitcoin')},
|
122
|
+
'BTN' => {symbol: 'BTN', label: t('plugins.ecommerce.currencies.btn', default: 'Bhutanese Ngultrum')},
|
123
|
+
'BWP' => {symbol: 'BWP', label: t('plugins.ecommerce.currencies.bwp', default: 'Botswanan Pula')},
|
124
|
+
'BYN' => {symbol: 'BYN', label: t('plugins.ecommerce.currencies.byn', default: 'Belarusian Ruble')},
|
125
|
+
'BYR' => {symbol: '2000-2016 ', label: t('plugins.ecommerce.currencies.byr', default: 'Belarusian Ruble')},
|
126
|
+
'BZD' => {symbol: 'BZD', label: t('plugins.ecommerce.currencies.bzd', default: 'Belize Dollar')},
|
127
|
+
'CAD' => {symbol: 'CA$', label: t('plugins.ecommerce.currencies.cad', default: 'Canadian Dollar')},
|
128
|
+
'CDF' => {symbol: 'CDF', label: t('plugins.ecommerce.currencies.cdf', default: 'Congolese Franc')},
|
129
|
+
'CHF' => {symbol: 'CHF', label: t('plugins.ecommerce.currencies.chf', default: 'Swiss Franc')},
|
130
|
+
'CLF' => {symbol: 'UF ', label: t('plugins.ecommerce.currencies.clf', default: 'Chilean Unit of Account')},
|
131
|
+
'CLP' => {symbol: 'CLP', label: t('plugins.ecommerce.currencies.clp', default: 'Chilean Peso')},
|
132
|
+
'CNH' => {symbol: 'CNH', label: t('plugins.ecommerce.currencies.cnh', default: 'CNH')},
|
133
|
+
'CNY' => {symbol: 'CN¥', label: t('plugins.ecommerce.currencies.cny', default: 'Chinese Yuan')},
|
134
|
+
'COP' => {symbol: 'COP', label: t('plugins.ecommerce.currencies.cop', default: 'Colombian Peso')},
|
135
|
+
'CRC' => {symbol: 'CRC', label: t('plugins.ecommerce.currencies.crc', default: 'Costa Rican Colón')},
|
136
|
+
'CUP' => {symbol: 'CUP', label: t('plugins.ecommerce.currencies.cup', default: 'Cuban Peso')},
|
137
|
+
'CVE' => {symbol: 'CVE', label: t('plugins.ecommerce.currencies.cve', default: 'Cape Verdean Escudo')},
|
138
|
+
'CZK' => {symbol: 'CZK', label: t('plugins.ecommerce.currencies.czk', default: 'Czech Republic Koruna')},
|
139
|
+
'DEM' => {symbol: 'DEM', label: t('plugins.ecommerce.currencies.dem', default: 'German Mark')},
|
140
|
+
'DJF' => {symbol: 'DJF', label: t('plugins.ecommerce.currencies.djf', default: 'Djiboutian Franc')},
|
141
|
+
'DKK' => {symbol: 'DKK', label: t('plugins.ecommerce.currencies.dkk', default: 'Danish Krone')},
|
142
|
+
'DOP' => {symbol: 'DOP', label: t('plugins.ecommerce.currencies.dop', default: 'Dominican Peso')},
|
143
|
+
'DZD' => {symbol: 'DZD', label: t('plugins.ecommerce.currencies.dzd', default: 'Algerian Dinar')},
|
144
|
+
'EGP' => {symbol: 'EGP', label: t('plugins.ecommerce.currencies.egp', default: 'Egyptian Pound')},
|
145
|
+
'ERN' => {symbol: 'ERN', label: t('plugins.ecommerce.currencies.ern', default: 'Eritrean Nakfa')},
|
146
|
+
'ETB' => {symbol: 'ETB', label: t('plugins.ecommerce.currencies.etb', default: 'Ethiopian Birr')},
|
147
|
+
'EUR' => {symbol: '€', label: t('plugins.ecommerce.currencies.eur', default: 'Euro')},
|
148
|
+
'FIM' => {symbol: 'FIM', label: t('plugins.ecommerce.currencies.fim', default: 'Finnish Markka')},
|
149
|
+
'FJD' => {symbol: 'FJD', label: t('plugins.ecommerce.currencies.fjd', default: 'Fijian Dollar')},
|
150
|
+
'FKP' => {symbol: 'FKP', label: t('plugins.ecommerce.currencies.fkp', default: 'Falkland Islands Pound')},
|
151
|
+
'FRF' => {symbol: 'FRF', label: t('plugins.ecommerce.currencies.frf', default: 'French Franc')},
|
152
|
+
'GBP' => {symbol: '£', label: t('plugins.ecommerce.currencies.gbp', default: 'British Pound')},
|
153
|
+
'GEL' => {symbol: 'GEL', label: t('plugins.ecommerce.currencies.gel', default: 'Georgian Lari')},
|
154
|
+
'GHS' => {symbol: 'GHS', label: t('plugins.ecommerce.currencies.ghs', default: 'Ghanaian Cedi')},
|
155
|
+
'GIP' => {symbol: 'GIP', label: t('plugins.ecommerce.currencies.gip', default: 'Gibraltar Pound')},
|
156
|
+
'GMD' => {symbol: 'GMD', label: t('plugins.ecommerce.currencies.gmd', default: 'Gambian Dalasi')},
|
157
|
+
'GNF' => {symbol: 'GNF', label: t('plugins.ecommerce.currencies.gnf', default: 'Guinean Franc')},
|
158
|
+
'GTQ' => {symbol: 'GTQ', label: t('plugins.ecommerce.currencies.gtq', default: 'Guatemalan Quetzal')},
|
159
|
+
'GYD' => {symbol: 'GYD', label: t('plugins.ecommerce.currencies.gyd', default: 'Guyanaese Dollar')},
|
160
|
+
'HKD' => {symbol: 'HK$', label: t('plugins.ecommerce.currencies.hkd', default: 'Hong Kong Dollar')},
|
161
|
+
'HNL' => {symbol: 'HNL', label: t('plugins.ecommerce.currencies.hnl', default: 'Honduran Lempira')},
|
162
|
+
'HRK' => {symbol: 'HRK', label: t('plugins.ecommerce.currencies.hrk', default: 'Croatian Kuna')},
|
163
|
+
'HTG' => {symbol: 'HTG', label: t('plugins.ecommerce.currencies.htg', default: 'Haitian Gourde')},
|
164
|
+
'HUF' => {symbol: 'HUF', label: t('plugins.ecommerce.currencies.huf', default: 'Hungarian Forint')},
|
165
|
+
'IDR' => {symbol: 'IDR', label: t('plugins.ecommerce.currencies.idr', default: 'Indonesian Rupiah')},
|
166
|
+
'IEP' => {symbol: 'IEP', label: t('plugins.ecommerce.currencies.iep', default: 'Irish Pound')},
|
167
|
+
'ILS' => {symbol: '₪', label: t('plugins.ecommerce.currencies.ils', default: 'Israeli New Sheqel')},
|
168
|
+
'INR' => {symbol: '₹', label: t('plugins.ecommerce.currencies.inr', default: 'Indian Rupee')},
|
169
|
+
'IQD' => {symbol: 'IQD', label: t('plugins.ecommerce.currencies.iqd', default: 'Iraqi Dinar')},
|
170
|
+
'IRR' => {symbol: 'IRR', label: t('plugins.ecommerce.currencies.irr', default: 'Iranian Rial')},
|
171
|
+
'ISK' => {symbol: 'ISK', label: t('plugins.ecommerce.currencies.isk', default: 'Icelandic Króna')},
|
172
|
+
'ITL' => {symbol: 'ITL', label: t('plugins.ecommerce.currencies.itl', default: 'Italian Lira')},
|
173
|
+
'JMD' => {symbol: 'JMD', label: t('plugins.ecommerce.currencies.jmd', default: 'Jamaican Dollar')},
|
174
|
+
'JOD' => {symbol: 'JOD', label: t('plugins.ecommerce.currencies.jod', default: 'Jordanian Dinar')},
|
175
|
+
'JPY' => {symbol: '¥', label: t('plugins.ecommerce.currencies.jpy', default: 'Japanese Yen')},
|
176
|
+
'KES' => {symbol: 'KES', label: t('plugins.ecommerce.currencies.kes', default: 'Kenyan Shilling')},
|
177
|
+
'KGS' => {symbol: 'KGS', label: t('plugins.ecommerce.currencies.kgs', default: 'Kyrgystani Som')},
|
178
|
+
'KHR' => {symbol: 'KHR', label: t('plugins.ecommerce.currencies.khr', default: 'Cambodian Riel')},
|
179
|
+
'KMF' => {symbol: 'KMF', label: t('plugins.ecommerce.currencies.kmf', default: 'Comorian Franc')},
|
180
|
+
'KPW' => {symbol: 'KPW', label: t('plugins.ecommerce.currencies.kpw', default: 'North Korean Won')},
|
181
|
+
'KRW' => {symbol: '₩', label: t('plugins.ecommerce.currencies.krw', default: 'South Korean Won')},
|
182
|
+
'KWD' => {symbol: 'KWD', label: t('plugins.ecommerce.currencies.kwd', default: 'Kuwaiti Dinar')},
|
183
|
+
'KYD' => {symbol: 'KYD', label: t('plugins.ecommerce.currencies.kyd', default: 'Cayman Islands Dollar')},
|
184
|
+
'KZT' => {symbol: 'KZT', label: t('plugins.ecommerce.currencies.kzt', default: 'Kazakhstani Tenge')},
|
185
|
+
'LAK' => {symbol: 'LAK', label: t('plugins.ecommerce.currencies.lak', default: 'Laotian Kip')},
|
186
|
+
'LBP' => {symbol: 'LBP', label: t('plugins.ecommerce.currencies.lbp', default: 'Lebanese Pound')},
|
187
|
+
'LKR' => {symbol: 'LKR', label: t('plugins.ecommerce.currencies.lkr', default: 'Sri Lankan Rupee')},
|
188
|
+
'LRD' => {symbol: 'LRD', label: t('plugins.ecommerce.currencies.lrd', default: 'Liberian Dollar')},
|
189
|
+
'LSL' => {symbol: 'LSL', label: t('plugins.ecommerce.currencies.lsl', default: 'Lesotho Loti')},
|
190
|
+
'LTL' => {symbol: 'LTL', label: t('plugins.ecommerce.currencies.ltl', default: 'Lithuanian Litas')},
|
191
|
+
'LVL' => {symbol: 'LVL', label: t('plugins.ecommerce.currencies.lvl', default: 'Latvian Lats')},
|
192
|
+
'LYD' => {symbol: 'LYD', label: t('plugins.ecommerce.currencies.lyd', default: 'Libyan Dinar')},
|
193
|
+
'MAD' => {symbol: 'MAD', label: t('plugins.ecommerce.currencies.mad', default: 'Moroccan Dirham')},
|
194
|
+
'MDL' => {symbol: 'MDL', label: t('plugins.ecommerce.currencies.mdl', default: 'Moldovan Leu')},
|
195
|
+
'MGA' => {symbol: 'MGA', label: t('plugins.ecommerce.currencies.mga', default: 'Malagasy Ariary')},
|
196
|
+
'MKD' => {symbol: 'MKD', label: t('plugins.ecommerce.currencies.mkd', default: 'Macedonian Denar')},
|
197
|
+
'MMK' => {symbol: 'MMK', label: t('plugins.ecommerce.currencies.mmk', default: 'Myanmar Kyat')},
|
198
|
+
'MNT' => {symbol: 'MNT', label: t('plugins.ecommerce.currencies.mnt', default: 'Mongolian Tugrik')},
|
199
|
+
'MOP' => {symbol: 'MOP', label: t('plugins.ecommerce.currencies.mop', default: 'Macanese Pataca')},
|
200
|
+
'MRO' => {symbol: 'MRO', label: t('plugins.ecommerce.currencies.mro', default: 'Mauritanian Ouguiya')},
|
201
|
+
'MUR' => {symbol: 'MUR', label: t('plugins.ecommerce.currencies.mur', default: 'Mauritian Rupee')},
|
202
|
+
'MVR' => {symbol: 'MVR', label: t('plugins.ecommerce.currencies.mvr', default: 'Maldivian Rufiyaa')},
|
203
|
+
'MWK' => {symbol: 'MWK', label: t('plugins.ecommerce.currencies.mwk', default: 'Malawian Kwacha')},
|
204
|
+
'MXN' => {symbol: 'MX$', label: t('plugins.ecommerce.currencies.mxn', default: 'Mexican Peso')},
|
205
|
+
'MYR' => {symbol: 'MYR', label: t('plugins.ecommerce.currencies.myr', default: 'Malaysian Ringgit')},
|
206
|
+
'MZN' => {symbol: 'MZN', label: t('plugins.ecommerce.currencies.mzn', default: 'Mozambican Metical')},
|
207
|
+
'NAD' => {symbol: 'NAD', label: t('plugins.ecommerce.currencies.nad', default: 'Namibian Dollar')},
|
208
|
+
'NGN' => {symbol: 'NGN', label: t('plugins.ecommerce.currencies.ngn', default: 'Nigerian Naira')},
|
209
|
+
'NIO' => {symbol: 'NIO', label: t('plugins.ecommerce.currencies.nio', default: 'Nicaraguan Córdoba')},
|
210
|
+
'NOK' => {symbol: 'NOK', label: t('plugins.ecommerce.currencies.nok', default: 'Norwegian Krone')},
|
211
|
+
'NPR' => {symbol: 'NPR', label: t('plugins.ecommerce.currencies.npr', default: 'Nepalese Rupee')},
|
212
|
+
'NZD' => {symbol: 'NZ$', label: t('plugins.ecommerce.currencies.nzd', default: 'New Zealand Dollar')},
|
213
|
+
'OMR' => {symbol: 'OMR', label: t('plugins.ecommerce.currencies.omr', default: 'Omani Rial')},
|
214
|
+
'PAB' => {symbol: 'PAB', label: t('plugins.ecommerce.currencies.pab', default: 'Panamanian Balboa')},
|
215
|
+
'PEN' => {symbol: 'PEN', label: t('plugins.ecommerce.currencies.pen', default: 'Peruvian Nuevo Sol')},
|
216
|
+
'PGK' => {symbol: 'PGK', label: t('plugins.ecommerce.currencies.pgk', default: 'Papua New Guinean Kina')},
|
217
|
+
'PHP' => {symbol: 'PHP', label: t('plugins.ecommerce.currencies.php', default: 'Philippine Peso')},
|
218
|
+
'PKG' => {symbol: 'PKG', label: t('plugins.ecommerce.currencies.pkg', default: 'PKG')},
|
219
|
+
'PKR' => {symbol: 'PKR', label: t('plugins.ecommerce.currencies.pkr', default: 'Pakistani Rupee')},
|
220
|
+
'PLN' => {symbol: 'PLN', label: t('plugins.ecommerce.currencies.pln', default: 'Polish Zloty')},
|
221
|
+
'PYG' => {symbol: 'PYG', label: t('plugins.ecommerce.currencies.pyg', default: 'Paraguayan Guarani')},
|
222
|
+
'QAR' => {symbol: 'QAR', label: t('plugins.ecommerce.currencies.qar', default: 'Qatari Rial')},
|
223
|
+
'RON' => {symbol: 'RON', label: t('plugins.ecommerce.currencies.ron', default: 'Romanian Leu')},
|
224
|
+
'RSD' => {symbol: 'RSD', label: t('plugins.ecommerce.currencies.rsd', default: 'Serbian Dinar')},
|
225
|
+
'RUB' => {symbol: 'RUB', label: t('plugins.ecommerce.currencies.rub', default: 'Russian Ruble')},
|
226
|
+
'RWF' => {symbol: 'RWF', label: t('plugins.ecommerce.currencies.rwf', default: 'Rwandan Franc')},
|
227
|
+
'SAR' => {symbol: 'SAR', label: t('plugins.ecommerce.currencies.sar', default: 'Saudi Riyal')},
|
228
|
+
'SBD' => {symbol: 'SBD', label: t('plugins.ecommerce.currencies.sbd', default: 'Solomon Islands Dollar')},
|
229
|
+
'SCR' => {symbol: 'SCR', label: t('plugins.ecommerce.currencies.scr', default: 'Seychellois Rupee')},
|
230
|
+
'SDG' => {symbol: 'SDG', label: t('plugins.ecommerce.currencies.sdg', default: 'Sudanese Pound')},
|
231
|
+
'SEK' => {symbol: 'SEK', label: t('plugins.ecommerce.currencies.sek', default: 'Swedish Krona')},
|
232
|
+
'SGD' => {symbol: 'SGD', label: t('plugins.ecommerce.currencies.sgd', default: 'Singapore Dollar')},
|
233
|
+
'SHP' => {symbol: 'SHP', label: t('plugins.ecommerce.currencies.shp', default: 'St. Helena Pound')},
|
234
|
+
'SKK' => {symbol: 'SKK', label: t('plugins.ecommerce.currencies.skk', default: 'Slovak Koruna')},
|
235
|
+
'SLL' => {symbol: 'SLL', label: t('plugins.ecommerce.currencies.sll', default: 'Sierra Leonean Leone')},
|
236
|
+
'SOS' => {symbol: 'SOS', label: t('plugins.ecommerce.currencies.sos', default: 'Somali Shilling')},
|
237
|
+
'SRD' => {symbol: 'SRD', label: t('plugins.ecommerce.currencies.srd', default: 'Surinamese Dollar')},
|
238
|
+
'STD' => {symbol: 'STD', label: t('plugins.ecommerce.currencies.std', default: 'São Tomé & Príncipe Dobra')},
|
239
|
+
'SVC' => {symbol: 'SVC', label: t('plugins.ecommerce.currencies.svc', default: 'Salvadoran Colón')},
|
240
|
+
'SYP' => {symbol: 'SYP', label: t('plugins.ecommerce.currencies.syp', default: 'Syrian Pound')},
|
241
|
+
'SZL' => {symbol: 'SZL', label: t('plugins.ecommerce.currencies.szl', default: 'Swazi Lilangeni')},
|
242
|
+
'THB' => {symbol: 'THB', label: t('plugins.ecommerce.currencies.thb', default: 'Thai Baht')},
|
243
|
+
'TJS' => {symbol: 'TJS', label: t('plugins.ecommerce.currencies.tjs', default: 'Tajikistani Somoni')},
|
244
|
+
'TMT' => {symbol: 'TMT', label: t('plugins.ecommerce.currencies.tmt', default: 'Turkmenistani Manat')},
|
245
|
+
'TND' => {symbol: 'TND', label: t('plugins.ecommerce.currencies.tnd', default: 'Tunisian Dinar')},
|
246
|
+
'TOP' => {symbol: 'TOP', label: t('plugins.ecommerce.currencies.top', default: 'Tongan Paʻanga')},
|
247
|
+
'TRY' => {symbol: 'TRY', label: t('plugins.ecommerce.currencies.try', default: 'Turkish Lira')},
|
248
|
+
'TTD' => {symbol: 'TTD', label: t('plugins.ecommerce.currencies.ttd', default: 'Trinidad & Tobago Dollar')},
|
249
|
+
'TWD' => {symbol: 'NT$', label: t('plugins.ecommerce.currencies.twd', default: 'New Taiwan Dollar')},
|
250
|
+
'TZS' => {symbol: 'TZS', label: t('plugins.ecommerce.currencies.tzs', default: 'Tanzanian Shilling')},
|
251
|
+
'UAH' => {symbol: 'UAH', label: t('plugins.ecommerce.currencies.uah', default: 'Ukrainian Hryvnia')},
|
252
|
+
'UGX' => {symbol: 'UGX', label: t('plugins.ecommerce.currencies.ugx', default: 'Ugandan Shilling')},
|
253
|
+
'USD' => {symbol: '$', label: t('plugins.ecommerce.currencies.usd', default: 'US Dollar')},
|
254
|
+
'UYU' => {symbol: 'UYU', label: t('plugins.ecommerce.currencies.uyu', default: 'Uruguayan Peso')},
|
255
|
+
'UZS' => {symbol: 'UZS', label: t('plugins.ecommerce.currencies.uzs', default: 'Uzbekistani Som')},
|
256
|
+
'VEF' => {symbol: 'VEF', label: t('plugins.ecommerce.currencies.vef', default: 'Venezuelan Bolívar')},
|
257
|
+
'VND' => {symbol: '₫', label: t('plugins.ecommerce.currencies.vnd', default: 'Vietnamese Dong')},
|
258
|
+
'VUV' => {symbol: 'VUV', label: t('plugins.ecommerce.currencies.vuv', default: 'Vanuatu Vatu')},
|
259
|
+
'WST' => {symbol: 'WST', label: t('plugins.ecommerce.currencies.wst', default: 'Samoan Tala')},
|
260
|
+
'XAF' => {symbol: 'FCFA', label: t('plugins.ecommerce.currencies.xaf', default: 'Central African CFA Franc')},
|
261
|
+
'XCD' => {symbol: 'EC$', label: t('plugins.ecommerce.currencies.xcd', default: 'East Caribbean Dollar')},
|
262
|
+
'XDR' => {symbol: 'XDR', label: t('plugins.ecommerce.currencies.xdr', default: 'Special Drawing Rights')},
|
263
|
+
'XOF' => {symbol: 'CFA', label: t('plugins.ecommerce.currencies.xof', default: 'West African CFA Franc')},
|
264
|
+
'XPF' => {symbol: 'CFPF', label: t('plugins.ecommerce.currencies.xpf', default: 'CFP Franc')},
|
265
|
+
'YER' => {symbol: 'YER', label: t('plugins.ecommerce.currencies.yer', default: 'Yemeni Rial')},
|
266
|
+
'ZAR' => {symbol: 'ZAR', label: t('plugins.ecommerce.currencies.zar', default: 'South African Rand')},
|
267
|
+
'ZMK' => {symbol: '1968–2012 ', label: t('plugins.ecommerce.currencies.zmk', default: 'Zambian Kwacha')},
|
268
|
+
'ZMW' => {symbol: 'ZMW', label: t('plugins.ecommerce.currencies.zmw', default: 'Zambian Kwacha')},
|
269
|
+
'ZWL' => {symbol: '2009 ', label: t('plugins.ecommerce.currencies.zwl', default: 'Zimbabwean Dollar')}
|
270
|
+
}
|
271
|
+
hooks_run('ecommerce_currencies', currencies)
|
272
|
+
currencies
|
273
|
+
}.call
|
274
|
+
end
|
275
|
+
|
276
|
+
def ecommerce_draw_breadcrumb
|
277
|
+
res = '<ol class="breadcrumb" style="margin: 0;">'
|
278
|
+
@ecommerce_breadcrumb.each_with_index do |m, index|
|
279
|
+
if m[1].present?
|
280
|
+
res << "<li class='#{"active" if @ecommerce_breadcrumb.size == index+1}'><a href='#{m[1]}'>#{m[0]}</a></li>"
|
281
|
+
else
|
282
|
+
res << "<li class='#{"active" if @ecommerce_breadcrumb.size == index+1}'><span>#{m[0]}</span></li>"
|
283
|
+
end
|
284
|
+
end
|
285
|
+
res << '</ol>'
|
286
|
+
end
|
287
|
+
|
288
|
+
# permit to add custom payment methods by hooks
|
45
289
|
def ecommerce_custom_payment_methods
|
46
290
|
@_ecommerce_custom_payment_methods ||= lambda{
|
47
291
|
args = {custom_payment_methods: {}}; hooks_run("ecommerce_custom_payment_methods", args)
|
@@ -59,5 +303,4 @@ module Plugins::Ecommerce::EcommerceFunctionsHelper
|
|
59
303
|
args[:custom_payment_methods]
|
60
304
|
}.call
|
61
305
|
end
|
62
|
-
|
63
306
|
end
|