spree_emails 5.6.1 → 6.0.0.beta1
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 +4 -4
- data/LICENSE +30 -0
- data/README.md +2 -2
- data/app/helpers/spree/base_helper.rb +45 -0
- data/app/helpers/spree/digital_asset_helper.rb +16 -0
- data/app/helpers/spree/fulfillment_helper.rb +12 -0
- data/app/helpers/spree/mail_helper.rb +0 -13
- data/app/mailers/spree/company_mailer.rb +40 -0
- data/app/mailers/spree/customer_mailer.rb +21 -0
- data/app/mailers/spree/digital_asset_mailer.rb +30 -0
- data/app/mailers/spree/fulfillment_mailer.rb +17 -0
- data/app/mailers/spree/order_mailer.rb +1 -1
- data/app/mailers/spree/return_mailer.rb +17 -0
- data/app/mailers/spree/seller_mailer.rb +68 -0
- data/app/mailers/spree/shipment_mailer.rb +4 -11
- data/app/subscribers/spree/company_email_subscriber.rb +19 -0
- data/app/subscribers/spree/customer_email_subscriber.rb +1 -1
- data/app/subscribers/spree/data_request_email_subscriber.rb +21 -0
- data/app/subscribers/spree/digital_asset_email_subscriber.rb +35 -0
- data/app/subscribers/spree/fulfillment_email_subscriber.rb +34 -0
- data/app/subscribers/spree/order_email_subscriber.rb +5 -2
- data/app/subscribers/spree/return_email_subscriber.rb +23 -0
- data/app/subscribers/spree/seller_email_subscriber.rb +46 -0
- data/app/views/spree/company_mailer/invitation_email.html.erb +8 -0
- data/app/views/spree/company_mailer/invitation_email.text.erb +11 -0
- data/app/views/spree/customer_mailer/data_export_email.html.erb +12 -0
- data/app/views/spree/customer_mailer/data_export_email.text.erb +9 -0
- data/app/views/spree/digital_asset_mailer/files_ready_email.html.erb +20 -0
- data/app/views/spree/digital_asset_mailer/files_ready_email.text.erb +10 -0
- data/app/views/spree/fulfillment_mailer/fulfilled_email.html.erb +22 -0
- data/app/views/spree/fulfillment_mailer/fulfilled_email.text.erb +18 -0
- data/app/views/spree/order_mailer/cancel_email.text.erb +1 -0
- data/app/views/spree/order_mailer/confirm_email.text.erb +1 -0
- data/app/views/spree/order_mailer/store_owner_notification_email.text.erb +1 -0
- data/app/views/spree/return_mailer/refunded_email.html.erb +22 -0
- data/app/views/spree/return_mailer/refunded_email.text.erb +20 -0
- data/app/views/spree/seller_mailer/approved_email.html.erb +8 -0
- data/app/views/spree/seller_mailer/approved_email.text.erb +8 -0
- data/app/views/spree/seller_mailer/rejected_email.html.erb +6 -0
- data/app/views/spree/seller_mailer/rejected_email.text.erb +7 -0
- data/app/views/spree/seller_mailer/suspended_email.html.erb +6 -0
- data/app/views/spree/seller_mailer/suspended_email.text.erb +7 -0
- data/app/views/spree/shared/_item_thumbnail_link.html.erb +12 -1
- data/app/views/spree/shared/_order_summary_section.html.erb +5 -0
- data/app/views/spree/shared/_po_number.text.erb +6 -0
- data/app/views/spree/shared/_purchased_items_table.html.erb +16 -11
- data/app/views/spree/shared/_purchased_items_table.text.erb +9 -10
- data/lib/spree/emails/engine.rb +4 -3
- data/lib/spree/emails/previews/fulfillment_preview.rb +12 -0
- data/lib/spree/emails/previews/return_preview.rb +12 -0
- metadata +43 -28
- data/app/assets/config/spree_emails_manifest.js +0 -1
- data/app/assets/images/logo/spree_50.png +0 -0
- data/app/assets/images/noimage/mini.png +0 -0
- data/app/assets/images/noimage/noimage/large.png +0 -0
- data/app/assets/images/noimage/noimage/mini.png +0 -0
- data/app/assets/images/noimage/noimage/product.png +0 -0
- data/app/assets/images/noimage/noimage/small.png +0 -0
- data/app/assets/images/noimage/small.png +0 -0
- data/app/mailers/spree/reimbursement_mailer.rb +0 -15
- data/app/subscribers/spree/reimbursement_email_subscriber.rb +0 -24
- data/app/subscribers/spree/shipment_email_subscriber.rb +0 -24
- data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +0 -47
- data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +0 -24
- data/app/views/spree/shared/purchased_items_table/_adjustment.html.erb +0 -3
- data/app/views/spree/shipment_mailer/shipped_email.html.erb +0 -20
- data/app/views/spree/shipment_mailer/shipped_email.text.erb +0 -17
- data/config/initializers/assets.rb +0 -3
- data/lib/spree/emails/previews/reimbursement_preview.rb +0 -12
- data/lib/spree/emails/previews/shipment_preview.rb +0 -12
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<%= Spree.t('customer_mailer.data_export_email.greeting') %>
|
|
2
|
+
|
|
3
|
+
<%= Spree.t('customer_mailer.data_export_email.instructions') %>
|
|
4
|
+
|
|
5
|
+
<% if @download_url %><%= @download_url %><% end %>
|
|
6
|
+
|
|
7
|
+
<% if @expires_at %><%= Spree.t('customer_mailer.data_export_email.expiry_notice', date: I18n.l(@expires_at.to_date, format: :long)) %><% end %>
|
|
8
|
+
|
|
9
|
+
<%= Spree.t('customer_mailer.data_export_email.ignore_notice') %>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<%= render layout: 'spree/shared/mailer_hero' do %>
|
|
2
|
+
<h1><%= Spree.t('digital_asset_mailer.files_ready_email.subject') %></h1>
|
|
3
|
+
<p class="greeting"><%= Spree.t('digital_asset_mailer.files_ready_email.dear_customer', name: name_for(@order)) %></p>
|
|
4
|
+
<p><%= Spree.t('digital_asset_mailer.files_ready_email.instructions', number: @order.number) %></p>
|
|
5
|
+
<% end %>
|
|
6
|
+
|
|
7
|
+
<table width="100%" cellpadding="0" cellspacing="0" border="0">
|
|
8
|
+
<% @digital_links.each do |digital_link| %>
|
|
9
|
+
<tr>
|
|
10
|
+
<td style="padding: 8px 0;">
|
|
11
|
+
<a href="<%= digital_link_download_url(digital_link, @download_host) %>"><%= digital_link.filename %></a>
|
|
12
|
+
<% if digital_link.expires_at %>
|
|
13
|
+
<div style="font-size: 12px; color: #666;">
|
|
14
|
+
<%= Spree.t('digital_asset_mailer.files_ready_email.available_until', date: l(digital_link.expires_at.to_date, format: :long)) %>
|
|
15
|
+
</div>
|
|
16
|
+
<% end %>
|
|
17
|
+
</td>
|
|
18
|
+
</tr>
|
|
19
|
+
<% end %>
|
|
20
|
+
</table>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<%= Spree.t('digital_asset_mailer.files_ready_email.dear_customer', name: name_for(@order)) %>
|
|
2
|
+
|
|
3
|
+
<%= Spree.t('digital_asset_mailer.files_ready_email.instructions', number: @order.number) %>
|
|
4
|
+
|
|
5
|
+
<% @digital_links.each do |digital_link| %>
|
|
6
|
+
<%= digital_link.filename %>
|
|
7
|
+
<%= digital_link_download_url(digital_link, @download_host) %>
|
|
8
|
+
<% if digital_link.expires_at %><%= Spree.t('digital_asset_mailer.files_ready_email.available_until', date: l(digital_link.expires_at.to_date, format: :long)) %>
|
|
9
|
+
<% end %>
|
|
10
|
+
<% end %>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<%= render 'spree/shared/purchased_items_styles' %>
|
|
2
|
+
|
|
3
|
+
<%= render layout: 'spree/shared/mailer_hero' do %>
|
|
4
|
+
<h1><%= Spree.t('fulfillment_mailer.fulfilled_email.subject') %></h1>
|
|
5
|
+
<p class="greeting"><%= Spree.t('fulfillment_mailer.fulfilled_email.dear_customer', name: name_for(@fulfillment.order)) %></p>
|
|
6
|
+
<p><%= Spree.t('fulfillment_mailer.fulfilled_email.instructions', number: @fulfillment.order.number) %></p>
|
|
7
|
+
<% if @fulfillment.delivery_method %>
|
|
8
|
+
<p><%= Spree.t('fulfillment_mailer.fulfilled_email.delivery_method', delivery_method: @fulfillment.delivery_method.name) %></p>
|
|
9
|
+
<% end %>
|
|
10
|
+
<% if @fulfillment.tracking %>
|
|
11
|
+
<p><%= Spree.t('fulfillment_mailer.fulfilled_email.track_information', tracking: @fulfillment.tracking) %></p>
|
|
12
|
+
<% end %>
|
|
13
|
+
<% if @fulfillment.tracking_url %>
|
|
14
|
+
<p><%= Spree.t('fulfillment_mailer.fulfilled_email.track_link', url: fulfillment_tracking_link_to(fulfillment: @fulfillment)).html_safe %></p>
|
|
15
|
+
<% end %>
|
|
16
|
+
<% end %>
|
|
17
|
+
|
|
18
|
+
<%= render 'spree/shared/order_summary_section',
|
|
19
|
+
heading: Spree.t('fulfillment_mailer.fulfilled_email.fulfillment_summary'),
|
|
20
|
+
line_items: @fulfillment.manifest.map(&:line_item),
|
|
21
|
+
order: @fulfillment.order,
|
|
22
|
+
totals: false %>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<%= Spree.t('fulfillment_mailer.fulfilled_email.dear_customer', name: name_for(@fulfillment.order)) %>
|
|
2
|
+
|
|
3
|
+
<%= Spree.t('fulfillment_mailer.fulfilled_email.instructions', number: @fulfillment.order.number) %>
|
|
4
|
+
|
|
5
|
+
============================================================
|
|
6
|
+
<%= Spree.t('fulfillment_mailer.fulfilled_email.fulfillment_summary') %>
|
|
7
|
+
============================================================
|
|
8
|
+
<%= render 'spree/shared/po_number', order: @fulfillment.order %>
|
|
9
|
+
<% @fulfillment.manifest.each do |item| %>
|
|
10
|
+
<%= item.variant.sku %> <%= item.variant.product.name %> <%= item.variant.options_text %>
|
|
11
|
+
<% end %>
|
|
12
|
+
============================================================
|
|
13
|
+
|
|
14
|
+
<%= Spree.t('fulfillment_mailer.fulfilled_email.track_information', tracking: @fulfillment.tracking) if @fulfillment.tracking %>
|
|
15
|
+
<%= Spree.t('fulfillment_mailer.fulfilled_email.track_link', url: @fulfillment.tracking_url) if @fulfillment.tracking_url %>
|
|
16
|
+
|
|
17
|
+
<%= Spree.t('fulfillment_mailer.fulfilled_email.thanks') %>
|
|
18
|
+
<%= Spree.t('fulfillment_mailer.fulfilled_email.store_team', store_name: current_store.name) %>
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
============================================================
|
|
6
6
|
<%= Spree.t('order_mailer.cancel_email.order_summary_canceled', number: @order.number) %>
|
|
7
7
|
============================================================
|
|
8
|
+
<%= render 'spree/shared/po_number', order: @order %>
|
|
8
9
|
<%= render 'spree/shared/purchased_items_table', line_items: @order.line_items, order: @order %>
|
|
9
10
|
============================================================
|
|
10
11
|
<%= Spree.t('order_mailer.total') %> <%= @order.display_total %>
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
============================================================
|
|
6
6
|
<%= Spree.t('order_mailer.confirm_email.order_summary', number: @order.number) %>
|
|
7
7
|
============================================================
|
|
8
|
+
<%= render 'spree/shared/po_number', order: @order %>
|
|
8
9
|
<%= render 'spree/shared/purchased_items_table', line_items: @order.line_items, order: @order %>
|
|
9
10
|
============================================================
|
|
10
11
|
<%= Spree.t('order_mailer.total') %> <%= @order.display_total %>
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
============================================================
|
|
6
6
|
<%= Spree.t('order_mailer.store_owner_notification_email.order_summary', number: @order.number) %>
|
|
7
7
|
============================================================
|
|
8
|
+
<%= render 'spree/shared/po_number', order: @order %>
|
|
8
9
|
<%= render 'spree/shared/purchased_items_table', line_items: @order.line_items, order: @order %>
|
|
9
10
|
============================================================
|
|
10
11
|
<%= Spree.t('order_mailer.total') %> <%= @order.display_total %>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<%= render 'spree/shared/purchased_items_styles' %>
|
|
2
|
+
|
|
3
|
+
<%= render layout: 'spree/shared/mailer_hero' do %>
|
|
4
|
+
<h1><%= Spree.t('return_mailer.refunded_email.subject') %></h1>
|
|
5
|
+
<p class="greeting"><%= Spree.t('return_mailer.refunded_email.dear_customer', name: name_for(@order)) %></p>
|
|
6
|
+
<p><%= Spree.t('return_mailer.refunded_email.instructions', number: @order.number) %></p>
|
|
7
|
+
<% end %>
|
|
8
|
+
|
|
9
|
+
<table class="section" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
|
10
|
+
<tr>
|
|
11
|
+
<td>
|
|
12
|
+
<h3 class="f-fallback"><%= Spree.t('return_mailer.refunded_email.refund_summary') %></h3>
|
|
13
|
+
<p class="strong f-fallback"><%= Spree.t('return_mailer.refunded_email.total_refunded', total: @return.display_refunded_total) %></p>
|
|
14
|
+
</td>
|
|
15
|
+
</tr>
|
|
16
|
+
</table>
|
|
17
|
+
|
|
18
|
+
<%= render 'spree/shared/order_summary_section',
|
|
19
|
+
heading: Spree.t('return_mailer.refunded_email.returned_items'),
|
|
20
|
+
line_items: @return.return_line_items.map(&:line_item),
|
|
21
|
+
order: @order,
|
|
22
|
+
totals: false %>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<%= Spree.t('return_mailer.refunded_email.dear_customer', name: name_for(@order)) %>
|
|
2
|
+
|
|
3
|
+
<%= Spree.t('return_mailer.refunded_email.instructions', number: @order.number) %>
|
|
4
|
+
|
|
5
|
+
============================================================
|
|
6
|
+
<%= Spree.t('return_mailer.refunded_email.refund_summary') %>
|
|
7
|
+
============================================================
|
|
8
|
+
<%= render 'spree/shared/po_number', order: @order %>
|
|
9
|
+
<%= Spree.t('return_mailer.refunded_email.total_refunded', total: @return.display_refunded_total) %>
|
|
10
|
+
|
|
11
|
+
============================================================
|
|
12
|
+
<%= Spree.t('return_mailer.refunded_email.returned_items') %>
|
|
13
|
+
============================================================
|
|
14
|
+
<% @return.return_line_items.each do |line| %>
|
|
15
|
+
<%= line.variant.sku %> <%= line.variant.product.name %> <%= line.variant.options_text %>
|
|
16
|
+
<% end %>
|
|
17
|
+
============================================================
|
|
18
|
+
|
|
19
|
+
<%= Spree.t('return_mailer.refunded_email.thanks') %>
|
|
20
|
+
<%= Spree.t('return_mailer.refunded_email.store_team', store_name: current_store.name) %>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<%= render layout: 'spree/shared/mailer_hero' do %>
|
|
2
|
+
<h1><%= Spree.t('seller_mailer.approved_email.heading') %></h1>
|
|
3
|
+
<p class="greeting"><%= Spree.t('seller_mailer.greeting', seller_name: @seller.name) %></p>
|
|
4
|
+
<p><%= Spree.t('seller_mailer.approved_email.message', store_name: current_store.name) %></p>
|
|
5
|
+
<% if @dashboard_url %>
|
|
6
|
+
<%= render 'spree/shared/mailer_button', url: @dashboard_url, label: Spree.t('seller_mailer.approved_email.action') %>
|
|
7
|
+
<% end %>
|
|
8
|
+
<% end %>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<%= Spree.t('seller_mailer.greeting', seller_name: @seller.name) %>
|
|
2
|
+
|
|
3
|
+
<%= Spree.t('seller_mailer.approved_email.message', store_name: current_store.name) %>
|
|
4
|
+
<% if @dashboard_url %>
|
|
5
|
+
<%= Spree.t('seller_mailer.approved_email.action') %>: <%= @dashboard_url %>
|
|
6
|
+
<% end %>
|
|
7
|
+
|
|
8
|
+
<%= Spree.t('order_mailer.store_team', store_name: current_store.name) %>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<%= render layout: 'spree/shared/mailer_hero' do %>
|
|
2
|
+
<h1><%= Spree.t('seller_mailer.rejected_email.heading') %></h1>
|
|
3
|
+
<p class="greeting"><%= Spree.t('seller_mailer.greeting', seller_name: @seller.name) %></p>
|
|
4
|
+
<p><%= Spree.t('seller_mailer.rejected_email.message', store_name: current_store.name) %></p>
|
|
5
|
+
<p class="sub"><%= Spree.t('seller_mailer.get_in_touch', store_email: current_store.mail_from_address) %></p>
|
|
6
|
+
<% end %>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<%= Spree.t('seller_mailer.greeting', seller_name: @seller.name) %>
|
|
2
|
+
|
|
3
|
+
<%= Spree.t('seller_mailer.rejected_email.message', store_name: current_store.name) %>
|
|
4
|
+
|
|
5
|
+
<%= Spree.t('seller_mailer.get_in_touch', store_email: current_store.mail_from_address) %>
|
|
6
|
+
|
|
7
|
+
<%= Spree.t('order_mailer.store_team', store_name: current_store.name) %>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<%= render layout: 'spree/shared/mailer_hero' do %>
|
|
2
|
+
<h1><%= Spree.t('seller_mailer.suspended_email.heading') %></h1>
|
|
3
|
+
<p class="greeting"><%= Spree.t('seller_mailer.greeting', seller_name: @seller.name) %></p>
|
|
4
|
+
<p><%= Spree.t('seller_mailer.suspended_email.message', store_name: current_store.name) %></p>
|
|
5
|
+
<p class="sub"><%= Spree.t('seller_mailer.get_in_touch', store_email: current_store.mail_from_address) %></p>
|
|
6
|
+
<% end %>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<%= Spree.t('seller_mailer.greeting', seller_name: @seller.name) %>
|
|
2
|
+
|
|
3
|
+
<%= Spree.t('seller_mailer.suspended_email.message', store_name: current_store.name) %>
|
|
4
|
+
|
|
5
|
+
<%= Spree.t('seller_mailer.get_in_touch', store_email: current_store.mail_from_address) %>
|
|
6
|
+
|
|
7
|
+
<%= Spree.t('order_mailer.store_team', store_name: current_store.name) %>
|
|
@@ -3,5 +3,16 @@
|
|
|
3
3
|
<% if image.present? && image.attached? %>
|
|
4
4
|
<%= link_to spree_image_tag(image, variant: :small, alt: alt, width: 80, class: 'item_thumb'), product_url %>
|
|
5
5
|
<% else %>
|
|
6
|
-
|
|
6
|
+
<%# Table + inline styles, not a styled div: Outlook collapses empty block
|
|
7
|
+
elements and ignores class-based height, and a div inside <a> is invalid
|
|
8
|
+
under the XHTML doctype the mailer layout declares. %>
|
|
9
|
+
<table class="item_thumb_placeholder" width="80" height="80" cellpadding="0" cellspacing="0" role="presentation"
|
|
10
|
+
style="width: 80px; height: 80px; background-color: #E4E4E4; border-radius: 12px;">
|
|
11
|
+
<tr>
|
|
12
|
+
<td width="80" height="80" style="width: 80px; height: 80px; line-height: 80px; font-size: 0;">
|
|
13
|
+
<%= link_to ' '.html_safe, product_url, 'aria-label': alt,
|
|
14
|
+
style: 'display: block; width: 80px; height: 80px; line-height: 80px; text-decoration: none;' %>
|
|
15
|
+
</td>
|
|
16
|
+
</tr>
|
|
17
|
+
</table>
|
|
7
18
|
<% end %>
|
|
@@ -6,6 +6,11 @@
|
|
|
6
6
|
<tr>
|
|
7
7
|
<td>
|
|
8
8
|
<h3 class="f-fallback"><%= heading %></h3>
|
|
9
|
+
<%# The buyer's own purchase-order reference, when they gave one — it is
|
|
10
|
+
how their accounting reconciles this order. %>
|
|
11
|
+
<% if order.po_number.present? %>
|
|
12
|
+
<p class="f-fallback"><%= Spree.t('order_mailer.po_number', number: order.po_number) %></p>
|
|
13
|
+
<% end %>
|
|
9
14
|
<%= render 'spree/shared/purchased_items_table',
|
|
10
15
|
line_items: line_items,
|
|
11
16
|
order: order,
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<%# The buyer's own purchase-order reference, when they gave one. Rendered by
|
|
2
|
+
every order-facing document so their accounting can reconcile against it.
|
|
3
|
+
Locals: order. %>
|
|
4
|
+
<% if order.po_number.present? %>
|
|
5
|
+
<%= Spree.t('order_mailer.po_number', number: order.po_number) %>
|
|
6
|
+
<% end %>
|
|
@@ -3,15 +3,13 @@
|
|
|
3
3
|
<% if local_assigns.fetch(:totals, true) %>
|
|
4
4
|
<table class="summary purchase_content" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
|
5
5
|
<%= render 'spree/shared/purchased_items_table/subtotal', order: order %>
|
|
6
|
-
<%
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
value: Spree::Money.new(adjustments.sum(&:amount), currency: order.currency) %>
|
|
12
|
-
<% end %>
|
|
6
|
+
<% order.discounts.promotion.to_a.group_by(&:label).each do |label, discounts| %>
|
|
7
|
+
<%= render 'spree/shared/purchased_items_table/summary_row',
|
|
8
|
+
label: Spree.t(:promotion),
|
|
9
|
+
sub: label,
|
|
10
|
+
value: Spree::Money.new(discounts.sum(&:amount), currency: order.currency) %>
|
|
13
11
|
<% end %>
|
|
14
|
-
<% order.
|
|
12
|
+
<% order.fulfillments.group_by { |f| f.selected_delivery_rate&.name }.each do |name, shipments| %>
|
|
15
13
|
<%= render 'spree/shared/purchased_items_table/summary_row',
|
|
16
14
|
label: Spree.t(:shipping),
|
|
17
15
|
sub: name,
|
|
@@ -27,9 +25,16 @@
|
|
|
27
25
|
label: Spree.t(:gift_card),
|
|
28
26
|
value: safe_join(['-', order.display_gift_card_total.to_html]) %>
|
|
29
27
|
<% end %>
|
|
30
|
-
<% order.
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
<% order.discounts.manual.to_a.group_by(&:label).each do |label, discounts| %>
|
|
29
|
+
<%= render 'spree/shared/purchased_items_table/summary_row',
|
|
30
|
+
label: label,
|
|
31
|
+
value: Spree::Money.new(discounts.sum(&:amount), currency: order.currency) %>
|
|
32
|
+
<% end %>
|
|
33
|
+
<% order.fees.each do |fee| %>
|
|
34
|
+
<% next if fee.amount == 0 %>
|
|
35
|
+
<%= render 'spree/shared/purchased_items_table/summary_row',
|
|
36
|
+
label: fee.label,
|
|
37
|
+
value: Spree::Money.new(fee.amount, currency: order.currency) %>
|
|
33
38
|
<% end %>
|
|
34
39
|
<%= render 'spree/shared/purchased_items_table/total', order: order %>
|
|
35
40
|
</table>
|
|
@@ -3,15 +3,11 @@
|
|
|
3
3
|
<% end %>
|
|
4
4
|
============================================================
|
|
5
5
|
<%= Spree.t('order_mailer.subtotal') %> <%= order.display_item_total %>
|
|
6
|
-
<%
|
|
7
|
-
|
|
8
|
-
<% order.all_adjustments.promotion.eligible.group_by(&:label).each do |label, adjustments| %>
|
|
9
|
-
<%= Spree.t(:promotion) %>: <%= label %> <%= Spree::Money.new(adjustments.sum(&:amount), currency: order.currency) %>
|
|
10
|
-
<% end %>
|
|
11
|
-
<% end %>
|
|
6
|
+
<% order.discounts.promotion.to_a.group_by(&:label).each do |label, discounts| %>
|
|
7
|
+
<%= Spree.t(:promotion) %>: <%= label %> <%= Spree::Money.new(discounts.sum(&:amount), currency: order.currency) %>
|
|
12
8
|
<% end %>
|
|
13
9
|
|
|
14
|
-
<% order.
|
|
10
|
+
<% order.fulfillments.group_by { |f| f.selected_delivery_rate.try(:name) }.each do |name, shipments| %>
|
|
15
11
|
<%= Spree.t(:shipping) %>: <%= name %> <%= Spree::Money.new(shipments.sum(&:discounted_cost), currency: order.currency) %>
|
|
16
12
|
<% end %>
|
|
17
13
|
|
|
@@ -23,7 +19,10 @@
|
|
|
23
19
|
<%= Spree.t(:gift_card) %>: -<%= order.display_gift_card_total.to_html %>
|
|
24
20
|
<% end %>
|
|
25
21
|
|
|
26
|
-
<% order.
|
|
27
|
-
|
|
28
|
-
|
|
22
|
+
<% order.discounts.manual.to_a.group_by(&:label).each do |label, discounts| %>
|
|
23
|
+
<%= label %> <%= Spree::Money.new(discounts.sum(&:amount), currency: order.currency) %>
|
|
24
|
+
<% end %>
|
|
25
|
+
<% order.fees.each do |fee| %>
|
|
26
|
+
<% next if fee.amount == 0 %>
|
|
27
|
+
<%= fee.label %> <%= fee.display_amount %>
|
|
29
28
|
<% end %>
|
data/lib/spree/emails/engine.rb
CHANGED
|
@@ -21,10 +21,11 @@ module Spree
|
|
|
21
21
|
config.after_initialize do
|
|
22
22
|
Spree.subscribers.concat [
|
|
23
23
|
Spree::OrderEmailSubscriber,
|
|
24
|
-
Spree::
|
|
25
|
-
Spree::
|
|
24
|
+
Spree::FulfillmentEmailSubscriber,
|
|
25
|
+
Spree::ReturnEmailSubscriber,
|
|
26
26
|
Spree::NewsletterSubscriberEmailSubscriber,
|
|
27
|
-
Spree::CustomerEmailSubscriber
|
|
27
|
+
Spree::CustomerEmailSubscriber,
|
|
28
|
+
Spree::SellerEmailSubscriber
|
|
28
29
|
]
|
|
29
30
|
end
|
|
30
31
|
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
require 'spree/core/previews/preview_data'
|
|
2
|
+
|
|
3
|
+
# Preview Spree fulfillment emails at /rails/mailers/spree/fulfillment
|
|
4
|
+
class Spree::FulfillmentPreview < ActionMailer::Preview
|
|
5
|
+
include Spree::PreviewData::LocaleParam
|
|
6
|
+
|
|
7
|
+
def fulfilled_email
|
|
8
|
+
fulfillment = Spree::Fulfillment.fulfilled.last
|
|
9
|
+
fulfillment.order.locale = locale if fulfillment && locale.present?
|
|
10
|
+
Spree::FulfillmentMailer.fulfilled_email(fulfillment)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
require 'spree/core/previews/preview_data'
|
|
2
|
+
|
|
3
|
+
# Preview Spree return emails at /rails/mailers/spree/return
|
|
4
|
+
class Spree::ReturnPreview < ActionMailer::Preview
|
|
5
|
+
include Spree::PreviewData::LocaleParam
|
|
6
|
+
|
|
7
|
+
def refunded_email
|
|
8
|
+
return_record = Spree::Return.refunded.last
|
|
9
|
+
return_record.order.locale = locale if return_record && locale.present?
|
|
10
|
+
Spree::ReturnMailer.refunded_email(return_record)
|
|
11
|
+
end
|
|
12
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: spree_emails
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 6.0.0.beta1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sean Schofield
|
|
@@ -10,22 +10,22 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2026-
|
|
13
|
+
date: 2026-09-15 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: spree
|
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
|
18
18
|
requirements:
|
|
19
|
-
- -
|
|
19
|
+
- - '='
|
|
20
20
|
- !ruby/object:Gem::Version
|
|
21
|
-
version:
|
|
21
|
+
version: 6.0.0.beta1
|
|
22
22
|
type: :runtime
|
|
23
23
|
prerelease: false
|
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
25
25
|
requirements:
|
|
26
|
-
- -
|
|
26
|
+
- - '='
|
|
27
27
|
- !ruby/object:Gem::Version
|
|
28
|
-
version:
|
|
28
|
+
version: 6.0.0.beta1
|
|
29
29
|
- !ruby/object:Gem::Dependency
|
|
30
30
|
name: email_spec
|
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -41,35 +41,47 @@ dependencies:
|
|
|
41
41
|
- !ruby/object:Gem::Version
|
|
42
42
|
version: '2.2'
|
|
43
43
|
description: Optional transactional emails for Spree such as Order placed or Shipment
|
|
44
|
-
notification emails
|
|
44
|
+
notification emails. Fully responsive and mobile ready
|
|
45
45
|
email: hello@spreecommerce.org
|
|
46
46
|
executables: []
|
|
47
47
|
extensions: []
|
|
48
48
|
extra_rdoc_files: []
|
|
49
49
|
files:
|
|
50
|
+
- LICENSE
|
|
50
51
|
- README.md
|
|
51
52
|
- Rakefile
|
|
52
|
-
- app/
|
|
53
|
-
- app/
|
|
54
|
-
- app/
|
|
55
|
-
- app/assets/images/noimage/noimage/large.png
|
|
56
|
-
- app/assets/images/noimage/noimage/mini.png
|
|
57
|
-
- app/assets/images/noimage/noimage/product.png
|
|
58
|
-
- app/assets/images/noimage/noimage/small.png
|
|
59
|
-
- app/assets/images/noimage/small.png
|
|
53
|
+
- app/helpers/spree/base_helper.rb
|
|
54
|
+
- app/helpers/spree/digital_asset_helper.rb
|
|
55
|
+
- app/helpers/spree/fulfillment_helper.rb
|
|
60
56
|
- app/helpers/spree/mail_helper.rb
|
|
57
|
+
- app/mailers/spree/company_mailer.rb
|
|
61
58
|
- app/mailers/spree/customer_mailer.rb
|
|
59
|
+
- app/mailers/spree/digital_asset_mailer.rb
|
|
60
|
+
- app/mailers/spree/fulfillment_mailer.rb
|
|
62
61
|
- app/mailers/spree/newsletter_mailer.rb
|
|
63
62
|
- app/mailers/spree/order_mailer.rb
|
|
64
|
-
- app/mailers/spree/
|
|
63
|
+
- app/mailers/spree/return_mailer.rb
|
|
64
|
+
- app/mailers/spree/seller_mailer.rb
|
|
65
65
|
- app/mailers/spree/shipment_mailer.rb
|
|
66
|
+
- app/subscribers/spree/company_email_subscriber.rb
|
|
66
67
|
- app/subscribers/spree/customer_email_subscriber.rb
|
|
68
|
+
- app/subscribers/spree/data_request_email_subscriber.rb
|
|
69
|
+
- app/subscribers/spree/digital_asset_email_subscriber.rb
|
|
70
|
+
- app/subscribers/spree/fulfillment_email_subscriber.rb
|
|
67
71
|
- app/subscribers/spree/newsletter_subscriber_email_subscriber.rb
|
|
68
72
|
- app/subscribers/spree/order_email_subscriber.rb
|
|
69
|
-
- app/subscribers/spree/
|
|
70
|
-
- app/subscribers/spree/
|
|
73
|
+
- app/subscribers/spree/return_email_subscriber.rb
|
|
74
|
+
- app/subscribers/spree/seller_email_subscriber.rb
|
|
75
|
+
- app/views/spree/company_mailer/invitation_email.html.erb
|
|
76
|
+
- app/views/spree/company_mailer/invitation_email.text.erb
|
|
77
|
+
- app/views/spree/customer_mailer/data_export_email.html.erb
|
|
78
|
+
- app/views/spree/customer_mailer/data_export_email.text.erb
|
|
71
79
|
- app/views/spree/customer_mailer/password_reset_email.html.erb
|
|
72
80
|
- app/views/spree/customer_mailer/password_reset_email.text.erb
|
|
81
|
+
- app/views/spree/digital_asset_mailer/files_ready_email.html.erb
|
|
82
|
+
- app/views/spree/digital_asset_mailer/files_ready_email.text.erb
|
|
83
|
+
- app/views/spree/fulfillment_mailer/fulfilled_email.html.erb
|
|
84
|
+
- app/views/spree/fulfillment_mailer/fulfilled_email.text.erb
|
|
73
85
|
- app/views/spree/newsletter_mailer/email_confirmation.html.erb
|
|
74
86
|
- app/views/spree/newsletter_mailer/email_confirmation.text.erb
|
|
75
87
|
- app/views/spree/order_mailer/cancel_email.html.erb
|
|
@@ -79,37 +91,40 @@ files:
|
|
|
79
91
|
- app/views/spree/order_mailer/payment_link_email.html.erb
|
|
80
92
|
- app/views/spree/order_mailer/store_owner_notification_email.html.erb
|
|
81
93
|
- app/views/spree/order_mailer/store_owner_notification_email.text.erb
|
|
82
|
-
- app/views/spree/
|
|
83
|
-
- app/views/spree/
|
|
94
|
+
- app/views/spree/return_mailer/refunded_email.html.erb
|
|
95
|
+
- app/views/spree/return_mailer/refunded_email.text.erb
|
|
96
|
+
- app/views/spree/seller_mailer/approved_email.html.erb
|
|
97
|
+
- app/views/spree/seller_mailer/approved_email.text.erb
|
|
98
|
+
- app/views/spree/seller_mailer/rejected_email.html.erb
|
|
99
|
+
- app/views/spree/seller_mailer/rejected_email.text.erb
|
|
100
|
+
- app/views/spree/seller_mailer/suspended_email.html.erb
|
|
101
|
+
- app/views/spree/seller_mailer/suspended_email.text.erb
|
|
84
102
|
- app/views/spree/shared/_item_thumbnail_link.html.erb
|
|
85
103
|
- app/views/spree/shared/_order_summary_section.html.erb
|
|
104
|
+
- app/views/spree/shared/_po_number.text.erb
|
|
86
105
|
- app/views/spree/shared/_purchased_items_table.html.erb
|
|
87
106
|
- app/views/spree/shared/_purchased_items_table.text.erb
|
|
88
|
-
- app/views/spree/shared/purchased_items_table/_adjustment.html.erb
|
|
89
107
|
- app/views/spree/shared/purchased_items_table/_line_item.html.erb
|
|
90
108
|
- app/views/spree/shared/purchased_items_table/_subtotal.html.erb
|
|
91
109
|
- app/views/spree/shared/purchased_items_table/_summary_row.html.erb
|
|
92
110
|
- app/views/spree/shared/purchased_items_table/_total.html.erb
|
|
93
|
-
- app/views/spree/shipment_mailer/shipped_email.html.erb
|
|
94
|
-
- app/views/spree/shipment_mailer/shipped_email.text.erb
|
|
95
|
-
- config/initializers/assets.rb
|
|
96
111
|
- lib/generators/spree/emails/install/install_generator.rb
|
|
97
112
|
- lib/spree/emails.rb
|
|
98
113
|
- lib/spree/emails/engine.rb
|
|
99
114
|
- lib/spree/emails/previews/customer_preview.rb
|
|
115
|
+
- lib/spree/emails/previews/fulfillment_preview.rb
|
|
100
116
|
- lib/spree/emails/previews/newsletter_preview.rb
|
|
101
117
|
- lib/spree/emails/previews/order_preview.rb
|
|
102
|
-
- lib/spree/emails/previews/
|
|
103
|
-
- lib/spree/emails/previews/shipment_preview.rb
|
|
118
|
+
- lib/spree/emails/previews/return_preview.rb
|
|
104
119
|
- lib/spree_emails.rb
|
|
105
120
|
homepage: https://spreecommerce.org
|
|
106
121
|
licenses:
|
|
107
122
|
- BSD-3-Clause
|
|
108
123
|
metadata:
|
|
109
124
|
bug_tracker_uri: https://github.com/spree/spree/issues
|
|
110
|
-
changelog_uri: https://github.com/spree/spree/releases/tag/
|
|
125
|
+
changelog_uri: https://github.com/spree/spree/releases/tag/v6.0.0.beta1
|
|
111
126
|
documentation_uri: https://docs.spreecommerce.org/
|
|
112
|
-
source_code_uri: https://github.com/spree/spree/tree/
|
|
127
|
+
source_code_uri: https://github.com/spree/spree/tree/v6.0.0.beta1
|
|
113
128
|
post_install_message:
|
|
114
129
|
rdoc_options: []
|
|
115
130
|
require_paths:
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//= link_tree ../images
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
module Spree
|
|
2
|
-
class ReimbursementMailer < BaseMailer
|
|
3
|
-
helper Spree::MailHelper
|
|
4
|
-
|
|
5
|
-
def reimbursement_email(reimbursement, resend = false)
|
|
6
|
-
@reimbursement = reimbursement.respond_to?(:id) ? reimbursement : Spree::Reimbursement.find(reimbursement)
|
|
7
|
-
@order = @reimbursement.order
|
|
8
|
-
current_store = @reimbursement.store || Spree::Store.default
|
|
9
|
-
with_store_locale(current_store, @order.locale) do
|
|
10
|
-
subject = order_email_subject(current_store, Spree.t('reimbursement_mailer.reimbursement_email.subject'), @order.number, resend: resend)
|
|
11
|
-
mail(to: @order.email, subject: subject, store_url: current_store.storefront_url)
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Spree
|
|
4
|
-
class ReimbursementEmailSubscriber < Spree::Subscriber
|
|
5
|
-
subscribes_to 'reimbursement.reimbursed'
|
|
6
|
-
|
|
7
|
-
def handle(event)
|
|
8
|
-
reimbursement = find_reimbursement(event)
|
|
9
|
-
return unless reimbursement
|
|
10
|
-
|
|
11
|
-
store = reimbursement.store
|
|
12
|
-
return unless store.prefers_send_consumer_transactional_emails?
|
|
13
|
-
|
|
14
|
-
ReimbursementMailer.reimbursement_email(reimbursement.id).deliver_later
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
private
|
|
18
|
-
|
|
19
|
-
def find_reimbursement(event)
|
|
20
|
-
reimbursement_id = event.payload['id']
|
|
21
|
-
Spree::Reimbursement.find_by_prefix_id(reimbursement_id)
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Spree
|
|
4
|
-
class ShipmentEmailSubscriber < Spree::Subscriber
|
|
5
|
-
subscribes_to 'shipment.shipped'
|
|
6
|
-
|
|
7
|
-
def handle(event)
|
|
8
|
-
shipment = find_shipment(event)
|
|
9
|
-
return unless shipment
|
|
10
|
-
|
|
11
|
-
store = shipment.store
|
|
12
|
-
return unless store.prefers_send_consumer_transactional_emails?
|
|
13
|
-
|
|
14
|
-
ShipmentMailer.shipped_email(shipment.id).deliver_later
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
private
|
|
18
|
-
|
|
19
|
-
def find_shipment(event)
|
|
20
|
-
shipment_id = event.payload['id']
|
|
21
|
-
Spree::Shipment.find_by_prefix_id(shipment_id)
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|