Skip to content

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

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

bsbonus
Copy link
Contributor

@bsbonus bsbonus commented May 22, 2025

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

  • Bug fix (non-breaking change which fixes an issue)

How Has This Been Tested?

  1. Ensured test data included inactive and non-donated items. Giving the item a unique name is super important.
  2. Exported out Distribution export as reference point
  3. Exported the Donations export before the changes
  4. Exported the Donations export after the changes, compared against Distributions for item columns to ensure match.
  5. Updated and shored up test coverage accordingly

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

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)
Copy link
Contributor Author

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.

Copy link
Collaborator

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
Copy link
Contributor Author

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

@cielf
Copy link
Collaborator

cielf commented May 23, 2025

LGTM functionally. Over to @dorner for technical review.

@cielf cielf requested a review from dorner May 23, 2025 15:32
@@ -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)
Copy link
Collaborator

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
Copy link
Collaborator

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)
Copy link
Collaborator

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.

@bsbonus bsbonus requested a review from dorner May 29, 2025 19:43

# Check that the remaining columns match our expected case-insensitive sort
expect(item_columns).to eq(expected_order)
end
Copy link
Collaborator

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Exports should show all items - not just the ones that have data in the filtered list
3 participants