internetee/registry

View on GitHub
app/controllers/eis_billing/lhv_connect_transactions_controller.rb

Summary

Maintainability
A
25 mins
Test Coverage
C
72%
module EisBilling
  class LhvConnectTransactionsController < EisBilling::BaseController
    def create
      if params['_json'].nil? || params['_json'].empty?
        render json: { message: 'MISSING PARAMS' }, status: :unprocessable_entity
        return
      end

      bank_statement = BankStatement.create(bank_code: Setting.registry_bank_code,
                                            iban: Setting.registry_iban)

      params['_json'].each do |incoming_transaction|
        process_transactions(incoming_transaction, bank_statement)
      end

      render status: :ok, json: { message: 'RECEIVED', params: params }
    end

    private

    def process_transactions(incoming_transaction, bank_statement)
      logger.info 'Got incoming transactions'
      logger.info incoming_transaction

      ActiveRecord::Base.transaction do
        transaction = bank_statement.bank_transactions
                                    .create!(transaction_attributes(incoming_transaction))

        next if transaction.registrar.blank?

        create_invoice_if_missing(transaction) unless transaction.non_canceled?
      end
    end

    def create_invoice_if_missing(transaction)
      Invoice.create_from_transaction!(transaction) unless transaction.autobindable?
      invoice = transaction.autobind_invoice
      return unless invoice.paid?

      EisBilling::SendInvoiceStatus.send_info(invoice_number: invoice.number,
                                              status: 'paid')
    end

    def transaction_attributes(incoming_transaction)
      {
        sum: incoming_transaction['amount'],
        currency: incoming_transaction['currency'],
        paid_at: incoming_transaction['date'],
        reference_no: incoming_transaction['payment_reference_number'],
        description: incoming_transaction['payment_description'],
      }
    end
  end
end