#
#= メニュー用コントローラー
# Authors:: Sumiyo Yamamoto
# Copyright:: Copyright (C) OrbusNeich Medical K.K.  2010.
#--
# date        name                   note
# 2010.2.26   Sumiyo Yamamoto        新規作成
#-------------------------------------------------------------------------------
#++
class MenuTreesController < ApplicationController
  include Comm::Const::VirtualId

  CLICK_INFO = {
    'all' => {
      VID_ALL      => true,
      VID_GAREA    => true,
      VID_SECTION  => true,
      VID_USER     => true
    },
    'section' => {
      VID_ALL      => false,
      VID_GAREA    => false,
      VID_SECTION  => true,
      VID_USER     => true
    }
  }

  #== 一覧表示
  #-----------------------------------------------------------------#++
  def index
    # sales mode取得
    mode = (params[:mode].blank?) ? 'sales' : params[:mode]
    
    # click mode取得
    click_mode = (params[:click_mode].blank?) ? 'section' : params[:click_mode]
    
    # node値取得
    if params[:node].blank?
      vid = 0
    else
      vid = params[:node].to_i
    end
    
    #--------------------#++
    # メニューデータ取得
    #--------------------#++
    leaf  = false
    find_opt = MFIND_V
    menus = []
    # 最初に指定される値(0)の場合
    if vid == 0
      type = VID_ALL
      menus = [{
        'id' => 1,
        'disp_name' => '全国'
      }]
    else
      #------------------------------------#++
      # 仮想IDに対応するクラス、ID情報取得
      #------------------------------------#++
      node_info = Comm::Tool::VirtualId::get_virtual_info_by_id(vid)
      id = (vid - node_info[:offset])
      
      case node_info[:type]
      # 全国
      when VID_ALL
        type = VID_GAREA
        menus = GlobalArea.set(find_opt).dsort.all
      
      # グローバルエリア
      when VID_GAREA
        # 営業トップ（グルーピングレベル）の部署を取得
        type = VID_SECTION
        scope = Section.group.set(find_opt).sassign('global_area_id', id).dsort
        if mode == 'sales'
          scope = scope.sales
        end
        menus = scope.all
      
      # 部署
      when VID_SECTION
        type = VID_USER
        user_ids = Section.find(id).user_positions(find_opt).extract('user_id')
        if user_ids.length > 0
          menus = User.set(find_opt).passign('id', user_ids).dsort.all
        end
        leaf = true
      
      # ユーザーポジション
      when VID_USER
        # 指定されることは無いはず。空データを返す。
      end
      
      menus = menus.only_hashfy
    end
    
    # 返却データ編集
    click = CLICK_INFO[click_mode][type]
    if menus.length > 0
      info = Comm::Tool::VirtualId::get_virtual_info_by_type(type)
      menus.map! {|menu| {
      'id'    => menu['id'] + info[:offset],
      'text'  => menu['disp_name'],
      'leaf'  => leaf,
      'click' => click
      } }
    end
    
    # JSON返却
    respond_to do |format|
      format.json{
        render :json => menus.to_json
      }
    end
  end
end
