Skip to content
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

4175 add request type flag #4827

Merged
merged 51 commits into from
Dec 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
35c4e27
Adds type enum to request model.
nathangthomas Mar 15, 2024
d1911fe
Adds request type enum to request model.
nathangthomas Mar 19, 2024
3007e64
Adds request_type to request.
nathangthomas Mar 19, 2024
7ae36b4
Adds request_type to request.
nathangthomas Mar 19, 2024
a2c79df
Passes request_type to FamilyRequestCreateService.new
nathangthomas Mar 19, 2024
7e17565
Passes request_type to FamilyRequestCreateService.new
nathangthomas Mar 19, 2024
9b5977e
Passes request_type to RequestCreateService.new
nathangthomas Mar 19, 2024
854cd39
Passes request_type to Request.new.
nathangthomas Mar 19, 2024
8435518
Adds hidden field in order to pass request_type param on submit.
nathangthomas Mar 19, 2024
45a9495
Adds request type flag to index and show pages as well as the request…
nathangthomas Mar 19, 2024
4791021
Adds by_request_type scope for filtering by request type.
nathangthomas Mar 19, 2024
3866a8f
Adds request type flag to index and show pages as well as the request…
nathangthomas Mar 19, 2024
8a775ec
Adds by_request_type filter.
nathangthomas Mar 19, 2024
a037b1c
Updates flag names and removes flag styles based on feedback from rub…
nathangthomas Apr 2, 2024
26afeb4
Adds test for request_type enum.
nathangthomas Apr 3, 2024
5c2997b
Removes unnecessary line.
nathangthomas Apr 8, 2024
0cd4451
Adds Type to expected_headers.
nathangthomas Apr 8, 2024
94a1be4
Adds request_type traits to request factory.
nathangthomas Apr 8, 2024
42f1f84
Adds request_type to family_request_create_service_spec args.
nathangthomas Apr 8, 2024
c6e45c8
Adds request_type to args.
nathangthomas Apr 8, 2024
0cfddca
Merge branch 'main' into 4175-add-request-type-flag
nathangthomas Apr 12, 2024
67e9d71
Pass request_type directly.
nathangthomas Apr 22, 2024
d8e9806
Remove request_type partial and enter text directly into reqest_row
nathangthomas Apr 22, 2024
1e19d30
Revert changes to database.yml
nathangthomas Apr 22, 2024
43f7365
Revert changes to request_spec.rb
nathangthomas Apr 22, 2024
c1792ac
Remove request_type
nathangthomas Apr 22, 2024
6441532
Remove hidden request_type fields.
nathangthomas Apr 22, 2024
a27b4e6
Fix merge conflicts / merge remote.
nathangthomas Apr 23, 2024
d53785c
Change request_type data_type to string, replace request_type string …
nathangthomas May 15, 2024
56b7c04
Merge branch 'main' of github.com:unabridged/human-essentials into 41…
nathangthomas May 15, 2024
36cb9b2
Merge branch 'main' into 4175-add-request-type-flag
nathangthomas May 15, 2024
41a0429
Remove request_type from tests
nathangthomas May 15, 2024
c0af65c
Merge branch '4175-add-request-type-flag' of github.com:unabridged/hu…
nathangthomas May 15, 2024
f46736e
Add request_type_label method
nathangthomas May 16, 2024
656e712
Undo changes to versions
nathangthomas May 16, 2024
3a0e841
Add request_type_label method
nathangthomas May 16, 2024
389e6d9
Add request_type to initialize
nathangthomas May 17, 2024
c1acb98
Merge branch 'main' into 4175-add-request-type-flag
nathangthomas May 17, 2024
15ecc79
Fix request_type bug
nathangthomas May 21, 2024
9c0572b
Merge branch '4175-add-request-type-flag' of github.com:unabridged/hu…
nathangthomas May 21, 2024
66b3cf5
Merge remote-tracking branch 'upstream/main' into 4175-add-request-ty…
coalest Dec 3, 2024
c1c76f3
Fix linting
coalest Dec 4, 2024
63ae1f3
Fix request_type_label method model spec
coalest Dec 4, 2024
3217b49
Remove unused for_families attribute from RequestCreateService
coalest Dec 4, 2024
1bb789b
Remove leftover print debugging statement
coalest Dec 4, 2024
9fa5b01
Fix/add specs for new request_type attribute
coalest Dec 4, 2024
d95422e
Revert submit button color change for family requests
coalest Dec 4, 2024
c0b9b56
Hover over request type abbreviation to see full text
coalest Dec 4, 2024
53aa437
Show full request type when viewing individual request
coalest Dec 4, 2024
512cef8
Fix linting
coalest Dec 4, 2024
bdc31ac
Merge branch 'main' into 4175-add-request-type-flag
coalest Dec 4, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions app/controllers/partners/requests_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ def show

