camaleon_ecommerce 1.2 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|