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
69 |
# File 'app/services/lab/orders_search_service.rb', line 69 def fetch_results(order); end |
.filter_orders_by_date(orders:, date: nil, end_date: nil) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'app/services/lab/orders_search_service.rb', line 36 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
49 50 51 52 53 54 55 |
# File 'app/services/lab/orders_search_service.rb', line 49 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 19 20 21 22 23 24 |
# File 'app/services/lab/orders_search_service.rb', line 7 def find_orders(filters) extra_filters = pop_filters(filters, :date, :end_date, :status) 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.map { |order| Lab::LabOrderSerializer.serialize_order(order) } end |
.find_orders_without_results(patient_id: nil) ⇒ Object
26 27 28 29 30 31 32 33 34 |
# File 'app/services/lab/orders_search_service.rb', line 26 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: patient_id) if patient_id query end |
.pop_filters(params, *filters) ⇒ Object
61 62 63 64 65 66 67 |
# File 'app/services/lab/orders_search_service.rb', line 61 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
57 58 59 |
# File 'app/services/lab/orders_search_service.rb', line 57 def unknown_concept_id ConceptName.find_by_name!('Unknown').concept_id end |