Merge pull request #3374 from okriuchykhin/ok_SCI_5776

Fix export all functionality [SCI-5776]
This commit is contained in:
Miha Mencin 2021-06-09 08:52:21 +02:00 committed by GitHub
commit 471f6daae7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
22 changed files with 95 additions and 272 deletions

View file

@ -75,15 +75,6 @@ module ReportsHelper
end end
end end
end end
if obj_id
file = provided_locals[:obj_filenames][element['type_of'].to_sym][obj_id]
locals[:path] = {
file: file[:file].sub(%r{/usr/src/app/tmp/temp-zip-\d+/}, ''),
preview: file[:preview]&.sub(%r{/usr/src/app/tmp/temp-zip-\d+/}, '')
}
locals[:filename] = locals[:path][:file].split('/').last
end
end end
# ReportExtends is located in config/initializers/extends/report_extends.rb # ReportExtends is located in config/initializers/extends/report_extends.rb
@ -130,7 +121,10 @@ module ReportsHelper
repository = Repository.accessible_by_teams(my_module.experiment.project.team).find_by(id: element_id) repository = Repository.accessible_by_teams(my_module.experiment.project.team).find_by(id: element_id)
# Check for default set snapshots when repository still exists # Check for default set snapshots when repository still exists
if repository if repository
selected_snapshot = repository.repository_snapshots.where(my_module: my_module).find_by(selected: true) selected_snapshot = repository.repository_snapshots
.joins(repository_rows: { my_module_repository_rows: :my_module })
.where(repository_rows: { my_module_repository_rows: { my_module: my_module } })
.find_by(selected: true)
repository = selected_snapshot if selected_snapshot repository = selected_snapshot if selected_snapshot
end end
repository ||= RepositorySnapshot.joins(my_module: { experiment: :project }) repository ||= RepositorySnapshot.joins(my_module: { experiment: :project })

View file

@ -216,7 +216,7 @@ class Project < ApplicationRecord
def assigned_repositories_and_snapshots def assigned_repositories_and_snapshots
live_repositories = Repository.assigned_to_project(self) live_repositories = Repository.assigned_to_project(self)
snapshots = RepositorySnapshot.of_unassigned_from_project(self) snapshots = RepositorySnapshot.assigned_to_project(self)
(live_repositories + snapshots).sort_by { |r| r.name.downcase } (live_repositories + snapshots).sort_by { |r| r.name.downcase }
end end
@ -267,15 +267,15 @@ class Project < ApplicationRecord
ActionController::Renderer::RACK_KEY_TRANSLATION['warden'] ||= 'warden' ActionController::Renderer::RACK_KEY_TRANSLATION['warden'] ||= 'warden'
proxy = Warden::Proxy.new({}, Warden::Manager.new({})) proxy = Warden::Proxy.new({}, Warden::Manager.new({}))
proxy.set_user(user, scope: :user, store: false) proxy.set_user(user, scope: :user, store: false)
ApplicationController.renderer.defaults[:http_host] = Rails.application.routes.default_url_options[:host]
renderer = ApplicationController.renderer.new(warden: proxy) renderer = ApplicationController.renderer.new(warden: proxy)
report = Report.generate_whole_project_report(self, user, team) report = Report.generate_whole_project_report(self, user, team)
page_html_string = page_html_string =
renderer.render 'reports/new_old.html.erb', renderer.render 'reports/export.html.erb',
locals: { export_all: true, locals: { report: report, export_all: true },
obj_filenames: obj_filenames }, assigns: { settings: report.settings, obj_filenames: obj_filenames }
assigns: { project: self, report: report }
parsed_page_html = Nokogiri::HTML(page_html_string) parsed_page_html = Nokogiri::HTML(page_html_string)
parsed_html = parsed_page_html.at_css('#report-content') parsed_html = parsed_page_html.at_css('#report-content')

View file

