Class: Exchange
- Inherits:
-
Object
show all
- Includes:
- ActiveModel::Validations, Adjustments
- Defined in:
- app/models/exchange.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
#number_of_non_free_items, #service_fee_per_item
Constructor Details
#initialize(order, items, tickets = []) ⇒ Exchange
The original order The items to exchange The tickets that they are being exchanged for
18
19
20
21
22
23
|
# File 'app/models/exchange.rb', line 18
def initialize(order, items, tickets = [])
self.order = order
self.items = items
self.tickets = tickets
self.service_fee = number_of_non_free_items(items) * service_fee_per_item(order.items)
end
|
Instance Attribute Details
#items ⇒ Object
Returns the value of attribute items.
5
6
7
|
# File 'app/models/exchange.rb', line 5
def items
@items
end
|
#order ⇒ Object
Returns the value of attribute order.
5
6
7
|
# File 'app/models/exchange.rb', line 5
def order
@order
end
|
#service_fee ⇒ Object
Returns the value of attribute service_fee.
5
6
7
|
# File 'app/models/exchange.rb', line 5
def service_fee
@service_fee
end
|
#tickets ⇒ Object
Returns the value of attribute tickets.
5
6
7
|
# File 'app/models/exchange.rb', line 5
def tickets
@tickets
end
|
Instance Method Details
#adjust_original_order ⇒ Object
53
54
55
56
|
# File 'app/models/exchange.rb', line 53
def adjust_original_order
order.service_fee = order.service_fee - service_fee
order.save
end
|
#create_order(time = Time.now) ⇒ Object
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
# File 'app/models/exchange.rb', line 64
def create_order(time=Time.now)
exchange_order = ExchangeOrder.new.tap do |exchange_order|
exchange_order.person = order.person
exchange_order.parent = order
exchange_order.payment_method = order.payment_method
exchange_order.created_at = time
exchange_order.service_fee = service_fee
exchange_order.for_organization order.organization
exchange_order.details = "Order is the result of an exchange on #{I18n.l time, :format => :slashed_date}"
exchange_order << tickets
end
exchange_order.record_exchange! items
exchange_order.save!
end
|
#items_are_exchangeable ⇒ Object
25
26
27
|
# File 'app/models/exchange.rb', line 25
def items_are_exchangeable
errors.add(:items, "are not available to exchange") unless items.all?(&:exchangeable?)
end
|
#return_old_items ⇒ Object
49
50
51
|
# File 'app/models/exchange.rb', line 49
def return_old_items
items.map(&:exchange!)
end
|
#sell_new_items ⇒ Object
58
59
60
61
62
|
# File 'app/models/exchange.rb', line 58
def sell_new_items
exchange_order_timestamp = Time.now
tickets.each { |ticket| ticket.exchange_to(order.person, exchange_order_timestamp) }
create_order(exchange_order_timestamp)
end
|
#submit ⇒ Object
41
42
43
44
45
46
47
|
# File 'app/models/exchange.rb', line 41
def submit
ActiveRecord::Base.transaction do
sell_new_items
return_old_items
adjust_original_order
end
end
|
#tickets_are_available ⇒ Object
33
34
35
|
# File 'app/models/exchange.rb', line 33
def tickets_are_available
errors.add(:tickets, "are not available to exchange") if tickets.any?(&:committed?)
end
|
#tickets_belong_to_organization ⇒ Object
37
38
39
|
# File 'app/models/exchange.rb', line 37
def tickets_belong_to_organization
errors.add(:tickets, "do not belong to this organization") unless tickets.all? { |ticket| order.organization.can? :manage, ticket }
end
|
#tickets_match_items ⇒ Object
29
30
31
|
# File 'app/models/exchange.rb', line 29
def tickets_match_items
errors.add(:tickets, "must match the items to exchange") unless tickets.length == items.length
end
|