Class: Mailer

Inherits:
ActionMailer::Base
  • Object
show all
Includes:
ApplicationHelper
Defined in:
app/mailers/mailer.rb

Overview

ActionMailer class that handles all emails for Foodsoft.

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ApplicationHelper

#base_errors, #bootstrap_flash_patched, #close_button, #expand, #foodcoop_css_path, #foodcoop_css_tag, #format_currency, #format_date, #format_datetime, #format_datetime_timespec, #format_iban, #format_roles, #format_time, #heading_helper, #icon, #items_per_page, #link_to_gmaps, #link_to_top, #pagination_links_remote, #remote_link_to, #show_title?, #show_user, #show_user_link, #sort_link_helper, #tab_is_active?, #title, #truncate, #weekday

Methods included from PathHelper

#finance_group_transactions_path

Class Method Details

.deliver_nowObject



150
151
152
153
154
155
# File 'app/mailers/mailer.rb', line 150

def self.deliver_now
  message = yield
  message.deliver_now
rescue StandardError => e
  MailDeliveryStatus.create email: message.to[0], message: e.message
end

.deliver_now_with_default_locale(&block) ⇒ Object



144
145
146
147
148
# File 'app/mailers/mailer.rb', line 144

def self.deliver_now_with_default_locale(&block)
  I18n.with_locale(FoodsoftConfig[:default_locale]) do
    deliver_now(&block)
  end
end

.deliver_now_with_user_locale(user, &block) ⇒ Object



138
139
140
141
142
# File 'app/mailers/mailer.rb', line 138

def self.deliver_now_with_user_locale(user, &block)
  I18n.with_locale(user.settings['profile']['language']) do
    deliver_now(&block)
  end
end

Instance Method Details

#add_order_result_attachments(order, options = {}) ⇒ Object

separate method to allow plugins to mess with the attachments



158
159
160
161
# File 'app/mailers/mailer.rb', line 158

def add_order_result_attachments(order, options = {})
  attachments['order.pdf'] = OrderFax.new(order, options).to_pdf
  attachments['order.csv'] = OrderCsv.new(order, options).to_csv
end

#additonal_welcome_text(user) ⇒ Object

separate method to allow plugins to mess with the text



164
# File 'app/mailers/mailer.rb', line 164

def additonal_welcome_text(user); end

#invite(invite) ⇒ Object

Sends an invite email.



25
26
27
28
29
30
31
# File 'app/mailers/mailer.rb', line 25

def invite(invite)
  @invite = invite
  @link = accept_invitation_url(token: @invite.token)

  mail to: invite.email,
       subject: I18n.t('mailer.invite.subject')
end

#mail(args) ⇒ Object



110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'app/mailers/mailer.rb', line 110

def mail(args)
  args[:message_id] ||= "<#{Mail.random_tag}@#{default_url_options[:host]}>"
  args[:subject] = "[#{FoodsoftConfig[:name]}] #{args[:subject]}"

  if args[:from].is_a? User
    args[:reply_to] ||= args[:from]
    args[:from] =
      format_address(FoodsoftConfig[:email_sender], I18n.t('mailer.from_via_foodsoft', name: show_user(args[:from])))
  end

  %i[bcc cc reply_to sender to].each do |k|
    user = args[k]
    args[k] = format_address(user.email, show_user(user)) if user.is_a? User
  end

  if contact_email = FoodsoftConfig[:contact][:email]
    args[:reply_to] ||= format_address(contact_email, FoodsoftConfig[:name])
  end

  reply_email_domain = FoodsoftConfig[:reply_email_domain]
  if reply_email_domain && !args[:return_path] && args[:to].is_a?(String)
    address = Mail::Parsers::AddressListsParser.parse(args[:to]).addresses.first
    args[:return_path] = "<#{FoodsoftConfig.scope}.bounce+#{address.local}=#{address.domain}@#{reply_email_domain}>"
  end

  super
end

#negative_balance(user, transaction) ⇒ Object

Notify user if account balance is less than zero



94
95
96
97
98
99
100
# File 'app/mailers/mailer.rb', line 94

def negative_balance(user, transaction)
  @group        = user.ordergroup
  @transaction  = transaction

  mail to: user,
       subject: I18n.t('mailer.negative_balance.subject')
end

#not_enough_users_assigned(task, user) ⇒ Object



102
103
104
105
106
107
108
# File 'app/mailers/mailer.rb', line 102

def not_enough_users_assigned(task, user)
  @task = task
  @user = user

  mail to: user,
       subject: I18n.t('mailer.not_enough_users_assigned.subject', task: task.name)
end

#order_received(user, group_order) ⇒ Object

Sends order received info for specific Ordergroup



64
65
66
67
68
69
70
71
72
73
74
# File 'app/mailers/mailer.rb', line 64

def order_received(user, group_order)
  @order        = group_order.order
  @group_order  = group_order

  order_articles = @order.order_articles.reject { |oa| oa.units_received.nil? }
  @abundant_articles = order_articles.select { |oa| oa.difference_received_ordered.positive? }
  @scarce_articles = order_articles.select { |oa| oa.difference_received_ordered.negative? }

  mail to: user,
       subject: I18n.t('mailer.order_received.subject', name: group_order.order.name)
end

#order_result(user, group_order) ⇒ Object

Sends order result for specific Ordergroup



55
56
57
58
59
60
61
# File 'app/mailers/mailer.rb', line 55

def order_result(user, group_order)
  @order        = group_order.order
  @group_order  = group_order

  mail to: user,
       subject: I18n.t('mailer.order_result.subject', name: group_order.order.name)
end

#order_result_supplier(user, order, options = {}) ⇒ Object

Sends order result to the supplier



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'app/mailers/mailer.rb', line 77

def order_result_supplier(user, order, options = {})
  @user     = user
  @order    = order
  @supplier = order.supplier

  add_order_result_attachments order, options

  subject = I18n.t('mailer.order_result_supplier.subject', name: order.supplier.name)
  subject += " (#{I18n.t('activerecord.attributes.order.pickup')}: #{format_date(order.pickup)})" if order.pickup

  mail to: order.supplier.email,
       cc: user,
       reply_to: user,
       subject: subject
end

#reset_password(user) ⇒ Object

Sends an email with instructions on how to reset the password. Assumes user.setResetPasswordToken has been successfully called already.



16
17
18
19
20
21
22
# File 'app/mailers/mailer.rb', line 16

def reset_password(user)
  @user = user
  @link = new_password_url(id: @user.id, token: @user.reset_password_token)

  mail to: user,
       subject: I18n.t('mailer.reset_password.subject', username: show_user(user))
end

#upcoming_tasks(user, task) ⇒ Object

Notify user of upcoming task.



34
35
36
37
38
39
40
41
# File 'app/mailers/mailer.rb', line 34

def upcoming_tasks(user, task)
  @user = user
  @task = task
  @next_tasks = Task.order(:due_date).next_assigned_tasks_for(user)

  mail to: user,
       subject: I18n.t('mailer.upcoming_tasks.subject')
end

#welcome(user) ⇒ Object

Sends a welcome email with instructions on how to reset the password. Assumes user.setResetPasswordToken has been successfully called already.



45
46
47
48
49
50
51
52
# File 'app/mailers/mailer.rb', line 45

def welcome(user)
  @user = user
  @additional_text = additonal_welcome_text(user)
  @link = new_password_url(id: @user.id, token: @user.reset_password_token)

  mail to: user,
       subject: I18n.t('mailer.welcome.subject')
end