def create
create_service = Partners::RequestCreateService.new(
request_type: "quantity",
partner_user_id: current_user.id,
comments: partner_request_params[:comments],
item_requests_attributes: partner_request_params[:item_requests_attributes]&.values || []
Expand All @@ -43,6 +44,7 @@ def create

def validate
@partner_request = Partners::RequestCreateService.new(
request_type: "quantity",
partner_user_id: current_user.id,
comments: partner_request_params[:comments],
item_requests_attributes: partner_request_params[:item_requests_attributes]&.values || []
Expand Down
4 changes: 3 additions & 1 deletion app/controllers/requests_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ def index
@partners = current_organization.partners.order(:name)
@statuses = Request.statuses.transform_keys(&:humanize)
@partner_users = User.where(id: @paginated_requests.pluck(:partner_user_id))
@request_types = Request.request_types.transform_keys(&:humanize)
@selected_request_type = filter_params[:by_request_type]
@selected_request_item = filter_params[:by_request_item_id]
@selected_partner = filter_params[:by_partner]
@selected_status = filter_params[:by_status]
Expand Down Expand Up @@ -71,6 +73,6 @@ def load_items
def filter_params
return {} unless params.key?(:filters)

params.require(:filters).permit(:by_request_item_id, :by_partner, :by_status)
params.require(:filters).permit(:by_request_item_id, :by_partner, :by_status, :by_request_type)
end
end
7 changes: 7 additions & 0 deletions app/models/request.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
# discard_reason :text
# discarded_at :datetime
# request_items :jsonb
# request_type :string
# status :integer default("pending")
# created_at :datetime not null
# updated_at :datetime not null
Expand All @@ -31,6 +32,7 @@ class Request < ApplicationRecord
has_many :child_item_requests, through: :item_requests

enum status: { pending: 0, started: 1, fulfilled: 2, discarded: 3 }, _prefix: true
enum request_type: %w[quantity individual child].map { |v| [v, v] }.to_h

validates :distribution_id, uniqueness: true, allow_nil: true
validate :item_requests_uniqueness_by_item_id
Expand All @@ -45,6 +47,7 @@ class Request < ApplicationRecord
scope :by_partner, ->(partner_id) { where(partner_id: partner_id) }
# status scope to allow filtering by status
scope :by_status, ->(status) { where(status: status) }
scope :by_request_type, ->(request_type) { where(request_type: request_type) }
scope :during, ->(range) { where(created_at: range) }
scope :for_csv_export, ->(organization, *) {
where(organization: organization)
Expand All @@ -60,6 +63,10 @@ def user_email
partner_user_id ? User.find_by(id: partner_user_id).email : Partner.find_by(id: partner_id).email
end

def request_type_label
request_type&.first&.capitalize
end

private

def item_requests_uniqueness_by_item_id
Expand Down
3 changes: 3 additions & 0 deletions app/services/exports/export_request_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ def base_table
"Requestor" => ->(request) {
request.partner.name
},
"Type" => ->(request) {
request.request_type&.humanize
},
"Status" => ->(request) {
request.status.humanize
}
Expand Down
8 changes: 6 additions & 2 deletions app/services/partners/family_request_create_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def call
request_create_svc = Partners::RequestCreateService.new(
partner_user_id: partner_user_id,
comments: comments,
for_families: @for_families,
request_type: request_type,
item_requests_attributes: item_requests_attributes
)

Expand All @@ -43,7 +43,7 @@ def initialize_only
Partners::RequestCreateService.new(
partner_user_id: partner_user_id,
comments: comments,
for_families: @for_families,
request_type: request_type,
item_requests_attributes: item_requests_attributes
).initialize_only
end
Expand Down Expand Up @@ -81,5 +81,9 @@ def convert_person_count_to_item_quantity(item_id:, person_count:)
def included_items_by_id
@included_items_by_id ||= Item.where(id: family_requests_attributes.pluck(:item_id)).index_by(&:id)
end

def request_type
@for_families ? "child" : "individual"
end
end
end
14 changes: 9 additions & 5 deletions app/services/partners/request_create_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,22 @@ class RequestCreateService

attr_reader :partner_request

def initialize(partner_user_id:, comments: nil, for_families: false, item_requests_attributes: [], additional_attrs: {})
def initialize(request_type:, partner_user_id:, comments: nil, item_requests_attributes: [], additional_attrs: {})
@partner_user_id = partner_user_id
@comments = comments
@for_families = for_families
@request_type = request_type
@item_requests_attributes = item_requests_attributes
@additional_attrs = additional_attrs
end

def call
@partner_request = ::Request.new(partner_id: partner.id,
@partner_request = ::Request.new(
partner_id: partner.id,
organization_id: organization_id,
comments: comments,
partner_user_id: partner_user_id)
request_type: request_type,
partner_user_id: partner_user_id
)
@partner_request = populate_item_request(@partner_request)
@partner_request.assign_attributes(additional_attrs)

Expand Down Expand Up @@ -44,6 +47,7 @@ def initialize_only
partner_request = ::Request.new(partner_id: partner.id,
organization_id: organization_id,
comments: comments,
request_type: request_type,
partner_user_id: partner_user_id)
partner_request = populate_item_request(partner_request)
partner_request.assign_attributes(additional_attrs)
Expand All @@ -52,7 +56,7 @@ def initialize_only

private

attr_reader :partner_user_id, :comments, :item_requests_attributes, :additional_attrs
attr_reader :partner_user_id, :comments, :item_requests_attributes, :additional_attrs, :request_type

def populate_item_request(partner_request)
# Exclude any line item that is completely empty
Expand Down
5 changes: 5 additions & 0 deletions app/views/requests/_request_row.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@
<td>
<%= request_row.comments %>
</td>
<td>
<abbr class="text-decoration-none" title="<%= request_row.request_type&.humanize %>">
<%= request_row.request_type_label %>
</abbr>
</td>
<td>
<%= render partial: "status", locals: {status: request_row.status} %>
</td>
Expand Down
4 changes: 4 additions & 0 deletions app/views/requests/index.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@
<%= filter_select(scope: :by_partner, collection: @partners, selected: @selected_partner) %>
</div>
<% end %>
<div class="form-group col-lg-3 col-md-3 col-sm-6 col-xs-12">
<%= filter_select(scope: :by_request_type, collection: @request_types, key: :last, value: :first, selected: @selected_request_type) %>
</div>
<div class="form-group col-lg-3 col-md-3 col-sm-6 col-xs-12">
<%= filter_select(scope: :by_status, collection: @statuses, key: :last, value: :first, selected: @selected_status) %>
</div>
Expand Down Expand Up @@ -98,6 +101,7 @@
<th>Request Sender</th>
<th># of Items (Request Limit)</th>
<th>Comments</th>
<th>Type</th>
<th>Status</th>
<th class="text-right">Actions</th>
</tr>
Expand Down
2 changes: 2 additions & 0 deletions app/views/requests/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
<tr>
<th>Request was sent by:</th>
<th>Request Sender:</th>
<th>Request Type:</th>
<th>Request Status:</th>
<th>Comments:</th>
</tr>
Expand All @@ -45,6 +46,7 @@
<tr>
<td><%= @request.partner.name %></td>
<td><%= @request.partner_user&.formatted_email %></td>
<td><%= @request.request_type&.humanize %></td>
<td><%= render partial: "status", locals: {status: @request.status} %></td>
<td><%= @request.comments || 'None' %></td>
</tr>
Expand Down
5 changes: 5 additions & 0 deletions db/migrate/20240315190152_add_type_to_requests.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class AddTypeToRequests < ActiveRecord::Migration[7.0]
def change
add_column :requests, :request_type, :string
end
end
1 change: 1 addition & 0 deletions db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -712,6 +712,7 @@
t.datetime "discarded_at", precision: nil
t.text "discard_reason"
t.integer "partner_user_id"
t.string "request_type"
t.index ["discarded_at"], name: "index_requests_on_discarded_at"
t.index ["distribution_id"], name: "index_requests_on_distribution_id", unique: true
t.index ["organization_id"], name: "index_requests_on_organization_id"
Expand Down
13 changes: 13 additions & 0 deletions spec/factories/requests.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
# discard_reason :text
# discarded_at :datetime
# request_items :jsonb
# request_type :string
# status :integer default("pending")
# created_at :datetime not null
# updated_at :datetime not null
Expand Down Expand Up @@ -57,6 +58,18 @@ def random_request_items
status { 'fulfilled' }
end

trait :quantity do
request_type { 'quantity' }
end

trait :individual do
request_type { 'individual' }
end

trait :child do
request_type { 'child' }
end

trait :pending do
status { 'pending' }
end
Expand Down
9 changes: 9 additions & 0 deletions spec/models/request_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
# discard_reason :text
# discarded_at :datetime
# request_items :jsonb
# request_type :string
# status :integer default("pending")
# created_at :datetime not null
# updated_at :datetime not null
Expand Down Expand Up @@ -127,6 +128,14 @@
end
end

describe "request_type_label" do
let(:request) { build(:request, request_type: "individual") }

it "returns the the first letter of the request_type capitalized" do
expect(request.request_type_label).to eq("I")
end
end

describe "versioning" do
it { is_expected.to be_versioned }
end
Expand Down
2 changes: 1 addition & 1 deletion spec/requests/items_requests_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@
it 'shows custom request units when flipper enabled' do
Flipper.enable(:enable_packs)
get item_path(id: item.id)
print(response.body)

expect(response.body).to include('Custom Units')
expect(response.body).to include("ITEM1; ITEM2")
end
Expand Down
Loading
Loading