64 lines
1.4 KiB
Ruby
64 lines
1.4 KiB
Ruby
class PProductSubCat < ApplicationRecord
|
|
has_many :p_product_p_product_sub_cats, :dependent => :destroy
|
|
|
|
attr_accessor :skip_before_update, :skip_permalink
|
|
|
|
has_many :p_products, :through => :p_product_p_product_sub_cats
|
|
|
|
acts_as_tree
|
|
|
|
validates :code, :presence => true, uniqueness: { scope: :parent_id}
|
|
validates :name, :presence => true
|
|
|
|
def member_label
|
|
"#{self.code} #{self.name}"
|
|
end
|
|
|
|
|
|
before_create do
|
|
if !position
|
|
top = PProductSubCat.where( :parent_id => self.parent_id).order("position DESC").first
|
|
if top
|
|
self.position = top.position.to_i + 1
|
|
else
|
|
self.position = 1
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
before_update do
|
|
|
|
if self.parent_id_changed?
|
|
|
|
PProductSubCat.where(["position > ? and parent_id "+(self.changes['parent_id'][0] ? "=" : "IS")+" ?",self.position,self.changes['parent_id'][0]]).each do |portlet|
|
|
portlet.position = portlet.position - 1
|
|
portlet.save!
|
|
end
|
|
|
|
self.position = 1
|
|
|
|
PProductSubCat.where(["parent_id "+(self.parent_id ? "=" : "IS")+" ?",self.parent_id]).each do |portlet|
|
|
portlet.position = portlet.position + 1
|
|
|
|
portlet.save!
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
end
|
|
end
|
|
|
|
before_destroy do
|
|
PProductSubCat.where(["position > ? and parent_id "+(self.parent_id ? "=" : "IS")+" ?",self.position,self.parent_id]).each do |portlet|
|
|
portlet.position = portlet.position - 1
|
|
portlet.skip_before_update = true
|
|
portlet.save!
|
|
end
|
|
|
|
end
|
|
|
|
end
|