mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-27 01:43:22 +00:00
Merge pull request #12927 from mkllnk/report-dates
Filter reports by last 3 months by default
This commit is contained in:
@@ -58,4 +58,9 @@ module ReportsHelper
|
||||
.where(order_id: orders.map(&:id))
|
||||
.pluck(:originator_id)
|
||||
end
|
||||
|
||||
def datepicker_time(datetime)
|
||||
datetime = Time.zone.parse(datetime) if datetime.is_a? String
|
||||
datetime.strftime('%Y-%m-%d %H:%M')
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
-# Field used for ransack search. This date range is mostly used for Spree::Order
|
||||
-# so default field is 'completed_at'
|
||||
- field ||= 'completed_at'
|
||||
- start_date ||= params[:q].try(:[], :completed_at_gt)
|
||||
- end_date ||= params[:q].try(:[], :completed_at_lt)
|
||||
- start_field = "#{field}_gt"
|
||||
- end_field = "#{field}_lt"
|
||||
- query = params[:q].to_h
|
||||
- start_date = datepicker_time(query[start_field].presence || 3.months.ago.beginning_of_day)
|
||||
- end_date = datepicker_time(query[end_field].presence || Time.zone.tomorrow.beginning_of_day)
|
||||
|
||||
.row.date-range-filter
|
||||
.alpha.two.columns= label_tag nil, t(:date_range)
|
||||
.omega.fourteen.columns
|
||||
.field-block.omega.four.columns
|
||||
.date-range-fields{ data: { controller: "flatpickr", "flatpickr-mode-value": "range", "flatpickr-enable-time-value": true , "flatpickr-default-hour": 0 } }
|
||||
.date-range-fields{ data: { controller: "flatpickr", "flatpickr-mode-value": "range", "flatpickr-enable-time-value": true , "flatpickr-default-hour": 0, "flatpickr-default-date": [start_date, end_date] } }
|
||||
= text_field_tag nil, nil, class: "datepicker fullwidth", data: { "flatpickr-target": "instance", action: "flatpickr_clear@window->flatpickr#clear" }
|
||||
= text_field_tag "q[#{field}_gt]", nil, data: { "flatpickr-target": "start" }, style: "display: none", value: start_date
|
||||
= text_field_tag "q[#{field}_lt]", nil, data: { "flatpickr-target": "end" }, style: "display: none", value: end_date
|
||||
= text_field_tag "q[#{start_field}]", nil, data: { "flatpickr-target": "start" }, style: "display: none", value: start_date
|
||||
= text_field_tag "q[#{end_field}]", nil, data: { "flatpickr-target": "end" }, style: "display: none", value: end_date
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
= render partial: 'admin/reports/date_range_form',
|
||||
locals: { f: f, field: 'order_completed_at', start_date: params[:q].try(:[], :order_completed_at_gt), end_date: params[:q].try(:[], :order_completed_at_lt) }
|
||||
locals: { f: f, field: 'order_completed_at' }
|
||||
|
||||
.row
|
||||
.alpha.two.columns= label_tag nil, t(:report_hubs)
|
||||
@@ -14,4 +14,4 @@
|
||||
.row
|
||||
.alpha.two.columns= label_tag nil, t(:report_customers_cycle)
|
||||
.omega.fourteen.columns
|
||||
= select_tag("q[order_cycle_id_in]", options_for_select(report_order_cycle_options(@data.order_cycles), params.dig(:q, :order_cycle_id_in)), {class: "select2 fullwidth", multiple: true})
|
||||
= select_tag("q[order_cycle_id_in]", options_for_select(report_order_cycle_options(@data.order_cycles), params.dig(:q, :order_cycle_id_in)), {class: "select2 fullwidth", multiple: true})
|
||||
|
||||
@@ -12,13 +12,22 @@ module Features
|
||||
# Once the datepicker is open,
|
||||
# it simply consist to select the 'from' date and then the 'to' date
|
||||
select_date_from_datepicker(from)
|
||||
select_date_from_datepicker(to, from)
|
||||
select_date_from_datepicker(to)
|
||||
end
|
||||
|
||||
def select_date_from_datepicker(date, reference_date = Time.zone.today)
|
||||
navigate_datepicker_to_month(date, reference_date)
|
||||
find('.flatpickr-calendar.open .flatpickr-days .flatpickr-day:not(.prevMonthDay)',
|
||||
text: date.strftime("%e").to_s.strip, exact_text: true, match: :first).click
|
||||
def select_date_from_datepicker(date)
|
||||
within ".flatpickr-calendar.open" do
|
||||
# Unfortunately, flatpickr doesn't notice a change of year when we do
|
||||
#
|
||||
# fill_in "Year", with: date.year
|
||||
#
|
||||
# A working alternative is:
|
||||
find(".cur-year").send_keys(date.year.to_s)
|
||||
select date.strftime("%B"), from: "Month"
|
||||
|
||||
aria_date = date.strftime("%B %-d, %Y")
|
||||
find("[aria-label='#{aria_date}']").click
|
||||
end
|
||||
end
|
||||
|
||||
def select_datetime_from_datepicker(datetime)
|
||||
@@ -29,38 +38,16 @@ module Features
|
||||
find(".flatpickr-calendar.open .flatpickr-minute").set datetime.strftime("%M").to_s.strip
|
||||
end
|
||||
|
||||
def navigate_datepicker_to_month(date, reference_date)
|
||||
month_and_year = date.strftime("%-m %Y")
|
||||
|
||||
until datepicker_month_and_year == month_and_year.upcase
|
||||
if date < reference_date
|
||||
navigate_datepicker_to_previous_month
|
||||
elsif date > reference_date
|
||||
navigate_datepicker_to_next_month
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def navigate_datepicker_to_previous_month
|
||||
find('.flatpickr-calendar.open .flatpickr-months .flatpickr-prev-month').click
|
||||
end
|
||||
|
||||
def navigate_datepicker_to_next_month
|
||||
find('.flatpickr-calendar.open .flatpickr-months .flatpickr-next-month').click
|
||||
end
|
||||
|
||||
def datepicker_month_and_year
|
||||
month = find(".flatpickr-calendar.open .flatpickr-current-month " \
|
||||
"select.flatpickr-monthDropdown-months").value.to_i + 1
|
||||
year = find(".flatpickr-calendar.open .flatpickr-current-month " \
|
||||
".numInputWrapper .cur-year").value
|
||||
"#{month} #{year}"
|
||||
end
|
||||
|
||||
def pick_datetime(calendar_selector, datetime_selector)
|
||||
find(calendar_selector).click
|
||||
select_datetime_from_datepicker datetime_selector
|
||||
find("body").send_keys(:escape)
|
||||
end
|
||||
|
||||
def close_datepicker
|
||||
within(".flatpickr-calendar.open") do
|
||||
click_button "Close"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -41,11 +41,8 @@ RSpec.describe '
|
||||
|
||||
# change date range field value
|
||||
find('#order_cycle_orders_close_at').click
|
||||
within(".flatpickr-calendar.open") do
|
||||
expect(page).to have_selector '.shortcut-buttons-flatpickr-buttons'
|
||||
select_datetime_from_datepicker Time.zone.parse("2024-03-30 00:00")
|
||||
find("button", text: "Close").click
|
||||
end
|
||||
select_datetime_from_datepicker Time.zone.parse("2024-03-30 00:00")
|
||||
close_datepicker
|
||||
expect(page).to have_content('You have unsaved changes')
|
||||
|
||||
# click save to open warning modal
|
||||
@@ -66,11 +63,8 @@ RSpec.describe '
|
||||
|
||||
# change date range field value
|
||||
find('#order_cycle_orders_close_at').click
|
||||
within(".flatpickr-calendar.open") do
|
||||
expect(page).to have_selector '.shortcut-buttons-flatpickr-buttons'
|
||||
select_datetime_from_datepicker Time.zone.parse("2024-03-30 00:00")
|
||||
find("button", text: "Close").click
|
||||
end
|
||||
select_datetime_from_datepicker Time.zone.parse("2024-03-30 00:00")
|
||||
close_datepicker
|
||||
|
||||
# click save to open warning modal
|
||||
click_button('Save')
|
||||
@@ -102,11 +96,8 @@ RSpec.describe '
|
||||
|
||||
# Now change date range field value
|
||||
find('#order_cycle_orders_close_at').click
|
||||
within(".flatpickr-calendar.open") do
|
||||
expect(page).to have_selector '.shortcut-buttons-flatpickr-buttons'
|
||||
select_datetime_from_datepicker Time.zone.parse("2024-03-30 00:00")
|
||||
find("button", text: "Close").click
|
||||
end
|
||||
select_datetime_from_datepicker Time.zone.parse("2024-03-30 00:00")
|
||||
close_datepicker
|
||||
expect(page).to have_content('You have unsaved changes')
|
||||
|
||||
click_button('Save')
|
||||
@@ -137,11 +128,8 @@ RSpec.describe '
|
||||
|
||||
# change date range field value
|
||||
find('#order_cycle_orders_close_at').click
|
||||
within(".flatpickr-calendar.open") do
|
||||
expect(page).to have_selector '.shortcut-buttons-flatpickr-buttons'
|
||||
select_datetime_from_datepicker Time.zone.parse("2024-03-30 00:00")
|
||||
find("button", text: "Close").click
|
||||
end
|
||||
select_datetime_from_datepicker Time.zone.parse("2024-03-30 00:00")
|
||||
close_datepicker
|
||||
|
||||
expect(page).to have_content('You have unsaved changes')
|
||||
|
||||
@@ -175,11 +163,8 @@ RSpec.describe '
|
||||
|
||||
# Now change date range field value
|
||||
find('#order_cycle_orders_close_at').click
|
||||
within(".flatpickr-calendar.open") do
|
||||
expect(page).to have_selector '.shortcut-buttons-flatpickr-buttons'
|
||||
select_datetime_from_datepicker Time.zone.parse("2024-03-30 00:00")
|
||||
find("button", text: "Close").click
|
||||
end
|
||||
select_datetime_from_datepicker Time.zone.parse("2024-03-30 00:00")
|
||||
close_datepicker
|
||||
expect(page).to have_content('You have unsaved changes')
|
||||
sleep(2)
|
||||
|
||||
|
||||
@@ -182,12 +182,8 @@ RSpec.describe '
|
||||
find('input.datetimepicker', match: :first).click
|
||||
end
|
||||
|
||||
# Sets the value to test_value then looks for the close button and click it
|
||||
within(".flatpickr-calendar.open") do
|
||||
expect(page).to have_selector '.shortcut-buttons-flatpickr-buttons'
|
||||
select_datetime_from_datepicker test_value
|
||||
find("button", text: "Close").click
|
||||
end
|
||||
select_datetime_from_datepicker test_value
|
||||
close_datepicker
|
||||
|
||||
# Should no more have opened flatpickr
|
||||
expect(page).not_to have_selector '.flatpickr-calendar.open'
|
||||
@@ -213,11 +209,8 @@ RSpec.describe '
|
||||
within("tr.order-cycle-#{order_cycle.id}") do
|
||||
find('input.datetimepicker', match: :first).click
|
||||
end
|
||||
within(".flatpickr-calendar.open") do
|
||||
expect(page).to have_selector '.shortcut-buttons-flatpickr-buttons'
|
||||
select_datetime_from_datepicker Time.zone.parse("2024-03-30 00:00")
|
||||
find("button", text: "Close").click
|
||||
end
|
||||
select_datetime_from_datepicker Time.zone.parse("2024-03-30 00:00")
|
||||
close_datepicker
|
||||
expect(page).to have_content('You have unsaved changes')
|
||||
|
||||
# click save to open warning modal
|
||||
@@ -237,11 +230,8 @@ RSpec.describe '
|
||||
within("tr.order-cycle-#{order_cycle.id}") do
|
||||
find('input.datetimepicker', match: :first).click
|
||||
end
|
||||
within(".flatpickr-calendar.open") do
|
||||
expect(page).to have_selector '.shortcut-buttons-flatpickr-buttons'
|
||||
select_datetime_from_datepicker Time.zone.parse("2024-03-30 00:00")
|
||||
find("button", text: "Close").click
|
||||
end
|
||||
select_datetime_from_datepicker Time.zone.parse("2024-03-30 00:00")
|
||||
close_datepicker
|
||||
expect(page).to have_content('You have unsaved changes')
|
||||
|
||||
click_button('Save')
|
||||
|
||||
50
spec/system/admin/reports/customers_report_spec.rb
Normal file
50
spec/system/admin/reports/customers_report_spec.rb
Normal file
@@ -0,0 +1,50 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "system_helper"
|
||||
|
||||
RSpec.describe "Customers report" do
|
||||
include AuthenticationHelper
|
||||
|
||||
let(:enterprise_user) { create(:enterprise_user) }
|
||||
let(:distributor) { enterprise_user.enterprises[0] }
|
||||
|
||||
it "can be rendered" do
|
||||
login_as enterprise_user
|
||||
visit admin_reports_path
|
||||
|
||||
within "table.index" do
|
||||
click_link "Customers"
|
||||
end
|
||||
run_report
|
||||
|
||||
expect(table_headers).to eq(
|
||||
[
|
||||
[
|
||||
"First Name", "Last Name", "Billing Address", "Email", "Phone",
|
||||
"Hub", "Hub Address", "Shipping Method", "Total Number of Orders",
|
||||
"Total incl. tax ($)", "Last completed order date",
|
||||
]
|
||||
]
|
||||
)
|
||||
end
|
||||
|
||||
it "displays filtered data by default" do
|
||||
old_order = create(
|
||||
:completed_order_with_totals, distributor:, completed_at: 4.months.ago
|
||||
)
|
||||
new_order = create(:completed_order_with_totals, distributor:)
|
||||
future_order = create(
|
||||
:completed_order_with_totals, distributor:, completed_at: 1.day.from_now
|
||||
)
|
||||
|
||||
login_as enterprise_user
|
||||
visit admin_report_path(report_type: :customers)
|
||||
run_report
|
||||
|
||||
rows = find("table.report__table").all("tbody tr")
|
||||
expect(rows.count).to eq 1
|
||||
expect(rows[0].all("td")[3].text).to eq new_order.email
|
||||
expect(page).not_to have_content old_order.email
|
||||
expect(page).not_to have_content future_order.email
|
||||
end
|
||||
end
|
||||
@@ -151,28 +151,6 @@ RSpec.describe '
|
||||
end
|
||||
end
|
||||
|
||||
describe "Can access Customers reports and generate customers report" do
|
||||
before do
|
||||
login_as_admin
|
||||
visit admin_reports_path
|
||||
end
|
||||
|
||||
it "customers report" do
|
||||
within "table.index" do
|
||||
click_link "Customers"
|
||||
end
|
||||
run_report
|
||||
|
||||
rows = find("table.report__table").all("thead tr")
|
||||
table = rows.map { |r| r.all("th").map { |c| c.text.strip } }
|
||||
expect(table.sort).to eq([
|
||||
["First Name", "Last Name", "Billing Address", "Email", "Phone", "Hub", "Hub Address",
|
||||
"Shipping Method", "Total Number of Orders", "Total incl. tax ($)",
|
||||
"Last completed order date"]
|
||||
].sort)
|
||||
end
|
||||
end
|
||||
|
||||
describe "Order cycle management report" do
|
||||
before do
|
||||
login_as_admin
|
||||
|
||||
Reference in New Issue
Block a user