ledger_sync 1.1.3 → 1.3.1

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 (216) hide show
  1. checksums.yaml +4 -4
  2. data/.env.template +25 -0
  3. data/.gitignore +3 -1
  4. data/.rubocop_todo.yml +4 -1
  5. data/.travis.yml +1 -1
  6. data/Gemfile.lock +59 -25
  7. data/README.md +160 -8
  8. data/_config.yml +1 -0
  9. data/bin/qa +3 -0
  10. data/ledger_sync.gemspec +4 -0
  11. data/lib/ledger_sync.rb +40 -30
  12. data/lib/ledger_sync/adaptor_configuration.rb +17 -11
  13. data/lib/ledger_sync/adaptor_configuration_store.rb +13 -9
  14. data/lib/ledger_sync/adaptors/adaptor.rb +9 -1
  15. data/lib/ledger_sync/adaptors/ledger_serializer.rb +3 -6
  16. data/lib/ledger_sync/adaptors/ledger_serializer_attribute_set.rb +1 -1
  17. data/lib/ledger_sync/adaptors/ledger_serializer_type/references_many_type.rb +1 -1
  18. data/lib/ledger_sync/adaptors/mixins/infer_adaptor_class_mixin.rb +24 -0
  19. data/lib/ledger_sync/adaptors/mixins/infer_ledger_serializer_mixin.rb +31 -0
  20. data/lib/ledger_sync/adaptors/mixins/infer_resource_class_mixin.rb +22 -0
  21. data/lib/ledger_sync/adaptors/mixins/offset_and_limit_pagination_searcher_mixin.rb +37 -0
  22. data/lib/ledger_sync/adaptors/netsuite/account/ledger_deserializer.rb +24 -0
  23. data/lib/ledger_sync/adaptors/netsuite/account/ledger_serializer.rb +22 -0
  24. data/lib/ledger_sync/adaptors/netsuite/account/operations/create.rb +28 -0
  25. data/lib/ledger_sync/adaptors/netsuite/account/operations/find.rb +28 -0
  26. data/lib/ledger_sync/adaptors/netsuite/account/searcher.rb +28 -0
  27. data/lib/ledger_sync/adaptors/netsuite/adaptor.rb +145 -0
  28. data/lib/ledger_sync/adaptors/netsuite/config.rb +6 -0
  29. data/lib/ledger_sync/adaptors/netsuite/currency/deledger_serializer.rb +28 -0
  30. data/lib/ledger_sync/adaptors/netsuite/currency/ledger_serializer.rb +25 -0
  31. data/lib/ledger_sync/adaptors/netsuite/currency/operations/create.rb +25 -0
  32. data/lib/ledger_sync/adaptors/netsuite/currency/operations/delete.rb +23 -0
  33. data/lib/ledger_sync/adaptors/netsuite/currency/operations/find.rb +23 -0
  34. data/lib/ledger_sync/adaptors/netsuite/currency/operations/update.rb +23 -0
  35. data/lib/ledger_sync/adaptors/netsuite/customer/ledger_deserializer.rb +27 -0
  36. data/lib/ledger_sync/adaptors/netsuite/customer/ledger_serializer.rb +38 -0
  37. data/lib/ledger_sync/adaptors/netsuite/customer/operations/create.rb +24 -0
  38. data/lib/ledger_sync/adaptors/netsuite/customer/operations/delete.rb +24 -0
  39. data/lib/ledger_sync/adaptors/netsuite/customer/operations/find.rb +24 -0
  40. data/lib/ledger_sync/adaptors/netsuite/customer/operations/update.rb +24 -0
  41. data/lib/ledger_sync/adaptors/netsuite/ledger_serializer.rb +30 -0
  42. data/lib/ledger_sync/adaptors/netsuite/ledger_serializer_type/reference_type.rb +24 -0
  43. data/lib/ledger_sync/adaptors/netsuite/ledger_serializer_type/subsidiary_type.rb +22 -0
  44. data/lib/ledger_sync/adaptors/netsuite/operation.rb +25 -0
  45. data/lib/ledger_sync/adaptors/netsuite/operation/create.rb +65 -0
  46. data/lib/ledger_sync/adaptors/netsuite/operation/delete.rb +49 -0
  47. data/lib/ledger_sync/adaptors/netsuite/operation/find.rb +56 -0
  48. data/lib/ledger_sync/adaptors/netsuite/operation/update.rb +68 -0
  49. data/lib/ledger_sync/adaptors/netsuite/record/http_method.rb +38 -0
  50. data/lib/ledger_sync/adaptors/netsuite/record/metadata.rb +75 -0
  51. data/lib/ledger_sync/adaptors/netsuite/record/property.rb +45 -0
  52. data/lib/ledger_sync/adaptors/netsuite/searcher.rb +17 -0
  53. data/lib/ledger_sync/adaptors/netsuite/token.rb +162 -0
  54. data/lib/ledger_sync/adaptors/netsuite/vendor/ledger_deserializer.rb +32 -0
  55. data/lib/ledger_sync/adaptors/netsuite/vendor/ledger_serializer.rb +35 -0
  56. data/lib/ledger_sync/adaptors/netsuite/vendor/operations/create.rb +27 -0
  57. data/lib/ledger_sync/adaptors/netsuite/vendor/operations/delete.rb +27 -0
  58. data/lib/ledger_sync/adaptors/netsuite/vendor/operations/find.rb +27 -0
  59. data/lib/ledger_sync/adaptors/netsuite/vendor/operations/update.rb +27 -0
  60. data/lib/ledger_sync/adaptors/netsuite_soap/adaptor.rb +92 -0
  61. data/lib/ledger_sync/adaptors/netsuite_soap/config.rb +5 -0
  62. data/lib/ledger_sync/adaptors/netsuite_soap/customer/ledger_serializer.rb +13 -0
  63. data/lib/ledger_sync/adaptors/netsuite_soap/customer/operations/create.rb +64 -0
  64. data/lib/ledger_sync/adaptors/netsuite_soap/customer/operations/find.rb +49 -0
  65. data/lib/ledger_sync/adaptors/netsuite_soap/ledger_serializer.rb +25 -0
  66. data/lib/ledger_sync/adaptors/netsuite_soap/operation.rb +40 -0
  67. data/lib/ledger_sync/adaptors/netsuite_soap/operation/create.rb +29 -0
  68. data/lib/ledger_sync/adaptors/netsuite_soap/operation/find.rb +15 -0
  69. data/lib/ledger_sync/adaptors/netsuite_soap/subsidiary/operations/create.rb +42 -0
  70. data/lib/ledger_sync/adaptors/netsuite_soap/subsidiary/operations/find.rb +38 -0
  71. data/lib/ledger_sync/adaptors/operation.rb +7 -11
  72. data/lib/ledger_sync/adaptors/quickbooks_online/account/searcher.rb +2 -13
  73. data/lib/ledger_sync/adaptors/quickbooks_online/adaptor.rb +158 -109
  74. data/lib/ledger_sync/adaptors/quickbooks_online/bill/searcher.rb +1 -15
  75. data/lib/ledger_sync/adaptors/quickbooks_online/config.rb +3 -2
  76. data/lib/ledger_sync/adaptors/quickbooks_online/customer/operations/create.rb +1 -0
  77. data/lib/ledger_sync/adaptors/quickbooks_online/customer/operations/find.rb +1 -0
  78. data/lib/ledger_sync/adaptors/quickbooks_online/customer/operations/update.rb +1 -0
  79. data/lib/ledger_sync/adaptors/quickbooks_online/customer/searcher.rb +2 -16
  80. data/lib/ledger_sync/adaptors/quickbooks_online/dashboard_url_helper.rb +57 -0
  81. data/lib/ledger_sync/adaptors/quickbooks_online/department/ledger_serializer.rb +38 -0
  82. data/lib/ledger_sync/adaptors/quickbooks_online/department/operations/create.rb +23 -0
  83. data/lib/ledger_sync/adaptors/quickbooks_online/department/operations/find.rb +23 -0
  84. data/lib/ledger_sync/adaptors/quickbooks_online/department/operations/update.rb +25 -0
  85. data/lib/ledger_sync/adaptors/quickbooks_online/department/searcher.rb +17 -0
  86. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/ledger_serializer.rb +3 -0
  87. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/operations/create.rb +1 -0
  88. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/operations/find.rb +1 -0
  89. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/operations/update.rb +1 -0
  90. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/searcher.rb +0 -15
  91. data/lib/ledger_sync/adaptors/quickbooks_online/expense/ledger_serializer.rb +0 -2
  92. data/lib/ledger_sync/adaptors/quickbooks_online/expense/searcher.rb +1 -15
  93. data/lib/ledger_sync/adaptors/quickbooks_online/invoice/ledger_serializer.rb +35 -0
  94. data/lib/ledger_sync/adaptors/quickbooks_online/invoice/operations/create.rb +27 -0
  95. data/lib/ledger_sync/adaptors/quickbooks_online/invoice/operations/find.rb +25 -0
  96. data/lib/ledger_sync/adaptors/quickbooks_online/invoice/operations/update.rb +25 -0
  97. data/lib/ledger_sync/adaptors/quickbooks_online/invoice_sales_line_item/ledger_serializer.rb +30 -0
  98. data/lib/ledger_sync/adaptors/quickbooks_online/item/ledger_serializer.rb +13 -0
  99. data/lib/ledger_sync/adaptors/quickbooks_online/journal_entry/searcher.rb +1 -15
  100. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_class/ledger_serializer.rb +25 -0
  101. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_class/operations/create.rb +23 -0
  102. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_class/operations/find.rb +23 -0
  103. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_class/operations/update.rb +25 -0
  104. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_class/searcher.rb +15 -0
  105. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_serializer.rb +8 -5
  106. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_serializer_type/entity_reference_type.rb +4 -14
  107. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_serializer_type/transaction_reference_type.rb +49 -0
  108. data/lib/ledger_sync/adaptors/quickbooks_online/oauth_client.rb +93 -0
  109. data/lib/ledger_sync/adaptors/quickbooks_online/operation.rb +42 -7
  110. data/lib/ledger_sync/adaptors/quickbooks_online/operation/create.rb +5 -8
  111. data/lib/ledger_sync/adaptors/quickbooks_online/operation/find.rb +9 -9
  112. data/lib/ledger_sync/adaptors/quickbooks_online/operation/full_update.rb +17 -15
  113. data/lib/ledger_sync/adaptors/quickbooks_online/payment/ledger_serializer.rb +25 -0
  114. data/lib/ledger_sync/adaptors/quickbooks_online/payment/operations/create.rb +9 -6
  115. data/lib/ledger_sync/adaptors/quickbooks_online/payment/operations/find.rb +9 -2
  116. data/lib/ledger_sync/adaptors/quickbooks_online/payment/operations/update.rb +8 -1
  117. data/lib/ledger_sync/adaptors/quickbooks_online/payment_line_item/ledger_serializer.rb +19 -0
  118. data/lib/ledger_sync/adaptors/quickbooks_online/request.rb +98 -0
  119. data/lib/ledger_sync/adaptors/quickbooks_online/searcher.rb +29 -13
  120. data/lib/ledger_sync/adaptors/quickbooks_online/util/operation_error_parser.rb +1 -1
  121. data/lib/ledger_sync/adaptors/quickbooks_online/vendor/operations/create.rb +3 -0
  122. data/lib/ledger_sync/adaptors/quickbooks_online/vendor/operations/find.rb +3 -0
  123. data/lib/ledger_sync/adaptors/quickbooks_online/vendor/operations/update.rb +3 -0
  124. data/lib/ledger_sync/adaptors/quickbooks_online/vendor/searcher.rb +5 -54
  125. data/lib/ledger_sync/adaptors/quickbooks_online/webhook.rb +58 -0
  126. data/lib/ledger_sync/adaptors/quickbooks_online/webhook_event.rb +79 -0
  127. data/lib/ledger_sync/adaptors/quickbooks_online/webhook_notification.rb +42 -0
  128. data/lib/ledger_sync/adaptors/request.rb +53 -0
  129. data/lib/ledger_sync/adaptors/response.rb +55 -0
  130. data/lib/ledger_sync/adaptors/searcher.rb +3 -1
  131. data/lib/ledger_sync/adaptors/stripe/adaptor.rb +45 -0
  132. data/lib/ledger_sync/adaptors/stripe/config.rb +6 -0
  133. data/lib/ledger_sync/adaptors/stripe/customer/operations/create.rb +44 -0
  134. data/lib/ledger_sync/adaptors/stripe/customer/operations/delete.rb +35 -0
  135. data/lib/ledger_sync/adaptors/stripe/customer/operations/find.rb +44 -0
  136. data/lib/ledger_sync/adaptors/stripe/customer/operations/update.rb +43 -0
  137. data/lib/ledger_sync/adaptors/stripe/operation.rb +35 -0
  138. data/lib/ledger_sync/adaptors/stripe/operation/create.rb +17 -0
  139. data/lib/ledger_sync/adaptors/stripe/operation/delete.rb +17 -0
  140. data/lib/ledger_sync/adaptors/stripe/operation/find.rb +15 -0
  141. data/lib/ledger_sync/adaptors/stripe/operation/update.rb +17 -0
  142. data/lib/ledger_sync/adaptors/test/config.rb +0 -1
  143. data/lib/ledger_sync/adaptors/test/customer/operations/create.rb +1 -0
  144. data/lib/ledger_sync/adaptors/test/customer/operations/find.rb +1 -0
  145. data/lib/ledger_sync/adaptors/test/customer/operations/invalid.rb +1 -0
  146. data/lib/ledger_sync/adaptors/test/customer/operations/update.rb +1 -0
  147. data/lib/ledger_sync/adaptors/test/customer/operations/valid.rb +1 -0
  148. data/lib/ledger_sync/adaptors/test/payment/operations/create.rb +8 -1
  149. data/lib/ledger_sync/adaptors/test/payment/operations/find.rb +9 -2
  150. data/lib/ledger_sync/adaptors/test/payment/operations/update.rb +9 -5
  151. data/lib/ledger_sync/adaptors/test/vendor/operations/create.rb +5 -0
  152. data/lib/ledger_sync/adaptors/test/vendor/operations/find.rb +3 -0
  153. data/lib/ledger_sync/adaptors/test/vendor/operations/invalid.rb +5 -0
  154. data/lib/ledger_sync/adaptors/test/vendor/operations/update.rb +5 -0
  155. data/lib/ledger_sync/adaptors/test/vendor/operations/valid.rb +5 -0
  156. data/lib/ledger_sync/error/adaptor_errors.rb +18 -5
  157. data/lib/ledger_sync/error/operation_errors.rb +13 -4
  158. data/lib/ledger_sync/resource.rb +6 -0
  159. data/lib/ledger_sync/resource_attribute/dirty_mixin.rb +16 -15
  160. data/lib/ledger_sync/resources/bill.rb +7 -1
  161. data/lib/ledger_sync/resources/bill_line_item.rb +2 -0
  162. data/lib/ledger_sync/resources/currency.rb +9 -0
  163. data/lib/ledger_sync/resources/customer.rb +16 -0
  164. data/lib/ledger_sync/resources/department.rb +14 -0
  165. data/lib/ledger_sync/resources/deposit.rb +7 -0
  166. data/lib/ledger_sync/resources/deposit_line_item.rb +6 -0
  167. data/lib/ledger_sync/resources/expense.rb +5 -0
  168. data/lib/ledger_sync/resources/expense_line_item.rb +2 -0
  169. data/lib/ledger_sync/resources/invoice.rb +23 -0
  170. data/lib/ledger_sync/resources/invoice_sales_line_item.rb +17 -0
  171. data/lib/ledger_sync/resources/item.rb +5 -0
  172. data/lib/ledger_sync/resources/journal_entry.rb +5 -1
  173. data/lib/ledger_sync/resources/journal_entry_line_item.rb +4 -0
  174. data/lib/ledger_sync/resources/ledger_class.rb +14 -0
  175. data/lib/ledger_sync/resources/payment.rb +13 -0
  176. data/lib/ledger_sync/resources/payment_line_item.rb +15 -0
  177. data/lib/ledger_sync/resources/subsidiary.rb +8 -0
  178. data/lib/ledger_sync/resources/transfer.rb +4 -0
  179. data/lib/ledger_sync/resources/vendor.rb +9 -2
  180. data/lib/ledger_sync/type/reference_many.rb +12 -1
  181. data/lib/ledger_sync/type/reference_one.rb +1 -1
  182. data/lib/ledger_sync/util/resonad.rb +18 -0
  183. data/lib/ledger_sync/util/signer.rb +36 -0
  184. data/lib/ledger_sync/util/string_helpers.rb +12 -12
  185. data/lib/ledger_sync/version.rb +1 -1
  186. data/qa/env_spec.rb +5 -0
  187. data/qa/netsuite/account_spec.rb +20 -0
  188. data/qa/netsuite/currency_spec.rb +16 -0
  189. data/qa/netsuite/customer.rb +76 -0
  190. data/qa/netsuite/customer_spec.rb +21 -0
  191. data/qa/netsuite/vendor.rb +76 -0
  192. data/qa/netsuite/vendor_spec.rb +23 -0
  193. data/qa/netsuite_soap/customer_spec.rb +21 -0
  194. data/qa/netsuite_soap/subsidiary_spec.rb +0 -0
  195. data/qa/netsuite_test.rb +42 -0
  196. data/qa/qa_helper.rb +58 -0
  197. data/qa/quickbooks_online/account_spec.rb +14 -0
  198. data/qa/quickbooks_online/customer_spec.rb +13 -0
  199. data/qa/quickbooks_online/expense_spec.rb +31 -0
  200. data/qa/quickbooks_online/vendor_spec.rb +13 -0
  201. data/qa/stripe/customers_spec.rb +15 -0
  202. data/qa/support/adaptor_helpers.rb +99 -0
  203. data/qa/support/adaptor_support_setup.rb +23 -0
  204. data/qa/support/netsuite_helpers.rb +33 -0
  205. data/qa/support/netsuite_shared_examples.rb +30 -0
  206. data/qa/support/netsuite_soap_helpers.rb +33 -0
  207. data/qa/support/netsuite_soap_shared_examples.rb +10 -0
  208. data/qa/support/quickbooks_online_helpers.rb +42 -0
  209. data/qa/support/quickbooks_online_shared_examples.rb +82 -0
  210. data/qa/support/shared_examples.rb +127 -0
  211. data/qa/support/stripe_helpers.rb +22 -0
  212. data/qa/support/stripe_shared_examples.rb +10 -0
  213. data/qa/test.rb +67 -0
  214. data/release.sh +13 -1
  215. metadata +189 -3
  216. data/qa.rb +0 -142
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative '../searcher'
3
4
 
