#
#= 子モデル用モジュール
# Authors:: Sumiyo Yamamoto
# Copyright:: Copyright (C) OrbusNeich Medical K.K.  2010.
#--
# date        name                   note
# 2010.7.21   Sumiyo Yamamoto        新規作成
#-------------------------------------------------------------------------------
#++
module Comm::Module::Model
  #= 子モデル用モジュール
  #------------------------------------------------------------------------#++
  module Children
    #== 更新
    #-----------------------------------------------------------------#++
    def update_children(parent_id = nil, params = {})
      result = true
      mycls =  self.class
      
      1.times do
        # 更新
        olds = mycls.sassign(@parent_key, parent_id).all
        temps = params.partition {|x| x['id'].blank? }
        up_params = temps[1]
        is_update_logging = @children_logging && respond_to?(:log_detail_update)
        up_params.each do |p|
#          unless p['change']
#            next
#          end
          p.delete('change')
          ar = olds.get_by_search_val(p['id'].to_i, 'id')
          ar.attributes = p
          log_detail_update(@log_id, ar) if is_update_logging
          unless ar.save
            errors.add_to_base(EMJ0003 + EMD0004 + "(#{self.class.to_s})")
            result = false
            break
          end
          
        end
        unless result
          break
        end
        
        # 登録
        new_params = temps[0]
        is_create_logging = @children_logging && respond_to?(:log_detail_create)
        new_params.each do |p|
          p[@parent_key] = parent_id
          ar = mycls.new(p)
          unless ar.save
            errors.add_to_base(EMJ0003 + EMD0004 + "(#{self.class.to_s})")
            result = false
            break
          end
          log_detail_create(@log_id, ar) if is_create_logging
        end
        unless result
          break
        end
        
        # 削除
        old_ids = olds.extract('id')
        new_ids = params.map {|x| x['id'].to_i }
        del_ids = old_ids - new_ids
        if @children_logging && respond_to?(:log_detail_destroy) && del_ids.length != 0
          del_ids.each do |i|
            ar = olds.get_by_search_val(i, 'id')
            log_detail_destroy(@log_id, ar)
          end
        end
        mycls.destroy(del_ids)
      end
      
      return result
    end
  end
end
