workarea-mail_chimp 3.0.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 +7 -0
- data/.editorconfig +15 -0
- data/.gitignore +55 -0
- data/.markdownlint.json +10 -0
- data/.rails-rubocop.yml +119 -0
- data/.rubocop.yml +8 -0
- data/.scss-lint.yml +188 -0
- data/CHANGELOG.md +244 -0
- data/Gemfile +9 -0
- data/README.md +115 -0
- data/Rakefile +53 -0
- data/app/assets/javascripts/workarea/storefront/mail_chimp/mail_chimp_tracking.js +15 -0
- data/app/controllers/workarea/storefront/application_controller.decorator +11 -0
- data/app/controllers/workarea/storefront/cart_items_controller.decorator +18 -0
- data/app/controllers/workarea/storefront/checkout/addresses_controller.decorator +13 -0
- data/app/controllers/workarea/storefront/checkout/shipping_controller.decorator +13 -0
- data/app/controllers/workarea/storefront/users/accounts_controller.decorator +37 -0
- data/app/models/workarea/catalog/product.decorator +7 -0
- data/app/models/workarea/mail_chimp/group.rb +39 -0
- data/app/models/workarea/mail_chimp/store.rb +26 -0
- data/app/models/workarea/order.decorator +9 -0
- data/app/models/workarea/user.decorator +31 -0
- data/app/services/workarea/mail_chimp/address.rb +28 -0
- data/app/services/workarea/mail_chimp/cart.rb +78 -0
- data/app/services/workarea/mail_chimp/order.rb +97 -0
- data/app/services/workarea/mail_chimp/product.rb +43 -0
- data/app/services/workarea/mail_chimp/variant.rb +43 -0
- data/app/view_models/workarea/storefront/user_view_model.decorator +16 -0
- data/app/views/workarea/storefront/mail_chimp/_ecommerce_javascript.html.haml +2 -0
- data/app/views/workarea/storefront/users/accounts/_edit.html.haml +12 -0
- data/app/views/workarea/storefront/users/accounts/_email_interests.html.haml +13 -0
- data/app/workers/workarea/mail_chimp/ecommerce/save_cart.rb +40 -0
- data/app/workers/workarea/mail_chimp/ecommerce/save_order.rb +31 -0
- data/app/workers/workarea/mail_chimp/ecommerce/save_product.rb +31 -0
- data/app/workers/workarea/mail_chimp/list_subscriber.rb +30 -0
- data/app/workers/workarea/mail_chimp/list_unsubscriber.rb +22 -0
- data/app/workers/workarea/mail_chimp/subscription_edit.rb +28 -0
- data/bin/rails +19 -0
- data/config/initializers/appends.rb +21 -0
- data/config/initializers/workarea.rb +14 -0
- data/config/locales/en.yml +15 -0
- data/lib/gibbon/request_decorator.rb +10 -0
- data/lib/integrations/workarea/mail_chimp/bogus_api_request.rb +30 -0
- data/lib/integrations/workarea/mail_chimp/bogus_gateway.rb +35 -0
- data/lib/integrations/workarea/mail_chimp/bogus_request.rb +78 -0
- data/lib/integrations/workarea/mail_chimp/gateway.rb +86 -0
- data/lib/integrations/workarea/mail_chimp/gateway/list.rb +47 -0
- data/lib/integrations/workarea/mail_chimp/gateway/members.rb +61 -0
- data/lib/integrations/workarea/mail_chimp/gateway/subscribe_argument_builder.rb +101 -0
- data/lib/tasks/mail_chimp.rake +71 -0
- data/lib/workarea/mail_chimp.rb +72 -0
- data/lib/workarea/mail_chimp/engine.rb +14 -0
- data/lib/workarea/mail_chimp/errors.rb +2 -0
- data/lib/workarea/mail_chimp/tasks/ecommerce.rb +43 -0
- data/lib/workarea/mail_chimp/version.rb +5 -0
- data/script/admin_ci +9 -0
- data/script/ci +11 -0
- data/script/core_ci +9 -0
- data/script/plugins_ci +9 -0
- data/script/storefront_ci +9 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/config/manifest.js +4 -0
- data/test/dummy/app/assets/images/.keep +0 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -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 +14 -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 +34 -0
- data/test/dummy/bin/update +29 -0
- data/test/dummy/config.ru +5 -0
- data/test/dummy/config/application.rb +23 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/cable.yml +9 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +56 -0
- data/test/dummy/config/environments/production.rb +86 -0
- data/test/dummy/config/environments/test.rb +43 -0
- data/test/dummy/config/initializers/application_controller_renderer.rb +6 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -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/new_framework_defaults.rb +21 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/workarea.rb +5 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/puma.rb +47 -0
- data/test/dummy/config/routes.rb +5 -0
- data/test/dummy/config/secrets.yml +22 -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/factories/mail_chimp.rb +50 -0
- data/test/integration/workarea/mailchimp/subscription_test.rb +52 -0
- data/test/integration/workarea/mailchimp/tracking_params_test.rb +50 -0
- data/test/integration/workarea/mailchimp/unsubscribe_test.rb +14 -0
- data/test/integration/workarea/storefront/mail_chimp_order_test.rb +106 -0
- data/test/integration/workarea/storefront/mail_chimp_product_test.rb +51 -0
- data/test/integration/workarea/storefront/mail_chimp_site_javascript_test.rb +25 -0
- data/test/lib/workarea/mailchimp/gateway/list_test.rb +48 -0
- data/test/lib/workarea/mailchimp/gateway_test.rb +196 -0
- data/test/lib/workarea/mailchimp/tasks/ecommerce_test.rb +40 -0
- data/test/services/workarea/mail_chimp/cart_test.rb +44 -0
- data/test/services/workarea/mail_chimp/order_test.rb +50 -0
- data/test/services/workarea/mail_chimp/product_test.rb +29 -0
- data/test/support/workarea/mail_chimp_api_config.rb +33 -0
- data/test/system/workarea/storefront/campaign_tracking_test.rb +14 -0
- data/test/system/workarea/storefront/group_test.rb +33 -0
- data/test/system/workarea/storefront/mail_chimp_accounts_system_test.rb +79 -0
- data/test/test_helper.rb +17 -0
- data/test/vcr_cassettes/get_default_list_interests.yml +104 -0
- data/test/vcr_cassettes/get_member_details_no_match.yml +51 -0
- data/test/vcr_cassettes/get_member_details_unsubscribed.yml +51 -0
- data/test/vcr_cassettes/interest_categories_read.yml +104 -0
- data/test/vcr_cassettes/mail_chimp/tasks/create_store-successful.yml +97 -0
- data/test/vcr_cassettes/mc_order_test.yml +381 -0
- data/test/vcr_cassettes/mc_product_test.yml +234 -0
- data/test/vcr_cassettes/subscribe_to_default_list.yml +254 -0
- data/test/vcr_cassettes/subscribe_to_default_list_interest_groups.yml +254 -0
- data/test/vcr_cassettes/subscribe_to_default_list_with_groupings.yml +254 -0
- data/test/vcr_cassettes/subscribe_to_default_list_with_user_details.yml +254 -0
- data/test/vcr_cassettes/unsubscribe_from_default_list.yml +53 -0
- data/test/vcr_cassettes/update_member_on_default_list_change_email.yml +254 -0
- data/test/vcr_cassettes/update_member_on_default_list_change_groupings.yml +254 -0
- data/test/workers/workarea/mail_chimp/ecommerce/save_cart_test.rb +28 -0
- data/test/workers/workarea/mail_chimp/ecommerce/save_order_test.rb +15 -0
- data/test/workers/workarea/mail_chimp/ecommerce/save_product_test.rb +15 -0
- data/workarea-mail_chimp.gemspec +20 -0
- metadata +212 -0
@@ -0,0 +1,78 @@
|
|
1
|
+
module Workarea
|
2
|
+
module MailChimp
|
3
|
+
class Cart
|
4
|
+
include Workarea::I18n::DefaultUrlOptions
|
5
|
+
include Storefront::Engine.routes.url_helpers
|
6
|
+
|
7
|
+
attr_reader :order, :options
|
8
|
+
|
9
|
+
def initialize(order, options = {})
|
10
|
+
@order = order
|
11
|
+
@options = options
|
12
|
+
end
|
13
|
+
|
14
|
+
# @return Hash
|
15
|
+
def to_h
|
16
|
+
cart_hsh = {
|
17
|
+
id: order.id.to_s,
|
18
|
+
currency_code: order.total_price.currency.iso_code,
|
19
|
+
order_total: order.total_price.to_s,
|
20
|
+
tax_total: order.tax_total.to_s,
|
21
|
+
shipping_total: order.shipping_total.to_s,
|
22
|
+
lines: lines,
|
23
|
+
customer: customer,
|
24
|
+
checkout_url: Storefront::Engine.routes.url_helpers.resume_cart_url(token: order.token, host: Workarea.config.host),
|
25
|
+
}
|
26
|
+
|
27
|
+
# Mailchimp api does not accept empty values for campaign ID
|
28
|
+
# only merge in if the campaign ID is present
|
29
|
+
cart_hsh.merge!(campaign_id: order.mail_chimp_campaign_id) if order.mail_chimp_campaign_id.present?
|
30
|
+
|
31
|
+
cart_hsh
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def customer
|
37
|
+
customer = { id: Digest::MD5.hexdigest(order.email) }
|
38
|
+
if send_full_customer?
|
39
|
+
customer.merge!(
|
40
|
+
{
|
41
|
+
email_address: order.email,
|
42
|
+
opt_in_status: Workarea::Email.signed_up?(order.email),
|
43
|
+
first_name: payment.address.first_name,
|
44
|
+
last_name: payment.address.last_name
|
45
|
+
}
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
49
|
+
customer
|
50
|
+
end
|
51
|
+
|
52
|
+
def payment
|
53
|
+
@payment ||= Workarea::Payment.find(order.id)
|
54
|
+
end
|
55
|
+
|
56
|
+
# order items. Mailchimp refers to them as "lines"
|
57
|
+
def lines
|
58
|
+
order.items.map do |oi|
|
59
|
+
{
|
60
|
+
id: oi.id.to_s,
|
61
|
+
product_id: oi.product_id,
|
62
|
+
product_variant_id: oi.sku,
|
63
|
+
quantity: oi.quantity,
|
64
|
+
price: oi.total_price.to_s
|
65
|
+
}
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def payment
|
70
|
+
@payment ||= Workarea::Payment.find(order.id)
|
71
|
+
end
|
72
|
+
|
73
|
+
def send_full_customer?
|
74
|
+
options[:send_full_customer]
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module Workarea
|
2
|
+
module MailChimp
|
3
|
+
class Order
|
4
|
+
attr_reader :order, :options
|
5
|
+
|
6
|
+
def initialize(order, options = {})
|
7
|
+
@order = order
|
8
|
+
@options = options
|
9
|
+
end
|
10
|
+
|
11
|
+
# @return Hash
|
12
|
+
def to_h
|
13
|
+
order_hsh = {
|
14
|
+
id: order.id.to_s,
|
15
|
+
financial_status: financial_status,
|
16
|
+
fulfillment_status: fulfillment_status,
|
17
|
+
currency_code: order.total_price.currency.iso_code,
|
18
|
+
order_total: order.total_price.to_s,
|
19
|
+
tax_total: order.tax_total.to_s,
|
20
|
+
shipping_total: order.shipping_total.to_s,
|
21
|
+
processed_at_foreign: order.placed_at.strftime('%FT%T%:z'),
|
22
|
+
shipping_address: shipping_address,
|
23
|
+
billing_address: billing_address,
|
24
|
+
lines: lines,
|
25
|
+
customer: customer
|
26
|
+
}
|
27
|
+
order_hsh.merge!(campaign_id: order.mail_chimp_campaign_id) if order.mail_chimp_campaign_id.present?
|
28
|
+
order_hsh
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def customer
|
34
|
+
{
|
35
|
+
id: Digest::MD5.hexdigest(order.email),
|
36
|
+
email_address: order.email,
|
37
|
+
opt_in_status: Workarea::Email.signed_up?(order.email),
|
38
|
+
orders_count: user_order_count,
|
39
|
+
total_spent: user_order_total.to_s,
|
40
|
+
first_name: payment.address.first_name,
|
41
|
+
last_name: payment.address.last_name
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
def user_order_count
|
46
|
+
user_orders.count
|
47
|
+
end
|
48
|
+
|
49
|
+
def user_order_total
|
50
|
+
user_orders.map(&:total_price).sum
|
51
|
+
end
|
52
|
+
|
53
|
+
def user_orders
|
54
|
+
@user_orders ||= Workarea::Order.placed.where(email: order.email)
|
55
|
+
end
|
56
|
+
|
57
|
+
def shipping_address
|
58
|
+
return unless shipping.present?
|
59
|
+
|
60
|
+
MailChimp::Address.new(shipping.address).to_h
|
61
|
+
end
|
62
|
+
|
63
|
+
def billing_address
|
64
|
+
MailChimp::Address.new(payment.address).to_h
|
65
|
+
end
|
66
|
+
|
67
|
+
def financial_status
|
68
|
+
options[:financial_status] || ""
|
69
|
+
end
|
70
|
+
|
71
|
+
def fulfillment_status
|
72
|
+
options[:fulfillment_status] || ""
|
73
|
+
end
|
74
|
+
|
75
|
+
# order items. Mailchimp refers to them as "lines"
|
76
|
+
def lines
|
77
|
+
order.items.map do |oi|
|
78
|
+
{
|
79
|
+
id: oi.id.to_s,
|
80
|
+
product_id: oi.product_id,
|
81
|
+
product_variant_id: oi.sku,
|
82
|
+
quantity: oi.quantity,
|
83
|
+
price: oi.total_price.to_s
|
84
|
+
}
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def payment
|
89
|
+
@payment ||= Workarea::Payment.find(order.id)
|
90
|
+
end
|
91
|
+
|
92
|
+
def shipping
|
93
|
+
@shipping ||= Workarea::Shipping.find_by_order(order.id)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Workarea
|
2
|
+
module MailChimp
|
3
|
+
class Product
|
4
|
+
include ActionView::Helpers::AssetUrlHelper
|
5
|
+
include Core::Engine.routes.url_helpers
|
6
|
+
include Storefront::Engine.routes.url_helpers
|
7
|
+
include Workarea::ApplicationHelper
|
8
|
+
|
9
|
+
attr_reader :product
|
10
|
+
|
11
|
+
def initialize(product)
|
12
|
+
@product = product
|
13
|
+
end
|
14
|
+
|
15
|
+
# @return Hash
|
16
|
+
def to_h
|
17
|
+
{
|
18
|
+
id: product.id.to_s,
|
19
|
+
title: product.name,
|
20
|
+
handle: product.slug,
|
21
|
+
url: product_url(id: product.to_param, host: Workarea.config.host),
|
22
|
+
description: product.description.to_s,
|
23
|
+
image_url: primary_image,
|
24
|
+
variants: variants
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def variants
|
31
|
+
@variants ||= product.variants.map{ |v| Variant.new(v).to_h }
|
32
|
+
end
|
33
|
+
|
34
|
+
def primary_image
|
35
|
+
Workarea.config.host + ProductPrimaryImageUrl.new(product).path
|
36
|
+
end
|
37
|
+
|
38
|
+
def mounted_core
|
39
|
+
self
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Workarea
|
2
|
+
module MailChimp
|
3
|
+
class Variant
|
4
|
+
include ActionView::Helpers::AssetUrlHelper
|
5
|
+
include Core::Engine.routes.url_helpers
|
6
|
+
include Workarea::ApplicationHelper
|
7
|
+
|
8
|
+
delegate :sku, to: :variant
|
9
|
+
|
10
|
+
attr_reader :variant
|
11
|
+
|
12
|
+
def initialize(variant)
|
13
|
+
@variant = variant
|
14
|
+
end
|
15
|
+
|
16
|
+
# @return Hash
|
17
|
+
def to_h
|
18
|
+
{
|
19
|
+
id: sku,
|
20
|
+
title: variant.name,
|
21
|
+
sku: sku,
|
22
|
+
price: price.to_s,
|
23
|
+
inventory_quantity: inventory_sku.available_to_sell,
|
24
|
+
visibility: inventory_sku.displayable?.to_s
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def inventory_sku
|
31
|
+
@inventory_sku ||= Inventory::Sku.find(sku) rescue Inventory::Sku.new(id: sku)
|
32
|
+
end
|
33
|
+
|
34
|
+
def pricing_sku
|
35
|
+
@pricing_sku ||= Pricing::Sku.find(sku) rescue Pricing::Sku.new(id: sku)
|
36
|
+
end
|
37
|
+
|
38
|
+
def price
|
39
|
+
pricing_sku.sell_price.dollars.to_f
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Workarea
|
2
|
+
decorate Storefront::UserViewModel, with: :mail_chimp do
|
3
|
+
def has_email_interest?(interest)
|
4
|
+
return false if model.groups.empty?
|
5
|
+
email_interests.find { |id, int| int == interest }
|
6
|
+
end
|
7
|
+
|
8
|
+
def email_interests
|
9
|
+
model.groups.map(&:interests).inject(&:merge)
|
10
|
+
end
|
11
|
+
|
12
|
+
def email_signup?
|
13
|
+
model.email_signup || super
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
.email-interest-group
|
2
|
+
- if @email_interests.present?
|
3
|
+
%p.email-interest-group__heading= t('workarea.storefront.users.edit.email_interests')
|
4
|
+
- @email_interests.each do |group|
|
5
|
+
%p.email-interest-group__sub-heading= group["name"]
|
6
|
+
- group.interests.each do |id, interest|
|
7
|
+
.button-property
|
8
|
+
.value= check_box_tag "groups[][interests][#{id}]", interest, @user.has_email_interest?(interest)
|
9
|
+
= label_tag "groups[][interests][#{id}]", nil, class: 'button-property__name' do
|
10
|
+
%span.text= interest
|
11
|
+
= hidden_field_tag 'groups[][id]', group._id if group._id.present?
|
12
|
+
= hidden_field_tag 'groups[][name]', group.name if group.name.present?
|
@@ -0,0 +1,13 @@
|
|
1
|
+
%tr
|
2
|
+
%th
|
3
|
+
%span= t('workarea.storefront.users.email_preferences.interests')
|
4
|
+
%td
|
5
|
+
- if @user.email_interests.present?
|
6
|
+
%ul.inline-list
|
7
|
+
- @user.email_interests.each.with_index(1) do |(_id, interest), index|
|
8
|
+
%li<
|
9
|
+
#{interest}
|
10
|
+
- if index != @user.email_interests.size
|
11
|
+
,
|
12
|
+
- else
|
13
|
+
%p= t('workarea.storefront.users.email_preferences.none')
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Workarea
|
2
|
+
module MailChimp
|
3
|
+
module Ecommerce
|
4
|
+
class SaveCart
|
5
|
+
include Sidekiq::Worker
|
6
|
+
|
7
|
+
def perform(id, options = {})
|
8
|
+
order = Workarea::Order.find(id)
|
9
|
+
|
10
|
+
return if order.placed?
|
11
|
+
return if order.email.blank?
|
12
|
+
|
13
|
+
store_id = Workarea::MailChimp.config.default_store[:id]
|
14
|
+
|
15
|
+
customer_id = Digest::MD5.hexdigest(order.email)
|
16
|
+
|
17
|
+
# see if customer exists already
|
18
|
+
# existing customers only need to send the ID ot mailchimp
|
19
|
+
customer = MailChimp.request.ecommerce.stores(store_id).customers(customer_id).retrieve rescue nil
|
20
|
+
|
21
|
+
cart_options = { send_full_customer: customer.blank? }
|
22
|
+
mc_cart = Workarea::MailChimp::Cart.new(order, cart_options)
|
23
|
+
|
24
|
+
if order.cart_exported_to_mail_chimp_at.present?
|
25
|
+
MailChimp.request.ecommerce.stores(store_id).carts(order.id.to_s).update(body: mc_cart.to_h)
|
26
|
+
else
|
27
|
+
MailChimp.request.ecommerce.stores(store_id).carts.create(body: mc_cart.to_h)
|
28
|
+
end
|
29
|
+
|
30
|
+
# cart lines in mail chimp need to be removed outside of the delete or update methods.
|
31
|
+
if options["deleted_item_id"].present?
|
32
|
+
MailChimp.request.ecommerce.stores(store_id).carts(order.id.to_s).lines(options["deleted_item_id"]).delete
|
33
|
+
end
|
34
|
+
|
35
|
+
order.set(cart_exported_to_mail_chimp_at: Time.current)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Workarea
|
2
|
+
module MailChimp
|
3
|
+
module Ecommerce
|
4
|
+
class SaveOrder
|
5
|
+
include Sidekiq::Worker
|
6
|
+
include Sidekiq::CallbacksWorker
|
7
|
+
|
8
|
+
sidekiq_options(
|
9
|
+
enqueue_on: { Workarea::Order => [:place] },
|
10
|
+
unique: :until_executing
|
11
|
+
)
|
12
|
+
|
13
|
+
def perform(id)
|
14
|
+
order = Workarea::Order.find(id)
|
15
|
+
mc_order = Workarea::MailChimp::Order.new(order)
|
16
|
+
store_id = Workarea::MailChimp.config.default_store[:id]
|
17
|
+
|
18
|
+
MailChimp.request.ecommerce.stores(store_id).orders.create(body: mc_order.to_h)
|
19
|
+
|
20
|
+
order.set(exported_to_mail_chimp_at: Time.current)
|
21
|
+
|
22
|
+
delete_cart(id, store_id)
|
23
|
+
end
|
24
|
+
|
25
|
+
def delete_cart(id, store_id)
|
26
|
+
MailChimp.request.ecommerce.stores(store_id).carts(id).delete rescue nil
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Workarea
|
2
|
+
module MailChimp
|
3
|
+
module Ecommerce
|
4
|
+
class SaveProduct
|
5
|
+
include Sidekiq::Worker
|
6
|
+
include Sidekiq::CallbacksWorker
|
7
|
+
|
8
|
+
sidekiq_options(
|
9
|
+
enqueue_on: { Catalog::Product => [:save] },
|
10
|
+
unique: :until_executing
|
11
|
+
)
|
12
|
+
|
13
|
+
def perform(id)
|
14
|
+
product = Workarea::Catalog::Product.find(id)
|
15
|
+
|
16
|
+
mc_product = Workarea::MailChimp::Product.new(product)
|
17
|
+
|
18
|
+
store_id = Workarea::MailChimp.config.default_store[:id]
|
19
|
+
|
20
|
+
if product.exported_to_mail_chimp_at.present?
|
21
|
+
MailChimp.request.ecommerce.stores(store_id).products(product.id.to_s).update(body: mc_product.to_h)
|
22
|
+
else
|
23
|
+
MailChimp.request.ecommerce.stores(store_id).products.create(body: mc_product.to_h)
|
24
|
+
end
|
25
|
+
|
26
|
+
product.set(exported_to_mail_chimp_at: Time.current)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Workarea
|
2
|
+
module MailChimp
|
3
|
+
class ListSubscriber
|
4
|
+
include Sidekiq::Worker
|
5
|
+
include Sidekiq::CallbacksWorker
|
6
|
+
|
7
|
+
sidekiq_options(
|
8
|
+
enqueue_on: { Email::Signup => [:save] },
|
9
|
+
queue: "low",
|
10
|
+
retry: true
|
11
|
+
)
|
12
|
+
|
13
|
+
def perform(email_signup_id)
|
14
|
+
signup = Email::Signup.find(email_signup_id)
|
15
|
+
@user = User.find_by(email: signup.email) rescue nil
|
16
|
+
|
17
|
+
if @user
|
18
|
+
Workarea::MailChimp.gateway.subscribe(@user.email, user: @user)
|
19
|
+
update_user_subscription
|
20
|
+
else
|
21
|
+
Workarea::MailChimp.gateway.subscribe(signup.email)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def update_user_subscription
|
26
|
+
@user.update_attributes(email_signup: true)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|