-
-
Notifications
You must be signed in to change notification settings - Fork 544
Bug-5152-update-donations-export-to-include-inactive-unused-items #5200
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Bug-5152-update-donations-export-to-include-inactive-unused-items #5200
Conversation
csv_data = described_class.new(donation_ids: donation_ids, organization: organization).generate_csv_data | ||
|
||
# Verify the inactive item appears in headers | ||
expect(csv_data[0]).to include(inactive_item.name) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@dorner note this isn't following the earlier CSV testing syntax format. There's nothing wrong with the other one, but it is slightly more brittle b/c it's assuming the headers order won't change. The approach i'm doing will pass even if the header order is modified. Not a big deal either way.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In general for CSV's I prefer a more brittle approach because changing the CSV header order is actually a breaking change, and I'd rather be notified if that happens.
@@ -15,6 +15,13 @@ def initialize(donation_ids:, organization:) | |||
).order(created_at: :asc) | |||
|
|||
@organization = organization | |||
@item_header_names = @organization.items.select("DISTINCT ON (LOWER(name)) items.name").order("LOWER(name) ASC").map(&:name) | |||
|
|||
@item_headers = if @organization.include_in_kind_values_in_exported_files |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
like I mentioned in the main thread #5152, a lot of this is duplicate across the exports, and probably could be dry'd up centrally...but it's a refactor job that might not matter much
LGTM functionally. Over to @dorner for technical review. |
@@ -15,6 +15,13 @@ def initialize(donation_ids:, organization:) | |||
).order(created_at: :asc) | |||
|
|||
@organization = organization | |||
@item_header_names = @organization.items.select("DISTINCT ON (LOWER(name)) items.name").order("LOWER(name) ASC").map(&:name) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does this need to be an instance variable? I don't think it's used anywhere outside this function.
@@ -39,6 +46,7 @@ def generate_csv_data | |||
private | |||
|
|||
attr_reader :donations | |||
attr_reader :item_headers |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this read anywhere outside the class?
csv_data = described_class.new(donation_ids: donation_ids, organization: organization).generate_csv_data | ||
|
||
# Verify the inactive item appears in headers | ||
expect(csv_data[0]).to include(inactive_item.name) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In general for CSV's I prefer a more brittle approach because changing the CSV header order is actually a breaking change, and I'd rather be notified if that happens.
|
||
# Check that the remaining columns match our expected case-insensitive sort | ||
expect(item_columns).to eq(expected_order) | ||
end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See previous comments re hardcoded CSVs.
Checklist:
X I have performed a self-review of my own code,
X I have commented my code, particularly in hard-to-understand areas,
X I have made corresponding changes to the documentation,
X I have added tests that prove my fix is effective or that my feature works,
X New and existing unit tests pass locally with my changes ("bundle exec rake"),
X Title include "WIP" if work is in progress.
X I acknowledge that I will not force push my branch once reviews have started.
Resolves #5152 - partially, will be broken up into multiple PRs
Description
This modifies the query used by the Donations export to also include inactive items and items that were not donated, so that the headers are consistent with the "Distributions" export logic.
Type of change
How Has This Been Tested?
PLease see attached XLXS files to help make sense of this.
This CSV will serve as a reference point for Donations for the item columns, at least.
Distributions_as_reference.csv
This is an example of the data BEFORE the fix -- note how many fewer item columns are in the export
donations_before.csv
This is the fixed version. Note that the total number of item columns matches the Distribution export
donations_after_fix.csv