spree_emails 4.3.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +5 -0
- data/LICENSE +26 -0
- data/Rakefile +15 -0
- data/app/assets/config/spree_emails_manifest.js +1 -0
- 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/helpers/spree/mail_helper.rb +34 -0
- data/app/mailers/spree/base_mailer.rb +46 -0
- data/app/mailers/spree/order_mailer.rb +26 -0
- data/app/mailers/spree/reimbursement_mailer.rb +12 -0
- data/app/mailers/spree/shipment_mailer.rb +12 -0
- data/app/mailers/spree/test_mailer.rb +8 -0
- data/app/models/spree/emails/order_decorator.rb +28 -0
- data/app/models/spree/emails/reimbursement_decorator.rb +11 -0
- data/app/models/spree/emails/shipment_handler_decorator.rb +13 -0
- data/app/views/layouts/spree/base_mailer.html.erb +46 -0
- data/app/views/spree/order_mailer/cancel_email.html.erb +24 -0
- data/app/views/spree/order_mailer/cancel_email.text.erb +12 -0
- data/app/views/spree/order_mailer/confirm_email.html.erb +23 -0
- data/app/views/spree/order_mailer/confirm_email.text.erb +12 -0
- data/app/views/spree/order_mailer/store_owner_notification_email.html.erb +23 -0
- data/app/views/spree/order_mailer/store_owner_notification_email.text.erb +12 -0
- data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +48 -0
- data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +24 -0
- data/app/views/spree/shared/_base_mailer_footer.html.erb +12 -0
- data/app/views/spree/shared/_base_mailer_header.html.erb +8 -0
- data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +456 -0
- data/app/views/spree/shared/_mailer_line_item.html.erb +12 -0
- data/app/views/spree/shared/_purchased_items_table.html.erb +64 -0
- data/app/views/spree/shared/purchased_items_table/_adjustment.html.erb +13 -0
- data/app/views/spree/shared/purchased_items_table/_line_item.html.erb +19 -0
- data/app/views/spree/shared/purchased_items_table/_subtotal.html.erb +13 -0
- data/app/views/spree/shared/purchased_items_table/_total.html.erb +13 -0
- data/app/views/spree/shipment_mailer/shipped_email.html.erb +36 -0
- data/app/views/spree/shipment_mailer/shipped_email.text.erb +17 -0
- data/app/views/spree/test_mailer/test_email.html.erb +40 -0
- data/app/views/spree/test_mailer/test_email.text.erb +4 -0
- data/config/initializers/assets.rb +1 -0
- data/lib/generators/spree/emails/install/install_generator.rb +27 -0
- data/lib/generators/spree/emails/install/templates/mailers/previews/order_preview.rb +13 -0
- data/lib/generators/spree/emails/install/templates/mailers/previews/reimbursement_preview.rb +5 -0
- data/lib/generators/spree/emails/install/templates/mailers/previews/shipment_preview.rb +5 -0
- data/lib/generators/spree/emails/install/templates/mailers/previews/user_preview.rb +11 -0
- data/lib/spree/emails.rb +12 -0
- data/lib/spree/emails/engine.rb +18 -0
- data/lib/spree_emails.rb +1 -0
- data/lib/tasks/email.rake +10 -0
- data/script/rails +9 -0
- data/spree_emails.gemspec +34 -0
- metadata +158 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 2d8ffc8031b0c951950125c2f3aefeea1935083cd3cfefed6b7967c5db9d4af6
|
4
|
+
data.tar.gz: a2dcc1259ab714411bb1784cb4e959bb6009f422b8f753ed459c11e321394db3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 20c78dc6b9e58336817835c428bb17d6a2be1f1e694324f8b705d409b38867ee2f316038cb155cb20235e7c2c01246982b1d5363714629d07b83157a9fc328ab
|
7
|
+
data.tar.gz: c558ef5582a59dc7c8a93bdafd214496770477cf41146de69b1a86980dceedff0d00796225432356fa691480f97ea5c02e36a5451ae3e3e02ef8df0499fd36a4
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
Copyright (c) 2007-2021, Spree Commerce, Inc., Spark Solutions Sp. z o.o. and other contributors
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
Redistribution and use in source and binary forms, with or without modification,
|
5
|
+
are permitted provided that the following conditions are met:
|
6
|
+
|
7
|
+
* Redistributions of source code must retain the above copyright notice,
|
8
|
+
this list of conditions and the following disclaimer.
|
9
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
10
|
+
this list of conditions and the following disclaimer in the documentation
|
11
|
+
and/or other materials provided with the distribution.
|
12
|
+
* Neither the name Spree nor the names of its contributors may be used to
|
13
|
+
endorse or promote products derived from this software without specific
|
14
|
+
prior written permission.
|
15
|
+
|
16
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
17
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
18
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
19
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
20
|
+
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
21
|
+
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
22
|
+
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
23
|
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
24
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
25
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
26
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/testtask'
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
require 'spree/testing_support/common_rake'
|
6
|
+
|
7
|
+
RSpec::Core::RakeTask.new
|
8
|
+
|
9
|
+
task default: :spec
|
10
|
+
|
11
|
+
desc "Generates a dummy app for testing"
|
12
|
+
task :test_app do
|
13
|
+
ENV['LIB_NAME'] = 'spree/emails'
|
14
|
+
Rake::Task['common:test_app'].invoke
|
15
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
//= link_tree ../images
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Spree
|
2
|
+
module MailHelper
|
3
|
+
include BaseHelper
|
4
|
+
|
5
|
+
def variant_image_url(variant)
|
6
|
+
image = default_image_for_product_or_variant(variant)
|
7
|
+
image ? main_app.url_for(image.url(:small)) : 'noimage/small.png'
|
8
|
+
end
|
9
|
+
|
10
|
+
def name_for(order)
|
11
|
+
order.name || Spree.t('customer')
|
12
|
+
end
|
13
|
+
|
14
|
+
def store_logo
|
15
|
+
@store_logo ||= current_store&.mailer_logo || current_store&.logo
|
16
|
+
end
|
17
|
+
|
18
|
+
def default_logo
|
19
|
+
ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
|
20
|
+
`MailHelper#default_logo` is deprecated and will be removed in Spree 5.0.
|
21
|
+
Please upload a Store logo instead
|
22
|
+
DEPRECATION
|
23
|
+
|
24
|
+
Spree::Config.mailer_logo || Spree::Config.logo
|
25
|
+
end
|
26
|
+
|
27
|
+
def logo_path
|
28
|
+
return default_logo unless store_logo.attached?
|
29
|
+
return main_app.url_for(store_logo.variant(resize: '244x104>')) if store_logo.variable?
|
30
|
+
|
31
|
+
return main_app.url_for(store_logo) if store_logo.image?
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Spree
|
2
|
+
class BaseMailer < ActionMailer::Base
|
3
|
+
helper Spree::MailHelper
|
4
|
+
|
5
|
+
def current_store
|
6
|
+
@current_store ||= @order&.store.presence || Spree::Dependencies.current_store_finder.constantize.new.execute
|
7
|
+
end
|
8
|
+
helper_method :current_store
|
9
|
+
|
10
|
+
def from_address
|
11
|
+
current_store.mail_from_address
|
12
|
+
end
|
13
|
+
|
14
|
+
def money(amount, currency = nil)
|
15
|
+
currency ||= current_store.default_currency
|
16
|
+
Spree::Money.new(amount, currency: currency).to_s
|
17
|
+
end
|
18
|
+
helper_method :money
|
19
|
+
|
20
|
+
def frontend_available?
|
21
|
+
Spree::Core::Engine.frontend_available?
|
22
|
+
end
|
23
|
+
helper_method :frontend_available?
|
24
|
+
|
25
|
+
def mail(headers = {}, &block)
|
26
|
+
ensure_default_action_mailer_url_host(headers[:store_url])
|
27
|
+
set_email_locale
|
28
|
+
super if Spree::Config[:send_core_emails]
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
# this ensures that ActionMailer::Base.default_url_options[:host] is always set
|
34
|
+
# this is only a fail-safe solution if developer didn't set this in environment files
|
35
|
+
# http://guides.rubyonrails.org/action_mailer_basics.html#generating-urls-in-action-mailer-views
|
36
|
+
def ensure_default_action_mailer_url_host(store_url = nil)
|
37
|
+
ActionMailer::Base.default_url_options ||= {}
|
38
|
+
ActionMailer::Base.default_url_options[:host] ||= store_url || current_store.url
|
39
|
+
end
|
40
|
+
|
41
|
+
def set_email_locale
|
42
|
+
locale = @order&.store&.default_locale || current_store&.default_locale
|
43
|
+
I18n.locale = locale if locale.present?
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Spree
|
2
|
+
class OrderMailer < BaseMailer
|
3
|
+
def confirm_email(order, resend = false)
|
4
|
+
@order = order.respond_to?(:id) ? order : Spree::Order.find(order)
|
5
|
+
current_store = @order.store
|
6
|
+
subject = (resend ? "[#{Spree.t(:resend).upcase}] " : '')
|
7
|
+
subject += "#{current_store.name} #{Spree.t('order_mailer.confirm_email.subject')} ##{@order.number}"
|
8
|
+
mail(to: @order.email, from: from_address, subject: subject, store_url: current_store.url)
|
9
|
+
end
|
10
|
+
|
11
|
+
def store_owner_notification_email(order)
|
12
|
+
@order = order.respond_to?(:id) ? order : Spree::Order.find(order)
|
13
|
+
current_store = @order.store
|
14
|
+
subject = Spree.t('order_mailer.store_owner_notification_email.subject', store_name: current_store.name)
|
15
|
+
mail(to: current_store.new_order_notifications_email, from: from_address, subject: subject, store_url: current_store.url)
|
16
|
+
end
|
17
|
+
|
18
|
+
def cancel_email(order, resend = false)
|
19
|
+
@order = order.respond_to?(:id) ? order : Spree::Order.find(order)
|
20
|
+
current_store = @order.store
|
21
|
+
subject = (resend ? "[#{Spree.t(:resend).upcase}] " : '')
|
22
|
+
subject += "#{current_store.name} #{Spree.t('order_mailer.cancel_email.subject')} ##{@order.number}"
|
23
|
+
mail(to: @order.email, from: from_address, subject: subject, store_url: current_store.url)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Spree
|
2
|
+
class ReimbursementMailer < BaseMailer
|
3
|
+
def reimbursement_email(reimbursement, resend = false)
|
4
|
+
@reimbursement = reimbursement.respond_to?(:id) ? reimbursement : Spree::Reimbursement.find(reimbursement)
|
5
|
+
@order = @reimbursement.order
|
6
|
+
current_store = @reimbursement.store || Spree::Store.default
|
7
|
+
subject = (resend ? "[#{Spree.t(:resend).upcase}] " : '')
|
8
|
+
subject += "#{current_store.name} #{Spree.t('reimbursement_mailer.reimbursement_email.subject')} ##{@order.number}"
|
9
|
+
mail(to: @order.email, from: current_store.mail_from_address, subject: subject, store_url: current_store.url)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Spree
|
2
|
+
class ShipmentMailer < BaseMailer
|
3
|
+
def shipped_email(shipment, resend = false)
|
4
|
+
@shipment = shipment.respond_to?(:id) ? shipment : Spree::Shipment.find(shipment)
|
5
|
+
@order = @shipment.order
|
6
|
+
current_store = @shipment.store
|
7
|
+
subject = (resend ? "[#{Spree.t(:resend).upcase}] " : '')
|
8
|
+
subject += "#{current_store.name} #{Spree.t('shipment_mailer.shipped_email.subject')} ##{@order.number}"
|
9
|
+
mail(to: @order.email, from: from_address, subject: subject, store_url: current_store.url)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Spree
|
2
|
+
module Emails
|
3
|
+
module OrderDecorator
|
4
|
+
def deliver_order_confirmation_email
|
5
|
+
OrderMailer.confirm_email(id).deliver_later
|
6
|
+
update_column(:confirmation_delivered, true)
|
7
|
+
end
|
8
|
+
|
9
|
+
# Returns true if:
|
10
|
+
# 1. an email address is set for new order notifications AND
|
11
|
+
# 2. no notification for this order has been sent yet.
|
12
|
+
def deliver_store_owner_order_notification_email?
|
13
|
+
store.new_order_notifications_email.present? && !store_owner_notification_delivered?
|
14
|
+
end
|
15
|
+
|
16
|
+
def deliver_store_owner_order_notification_email
|
17
|
+
OrderMailer.store_owner_notification_email(id).deliver_later
|
18
|
+
update_column(:store_owner_notification_delivered, true)
|
19
|
+
end
|
20
|
+
|
21
|
+
def send_cancel_email
|
22
|
+
OrderMailer.cancel_email(id).deliver_later
|
23
|
+
end
|
24
|
+
|
25
|
+
::Spree::Order.prepend(self)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
5
|
+
<meta name="x-apple-disable-message-reformatting"/>
|
6
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
7
|
+
|
8
|
+
<%= render partial: 'spree/shared/base_mailer_stylesheets' %>
|
9
|
+
</head>
|
10
|
+
<body>
|
11
|
+
<table class="email-wrapper" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
12
|
+
<tr>
|
13
|
+
<td align="center">
|
14
|
+
<table class="email-content" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
15
|
+
<%= render partial: 'spree/shared/base_mailer_header' %>
|
16
|
+
<!-- Email Body -->
|
17
|
+
<tr>
|
18
|
+
<td class="email-body" width="570" cellpadding="0" cellspacing="0">
|
19
|
+
<table class="email-body_inner" align="center" width="570" cellpadding="0" cellspacing="0" role="presentation">
|
20
|
+
<!-- Body content -->
|
21
|
+
<tbody>
|
22
|
+
<tr>
|
23
|
+
<td class="content-cell">
|
24
|
+
<div class="f-fallback">
|
25
|
+
<%= yield %>
|
26
|
+
</div>
|
27
|
+
</td>
|
28
|
+
</tr>
|
29
|
+
</tbody>
|
30
|
+
</table>
|
31
|
+
</td>
|
32
|
+
</tr>
|
33
|
+
<tr>
|
34
|
+
<td>
|
35
|
+
<%= render partial: 'spree/shared/base_mailer_footer' %>
|
36
|
+
</td>
|
37
|
+
</tr>
|
38
|
+
</table>
|
39
|
+
</td>
|
40
|
+
</tr>
|
41
|
+
<tr>
|
42
|
+
<td height="60px"> </td>
|
43
|
+
</tr>
|
44
|
+
</table>
|
45
|
+
</body>
|
46
|
+
</html>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<h1>
|
2
|
+
<%= Spree.t('order_mailer.cancel_email.dear_customer', name: name_for(@order)) %>
|
3
|
+
</h1>
|
4
|
+
<p>
|
5
|
+
<%= Spree.t('order_mailer.cancel_email.instructions') %>
|
6
|
+
</p>
|
7
|
+
|
8
|
+
<table class="purchase" role="presentation">
|
9
|
+
<tr>
|
10
|
+
<td>
|
11
|
+
<h3> <%= Spree.t('order_mailer.cancel_email.order_summary_canceled', number: @order.number) %></h3>
|
12
|
+
</td>
|
13
|
+
</tr>
|
14
|
+
<tr>
|
15
|
+
<td colspan="2">
|
16
|
+
<%= render 'spree/shared/purchased_items_table', line_items: @order.line_items, order: @order %>
|
17
|
+
</td>
|
18
|
+
</tr>
|
19
|
+
</table>
|
20
|
+
<p>
|
21
|
+
<%= Spree.t('order_mailer.cancel_email.thanks') %>
|
22
|
+
<br />
|
23
|
+
<%= Spree.t('order_mailer.store_team', store_name: current_store.name) %>
|
24
|
+
</p>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%= Spree.t('order_mailer.cancel_email.dear_customer', name: name_for(@order)) %>
|
2
|
+
|
3
|
+
<%= Spree.t('order_mailer.cancel_email.instructions') %>
|
4
|
+
|
5
|
+
============================================================
|
6
|
+
<%= Spree.t('order_mailer.cancel_email.order_summary_canceled', number: @order.number) %>
|
7
|
+
============================================================
|
8
|
+
<%= render 'spree/shared/purchased_items_table', line_items: @order.line_items, order: @order %>
|
9
|
+
============================================================
|
10
|
+
<%= Spree.t('order_mailer.total') %> <%= @order.display_total %>
|
11
|
+
<%= Spree.t('order_mailer.cancel_email.thanks') %>
|
12
|
+
<%= Spree.t('order_mailer.store_team', store_name: current_store.name) %>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<h1>
|
2
|
+
<%= Spree.t('order_mailer.confirm_email.dear_customer', name: name_for(@order)) %>
|
3
|
+
</h1>
|
4
|
+
<p>
|
5
|
+
<%= Spree.t('order_mailer.confirm_email.instructions') %>
|
6
|
+
</p>
|
7
|
+
<table class="purchase" role="presentation">
|
8
|
+
<tr>
|
9
|
+
<td>
|
10
|
+
<h3><%= Spree.t('order_mailer.confirm_email.order_summary', number: @order.number) %></h3>
|
11
|
+
</td>
|
12
|
+
</tr>
|
13
|
+
<tr>
|
14
|
+
<td colspan="2">
|
15
|
+
<%= render 'spree/shared/purchased_items_table', line_items: @order.line_items, order: @order %>
|
16
|
+
</td>
|
17
|
+
</tr>
|
18
|
+
</table>
|
19
|
+
<p>
|
20
|
+
<%= Spree.t('order_mailer.confirm_email.thanks') %>
|
21
|
+
<br />
|
22
|
+
<%= Spree.t('order_mailer.store_team', store_name: current_store.name) %>
|
23
|
+
</p>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%= Spree.t('order_mailer.confirm_email.dear_customer', name: name_for(@order)) %>
|
2
|
+
|
3
|
+
<%= Spree.t('order_mailer.confirm_email.instructions') %>
|
4
|
+
|
5
|
+
============================================================
|
6
|
+
<%= Spree.t('order_mailer.confirm_email.order_summary', number: @order.number) %>
|
7
|
+
============================================================
|
8
|
+
<%= render 'spree/shared/purchased_items_table', line_items: @order.line_items, order: @order %>
|
9
|
+
============================================================
|
10
|
+
<%= Spree.t('order_mailer.total') %> <%= @order.display_total %>
|
11
|
+
<%= Spree.t('order_mailer.confirm_email.thanks') %>
|
12
|
+
<%= Spree.t('order_mailer.store_team', store_name: current_store.name) %>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<h1>
|
2
|
+
<%= Spree.t('order_mailer.store_owner_notification_email.heading') %>
|
3
|
+
</h1>
|
4
|
+
<p>
|
5
|
+
<%= Spree.t('order_mailer.store_owner_notification_email.instructions') %>
|
6
|
+
</p>
|
7
|
+
<table class="purchase" role="presentation">
|
8
|
+
<tr>
|
9
|
+
<td>
|
10
|
+
<h3><%= Spree.t('order_mailer.store_owner_notification_email.order_summary', number: @order.number) %></h3>
|
11
|
+
</td>
|
12
|
+
</tr>
|
13
|
+
<tr>
|
14
|
+
<td colspan="2">
|
15
|
+
<%= render 'spree/shared/purchased_items_table', line_items: @order.line_items, order: @order %>
|
16
|
+
</td>
|
17
|
+
</tr>
|
18
|
+
</table>
|
19
|
+
<p>
|
20
|
+
<%= Spree.t('order_mailer.store_owner_notification_email.thanks') %>
|
21
|
+
<br />
|
22
|
+
<%= Spree.t('order_mailer.store_team', store_name: current_store.name) %>
|
23
|
+
</p>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%= Spree.t('order_mailer.store_owner_notification_email.heading') %>
|
2
|
+
|
3
|
+
<%= Spree.t('order_mailer.store_owner_notification_email.instructions') %>
|
4
|
+
|
5
|
+
============================================================
|
6
|
+
<%= Spree.t('order_mailer.store_owner_notification_email.order_summary', number: @order.number) %>
|
7
|
+
============================================================
|
8
|
+
<%= render 'spree/shared/purchased_items_table', line_items: @order.line_items, order: @order %>
|
9
|
+
============================================================
|
10
|
+
<%= Spree.t('order_mailer.total') %> <%= @order.display_total %>
|
11
|
+
<%= Spree.t('order_mailer.store_owner_notification_email.thanks') %>
|
12
|
+
<%= Spree.t('order_mailer.store_team', store_name: current_store.name) %>
|