4
5
  module LedgerSync
@@ -6,21 +7,6 @@ module LedgerSync
6
7
  module QuickBooksOnline
7
8
  module Bill
8
9
  class Searcher < QuickBooksOnline::Searcher
9
- def resources
10
- @resources ||= begin
11
- adaptor
12
- .query(
13
- resource: 'bill',
14
- limit: limit,
15
- offset: offset
16
- )
17
- .map do |c|
18
- LedgerSync::Bill.new(
19
- ledger_id: c.fetch('Id')
20
- )
21
- end
22
- end
23
- end
24
10
  end
25
11
  end
26
12
  end
@@ -1,7 +1,8 @@
1
- LedgerSync.register_adaptor(:quickbooks_online) do |config|
1
+ # frozen_string_literal: true
2
+
3
+ LedgerSync.register_adaptor(:quickbooks_online, module_string: 'QuickBooksOnline') do |config|
2
4
  config.name = 'QuickBooks Online'
3
5
  config.add_alias :qbo
4
6
  config.add_alias :quick_books_online
5
- config.module = 'QuickBooksOnline'
6
7
  config.rate_limiting_wait_in_seconds = 60
7
8
  end
@@ -11,6 +11,7 @@ module LedgerSync
11
11
  required(:email).maybe(:string)
