module CommLogistics::Base::Model
  #
  #注文関連の上位クラス(Order, AcceptOrder)
  #
  class SuperiorOrder < Superior
    self.abstract_class = true
    
    # create lowest
    def create_exec_do(main, details)
      update_exec_do(main, details)
    end
    
    # update lowest
    def update_exec_do(main, details)
      self.attributes = main
      unless save
        raise EMJ0001 + EMD0001
      end
      update_details(self.id, details)
      true
    end
    
    def destroy_exec_do
    end
    
    def self.get_all_rels(id)
      ar = find_by_id(id)
      #受注/発注のtotal_quantityを求める。
      total_quantity = ar.total_quantity.to_i
      #非在庫品を除いた合計本数を求める。
      stock_total_quantity = ar.stock_total_quantity.to_i
      #受注/発注
      table_name = self.name.tableize
      #関連処理の順番を決める
      trels = TableRel.target_rels(ar, table_name)
      if trels.blank?
        order_by = "r.table_name, r.record_id"
      else
        order_by = "field(r.table_name, '#{trels.collect{|item| item.table_name}.join("','")}'), r.record_id"
      end
      
      #関連処理
      rels = Rel.find_by_sql(["SELECT r.table_name, r.record_id, #{total_quantity} AS total_quantity, #{stock_total_quantity} AS stock_total_quantity
                               FROM rels AS r 
                               WHERE r.parent_table_name='#{table_name}' AND r.parent_record_id=#{id}
                               ORDER BY #{order_by} "])
      return rels
    end
    
    def self.get_valid_rels(id)
      #関連処理
      rels = Rel.find_by_sql(["SELECT r.table_name, r.record_id
                               FROM rels AS r 
                               WHERE r.parent_table_name='#{self.name.tableize}' AND r.parent_record_id=#{id} AND r.lock_status_code= #{MCODE_FLAG_ON}"])
      return rels
    end
    #accept_ordersとordersで上書きする
    def self.set_stock_and_rels_total_quantity(table_params, details)
      self.set_stock_total_quantity(table_params, details)
    end
  end
end