From ce8d12e1c4a5a96eda100613f6c47af5305413e0 Mon Sep 17 00:00:00 2001 From: Oleksii Kriuchykhin Date: Wed, 5 Aug 2020 09:59:58 +0200 Subject: [PATCH] Create new activities for exporting assigned items (live & snapshots) [SCI-4881] --- .../my_module_repositories_controller.rb | 21 +++++++++++------- ..._module_repository_snapshots_controller.rb | 22 +++++++++++++++++++ app/helpers/global_activities_helper.rb | 2 +- app/services/repository_zip_export.rb | 11 +++++----- .../_full_view_snapshot_table.html.erb | 2 +- config/initializers/extends.rb | 9 ++++---- config/locales/global_activities/en.yml | 4 ++++ config/routes.rb | 1 + 8 files changed, 53 insertions(+), 19 deletions(-) diff --git a/app/controllers/my_module_repositories_controller.rb b/app/controllers/my_module_repositories_controller.rb index 54add8ab1..7ecc50060 100644 --- a/app/controllers/my_module_repositories_controller.rb +++ b/app/controllers/my_module_repositories_controller.rb @@ -4,8 +4,7 @@ class MyModuleRepositoriesController < ApplicationController include ApplicationHelper before_action :load_my_module - before_action :load_repository, except: %i(repositories_dropdown_list repositories_list_html export_repository) - before_action :load_repository_or_snapshot, only: :export_repository + before_action :load_repository, except: %i(repositories_dropdown_list repositories_list_html) before_action :check_my_module_view_permissions before_action :check_repository_view_permissions, except: %i(repositories_dropdown_list repositories_list_html) before_action :check_assign_repository_records_permissions, only: :update @@ -120,6 +119,18 @@ class MyModuleRepositoriesController < ApplicationController def export_repository if params[:header_ids] RepositoryZipExport.generate_zip(params, @repository, current_user) + + Activities::CreateActivityService.call( + activity_type: :export_inventory_items_assigned_to_task, + owner: current_user, + subject: @repository, + team: current_team, + message_items: { + my_module: @my_module.id, + repository: @repository.id + } + ) + render json: { message: t('zip_export.export_request_success') }, status: :ok else render json: { message: t('zip_export.export_error') }, status: :unprocessable_entity @@ -138,12 +149,6 @@ class MyModuleRepositoriesController < ApplicationController render_404 unless @repository end - def load_repository_or_snapshot - @repository = Repository.accessible_by_teams(current_team).find_by(id: params[:id]) - @repository ||= RepositorySnapshot.find_by(id: params[:id]) - render_404 unless @repository - end - def check_my_module_view_permissions render_403 unless can_read_experiment?(@my_module.experiment) end diff --git a/app/controllers/my_module_repository_snapshots_controller.rb b/app/controllers/my_module_repository_snapshots_controller.rb index 4493b2343..379ed0155 100644 --- a/app/controllers/my_module_repository_snapshots_controller.rb +++ b/app/controllers/my_module_repository_snapshots_controller.rb @@ -101,6 +101,28 @@ class MyModuleRepositorySnapshotsController < ApplicationController render json: {} end + def export_repository_snapshot + if params[:header_ids] + RepositoryZipExport.generate_zip(params, @repository_snapshot, current_user) + + Activities::CreateActivityService.call( + activity_type: :export_inventory_snapshot_items_assigned_to_task, + owner: current_user, + subject: @repository_snapshot, + team: current_team, + message_items: { + my_module: @my_module.id, + repository_snapshot: @repository_snapshot.id, + created_at: @repository_snapshot.created_at + } + ) + + render json: { message: t('zip_export.export_request_success') }, status: :ok + else + render json: { message: t('zip_export.export_error') }, status: :unprocessable_entity + end + end + private def load_my_module diff --git a/app/helpers/global_activities_helper.rb b/app/helpers/global_activities_helper.rb index e9e4f374d..7d34a02dd 100644 --- a/app/helpers/global_activities_helper.rb +++ b/app/helpers/global_activities_helper.rb @@ -12,7 +12,7 @@ module GlobalActivitiesHelper if value.is_a? String value elsif value['type'] == 'Time' # use saved date for printing - l(Time.at(value['value']), format: :full_date) + l(Time.at(value['value']), format: :full) else no_links ? generate_name(value) : generate_link(value, activity) end diff --git a/app/services/repository_zip_export.rb b/app/services/repository_zip_export.rb index 2fe9c4632..13cc0ea91 100644 --- a/app/services/repository_zip_export.rb +++ b/app/services/repository_zip_export.rb @@ -7,11 +7,12 @@ module RepositoryZipExport # Fetch rows in the same order as in the currently viewed datatable if params[:my_module_id] rows = if repository.is_a?(RepositorySnapshot) - repository.repository_rows - else - repository.repository_rows.joins(:my_module_repository_rows) - .where(my_module_repository_rows: { my_module_id: params[:my_module_id] }) - end + repository.repository_rows + else + repository.repository_rows + .joins(:my_module_repository_rows) + .where(my_module_repository_rows: { my_module_id: params[:my_module_id] }) + end else ordered_row_ids = params[:row_ids] id_row_map = RepositoryRow.where(id: ordered_row_ids, diff --git a/app/views/my_modules/repositories/_full_view_snapshot_table.html.erb b/app/views/my_modules/repositories/_full_view_snapshot_table.html.erb index e95245d03..0df8097c9 100644 --- a/app/views/my_modules/repositories/_full_view_snapshot_table.html.erb +++ b/app/views/my_modules/repositories/_full_view_snapshot_table.html.erb @@ -8,7 +8,7 @@ data-default-order="<%= default_snapshot_table_order_as_js_array %>" data-default-table-columns="<%= default_snapshot_table_columns %>" data-load-state-url="<%= repository_load_table_state_path(@repository_snapshot) %>" - data-export-url="<%= export_repository_my_module_repository_path(@my_module ,@repository_snapshot) %>" + data-export-url="<%= export_repository_snapshot_my_module_repository_snapshot_path(@my_module, @repository_snapshot) %>" data-versions-sidebar-url="<%= full_view_sidebar_my_module_repository_snapshots_path(@my_module, @repository_snapshot.parent_id) %>" > diff --git a/config/initializers/extends.rb b/config/initializers/extends.rb index e2fac7942..0caf096d8 100644 --- a/config/initializers/extends.rb +++ b/config/initializers/extends.rb @@ -143,9 +143,8 @@ class Extends step: nil } - ACTIVITY_MESSAGE_ITEMS_TYPES = - ACTIVITY_SUBJECT_TYPES + %w(User Tag RepositoryColumn RepositoryRow Step Asset TinyMceAsset Repository) - .freeze + ACTIVITY_MESSAGE_ITEMS_TYPES = ACTIVITY_SUBJECT_TYPES + %w(User Tag RepositoryColumn RepositoryRow Step + Asset TinyMceAsset Repository RepositorySnapshot).freeze ACTIVITY_TYPES = { create_project: 0, @@ -287,7 +286,9 @@ class Extends archive_inventory_item: 142, restore_inventory_item: 143, archive_inventory: 144, - restore_inventory: 145 + restore_inventory: 145, + export_inventory_items_assigned_to_task: 146, + export_inventory_snapshot_items_assigned_to_task: 147 } ACTIVITY_GROUPS = { diff --git a/config/locales/global_activities/en.yml b/config/locales/global_activities/en.yml index 24444f933..0ab5de4c1 100644 --- a/config/locales/global_activities/en.yml +++ b/config/locales/global_activities/en.yml @@ -173,6 +173,8 @@ en: delete_chemical_structure_on_protocol_html: "%{user} deleted chemical structure %{asset_name} on protocol %{protocol}." delete_chemical_structure_on_task_html: "%{user} deleted chemical structure %{asset_name} on task %{my_module}." protocol_description_in_task_edited_html: "%{user} edited protocol description on task %{my_module}." + export_inventory_items_assigned_to_task_html: "%{user} exported inventory item(s) assigned to task %{my_module} from inventory %{repository}: Live version." + export_inventory_snapshot_items_assigned_to_task_html: "%{user} exported inventory item(s) assigned to task %{my_module} from inventory %{repository_snapshot}: Snapshot of %{created_at}." activity_name: create_project: "Project created" @@ -311,6 +313,8 @@ en: delete_chemical_structure_on_protocol: "Chemical structure on protocol deleted" delete_chemical_structure_on_task: "Chemical structure on task deleted" protocol_description_in_task_edited: "Protocol description in task edited" + export_inventory_items_assigned_to_task: "Task-assigned inventory items exported (live version)" + export_inventory_snapshot_items_assigned_to_task: "Task-assigned inventory items exported (snapshot)" activity_group: projects: "Projects" diff --git a/config/routes.rb b/config/routes.rb index 50c39fae5..a2f5ec3cb 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -395,6 +395,7 @@ Rails.application.routes.draw do member do get :full_view_table post :index_dt + post :export_repository_snapshot get :status end