12
12
  required(:name).filled(:string)
13
13
  required(:phone_number).maybe(:string)
14
+ required(:subsidiary).maybe(:hash, Types::Reference)
14
15
  end
15
16
  end
16
17
  end
@@ -11,6 +11,7 @@ module LedgerSync
11
11
  optional(:email).maybe(:string)
12
12
  optional(:name).maybe(:string)
13
13
  optional(:phone_number).maybe(:string)
14
+ required(:subsidiary).maybe(:hash, Types::Reference)
14
15
  end
15
16
  end
16
17
  end
@@ -13,6 +13,7 @@ module LedgerSync
13
13
  required(:email).maybe(:string)
14
14
  required(:name).filled(:string)
15
15
  required(:phone_number).maybe(:string)
16
+ required(:subsidiary).maybe(:hash, Types::Reference)
16
17
  end
17
18
  end
18
19
  end
@@ -3,22 +3,8 @@ module LedgerSync
3
3
  module QuickBooksOnline
4
4
  module Customer
5
5
  class Searcher < LedgerSync::Adaptors::QuickBooksOnline::Searcher
6
- def resources
7
- @resources ||= begin
8
- adaptor
9
- .query(
10
- resource: 'customer',
11
- query: "DisplayName LIKE '%#{query}%'",
12
- limit: limit,
13
- offset: offset
14
- )
15
- .map do |c|
16
- LedgerSync::Customer.new(
17
- ledger_id: c.fetch('Id'),
18
- name: c.dig('FullyQualifiedName')
19
- )
20
- end
21
- end
6
+ def query_string
7
+ "DisplayName LIKE '%#{query}%'"
22
8
  end
