class Arriving < CommLogistics::Base::Model::SuperiorStock
  include Comm::Module::Model::Logging
  #has_many :arriving_details, :dependent => :destroy
  has_many :child_details,
           :class_name => 'ArrivingDetail',
           :dependent => :destroy,
           :order => 'seq_number'
  
  def create_arriving(other_main, other_details, stock_details)
    main = extract_arriving_params(other_main)
    
    # update stocks
    update_own_stock(other_main, stock_details, CALC_ADD)
    self.attributes = main
    unless save
      raise EMJ0001 + EMD0001
    end
    details = extract_arrinving_details(other_details)
    update_details(self.id, details)
    true
  end
  
  def delete_arriving(stock_details)
    # update stocks
    # (-)own stock
    update_own_stock(self, stock_details, CALC_SUB)
    #自分で消す
    destroy
    true
  end
  
protected
  def extract_arriving_params(params)
    arriving_params = {}
    arriving_column = self.class.column_names
    excludes = ['id', 'created_at', 'updated_at', 'deleted_at']
    if params.is_a?(Hash)
      param_hash = params
    else
      param_hash = [params].ext_hashfy
    end
    param_hash.each do |key, value|
      if arriving_column.include?(key) && !excludes.include?(key)
        arriving_params[key] = value
      end
    end
    arriving_params
  end
  
  def extract_arrinving_details(details, arriving_id=self.id)
    result = []
    details.each do |d|
      result << extract_arrinving_detail(d, arriving_id)
    end
    result
  end
  
  def extract_arrinving_detail(detail, arriving_id)
    arriving_detail = {}
    detail_column = detail_class.column_names
    excludes = ['id', 'created_at', 'updated_at', 'deleted_at']
    detail.each do |key, value|
      if detail_column.include?(key) && !excludes.include?(key)
        arriving_detail[key] = value
      end
    end
    arriving_detail['arriving_id'] = arriving_id
    arriving_detail
  end
end
