fix conflict with nccu sync method

This commit is contained in:
chiu 2020-04-28 15:52:51 +08:00
parent 2eb27a56bb
commit 985d4303df
1 changed files with 419 additions and 418 deletions

View File

@ -1,3 +1,413 @@
module NtnuSyncPlugin
# 期刊論文
def self.sync_journal_papers(query_result, user)
puts "Journal Paper for user: #{user.user_name}"
journal_papers = query_result.select { |data| data['ER_ACCOUNT'] == user.user_name && data['EI_SN'] == '20100421092921000' }
journal_papers.each do |journal_paper|
j_data = JSON.parse(journal_paper['JDATA'])
jp = JournalPaper.new
publication_year = nil
publication_month = nil
apa_title = nil
invalid_apa_title = [nil, '', '必填欄位', '無', 'n/a', 'non']
j_data['data'].each do |data|
case data['eifSn']
when '20140313173512173' # APA 論文格式
apa_title = data['data'].first['v']
when '20100430145309101' # 發表卷數
jp.vol_no = data['data'].first['v']
when '20100430145700542' # 出版年
publication_year = data['data'].first['v']
jp.year = publication_year
when '20101119123019886' # 出版月
publication_month = data['data'].first['v']
when '20100430135842804' # 論文名稱
jp.paper_title_translations = { 'zh_tw' => data['data'].first['v'], 'en' => data['data'].first['v'] }
when '20100430135853270' # 期刊名稱
jp.journal_title_translations = { 'zh_tw' => data['data'].first['v'], 'en' => data['data'].first['v'] }
else
puts "useless data #{data['eifSn']}"
end
end
if !invalid_apa_title.include? apa_title
jp.delete
jp = JournalPaper.new
jp.paper_title_translations = { 'zh_tw' => apa_title, 'en' => apa_title }
jp.year = publication_year
end
jp.publication_date = "#{publication_year}/#{publication_month}/01"
jp.member_profile_id = user.member_profile_id
puts "journal paper #{jp.id} saved" if jp.save
end
end
# 研討會論文
def self.sync_conference_papers(query_result, user)
puts "Conference Paper for user: #{user.user_name}"
conference_papers = query_result.select { |data| data['ER_ACCOUNT'] == user.user_name && data['EI_SN'] == '20100504082700357' }
conference_papers.each do |conference_paper|
j_data = JSON.parse(conference_paper['JDATA'])
wc = WritingConference.new
apa_title = nil
invalid_apa_title = [nil, '', '必填欄位', '無', 'n/a', 'non']
invalid_values = [nil, '', '必填欄位', '無', 'n/a', 'non']
j_data['data'].each do |data|
case data['eifSn']
when '20100504082730625' # 論文名稱
wc.paper_title_translations = { 'zh_tw' => data['data'].first['v'], 'en' => data['data'].first['v'] }
when '20100504082900819' # 會議名稱
wc.conference_title_translations = { 'zh_tw' => data['data'].first['v'], 'en' => data['data'].first['v'] }
when '20100504082910474' # 會議舉辦地點
wc.location_translations = { 'zh_tw' => data['data'].first['v'], 'en' => data['data'].first['v'] }
when '20110926150114944' # 主辦單位、支持者
if !invalid_apa_title.include? data['data'].first['v']
wc.sponsor_translations = { 'zh_tw' => data['data'].first['v'], 'en' => data['data'].first['v'] }
end
when '20100504082950644' # 使用語言
wc.language = data['data'].first['v']
when '20101012151243807' # 會議開始日期
temp_date = Date.strptime(data['data'].first['v'], '%Y/%m/%d') rescue nil
if temp_date.nil?
wc.period_start_date = nil
else
wc.period_start_date = temp_date
wc.year = temp_date.year if wc.year.nil?
end
when '20101012151318602' # 會議結束日期
wc.period_end_date = data['data'].first['v']
#when '20190109101534767' # 合著之國際學者姓名與機構
# wc.authors = data['data'].first['v']
when '20190109103134500' # 會議年份
if !invalid_values.include? data['data'].first['v']
wc.year = data['data'].first['v']
end
when '20140313173831962' # 完整引文內容
apa_title = data['data'].first['v']
else
puts "useless data #{data['eifSn']}"
end
end
if !invalid_apa_title.include? apa_title
wc.delete
wc = WritingConference.new
wc.paper_title_translations = { 'zh_tw' => apa_title, 'en' => apa_title }
end
wc.member_profile_id = user.member_profile_id
puts "conference paper #{wc.id} saved" if wc.save
end
end
# 研究計畫
def self.sync_projects(query_result, user)
puts "Projects for user: #{user.user_name}"
projects = query_result.select { |data| data['ER_ACCOUNT'] == user.user_name && data['EI_SN'] == '20101113165022345' }
projects.each do |project|
j_data = JSON.parse(project['JDATA'])
pj = Project.new
apa_title = nil
invalid_values = [nil, '', '必填欄位', '無', 'n/a', 'non']
j_data['data'].each do |data|
case data['eifSn']
when '20101113165900450' # 計畫開始日期
temp_date = Date.strptime(data['data'].first['v'], '%Y/%m/%d') rescue nil
if temp_date.nil?
pj.period_start_date = nil
pj.year = nil
else
pj.period_start_date = temp_date
pj.year = temp_date.year
end
when '20101113170021839' # 計畫結束日期
temp_date = Date.strptime(data['data'].first['v'], '%Y/%m/%d') rescue nil
if temp_date.nil?
pj.period_end_date = nil
pj.year = nil
else
pj.period_end_date = temp_date
pj.year = temp_date.year
end
when '20101113165829608' # 計畫名稱
pj.project_title_translations = { 'zh_tw' => data['data'].first['v'], 'en' => data['data'].first['v'] }
when '20101113165400610' # 計畫委託單位
pj.unit_translations = { 'zh_tw' => data['data'].first['v'], 'en' => data['data'].first['v'] }
when '20101113170139811' # 參與計畫身份別
pj.job_title_translations = { 'zh_tw' => data['data'].first['v'], 'en' => data['data'].first['v'] }
when '20101113165807383' # 計畫編號,放到 note
if !invalid_values.include? data['data'].first['v']
pj.note = data['data'].first['v']
end
when '20101120133553203' # 協同執行計畫單位名稱
if !invalid_values.include? data['data'].first['v']
pj.participator_translations = { 'zh_tw' => data['data'].first['v'], 'en' => data['data'].first['v'] }
end
else
puts "useless data #{data['eifSn']}"
end
end
pj.member_profile_id = user.member_profile_id
puts "project #{pj.id} saved" if pj.save
end
end
# 學術論述專書, academic treatise books
def self.sync_academic_treatise_books(query_result, user)
puts "Academic treatise books for user: #{user.user_name}"
book_type = BookType.where('title.en' => 'academic treatise books')
books = query_result.select { |data| data['ER_ACCOUNT'] == user.user_name && data['EI_SN'] == '20101113154035616' }
return if books.empty?
books.each do |book|
j_data = JSON.parse(book['JDATA'])
bk = Book.new
book_title = nil
book_edition = nil
publication_month = nil
publication_year = nil
publication_contry = nil
publisher = nil
invalid_values = [nil, '', '必填欄位', '無', 'n/a', 'non']
j_data['data'].each do |data|
case data['eifSn']
when '20101113155146878' # 出版年
publication_year = data['data'].first['v']
bk.year = data['data'].first['v']
when '20101119131606987' # 出版月
publication_month = data['data'].first['v']
when '20101113154705945' # 專書名稱
book_title = data['data'].first['v']
when '20101117093151912' # 版(刷)次
book_edition = data['data'].first['v']
book_edition = 1 if invalid_values.include? book_edition
when '20101113162540244' # 發行國家
publication_contry = data['data'].first['v']
when '20101113162459663' # 出版機關
publisher = data['data'].first['v']
when '20101113155314433' # ISBN 編號
bk.isbn = data['data'].first['v']
bk.isbn = '' if invalid_values.include? bk.isbn
else
puts "useless data #{data['eifSn']}"
end
end
full_title = book_title + "(#{book_edition})"
bk.book_title_translations = { 'zh_tw' => full_title, 'en' => full_title }
full_publisher = "#{publication_contry} : #{publisher}"
bk.publisher_translations = { 'zh_tw' => full_publisher, 'en' => full_publisher }
bk.publication_date = "#{publication_year}/#{publication_month}/01"
bk.member_profile_id = user.member_profile_id
bk.book_type_id = book_type.entries.first.id
puts "academic treatise books #{bk.id} saved" if bk.save
end
end
# 學術專書單篇(章), academic book chapters
def self.sync_academic_book_chapters(query_result, user)
puts "Academic book chapters for user: #{user.user_name}"
book_type = BookType.where('title.en' => 'academic book chapters')
books = query_result.select { |data| data['ER_ACCOUNT'] == user.user_name && data['EI_SN'] == '20101113154120441' }
return if books.empty?
books.each do |book|
j_data = JSON.parse(book['JDATA'])
bk = Book.new
book_title = nil
chapter_title = nil
chapter_pages = nil
publication_month = nil
publication_year = nil
publication_contry = nil
publisher = nil
invalid_values = [nil, '', '必填欄位', '無', 'n/a', 'non']
j_data['data'].each do |data|
case data['eifSn']
when '20101113164018594' # 出版年
publication_year = data['data'].first['v']
bk.year = data['data'].first['v']
when '20101120085632652' # 出版月
publication_month = data['data'].first['v']
when '20101113161735848' # 專書名稱
book_title = data['data'].first['v']
when '20101117100427736' # 篇(章)名稱
chapter_title = data['data'].first['v']
when '20111020085257865' # 篇(章)頁碼
chapter_pages = data['data'].first['v']
chapter_pages = 'pp ? - ?' if invalid_values.include? chapter_pages
bk.pages = chapter_pages
when '20101113164115903' # 發行國家
publication_contry = data['data'].first['v']
when '20101113164042969' # 出版機關
publisher = data['data'].first['v']
when '20101113162003149' # ISBN 編號
bk.isbn = data['data'].first['v']
bk.isbn = '' if invalid_values.include? bk.isbn
else
puts "useless data #{data['eifSn']}"
end
end
full_title = "#{chapter_title}#{book_title}"
bk.book_title_translations = { 'zh_tw' => full_title, 'en' => full_title }
full_publisher = "#{publication_contry} : #{publisher}"
bk.publisher_translations = { 'zh_tw' => full_publisher, 'en' => full_publisher }
bk.publication_date = "#{publication_year}/#{publication_month}/01"
bk.member_profile_id = user.member_profile_id
bk.book_type_id = book_type.entries.first.id
puts "academic treatise books #{bk.id} saved" if bk.save
end
end
# 正式出版之大專院校教科書, officially published university textbooks
def self.sync_officially_published_university_textbooks(query_result, user)
puts "Officially published university textbooks for user: #{user.user_name}"
book_type = BookType.where('title.en' => 'officially published university textbooks')
books = query_result.select { |data| data['ER_ACCOUNT'] == user.user_name && data['EI_SN'] == '20101117102418434' }
return if books.empty?
books.each do |book|
j_data = JSON.parse(book['JDATA'])
bk = Book.new
book_title = nil
book_edition = nil
publication_month = nil
publication_year = nil
publication_contry = nil
publisher = nil
invalid_values = [nil, '', '必填欄位', '無', 'n/a', 'non']
j_data['data'].each do |data|
case data['eifSn']
when '20101117102419161' # 出版年
publication_year = data['data'].first['v']
bk.year = data['data'].first['v']
when '20101120082104670' # 出版月
publication_month = data['data'].first['v']
when '20101117102418916' # 教科書名稱
book_title = data['data'].first['v']
when '20101117102419281' # 版(刷)次
book_edition = data['data'].first['v']
book_edition = 1 if invalid_values.include? book_edition
when '20101117102420949' # 發行國家
publication_contry = data['data'].first['v']
when '20101117102419390' # 出版機關
publisher = data['data'].first['v']
when '20101117102421533' # ISBN 編號
bk.isbn = data['data'].first['v']
bk.isbn = '' if invalid_values.include? bk.isbn
else
puts "useless data #{data['eifSn']}"
end
end
full_title = "#{book_title} #{book_edition}"
bk.book_title_translations = { 'zh_tw' => full_title, 'en' => full_title }
full_publisher = "#{publication_contry} : #{publisher}"
bk.publisher_translations = { 'zh_tw' => full_publisher, 'en' => full_publisher }
bk.publication_date = "#{publication_year}/#{publication_month}/01"
bk.member_profile_id = user.member_profile_id
bk.book_type_id = book_type.entries.first.id
puts "officially published university textbooks #{bk.id} saved" if bk.save
end
end
# 其他著作, other authored works
def self.sync_other_authored_works(query_result, user)
puts "Other authored works for user: #{user.user_name}"
book_type = BookType.where('title.en' => 'other authored works')
books = query_result.select { |data| data['ER_ACCOUNT'] == user.user_name && data['EI_SN'] == '20101117111154107' }
return if books.empty?
books.each do |book|
j_data = JSON.parse(book['JDATA'])
bk = Book.new
book_title = nil
book_edition = nil
publication_month = nil
publication_year = nil
publication_contry = nil
publisher = nil
invalid_values = [nil, '', '必填欄位', '無', 'n/a', 'non']
j_data['data'].each do |data|
case data['eifSn']
when '20101117111154862' # 出版年
publication_year = data['data'].first['v']
bk.year = data['data'].first['v']
when '20101120091544594' # 出版月
publication_month = data['data'].first['v']
when '20101117111154623' # 書名
book_title = data['data'].first['v']
when '20101117111154977' # 版(刷)次
book_edition = data['data'].first['v']
book_edition = 1 if invalid_values.include? book_edition
when '20101117111156631' # 發行國家
publication_contry = data['data'].first['v']
when '20101117111154746' # 出版機關
publisher = data['data'].first['v']
when '20101117111157224' # ISBN 編號
bk.isbn = data['data'].first['v']
bk.isbn = '' if invalid_values.include? bk.isbn
else
puts "useless data #{data['eifSn']}"
end
end
full_title = book_title + "(#{book_edition})"
bk.book_title_translations = { 'zh_tw' => full_title, 'en' => full_title }
full_publisher = "#{publication_contry} : #{publisher}"
bk.publisher_translations = { 'zh_tw' => full_publisher, 'en' => full_publisher }
bk.publication_date = "#{publication_year}/#{publication_month}/01"
bk.member_profile_id = user.member_profile_id
bk.book_type_id = book_type.entries.first.id
puts "other authored works #{bk.id} saved" if bk.save
end
end
# 建立預設著作類別
def self.define_book_types
# 學術論述專書, academic treatise books
if BookType.where('title.en' => 'academic treatise books').empty?
bt_1 = BookType.new
bt_1.title_translations = { en: 'academic treatise books', zh_tw: '學術論述專書' }
puts '著作類別:學術論述專書, 建立成功' if bt_1.save
end
# 學術專書單篇(章), academic book chapters
if BookType.where('title.en' => 'academic book chapters').empty?
bt_2 = BookType.new
bt_2.title_translations = { en: 'academic book chapters', zh_tw: '學術專書單篇(章)' }
puts '著作類別:學術專書單篇(章), 建立成功' if bt_2.save
end
# 正式出版之大專院校教科書, officially published university textbooks
if BookType.where('title.en' => 'officially published university textbooks').empty?
bt_3 = BookType.new
bt_3.title_translations = { en: 'officially published university textbooks', zh_tw: '正式出版之大專院校教科書' }
puts '著作類別:正式出版之大專院校教科書, 建立成功' if bt_3.save
end
# 其他著作, other authored works
if BookType.where('title.en' => 'other authored works').empty?
bt_4 = BookType.new
bt_4.title_translations = { en: 'other authored works', zh_tw: '其他著作' }
puts '著作類別:其他著作, 建立成功' if bt_4.save
end
end
end
namespace :sync_ntnu_personal_plugins do
desc 'sync_personal_plugins from NTNU'
task :sync => [:environment] do
@ -36,428 +446,19 @@ namespace :sync_ntnu_personal_plugins do
Book.destroy_all
# Create book types
define_book_types
NtnuSyncPlugin.define_book_types
puts ENV['USER_NAME']
User.each do |user|
next if !available_accounts.include? user.user_name
# Make sure sync methods don't mutate the query_result
sync_journal_papers(query_result, user)
sync_conference_papers(query_result, user)
sync_projects(query_result, user)
sync_academic_treatise_books(query_result, user)
sync_academic_book_chapters(query_result, user)
sync_officially_published_university_textbooks(query_result, user)
sync_other_authored_works(query_result, user)
NtnuSyncPlugin.sync_journal_papers(query_result, user)
NtnuSyncPlugin.sync_conference_papers(query_result, user)
NtnuSyncPlugin.sync_projects(query_result, user)
NtnuSyncPlugin.sync_academic_treatise_books(query_result, user)
NtnuSyncPlugin.sync_academic_book_chapters(query_result, user)
NtnuSyncPlugin.sync_officially_published_university_textbooks(query_result, user)
NtnuSyncPlugin.sync_other_authored_works(query_result, user)
end
end
end
# 期刊論文
def sync_journal_papers(query_result, user)
puts "Journal Paper for user: #{user.user_name}"
journal_papers = query_result.select { |data| data['ER_ACCOUNT'] == user.user_name && data['EI_SN'] == '20100421092921000' }
journal_papers.each do |journal_paper|
j_data = JSON.parse(journal_paper['JDATA'])
jp = JournalPaper.new
publication_year = nil
publication_month = nil
apa_title = nil
invalid_apa_title = [nil, '', '必填欄位', '無', 'n/a', 'non']
j_data['data'].each do |data|
case data['eifSn']
when '20140313173512173' # APA 論文格式
apa_title = data['data'].first['v']
when '20100430145309101' # 發表卷數
jp.vol_no = data['data'].first['v']
when '20100430145700542' # 出版年
publication_year = data['data'].first['v']
jp.year = publication_year
when '20101119123019886' # 出版月
publication_month = data['data'].first['v']
when '20100430135842804' # 論文名稱
jp.paper_title_translations = { 'zh_tw' => data['data'].first['v'], 'en' => data['data'].first['v'] }
when '20100430135853270' # 期刊名稱
jp.journal_title_translations = { 'zh_tw' => data['data'].first['v'], 'en' => data['data'].first['v'] }
else
puts "useless data #{data['eifSn']}"
end
end
if !invalid_apa_title.include? apa_title
jp.delete
jp = JournalPaper.new
jp.paper_title_translations = { 'zh_tw' => apa_title, 'en' => apa_title }
jp.year = publication_year
end
jp.publication_date = "#{publication_year}/#{publication_month}/01"
jp.member_profile_id = user.member_profile_id
puts "journal paper #{jp.id} saved" if jp.save
end
end
# 研討會論文
def sync_conference_papers(query_result, user)
puts "Conference Paper for user: #{user.user_name}"
conference_papers = query_result.select { |data| data['ER_ACCOUNT'] == user.user_name && data['EI_SN'] == '20100504082700357' }
conference_papers.each do |conference_paper|
j_data = JSON.parse(conference_paper['JDATA'])
wc = WritingConference.new
apa_title = nil
invalid_apa_title = [nil, '', '必填欄位', '無', 'n/a', 'non']
invalid_values = [nil, '', '必填欄位', '無', 'n/a', 'non']
j_data['data'].each do |data|
case data['eifSn']
when '20100504082730625' # 論文名稱
wc.paper_title_translations = { 'zh_tw' => data['data'].first['v'], 'en' => data['data'].first['v'] }
when '20100504082900819' # 會議名稱
wc.conference_title_translations = { 'zh_tw' => data['data'].first['v'], 'en' => data['data'].first['v'] }
when '20100504082910474' # 會議舉辦地點
wc.location_translations = { 'zh_tw' => data['data'].first['v'], 'en' => data['data'].first['v'] }
when '20110926150114944' # 主辦單位、支持者
if !invalid_apa_title.include? data['data'].first['v']
wc.sponsor_translations = { 'zh_tw' => data['data'].first['v'], 'en' => data['data'].first['v'] }
end
when '20100504082950644' # 使用語言
wc.language = data['data'].first['v']
when '20101012151243807' # 會議開始日期
temp_date = Date.strptime(data['data'].first['v'], '%Y/%m/%d') rescue nil
if temp_date.nil?
wc.period_start_date = nil
else
wc.period_start_date = temp_date
wc.year = temp_date.year if wc.year.nil?
end
when '20101012151318602' # 會議結束日期
wc.period_end_date = data['data'].first['v']
#when '20190109101534767' # 合著之國際學者姓名與機構
# wc.authors = data['data'].first['v']
when '20190109103134500' # 會議年份
if !invalid_values.include? data['data'].first['v']
wc.year = data['data'].first['v']
end
when '20140313173831962' # 完整引文內容
apa_title = data['data'].first['v']
else
puts "useless data #{data['eifSn']}"
end
end
if !invalid_apa_title.include? apa_title
wc.delete
wc = WritingConference.new
wc.paper_title_translations = { 'zh_tw' => apa_title, 'en' => apa_title }
end
wc.member_profile_id = user.member_profile_id
puts "conference paper #{wc.id} saved" if wc.save
end
end
# 研究計畫
def sync_projects(query_result, user)
puts "Projects for user: #{user.user_name}"
projects = query_result.select { |data| data['ER_ACCOUNT'] == user.user_name && data['EI_SN'] == '20101113165022345' }
projects.each do |project|
j_data = JSON.parse(project['JDATA'])
pj = Project.new
apa_title = nil
invalid_values = [nil, '', '必填欄位', '無', 'n/a', 'non']
j_data['data'].each do |data|
case data['eifSn']
when '20101113165900450' # 計畫開始日期
temp_date = Date.strptime(data['data'].first['v'], '%Y/%m/%d') rescue nil
if temp_date.nil?
pj.period_start_date = nil
pj.year = nil
else
pj.period_start_date = temp_date
pj.year = temp_date.year
end
when '20101113170021839' # 計畫結束日期
temp_date = Date.strptime(data['data'].first['v'], '%Y/%m/%d') rescue nil
if temp_date.nil?
pj.period_end_date = nil
pj.year = nil
else
pj.period_end_date = temp_date
pj.year = temp_date.year
end
when '20101113165829608' # 計畫名稱
pj.project_title_translations = { 'zh_tw' => data['data'].first['v'], 'en' => data['data'].first['v'] }
when '20101113165400610' # 計畫委託單位
pj.unit_translations = { 'zh_tw' => data['data'].first['v'], 'en' => data['data'].first['v'] }
when '20101113170139811' # 參與計畫身份別
pj.job_title_translations = { 'zh_tw' => data['data'].first['v'], 'en' => data['data'].first['v'] }
when '20101113165807383' # 計畫編號,放到 note
if !invalid_values.include? data['data'].first['v']
pj.note = data['data'].first['v']
end
when '20101120133553203' # 協同執行計畫單位名稱
if !invalid_values.include? data['data'].first['v']
pj.participator_translations = { 'zh_tw' => data['data'].first['v'], 'en' => data['data'].first['v'] }
end
else
puts "useless data #{data['eifSn']}"
end
end
pj.member_profile_id = user.member_profile_id
puts "project #{pj.id} saved" if pj.save
end
end
# 學術論述專書, academic treatise books
def sync_academic_treatise_books(query_result, user)
puts "Academic treatise books for user: #{user.user_name}"
book_type = BookType.where('title.en' => 'academic treatise books')
books = query_result.select { |data| data['ER_ACCOUNT'] == user.user_name && data['EI_SN'] == '20101113154035616' }
return if books.empty?
books.each do |book|
j_data = JSON.parse(book['JDATA'])
bk = Book.new
book_title = nil
book_edition = nil
publication_month = nil
publication_year = nil
publication_contry = nil
publisher = nil
invalid_values = [nil, '', '必填欄位', '無', 'n/a', 'non']
j_data['data'].each do |data|
case data['eifSn']
when '20101113155146878' # 出版年
publication_year = data['data'].first['v']
bk.year = data['data'].first['v']
when '20101119131606987' # 出版月
publication_month = data['data'].first['v']
when '20101113154705945' # 專書名稱
book_title = data['data'].first['v']
when '20101117093151912' # 版(刷)次
book_edition = data['data'].first['v']
book_edition = 1 if invalid_values.include? book_edition
when '20101113162540244' # 發行國家
publication_contry = data['data'].first['v']
when '20101113162459663' # 出版機關
publisher = data['data'].first['v']
when '20101113155314433' # ISBN 編號
bk.isbn = data['data'].first['v']
bk.isbn = '' if invalid_values.include? bk.isbn
else
puts "useless data #{data['eifSn']}"
end
end
full_title = book_title + "(#{book_edition})"
bk.book_title_translations = { 'zh_tw' => full_title, 'en' => full_title }
full_publisher = "#{publication_contry} : #{publisher}"
bk.publisher_translations = { 'zh_tw' => full_publisher, 'en' => full_publisher }
bk.publication_date = "#{publication_year}/#{publication_month}/01"
bk.member_profile_id = user.member_profile_id
bk.book_type_id = book_type.entries.first.id
puts "academic treatise books #{bk.id} saved" if bk.save
end
end
# 學術專書單篇(章), academic book chapters
def sync_academic_book_chapters(query_result, user)
puts "Academic book chapters for user: #{user.user_name}"
book_type = BookType.where('title.en' => 'academic book chapters')
books = query_result.select { |data| data['ER_ACCOUNT'] == user.user_name && data['EI_SN'] == '20101113154120441' }
return if books.empty?
books.each do |book|
j_data = JSON.parse(book['JDATA'])
bk = Book.new
book_title = nil
chapter_title = nil
chapter_pages = nil
publication_month = nil
publication_year = nil
publication_contry = nil
publisher = nil
invalid_values = [nil, '', '必填欄位', '無', 'n/a', 'non']
j_data['data'].each do |data|
case data['eifSn']
when '20101113164018594' # 出版年
publication_year = data['data'].first['v']
bk.year = data['data'].first['v']
when '20101120085632652' # 出版月
publication_month = data['data'].first['v']
when '20101113161735848' # 專書名稱
book_title = data['data'].first['v']
when '20101117100427736' # 篇(章)名稱
chapter_title = data['data'].first['v']
when '20111020085257865' # 篇(章)頁碼
chapter_pages = data['data'].first['v']
chapter_pages = 'pp ? - ?' if invalid_values.include? chapter_pages
bk.pages = chapter_pages
when '20101113164115903' # 發行國家
publication_contry = data['data'].first['v']
when '20101113164042969' # 出版機關
publisher = data['data'].first['v']
when '20101113162003149' # ISBN 編號
bk.isbn = data['data'].first['v']
bk.isbn = '' if invalid_values.include? bk.isbn
else
puts "useless data #{data['eifSn']}"
end
end
full_title = "#{chapter_title}#{book_title}"
bk.book_title_translations = { 'zh_tw' => full_title, 'en' => full_title }
full_publisher = "#{publication_contry} : #{publisher}"
bk.publisher_translations = { 'zh_tw' => full_publisher, 'en' => full_publisher }
bk.publication_date = "#{publication_year}/#{publication_month}/01"
bk.member_profile_id = user.member_profile_id
bk.book_type_id = book_type.entries.first.id
puts "academic treatise books #{bk.id} saved" if bk.save
end
end
# 正式出版之大專院校教科書, officially published university textbooks
def sync_officially_published_university_textbooks(query_result, user)
puts "Officially published university textbooks for user: #{user.user_name}"
book_type = BookType.where('title.en' => 'officially published university textbooks')
books = query_result.select { |data| data['ER_ACCOUNT'] == user.user_name && data['EI_SN'] == '20101117102418434' }
return if books.empty?
books.each do |book|
j_data = JSON.parse(book['JDATA'])
bk = Book.new
book_title = nil
book_edition = nil
publication_month = nil
publication_year = nil
publication_contry = nil
publisher = nil
invalid_values = [nil, '', '必填欄位', '無', 'n/a', 'non']
j_data['data'].each do |data|
case data['eifSn']
when '20101117102419161' # 出版年
publication_year = data['data'].first['v']
bk.year = data['data'].first['v']
when '20101120082104670' # 出版月
publication_month = data['data'].first['v']
when '20101117102418916' # 教科書名稱
book_title = data['data'].first['v']
when '20101117102419281' # 版(刷)次
book_edition = data['data'].first['v']
book_edition = 1 if invalid_values.include? book_edition
when '20101117102420949' # 發行國家
publication_contry = data['data'].first['v']
when '20101117102419390' # 出版機關
publisher = data['data'].first['v']
when '20101117102421533' # ISBN 編號
bk.isbn = data['data'].first['v']
bk.isbn = '' if invalid_values.include? bk.isbn
else
puts "useless data #{data['eifSn']}"
end
end
full_title = "#{book_title} #{book_edition}"
bk.book_title_translations = { 'zh_tw' => full_title, 'en' => full_title }
full_publisher = "#{publication_contry} : #{publisher}"
bk.publisher_translations = { 'zh_tw' => full_publisher, 'en' => full_publisher }
bk.publication_date = "#{publication_year}/#{publication_month}/01"
bk.member_profile_id = user.member_profile_id
bk.book_type_id = book_type.entries.first.id
puts "officially published university textbooks #{bk.id} saved" if bk.save
end
end
# 其他著作, other authored works
def sync_other_authored_works(query_result, user)
puts "Other authored works for user: #{user.user_name}"
book_type = BookType.where('title.en' => 'other authored works')
books = query_result.select { |data| data['ER_ACCOUNT'] == user.user_name && data['EI_SN'] == '20101117111154107' }
return if books.empty?
books.each do |book|
j_data = JSON.parse(book['JDATA'])
bk = Book.new
book_title = nil
book_edition = nil
publication_month = nil
publication_year = nil
publication_contry = nil
publisher = nil
invalid_values = [nil, '', '必填欄位', '無', 'n/a', 'non']
j_data['data'].each do |data|
case data['eifSn']
when '20101117111154862' # 出版年
publication_year = data['data'].first['v']
bk.year = data['data'].first['v']
when '20101120091544594' # 出版月
publication_month = data['data'].first['v']
when '20101117111154623' # 書名
book_title = data['data'].first['v']
when '20101117111154977' # 版(刷)次
book_edition = data['data'].first['v']
book_edition = 1 if invalid_values.include? book_edition
when '20101117111156631' # 發行國家
publication_contry = data['data'].first['v']
when '20101117111154746' # 出版機關
publisher = data['data'].first['v']
when '20101117111157224' # ISBN 編號
bk.isbn = data['data'].first['v']
bk.isbn = '' if invalid_values.include? bk.isbn
else
puts "useless data #{data['eifSn']}"
end
end
full_title = book_title + "(#{book_edition})"
bk.book_title_translations = { 'zh_tw' => full_title, 'en' => full_title }
full_publisher = "#{publication_contry} : #{publisher}"
bk.publisher_translations = { 'zh_tw' => full_publisher, 'en' => full_publisher }
bk.publication_date = "#{publication_year}/#{publication_month}/01"
bk.member_profile_id = user.member_profile_id
bk.book_type_id = book_type.entries.first.id
puts "other authored works #{bk.id} saved" if bk.save
end
end
# 建立預設著作類別
def define_book_types
# 學術論述專書, academic treatise books
if BookType.where('title.en' => 'academic treatise books').empty?
bt_1 = BookType.new
bt_1.title_translations = { en: 'academic treatise books', zh_tw: '學術論述專書' }
puts '著作類別:學術論述專書, 建立成功' if bt_1.save
end
# 學術專書單篇(章), academic book chapters
if BookType.where('title.en' => 'academic book chapters').empty?
bt_2 = BookType.new
bt_2.title_translations = { en: 'academic book chapters', zh_tw: '學術專書單篇(章)' }
puts '著作類別:學術專書單篇(章), 建立成功' if bt_2.save
end
# 正式出版之大專院校教科書, officially published university textbooks
if BookType.where('title.en' => 'officially published university textbooks').empty?
bt_3 = BookType.new
bt_3.title_translations = { en: 'officially published university textbooks', zh_tw: '正式出版之大專院校教科書' }
puts '著作類別:正式出版之大專院校教科書, 建立成功' if bt_3.save
end
# 其他著作, other authored works
if BookType.where('title.en' => 'other authored works').empty?
bt_4 = BookType.new
bt_4.title_translations = { en: 'other authored works', zh_tw: '其他著作' }
puts '著作類別:其他著作, 建立成功' if bt_4.save
end
end
end