Sha256: f3c8ca1561b006bad7df34d25e9a7fd0bc4a04e54627dc476350609844d36dbb

Contents?: true

Size: 1.33 KB

Versions: 2

Compression:

Stored size: 1.33 KB

Contents

module RockRMS
  class Client
    module Refund
      PATH = 'FinancialTransactionRefunds'.freeze

      def create_refund(
        batch_id:,
        date:,
        reason_id:,
        transaction_id:,
        transaction_code: nil
      )
        old_transaction = list_transactions(
          '$expand' => 'TransactionDetails',
          '$filter' => "Id eq #{transaction_id}"
        ).first

        params = {
          'OriginalTransactionId' => transaction_id,
          'RefundReasonValueId' => reason_id,
          'FinancialTransaction' => {
            'AuthorizedPersonAliasId' => old_transaction[:person_id],
            'BatchId' => batch_id,
            'FinancialPaymentDetailId' => old_transaction[:payment_detail_id],
            'TransactionCode'     => transaction_code,
            'TransactionDateTime' => date,
            'TransactionDetails'  => translate_negative(old_transaction[:details]),
            'TransactionTypeValueId' => old_transaction[:transaction_type_id]
          }
        }
        post(refund_path, params)
      end

      private

      def translate_negative(details)
        details.map do |dt|
          {
            'Amount' => -dt[:amount],
            'AccountId' => dt[:fund_id]
          }
        end
      end

      def refund_path(id = nil)
        id ? "#{PATH}/#{id}" : PATH
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rock_rms-4.2.3 lib/rock_rms/resources/refund.rb
rock_rms-4.2.2 lib/rock_rms/resources/refund.rb