Class: SupplierItem
Overview
== Schema Information
Table name: supplier_items
Database name: primary
id :integer not null, primary key
active :boolean default(TRUE), not null
auto_receive :boolean
stock_item :boolean default(TRUE), not null
supplier_description :string(255)
supplier_sku :string(255)
uom :string(255)
uom_quantity :integer
created_at :datetime
updated_at :datetime
creator_id :integer
item_id :integer
supplier_id :integer
updater_id :integer
Indexes
idx_item_id_active (item_id,active)
idx_supplier_id_item_id (supplier_id,item_id)
Foreign Keys
supplier_items_item_id_fk (item_id => items.id)
Constant Summary
collapse
- SUPPLIER_IDS_WHOSE_DROPSHIPS_COST_FOR_CUSTOMER_IS_ZERO =
per Venu Heatlay Custom Mats dropship free
[363_010].freeze
Models::Auditable::ALWAYS_IGNORED
Models::Schedulable::SIMPLE_FORM_OPTIONS
Instance Attribute Summary collapse
#creator, #updater
Class Method Summary
collapse
Instance Method Summary
collapse
#all_skipped_columns, #audit_reference_data, #should_not_save_version, #stamp_record
ransackable_associations, ransackable_attributes, ransackable_scopes, ransortable_attributes, #to_relation
config
#after_commit
#publish_event
Instance Attribute Details
#item_id ⇒ Object
56
57
58
59
|
# File 'app/models/supplier_item.rb', line 56
validates :item_id, uniqueness: {
scope: :supplier_id, message: 'is already present on the price list for this supplier',
unless: -> { item_id.nil? or supplier_id.nil? }
}
|
#uom ⇒ Object
55
|
# File 'app/models/supplier_item.rb', line 55
validates :supplier, :item, :uom, :uom_quantity, presence: true
|
#uom_quantity ⇒ Object
55
|
# File 'app/models/supplier_item.rb', line 55
validates :supplier, :item, :uom, :uom_quantity, presence: true
|
Class Method Details
.active ⇒ ActiveRecord::Relation<SupplierItem>
A relation of SupplierItems that are active. Active Record Scope
69
|
# File 'app/models/supplier_item.rb', line 69
scope :active, -> { where(active: true) }
|
.uom_for_select ⇒ Object
106
107
108
|
# File 'app/models/supplier_item.rb', line 106
def self.uom_for_select
SupplierItem.where.not(uom: nil).distinct.order(:uom).pluck(:uom).map { |e| e.squish.upcase }.uniq
end
|
Instance Method Details
#current_price ⇒ Object
71
72
73
74
75
76
77
78
79
80
81
82
|
# File 'app/models/supplier_item.rb', line 71
def current_price
if supplier_item_prices.loaded?
supplier_item_prices
.select { |p| p.effective_from <= Date.current }
.max_by { |p| [p.effective_from, p.created_at] }
else
supplier_item_prices.current.last
end
end
|
#deep_dup ⇒ Object
36
37
38
|
# File 'app/models/supplier_item.rb', line 36
def deep_dup
deep_clone(include: %i[supplier_item_prices price_thresholds])
end
|
#dropships_cost_for_customer_is_zero? ⇒ Boolean
#get_price_for_qty(qty) ⇒ Object
84
85
86
87
88
89
90
91
92
|
# File 'app/models/supplier_item.rb', line 84
def get_price_for_qty(qty)
price = current_price.unit_cost
if price_thresholds.any?
price_thresholds.each do |pt|
price = pt.price if (qty >= pt.min_quantity) && (pt.price < price)
end
end
price
end
|
Validations:
41
|
# File 'app/models/supplier_item.rb', line 41
belongs_to :item, inverse_of: :supplier_items, optional: true
|
#item_description ⇒ Object
98
99
100
|
# File 'app/models/supplier_item.rb', line 98
def item_description
item.try(:name)
end
|
#item_sku ⇒ Object
94
95
96
|
# File 'app/models/supplier_item.rb', line 94
def item_sku
item.try(:sku)
end
|
#items ⇒ ActiveRecord::Relation<Item>
45
|
# File 'app/models/supplier_item.rb', line 45
has_many :items, inverse_of: :supplier_item
|
#price_thresholds ⇒ ActiveRecord::Relation<PriceThreshold>
44
|
# File 'app/models/supplier_item.rb', line 44
has_many :price_thresholds
|
Validations:
40
|
# File 'app/models/supplier_item.rb', line 40
belongs_to :supplier, optional: true
|
#supplier_item_prices ⇒ ActiveRecord::Relation<SupplierItemPrice>
43
|
# File 'app/models/supplier_item.rb', line 43
has_many :supplier_item_prices, -> { order(:effective_from, :created_at) }, inverse_of: :supplier_item
|
#to_s ⇒ Object
102
103
104
|
# File 'app/models/supplier_item.rb', line 102
def to_s
"#{id} (#{supplier.name})"
end
|