23
9
  end
24
10
  end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Adaptors
5
+ module QuickBooksOnline
6
+ class DashboardURLHelper
7
+ PRODUCTION_APP_URL_BASE = 'https://qbo.intuit.com/app'
8
+ SANDBOX_APP_URL_BASE = 'https://app.sandbox.qbo.intuit.com/app'
9
+
10
+ attr_reader :resource,
11
+ :test
12
+
13
+ def initialize(resource:, test:)
14
+ @resource = resource
15
+ @test = test
16
+ end
17
+
18
+ def production_url
19
+ @production_url ||= PRODUCTION_APP_URL_BASE + resource_path
20
+ end
21
+
22
+ def resource_path
23
+ @resource_path = case resource
24
+ when LedgerSync::Account
25
+ "/register?accountId=#{resource.ledger_id}"
26
+ when LedgerSync::Bill
27
+ "/bill?txnId=#{resource.ledger_id}"
28
+ when LedgerSync::Customer
29
+ "/customerdetail?nameId=#{resource.ledger_id}"
30
+ when LedgerSync::Deposit
31
+ "/deposit?txnId=#{resource.ledger_id}"
32
+ when LedgerSync::Expense
33
+ "/expense?txnId=#{resource.ledger_id}"
34
+ when LedgerSync::JournalEntry
35
+ "/journal?txnId=#{resource.ledger_id}"
36
+ when LedgerSync::Payment
37
+ "/recvpayment?txnId=#{resource.ledger_id}"
38
+ when LedgerSync::Transfer
39
+ "/transfer?txnId=#{resource.ledger_id}"
40
+ when LedgerSync::Vendor
41
+ "/vendordetail?nameId=#{resource.ledger_id}"
42
+ end
43
+ end
44
+
45
+ def sandbox_url
46
+ @sandbox_url ||= SANDBOX_APP_URL_BASE + resource_path
47
+ end
48
+
49
+ def url
50
+ return production_url unless test
51
+
52
+ sandbox_url
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Adaptors
5
+ module QuickBooksOnline
6
+ module Department
7
+ class LedgerSerializer < QuickBooksOnline::LedgerSerializer
8
+ id
9
+
10
+ attribute ledger_attribute: 'Name',
11
+ resource_attribute: :name
12
+ attribute ledger_attribute: 'Active',
13
+ resource_attribute: :active
14
+ attribute ledger_attribute: 'SubDepartment',
15
+ resource_attribute: :sub_department
16
+ attribute ledger_attribute: 'FullyQualifiedName',
17
+ resource_attribute: :fully_qualified_name
18
+
19
+ attribute ledger_attribute: 'ParentRef.value',
20
+ resource_attribute: 'parent.ledger_id'
21
+
22
+ # Sending "ParentRef": {"value": null} results in QBO API crash
23
+ # This patches serialized hash to exclude it unless we don't set value
24
+ def to_ledger_hash(deep_merge_unmapped_values: {}, only_changes: false)
25
+ ret = super(only_changes: only_changes)
26
+ ret = ret.except('ParentRef') unless resource.parent_changed?
27
+ return ret unless deep_merge_unmapped_values.any?
28
+
29
+ deep_merge_if_not_mapped(
30
+ current_hash: ret,
31
+ hash_to_search: deep_merge_unmapped_values
32
+ )
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,23 @@
1
+ module LedgerSync
2
+ module Adaptors
3
+ module QuickBooksOnline
4
+ module Department
5
+ module Operations
6
+ class Create < QuickBooksOnline::Operation::Create
7
+ class Contract < LedgerSync::Adaptors::Contract
8
+ params do
9
+ required(:external_id).maybe(:string)
10
+ required(:ledger_id).value(:nil)
11
+ required(:name).filled(:string)
12
+ required(:active).filled(:bool?)
13
+ required(:sub_department).filled(:bool?)
14
+ optional(:fully_qualified_name).maybe(:string)
15
+ optional(:parent).maybe(:hash, Types::Reference)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ module LedgerSync
2
+ module Adaptors
3
+ module QuickBooksOnline
4
+ module Department
5
+ module Operations
6
+ class Find < QuickBooksOnline::Operation::Find
7
+ class Contract < LedgerSync::Adaptors::Contract
8
+ params do
9
+ required(:external_id).maybe(:string)
10
+ required(:ledger_id).filled(:string)
11
+ optional(:name).maybe(:string)
12
+ optional(:active).maybe(:bool?)
13
+ optional(:sub_department).maybe(:bool?)
14
+ optional(:fully_qualified_name).maybe(:string)
15
+ optional(:parent).maybe(:hash, Types::Reference)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Adaptors
5
+ module QuickBooksOnline
6
+ module Department
7
+ module Operations
8
+ class Update < QuickBooksOnline::Operation::FullUpdate
9
+ class Contract < LedgerSync::Adaptors::Contract
10
+ params do
11
+ required(:external_id).maybe(:string)
12
+ required(:ledger_id).filled(:string)
13
+ required(:name).filled(:string)
14
+ required(:active).filled(:bool?)
15
+ required(:sub_department).filled(:bool?)
16
+ optional(:fully_qualified_name).maybe(:string)
17
+ optional(:parent).maybe(:hash, Types::Reference)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Adaptors
5
+ module QuickBooksOnline
6
+ module Department
7
+ class Searcher < LedgerSync::Adaptors::QuickBooksOnline::Searcher
8
+ private
9
+
10
+ def query_string
11
+ @query_string ||= "Name LIKE '%#{query}%'"
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -25,6 +25,9 @@ module LedgerSync
25
25
  attribute ledger_attribute: 'DepositToAccountRef.value',
