rconomic 0.5.2 → 0.6.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 (118) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +40 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +14 -3
  5. data/CHANGELOG.md +28 -0
  6. data/Gemfile +5 -4
  7. data/Guardfile +9 -4
  8. data/README.md +23 -4
  9. data/Rakefile +5 -5
  10. data/gemfiles/Gemfile.ruby-2.0 +14 -0
  11. data/lib/economic/account.rb +3 -3
  12. data/lib/economic/cash_book.rb +4 -7
  13. data/lib/economic/cash_book_entry.rb +4 -24
  14. data/lib/economic/company.rb +61 -0
  15. data/lib/economic/creditor.rb +4 -5
  16. data/lib/economic/creditor_contact.rb +5 -6
  17. data/lib/economic/creditor_entry.rb +1 -3
  18. data/lib/economic/current_invoice.rb +14 -21
  19. data/lib/economic/current_invoice_line.rb +4 -13
  20. data/lib/economic/debtor.rb +10 -11
  21. data/lib/economic/debtor_contact.rb +7 -8
  22. data/lib/economic/debtor_entry.rb +1 -3
  23. data/lib/economic/endpoint.rb +36 -6
  24. data/lib/economic/entity/handle.rb +54 -29
  25. data/lib/economic/entity/mapper.rb +1 -1
  26. data/lib/economic/entity.rb +26 -29
  27. data/lib/economic/entry.rb +1 -2
  28. data/lib/economic/invoice.rb +15 -8
  29. data/lib/economic/order.rb +2 -4
  30. data/lib/economic/product.rb +73 -0
  31. data/lib/economic/proxies/account_proxy.rb +2 -4
  32. data/lib/economic/proxies/actions/debtor_contact/all.rb +63 -0
  33. data/lib/economic/proxies/actions/find_by_ci_number.rb +1 -3
  34. data/lib/economic/proxies/actions/find_by_date_interval.rb +3 -6
  35. data/lib/economic/proxies/actions/find_by_handle_with_number.rb +1 -1
  36. data/lib/economic/proxies/actions/find_by_name.rb +1 -1
  37. data/lib/economic/proxies/actions/find_by_number.rb +2 -4
  38. data/lib/economic/proxies/actions/find_by_telephone_and_fax_number.rb +1 -3
  39. data/lib/economic/proxies/cash_book_entry_proxy.rb +19 -22
  40. data/lib/economic/proxies/cash_book_proxy.rb +5 -10
  41. data/lib/economic/proxies/company_proxy.rb +9 -0
  42. data/lib/economic/proxies/creditor_contact_proxy.rb +2 -2
  43. data/lib/economic/proxies/creditor_entry_proxy.rb +8 -14
  44. data/lib/economic/proxies/creditor_proxy.rb +8 -11
  45. data/lib/economic/proxies/current_invoice_line_proxy.rb +2 -2
  46. data/lib/economic/proxies/current_invoice_proxy.rb +3 -3
  47. data/lib/economic/proxies/debtor_contact_proxy.rb +6 -2
  48. data/lib/economic/proxies/debtor_entry_proxy.rb +6 -10
  49. data/lib/economic/proxies/debtor_proxy.rb +40 -55
  50. data/lib/economic/proxies/entity_proxy.rb +15 -15
  51. data/lib/economic/proxies/entry_proxy.rb +10 -16
  52. data/lib/economic/proxies/invoice_proxy.rb +3 -3
  53. data/lib/economic/proxies/order_proxy.rb +3 -3
  54. data/lib/economic/proxies/product_proxy.rb +11 -0
  55. data/lib/economic/session.rb +48 -21
  56. data/lib/economic/support/string.rb +5 -5
  57. data/lib/rconomic/version.rb +1 -1
  58. data/lib/rconomic.rb +39 -34
  59. data/lib/savon_ext/request.rb +17 -0
  60. data/rconomic.gemspec +8 -7
  61. data/spec/economic/account_spec.rb +3 -3
  62. data/spec/economic/cash_book_entry_spec.rb +26 -3
  63. data/spec/economic/cash_book_spec.rb +7 -7
  64. data/spec/economic/company_spec.rb +20 -0
  65. data/spec/economic/creditor_contact_spec.rb +4 -5
  66. data/spec/economic/creditor_entry_spec.rb +20 -0
  67. data/spec/economic/creditor_spec.rb +3 -3
  68. data/spec/economic/current_invoice_line_spec.rb +3 -3
  69. data/spec/economic/current_invoice_spec.rb +19 -19
  70. data/spec/economic/debtor_contact_spec.rb +4 -5
  71. data/spec/economic/debtor_entry_spec.rb +1 -1
  72. data/spec/economic/debtor_spec.rb +13 -13
  73. data/spec/economic/endpoint_spec.rb +27 -11
  74. data/spec/economic/entity/handle_spec.rb +10 -23
  75. data/spec/economic/entity/mapper_spec.rb +26 -30
  76. data/spec/economic/entity_spec.rb +36 -31
  77. data/spec/economic/entry_spec.rb +1 -1
  78. data/spec/economic/invoice_spec.rb +49 -7
  79. data/spec/economic/order_spec.rb +4 -4
  80. data/spec/economic/product_spec.rb +72 -0
  81. data/spec/economic/proxies/account_proxy_spec.rb +74 -0
  82. data/spec/economic/proxies/actions/debtor_contact/all_spec.rb +26 -0
  83. data/spec/economic/proxies/actions/find_by_name_spec.rb +6 -7
  84. data/spec/economic/proxies/cash_book_entry_proxy_spec.rb +27 -29
  85. data/spec/economic/proxies/cash_book_proxy_spec.rb +14 -22
  86. data/spec/economic/proxies/company_proxy_spec.rb +47 -0
  87. data/spec/economic/proxies/creditor_contact_proxy_spec.rb +11 -5
  88. data/spec/economic/proxies/creditor_entry_proxy_spec.rb +12 -12
  89. data/spec/economic/proxies/creditor_proxy_spec.rb +15 -15
  90. data/spec/economic/proxies/current_invoice_line_proxy_spec.rb +10 -4
  91. data/spec/economic/proxies/current_invoice_proxy_spec.rb +37 -19
  92. data/spec/economic/proxies/debtor_contact_proxy_spec.rb +8 -4
  93. data/spec/economic/proxies/debtor_entry_proxy_spec.rb +21 -11
  94. data/spec/economic/proxies/debtor_proxy_spec.rb +81 -40
  95. data/spec/economic/proxies/entry_proxy_spec.rb +17 -14
  96. data/spec/economic/proxies/invoice_proxy_spec.rb +24 -10
  97. data/spec/economic/proxies/order_proxy_spec.rb +20 -10
  98. data/spec/economic/proxies/product_proxy_spec.rb +86 -0
  99. data/spec/economic/session_spec.rb +74 -35
  100. data/spec/fixtures/account_get_all/multiple.xml +15 -0
  101. data/spec/fixtures/account_get_all/none.xml +8 -0
  102. data/spec/fixtures/account_get_all/single.xml +12 -0
  103. data/spec/fixtures/account_get_data_array/multiple.xml +69 -0
  104. data/spec/fixtures/company_get/success.xml +10 -0
  105. data/spec/fixtures/company_get_data/success.xml +32 -0
  106. data/spec/fixtures/current_invoice_line_create_from_data/success.xml +6 -37
  107. data/spec/fixtures/debtor_create_from_data/success.xml +5 -52
  108. data/spec/fixtures/debtor_get_orders/none.xml +9 -0
  109. data/spec/fixtures/product_create_from_data/success.xml +37 -0
  110. data/spec/fixtures/product_find_by_number/found.xml +10 -0
  111. data/spec/fixtures/product_find_by_number/not_found.xml +6 -0
  112. data/spec/fixtures/product_get_all/multiple.xml +15 -0
  113. data/spec/fixtures/product_get_all/single.xml +12 -0
  114. data/spec/fixtures/product_get_data/success.xml +37 -0
  115. data/spec/fixtures/product_get_data_array/multiple.xml +69 -0
  116. data/spec/spec_helper.rb +6 -9
  117. data/spec/support/factories.rb +14 -14
  118. metadata +54 -9
