xero-ruby 3.3.0 → 3.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. checksums.yaml +4 -4
  2. data/lib/xero-ruby/api/accounting_api.rb +86 -2
  3. data/lib/xero-ruby/api/finance_api.rb +961 -0
  4. data/lib/xero-ruby/api/payroll_au_api.rb +14 -14
  5. data/lib/xero-ruby/api/payroll_nz_api.rb +18 -12
  6. data/lib/xero-ruby/api/payroll_uk_api.rb +16 -4
  7. data/lib/xero-ruby/api_client.rb +13 -2
  8. data/lib/xero-ruby/configuration.rb +2 -0
  9. data/lib/xero-ruby/models/accounting/account.rb +34 -34
  10. data/lib/xero-ruby/models/accounting/account_type.rb +22 -22
  11. data/lib/xero-ruby/models/accounting/action.rb +2 -2
  12. data/lib/xero-ruby/models/accounting/address.rb +2 -2
  13. data/lib/xero-ruby/models/accounting/address_for_organisation.rb +3 -3
  14. data/lib/xero-ruby/models/accounting/bank_transaction.rb +11 -11
  15. data/lib/xero-ruby/models/accounting/bank_transfer.rb +35 -1
  16. data/lib/xero-ruby/models/accounting/batch_payment.rb +4 -4
  17. data/lib/xero-ruby/models/accounting/branding_theme.rb +1 -1
  18. data/lib/xero-ruby/models/accounting/budget.rb +2 -2
  19. data/lib/xero-ruby/models/accounting/budget_balance.rb +2 -2
  20. data/lib/xero-ruby/models/accounting/contact.rb +89 -4
  21. data/lib/xero-ruby/models/accounting/contact_group.rb +2 -2
  22. data/lib/xero-ruby/models/accounting/country_code.rb +240 -240
  23. data/lib/xero-ruby/models/accounting/credit_note.rb +8 -8
  24. data/lib/xero-ruby/models/accounting/currency_code.rb +166 -166
  25. data/lib/xero-ruby/models/accounting/employee.rb +4 -4
  26. data/lib/xero-ruby/models/accounting/expense_claim.rb +5 -5
  27. data/lib/xero-ruby/models/accounting/external_link.rb +5 -5
  28. data/lib/xero-ruby/models/accounting/invoice.rb +14 -14
  29. data/lib/xero-ruby/models/accounting/journal.rb +25 -25
  30. data/lib/xero-ruby/models/accounting/line_amount_types.rb +3 -3
  31. data/lib/xero-ruby/models/accounting/line_item.rb +11 -1
  32. data/lib/xero-ruby/models/accounting/line_item_item.rb +272 -0
  33. data/lib/xero-ruby/models/accounting/linked_transaction.rb +8 -8
  34. data/lib/xero-ruby/models/accounting/manual_journal.rb +5 -5
  35. data/lib/xero-ruby/models/accounting/organisation.rb +79 -76
  36. data/lib/xero-ruby/models/accounting/overpayment.rb +6 -6
  37. data/lib/xero-ruby/models/accounting/payment.rb +10 -10
  38. data/lib/xero-ruby/models/accounting/payment_term_type.rb +4 -4
  39. data/lib/xero-ruby/models/accounting/phone.rb +5 -5
  40. data/lib/xero-ruby/models/accounting/prepayment.rb +7 -7
  41. data/lib/xero-ruby/models/accounting/purchase_order.rb +5 -5
  42. data/lib/xero-ruby/models/accounting/quote_line_amount_types.rb +3 -3
  43. data/lib/xero-ruby/models/accounting/quote_status_codes.rb +6 -6
  44. data/lib/xero-ruby/models/accounting/receipt.rb +5 -5
  45. data/lib/xero-ruby/models/accounting/repeating_invoice.rb +5 -5
  46. data/lib/xero-ruby/models/accounting/report.rb +1 -1
  47. data/lib/xero-ruby/models/accounting/row_type.rb +4 -4
  48. data/lib/xero-ruby/models/accounting/schedule.rb +8 -8
  49. data/lib/xero-ruby/models/accounting/tax_rate.rb +87 -80
  50. data/lib/xero-ruby/models/accounting/tax_type.rb +66 -59
  51. data/lib/xero-ruby/models/accounting/time_zone.rb +109 -109
  52. data/lib/xero-ruby/models/accounting/tracking_category.rb +3 -3
  53. data/lib/xero-ruby/models/accounting/tracking_option.rb +3 -3
  54. data/lib/xero-ruby/models/accounting/user.rb +7 -7
  55. data/lib/xero-ruby/models/app_store/plan.rb +6 -5
  56. data/lib/xero-ruby/models/app_store/product.rb +30 -9
  57. data/lib/xero-ruby/models/app_store/subscription.rb +37 -0
  58. data/lib/xero-ruby/models/app_store/subscription_item.rb +63 -1
  59. data/lib/xero-ruby/models/assets/asset_status.rb +3 -3
  60. data/lib/xero-ruby/models/assets/asset_status_query_param.rb +3 -3
  61. data/lib/xero-ruby/models/assets/book_depreciation_setting.rb +11 -11
  62. data/lib/xero-ruby/models/files/object_group.rb +12 -11
  63. data/lib/xero-ruby/models/files/object_type.rb +56 -55
  64. data/lib/xero-ruby/models/finance/account_usage.rb +342 -0
  65. data/lib/xero-ruby/models/finance/account_usage_response.rb +254 -0
  66. data/lib/xero-ruby/models/finance/balance_sheet_account_detail.rb +262 -0
  67. data/lib/xero-ruby/models/finance/balance_sheet_account_group.rb +234 -0
  68. data/lib/xero-ruby/models/finance/balance_sheet_account_type.rb +244 -0
  69. data/lib/xero-ruby/models/finance/balance_sheet_response.rb +252 -0
  70. data/lib/xero-ruby/models/finance/bank_statement_accounting_response.rb +254 -0
  71. data/lib/xero-ruby/models/finance/bank_statement_response.rb +232 -0
  72. data/lib/xero-ruby/models/finance/bank_transaction_response.rb +274 -0
  73. data/lib/xero-ruby/models/finance/cash_account_response.rb +262 -0
  74. data/lib/xero-ruby/models/finance/cash_balance.rb +242 -0
  75. data/lib/xero-ruby/models/finance/cash_validation_response.rb +262 -0
  76. data/lib/xero-ruby/models/finance/cashflow_account.rb +282 -0
  77. data/lib/xero-ruby/models/finance/cashflow_activity.rb +244 -0
  78. data/lib/xero-ruby/models/finance/cashflow_response.rb +254 -0
  79. data/lib/xero-ruby/models/finance/cashflow_type.rb +244 -0
  80. data/lib/xero-ruby/models/finance/contact_detail.rb +274 -0
  81. data/lib/xero-ruby/models/finance/contact_response.rb +232 -0
  82. data/lib/xero-ruby/models/finance/contact_total_detail.rb +242 -0
  83. data/lib/xero-ruby/models/finance/contact_total_other.rb +252 -0
  84. data/lib/xero-ruby/models/finance/credit_note_response.rb +254 -0
  85. data/lib/xero-ruby/models/finance/current_statement_response.rb +272 -0
  86. data/lib/xero-ruby/models/finance/data_source_response.rb +362 -0
  87. data/lib/xero-ruby/models/finance/history_record_response.rb +262 -0
  88. data/lib/xero-ruby/models/finance/income_by_contact_response.rb +284 -0
  89. data/lib/xero-ruby/models/finance/invoice_response.rb +254 -0
  90. data/lib/xero-ruby/models/finance/line_item_response.rb +252 -0
  91. data/lib/xero-ruby/models/finance/lock_history_model.rb +242 -0
  92. data/lib/xero-ruby/models/finance/lock_history_response.rb +244 -0
  93. data/lib/xero-ruby/models/finance/manual_journal_total.rb +222 -0
  94. data/lib/xero-ruby/models/finance/overpayment_response.rb +254 -0
  95. data/lib/xero-ruby/models/finance/payment_response.rb +312 -0
  96. data/lib/xero-ruby/models/finance/pnl_account.rb +272 -0
  97. data/lib/xero-ruby/models/finance/pnl_account_class.rb +234 -0
  98. data/lib/xero-ruby/models/finance/pnl_account_type.rb +244 -0
  99. data/lib/xero-ruby/models/finance/practice_response.rb +262 -0
  100. data/lib/xero-ruby/models/finance/prepayment_response.rb +254 -0
  101. data/lib/xero-ruby/models/finance/problem.rb +252 -0
  102. data/lib/xero-ruby/models/finance/problem_type.rb +44 -0
  103. data/lib/xero-ruby/models/finance/profit_and_loss_response.rb +262 -0
  104. data/lib/xero-ruby/models/finance/report_history_model.rb +242 -0
  105. data/lib/xero-ruby/models/finance/report_history_response.rb +244 -0
  106. data/lib/xero-ruby/models/finance/statement_balance_response.rb +232 -0
  107. data/lib/xero-ruby/models/finance/statement_line_response.rb +346 -0
  108. data/lib/xero-ruby/models/finance/statement_lines_response.rb +382 -0
  109. data/lib/xero-ruby/models/finance/statement_response.rb +294 -0
  110. data/lib/xero-ruby/models/finance/total_detail.rb +242 -0
  111. data/lib/xero-ruby/models/finance/total_other.rb +242 -0
  112. data/lib/xero-ruby/models/finance/trial_balance_account.rb +312 -0
  113. data/lib/xero-ruby/models/finance/trial_balance_entry.rb +232 -0
  114. data/lib/xero-ruby/models/finance/trial_balance_movement.rb +252 -0
  115. data/lib/xero-ruby/models/finance/trial_balance_response.rb +244 -0
  116. data/lib/xero-ruby/models/finance/user_activities_response.rb +244 -0
  117. data/lib/xero-ruby/models/finance/user_response.rb +336 -0
  118. data/lib/xero-ruby/models/payroll_au/account_type.rb +23 -23
  119. data/lib/xero-ruby/models/payroll_au/allowance_category.rb +41 -0
  120. data/lib/xero-ruby/models/payroll_au/allowance_type.rb +10 -7
  121. data/lib/xero-ruby/models/payroll_au/calendar_type.rb +6 -6
  122. data/lib/xero-ruby/models/payroll_au/deduction_type.rb +3 -3
  123. data/lib/xero-ruby/models/payroll_au/deduction_type_calculation_type.rb +3 -3
  124. data/lib/xero-ruby/models/payroll_au/earnings_rate.rb +14 -4
  125. data/lib/xero-ruby/models/payroll_au/earnings_rate_calculation_type.rb +3 -3
  126. data/lib/xero-ruby/models/payroll_au/earnings_type.rb +12 -10
  127. data/lib/xero-ruby/models/payroll_au/employee.rb +11 -11
  128. data/lib/xero-ruby/models/payroll_au/employee_status.rb +2 -2
  129. data/lib/xero-ruby/models/payroll_au/employment_basis.rb +5 -5
  130. data/lib/xero-ruby/models/payroll_au/employment_termination_payment_type.rb +2 -2
  131. data/lib/xero-ruby/models/payroll_au/entitlement_final_pay_payout_type.rb +2 -2
  132. data/lib/xero-ruby/models/payroll_au/leave_line_calculation_type.rb +5 -5
  133. data/lib/xero-ruby/models/payroll_au/leave_period_status.rb +2 -2
  134. data/lib/xero-ruby/models/payroll_au/leave_type_contribution_type.rb +4 -4
  135. data/lib/xero-ruby/models/payroll_au/manual_tax_type.rb +6 -5
  136. data/lib/xero-ruby/models/payroll_au/pay_run_status.rb +2 -2
  137. data/lib/xero-ruby/models/payroll_au/payment_frequency_type.rb +7 -7
  138. data/lib/xero-ruby/models/payroll_au/rate_type.rb +3 -3
  139. data/lib/xero-ruby/models/payroll_au/residency_status.rb +3 -3
  140. data/lib/xero-ruby/models/payroll_au/state.rb +8 -8
  141. data/lib/xero-ruby/models/payroll_au/super_fund_type.rb +2 -2
  142. data/lib/xero-ruby/models/payroll_au/superannuation_calculation_type.rb +3 -3
  143. data/lib/xero-ruby/models/payroll_au/superannuation_contribution_type.rb +4 -4
  144. data/lib/xero-ruby/models/payroll_au/tfn_exemption_type.rb +4 -4
  145. data/lib/xero-ruby/models/payroll_au/timesheet_status.rb +5 -5
  146. data/lib/xero-ruby/models/payroll_nz/account.rb +4 -4
  147. data/lib/xero-ruby/models/payroll_nz/bank_account.rb +2 -2
  148. data/lib/xero-ruby/models/payroll_nz/benefit.rb +5 -5
  149. data/lib/xero-ruby/models/payroll_nz/calendar_type.rb +7 -7
  150. data/lib/xero-ruby/models/payroll_nz/deduction.rb +4 -4
  151. data/lib/xero-ruby/models/payroll_nz/earnings_rate.rb +18 -18
  152. data/lib/xero-ruby/models/payroll_nz/employee.rb +2 -2
  153. data/lib/xero-ruby/models/payroll_nz/employee_leave_type.rb +4 -4
  154. data/lib/xero-ruby/models/payroll_nz/employee_statutory_leave_balance.rb +6 -6
  155. data/lib/xero-ruby/models/payroll_nz/employee_statutory_leave_summary.rb +8 -8
  156. data/lib/xero-ruby/models/payroll_nz/employee_tax.rb +5 -5
  157. data/lib/xero-ruby/models/payroll_nz/leave_period.rb +2 -2
  158. data/lib/xero-ruby/models/payroll_nz/pay_run.rb +5 -5
  159. data/lib/xero-ruby/models/payroll_nz/pay_slip.rb +3 -3
  160. data/lib/xero-ruby/models/payroll_nz/payment_method.rb +3 -3
  161. data/lib/xero-ruby/models/payroll_nz/reimbursement.rb +8 -8
  162. data/lib/xero-ruby/models/payroll_nz/salary_and_wage.rb +5 -5
  163. data/lib/xero-ruby/models/payroll_nz/statutory_deduction_category.rb +11 -11
  164. data/lib/xero-ruby/models/payroll_nz/tax_code.rb +19 -19
  165. data/lib/xero-ruby/models/payroll_nz/tax_settings.rb +2 -2
  166. data/lib/xero-ruby/models/payroll_nz/timesheet.rb +4 -4
  167. data/lib/xero-ruby/models/payroll_uk/account.rb +7 -7
  168. data/lib/xero-ruby/models/payroll_uk/benefit.rb +4 -4
  169. data/lib/xero-ruby/models/payroll_uk/deduction.rb +12 -12
  170. data/lib/xero-ruby/models/payroll_uk/earnings_rate.rb +28 -28
  171. data/lib/xero-ruby/models/payroll_uk/employee.rb +16 -6
  172. data/lib/xero-ruby/models/payroll_uk/employee_leave_type.rb +4 -4
  173. data/lib/xero-ruby/models/payroll_uk/employee_statutory_leave_balance.rb +6 -6
  174. data/lib/xero-ruby/models/payroll_uk/employee_statutory_leave_summary.rb +8 -8
  175. data/lib/xero-ruby/models/payroll_uk/employment.rb +15 -10
  176. data/lib/xero-ruby/models/payroll_uk/leave_period.rb +2 -2
  177. data/lib/xero-ruby/models/payroll_uk/pay_run.rb +11 -11
  178. data/lib/xero-ruby/models/payroll_uk/pay_run_calendar.rb +6 -6
  179. data/lib/xero-ruby/models/payroll_uk/payment_method.rb +3 -3
  180. data/lib/xero-ruby/models/payroll_uk/payslip.rb +3 -3
  181. data/lib/xero-ruby/models/payroll_uk/salary_and_wage.rb +5 -5
  182. data/lib/xero-ruby/models/payroll_uk/statutory_deduction_category.rb +14 -14
  183. data/lib/xero-ruby/models/payroll_uk/timesheet.rb +3 -3
  184. data/lib/xero-ruby/models/projects/charge_type.rb +3 -3
  185. data/lib/xero-ruby/models/projects/currency_code.rb +164 -164
  186. data/lib/xero-ruby/models/projects/project_status.rb +2 -2
  187. data/lib/xero-ruby/models/projects/task.rb +3 -3
  188. data/lib/xero-ruby/models/projects/time_entry.rb +3 -3
  189. data/lib/xero-ruby/version.rb +2 -2
  190. data/lib/xero-ruby.rb +57 -0
  191. data/spec/api_client_spec.rb +3 -0
  192. data/spec/app_store/api/app_store_api_spec.rb +1 -1
  193. data/spec/configuration_spec.rb +1 -0
  194. data/spec/finance/api/finance_api_spec.rb +156 -0
  195. data/spec/finance/models/account_usage_response_spec.rb +58 -0
  196. data/spec/finance/models/account_usage_spec.rb +112 -0
  197. data/spec/finance/models/balance_sheet_account_detail_spec.rb +64 -0
  198. data/spec/finance/models/balance_sheet_account_group_spec.rb +46 -0
  199. data/spec/finance/models/balance_sheet_account_type_spec.rb +52 -0
  200. data/spec/finance/models/balance_sheet_response_spec.rb +58 -0
  201. data/spec/finance/models/bank_statement_response_spec.rb +46 -0
  202. data/spec/finance/models/cash_account_response_spec.rb +64 -0
  203. data/spec/finance/models/cash_balance_spec.rb +52 -0
  204. data/spec/finance/models/cash_validation_response_spec.rb +64 -0
  205. data/spec/finance/models/cashflow_account_spec.rb +76 -0
  206. data/spec/finance/models/cashflow_activity_spec.rb +52 -0
  207. data/spec/finance/models/cashflow_response_spec.rb +58 -0
  208. data/spec/finance/models/cashflow_type_spec.rb +52 -0
  209. data/spec/finance/models/current_statement_response_spec.rb +70 -0
  210. data/spec/finance/models/data_source_response_spec.rb +124 -0
  211. data/spec/finance/models/history_record_response_spec.rb +64 -0
  212. data/spec/finance/models/lock_history_model_spec.rb +52 -0
  213. data/spec/finance/models/lock_history_response_spec.rb +52 -0
  214. data/spec/finance/models/pnl_account_class_spec.rb +46 -0
  215. data/spec/finance/models/pnl_account_spec.rb +70 -0
  216. data/spec/finance/models/pnl_account_type_spec.rb +52 -0
  217. data/spec/finance/models/practice_response_spec.rb +64 -0
  218. data/spec/finance/models/problem_spec.rb +58 -0
  219. data/spec/finance/models/problem_type_spec.rb +34 -0
  220. data/spec/finance/models/profit_and_loss_response_spec.rb +64 -0
  221. data/spec/finance/models/report_history_model_spec.rb +52 -0
  222. data/spec/finance/models/report_history_response_spec.rb +52 -0
  223. data/spec/finance/models/statement_balance_response_spec.rb +46 -0
  224. data/spec/finance/models/statement_lines_response_spec.rb +136 -0
  225. data/spec/finance/models/trial_balance_account_spec.rb +94 -0
  226. data/spec/finance/models/trial_balance_entry_spec.rb +46 -0
  227. data/spec/finance/models/trial_balance_movement_spec.rb +58 -0
  228. data/spec/finance/models/trial_balance_response_spec.rb +52 -0
  229. data/spec/finance/models/user_activities_response_spec.rb +52 -0
  230. data/spec/finance/models/user_response_spec.rb +106 -0
  231. metadata +134 -3
