# # Handles orders in progress for which customers have not paid # class OrderHandler attr_accessor :discount_error, :over_limit, :cart, :error def initialize(cart) self.cart = cart end 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) 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 def handle_discount(params) if params[:discount].present? begin @discount = nil self.cart.tickets.each do |ticket| @discount = Discount.find_by_code_and_event_id(params[:discount].upcase, ticket.show.event.id) Rails.logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> #{@discount}") unless @discount.nil? @discount.apply_discount_to_cart(self.cart) break end end if @discount.nil? self.error = "We could not find your discount. Please try again." end rescue RuntimeError => e self.error = e.message params[:discount] = nil rescue NoMethodError => e Rails.logger.error(e) Rails.logger.error(e.backtrace) self.error = "We could not find your discount. Please try again." params[:discount] = nil end end @discount end def handle_donation(params, organization) if params[:donation_amount] self.cart.clear_donations if params[:donation_amount].to_i == 0 flash[:error] = "Please enter a donation amount." return end donation = Donation.new donation.amount = params[:donation_amount].to_i * 100 donation.organization = organization self.cart.donations << donation end end def handle_memberships(params) unless params[:membership_type].blank? membership_type_id = params[:membership_type][:id] quantity = params[:quantity].to_i #how many memberships of this type are in the cart? #current_membership_type_count = self.cart.memberships.count{ |membership| membership.membership_type_id == membership_type_id } (1..quantity).each do |i| self.cart.memberships << Membership.for(MembershipType.find(membership_type_id)) end end end end