#
#= Ranks Approvals コントローラー
#-------------------------------------------------------------------------------
#
class RanksApprovalsController < Comm::BaseController::PermanentMaster
  include Comm::Module::Controller::Table
  #== コンストラクタ
  #-----------------------------------------------------------------#++
  def initialize
    @mcls = RanksApproval
  end
  
  #== テーブル表示
  def table
    #種別ID
    aptype_ids = ApplicationType.find(:all,
                                      :conditions => "invalid_flag_code = #{MCODE_FLAG_OFF}",
                                      :order => 'application_category_id, id').map{|ar| ar.id}
    #役職ID
    rank_ids = Rank.find(:all, :conditions => "invalid_flag_code = #{MCODE_FLAG_OFF}").map{|ar| ar.id}
    #テーブル作成
    result_hash = create_table(rank_ids, aptype_ids, 'rank_id', 'application_type_id', '申請種別')
    respond_to do |format|
      format.ext_json{
        render :json => result_hash.to_json 
      }
      format.xls{
        resp = output_xls(result_hash[@table_name], params)
        resp[:file_name] = @table_name + resp[:file_name]
        render :json => resp.to_json
      }
    end
  end
  
  #関連配列の判断(_override)
  def is_concern(cid, rid)
    ret = false
    @user_rank ||= User.find(session[:user_id]).rank_id
    if is_ap_sales(rid)
      #種別が営業職のみの権限ならば、ユーザが営業かどうかも判断
      ret = true if is_user_sales() and cid == @user_rank
    else
      #通常は役職の一致だけをみる
      ret = true if cid == @user_rank
    end
    return ret
  end
  
  #行ヘッダ文字列の作成(_override用)
  # 申請種別の頭に、申請種別カテゴリをくっつける
  def create_raw_head(row_id_name, rid)
    apc_id = ApplicationType.find(:first,
                                  :select => 'application_category_id',
                                  :conditions => "id = #{rid} and invalid_flag_code = #{MCODE_FLAG_OFF}").application_category_id
    if @last_apc_id && @last_apc_id == apc_id
      #前回と同じ
    else
      @apc_str = Comm::Tool::DispName.get_id_disp_names('application_category_id', [], MFIND_A, [apc_id]).first['disp_name']
      @last_apc_id = apc_id
    end
    return @apc_str + ' : ' + Comm::Tool::DispName.get_id_disp_names(row_id_name, [], MFIND_A, [rid]).first['disp_name']
  end
  
  #== テーブル更新
  def in_transaction()
    res_array = JSON.parse(params[:rules])
    res_array.each do |r|
      cond = r.dup
      amount = cond.delete('amount')
      ar = @mcls.find(:first, :conditions => cond)
      if ar
        #更新
        ar.amount = amount
        ar.save!
      else
        #新規
        ar = @mcls.new({'invalid_flag_code' => 0}.merge(r))
        ar.save!
      end
    end
  end
end
