Class: Auctify::Sale::Base

Inherits:
ApplicationRecord show all
Includes:
Behavior::Base, Folio::Featurable::WithPosition, Folio::FriendlyId, Folio::Publishable::Basic
Defined in:
app/models/auctify/sale/base.rb

Direct Known Subclasses

Auction, Retail

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Behavior::Base

#auctify_id, #object_from_auctify_id

Constructor Details

#initialize(*args) ⇒ Base

Returns a new instance of Base.



66
67
68
69
70
# File 'app/models/auctify/sale/base.rb', line 66

def initialize(*args)
  super

  self.bid_steps_ladder = configuration.default_bid_steps_ladder if bid_steps_ladder.blank?
end

Class Method Details

.latest_published_sales_by_item_subtableObject



51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'app/models/auctify/sale/base.rb', line 51

def self.latest_published_sales_by_item_subtable
  # see https://www.salsify.com/blog/engineering/most-recent-by-group-in-rails
  sales_table = self.arel_table

  latest_sales_query = sales_table.project(sales_table[:item_id],
                                           sales_table[:id].maximum.as("latest_sale_id"))
                                  .where(sales_table[:published].eq(true))
                                  .group(sales_table[:item_id])

  latest_sales_table = Arel::Table.new(latest_sales_query).alias(:latest_sales)  # need to perform join

  sales_table.join(latest_sales_query.as(latest_sales_table.name.to_s), Arel::Nodes::InnerJoin)
             .on(sales_table[:id].eq(latest_sales_table[:latest_sale_id]))
end

Instance Method Details

#auctioneer_commision_from_buyerObject



99
100
101
102
103
104
105
106
107
# File 'app/models/auctify/sale/base.rb', line 99

def auctioneer_commision_from_buyer
  return nil if sold_price.nil?

  percent = buyer_commission_in_percent \
            || (pack&.commission_in_percent) \
            || Auctify.configuration.auctioneer_commission_in_percent

  sold_price * percent * 0.01
end

#auctioneer_commision_from_sellerObject



95
96
97
# File 'app/models/auctify/sale/base.rb', line 95

def auctioneer_commision_from_seller
  (seller_commission_in_percent || 0) * 0.01 * offered_price
end

#item=(item) ⇒ Object

need to cover wrong class of item before assigning



73
74
75
76
77
78
# File 'app/models/auctify/sale/base.rb', line 73

def item=(item)
  @item = item
  valid_item

  super if errors.blank?
end

#publish!Object



90
91
92
93
# File 'app/models/auctify/sale/base.rb', line 90

def publish!
  self.published = true
  save
end