#class QuotationsController < CommLogistics::Base::Controller::SuperiorOrder
class QuotationsController < CommLogistics::Base::Controller::Superior
  include Comm::Module::Controller::Logging
  include CommLogistics::Modules::Print::Controller
  
  def initialize
    @mcls = Quotation
    @pdf_cls = QuotationPdfOut
  end
  
  class QuotationPdfOut < PdfBase
    require 'date'
    SHEET_TYPE_GENERAL = 1
    
    def initialize(params, mcls=nil)
      @print_rec_num_per_sheet = 36
      @params = params
      @pdf_detail_name = 'detail'
      super
    end
    
    #PDF生成
    def set_details_to_pages(ar, pdata, details, detail_name, page)
      sar = Supplier.find(ar.supplier_id)
      @currency_type = sar.currency_type_code
      
      page = set_details_to_pages(ar, pdata, details, detail_name, page)
      return page
    end
    
    # 標準テンプレート
    def set_details_to_pages(ar, pdata, details, detail_name, page)
      @print_rec_num_per_sheet = 10
      @print_rec_num_index = @print_rec_num_per_sheet - 1
      # ヘッダ情報
      tmp_main = ar.only_hashfy
      tmp_main['grand_total_price'] = ar.total_price.to_i + ar.total_duty.to_i
      main_hash = add_disp_name_to_hash(tmp_main)
      main_hash.update({:page_info => {:sheet_type => ar.quotation_sheet_type_code ||SHEET_TYPE_GENERAL }})
      main_hash.update(get_send_info(ar).dup)
      main_hash.update(get_own_info(ar).dup)
      main_hash.update(add_disp_name_to_hash(make_sheet_add_for_main(ar)))
      
      seq, page_sum, accumulate_pages = 0, 0, 0
      page_org = page
      details.each do |d|
        pdata[page] ||= main_hash.dup
        pdata[page][detail_name] ||= {}
        detail_hash = d.only_hashfy
        tmp_total_price = d.price * d.quantity
        detail_hash['row_total_price'] = CommLogistics::Tools::CalcDuty.calc_decimal(tmp_total_price, {:duty_rate=>0, :fraction_method_code=>ar.price_fraction_method_code.to_i,:frac_digit_code=>1})
        pdata[page][detail_name][seq] = add_disp_name_to_hash(detail_hash)
        #page_sum += d['quantity']
        if seq == @print_rec_num_index
          #子レコード数で改ページ
          pdata[page]['page_num'] = page - page_org + 1
          #枝番付きIDの準備
          pdata[page]['disp_id'] = pdata[page]['id'].to_s
          page_sum = 0
          seq = 0
          page += 1
        else
          seq += 1
        end
      end
      
      #子レコード数が半端な場合、改ページの処理
      unless seq == 0
        pdata[page]['page_num'] = page - page_org + 1
        #枝番付きIDの準備
        pdata[page]['disp_id'] = pdata[page]['id'].to_s
        page += 1
      end
      
      #複数ページに及んだ場合は枝番をつける
      if page_org < (page - 1)
        cnt = 1
        for i in page_org..(page - 1)
          pdata[i]['disp_id'] = [pdata[i]['disp_id'], '-', cnt.to_s].join('')
          if i > 0
            @total_info_eraser ||= {'total_price'=>'-', 'total_duty'=>'-', 'grand_total'=>'-'}
            pdata[i].update(@total_info_eraser)
          end
          cnt += 1
        end
      end
      @cust_info=nil
      return page
    end
    
    def make_sheet_add_for_main(ar)
      td = ar.target_date
      td = (td.is_a?(Date)) ? td : Date.new(ar.target_date)
      return {'target_date_str' => td.strftime("%B %d, %Y"), 
              'target_month' => td.strftime("%B %d")}
    end
    
    def make_sheet_add_for_detail(ar, detail_ar)
      total_price = detail_ar.price * detail_ar.quantity
      pd = Product.find(detail_ar.product_id)
      spec = pd.spec2 + 'x' + pd.spec1 + 'mm' if pd.spec2 && pd.spec1
      detail_hash = {'total_price' => total_price, 'spec' => spec}
      return detail_hash
    end
    
    def get_send_info(ar)
      require 'config/site_config.rb'
      unless @cust_info
        sar = Customer.find(ar.customer_id)
        @cust_info = { 'send' => get_address_info(sar, {:title=>true, :avoid_delivery_info=>true})}
        if @params[:enable_shipment_customer]==STR_TRUE
          dar = ar.shipment_customer_id.blank? ? sar : Customer.find(ar.shipment_customer_id)
        else
          if $PRIOR_CUSTOMER_FOR_SHIPMENT
            dar = sar
          else
            dar = Warehouse.find(ar.warehouse_id)
          end
        end
        unless ar.delivery_id.blank?
          dar = Delivery.find(ar.delivery_id)
        end
        @cust_info.update({'delivery' => get_address_info(dar, {})})
      end
      return @cust_info
    end
    
    def get_own_info(ar)
      unless @own_info
        oar = Supplier.find(OWN_SUPPLIER_ID)
        @own_info = { 'own' => get_address_info(oar, {:title=>false, :avoid_delivery_info=>true})}
      end
      return @own_info
    end
    
    #空override ページ数を動的に振るため独自で
    def make_all_pages_by_parent(ar, pdata, details, page)
      true
    end
  end
end
