From 1fee45035c82f12c6f720414abe2f2ddb1daeda9 Mon Sep 17 00:00:00 2001 From: Sebastian Castro Date: Thu, 24 Mar 2022 17:40:41 +0000 Subject: [PATCH] Report Refactor 1: Customers --- .../spree/admin/reports_controller.rb | 7 +--- .../reports/_customers_description.html.haml | 4 +-- .../spree/admin/reports/customers.html.haml | 32 ------------------- .../reports/filters/_customers.html.haml | 18 +++++++++++ app/views/spree/admin/reports/show.html.haml | 5 ++- lib/open_food_network/customers_report.rb | 6 ++-- .../spree/admin/reports_controller_spec.rb | 6 ++-- .../customers_report_spec.rb | 12 +++---- 8 files changed, 37 insertions(+), 53 deletions(-) delete mode 100644 app/views/spree/admin/reports/customers.html.haml create mode 100644 app/views/spree/admin/reports/filters/_customers.html.haml diff --git a/app/controllers/spree/admin/reports_controller.rb b/app/controllers/spree/admin/reports_controller.rb index 56e8a8e28d..06007377a3 100644 --- a/app/controllers/spree/admin/reports_controller.rb +++ b/app/controllers/spree/admin/reports_controller.rb @@ -46,11 +46,7 @@ module Spree end def customers - @report_types = report_types[:customers] - @report_type = params[:report_type] - @report = OpenFoodNetwork::CustomersReport.new spree_current_user, raw_params, - render_content? - render_report(@report.header, @report.table, params[:csv], "customers_#{timestamp}.csv") + render_report2 end def order_cycle_management @@ -195,7 +191,6 @@ module Spree @report_subtype = params[:report_subtype] klass = "OpenFoodNetwork::#{action_name.camelize}Report".constantize @report = klass.new spree_current_user, raw_params, render_content? - if report_format.present? data = Reporting::ReportRenderer.new(@report).public_send("to_#{report_format}") send_data data, filename: report_filename diff --git a/app/views/spree/admin/reports/_customers_description.html.haml b/app/views/spree/admin/reports/_customers_description.html.haml index 85f93a82c0..22d440725e 100644 --- a/app/views/spree/admin/reports/_customers_description.html.haml +++ b/app/views/spree/admin/reports/_customers_description.html.haml @@ -1,4 +1,4 @@ %ul{style: "margin-left: 12pt"} - report_types.each do |report_type| - %li - = link_to report_type[0], "#{customers_admin_reports_url}?report_type=#{report_type[1]}" + %li + = link_to report_type[0], "#{customers_admin_reports_url}?report_subtype=#{report_type[1]}" diff --git a/app/views/spree/admin/reports/customers.html.haml b/app/views/spree/admin/reports/customers.html.haml deleted file mode 100644 index 8f58149ae7..0000000000 --- a/app/views/spree/admin/reports/customers.html.haml +++ /dev/null @@ -1,32 +0,0 @@ -= form_tag spree.customers_admin_reports_url do |f| - %br - .row - .four.columns.alpha - = label_tag nil, t(:report_customers_distributor) - = select_tag(:distributor_id, - options_from_collection_for_select(@distributors, :id, :name, params[:distributor_id]), - {:include_blank => true, :class => "select2 fullwidth"}) - - .four.columns - = label_tag nil, t(:report_customers_supplier) - = select_tag(:supplier_id, - options_from_collection_for_select(@suppliers, :id, :name, params[:supplier_id]), - {:include_blank => true, :class => "select2 fullwidth"}) - - .six.columns - = label_tag nil, t(:report_customers_cycle) - = select_tag(:order_cycle_id, - options_for_select(report_order_cycle_options(@order_cycles), params[:order_cycle_id]), - {:include_blank => true, :class => "select2 fullwidth"}) - - = label_tag nil, t(:report_customers_type) - = select_tag(:report_type, options_for_select(@report_types, @report_type)) - - %br - %br - = check_box_tag :csv - = label_tag :csv, t(:report_customers_csv) - %br - = button t(:go) - -= render "table", id: "listing_customers", msg_option: t(:go) diff --git a/app/views/spree/admin/reports/filters/_customers.html.haml b/app/views/spree/admin/reports/filters/_customers.html.haml new file mode 100644 index 0000000000..83fb9f87b5 --- /dev/null +++ b/app/views/spree/admin/reports/filters/_customers.html.haml @@ -0,0 +1,18 @@ +.row + .alpha.two.columns= label_tag nil, t(:report_customers_distributor) + .omega.fourteen.columns + = select_tag(:distributor_id, + options_from_collection_for_select(@distributors, :id, :name, params[:distributor_id]), + {:include_blank => true, :class => "select2 fullwidth light"}) +.row + .alpha.two.columns= label_tag nil, t(:report_customers_supplier) + .omega.fourteen.columns + = select_tag(:supplier_id, + options_from_collection_for_select(@suppliers, :id, :name, params[:supplier_id]), + {:include_blank => true, :class => "select2 fullwidth light"}) +.row + .alpha.two.columns= label_tag nil, t(:report_customers_cycle) + .omega.fourteen.columns + = select_tag(:order_cycle_id, + options_for_select(report_order_cycle_options(@order_cycles), params[:order_cycle_id]), + {:include_blank => true, :class => "select2 fullwidth light"}) \ No newline at end of file diff --git a/app/views/spree/admin/reports/show.html.haml b/app/views/spree/admin/reports/show.html.haml index 4e7a640944..70e0424593 100644 --- a/app/views/spree/admin/reports/show.html.haml +++ b/app/views/spree/admin/reports/show.html.haml @@ -1,4 +1,7 @@ -= form_for @report.search, :url => url_for(only_path: false) do |f| +/ If the report object do not use ransack search, create a fake one just for the form_for +- ransack_search = @report.respond_to?(:search) ? @report.search : Ransack::Search.new(Spree::Order) += form_for ransack_search, :url => url_for(only_path: false) do |f| + %fieldset.no-border-bottom.print-hidden %legend{ align: 'center'}= t(:report_filters) = render partial: "spree/admin/reports/filters/#{action_name}", locals: { f: f } diff --git a/lib/open_food_network/customers_report.rb b/lib/open_food_network/customers_report.rb index 60a7863dea..c52edad648 100644 --- a/lib/open_food_network/customers_report.rb +++ b/lib/open_food_network/customers_report.rb @@ -10,7 +10,7 @@ module OpenFoodNetwork @compile_table = compile_table end - def header + def table_headers if is_mailing_list? [I18n.t(:report_header_email), I18n.t(:report_header_first_name), @@ -28,7 +28,7 @@ module OpenFoodNetwork end end - def table + def table_rows return [] unless @compile_table orders.map do |order| @@ -93,7 +93,7 @@ module OpenFoodNetwork private def is_mailing_list? - params[:report_type] == "mailing_list" + params[:report_subtype] == "mailing_list" end end end diff --git a/spec/controllers/spree/admin/reports_controller_spec.rb b/spec/controllers/spree/admin/reports_controller_spec.rb index 2f9edf9de7..23e967cd85 100644 --- a/spec/controllers/spree/admin/reports_controller_spec.rb +++ b/spec/controllers/spree/admin/reports_controller_spec.rb @@ -286,7 +286,7 @@ describe Spree::Admin::ReportsController, type: :controller do it "assigns report types" do spree_get :customers - expect(assigns(:report_types)).to eq(subject.report_types[:customers]) + expect(assigns(:report_subtypes)).to eq(subject.report_types[:customers]) end it "creates a CustomersReport" do @@ -295,8 +295,8 @@ describe Spree::Admin::ReportsController, type: :controller do "action" => "customers", "use_route" => "main_app", "report" => {} }, false) .and_return(report = double(:report)) - allow(report).to receive(:header).and_return [] - allow(report).to receive(:table).and_return [] + allow(report).to receive(:table_headers).and_return [] + allow(report).to receive(:table_rows).and_return [] spree_get :customers, test: "foo" expect(assigns(:report)).to eq(report) end diff --git a/spec/lib/open_food_network/customers_report_spec.rb b/spec/lib/open_food_network/customers_report_spec.rb index f1df21332f..ebe963c47a 100644 --- a/spec/lib/open_food_network/customers_report_spec.rb +++ b/spec/lib/open_food_network/customers_report_spec.rb @@ -15,11 +15,11 @@ module OpenFoodNetwork describe "mailing list report" do before do - allow(subject).to receive(:params).and_return(report_type: "mailing_list") + allow(subject).to receive(:params).and_return(report_subtype: "mailing_list") end it "returns headers for mailing_list" do - expect(subject.header).to eq(["Email", "First Name", "Last Name", "Suburb"]) + expect(subject.table_headers).to eq(["Email", "First Name", "Last Name", "Suburb"]) end it "builds a table from a list of variants" do @@ -29,7 +29,7 @@ module OpenFoodNetwork allow(order).to receive(:billing_address).and_return address allow(subject).to receive(:orders).and_return [order] - expect(subject.table).to eq([[ + expect(subject.table_rows).to eq([[ "test@test.com", "Firsty", "Lasty", "Suburbia" ]]) end @@ -37,11 +37,11 @@ module OpenFoodNetwork describe "addresses report" do before do - allow(subject).to receive(:params).and_return(report_type: "addresses") + allow(subject).to receive(:params).and_return(report_subtype: "addresses") end it "returns headers for addresses" do - expect(subject.header).to eq(["First Name", "Last Name", "Billing Address", "Email", + expect(subject.table_headers).to eq(["First Name", "Last Name", "Billing Address", "Email", "Phone", "Hub", "Hub Address", "Shipping Method"]) end @@ -52,7 +52,7 @@ module OpenFoodNetwork o.shipments << create(:shipment) allow(subject).to receive(:orders).and_return [o] - expect(subject.table).to eq([[ + expect(subject.table_rows).to eq([[ a.firstname, a.lastname, [a.address1, a.address2, a.city].join(" "), o.email, a.phone, d.name,