Class: Effective::OrderEmail

Inherits:
Object
  • Object
show all
Defined in:
app/models/effective/order_email.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(order, opts = {}) ⇒ OrderEmail

Returns a new instance of OrderEmail.



9
10
11
12
13
14
15
# File 'app/models/effective/order_email.rb', line 9

def initialize(order, opts = {})
  raise('expected an Effective::Order') unless order.kind_of?(Effective::Order)
  raise('expected a Hash of options') unless opts.kind_of?(Hash)

  @order = order
  @opts = opts
end

Instance Attribute Details

#optsObject

Returns the value of attribute opts.



7
8
9
# File 'app/models/effective/order_email.rb', line 7

def opts
  @opts
end

#orderObject

Returns the value of attribute order.



6
7
8
# File 'app/models/effective/order_email.rb', line 6

def order
  @order
end

Instance Method Details

#ccObject



23
24
25
# File 'app/models/effective/order_email.rb', line 23

def cc
  order.cc.presence
end

#eventObject



71
72
73
# File 'app/models/effective/order_email.rb', line 71

def event
  order.purchasables.find { |purchasable| purchasable.class.name == "Effective::EventRegistrant" }.try(:event)
end

#event_addonsObject



83
84
85
# File 'app/models/effective/order_email.rb', line 83

def event_addons
  order.purchasables.select { |purchasable| purchasable.class.name == "Effective::EventAddon" }
end

#event_all_waitlisted?Boolean

Returns:

  • (Boolean)


99
100
101
102
# File 'app/models/effective/order_email.rb', line 99

def event_all_waitlisted?
  return false unless event_registrants.present?
  event_registrants.all? { |er| er.waitlisted_not_promoted? }
end

#event_all_waitlisted_or_archived?Boolean

Returns:

  • (Boolean)


104
105
106
107
# File 'app/models/effective/order_email.rb', line 104

def event_all_waitlisted_or_archived?
  return false unless event_registrants.present?
  event_registrants.all? { |er| er.waitlisted_not_promoted? || er.archived? }
end

#event_none_waitlisted?Boolean

Returns:

  • (Boolean)


87
88
89
90
# File 'app/models/effective/order_email.rb', line 87

def event_none_waitlisted?
  return false unless event_registrants.present?
  event_registrants.none? { |er| er.waitlisted_not_promoted? }
end

#event_registrantsObject



79
80
81
# File 'app/models/effective/order_email.rb', line 79

def event_registrants
  order.purchasables.select { |purchasable| purchasable.class.name == "Effective::EventRegistrant" }
end

#event_registrants_cancelled?Boolean

Returns:

  • (Boolean)


109
110
111
# File 'app/models/effective/order_email.rb', line 109

def event_registrants_cancelled?
  opts[:event_registrants_cancelled] == true
end

#event_registrationObject



75
76
77
# File 'app/models/effective/order_email.rb', line 75

def event_registration
  order.purchasables.find { |purchasable| purchasable.class.name == "Effective::EventRegistrant" }.try(:event_registration)
end

#event_some_waitlisted?Boolean

Returns:

  • (Boolean)


92
93
94
95
96
97
# File 'app/models/effective/order_email.rb', line 92

def event_some_waitlisted?
  return false unless event_registrants.present?

  event_registrants.find { |er| er.waitlisted_not_promoted? }.present? && 
  event_registrants.find { |er| !er.waitlisted_not_promoted? }.present?
end

#headerObject

The very first line of the email body



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'app/models/effective/order_email.rb', line 28

def header
  if event.present? && order.purchased_or_deferred?
    return "Your tickets have been cancelled" if event_registrants_cancelled?
    return "Your tickets have been confirmed!" if event_none_waitlisted?
    return "Some of your tickets have been confirmed, but some are on the waitlist" if event_some_waitlisted?
    return "Your tickets are on the waitlist!" if event_all_waitlisted?
  end

  return "Request for payment" if payment_request?
  return "Order waiting on payment" if order.deferred?
  return "Your order has been purchased!" if order.purchased?
  return "Your order was declined by the payment processor" if order.declined?

  # Fallback
  "Order: ##{order.to_param}"
end

#payment_request?Boolean

Returns:

  • (Boolean)


67
68
69
# File 'app/models/effective/order_email.rb', line 67

def payment_request?
  opts[:payment_request] == true
end

#subjectObject



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'app/models/effective/order_email.rb', line 45

def subject
  if event.present? && order.purchased_or_deferred?
    return "Tickets cancelled - #{event}" if event_registrants_cancelled?
    return "Receipt - Order ##{order.to_param}" if order.purchased? && order.delayed_payment_date_past?
    return "Confirmation - #{event}" if event_none_waitlisted?
    return "Confirmation & Waitlist - #{event}" if event_some_waitlisted?
    return "Waitlist - #{event}" if event_all_waitlisted?
  end

  if event.present? && order.declined?
    return "Declined payment - #{event} - Order ##{order.to_param}" if order.declined?
  end

  return "Payment request - Order ##{order.to_param}" if payment_request?
  return "Waiting on payment - Order ##{order.to_param}" if order.deferred?
  return "Declined payment - Order ##{order.to_param}" if order.declined?
  return "Receipt - Order ##{order.to_param}" if order.purchased?

  # Fallback
  "Order ##{order.to_param}"
end

#toObject

Just to the purchaser. Not everyone.



18
19
20
21
# File 'app/models/effective/order_email.rb', line 18

def to
  return order.emails if payment_request?
  order.emails.first
end