Nicolas Bally e4e4463be1 suite
2021-05-15 15:14:41 +02:00

63 lines
1.9 KiB
Ruby

# -*- encoding : utf-8 -*-
class TableRow < ActiveRecord::Base
has_many :cel_tables, -> {order("position")}
belongs_to :table_content
attr_accessor :skip_before_update
before_create do
if !position
self.position = 1
end
if position
TableRow.find(:all, :conditions => ["position >= ? and table_content_id = ?",self.position,self.table_content_id]).each do |table_row|
table_row.position = table_row.position + 1
table_row.skip_before_update = true
table_row.save!
end
end
end
before_update do
if !skip_before_update
if self.position_changed?
#si la position est plus grande que l'ancienne
if self.changes['position'][1] > self.changes['position'][0]
TableRow.find(:all, :conditions => ["position > ? and position <= ? and table_content_id = ?",self.changes['position'][0],self.changes['position'][1],self.table_content_id]).each do |table_row|
table_row.position = table_row.position - 1
table_row.skip_before_update = true
table_row.save!
end
end
#si la position est plus petite que l'ancienne.
if self.changes['position'][1] < self.changes['position'][0]
TableRow.find(:all, :conditions => ["position >= ? and position < ? and table_content_id = ?",self.changes['position'][1],self.changes['position'][0],self.table_content_id]).each do |table_row|
table_row.position = table_row.position + 1
table_row.skip_before_update = true
table_row.save!
end
end
end
end
end
before_destroy do
TableRow.find(:all, :conditions => ["position > ? and table_content_id = ?",self.position,self.table_content_id]).each do |table_row|
table_row.position = table_row.position - 1
table_row.skip_before_update = true
table_row.save!
end
table = self.table_content
table_past_count = table.nbr_rows
table.nbr_rows = table_past_count - 1
table.save
end
end