Class: Order::BackOrderClientNotification
- Inherits:
-
BaseService
show all
- Defined in:
- app/services/order/back_order_client_notification.rb
Constant Summary
collapse
- EMAIL_TEMPLATE_CODE =
'ORDER_BO_NOTIFY'
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from BaseService
#initialize, #log_debug, #log_error, #log_info, #log_warning, #logger, #options, #tagged_logger
Constructor Details
This class inherits a constructor from BaseService
Class Method Details
.build_or_create_email_template ⇒ Object
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
# File 'app/services/order/back_order_client_notification.rb', line 82
def self.build_or_create_email_template
email_template = EmailTemplate.where(system_code: EMAIL_TEMPLATE_CODE).first_or_initialize
email_template.update!(
category: 'transactional',
description: 'Back Order Notification to Customer Message',
subject: 'WarmlyYours: Backorder notification for order {{order.reference_number}}',
stylesheet: 'default',
template: 'email',
body: %{
<p>{{salutation}}</p>
<p>Thank you for your order {{order.reference_number}}, we wanted to inform you that the following item(s) are currently on backorder.</p>
<ul>
{% for line in order.lines_on_backorder %}
<li>{{ line }}</li>
{% endfor %}
</ul>
<p>
If you need to make a change on your order or explore possible substitutions, please contact your account manager directly,
otherwise we will notify you when your items are being restocked and released!
</p>
<p>Sincerely,</p>
{{signature}}
}
)
end
|
Instance Method Details
#generate_builder_options(order) ⇒ Object
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# File 'app/services/order/back_order_client_notification.rb', line 62
def generate_builder_options(order)
sender = order.customer.primary_sales_rep
party_for_order_confirmation = order.party_for_order_confirmation
email_for_order_confirmation = order.email_for_order_confirmation
order_drop = order.to_liquid
{
resource: order,
sender_party: sender,
sender: sender&.email || INFO_EMAIL,
recipient_party: party_for_order_confirmation,
emails: email_for_order_confirmation,
template_system_code: EMAIL_TEMPLATE_CODE,
bcc: sender&.email,
merge_options: { order: order_drop, lines_on_backorder: order_drop.lines_on_backorder }
}
end
|
#load_orders(options = {}) ⇒ Object
15
16
17
18
|
# File 'app/services/order/back_order_client_notification.rb', line 15
def load_orders(options = {})
lookback_period = options[:lookback_period] || 7.days.ago
Order.sales_orders.back_order.where('bo_notification_sent_at IS NULL or bo_notification_sent_at < ?', lookback_period)
end
|
#process(options = {}) ⇒ Object
4
5
6
7
8
9
10
11
12
13
|
# File 'app/services/order/back_order_client_notification.rb', line 4
def process(options = {})
res = []
orders = load_orders(options)
PaperTrail.request(whodunnit: 'Order::BackOrderClientNotification') do
logger.tagged 'Order::BackOrderClientNotification' do
res = process_orders(orders)
end
end
res
end
|
#process_order(order) ⇒ Object
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'app/services/order/back_order_client_notification.rb', line 33
def process_order(order)
res = { order_id: order.id }
qualifying_customer = order.customer.is_direct_pro? || order.customer.is_homeowner?
logger.tagged "Order ID:#{order.id}" do
if qualifying_customer
res[:builder_options] = generate_builder_options(order)
if res[:builder_options][:merge_options][:lines_on_backorder].blank?
res.merge!({ status_code: :skipped, status_message: 'No items currently on backorder' })
else
logger.debug("Creating communication")
co = CommunicationBuilder.new(res[:builder_options]).create
res[:communication_id] = co.id
if co.draft?
logger.error co.errors_to_s
res.merge!({ status_code: :error, status_message: co.errors_to_s })
else
order.update_column(:bo_notification_sent_at, Time.current)
res.merge!({ status_code: :ok })
end
end
else
res.merge!({ status_code: :skipped, status_message: 'Notifications are only for homeowners and trade pros' })
end
end
res
end
|
#process_orders(orders) ⇒ Object
20
21
22
23
24
25
26
27
28
29
30
31
|
# File 'app/services/order/back_order_client_notification.rb', line 20
def process_orders(orders)
res = []
orders.find_each do |order|
res << process_order(order)
rescue StandardError => e
ErrorReporting.error e, order_id: order.id
logger.error e
ap e.backtrace
res << { order_id: order.id, status_code: :error, status_message: "Exception: #{e.inspect}" }
end
res
end
|