@@ -0,0 +1,63 @@
1
+ module Economic
2
+ module Proxies
3
+ module Actions
4
+ module DebtorContact
5
+ class All
6
+ def initialize(caller)
7
+ @caller = caller
8
+ @session = caller.session
9
+ end
10
+
11
+ def call
12
+ build_partial_contact_entities(handles_from_endpoint)
13
+ end
14
+
15
+ private
16
+
17
+ def build(*options)
18
+ @caller.build(options)
19
+ end
20
+
21
+ def build_partial_contact_entities(handles)
22
+ handles.collect do |handle|
23
+ contact = build
24
+ contact.partial = true
25
+ contact.persisted = true
26
+ contact.handle = handle
27
+ contact.id = handle[:id]
28
+ contact.number = handle[:number]
29
+ contact
30
+ end
31
+ end
32
+
33
+ def handles_from_endpoint
34
+ [response[handle_key]].flatten.reject(&:blank?)
35
+ end
36
+
37
+ def handle_key
38
+ (Support::String.underscore(@caller.class.entity_class_name) + "_handle").to_sym
39
+ end
40
+
41
+ def owner
42
+ @caller.owner
43
+ end
44
+
45
+ def request(action, data)
46
+ @session.request(
47
+ soap_action_name("Debtor", action),
48
+ data
49
+ )
50
+ end
51
+
52
+ def response
53
+ request("get_debtor_contacts", {"debtorHandle" => {"Number" => owner.number}})
54
+ end
55
+
56
+ def soap_action_name(entity_class, action)
57
+ Endpoint.new.soap_action_name(entity_class, action)
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -3,9 +3,7 @@ module FindByCiNumber
3
3
  # be partially loaded
