32 lines
1.4 KiB
Ruby
32 lines
1.4 KiB
Ruby
module JamRuby
|
|
|
|
# a sale is created every time someone tries to buy something
|
|
class Sale < ActiveRecord::Base
|
|
|
|
belongs_to :user, class_name: 'JamRuby::User'
|
|
has_many :sale_line_items, class_name: 'JamRuby::SaleLineItem'
|
|
|
|
validates :order_total, numericality: { only_integer: false }
|
|
validates :user, presence: true
|
|
|
|
def self.create(user)
|
|
sale = Sale.new
|
|
sale.user = user
|
|
sale.order_total = 0
|
|
sale.save
|
|
sale
|
|
end
|
|
|
|
def self.check_integrity
|
|
SaleLineItem.select([:total, :not_known, :succeeded, :failed, :refunded, :voided]).find_by_sql(
|
|
"SELECT COUNT(sale_line_items.id) AS total,
|
|
COUNT(CASE WHEN transactions.id IS NULL THEN 1 ELSE null END) not_known,
|
|
COUNT(CASE WHEN transactions.transaction_type = '#{RecurlyTransactionWebHook::SUCCESSFUL_PAYMENT}' THEN 1 ELSE null END) succeeded,
|
|
COUNT(CASE WHEN transactions.transaction_type = '#{RecurlyTransactionWebHook::FAILED_PAYMENT}' THEN 1 ELSE null END) failed,
|
|
COUNT(CASE WHEN transactions.transaction_type = '#{RecurlyTransactionWebHook::REFUND}' THEN 1 ELSE null END) refunded,
|
|
COUNT(CASE WHEN transactions.transaction_type = '#{RecurlyTransactionWebHook::VOID}' THEN 1 ELSE null END) voided
|
|
FROM sale_line_items
|
|
LEFT OUTER JOIN recurly_transaction_web_hooks as transactions ON subscription_id = recurly_subscription_uuid")
|
|
end
|
|
end
|
|
end |