Report Refactor 1: Users & Entreprises

This commit is contained in:
Sebastian Castro
2022-03-25 09:04:15 +00:00
committed by Jean-Baptiste Bellet
parent 3d1b61ae6e
commit 41c11baa3f
7 changed files with 22 additions and 37 deletions

View File

@@ -90,9 +90,7 @@ module Spree
end
def users_and_enterprises
@report = OpenFoodNetwork::UsersAndEnterprisesReport.new raw_params, render_content?
render_report(@report.header, @report.table, params[:csv],
"users_and_enterprises_#{timestamp}.csv")
render_report2
end
def xero_invoices

View File

@@ -0,0 +1,7 @@
.row
.alpha.two.columns= label_tag nil, t(:report_enterprises)
.omega.fourteen.columns= select_tag(:enterprise_id_in, options_from_collection_for_select(Enterprise.all, :id, :name, params[:enterprise_id_in]), {class: "select2 fullwidth", multiple: true})
.row
.alpha.two.columns= label_tag nil, t(:report_users)
.omega.fourteen.columns= select_tag(:user_id_in, options_from_collection_for_select(Spree::User.all, :id, :email, params[:user_id_in]), {class: "select2 fullwidth", multiple: true})

View File

@@ -1,21 +0,0 @@
= form_tag spree.users_and_enterprises_admin_reports_url do |f|
.row
.alpha.two.columns= label_tag nil, t(:report_enterprises)
.omega.fourteen.columns= select_tag(:enterprise_id_in, options_from_collection_for_select(Enterprise.all, :id, :name, params[:enterprise_id_in]&.split(",")), {class: "select2 fullwidth", multiple: true})
.row
.alpha.two.columns= label_tag nil, t(:report_users)
.omega.fourteen.columns= select_tag(:user_id_in, options_from_collection_for_select(Spree::User.all, :id, :email, params[:user_id_in]&.split(",")), {class: "select2 fullwidth", multiple: true})
-# Might need this later if we add different kinds of reports
-# .row
-# .alpha.two.columns= label_tag nil, "Report Type: "
-# .omega.fourteen.columns= select_tag(:report_type, options_for_select(@report_types, params[:report_type]))
.row
= check_box_tag :csv
= label_tag :csv, t(:report_customers_csv)
.row
= button t(:search)
= render "table", id: "users_and_enterprises", msg_option: t(:search)

View File

@@ -4,7 +4,8 @@ module OpenFoodNetwork
class UsersAndEnterprisesReport
attr_reader :params
def initialize(params = {}, compile_table = false)
def initialize(user, params = {}, compile_table = false)
@user = user
@params = params
@compile_table = compile_table
@@ -15,7 +16,7 @@ module OpenFoodNetwork
@params[:user_id_in] = @params[:user_id_in].join(',') if @params[:user_id_in].is_a? Array
end
def header
def table_headers
[
I18n.t(:report_header_user),
I18n.t(:report_header_relationship),
@@ -27,7 +28,7 @@ module OpenFoodNetwork
]
end
def table
def table_rows
return [] unless @compile_table
users_and_enterprises.map do |uae|

View File

@@ -328,12 +328,12 @@ describe Spree::Admin::ReportsController, type: :controller do
it "shows report search forms" do
spree_get :users_and_enterprises
expect(assigns(:report).table).to eq []
expect(assigns(:report).table_rows).to eq []
end
it "shows report data" do
spree_post :users_and_enterprises, q: {}
expect(assigns(:report).table.empty?).to be false
expect(assigns(:report).table_rows.empty?).to be false
end
end

View File

@@ -8,7 +8,7 @@ module OpenFoodNetwork
describe "users_and_enterprises" do
let!(:owners_and_enterprises) { double(:owners_and_enterprises) }
let!(:managers_and_enterprises) { double(:managers_and_enterprises) }
let!(:subject) { OpenFoodNetwork::UsersAndEnterprisesReport.new({}, true) }
let!(:subject) { OpenFoodNetwork::UsersAndEnterprisesReport.new(nil, {}, true) }
before do
allow(subject).to receive(:owners_and_enterprises) { owners_and_enterprises }
@@ -25,7 +25,7 @@ module OpenFoodNetwork
end
describe "sorting results" do
let!(:subject) { OpenFoodNetwork::UsersAndEnterprisesReport.new({}, true) }
let!(:subject) { OpenFoodNetwork::UsersAndEnterprisesReport.new(nil, {}, true) }
it "sorts by creation date" do
uae_mock = [
@@ -69,7 +69,7 @@ module OpenFoodNetwork
describe "for owners and enterprises" do
describe "by enterprise id" do
let!(:params) { { enterprise_id_in: [enterprise1.id.to_s] } }
let!(:subject) { OpenFoodNetwork::UsersAndEnterprisesReport.new params, true }
let!(:subject) { OpenFoodNetwork::UsersAndEnterprisesReport.new nil, params, true }
it "excludes enterprises that are not explicitly requested" do
results = subject.owners_and_enterprises.to_a.map{ |oae| oae["name"] }
@@ -80,7 +80,7 @@ module OpenFoodNetwork
describe "by user id" do
let!(:params) { { user_id_in: [enterprise1.owner.id.to_s] } }
let!(:subject) { OpenFoodNetwork::UsersAndEnterprisesReport.new params, true }
let!(:subject) { OpenFoodNetwork::UsersAndEnterprisesReport.new nil, params, true }
it "excludes enterprises that are not explicitly requested" do
results = subject.owners_and_enterprises.to_a.map{ |oae| oae["name"] }
@@ -93,7 +93,7 @@ module OpenFoodNetwork
describe "for managers and enterprises" do
describe "by enterprise id" do
let!(:params) { { enterprise_id_in: [enterprise1.id.to_s] } }
let!(:subject) { OpenFoodNetwork::UsersAndEnterprisesReport.new params, true }
let!(:subject) { OpenFoodNetwork::UsersAndEnterprisesReport.new nil, params, true }
it "excludes enterprises that are not explicitly requested" do
results = subject.managers_and_enterprises.to_a.map{ |mae| mae["name"] }
@@ -106,7 +106,7 @@ module OpenFoodNetwork
let!(:manager1) { create(:user) }
let!(:manager2) { create(:user) }
let!(:params) { { user_id_in: [manager1.id.to_s] } }
let!(:subject) { OpenFoodNetwork::UsersAndEnterprisesReport.new params, true }
let!(:subject) { OpenFoodNetwork::UsersAndEnterprisesReport.new nil, params, true }
before do
enterprise1.enterprise_roles.build(user: manager1).save

View File

@@ -347,7 +347,7 @@ describe '
end
it "shows users and enterprises report" do
click_button "Search"
click_button "Go"
rows = find("table.report__table").all("tr")
table = rows.map { |r| r.all("th,td").map { |c| c.text.strip }[0..2] }
@@ -368,7 +368,7 @@ describe '
select enterprise3.name, from: "enterprise_id_in"
select enterprise1.owner.email, from: "user_id_in"
click_button "Search"
click_button "Go"
rows = find("table.report__table").all("tr")
table = rows.map { |r| r.all("th,td").map { |c| c.text.strip }[0..2] }