Sha256: 56f4904fd9de5e587a65e0cac0cb483283e607ae0bdf4140fe398d62bf1898f2

Contents?: true

Size: 1.71 KB

Versions: 4

Compression:

Stored size: 1.71 KB

Contents

# frozen_string_literal: true

require_dependency "renalware/admissions"

module Renalware
  module Admissions
    class ConsultQuery
      attr_reader :query

      def initialize(query = nil)
        @query = query || {}
        @query[:ended_on_null] ||= true
        @query[:s] ||= "hospital_ward_name"
      end

      def call
        search.result
      end

      # Note we *MUST* join onto patients for PatientsRansackHelper.identity_match to work.
      # It might be better to refactor PatientsRansackHelper so we can include where required
      # eg below using .extending(PatientsRansackHelper) rather than relying on it being in
      # included in the model file.
      # note that adding .includes(:created_by) her creates an ambigous column
      # 'family_name' error
      # rubocop:disable Metrics/MethodLength
      def search
        @search ||= begin
          Consult
            .extend(RansackScopes)
            .joins(:patient)
            .eager_load(patient: [current_modality: :description])
            .includes(
              :consult_site,
              :hospital_ward,
              patient: { current_modality: :description }
            )
            .order(created_at: :desc)
            .ransack(query)
        end
      end
      # rubocop:enable Metrics/MethodLength

      module RansackScopes
        def self.extended(base)
          # Using a custom ransacker here in order to sort by modality description name
          # because using a predicate like  :patient_current_modality_description_name
          # results in an INNER JOIN onto modalities.
          base.ransacker :modality_desc do
            Arel.sql("modality_descriptions.name")
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
renalware-core-2.0.55 app/models/renalware/admissions/consult_query.rb
renalware-core-2.0.54 app/models/renalware/admissions/consult_query.rb
renalware-core-2.0.53 app/models/renalware/admissions/consult_query.rb
renalware-core-2.0.52 app/models/renalware/admissions/consult_query.rb