Class: Xsys::Model::Product
- Inherits:
-
Object
- Object
- Xsys::Model::Product
- Defined in:
- lib/xsys/model/product.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(attributes = {}) ⇒ Product
constructor
A new instance of Product.
- #markup_with_list(price_list_id) ⇒ Object
- #price_date_for_list(price_list_id) ⇒ Object
- #price_in_list(price_list_id) ⇒ Object
- #sellable_stocks ⇒ Object
- #sellable_stocks_quantity(options = {}) ⇒ Object
- #service_stocks ⇒ Object
- #service_stocks_quantity ⇒ Object
- #stock_at(shop_code) ⇒ Object
- #stock_sum(shop_codes) ⇒ Object
- #stocks_quantity ⇒ Object
Constructor Details
#initialize(attributes = {}) ⇒ Product
Returns a new instance of Product.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/xsys/model/product.rb', line 16 def initialize(attributes={}) time_fields = ['cost_updated_at', 'last_cost_updated_at', 'price_updated_at'] decimal_fields = ['vat_rate', 'taxed_cost', 'vat_cost', 'total_cost', 'last_total_cost', 'regular_price', 'reduced_price', 'web_price'] attributes.each do |k, v| if k.to_s == 'category' @category = ProductCategory.new(v) unless v.nil? elsif k.to_s == 'provider' @provider = ProductProvider.new(v) unless v.nil? elsif k.to_s == 'stocks' @stocks = v.map { |s| Stock.new(s) } unless v.nil? elsif k.to_s == 'prices' @prices = v.map { |s| ProductPriceList.new(s) } elsif time_fields.include?(k.to_s) self.send("#{k}=", Time.parse(v)) unless v.nil? elsif decimal_fields.include?(k.to_s) self.send("#{k}=", BigDecimal.new(v)) unless v.nil? else self.send("#{k}=", v) if self.respond_to?(k) end end end |
Class Method Details
.attr_list ⇒ Object
4 5 6 7 8 9 10 11 12 |
# File 'lib/xsys/model/product.rb', line 4 def self.attr_list [:id, :name, :cost_updated_at, :sellable, :product_category_id, :product_provider_id, :vat_rate, :taxed_cost, :vat_cost, :total_cost, :pending_ordered_quantity, :stocks, :prices, :category, :provider, :last_total_cost, :last_cost_updated_at, :price_updated_at, :online_stock, :product_size_code, :weight, :length, :width, :height, :packages_quantity, :ean, :packages, :regular_price, :reduced_price, :web_price, :brand, :model ] end |
Instance Method Details
#markup_with_list(price_list_id) ⇒ Object
96 97 98 99 100 |
# File 'lib/xsys/model/product.rb', line 96 def markup_with_list(price_list_id) prices.find { |p| p.price_list_id.to_i == price_list_id.to_i }.try(:markup) || BigDecimal.new('0.0') end |
#price_date_for_list(price_list_id) ⇒ Object
90 91 92 93 94 |
# File 'lib/xsys/model/product.rb', line 90 def price_date_for_list(price_list_id) prices.find { |p| p.price_list_id.to_i == price_list_id.to_i }.try(:price_updated_at) end |
#price_in_list(price_list_id) ⇒ Object
102 103 104 105 106 |
# File 'lib/xsys/model/product.rb', line 102 def price_in_list(price_list_id) prices.find { |p| p.price_list_id.to_i == price_list_id.to_i }.try(:total_price) || BigDecimal.new('0.0') end |
#sellable_stocks ⇒ Object
40 41 42 |
# File 'lib/xsys/model/product.rb', line 40 def sellable_stocks stocks.find_all { |s| !s.shop_service } end |
#sellable_stocks_quantity(options = {}) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/xsys/model/product.rb', line 44 def sellable_stocks_quantity(={}) result = 0 sellable_stocks.each do |stock| if [:skip_exhibition] if !stock.shop_has_exhibition result += stock.quantity elsif stock.quantity > 0 result += (stock.quantity - 1) else result += stock.quantity end else result += stock.quantity end end result end |
#service_stocks ⇒ Object
64 65 66 |
# File 'lib/xsys/model/product.rb', line 64 def service_stocks stocks.find_all { |s| s.shop_service } end |
#service_stocks_quantity ⇒ Object
68 69 70 |
# File 'lib/xsys/model/product.rb', line 68 def service_stocks_quantity service_stocks.map(&:quantity).sum end |
#stock_at(shop_code) ⇒ Object
84 85 86 87 88 |
# File 'lib/xsys/model/product.rb', line 84 def stock_at(shop_code) stocks.find { |s| s.shop_code.to_s.upcase == shop_code.to_s.upcase }.try(:quantity).to_i end |
#stock_sum(shop_codes) ⇒ Object
76 77 78 79 80 81 82 |
# File 'lib/xsys/model/product.rb', line 76 def stock_sum(shop_codes) formatted_shop_codes = shop_codes.map(&:to_s).map(&:upcase) stocks.find_all { |s| formatted_shop_codes.include?(s.shop_code.to_s.upcase) }.map(&:quantity).sum end |
#stocks_quantity ⇒ Object
72 73 74 |
# File 'lib/xsys/model/product.rb', line 72 def stocks_quantity stocks.map(&:quantity).sum end |