Sha256: cd7ff3b64f637d7a0498c934e1d4417e199135cacf2bb7de1010a393bb3fd6cb

Contents?: true

Size: 1.59 KB

Versions: 21

Compression:

Stored size: 1.59 KB

Contents

module Ticket::Locker
  extend ActiveSupport::Concern

  module ClassMethods
    def lock(tickets, ticket_type, cart)
      tickets = Array.wrap(tickets)

      #
      # TODO: blow up if this ticket_type does not apply to this show
      #
      Rails.logger.debug(tickets.inspect)
      Ticket.where(:id => tickets).update_all({ :cart_id        => cart.id, 
                                                :ticket_type_id => ticket_type.id, 
                                                :cart_price     => ticket_type.price
                                                })
      tickets = Ticket.includes(:ticket_type).where(:id => tickets)
      Rails.logger.debug(tickets.inspect)
      cart << tickets
      ExpireTicketJob.enqueue(tickets.collect(&:id), cart.id)
      tickets
    end

    #
    # We pass cart so that we can ensure we're expiring the right transaction. The ticket could have moved
    # carts since the job was queued.
    #
    # If we come along and expire it, the patron will be bitter.
    #
    def unlock(tickets, cart)
      
      Ticket.where(:id => tickets)
            .where(:cart_id => cart)
            .uncommitted
            .update_all({ :cart_id        => nil, 
                          :ticket_type_id => nil, 
                          :cart_price     => nil,
                          :sold_price     => nil,
                          :service_fee    => 0,
                          :discount_id    => nil
                        })
    end
  end

  #
  # This means ticket is in a cart and not sold.
  #
  def locked?
    !self.cart_id.nil? && !sold? && !comped?
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
artfully_ose-1.2.0.pre.23 app/models/ticket/locker.rb
artfully_ose-1.2.0.pre.21 app/models/ticket/locker.rb
artfully_ose-1.2.0.pre.20 app/models/ticket/locker.rb
artfully_ose-1.2.0.pre.19 app/models/ticket/locker.rb
artfully_ose-1.2.0.pre.18 app/models/ticket/locker.rb
artfully_ose-1.2.0.pre.17 app/models/ticket/locker.rb
artfully_ose-1.2.0.pre.16 app/models/ticket/locker.rb
artfully_ose-1.2.0.pre.15 app/models/ticket/locker.rb
artfully_ose-1.2.0.pre.12 app/models/ticket/locker.rb
artfully_ose-1.2.0.pre.11 app/models/ticket/locker.rb
artfully_ose-1.2.0.pre.10 app/models/ticket/locker.rb
artfully_ose-1.2.0.pre.9 app/models/ticket/locker.rb
artfully_ose-1.2.0.pre.8 app/models/ticket/locker.rb
artfully_ose-1.2.0.pre.7 app/models/ticket/locker.rb
artfully_ose-1.2.0.pre.6 app/models/ticket/locker.rb
artfully_ose-1.2.0.pre.5 app/models/ticket/locker.rb
artfully_ose-1.2.0.pre.4 app/models/ticket/locker.rb
artfully_ose-1.2.0.pre.3 app/models/ticket/locker.rb
artfully_ose-1.2.0.pre.2 app/models/ticket/locker.rb
artfully_ose-1.2.0.pre.1 app/models/ticket/locker.rb