Class: Lab::Lims::AcknowledgementWorker

Inherits:
Object
  • Object
show all
Includes:
Utils
Defined in:
app/services/lab/lims/acknowledgement_worker.rb

Overview

This class is responsible for handling the acknowledgement of lab orders

Constant Summary collapse

SECONDS_TO_WAIT_FOR_ORDERS =
30

Constants included from Utils

Utils::LIMS_LOG_PATH, Utils::TEST_NAME_MAPPINGS

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Utils

find_concept_by_name, lab_user, #logger, parse_date, structify, translate_test_name

Constructor Details

#initialize(lims_api, start_date: nil) ⇒ AcknowledgementWorker

Returns a new instance of AcknowledgementWorker.



13
14
15
16
# File 'app/services/lab/lims/acknowledgement_worker.rb', line 13

def initialize(lims_api, start_date: nil)
  @lims_api = lims_api
  @start_date = start_date
end

Instance Attribute Details

#lims_apiObject (readonly)

Returns the value of attribute lims_api.



7
8
9
# File 'app/services/lab/lims/acknowledgement_worker.rb', line 7

def lims_api
  @lims_api
end

#start_dateObject (readonly)

Returns the value of attribute start_date.



7
8
9
# File 'app/services/lab/lims/acknowledgement_worker.rb', line 7

def start_date
  @start_date
end

Instance Method Details

#push_acknowledgement(batch_size: 1000, wait: false) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'app/services/lab/lims/acknowledgement_worker.rb', line 18

def push_acknowledgement(batch_size: 1000, wait: false)
  last_order_id = 0
  loop do
    logger.info('Looking for new acknowledgements to push to LIMS...')
    acknowledgements = Lab::AcknowledgementService.acknowledgements_pending_sync(batch_size,
                                                                                 start_date: start_date,
                                                                                 last_order_id: last_order_id).all

    logger.debug("Found #{acknowledgements.size} acknowledgements...")
    acknowledgements.each do |acknowledgement|
      Lab::AcknowledgementService.push_acknowledgement(acknowledgement, @lims_api)
      last_order_id = acknowledgement.order_id
    rescue StandardError => e
      logger.error("Failed to push acknowledgement ##{acknowledgement.order_id}: #{e.class} - #{e.message}")
    end

    # If no records found or not waiting, check if we should continue
    if acknowledgements.empty?
      break unless wait
    elsif !wait && acknowledgements.size < batch_size
      # Processed final partial batch in one-shot mode
      logger.info("Processed final batch of #{acknowledgements.size} acknowledgements")
      break
    elsif !wait
      # More records likely exist, continue processing
      logger.info('Batch complete, checking for more acknowledgements...')
      next
    end

    logger.info('Waiting for acknowledgements...')
    sleep(Lab::Lims::Config.updates_poll_frequency)
  end
end