4
4
  def find_by_ci_number(ci_number)
5
5
  # Get a list of handles from e-conomic
6
- response = request(:find_by_ci_number, {
7
- 'ciNumber' => ci_number
8
- })
6
+ response = request(:find_by_ci_number, "ciNumber" => ci_number)
9
7
 
10
8
  # Make sure we always have an array of handles even if the result only
11
9
  # contains one
@@ -1,15 +1,12 @@
1
1
  module Economic
2
2
  module FindByDateInterval
3
-
4
3
  # Returns entity objects for a given interval of days.
5
4
  def find_by_date_interval(from, unto)
6
- response = request(:find_by_date_interval, {
7
- 'first' => from.iso8601,
8
- 'last' => unto.iso8601
9
- })
5
+ response = request(:find_by_date_interval, "first" => from.iso8601,
6
+ "last" => unto.iso8601)
10
7
 
11
8
  handle_key = "#{Support::String.underscore(entity_class_name)}_handle".intern
12
- handles = [ response[handle_key] ].flatten.reject(&:blank?).collect do |handle|
9
+ handles = [response[handle_key]].flatten.reject(&:blank?).collect do |handle|
13
10
  Entity::Handle.build(handle)
14
11
  end
15
12
 
@@ -3,7 +3,7 @@
3
3
  module FindByHandleWithNumber
4
4
  def find(handle)
5
5
  handle = if handle.respond_to?(:to_i)
6
- Economic::Entity::Handle.build(:number => handle.to_i)
6
+ Economic::Entity::Handle.build(:number => handle)
7
7
  else
8
8
  Economic::Entity::Handle.build(handle)
9
9
  end
@@ -53,7 +53,7 @@ module Economic
53
53
  end
54
54
 
55
55
  def response
56
- request('FindByName', {'name' => name})
56
+ request("FindByName", {"name" => name})
57
57
  end
58
58
 
59
59
  def scope_to_owner(contacts)
@@ -1,9 +1,7 @@
1
1
  module FindByNumber
2
2
  # Returns handle with a given number.
3
3
  def find_by_number(number)
4
- response = request('FindByNumber', {
5
- 'number' => number
6
- })
4
+ response = request("FindByNumber", "number" => number)
7
5
 
8
6
  if response.empty?
9
7
  nil
@@ -12,7 +10,7 @@ module FindByNumber
12
10
  entity.partial = true
13
11
  entity.persisted = true
