diff --git a/app/admin/routing/destinations.rb b/app/admin/routing/destinations.rb index ba601b001..1debd2c9d 100644 --- a/app/admin/routing/destinations.rb +++ b/app/admin/routing/destinations.rb @@ -52,8 +52,8 @@ acts_as_import resource_class: Importing::Destination, skip_columns: [:routing_tag_ids] - scope :low_quality - scope :time_valid + scope :low_quality, show_count: false + scope :time_valid, show_count: false filter :id filter :uuid_equals, label: 'UUID' @@ -61,7 +61,7 @@ filter :prefix filter :routing_for_contains, as: :string, input_html: { class: 'search_filter_string' } filter :rate_group, input_html: { class: 'chosen' } - filter :rate_group_rateplans_id_eq, as: :select, input_html: { class: 'chosen' }, label: 'Rateplan', collection: -> { Routing::Rateplan.all } + filter :rateplan_id_filter, as: :select, input_html: { class: 'chosen' }, label: 'Rateplan', collection: -> { Routing::Rateplan.all } filter :reject_calls, as: :select, collection: [['Yes', true], ['No', false]] filter :initial_rate filter :next_rate diff --git a/app/models/routing/destination.rb b/app/models/routing/destination.rb index f88f02e7e..5135cd56b 100644 --- a/app/models/routing/destination.rb +++ b/app/models/routing/destination.rb @@ -69,6 +69,10 @@ class Routing::Destination < ApplicationRecord scope :low_quality, -> { where quality_alarm: true } scope :time_valid, -> { where('valid_till >= :time AND valid_from < :time', time: Time.now) } + scope :rateplan_id_filter, lambda { |value| + rate_group_ids = Routing::RatePlanGroup.where(rateplan_id: value).pluck(:rate_group_id) + where('rate_group_id IN (?)', rate_group_ids) + } scope :where_customer, lambda { |id| joins(:rate_group).joins(:rateplans).joins(:customers_auths).where(CustomersAuth.table_name => { customer_id: id }) @@ -171,6 +175,7 @@ def self.ransackable_scopes(_auth_object = nil) routing_tag_ids_covers tagged routing_tag_ids_count_equals + rateplan_id_filter ] end end diff --git a/app/models/routing/rate_plan_group.rb b/app/models/routing/rate_plan_group.rb new file mode 100644 index 000000000..66d8a315f --- /dev/null +++ b/app/models/routing/rate_plan_group.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: class4.rate_plan_groups +# +# id :integer(4) not null, primary key +# rate_group_id :integer(4) not null +# rateplan_id :integer(4) not null +# +# Indexes +# +# rate_plan_groups_rateplan_id_rate_group_id_idx (rateplan_id,rate_group_id) UNIQUE +# +# Foreign Keys +# +# rate_plan_groups_rate_group_id_fkey (rate_group_id => rate_groups.id) +# rate_plan_groups_rateplan_id_fkey (rateplan_id => rateplans.id) +# +module Routing + class RatePlanGroup < ApplicationRecord + self.table_name = 'class4.rate_plan_groups' + end +end diff --git a/spec/features/routing/destinations/filters_spec.rb b/spec/features/routing/destinations/filters_spec.rb index 5f3d4bfd3..a5b772d3d 100644 --- a/spec/features/routing/destinations/filters_spec.rb +++ b/spec/features/routing/destinations/filters_spec.rb @@ -256,4 +256,25 @@ end end end + + context 'filter by Rateplan', js: false do + subject { click_button :Filter } + + let!(:rate_group) { FactoryBot.create(:rate_group) } + let!(:rate_group_second) { FactoryBot.create(:rate_group) } + let!(:rateplan) { FactoryBot.create(:rateplan, rate_groups: [rate_group, rate_group_second]) } + let!(:record) { FactoryBot.create(:destination, rate_group:) } + + before do + visit destinations_path + select rateplan.name, from: 'Rateplan' + end + + it 'should render filtered records only' do + subject + + expect(page).to have_table_row count: 1 + expect(page).to have_table_cell column: 'Id', exact_text: record.id.to_s + end + end end