camaleon_ecommerce 1.1 → 1.2
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 +83 -0
- data/app/assets/javascripts/plugins/ecommerce/cart.js +3 -0
- data/app/controllers/plugins/ecommerce/admin/coupons_controller.rb +6 -12
- data/app/controllers/plugins/ecommerce/admin/orders_controller.rb +2 -8
- data/app/controllers/plugins/ecommerce/admin/payment_methods_controller.rb +7 -12
- data/app/controllers/plugins/ecommerce/admin/prices_controller.rb +0 -8
- data/app/controllers/plugins/ecommerce/admin/settings_controller.rb +0 -8
- data/app/controllers/plugins/ecommerce/admin/shipping_methods_controller.rb +6 -14
- data/app/controllers/plugins/ecommerce/admin/tax_rates_controller.rb +6 -12
- data/app/controllers/plugins/ecommerce/admin_controller.rb +27 -8
- data/app/controllers/plugins/ecommerce/front/checkout_controller.rb +42 -75
- data/app/controllers/plugins/ecommerce/front/orders_controller.rb +2 -10
- data/app/controllers/plugins/ecommerce/front_controller.rb +0 -8
- data/app/decorators/plugins/ecommerce/coupon_decorator.rb +0 -8
- data/app/decorators/plugins/ecommerce/product_decorator.rb +86 -35
- data/app/decorators/plugins/ecommerce/product_item_decorator.rb +27 -3
- data/app/decorators/plugins/ecommerce/product_variation_decorator.rb +18 -0
- data/app/helpers/plugins/ecommerce/ecommerce_email_helper.rb +11 -13
- data/app/helpers/plugins/ecommerce/ecommerce_functions_helper.rb +25 -11
- data/app/helpers/plugins/ecommerce/ecommerce_helper.rb +22 -27
- data/app/helpers/plugins/ecommerce/ecommerce_payment_helper.rb +1 -56
- data/app/models/plugins/ecommerce/attribute.rb +9 -0
- data/app/models/plugins/ecommerce/cart.rb +46 -28
- data/app/models/plugins/ecommerce/coupon.rb +0 -8
- data/app/models/plugins/ecommerce/legacy_cart.rb +50 -0
- data/app/models/plugins/ecommerce/legacy_order.rb +48 -0
- data/app/models/plugins/ecommerce/order.rb +0 -8
- data/app/models/plugins/ecommerce/order_detail.rb +0 -9
- data/app/models/plugins/ecommerce/payment_method.rb +0 -8
- data/app/models/plugins/ecommerce/product_item.rb +3 -10
- data/app/models/plugins/ecommerce/product_variation.rb +9 -0
- data/app/models/plugins/ecommerce/shipping_method.rb +0 -8
- data/app/models/plugins/ecommerce/tax_rate.rb +0 -8
- data/app/services/plugins/ecommerce/cart_service.rb +149 -0
- data/app/services/plugins/ecommerce/order_service.rb +26 -0
- data/app/services/plugins/ecommerce/product_item_service.rb +29 -0
- data/app/services/plugins/ecommerce/product_service.rb +17 -0
- data/app/services/plugins/ecommerce/site_service.rb +21 -0
- data/app/services/plugins/ecommerce/user_cart_service.rb +12 -0
- data/app/services/plugins/ecommerce/user_product_service.rb +29 -0
- data/app/services/plugins/ecommerce/util_service.rb +5 -0
- data/app/views/plugins/ecommerce/admin/orders/form.html.erb +28 -16
- data/app/views/plugins/ecommerce/admin/orders/index.html.erb +7 -1
- data/app/views/plugins/ecommerce/admin/payment_methods/form.html.erb +11 -1
- data/app/views/plugins/ecommerce/admin/product_attributes.html.erb +95 -0
- data/app/views/plugins/ecommerce/admin/products/_variations.html.erb +72 -0
- data/app/views/plugins/ecommerce/front/checkout/cart_index.html.erb +5 -5
- data/app/views/plugins/ecommerce/front/orders/show.html.erb +96 -89
- data/app/views/plugins/ecommerce/partials/_cart_widget.html.erb +3 -3
- data/app/views/plugins/ecommerce/partials/checkout/_details.html.erb +1 -1
- data/app/views/plugins/ecommerce/partials/checkout/_payments.html.erb +6 -1
- data/app/views/plugins/ecommerce/partials/checkout/_products_detail.html.erb +1 -1
- data/app/views/plugins/ecommerce/partials/checkout/_user_info.html.erb +26 -22
- data/app/views/post_types/commerce/single.html.erb +28 -12
- data/config/camaleon_plugin.json +4 -12
- data/config/custom_models.rb +10 -0
- data/config/locales/en.yml +3 -0
- data/config/locales/es.yml +112 -54
- data/config/routes.rb +2 -0
- data/db/migrate/20160527184747_add_new_cart_structure.rb +7 -4
- data/db/migrate/20160620200501_add_product_attributes_structure.rb +21 -0
- data/db/migrate/20160825174848_set_cama_post_decorator_class.rb +13 -0
- data/db/migrate/20160825232739_migrate_order_data.rb +87 -0
- data/lib/ecommerce/version.rb +1 -1
- metadata +22 -7
- data/app/assets/javascripts/plugins/ecommerce/admin.js +0 -0
- data/app/assets/javascripts/plugins/ecommerce/fix_form.js +0 -7
- data/config/currency_en.json +0 -154
- data/config/currency_es.json +0 -154
@@ -1,11 +1,3 @@
|
|
1
|
-
=begin
|
2
|
-
Camaleon CMS is a content management system
|
3
|
-
Copyright (C) 2015 by Owen Peredo Diaz
|
4
|
-
Email: owenperedo@gmail.com
|
5
|
-
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
6
|
-
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
7
|
-
See the GNU Affero General Public License (GPLv3) for more details.
|
8
|
-
=end
|
9
1
|
class Plugins::Ecommerce::Front::OrdersController < Plugins::Ecommerce::FrontController
|
10
2
|
before_action :commerce_authenticate
|
11
3
|
before_action :set_bread
|
@@ -16,13 +8,13 @@ class Plugins::Ecommerce::Front::OrdersController < Plugins::Ecommerce::FrontCon
|
|
16
8
|
|
17
9
|
def show
|
18
10
|
@order = current_site.orders.find_by_slug(params[:order]).decorate
|
19
|
-
@
|
11
|
+
@ecommerce_breadcrumb << [t('plugins.ecommerce.messages.detail_order', default: "Detail order: #%{order}", order: params[:order])]
|
20
12
|
end
|
21
13
|
|
22
14
|
|
23
15
|
|
24
16
|
private
|
25
17
|
def set_bread
|
26
|
-
@
|
18
|
+
@ecommerce_breadcrumb << [t('plugins.ecommerce.messages.my_orders', default: 'My Orders'), url_for(action: :index)]
|
27
19
|
end
|
28
20
|
end
|
@@ -1,11 +1,3 @@
|
|
1
|
-
=begin
|
2
|
-
Camaleon CMS is a content management system
|
3
|
-
Copyright (C) 2015 by Owen Peredo Diaz
|
4
|
-
Email: owenperedo@gmail.com
|
5
|
-
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
6
|
-
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
7
|
-
See the GNU Affero General Public License (GPLv3) for more details.
|
8
|
-
=end
|
9
1
|
class Plugins::Ecommerce::FrontController < CamaleonCms::Apps::PluginsFrontController
|
10
2
|
include Plugins::Ecommerce::EcommercePaymentHelper
|
11
3
|
before_action :ecommerce_add_assets_in_front
|
@@ -1,11 +1,3 @@
|
|
1
|
-
=begin
|
2
|
-
Camaleon CMS is a content management system
|
3
|
-
Copyright (C) 2015 by Owen Peredo Diaz
|
4
|
-
Email: owenperedo@gmail.com
|
5
|
-
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
6
|
-
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
7
|
-
See the GNU Affero General Public License (GPLv3) for more details.
|
8
|
-
=end
|
9
1
|
class Plugins::Ecommerce::CouponDecorator < CamaleonCms::TermTaxonomyDecorator
|
10
2
|
delegate_all
|
11
3
|
|
@@ -1,46 +1,89 @@
|
|
1
1
|
class Plugins::Ecommerce::ProductDecorator < CamaleonCms::PostDecorator
|
2
|
-
|
3
|
-
|
2
|
+
|
3
|
+
def the_sku(variation_id = nil)
|
4
|
+
sku(variation_id)
|
4
5
|
end
|
5
|
-
|
6
|
-
|
6
|
+
|
7
|
+
def sku(variation_id = nil)
|
8
|
+
if variation_id.present?
|
9
|
+
get_variation(variation_id).sku
|
10
|
+
else
|
11
|
+
object.get_field_value('ecommerce_sku').to_s
|
12
|
+
end
|
7
13
|
end
|
8
|
-
|
9
|
-
|
14
|
+
|
15
|
+
def the_price(variation_id = nil)
|
16
|
+
"#{h.current_site.current_unit}#{sprintf('%.2f', price(variation_id))}"
|
10
17
|
end
|
11
|
-
|
12
|
-
|
18
|
+
|
19
|
+
def the_weight(variation_id = nil)
|
20
|
+
"#{h.current_site.current_weight} #{weight(variation_id)}"
|
13
21
|
end
|
14
|
-
|
15
|
-
|
22
|
+
|
23
|
+
def weight(variation_id = nil)
|
24
|
+
if variation_id.present?
|
25
|
+
get_variation(variation_id).weight || 0
|
26
|
+
else
|
27
|
+
object.get_field_value('ecommerce_weight').to_f || 0
|
28
|
+
end
|
16
29
|
end
|
30
|
+
|
31
|
+
def the_qty(variation_id = nil)
|
32
|
+
if variation_id.present?
|
33
|
+
get_variation(variation_id).qty || 0
|
34
|
+
else
|
35
|
+
object.get_field_value('ecommerce_qty') || 0
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
17
39
|
def the_photos
|
18
40
|
object.get_field_values('ecommerce_photos') || []
|
19
41
|
end
|
20
|
-
|
21
|
-
|
42
|
+
|
43
|
+
def in_stock?(variation_id = nil)
|
44
|
+
if variation_id.present?
|
45
|
+
get_variation(variation_id).qty > 0
|
46
|
+
else
|
47
|
+
object.get_field_value('ecommerce_stock').to_s.to_bool
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def price(variation_id = nil)
|
52
|
+
if variation_id.present?
|
53
|
+
get_variation(variation_id).amount || 0
|
54
|
+
else
|
55
|
+
object.get_field_value(:ecommerce_price).to_f || 0
|
56
|
+
end
|
22
57
|
end
|
23
58
|
|
24
|
-
|
25
|
-
|
59
|
+
# return the title for variation prefixed with the title of the product
|
60
|
+
def the_variation_title(variation_id = nil)
|
61
|
+
"#{the_title}#{" - #{get_variation(variation_id).attribute_values.pluck(:label).join(', ').translate.presence || 'Not defined'}" if variation_id.present? }"
|
26
62
|
end
|
27
63
|
|
28
|
-
|
29
|
-
|
64
|
+
# return a product variation by id
|
65
|
+
def get_variation(variation_id)
|
66
|
+
object.cama_fetch_cache("_get_variation_#{variation_id}") do
|
67
|
+
self.product_variations.find(variation_id)
|
68
|
+
end
|
30
69
|
end
|
31
70
|
|
32
|
-
def
|
71
|
+
def the_tax(variation_id = nil)
|
72
|
+
tax(variation_id)
|
73
|
+
end
|
74
|
+
|
75
|
+
def tax(variation_id = nil)
|
33
76
|
tax_rate_id = object.get_field_value(:ecommerce_tax)
|
34
77
|
if tax_rate_id.present?
|
35
78
|
percent = h.current_site.tax_rates.find(tax_rate_id).options[:rate].to_f rescue 0
|
36
|
-
price * percent / 100
|
79
|
+
price(variation_id) * percent / 100
|
37
80
|
else # tax not defined
|
38
81
|
0
|
39
82
|
end
|
40
83
|
end
|
41
84
|
|
42
|
-
def the_stock_status
|
43
|
-
if in_stock? && the_qty_real.to_i > 0
|
85
|
+
def the_stock_status(variation_id = nil)
|
86
|
+
if in_stock?(variation_id) && the_qty_real.to_i > 0
|
44
87
|
"<span class='label label-success'>#{I18n.t('plugin.ecommerce.product.in_stock')}</span>"
|
45
88
|
else
|
46
89
|
"<span class='label label-danger'>#{I18n.t('plugin.ecommerce.product.not_in_tock')}</span>"
|
@@ -60,29 +103,37 @@ class Plugins::Ecommerce::ProductDecorator < CamaleonCms::PostDecorator
|
|
60
103
|
end
|
61
104
|
|
62
105
|
# return the total of products available to sell
|
63
|
-
def the_qty_real
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
# decrement products quantity
|
68
|
-
# return false if the quantity is not enough to be decremented
|
69
|
-
def decrement_qty(qty)
|
70
|
-
val = (the_qty_real - qty).to_i
|
71
|
-
if val >= 0
|
72
|
-
object.update_field_value('ecommerce_qty', val)
|
73
|
-
true
|
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
|
74
110
|
else
|
75
|
-
|
111
|
+
Plugins::Ecommerce::ProductService.new(
|
112
|
+
h.current_site, object, variation_id).available_qty
|
76
113
|
end
|
77
114
|
end
|
78
115
|
|
79
116
|
# check if there are enough products to be purchased
|
80
|
-
def can_added?(qty)
|
81
|
-
|
82
|
-
val >= 0
|
117
|
+
def can_added?(qty, variation_id = nil)
|
118
|
+
(the_qty_real(variation_id) - qty).to_i >= 0
|
83
119
|
end
|
84
120
|
|
85
121
|
def self.object_class_name
|
86
122
|
'CamaleonCms::Post'
|
87
123
|
end
|
124
|
+
|
125
|
+
# verify if current product needs a variation id to be purchased
|
126
|
+
# return true/false
|
127
|
+
def valid_variation?(variation_id = nil)
|
128
|
+
if self.product_variations.any?
|
129
|
+
self.product_variations.where(id: variation_id).any?
|
130
|
+
else
|
131
|
+
true
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
# check if current product is a variation product
|
136
|
+
def is_variation_product?
|
137
|
+
@_cache_is_variation_product ||= self.product_variations.any?
|
138
|
+
end
|
88
139
|
end
|
@@ -1,18 +1,42 @@
|
|
1
1
|
class Plugins::Ecommerce::ProductItemDecorator < Draper::Decorator
|
2
2
|
delegate_all
|
3
|
+
def the_title
|
4
|
+
get_product.the_variation_title(object.variation_id)
|
5
|
+
end
|
6
|
+
|
3
7
|
def the_sub_total
|
4
8
|
"#{h.current_site.current_unit}#{sprintf('%.2f', object.sub_total)}"
|
5
9
|
end
|
6
10
|
|
7
11
|
def the_price
|
8
|
-
|
12
|
+
get_product.the_price(object.variation_id)
|
9
13
|
end
|
10
14
|
|
11
15
|
def the_tax
|
12
|
-
|
16
|
+
get_product.the_tax(object.variation_id)
|
13
17
|
end
|
14
18
|
|
15
19
|
def price
|
16
|
-
|
20
|
+
get_product.price(object.variation_id)
|
21
|
+
end
|
22
|
+
|
23
|
+
def get_product
|
24
|
+
@_get_product ||= object.product.decorate
|
25
|
+
end
|
26
|
+
|
27
|
+
# return a product variation by id
|
28
|
+
def get_variation
|
29
|
+
@_get_variation ||= self.product_variation.decorate
|
30
|
+
end
|
31
|
+
|
32
|
+
# update quantity of product or product variation used in current cart item
|
33
|
+
def decrement_qty!
|
34
|
+
Plugins::Ecommerce::ProductItemService.new(object.cart.site, object).decrement_qty!
|
35
|
+
end
|
36
|
+
|
37
|
+
# verify if the quantity of the cart item is avilable
|
38
|
+
# return true if quantity is available
|
39
|
+
def is_valid_qty?
|
40
|
+
(get_product.the_qty_real(object.variation_id) - object.qty).to_i >= 0
|
17
41
|
end
|
18
42
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class Plugins::Ecommerce::ProductVariationDecorator < Draper::Decorator
|
2
|
+
delegate_all
|
3
|
+
def the_price
|
4
|
+
"#{h.current_site.current_unit}#{sprintf('%.2f', object.amount)}"
|
5
|
+
end
|
6
|
+
|
7
|
+
def the_title
|
8
|
+
get_product.the_variation_title(object.id)
|
9
|
+
end
|
10
|
+
|
11
|
+
def the_weight
|
12
|
+
"#{h.current_site.current_weight} #{object.weight}"
|
13
|
+
end
|
14
|
+
|
15
|
+
def get_product
|
16
|
+
@_cache_get_product ||= object.product.decorate
|
17
|
+
end
|
18
|
+
end
|
@@ -2,7 +2,8 @@ module Plugins::Ecommerce::EcommerceEmailHelper
|
|
2
2
|
include CamaleonCms::EmailHelper
|
3
3
|
|
4
4
|
def mark_order_like_received(cart, status = 'paid')
|
5
|
-
|
5
|
+
cart_service = Plugins::Ecommerce::CartService.new(current_site, cart)
|
6
|
+
order = cart_service.convert_to_order(status)
|
6
7
|
|
7
8
|
# send email to buyer
|
8
9
|
commerce_send_order_received_email(order)
|
@@ -12,6 +13,8 @@ module Plugins::Ecommerce::EcommerceEmailHelper
|
|
12
13
|
|
13
14
|
flash[:notice] = t('plugins.ecommerce.messages.payment_completed', default: "Payment completed successfully")
|
14
15
|
args = {order: order}; hooks_run("commerce_after_payment_completed", args)
|
16
|
+
|
17
|
+
order
|
15
18
|
end
|
16
19
|
|
17
20
|
def commerce_send_order_received_email(order, is_after_bank_confirmation = false)
|
@@ -64,10 +67,10 @@ module Plugins::Ecommerce::EcommerceEmailHelper
|
|
64
67
|
def ecommerce_verify_cart_errors(cart)
|
65
68
|
errors = []
|
66
69
|
# products verification
|
67
|
-
cart.product_items.each do |item|
|
68
|
-
|
69
|
-
|
70
|
-
errors << t('plugins.ecommerce.messages.not_enough_product_qty', product: product.the_title, qty: product.the_qty_real, default: 'There is not enough products "%{product}" (%{qty})')
|
70
|
+
cart.product_items.decorate.each do |item|
|
71
|
+
unless item.is_valid_qty?
|
72
|
+
product = item.product.decorate
|
73
|
+
errors << t('plugins.ecommerce.messages.not_enough_product_qty', product: product.the_title, qty: product.the_qty_real, default: 'There is not enough products "%{product}" (Available %{qty})')
|
71
74
|
end
|
72
75
|
end
|
73
76
|
|
@@ -95,14 +98,9 @@ module Plugins::Ecommerce::EcommerceEmailHelper
|
|
95
98
|
:total_cost => order.cache_the_total,
|
96
99
|
:order => order
|
97
100
|
}
|
98
|
-
|
99
|
-
owners =
|
100
|
-
|
101
|
-
files += product.get_fields('ecommerce_files').map{|f| CamaleonCmsLocalUploader::private_file_path(f, current_site) }
|
102
|
-
owners << product.owner if product.owner.present?
|
103
|
-
end
|
104
|
-
data[:owners] = owners.uniq
|
105
|
-
data[:files] = files.uniq
|
101
|
+
order_service = Plugins::Ecommerce::OrderService.new(current_site, order)
|
102
|
+
data[:owners] = order_service.product_owners
|
103
|
+
data[:files] = order_service.product_files
|
106
104
|
data
|
107
105
|
end
|
108
106
|
|
@@ -1,15 +1,7 @@
|
|
1
|
-
=begin
|
2
|
-
Camaleon CMS is a content management system
|
3
|
-
Copyright (C) 2015 by Owen Peredo Diaz
|
4
|
-
Email: owenperedo@gmail.com
|
5
|
-
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
6
|
-
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
7
|
-
See the GNU Affero General Public License (GPLv3) for more details.
|
8
|
-
=end
|
9
1
|
#encoding: utf-8
|
10
2
|
module Plugins::Ecommerce::EcommerceFunctionsHelper
|
11
3
|
def self.included(klass)
|
12
|
-
klass.helper_method [:e_get_currency_units, :e_get_currency_weight, :e_symbol_by_code] rescue ""
|
4
|
+
klass.helper_method [:e_get_currency_units, :e_get_currency_weight, :e_symbol_by_code, :ecommerce_custom_payment_methods] rescue ""
|
13
5
|
end
|
14
6
|
def e_get_currency_weight
|
15
7
|
r = {}
|
@@ -21,8 +13,11 @@ module Plugins::Ecommerce::EcommerceFunctionsHelper
|
|
21
13
|
end
|
22
14
|
|
23
15
|
def e_get_currency_units
|
24
|
-
|
25
|
-
|
16
|
+
@e_get_currency_units ||= lambda{
|
17
|
+
file = File.read("#{File.dirname(__FILE__)}/../../../../config/currency.json")
|
18
|
+
args = {currencies: JSON.parse(file)}; hooks_run("ecommerce_currencies", args)
|
19
|
+
args[:currencies]
|
20
|
+
}.call
|
26
21
|
end
|
27
22
|
|
28
23
|
def e_symbol_by_code(unit)
|
@@ -46,4 +41,23 @@ module Plugins::Ecommerce::EcommerceFunctionsHelper
|
|
46
41
|
post.metas.map{|m| metas[m.key] = m.value }
|
47
42
|
data.merge(post: attributes, fields: post.get_field_values_hash, meta: metas)
|
48
43
|
end
|
44
|
+
|
45
|
+
def ecommerce_custom_payment_methods
|
46
|
+
@_ecommerce_custom_payment_methods ||= lambda{
|
47
|
+
args = {custom_payment_methods: {}}; hooks_run("ecommerce_custom_payment_methods", args)
|
48
|
+
# Sample:
|
49
|
+
# def my_callback(args)
|
50
|
+
# args[:custom_payment_methods][:pay_u] = {
|
51
|
+
# title: 'Pay U',
|
52
|
+
# settings_view_path: '/my_plugin/views/payu/settings', # view must be like this: <div class="form-group"> <label>Key</label><br> <%= text_field_tag('options[payu_key]', options[:payu_key], class: 'form-control required') %> </div>
|
53
|
+
# payment_form_view_path: '/my_plugin/views/payu/payment_form',
|
54
|
+
# # view must include the payment form with your custom routes to process the payment,
|
55
|
+
# # sample: https://github.com/owen2345/camaleon-ecommerce/blob/master/app/controllers/plugins/ecommerce/front/checkout_controller.rb#L120
|
56
|
+
# # https://github.com/owen2345/camaleon-ecommerce/blob/master/app/views/plugins/ecommerce/partials/checkout/_payments.html.erb#L104
|
57
|
+
# }
|
58
|
+
# end
|
59
|
+
args[:custom_payment_methods]
|
60
|
+
}.call
|
61
|
+
end
|
62
|
+
|
49
63
|
end
|
@@ -1,35 +1,19 @@
|
|
1
|
-
=begin
|
2
|
-
Camaleon CMS is a content management system
|
3
|
-
Copyright (C) 2015 by Owen Peredo Diaz
|
4
|
-
Email: owenperedo@gmail.com
|
5
|
-
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
6
|
-
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
7
|
-
See the GNU Affero General Public License (GPLv3) for more details.
|
8
|
-
=end
|
9
1
|
module Plugins::Ecommerce::EcommerceHelper
|
10
2
|
include Plugins::Ecommerce::EcommerceEmailHelper
|
11
3
|
|
12
|
-
def ecommerce_on_render_post(d)
|
13
|
-
|
14
|
-
end
|
15
|
-
|
16
|
-
def ecommerce_on_render_post_type(d)
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
4
|
def ecommerce_admin_list_post(d)
|
21
|
-
|
22
5
|
end
|
23
6
|
|
24
|
-
def
|
25
|
-
if
|
26
|
-
append_asset_libraries({ecommerce: {css: [], js: [
|
7
|
+
def ecommerce_admin_product_form(args)
|
8
|
+
if args[:post_type].slug == 'commerce'
|
9
|
+
append_asset_libraries({ecommerce: {css: [], js: [plugin_asset_path('admin_product')]}})
|
10
|
+
args[:html] = render partial: plugin_view('admin/products/variations'), locals:{post_type: args[:post_type], product: args[:post] }
|
27
11
|
end
|
28
12
|
end
|
29
13
|
|
30
14
|
def ecommerce_front_before_load
|
31
15
|
@ecommerce_post_type = current_site.post_types.where(slug: 'commerce').first.decorate
|
32
|
-
@
|
16
|
+
@ecommerce_breadcrumb = [].push(["Home", cama_root_url])
|
33
17
|
end
|
34
18
|
|
35
19
|
def ecommerce_admin_before_load
|
@@ -52,24 +36,19 @@ module Plugins::Ecommerce::EcommerceHelper
|
|
52
36
|
items_i << {icon: "credit-card", title: t('plugin.ecommerce.payment_methods', default: 'Payment Methods'), url: admin_plugins_ecommerce_payment_methods_path}
|
53
37
|
items_i << {icon: "tag", title: t('plugin.ecommerce.coupons', default: 'Coupons'), url: admin_plugins_ecommerce_coupons_path}
|
54
38
|
items_i << {icon: "cogs", title: t('camaleon_cms.admin.button.settings', default: 'Settings'), url: admin_plugins_ecommerce_settings_path}
|
39
|
+
items_i << {icon: "cubes", title: t('plugin.ecommerce.product_attributes', default: 'Product Attributes'), url: admin_plugins_ecommerce_product_attributes_path}
|
55
40
|
end
|
56
41
|
|
57
42
|
admin_menu_insert_menu_after("content", "e-commerce", {icon: "shopping-cart", title: t('plugin.ecommerce.e_commerce', default: 'E-commerce'), url: "", items: items_i}) if items_i.present?
|
58
43
|
end
|
59
|
-
|
60
|
-
# add assets admin
|
61
|
-
append_asset_libraries({ecommerce: {css: [plugin_gem_asset('admin')], js: []}})
|
62
|
-
|
63
44
|
end
|
64
45
|
|
65
46
|
def ecommerce_app_before_load
|
66
|
-
|
67
47
|
end
|
68
48
|
|
69
49
|
# here all actions on plugin destroying
|
70
50
|
# plugin: plugin model
|
71
51
|
def ecommerce_on_destroy(plugin)
|
72
|
-
|
73
52
|
end
|
74
53
|
|
75
54
|
# here all actions on going to active
|
@@ -86,6 +65,22 @@ module Plugins::Ecommerce::EcommerceHelper
|
|
86
65
|
current_site.post_types.hidden_menu.where(slug: "commerce").first.destroy
|
87
66
|
end
|
88
67
|
|
68
|
+
# callback after create/update
|
69
|
+
def ecommerce_admin_product_created(args)
|
70
|
+
if args[:post_type].slug == 'commerce'
|
71
|
+
params[:product_variation] ||= {}
|
72
|
+
args[:post].product_variations.where.not(id: params[:product_variation].keys).delete_all
|
73
|
+
params[:product_variation].each do |p_key, p_var|
|
74
|
+
data = {amount: p_var[:price], photo: p_var[:photo], sku: p_var[:sku], weight: p_var[:weight], qty: p_var[:qty], attribute_ids: p_var[:attributes].map{|at| at[:value] }.join(',')}
|
75
|
+
if p_key.include?('new_') # new variation
|
76
|
+
args[:post].product_variations.create(data)
|
77
|
+
else
|
78
|
+
args[:post].product_variations.find(p_key).update(data)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
89
84
|
def get_commerce_post_type
|
90
85
|
@ecommerce = current_site.post_types.hidden_menu.where(slug: "commerce").first
|
91
86
|
unless @ecommerce.present?
|