Class: DeliveryInvoicingWorker

Inherits:
Object
  • Object
show all
Includes:
Sidekiq::Job
Defined in:
app/workers/delivery_invoicing_worker.rb

Instance Method Summary collapse

Instance Method Details

#perform(delivery_id) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'app/workers/delivery_invoicing_worker.rb', line 16

def perform(delivery_id)
  delivery = Delivery.find(delivery_id)
  if delivery.invoiced?
    logger.info 'delivery already invoiced'
    true
  elsif delivery.total.to_f.negative?
    logger.error "Skipping invoicing for delivery #{delivery_id}: negative total ($#{delivery.total})"
    ErrorReporting.error(RuntimeError.new("Cannot invoice delivery #{delivery_id}: negative total ($#{delivery.total})"))
  else
    # CreateInvoiceFromDelivery service handles advisory locking internally
    logger.info 'no invoice found, calling delivery.trigger_invoiced!'
    invoke_trigger_invoiced!(delivery, delivery_id)
    verify_post_commit_integrity(delivery, delivery_id)
    logger.info 'invoicing finished'
  end
end