@ -100,7 +100,6 @@ class Report < ApplicationRecord
end end
def self.generate_whole_project_report(project, current_user, current_team) def self.generate_whole_project_report(project, current_user, current_team)
# report_contents = gen_element_content(project, Extends::EXPORT_ALL_PROJECT_ELEMENTS)
content = { content = {
'experiments' => [], 'experiments' => [],
'tasks' => {}, 'tasks' => {},
@ -114,40 +113,13 @@ class Report < ApplicationRecord
report = Report.new report = Report.new
report.name = loop do report.name = loop do
dummy_name = SecureRandom.hex(10) dummy_name = SecureRandom.hex(10)
break dummy_name unless Report.where(name: dummy_name).exists? break dummy_name unless Report.exists?(name: dummy_name)
end end
report.project = project report.project = project
report.user = current_user report.user = current_user
report.team = current_team report.team = current_team
report.last_modified_by = current_user report.last_modified_by = current_user
ReportActions::ReportContent.new(report, content, {}, current_user).save_with_content ReportActions::ReportContent.new(report, content, {}, current_user).save_with_content
# report.save_with_contents(report_contents)
report report
end end
def self.gen_element_content(parent, children)
elements = []
children.each do |element|
element_hash = lambda { |object|
hash_object = {
'type_of' => element[:type_of] || element[:type_of_lambda].call(object),
'id' => { element[:id_key] => object.id },
'sort_order' => element[:sort_order],
'children' => gen_element_content(object, element[:children] || [])
}
hash_object['id'][element[:parent_id_key]] = parent.id if element[:parent_id_key]
hash_object
}
if element[:relation]
(element[:relation].inject(parent) { |p, method| p.public_send(method) }).each do |child|
elements.push(element_hash.call(child))
end
else
elements.push(element_hash.call(parent))
end
end
elements
end
end end

View file

@ -26,6 +26,12 @@ class RepositorySnapshot < RepositoryBase
.order(:parent_id, updated_at: :desc) .order(:parent_id, updated_at: :desc)
} }
scope :assigned_to_project, lambda { |project|
where(team: project.team)
.joins(repository_rows: { my_module_repository_rows: { my_module: { experiment: :project } } })
.where(repository_rows: { my_module_repository_rows: { my_module: { experiments: { project: project } } } })
}
def self.create_preliminary(repository, my_module, created_by = nil) def self.create_preliminary(repository, my_module, created_by = nil)
created_by ||= repository.created_by created_by ||= repository.created_by
repository_snapshot = repository.dup.becomes(RepositorySnapshot) repository_snapshot = repository.dup.becomes(RepositorySnapshot)

View file

