require_dependency "lib/comm_logistics/controllers/orders_controller.rb"

class OrdersController
  
  class OrderPdfOut
    
    #omkk独自
    def set_details_to_pages_with_omkk(ar, pdata, details, detail_name, page)
      sar = Supplier.find(ar.supplier_id)
      sheet_type = sar.order_sheet_type_code
      #仕入先がオーバスネイチ香港のとき
      if sheet_type == 3
        @print_rec_num_per_sheet = 36
        @print_rec_num_index = @print_rec_num_per_sheet - 1
        
        Rails.logger.debug('set_details_to_pages sheet_type:'+sheet_type.to_s)
        #最初の扉ページ設定
        pdata[page] = {:page_info => {:sheet_type => sheet_type, :head_page => true}}
        parent_info_hash = add_disp_name_to_hash(ar.only_hashfy)
        parent_info_hash.update(add_disp_name_to_hash(make_sheet_add_for_main(ar)))
        pdata[page].update(parent_info_hash.dup)
        page += 1
        
        product_set_hash = {}
        #製品群ごとに一旦まとめる
        details.each do |d|
          psid = d.product_set_id
          if product_set_hash[psid]
            product_set_hash[psid] << d
          else
            product_set_hash[psid] = [d]
          end
        end
        
        cnt, sum_quantity, sum_price = 0,0,0
        org_page_num = page
        keys = product_set_hash.keys.sort
        keys.each do |psid|
          Rails.logger.debug('set_details_to_pages psid:'+psid.inspect)
          @master_wide_info = {'product_set_id' => psid}#,
                               #'product_set_dn' => ProductSet.find(psid).disp_name}
          @master_wide_info.add_disp_name({:disp_keys => @params[:print_disp_keys] || {}})
          details_ary = product_set_hash[psid]
          Rails.logger.debug('set_details_to_pages details_ary:'+details_ary.inspect)
          
          details_ary.each do |d|
            Rails.logger.debug('set_details_to_pages d:'+d.inspect)
            pdata[page] ||= @master_wide_info.dup
            pdata[page].update(parent_info_hash.dup)
            
            details_hash = d.only_hashfy
            details_hash.update(make_sheet_add_for_detail(nil, d))
            pdata[page][detail_name] ||= {}
            pdata[page][detail_name][cnt] = add_disp_name_to_hash(details_hash)
            
            sum_price += d.price ? d.price * d.quantity : 0
            sum_quantity += d.quantity
            
            if cnt == @print_rec_num_index
              pdata[page].update({:page_info => {:sheet_type => sheet_type},
                                                 'page_num' => (page - org_page_num + 1)})
              page += 1
              cnt = 0
              pdata[page] ||= @master_wide_info.dup
              pdata[page].update(parent_info_hash.dup)
            else
              cnt += 1
            end
          end
          
          # ページがdetailでちょうど満タンになって終了している場合のページ情報設定
          if cnt == 0
            pdata[page] ||= @master_wide_info.dup
            pdata[page].update(parent_info_hash.dup)
          end
          
          # 製品群による改ページ
          pdata[page].update({:page_info => {:sheet_type => sheet_type},
                                             'page_num' => (page - org_page_num + 1)})
          pdata[page][detail_name] ||= {}
          pdata[page][detail_name][cnt] = format_price({'product_dn'=>'TOTAL',
                                                        'quantity'=>sum_quantity,
                                                        'total_price'=>sum_price})
          cnt, sum_quantity, sum_price = 0,0,0
          page += 1
        end
        
        #総ページ数の設定(pageは1進んだ状態なのでその辺を考慮しつつ計算)
        total_page = (page - org_page_num)
        for i in org_page_num..(page-1)
          pdata[i].update({'page_total' => total_page})
        end
        @send_info=nil
      #仕入先がオーバスネイチ香港以外のときは共通メソッド使用
      else
        page = set_details_to_pages_without_omkk(ar, pdata, details, detail_name, page)
      end
      return page
    end
    alias_method_chain :set_details_to_pages, :omkk
  end
end