@@ -0,0 +1,382 @@
1
+ =begin
2
+ #Xero Finance API
3
+
4
+ #The Finance API is a collection of endpoints which customers can use in the course of a loan application, which may assist lenders to gain the confidence they need to provide capital.
5
+
6
+ Contact: api@xero.com
7
+ Generated by: https://openapi-generator.tech
8
+ OpenAPI Generator version: 4.3.1
9
+
10
+ =end
11
+
12
+ require 'time'
13
+ require 'date'
14
+
15
+ module XeroRuby::Finance
16
+ require 'bigdecimal'
17
+
18
+ class StatementLinesResponse
19
+ # Sum of the amounts of all statement lines where both the reconciled flag is set to FALSE, and the amount is positive.
20
+ attr_accessor :unreconciled_amount_pos
21
+
22
+ # Sum of the amounts of all statement lines where both the reconciled flag is set to FALSE, and the amount is negative.
23
+ attr_accessor :unreconciled_amount_neg
24
+
25
+ # Count of all statement lines where the reconciled flag is set to FALSE.
26
+ attr_accessor :unreconciled_lines
27
+
28
+ # Sum-product of age of statement line in days multiplied by transaction amount, divided by the sum of transaction amount - in for those statement lines in which the reconciled flag is set to FALSE, and the amount is positive. Provides an indication of the age of unreconciled transactions.
29
+ attr_accessor :avg_days_unreconciled_pos
30
+
31
+ # Sum-product of age of statement line in days multiplied by transaction amount, divided by the sum of transaction amount - in for those statement lines in which the reconciled flag is set to FALSE, and the amount is negative. Provides an indication of the age of unreconciled transactions.
32
+ attr_accessor :avg_days_unreconciled_neg
33
+
34
+ # UTC Date which is the earliest transaction date of a statement line for which the reconciled flag is set to FALSE. This date is represented in ISO 8601 format.
35
+ attr_accessor :earliest_unreconciled_transaction
36
+
37
+ # UTC Date which is the latest transaction date of a statement line for which the reconciled flag is set to FALSE. This date is represented in ISO 8601 format.
38
+ attr_accessor :latest_unreconciled_transaction
39
+
40
+ # Sum of the amounts of all deleted statement lines. Transactions may be deleted due to duplication or otherwise.
41
+ attr_accessor :deleted_amount
42
+
43
+ # Sum of the amounts of all statement lines. This is used as a metric of comparison to the unreconciled figures above.
44
+ attr_accessor :total_amount
45
+
46
+
47
+ attr_accessor :data_source
48
+
49
+ # UTC Date which is the earliest transaction date of a statement line for which the reconciled flag is set to TRUE. This date is represented in ISO 8601 format.
50
+ attr_accessor :earliest_reconciled_transaction
51
+
52
+ # UTC Date which is the latest transaction date of a statement line for which the reconciled flag is set to TRUE. This date is represented in ISO 8601 format.
53
+ attr_accessor :latest_reconciled_transaction
54
+
55
+ # Sum of the amounts of all statement lines where both the reconciled flag is set to TRUE, and the amount is positive.
56
+ attr_accessor :reconciled_amount_pos
57
+
58
+ # Sum of the amounts of all statement lines where both the reconciled flag is set to TRUE, and the amount is negative.
59
+ attr_accessor :reconciled_amount_neg
60
+
61
+ # Count of all statement lines where the reconciled flag is set to TRUE
62
+ attr_accessor :reconciled_lines
63
+
64
+ # Sum of the amounts of all statement lines where the amount is positive
65
+ attr_accessor :total_amount_pos
66
+
67
+ # Sum of the amounts of all statement lines where the amount is negative.
68
+ attr_accessor :total_amount_neg
69
+
70
+ # Attribute mapping from ruby-style variable name to JSON key.
71
+ def self.attribute_map
72
+ {
73
+ :'unreconciled_amount_pos' => :'unreconciledAmountPos',
74
+ :'unreconciled_amount_neg' => :'unreconciledAmountNeg',
75
+ :'unreconciled_lines' => :'unreconciledLines',
76
+ :'avg_days_unreconciled_pos' => :'avgDaysUnreconciledPos',
77
+ :'avg_days_unreconciled_neg' => :'avgDaysUnreconciledNeg',
78
+ :'earliest_unreconciled_transaction' => :'earliestUnreconciledTransaction',
79
+ :'latest_unreconciled_transaction' => :'latestUnreconciledTransaction',
80
+ :'deleted_amount' => :'deletedAmount',
81
+ :'total_amount' => :'totalAmount',
82
+ :'data_source' => :'dataSource',
83
+ :'earliest_reconciled_transaction' => :'earliestReconciledTransaction',
84
+ :'latest_reconciled_transaction' => :'latestReconciledTransaction',
85
+ :'reconciled_amount_pos' => :'reconciledAmountPos',
86
+ :'reconciled_amount_neg' => :'reconciledAmountNeg',
87
+ :'reconciled_lines' => :'reconciledLines',
88
+ :'total_amount_pos' => :'totalAmountPos',
89
+ :'total_amount_neg' => :'totalAmountNeg'
90
+ }
91
+ end
92
+
93
+ # Attribute type mapping.
94
+ def self.openapi_types
95
+ {
96
+ :'unreconciled_amount_pos' => :'BigDecimal',
97
+ :'unreconciled_amount_neg' => :'BigDecimal',
98
+ :'unreconciled_lines' => :'Integer',
99
+ :'avg_days_unreconciled_pos' => :'BigDecimal',
100
+ :'avg_days_unreconciled_neg' => :'BigDecimal',
101
+ :'earliest_unreconciled_transaction' => :'Date',
102
+ :'latest_unreconciled_transaction' => :'Date',
103
+ :'deleted_amount' => :'BigDecimal',
104
+ :'total_amount' => :'BigDecimal',
105
+ :'data_source' => :'DataSourceResponse',
106
+ :'earliest_reconciled_transaction' => :'Date',
107
+ :'latest_reconciled_transaction' => :'Date',
108
+ :'reconciled_amount_pos' => :'BigDecimal',
109
+ :'reconciled_amount_neg' => :'BigDecimal',
110
+ :'reconciled_lines' => :'Integer',
111
+ :'total_amount_pos' => :'BigDecimal',
112
+ :'total_amount_neg' => :'BigDecimal'
113
+ }
114
+ end
115
+
116
+ # Initializes the object
117
+ # @param [Hash] attributes Model attributes in the form of hash
118
+ def initialize(attributes = {})
119
+ if (!attributes.is_a?(Hash))
120
+ fail ArgumentError, "The input argument (attributes) must be a hash in `XeroRuby::Finance::StatementLinesResponse` initialize method"
121
+ end
122
+
123
+ # check to see if the attribute exists and convert string to symbol for hash key
124
+ attributes = attributes.each_with_object({}) { |(k, v), h|
125
+ if (!self.class.attribute_map.key?(k.to_sym))
126
+ fail ArgumentError, "`#{k}` is not a valid attribute in `XeroRuby::Finance::StatementLinesResponse`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
127
+ end
128
+ h[k.to_sym] = v
129
+ }
130
+
131
+ if attributes.key?(:'unreconciled_amount_pos')
132
+ self.unreconciled_amount_pos = attributes[:'unreconciled_amount_pos']
133
+ end
134
+
135
+ if attributes.key?(:'unreconciled_amount_neg')
136
+ self.unreconciled_amount_neg = attributes[:'unreconciled_amount_neg']
137
+ end
138
+
139
+ if attributes.key?(:'unreconciled_lines')
140
+ self.unreconciled_lines = attributes[:'unreconciled_lines']
141
+ end
142
+
143
+ if attributes.key?(:'avg_days_unreconciled_pos')
144
+ self.avg_days_unreconciled_pos = attributes[:'avg_days_unreconciled_pos']
145
+ end
146
+
147
+ if attributes.key?(:'avg_days_unreconciled_neg')
148
+ self.avg_days_unreconciled_neg = attributes[:'avg_days_unreconciled_neg']
149
+ end
150
+
151
+ if attributes.key?(:'earliest_unreconciled_transaction')
152
+ self.earliest_unreconciled_transaction = attributes[:'earliest_unreconciled_transaction']
153
+ end
154
+
155
+ if attributes.key?(:'latest_unreconciled_transaction')
156
+ self.latest_unreconciled_transaction = attributes[:'latest_unreconciled_transaction']
157
+ end
158
+
159
+ if attributes.key?(:'deleted_amount')
160
+ self.deleted_amount = attributes[:'deleted_amount']
161
+ end
162
+
163
+ if attributes.key?(:'total_amount')
164
+ self.total_amount = attributes[:'total_amount']
165
+ end
166
+
167
+ if attributes.key?(:'data_source')
168
+ self.data_source = attributes[:'data_source']
169
+ end
170
+
171
+ if attributes.key?(:'earliest_reconciled_transaction')
172
+ self.earliest_reconciled_transaction = attributes[:'earliest_reconciled_transaction']
173
+ end
174
+
175
+ if attributes.key?(:'latest_reconciled_transaction')
176
+ self.latest_reconciled_transaction = attributes[:'latest_reconciled_transaction']
177
+ end
178
+
179
+ if attributes.key?(:'reconciled_amount_pos')
180
+ self.reconciled_amount_pos = attributes[:'reconciled_amount_pos']
181
+ end
182
+
183
+ if attributes.key?(:'reconciled_amount_neg')
184
+ self.reconciled_amount_neg = attributes[:'reconciled_amount_neg']
185
+ end
186
+
187
+ if attributes.key?(:'reconciled_lines')
188
+ self.reconciled_lines = attributes[:'reconciled_lines']
189
+ end
190
+
191
+ if attributes.key?(:'total_amount_pos')
192
+ self.total_amount_pos = attributes[:'total_amount_pos']
193
+ end
194
+
195
+ if attributes.key?(:'total_amount_neg')
196
+ self.total_amount_neg = attributes[:'total_amount_neg']
197
+ end
198
+ end
199
+
200
+ # Show invalid properties with the reasons. Usually used together with valid?
201
+ # @return Array for valid properties with the reasons
202
+ def list_invalid_properties
203
+ invalid_properties = Array.new
204
+ invalid_properties
205
+ end
206
+
207
+ # Check to see if the all the properties in the model are valid
208
+ # @return true if the model is valid
209
+ def valid?
210
+ true
211
+ end
212
+
213
+ # Checks equality by comparing each attribute.
214
+ # @param [Object] Object to be compared
215
+ def ==(o)
216
+ return true if self.equal?(o)
217
+ self.class == o.class &&
218
+ unreconciled_amount_pos == o.unreconciled_amount_pos &&
219
+ unreconciled_amount_neg == o.unreconciled_amount_neg &&
220
+ unreconciled_lines == o.unreconciled_lines &&
221
+ avg_days_unreconciled_pos == o.avg_days_unreconciled_pos &&
222
+ avg_days_unreconciled_neg == o.avg_days_unreconciled_neg &&
223
+ earliest_unreconciled_transaction == o.earliest_unreconciled_transaction &&
224
+ latest_unreconciled_transaction == o.latest_unreconciled_transaction &&
225
+ deleted_amount == o.deleted_amount &&
226
+ total_amount == o.total_amount &&
227
+ data_source == o.data_source &&
228
+ earliest_reconciled_transaction == o.earliest_reconciled_transaction &&
229
+ latest_reconciled_transaction == o.latest_reconciled_transaction &&
230
+ reconciled_amount_pos == o.reconciled_amount_pos &&
231
+ reconciled_amount_neg == o.reconciled_amount_neg &&
232
+ reconciled_lines == o.reconciled_lines &&
233
+ total_amount_pos == o.total_amount_pos &&
234
+ total_amount_neg == o.total_amount_neg
235
+ end
236
+
237
+ # @see the `==` method
238
+ # @param [Object] Object to be compared
239
+ def eql?(o)
240
+ self == o
241
+ end
242
+
243
+ # Calculates hash code according to all attributes.
244
+ # @return [Integer] Hash code
245
+ def hash
246
+ [unreconciled_amount_pos, unreconciled_amount_neg, unreconciled_lines, avg_days_unreconciled_pos, avg_days_unreconciled_neg, earliest_unreconciled_transaction, latest_unreconciled_transaction, deleted_amount, total_amount, data_source, earliest_reconciled_transaction, latest_reconciled_transaction, reconciled_amount_pos, reconciled_amount_neg, reconciled_lines, total_amount_pos, total_amount_neg].hash
247
+ end
248
+
249
+ # Builds the object from hash
250
+ # @param [Hash] attributes Model attributes in the form of hash
251
+ # @return [Object] Returns the model itself
252
+ def self.build_from_hash(attributes)
253
+ new.build_from_hash(attributes)
254
+ end
255
+
256
+ # Builds the object from hash
257
+ # @param [Hash] attributes Model attributes in the form of hash
258
+ # @return [Object] Returns the model itself
259
+ def build_from_hash(attributes)
260
+ return nil unless attributes.is_a?(Hash)
261
+ self.class.openapi_types.each_pair do |key, type|
262
+ if type =~ /\AArray<(.*)>/i
263
+ # check to ensure the input is an array given that the attribute
264
+ # is documented as an array but the input is not
265
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
266
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
267
+ end
268
+ elsif !attributes[self.class.attribute_map[key]].nil?
269
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
270
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
271
+ end
272
+
273
+ self
274
+ end
275
+
276
+ # Deserializes the data based on type
277
+ # @param string type Data type
278
+ # @param string value Value to be deserialized
279
+ # @return [Object] Deserialized data
280
+ def _deserialize(type, value)
281
+ case type.to_sym
282
+ when :DateTime
283
+ DateTime.parse(parse_date(value))
284
+ when :Date
285
+ Date.parse(parse_date(value))
286
+ when :String
287
+ value.to_s
288
+ when :Integer
289
+ value.to_i
290
+ when :Float
291
+ value.to_f
292
+ when :BigDecimal
293
+ BigDecimal(value.to_s)
294
+ when :Boolean
295
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
296
+ true
297
+ else
298
+ false
299
+ end
300
+ when :Object
301
+ # generic object (usually a Hash), return directly
302
+ value
303
+ when /\AArray<(?<inner_type>.+)>\z/
304
+ inner_type = Regexp.last_match[:inner_type]
305
+ value.map { |v| _deserialize(inner_type, v) }
306
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
307
+ k_type = Regexp.last_match[:k_type]
308
+ v_type = Regexp.last_match[:v_type]
309
+ {}.tap do |hash|
310
+ value.each do |k, v|
311
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
312
+ end
313
+ end
314
+ else # model
315
+ XeroRuby::Finance.const_get(type).build_from_hash(value)
316
+ end
317
+ end
318
+
319
+ # Returns the string representation of the object
320
+ # @return [String] String presentation of the object
321
+ def to_s
322
+ to_hash.to_s
323
+ end
324
+
325
+ # to_body is an alias to to_hash (backward compatibility)
326
+ # @return [Hash] Returns the object in the form of hash
327
+ def to_body
328
+ to_hash
329
+ end
330
+
331
+ # Returns the object in the form of hash
332
+ # @return [Hash] Returns the object in the form of hash
333
+ def to_hash(downcase: false)
334
+ hash = {}
335
+ self.class.attribute_map.each_pair do |attr, param|
336
+ value = self.send(attr)
337
+ next if value.nil?
338
+ key = downcase ? attr : param
339
+ hash[key] = _to_hash(value, downcase: downcase)
340
+ end
341
+ hash
342
+ end
343
+
344
+ # Returns the object in the form of hash with snake_case
345
+ def to_attributes
346
+ to_hash(downcase: true)
347
+ end
348
+
349
+ # Outputs non-array value in the form of hash
350
+ # For object, use to_hash. Otherwise, just return the value
351
+ # @param [Object] value Any valid value
352
+ # @return [Hash] Returns the value in the form of hash
353
+ def _to_hash(value, downcase: false)
354
+ if value.is_a?(Array)
355
+ value.map do |v|
356
+ v.to_hash(downcase: downcase)
357
+ end
358
+ elsif value.is_a?(Hash)
359
+ {}.tap do |hash|
360
+ value.map { |k, v| hash[k] = _to_hash(v, downcase: downcase) }
361
+ end
362
+ elsif value.respond_to? :to_hash
363
+ value.to_hash(downcase: downcase)
364
+ else
365
+ value
366
+ end
367
+ end
368
+
369
+ def parse_date(datestring)
370
+ if datestring.include?('Date')
371
+ date_pattern = /\/Date\((-?\d+)(\+\d+)?\)\//
372
+ original, date, timezone = *date_pattern.match(datestring)
373
+ date = (date.to_i / 1000)
374
+ Time.at(date).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
375
+ elsif /(\d\d\d\d)-(\d\d)/.match(datestring) # handles dates w/out Days: YYYY-MM*-DD
376
+ Time.parse(datestring + '-01').strftime('%Y-%m-%dT%H:%M:%S').to_s
377
+ else # handle date 'types' for small subset of payroll API's
378
+ Time.parse(datestring).strftime('%Y-%m-%dT%H:%M:%S').to_s
379
+ end
380
+ end
381
+ end
382
+ end
@@ -0,0 +1,294 @@
1
+ =begin
2
+ #Xero Finance API
3
+
4
+ #The Finance API is a collection of endpoints which customers can use in the course of a loan application, which may assist lenders to gain the confidence they need to provide capital.
5
+
6
+ Contact: api@xero.com
7
+ Generated by: https://openapi-generator.tech
8
+ OpenAPI Generator version: 4.3.1
9
+
10
+ =end
11
+
12
+ require 'time'
13
+ require 'date'
14
+
15
+ module XeroRuby::Finance
16
+ require 'bigdecimal'
17
+
18
+ class StatementResponse
19
+ # Xero Identifier of statement
20
+ attr_accessor :statement_id
21
+
22
+ # Start date of statement
23
+ attr_accessor :start_date
24
+
25
+ # End date of statement
26
+ attr_accessor :end_date
27
+
28
+ # Utc date time of when the statement was imported in Xero
29
+ attr_accessor :imported_date_time_utc
30
+
31
+ # Indicates the source of the statement data. Either imported from 1) direct bank feed OR 2) manual customer entry or upload. Manual import sources are STMTIMPORTSRC/MANUAL, STMTIMPORTSRC/CSV, STMTIMPORTSRC/OFX, Ofx or STMTIMPORTSRC/QIF. All other import sources are direct and, depending on the direct solution, may contain the name of the financial institution.
32
+ attr_accessor :import_source
33
+
34
+ # Opening balance sourced from imported bank statements (if supplied). Note, for manually uploaded statements, this balance is also manual and usually not supplied.
35
+ attr_accessor :start_balance
36
+
37
+ # Closing balance sourced from imported bank statements (if supplied). Note, for manually uploaded statements, this balance is also manual and usually not supplied.
38
+ attr_accessor :end_balance
39
+
40
+ # List of statement lines
41
+ attr_accessor :statement_lines
42
+
43
+ # Attribute mapping from ruby-style variable name to JSON key.
44
+ def self.attribute_map
45
+ {
46
+ :'statement_id' => :'statementId',
47
+ :'start_date' => :'startDate',
48
+ :'end_date' => :'endDate',
49
+ :'imported_date_time_utc' => :'importedDateTimeUtc',
50
+ :'import_source' => :'importSource',
51
+ :'start_balance' => :'startBalance',
52
+ :'end_balance' => :'endBalance',
53
+ :'statement_lines' => :'statementLines'
54
+ }
55
+ end
56
+
57
+ # Attribute type mapping.
58
+ def self.openapi_types
59
+ {
60
+ :'statement_id' => :'String',
61
+ :'start_date' => :'Date',
62
+ :'end_date' => :'Date',
63
+ :'imported_date_time_utc' => :'DateTime',
64
+ :'import_source' => :'String',
65
+ :'start_balance' => :'BigDecimal',
66
+ :'end_balance' => :'BigDecimal',
67
+ :'statement_lines' => :'Array<StatementLineResponse>'
68
+ }
69
+ end
70
+
71
+ # Initializes the object
72
+ # @param [Hash] attributes Model attributes in the form of hash
73
+ def initialize(attributes = {})
74
+ if (!attributes.is_a?(Hash))
75
+ fail ArgumentError, "The input argument (attributes) must be a hash in `XeroRuby::Finance::StatementResponse` initialize method"
76
+ end
77
+
78
+ # check to see if the attribute exists and convert string to symbol for hash key
79
+ attributes = attributes.each_with_object({}) { |(k, v), h|
80
+ if (!self.class.attribute_map.key?(k.to_sym))
81
+ fail ArgumentError, "`#{k}` is not a valid attribute in `XeroRuby::Finance::StatementResponse`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
82
+ end
83
+ h[k.to_sym] = v
84
+ }
85
+
86
+ if attributes.key?(:'statement_id')
87
+ self.statement_id = attributes[:'statement_id']
88
+ end
89
+
90
+ if attributes.key?(:'start_date')
91
+ self.start_date = attributes[:'start_date']
92
+ end
93
+
94
+ if attributes.key?(:'end_date')
95
+ self.end_date = attributes[:'end_date']
96
+ end
97
+
98
+ if attributes.key?(:'imported_date_time_utc')
99
+ self.imported_date_time_utc = attributes[:'imported_date_time_utc']
100
+ end
101
+
102
+ if attributes.key?(:'import_source')
103
+ self.import_source = attributes[:'import_source']
104
+ end
105
+
106
+ if attributes.key?(:'start_balance')
107
+ self.start_balance = attributes[:'start_balance']
108
+ end
109
+
110
+ if attributes.key?(:'end_balance')
111
+ self.end_balance = attributes[:'end_balance']
112
+ end
113
+
114
+ if attributes.key?(:'statement_lines')
115
+ if (value = attributes[:'statement_lines']).is_a?(Array)
116
+ self.statement_lines = value
117
+ end
118
+ end
119
+ end
120
+
121
+ # Show invalid properties with the reasons. Usually used together with valid?
122
+ # @return Array for valid properties with the reasons
123
+ def list_invalid_properties
124
+ invalid_properties = Array.new
125
+ invalid_properties
126
+ end
127
+
128
+ # Check to see if the all the properties in the model are valid
129
+ # @return true if the model is valid
130
+ def valid?
131
+ true
132
+ end
133
+
134
+ # Checks equality by comparing each attribute.
135
+ # @param [Object] Object to be compared
136
+ def ==(o)
137
+ return true if self.equal?(o)
138
+ self.class == o.class &&
139
+ statement_id == o.statement_id &&
140
+ start_date == o.start_date &&
141
+ end_date == o.end_date &&
142
+ imported_date_time_utc == o.imported_date_time_utc &&
143
+ import_source == o.import_source &&
144
+ start_balance == o.start_balance &&
145
+ end_balance == o.end_balance &&
146
+ statement_lines == o.statement_lines
147
+ end
148
+
149
+ # @see the `==` method
150
+ # @param [Object] Object to be compared
151
+ def eql?(o)
152
+ self == o
153
+ end
154
+
155
+ # Calculates hash code according to all attributes.
156
+ # @return [Integer] Hash code
157
+ def hash
158
+ [statement_id, start_date, end_date, imported_date_time_utc, import_source, start_balance, end_balance, statement_lines].hash
159
+ end
160
+
161
+ # Builds the object from hash
162
+ # @param [Hash] attributes Model attributes in the form of hash
163
+ # @return [Object] Returns the model itself
164
+ def self.build_from_hash(attributes)
165
+ new.build_from_hash(attributes)
166
+ end
167
+
168
+ # Builds the object from hash
169
+ # @param [Hash] attributes Model attributes in the form of hash
170
+ # @return [Object] Returns the model itself
171
+ def build_from_hash(attributes)
172
+ return nil unless attributes.is_a?(Hash)
173
+ self.class.openapi_types.each_pair do |key, type|
174
+ if type =~ /\AArray<(.*)>/i
175
+ # check to ensure the input is an array given that the attribute
176
+ # is documented as an array but the input is not
177
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
178
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
179
+ end
180
+ elsif !attributes[self.class.attribute_map[key]].nil?
181
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
182
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
183
+ end
184
+
185
+ self
186
+ end
187
+
188
+ # Deserializes the data based on type
189
+ # @param string type Data type
190
+ # @param string value Value to be deserialized
191
+ # @return [Object] Deserialized data
192
+ def _deserialize(type, value)
193
+ case type.to_sym
194
+ when :DateTime
195
+ DateTime.parse(parse_date(value))
196
+ when :Date
197
+ Date.parse(parse_date(value))
198
+ when :String
199
+ value.to_s
200
+ when :Integer
201
+ value.to_i
202
+ when :Float
203
+ value.to_f
204
+ when :BigDecimal
205
+ BigDecimal(value.to_s)
206
+ when :Boolean
207
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
208
+ true
209
+ else
210
+ false
211
+ end
212
+ when :Object
213
+ # generic object (usually a Hash), return directly
214
+ value
215
+ when /\AArray<(?<inner_type>.+)>\z/
216
+ inner_type = Regexp.last_match[:inner_type]
217
+ value.map { |v| _deserialize(inner_type, v) }
218
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
219
+ k_type = Regexp.last_match[:k_type]
220
+ v_type = Regexp.last_match[:v_type]
221
+ {}.tap do |hash|
222
+ value.each do |k, v|
223
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
224
+ end
225
+ end
226
+ else # model
227
+ XeroRuby::Finance.const_get(type).build_from_hash(value)
228
+ end
229
+ end
230
+
231
+ # Returns the string representation of the object
232
+ # @return [String] String presentation of the object
233
+ def to_s
234
+ to_hash.to_s
235
+ end
236
+
237
+ # to_body is an alias to to_hash (backward compatibility)
238
+ # @return [Hash] Returns the object in the form of hash
239
+ def to_body
240
+ to_hash
241
+ end
242
+
243
+ # Returns the object in the form of hash
244
+ # @return [Hash] Returns the object in the form of hash
245
+ def to_hash(downcase: false)
246
+ hash = {}
247
+ self.class.attribute_map.each_pair do |attr, param|
248
+ value = self.send(attr)
249
+ next if value.nil?
250
+ key = downcase ? attr : param
251
+ hash[key] = _to_hash(value, downcase: downcase)
252
+ end
253
+ hash
254
+ end
255
+
256
+ # Returns the object in the form of hash with snake_case
257
+ def to_attributes
258
+ to_hash(downcase: true)
259
+ end
260
+
261
+ # Outputs non-array value in the form of hash
262
+ # For object, use to_hash. Otherwise, just return the value
263
+ # @param [Object] value Any valid value
264
+ # @return [Hash] Returns the value in the form of hash
265
+ def _to_hash(value, downcase: false)
266
+ if value.is_a?(Array)
267
+ value.map do |v|
268
+ v.to_hash(downcase: downcase)
269
+ end
270
+ elsif value.is_a?(Hash)
271
+ {}.tap do |hash|
272
+ value.map { |k, v| hash[k] = _to_hash(v, downcase: downcase) }
273
+ end
274
+ elsif value.respond_to? :to_hash
275
+ value.to_hash(downcase: downcase)
276
+ else
277
+ value
278
+ end
279
+ end
280
+
281
+ def parse_date(datestring)
282
+ if datestring.include?('Date')
283
+ date_pattern = /\/Date\((-?\d+)(\+\d+)?\)\//
284
+ original, date, timezone = *date_pattern.match(datestring)
285
+ date = (date.to_i / 1000)
286
+ Time.at(date).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
287
+ elsif /(\d\d\d\d)-(\d\d)/.match(datestring) # handles dates w/out Days: YYYY-MM*-DD
288
+ Time.parse(datestring + '-01').strftime('%Y-%m-%dT%H:%M:%S').to_s
289
+ else # handle date 'types' for small subset of payroll API's
290
+ Time.parse(datestring).strftime('%Y-%m-%dT%H:%M:%S').to_s
291
+ end
292
+ end
293
+ end
294
+ end