business-central 1.0.3 → 1.0.7

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 (128) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +58 -15
  3. data/lib/business_central/client.rb +71 -41
  4. data/lib/business_central/exceptions.rb +19 -9
  5. data/lib/business_central/object/account.rb +4 -2
  6. data/lib/business_central/object/aged_account_payable.rb +4 -2
  7. data/lib/business_central/object/aged_account_receivable.rb +4 -2
  8. data/lib/business_central/object/argument_helper.rb +22 -0
  9. data/lib/business_central/object/attachment.rb +30 -0
  10. data/lib/business_central/object/balance_sheet.rb +4 -2
  11. data/lib/business_central/object/base.rb +90 -56
  12. data/lib/business_central/object/cash_flow_statement.rb +4 -2
  13. data/lib/business_central/object/company.rb +5 -3
  14. data/lib/business_central/object/company_information.rb +7 -5
  15. data/lib/business_central/object/country_region.rb +8 -6
  16. data/lib/business_central/object/currency.rb +8 -6
  17. data/lib/business_central/object/customer.rb +16 -9
  18. data/lib/business_central/object/customer_financial_detail.rb +3 -1
  19. data/lib/business_central/object/customer_payment.rb +8 -6
  20. data/lib/business_central/object/customer_payment_journal.rb +8 -6
  21. data/lib/business_central/object/customer_sale.rb +3 -1
  22. data/lib/business_central/object/default_dimension.rb +18 -21
  23. data/lib/business_central/object/dimension.rb +20 -0
  24. data/lib/business_central/object/dimension_line.rb +37 -0
  25. data/lib/business_central/object/dimension_value.rb +28 -0
  26. data/lib/business_central/object/employee.rb +21 -0
  27. data/lib/business_central/object/filter_query.rb +18 -0
  28. data/lib/business_central/object/general_ledger_entry.rb +13 -0
  29. data/lib/business_central/object/income_statement.rb +13 -0
  30. data/lib/business_central/object/irs1099_code.rb +16 -0
  31. data/lib/business_central/object/item.rb +17 -10
  32. data/lib/business_central/object/item_category.rb +16 -0
  33. data/lib/business_central/object/journal.rb +29 -0
  34. data/lib/business_central/object/journal_line.rb +48 -0
  35. data/lib/business_central/object/{helper.rb → object_helper.rb} +18 -10
  36. data/lib/business_central/object/payment_method.rb +16 -0
  37. data/lib/business_central/object/payment_term.rb +16 -0
  38. data/lib/business_central/object/picture.rb +53 -0
  39. data/lib/business_central/object/purchase_invoice.rb +8 -6
  40. data/lib/business_central/object/purchase_invoice_line.rb +10 -8
  41. data/lib/business_central/object/purchase_order.rb +16 -0
  42. data/lib/business_central/object/request.rb +60 -49
  43. data/lib/business_central/object/response.rb +31 -23
  44. data/lib/business_central/object/retained_earning_statement.rb +13 -0
  45. data/lib/business_central/object/sales_credit_memo.rb +20 -0
  46. data/lib/business_central/object/sales_credit_memo_line.rb +30 -0
  47. data/lib/business_central/object/sales_invoice.rb +62 -0
  48. data/lib/business_central/object/sales_invoice_line.rb +30 -0
  49. data/lib/business_central/object/sales_order.rb +20 -0
  50. data/lib/business_central/object/sales_order_line.rb +30 -0
  51. data/lib/business_central/object/sales_quote.rb +20 -0
  52. data/lib/business_central/object/sales_quote_line.rb +30 -0
  53. data/lib/business_central/object/shipment_method.rb +16 -0
  54. data/lib/business_central/object/subscription.rb +16 -0
  55. data/lib/business_central/object/tax_area.rb +16 -0
  56. data/lib/business_central/object/tax_group.rb +16 -0
  57. data/lib/business_central/object/time_registration_entry.rb +16 -0
  58. data/lib/business_central/object/trial_balance.rb +13 -0
  59. data/lib/business_central/object/units_of_measure.rb +16 -0
  60. data/lib/business_central/object/url_builder.rb +59 -0
  61. data/lib/business_central/object/url_helper.rb +44 -0
  62. data/lib/business_central/object/validation.rb +10 -7
  63. data/lib/business_central/object/vendor.rb +10 -7
  64. data/lib/business_central/object/vendor_purchase.rb +13 -0
  65. data/lib/business_central/version.rb +4 -2
  66. data/lib/business_central/web_service.rb +78 -0
  67. data/lib/business_central.rb +40 -2
  68. data/lib/core_ext/string.rb +18 -12
  69. data/test/business_central/client_test.rb +18 -11
  70. data/test/business_central/object/account_test.rb +6 -5
  71. data/test/business_central/object/aged_account_payable_test.rb +6 -5
  72. data/test/business_central/object/aged_account_receivable_test.rb +6 -5
  73. data/test/business_central/object/attachment_test.rb +117 -0
  74. data/test/business_central/object/balance_sheet_test.rb +6 -5
  75. data/test/business_central/object/base_test.rb +4 -2
  76. data/test/business_central/object/cash_flow_statement_test.rb +6 -5
  77. data/test/business_central/object/company_information_test.rb +9 -10
  78. data/test/business_central/object/company_test.rb +6 -5
  79. data/test/business_central/object/country_region_test.rb +16 -17
  80. data/test/business_central/object/currency_test.rb +17 -18
  81. data/test/business_central/object/customer_financial_detail_test.rb +8 -6
  82. data/test/business_central/object/customer_payment_journal_test.rb +14 -15
  83. data/test/business_central/object/customer_payment_test.rb +15 -16
  84. data/test/business_central/object/customer_sale_test.rb +8 -6
  85. data/test/business_central/object/customer_test.rb +59 -16
  86. data/test/business_central/object/default_dimension_test.rb +15 -16
  87. data/test/business_central/object/dimension_line_test.rb +165 -0
  88. data/test/business_central/object/dimension_test.rb +65 -0
  89. data/test/business_central/object/dimension_value_test.rb +68 -0
  90. data/test/business_central/object/employee_test.rb +141 -0
  91. data/test/business_central/object/filter_query_test.rb +36 -0
  92. data/test/business_central/object/general_ledger_entry_test.rb +82 -0
  93. data/test/business_central/object/income_statement_test.rb +82 -0
  94. data/test/business_central/object/irs1099_code_test.rb +124 -0
  95. data/test/business_central/object/item_category_test.rb +122 -0
  96. data/test/business_central/object/item_test.rb +16 -17
  97. data/test/business_central/object/journal_line_test.rb +152 -0
  98. data/test/business_central/object/journal_test.rb +144 -0
  99. data/test/business_central/object/payment_method_test.rb +134 -0
  100. data/test/business_central/object/payment_term_test.rb +134 -0
  101. data/test/business_central/object/picture_test.rb +74 -0
  102. data/test/business_central/object/purchase_invoice_line_test.rb +15 -15
  103. data/test/business_central/object/purchase_invoice_test.rb +15 -15
  104. data/test/business_central/object/request_test.rb +17 -9
  105. data/test/business_central/object/response_test.rb +14 -7
  106. data/test/business_central/object/retained_earning_statement_test.rb +52 -0
  107. data/test/business_central/object/sales_credit_memo_line_test.rb +134 -0
  108. data/test/business_central/object/sales_credit_memo_test.rb +146 -0
  109. data/test/business_central/object/sales_invoice_line_test.rb +164 -0
  110. data/test/business_central/object/sales_invoice_test.rb +156 -0
  111. data/test/business_central/object/sales_order_line_test.rb +134 -0
  112. data/test/business_central/object/sales_order_test.rb +146 -0
  113. data/test/business_central/object/sales_quote_line_test.rb +134 -0
  114. data/test/business_central/object/sales_quote_test.rb +146 -0
  115. data/test/business_central/object/shipment_method_test.rb +133 -0
  116. data/test/business_central/object/subscription_test.rb +126 -0
  117. data/test/business_central/object/tax_area_test.rb +126 -0
  118. data/test/business_central/object/tax_group_test.rb +126 -0
  119. data/test/business_central/object/time_registration_entry_test.rb +126 -0
  120. data/test/business_central/object/trial_balance_test.rb +82 -0
  121. data/test/business_central/object/units_of_measure_test.rb +126 -0
  122. data/test/business_central/object/validation_test.rb +5 -4
  123. data/test/business_central/object/vendor_purchase_test.rb +82 -0
  124. data/test/business_central/object/vendor_test.rb +16 -16
  125. data/test/business_central/web_service_test.rb +100 -0
  126. data/test/business_central_test.rb +3 -1
  127. data/test/test_helper.rb +12 -6
  128. metadata +153 -41
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ module Object
5
+ class SalesInvoice < Base
6
+ extend BusinessCentral::Object::ObjectHelper
7
+
8
+ OBJECT = 'salesInvoices'
9
+
10
+ OBJECT_VALIDATION = {
11
+ customer_purchase_order_reference: {
12
+ maximum_length: 10
13
+ },
14
+ customer_number: {
15
+ maximum_length: 20
16
+ },
17
+ contact_id: {
18
+ maximum_length: 250
19
+ },
20
+ currency_code: {
21
+ maximum_length: 10
22
+ },
23
+ email: {
24
+ maximum_length: 80
25
+ },
26
+ phone: {
27
+ maximum_length: 30
28
+ },
29
+ payment_terms: {
30
+ maximum_length: 10
31
+ },
32
+ shipment_method: {
33
+ maximum_length: 10
34
+ },
35
+ salesperson: {
36
+ maximum_length: 20
37
+ },
38
+ bill_to_name: {
39
+ maximum_length: 100
40
+ },
41
+ bill_to_customer_number: {
42
+ maximum_length: 20
43
+ },
44
+ ship_to_name: {
45
+ maximum_length: 100
46
+ },
47
+ ship_to_contact: {
48
+ maximum_length: 100
49
+ }
50
+ }.freeze
51
+
52
+ OBJECT_METHODS = %i[
53
+ get
54
+ post
55
+ patch
56
+ delete
57
+ ].freeze
58
+
59
+ navigation :sales_invoice_line
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ module Object
5
+ class SalesInvoiceLine < Base
6
+ OBJECT = 'salesInvoiceLines'
7
+
8
+ OBJECT_METHODS = %i[
9
+ get
10
+ post
11
+ patch
12
+ delete
13
+ ].freeze
14
+
15
+ OBJECT_PARENTS = %w[
16
+ salesInvoices
17
+ ].freeze
18
+
19
+ def initialize(client, parent: 'salesInvoices', parent_id:, **args)
20
+ return if !valid_parent?(parent)
21
+
22
+ super(client, args)
23
+ @parent_path << {
24
+ path: parent,
25
+ id: parent_id
26
+ }
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ module Object
5
+ class SalesOrder < Base
6
+ extend BusinessCentral::Object::ObjectHelper
7
+
8
+ OBJECT = 'salesOrders'
9
+
10
+ OBJECT_METHODS = %i[
11
+ get
12
+ post
13
+ patch
14
+ delete
15
+ ].freeze
16
+
17
+ navigation :sales_order_line
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ module Object
5
+ class SalesOrderLine < Base
6
+ OBJECT = 'salesOrderLines'
7
+
8
+ OBJECT_METHODS = %i[
9
+ get
10
+ post
11
+ patch
12
+ delete
13
+ ].freeze
14
+
15
+ OBJECT_PARENTS = %w[
16
+ salesOrders
17
+ ].freeze
18
+
19
+ def initialize(client, parent: 'salesOrders', parent_id:, **args)
20
+ return if !valid_parent?(parent)
21
+
22
+ super(client, args)
23
+ @parent_path << {
24
+ path: parent,
25
+ id: parent_id
26
+ }
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ module Object
5
+ class SalesQuote < Base
6
+ extend BusinessCentral::Object::ObjectHelper
7
+
8
+ OBJECT = 'salesQuotes'
9
+
10
+ OBJECT_METHODS = %i[
11
+ get
12
+ post
13
+ patch
14
+ delete
15
+ ].freeze
16
+
17
+ navigation :sales_quote_line
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ module Object
5
+ class SalesQuoteLine < Base
6
+ OBJECT = 'salesQuoteLines'
7
+
8
+ OBJECT_METHODS = %i[
9
+ get
10
+ post
11
+ patch
12
+ delete
13
+ ].freeze
14
+
15
+ OBJECT_PARENTS = %w[
16
+ salesQuotes
17
+ ].freeze
18
+
19
+ def initialize(client, parent: 'salesQuotes', parent_id:, **args)
20
+ return if !valid_parent?(parent)
21
+
22
+ super(client, args)
23
+ @parent_path << {
24
+ path: parent,
25
+ id: parent_id
26
+ }
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ module Object
5
+ class ShipmentMethod < Base
6
+ OBJECT = 'shipmentMethods'
7
+
8
+ OBJECT_METHODS = %i[
9
+ get
10
+ post
11
+ patch
12
+ delete
13
+ ].freeze
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ module Object
5
+ class Subscription < Base
6
+ OBJECT = 'subscriptions'
7
+
8
+ OBJECT_METHODS = %i[
9
+ get
10
+ post
11
+ patch
12
+ delete
13
+ ].freeze
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ module Object
5
+ class TaxArea < Base
6
+ OBJECT = 'taxAreas'
7
+
8
+ OBJECT_METHODS = %i[
9
+ get
10
+ post
11
+ patch
12
+ delete
13
+ ].freeze
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ module Object
5
+ class TaxGroup < Base
6
+ OBJECT = 'taxGroups'
7
+
8
+ OBJECT_METHODS = %i[
9
+ get
10
+ post
11
+ patch
12
+ delete
13
+ ].freeze
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ module Object
5
+ class TimeRegistrationEntry < Base
6
+ OBJECT = 'timeRegistrationEntries'
7
+
8
+ OBJECT_METHODS = %i[
9
+ get
10
+ post
11
+ patch
12
+ delete
13
+ ].freeze
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ module Object
5
+ class TrialBalance < Base
6
+ OBJECT = 'trialBalance'
7
+
8
+ OBJECT_METHODS = %i[
9
+ get
10
+ ].freeze
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ module Object
5
+ class UnitsOfMeasure < Base
6
+ OBJECT = 'unitsOfMeasure'
7
+
8
+ OBJECT_METHODS = %i[
9
+ get
10
+ post
11
+ patch
12
+ delete
13
+ ].freeze
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ module Object
5
+ class URLBuilder
6
+ extend URLHelper
7
+
8
+ class << self
9
+ def sanitize(query = '', values = [])
10
+ return encode_url_params(query) if values.length.zero?
11
+
12
+ query = replace_template_with_value(query, values)
13
+ encode_url_object(query)
14
+ end
15
+ end
16
+
17
+ def initialize(base_url:, parent_path: [], child_path: '', child_id: '', child_code: '', filter: '')
18
+ @base_url = base_url.to_s
19
+ @parent_path = parent_path || []
20
+ @child_path = child_path.to_s
21
+ @child_id = child_id.to_s
22
+ @child_code = child_code.to_s
23
+ @filter = filter.to_s
24
+ end
25
+
26
+ def build
27
+ url = @base_url
28
+ url += build_parent_path
29
+ url += build_child_path
30
+ url += build_filter
31
+ url
32
+ end
33
+
34
+ private
35
+
36
+ def build_parent_path
37
+ return '' if @parent_path.empty?
38
+
39
+ @parent_path.map do |parent|
40
+ "/#{parent[:path]}(#{parent[:id]})" if !parent[:id].nil?
41
+ end.join('')
42
+ end
43
+
44
+ def build_child_path
45
+ url = ''
46
+ url += "/#{@child_path}" if @child_path.present?
47
+ url += "(#{@child_id})" if @child_id.present?
48
+ url += "('#{odata_encode(@child_code)}')" if @child_code.present?
49
+ url
50
+ end
51
+
52
+ def build_filter
53
+ url = ''
54
+ url += "?$filter=#{@filter}" if @filter.present?
55
+ url
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ module Object
5
+ module URLHelper
6
+ def encode_url_object(object)
7
+ URI::RFC2396_Parser.new.escape(object)
8
+ end
9
+
10
+ def encode_url_params(query)
11
+ CGI.escape(query)
12
+ end
13
+
14
+ def odata_encode(value)
15
+ value = value.dup
16
+ value.gsub!(/'/, "''") if value.instance_of?(String) && value =~ /'/
17
+ value.to_s
18
+ end
19
+
20
+ private
21
+
22
+ def replace_template_with_value(query, values)
23
+ query = query.dup
24
+ return replace_template_with_hash_values(query, values) if values.first.is_a?(Hash)
25
+ replace_template_with_array_values(query, values)
26
+ end
27
+
28
+ def replace_template_with_hash_values(query, values)
29
+ values.first.each do |key, value|
30
+ query.gsub!(/:#{key}/, odata_encode(value))
31
+ end
32
+ query
33
+ end
34
+
35
+ def replace_template_with_array_values(query, values)
36
+ query.scan(/\?/).each_with_index do |_character, index|
37
+ character_position = query =~ /\?/
38
+ query[character_position] = odata_encode(values[index])
39
+ end
40
+ query
41
+ end
42
+ end
43
+ end
44
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BusinessCentral
2
4
  module Object
3
5
  class Validation
@@ -11,25 +13,26 @@ module BusinessCentral
11
13
  @validation_rules.each do |rules_key, rules_value|
12
14
  rules_value.each do |validation_key, validation_value|
13
15
  if required?(validation_key, validation_value, @object_params[rules_key].to_s)
14
- @errors << { field: rules_key, message: 'is a required field'}
16
+ @errors << { field: rules_key, message: 'is a required field' }
15
17
  end
16
18
 
17
19
  if exceeds_maximum_length?(validation_key, validation_value, @object_params[rules_key].to_s)
18
- @errors << { field: rules_key, message: "has exceeded the maximum length #{validation_value}"}
20
+ @errors << { field: rules_key, message: "has exceeded the maximum length #{validation_value}" }
19
21
  end
20
22
 
21
23
  if not_inclusive_of?(validation_key, validation_value, @object_params[rules_key].to_s)
22
- @errors << { field: rules_key, message: "is not one of #{validation_value.join(', ')}"}
24
+ @errors << { field: rules_key, message: "is not one of #{validation_value.join(', ')}" }
23
25
  end
24
26
 
25
27
  if date_type?(validation_key, validation_value, @object_params[rules_key])
26
- @errors << { field: rules_key, message: 'is not a date'}
28
+ @errors << { field: rules_key, message: 'is not a date' }
27
29
  end
28
30
  end
29
31
  end
30
32
 
31
- raise InvalidObjectException.new(@errors) if @errors.any?
32
- return true
33
+ raise InvalidObjectException, @errors if @errors.any?
34
+
35
+ true
33
36
  end
34
37
 
35
38
  private
@@ -51,4 +54,4 @@ module BusinessCentral
51
54
  end
52
55
  end
53
56
  end
54
- end
57
+ end
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BusinessCentral
2
4
  module Object
3
5
  class Vendor < Base
4
- extend BusinessCentral::Object::Helper
6
+ extend BusinessCentral::Object::ObjectHelper
5
7
 
6
- OBJECT = 'vendors'.freeze
8
+ OBJECT = 'vendors'
7
9
 
8
10
  OBJECT_VALIDATION = {
9
11
  number: {
@@ -26,14 +28,15 @@ module BusinessCentral
26
28
  }
27
29
  }.freeze
28
30
 
29
- OBJECT_METHODS = [
30
- :get,
31
- :post,
32
- :patch,
33
- :delete
31
+ OBJECT_METHODS = %i[
32
+ get
33
+ post
34
+ patch
35
+ delete
34
36
  ].freeze
35
37
 
36
38
  navigation :default_dimension
39
+ navigation :picture
37
40
  end
38
41
  end
39
42
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ module Object
5
+ class VendorPurchase < Base
6
+ OBJECT = 'vendorPurchases'
7
+
8
+ OBJECT_METHODS = %i[
9
+ get
10
+ ].freeze
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BusinessCentral
2
- VERSION = "1.0.3".freeze
3
- end
4
+ VERSION = '1.0.7'
5
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ class WebService
5
+ DEFAULT_URL = 'https://api.businesscentral.dynamics.com/v2.0/production/ODataV4'
6
+
7
+ attr_reader :url, :object_url
8
+
9
+ def initialize(client:, **options)
10
+ @client = client
11
+ opts = options.dup
12
+ @url = opts.delete(:url) || DEFAULT_URL
13
+ end
14
+
15
+ def object(object_url = '', *values)
16
+ if values.length.zero?
17
+ @object_url = object_url
18
+ return self
19
+ end
20
+
21
+ @object_url = Object::URLBuilder.sanitize(object_url, values)
22
+ self
23
+ end
24
+
25
+ def get(query = '', *values)
26
+ raise InvalidObjectURLException if @object_url.to_s.blank?
27
+
28
+ Object::Request.get(
29
+ @client,
30
+ build_url(
31
+ filter: Object::FilterQuery.sanitize(query, values)
32
+ )
33
+ )
34
+ end
35
+
36
+ def post(params = {})
37
+ raise InvalidObjectURLException if @object_url.to_s.blank?
38
+
39
+ Object::Request.post(
40
+ @client,
41
+ build_url,
42
+ params
43
+ )
44
+ end
45
+
46
+ def patch(params = {})
47
+ raise InvalidObjectURLException if @object_url.to_s.blank?
48
+
49
+ object = get
50
+ Object::Request.patch(
51
+ @client,
52
+ build_url,
53
+ object[:etag],
54
+ params
55
+ )
56
+ end
57
+
58
+ def delete
59
+ raise InvalidObjectURLException if @object_url.to_s.blank?
60
+
61
+ object = get
62
+ Object::Request.delete(
63
+ @client,
64
+ build_url,
65
+ object[:etag]
66
+ )
67
+ end
68
+
69
+ private
70
+
71
+ def build_url(filter: '')
72
+ Object::URLBuilder.new(
73
+ base_url: "#{@url}/#{@object_url}",
74
+ filter: filter
75
+ ).build
76
+ end
77
+ end
78
+ end
@@ -5,15 +5,21 @@ require 'json'
5
5
 
6
6
  require 'core_ext/string'
7
7
 
8
- require 'business_central/object/helper'
8
+ require 'business_central/object/argument_helper'
9
+ require 'business_central/object/url_helper'
10
+ require 'business_central/object/object_helper'
11
+
9
12
  require 'business_central/object/base'
10
13
  require 'business_central/object/validation'
11
14
  require 'business_central/object/response'
12
15
  require 'business_central/object/request'
16
+ require 'business_central/object/filter_query'
17
+ require 'business_central/object/url_builder'
13
18
 
14
19
  require 'business_central/object/account'
15
20
  require 'business_central/object/aged_account_payable'
16
21
  require 'business_central/object/aged_account_receivable'
22
+ require 'business_central/object/attachment'
17
23
  require 'business_central/object/cash_flow_statement'
18
24
  require 'business_central/object/balance_sheet'
19
25
  require 'business_central/object/company'
@@ -26,10 +32,42 @@ require 'business_central/object/customer_payment'
26
32
  require 'business_central/object/customer_payment_journal'
27
33
  require 'business_central/object/customer_sale'
28
34
  require 'business_central/object/default_dimension'
29
- require 'business_central/object/vendor'
35
+ require 'business_central/object/dimension'
36
+ require 'business_central/object/dimension_line'
37
+ require 'business_central/object/dimension_value'
38
+ require 'business_central/object/employee'
39
+ require 'business_central/object/general_ledger_entry'
40
+ require 'business_central/object/income_statement'
41
+ require 'business_central/object/irs1099_code'
30
42
  require 'business_central/object/item'
43
+ require 'business_central/object/item_category'
44
+ require 'business_central/object/journal'
45
+ require 'business_central/object/journal_line'
46
+ require 'business_central/object/payment_method'
47
+ require 'business_central/object/payment_term'
48
+ require 'business_central/object/picture'
31
49
  require 'business_central/object/purchase_invoice'
32
50
  require 'business_central/object/purchase_invoice_line'
51
+ require 'business_central/object/retained_earning_statement'
52
+ require 'business_central/object/sales_invoice'
53
+ require 'business_central/object/sales_invoice_line'
54
+ require 'business_central/object/sales_credit_memo'
55
+ require 'business_central/object/sales_credit_memo_line'
56
+ require 'business_central/object/sales_order'
57
+ require 'business_central/object/sales_order_line'
58
+ require 'business_central/object/sales_quote'
59
+ require 'business_central/object/sales_quote_line'
60
+ require 'business_central/object/shipment_method'
61
+ require 'business_central/object/subscription'
62
+ require 'business_central/object/tax_area'
63
+ require 'business_central/object/tax_group'
64
+ require 'business_central/object/time_registration_entry'
65
+ require 'business_central/object/trial_balance'
66
+ require 'business_central/object/units_of_measure'
67
+ require 'business_central/object/vendor'
68
+ require 'business_central/object/vendor_purchase'
69
+ require 'business_central/object/purchase_order'
33
70
 
34
71
  require 'business_central/exceptions'
35
72
  require 'business_central/client'
73
+ require 'business_central/web_service'