#
#= customers モデル
# Authors:: Sumiyo Yamamoto
# Copyright:: Copyright (C) OrbusNeich Medical K.K.  2010.
#--
# date        name                   note
# 2010.11.5   Sumiyo Yamamoto        新規登録
#-------------------------------------------------------------------------------
#++
class Customer < Comm::BaseModel::PaymentMaster
  #include Comm::Module::Model::UnifiedIF::Partners
  include Comm::Module::Model::UnifiedIF::Common
  belongs_to :group,
             :class_name => "CustomerGroup",
             :foreign_key => "charge_customer_group_id"
  has_many :customers_users, :dependent => :destroy
  has_many :users , :through=>:customers_users
  
  def after_initialize
    @self_id_columns = [:charge_customer_id]
  end
  
  def validate
    emsg = ''
    ars = Customer.disp_name_is(self.disp_name).valid.id_is_not(self.id)
    record_num = ars.length
    
    if record_num == 0
      dispname = Comm::Tool::CharUtil::full_kana_to_half(self.disp_name)
      ars = Customer.disp_name_is(dispname).valid.id_is_not(self.id)
      record_num = ars.length
    end
    
    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[:customer]
#    payment_params = params[:customer_group_payment]
#    extract_shared_params(base_params, payment_params, CustomerGroupPayment) if payment_params
#    payment_params = params[:customer_group_payment]
    
    fill_disp_sort(base_params)
    self.update_attributes!(base_params)
    
    if base_params[:charge_customer_group_id].to_i == Comm::Const::DispNameLists::LIST_SELF
      group_params = {}
      extract_shared_params(base_params, group_params, CustomerGroup)
      # "self"のときはgroup登録
      base_params.delete(:charge_customer_group_id)
      group_params[:invalid_flag_code] = 0
      fill_disp_sort(group_params, CustomerGroup)
      self.create_group(group_params)
      MasterRevision.up_rev_number(CustomerGroup.name.tableize)
#    elsif base_params[:charge_customer_group_id].to_i > 0 #group idを必須項目から外したので
      # group更新
#      self.group.update_attribute(:cutoff_date_code, group_params[:cutoff_date_code])
#      MasterRevision.up_rev_number(CustomerGroup.name.tableize)
    end
#    cur_group = self.group
    
    #支払い条件が1の場合は更新 / 0の場合は、削除
#    if cur_group && cur_group.id.to_i > 0
#      if params[:payment_conditions_cnt].to_i == 1
#        if payment_params
#          update_payment_condition(cur_group, payment_params)
#        end
#      elsif params[:payment_conditions_cnt].to_i == 0
#        destroy_payment_condition(cur_group)
#      end
#    end
    
    if base_params[:charge_customer_id].to_i == Comm::Const::DispNameLists::LIST_SELF
      self.charge_customer_id = self.id
    end
    save!
    
    # 施設・施設紐付けの作成
    need_create_warehouse = params[:create_warehouse]
    if need_create_warehouse
      wh, whc = {},{}
      extract_shared_params(base_params, wh, Warehouse)
      wh[:invalid_flag_code] = 0
      wh[:own_flag_code] = 0
      fill_disp_sort(wh, Warehouse)
      who = Warehouse.new(wh)
      who.save!
      extract_shared_params(wh, whc, WarehousesCustomer)
      whc[:customer_id] = self.id
      whc[:identical_flag_code] = FLAG_ON
      who.warehouses_customers.create(whc)
      who.save!
      MasterRevision.up_rev_number(Warehouse.name.tableize)
      MasterRevision.up_rev_number(WarehousesCustomer.name.tableize)
    end
    
    true
  end
  
  # 削除は得意先だけ
  def destroy_exec
    destroy
    true
  end
end
