#
#= 永久保存マスターモデル共通
# Authors:: Sumiyo Yamamoto
# Copyright:: Copyright (C) OrbusNeich Medical K.K.  2010.
#--
# date        name                   note
# 2010.2.26   Sumiyo Yamamoto        新規作成
#-------------------------------------------------------------------------------
#++
module Comm
  module BaseModel
    #=  永久保存マスター基本モデルクラス
    #  永久保存マスター系の全てのモデルが継承する、ベースとなるモデル。
    #------------------------------------------------------------------------#++
    class PermanentMaster < Master
      include Comm::Const::MasterCode

      # 抽象クラス設定（対応するテーブルが存在しない）
      self.abstract_class = true
      
      named_scope :set, lambda {|param|
        case param
        when MFIND_V
          {:conditions => "invalid_flag_code = #{MCODE_FLAG_OFF}"}
        when MFIND_I
          {:conditions => "invalid_flag_code = #{MCODE_FLAG_ON}"}
        else
          {}
        end
      }
      
      named_scope :dsort, :order => 'disp_sort'
      
      named_scope :dlist, lambda {|req_cols|
        if req_cols.blank?
          req_cols = []
        end
        {
          :select => (['id', 'disp_name', 'invalid_flag_code as ivf'] + req_cols).join(','),
          #:conditions => "invalid_flag_code = #{MCODE_FLAG_OFF}",
          :order => 'disp_sort'
        }
      }

      #== 削除
      #-----------------------------------------------------------------#++
      def destroy
        result = true
        
        p = {:invalid_flag_code => MCODE_FLAG_ON, :updated_at => Time.now}
        ret = self.update_attributes(p)
        unless ret
          errors.add_to_base(EMJ0006 + EMD0004 + "(#{self.class.to_s})")
        end
        
        return result
      end
      
      def recover_mng
        begin
          self.transaction do
            @result = recover
            if @result
              MasterRevision.up_rev_number(self.class.name.tableize)
            end
          end
          return @result
        rescue UserOperationError => e
          if errors.empty?
            errors.add_to_base(e.message)
          end
          logger.error(error_out(e))
          @result =  false
        rescue Exception => e
          if errors.empty?
            errors.add_to_base(EMJ0001 + e)
          end
          logger.error(error_out(e))
          @result =  false
        end
      end

      #== 復旧
      #-----------------------------------------------------------------#++
      def recover
        result = true
        
        p = {:invalid_flag_code => MCODE_FLAG_OFF, :updated_at => nil}
        ret = self.update_attributes(p)
        unless ret
          errors.add_to_base(EMJ0007 + EMD0004 + "(#{self.class.to_s})")
        end
              
        return result
      end
    end
  end
end
