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.
- checksums.yaml +4 -4
- data/.rubocop.yml +40 -0
- data/.ruby-version +1 -0
- data/.travis.yml +14 -3
- data/CHANGELOG.md +28 -0
- data/Gemfile +5 -4
- data/Guardfile +9 -4
- data/README.md +23 -4
- data/Rakefile +5 -5
- data/gemfiles/Gemfile.ruby-2.0 +14 -0
- data/lib/economic/account.rb +3 -3
- data/lib/economic/cash_book.rb +4 -7
- data/lib/economic/cash_book_entry.rb +4 -24
- data/lib/economic/company.rb +61 -0
- data/lib/economic/creditor.rb +4 -5
- data/lib/economic/creditor_contact.rb +5 -6
- data/lib/economic/creditor_entry.rb +1 -3
- data/lib/economic/current_invoice.rb +14 -21
- data/lib/economic/current_invoice_line.rb +4 -13
- data/lib/economic/debtor.rb +10 -11
- data/lib/economic/debtor_contact.rb +7 -8
- data/lib/economic/debtor_entry.rb +1 -3
- data/lib/economic/endpoint.rb +36 -6
- data/lib/economic/entity/handle.rb +54 -29
- data/lib/economic/entity/mapper.rb +1 -1
- data/lib/economic/entity.rb +26 -29
- data/lib/economic/entry.rb +1 -2
- data/lib/economic/invoice.rb +15 -8
- data/lib/economic/order.rb +2 -4
- data/lib/economic/product.rb +73 -0
- data/lib/economic/proxies/account_proxy.rb +2 -4
- data/lib/economic/proxies/actions/debtor_contact/all.rb +63 -0
- data/lib/economic/proxies/actions/find_by_ci_number.rb +1 -3
- data/lib/economic/proxies/actions/find_by_date_interval.rb +3 -6
- data/lib/economic/proxies/actions/find_by_handle_with_number.rb +1 -1
- data/lib/economic/proxies/actions/find_by_name.rb +1 -1
- data/lib/economic/proxies/actions/find_by_number.rb +2 -4
- data/lib/economic/proxies/actions/find_by_telephone_and_fax_number.rb +1 -3
- data/lib/economic/proxies/cash_book_entry_proxy.rb +19 -22
- data/lib/economic/proxies/cash_book_proxy.rb +5 -10
- data/lib/economic/proxies/company_proxy.rb +9 -0
- data/lib/economic/proxies/creditor_contact_proxy.rb +2 -2
- data/lib/economic/proxies/creditor_entry_proxy.rb +8 -14
- data/lib/economic/proxies/creditor_proxy.rb +8 -11
- data/lib/economic/proxies/current_invoice_line_proxy.rb +2 -2
- data/lib/economic/proxies/current_invoice_proxy.rb +3 -3
- data/lib/economic/proxies/debtor_contact_proxy.rb +6 -2
- data/lib/economic/proxies/debtor_entry_proxy.rb +6 -10
- data/lib/economic/proxies/debtor_proxy.rb +40 -55
- data/lib/economic/proxies/entity_proxy.rb +15 -15
- data/lib/economic/proxies/entry_proxy.rb +10 -16
- data/lib/economic/proxies/invoice_proxy.rb +3 -3
- data/lib/economic/proxies/order_proxy.rb +3 -3
- data/lib/economic/proxies/product_proxy.rb +11 -0
- data/lib/economic/session.rb +48 -21
- data/lib/economic/support/string.rb +5 -5
- data/lib/rconomic/version.rb +1 -1
- data/lib/rconomic.rb +39 -34
- data/lib/savon_ext/request.rb +17 -0
- data/rconomic.gemspec +8 -7
- data/spec/economic/account_spec.rb +3 -3
- data/spec/economic/cash_book_entry_spec.rb +26 -3
- data/spec/economic/cash_book_spec.rb +7 -7
- data/spec/economic/company_spec.rb +20 -0
- data/spec/economic/creditor_contact_spec.rb +4 -5
- data/spec/economic/creditor_entry_spec.rb +20 -0
- data/spec/economic/creditor_spec.rb +3 -3
- data/spec/economic/current_invoice_line_spec.rb +3 -3
- data/spec/economic/current_invoice_spec.rb +19 -19
- data/spec/economic/debtor_contact_spec.rb +4 -5
- data/spec/economic/debtor_entry_spec.rb +1 -1
- data/spec/economic/debtor_spec.rb +13 -13
- data/spec/economic/endpoint_spec.rb +27 -11
- data/spec/economic/entity/handle_spec.rb +10 -23
- data/spec/economic/entity/mapper_spec.rb +26 -30
- data/spec/economic/entity_spec.rb +36 -31
- data/spec/economic/entry_spec.rb +1 -1
- data/spec/economic/invoice_spec.rb +49 -7
- data/spec/economic/order_spec.rb +4 -4
- data/spec/economic/product_spec.rb +72 -0
- data/spec/economic/proxies/account_proxy_spec.rb +74 -0
- data/spec/economic/proxies/actions/debtor_contact/all_spec.rb +26 -0
- data/spec/economic/proxies/actions/find_by_name_spec.rb +6 -7
- data/spec/economic/proxies/cash_book_entry_proxy_spec.rb +27 -29
- data/spec/economic/proxies/cash_book_proxy_spec.rb +14 -22
- data/spec/economic/proxies/company_proxy_spec.rb +47 -0
- data/spec/economic/proxies/creditor_contact_proxy_spec.rb +11 -5
- data/spec/economic/proxies/creditor_entry_proxy_spec.rb +12 -12
- data/spec/economic/proxies/creditor_proxy_spec.rb +15 -15
- data/spec/economic/proxies/current_invoice_line_proxy_spec.rb +10 -4
- data/spec/economic/proxies/current_invoice_proxy_spec.rb +37 -19
- data/spec/economic/proxies/debtor_contact_proxy_spec.rb +8 -4
- data/spec/economic/proxies/debtor_entry_proxy_spec.rb +21 -11
- data/spec/economic/proxies/debtor_proxy_spec.rb +81 -40
- data/spec/economic/proxies/entry_proxy_spec.rb +17 -14
- data/spec/economic/proxies/invoice_proxy_spec.rb +24 -10
- data/spec/economic/proxies/order_proxy_spec.rb +20 -10
- data/spec/economic/proxies/product_proxy_spec.rb +86 -0
- data/spec/economic/session_spec.rb +74 -35
- data/spec/fixtures/account_get_all/multiple.xml +15 -0
- data/spec/fixtures/account_get_all/none.xml +8 -0
- data/spec/fixtures/account_get_all/single.xml +12 -0
- data/spec/fixtures/account_get_data_array/multiple.xml +69 -0
- data/spec/fixtures/company_get/success.xml +10 -0
- data/spec/fixtures/company_get_data/success.xml +32 -0
- data/spec/fixtures/current_invoice_line_create_from_data/success.xml +6 -37
- data/spec/fixtures/debtor_create_from_data/success.xml +5 -52
- data/spec/fixtures/debtor_get_orders/none.xml +9 -0
- data/spec/fixtures/product_create_from_data/success.xml +37 -0
- data/spec/fixtures/product_find_by_number/found.xml +10 -0
- data/spec/fixtures/product_find_by_number/not_found.xml +6 -0
- data/spec/fixtures/product_get_all/multiple.xml +15 -0
- data/spec/fixtures/product_get_all/single.xml +12 -0
- data/spec/fixtures/product_get_data/success.xml +37 -0
- data/spec/fixtures/product_get_data_array/multiple.xml +69 -0
- data/spec/spec_helper.rb +6 -9
- data/spec/support/factories.rb +14 -14
- 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
|
-
|
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 = [
|
9
|
+
handles = [response[handle_key]].flatten.reject(&:blank?).collect do |handle|
|
13
10
|
Entity::Handle.build(handle)
|
14
11
|
end
|
15
12
|
|
@@ -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(
|
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]
|
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(
|
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
|
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
|
-
|
8
|
+
"cashBookHandle" => owner.handle.to_hash
|
9
9
|
)
|
10
10
|
|
11
11
|
if entity_hash != {}
|
12
|
-
[
|
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,
|
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,
|
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,
|
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,
|
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
|
-
|
62
|
-
|
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,
|
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"] = {
|
76
|
-
data[handle_name] = {
|
77
|
-
data["contraAccountHandle"] = {
|
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
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
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
|
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(
|
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
|
-
|
21
|
-
|
22
|
-
}
|
23
|
-
})
|
16
|
+
response = request("GetName", "cashBookHandle" => {
|
17
|
+
"Number" => id
|
18
|
+
})
|
24
19
|
|
25
20
|
cash_book = build
|
26
21
|
cash_book.number = id
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
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
|
-
|
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
|
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(
|
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(
|
18
|
-
|
19
|
-
|
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
|
-
|
28
|
-
|
29
|
-
"
|
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
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
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(
|
14
|
-
|
15
|
-
|
16
|
-
|
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
|
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
|
-
|
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
|
2
|
-
require
|
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
|
-
|
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
|
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
|
-
|
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
|
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(
|
7
|
-
|
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
|
-
|
19
|
-
|
20
|
-
"
|
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
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
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 =
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
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 =
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
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 =
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
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
|
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(
|
8
|
+
Economic.const_get(entity_class_name)
|
9
9
|
end
|
10
10
|
|
11
11
|
def entity_class_name
|
12
|
-
proxy_class_name = name.split(
|
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
|
-
|
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 =
|
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
|
103
|
+
alias << append
|
102
104
|
|
103
105
|
protected
|
104
106
|
|
105
|
-
|
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(
|
115
|
-
response = request(:get_data_array,
|
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
|
|