From be7ef8fdc031d03c75c98cf8f57496583ad5e7a8 Mon Sep 17 00:00:00 2001 From: Oleksii Kriuchykhin Date: Tue, 8 Nov 2022 14:41:11 +0100 Subject: [PATCH] Fix team export/import [SCI-7434] --- app/services/model_exporters/team_exporter.rb | 24 +++++++++++--- app/services/team_importer.rb | 33 ++++++++++++------- 2 files changed, 41 insertions(+), 16 deletions(-) diff --git a/app/services/model_exporters/team_exporter.rb b/app/services/model_exporters/team_exporter.rb index 1c429aed1..31a75fd48 100644 --- a/app/services/model_exporters/team_exporter.rb +++ b/app/services/model_exporters/team_exporter.rb @@ -4,7 +4,7 @@ module ModelExporters class TeamExporter < ModelExporter def initialize(team_id) super() - @team = Team.includes(:user_teams).find(team_id) + @team = Team.find(team_id) end def export_to_dir @@ -42,9 +42,11 @@ module ModelExporters @tiny_mce_assets_to_copy.push(team.tiny_mce_assets) if team.tiny_mce_assets.present? { team: team, - default_admin_id: team.user_teams.where(role: 2).first.user.id, + default_admin_id: team.user_assignments.where(user_role: UserRole.find_predefined_owner_role).first.user.id, users: team.users.map { |u| user(u) }, - user_teams: team.user_teams, + user_assignments: team.user_assignments.map do |ua| + user_assignment(ua) + end, notifications: Notification .includes(:user_notifications) .where('user_notifications.user_id': team.users) @@ -52,7 +54,11 @@ module ModelExporters repositories: team.repositories.map { |r| repository(r) }, tiny_mce_assets: team.tiny_mce_assets.map { |tma| tiny_mce_asset_data(tma) }, protocols: team.protocols.where(my_module: nil).map do |pr| - protocol(pr) + protocol(pr).merge( + user_assignments: pr.user_assignments.map do |ua| + user_assignment(ua) + end + ) end, protocol_keywords: team.protocol_keywords, project_folders: team.project_folders, @@ -124,13 +130,17 @@ module ModelExporters user_id: user_assignment.user_id, assigned_by_id: user_assignment.assigned_by_id, role_name: user_assignment.user_role.name, - assigned: user_assignment.assigned + assigned: user_assignment.assigned, + team_id: user_assignment.team_id } end def report(report) { report: report, + user_assignments: report.user_assignments.map do |ua| + user_assignment(ua) + end, report_elements: report.report_elements } end @@ -146,6 +156,10 @@ module ModelExporters end } unless repository.is_a?(RepositorySnapshot) + result[:user_assignments] = + repository.user_assignments.where(team: repository.team, user: repository.team.users).map do |ua| + user_assignment(ua) + end result[:repository_snapshots] = repository.repository_snapshots.map { |r| repository(r) } end result diff --git a/app/services/team_importer.rb b/app/services/team_importer.rb index bc1b3df2c..af8ef5429 100644 --- a/app/services/team_importer.rb +++ b/app/services/team_importer.rb @@ -27,6 +27,8 @@ class TeamImporter @checklist_mappings = {} @table_mappings = {} @report_mappings = {} + @label_template_mappings = {} + @step_text_mappings = {} @project_counter = 0 @repository_counter = 0 @@ -59,25 +61,18 @@ class TeamImporter team_last_modified_by = team.last_modified_by_id team.last_modified_by_id = nil team.without_templates = true + team.skip_user_assignments = true team.save! + @team_id = team.id create_users(team_json['users'], team) + puts 'Assigning users to the team...' + create_user_assignments(team_json['user_assignments'], team) # Find new id of the first admin in the team @admin_id = @user_mappings[team_json['default_admin_id']] create_notifications(team_json['notifications']) - - puts 'Assigning users to the team...' - team_json['user_teams'].each do |user_team_json| - user_team = UserTeam.new(user_team_json) - user_team.id = nil - user_team.user_id = find_user(user_team.user_id) - user_team.team_id = team.id - user_team.assigned_by_id = find_user(user_team.assigned_by_id) - user_team.save! - end - create_protocol_keywords(team_json['protocol_keywords'], team) create_protocols(team_json['protocols'], nil, team) create_project_folders(team_json['project_folders'], team) @@ -316,6 +311,7 @@ class TeamImporter team.label_templates.where.not(type: 'FluicsLabelTemplate').destroy_all label_templates_json.each do |template_json| template = LabelTemplate.new(template_json) + orig_template_id = template.id template.id = nil template.team_id = team.id template.created_by_id = find_user(template.created_by_id) if template.created_by_id @@ -323,6 +319,7 @@ class TeamImporter template.save! @label_template_counter += 1 + @label_template_mappings[orig_template_id] = template.id end end @@ -457,7 +454,11 @@ class TeamImporter repository.archived_by_id = find_user(repository.archived_by_id) repository.restored_by_id = find_user(repository.restored_by_id) repository.discarded_by_id = find_user(repository.discarded_by_id) + repository.skip_user_assignments = true repository.save! + + create_user_assignments(repository_json['user_assignments'], repository) + @repository_mappings[orig_repository_id] = repository.id @repository_counter += 1 repository_json['repository_columns'].each do |repository_column_json| @@ -790,6 +791,9 @@ class TeamImporter protocol.skip_user_assignments = true protocol.parent_id = @protocol_mappings[protocol.parent_id] unless protocol.parent_id.nil? protocol.save! + + create_user_assignments(protocol_json['user_assignments'], protocol) if protocol.in_repository? + @protocol_counter += 1 @protocol_mappings[orig_protocol_id] = protocol.id @@ -832,9 +836,11 @@ class TeamImporter step_json['step_orderable_elements'].each do |element_json| if element_json['step_text'] orderable = StepText.new(element_json['step_text']) + orig_step_text_id = orderable.id orderable.step_id = step.id orderable.id = nil orderable.save! + @step_text_mappings[orig_step_text_id] = orderable.id elsif element_json['table'] table = Table.new(element_json['table']) orig_table_id = table.id @@ -983,7 +989,11 @@ class TeamImporter report.user_id = find_user(report.user_id) report.last_modified_by_id = find_user(report.last_modified_by_id) report.team_id = team.id + report.skip_user_assignments = true report.save! + + create_user_assignments(report_json['user_assignments'], report) + @report_mappings[orig_report_id] = report.id @report_counter += 1 report_json['report_elements'].each do |report_element_json| @@ -1057,6 +1067,7 @@ class TeamImporter user_assignment.user_id = find_user(user_assignment_json['user_id']) user_assignment.assigned = user_assignment_json['assigned'] user_assignment.assigned_by_id = find_user(user_assignment_json['assigned_by_id']) + user_assignment.team_id = @team_id user_assignment.save! end end