Module: RailsTrade::Good

Extended by:
ActiveSupport::Concern
Defined in:
app/models/rails_trade/good.rb

Instance Method Summary collapse

Instance Method Details

#default_promote_goodsObject



29
30
31
# File 'app/models/rails_trade/good.rb', line 29

def default_promote_goods
  PromoteGood.default.where(good_type: self.class.base_class.name, good_id: [nil, self.id])
end

#final_priceObject



20
21
22
23
# File 'app/models/rails_trade/good.rb', line 20

def final_price
  compute_order_amount
  #self.retail_price + self.promote_price
end

#generate_order(buyer: nil, cart: nil, maintain_id: nil, **params) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'app/models/rails_trade/good.rb', line 40

def generate_order(buyer: nil, cart: nil, maintain_id: nil, **params)
  if buyer
    o = buyer.orders.build
  elsif cart
    o = cart.orders.build
  else
    raise 'please assign buyer or cart'
  end
  
  o.organ_id = self.organ_id if self.respond_to?(:organ_id)
  if o.respond_to?(:maintain_id)
    o.maintain_id = maintain_id
    o.organ_id ||= o.maintain&.organ_id
  end
  
  ti = o.trade_items.build(good: self)
  ti.assign_attributes params.slice(:number)
  ti.init_amount
  ti.compute_promote
  ti.sum_amount

  o.assign_attributes params.slice(:extra, :currency)
  o.compute_promote
  o.compute_amount
  o
end

#generate_order!(buyer: nil, cart: nil, maintain_id: nil, **params) ⇒ Object



33
34
35
36
37
38
# File 'app/models/rails_trade/good.rb', line 33

def generate_order!(buyer: nil, cart: nil, maintain_id: nil, **params)
  o = generate_order(buyer: buyer, cart: cart, maintain_id: maintain_id, **params)
  o.check_state
  o.save!
  o
end

#order_doneObject



67
68
69
# File 'app/models/rails_trade/good.rb', line 67

def order_done
  puts 'Should realize in good entity'
end

#valid_promote_goodsObject



25
26
27
# File 'app/models/rails_trade/good.rb', line 25

def valid_promote_goods
  PromoteGood.valid.where(good_type: self.class.base_class.name, good_id: [nil, self.id]).where.not(promote_id: self.promote_goods.select(:promote_id).unavailable)
end