MiraitSystems/enju_trunk

View on GitHub
app/controllers/export_item_registers_controller.rb

Summary

Maintainability
B
5 hrs
Test Coverage
class ExportItemRegistersController < ApplicationController
  before_filter :check_librarian

  def initialize
    @list_types = [[t('item_register.item_register_all'), 1],
                   [t('item_register.removing_list'), 2],
                   [t('item_register.audio_list'), 3],
                   [t('item_register.item_register_book'),4],
                   [t('item_register.item_register_series'),5],
                   [t('item_register.item_register_article'),6],
                   [t('item_register.item_register_other'),7],
                   [t('item_register.title_catalog'),8],
                   [t('item_register.author_catalog'),9],
                   [t('item_register.classified_catalog'),10],
                  ]
    super
  end

  def index
    @selected_list_type = 1
    @items_size = Item.count(:all, :joins => [:manifestation, :shelf => :library])
    @page = (@items_size / 36).to_f.ceil
    @page = 1 if @page == 0
    @catalog_flag = true
  end

  def create
    list_type = params[:export_item_register][:list_type]
    file_type = params[:export_item_register][:file_type]
    unless %w(pdf tsv).include?(file_type)
      flash[:message] = t('item_register.invalid_file_type')
      render :index
      return false
    end

    method = 'export_item_register'
    args = []

    case list_type.to_i
    when 1 # all item register
      file_name = 'item_register_all'
      args << 'all'
    when 2 # removing list
      file_name = 'removing_list'
      method = 'export_removing_list'
    when 3 # audio list
      file_name = 'audio_list'
      method = 'export_audio_list'
    when 4 # book register
      file_name = 'item_register_book'
      args << 'book'
    when 5 # series register
      file_name = 'item_register_series'
      args << 'series'
    when 6 # article register
      file_name = 'item_register_article'
      args << 'article'
    when 7 # other register
      file_name = 'item_register_exinfo'
      args << 'exinfo'
    when 8 # title catalog
      file_name = 'title_catalog'
      method = 'output_catalog'
      args << 'title'
    when 9 # author catalog
      file_name = 'author_catalog'
      method = 'output_catalog'
      args << 'author'
    when 10 # classified catalog
      file_name = 'classified_catalog'
      method = 'output_catalog'
      args << 'classified'
    end

      job_name = Item.make_export_register_job(file_name, file_type, method, args, current_user)
      flash[:message] = t('item_register.export_job_queued', :job_name => job_name)
      redirect_to export_item_registers_path
      return true
  end

  def get_list_size
    if !request.xhr? || params[:list_type].blank?
      render :nothing => true, :status => :not_found
      return

    else
      list_type = params[:list_type]
      list_size = 0
      catalog_flag = true

      begin
        case list_type.to_i
        when 1 # item register
          list_size = Item.count(:all)
        when 2 # removing list
          list_size = Item.count(:all, :conditions => 'removed_at IS NOT NULL')
        when 3 # audio list
          carrier_type_ids = CarrierType.audio.inject([]){|ids, c| ids << c.id}
          list_size = Item.count(:all, :joins => :manifestation, :conditions => ["manifestations.carrier_type_id IN (?)", carrier_type_ids]) 
        when 4 # item register book
          list_size = Item.count(:all, :joins => :manifestation, :conditions => ["manifestations.manifestation_type_id in (?)", ManifestationType.type_ids('book')])
        when 5 # item register series
          list_size = Item.count(:all, :joins => :manifestation, :conditions => ["manifestations.manifestation_type_id in (?)", ManifestationType.type_ids('series')])
        when 6 # item register article
          list_size = Item.count(:all, :joins => :manifestation, :conditions => ["manifestations.manifestation_type_id in (?)", ManifestationType.type_ids('article')])
        when 7 # item register other
          list_size = Item.count(:all, :joins => :manifestation, :conditions => ["manifestations.manifestation_type_id in (?)", ManifestationType.type_ids('exinfo')])
        when 8 .. 10 # item title catalog
          list_size = Item.count(:all)
          catalog_flag = false
        end
      rescue Exception => e
        logger.error e
        list_size = 0
      end

      #page
      if catalog_flag == false
        int_page = (list_size / 24)
        #繰り上げ算
        int_page = int_page + 1 unless (list_size % 24.0 == 0)
        page = int_page.to_f.ceil
      else
        page = (list_size / 36).to_f.ceil
      end
      page = 1 if page == 0 #and !error

      render :json => {:success => 1, :list_size => list_size, :page => page, :catalog_flag => catalog_flag}
    end
  end
end