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
- .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
63 |
# File 'app/services/lab/orders_search_service.rb', line 63 def fetch_results(order); end |
.filter_orders_by_date(orders, date: nil, end_date: nil) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'app/services/lab/orders_search_service.rb', line 30 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
43 44 45 46 47 48 49 |
# File 'app/services/lab/orders_search_service.rb', line 43 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 |
.find_orders(filters) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 |
# File 'app/services/lab/orders_search_service.rb', line 7 def find_orders(filters) extra_filters = pop_filters(filters, :date, :end_date, :status) orders = Lab::LabOrder.prefetch_relationships .where(filters) .order(start_date: :desc) orders = filter_orders_by_status(orders, **pop_filters(extra_filters, :status)) orders = filter_orders_by_date(orders, **extra_filters) orders.map { |order| Lab::LabOrderSerializer.serialize_order(order) } end |
.find_orders_without_results(patient_id: nil) ⇒ Object
20 21 22 23 24 25 26 27 28 |
# File 'app/services/lab/orders_search_service.rb', line 20 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
55 56 57 58 59 60 61 |
# File 'app/services/lab/orders_search_service.rb', line 55 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
51 52 53 |
# File 'app/services/lab/orders_search_service.rb', line 51 def unknown_concept_id ConceptName.find_by_name!('Unknown').concept_id end |