14
12
  entity.handle = response
15
- entity.number = response[:number].to_i
13
+ entity.number = response[:number]
16
14
  entity
17
15
  end
18
16
  end
@@ -1,9 +1,7 @@
1
1
  module FindByTelephoneAndFaxNumber
2
2
  # Returns handle for debtor with phone or fax number.
3
3
  def find_by_telephone_and_fax_number(number)
4
- response = request('FindByTelephoneAndFaxNumber', {
5
- 'telephoneAndFaxNumber' => number
6
- })
4
+ response = request("FindByTelephoneAndFaxNumber", "telephoneAndFaxNumber" => number)
7
5
  if response == {}
8
6
  nil
9
7
  else
@@ -1,15 +1,15 @@
1
- require 'economic/proxies/entity_proxy'
1
+ require "economic/proxies/entity_proxy"
2
2
 
3
3
  module Economic
4
4
  class CashBookEntryProxy < EntityProxy
5
5
  def all
6
6
  entity_hash = session.request(
7
7
  Endpoint.new.soap_action_name(CashBook, :get_entries),
8
- {"cashBookHandle" => owner.handle.to_hash}
8
+ "cashBookHandle" => owner.handle.to_hash
9
9
  )
10
10
 
11
11
  if entity_hash != {}
12
- [ entity_hash.values.first ].flatten.each do |id_hash|
12
+ [entity_hash.values.first].flatten.each do |id_hash|
13
13
  find(id_hash)
14
14
  end
15
15
  end
@@ -23,7 +23,7 @@ module Economic
23
23
  # :contra_account_handle => { :number => 1011 }
24
24
  # )
25
25
  def create_finance_voucher(handles)
26
- create_cash_book_entry_for_handles(handles, 'CreateFinanceVoucher')
26
+ create_cash_book_entry_for_handles(handles, "CreateFinanceVoucher")
27
27
  end
28
28
 
29
29
  # Creates a debtor payment and returns the cash book entry.
@@ -33,7 +33,7 @@ module Economic
33
33
  # :contra_account_handle => { :number => 1510 }
34
34
  # )
35
35
  def create_debtor_payment(handles)
36
- create_cash_book_entry_for_handles(handles, 'CreateDebtorPayment')
36
+ create_cash_book_entry_for_handles(handles, "CreateDebtorPayment")
37
37
  end
38
38
 
39
39
  # Creates a creditor payment and returns the cash book entry.
@@ -43,7 +43,7 @@ module Economic
43
43
  # :contra_account_handle => { :number => 1510 }
44
44
  # )
45
45
  def create_creditor_payment(handles)
46
- create_cash_book_entry_for_handles(handles, 'CreateCreditorPayment')
46
+ create_cash_book_entry_for_handles(handles, "CreateCreditorPayment")
47
47
  end
48
48
 
49
49
  # Creates a creditor invoice and returns the cash book entry.
@@ -53,28 +53,26 @@ module Economic
53
53
  # :contra_account_handle => { :number => 1510 }
54
54
  # )
55
55
  def create_creditor_invoice(handles)
56
- create_cash_book_entry_for_handles(handles, 'CreateCreditorInvoice')
56
+ create_cash_book_entry_for_handles(handles, "CreateCreditorInvoice")
57
57
  end
58
58
 
59
59
  def set_due_date(id, date)
60
- request("SetDueDate", {
61
- 'cashBookEntryHandle' => {
62
- 'Id1' => owner.handle[:number], 'Id2' => id
63
- },
64
- :value => date
65
- })
60
+ request("SetDueDate", "cashBookEntryHandle" => {
61
+ "Id1" => owner.handle[:number], "Id2" => id
62
+ },
63
+ :value => date)
66
64
  end
67
65
 
68
66
  protected
69
67
 
70
- def create_cash_book_entry_for_handles(handles, action, foobar = nil)
68
+ def create_cash_book_entry_for_handles(handles, action, _foobar = nil)
71
69
  handle_name = handle_name_for_action(action)
72
70
  handle_key = Economic::Support::String.underscore(handle_name).intern
73
71
 
74
72
  data = {}
