From b429b8a63a732bd1ea7fcc47f9e4361a2d254a98 Mon Sep 17 00:00:00 2001 From: Brock Wilcox Date: Sat, 24 Aug 2024 22:09:04 -0400 Subject: [PATCH 1/3] Implement custom units in request total popup --- app/services/requests_total_items_service.rb | 38 +++++++------------ .../requests_total_items_service_spec.rb | 6 +-- 2 files changed, 17 insertions(+), 27 deletions(-) diff --git a/app/services/requests_total_items_service.rb b/app/services/requests_total_items_service.rb index dd5e673cb5..032c2712c4 100644 --- a/app/services/requests_total_items_service.rb +++ b/app/services/requests_total_items_service.rb @@ -6,39 +6,29 @@ def initialize(requests:) def calculate return unless requests - request_items_array = [] - - request_items.each do |items| - items.each do |json| - request_items_array << [item_name(json['item_id']), json['quantity']] - end + totals = {} + item_requests.each do |item_request| + name = item_name(item_request) + totals[name] ||= 0 + totals[name] += item_request.quantity.to_i end - request_items_array.inject({}) do |item, (quantity, total)| - item[quantity] ||= 0 - item[quantity] += total.to_i - item - end + totals end private attr_accessor :requests - def request_items - @request_items ||= requests.pluck(:request_items) - end - - def request_items_ids - request_items.flat_map { |jitem| jitem.map { |item| item["item_id"] } } + def item_requests + @item_requests ||= requests.flat_map(&:item_requests) end - def items_names - @items_names ||= Item.where(id: request_items_ids).as_json(only: [:id, :name]) - end - - def item_name(id) - item_found = items_names.find { |item| item["id"] == id } - item_found&.fetch('name') || '*Unknown Item*' + def item_name(item_request) + if Flipper.enabled?(:enable_packs) && item_request.request_unit + "#{item_request.name} - #{item_request.request_unit}" + else + item_request.name + end end end diff --git a/spec/services/requests_total_items_service_spec.rb b/spec/services/requests_total_items_service_spec.rb index 54c5480962..1fe67cccfe 100644 --- a/spec/services/requests_total_items_service_spec.rb +++ b/spec/services/requests_total_items_service_spec.rb @@ -9,8 +9,8 @@ let(:item_ids) { sample_items.pluck(:id) } let(:requests) do [ - create(:request, request_items: item_ids.map { |k| { "item_id" => k, "quantity" => 20 } }), - create(:request, request_items: item_ids.map { |k| { "item_id" => k, "quantity" => 10 } }) + create(:request, :with_item_requests, request_items: item_ids.map { |k| { "item_id" => k, "quantity" => 20 } }), + create(:request, :with_item_requests, request_items: item_ids.map { |k| { "item_id" => k, "quantity" => 10 } }) ] end @@ -39,7 +39,7 @@ end context 'when provided with requests that have no request items' do - let(:requests) { [create(:request, request_items: {})] } + let(:requests) { [create(:request, :with_item_requests, request_items: {})] } it { is_expected.to be_blank } end From abfb8d2fb0fe8713d751e2f76004b0aa238ba368 Mon Sep 17 00:00:00 2001 From: Brock Wilcox Date: Sat, 24 Aug 2024 22:09:28 -0400 Subject: [PATCH 2/3] Sort request counts by name instead of by count --- app/views/requests/_calculate_product_totals.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/requests/_calculate_product_totals.html.erb b/app/views/requests/_calculate_product_totals.html.erb index 5bc8dcd389..fc3a0d16a2 100644 --- a/app/views/requests/_calculate_product_totals.html.erb +++ b/app/views/requests/_calculate_product_totals.html.erb @@ -16,7 +16,7 @@ - <% @calculate_product_totals.sort_by { |name, quantity| -quantity}.each do |name, quantity| %> + <% @calculate_product_totals.sort_by { |name, quantity| name }.each do |name, quantity| %> <%= name %> <%= quantity %> From b30fc82433523a5a09486f00fc6a9d22165119a5 Mon Sep 17 00:00:00 2001 From: Brock Wilcox Date: Sat, 24 Aug 2024 22:09:43 -0400 Subject: [PATCH 3/3] Remove unneeded test, this case doesn't happen Verified that in production there are zero of these instances --- .../services/requests_total_items_service_spec.rb | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/spec/services/requests_total_items_service_spec.rb b/spec/services/requests_total_items_service_spec.rb index 1fe67cccfe..cb16820ffa 100644 --- a/spec/services/requests_total_items_service_spec.rb +++ b/spec/services/requests_total_items_service_spec.rb @@ -23,21 +23,6 @@ end end - context 'when item name is nil' do - let(:item) do - i = build(:item, name: nil) - i.save(validate: false) - i - end - let(:requests) do - [create(:request, request_items: [{ "item_id" => item.id, "quantity" => 20 }])] - end - - it 'return Unknown Item' do - expect(subject.first.first).to eq('*Unknown Item*') - end - end - context 'when provided with requests that have no request items' do let(:requests) { [create(:request, :with_item_requests, request_items: {})] }