mirror of
https://github.com/internetee/registry.git
synced 2025-06-12 07:34:45 +02:00
Bind specific invoice when paid via Banklink / EveryPay
Fix styling issues Move redundant logic to shared base
This commit is contained in:
parent
cbbfbae99e
commit
0cf2ff92a3
7 changed files with 50 additions and 14 deletions
|
@ -27,6 +27,8 @@ class Registrar
|
||||||
opts = { response: params }
|
opts = { response: params }
|
||||||
@payment = ::PaymentOrders.create_with_type(params[:bank], invoice, opts)
|
@payment = ::PaymentOrders.create_with_type(params[:bank], invoice, opts)
|
||||||
if @payment.valid_response_from_intermediary? && @payment.settled_payment?
|
if @payment.valid_response_from_intermediary? && @payment.settled_payment?
|
||||||
|
Rails.logger.info("User paid invoice ##{invoice.number} successfully")
|
||||||
|
|
||||||
@payment.complete_transaction
|
@payment.complete_transaction
|
||||||
|
|
||||||
if invoice.paid?
|
if invoice.paid?
|
||||||
|
|
|
@ -48,6 +48,7 @@ class BankTransaction < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
invoice = Invoice.find_by(number: invoice_no)
|
invoice = Invoice.find_by(number: invoice_no)
|
||||||
|
@registrar = invoice.buyer
|
||||||
|
|
||||||
unless invoice
|
unless invoice
|
||||||
errors.add(:base, I18n.t('invoice_was_not_found'))
|
errors.add(:base, I18n.t('invoice_was_not_found'))
|
||||||
|
|
|
@ -51,11 +51,7 @@ module PaymentOrders
|
||||||
def complete_transaction
|
def complete_transaction
|
||||||
return unless valid_successful_transaction?
|
return unless valid_successful_transaction?
|
||||||
|
|
||||||
transaction = BankTransaction.find_by(
|
transaction = compose_or_find_transaction
|
||||||
description: invoice.order,
|
|
||||||
currency: invoice.currency,
|
|
||||||
iban: invoice.seller_iban
|
|
||||||
)
|
|
||||||
|
|
||||||
transaction.sum = response['VK_AMOUNT']
|
transaction.sum = response['VK_AMOUNT']
|
||||||
transaction.bank_reference = response['VK_T_NO']
|
transaction.bank_reference = response['VK_T_NO']
|
||||||
|
@ -65,7 +61,12 @@ module PaymentOrders
|
||||||
transaction.paid_at = Time.parse(response["VK_T_DATETIME"])
|
transaction.paid_at = Time.parse(response["VK_T_DATETIME"])
|
||||||
|
|
||||||
transaction.save!
|
transaction.save!
|
||||||
transaction.autobind_invoice
|
transaction.bind_invoice(invoice.number)
|
||||||
|
if transaction.errors.empty?
|
||||||
|
Rails.logger.info("Invoice ##{invoice.number} was marked as paid")
|
||||||
|
else
|
||||||
|
Rails.logger.error("Failed to bind invoice ##{invoice.number}")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def settled_payment?
|
def settled_payment?
|
||||||
|
|
|
@ -26,6 +26,32 @@ module PaymentOrders
|
||||||
transaction.save!
|
transaction.save!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def compose_or_find_transaction
|
||||||
|
transaction = BankTransaction.find_by(base_transaction_params)
|
||||||
|
|
||||||
|
# Transaction already autobinded (possibly) invalid invoice
|
||||||
|
if transaction.binded?
|
||||||
|
Rails.logger.info("Transaction #{transaction.id} is already binded")
|
||||||
|
Rails.logger.info('Creating new BankTransaction record.')
|
||||||
|
|
||||||
|
transaction = new_base_transaction
|
||||||
|
end
|
||||||
|
|
||||||
|
transaction
|
||||||
|
end
|
||||||
|
|
||||||
|
def new_base_transaction
|
||||||
|
BankTransaction.new(base_transaction_params)
|
||||||
|
end
|
||||||
|
|
||||||
|
def base_transaction_params
|
||||||
|
{
|
||||||
|
description: invoice.order,
|
||||||
|
currency: invoice.currency,
|
||||||
|
iban: invoice.seller_iban,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
def form_url
|
def form_url
|
||||||
ENV["payments_#{type}_url"]
|
ENV["payments_#{type}_url"]
|
||||||
end
|
end
|
||||||
|
|
|
@ -20,6 +20,7 @@ module PaymentOrders
|
||||||
|
|
||||||
def valid_response_from_intermediary?
|
def valid_response_from_intermediary?
|
||||||
return false unless response
|
return false unless response
|
||||||
|
|
||||||
valid_hmac? && valid_amount? && valid_account?
|
valid_hmac? && valid_amount? && valid_account?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -30,18 +31,19 @@ module PaymentOrders
|
||||||
def complete_transaction
|
def complete_transaction
|
||||||
return unless valid_response_from_intermediary? && settled_payment?
|
return unless valid_response_from_intermediary? && settled_payment?
|
||||||
|
|
||||||
transaction = BankTransaction.find_by(
|
transaction = compose_or_find_transaction
|
||||||
description: invoice.order,
|
|
||||||
currency: invoice.currency,
|
|
||||||
iban: invoice.seller_iban
|
|
||||||
)
|
|
||||||
|
|
||||||
transaction.sum = response[:amount]
|
transaction.sum = response[:amount]
|
||||||
transaction.paid_at = Date.strptime(response[:timestamp], '%s')
|
transaction.paid_at = Date.strptime(response[:timestamp], '%s')
|
||||||
transaction.buyer_name = response[:cc_holder_name]
|
transaction.buyer_name = response[:cc_holder_name]
|
||||||
|
|
||||||
transaction.save!
|
transaction.save!
|
||||||
transaction.autobind_invoice
|
transaction.bind_invoice(invoice.number)
|
||||||
|
if transaction.errors.empty?
|
||||||
|
Rails.logger.info("Invoice ##{invoice.number} marked as paid")
|
||||||
|
else
|
||||||
|
Rails.logger.error("Failed to bind invoice ##{invoice.number}")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -114,7 +114,9 @@ class BankLinkTest < ActiveSupport::TestCase
|
||||||
mock_transaction.expect(:paid_at= , Date.parse('2018-04-01 00:30:00 +0300'), [Time.parse('2018-04-01T00:30:00+0300')])
|
mock_transaction.expect(:paid_at= , Date.parse('2018-04-01 00:30:00 +0300'), [Time.parse('2018-04-01T00:30:00+0300')])
|
||||||
mock_transaction.expect(:buyer_name=, 'John Doe', ['John Doe'])
|
mock_transaction.expect(:buyer_name=, 'John Doe', ['John Doe'])
|
||||||
mock_transaction.expect(:save!, true)
|
mock_transaction.expect(:save!, true)
|
||||||
mock_transaction.expect(:autobind_invoice, AccountActivity.new)
|
mock_transaction.expect(:binded?, false)
|
||||||
|
mock_transaction.expect(:bind_invoice, AccountActivity.new, [1])
|
||||||
|
mock_transaction.expect(:errors, [])
|
||||||
|
|
||||||
BankTransaction.stub(:find_by, mock_transaction) do
|
BankTransaction.stub(:find_by, mock_transaction) do
|
||||||
@completed_bank_link.complete_transaction
|
@completed_bank_link.complete_transaction
|
||||||
|
|
|
@ -72,7 +72,9 @@ class EveryPayTest < ActiveSupport::TestCase
|
||||||
mock_transaction.expect(:paid_at= , Date.strptime('1524136727', '%s'), [Date.strptime('1524136727', '%s')])
|
mock_transaction.expect(:paid_at= , Date.strptime('1524136727', '%s'), [Date.strptime('1524136727', '%s')])
|
||||||
mock_transaction.expect(:buyer_name=, 'John Doe', ['John Doe'])
|
mock_transaction.expect(:buyer_name=, 'John Doe', ['John Doe'])
|
||||||
mock_transaction.expect(:save!, true)
|
mock_transaction.expect(:save!, true)
|
||||||
mock_transaction.expect(:autobind_invoice, AccountActivity.new)
|
mock_transaction.expect(:binded?, false)
|
||||||
|
mock_transaction.expect(:bind_invoice, AccountActivity.new, [1])
|
||||||
|
mock_transaction.expect(:errors, [])
|
||||||
|
|
||||||
BankTransaction.stub(:find_by, mock_transaction) do
|
BankTransaction.stub(:find_by, mock_transaction) do
|
||||||
@every_pay.complete_transaction
|
@every_pay.complete_transaction
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue