Merge pull request #10413 from mkllnk/reports-params

Fix background processing of Enterprise Fee Summary report
This commit is contained in:
Maikel
2023-02-28 13:07:59 +11:00
committed by GitHub
6 changed files with 31 additions and 28 deletions

View File

@@ -8,12 +8,7 @@ module Reporting
def initialize(user, params = {}, render: false)
super(user, params, render: render)
p = params[:q]
if p.present?
p['start_at'] = p.delete('completed_at_gt')
p['end_at'] = p.delete('completed_at_lt')
end
@parameters = Parameters.new(p || {})
@parameters = Parameters.new(params.fetch(:q, {}))
@parameters.validate!
@permissions = Permissions.new(user)
@parameters.authorize!(@permissions)

View File

@@ -6,12 +6,13 @@ module Reporting
class Parameters < Reporting::Reports::EnterpriseFeeSummary::Reports::Parameters::Base
include ActiveModel::Validations
attr_accessor :start_at, :end_at, :distributor_ids, :producer_ids, :order_cycle_ids,
:enterprise_fee_ids, :shipping_method_ids, :payment_method_ids
attr_accessor :completed_at_gt, :completed_at_lt, :distributor_ids,
:producer_ids, :order_cycle_ids, :enterprise_fee_ids,
:shipping_method_ids, :payment_method_ids
before_validation :cleanup_arrays
validates :start_at, :end_at, date_time_string: true
validates :completed_at_gt, :completed_at_lt, date_time_string: true
validates :distributor_ids, :producer_ids, integer_array: true
validates :order_cycle_ids, integer_array: true
validates :enterprise_fee_ids, integer_array: true

View File

@@ -28,10 +28,10 @@ module Reporting
protected
def require_valid_datetime_range
return if start_at.blank? || end_at.blank?
return if completed_at_gt.blank? || completed_at_lt.blank?
error_message = self.class.date_end_before_start_error_message
errors.add(:end_at, error_message) unless start_at < end_at
errors.add(:completed_at_lt, error_message) unless completed_at_gt < completed_at_lt
end
end
end

View File

@@ -315,9 +315,10 @@ module Reporting
end
def filter_by_date(params)
filter_scope("spree_orders.completed_at >= ?", params.start_at) \
if params.start_at.present?
filter_scope("spree_orders.completed_at <= ?", params.end_at) if params.end_at.present?
filter_scope("spree_orders.completed_at >= ?", params.completed_at_gt) \
if params.completed_at_gt.present?
filter_scope("spree_orders.completed_at <= ?", params.completed_at_lt) \
if params.completed_at_lt.present?
end
def filter_by_distribution(params)

View File

@@ -99,6 +99,12 @@ describe Reporting::Reports::EnterpriseFeeSummary::Base do
let!(:second_customer_order) { prepare_order(customer: customer) }
let!(:other_customer_order) { prepare_order(customer: another_customer) }
it "doesn't delete params" do
params = ActionController::Parameters.new("completed_at_gt" => "2023-02-08+00:00")
described_class.new(current_user, params)
expect(params["completed_at_gt"]).to eq "2023-02-08+00:00"
end
it "groups and sorts entries correctly" do
totals = subject.query_result
@@ -462,8 +468,8 @@ describe Reporting::Reports::EnterpriseFeeSummary::Base do
end
end
context "on or after start_at" do
let(:parameters_attributes) { { start_at: timestamp } }
context "on or after completed_at_gt" do
let(:parameters_attributes) { { completed_at_gt: timestamp } }
it "filters entries" do
totals = subject.query_result
@@ -474,8 +480,8 @@ describe Reporting::Reports::EnterpriseFeeSummary::Base do
end
end
context "on or before end_at" do
let(:parameters_attributes) { { end_at: timestamp } }
context "on or before completed_at_lt" do
let(:parameters_attributes) { { completed_at_lt: timestamp } }
it "filters entries" do
totals = subject.query_result

View File

@@ -16,8 +16,8 @@ module Reporting
end
context "for type of parameters" do
it { is_expected.to validate_date_time_format_of(:start_at) }
it { is_expected.to validate_date_time_format_of(:end_at) }
it { is_expected.to validate_date_time_format_of(:completed_at_gt) }
it { is_expected.to validate_date_time_format_of(:completed_at_lt) }
it { is_expected.to validate_integer_array(:distributor_ids) }
it { is_expected.to validate_integer_array(:producer_ids) }
it { is_expected.to validate_integer_array(:order_cycle_ids) }
@@ -43,21 +43,21 @@ module Reporting
expect(subject.payment_method_ids).to eq(["1"])
end
describe "requiring start_at to be before end_at" do
describe "requiring completed_at_gt to be before completed_at_lt" do
let(:now) { Time.zone.now.utc }
it "adds error when start_at is after end_at" do
allow(subject).to receive(:start_at) { now.to_s }
allow(subject).to receive(:end_at) { (now - 1.hour).to_s }
it "adds error when completed_at_gt is after completed_at_lt" do
allow(subject).to receive(:completed_at_gt) { now.to_s }
allow(subject).to receive(:completed_at_lt) { (now - 1.hour).to_s }
expect(subject).not_to be_valid
error_message = described_class.date_end_before_start_error_message
expect(subject.errors[:end_at]).to eq([error_message])
expect(subject.errors[:completed_at_lt]).to eq([error_message])
end
it "does not add error when start_at is before end_at" do
allow(subject).to receive(:start_at) { now.to_s }
allow(subject).to receive(:end_at) { (now + 1.hour).to_s }
it "does not add error when completed_at_gt is before completed_at_lt" do
allow(subject).to receive(:completed_at_gt) { now.to_s }
allow(subject).to receive(:completed_at_lt) { (now + 1.hour).to_s }
expect(subject).to be_valid
end