spree_custom_email 1.0.0
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/LICENSE +673 -0
- data/README.md +27 -0
- data/app/controllers/spree/admin/custom_emails_controller.rb +22 -0
- data/app/helpers/spree/mail_helper_decorator.rb +7 -0
- data/app/helpers/spree/shipment_helper_decorator.rb +15 -0
- data/app/helpers/spree_custom_email/admin/base_helper_decorator.rb +15 -0
- data/app/mailer/spree/order_mailer_decorator.rb +38 -0
- data/app/mailer/spree/reimbursement_mailer_decorator.rb +24 -0
- data/app/mailer/spree/shipment_mailer_decorator.rb +24 -0
- data/app/models/spree/custom_email.rb +48 -0
- data/app/models/spree_custom_email/store_decorator.rb +9 -0
- data/app/overrides/add_custom_emails.rb +10 -0
- data/app/views/spree/admin/custom_emails/_form.html.erb +29 -0
- data/app/views/spree/admin/custom_emails/setting.html.erb +15 -0
- data/app/views/spree/admin/shared/sidebar/_custom_emails_menu.html.erb +8 -0
- data/app/views/spree/order_mailer/cancel_email.html.erb +33 -0
- data/app/views/spree/order_mailer/cancel_email.text.erb +23 -0
- data/app/views/spree/order_mailer/confirm_email.html.erb +80 -0
- data/app/views/spree/order_mailer/confirm_email.text.erb +48 -0
- data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +58 -0
- data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +36 -0
- data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +497 -0
- data/app/views/spree/shared/purchased_items_table/_line_item.html.erb +28 -0
- data/app/views/spree/shipment_mailer/shipped_email.html.erb +73 -0
- data/app/views/spree/shipment_mailer/shipped_email.text.erb +33 -0
- data/config/initializers/admin_navigation.rb +17 -0
- data/config/locales/en.yml +16 -0
- data/config/locales/ja.yml +16 -0
- data/config/routes.rb +9 -0
- data/db/migrate/20250306091041_add_table_spree_custom_emails.rb +32 -0
- data/lib/generators/spree_custom_email/install/install_generator.rb +20 -0
- data/lib/spree_custom_email/engine.rb +20 -0
- data/lib/spree_custom_email/version.rb +7 -0
- data/lib/spree_custom_email.rb +4 -0
- metadata +119 -0
data/README.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# spree_custom_email
|
|
2
|
+
|
|
3
|
+
Customize Spree’s transactional emails—subjects, headers and footers—for order confirmations, shipping notices, and more.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
1. In your Gemfile:
|
|
8
|
+
```ruby
|
|
9
|
+
gem 'spree_custom_email', path: 'engines/spree_custom_email'
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Run the following commands:
|
|
13
|
+
|
|
14
|
+
```sh
|
|
15
|
+
bundle install
|
|
16
|
+
rails g spree_custom_email:install
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Features
|
|
20
|
+
|
|
21
|
+
- Custom Subjects
|
|
22
|
+
- Custom Header/Footer
|
|
23
|
+
- Per‑Store: Different templates and subjects per store.
|
|
24
|
+
|
|
25
|
+
## Licence
|
|
26
|
+
|
|
27
|
+
AGPL-3.0-or-later. See [LICENSE](LICENSE).
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Admin
|
|
3
|
+
class CustomEmailsController < ResourceController
|
|
4
|
+
# Spree 5.2 の設定エリア扱いにする(設定サイドバー+設定レイアウトを使う)。
|
|
5
|
+
include Spree::Admin::SettingsConcern
|
|
6
|
+
|
|
7
|
+
def setting
|
|
8
|
+
@custom_emails = current_store.custom_emails
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
private
|
|
12
|
+
|
|
13
|
+
def location_after_save
|
|
14
|
+
setting_admin_custom_emails_url
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def permitted_resource_params
|
|
18
|
+
params.require(:custom_email).permit(:subject, :header, :footer)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module ShipmentHelperDecorator
|
|
3
|
+
def tracking_url_for_shipment(shipment)
|
|
4
|
+
if shipment.tracking&.match?(/\Ahttps?:\/\//)
|
|
5
|
+
shipment.tracking
|
|
6
|
+
elsif shipment.shipping_method&.tracking_url.present?
|
|
7
|
+
shipment.tracking_url
|
|
8
|
+
else
|
|
9
|
+
nil
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
Spree::BaseHelper.prepend(Spree::ShipmentHelperDecorator)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module SpreeCustomEmail
|
|
2
|
+
module Admin
|
|
3
|
+
module BaseHelperDecorator
|
|
4
|
+
# @gem-override spree_admin-5.3.6/app/helpers/spree/admin/base_helper.rb#settings_active?
|
|
5
|
+
# @see https://github.com/be-agile/giga-repeat/commit/27ad550f76d381992f038b6d1c52270e2d9e78e4
|
|
6
|
+
# カスタムメール(custom_emails)管理画面でも設定メニューをアクティブ表示にする。
|
|
7
|
+
# Spree 5.3 追従: 本家変更(deprecation 文言)は super 経由で取り込まれるため本体は無変更。
|
|
8
|
+
def settings_active?
|
|
9
|
+
super || %w[custom_emails].include?(controller_name)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
Spree::Admin::BaseHelper.prepend SpreeCustomEmail::Admin::BaseHelperDecorator
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module OrderMailerDecorator
|
|
3
|
+
# @gem-override spree_emails-5.3.6/app/mailers/spree/order_mailer.rb#confirm_email
|
|
4
|
+
# @see https://github.com/be-agile/giga-repeat/commit/27ad550f76d381992f038b6d1c52270e2d9e78e4
|
|
5
|
+
# 管理画面で設定したカスタム件名・本文を使えるよう send_custom_email に委譲する。
|
|
6
|
+
def confirm_email(order, resend = false)
|
|
7
|
+
send_custom_email(order, 'confirm_email', resend)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# @gem-override spree_emails-5.3.6/app/mailers/spree/order_mailer.rb#cancel_email
|
|
11
|
+
# @see https://github.com/be-agile/giga-repeat/commit/27ad550f76d381992f038b6d1c52270e2d9e78e4
|
|
12
|
+
def cancel_email(order, resend = false)
|
|
13
|
+
send_custom_email(order, 'cancel_email', resend)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def send_custom_email(order, mail_type, resend)
|
|
19
|
+
@order = order.respond_to?(:id) ? order : Spree::Order.find(order)
|
|
20
|
+
current_store = @order.store
|
|
21
|
+
@spree_custom_email = current_store.custom_emails.find_by(mail_type: mail_type)
|
|
22
|
+
subject = build_subject(mail_type, resend, current_store)
|
|
23
|
+
mail(to: @order.email, from: from_address, subject: subject, store_url: current_store.url_or_custom_domain, reply_to: reply_to_address)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def build_subject(mail_type, resend, current_store)
|
|
27
|
+
subject = (resend ? "[#{Spree.t(:resend).upcase}] " : '')
|
|
28
|
+
if @spree_custom_email&.subject.present?
|
|
29
|
+
subject += @spree_custom_email.subject
|
|
30
|
+
else
|
|
31
|
+
subject += "#{current_store.name} #{Spree.t("order_mailer.#{mail_type}.subject")} ##{@order.number}"
|
|
32
|
+
end
|
|
33
|
+
subject
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
Spree::OrderMailer.prepend Spree::OrderMailerDecorator
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module ReimbursementMailerDecorator
|
|
3
|
+
# @gem-override spree_emails-5.3.6/app/mailers/spree/reimbursement_mailer.rb#reimbursement_email
|
|
4
|
+
# @see https://github.com/be-agile/giga-repeat/commit/27ad550f76d381992f038b6d1c52270e2d9e78e4
|
|
5
|
+
# 管理画面で設定したカスタム件名を使えるよう再実装する。
|
|
6
|
+
def reimbursement_email(reimbursement, resend = false)
|
|
7
|
+
@reimbursement = reimbursement.respond_to?(:id) ? reimbursement : Spree::Reimbursement.find(reimbursement)
|
|
8
|
+
@order = @reimbursement.order
|
|
9
|
+
current_store = @reimbursement.store || Spree::Store.default
|
|
10
|
+
@spree_custom_email = current_store.custom_emails.find_by(mail_type: 'reimbursement_email')
|
|
11
|
+
subject = (resend ? "[#{Spree.t(:resend).upcase}] " : '')
|
|
12
|
+
|
|
13
|
+
if @spree_custom_email&.subject.present?
|
|
14
|
+
subject += @spree_custom_email.subject
|
|
15
|
+
else
|
|
16
|
+
subject += "#{current_store.name} #{Spree.t('reimbursement_mailer.reimbursement_email.subject')} ##{@order.number}"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
mail(to: @order.email, from: from_address, subject: subject, store_url: current_store.url_or_custom_domain, reply_to: reply_to_address)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
Spree::ReimbursementMailer.prepend Spree::ReimbursementMailerDecorator
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module ShipmentMailerDecorator
|
|
3
|
+
# @gem-override spree_emails-5.3.6/app/mailers/spree/shipment_mailer.rb#shipped_email
|
|
4
|
+
# @see https://github.com/be-agile/giga-repeat/commit/27ad550f76d381992f038b6d1c52270e2d9e78e4
|
|
5
|
+
# 管理画面で設定したカスタム件名を使えるよう再実装する。
|
|
6
|
+
def shipped_email(shipment, resend = false)
|
|
7
|
+
@shipment = shipment.respond_to?(:id) ? shipment : Spree::Shipment.find(shipment)
|
|
8
|
+
@order = @shipment.order
|
|
9
|
+
current_store = @shipment.store
|
|
10
|
+
@spree_custom_email = current_store.custom_emails.find_by(mail_type: 'shipped_email')
|
|
11
|
+
subject = (resend ? "[#{Spree.t(:resend).upcase}] " : '')
|
|
12
|
+
|
|
13
|
+
if @spree_custom_email&.subject.present?
|
|
14
|
+
subject += @spree_custom_email.subject
|
|
15
|
+
else
|
|
16
|
+
subject += "#{current_store.name} #{Spree.t('shipment_mailer.shipped_email.subject')} ##{@order.number}"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
mail(to: @order.email, from: from_address, subject: subject, store_url: current_store.url_or_custom_domain, reply_to: reply_to_address)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
Spree::ShipmentMailer.prepend Spree::ShipmentMailerDecorator
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
class CustomEmail < ActiveRecord::Base
|
|
3
|
+
belongs_to :store, class_name: 'Spree::Store'
|
|
4
|
+
|
|
5
|
+
enum :mail_type, {
|
|
6
|
+
confirm_email: 0,
|
|
7
|
+
cancel_email: 1,
|
|
8
|
+
reimbursement_email: 2,
|
|
9
|
+
shipped_email: 3
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
validates :mail_type, uniqueness: { scope: :store_id }
|
|
13
|
+
|
|
14
|
+
# Spree 5.2(Ransack 4.x)は検索・ソート対象を明示的に allowlist することを要求する。
|
|
15
|
+
# ActiveRecord::Base 継承で Spree::Core::Ransackable を含まないため、Ransack 標準の
|
|
16
|
+
# ransackable_attributes / ransackable_associations をオーバーライドして許可する。
|
|
17
|
+
def self.ransackable_attributes(_auth_object = nil)
|
|
18
|
+
%w[id store_id mail_type subject header footer created_at updated_at]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.ransackable_associations(_auth_object = nil)
|
|
22
|
+
%w[store]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def header_for(format)
|
|
26
|
+
format_content(header, format)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def footer_for(format)
|
|
30
|
+
format_content(footer, format)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def format_content(content, format)
|
|
36
|
+
return "" if content.blank?
|
|
37
|
+
|
|
38
|
+
case format.to_sym
|
|
39
|
+
when :html
|
|
40
|
+
content.gsub("\n", "<br>").html_safe # rubocop:disable Rails/OutputSafety
|
|
41
|
+
when :text
|
|
42
|
+
ActionController::Base.helpers.strip_tags(content)
|
|
43
|
+
else
|
|
44
|
+
content # デフォルトは未処理で返す
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
Deface::Override.new(
|
|
2
|
+
virtual_path: 'spree/admin/shared/sidebar/_store_nav',
|
|
3
|
+
name: 'add_custom_emails_to_store_nav',
|
|
4
|
+
insert_before: "erb:contains('can?(:manage, Spree::StockLocation)')",
|
|
5
|
+
text: <<-HTML
|
|
6
|
+
<li class="nav-item">
|
|
7
|
+
<%= nav_item(Spree.t(:custom_emails), spree.setting_admin_custom_emails_path, icon: 'mail', active: %w[custom_emails].include?(controller_name)) %>
|
|
8
|
+
</li>
|
|
9
|
+
HTML
|
|
10
|
+
)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<div data-hook="admin_custom_email_form_fields">
|
|
2
|
+
<%= form_for custom_email, url: admin_custom_email_path(custom_email), method: :patch do |f| %>
|
|
3
|
+
<fieldset>
|
|
4
|
+
<%= f.hidden_field :mail_type, value: mail_type %>
|
|
5
|
+
|
|
6
|
+
<div class="form-group">
|
|
7
|
+
<%= f.label :subject, Spree.t(:subject) %>
|
|
8
|
+
<%= f.error_message_on :subject, class: 'fullwidth title' %>
|
|
9
|
+
<%= f.text_field :subject, class: 'form-control' %>
|
|
10
|
+
</div>
|
|
11
|
+
|
|
12
|
+
<div class="form-group">
|
|
13
|
+
<%= f.label :header, Spree.t(:header) %>
|
|
14
|
+
<%= f.error_message_on :header, class: 'fullwidth title' %>
|
|
15
|
+
<%= f.text_area :header, rows: 3, class: 'form-control' %>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<div class="form-group">
|
|
19
|
+
<%= f.label :footer, Spree.t(:footer) %>
|
|
20
|
+
<%= f.error_message_on :footer, class: 'fullwidth title' %>
|
|
21
|
+
<%= f.text_area :footer, rows: 3, class: 'form-control' %>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<div data-hook="buttons" class="actions mb-6">
|
|
25
|
+
<%= button Spree.t('actions.update'), 'save' %>
|
|
26
|
+
</div>
|
|
27
|
+
</fieldset>
|
|
28
|
+
<% end %>
|
|
29
|
+
</div>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<% content_for :page_title do %>
|
|
2
|
+
<%= Spree.t(:editing_resource, resource: Spree::CustomEmail.model_name.human) %>
|
|
3
|
+
<% end %>
|
|
4
|
+
|
|
5
|
+
<div class='page-alerts'>
|
|
6
|
+
<div class='alert alert-info'>
|
|
7
|
+
<%= Spree.t(:custom_email_alert_info)%>
|
|
8
|
+
</div>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<% @custom_emails.each do |custom_email| %>
|
|
12
|
+
<h3>■<%= Spree.t(custom_email.mail_type, default: custom_email.mail_type) %></h3>
|
|
13
|
+
<%= render partial: 'form', locals: { custom_email: custom_email, mail_type: custom_email.mail_type } %>
|
|
14
|
+
<hr class="my-6" />
|
|
15
|
+
<% end %>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<%# @gem-override spree_emails-5.3.6/app/views/spree/order_mailer/cancel_email.html.erb %>
|
|
2
|
+
<%# reason: カスタムメール (spree_custom_email) のヘッダー/フッター差し込みに対応している %>
|
|
3
|
+
<%# @see https://github.com/be-agile/giga-repeat/commit/27ad550f76d381992f038b6d1c52270e2d9e78e4 %>
|
|
4
|
+
<h1>
|
|
5
|
+
<%= Spree.t('order_mailer.cancel_email.dear_customer', name: name_for(@order)) %>
|
|
6
|
+
</h1>
|
|
7
|
+
<% if @spree_custom_email&.header.present? %>
|
|
8
|
+
<p><%= @spree_custom_email.header_for(:html) %></p>
|
|
9
|
+
<% else %>
|
|
10
|
+
<p><%= Spree.t('order_mailer.cancel_email.instructions') %></p>
|
|
11
|
+
<% end %>
|
|
12
|
+
|
|
13
|
+
<table class="purchase" role="presentation">
|
|
14
|
+
<tr>
|
|
15
|
+
<td>
|
|
16
|
+
<h3> <%= Spree.t('order_mailer.cancel_email.order_summary_canceled', number: @order.number) %></h3>
|
|
17
|
+
</td>
|
|
18
|
+
</tr>
|
|
19
|
+
<tr>
|
|
20
|
+
<td colspan="2">
|
|
21
|
+
<%= render 'spree/shared/purchased_items_table', line_items: @order.line_items, order: @order %>
|
|
22
|
+
</td>
|
|
23
|
+
</tr>
|
|
24
|
+
</table>
|
|
25
|
+
|
|
26
|
+
<% if @spree_custom_email&.footer.present? %>
|
|
27
|
+
<p><%= @spree_custom_email.footer_for(:html) %></p>
|
|
28
|
+
<% else %>
|
|
29
|
+
<p>
|
|
30
|
+
<%= Spree.t('order_mailer.cancel_email.thanks') %><br />
|
|
31
|
+
<%= Spree.t('order_mailer.store_team', store_name: current_store.name) %>
|
|
32
|
+
</p>
|
|
33
|
+
<% end %>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<%# @gem-override spree_emails-5.3.6/app/views/spree/order_mailer/cancel_email.text.erb %>
|
|
2
|
+
<%# reason: カスタムメールのヘッダー/フッター差し込みに対応している (テキスト版) %>
|
|
3
|
+
<%# @see https://github.com/be-agile/giga-repeat/commit/27ad550f76d381992f038b6d1c52270e2d9e78e4 %>
|
|
4
|
+
<%= Spree.t('order_mailer.cancel_email.dear_customer', name: name_for(@order)) %>
|
|
5
|
+
|
|
6
|
+
<% if @spree_custom_email&.header.present? %>
|
|
7
|
+
<%= @spree_custom_email.header_for(:text) %>
|
|
8
|
+
<% else %>
|
|
9
|
+
<%= Spree.t('order_mailer.cancel_email.instructions') %>
|
|
10
|
+
<% end %>
|
|
11
|
+
|
|
12
|
+
============================================================
|
|
13
|
+
<%= Spree.t('order_mailer.cancel_email.order_summary_canceled', number: @order.number) %>
|
|
14
|
+
============================================================
|
|
15
|
+
<%= render 'spree/shared/purchased_items_table', line_items: @order.line_items, order: @order %>
|
|
16
|
+
============================================================
|
|
17
|
+
<%= Spree.t('order_mailer.total') %> <%= @order.display_total %>
|
|
18
|
+
<% if @spree_custom_email&.footer.present? %>
|
|
19
|
+
<%= @spree_custom_email.footer_for(:text) %>
|
|
20
|
+
<% else %>
|
|
21
|
+
<%= Spree.t('order_mailer.cancel_email.thanks') %>
|
|
22
|
+
<%= Spree.t('order_mailer.store_team', store_name: current_store.name) %>
|
|
23
|
+
<% end %>
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
<%# @gem-override spree_emails-5.3.6/app/views/spree/order_mailer/confirm_email.html.erb %>
|
|
2
|
+
<%# reason: カスタムメールのヘッダー/フッター差し込みに加え、支払い方法・配送先/請求先住所・デジタル商品ダウンロードリンクを追加している %>
|
|
3
|
+
<%# @see https://github.com/be-agile/giga-repeat/commit/27ad550f76d381992f038b6d1c52270e2d9e78e4 %>
|
|
4
|
+
<h1>
|
|
5
|
+
<%= Spree.t('order_mailer.confirm_email.dear_customer', name: name_for(@order)) %>
|
|
6
|
+
</h1>
|
|
7
|
+
<% if @spree_custom_email&.header.present? %>
|
|
8
|
+
<p><%= @spree_custom_email.header_for(:html) %></p>
|
|
9
|
+
<% else %>
|
|
10
|
+
<p><%= Spree.t('order_mailer.confirm_email.instructions') %></p>
|
|
11
|
+
<% end %>
|
|
12
|
+
|
|
13
|
+
<table class="purchase" role="presentation">
|
|
14
|
+
<tr>
|
|
15
|
+
<td>
|
|
16
|
+
<h3><%= Spree.t('order_mailer.confirm_email.order_summary', number: @order.number) %></h3>
|
|
17
|
+
</td>
|
|
18
|
+
</tr>
|
|
19
|
+
<tr>
|
|
20
|
+
<td colspan="2">
|
|
21
|
+
<%= render 'spree/shared/purchased_items_table', line_items: @order.line_items, order: @order %>
|
|
22
|
+
</td>
|
|
23
|
+
</tr>
|
|
24
|
+
<tr>
|
|
25
|
+
<td>
|
|
26
|
+
<p><%= Spree.t('order_mailer.confirm_email.payment_method', name: @order.payments.valid.map{|p| p.payment_method.name}.join(", ")) %></p>
|
|
27
|
+
</td>
|
|
28
|
+
</tr>
|
|
29
|
+
|
|
30
|
+
<% if @order.shipping_address.present? %>
|
|
31
|
+
<tr>
|
|
32
|
+
<td>
|
|
33
|
+
<p><%= Spree::Order.human_attribute_name(:ship_address) %>: <%= @order.shipping_address.to_s %></p>
|
|
34
|
+
</td>
|
|
35
|
+
</tr>
|
|
36
|
+
<% end %>
|
|
37
|
+
|
|
38
|
+
<% if @order.billing_address.present? %>
|
|
39
|
+
<tr>
|
|
40
|
+
<td>
|
|
41
|
+
<p><%= Spree::Order.human_attribute_name(:bill_address) %>: <%= @order.billing_address.to_s %></p>
|
|
42
|
+
</td>
|
|
43
|
+
</tr>
|
|
44
|
+
<% end %>
|
|
45
|
+
|
|
46
|
+
</table>
|
|
47
|
+
|
|
48
|
+
<% if @order.some_digital? %>
|
|
49
|
+
<p>
|
|
50
|
+
<%= Spree.t('order_mailer.confirm_email.download_digitals') %>
|
|
51
|
+
</p>
|
|
52
|
+
<ul>
|
|
53
|
+
<% @order.line_items.each do |item| %>
|
|
54
|
+
<% if item.digital? && item.digital_links.any? { |link| link.authorize! } %>
|
|
55
|
+
<li>
|
|
56
|
+
<p><%= raw item.variant.name %>:</p>
|
|
57
|
+
<ul>
|
|
58
|
+
<% item.digital_links.each do |link| %>
|
|
59
|
+
<% next unless link.authorize! %>
|
|
60
|
+
<li>
|
|
61
|
+
<%= link_to link.digital.attachment.filename.to_s,
|
|
62
|
+
spree.digital_link_url(id: link.token, host: @order.store.url_or_custom_domain),
|
|
63
|
+
target: "_blank"
|
|
64
|
+
%>
|
|
65
|
+
</li>
|
|
66
|
+
<% end %>
|
|
67
|
+
</ul>
|
|
68
|
+
</li>
|
|
69
|
+
<% end %>
|
|
70
|
+
<% end %>
|
|
71
|
+
</ul>
|
|
72
|
+
<% end %>
|
|
73
|
+
<% if @spree_custom_email&.footer.present? %>
|
|
74
|
+
<p><%= @spree_custom_email.footer_for(:html) %></p>
|
|
75
|
+
<% else %>
|
|
76
|
+
<p>
|
|
77
|
+
<%= Spree.t('order_mailer.confirm_email.thanks') %><br />
|
|
78
|
+
<%= Spree.t('order_mailer.store_team', store_name: current_store.name) %>
|
|
79
|
+
</p>
|
|
80
|
+
<% end %>
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<%# @gem-override spree_emails-5.3.6/app/views/spree/order_mailer/confirm_email.text.erb %>
|
|
2
|
+
<%# reason: カスタムメールのヘッダー/フッター差し込みに加え、支払い方法・住所・デジタル商品ダウンロードリンクを追加している (テキスト版) %>
|
|
3
|
+
<%# @see https://github.com/be-agile/giga-repeat/commit/27ad550f76d381992f038b6d1c52270e2d9e78e4 %>
|
|
4
|
+
<%= Spree.t('order_mailer.confirm_email.dear_customer', name: name_for(@order)) %>
|
|
5
|
+
|
|
6
|
+
<% if @spree_custom_email&.header.present? %>
|
|
7
|
+
<%= @spree_custom_email.header_for(:text) %>
|
|
8
|
+
<% else %>
|
|
9
|
+
<%= Spree.t('order_mailer.confirm_email.instructions') %>
|
|
10
|
+
<% end %>
|
|
11
|
+
|
|
12
|
+
============================================================
|
|
13
|
+
<%= Spree.t('order_mailer.confirm_email.order_summary', number: @order.number) %>
|
|
14
|
+
============================================================
|
|
15
|
+
<%= render 'spree/shared/purchased_items_table', line_items: @order.line_items, order: @order %>
|
|
16
|
+
============================================================
|
|
17
|
+
<%= Spree.t('order_mailer.total') %> <%= @order.display_total %>
|
|
18
|
+
<%= Spree.t('order_mailer.confirm_email.payment_method', name: @order.payments.valid.map{|p| p.payment_method.name}.join(", ")) %>
|
|
19
|
+
============================================================
|
|
20
|
+
<% if @order.shipping_address.present? %>
|
|
21
|
+
<%= Spree::Order.human_attribute_name(:ship_address) %>: <%= @order.shipping_address.to_text %>
|
|
22
|
+
<% end %>
|
|
23
|
+
<% if @order.billing_address.present? %>
|
|
24
|
+
<%= Spree::Order.human_attribute_name(:bill_address) %>: <%= @order.billing_address.to_text %>
|
|
25
|
+
<% end %>
|
|
26
|
+
<% if @order.some_digital? %>
|
|
27
|
+
============================================================
|
|
28
|
+
<%= Spree.t('order_mailer.confirm_email.download_digitals') %>
|
|
29
|
+
============================================================
|
|
30
|
+
<% @order.line_items.each do |item| %>
|
|
31
|
+
<% if item.digital? && item.digital_links.any? { |link| link.authorize! } %>
|
|
32
|
+
<%= item.variant.name %>:
|
|
33
|
+
<% item.digital_links.each do |link| %>
|
|
34
|
+
<% next unless link.authorize! %>
|
|
35
|
+
<%= link.digital.attachment.filename.to_s %>:
|
|
36
|
+
<%= spree.digital_link_url(id: link.token, host: @order.store.url_or_custom_domain) %>
|
|
37
|
+
<% end %>
|
|
38
|
+
<% end %>
|
|
39
|
+
<% end %>
|
|
40
|
+
============================================================
|
|
41
|
+
<% end %>
|
|
42
|
+
|
|
43
|
+
<% if @spree_custom_email&.footer.present? %>
|
|
44
|
+
<%= @spree_custom_email.footer_for(:text) %>
|
|
45
|
+
<% else %>
|
|
46
|
+
<%= Spree.t('order_mailer.confirm_email.thanks') %>
|
|
47
|
+
<%= Spree.t('order_mailer.store_team', store_name: current_store.name) %>
|
|
48
|
+
<% end %>
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
<%# @gem-override spree_emails-5.3.6/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb %>
|
|
2
|
+
<%# reason: カスタムメールのヘッダー/フッター差し込みと、明細画像のレスポンシブスタイルを追加している %>
|
|
3
|
+
<%# @see https://github.com/be-agile/giga-repeat/commit/27ad550f76d381992f038b6d1c52270e2d9e78e4 %>
|
|
4
|
+
<h1>
|
|
5
|
+
<%= Spree.t('reimbursement_mailer.reimbursement_email.dear_customer', name: name_for(@order)) %>
|
|
6
|
+
</h1>
|
|
7
|
+
<% if @spree_custom_email&.header.present? %>
|
|
8
|
+
<p><%= @spree_custom_email.header_for(:html) %></p>
|
|
9
|
+
<% else %>
|
|
10
|
+
<p><%= Spree.t('reimbursement_mailer.reimbursement_email.instructions') %></p>
|
|
11
|
+
<% end %>
|
|
12
|
+
<p>
|
|
13
|
+
<%= Spree.t('reimbursement_mailer.reimbursement_email.refund_summary') %>
|
|
14
|
+
</p>
|
|
15
|
+
<p>
|
|
16
|
+
<%= Spree.t('reimbursement_mailer.reimbursement_email.total_refunded', total: @reimbursement.display_total) %>
|
|
17
|
+
</p>
|
|
18
|
+
<% if @reimbursement.return_items.exchange_requested.present? %>
|
|
19
|
+
<p>
|
|
20
|
+
<%= Spree.t('reimbursement_mailer.reimbursement_email.exchange_summary') %>
|
|
21
|
+
</p>
|
|
22
|
+
|
|
23
|
+
<table class="purchase_content">
|
|
24
|
+
<% @reimbursement.return_items.exchange_requested.each do |return_item| %>
|
|
25
|
+
<tr>
|
|
26
|
+
<td class="purchase_image">
|
|
27
|
+
<%= link_to(image_tag(variant_image_url(return_item.variant), style: "max-width: 100%; height: auto; display: block;"), spree_storefront_resource_url(return_item.variant.product)) %>
|
|
28
|
+
</td>
|
|
29
|
+
<td class="purchase_item" style="word-break: break-word;">
|
|
30
|
+
<strong>
|
|
31
|
+
<span class="f-fallback">
|
|
32
|
+
<%= link_to raw(return_item.variant.name), spree_storefront_resource_url(return_item.variant.product) %>
|
|
33
|
+
</span>
|
|
34
|
+
</strong>
|
|
35
|
+
<p class="purchase_item--additional">
|
|
36
|
+
<%= "(#{raw(return_item.exchange_variant.options_text)})" if return_item.exchange_variant.options_text.present? -%>
|
|
37
|
+
</p>
|
|
38
|
+
</td>
|
|
39
|
+
</tr>
|
|
40
|
+
<% end %>
|
|
41
|
+
</table>
|
|
42
|
+
|
|
43
|
+
<% if @reimbursement.return_items.awaiting_return.present? && Spree::Config[:expedited_exchanges] %>
|
|
44
|
+
<p>
|
|
45
|
+
<%= Spree.t('reimbursement_mailer.reimbursement_email.days_to_send', days: Spree::Config[:expedited_exchanges_days_window]) %>
|
|
46
|
+
</p>
|
|
47
|
+
<% end %>
|
|
48
|
+
<% end %>
|
|
49
|
+
|
|
50
|
+
<% if @spree_custom_email&.footer.present? %>
|
|
51
|
+
<p><%= @spree_custom_email.footer_for(:html) %></p>
|
|
52
|
+
<% else %>
|
|
53
|
+
<p>
|
|
54
|
+
<%= Spree.t('reimbursement_mailer.reimbursement_email.thanks') %>
|
|
55
|
+
<br />
|
|
56
|
+
<%= Spree.t('reimbursement_mailer.reimbursement_email.store_team', store_name: current_store.name) %>
|
|
57
|
+
</p>
|
|
58
|
+
<% end %>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<%# @gem-override spree_emails-5.3.6/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb %>
|
|
2
|
+
<%# reason: カスタムメールのヘッダー/フッター差し込みに対応している (テキスト版) %>
|
|
3
|
+
<%# @see https://github.com/be-agile/giga-repeat/commit/27ad550f76d381992f038b6d1c52270e2d9e78e4 %>
|
|
4
|
+
<%= Spree.t('reimbursement_mailer.reimbursement_email.dear_customer', name: name_for(@reimbursement.order)) %>
|
|
5
|
+
|
|
6
|
+
<% if @spree_custom_email&.header.present? %>
|
|
7
|
+
<%= @spree_custom_email.header_for(:text) %>
|
|
8
|
+
<% else %>
|
|
9
|
+
<%= Spree.t('reimbursement_mailer.reimbursement_email.instructions') %>
|
|
10
|
+
<% end %>
|
|
11
|
+
|
|
12
|
+
============================================================
|
|
13
|
+
<%= Spree.t('reimbursement_mailer.reimbursement_email.refund_summary') %>
|
|
14
|
+
============================================================
|
|
15
|
+
<%= Spree.t('reimbursement_mailer.reimbursement_email.total_refunded', total: @reimbursement.display_total) %>
|
|
16
|
+
|
|
17
|
+
<% if @reimbursement.return_items.exchange_requested.present? %>
|
|
18
|
+
============================================================
|
|
19
|
+
<%= Spree.t('reimbursement_mailer.reimbursement_email.exchange_summary') %>
|
|
20
|
+
============================================================
|
|
21
|
+
<% @reimbursement.return_items.exchange_requested.each do |return_item| %>
|
|
22
|
+
<%= return_item.variant.sku %> <%= raw(return_item.variant.product.name) %> <%= "(#{raw(return_item.variant.options_text)})" if return_item.variant.options_text.present? -%> -> <%= return_item.exchange_variant.sku %> <%= raw(return_item.exchange_variant.product.name) if return_item.exchange_variant.options_text.present? %> <%= "(#{raw(return_item.exchange_variant.options_text)})" -%>
|
|
23
|
+
<% end %>
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
<% if @reimbursement.return_items.awaiting_return.present? && Spree::Config[:expedited_exchanges] %>
|
|
27
|
+
<%= Spree.t('reimbursement_mailer.reimbursement_email.days_to_send', days: Spree::Config[:expedited_exchanges_days_window]) %>
|
|
28
|
+
<% end %>
|
|
29
|
+
<% end %>
|
|
30
|
+
<% if @spree_custom_email&.footer.present? %>
|
|
31
|
+
<%= @spree_custom_email.footer_for(:text) %>
|
|
32
|
+
<% else %>
|
|
33
|
+
<%= Spree.t('reimbursement_mailer.reimbursement_email.thanks') %>
|
|
34
|
+
<%= Spree.t('reimbursement_mailer.reimbursement_email.store_team', store_name: current_store.name) %>
|
|
35
|
+
<% end %>
|
|
36
|
+
|