#
#= warehouses モデル
# Authors:: Sumiyo Yamamoto
# Copyright:: Copyright (C) OrbusNeich Medical K.K.  2010.
#--
# date        name                   note
# 2010.11.5   Sumiyo Yamamoto        新規登録
#-------------------------------------------------------------------------------
#++
class Warehouse < Comm::BaseModel::PermanentMaster
  include Comm::Module::Model::UnifiedIF::Common
  has_many :warehouses_customers
  
  def self.is_own?(id)
    flag = find(id).own_flag_code
    return (flag == Comm::Const::MasterCode::MCODE_OWN_OFF) ? false : true
  end
  def self.own_ids
    return self.set(MFIND_V).passign('own_flag_code', [Comm::Const::MasterCode::MCODE_OWN_ON,Comm::Const::MasterCode::MCODE_OWN_RESERVE]).all.extract('id')
  end
  def self.reserve_ids
    return self.set(MFIND_V).asign('own_flag_code', Comm::Const::MasterCode::MCODE_OWN_RESERVE).all.extract('id')
  end
  def self.regular_ids
    return self.set(MFIND_V).asign('own_flag_code', Comm::Const::MasterCode::MCODE_OWN_ON).all.extract('id')
  end
  
  def validate
    emsg = ''
    ars = Warehouse.disp_name_is(self.disp_name).valid.id_is_not(self.id)
    
    record_num = ars.length
    if record_num > 0
       ids = ars.collect{|ar| ar.id}
       emsg << EMJ0005
       emsg << "指定の納品先名が既に登録されています。"
       emsg << "ID:"+ids.inspect
       raise UserOperationError, emsg
    end
  end
  
  # general override
  def create_exec(params)
    update_exec(params)
  end
  
  def update_exec(params)
    base_params = params[:warehouse]
    fill_disp_sort(base_params)
    sub_params = params[:warehouses_customer]
    extract_shared_params(base_params, sub_params, WarehousesCustomer) if sub_params
    
    self.update_attributes!(base_params)
    #if sub_params
    if  params[:multi_cnt].to_i > 0
      if self.warehouses_customers.length > 0
        self.warehouses_customers.first.update_attributes!(sub_params)
        MasterRevision.up_rev_number(WarehousesCustomer.name.tableize)
      else
        self.warehouses_customers.create(sub_params)
        MasterRevision.up_rev_number(WarehousesCustomer.name.tableize)
      end
    elsif params[:multi_cnt].to_i == 0#紐付け数が1から0になったときにdestroyする。
      if self.warehouses_customers.length > 0
        self.warehouses_customers.destroy_all
        MasterRevision.up_rev_number(WarehousesCustomer.name.tableize)
      end
    end
    save!
    true
  end
  
  def destroy_exec
    destroy
    true
  end
end