75
- data["cashBookHandle"] = { 'Number' => owner.handle[:number] }
76
- data[handle_name] = { 'Number' => handles[handle_key][:number] } if handles[handle_key]
77
- data["contraAccountHandle"] = { 'Number' => handles[:contra_account_handle][:number] } if handles[:contra_account_handle]
73
+ data["cashBookHandle"] = {"Number" => owner.handle[:number]}
74
+ data[handle_name] = {"Number" => handles[handle_key][:number]} if handles[handle_key]
75
+ data["contraAccountHandle"] = {"Number" => handles[:contra_account_handle][:number]} if handles[:contra_account_handle]
78
76
 
79
77
  response = request(action, data)
80
78
 
@@ -83,12 +81,11 @@ module Economic
83
81
 
84
82
  def handle_name_for_action(action_name)
85
83
  {
86
- 'CreateFinanceVoucher' => 'accountHandle',
87
- 'CreateDebtorPayment' => 'debtorHandle',
88
- 'CreateCreditorInvoice' => 'creditorHandle',
89
- 'CreateCreditorPayment' => 'creditorHandle'
84
+ "CreateFinanceVoucher" => "accountHandle",
85
+ "CreateDebtorPayment" => "debtorHandle",
86
+ "CreateCreditorInvoice" => "creditorHandle",
87
+ "CreateCreditorPayment" => "creditorHandle"
90
88
  }[action_name]
91
89
  end
92
-
93
90
  end
94
91
  end
@@ -1,26 +1,21 @@
1
- require 'economic/proxies/entity_proxy'
1
+ require "economic/proxies/entity_proxy"
2
2
 
3
3
  module Economic
4
4
  class CashBookProxy < EntityProxy
5
5
  def find_by_name(name)
6
- response = request('FindByName', {
7
- 'name' => name
8
- })
6
+ response = request("FindByName", "name" => name)
9
7
 
10
8
  cash_book = build
11
9
  cash_book.partial = true
12
10
  cash_book.persisted = true
13
11
  cash_book.number = response[:number]
14
12
  cash_book
15
-
16
13
  end
17
14
 
18
15
  def get_name(id)
19
- response = request("GetName", {
20
- 'cashBookHandle' => {
21
- 'Number' => id
22
- }
23
- })
16
+ response = request("GetName", "cashBookHandle" => {
17
+ "Number" => id
18
+ })
24
19
 
25
20
  cash_book = build
26
21
  cash_book.number = id
@@ -0,0 +1,9 @@
1
+ require "economic/proxies/entity_proxy"
2
+
3
+ module Economic
4
+ class CompanyProxy < EntityProxy
5
+ def get
6
+ get_data(request(:get))
7
+ end
8
+ end
9
+ end
@@ -1,4 +1,4 @@
1
- require 'economic/proxies/entity_proxy'
1
+ require "economic/proxies/entity_proxy"
2
2
 
3
3
  module Economic
4
4
  class CreditorContactProxy < EntityProxy
@@ -8,7 +8,7 @@ module Economic
8
8
  Proxies::Actions::FindByName.new(self, name).call
9
9
  end
10
10
 
11
- private
11
+ private
12
12
 
13
13
  # Initialize properties in contact with values from owner. Returns contact.
14
14
  def initialize_properties_with_values_from_owner(contact)
@@ -1,11 +1,9 @@
1
- require 'economic/proxies/entity_proxy'
1
+ require "economic/proxies/entity_proxy"
2
2
 
3
3
  module Economic
4
4
  class CreditorEntryProxy < EntityProxy
5
5
  def find_by_invoice_number(invoice_number)
6
- response = request('FindByInvoiceNumber', {
7
- 'invoiceNumber' => invoice_number
8
- })
6
+ response = request("FindByInvoiceNumber", "invoiceNumber" => invoice_number)
9
7
 
10
8
  response[:creditor_entry_handle].map do |creditor_entry_handle|
11
9
  # Kinda ugly, but we get an array instead of a hash when there's only one result. :)
@@ -14,21 +12,17 @@ module Economic
14
12
  end
15
13
 
16
14
  def find(serial_number)