26
26
  resource_attribute: 'account.ledger_id'
27
27
 
28
+ attribute ledger_attribute: 'DepartmentRef.value',
29
+ resource_attribute: 'department.ledger_id'
30
+
28
31
  references_many ledger_attribute: 'Line',
29
32
  resource_attribute: :line_items,
30
33
  serializer: DepositLineItem::LedgerSerializer
@@ -10,6 +10,7 @@ module LedgerSync
10
10
  required(:ledger_id).value(:nil)
11
11
  required(:account).hash(Types::Reference)
12
12
  required(:currency).filled(:string)
13
+ required(:department).hash(Types::Reference)
13
14
  required(:memo).filled(:string)
14
15
  required(:transaction_date).filled(:date?)
15
16
  required(:exchange_rate).maybe(:float)
@@ -10,6 +10,7 @@ module LedgerSync
10
10
  required(:ledger_id).filled(:string)
11
11
  required(:account).hash(Types::Reference)
12
12
  required(:currency).maybe(:string)
13
+ required(:department).hash(Types::Reference)
13
14
  required(:memo).maybe(:string)
14
15
  required(:transaction_date).filled(:date?)
15
16
  required(:exchange_rate).maybe(:float)
@@ -12,6 +12,7 @@ module LedgerSync
12
12
  required(:ledger_id).filled(:string)
