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



69
70
71
# File 'app/models/effective/order_email.rb', line 69

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

#event_addonsObject



81
82
83
# File 'app/models/effective/order_email.rb', line 81

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

#event_all_waitlisted?Boolean

Returns:

  • (Boolean)


97
98
99
100
# File 'app/models/effective/order_email.rb', line 97

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)


102
103
104
105
# File 'app/models/effective/order_email.rb', line 102

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)


85
86
87
88
# File 'app/models/effective/order_email.rb', line 85

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

#event_registrantsObject



77
78
79
# File 'app/models/effective/order_email.rb', line 77

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

#event_registrationObject



73
74
75
# File 'app/models/effective/order_email.rb', line 73

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

#event_some_waitlisted?Boolean

Returns:

  • (Boolean)


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

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
# File 'app/models/effective/order_email.rb', line 28

def header
  if event.present? && order.purchased_or_deferred?
    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)


65
66
67
# File 'app/models/effective/order_email.rb', line 65

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

#subjectObject



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

def subject
  if event.present? && order.purchased_or_deferred?
    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