app/models/unablelist.rb
class Unablelist < ActiveRecord::Base
paginates_per 10
def self.get_unable_list_pdf(users, sort)
report = EnjuTrunk.new_report('userlist.tlf')
# set page_num
report.events.on :page_create do |e|
e.page.item(:page).value(e.page.no)
end
report.events.on :generate do |e|
e.pages.each do |page|
page.item(:list_title).value(I18n.t('page.listing', :model => I18n.t('activerecord.models.unablelist')))
page.item(:total).value(e.report.page_count)
end
end
# set data
report.start_new_page do |page|
page.item(:date).value(Time.now)
if sort == 'created_at'
page.item(:sort).value(I18n.t('activerecord.attributes.unablelist.output_format')+": " + I18n.t('page.created_at'))
else
page.item(:sort).value(I18n.t('activerecord.attributes.unablelist.output_format')+": " + I18n.t("activerecord.attributes.user.#{ sort }"))
end
if users.size > 0
before_library = nil
users.each do |user|
page.list(:list).add_row do |row|
if sort == 'library' and before_library == user.library
row.item(:library_line).hide
row.item(:library).hide
end
row.item(:full_name).value(user.try(:agent).try(:full_name))
# row.item(:username).value(user.username)
row.item(:department).value(user.try(:department).try(:display_name))
row.item(:user_number).value(user.user_number)
row.item(:tel1).value(user.try(:agent).try(:telephone_number_1)) if user.try(:agent).try(:telephone_number_1)
row.item(:e_mail).value(user.try(:agent).try(:email)) if user.try(:agent).try(:email)
row.item(:created_at).value(user.created_at)
if user.active_for_authentication?
row.item(:user_status).value(user.try(:user_status).try(:display_name))
else
row.item(:user_status).value(user.try(:user_status).try(:display_name) + "#{I18n.t('activerecord.attributes.user.locked_no')}")
end
row.item(:unable).value(I18n.t('activerecord.attributes.user.unable_yes')) unless user.unable
row.item(:unable).value(I18n.t('activerecord.attributes.user.unable_no')) if user.unable
end
before_library = user.library
end
else
page.list(:list).add_row do |row|
row.item(:not_found).show
row.item(:not_found).value(I18n.t('page.not_found_users'))
row.item(:line0).hide
row.item(:line1).hide
row.item(:line2).hide
row.item(:line3).hide
row.item(:line4).hide
row.item(:line5).hide
row.item(:line6).hide
end
end
end
return report
end
def self.get_unable_list_tsv(users)
data = String.new
data << "\xEF\xBB\xBF".force_encoding("UTF-8") + "\n"
columns = [
# [:library, 'activerecord.attributes.user.library'],
['user_number', 'activerecord.attributes.user.user_number'],
[:full_name, 'activerecord.attributes.agent.full_name'],
[:department, 'activerecord.attributes.user.department'],
[:telephone_number_1, 'activerecord.attributes.agent.telephone_number_1'],
# [:extelephone_number_1, 'activerecord.attributes.agent.extelephone_number_1'],
[:email, 'activerecord.attributes.agent.email'],
# [:fax_number_1, 'activerecord.attributes.agent.fax_number_1'],
# [:birth, 'activerecord.attributes.agent.date_of_birth'],
]
# title column
row = columns.map { |column| I18n.t(column[1]) }
data << '"'+row.join("\"\t\"")+"\"\n"
# data
users.each do |user|
row = []
columns.each do |column|
case column[0]
when :library
row << user.try(:library).try(:display_name)
when :full_name
row << user.try(:agent).try(:full_name)
when :telephone_number_1
row << user.try(:agent).try(:telephone_number_1)
when :extelephone_number_1
row << user.try(:agent).try(:extelephone_number_1)
when :fax_number_1
row << user.try(:agent).try(:fax_number_1)
when :birth
row << user.agent.date_of_birth.strftime("%Y/%m/%d") if user.try(:agent).try(:date_of_birth)
when :email
row << user.try(:agent).try(:email)
when :department
row << user.try(:department).try(:display_name)
else
row << get_object_method(user, column[0].split('.')).to_s.gsub(/\r\n|\r|\n/," ").gsub(/\"/,"\"\"")
end
end
data << '"'+row.join("\"\t\"")+"\"\n"
end
return data
end
private
def self.get_object_method(obj,array)
_obj = obj.send(array.shift)
return get_object_method(_obj, array) if array.present?
return _obj
end
end