Class: Externals::Omise::Charge

Inherits:
ApplicationRecord show all
Includes:
OmiseHelper
Defined in:
app/models/externals/omise/charge.rb

Overview

Store how many charged amount of a reservation

Constant Summary collapse

SUCCESS_STATUS =
%w[successful success].freeze
PENDING_STATUS =
'pending'
REFUND_STATUS =
'refund'
RESULT_CODE_SUCCESS =
'00'
RESULT_CODE_INVALID_CARD =
%w[02 05 14 50 54 58].freeze
EXPECTED_FAILURE_CODES =

Expected payment failure codes that should not trigger APM alerts These are normal business scenarios where payments fail due to customer/bank issues Reference: docs.omise.co/api-testing#creating-failed-charges

%w[
  insufficient_fund
  stolen_or_lost_card
  failed_processing
  payment_rejected
  failed_fraud_check
  invalid_account_number
].freeze

Instance Method Summary collapse

Methods included from OmiseHelper

#configure_omise_keys, #omise_public_key

Methods inherited from ApplicationRecord

sync_carrierwave_url

Instance Method Details

#gateway_typeObject



73
74
75
76
77
78
79
# File 'app/models/externals/omise/charge.rb', line 73

def gateway_type
  if transaction_id.to_s.include? 'gbp'
    :gb_primepay
  else
    :omise
  end
end

#generate_transaction_idObject



95
96
97
98
99
100
101
102
103
# File 'app/models/externals/omise/charge.rb', line 95

def generate_transaction_id
  if reservation.present?
    "by-admin-#{reservation_id}-#{Time.now.to_i}"
  elsif voucher_transaction.present?
    "by-admin-#{voucher_transaction_id}-#{Time.now.to_i}"
  elsif ticket_transaction.present?
    "by-admin-#{ticket_transaction_id}-#{Time.now.to_i}"
  end
end

#success?Boolean

Returns:

  • (Boolean)


69
70
71
# File 'app/models/externals/omise/charge.rb', line 69

def success?
  SUCCESS_STATUS.include?(status)
end

#transactionObject



91
92
93
# File 'app/models/externals/omise/charge.rb', line 91

def transaction
  reservation.presence || voucher_transaction.presence || ticket_transaction.presence
end

#transaction_detailObject



62
63
64
65
66
67
# File 'app/models/externals/omise/charge.rb', line 62

def transaction_detail
  # configure omise keys based on restaurant country code
  configure_omise_keys(reservation.restaurant.country.alpha3) if reservation.present?

  @transaction_detail ||= ::Omise::Transaction.retrieve(transaction_id)
end

#transaction_product_typeObject



81
82
83
84
85
86
87
88
89
# File 'app/models/externals/omise/charge.rb', line 81

def transaction_product_type
  if reservation.present?
    :reservation
  elsif voucher_transaction.present?
    :voucher_transaction
  elsif ticket_transaction.present?
    :ticket_transaction
  end
end