Process payments: Create new invoice by transaction to allow direct top ups

This commit is contained in:
Karl Erik Õunapuu 2020-09-07 16:58:27 +03:00
parent 39a21cb790
commit be960457e6
No known key found for this signature in database
GPG key ID: C9DD647298A34764
4 changed files with 23 additions and 6 deletions

View file

@ -31,12 +31,18 @@ class BankTransaction < ApplicationRecord
@registrar ||= Invoice.find_by(reference_no: parsed_ref_number)&.buyer
end
def autobindable?
return false if binded?
return false unless registrar
return false unless invoice
return false unless invoice.payable?
true
end
# For successful binding, reference number, invoice id and sum must match with the invoice
def autobind_invoice(manual: false)
return if binded?
return unless registrar
return unless invoice
return unless invoice.payable?
return unless autobindable?
channel = if manual
'admin_payment'

View file

@ -112,6 +112,15 @@ class Invoice < ApplicationRecord
e_invoice_sent_at.present?
end
def self.create_from_transaction!(transaction)
registrar_user = Registrar.find_by(reference_no: transasction.parsed_ref_number)
return unless registrar_user
registrar_user.issue_prepayment_invoice(amount: transaction.sum,
description: 'Direct top-up via bank transfer',
paid: true)
end
private
def apply_default_buyer_vat_no

View file

@ -54,7 +54,7 @@ class Registrar < ApplicationRecord
end
end
def issue_prepayment_invoice(amount, description = nil)
def issue_prepayment_invoice(amount, description = nil, paid: false)
vat_rate = ::Invoice::VatRateCalculator.new(registrar: self).calculate
invoice = invoices.create!(
@ -99,7 +99,7 @@ class Registrar < ApplicationRecord
}
]
)
SendEInvoiceJob.enqueue(invoice.id)
SendEInvoiceJob.enqueue(invoice.id) unless paid
invoice
end

View file

@ -36,6 +36,8 @@ namespace :invoices do
reference_no: incoming_transaction.payment_reference_number,
description: incoming_transaction.payment_description }
transaction = bank_statement.bank_transactions.create!(transaction_attributes)
Invoice.create_from_transaction!(transaction) unless transaction.autobindable?
transaction.autobind_invoice
end
end