business-central 1.0.3 → 1.0.4

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/lib/business_central.rb +35 -2
  3. data/lib/business_central/client.rb +65 -38
  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/balance_sheet.rb +4 -2
  10. data/lib/business_central/object/base.rb +90 -56
  11. data/lib/business_central/object/cash_flow_statement.rb +4 -2
  12. data/lib/business_central/object/company.rb +5 -3
  13. data/lib/business_central/object/company_information.rb +7 -5
  14. data/lib/business_central/object/country_region.rb +8 -6
  15. data/lib/business_central/object/currency.rb +8 -6
  16. data/lib/business_central/object/customer.rb +15 -9
  17. data/lib/business_central/object/customer_financial_detail.rb +3 -1
  18. data/lib/business_central/object/customer_payment.rb +8 -6
  19. data/lib/business_central/object/customer_payment_journal.rb +8 -6
  20. data/lib/business_central/object/customer_sale.rb +3 -1
  21. data/lib/business_central/object/default_dimension.rb +17 -20
  22. data/lib/business_central/object/dimension.rb +20 -0
  23. data/lib/business_central/object/dimension_line.rb +37 -0
  24. data/lib/business_central/object/dimension_value.rb +28 -0
  25. data/lib/business_central/object/employee.rb +21 -0
  26. data/lib/business_central/object/filter_query.rb +18 -0
  27. data/lib/business_central/object/item.rb +17 -10
  28. data/lib/business_central/object/item_category.rb +16 -0
  29. data/lib/business_central/object/journal.rb +29 -0
  30. data/lib/business_central/object/journal_line.rb +48 -0
  31. data/lib/business_central/object/{helper.rb → object_helper.rb} +18 -10
  32. data/lib/business_central/object/payment_method.rb +16 -0
  33. data/lib/business_central/object/payment_term.rb +16 -0
  34. data/lib/business_central/object/picture.rb +53 -0
  35. data/lib/business_central/object/purchase_invoice.rb +8 -6
  36. data/lib/business_central/object/purchase_invoice_line.rb +10 -8
  37. data/lib/business_central/object/request.rb +60 -49
  38. data/lib/business_central/object/response.rb +28 -22
  39. data/lib/business_central/object/retained_earning_statement.rb +13 -0
  40. data/lib/business_central/object/sales_credit_memo.rb +20 -0
  41. data/lib/business_central/object/sales_credit_memo_line.rb +30 -0
  42. data/lib/business_central/object/sales_invoice.rb +62 -0
  43. data/lib/business_central/object/sales_invoice_line.rb +30 -0
  44. data/lib/business_central/object/sales_order.rb +20 -0
  45. data/lib/business_central/object/sales_order_line.rb +30 -0
  46. data/lib/business_central/object/sales_quote.rb +20 -0
  47. data/lib/business_central/object/sales_quote_line.rb +30 -0
  48. data/lib/business_central/object/shipment_method.rb +16 -0
  49. data/lib/business_central/object/subscription.rb +16 -0
  50. data/lib/business_central/object/tax_area.rb +16 -0
  51. data/lib/business_central/object/tax_group.rb +16 -0
  52. data/lib/business_central/object/time_registration_entry.rb +16 -0
  53. data/lib/business_central/object/trial_balance.rb +13 -0
  54. data/lib/business_central/object/units_of_measure.rb +16 -0
  55. data/lib/business_central/object/url_builder.rb +59 -0
  56. data/lib/business_central/object/url_helper.rb +32 -0
  57. data/lib/business_central/object/validation.rb +10 -7
  58. data/lib/business_central/object/vendor.rb +10 -7
  59. data/lib/business_central/object/vendor_purchase.rb +13 -0
  60. data/lib/business_central/version.rb +4 -2
  61. data/lib/business_central/web_service.rb +78 -0
  62. data/lib/core_ext/string.rb +18 -12
  63. data/test/business_central/client_test.rb +18 -11
  64. data/test/business_central/object/account_test.rb +6 -5
  65. data/test/business_central/object/aged_account_payable_test.rb +6 -5
  66. data/test/business_central/object/aged_account_receivable_test.rb +6 -5
  67. data/test/business_central/object/balance_sheet_test.rb +6 -5
  68. data/test/business_central/object/base_test.rb +4 -2
  69. data/test/business_central/object/cash_flow_statement_test.rb +6 -5
  70. data/test/business_central/object/company_information_test.rb +9 -10
  71. data/test/business_central/object/company_test.rb +6 -5
  72. data/test/business_central/object/country_region_test.rb +16 -17
  73. data/test/business_central/object/currency_test.rb +17 -18
  74. data/test/business_central/object/customer_financial_detail_test.rb +8 -6
  75. data/test/business_central/object/customer_payment_journal_test.rb +14 -15
  76. data/test/business_central/object/customer_payment_test.rb +15 -16
  77. data/test/business_central/object/customer_sale_test.rb +8 -6
  78. data/test/business_central/object/customer_test.rb +15 -16
  79. data/test/business_central/object/default_dimension_test.rb +15 -16
  80. data/test/business_central/object/dimension_line_test.rb +165 -0
  81. data/test/business_central/object/dimension_test.rb +65 -0
  82. data/test/business_central/object/dimension_value_test.rb +68 -0
  83. data/test/business_central/object/employee_test.rb +141 -0
  84. data/test/business_central/object/filter_query_test.rb +36 -0
  85. data/test/business_central/object/item_category_test.rb +122 -0
  86. data/test/business_central/object/item_test.rb +16 -17
  87. data/test/business_central/object/journal_line_test.rb +152 -0
  88. data/test/business_central/object/journal_test.rb +124 -0
  89. data/test/business_central/object/payment_method_test.rb +134 -0
  90. data/test/business_central/object/payment_term_test.rb +134 -0
  91. data/test/business_central/object/picture_test.rb +74 -0
  92. data/test/business_central/object/purchase_invoice_line_test.rb +15 -15
  93. data/test/business_central/object/purchase_invoice_test.rb +15 -15
  94. data/test/business_central/object/request_test.rb +17 -9
  95. data/test/business_central/object/response_test.rb +9 -7
  96. data/test/business_central/object/retained_earning_statement_test.rb +52 -0
  97. data/test/business_central/object/sales_credit_memo_line_test.rb +134 -0
  98. data/test/business_central/object/sales_credit_memo_test.rb +146 -0
  99. data/test/business_central/object/sales_invoice_line_test.rb +164 -0
  100. data/test/business_central/object/sales_invoice_test.rb +134 -0
  101. data/test/business_central/object/sales_order_line_test.rb +134 -0
  102. data/test/business_central/object/sales_order_test.rb +146 -0
  103. data/test/business_central/object/sales_quote_line_test.rb +134 -0
  104. data/test/business_central/object/sales_quote_test.rb +146 -0
  105. data/test/business_central/object/shipment_method_test.rb +133 -0
  106. data/test/business_central/object/subscription_test.rb +126 -0
  107. data/test/business_central/object/tax_area_test.rb +126 -0
  108. data/test/business_central/object/tax_group_test.rb +126 -0
  109. data/test/business_central/object/time_registration_entry_test.rb +126 -0
  110. data/test/business_central/object/trial_balance_test.rb +82 -0
  111. data/test/business_central/object/units_of_measure_test.rb +126 -0
  112. data/test/business_central/object/validation_test.rb +5 -4
  113. data/test/business_central/object/vendor_purchase_test.rb +82 -0
  114. data/test/business_central/object/vendor_test.rb +16 -16
  115. data/test/business_central/web_service_test.rb +95 -0
  116. data/test/business_central_test.rb +3 -1
  117. data/test/test_helper.rb +12 -6
  118. metadata +132 -33
@@ -1,11 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BusinessCentral
2
4
  module Object
3
5
  class CashFlowStatement < Base
4
- OBJECT = 'cashFlowStatement'.freeze
6
+ OBJECT = 'cashFlowStatement'
5
7
 
6
8
  OBJECT_METHODS = [
7
9
  :get
8
10
  ].freeze
9
11
  end
10
12
  end
11
- end
13
+ end
@@ -1,16 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BusinessCentral
2
4
  module Object
3
5
  class Company < Base
4
- OBJECT = 'companies'.freeze
6
+ OBJECT = 'companies'
5
7
 
6
8
  OBJECT_METHODS = [
7
9
  :get
8
10
  ].freeze
9
11
 
10
- def initialize(client, args)
12
+ def initialize(client, _args)
11
13
  super(client)
12
14
  @parent_path = []
13
15
  end
14
16
  end
15
17
  end
16
- end
18
+ end
@@ -1,12 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BusinessCentral
2
4
  module Object
3
5
  class CompanyInformation < Base
4
- OBJECT = 'companyInformation'.freeze
6
+ OBJECT = 'companyInformation'
5
7
 
6
- OBJECT_METHODS = [
7
- :get,
8
- :patch
8
+ OBJECT_METHODS = %i[
9
+ get
10
+ patch
9
11
  ].freeze
10
12
  end
11
13
  end
12
- end
14
+ end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BusinessCentral
2
4
  module Object
3
5
  class CountryRegion < Base
4
- OBJECT = 'countriesRegions'.freeze
6
+ OBJECT = 'countriesRegions'
5
7
 
6
8
  OBJECT_VALIDATION = {
7
9
  code: {
@@ -13,11 +15,11 @@ module BusinessCentral
13
15
  }
14
16
  }.freeze
15
17
 
16
- OBJECT_METHODS = [
17
- :get,
18
- :post,
19
- :patch,
20
- :delete
18
+ OBJECT_METHODS = %i[
19
+ get
20
+ post
21
+ patch
22
+ delete
21
23
  ].freeze
22
24
  end
23
25
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BusinessCentral
2
4
  module Object
3
5
  class Currency < Base
4
- OBJECT = 'currencies'.freeze
6
+ OBJECT = 'currencies'
5
7
 
6
8
  OBJECT_VALIDATION = {
7
9
  code: {
@@ -16,11 +18,11 @@ module BusinessCentral
16
18
  }
17
19
  }.freeze
18
20
 
19
- OBJECT_METHODS = [
20
- :get,
21
- :post,
22
- :patch,
23
- :delete
21
+ OBJECT_METHODS = %i[
22
+ get
23
+ post
24
+ patch
25
+ delete
24
26
  ].freeze
25
27
  end
26
28
  end
@@ -1,7 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BusinessCentral
2
4
  module Object
3
5
  class Customer < Base
4
- OBJECT = 'customers'.freeze
6
+ extend BusinessCentral::Object::ObjectHelper
7
+
8
+ OBJECT = 'customers'
5
9
 
6
10
  OBJECT_VALIDATION = {
7
11
  display_name: {
@@ -9,19 +13,21 @@ module BusinessCentral
9
13
  maximum_length: 100
10
14
  },
11
15
  type: {
12
- inclusion_of: [
13
- 'Company',
14
- 'Person'
16
+ inclusion_of: %w[
17
+ Company
18
+ Person
15
19
  ]
16
20
  }
17
21
  }.freeze
18
22
 
19
- OBJECT_METHODS = [
20
- :get,
21
- :post,
22
- :patch,
23
- :delete
23
+ OBJECT_METHODS = %i[
24
+ get
25
+ post
26
+ patch
27
+ delete
24
28
  ].freeze
29
+
30
+ navigation :picture
25
31
  end
26
32
  end
27
33
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BusinessCentral
2
4
  module Object
3
5
  class CustomerFinancialDetail < Base
4
- OBJECT = 'customerFinancialDetails'.freeze
6
+ OBJECT = 'customerFinancialDetails'
5
7
 
6
8
  OBJECT_METHODS = [
7
9
  :get
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BusinessCentral
2
4
  module Object
3
5
  class CustomerPayment < Base
4
- OBJECT = 'customerPayments'.freeze
6
+ OBJECT = 'customerPayments'
5
7
 
6
8
  OBJECT_VALIDATION = {
7
9
  customer_number: {
@@ -30,11 +32,11 @@ module BusinessCentral
30
32
  }
31
33
  }.freeze
32
34
 
33
- OBJECT_METHODS = [
34
- :get,
35
- :post,
36
- :patch,
37
- :delete
35
+ OBJECT_METHODS = %i[
36
+ get
37
+ post
38
+ patch
39
+ delete
38
40
  ].freeze
39
41
  end
40
42
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BusinessCentral
2
4
  module Object
3
5
  class CustomerPaymentJournal < Base
4
- OBJECT = 'customerPaymentJournals'.freeze
6
+ OBJECT = 'customerPaymentJournals'
5
7
 
6
8
  OBJECT_VALIDATION = {
7
9
  code: {
@@ -12,11 +14,11 @@ module BusinessCentral
12
14
  }
13
15
  }.freeze
14
16
 
15
- OBJECT_METHODS = [
16
- :get,
17
- :post,
18
- :patch,
19
- :delete
17
+ OBJECT_METHODS = %i[
18
+ get
19
+ post
20
+ patch
21
+ delete
20
22
  ].freeze
21
23
  end
22
24
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BusinessCentral
2
4
  module Object
3
5
  class CustomerSale < Base
4
- OBJECT = 'customerSales'.freeze
6
+ OBJECT = 'customerSales'
5
7
 
6
8
  OBJECT_METHODS = [
7
9
  :get
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BusinessCentral
2
4
  module Object
3
5
  class DefaultDimension < Base
4
- OBJECT = 'defaultDimensions'.freeze
6
+ OBJECT = 'defaultDimensions'
5
7
 
6
8
  OBJECT_VALIDATION = {
7
9
  parent_id: {
@@ -15,23 +17,24 @@ module BusinessCentral
15
17
  }
16
18
  }.freeze
17
19
 
18
- OBJECT_METHODS = [
19
- :get,
20
- :post,
21
- :patch,
22
- :delete
20
+ OBJECT_METHODS = %i[
21
+ get
22
+ post
23
+ patch
24
+ delete
23
25
  ].freeze
24
26
 
25
- OBJECT_PARENTS = [
26
- 'items',
27
- 'customers',
28
- 'vendors',
29
- 'employees'
27
+ OBJECT_PARENTS = %w[
28
+ items
29
+ customers
30
+ vendors
31
+ employees
30
32
  ].freeze
31
33
 
32
- def initialize(client, company_id:, parent:, parent_id:)
33
- raise InvalidArgumentException.new("parents allowed: #{OBJECT_PARENTS.join(', ')}") if !valid_parent?(parent)
34
- super(client, company_id: company_id)
34
+ def initialize(client, parent:, parent_id:, **args)
35
+ return if !valid_parent?(parent)
36
+
37
+ super(client, args)
35
38
  @parent_path << {
36
39
  path: parent.downcase,
37
40
  id: parent_id
@@ -43,12 +46,6 @@ module BusinessCentral
43
46
  params[:parent_id] = @parent_id
44
47
  super(params)
45
48
  end
46
-
47
- private
48
-
49
- def valid_parent?(parent)
50
- OBJECT_PARENTS.include?(parent.downcase)
51
- end
52
49
  end
53
50
  end
54
51
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ module Object
5
+ class Dimension < Base
6
+ OBJECT = 'dimensions'
7
+
8
+ OBJECT_VALIDATION = {
9
+ code: {
10
+ required: true,
11
+ maximum_length: 20
12
+ }
13
+ }.freeze
14
+
15
+ OBJECT_METHODS = %i[
16
+ get
17
+ ].freeze
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ module Object
5
+ class DimensionLine < Base
6
+ OBJECT = 'dimensionLines'
7
+
8
+ OBJECT_VALIDATION = {
9
+ parent_id: {
10
+ required: true
11
+ },
12
+ code: {
13
+ maximum_length: 20
14
+ },
15
+ display_name: {
16
+ maximum_length: 30
17
+ },
18
+ value_id: {
19
+ required: true
20
+ },
21
+ value_code: {
22
+ maximum_length: 20
23
+ },
24
+ value_display_name: {
25
+ maximum_length: 50
26
+ }
27
+ }.freeze
28
+
29
+ OBJECT_METHODS = %i[
30
+ get
31
+ post
32
+ patch
33
+ delete
34
+ ].freeze
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ module Object
5
+ class DimensionValue < Base
6
+ OBJECT = 'dimensionValues'
7
+
8
+ OBJECT_VALIDATION = {
9
+ code: {
10
+ required: true,
11
+ maximum_length: 20
12
+ }
13
+ }.freeze
14
+
15
+ OBJECT_METHODS = %i[
16
+ get
17
+ ].freeze
18
+
19
+ def initialize(client, dimension_id:, **args)
20
+ super(client, args)
21
+ @parent_path << {
22
+ path: 'dimensions',
23
+ id: dimension_id
24
+ }
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ module Object
5
+ class Employee < Base
6
+ extend BusinessCentral::Object::ObjectHelper
7
+
8
+ OBJECT = 'employees'
9
+
10
+ OBJECT_METHODS = %i[
11
+ get
12
+ post
13
+ patch
14
+ delete
15
+ ].freeze
16
+
17
+ navigation :default_dimension
18
+ navigation :picture
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BusinessCentral
4
+ module Object
5
+ class FilterQuery
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_params(query)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,7 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BusinessCentral
2
4
  module Object
3
5
  class Item < Base
4
- OBJECT = 'items'.freeze
6
+ extend BusinessCentral::Object::ObjectHelper
7
+
8
+ OBJECT = 'items'
5
9
 
6
10
  OBJECT_VALIDATION = {
7
11
  number: {
@@ -12,10 +16,10 @@ module BusinessCentral
12
16
  },
13
17
  type: {
14
18
  required: true,
15
- inclusive_of: [
16
- 'Inventory',
17
- 'Service',
18
- 'Non-Inventory'
19
+ inclusive_of: %w[
20
+ Inventory
21
+ Service
22
+ Non-Inventory
19
23
  ]
20
24
  },
21
25
  item_category_code: {
@@ -29,12 +33,15 @@ module BusinessCentral
29
33
  }
30
34
  }.freeze
31
35
 
32
- OBJECT_METHODS = [
33
- :get,
34
- :post,
35
- :patch,
36
- :delete
36
+ OBJECT_METHODS = %i[
37
+ get
38
+ post
39
+ patch
40
+ delete
37
41
  ].freeze
42
+
43
+ navigation :default_dimension
44
+ navigation :picture
38
45
  end
39
46
  end
40
47
  end