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