diff --git a/app/controllers/donations_controller.rb b/app/controllers/donations_controller.rb index 74580065f6..bc09bdfffe 100644 --- a/app/controllers/donations_controller.rb +++ b/app/controllers/donations_controller.rb @@ -134,7 +134,7 @@ def donation_item_params def filter_params return {} unless params.key?(:filters) - params.require(:filters).permit(:at_storage_location, :by_source, :from_donation_site, :by_product_drive, :by_product_drive_participant, :from_manufacturer, :by_category) + params.require(:filters).permit(:at_storage_location, :by_source, :from_donation_site, :by_product_drive, :by_product_drive_participant, :from_manufacturer, :by_item_id, :by_item_category_id, :by_category) end # Omits donation_site_id or product_drive_participant_id if those aren't selected as source diff --git a/app/models/donation.rb b/app/models/donation.rb index 7fe6f5cfad..55a08ede10 100644 --- a/app/models/donation.rb +++ b/app/models/donation.rb @@ -52,6 +52,8 @@ class Donation < ApplicationRecord where(manufacturer_id: manufacturer_id) } + scope :by_item_id, ->(item_id) { includes(:items).where(items: { id: item_id }) } + scope :by_item_category_id, ->(item_category_id) { includes(:items).where(items: { item_category_id: item_category_id }) } scope :by_category, ->(item_category) { joins(line_items: {item: :item_category}).where("item_categories.name ILIKE ?", item_category) } diff --git a/app/models/view/donations.rb b/app/models/view/donations.rb index 9518e98047..6116a35a50 100644 --- a/app/models/view/donations.rb +++ b/app/models/view/donations.rb @@ -2,6 +2,7 @@ module View Donations = Data.define( :donations, :filters, + :items, :item_categories, :paginated_donations, :product_drives, @@ -18,7 +19,8 @@ def filter_params(params) params.require(:filters).permit( :at_storage_location, :by_source, :from_donation_site, :by_product_drive, :by_product_drive_participant, - :from_manufacturer, :by_category + :from_manufacturer, :by_item_id, :by_item_category_id, + :by_category ) else {} @@ -49,6 +51,7 @@ def from_params(params:, organization:, helpers:) new( donations: donations, filters: filters, + items: organization.items.alphabetized.select(:id, :name), item_categories: organization.item_categories.pluck(:name).uniq, paginated_donations: paginated_donations, product_drives: organization.product_drives.alphabetized, @@ -68,6 +71,10 @@ def selected_source filters[:by_source] end + def selected_item + filters[:by_item_id].presence + end + def selected_item_category filters[:by_category] end diff --git a/app/views/donations/index.html.erb b/app/views/donations/index.html.erb index c3e551e466..c3347ebe4c 100644 --- a/app/views/donations/index.html.erb +++ b/app/views/donations/index.html.erb @@ -87,6 +87,11 @@ selected: @donation_info.selected_donation_site) %> <% end %> + <% if @donation_info.items.present? %> +