From dad45abcda603281995bdfd4a05322f43d660dda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B1=E5=8D=9A=E4=BA=9E?= Date: Tue, 23 Jan 2024 08:14:12 +0800 Subject: [PATCH] First version with complete sync. --- lib/tasks/sync_fgu_personal_data_tasks.rake | 538 +++++++++++--------- 1 file changed, 302 insertions(+), 236 deletions(-) diff --git a/lib/tasks/sync_fgu_personal_data_tasks.rake b/lib/tasks/sync_fgu_personal_data_tasks.rake index 985352c..1fe6f06 100644 --- a/lib/tasks/sync_fgu_personal_data_tasks.rake +++ b/lib/tasks/sync_fgu_personal_data_tasks.rake @@ -13,7 +13,12 @@ module FguSyncPlugin def self.close @client.close end - + def self.localize_data(d) + ["zh_tw", "en"].map{|l| [l, d]}.to_h + end + def self.parse_date(d) + (d.present? ? (Date.parse(d) rescue nil) : nil) + end def self.camelize(str) str.split('_').map{|v| v.capitalize}.join(' ') end @@ -45,20 +50,20 @@ module FguSyncPlugin data.each_with_index do |dt, idx| rss2id = dt["journal_id"] - pd = Date.parse(dt["publication_date"]) rescue Date.today - paper_title = {"en" => dt["paper_title"],"zh_tw" => dt["paper_title"]} - journal_title = {"en" => dt["journal_title"],"zh_tw" => dt["journal_title"]} + pd = self.parse_date(dt["publication_date"]) + paper_title = self.localize_data(dt["paper_title"]) + journal_title = self.localize_data(dt["journal_title"]) from_to = dt["from_to"].split("-") from_to[1] = "" if !from_to[1].present? all_authors = [dt["author1"],dt["author2"],dt["author3"],dt["author4"]] all_authors.delete("") - authors = {"en" => all_authors.join(", "), "zh_tw" => all_authors.join(", ")} + authors = self.localize_data(all_authors.join(", ")) note = dt["department"] + " " + dt["country"] + " " + dt["note"] if !dt["paper_level"].empty? level = JournalLevel.where(:title => dt["paper_level"]).first rescue nil if level.nil? - level = JournalLevel.create(:key => "key_#{idx}", :title_translations => {"en" => dt["paper_level"], "zh_tw" => dt["paper_level"]}) + level = JournalLevel.create(:key => "key_#{idx}", :title_translations => self.localize_data(dt["paper_level"])) end end @@ -71,7 +76,7 @@ module FguSyncPlugin jp = JournalPaper.where(:rss2_id => rss2id).first rescue nil jp_data = { - :publication_date => pd, :rss2_id => rss2id, :year => pd.strftime("%Y"), + :publication_date => pd, :rss2_id => rss2id, :year => (pd ? pd.strftime("%Y") : ""), :authors_translations => authors, :paper_title_translations => paper_title, :journal_title_translations => journal_title, :vol_no => dt["vol_no"], :issue_no => dt["issue_no"], :note => note, :form_to_start => from_to[0], :form_to_end => from_to[1] @@ -107,17 +112,17 @@ module FguSyncPlugin data.each_with_index do |dt, idx| rss2id = dt["conf_id"] - start_date = Date.parse(dt["start_date"]) rescue Date.today - end_date = Date.parse(dt["end_date"]) rescue Date.today - paper_title = {"en" => dt["paper_title"],"zh_tw" => dt["paper_title"]} - conference_title = {"en" => dt["conference_name"],"zh_tw" => dt["conference_name"]} + start_date = self.parse_date(dt["start_date"]) + end_date = self.parse_date(dt["end_date"]) + paper_title = self.localize_data(dt["paper_title"]) + conference_title = self.localize_data(dt["conference_name"]) authors = [dt["author1"],dt["author2"],dt["author3"],dt["author4"]] authors.delete("") - authors = {"en" => authors.join(", "), "zh_tw" => authors.join(", ")} + authors = self.localize_data(authors.join(", ")) note = dt["department"] + " " + dt["note"] cp = WritingConference.where(:rss2_id => rss2id).first rescue nil - cp_data = {:period_start_date => start_date, :period_end_date => end_date, :rss2_id => rss2id, :year => end_date.strftime("%Y"), :authors_translations => authors, :paper_title_translations => paper_title, :conference_title_translations => conference_title, :note => note, :location_translations => {"en" => dt["location"], "zh_tw" => dt["location"]}} + cp_data = {:period_start_date => start_date, :period_end_date => end_date, :rss2_id => rss2id, :year => (start_date ? start_date.strftime("%Y") : ""), :authors_translations => authors, :paper_title_translations => paper_title, :conference_title_translations => conference_title, :note => note, :location_translations => self.localize_data(dt["location"])} if cp.nil? cp = WritingConference.new(cp_data) puts "Saving new conference." @@ -135,37 +140,6 @@ module FguSyncPlugin puts "*********************************************" end - # def self.sync_research_papers(staff_id,mp) - # data = self.get_research_papers(staff_id) - # puts "Starting Research Paper for staff #{staff_id}." - # if !data.nil? - # researches = data - # total = researches.count rescue 0 - # return if total == 0 - # Research.where(:rss2_id.nin => ([nil,''] + researches.map{|research| research["rss_id"]}),member_profile_id: mp.id).destroy - # researches.each_with_index do |research,index| - # if !research.blank? - # res = Research.where(:rss2_id => research["rss_id"]).first rescue nil - # if res.nil? - # res = Research.new(rss2_id: research["rss_id"]) - # puts "Syncing new : " + ((100 * (index +1)) / total).to_s + "%" - # puts "rss2_id: #{research["rss_id"]}" if @debug_mode - # else - # puts "Updating old : " + ((100 * (index +1)) / total).to_s + "%" - # end - # res.publish_date = "#{research["publication_year"]}/#{research["publication_month"]}/01" - # res.url = research["url"] - # res.year = research["publication_year"] - # res.research_title_translations = research["title"] - # res.member_profile = mp - # res.save - # sleep 0.1 - # end - # end - # end - # puts "Research Paper for staff #{staff_id} completed." - # end - def self.sync_books(staff_id,mp) puts "*********************************************" puts "Syncing book for #{staff_id}" @@ -177,30 +151,30 @@ module FguSyncPlugin data.each_with_index do |dt, idx| rss2id = dt["book_id"] - pd = Date.parse(dt["date_of_publication"]) rescue Date.today - book_title = {"en" => dt["book_title"],"zh_tw" => dt["book_title"]} - publisher = {"en" => dt["publisher"],"zh_tw" => dt["publisher"]} + pd = self.parse_date(dt["date_of_publication"]) + book_title = self.localize_data(dt["book_title"]) + publisher = self.localize_data(dt["publisher"]) authors = [dt["author1"],dt["author2"],dt["author3"],dt["author4"]] authors.delete("") - authors = {"en" => authors.join(", "), "zh_tw" => authors.join(", ")} + authors = self.localize_data(authors.join(", ")) note = dt["department"] + " " + dt["location"] + " " + dt["note"] if !dt["author_type"].empty? authortype = BookAuthorType.where(:title => dt["author_type"]).first rescue nil if authortype.nil? - authortype = BookAuthorType.create(:title_translations => {"en" => dt["author_type"], "zh_tw" => dt["author_type"]}) + authortype = BookAuthorType.create(:title_translations => self.localize_data(dt["author_type"])) end end if !dt["book_type"].empty? type = BookType.where(:title => dt["book_type"]).first rescue nil if type.nil? - type = BookType.create(:title_translations => {"en" => dt["book_type"], "zh_tw" => dt["book_type"]}) + type = BookType.create(:title_translations => self.localize_data(dt["book_type"])) end end book = Book.where(:rss2_id => rss2id).first rescue nil - book_data = {:publish_date => pd, :rss2_id => rss2id, :year => pd.strftime("%Y"), :authors_translations => authors, :publisher_translations => publisher, :book_title_translations => book_title, :isbn => dt["isbn"], :note => note, :language => dt["language"], :member_profile => mp} + book_data = {:publish_date => pd, :rss2_id => rss2id, :year => (pd ? pd.strftime("%Y") : ""), :authors_translations => authors, :publisher_translations => publisher, :book_title_translations => book_title, :isbn => dt["isbn"], :note => note, :language => dt["language"], :member_profile => mp} if book.nil? book = Book.new(book_data) puts "Saving new book." @@ -230,11 +204,11 @@ module FguSyncPlugin puts "Deleting old data" Diploma.where(:member_profile_id => mp.id).destroy data.each_with_index do |dt, idx| - start_date = Date.parse(dt["start_date"]) rescue Date.today - end_date = Date.parse(dt["end_date"]) rescue Date.today - school_name = {"en" => dt["school_name"], "zh_tw" => dt["school_name"]} - department = {"en" => dt["department"], "zh_tw" => dt["department"]} - degree = {"en" => dt["degree"], "zh_tw" => dt["degree"]} + start_date = self.parse_date(dt["start_date"]) + end_date = self.parse_date(dt["end_date"]) + school_name = self.localize_data(dt["school_name"]) + department = self.localize_data(dt["department"]) + degree = self.localize_data(dt["degree"]) Diploma.create(:start_date => start_date, :end_date => end_date, :school_name_translations => school_name, :department_translations => department, :degree_translations => degree, :member_profile => mp) puts "Diploma created." end @@ -251,106 +225,182 @@ module FguSyncPlugin if data.count > 0 puts "Data found." puts "Deleting old data" - Experience.where(:member_profile_id => mp.id).destroy + Experience.where(:member_profile_id => mp.id, :rss2_id.nin => ([nil,''] + data.map{|dt| dt["rss2_id"]})).destroy data.each_with_index do |dt, idx| - start_date = Date.parse(dt["start_date"]) rescue Date.today - end_date = Date.parse(dt["end_date"]) rescue Date.today - organization_title = {"en" => dt["organization_title"], "zh_tw" => dt["organization_title"]} - job_title = {"en" => dt["job_title"], "zh_tw" => dt["job_title"]} + rss2_id = dt['rss2_id'] + start_date = self.parse_date(dt["start_date"]) + end_date = self.parse_date(dt["end_date"]) + organization_title = self.localize_data(dt["organization_title"]) + job_title = self.localize_data(dt["job_title"]) if !dt["emp_type"].blank? type = ExperienceType.where(:title => dt["emp_type"]).first rescue nil if type.nil? - type = ExperienceType.create(:title_translations => {"en" => dt["emp_type"], "zh_tw" => dt["emp_type"]}) + type = ExperienceType.create(:title_translations => self.localize_data(dt["emp_type"])) end end - exp = Experience.new(:start_date => start_date, :end_date => end_date, :organizationt_title_translations => organization_title, :job_title_translations => job_title, :member_profile => mp) - exp.experience_type = type if !type.nil? - exp.save - puts "Exp created." + exp = Experience.where(:rss2_id => rss2_id).first + exp_data = {:rss2_id => rss2_id, :start_date => start_date, :end_date => end_date, :organizationt_title_translations => organization_title, :job_title_translations => job_title, :member_profile => mp, :experience_type => type} + if exp.nil? + exp = Experience.create(exp_data) + puts "Saving new Exp." + else + exp.update_attributes(exp_data) + puts "Updating Exp #{exp.id}." + end end end puts "Syncing experiences for #{staff_id} complete." puts "*********************************************" end - # def self.sync_projects(staff_id,mp) - # data = self.get_projects(staff_id) - # puts "Starting Projects for staff #{staff_id}." - # if !data.nil? - # projects = data - # total = projects.count rescue 0 - # return if total == 0 - # Project.where(:rss2_id.nin => ([nil,''] + projects.map{|project| project["rss_id"]}),member_profile_id: mp.id).destroy - # projects.each_with_index do |project,index| - # next if project.blank? - # proj = Project.where(:rss2_id => project["rss_id"]).first rescue nil - # pt_title = [project["category"]["zh_tw"],project["category"]["en"]].compact rescue [] - # pt = ProjectType.where(:title.in => pt_title).first rescue nil - # if pt.nil? && pt_title.count > 0 - # pt = ProjectType.new - # pt.title_translations = project["category"] - # pt.save - # end - # if proj.nil? - # proj = Project.new(rss2_id: project["rss_id"]) - # puts "Syncing new : " + ((100 * (index +1)) / total).to_s + "%" - # puts "rss2_id: #{project["rss_id"]}" if @debug_mode - # else - # puts "Updating old : " + ((100 * (index +1)) / total).to_s + "%" - # end - # proj.period_start_date = project["start_date"] - # proj.period_end_date = project["end_date"] - # proj.url = project["url"] - # proj.year = project["year"] - # proj.project_title_translations = project["title"] - # proj.job_title_translations = project["job"] - # proj.participator_translations = project["participator"] - # proj.unit_translations = project["unit"] - # proj.member_profile = mp - # proj.project_type = pt - # proj.save - # sleep 0.1 - # end - # end - # puts "Projects for staff #{staff_id} completed." - # end + def self.sync_certificates(staff_id,mp) + puts "*********************************************" + puts "Syncing certificates for #{staff_id}" + data = self.get_certificates(staff_id) + I18n.locale = :zh_tw + if data.count > 0 + puts "Data found." + puts "Deleting old data" + Certificate.where(:member_profile_id => mp.id, :rss2_id.nin => ([nil,''] + data.map{|dt| dt["rss2_id"]})).destroy + data.each_with_index do |dt, idx| + rss2_id = dt['rss2_id'] + issue_date = self.parse_date(dt["issue_date"]) + title_translations = self.localize_data(dt["title"]) + issued_by_translations = self.localize_data(dt["issued_by"]) + expiration_date = self.parse_date(dt["expiration_date"]) + year = (issue_date ? issue_date.strftime("%Y") : "") + if !dt["certificate_type"].blank? + type = CertificateCategory.where(:certificate_type => dt["certificate_type"]).first rescue nil + if type.nil? + type = CertificateCategory.create(:certificate_type_translations => self.localize_data(dt["certificate_type"])) + end + end + cert = Certificate.where(:rss2_id => rss2_id).first + cert_data = {:rss2_id => rss2_id, :issue_date => issue_date, :title_translations=> title_translations, :issued_by_translations => issued_by_translations,:expiration_date => expiration_date, :year => year, :member_profile => mp, :certificate_category => type} + if cert.nil? + cert = Certificate.create(cert_data) + puts "Saving new Certificate." + else + cert.update_attributes(cert_data) + puts "Updating Certificate #{exp.id}." + end + end + end + puts "Syncing certificates for #{staff_id} complete." + puts "*********************************************" + end - # def self.sync_honors(staff_id,mp) - # data = self.get_honors(staff_id) - # puts "Starting Honors for staff #{staff_id}." - # if !data.nil? - # honors = data - # total = honors.count rescue 0 - # return if total == 0 - # Honor.where(:rss2_id.nin => ([nil,''] + honors.map{|honor| honor["rss_id"]}),member_profile_id: mp.id).destroy - # honors.each_with_index do |honor,index| - # next if honor.blank? - # hon = Honor.where(:rss2_id => honor["rss_id"]).first rescue nil - # ht_title = [honor["category"]["zh_tw"],honor["category"]["en"]].compact rescue [] - # ht = HonorType.where(:title.in => ht_title).first rescue nil - # if ht.nil? && ht_title.count > 0 - # ht = HonorType.new - # ht.title_translations = honor["category"] - # ht.save - # end - # if hon.nil? - # hon = Honor.new(rss2_id: honor["rss_id"]) - # puts "Syncing new : " + ((100 * (index +1)) / total).to_s + "%" - # puts "rss2_id: #{honor["rss_id"]}" if @debug_mode - # else - # puts "Updating old : " + ((100 * (index +1)) / total).to_s + "%" - # end - # hon.award_name_translations = honor["title"] - # hon.awarding_unit_translations = honor["unit"] - # hon.year = honor["year"] - # hon.honor_type = ht - # hon.member_profile = mp - # hon.save - # sleep 0.1 - # end - # end - # puts "Honors for staff #{staff_id} completed." - # end + def self.sync_projects(staff_id,mp) + puts "*********************************************" + puts "Syncing projects for #{staff_id}" + data = self.get_projects(staff_id) + I18n.locale = :zh_tw + if data.count > 0 + puts "Data found." + puts "Deleting old data" + Project.where(:member_profile_id => mp.id, :rss2_id.nin => ([nil,''] + data.map{|dt| dt["rss2_id"]})).destroy + data.each_with_index do |dt, idx| + rss2_id = dt["rss2_id"] + project_title = self.localize_data(dt["project_title"]) + project_number = dt["project_number"] + period_start_date = self.parse_date(dt["period_start_date"]) + period_end_date = self.parse_date(dt["period_end_date"]) + unit = self.localize_data(dt["unit"]) + participants = self.localize_data(dt["participants"]) + year = (period_start_date ? period_start_date.strftime("%Y") : "") + prj = Project.where(:rss2_id => rss2_id).first + prj_data = {:rss2_id => rss2_id,:project_title_translations => project_title, :project_number=> project_number, :period_start_date => period_start_date, :period_end_date => period_end_date, :unit_translations => unit, :participants_translations => participants, :year => year, :member_profile => mp} + if prj.nil? + prj = Project.create(prj_data) + puts "Saving new Project." + else + prj.update_attributes(prj_data) + puts "Updating Project #{prj.id}." + end + puts "Project created." + end + end + puts "Syncing projects for #{staff_id} complete." + puts "*********************************************" + end + + def self.sync_honors(staff_id,mp) + puts "*********************************************" + puts "Syncing honors for #{staff_id}" + data = self.get_honors(staff_id) + I18n.locale = :zh_tw + if data.count > 0 + puts "Data found." + puts "Deleting old data" + Honor.where(:member_profile_id => mp.id, :rss2_id.nin => ([nil,''] + data.map{|dt| dt["rss2_id"]})).destroy + data.each_with_index do |dt, idx| + rss2_id = dt["rss2_id"] + award_date = self.parse_date(dt["award_date"]) + award_name_translations = self.localize_data(dt["award_name"]) + country_translations = self.localize_data(dt["country"]) + ranking_translations = self.localize_data(dt["ranking"]) + honor_type = dt["honor_type"] + awarding_body_translations = self.localize_data(dt["awarding_body"]) + awarding_unit_translations = self.localize_data(dt["awarding_unit"]) + year = (award_date ? award_date.strftime("%Y") : "") + if !dt["honor_type"].blank? + type = HonorType.where(:title => dt["honor_type"]).first rescue nil + if type.nil? + type = HonorType.create(:title_translations => self.localize_data(dt["honor_type"])) + end + end + hon = Honor.where(:rss2_id => rss2_id).first + hon_data = {:award_date => award_date, :award_name_translations=> award_name_translations, :country_translations => country_translations, :ranking_translations => ranking_translations, :awarding_body_translations => awarding_body_translations, :awarding_unit_translations => awarding_unit_translations, :year => year, :member_profile => mp, :honor_type => type} + if hon.nil? + hon = Honor.create(hon_data) + puts "Saving new Honor." + else + hon.update_attributes(hon_data) + puts "Updating Honor #{hon.id}." + end + puts "Honor created." + end + end + puts "Syncing honors for #{staff_id} complete." + puts "*********************************************" + end + + def self.sync_patents(staff_id,mp) + puts "*********************************************" + puts "Syncing patents for #{staff_id}" + data = self.get_patents(staff_id) + I18n.locale = :zh_tw + if data.count > 0 + puts "Data found." + puts "Deleting old data" + Patent.where(:member_profile_id => mp.id, :rss2_id.nin => ([nil,''] + data.map{|dt| dt["rss2_id"]})).destroy + data.each_with_index do |dt, idx| + rss2_id = dt['rss2_id'] + patent_title = self.localize_data(dt["patent_title"]) + patent_country = self.localize_data(dt["patent_country"]) + publication_date = self.parse_date(dt["publication_date"]) + expiration_date = self.parse_date(dt["expiration_date"]) + if !dt["patent_type"].blank? + type = PatentType.where(:title => dt["patent_type"]).first rescue nil + if type.nil? + type = PatentType.create(:title_translations => self.localize_data(dt["patent_type"])) + end + end + year = (publication_date ? publication_date.strftime("%Y") : "") + pat = Patent.where(:rss2_id => rss2_id).first + pat_data = {:rss2_id => rss2_id, :patent_title_translations => patent_title, :patent_country_translations => patent_country, :publication_date => publication_date, :expiration_date => expiration_date, :year => year, :member_profile => mp, :patent_type => type} + if pat.nil? + pat = Patent.create(pat_data) + puts "Saving new Patent." + else + pat.update_attributes(pat_data) + puts "Updating Patent #{pat.id}." + end + end + end + puts "Syncing patents for #{staff_id} complete." + puts "*********************************************" + end def self.sync_activities(staff_id,mp) puts "*********************************************" @@ -360,25 +410,37 @@ module FguSyncPlugin if data.count > 0 puts "Data found." puts "Deleting old data" - Experience.where(:member_profile_id => mp.id).destroy + Activity.where(:member_profile_id => mp.id, :rss2_id.nin => ([nil,''] + data.map{|dt| dt["rss2_id"]})).destroy data.each_with_index do |dt, idx| - start_date = Date.parse(dt["start_date"]) rescue Date.today - end_date = Date.parse(dt["end_date"]) rescue Date.today - organization_title = {"en" => dt["organization_title"], "zh_tw" => dt["organization_title"]} - job_title = {"en" => dt["job_title"], "zh_tw" => dt["job_title"]} - if !dt["emp_type"].blank? - type = ExperienceType.where(:title => dt["emp_type"]).first rescue nil - if type.nil? - type = ExperienceType.create(:title_translations => {"en" => dt["emp_type"], "zh_tw" => dt["emp_type"]}) - end + rss2_id = dt['rss2_id'] + publish_date = self.parse_date(dt["publish_date"]) + updated_at = self.parse_date(dt["updated_at"]) + start_date = self.parse_date(dt["start_date"]) + end_date = self.parse_date(dt["end_date"]) + activity_name = self.localize_data(dt["activity_name"]) + work_title = self.localize_data(dt["work_title"]) + activity_organizer = self.localize_data(dt["activity_organizer"]) + activity_co_organizer = self.localize_data(dt["activity_co_organizer"]) + region = self.localize_data(dt["region"]) + road_show = self.localize_data(dt["road_show"]) + tour_details = self.localize_data(dt["tour_details"]) + award_name = self.localize_data(dt["award_name"]) + awarding_unit = self.localize_data(dt["awarding_unit"]) + authors_type = self.localize_data(dt["authors_type"]) + authors = self.localize_data(dt["authors"]) + year = (publish_date ? publish_date.strftime("%Y") : "") + act = Activity.where(:rss2_id => rss2_id).first + act_data = {:rss2_id => rss2_id, :publish_date => publish_date, :updated_at => updated_at, :start_date => start_date, :end_date => end_date, :activity_name_translations => activity_name, :work_title_translations => work_title, :activity_organizer_translations => activity_organizer, :activity_co_organizer_translations => activity_co_organizer, :region_translations => region, :road_show_translations => road_show, :tour_details_translations => tour_details, :award_name_translations => award_name, :awarding_unit_translations => awarding_unit, :authors_type_translations => authors_type, :authors_translations => authors, :year => year, :member_profile => mp} + if act.nil? + act = Activity.new(act_data) + puts "Saving new Activity." + else + act.update_attributes(act_data) + puts "Updating Activity #{act.id}." end - exp = Experience.new(:start_date => start_date, :end_date => end_date, :organizationt_title_translations => organization_title, :job_title_translations => job_title, :member_profile => mp) - exp.experience_type = type if !type.nil? - exp.save - puts "Exp created." end end - puts "Syncing experiences for #{staff_id} complete." + puts "Syncing activities for #{staff_id} complete." puts "*********************************************" end @@ -404,9 +466,9 @@ module FguSyncPlugin puts "Assigning role #{role.key}" case teacher_data["job_status"] when "專任" - role_status = role.role_statuses.select{|v| v[:title][:en].upcase == "Full-Time".upcase}.first + role_status = role.role_statuses.select{|v| v.title_translations[:en].upcase == "Full-Time".upcase}.first when "兼任" - role_status = role.role_statuses.select{|v| v[:title][:en].upcase == "Part-Time".upcase}.first + role_status = role.role_statuses.select{|v| v.title_translations[:en].upcase == "Part-Time".upcase}.first else role_status = nil end @@ -419,7 +481,7 @@ module FguSyncPlugin puts job_title.to_s if job_title.blank? job_title = af.option_list.keys.last.to_i + 1 - af.option_list[job_title] = {"en" => teacher_data["job_title"], "zh_tw" => teacher_data["job_title"]} + af.option_list[job_title] = self.localize_data(teacher_data["job_title"]) puts af.option_list.to_s af.save else @@ -447,7 +509,7 @@ module FguSyncPlugin end end if !av.nil? - av.value= {:en => teacher_data["profession_list"], :zh_tw => teacher_data["profession_list"]} + av.value= self.localize_data(teacher_data["profession_list"]) av.save end #saving courses @@ -461,14 +523,14 @@ module FguSyncPlugin if !av.nil? course_html = "" if teacher_data["courses"].blank? - av.value= {:en => course_html, :zh_tw => course_html} + av.value= self.localize_data(course_html) av.save end teacher_data["courses"].each do |course| course_url = course["course_url"] course_url.gsub!(/http:\/\/(.*\.fgu\.edu\.tw)/, 'https://\1') course_html += "#{course["course_id"]} #{course["course_name"]}
" - av.value= {:en => course_html, :zh_tw => course_html} + av.value = self.localize_data(course_html) av.save end end @@ -476,8 +538,8 @@ module FguSyncPlugin end mp.email = teacher_data["email"] mp.office_tel = teacher_data["office_tel"] - mp.address_translations = {"en" => teacher_data["address"], "zh_tw" => teacher_data["address"]} - mp.first_name_translations = {"en" => teacher_data["name"], "zh_tw" => teacher_data["name"]} + mp.address_translations = self.localize_data(teacher_data["address"]) + mp.first_name_translations = self.localize_data(teacher_data["name"]) if (!role.nil? && !all_role_ids.include?(role.id)) all_role_ids << role.id end @@ -585,31 +647,59 @@ module FguSyncPlugin "f_empname" => "job_title", "f_emptype" => "emp_type" }, - 'dbo.v_rul_research_create' => { - "紀錄編號" => "activity_id", - "首次發表時間" => "created_at", - "更新日期" => "updated_at", - "展演舉行起日" => "activity_start_date", - "展演舉行迄日" => "activity_end_date", - "展演活動名稱" => "activity_name", - "展演作品名稱" => "", - "填報系所" => "unit", - "填報部門" => "department", - "所有作者群" => "authors", - "作者類型" => "author_type", - "專書類別" => "book_type", - "合著者1姓名" => "author1", - "合著者2姓名" => "author2", - "合著者3姓名" => "author3", - "合著者4以上" => "author4", - "專書名稱" => "book_title", - "使用語文" => "language", - "出版社_發表處所名稱" => "publisher", - "專書ISBN編號或無" => "isbn", - "出版_發表地區" => "location", - "備註" => "note" + 'dbo.v_rul_research_credential' => { + "紀錄編號" => "rss2_id", + "核發日期" => "issue_date", + "證照名稱" => "title", + "發照機關" => "issued_by", + "證照類別" => "certificate_type", + "有效期限" => "expiration_date" + }, + 'dbo.v_rul_research_award' => { + "紀錄編號" => "rss2_id", + "獲獎日期" => "award_date", + "獎項名稱" => "award_name", + "國別/地區" => "country", + "名次" => "ranking", + "區域" => "honor_type", + "頒發機構名稱" => "awarding_body", + "頒獎單位名稱"=> "awarding_unit" + }, + 'dbo.v_rul_research_patent' => { + "紀錄編號" => "rss2_id", + "專利名稱" => "patent_title", + "申請國別" => "patent_country", + "生效日期"=> "publication_date", + "有效期限" => "expiration_date", + "專利類型" => "patent_type" + }, + 'dbo.v_rul_research_create' => { + "紀錄編號" => "rss2_id", + "首次發表時間" => "publish_date", + "更新日期" => "updated_at", + "展演舉行起日" => "start_date", + "展演舉行迄日" => "end_date", + "展演活動名稱" => "activity_name", + "展演作品名稱" => "work_title", + "展演主辦單位全銜" => "activity_organizer", + "展演協辦單位全銜" => "activity_co_organizer", + "展演活動辦理國別/地區" => "region", + "是否為巡演" => "road_show", + "巡演明細" => "tour_details", + "獎名" => "award_name", + "頒獎單位" => "awarding_unit", + "作者別" => "authors_type", + "所有作者群" => "authors" + }, + 'dbo.v_rul_research_plan' => { + "紀錄編號" => "rss2_id", + "計畫名稱" => "project_title", + "校外計畫編號" => "project_number", + "計畫起日期" => "period_start_date", + "計畫迄日期" => "period_end_date", + "經費補助單位(補助單位)" => "unit", + "所有參與者" => "participants" }, - "作者別"=>"主要創作者、改編者", "所有作者群"=>"", "簡介"=>"母親節、父親節、重陽敬老節、中秋和新年...任何假期都是陪伴父母家 人的好時節。\r\n圖書館3樓主題展覽區本期展出:「帶著爸媽去旅行」成果特展,歡迎全校師生蒞臨賞析。\r\nhttps://libweb.fgu.edu.tw/zh_tw/News/-展覽-帶著爸媽去旅行-成果特展-歡迎全校師生蒞臨賞析-41046202", "展演主辦單位全銜"=>"未來與樂活產業學系", "展演協辦單位全銜"=>"", "展演活動辦理國別/地區"=>"台灣", "是否為巡演"=>"否", "巡演明細"=>"", "獎名"=>"", "頒獎單位"=>""} 'vrul_base' => { "f_email" => "email", "f_phone" => "office_tel", @@ -632,12 +722,12 @@ module FguSyncPlugin } if key_mapping.has_key?(table_name) && key_mapping[table_name].present? tmp = key_mapping[table_name] - mapping_text = tmp.map{|k,v| "#{k} as #{v}"}.join(', ') + mapping_text = tmp.map{|k,v| "\"#{k}\" as '#{v}'"}.join(', ') else mapping_text = '*' end if order_fields.nil? - sql = "SELECT #{mapping_text} FROM [#{table_name}]" + sql = "SELECT #{mapping_text} FROM #{table_name}" field_prefix = "" else # rss_id is the row index if order_fields === false @@ -822,49 +912,24 @@ module FguSyncPlugin data + data1 end - def self.get_activities(staff_id) - result = query_db('dbo.v_rul_research_create', {:f_uni_id=> "F#{staff_id}"}) + def self.get_certificates(staff_id) + result = query_db('dbo.v_rul_research_credential', {"填報者公號"=> "F#{staff_id}"}) end - # def self.get_projects(staff_id) - # # url field not exist in original nccu database - # result = query_db('rssproject', {:sta_num=>staff_id}) - # category_mapping = { - # 'Y' => { - # 'zh_tw' => '科技部', - # 'en' => 'MOST Projects' - # }, - # 'N' => { - # 'zh_tw' => '非科技部', - # 'en' => 'Other Projects' - # } - # } - # result.each do |h| - # h['category'] = category_mapping[h['category']] - # end - # result - # end - # def self.get_honors(staff_id) - # result = query_db('rssreward', {:sta_num=>staff_id}) - # category_mapping = { - # '1' => { - # 'zh_tw' => '校內', - # 'en' => 'Inside School' - # }, - # '2' => { - # 'zh_tw' => '校外', - # 'en' => 'Outside School' - # }, - # '3' => { - # 'zh_tw' => '事蹟', - # 'en' => 'Deeds' - # } - # } - # result.each do |h| - # h['category'] = category_mapping[h['category']] - # end - # result - # end + def self.get_activities(staff_id) + result = query_db('dbo.v_rul_research_create', {"填報者公號"=> "F#{staff_id}"}) + end + def self.get_projects(staff_id) + result = query_db('dbo.v_rul_research_plan', {"填報者公號"=> "F#{staff_id}"}) + end + + def self.get_honors(staff_id) + result = query_db('dbo.v_rul_research_award', {"填報者公號"=> "F#{staff_id}"}) + end + + def self.get_patents(staff_id) + result = query_db('dbo.v_rul_research_patent', {"填報者公號"=> "F#{staff_id}"}) + end def self.get_teacher_data(staff_id) data = query_db('vrul_base', {:f_uni_id=> "F#{staff_id}"}) @@ -894,11 +959,12 @@ namespace :sync_nccu_personal_plugins do FguSyncPlugin.sync_books(staff_id,mp) FguSyncPlugin.sync_diplomas(staff_id,mp) FguSyncPlugin.sync_experiences(staff_id,mp) + FguSyncPlugin.sync_certificates(staff_id,mp) + FguSyncPlugin.sync_honors(staff_id,mp) + FguSyncPlugin.sync_patents(staff_id,mp) + FguSyncPlugin.sync_projects(staff_id,mp) FguSyncPlugin.sync_activities(staff_id, mp) FguSyncPlugin.sync_fgu_profile(staff_id, mp) - # FguSyncPlugin.sync_research_papers(staff_id,mp) - # FguSyncPlugin.sync_projects(staff_id,mp) - # FguSyncPlugin.sync_honors(staff_id,mp) end end