Merge pull request #4604 from okriuchykhin/ok_SCI_7434

Fix team export/import [SCI-7434]
This commit is contained in:
Miha Mencin 2022-11-08 16:02:11 +01:00 committed by GitHub
commit c8bd5513cf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 41 additions and 16 deletions

View file

@ -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

View file

@ -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