#
#= suppliers モデル
# Authors:: Sumiyo Yamamoto
# Copyright:: Copyright (C) OrbusNeich Medical K.K.  2010.
#--
# date        name                   note
# 2010.11.5   Sumiyo Yamamoto        新規登録
#-------------------------------------------------------------------------------
#++
class Supplier < Comm::BaseModel::PaymentMaster
  #include Comm::Module::Model::UnifiedIF::Partners
  include Comm::Module::Model::UnifiedIF::Common
  belongs_to :group,
             :class_name => "SupplierGroup",
             :foreign_key => "payto_supplier_group_id"
  has_many :suppliers_users, :dependent => :destroy
  has_many :users , :through=>:suppliers_users
  
  #== named_scope
  #-----------------------------------------------------------------#++
  def after_initialize
    @self_id_columns = [:payto_supplier_id]
  end

  #== named_scope
  #-----------------------------------------------------------------#++
  named_scope :product_id, lambda {|product_set_id, product_id|
    {:conditions => [
      '(product_set_id = ?) AND (product_id = ? OR product_id = ?',
      product_set_id,
      product_id,
      LIST_ALL
    ]}
  }
  
  def self.own
    Supplier.find(:first,
                  :include=>[:group], 
                  :conditions=>{:id => App::Const::SystemCode::OWN_SUPPLIER_ID})
  end
  
  def self.is_own?(id)
    return (App::Const::SystemCode::OWN_SUPPLIER_ID == id) ? true : false
  end
  
  def validate
    emsg = ''
    ars = Supplier.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[:supplier]
#    group_params = params[:supplier_group]
#    extract_shared_params(base_params, group_params, SupplierGroup)
#    payment_params = params[:supplier_group_payment]
#    extract_shared_params(base_params, payment_params, SupplierGroupPayment) if payment_params
    
    fill_disp_sort(base_params)
    self.update_attributes!(base_params)
    
    if base_params[:payto_supplier_group_id].to_i == Comm::Const::DispNameLists::LIST_SELF
      group_params = {}
      extract_shared_params(base_params, group_params, SupplierGroup)
      # "self"のときはgroup登録
      base_params.delete(:payto_supplier_group_id)
      group_params[:invalid_flag_code] = 0
      fill_disp_sort(group_params, SupplierGroup)
      self.create_group(group_params)
      MasterRevision.up_rev_number(SupplierGroup.name.tableize)
#    elsif base_params[:payto_supplier_group_id].to_i > 0 #group idを必須項目から外したので
#      # group更新
#      self.group.update_attribute(:cutoff_date_code, group_params[:cutoff_date_code])
#      MasterRevision.up_rev_number(SupplierGroup.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 params[:payment_conditions_cnt].to_i == 1 && payment_params && cur_group && cur_group.id.to_i > 0
#      #master_revisionは中でincrement
#      update_payment_condition(cur_group, payment_params)
#    end
    
    if base_params[:payto_supplier_id].to_i == Comm::Const::DispNameLists::LIST_SELF
      self.payto_supplier_id = self.id
    end
    save!
    true
  end
  
  # 削除は得意先だけ
  def destroy_exec
    destroy
    true  
  end
end
