Skip to content

Commit 7b24e3b

Browse files
committed
Controller (app/controllers/admin/deduplicate_patients_controller.rb):
- Added filter_enabled? method that checks Flipper.enabled?(:patient_deduplication_filter, current_admin) - before_action :set_filter_options now only runs if filter is enabled - Filter logic in show action is conditional on feature flag
1 parent cac5c00 commit 7b24e3b

2 files changed

Lines changed: 40 additions & 31 deletions

File tree

app/controllers/admin/deduplicate_patients_controller.rb

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,26 @@
11
class Admin::DeduplicatePatientsController < AdminController
22
skip_before_action :verify_authenticity_token
3-
before_action :set_filter_options, only: [:show]
3+
before_action :set_filter_options, only: [:show], if: :filter_enabled?
44
DUPLICATE_LIMIT = 250
55

66
def show
77
facilities = current_admin.accessible_facilities(:manage)
88
authorize { facilities.any? }
99

10-
# Apply facility filter if selected
11-
filtered_facilities = if @selected_facility.present?
10+
# Apply facility filter if selected and feature flag is enabled
11+
filtered_facilities = if filter_enabled? && @selected_facility.present?
1212
facilities.where(id: @selected_facility.id)
13-
elsif @selected_district.present?
13+
elsif filter_enabled? && @selected_district.present?
1414
facilities.where(id: @selected_district.facilities)
1515
else
1616
facilities
1717
end
1818

1919
# Scoping by facilities is costly for users who have a lot of facilities
20-
duplicate_patient_ids = if current_admin.accessible_organizations(:manage).any? && !@selected_district.present? && !@selected_facility.present?
20+
use_all_organizations = current_admin.accessible_organizations(:manage).any? &&
21+
(!filter_enabled? || (!@selected_district.present? && !@selected_facility.present?))
22+
23+
duplicate_patient_ids = if use_all_organizations
2124
PatientDeduplication::Strategies.identifier_excluding_full_name_match(limit: DUPLICATE_LIMIT)
2225
else
2326
PatientDeduplication::Strategies.identifier_excluding_full_name_match_for_facilities(
@@ -88,4 +91,8 @@ def populate_facilities
8891
def set_selected_facility
8992
@selected_facility = @facilities.find_by(id: params[:facility_id]) if params[:facility_id].present?
9093
end
94+
95+
def filter_enabled?
96+
Flipper.enabled?(:patient_deduplication_filter, current_admin)
97+
end
9198
end

app/views/admin/deduplicate_patients/show.html.erb

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,36 @@
11
<h1 class="page-title mb-3">Merge duplicate patients</h1>
22

3-
<%= bootstrap_form_with(url: admin_deduplication_path, method: :get, layout: :horizontal, class: "mb-4") do |form| %>
4-
<% html_select_options = { onchange: "this.form.submit();" }
5-
searchable_select_options = html_select_options.merge(class: "selectpicker", data: {live_search: true}) %>
6-
<div class="form-row">
7-
<div id="district-selector" class="form-group col-md-4">
8-
<%= form.select :district_slug,
9-
@districts.order(:name).map { |district| [district.name, district.slug] },
10-
{
11-
hide_label: true,
12-
selected: @selected_district&.slug,
13-
wrapper: false
14-
},
15-
searchable_select_options
16-
%>
17-
</div>
18-
<div id="facility-selector" class="form-group col-md-4">
19-
<%= form.select :facility_id,
20-
@facilities.order(:name).map { |facility| [facility.label_with_district, facility.id] },
21-
{
3+
<% if Flipper.enabled?(:patient_deduplication_filter, current_admin) %>
4+
<%= bootstrap_form_with(url: admin_deduplication_path, method: :get, layout: :horizontal, class: "mb-4") do |form| %>
5+
<% html_select_options = { onchange: "this.form.submit();" }
6+
searchable_select_options = html_select_options.merge(class: "selectpicker", data: {live_search: true}) %>
7+
<div class="form-row">
8+
<div id="district-selector" class="form-group col-md-4">
9+
<%= form.select :district_slug,
10+
@districts.order(:name).map { |district| [district.name, district.slug] },
11+
{
2212
hide_label: true,
23-
include_blank: "All facilities",
24-
selected: @selected_facility&.id,
13+
selected: @selected_district&.slug,
2514
wrapper: false
26-
},
27-
searchable_select_options
28-
%>
15+
},
16+
searchable_select_options
17+
%>
18+
</div>
19+
<div id="facility-selector" class="form-group col-md-4">
20+
<%= form.select :facility_id,
21+
@facilities.order(:name).map { |facility| [facility.label_with_district, facility.id] },
22+
{
23+
hide_label: true,
24+
include_blank: "All facilities",
25+
selected: @selected_facility&.id,
26+
wrapper: false
27+
},
28+
searchable_select_options
29+
%>
30+
</div>
2931
</div>
30-
</div>
31-
<%= form.submit "Filter", style: "display: none" %>
32+
<%= form.submit "Filter", style: "display: none" %>
33+
<% end %>
3234
<% end %>
3335

3436
<div class="card">

0 commit comments

Comments
 (0)