13
13
  required(:account).hash(Types::Reference)
14
14
  required(:currency).filled(:string)
15
+ required(:department).hash(Types::Reference)
15
16
  required(:memo).filled(:string)
16
17
  required(:transaction_date).filled(:date?)
17
18
  required(:exchange_rate).maybe(:float)
@@ -6,21 +6,6 @@ module LedgerSync
6
6
  module QuickBooksOnline
7
7
  module Deposit
8
8
  class Searcher < QuickBooksOnline::Searcher
9
- def resources
10
- @resources ||= begin
11
- adaptor
12
- .query(
13
- resource: 'deposit',
14
- limit: limit,
15
- offset: offset
16
- )
17
- .map do |c|
18
- LedgerSync::Deposit.new(
19
- ledger_id: c.fetch('Id')
20
- )
21
- end
22
- end
23
- end
24
9
  end
25
10
  end
26
11
  end
@@ -7,8 +7,6 @@ module LedgerSync
7
7
  module QuickBooksOnline
8
8
  module Expense
9
9
  class LedgerSerializer < QuickBooksOnline::LedgerSerializer
10
- quickbooks_online_resource_type :purchase
11
-
12
10
  id ledger_attribute: 'Id',
13
11
  resource_attribute: :ledger_id
14
12
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative '../searcher'
3
4
 
