+ def self.validate_elements_serial c
+ c.map {|conf|
+ Sheet.validate_element_serial(conf[:elements], conf[:name], conf[:offset]) ? nil : false
+ }.compact.empty?
+ end
+
+ def validate_serial_list
+ l = []
+ self.class.each_element_class_names do |k|
+ l << self.elements_by_class_name(k)
+ end
+# l = [self.sheet_panels]
+ [
+ {:elements => l, :name => :t, :offset => 0},
+ {:elements => l, :name => :z, :offset => 1}
+ ]
+ end
+
+ def validate_child
+# r1 = Panel.validate_elements_id validate_id_list
+ Sheet.validate_elements_serial validate_serial_list
+ end
+
+ def boost
+ @new_element_index = 0
+ self.panel_elements.each do |elm|
+ if elm.new_record?
+ elm.new_index = @new_element_index
+ @new_element_index += 1
+ end
+ end
+ end
+
+ def store attr, operators
+ if attr == false
+ self.errors.add :base, I18n.t('errors.invalid_json')
+ return false
+ end
+ self.attributes = attr
+ self.overwrite operators
+ res = false
+ Sheet.transaction do
+ self.sheet_elements.each do |elm|
+ elm.new_sheet = self
+ elm.boost operators
+ end
+ res = self.save
+ unless validate_child
+ res = false
+ self.errors.add :base, I18n.t('errors.invalid_t')
+ raise ActiveRecord::Rollback
+ end
+ end
+ res