@ -49,8 +49,7 @@ class TeamZipExport < ZipExport
project_path = make_model_dir(team_path, p, idx) project_path = make_model_dir(team_path, p, idx)
project_name = project_path.split('/')[-1] project_name = project_path.split('/')[-1]
obj_filenames = { my_module_repository: {}, step_asset: {}, obj_filenames = { repositories: {}, assets: {}, tables: {} }
step_table: {}, result_asset: {}, result_table: {} }
# Change current dir for correct generation of relative links # Change current dir for correct generation of relative links
Dir.chdir(project_path) Dir.chdir(project_path)
@ -63,7 +62,9 @@ class TeamZipExport < ZipExport
# Iterate through every inventory repo and save it to CSV # Iterate through every inventory repo and save it to CSV
repositories.each_with_index do |repo, repo_idx| repositories.each_with_index do |repo, repo_idx|
obj_filenames[:my_module_repository][repo.id] = { next if obj_filenames[:repositories][repo.id].present?
obj_filenames[:repositories][repo.id] = {
file: save_inventories_to_csv(inventories, repo, repo_idx) file: save_inventories_to_csv(inventories, repo, repo_idx)
} }
end end
@ -88,16 +89,16 @@ class TeamZipExport < ZipExport
# Export protocols # Export protocols
steps = my_module.protocols.map(&:steps).flatten steps = my_module.protocols.map(&:steps).flatten
obj_filenames[:step_asset].merge!( obj_filenames[:assets].merge!(
export_assets(StepAsset.where(step: steps), :step, protocol_path) export_assets(StepAsset.where(step: steps), :step, protocol_path)
) )
obj_filenames[:step_table].merge!( obj_filenames[:tables].merge!(
export_tables(StepTable.where(step: steps), :step, protocol_path) export_tables(StepTable.where(step: steps), :step, protocol_path)
) )
# Export results # Export results
[false, true].each do |archived| [false, true].each do |archived|
obj_filenames[:result_asset].merge!( obj_filenames[:assets].merge!(
export_assets( export_assets(
ResultAsset.where(result: my_module.results.where(archived: archived)), ResultAsset.where(result: my_module.results.where(archived: archived)),
:result, :result,
@ -108,7 +109,7 @@ class TeamZipExport < ZipExport
end end
[false, true].each do |archived| [false, true].each do |archived|
obj_filenames[:result_table].merge!( obj_filenames[:tables].merge!(
export_tables( export_tables(
ResultTable.where(result: my_module.results.where(archived: archived)), ResultTable.where(result: my_module.results.where(archived: archived)),
:result, :result,

View file

@ -84,10 +84,6 @@ module ReportActions
my_module_element my_module_element
) )
end end
MY_MODULE_ADDONS_ELEMENTS.each do |e|
public_send("generate_#{e}_content", my_module, my_module_element)
end
end end
end end

View file

@ -1,6 +1,6 @@
<% timestamp = experiment.created_at %> <% timestamp = experiment.created_at %>
<% name = experiment.name %> <% name = experiment.name %>
<% for_export_all = defined?(export_all) && export_all %> <% export_all = defined?(export_all) && export_all %>
<div class="report-element report-experiment-element" <div class="report-element report-experiment-element"
data-ts="<%= timestamp.to_i %>" data-ts="<%= timestamp.to_i %>"
data-type="experiment" data-type="experiment"
@ -34,7 +34,7 @@
<div class="row"> <div class="row">
<div class="col-xs-12"> <div class="col-xs-12">
<% if experiment.description.present? %> <% if experiment.description.present? %>
<%= custom_auto_link(experiment.description, team: current_team, base64_encoded_imgs: for_export_all) %> <%= custom_auto_link(experiment.description, team: current_team, base64_encoded_imgs: export_all) %>
<% else %> <% else %>
<em><%=t "projects.reports.elements.experiment.no_description" %></em> <em><%=t "projects.reports.elements.experiment.no_description" %></em>
<% end %> <% end %>

View file

@ -1,7 +1,7 @@
<% if my_module.blank? and @my_module.present? then my_module = @my_module end %> <% if my_module.blank? and @my_module.present? then my_module = @my_module end %>
<% timestamp = my_module.created_at %> <% timestamp = my_module.created_at %>
<% name = my_module.name %> <% name = my_module.name %>
<% for_export_all = defined?(export_all) && export_all %> <% export_all = defined?(export_all) && export_all %>
<div class="report-element report-module-element" data-ts="<%= timestamp.to_i %>" data-type="my_module" data-id='{ "my_module_id": <%= my_module.id %> }' data-scroll-id="<%= my_module.id %>" data-modal-title="<%=t "projects.reports.elements.modals.module_contents.head_title", module: my_module.name %>" data-name="<%= name %>" data-icon-class="fas fa-credit-card"> <div class="report-element report-module-element" data-ts="<%= timestamp.to_i %>" data-type="my_module" data-id='{ "my_module_id": <%= my_module.id %> }' data-scroll-id="<%= my_module.id %>" data-modal-title="<%=t "projects.reports.elements.modals.module_contents.head_title", module: my_module.name %>" data-name="<%= name %>" data-icon-class="fas fa-credit-card">
<div class="report-element-header"> <div class="report-element-header">
<div class="row"> <div class="row">
@ -70,10 +70,10 @@
<div class="row"> <div class="row">
<div class="col-xs-12"> <div class="col-xs-12">
<% if my_module.description.present? %> <% if my_module.description.present? %>
<%= custom_auto_link(my_module.prepare_for_report(:description, for_export_all), <%= custom_auto_link(my_module.prepare_for_report(:description, export_all),
team: current_team, team: current_team,
simple_format: false, simple_format: false,
base64_encoded_imgs: for_export_all) %> base64_encoded_imgs: export_all) %>
<% else %> <% else %>
<em><%= t("projects.reports.elements.module.no_description") %></em> <em><%= t("projects.reports.elements.module.no_description") %></em>
<% end %> <% end %>
@ -86,16 +86,16 @@
<% end %> <% end %>
<% filter_steps_for_report(my_module.protocol.steps, @settings).order(:position).each do |step| %> <% filter_steps_for_report(my_module.protocol.steps, @settings).order(:position).each do |step| %>
<%= render partial: 'reports/elements/my_module_step_element.html.erb', locals: { step: step } %> <%= render partial: 'reports/elements/my_module_step_element.html.erb', locals: { step: step, export_all: export_all } %>
<% end %> <% end %>
<% order_results_for_report(my_module.results, @settings.dig('task', 'result_order')).each do |result| %> <% order_results_for_report(my_module.results, @settings.dig('task', 'result_order')).each do |result| %>
<% if result.is_asset && @settings.dig('task', 'file_results') %> <% if result.is_asset && @settings.dig('task', 'file_results') %>
<%= render partial: 'reports/elements/my_module_result_asset_element.html.erb', locals: { result: result, report: report } %> <%= render partial: 'reports/elements/my_module_result_asset_element.html.erb', locals: { result: result, report: report, export_all: export_all } %>
<% elsif result.is_table && @settings.dig('task', 'table_results') %> <% elsif result.is_table && @settings.dig('task', 'table_results') %>
<%= render partial: 'reports/elements/my_module_result_table_element.html.erb', locals: { result: result } %> <%= render partial: 'reports/elements/my_module_result_table_element.html.erb', locals: { result: result, export_all: export_all } %>
<% elsif result.is_text && @settings.dig('task', 'text_results') %> <% elsif result.is_text && @settings.dig('task', 'text_results') %>
<%= render partial: 'reports/elements/my_module_result_text_element.html.erb', locals: { result: result } %> <%= render partial: 'reports/elements/my_module_result_text_element.html.erb', locals: { result: result, export_all: export_all } %>
<% end %> <% end %>
<% end %> <% end %>
</div> </div>
@ -108,7 +108,7 @@
<% if @settings.dig('task', 'activities') %> <% if @settings.dig('task', 'activities') %>
<div class="report-element-children"> <div class="report-element-children">
<%= render partial: 'reports/elements/my_module_activity_element.html.erb', locals: { my_module: my_module } %> <%= render partial: 'reports/elements/my_module_activity_element.html.erb', locals: { my_module: my_module, export_all: export_all } %>
</div> </div>
<% end %> <% end %>
</div> </div>

View file

@ -1,6 +1,6 @@
<% protocol ||= my_module.protocol %> <% protocol ||= my_module.protocol %>
<% my_module = protocol.my_module %> <% my_module = protocol.my_module %>
<% for_export_all = defined?(export_all) && export_all %> <% export_all = defined?(export_all) && export_all %>
<div class="report-element report-module-protocol-element" data-ts="<%= protocol.created_at %>" data-type="my_module_protocol" data-id='{ "my_module_id": <%= my_module.id %> }' data-scroll-id="<%= protocol.id %>"> <div class="report-element report-module-protocol-element" data-ts="<%= protocol.created_at %>" data-type="my_module_protocol" data-id='{ "my_module_id": <%= my_module.id %> }' data-scroll-id="<%= protocol.id %>">
<div class="report-element-header"> <div class="report-element-header">
<div class="row"> <div class="row">
@ -15,10 +15,10 @@
<div class="report-element-body"> <div class="report-element-body">
<div class="row module-protocol-description"> <div class="row module-protocol-description">
<% if protocol.description.present? %> <% if protocol.description.present? %>
<%= custom_auto_link(protocol.prepare_for_report(:description, for_export_all), <%= custom_auto_link(protocol.prepare_for_report(:description, export_all),
team: current_team, team: current_team,
simple_format: false, simple_format: false,
base64_encoded_imgs: for_export_all) %> base64_encoded_imgs: export_all) %>
<% else %> <% else %>
<em><%= t('my_modules.protocols.protocol_status_bar.no_description') %></em> <em><%= t('my_modules.protocols.protocol_status_bar.no_description') %></em>
<% end %> <% end %>

View file

@ -1,8 +1,7 @@
<% my_module ||= @my_module %> <% my_module ||= @my_module %>
<% repository ||= nil %>
<% element_id ||= repository&.id %> <% element_id ||= repository&.id %>
<% repository_snapshot ||= nil %> <% repository_snapshot ||= nil %>
<% repository = assigned_repository_or_snapshot(my_module, element_id, repository, repository_snapshot) %> <% repository ||= assigned_repository_or_snapshot(my_module, element_id, repository, repository_snapshot) %>
<% timestamp = Time.current + 1.year - 1.days %> <% timestamp = Time.current + 1.year - 1.days %>
<% rows_json = my_module.repository_json_hot(repository, :desc) %> <% rows_json = my_module.repository_json_hot(repository, :desc) %>
<div class="report-element report-module-repository-element" <div class="report-element report-module-repository-element"
@ -24,8 +23,10 @@
</div> </div>
<% if defined?(export_all) && export_all %> <% if defined?(export_all) && export_all %>
<div class="pull-left table-name"> <div class="pull-left table-name">
<a href="<%= path[:file] %>"> <% file_link = @obj_filenames.dig(:repositories, repository.id, :file) %>
<em><%= t('projects.reports.elements.module_repository.table_name', name: filename) %></em> <% byebug if file_link.nil? %>
<a href="<%= file_link %>">
<em><%= t('projects.reports.elements.module_repository.table_name', name: file_link&.split('/').last) %></em>
</a> </a>
</div> </div>
<% end %> <% end %>

View file

@ -24,8 +24,9 @@
</div> </div>
<div class="pull-left file-name"> <div class="pull-left file-name">
<% if defined? export_all and export_all %> <% if defined? export_all and export_all %>
<a href="<%= path[:file] %>"> <% file_link = @obj_filenames.dig(:assets, asset.id, :file) %>
<em><%= t("projects.reports.elements.result_asset.file_name", file: filename) %></em> <a href="<%= file_link %>">
<em><%= t("projects.reports.elements.result_asset.file_name", file: file_link&.split('/').last) %></em>
</a> </a>
<% else %> <% else %>
<em> <em>
@ -52,7 +53,7 @@
<div class="row"> <div class="row">
<div class="col-xs-12 file-image"> <div class="col-xs-12 file-image">
<% if defined?(export_all) && export_all %> <% if defined?(export_all) && export_all %>
<img class="report-export-img" src="<%= path[:preview] %>"> <img class="report-export-img" src="<%= @obj_filenames.dig(:assets, asset.id, :preview) %>">
<% else %> <% else %>
<%= report_image_asset_url(asset) %> <%= report_image_asset_url(asset) %>
<% end %> <% end %>

View file

@ -17,10 +17,9 @@
</div> </div>
<% if defined? export_all and export_all %> <% if defined? export_all and export_all %>
<div class="pull-left table-name"> <div class="pull-left table-name">
<a href="<%= path[:file] %>"> <% file_link = @obj_filenames.dig(:tables, table.id, :file) %>
<em><%=t "projects.reports.elements.result_table.table_name", <a href="<%= file_link %>">
name: filename %></em> <em><%=t "projects.reports.elements.result_table.table_name", name: file_link&.split('/').last %></em>
</a> </a>
</div> </div>
<% end %> <% end %>

View file

@ -3,7 +3,7 @@
<% comments = result.result_comments %> <% comments = result.result_comments %>
<% timestamp = result.created_at %> <% timestamp = result.created_at %>
<% name = result.name %> <% name = result.name %>
<% for_export_all = defined?(export_all) && export_all %> <% export_all = defined?(export_all) && export_all %>
<div class="report-element report-result-element report-result-text-element" data-ts="<%= timestamp.to_i %>" data-type="result_text" data-id='{ "result_id": <%= result.id %> }' data-scroll-id="<%= result.id %>" data-modal-title="<%=t "projects.reports.elements.modals.result_contents.head_title", result: result.name %>" data-name="<%= name %>" data-icon-class="fas fa-asterisk"> <div class="report-element report-result-element report-result-text-element" data-ts="<%= timestamp.to_i %>" data-type="result_text" data-id='{ "result_id": <%= result.id %> }' data-scroll-id="<%= result.id %>" data-modal-title="<%=t "projects.reports.elements.modals.result_contents.head_title", result: result.name %>" data-name="<%= name %>" data-icon-class="fas fa-asterisk">
<div class="report-element-header"> <div class="report-element-header">
<div class="row"> <div class="row">
@ -27,11 +27,11 @@
<div class="report-element-body"> <div class="report-element-body">
<div class="row"> <div class="row">
<div class="col-xs-12 text-container ql-editor"> <div class="col-xs-12 text-container ql-editor">
<%= custom_auto_link(result_text.prepare_for_report(:text, for_export_all), <%= custom_auto_link(result_text.prepare_for_report(:text, export_all),
team: current_team, team: current_team,
simple_format: false, simple_format: false,
tags: %w(img), tags: %w(img),
base64_encoded_imgs: for_export_all) %> base64_encoded_imgs: export_all) %>
</div> </div>
</div> </div>
</div> </div>

View file

@ -5,7 +5,7 @@
<% tables = step.tables %> <% tables = step.tables %>
<% assets = step.assets %> <% assets = step.assets %>
<% checklists = step.checklists %> <% checklists = step.checklists %>
<% for_export_all = defined?(export_all) && export_all %> <% export_all = defined?(export_all) && export_all %>
<div class="report-element report-step-element" <div class="report-element report-step-element"
data-ts="<%= timestamp.to_i %>" data-ts="<%= timestamp.to_i %>"
data-type="step" data-type="step"
@ -37,11 +37,11 @@
<div class="row"> <div class="row">
<div class="col-xs-12 ql-editor"> <div class="col-xs-12 ql-editor">
<% if step.description.present? %> <% if step.description.present? %>
<%= custom_auto_link(step.prepare_for_report(:description, for_export_all), <%= custom_auto_link(step.prepare_for_report(:description, export_all),
team: current_team, team: current_team,
simple_format: false, simple_format: false,
tags: %w(img), tags: %w(img),
base64_encoded_imgs: for_export_all) %> base64_encoded_imgs: export_all) %>
<% else %> <% else %>
<em><%=t "projects.reports.elements.step.no_description" %></em> <em><%=t "projects.reports.elements.step.no_description" %></em>
<% end %> <% end %>
@ -51,21 +51,21 @@
<div class="report-element-children"> <div class="report-element-children">
<% if @settings.dig('task', 'protocol', 'step_tables') %> <% if @settings.dig('task', 'protocol', 'step_tables') %>
<% tables.each do |table| %> <% tables.each do |table| %>
<%= render partial: 'reports/elements/step_table_element.html.erb', locals: { table: table } %> <%= render partial: 'reports/elements/step_table_element.html.erb', locals: { table: table, export_all: export_all } %>
<% end %> <% end %>
<% end %> <% end %>
<% if @settings.dig('task', 'protocol', 'step_files') %> <% if @settings.dig('task', 'protocol', 'step_files') %>
<% assets.each do |asset| %> <% assets.each do |asset| %>
<%= render partial: 'reports/elements/step_asset_element.html.erb', locals: { asset: asset } %> <%= render partial: 'reports/elements/step_asset_element.html.erb', locals: { asset: asset, export_all: export_all } %>
<% end %> <% end %>
<% end %> <% end %>
<% if @settings.dig('task', 'protocol', 'step_checklists') %> <% if @settings.dig('task', 'protocol', 'step_checklists') %>
<% checklists.each do |checklist| %> <% checklists.each do |checklist| %>
<%= render partial: 'reports/elements/step_checklist_element.html.erb', locals: { checklist: checklist } %> <%= render partial: 'reports/elements/step_checklist_element.html.erb', locals: { checklist: checklist, export_all: export_all } %>
<% end %> <% end %>
<% end %> <% end %>
<% if @settings.dig('task', 'protocol', 'step_comments') %> <% if @settings.dig('task', 'protocol', 'step_comments') %>
<%= render partial: 'reports/elements/step_comments_element.html.erb', locals: { step: step } %> <%= render partial: 'reports/elements/step_comments_element.html.erb', locals: { step: step, export_all: export_all } %>
<% end %> <% end %>
</div> </div>
<% if defined?(children) %> <% if defined?(children) %>

View file

@ -1,7 +1,7 @@
<% result ||= @result %> <% result ||= @result %>
<% comments = result.result_comments.order(created_at: :desc) %> <% comments = result.result_comments.order(created_at: :desc) %>
<% timestamp = Time.current + 1.year %> <% timestamp = Time.current + 1.year %>
<% for_export_all = defined?(export_all) && export_all %> <% export_all = defined?(export_all) && export_all %>
<div class="report-element report-comments-element report-result-comments-element" data-ts="<%= timestamp.to_i %>" data-type="result_comments" data-id='{ "result_id": <%= result.id %> }' data-scroll-id="<%= result.id %>" data-name="<%=t "projects.reports.elements.result_comments.sidebar_name" %>" data-icon-class="fas fa-comment"> <div class="report-element report-comments-element report-result-comments-element" data-ts="<%= timestamp.to_i %>" data-type="result_comments" data-id='{ "result_id": <%= result.id %> }' data-scroll-id="<%= result.id %>" data-name="<%=t "projects.reports.elements.result_comments.sidebar_name" %>" data-icon-class="fas fa-comment">
<div class="report-element-header"> <div class="report-element-header">
<div class="row"> <div class="row">
@ -23,7 +23,7 @@
<ul class="no-style content-comments"> <ul class="no-style content-comments">
<% comments.each do |comment| %> <% comments.each do |comment| %>
<%= render partial: 'shared/comments/item.html.erb', <%= render partial: 'shared/comments/item.html.erb',
locals: { comment: comment, readonly: true, report: true, export_all: for_export_all } %> locals: { comment: comment, readonly: true, report: true, export_all: export_all } %>
<% end %> <% end %>
</ul> </ul>
<% else %> <% else %>

View file

@ -9,8 +9,9 @@
</div> </div>
<div class="pull-left file-name"> <div class="pull-left file-name">
<% if defined? export_all and export_all %> <% if defined? export_all and export_all %>
<a href="<%= path[:file] %>"> <% file_link = @obj_filenames.dig(:assets, asset.id, :file) %>
<em><%= t('projects.reports.elements.step_asset.file_name', file: filename) %></em> <a href="<%= file_link %>">
<em><%= t('projects.reports.elements.step_asset.file_name', file: file_link&.split('/').last) %></em>
</a> </a>
<% else %> <% else %>
<em> <em>
@ -18,7 +19,6 @@
file: truncate(asset.file_name, length: Constants::FILENAME_TRUNCATION_LENGTH)) %> file: truncate(asset.file_name, length: Constants::FILENAME_TRUNCATION_LENGTH)) %>
<%= link_to t('projects.reports.elements.download'), asset_download_url(asset, disposition: 'attachment'), class: 'download-link', target: :_blank %> <%= link_to t('projects.reports.elements.download'), asset_download_url(asset, disposition: 'attachment'), class: 'download-link', target: :_blank %>
</em> </em>
<% end %> <% end %>
</div> </div>
<div class="pull-left user-time"> <div class="pull-left user-time">
@ -34,7 +34,7 @@
<div class="row"> <div class="row">
<div class="col-xs-12 file-image"> <div class="col-xs-12 file-image">
<% if defined?(export_all) && export_all %> <% if defined?(export_all) && export_all %>
<img class="report-export-img" src="<%= path[:preview] %>"> <img class="report-export-img" src="<%= @obj_filenames.dig(:assets, asset.id, :preview) %>">
<% else %> <% else %>
<%= report_image_asset_url(asset) %> <%= report_image_asset_url(asset) %>
<% end %> <% end %>

View file

@ -1,7 +1,7 @@
<% if checklist.blank? and @checklist.present? then checklist = @checklist end %> <% if checklist.blank? and @checklist.present? then checklist = @checklist end %>
<% items = checklist.checklist_items %> <% items = checklist.checklist_items %>
<% timestamp = checklist.created_at %> <% timestamp = checklist.created_at %>
<% for_export_all = defined?(export_all) && export_all %> <% export_all = defined?(export_all) && export_all %>
<div class="report-element report-step-attachment-element report-step-checklist-element" data-ts="<%= timestamp.to_i %>" data-type="step_checklist" data-id='{ "checklist_id": <%= checklist.id %> }' data-scroll-id="<%= checklist.id %>" data-name="<%= checklist.name %>" data-icon-class="fas fa-tasks"> <div class="report-element report-step-attachment-element report-step-checklist-element" data-ts="<%= timestamp.to_i %>" data-type="step_checklist" data-id='{ "checklist_id": <%= checklist.id %> }' data-scroll-id="<%= checklist.id %>" data-name="<%= checklist.name %>" data-icon-class="fas fa-tasks">
<div class="report-element-header"> <div class="report-element-header">
<div class="row"> <div class="row">
@ -12,7 +12,7 @@
<%= custom_auto_link(t('projects.reports.elements.step_checklist.checklist_name', <%= custom_auto_link(t('projects.reports.elements.step_checklist.checklist_name',
name: checklist.name), name: checklist.name),
team: current_team, team: current_team,
base64_encoded_imgs: for_export_all) %> base64_encoded_imgs: export_all) %>
</div> </div>
<div class="pull-left user-time"> <div class="pull-left user-time">
<%=t 'projects.reports.elements.step_checklist.user_time', timestamp: l(timestamp, format: :full) %> <%=t 'projects.reports.elements.step_checklist.user_time', timestamp: l(timestamp, format: :full) %>
@ -32,7 +32,7 @@
team: current_team, team: current_team,
simple_format: true, simple_format: true,
wrapper_tag: { wrapper_tag: 'span'}, wrapper_tag: { wrapper_tag: 'span'},
base64_encoded_imgs: for_export_all) %> base64_encoded_imgs: export_all) %>
</span> </span>
</li> </li>
<% end %> <% end %>

View file

@ -1,7 +1,7 @@
<% if step.blank? and @step.present? then step = @step end %> <% if step.blank? and @step.present? then step = @step end %>
<% comments = step.step_comments.order(created_at: :desc) %> <% comments = step.step_comments.order(created_at: :desc) %>
<% timestamp = Time.current + 1.year %> <% timestamp = Time.current + 1.year %>
<% for_export_all = defined?(export_all) && export_all %> <% export_all = defined?(export_all) && export_all %>
<div class="report-element report-comments-element report-step-comments-element" data-ts="<%= timestamp.to_i %>" data-order="asc" data-type="step_comments" data-id='{ "step_id": <%= step.id %> }' data-scroll-id="<%= step.id %>" data-name="<%=t "projects.reports.elements.step_comments.sidebar_name" %>" data-icon-class="fas fa-comment"> <div class="report-element report-comments-element report-step-comments-element" data-ts="<%= timestamp.to_i %>" data-order="asc" data-type="step_comments" data-id='{ "step_id": <%= step.id %> }' data-scroll-id="<%= step.id %>" data-name="<%=t "projects.reports.elements.step_comments.sidebar_name" %>" data-icon-class="fas fa-comment">
<div class="report-element-header"> <div class="report-element-header">
<div class="row"> <div class="row">
@ -23,7 +23,7 @@
<ul class="no-style content-comments"> <ul class="no-style content-comments">
<% comments.each do |comment| %> <% comments.each do |comment| %>
<%= render partial: 'shared/comments/item.html.erb', <%= render partial: 'shared/comments/item.html.erb',
locals: { comment: comment, readonly: true, report: true, export_all: for_export_all } %> locals: { comment: comment, readonly: true, report: true, export_all: export_all } %>
<% end %> <% end %>
</ul> </ul>
<% else %> <% else %>

View file

@ -8,9 +8,9 @@
</div> </div>
<div class="pull-left table-name"> <div class="pull-left table-name">
<% if defined? export_all and export_all %> <% if defined? export_all and export_all %>
<a href="<%= path[:file] %>"> <% file_link = @obj_filenames.dig(:tables, table.id, :file) %>
<em><%=t 'projects.reports.elements.step_table.table_name', <a href="<%= file_link %>">
name: filename %></em> <em><%=t 'projects.reports.elements.step_table.table_name', name: file_link&.split('/').last %></em>
</a> </a>
<% else %> <% else %>
<% if table.try(:name) %> <% if table.try(:name) %>

View file

@ -0,0 +1,21 @@
<div class="content-pane" id="report-new">
<div class="report-container">
<!-- Report "preview" -->
<div id="report-content">
<% report.root_elements.each do |el| %>
<%= render_report_element(el, local_assigns) %>
<%= render_new_element(false) %>
<% end %>
</div>
</div>
</div>
<%= javascript_include_tag "handsontable.full" %>
<!-- Libraries for formulas -->
<%= render partial: "shared/formulas_libraries.html.erb" %>
<%= javascript_include_tag("reports/new") %>
<%= javascript_include_tag 'reports/save_pdf_to_inventory' %>

View file

@ -1,90 +0,0 @@
<% content_for :head do %>
<meta name="turbolinks-cache-control" content="no-cache">
<meta name="turbolinks-visit-control" content="reload">
<% end %>
<% @settings = @report.settings %>
<% provide(:head_title, t("projects.reports.new.head_title", project: h(@project.name)).html_safe) %>
<%= render partial: "reports/new/report_navigation" %>
<div class="content-pane" id="report-new">
<div class="report-container">
<div
id="data-holder"
class="hidden"
data-project-modal-title="<%=t "projects.reports.elements.modals.project_contents.head_title" %>"
data-add-project-contents-url="<%= project_contents_modal_project_reports_url(@project) %>"
data-add-experiment-contents-url="<%= experiment_contents_modal_project_reports_url(@project) %>"
data-add-module-contents-url="<%= module_contents_modal_project_reports_url(@project) %>"
data-add-step-contents-url="<%= step_contents_modal_project_reports_url(@project) %>"
data-add-result-contents-url="<%= result_contents_modal_project_reports_url(@project) %>"
data-stylesheet-url="<%= stylesheet_path "application" %>"
data-print-title="<%=t "projects.reports.print_title", project: @project.name %>"
data-project-id="<%= @project.id %>"
data-save-report-url="<%= save_modal_project_reports_url(@project) %>"
data-report-id="<%= @report.present? ? @report.id : "" %>"
data-unsaved-work-text="<%=t "projects.reports.new.unsaved_work" %>"
data-global-sort-text="<%=t "projects.reports.new.global_sort" %>"></div>
<!-- Report "preview" -->
<div id="report-content">
<% if @report.present? %>
<% @report.root_elements.each do |el| %>
<%= render_report_element(el, local_assigns) %>
<%= render_new_element(false) %>
<% end %>
<% else %>
<%= render partial: "reports/elements/project_header_element", locals: { project: @project } %>
<%= render partial: "reports/elements/new_element", locals: { initial: true } %>
<% end %>
</div>
<!-- Add elements modal -->
<div class="modal" id="add-contents-modal" tabindex="-1" role="dialog" aria-labelledby="add-contents-modal-label">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="add-contents-modal-label"></h4>
</div>
<div class="modal-body"></div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal"><%=t "general.cancel" %></button>
<button type="button" data-action="add" class="btn btn-primary"><%=t "projects.reports.elements.modals.add" %></button>
</div>
</div>
</div>
</div>
<!-- Save report modal -->
<div class="modal" id="save-report-modal" tabindex="-1" role="dialog" aria-labelledby="save-report-modal-label">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="save-report-modal-label"><%=t "projects.reports.elements.modals.save_report.head_title" %></h4>
</div>
<div class="modal-body"></div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal"><%=t "general.cancel" %></button>
<button type="button" data-action="save" class="btn btn-primary"><%=t "projects.reports.elements.modals.save_report.save" %></button>
</div>
</div>
</div>
</div>
</div>
</div>
<%= javascript_include_tag "handsontable.full" %>
<!-- Libraries for formulas -->
<%= render partial: "shared/formulas_libraries.html.erb" %>
<%= javascript_include_tag("reports/new") %>
<%= javascript_include_tag 'reports/save_pdf_to_inventory' %>

View file

@ -42,84 +42,6 @@ class Extends
my_module_repository: 17, my_module_repository: 17,
my_module_protocol: 18 } my_module_protocol: 18 }
EXPORT_ALL_PROJECT_ELEMENTS = [
{
type_of: 'project_header',
id_key: 'project_id'
},
{
type_of: 'experiment',
id_key: 'experiment_id',
relation: %w(experiments),
children: [
{
type_of: 'my_module',
id_key: 'my_module_id',
relation: %w(my_modules),
children: [
{
type_of: 'my_module_protocol',
id_key: 'my_module_id'
},
{
type_of: 'step',
relation: %w(protocol steps),
id_key: 'step_id',
children: [
{
type_of: 'step_asset',
relation: %w(assets),
id_key: 'asset_id'
},
{
type_of: 'step_table',
relation: %w(tables),
id_key: 'table_id'
},
{
type_of: 'step_checklist',
relation: %w(checklists),
id_key: 'checklist_id'
},
{
type_of: 'step_comments',
id_key: 'step_id',
sort_order: 'asc'
}
]
},
{
type_of_lambda: lambda { |result|
(result.result_asset ||
result.result_table ||
result.result_text).class.to_s.underscore
},
relation: %w(results),
id_key: 'result_id',
children: [{
type_of: 'result_comments',
id_key: 'result_id',
sort_order: 'asc'
}]
},
{
type_of: 'my_module_activity',
id_key: 'my_module_id',
sort_order: 'asc'
},
{
type_of: 'my_module_repository',
relation: %w(experiment project assigned_repositories_and_snapshots),
id_key: 'repository_id',
parent_id_key: 'my_module_id',
sort_order: 'asc'
}
]
}
]
}
]
# Data type name should match corresponding model's name # Data type name should match corresponding model's name
REPOSITORY_DATA_TYPES = { RepositoryTextValue: 0, REPOSITORY_DATA_TYPES = { RepositoryTextValue: 0,
RepositoryDateValue: 1, RepositoryDateValue: 1,