4
5
  module LedgerSync
@@ -6,21 +7,6 @@ module LedgerSync
6
7
  module QuickBooksOnline
7
8
  module Expense
8
9
  class Searcher < QuickBooksOnline::Searcher
9
- def resources
10
- @resources ||= begin
11
- adaptor
12
- .query(
13
- resource: 'purchase',
14
- limit: limit,
15
- offset: offset
16
- )
17
- .map do |c|
18
- LedgerSync::Expense.new(
19
- ledger_id: c.fetch('Id')
20
- )
21
- end
22
- end
23
- end
24
10
  end
25
11
  end
26
12
  end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../invoice_sales_line_item/ledger_serializer'
4
+
5
+ module LedgerSync
6
+ module Adaptors
7
+ module QuickBooksOnline
8
+ module Invoice
9
+ class LedgerSerializer < QuickBooksOnline::LedgerSerializer
10
+ id
11
+
12
+ attribute ledger_attribute: 'CurrencyRef.value',
13
+ resource_attribute: :currency
14
+
15
+ attribute ledger_attribute: 'TxnDate',
16
+ resource_attribute: :transaction_date,
17
+ type: LedgerSerializerType::DateType
18
+
19
+ attribute ledger_attribute: 'PrivateNote',
20
+ resource_attribute: :memo
21
+
22
+ attribute ledger_attribute: 'CustomerRef.value',
23
+ resource_attribute: 'customer.ledger_id'
24
+
25
+ attribute ledger_attribute: 'DepositToAccountRef.value',
26
+ resource_attribute: 'account.ledger_id'
27
+
28
+ references_many ledger_attribute: 'Line',
29
+ resource_attribute: :line_items,
30
+ serializer: InvoiceSalesLineItem::LedgerSerializer
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Adaptors
5
+ module QuickBooksOnline
6
+ module Invoice
7
+ module Operations
8
+ class Create < Operation::Create
9
+ class Contract < LedgerSync::Adaptors::Contract
10
+ params do
11
+ required(:external_id).maybe(:string)
12
+ optional(:account).hash(Types::Reference)
13
+ required(:currency).filled(:string)
14
+ required(:customer).hash(Types::Reference)
15
+ optional(:deposit).maybe(:integer)
16
+ required(:ledger_id).value(:nil)
17
+ required(:line_items).array(Types::Reference)
18
+ optional(:memo).filled(:string)
19
+ optional(:transaction_date).filled(:date?)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end