workarea-orderbot 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +37 -0
- data/.github/ISSUE_TEMPLATE/documentation-request.md +17 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- data/.github/workflows/ci.yml +58 -0
- data/.gitignore +23 -0
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +58 -0
- data/Gemfile +17 -0
- data/LICENSE +52 -0
- data/README.md +100 -0
- data/Rakefile +59 -0
- data/app/assets/images/workarea/admin/orderbot/.keep +0 -0
- data/app/assets/images/workarea/storefront/orderbot/.keep +0 -0
- data/app/assets/javascripts/workarea/admin/orderbot/.keep +0 -0
- data/app/assets/javascripts/workarea/storefront/orderbot/.keep +0 -0
- data/app/assets/stylesheets/workarea/admin/orderbot/.keep +0 -0
- data/app/assets/stylesheets/workarea/storefront/orderbot/.keep +0 -0
- data/app/controllers/.keep +0 -0
- data/app/helpers/.keep +0 -0
- data/app/mailers/.keep +0 -0
- data/app/models/workarea/order.decorator +19 -0
- data/app/models/workarea/orderbot/import_log.rb +19 -0
- data/app/models/workarea/orderbot/pricing_import_data.rb +13 -0
- data/app/models/workarea/orderbot/product_import_data.rb +32 -0
- data/app/models/workarea/user.decorator +7 -0
- data/app/services/workarea/orderbot/child_product.rb +108 -0
- data/app/services/workarea/orderbot/filters.rb +33 -0
- data/app/services/workarea/orderbot/order.rb +146 -0
- data/app/services/workarea/orderbot/order/item.rb +69 -0
- data/app/services/workarea/orderbot/order/tender/credit_card.rb +43 -0
- data/app/services/workarea/orderbot/order/tender/general.rb +32 -0
- data/app/services/workarea/orderbot/order/tender/gift_card.rb +32 -0
- data/app/services/workarea/orderbot/order/tender/store_credit.rb +32 -0
- data/app/services/workarea/orderbot/parent_product.rb +87 -0
- data/app/views/.keep +0 -0
- data/app/workers/workarea/orderbot/fulfillment/import_fulfillments.rb +37 -0
- data/app/workers/workarea/orderbot/fulfillment_importer.rb +50 -0
- data/app/workers/workarea/orderbot/inventory/import_inventory.rb +50 -0
- data/app/workers/workarea/orderbot/inventory_importer.rb +57 -0
- data/app/workers/workarea/orderbot/pricing/import_pricing.rb +42 -0
- data/app/workers/workarea/orderbot/pricing_importer.rb +70 -0
- data/app/workers/workarea/orderbot/product/import_child_products.rb +24 -0
- data/app/workers/workarea/orderbot/product/import_parent_products.rb +32 -0
- data/app/workers/workarea/orderbot/product_importer.rb +72 -0
- data/app/workers/workarea/orderbot/save_order.rb +38 -0
- data/bin/rails +25 -0
- data/config/initializers/configurations.rb +60 -0
- data/config/initializers/scheduled_jobs.rb +28 -0
- data/config/initializers/workarea.rb +16 -0
- data/config/routes.rb +2 -0
- data/lib/workarea/orderbot.rb +43 -0
- data/lib/workarea/orderbot/authentication.rb +41 -0
- data/lib/workarea/orderbot/bogus_gateway.rb +629 -0
- data/lib/workarea/orderbot/engine.rb +10 -0
- data/lib/workarea/orderbot/gateway.rb +102 -0
- data/lib/workarea/orderbot/response.rb +29 -0
- data/lib/workarea/orderbot/version.rb +5 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/config/manifest.js +3 -0
- data/test/dummy/app/assets/images/.keep +0 -0
- data/test/dummy/app/assets/javascripts/application.js +14 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +2 -0
- data/test/dummy/app/controllers/concerns/.keep +0 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/jobs/application_job.rb +2 -0
- data/test/dummy/app/mailers/application_mailer.rb +4 -0
- data/test/dummy/app/models/concerns/.keep +0 -0
- data/test/dummy/app/views/layouts/application.html.erb +15 -0
- data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
- data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +25 -0
- data/test/dummy/bin/update +25 -0
- data/test/dummy/config.ru +5 -0
- data/test/dummy/config/application.rb +34 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +52 -0
- data/test/dummy/config/environments/production.rb +83 -0
- data/test/dummy/config/environments/test.rb +45 -0
- data/test/dummy/config/initializers/application_controller_renderer.rb +8 -0
- data/test/dummy/config/initializers/assets.rb +12 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/content_security_policy.rb +25 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/workarea.rb +5 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +9 -0
- data/test/dummy/config/locales/en.yml +33 -0
- data/test/dummy/config/puma.rb +34 -0
- data/test/dummy/config/routes.rb +5 -0
- data/test/dummy/config/spring.rb +6 -0
- data/test/dummy/db/seeds.rb +2 -0
- data/test/dummy/lib/assets/.keep +0 -0
- data/test/dummy/log/.keep +0 -0
- data/test/services/workarea/orderbot/order_test.rb +151 -0
- data/test/services/workarea/orderbot/product/child_product_test.rb +255 -0
- data/test/services/workarea/orderbot/product/parent_product_test.rb +106 -0
- data/test/teaspoon_env.rb +6 -0
- data/test/test_helper.rb +10 -0
- data/test/workers/workarea/orderbot/fulfillment/import_fulfillments_test.rb +41 -0
- data/test/workers/workarea/orderbot/fulfillment_importer_test.rb +29 -0
- data/test/workers/workarea/orderbot/inventory/import_inventory_test.rb +49 -0
- data/test/workers/workarea/orderbot/inventory_importer_test.rb +21 -0
- data/test/workers/workarea/orderbot/pricing/import_pricing_test.rb +61 -0
- data/test/workers/workarea/orderbot/pricing_importer_test.rb +29 -0
- data/test/workers/workarea/orderbot/product_importer_test.rb +23 -0
- data/test/workers/workarea/orderbot/save_order_test.rb +41 -0
- data/workarea-orderbot.gemspec +20 -0
- metadata +172 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
module Workarea
|
2
|
+
module Orderbot
|
3
|
+
class Order
|
4
|
+
module Tender
|
5
|
+
class CreditCard
|
6
|
+
attr_reader :tender, :options
|
7
|
+
|
8
|
+
def initialize(tender, options = {})
|
9
|
+
@tender = tender
|
10
|
+
@option = options
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_h
|
14
|
+
{
|
15
|
+
payment_reference_id: tender.id.to_s,
|
16
|
+
payment_type: "credit_card",
|
17
|
+
payment_method_type: tender.issuer.optionize,
|
18
|
+
amount_paid: tender.amount.to_f,
|
19
|
+
payment_date: transaction.created_at.iso8601,
|
20
|
+
auth_code: transaction.response.authorization,
|
21
|
+
credit_card: {
|
22
|
+
transaction_id: transaction_id,
|
23
|
+
authorization_code: transaction.response.authorization,
|
24
|
+
last_four_digits: tender.display_number.last(4)
|
25
|
+
}
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def transaction
|
32
|
+
tender.transactions.successful.sort_by(&:created_at).last
|
33
|
+
end
|
34
|
+
|
35
|
+
def transaction_id
|
36
|
+
gateway_class = Workarea.config.gateways.credit_card.class.to_s
|
37
|
+
Workarea.config.orderbot.transaction_id[gateway_class].call(transaction) rescue nil
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Workarea
|
2
|
+
module Orderbot
|
3
|
+
class Order
|
4
|
+
module Tender
|
5
|
+
class General
|
6
|
+
attr_reader :tender, :options
|
7
|
+
|
8
|
+
def initialize(tender, options = {})
|
9
|
+
@tender = tender
|
10
|
+
@option = options
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_h
|
14
|
+
{
|
15
|
+
payment_reference_id: tender.id.to_s,
|
16
|
+
payment_type: "unknown",
|
17
|
+
payment_method_type: "paid_from_web",
|
18
|
+
amount_paid: tender.amount.to_f,
|
19
|
+
payment_date: transaction.created_at.iso8601
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def transaction
|
26
|
+
tender.transactions.successful.sort_by(&:created_at).last
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Workarea
|
2
|
+
module Orderbot
|
3
|
+
class Order
|
4
|
+
module Tender
|
5
|
+
class GiftCard
|
6
|
+
attr_reader :tender, :options
|
7
|
+
|
8
|
+
def initialize(tender, options = {})
|
9
|
+
@tender = tender
|
10
|
+
@option = options
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_h
|
14
|
+
{
|
15
|
+
payment_reference_id: tender.id.to_s,
|
16
|
+
payment_type: "cheque",
|
17
|
+
payment_method_type: "gift_card",
|
18
|
+
amount_paid: tender.amount.to_f,
|
19
|
+
payment_date: transaction.created_at.iso8601
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def transaction
|
26
|
+
tender.transactions.successful.sort_by(&:created_at).last
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Workarea
|
2
|
+
module Orderbot
|
3
|
+
class Order
|
4
|
+
module Tender
|
5
|
+
class StoreCredit
|
6
|
+
attr_reader :tender, :options
|
7
|
+
|
8
|
+
def initialize(tender, options = {})
|
9
|
+
@tender = tender
|
10
|
+
@option = options
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_h
|
14
|
+
{
|
15
|
+
payment_reference_id: tender.id.to_s,
|
16
|
+
payment_type: "cheque",
|
17
|
+
payment_method_type: "paid_from_web",
|
18
|
+
amount_paid: tender.amount.to_f,
|
19
|
+
payment_date: transaction.created_at.iso8601
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def transaction
|
26
|
+
tender.transactions.successful.sort_by(&:created_at).last
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
module Workarea
|
2
|
+
module Orderbot
|
3
|
+
class ParentProduct
|
4
|
+
include Filters
|
5
|
+
|
6
|
+
attr_reader :parent_product
|
7
|
+
|
8
|
+
def initialize(parent_product)
|
9
|
+
@parent_product = parent_product
|
10
|
+
end
|
11
|
+
|
12
|
+
def process
|
13
|
+
product.name = product_details[:name]
|
14
|
+
product.description = product_details[:description]
|
15
|
+
product.active = product_details[:active]
|
16
|
+
|
17
|
+
product.filters = build_product_filters
|
18
|
+
product.template = product_template
|
19
|
+
set_details
|
20
|
+
product.save!
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def product
|
26
|
+
@product ||= Workarea::Catalog::Product.find_or_initialize_by(id: id)
|
27
|
+
end
|
28
|
+
|
29
|
+
def id
|
30
|
+
@id ||= product_details[:product_id]
|
31
|
+
end
|
32
|
+
|
33
|
+
def product_details
|
34
|
+
parent_product.product_data.deep_symbolize_keys
|
35
|
+
end
|
36
|
+
|
37
|
+
def build_product_filters
|
38
|
+
existing_filters = product.filters || {}
|
39
|
+
new_filters = {
|
40
|
+
orderbot_category: product_details[:category],
|
41
|
+
orderbot_group: product_details[:group]
|
42
|
+
}
|
43
|
+
|
44
|
+
filters = existing_filters.merge(new_filters)
|
45
|
+
filters = add_filter_values(filters, first_variable) if first_variable.present?
|
46
|
+
filters = add_filter_values(filters, second_variable) if second_variable.present?
|
47
|
+
|
48
|
+
filters
|
49
|
+
end
|
50
|
+
|
51
|
+
def set_details
|
52
|
+
new_details = {
|
53
|
+
upc: product_details[:upc].presence
|
54
|
+
}.merge(get_product_details)
|
55
|
+
product.update_details(new_details)
|
56
|
+
end
|
57
|
+
|
58
|
+
# getting custom attributes for a product requires a seperate API call
|
59
|
+
def get_product_details
|
60
|
+
attrs = {
|
61
|
+
response_model: "CustomField",
|
62
|
+
product_ids: product_details[:product_id]
|
63
|
+
}
|
64
|
+
|
65
|
+
response = gateway.get_products(attrs)
|
66
|
+
|
67
|
+
return {} unless response.success? && response.body.present?
|
68
|
+
|
69
|
+
response.body.first["custom_fields"].inject({}) do |memo, field|
|
70
|
+
memo[field["name"]] = field["value"]
|
71
|
+
memo
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def product_template
|
76
|
+
template = product_details[:workarea_info][:template]
|
77
|
+
return "generic" unless template.present?
|
78
|
+
return "generic" unless Workarea.config.product_templates.include?(template.to_sym)
|
79
|
+
template
|
80
|
+
end
|
81
|
+
|
82
|
+
def gateway
|
83
|
+
Workarea::Orderbot.gateway
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
data/app/views/.keep
ADDED
File without changes
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Workarea
|
2
|
+
module Orderbot
|
3
|
+
module Fulfillment
|
4
|
+
class ImportFulfillments
|
5
|
+
include Sidekiq::Worker
|
6
|
+
|
7
|
+
def perform(attrs = {})
|
8
|
+
fulfillment_data = attrs.deep_symbolize_keys
|
9
|
+
order_id = fulfillment_data[:reference_id]
|
10
|
+
|
11
|
+
order = Workarea::Order.find(order_id)
|
12
|
+
fulfillment = Workarea::Fulfillment.find(order_id)
|
13
|
+
|
14
|
+
fulfillment_data[:packages].each do |package|
|
15
|
+
ship_package(package, order, fulfillment)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def ship_package(package, order, fulfillment)
|
22
|
+
tracking_number = package[:tracking_number]
|
23
|
+
|
24
|
+
items = package[:items].map do |item|
|
25
|
+
order_item_id = order.items.detect { |oi| oi.sku = item[:sku] }.id.to_s
|
26
|
+
{
|
27
|
+
id: order_item_id,
|
28
|
+
quantity: item[:quantity],
|
29
|
+
orderbot_package_id: item[:package_id]
|
30
|
+
}
|
31
|
+
end
|
32
|
+
fulfillment.ship_items(tracking_number, items)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Workarea
|
2
|
+
module Orderbot
|
3
|
+
class FulfillmentImporter
|
4
|
+
include Sidekiq::Worker
|
5
|
+
sidekiq_options retry: 5
|
6
|
+
|
7
|
+
def perform(options = {})
|
8
|
+
return unless Orderbot.api_configured?
|
9
|
+
|
10
|
+
Orderbot::ImportLog.log('fulfillment') do |last_imported_at|
|
11
|
+
from_updated_on = options[:from_updated_on] || last_imported_at
|
12
|
+
|
13
|
+
fulfillment_filters = {
|
14
|
+
last_updated_date_min: from_updated_on.iso8601
|
15
|
+
}
|
16
|
+
|
17
|
+
fulfillment_response = gateway.get_fulfillments(fulfillment_filters)
|
18
|
+
raise 'get fulfillment error' unless fulfillment_response.success?
|
19
|
+
|
20
|
+
import_fulfillment_records(fulfillment_response.body)
|
21
|
+
|
22
|
+
if fulfillment_response.total_pages.to_i > 1
|
23
|
+
count = 2
|
24
|
+
|
25
|
+
while count <= fulfillment_response.total_pages.to_i
|
26
|
+
page_filters = fulfillment_filters.merge(page: count)
|
27
|
+
response = gateway.get_products(page_filters)
|
28
|
+
|
29
|
+
import_fulfillment_records(response.body)
|
30
|
+
|
31
|
+
count = count + 1
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def gateway
|
40
|
+
Workarea::Orderbot.gateway
|
41
|
+
end
|
42
|
+
|
43
|
+
def import_fulfillment_records(fulfillment_records)
|
44
|
+
fulfillment_records.each do |fulfillment|
|
45
|
+
Orderbot::Fulfillment::ImportFulfillments.new.perform(fulfillment)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Workarea
|
2
|
+
module Orderbot
|
3
|
+
module Inventory
|
4
|
+
class ImportInventory
|
5
|
+
include Sidekiq::Worker
|
6
|
+
|
7
|
+
def perform(attrs = {})
|
8
|
+
inventory = attrs.deep_symbolize_keys
|
9
|
+
|
10
|
+
return unless inventory[:sku].present?
|
11
|
+
|
12
|
+
sku = Workarea::Inventory::Sku.find_or_initialize_by(id: inventory[:sku])
|
13
|
+
|
14
|
+
sku.available = inventory[:quantity_on_hand] || 0
|
15
|
+
sku.policy = get_policy(inventory[:sku])
|
16
|
+
|
17
|
+
sku.save!
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def get_policy(sku)
|
23
|
+
return "allow_backorder" if is_backorderable?(sku)
|
24
|
+
Workarea.config.default_inventory_import_policy || "standard"
|
25
|
+
end
|
26
|
+
|
27
|
+
def is_backorderable?(sku)
|
28
|
+
gateway = Workarea::Orderbot.gateway
|
29
|
+
|
30
|
+
attrs = {
|
31
|
+
response_model: "CustomField",
|
32
|
+
sku: sku
|
33
|
+
}
|
34
|
+
|
35
|
+
response = gateway.get_products(attrs)
|
36
|
+
|
37
|
+
return unless response.success? && response.body.present?
|
38
|
+
|
39
|
+
fields = response.body.first["custom_fields"]
|
40
|
+
|
41
|
+
backorder_field = fields.detect { |f| f["name"] == "backorderable" }
|
42
|
+
|
43
|
+
return unless backorder_field.present?
|
44
|
+
|
45
|
+
backorder_field["value"]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module Workarea
|
2
|
+
module Orderbot
|
3
|
+
class InventoryImporter
|
4
|
+
include Sidekiq::Worker
|
5
|
+
sidekiq_options retry: 5
|
6
|
+
|
7
|
+
def perform(options = {})
|
8
|
+
return unless Orderbot.api_configured?
|
9
|
+
|
10
|
+
Orderbot::ImportLog.log('inventory') do |last_imported_at|
|
11
|
+
from_updated_on = options[:from_updated_on] || last_imported_at
|
12
|
+
|
13
|
+
inventory_filters = {
|
14
|
+
from_updated_on: from_updated_on.iso8601,
|
15
|
+
distribution_center_id: Workarea.config.inventory_distribution_center_id
|
16
|
+
}
|
17
|
+
|
18
|
+
inventory_response = gateway.get_inventory(inventory_filters)
|
19
|
+
raise 'get inventory error' unless inventory_response.success?
|
20
|
+
|
21
|
+
inventory_records = inventory_response.body
|
22
|
+
|
23
|
+
import_inventory_records(inventory_records)
|
24
|
+
|
25
|
+
if inventory_response.total_pages.to_i > 1
|
26
|
+
count = 2
|
27
|
+
|
28
|
+
while count <= inventory_response.total_pages.to_i
|
29
|
+
page_filters = inventory_filters.merge(page: count)
|
30
|
+
response = gateway.get_products(page_filters)
|
31
|
+
|
32
|
+
import_inventory_records(response.body)
|
33
|
+
|
34
|
+
count = count + 1
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
inventory_records.each do |inventory|
|
39
|
+
Orderbot::Inventory::ImportInventory.new.perform(inventory)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def gateway
|
47
|
+
Workarea::Orderbot.gateway
|
48
|
+
end
|
49
|
+
|
50
|
+
def import_inventory_records(inventory_records)
|
51
|
+
inventory_records.each do |inventory|
|
52
|
+
Orderbot::Inventory::ImportInventory.new.perform(inventory)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Workarea
|
2
|
+
module Orderbot
|
3
|
+
module Pricing
|
4
|
+
class ImportPricing
|
5
|
+
include Sidekiq::Worker
|
6
|
+
|
7
|
+
def perform
|
8
|
+
Workarea::Orderbot::PricingImportData.each do |sku_price|
|
9
|
+
pricing_data = sku_price.pricing_data.deep_symbolize_keys
|
10
|
+
|
11
|
+
next unless pricing_data[:sku].present?
|
12
|
+
sku = Workarea::Pricing::Sku.find_or_initialize_by(id: pricing_data[:sku])
|
13
|
+
|
14
|
+
original_price = pricing_data[:original_price]
|
15
|
+
price = pricing_data[:price]
|
16
|
+
|
17
|
+
regular = regular_price(price, original_price)
|
18
|
+
sale = sale_price(price, original_price)
|
19
|
+
|
20
|
+
sku.on_sale = sale.present?
|
21
|
+
sku.prices = [{ regular: regular, sale: sale, on_sale: sale.present? }]
|
22
|
+
sku.save!
|
23
|
+
|
24
|
+
sku_price.delete
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def regular_price(price, original_price)
|
31
|
+
return original_price if original_price.present? && original_price > price
|
32
|
+
price
|
33
|
+
end
|
34
|
+
|
35
|
+
def sale_price(price, original_price)
|
36
|
+
return nil if original_price.blank? || original_price == price
|
37
|
+
price
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|