class PProduct < ApplicationRecord has_many :p_product_p_normes, :dependent => :destroy has_many :p_product_specs, :through => :p_product_p_normes has_many :p_product_refs, :dependent => :destroy accepts_nested_attributes_for :p_product_refs, allow_destroy: true belongs_to :p_product_cat belongs_to :s_brand validates :name, :presence => true validates :code, :presence => true, :uniqueness => true has_many :tvable_tva_rates, :as => :tvable has_many :tva_rates, :through => :tvable_tva_rates has_many :p_product_p_product_sub_cats, :dependent => :destroy has_many :p_product_sub_cats, :through => :p_product_p_product_sub_cats has_many :p_product_p_customer_cats, :dependent => :destroy has_many :p_customer_cats, :through => :p_product_p_customer_cats def self.qi_table_order { :code => {:name => "Code", :reorder => true}, :name => {:name => "Nom", :reorder => true}, :p_customer_cats => {:name => "Cat. client", :reorder => false}, :p_product_cat => {:name => "Catégorie", :reorder => false}, :s_brand => {:name => "Marque", :reorder => true, :sort_name => "s_brands.name"}, :uv => {:name => "Format", :reorder => true, :sort_name => "p_product_refs.uv"}, :capacite => {:name => "PCB", :reorder => true, :sort_name => "p_product_refs.capacite"}, :price_calc => {:name => "Calc. prix", :reorder => true}, :ct_price_ht => {:name => "Prix HT", :reorder => true, :sort_name => "p_product_refs.ct_price_ht"}, :price_calc => {:name => "Prix HT [Kg]", :reorder => false}, :tva_rate => {:name => "TVA Fr", :reorder => false}, :weight => {:name => "Poids", :reorder => true, :sort_name => "p_product_refs.weight"}, :country => {:name => "Pays", :reorder => true}, :sub_country => {:name => "Region", :reorder => true}, :domaine => {:name => "Domaine", :reorder => true}, :actions => {:name => "Actions", :reorder => true} #:created_at => {:name => "Date", :reorder => true}, } #, :sort_name => "code" end # "p_product_refs.ct_price_ht","s_brands.name", "p_product_refs.uv","p_product_refs.capacite"] def self.valid_sort r = [] self.qi_table_order.each do |key, value| if value.instance_of? Hash if value[:reorder] == false elsif value[:reorder] == true if value[:sort_name] r << value[:sort_name] else r << key.to_s end end end end return r end def self.for_search(search) PProduct.where("name LIKE ? or code LIKE ?", "%#{search}%", "%#{search}%").where(:enabled => true) end def self.convert_price_kg PProduct.where(:price_calc => "Kg").all.each do |p_product| weight = nil p_product.p_product_refs.each do |p_product_ref| if p_product_ref.weight.to_f != 0.0 weight = p_product_ref.weight p_product_ref.ct_price_ht = weight * p_product_ref.ct_price_ht p_product_ref.save end end if weight p_product.ct_purchase_price_ht = p_product.ct_purchase_price_ht*weight end p_product.save end end after_create do end after_save do self.p_product_refs.each do |ppr| ppr.save end end def tva_rate(accounting_zone_id) if r = self.tva_rates.where(:accounting_zone_id => accounting_zone_id).first elsif self.p_product_cat and r = self.p_product_cat.tva_rates.where(:accounting_zone_id => accounting_zone_id).first else r = nil end return r end end