scinote-web/app/jobs/label_printers/print_job.rb

43 lines
1.3 KiB
Ruby

# frozen_string_literal: true
module LabelPrinters
class PrintJob < ApplicationJob
MAX_STATUS_UPDATES = 10
queue_as :high_priority
discard_on(StandardError) do |job, _error|
label_printer = job.arguments.first
label_printer.update!(status: :error)
end
def perform(label_printer, payload, copy_count)
case label_printer.type_of
when 'fluics'
api_client = LabelPrinters::Fluics::ApiClient.new(
label_printer.fluics_api_key
)
copy_count.times do
response = api_client.print(label_printer.fluics_lid, payload)
status = response['status'] == 'OK' ? :ready : LabelPrinter::FLUICS_STATUS_MAP[response['printerStatus']]
label_printer.update!(status: status)
break if status != :ready
# remove first matching job_id from queue (one label out of batch has been printed)
label_printer.with_lock do
job_ids = label_printer.current_print_job_ids
job_ids.delete_at(job_ids.index(job_id) || job_ids.length)
label_printer.update!(current_print_job_ids: job_ids)
end
end
end
# mark as unreachable if no final state is reached
label_printer.update!(status: :unreachable) unless label_printer.status.in? %w(ready out_of_labels error)
end
end
end