Commit 9be4948e authored by James Edwards-Jones's avatar James Edwards-Jones

Issues CSV exported and emailed by Sidekiq worker

parent e8cf6b07
...@@ -27,13 +27,11 @@ class Projects::IssuesController < Projects::ApplicationController ...@@ -27,13 +27,11 @@ class Projects::IssuesController < Projects::ApplicationController
@issues = issues_collection @issues = issues_collection
@issues_count = @issues.count @issues_count = @issues.count
if !request.format.csv? @issues = @issues.page(params[:page])
@issues = @issues.page(params[:page]) @issuable_meta_data = issuable_meta_data(@issues)
@issuable_meta_data = issuable_meta_data(@issues)
if @issues.out_of_range? && @issues.total_pages != 0 if @issues.out_of_range? && @issues.total_pages != 0
return redirect_to url_for(params.merge(page: @issues.total_pages)) return redirect_to url_for(params.merge(page: @issues.total_pages))
end
end end
if params[:label_name].present? if params[:label_name].present?
...@@ -55,9 +53,6 @@ class Projects::IssuesController < Projects::ApplicationController ...@@ -55,9 +53,6 @@ class Projects::IssuesController < Projects::ApplicationController
respond_to do |format| respond_to do |format|
format.html format.html
format.atom { render layout: false } format.atom { render layout: false }
format.csv do
render text: Issues::ExportCsvService.new(@issues).render
end
format.json do format.json do
render json: { render json: {
html: view_to_html_string("projects/issues/_issues"), html: view_to_html_string("projects/issues/_issues"),
...@@ -152,6 +147,13 @@ class Projects::IssuesController < Projects::ApplicationController ...@@ -152,6 +147,13 @@ class Projects::IssuesController < Projects::ApplicationController
render :edit render :edit
end end
def export_csv
ExportCsvWorker.perform_async(@current_user.id, @project.id, filter_params)
index_path = namespace_project_issues_path(@project.namespace, @project)
redirect_to(index_path, notice: "CSV export queued")
end
def referenced_merge_requests def referenced_merge_requests
@merge_requests = @issue.referenced_merge_requests(current_user) @merge_requests = @issue.referenced_merge_requests(current_user)
@closed_by_merge_requests = @issue.closed_by_merge_requests(current_user) @closed_by_merge_requests = @issue.closed_by_merge_requests(current_user)
......
...@@ -9,6 +9,11 @@ module Issues ...@@ -9,6 +9,11 @@ module Issues
csv_builder.render csv_builder.render
end end
def email(user, project)
content = render
Notify.issues_csv_email(user, project, content, @issues.count).deliver_now
end
private private
def csv_builder def csv_builder
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
After we finish preparing your .csv export, we'll email it to After we finish preparing your .csv export, we'll email it to
%strong= @current_user.email %strong= @current_user.email
.modal-footer .modal-footer
= link_to 'Request export', namespace_project_issues_path(@project.namespace, @project, params.permit(IssuableFinder::VALID_PARAMS).merge(format: :csv)), class: "btn btn-success pull-left", title: "Request export" = link_to 'Request export', export_csv_namespace_project_issues_path(@project.namespace, @project, params.permit(IssuableFinder::VALID_PARAMS)), method: :post, class: "btn btn-success pull-left", title: "Request export"
:javascript :javascript
$(function(){ $(function(){
......
class ExportCsvWorker
include Sidekiq::Worker
include DedicatedSidekiqQueue
def perform(current_user_id, project_id, params)
@current_user = User.find(current_user_id)
@project = Project.find(project_id)
params.merge!(project_id: project_id)
issues = IssuesFinder.new(@current_user, params).execute
Issues::ExportCsvService.new(issues.limit(100)).email(@current_user, @project)
end
end
...@@ -281,7 +281,8 @@ constraints(ProjectUrlConstrainer.new) do ...@@ -281,7 +281,8 @@ constraints(ProjectUrlConstrainer.new) do
get :can_create_branch get :can_create_branch
end end
collection do collection do
post :bulk_update post :bulk_update
post :export_csv
end end
end end
......
...@@ -59,3 +59,4 @@ ...@@ -59,3 +59,4 @@
- [admin_emails, 1] - [admin_emails, 1]
- [geo_repository_update, 1] - [geo_repository_update, 1]
- [elastic_batch_project_indexer, 1] - [elastic_batch_project_indexer, 1]
- [export_csv, 1]
require 'spec_helper'
describe Issues::ExportCsvService, services: true do
let(:project) { create(:project) }
let!(:issues) { create_list(:issue, 2, project: project) }
let(:subject) { described_class.new(Issue.all) }
it 'renders csv to string' do
expect(subject.render).to be_a String
end
describe '#email' do
let(:user) { double(notification_email: 'notification@example.com') }
it 'emails csv' do
expect{ subject.email(user, project) }.to change(ActionMailer::Base.deliveries, :count)
end
end
it 'renders csv to temporary file'
it 'includes relevent details (move from feature spec)'
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment