class T2Airtime::Transaction

Public Class Methods

get(id) click to toggle source
# File lib/t2_airtime/serializer.rb, line 302
def self.get(id)
  Rails.cache.fetch("transactions/#{id}", expires_in: 365.days) do # once we've got it, no need to refetch
    T2Airtime::API.api.transaction_info(id)
  end
end
serialize(data, qty = 'all') click to toggle source
# File lib/t2_airtime/serializer.rb, line 296
def self.serialize(data, qty = 'all')
  return [] if data[:transaction_list].nil?
  ids = data[:transaction_list].split(',')
  ids.take(qty==='all' ? ids.count : qty).each.map { |id| show(id) }
end
serialize_one(data, ts = Time.zone.now.to_s) click to toggle source
# File lib/t2_airtime/serializer.rb, line 313
def self.serialize_one(data, ts = Time.zone.now.to_s)
  Rails.cache.fetch("transactions/#{data[:transactionid]}/serializer", expires_in: 365.days) do
    {
      type: 'transactions',
      id: Integer(data[:transactionid]),
      attributes: {
        msisdn: data[:msisdn],
        destinationMsisdn: data[:destination_msisdn],
        transactionAuthenticationKey: data[:transaction_authentication_key],
        transactionErrorCode: Integer(data[:transaction_error_code]),
        transactionErrorTxt: data[:transaction_error_txt],
        referenceOperator: data[:reference_operator],
        actualProductSent: data[:actual_product_sent],
        sms: data[:sms],
        cid1: data[:cid1],
        cid2: data[:cid2],
        cid3: data[:cid3],
        date: data[:date],
        currency: data[:originating_currency] && data[:originating_currency] || 'XXX',
        localCurrency: data[:destination_currency] && data[:destination_currency] || 'XXX',
        pinBased: data[:pin_based],
        localInfoAmount: data[:local_info_amount],
        localInfoCurrency: data[:local_info_currency],
        localInfoValue: data[:local_info_value],
        errorCode: data[:error_code],
        errorTxt: data[:error_txt],
        countryId: data[:countryid] && Integer(data[:countryid]) || nil, 
        countryName: data[:country],
        countryAlpha3: data[:country] && T2Airtime::Country.alpha3(data[:country]) || 'XXX',
        operatorId: data[:operatorid] && Integer(data[:operatorid]) || nil,
        operatorName: data[:operator],
        operatorLogo: data[:operatorid] && T2Airtime::Util.operator_logo_url(data[:operatorid]) || nil,  
        productName: data[:destination_currency] && "#{Money.new(Integer(data[:product_requested]) * 100, data[:destination_currency]).format}" || nil,
        productLocalCurrency: data[:destination_currency],
        productLocalCurrencySymbol: data[:destination_currency] && Money::Currency.new(data[:destination_currency]).symbol || 'XXX',
        productCurrency: Account.currency,
        productCurrencySymbol: Money::Currency.new(Account.currency).symbol,
        productLocalPrice: data[:product_requested] && Float(data[:product_requested]) || 0,
        productRetailPrice: data[:retail_price] && Float(data[:retail_price]) || 0,
        productWholesalePrice: data[:wholesale_price] && Float(data[:wholesale_price]) || 0,          
        fetchedAt: T2Airtime::Util.format_time(ts)
      },
      relationships: {
        country: {
          data: {
            type: 'countries',
            id: data[:countryid] && Integer(data[:countryid]) || nil
          }
        },
        operator: {
          data: {
            type: 'operators',
            id: data[:operatorid] && Integer(data[:operatorid]) || nil
          }
        },
        product: {
          data: {
            type: 'products',
            id: data[:product_requested] && Integer(data[:product_requested]) || nil
          }
        }
      }
    }
  end
end
show(id) click to toggle source
# File lib/t2_airtime/serializer.rb, line 308
def self.show(id)
  transaction = get(id)
  transaction.success? ? serialize_one(transaction.data, transaction.headers[:date]) : {}
end
take(start = (Time.now - 24.hours), stop = Time.now, msisdn = nil, destination = nil, code = nil, qty = 5) click to toggle source
# File lib/t2_airtime/serializer.rb, line 291
def self.take(start = (Time.now - 24.hours), stop = Time.now, msisdn = nil, destination = nil, code = nil, qty = 5)
  reply = T2Airtime::API.api.transaction_list(start, stop, msisdn, destination, code)
  reply.success? ? serialize(reply.data, qty) : []
end