diff --git a/app/controllers/spree/admin/reports/enterprise_fee_summaries_controller.rb b/app/controllers/spree/admin/reports/enterprise_fee_summaries_controller.rb
index 1f42a2b85e..7548c962b5 100644
--- a/app/controllers/spree/admin/reports/enterprise_fee_summaries_controller.rb
+++ b/app/controllers/spree/admin/reports/enterprise_fee_summaries_controller.rb
@@ -10,14 +10,15 @@ module Spree
module Admin
module Reports
class EnterpriseFeeSummariesController < BaseController
- before_filter :load_report_parameters, only: [:index]
- before_filter :load_permissions, only: [:index]
- before_filter :load_authorizer, only: [:index]
+ before_filter :load_report_parameters
+ before_filter :load_permissions
- def index
- return render_report_form if params[:report].blank?
+ def new; end
+
+ def create
return respond_to_invalid_parameters unless @report_parameters.valid?
+ @authorizer = report_klass::Authorizer.new(@report_parameters, @permissions)
@authorizer.authorize!
@report = report_klass::ReportService.new(@permissions, @report_parameters,
report_renderer_klass)
@@ -39,7 +40,7 @@ module Spree
end
def render_report_form
- render action: :index
+ render action: :new
end
def report_klass
@@ -54,10 +55,6 @@ module Spree
@permissions = report_klass::Permissions.new(spree_current_user)
end
- def load_authorizer
- @authorizer = report_klass::Authorizer.new(@report_parameters, @permissions)
- end
-
def render_report
return render_html_report unless @report.renderer.independent_file?
send_data(@report.render, filename: @report.filename)
diff --git a/app/controllers/spree/admin/reports_controller_decorator.rb b/app/controllers/spree/admin/reports_controller_decorator.rb
index bfc5e458c1..ef9d906a74 100644
--- a/app/controllers/spree/admin/reports_controller_decorator.rb
+++ b/app/controllers/spree/admin/reports_controller_decorator.rb
@@ -270,7 +270,13 @@ Spree::Admin::ReportsController.class_eval do
locals: { report_types: report_types[report] }
).html_safe
end
- { name: name, description: description }
+ { name: name, url: url_for_report(report), description: description }
+ end
+
+ def url_for_report(report)
+ public_send("#{report}_admin_reports_url".to_sym)
+ rescue NoMethodError
+ url_for([:new, :admin, :reports, report.to_s.singularize])
end
def timestamp
diff --git a/app/models/spree/ability_decorator.rb b/app/models/spree/ability_decorator.rb
index 2e7f7d5343..6a68ae1476 100644
--- a/app/models/spree/ability_decorator.rb
+++ b/app/models/spree/ability_decorator.rb
@@ -187,7 +187,7 @@ class AbilityDecorator
can [:admin, :index, :customers, :orders_and_distributors, :group_buys, :bulk_coop, :payments,
:orders_and_fulfillment, :products_and_inventory, :order_cycle_management, :packing,
:enterprise_fee_summary], :report
- can [:admin, :index], :enterprise_fee_summary
+ can [:admin, :new, :create], :enterprise_fee_summary
end
def add_order_cycle_management_abilities(user)
@@ -263,7 +263,7 @@ class AbilityDecorator
can [:admin, :index, :customers, :group_buys, :bulk_coop, :sales_tax, :payments,
:orders_and_distributors, :orders_and_fulfillment, :products_and_inventory,
:order_cycle_management, :xero_invoices, :enterprise_fee_summary], :report
- can [:admin, :index], :enterprise_fee_summary
+ can [:admin, :new, :create], :enterprise_fee_summary
can [:create], Customer
can [:admin, :index, :update, :destroy, :show], Customer, enterprise_id: Enterprise.managed_by(user).pluck(:id)
diff --git a/app/views/spree/admin/reports/enterprise_fee_summaries/_filters.html.haml b/app/views/spree/admin/reports/enterprise_fee_summaries/_filters.html.haml
index bb2135b2e9..744097e9a5 100644
--- a/app/views/spree/admin/reports/enterprise_fee_summaries/_filters.html.haml
+++ b/app/views/spree/admin/reports/enterprise_fee_summaries/_filters.html.haml
@@ -1,4 +1,4 @@
-= form_for @report_parameters, as: :report, url: spree.enterprise_fee_summary_admin_reports_path, method: :get do |f|
+= form_for @report_parameters, as: :report, url: spree.admin_reports_enterprise_fee_summary_path, method: :post do |f|
.row.date-range-filter
.sixteen.columns.alpha
= label_tag nil, t(".date_range")
diff --git a/app/views/spree/admin/reports/enterprise_fee_summaries/index.html.haml b/app/views/spree/admin/reports/enterprise_fee_summaries/create.html.haml
similarity index 100%
rename from app/views/spree/admin/reports/enterprise_fee_summaries/index.html.haml
rename to app/views/spree/admin/reports/enterprise_fee_summaries/create.html.haml
diff --git a/app/views/spree/admin/reports/enterprise_fee_summaries/new.html.haml b/app/views/spree/admin/reports/enterprise_fee_summaries/new.html.haml
new file mode 100644
index 0000000000..790853ca1f
--- /dev/null
+++ b/app/views/spree/admin/reports/enterprise_fee_summaries/new.html.haml
@@ -0,0 +1 @@
+= render "filters"
diff --git a/app/views/spree/admin/reports/index.html.erb b/app/views/spree/admin/reports/index.html.erb
index 1ae8b4c17a..cb514a5291 100644
--- a/app/views/spree/admin/reports/index.html.erb
+++ b/app/views/spree/admin/reports/index.html.erb
@@ -12,7 +12,7 @@
<% @reports.each do |key, value| %>
- | <%= link_to value[:name], send("#{key}_admin_reports_url".to_sym) %> |
+ <%= link_to value[:name], value[:url] %> |
<%= value[:description] %> |
<% end %>
diff --git a/config/routes/spree.rb b/config/routes/spree.rb
index dac548cdde..4e7165796c 100644
--- a/config/routes/spree.rb
+++ b/config/routes/spree.rb
@@ -25,13 +25,17 @@ Spree::Core::Engine.routes.prepend do
match '/admin/reports/products_and_inventory' => 'admin/reports#products_and_inventory', :as => "products_and_inventory_admin_reports", :via => [:get, :post]
match '/admin/reports/customers' => 'admin/reports#customers', :as => "customers_admin_reports", :via => [:get, :post]
match '/admin/reports/xero_invoices' => 'admin/reports#xero_invoices', :as => "xero_invoices_admin_reports", :via => [:get, :post]
- get "/admin/reports/enterprise_fee_summary", to: "admin/reports/enterprise_fee_summaries#index", as: :enterprise_fee_summary_admin_reports
match '/admin', :to => 'admin/overview#index', :as => :admin
match '/admin/payment_methods/show_provider_preferences' => 'admin/payment_methods#show_provider_preferences', :via => :get
put 'credit_cards/new_from_token', to: 'credit_cards#new_from_token'
- resources :credit_cards
+ namespace :admin do
+ namespace :reports do
+ resource :enterprise_fee_summary, only: [:new, :create]
+ end
+ end
+ resources :credit_cards
namespace :api, :defaults => { :format => 'json' } do
resources :users do
diff --git a/spec/controllers/spree/admin/reports/enterprise_fee_summaries_controller_spec.rb b/spec/controllers/spree/admin/reports/enterprise_fee_summaries_controller_spec.rb
index 20d7608a4c..8cc159852e 100644
--- a/spec/controllers/spree/admin/reports/enterprise_fee_summaries_controller_spec.rb
+++ b/spec/controllers/spree/admin/reports/enterprise_fee_summaries_controller_spec.rb
@@ -11,19 +11,19 @@ describe Spree::Admin::Reports::EnterpriseFeeSummariesController, type: :control
allow(controller).to receive(:spree_current_user) { current_user }
end
- describe "#index" do
- context "when there are no parameters" do
- it "renders the report form" do
- get :index
+ describe "#new" do
+ it "renders the report form" do
+ get :new
- expect(response).to be_success
- expect(response).to render_template(view_template_path)
- end
+ expect(response).to be_success
+ expect(response).to render_template(new_template_path)
end
+ end
+ describe "#create" do
context "when the parameters are valid" do
it "sends the generated report in the correct format" do
- get :index, report: { start_at: "2018-10-09 07:30:00" }, report_format: "csv"
+ post :create, report: { start_at: "2018-10-09 07:30:00" }, report_format: "csv"
expect(response).to be_success
expect(response.body).not_to be_blank
@@ -33,10 +33,10 @@ describe Spree::Admin::Reports::EnterpriseFeeSummariesController, type: :control
context "when the parameters are invalid" do
it "renders the report form with an error" do
- get :index, report: { start_at: "invalid date" }, report_format: "csv"
+ post :create, report: { start_at: "invalid date" }, report_format: "csv"
expect(flash[:error]).to eq(I18n.t("invalid_filter_parameters", scope: i18n_scope))
- expect(response).to render_template(view_template_path)
+ expect(response).to render_template(new_template_path)
end
end
@@ -47,11 +47,10 @@ describe Spree::Admin::Reports::EnterpriseFeeSummariesController, type: :control
let(:current_user) { distributor.owner }
it "renders the report form with an error" do
- get :index, report: { distributor_ids: [other_distributor.id] }, report_format: "csv"
+ post :create, report: { distributor_ids: [other_distributor.id] }, report_format: "csv"
expect(flash[:error]).to eq(report_klass::Authorizer::PARAMETER_NOT_ALLOWED_ERROR)
- expect(response)
- .to render_template("spree/admin/reports/enterprise_fee_summaries/index")
+ expect(response).to render_template(new_template_path)
end
end
@@ -65,7 +64,7 @@ describe Spree::Admin::Reports::EnterpriseFeeSummariesController, type: :control
let(:current_user) { distributor.owner }
it "applies permissions to report" do
- get :index, report: {}, report_format: "csv"
+ post :create, report: {}, report_format: "csv"
expect(assigns(:permissions).allowed_order_cycles.to_a).to eq([order_cycle])
end
@@ -76,7 +75,7 @@ describe Spree::Admin::Reports::EnterpriseFeeSummariesController, type: :control
"order_management.reports.enterprise_fee_summary"
end
- def view_template_path
- "spree/admin/reports/enterprise_fee_summaries/index"
+ def new_template_path
+ "spree/admin/reports/enterprise_fee_summaries/new"
end
end
diff --git a/spec/features/admin/reports/enterprise_fee_summaries_spec.rb b/spec/features/admin/reports/enterprise_fee_summaries_spec.rb
index 506a764c53..d4585ba291 100644
--- a/spec/features/admin/reports/enterprise_fee_summaries_spec.rb
+++ b/spec/features/admin/reports/enterprise_fee_summaries_spec.rb
@@ -31,7 +31,7 @@ feature "enterprise fee summaries" do
it "does not allow access to the report" do
visit spree.admin_reports_path
expect(page).to have_no_link(I18n.t("admin.reports.enterprise_fee_summary.name"))
- visit spree.enterprise_fee_summary_admin_reports_path
+ visit spree.new_admin_reports_enterprise_fee_summary_path
expect(page).to have_content(I18n.t("unauthorized"))
end
end
@@ -39,7 +39,7 @@ feature "enterprise fee summaries" do
describe "smoke test for filters" do
before do
- visit spree.enterprise_fee_summary_admin_reports_path
+ visit spree.new_admin_reports_enterprise_fee_summary_path
end
context "when logged in as admin" do
@@ -63,7 +63,7 @@ feature "enterprise fee summaries" do
describe "smoke test for generation of report based on permissions" do
before do
- visit spree.enterprise_fee_summary_admin_reports_path
+ visit spree.new_admin_reports_enterprise_fee_summary_path
end
context "when logged in as admin" do
@@ -105,7 +105,7 @@ feature "enterprise fee summaries" do
let(:current_user) { create(:admin_user) }
before do
- visit spree.enterprise_fee_summary_admin_reports_path
+ visit spree.new_admin_reports_enterprise_fee_summary_path
end
it "generates file with data for selected order cycle" do