workarea-listrak 5.0.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 +7 -0
- data/.eslintrc.json +36 -0
- data/.esvmrc +5 -0
- data/.gitignore +32 -0
- data/CHANGELOG.md +322 -0
- data/Gemfile +14 -0
- data/README.md +130 -0
- data/Rakefile +53 -0
- data/app/assets/javascripts/workarea/admin/modules/listrak/list_events_select.js +83 -0
- data/app/assets/javascripts/workarea/storefront/listrak/adapters/listrak_adapter.js +110 -0
- data/app/assets/javascripts/workarea/storefront/listrak/listrak_config.js.erb +13 -0
- data/app/assets/javascripts/workarea/storefront/listrak/modules/listrak.js +64 -0
- data/app/controllers/workarea/admin/listrak/configurations_controller.rb +30 -0
- data/app/controllers/workarea/admin/listrak/events_controller.rb +17 -0
- data/app/helpers/workarea/listrak/analytics/helper.rb +44 -0
- data/app/models/workarea/listrak/configuration.rb +19 -0
- data/app/queries/workarea/categorization.decorator +7 -0
- data/app/services/workarea/listrak/data_api/customers.rb +26 -0
- data/app/services/workarea/listrak/data_api/orders.rb +26 -0
- data/app/services/workarea/listrak/data_api/products.rb +26 -0
- data/app/services/workarea/listrak/data_api.rb +63 -0
- data/app/services/workarea/listrak/email_api/contacts.rb +73 -0
- data/app/services/workarea/listrak/email_api/events.rb +44 -0
- data/app/services/workarea/listrak/email_api/lists.rb +21 -0
- data/app/services/workarea/listrak/email_api/messages.rb +50 -0
- data/app/services/workarea/listrak/email_api/transactional_messages.rb +32 -0
- data/app/services/workarea/listrak/email_api.rb +71 -0
- data/app/services/workarea/listrak/models/address.rb +83 -0
- data/app/services/workarea/listrak/models/contact.rb +67 -0
- data/app/services/workarea/listrak/models/contact_form.rb +24 -0
- data/app/services/workarea/listrak/models/customer_form.rb +209 -0
- data/app/services/workarea/listrak/models/event.rb +45 -0
- data/app/services/workarea/listrak/models/event_form.rb +25 -0
- data/app/services/workarea/listrak/models/list.rb +204 -0
- data/app/services/workarea/listrak/models/message_form.rb +147 -0
- data/app/services/workarea/listrak/models/order_form.rb +352 -0
- data/app/services/workarea/listrak/models/order_item.rb +197 -0
- data/app/services/workarea/listrak/models/product_form.rb +369 -0
- data/app/services/workarea/listrak/models/transactional_message_form.rb +21 -0
- data/app/services/workarea/listrak/oauth.rb +45 -0
- data/app/services/workarea/listrak/transactional_message.rb +83 -0
- data/app/view_models/workarea/admin/listrak_configuration_view_model.rb +17 -0
- data/app/views/workarea/admin/listrak/configurations/edit.html.haml +28 -0
- data/app/views/workarea/admin/listrak/events/index.json.jbuilder +4 -0
- data/app/views/workarea/admin/shared/_listrak_configuration_link.html.haml +1 -0
- data/app/views/workarea/storefront/checkouts/_listrak.html.haml +2 -0
- data/app/workers/workarea/listrak/customer_exporter.rb +22 -0
- data/app/workers/workarea/listrak/order_exporter.rb +22 -0
- data/app/workers/workarea/listrak/product_exporter.rb +50 -0
- data/app/workers/workarea/listrak/subscribe_email_signup.rb +34 -0
- data/app/workers/workarea/listrak/unsubscribe_email_signup.rb +27 -0
- data/bin/rails +18 -0
- data/bin/rake +16 -0
- data/bin/rspec +16 -0
- data/bin/rubocop +16 -0
- data/config/initializers/append_points.rb +28 -0
- data/config/initializers/configuration.rb +8 -0
- data/config/locales/en.yml +17 -0
- data/config/routes.rb +10 -0
- data/docs/Listrak Technical Integration Guide.docx +0 -0
- data/lib/generators/workarea/listrak/message/USAGE +9 -0
- data/lib/generators/workarea/listrak/message/message_generator.rb +15 -0
- data/lib/generators/workarea/listrak/message/templates/message.rb.erb +24 -0
- data/lib/workarea/listrak/analytics.rb +17 -0
- data/lib/workarea/listrak/bogus_data_api/customers.rb +9 -0
- data/lib/workarea/listrak/bogus_data_api/orders.rb +9 -0
- data/lib/workarea/listrak/bogus_data_api/products.rb +9 -0
- data/lib/workarea/listrak/bogus_data_api/proxy_client.rb +29 -0
- data/lib/workarea/listrak/bogus_data_api.rb +46 -0
- data/lib/workarea/listrak/bogus_email_api/contacts.rb +8 -0
- data/lib/workarea/listrak/bogus_email_api/events.rb +23 -0
- data/lib/workarea/listrak/bogus_email_api/lists.rb +63 -0
- data/lib/workarea/listrak/bogus_email_api/proxy_client.rb +29 -0
- data/lib/workarea/listrak/bogus_email_api/transactional_messages.rb +9 -0
- data/lib/workarea/listrak/bogus_email_api.rb +51 -0
- data/lib/workarea/listrak/engine.rb +12 -0
- data/lib/workarea/listrak/error.rb +39 -0
- data/lib/workarea/listrak/version.rb +5 -0
- data/lib/workarea/listrak.rb +57 -0
- data/readme/listrak-admin.png +0 -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/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/application.rb +18 -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 +54 -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 +38 -0
- data/test/dummy/config/spring.rb +6 -0
- data/test/dummy/config.ru +5 -0
- data/test/dummy/db/seeds.rb +2 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/apple-touch-icon-precomposed.png +0 -0
- data/test/dummy/public/apple-touch-icon.png +0 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/factories/workarea/factories/listrak.rb +15 -0
- data/test/helpers/workarea/listrak/analytics/helper_test.rb +38 -0
- data/test/integration/workarea/admin/listrak/configuration_integration_test.rb +26 -0
- data/test/integration/workarea/admin/listrak/events_integration_test.rb +21 -0
- data/test/lib/generators/workarea/listrak/message_generator_test.rb +26 -0
- data/test/queries/workarea/categorization_test.decorator +15 -0
- data/test/services/workarea/listrak/data_api/customers_test.rb +35 -0
- data/test/services/workarea/listrak/data_api/orders_test.rb +24 -0
- data/test/services/workarea/listrak/data_api/products_test.rb +27 -0
- data/test/services/workarea/listrak/email_api/contacts_test.rb +55 -0
- data/test/services/workarea/listrak/email_api/events_test.rb +51 -0
- data/test/services/workarea/listrak/email_api/lists_test.rb +45 -0
- data/test/services/workarea/listrak/email_api/messages_test.rb +28 -0
- data/test/services/workarea/listrak/email_api/transactional_messages_test.rb +50 -0
- data/test/services/workarea/listrak/oauth_test.rb +27 -0
- data/test/services/workarea/listrak/transactional_message_test.rb +48 -0
- data/test/support/workarea/listrak/test_order_confirmation_email.rb +116 -0
- data/test/support/workarea/listrak/vcr_config.rb +31 -0
- data/test/system/workarea/listrak_system_test.rb +75 -0
- data/test/test_helper.rb +16 -0
- data/test/vcr_cassettes/listrak/data_api/customers_import-successful.yml +88 -0
- data/test/vcr_cassettes/listrak/data_api/orders_import-successful.yml +90 -0
- data/test/vcr_cassettes/listrak/data_api/products_import-successful.yml +88 -0
- data/test/vcr_cassettes/listrak/email_api/contacts_get-successful.yml +87 -0
- data/test/vcr_cassettes/listrak/email_api/contacts_upsert-already_unsubscribed.yml +90 -0
- data/test/vcr_cassettes/listrak/email_api/contacts_upsert-successful.yml +87 -0
- data/test/vcr_cassettes/listrak/email_api/events_create-invalid_parameter.yml +90 -0
- data/test/vcr_cassettes/listrak/email_api/events_create-successful.yml +87 -0
- data/test/vcr_cassettes/listrak/email_api/events_get-successful.yml +88 -0
- data/test/vcr_cassettes/listrak/email_api/lists_all-successful.yml +88 -0
- data/test/vcr_cassettes/listrak/email_api/messages_create-successful.yml +88 -0
- data/test/vcr_cassettes/listrak/email_api/transactional_messages_create-successful.yml +89 -0
- data/test/vcr_cassettes/listrak/oauth-successful.yml +44 -0
- data/test/vcr_cassettes/listrak/oauth-unsuccessful.yml +46 -0
- data/test/vcr_cassettes/listrak/system_tests/footer_email_signup-successful.yml +171 -0
- data/test/vcr_cassettes/listrak/system_tests/footer_email_signup_overrides_unsubscribe.yml +255 -0
- data/test/vcr_cassettes/listrak/system_tests/unsubscribing.yml +593 -0
- data/test/workers/workarea/listrak/order_exporter_test.rb +31 -0
- data/test/workers/workarea/listrak/product_exporter_test.rb +62 -0
- data/workarea-listrak.gemspec +16 -0
- metadata +223 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
module Workarea
|
|
2
|
+
module Listrak
|
|
3
|
+
module Models
|
|
4
|
+
class List
|
|
5
|
+
attr_reader :hash
|
|
6
|
+
|
|
7
|
+
def initialize(hash)
|
|
8
|
+
@hash = hash
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Identifier used to locate the list.
|
|
12
|
+
#
|
|
13
|
+
# @return [Integer]
|
|
14
|
+
#
|
|
15
|
+
def id
|
|
16
|
+
hash["listId"]
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Name of the list.
|
|
20
|
+
#
|
|
21
|
+
# @return [String]
|
|
22
|
+
#
|
|
23
|
+
def name
|
|
24
|
+
hash["listName"]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Identifier of the folder associated with the list.
|
|
28
|
+
#
|
|
29
|
+
# @return [Integer]
|
|
30
|
+
#
|
|
31
|
+
def folder_id
|
|
32
|
+
hash["folderId"]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Identifier of the IP pool associated with the list.
|
|
36
|
+
#
|
|
37
|
+
# @return [Integer]
|
|
38
|
+
#
|
|
39
|
+
def ip_pool_id
|
|
40
|
+
hash["ipPoolId"]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Alias domain for email bounces.
|
|
44
|
+
#
|
|
45
|
+
# @return [String]
|
|
46
|
+
#
|
|
47
|
+
def bounce_domain_alias
|
|
48
|
+
hash["bounceDomainAlias"]
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Bounce handling method for the list. Allowed values are None, Standard, and Aggressive.
|
|
52
|
+
#
|
|
53
|
+
# @return [String]
|
|
54
|
+
#
|
|
55
|
+
def bounce_handling
|
|
56
|
+
hash["bounceHandling"]
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# The number of bounces that are allowed before being automatically unsubscribed.
|
|
60
|
+
#
|
|
61
|
+
# @return [Integer]
|
|
62
|
+
#
|
|
63
|
+
def bounce_unsubscribe_count
|
|
64
|
+
hash["bounceUnsubscribeCount"]
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# The creation date of the list.
|
|
68
|
+
#
|
|
69
|
+
# @return [DateTime]
|
|
70
|
+
#
|
|
71
|
+
def create_date
|
|
72
|
+
DateTime.strptime(hash["createDate"], '%FT%T')
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Whether browser link is enabled.
|
|
76
|
+
#
|
|
77
|
+
# @return [Boolean]
|
|
78
|
+
#
|
|
79
|
+
def enable_browser_link
|
|
80
|
+
hash["enableBrowserLink"]
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Whether double opt-in is enabled.
|
|
84
|
+
#
|
|
85
|
+
# @return [Boolean]
|
|
86
|
+
#
|
|
87
|
+
def enable_double_opt_in
|
|
88
|
+
hash["enableDoubleOptIn"]
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Whether dynamic content is enabled.
|
|
92
|
+
#
|
|
93
|
+
# @return [Boolean]
|
|
94
|
+
#
|
|
95
|
+
def enable_dynamic_content
|
|
96
|
+
hash["enableDynamicContent"]
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Whether Google Analytics is enabled.
|
|
100
|
+
#
|
|
101
|
+
# @return [Boolean]
|
|
102
|
+
#
|
|
103
|
+
def enable_google_analytics
|
|
104
|
+
hash["enableGoogleAnalytics"]
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Whether internationalization is enabled.
|
|
108
|
+
#
|
|
109
|
+
# @return [Boolean]
|
|
110
|
+
#
|
|
111
|
+
def enable_internationalization
|
|
112
|
+
hash["enableInternationalization"]
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Whether list hygiene is enabled.
|
|
116
|
+
#
|
|
117
|
+
# @return [Boolean]
|
|
118
|
+
#
|
|
119
|
+
def enable_list_hygiene
|
|
120
|
+
hash["enableListHygiene"]
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# Whether unsubscribe information is automatically included in message headers.
|
|
124
|
+
#
|
|
125
|
+
# return [Boolean]
|
|
126
|
+
#
|
|
127
|
+
def enable_list_removal_header
|
|
128
|
+
hash["enableListRemovalHeader"]
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Whether the list removal link is automatically included.
|
|
132
|
+
#
|
|
133
|
+
# @return [Boolean]
|
|
134
|
+
#
|
|
135
|
+
def enable_list_removal_link
|
|
136
|
+
hash["enableListRemovalLink"]
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# Whether Listrak Analytics is enabled.
|
|
140
|
+
#
|
|
141
|
+
# @return [Boolean]
|
|
142
|
+
def enable_listrak_analytics
|
|
143
|
+
hash["enableListrakAnalytics"]
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# Whether personalization is available in Spam Score.
|
|
147
|
+
#
|
|
148
|
+
# @return [Boolean]
|
|
149
|
+
#
|
|
150
|
+
def enable_spam_score_personalization
|
|
151
|
+
hash["enableSpamScorePersonalization"]
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# Whether personalization is enabled for a recipient's To name.
|
|
155
|
+
#
|
|
156
|
+
# @return [Boolean]
|
|
157
|
+
#
|
|
158
|
+
def enable_to_name_personalization
|
|
159
|
+
hash["enableToNamePersonalization"]
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# The From email address used by default when sending messages.
|
|
163
|
+
#
|
|
164
|
+
# @return [String]
|
|
165
|
+
#
|
|
166
|
+
def from_email
|
|
167
|
+
hash["fromEmail"]
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
# The From name used by default when sending messages.
|
|
171
|
+
#
|
|
172
|
+
# @return [String]
|
|
173
|
+
#
|
|
174
|
+
def from_name
|
|
175
|
+
hash["fromName"]
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
# Google tracking domains of the list.
|
|
179
|
+
#
|
|
180
|
+
# @return [Array<String>]
|
|
181
|
+
#
|
|
182
|
+
def google_tracking_domains
|
|
183
|
+
hash["googleTrackingDomains"]
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# Alias domain for links in the list's messages.
|
|
187
|
+
#
|
|
188
|
+
# return [String]
|
|
189
|
+
#
|
|
190
|
+
def link_domain_alias
|
|
191
|
+
hash["linkDomainAlias"]
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
# Alias domain for media in the list's messages.
|
|
195
|
+
#
|
|
196
|
+
# @return [String]
|
|
197
|
+
#
|
|
198
|
+
def media_domain_alias
|
|
199
|
+
hash["mediaDomainAlias"]
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
end
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
module Workarea
|
|
2
|
+
module Listrak
|
|
3
|
+
module Models
|
|
4
|
+
class MessageForm
|
|
5
|
+
attr_reader :options
|
|
6
|
+
|
|
7
|
+
def initialize(from_email:, from_name:, subject:, **options)
|
|
8
|
+
@from_email = from_email
|
|
9
|
+
@from_name = from_name
|
|
10
|
+
@subject = subject
|
|
11
|
+
@options = options.symbolize_keys
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def to_json
|
|
15
|
+
{
|
|
16
|
+
campaignId: campaign_id,
|
|
17
|
+
bodyHtml: body_html,
|
|
18
|
+
bodyText: body_text,
|
|
19
|
+
codePage: code_page,
|
|
20
|
+
enablePassalong: enable_passalong,
|
|
21
|
+
enableTracking: enable_tracking,
|
|
22
|
+
fromEmail: from_email,
|
|
23
|
+
fromName: from_name,
|
|
24
|
+
googleAnalyticsCampaignName: google_analytics_campaign_name,
|
|
25
|
+
googleAnalyticsCampaignContent: google_analytics_campaign_content,
|
|
26
|
+
replyEmail: reply_email,
|
|
27
|
+
savedAudienceId: save_audience_id,
|
|
28
|
+
subject: subject,
|
|
29
|
+
toName: to_name
|
|
30
|
+
}.compact.to_json
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Identifier of the campaign associated with the message.
|
|
34
|
+
#
|
|
35
|
+
# @return [Integer]
|
|
36
|
+
#
|
|
37
|
+
def campaign_id
|
|
38
|
+
options[:campaign_id]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# HTML body that will be sent in the message.
|
|
42
|
+
#
|
|
43
|
+
# @return [String]
|
|
44
|
+
#
|
|
45
|
+
def body_html
|
|
46
|
+
options[:body_html]
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Text body that will be sent in the message.
|
|
50
|
+
#
|
|
51
|
+
# @return [String]
|
|
52
|
+
#
|
|
53
|
+
def body_text
|
|
54
|
+
options[:body_text]
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Type of CodePage used in the message.
|
|
58
|
+
#
|
|
59
|
+
# @return [Integer]
|
|
60
|
+
#
|
|
61
|
+
def code_page
|
|
62
|
+
options[:code_page]
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Whether passalong is enabled.
|
|
66
|
+
#
|
|
67
|
+
# @return [Boolean]
|
|
68
|
+
#
|
|
69
|
+
def enable_passalong
|
|
70
|
+
options[:enable_passalong]
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Whether tracking is enabled.
|
|
74
|
+
#
|
|
75
|
+
# @return [Boolean]
|
|
76
|
+
#
|
|
77
|
+
def enable_tracking
|
|
78
|
+
options[:enable_tracking]
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# The from email address that will be used for the message.
|
|
82
|
+
#
|
|
83
|
+
# @return [String]
|
|
84
|
+
#
|
|
85
|
+
def from_email
|
|
86
|
+
@from_email
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# The from name that will be used for the message.
|
|
90
|
+
#
|
|
91
|
+
# @return [String]
|
|
92
|
+
#
|
|
93
|
+
def from_name
|
|
94
|
+
@from_name
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# The Google Analytics campaign name to be used for message tracking.
|
|
98
|
+
#
|
|
99
|
+
# @return [String]
|
|
100
|
+
#
|
|
101
|
+
def google_analytics_campaign_name
|
|
102
|
+
options[:google_analytics_campaign_name]
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# The Google Analytics campaign content to be used for message tracking.
|
|
106
|
+
#
|
|
107
|
+
# @return [String]
|
|
108
|
+
#
|
|
109
|
+
def google_analytics_campaign_content
|
|
110
|
+
options[:google_analytics_campaign_content]
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# The reply email address that will be used for the message.
|
|
114
|
+
#
|
|
115
|
+
# @return [String]
|
|
116
|
+
#
|
|
117
|
+
def reply_email
|
|
118
|
+
options[:reply_email]
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Identifier of the SavedAudience to use for recipient filtering.
|
|
122
|
+
#
|
|
123
|
+
# @return [Integer]
|
|
124
|
+
#
|
|
125
|
+
def save_audience_id
|
|
126
|
+
options[:save_audience_id]
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# Subject of the message.
|
|
130
|
+
#
|
|
131
|
+
# @return [String]
|
|
132
|
+
#
|
|
133
|
+
def subject
|
|
134
|
+
@subject
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# The to name that will be used for the message.
|
|
138
|
+
#
|
|
139
|
+
# @return [String]
|
|
140
|
+
#
|
|
141
|
+
def to_name
|
|
142
|
+
options[:to_name]
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
module Workarea
|
|
2
|
+
module Listrak
|
|
3
|
+
module Models
|
|
4
|
+
class OrderForm
|
|
5
|
+
attr_reader :order
|
|
6
|
+
|
|
7
|
+
def initialize(order)
|
|
8
|
+
@order = order
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def as_json(_options)
|
|
12
|
+
{
|
|
13
|
+
associateID: associate_id,
|
|
14
|
+
billingAddress: billing_address,
|
|
15
|
+
couponCode: coupon_code,
|
|
16
|
+
customerNumber: customer_number,
|
|
17
|
+
dateEntered: date_entered,
|
|
18
|
+
discountTotal: discount_total,
|
|
19
|
+
email: email,
|
|
20
|
+
handlingTotal: handling_total,
|
|
21
|
+
items: items,
|
|
22
|
+
itemTotal: item_total,
|
|
23
|
+
merchandiseDiscount: merchandise_discount,
|
|
24
|
+
merchandiseDiscountDescription: merchandise_discount_description,
|
|
25
|
+
merchandiseDiscountType: merchandise_discount_type,
|
|
26
|
+
meta1: meta1,
|
|
27
|
+
meta2: meta2,
|
|
28
|
+
meta3: meta3,
|
|
29
|
+
meta4: meta4,
|
|
30
|
+
meta5: meta5,
|
|
31
|
+
nonMerchandiseDiscount: non_merchandise_discount,
|
|
32
|
+
nonMerchandiseDiscountDescription: non_merchandise_discount_description,
|
|
33
|
+
nonMerchandiseDiscountType: non_merchandise_discount_type,
|
|
34
|
+
orderNumber: order_number,
|
|
35
|
+
orderTotal: order_total,
|
|
36
|
+
shipDate: ship_date,
|
|
37
|
+
shippingAddress: shipping_address,
|
|
38
|
+
shippingMethod: shipping_method,
|
|
39
|
+
shippingTotal: shipping_total,
|
|
40
|
+
source: source,
|
|
41
|
+
status: status,
|
|
42
|
+
storeNumber: store_number,
|
|
43
|
+
taxTotal: tax_total,
|
|
44
|
+
trackingNumber: tracking_number
|
|
45
|
+
}
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Associate ID of order
|
|
49
|
+
#
|
|
50
|
+
# @return [String]
|
|
51
|
+
def associate_id
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Billing address of order
|
|
55
|
+
#
|
|
56
|
+
# @return [Workarea::Listrak::Models::Address]
|
|
57
|
+
#
|
|
58
|
+
def billing_address
|
|
59
|
+
Workarea::Listrak::Models::Address.new payment.address
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Coupon code used with order
|
|
63
|
+
#
|
|
64
|
+
# limited to 32 characters
|
|
65
|
+
#
|
|
66
|
+
# @return [String]
|
|
67
|
+
#
|
|
68
|
+
def coupon_code
|
|
69
|
+
order.promo_codes.first
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Internal customer number
|
|
73
|
+
#
|
|
74
|
+
# limited to 20 characters
|
|
75
|
+
#
|
|
76
|
+
# @return [String]
|
|
77
|
+
#
|
|
78
|
+
def customer_number
|
|
79
|
+
order.user_id.to_s
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Timestamp of order date (ET)
|
|
83
|
+
#
|
|
84
|
+
# @return [String] DateTime in %FT%TZ
|
|
85
|
+
#
|
|
86
|
+
def date_entered
|
|
87
|
+
order.placed_at.strftime '%FT%TZ'
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Total value of order discount
|
|
91
|
+
#
|
|
92
|
+
# @return [Float]
|
|
93
|
+
#
|
|
94
|
+
def discount_total
|
|
95
|
+
order.price_adjustments
|
|
96
|
+
.select { |pa| pa.data['discount_value'].present? && pa.price != 'item' }
|
|
97
|
+
.sum { |d| d.data['discount_value'] }
|
|
98
|
+
.abs
|
|
99
|
+
.try(:to_f)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Email address of customer. This property is required for
|
|
103
|
+
# accounts that are not CRM enabled.
|
|
104
|
+
#
|
|
105
|
+
# limited to 100 characters
|
|
106
|
+
#
|
|
107
|
+
# @return [String]
|
|
108
|
+
#
|
|
109
|
+
def email
|
|
110
|
+
order.email
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Total handling costs
|
|
114
|
+
#
|
|
115
|
+
# @return [Float]
|
|
116
|
+
#
|
|
117
|
+
def handling_total
|
|
118
|
+
shipping.shipping_total.to_f
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Order items
|
|
122
|
+
#
|
|
123
|
+
# @return [Array<Workarea::Listrak::Models::OrderItem>]
|
|
124
|
+
#
|
|
125
|
+
def items
|
|
126
|
+
@order_items ||= order.items.map do |order_item|
|
|
127
|
+
Workarea::Listrak::Models::OrderItem.new order, order_item
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Total cost of items ordered (subtotal)
|
|
132
|
+
#
|
|
133
|
+
# @return [Float]
|
|
134
|
+
#
|
|
135
|
+
def item_total
|
|
136
|
+
order.subtotal_price.to_f
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# Discount applied to the merchandise of the order
|
|
140
|
+
#
|
|
141
|
+
# @return [Float]
|
|
142
|
+
#
|
|
143
|
+
def merchandise_discount
|
|
144
|
+
order.price_adjustments
|
|
145
|
+
.select { |pa| pa.data['discount_value'].present? && pa.price == 'item' }
|
|
146
|
+
.sum { |d| d.data['discount_value'] }
|
|
147
|
+
.abs
|
|
148
|
+
.try(:to_f)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# Description of the discount applied to the merchandise of the order
|
|
152
|
+
#
|
|
153
|
+
# @return [String]
|
|
154
|
+
#
|
|
155
|
+
def merchandise_discount_description
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# Type of discount applied to the merchandise of the order
|
|
159
|
+
#
|
|
160
|
+
# "NotSet" "PriceOverride" "PriceRule" "Promotion" "SeniorCitizen" "Markdown" "Coupon" "QuantityDiscount" "Rebate" "CashDiscount" "TradeDiscount" "TradeInKind" "PromptPaymentDiscount" "GeneralDiscount" "GiftVoucher" "FlexibleDiscount" "RewardProgram" "ManufacturerReward" "CreditCardReward"
|
|
161
|
+
#
|
|
162
|
+
# @return [String]
|
|
163
|
+
#
|
|
164
|
+
def merchandise_discount_type
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
# Additional meta information
|
|
168
|
+
#
|
|
169
|
+
# limited to 500 characters
|
|
170
|
+
#
|
|
171
|
+
# @return [String]
|
|
172
|
+
#
|
|
173
|
+
def meta1
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# Additional meta information
|
|
177
|
+
#
|
|
178
|
+
# limted to 500 characters
|
|
179
|
+
#
|
|
180
|
+
# @return [String]
|
|
181
|
+
#
|
|
182
|
+
def meta2
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
# Additional meta information
|
|
186
|
+
#
|
|
187
|
+
# limted to 500 characters
|
|
188
|
+
#
|
|
189
|
+
# @return [String]
|
|
190
|
+
#
|
|
191
|
+
def meta3
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
# Additional meta information
|
|
195
|
+
#
|
|
196
|
+
# limted to 500 characters
|
|
197
|
+
#
|
|
198
|
+
# @return [String]
|
|
199
|
+
#
|
|
200
|
+
def meta4
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
# Additional meta information
|
|
204
|
+
#
|
|
205
|
+
# limted to 500 characters
|
|
206
|
+
#
|
|
207
|
+
# @return [String]
|
|
208
|
+
#
|
|
209
|
+
def meta5
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
# Discounts applied to the order that is not related to the merchandise
|
|
213
|
+
#
|
|
214
|
+
# @return [Float]
|
|
215
|
+
#
|
|
216
|
+
def non_merchandise_discount
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
# Description of the discount applied to the order not related to the merchandise
|
|
220
|
+
#
|
|
221
|
+
# @return [String]
|
|
222
|
+
#
|
|
223
|
+
def non_merchandise_discount_description
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
# Type of discount applied to the order not related to the merchandise
|
|
227
|
+
#
|
|
228
|
+
# "NotSet" "PriceOverride" "PriceRule" "Promotion" "SeniorCitizen" "Markdown" "Coupon" "QuantityDiscount" "Rebate" "CashDiscount" "TradeDiscount" "TradeInKind" "PromptPaymentDiscount" "GeneralDiscount" "GiftVoucher" "FlexibleDiscount" "RewardProgram" "ManufacturerReward" "CreditCardReward"
|
|
229
|
+
#
|
|
230
|
+
# @return [String]
|
|
231
|
+
#
|
|
232
|
+
def non_merchandise_discount_type
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
# Unique order number
|
|
236
|
+
#
|
|
237
|
+
# limited to 50 characters
|
|
238
|
+
#
|
|
239
|
+
# @return [String]
|
|
240
|
+
#
|
|
241
|
+
def order_number
|
|
242
|
+
order.id.to_s
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
# Total value of order
|
|
246
|
+
#
|
|
247
|
+
# return [Float]
|
|
248
|
+
#
|
|
249
|
+
def order_total
|
|
250
|
+
order.total_value.to_f
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
# Timestamp when entire order shipped (ET)
|
|
254
|
+
#
|
|
255
|
+
# @return [String]
|
|
256
|
+
#
|
|
257
|
+
def ship_date
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
# Shipping address of order
|
|
261
|
+
#
|
|
262
|
+
# @return [Workarea::Listrak::Models::Address]
|
|
263
|
+
#
|
|
264
|
+
def shipping_address
|
|
265
|
+
Workarea::Listrak::Models::Address.new shipping.address
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
# Shipping method (e.g. UPS Ground)
|
|
269
|
+
#
|
|
270
|
+
# limted to 32 characters
|
|
271
|
+
#
|
|
272
|
+
# @return [String]
|
|
273
|
+
#
|
|
274
|
+
def shipping_method
|
|
275
|
+
shipping.shipping_service&.name
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
# Total shipping costs
|
|
279
|
+
#
|
|
280
|
+
# @return [Float]
|
|
281
|
+
#
|
|
282
|
+
def shipping_total
|
|
283
|
+
order.shipping_total.to_f
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
# Describes the source at which the order was placed (online, POS, etc.)
|
|
287
|
+
#
|
|
288
|
+
# limted to 25 characters
|
|
289
|
+
#
|
|
290
|
+
# @return [String]
|
|
291
|
+
#
|
|
292
|
+
def source
|
|
293
|
+
'web'
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
# Status indicator
|
|
297
|
+
#
|
|
298
|
+
# "NotSet" "Misc" "PreOrder" "BackOrder" "Pending" "Hold" "Processing" "Shipped" "Completed" "Returned" "Canceled" "Unknown" "Closed"
|
|
299
|
+
#
|
|
300
|
+
# @return [String]
|
|
301
|
+
#
|
|
302
|
+
def status
|
|
303
|
+
order.status
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
# Brick and mortar store location
|
|
307
|
+
#
|
|
308
|
+
# limited to 100 characters
|
|
309
|
+
#
|
|
310
|
+
# @return [String]
|
|
311
|
+
#
|
|
312
|
+
def store_number
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
# Total sales tax charged
|
|
316
|
+
#
|
|
317
|
+
# @return [Float]
|
|
318
|
+
#
|
|
319
|
+
def tax_total
|
|
320
|
+
order.tax_total.to_f
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
# Shipment tracking number
|
|
324
|
+
#
|
|
325
|
+
# limited to 32 characters
|
|
326
|
+
#
|
|
327
|
+
# @return [String]
|
|
328
|
+
#
|
|
329
|
+
def tracking_number
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
private
|
|
333
|
+
|
|
334
|
+
def payment
|
|
335
|
+
@payment ||= Workarea::Payment.find order.id
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
def fulfillment
|
|
339
|
+
@fulfillment ||= Workarea::Fulfillment.find order.id
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
def shippings
|
|
343
|
+
@shippings ||= Workarea::Shipping.by_order(order.id).to_a
|
|
344
|
+
end
|
|
345
|
+
|
|
346
|
+
def shipping
|
|
347
|
+
shippings.first
|
|
348
|
+
end
|
|
349
|
+
end
|
|
350
|
+
end
|
|
351
|
+
end
|
|
352
|
+
end
|