diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb index 956e0d922..de1624f4c 100644 --- a/app/controllers/reports_controller.rb +++ b/app/controllers/reports_controller.rb @@ -181,27 +181,25 @@ class ReportsController < ApplicationController end def save_pdf_to_inventory_item - report_service = ReportActions::SavePdfToInventoryItem.new( + save_pdf_to_inventory_item = ReportActions::SavePdfToInventoryItem.new( current_user, current_team, save_PDF_params ) - report_service.call - cell_value = report_service.cell_value - if cell_value.save + if save_pdf_to_inventory_item.save render json: { message: I18n.t( 'projects.reports.new.save_PDF_to_inventory_modal.success_flash' ) }, status: :ok else - render json: { message: cell_value.errors.full_messages.join }, + render json: { message: save_pdf_to_inventory_item.error_messages }, status: :unprocessable_entity end rescue ReportActions::RepositoryPermissionError => error render json: { message: error }, - status: :unprocessable_entity + status: :forbidden rescue Exception => error render json: { message: error.message }, - status: :unprocessable_entity + status: :internal_server_error end # Modal for saving the existsing/new report diff --git a/app/services/report_actions/save_pdf_to_inventory_item.rb b/app/services/report_actions/save_pdf_to_inventory_item.rb index b7246e24a..c27ddf2bc 100644 --- a/app/services/report_actions/save_pdf_to_inventory_item.rb +++ b/app/services/report_actions/save_pdf_to_inventory_item.rb @@ -3,8 +3,6 @@ module ReportActions class SavePdfToInventoryItem - attr_reader :cell_value - def initialize(user, team, params) @user = user @team = team @@ -12,12 +10,18 @@ module ReportActions load_repository_collaborators end - def call - file = generate_pdf(@params[:html]) - asset = create_new_asset(file) - cell = fetch_repository_cell + def save + file_path = generate_pdf(@params[:html]) + asset = create_new_asset(file_path) + cell = fetch_repository_cell cell.destroy if cell - @cell_value = create_new_cell_value(asset) + @new_cell_value = create_new_cell_value(asset) + @new_cell_value.save + end + + def error_messages + return I18n.t('general.error') unless @new_cell_value + @new_cell_value.errors.full_messages.join end private @@ -25,13 +29,9 @@ module ReportActions include Canaid::Helpers::PermissionsHelper def load_repository_collaborators - @repository = Repository.find_by_id(@params[:repository_id]) - @repository_column = RepositoryColumn.find_by_id( - @params[:respository_column_id] - ) - @repository_item = RepositoryRow.find_by_id( - @params[:repository_item_id] - ) + @repository = load_repository + @repository_column = load_repository_column + @repository_item = load_repository_item unless can_create_repository_rows?(@user, @repository.team) raise ReportActions::RepositoryPermissionError, I18n.t('projects.reports.new.no_permissions') @@ -39,27 +39,24 @@ module ReportActions end def generate_pdf(content) - ac = ActionView::Base.new(ActionController::Base.view_paths, {}) - ac.extend ReportsHelper # include reports helper methods to view - ac.extend InputSanitizeHelper # include input sanitize methods to view - no_content_label = I18n.t('projects.reports.new.no_content_for_PDF_html') - save_path = Tempfile.open(['report', '.pdf'], Rails.root.join('tmp')) - content = no_content_label if content.blank? - pdf_file = WickedPdf.new.pdf_from_string( - ac.render(template: 'reports/report.pdf.erb', - locals: { content: content }), + file_path = create_temporary_file + pdf_file = WickedPdf.new.pdf_from_string( + action_view_context.render( + template: 'reports/report.pdf.erb', + locals: { content: prepare_pdf_content(content) } + ), header: { right: '[page] of [topage]' }, disable_javascript: true ) - File.open(save_path, 'wb') do |file| + File.open(file_path, 'wb') do |file| file << pdf_file end - save_path + file_path end - def create_new_asset(file) + def create_new_asset(file_path) asset = Asset.new( - file: file, created_by: @user, last_modified_by: @user, team: @team + file: file_path, created_by: @user, last_modified_by: @user, team: @team ) asset.post_process_file(@team) if asset.save asset @@ -82,6 +79,34 @@ module ReportActions } ) end + + def load_repository + Repository.find_by_id(@params[:repository_id]) + end + + def load_repository_column + RepositoryColumn.find_by_id(@params[:respository_column_id]) + end + + def load_repository_item + RepositoryRow.find_by_id(@params[:repository_item_id]) + end + + def action_view_context + av = ActionView::Base.new(ActionController::Base.view_paths, {}) + av.extend ReportsHelper # include reports helper methods to view + av.extend InputSanitizeHelper # include input sanitize methods to view + av + end + + def create_temporary_file + Tempfile.open(['report', '.pdf'], Rails.root.join('tmp')) + end + + def prepare_pdf_content(content) + return content unless content.blank? + I18n.t('projects.reports.new.no_content_for_PDF_html') + end end RepositoryPermissionError = Class.new(StandardError) diff --git a/app/views/reports/new/_save_PDF_to_inventory_modal.html.erb b/app/views/reports/new/_save_PDF_to_inventory_modal.html.erb index f93a45d43..4a58ba018 100644 --- a/app/views/reports/new/_save_PDF_to_inventory_modal.html.erb +++ b/app/views/reports/new/_save_PDF_to_inventory_modal.html.erb @@ -18,10 +18,6 @@ id="selectInventory" class="form-control selectpicker" data-live-search="true"> - - <% @available_repositories.each do |repository| %> - - <% end %>