Module: Lab::OrdersSearchService
- Defined in:
- app/services/lab/orders_search_service.rb
Overview
Search Lab orders.
Class Method Summary collapse
- .fetch_results(order) ⇒ Object
- .filter_orders_by_date(orders:, date: nil, end_date: nil) ⇒ Object
- .filter_orders_by_status(orders:, status: nil) ⇒ Object
- .filter_orders_by_visit_id(orders:, visit_id: nil) ⇒ Object
- .find_orders(filters) ⇒ Object
- .find_orders_without_results(patient_id: nil) ⇒ Object
- .pop_filters(params, *filters) ⇒ Object
- .unknown_concept_id ⇒ Object
Class Method Details
.fetch_results(order) ⇒ Object
76 |
# File 'app/services/lab/orders_search_service.rb', line 76 def fetch_results(order); end |
.filter_orders_by_date(orders:, date: nil, end_date: nil) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'app/services/lab/orders_search_service.rb', line 37 def filter_orders_by_date(orders:, date: nil, end_date: nil) date = date&.to_date end_date = end_date&.to_date return orders.where('start_date BETWEEN ? AND ?', date, end_date + 1.day) if date && end_date return orders.where('start_date BETWEEN ? AND ?', date, date + 1.day) if date return orders.where('start_date < ?', end_date + 1.day) if end_date orders end |
.filter_orders_by_status(orders:, status: nil) ⇒ Object
50 51 52 53 54 55 56 |
# File 'app/services/lab/orders_search_service.rb', line 50 def filter_orders_by_status(orders:, status: nil) case status&.downcase when 'ordered' then orders.where(concept_id: unknown_concept_id) when 'drawn' then orders.where.not(concept_id: unknown_concept_id) else orders end end |
.filter_orders_by_visit_id(orders:, visit_id: nil) ⇒ Object
58 59 60 61 62 |
# File 'app/services/lab/orders_search_service.rb', line 58 def filter_orders_by_visit_id(orders:, visit_id: nil) return orders unless visit_id.present? orders.joins(:encounter).where(encounter: { visit_id: visit_id }) end |
.find_orders(filters) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'app/services/lab/orders_search_service.rb', line 7 def find_orders(filters) extra_filters = pop_filters(filters, :date, :end_date, :status, :visit_id) uuid = filters.delete(:patient) patient = Patient.find(uuid) if uuid filters.merge!(patient_id: patient.id) if patient orders = Lab::LabOrder.prefetch_relationships .where(filters) orders = orders.order(start_date: :desc) if Order.column_names.include?('start_date') orders = orders.order(date_created: :desc) unless Order.column_names.include?('start_date') orders = filter_orders_by_status(orders: orders, status: extra_filters[:status]) orders = filter_orders_by_date(orders: orders, date: extra_filters[:date], end_date: extra_filters[:end_date]) orders = filter_orders_by_visit_id(orders: orders, visit_id: extra_filters[:visit_id]) orders.map { |order| Lab::LabOrderSerializer.serialize_order(order) } end |
.find_orders_without_results(patient_id: nil) ⇒ Object
27 28 29 30 31 32 33 34 35 |
# File 'app/services/lab/orders_search_service.rb', line 27 def find_orders_without_results(patient_id: nil) results_query = Lab::LabResult.all results_query = results_query.where(person_id: patient_id) if patient_id query = Lab::LabOrder.where.not(order_id: results_query.select(:order_id)) query = query.where(patient_id:) if patient_id query end |
.pop_filters(params, *filters) ⇒ Object
68 69 70 71 72 73 74 |
# File 'app/services/lab/orders_search_service.rb', line 68 def pop_filters(params, *filters) filters.each_with_object({}) do |filter, popped_params| next unless params.key?(filter) popped_params[filter.to_sym] = params.delete(filter) end end |
.unknown_concept_id ⇒ Object
64 65 66 |
# File 'app/services/lab/orders_search_service.rb', line 64 def unknown_concept_id ConceptName.find_by_name!('Unknown').concept_id end |