83 lines
2.1 KiB
Ruby
83 lines
2.1 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
|
|
|
|
|
|
def dup
|
|
@new = TableRow.new(self.attributes)
|
|
@new.id = nil
|
|
@new.table_content_id = nil
|
|
@new.save
|
|
|
|
@new.cel_tables.destroy_all
|
|
self.cel_tables.each do |cel_table|
|
|
|
|
new_td = cel_table.dup
|
|
new_td.table_row = @new
|
|
new_td.save
|
|
|
|
end
|
|
|
|
@new
|
|
|
|
end
|
|
|
|
|
|
end
|