From 985d4303dfce8831ebff7dbccf8c2500660c3f84 Mon Sep 17 00:00:00 2001 From: chiu Date: Tue, 28 Apr 2020 15:52:51 +0800 Subject: [PATCH] fix conflict with nccu sync method --- lib/tasks/sync_ntnu_personal_data_tasks.rake | 837 ++++++++++--------- 1 file changed, 419 insertions(+), 418 deletions(-) diff --git a/lib/tasks/sync_ntnu_personal_data_tasks.rake b/lib/tasks/sync_ntnu_personal_data_tasks.rake index 4df60c7..c063d37 100644 --- a/lib/tasks/sync_ntnu_personal_data_tasks.rake +++ b/lib/tasks/sync_ntnu_personal_data_tasks.rake @@ -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 \ No newline at end of file