Class: Paypal::Report

Inherits:
Object
  • Object
show all
Defined in:
lib/paypal/report.rb

Constant Summary collapse

API_URL =
'https://payments-reports.paypal.com/reportingengine'

Instance Method Summary collapse

Constructor Details

#initialize(user, password, vendor, partner = 'PayPalUK') ⇒ Report

Returns a new instance of Report.



11
12
13
# File 'lib/paypal/report.rb', line 11

def initialize(user, password, vendor, partner = 'PayPalUK')
  @user, @password, @vendor, @partner = user, password, vendor, partner
end

Instance Method Details

#daily(time = Date.today, page_size = 50) ⇒ Object

high level functions



16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/paypal/report.rb', line 16

def daily(time = Date.today, page_size = 50)
  time      = time.strftime("%Y-%m-%d") unless time.is_a?(String)
  report_id = run_report_request('DailyActivityReport', {'report_date' => time}, page_size)

   = (report_id)

  data = []
  ["numberOfPages"].to_i.times do |page_num|
    data += get_data_request(report_id, page_num + 1) #it's zero indexed
  end
  data
end

#get_data_request(report_id, page_num) ⇒ Object



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/paypal/report.rb', line 92

def get_data_request(report_id, page_num)
  response = request 'getDataRequest' do |xml|
    xml.reportId report_id
    xml.pageNum page_num
  end

  [].tap do |result|
    response.elements.each("getDataResponse/reportDataRow") do |data_row|
      result << [].tap do |row|
        data_row.elements.each("columnData/data") do |data|
          row << if text = data.get_text
            text.value
          else
            nil
          end
        end
      end
    end
  end
end

#get_meta_data_request(report_id) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/paypal/report.rb', line 76

def (report_id)
  response = request 'getMetaDataRequest' do |xml|
    xml.reportId report_id
  end

  response.elements["getMetaDataResponse"].inject({}) do |h,e|
    if text = e.get_text
      h[e.name] = text.value
    else
      h[e.name] ||= []
      h[e.name] << e.elements["dataName"].get_text.value
    end
    h
  end
end

#monthly(start_date, end_date = Date.today, page_size = 50) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/paypal/report.rb', line 29

def monthly(start_date, end_date = Date.today, page_size = 50)
  start_date = Date.parse(start_date) if start_date.is_a?(String)
  start_date = start_date.to_date if start_date.is_a?(Time)

  end_date = Date.parse(end_date) if end_date.is_a?(String)
  end_date = end_date.to_date if end_date.is_a?(Time)

  data = []
  while(start_date <= end_date)
    puts start_date.strftime("%Y-%m-%d")
    data += daily(start_date, page_size)
    start_date = start_date.next_day
  end
  data
end

#run_report_request(report_name, report_params = {}, page_size = 50) ⇒ Object

low level functions



61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/paypal/report.rb', line 61

def run_report_request(report_name, report_params = {}, page_size = 50)
  response = request 'runReportRequest' do |xml|
    xml.reportName report_name
    report_params.each do |name, value|
      xml.reportParam do
        xml.paramName name
        xml.paramValue value
      end
    end
    xml.pageSize page_size
  end

  response.elements["runReportResponse/reportId"].get_text.value
end

#transaction_summary(start_date, end_date = Time.now, page_size = 50) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/paypal/report.rb', line 45

def transaction_summary(start_date, end_date = Time.now, page_size = 50)
  start_date = start_date.strftime("%Y-%m-%d 00:00:00") unless start_date.is_a?(String)
  end_date   = end_date.strftime("%Y-%m-%d 23:59:59") unless end_date.is_a?(String)
  report_id  = run_report_request('TransactionSummaryReport', {'start_date' => start_date, 'end_date' => end_date}, page_size)

   = (report_id)

  data = []
  ["numberOfPages"].to_i.times do |page_num|
    data += get_data_request(report_id, page_num + 1) #it's zero indexed
  end
  data
end