Class: OrderHandler
- Inherits:
-
Object
- Object
- OrderHandler
- Defined in:
- app/models/order_handler.rb
Overview
Handles orders in progress for which customers have not paid
Instance Attribute Summary collapse
-
#cart ⇒ Object
Returns the value of attribute cart.
-
#discount_error ⇒ Object
Returns the value of attribute discount_error.
-
#error ⇒ Object
Returns the value of attribute error.
-
#member ⇒ Object
Returns the value of attribute member.
-
#over_limit ⇒ Object
Returns the value of attribute over_limit.
Instance Method Summary collapse
- #handle(params, store_organization) ⇒ Object
- #handle_discount_or_pass_code(params) ⇒ Object
- #handle_donation(params, organization) ⇒ Object
- #handle_memberships(params, member = nil) ⇒ Object
-
#handle_passes(params) ⇒ Object
Note that this handles passes currently being purchased NOT passes that are being applied to the cart.
- #handle_tickets(params) ⇒ Object
-
#initialize(cart, member) ⇒ OrderHandler
constructor
A new instance of OrderHandler.
- #is_pass?(code) ⇒ Boolean
Constructor Details
#initialize(cart, member) ⇒ OrderHandler
Returns a new instance of OrderHandler.
7 8 9 10 |
# File 'app/models/order_handler.rb', line 7 def initialize(cart, member) self.cart = cart self.member = member end |
Instance Attribute Details
#cart ⇒ Object
Returns the value of attribute cart.
5 6 7 |
# File 'app/models/order_handler.rb', line 5 def cart @cart end |
#discount_error ⇒ Object
Returns the value of attribute discount_error.
5 6 7 |
# File 'app/models/order_handler.rb', line 5 def discount_error @discount_error end |
#error ⇒ Object
Returns the value of attribute error.
5 6 7 |
# File 'app/models/order_handler.rb', line 5 def error @error end |
#member ⇒ Object
Returns the value of attribute member.
5 6 7 |
# File 'app/models/order_handler.rb', line 5 def member @member end |
#over_limit ⇒ Object
Returns the value of attribute over_limit.
5 6 7 |
# File 'app/models/order_handler.rb', line 5 def over_limit @over_limit end |
Instance Method Details
#handle(params, store_organization) ⇒ Object
12 13 14 15 16 17 18 |
# File 'app/models/order_handler.rb', line 12 def handle(params, store_organization) self.handle_tickets(params) self.handle_donation(params, store_organization) self.handle_memberships(params, self.member) self.handle_passes(params) self.handle_discount_or_pass_code(params) end |
#handle_discount_or_pass_code(params) ⇒ Object
105 106 107 108 109 |
# File 'app/models/order_handler.rb', line 105 def handle_discount_or_pass_code(params) if params[:discount_or_pass_code].present? is_pass?(params[:discount_or_pass_code]) ? apply_pass(params) : handle_discount(params) end end |
#handle_donation(params, organization) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'app/models/order_handler.rb', line 43 def handle_donation(params, organization) donation_amount = params[:donation_amount].present? ? params[:donation_amount] : params[:donation_amount_fixed] if donation_amount self.cart.clear_donations if donation_amount.to_i == 0 self.error = "Please enter a donation amount." return end donation = Donation.new donation.amount = donation_amount.to_i * 100 donation.organization = organization self.cart.donations << donation end end |
#handle_memberships(params, member = nil) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'app/models/order_handler.rb', line 60 def handle_memberships(params, member = nil) unless params[:membership_type].blank? membership_type_id = params[:membership_type][:id] quantity = params[:quantity].to_i if membership_type_id.blank? self.error = "Please select a membership." return end (1..quantity).each do |i| if allowed_to_add?(membership_type_id) self.cart.memberships << Membership.for(MembershipType.find(membership_type_id), member) else self.error = "Sorry, we can't add any more of this membership type to your cart." end end end end |
#handle_passes(params) ⇒ Object
Note that this handles passes currently being purchased NOT passes that are being applied to the cart
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'app/models/order_handler.rb', line 83 def handle_passes(params) Rails.logger.debug(params) unless params[:pass_type].blank? pass_type_id = params[:pass_type][:id] quantity = params[:quantity].to_i if pass_type_id.blank? self.error = "Please select a pass." return end (1..quantity).each do |i| self.cart.passes << Pass.for(PassType.find(pass_type_id)) end end end |
#handle_tickets(params) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'app/models/order_handler.rb', line 20 def handle_tickets(params) if params[:ticket_type_id] ticket_ids = [] over_limit = [] ticket_type = TicketType.find(params[:ticket_type_id]) Rails.logger.debug("QUANTITY #{params[:quantity].to_i}") tickets = ticket_type.available_tickets(params[:quantity].to_i, member) ids = tickets.collect(&:id) Rails.logger.debug("TICKET IDS: #{ids}") Ticket.lock(tickets, ticket_type, self.cart) Rails.logger.debug("OVER LIMIT? #{ids.length < params[:quantity].to_i}") if ids.length < params[:quantity].to_i Rails.logger.debug("OVER THE LINE!") #TODO: return and display a sensible error message end params = params.merge(:tickets => ticket_ids) if ticket_ids.any? end params end |
#is_pass?(code) ⇒ Boolean
101 102 103 |
# File 'app/models/order_handler.rb', line 101 def is_pass?(code) Pass.where(:pass_code => code).any? end |