workarea-mail_chimp 3.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|