From 4dcfc55418d0f000132a8356dee4ae76869b96cd Mon Sep 17 00:00:00 2001 From: Rishabh Saxena Date: Tue, 2 Aug 2016 01:37:55 +0530 Subject: [PATCH] add ability to create and purchase free tickets --- app/models/ticket.rb | 2 +- app/models/ticket_purchase.rb | 20 +++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/app/models/ticket.rb b/app/models/ticket.rb index ec9c3436..8d8864ae 100644 --- a/app/models/ticket.rb +++ b/app/models/ticket.rb @@ -13,7 +13,7 @@ class Ticket < ActiveRecord::Base validates :price_cents, :price_currency, :title, presence: true - validates_numericality_of :price_cents, greater_than: 0 + validates_numericality_of :price_cents, greater_than_or_equal_to: 0 def bought?(user) buyers.include?(user) diff --git a/app/models/ticket_purchase.rb b/app/models/ticket_purchase.rb index b7a8951f..7df0dee7 100644 --- a/app/models/ticket_purchase.rb +++ b/app/models/ticket_purchase.rb @@ -23,7 +23,7 @@ class TicketPurchase < ActiveRecord::Base ActiveRecord::Base.transaction do conference.tickets.each do |ticket| quantity = purchases[ticket.id.to_s].to_i - # if the user bought the ticket, just update the quantity + # if the user bought the ticket and is still unpaid, just update the quantity if ticket.bought?(user) && ticket.unpaid?(user) purchase = update_quantity(conference, quantity, ticket, user) else @@ -39,10 +39,20 @@ class TicketPurchase < ActiveRecord::Base end def self.purchase_ticket(conference, quantity, ticket, user) - purchase = new(ticket_id: ticket.id, - conference_id: conference.id, - user_id: user.id, - quantity: quantity) if quantity > 0 + if quantity > 0 + if ticket.price_cents.zero? + purchase = new(ticket_id: ticket.id, + conference_id: conference.id, + user_id: user.id, + quantity: quantity, + paid: true) + else + purchase = new(ticket_id: ticket.id, + conference_id: conference.id, + user_id: user.id, + quantity: quantity) + end + end purchase end