diff --git a/app/controllers/admin/registrars_controller.rb b/app/controllers/admin/registrars_controller.rb index 4e2a7cb15..a803a8e7d 100644 --- a/app/controllers/admin/registrars_controller.rb +++ b/app/controllers/admin/registrars_controller.rb @@ -1,11 +1,13 @@ module Admin - class RegistrarsController < BaseController + class RegistrarsController < BaseController # rubocop:disable Metrics/ClassLength load_and_authorize_resource before_action :set_registrar, only: [:show, :edit, :update, :destroy] before_action :set_registrar_status_filter, only: [:index] helper_method :registry_vat_rate helper_method :iban_max_length + SQL_SUM_STR = 'sum(case active when TRUE then 1 else 0 end)'.freeze + def index registrars = filter_by_status @q = registrars.ransack(params[:q]) @@ -58,14 +60,28 @@ module Admin def filter_by_status case params[:status] when 'Active' - Registrar.includes(:accounts, :api_users).where.not(api_users: { id: nil }).ordered + active_registrars when 'Inactive' - Registrar.includes(:accounts, :api_users).where(api_users: { id: nil }).ordered + inactive_registrars else Registrar.includes(:accounts, :api_users).ordered end end + def active_registrars + Registrar.includes(:accounts, :api_users).where( + id: ApiUser.having("#{SQL_SUM_STR} > 0").group(:registrar_id).pluck(:registrar_id) + ).ordered + end + + def inactive_registrars + Registrar.includes(:accounts, :api_users).where(api_users: { id: nil }).or( + Registrar.includes(:accounts, :api_users).where( + id: ApiUser.having("#{SQL_SUM_STR} = 0").group(:registrar_id).pluck(:registrar_id) + ) + ).ordered + end + def set_registrar_status_filter params[:status] ||= 'Active' end