Add idempotent Que job for e-invoice sending

This commit is contained in:
Alex Sherman 2020-02-04 16:00:24 +05:00
parent 07653fa710
commit 2663c550fa
3 changed files with 47 additions and 1 deletions

View file

@ -0,0 +1,39 @@
class SendEInvoiceJob < Que::Job
def run(invoice)
return if invoice.e_invoice_sent_at
e_invoice = invoice.to_e_invoice
e_invoice.deliver
ActiveRecord::Base.transaction do
invoice.update(e_invoice_sent_at: Time.zone.now)
log_success(invoice)
destroy
end
rescue Savon::Error => e
log_error(invoice: invoice, error: e)
end
private
def log_success(invoice)
message = "E-Invoice for an invoice with ID # #{invoice.id} was sent successfully"
logger.info message
end
def log_error(invoice:, error:)
message = <<~TEXT.squish
There was an error sending e-invoice for invoice with ID # #{invoice.id}.
The error message was the following: #{error}.
This job will retry
TEXT
logger.error message
end
def logger
Rails.logger
end
end

View file

@ -0,0 +1,5 @@
class AddEInvoiceSentAtToInvoice < ActiveRecord::Migration[5.0]
def change
add_column :invoices, :e_invoice_sent_at, :datetime
end
end

View file

@ -886,6 +886,7 @@ CREATE TABLE public.invoices (
in_directo boolean DEFAULT false,
buyer_vat_no character varying,
issue_date date NOT NULL,
e_invoice_sent_at timestamp without time zone,
CONSTRAINT invoices_due_date_is_not_before_issue_date CHECK ((due_date >= issue_date))
);
@ -4339,6 +4340,7 @@ INSERT INTO "schema_migrations" (version) VALUES
('20191212133136'),
('20191227110904'),
('20200113091254'),
('20200115102202');
('20200115102202'),
('20200204103125');