Fix tickets turnover calculation
This commit is contained in:
parent
69de418ccd
commit
58cb62dd6d
3 changed files with 20 additions and 6 deletions
|
|
@ -61,12 +61,10 @@ class Ticket < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def tickets_turnover_total(id)
|
def tickets_turnover_total(id)
|
||||||
tickets = TicketPurchase.where(ticket_id: id).paid
|
ticket = Ticket.find(id)
|
||||||
if tickets.blank?
|
return Money.new(0, 'USD') unless ticket
|
||||||
Money.new(0, Ticket.find(id).price_currency)
|
sum = ticket.ticket_purchases.paid.total
|
||||||
else
|
Money.new(sum, ticket.price_currency)
|
||||||
tickets.inject(Money.new(0, tickets.first.price_currency)){ |sum, ticket| sum + (ticket.amount_paid * ticket.quantity) }
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def tickets_sold
|
def tickets_sold
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,11 @@ class TicketPurchase < ApplicationRecord
|
||||||
purchase
|
purchase
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Total amount
|
||||||
|
def self.total
|
||||||
|
sum('amount_paid * quantity')
|
||||||
|
end
|
||||||
|
|
||||||
def pay(payment)
|
def pay(payment)
|
||||||
update_attributes(paid: true, payment: payment)
|
update_attributes(paid: true, payment: payment)
|
||||||
PhysicalTicket.transaction do
|
PhysicalTicket.transaction do
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,17 @@ describe Ticket do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#tickets_turnover_total' do
|
||||||
|
let!(:purchase1) { create :ticket_purchase, ticket: ticket, amount_paid: 5_000, quantity: 1, paid: true, user: user }
|
||||||
|
let!(:purchase2) { create :ticket_purchase, ticket: ticket, amount_paid: 5_000, quantity: 2, paid: true, user: user }
|
||||||
|
let!(:purchase3) { create :ticket_purchase, ticket: ticket, amount_paid: 5_000, quantity: 10, paid: false, user: user }
|
||||||
|
subject { ticket.tickets_turnover_total ticket.id }
|
||||||
|
|
||||||
|
it 'returns turnover as Money with ticket\'s currency' do
|
||||||
|
is_expected.to eq Money.new(5_000 * 3, ticket.price_currency)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '#unpaid?' do
|
describe '#unpaid?' do
|
||||||
let!(:ticket_purchase) { create(:ticket_purchase, user: user, ticket: ticket) }
|
let!(:ticket_purchase) { create(:ticket_purchase, user: user, ticket: ticket) }
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue