164 lines
3.9 KiB
Ruby
164 lines
3.9 KiB
Ruby
class PProduct < ActiveRecord::Base
|
|
|
|
belongs_to :image_file
|
|
belongs_to :p_product_cat
|
|
|
|
|
|
belongs_to :p_origine
|
|
|
|
belongs_to :p_ep
|
|
|
|
has_many :p_product_images
|
|
|
|
has_many :p_product_colors, :dependent => :destroy
|
|
has_many :p_colors, :through => :p_product_colors
|
|
|
|
has_many :p_product_certifs, :dependent => :destroy
|
|
has_many :p_certifs, :through => :p_product_certifs
|
|
|
|
has_many :p_product_sizes, :dependent => :destroy
|
|
has_many :p_sizes, :through => :p_product_sizes
|
|
|
|
has_many :p_product_qtes, :dependent => :destroy
|
|
has_many :p_qtes, :through => :p_product_qtes
|
|
|
|
|
|
has_many :p_product_stocks, :dependent => :destroy
|
|
accepts_nested_attributes_for :p_product_stocks
|
|
|
|
has_many :p_degressifs, :dependent => :destroy
|
|
accepts_nested_attributes_for :p_degressifs, :allow_destroy => true
|
|
|
|
|
|
|
|
scope :enableds, -> {where(:archived => false, :enabled => true)}
|
|
|
|
|
|
def default_image
|
|
self.p_product_images.order(:position).first
|
|
end
|
|
|
|
|
|
def get_prices(p_customer=nil)
|
|
if p_customer
|
|
p_price_cat = p_customer.p_price_cat
|
|
else
|
|
p_price_cat = PPriceCat.first
|
|
end
|
|
self.p_degressifs.joins(:p_price_cats).where(:p_price_cats => {:id => p_price_cat.id}).order("nbr ASC").all
|
|
end
|
|
|
|
after_save do
|
|
self.generate_stock
|
|
|
|
end
|
|
|
|
after_create do
|
|
self.generate_degressif
|
|
end
|
|
|
|
|
|
def generate_degressif
|
|
vals = [0]#[100,200,300,400,500,1000,3000,5000,10000]
|
|
|
|
vals.each do |val|
|
|
|
|
self.p_degressifs.create(:nbr => val, :p_price_cat_ids => PPriceCat.all.ids)
|
|
|
|
end
|
|
|
|
|
|
end
|
|
|
|
|
|
def self.for_search(search)
|
|
PProduct.where(:archived => false).where("name LIKE ? or code LIKE ?", "%#{search}%", "%#{search}%")
|
|
end
|
|
|
|
after_create do
|
|
|
|
end
|
|
|
|
|
|
def generate_stock
|
|
if !self.archived
|
|
ids_saveds = []
|
|
ids_new_saveds = []
|
|
|
|
if self.p_sizes.count > 0
|
|
|
|
self.p_sizes.each do |p_size|
|
|
if self.p_colors.count > 0
|
|
|
|
self.p_colors.each do |p_color|
|
|
if !(p_product_stock = self.p_product_stocks.where(:p_size_id => p_size.id, :p_color_id => p_color.id).first)
|
|
|
|
p_product_stock = self.p_product_stocks.create(:p_size_id => p_size.id, :p_color_id => p_color.id, :stock_th_ok => 0, :stock_ok => 0)
|
|
|
|
ids_new_saveds << p_product_stock.id
|
|
end
|
|
|
|
ids_saveds << p_product_stock.id
|
|
|
|
end
|
|
|
|
else
|
|
|
|
|
|
if !(p_product_stock = self.p_product_stocks.where(:p_color_id => nil, :p_size_id => p_size.id).first)
|
|
|
|
p_product_stock = self.p_product_stock.create(:p_size_id => p_size.id, :stock_th_ok => 0, :stock_ok => 0)
|
|
|
|
ids_new_saveds << p_product_stock.id
|
|
end
|
|
|
|
ids_saveds << p_product_stock.id
|
|
|
|
end
|
|
|
|
end
|
|
|
|
else
|
|
|
|
if self.p_colors.count > 0
|
|
|
|
self.p_colors.each do |p_color|
|
|
|
|
if !(p_product_stock = self.p_product_stocks.where(:p_color_id => p_color.id, :p_size_id => nil).first)
|
|
|
|
p_product_stock = self.p_product_stocks.create(:p_color_id => p_color.id, :stock_th_ok => 0, :stock_ok => 0)
|
|
|
|
ids_new_saveds << p_product_stock.id
|
|
end
|
|
|
|
ids_saveds << p_product_stock.id
|
|
|
|
end
|
|
|
|
|
|
|
|
else
|
|
|
|
if !(p_product_stock = self.p_product_stocks.where(:p_color => nil, :p_size_id => nil).first)
|
|
|
|
p_product_stock = self.p_product_stocks.create(:stock_th_ok => 0, :stock_ok => 0)
|
|
|
|
ids_new_saveds << p_product_stock.id
|
|
end
|
|
|
|
ids_saveds << p_product_stock.id
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
self.p_product_stocks.where("id not IN (?)", ids_saveds).destroy_all
|
|
end
|
|
end
|
|
|
|
|
|
end
|