17
- response = request('GetData', {
18
- 'entityHandle' => {
19
- 'SerialNumber' => serial_number
20
- }
21
- })
15
+ response = request("GetData", "entityHandle" => {
16
+ "SerialNumber" => serial_number
17
+ })
22
18
 
23
19
  build(response)
24
20
  end
25
21
 
26
22
  def match(*serial_numbers)
27
- response = request('MatchEntries', {
28
- :entries => {
29
- "CreditorEntryHandle" => serial_numbers.map { |serial_number|
30
- { "SerialNumber" => serial_number }
31
- }
23
+ request("MatchEntries", :entries => {
24
+ "CreditorEntryHandle" => serial_numbers.map { |serial_number|
25
+ {"SerialNumber" => serial_number}
32
26
  }
33
27
  })
34
28
  end
@@ -1,7 +1,7 @@
1
- require 'economic/proxies/entity_proxy'
2
- require 'economic/proxies/actions/find_by_ci_number'
3
- require 'economic/proxies/actions/find_by_handle_with_number'
4
- require 'economic/proxies/actions/find_by_number'
1
+ require "economic/proxies/entity_proxy"
2
+ require "economic/proxies/actions/find_by_ci_number"
3
+ require "economic/proxies/actions/find_by_handle_with_number"
4
+ require "economic/proxies/actions/find_by_number"
5
5
 
6
6
  module Economic
7
7
  class CreditorProxy < EntityProxy
@@ -10,15 +10,12 @@ module Economic
10
10
  include FindByNumber
11
11
 
12
12
  def create_simple(opts)
13
- response = request('Create', {
14
- 'number' => opts[:number],
15
- 'creditorGroupHandle' => { 'Number' => opts[:creditor_group_handle][:number] },
16
- :name => opts[:name],
17
- :vatZone => opts[:vat_zone]
18
- })
13
+ response = request("Create", "number" => opts[:number],
14
+ "creditorGroupHandle" => {"Number" => opts[:creditor_group_handle][:number]},
15
+ :name => opts[:name],
16
+ :vatZone => opts[:vat_zone])
19
17
 
20
18
  find(response)
21
19
  end
22
-
23
20
  end
24
21
  end
@@ -1,4 +1,4 @@
1
- require 'economic/proxies/entity_proxy'
1
+ require "economic/proxies/entity_proxy"
2
2
 
3
3
  module Economic
4
4
  class CurrentInvoiceLineProxy < EntityProxy
@@ -8,7 +8,7 @@ module Economic
8
8
  super(handle)
9
9
  end
10
10
 
11
- private
11
+ private
12
12
 
13
13
  # Initialize properties in invoice_line with values from owner
14
14
  def initialize_properties_with_values_from_owner(invoice_line)
@@ -1,11 +1,11 @@
1
- require 'economic/proxies/entity_proxy'
2
- require 'economic/proxies/actions/find_by_date_interval'
1
+ require "economic/proxies/entity_proxy"
2
+ require "economic/proxies/actions/find_by_date_interval"
3
3
 
4
4
  module Economic
5
5
  class CurrentInvoiceProxy < EntityProxy
6
6
  include FindByDateInterval
7
7
 
8
- private
8
+ private
9
9
 
10
10
  # Initialize properties in invoice with values from owner
11
11
  def initialize_properties_with_values_from_owner(invoice)
@@ -1,4 +1,4 @@
1
- require 'economic/proxies/entity_proxy'
1
+ require "economic/proxies/entity_proxy"
2
2
 
3
3
  module Economic
4
4
  class DebtorContactProxy < EntityProxy
@@ -8,7 +8,11 @@ module Economic
8
8
  Proxies::Actions::FindByName.new(self, name).call
9
9
  end
10
10
 
11
- private
11
+ def all
12
+ Proxies::Actions::DebtorContact::All.new(self).call
13
+ end
14
+
15
+ private
12
16
 
13
17
  # Initialize properties in contact with values from owner. Returns contact.
14
18
  def initialize_properties_with_values_from_owner(contact)
@@ -1,12 +1,10 @@
1
- require 'economic/proxies/entity_proxy'
1
+ require "economic/proxies/entity_proxy"
2
2
 
3
3
  module Economic
4
4
  class DebtorEntryProxy < EntityProxy
5
5
  def find_by_invoice_number(from, to = from)
6
- response = request('FindByInvoiceNumber', {
7
- 'from' => from,
8
- 'to' => to
9
- })
6
+ response = request("FindByInvoiceNumber", "from" => from,
7
+ "to" => to)
10
8
 
11
9
  response[:debtor_entry_handle].map do |debtor_entry_handle|
12
10
  # Kinda ugly, but we get an array instead of a hash when there's only one result. :)
@@ -15,11 +13,9 @@ module Economic
15
13
  end
16
14
 
17
15
  def match(*serial_numbers)
18
- response = request('MatchEntries', {
19
- :entries => {
20
- "DebtorEntryHandle" => serial_numbers.map { |serial_number|
21
- { "SerialNumber" => serial_number }
22
- }
16
+ request("MatchEntries", :entries => {
17
+ "DebtorEntryHandle" => serial_numbers.map { |serial_number|
18
+ {"SerialNumber" => serial_number}
23
19
  }
24
20
  })
25
21
  end
@@ -1,8 +1,8 @@
1
- require 'economic/proxies/entity_proxy'
2
- require 'economic/proxies/actions/find_by_ci_number'
3
- require 'economic/proxies/actions/find_by_handle_with_number'
4
- require 'economic/proxies/actions/find_by_number'
5
- require 'economic/proxies/actions/find_by_telephone_and_fax_number'
1
+ require "economic/proxies/entity_proxy"
2
+ require "economic/proxies/actions/find_by_ci_number"
3
+ require "economic/proxies/actions/find_by_handle_with_number"
4
+ require "economic/proxies/actions/find_by_number"
5
+ require "economic/proxies/actions/find_by_telephone_and_fax_number"
6
6
 
7
7
  module Economic
8
8
  class DebtorProxy < EntityProxy
@@ -17,64 +17,49 @@ module Economic
17
17
  end
18
18
 
19
19
  def get_debtor_contacts(debtor_handle)
20
- response = request :get_debtor_contacts, {
21
- 'debtorHandle' => { 'Number' => debtor_handle.number }
22
- }
23
- if response.empty?
24
- nil
25
- else
26
- entities = []
27
- [response[:debtor_contact_handle]].flatten.each do |handle|
28
- entity = Economic::DebtorContact.new(:session => session)
29
- entity.partial = true
30
- entity.persisted = true
31
- entity.handle = handle
32
- entity.number = handle[:number].to_i
33
- entities << entity
34
- end
35
- entities
36
- end
20
+ response = fetch_response(:get_debtor_contacts, debtor_handle)
21
+ build_entities_from_response(
22
+ Economic::DebtorContact,
23
+ response[:debtor_contact_handle]
24
+ )
37
25
  end
38
26
 
39
27
  def get_invoices(debtor_handle)
40
- response = request :get_invoices, {
41
- 'debtorHandle' => { 'Number' => debtor_handle.number }
42
- }
43
- if response.empty?
44
- nil
45
- else
46
- entities = []
47
- [response[:invoice_handle]].flatten.each do |handle|
48
- entity = Economic::Invoice.new(:session => session)
49
- entity.partial = true
50
- entity.persisted = true
51
- entity.handle = handle
52
- entity.number = handle[:number].to_i
53
- entities << entity
54
- end
55
- entities
56
- end
28
+ response = fetch_response(:get_invoices, debtor_handle)
29
+ build_entities_from_response(
30
+ Economic::Invoice,
31
+ response[:invoice_handle]
32
+ )
57
33
  end
58
34
 
59
35
  # Returns handle for orders for debtor.
60
36
  def get_orders(debtor_handle)
61
- response = request :get_orders, {
62
- 'debtorHandle' => { 'Number' => debtor_handle.number }
63
- }
64
- if response.empty?
65
- nil
66
- else
67
- entities = []
68
- [response[:order_handle]].flatten.each do |handle|
69
- entity = Economic::Order.new(:session => session)
70
- entity.partial = true
71
- entity.persisted = true
72
- entity.handle = handle
73
- entity.number = handle[:id].to_i
74
- entities << entity
75
- end
76
- entities
37
+ response = fetch_response(:get_orders, debtor_handle)
38
+ build_entities_from_response(
39
+ Economic::Order,
40
+ response[:order_handle]
41
+ )
42
+ end
43
+
44
+ private
45
+
46
+ def build_entities_from_response(entity_class, handles)
47
+ return nil if handles.nil?
48
+ [handles].flatten.map do |handle|
49
+ entity = entity_class.new(:session => session)
50
+ entity.partial = true
51
+ entity.persisted = true
52
+ entity.handle = handle
53
+ entity.number = handle[:id].to_i
54
+ entity
77
55
  end
78
56
  end
57
+
58
+ def fetch_response(operation, debtor_handle)
59
+ request(
60
+ operation,
61
+ "debtorHandle" => {"Number" => debtor_handle.number}
62
+ )
63
+ end
79
64
  end
80
65
  end
@@ -1,16 +1,16 @@
1
- require 'forwardable'
1
+ require "forwardable"
2
2
 
3
3
  module Economic
4
4
  class EntityProxy
5
5
  class << self
6
6
  # Returns the class this Proxy is a proxy for
7
7
  def entity_class
8
- Economic.const_get(self.entity_class_name)
8
+ Economic.const_get(entity_class_name)
9
9
  end
10
10
 
11
11
  def entity_class_name
12
- proxy_class_name = name.split('::').last
13
- proxy_class_name.sub(/Proxy$/, '')
12
+ proxy_class_name = name.split("::").last
13
+ proxy_class_name.sub(/Proxy$/, "")
14
14
  end
15
15
  end
16
16
 
@@ -59,7 +59,7 @@ module Economic
59
59
  entity.update_properties(properties)
60
60
  entity.partial = false
61
61
 
62
- self.append(entity)
62
+ append(entity)
63
63
  initialize_properties_with_values_from_owner(entity)
64
64
 
65
65
  entity
@@ -78,7 +78,11 @@ module Economic
78
78
  # Fetches Entity data from API and returns an Entity initialized with that
79
79
  # data added to Proxy
80
80
  def find(handle)
81
- handle = Entity::Handle.new(handle)
81
+ handle = if handle.respond_to?(:to_i)
82
+ Entity::Handle.new(:id => handle)
83
+ else
84
+ Entity::Handle.new(handle)
85
+ end
82
86
  entity_hash = get_data(handle)
83
87
  entity = build(entity_hash)
84
88
  entity.persisted = true
@@ -88,9 +92,7 @@ module Economic
88
92
  # Gets data for Entity from the API. Returns Hash with the response data
89
93
  def get_data(handle)
90
94
  handle = Entity::Handle.new(handle)
91
- entity_hash = request(:get_data, {
92
- 'entityHandle' => handle.to_hash
93
- })
95
+ entity_hash = request(:get_data, "entityHandle" => handle.to_hash)
94
96
  entity_hash
95
97
  end
96
98
 
@@ -98,21 +100,19 @@ module Economic
98
100
  def append(item)
99
101
  items << item unless items.include?(item)
100
102
  end
101
- alias :<< :append
103
+ alias << append
102
104
 
103
105
  protected
104
106
 
105
- def items
106
- @items
107
- end
107
+ attr_reader :items
108
108
 
109
109
  # Fetches all data for the given handles. Returns Array with hashes of
110
110
  # entity data
111
111
  def get_data_array(handles)
112
112
  return [] unless handles && handles.any?
113
113
 
114
- entity_class_name_for_soap_request = entity_class.name.split('::').last
115
- response = request(:get_data_array, {'entityHandles' => {"#{entity_class_name_for_soap_request}Handle" => handles.collect(&:to_hash)}})
114
+ entity_class_name_for_soap_request = entity_class.name.split("::").last
115
+ response = request(:get_data_array, "entityHandles" => {"#{entity_class_name_for_soap_request}Handle" => handles.collect(&:to_hash)})
116
116
  [response["#{entity_class.key}_data".intern]].flatten
117
117
  end
118
118