Report Refactor 1: Customers

This commit is contained in:
Sebastian Castro
2022-03-24 17:40:41 +00:00
committed by Jean-Baptiste Bellet
parent e55462d18b
commit 1fee45035c
8 changed files with 37 additions and 53 deletions

View File

@@ -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

View File

@@ -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]}"

View File

@@ -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)

View File

@@ -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"})

View File

@@ -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 }

View File

@@ -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

View File

@@ -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

View File

@@ -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,