moneybird-client 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +26 -0
  3. data/.forgejo/workflows/release.yml +56 -0
  4. data/.forgejo/workflows/ruby.yml +37 -0
  5. data/.gitignore +10 -0
  6. data/.kick +17 -0
  7. data/.rspec +2 -0
  8. data/.rubocop.yml +1156 -0
  9. data/CODE_OF_CONDUCT.md +49 -0
  10. data/Gemfile +11 -0
  11. data/LICENSE.txt +21 -0
  12. data/README.md +110 -0
  13. data/Rakefile +11 -0
  14. data/bin/console +13 -0
  15. data/bin/setup +8 -0
  16. data/lib/moneybird/client.rb +80 -0
  17. data/lib/moneybird/http_error/authorization_required.rb +8 -0
  18. data/lib/moneybird/http_error/bad_request.rb +8 -0
  19. data/lib/moneybird/http_error/forbidden.rb +8 -0
  20. data/lib/moneybird/http_error/internal_server_error.rb +8 -0
  21. data/lib/moneybird/http_error/method_not_allowed.rb +8 -0
  22. data/lib/moneybird/http_error/not_accepted.rb +8 -0
  23. data/lib/moneybird/http_error/not_found.rb +8 -0
  24. data/lib/moneybird/http_error/payment_required.rb +8 -0
  25. data/lib/moneybird/http_error/too_many_requests.rb +8 -0
  26. data/lib/moneybird/http_error/unprocessable_entity.rb +8 -0
  27. data/lib/moneybird/middleware/error_handling.rb +29 -0
  28. data/lib/moneybird/middleware/pagination/links.rb +19 -0
  29. data/lib/moneybird/middleware/pagination.rb +31 -0
  30. data/lib/moneybird/oauth.rb +91 -0
  31. data/lib/moneybird/resource/administration.rb +101 -0
  32. data/lib/moneybird/resource/contact.rb +75 -0
  33. data/lib/moneybird/resource/custom_field.rb +18 -0
  34. data/lib/moneybird/resource/document_style.rb +35 -0
  35. data/lib/moneybird/resource/documents/general_document.rb +27 -0
  36. data/lib/moneybird/resource/documents/general_journal_document.rb +28 -0
  37. data/lib/moneybird/resource/documents/purchase_invoice.rb +57 -0
  38. data/lib/moneybird/resource/documents/receipt.rb +57 -0
  39. data/lib/moneybird/resource/documents/typeless_document.rb +28 -0
  40. data/lib/moneybird/resource/estimate.rb +64 -0
  41. data/lib/moneybird/resource/external_sales_invoice.rb +61 -0
  42. data/lib/moneybird/resource/financial_account.rb +23 -0
  43. data/lib/moneybird/resource/financial_mutation.rb +39 -0
  44. data/lib/moneybird/resource/generic/event.rb +19 -0
  45. data/lib/moneybird/resource/generic/note.rb +25 -0
  46. data/lib/moneybird/resource/identity.rb +31 -0
  47. data/lib/moneybird/resource/invoice/details.rb +29 -0
  48. data/lib/moneybird/resource/invoice/payment.rb +26 -0
  49. data/lib/moneybird/resource/ledger_account.rb +19 -0
  50. data/lib/moneybird/resource/product.rb +21 -0
  51. data/lib/moneybird/resource/recurring_sales_invoice.rb +62 -0
  52. data/lib/moneybird/resource/sales_invoice.rb +98 -0
  53. data/lib/moneybird/resource/synchronization.rb +15 -0
  54. data/lib/moneybird/resource/tax_rate.rb +21 -0
  55. data/lib/moneybird/resource/webhook.rb +24 -0
  56. data/lib/moneybird/resource/workflow.rb +24 -0
  57. data/lib/moneybird/resource.rb +126 -0
  58. data/lib/moneybird/service/administration.rb +29 -0
  59. data/lib/moneybird/service/contact.rb +27 -0
  60. data/lib/moneybird/service/custom_field.rb +19 -0
  61. data/lib/moneybird/service/document_style.rb +19 -0
  62. data/lib/moneybird/service/documents/general_document.rb +23 -0
  63. data/lib/moneybird/service/documents/general_journal_document.rb +23 -0
  64. data/lib/moneybird/service/documents/purchase_invoice.rb +23 -0
  65. data/lib/moneybird/service/documents/receipt.rb +23 -0
  66. data/lib/moneybird/service/documents/typeless_document.rb +23 -0
  67. data/lib/moneybird/service/estimate.rb +23 -0
  68. data/lib/moneybird/service/external_sales_invoice.rb +22 -0
  69. data/lib/moneybird/service/financial_account.rb +19 -0
  70. data/lib/moneybird/service/financial_mutation.rb +24 -0
  71. data/lib/moneybird/service/identity.rb +22 -0
  72. data/lib/moneybird/service/ledger_account.rb +22 -0
  73. data/lib/moneybird/service/payment.rb +21 -0
  74. data/lib/moneybird/service/product.rb +22 -0
  75. data/lib/moneybird/service/recurring_sales_invoice.rb +23 -0
  76. data/lib/moneybird/service/sales_invoice.rb +26 -0
  77. data/lib/moneybird/service/tax_rate.rb +19 -0
  78. data/lib/moneybird/service/webhook.rb +21 -0
  79. data/lib/moneybird/service/workflow.rb +19 -0
  80. data/lib/moneybird/token.rb +20 -0
  81. data/lib/moneybird/traits/administration_service.rb +16 -0
  82. data/lib/moneybird/traits/delete.rb +12 -0
  83. data/lib/moneybird/traits/download_pdf.rb +11 -0
  84. data/lib/moneybird/traits/find.rb +11 -0
  85. data/lib/moneybird/traits/find_all.rb +51 -0
  86. data/lib/moneybird/traits/mark_as_uncollectible.rb +17 -0
  87. data/lib/moneybird/traits/save.rb +26 -0
  88. data/lib/moneybird/traits/send_invoice.rb +17 -0
  89. data/lib/moneybird/traits/service.rb +15 -0
  90. data/lib/moneybird/traits/synchronization.rb +13 -0
  91. data/lib/moneybird/version.rb +5 -0
  92. data/lib/moneybird/webhook.rb +31 -0
  93. data/lib/moneybird.rb +115 -0
  94. data/moneybird.gemspec +37 -0
  95. metadata +235 -0
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Moneybird::Resource
4
+ class RecurringSalesInvoice
5
+ include Moneybird::Resource
6
+
7
+ extend Moneybird::Resource::ClassMethods
8
+
9
+ has_attributes %i(
10
+ id
11
+ administration_id
12
+ contact_id
13
+ custom_fields
14
+ workflow_id
15
+ start_date
16
+ invoice_date
17
+ last_date
18
+ active
19
+ payment_conditions
20
+ reference
21
+ language
22
+ currency
23
+ discount
24
+ first_due_interval
25
+ auto_send
26
+ sending_scheduled_at
27
+ sending_scheduled_user_id
28
+ frequency_type
29
+ frequency
30
+ created_at
31
+ updated_at
32
+ prices_are_incl_tax
33
+ total_price_excl_tax
34
+ total_price_excl_tax_base
35
+ total_price_incl_tax
36
+ total_price_incl_tax_base
37
+ attachments
38
+ )
39
+
40
+ @attributes += %i(contact details events notes)
41
+ attr_reader :contact, :details, :events, :notes
42
+
43
+ def notes=(notes)
44
+ @notes = notes.map{ |note| Moneybird::Resource::Generic::Note.build(note) }
45
+ end
46
+
47
+ def contact=(attributes)
48
+ @contact = Moneybird::Resource::Contact.build(attributes)
49
+ end
50
+
51
+ def details=(line_items)
52
+ @details = line_items.map{ |line_item| Moneybird::Resource::Invoice::Details.build(line_item) }
53
+ end
54
+
55
+ def events=(events)
56
+ @events = events.map{ |event| Moneybird::Resource::Generic::Event.build(event) }
57
+ end
58
+ end
59
+ end
60
+
61
+
62
+
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Moneybird::Resource
4
+ class SalesInvoice
5
+ include Moneybird::Resource
6
+ extend Moneybird::Resource::ClassMethods
7
+
8
+ has_attributes %i(
9
+ administration_id
10
+ attachments
11
+ contact_id
12
+ contact_person
13
+ contact_person_id
14
+ created_at
15
+ currency
16
+ discount
17
+ document_style_id
18
+ draft_id
19
+ due_date
20
+ id
21
+ identity_id
22
+ invoice_date
23
+ invoice_id
24
+ invoice_sequence_id
25
+ language
26
+ marked_dubious_on
27
+ marked_uncollectible_on
28
+ next_reminder
29
+ original_estimate_id
30
+ original_sales_invoice_id
31
+ paid_at
32
+ paused
33
+ payment_conditions
34
+ payment_reference
35
+ payment_url
36
+ prices_are_incl_tax
37
+ public_view_code
38
+ public_view_code_expires_at
39
+ recurring_sales_invoice_id
40
+ reference
41
+ reminder_count
42
+ sent_at
43
+ short_payment_reference
44
+ state
45
+ tax_totals
46
+ total_discount
47
+ total_paid
48
+ total_price_excl_tax
49
+ total_price_excl_tax_base
50
+ total_price_incl_tax
51
+ total_price_incl_tax_base
52
+ total_unpaid
53
+ total_unpaid_base
54
+ updated_at
55
+ url
56
+ version
57
+ workflow_id
58
+ )
59
+
60
+ @attributes += %i(contact custom_fields details events notes payments)
61
+ attr_reader :contact, :custom_fields, :details, :events, :notes, :payments
62
+
63
+ def notes=(notes)
64
+ @notes = notes.map{ |note| Moneybird::Resource::Generic::Note.build(note) }
65
+ end
66
+
67
+ def contact=(attributes)
68
+ @contact = Moneybird::Resource::Contact.build(attributes)
69
+ end
70
+
71
+ def send_invoice(options = {})
72
+ invoice_service = Moneybird::Service::SalesInvoice.new(client, administration_id)
73
+ invoice_service.send_invoice(self, options)
74
+ end
75
+
76
+ def mark_as_uncollectible(options = {})
77
+ invoice_service = Moneybird::Service::SalesInvoice.new(client, administration_id)
78
+ invoice_service.mark_as_uncollectible(self, options)
79
+ end
80
+
81
+ def payments=(payments)
82
+ payment_data = payments.map{ |payment| Moneybird::Resource::Invoice::Payment.build(payment) }
83
+ @payments = Moneybird::Service::Payment.new(client, administration_id, preloaded_data: payment_data, invoice_id: id)
84
+ end
85
+
86
+ def details=(line_items)
87
+ @details = line_items.map{ |line_item| Moneybird::Resource::Invoice::Details.build(line_item) }
88
+ end
89
+
90
+ def events=(events)
91
+ @events = events.map{ |event| Moneybird::Resource::Generic::Event.build(event) }
92
+ end
93
+
94
+ def custom_fields=(custom_fields)
95
+ @custom_fields = custom_fields.map { |custom_field| Moneybird::Resource::CustomField.build(custom_field) }
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Moneybird
4
+ module Resource
5
+ class Synchronization
6
+ include Moneybird::Resource
7
+ extend Moneybird::Resource::ClassMethods
8
+
9
+ has_attributes %i(
10
+ id
11
+ version
12
+ )
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Moneybird::Resource
4
+ class TaxRate
5
+ include Moneybird::Resource
6
+ extend Moneybird::Resource::ClassMethods
7
+
8
+ has_attributes %i(
9
+ id
10
+ administration_id
11
+ name
12
+ percentage
13
+ tax_rate_type
14
+ show_tax
15
+ active
16
+ country
17
+ created_at
18
+ updated_at
19
+ )
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Moneybird::Resource
4
+ class Webhook
5
+ include Moneybird::Resource
6
+ extend Moneybird::Resource::ClassMethods
7
+
8
+ has_attributes %i(
9
+ id
10
+ administration_id
11
+ url
12
+ last_http_status
13
+ last_http_body
14
+ enabled_events
15
+ token
16
+ )
17
+
18
+ def to_json
19
+ JSON.generate(attributes.as_json)
20
+ end
21
+ end
22
+ end
23
+
24
+
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Moneybird::Resource
4
+ class Workflow
5
+ include Moneybird::Resource
6
+ extend Moneybird::Resource::ClassMethods
7
+
8
+ has_attributes %i(
9
+ id
10
+ administration_id
11
+ type
12
+ name
13
+ default
14
+ currency
15
+ language
16
+ active
17
+ prices_are_incl_tax
18
+ created_at
19
+ updated_at
20
+ )
21
+ end
22
+ end
23
+
24
+
@@ -0,0 +1,126 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Moneybird
4
+ module Resource
5
+ attr_accessor :errors, :client
6
+
7
+ def initialize(attributes)
8
+ self.attributes = attributes
9
+ end
10
+
11
+ def persisted?
12
+ !!id
13
+ end
14
+
15
+ def path
16
+ persisted? ? "/#{id}" : ""
17
+ end
18
+
19
+ def attributes=(attributes)
20
+ @attributes = attributes
21
+ self.client ||= attributes[:client]
22
+ attributes.each do |attribute, value|
23
+ if respond_to?(writer = attribute.to_s + '=')
24
+ send(writer, value)
25
+ else
26
+ self.class.logger.warn "#{self.class} does not have an `#{attribute}' attribute"
27
+ end
28
+ end
29
+ end
30
+
31
+ def attributes
32
+ self.class.attributes.inject({}) do |attributes, attribute|
33
+ value = send(attribute)
34
+ if !value.nil?
35
+ if value.is_a?(Array) && value.first.respond_to?(:attributes)
36
+ attributes["#{attribute}_attributes"] = value.map { |item| item.attributes }
37
+ elsif value.respond_to?(:attributes)
38
+ attributes["#{attribute}_attributes"] = value.attributes
39
+ else
40
+ unless self.class.nillable_attributes && self.class.nillable_attributes.include?(attribute)
41
+ attributes[attribute] = value
42
+ end
43
+ end
44
+ end; attributes
45
+ end
46
+ end
47
+
48
+ def to_json
49
+ JSON.generate({self.class.resource => attributes.as_json})
50
+ end
51
+
52
+ module ClassMethods
53
+ attr_reader :attributes, :nillable_attributes
54
+ attr_writer :logger
55
+
56
+ def build(attributes)
57
+ new(attributes)
58
+ end
59
+
60
+ def logger
61
+ @logger ||= begin
62
+ Logger.new(STDOUT)
63
+ end
64
+ end
65
+
66
+ def resource
67
+ self.name.split('::').last.underscore
68
+ end
69
+
70
+ def has_attributes(attributes)
71
+ attr_accessor(*@attributes = attributes)
72
+ end
73
+
74
+ def has_nillable_attributes(attributes)
75
+ @nillable_attributes = attributes
76
+ end
77
+
78
+ def has_boolean_attributes(attributes)
79
+ attributes.each do |attribute|
80
+ define_method(attribute) do
81
+ input = instance_variable_get('@' + attribute)
82
+ if input.kind_of?(String)
83
+ if input == 'true'
84
+ true
85
+ elsif input == 'false'
86
+ false
87
+ else
88
+ nil
89
+ end
90
+ else
91
+ input
92
+ end
93
+ end
94
+ end
95
+ end
96
+
97
+ def has_integer_attributes(attributes)
98
+ attributes.each do |attribute|
99
+ define_method(attribute) do
100
+ input = instance_variable_get('@' + attribute)
101
+ if input.kind_of?(String)
102
+ input.to_i
103
+ else
104
+ input
105
+ end
106
+ end
107
+ end
108
+ end
109
+
110
+ def has_datetime_attributes(attributes)
111
+ attributes.each do |attribute|
112
+ define_method(attribute) do
113
+ input = instance_variable_get('@' + attribute)
114
+ if input.kind_of?(Time)
115
+ input
116
+ elsif input.kind_of?(Date)
117
+ input.to_time
118
+ elsif input.kind_of?(String)
119
+ input.strip == '' ? nil : Time.parse(input)
120
+ end
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Moneybird::Service
4
+ class Administration
5
+ include Moneybird::Traits::FindAll
6
+ include Moneybird::Traits::Service
7
+
8
+ attr_reader :client, :preloaded_data
9
+
10
+ def initialize(client)
11
+ @client = client
12
+ @preloaded_data = nil
13
+ end
14
+
15
+ def find(id)
16
+ all.find{ |administration| administration.id.to_i == id }
17
+ end
18
+
19
+ private
20
+
21
+ def resource_class
22
+ Moneybird::Resource::Administration
23
+ end
24
+
25
+ def path
26
+ 'administrations'
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Moneybird::Service
4
+ class Contact
5
+ include Moneybird::Traits::AdministrationService
6
+ include Moneybird::Traits::Service
7
+ include Moneybird::Traits::Find
8
+ include Moneybird::Traits::FindAll
9
+ include Moneybird::Traits::Save
10
+ include Moneybird::Traits::Delete
11
+ include Moneybird::Traits::Synchronization
12
+
13
+ def find_by_customer_id(customer_id)
14
+ build client.get("#{path}/customer_id/#{customer_id}")
15
+ end
16
+
17
+ private
18
+
19
+ def resource_class
20
+ Moneybird::Resource::Contact
21
+ end
22
+
23
+ def path
24
+ "#{administration_id}/contacts"
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Moneybird::Service
4
+ class CustomField
5
+ include Moneybird::Traits::AdministrationService
6
+ include Moneybird::Traits::Service
7
+ include Moneybird::Traits::FindAll
8
+
9
+ private
10
+
11
+ def resource_class
12
+ Moneybird::Resource::CustomField
13
+ end
14
+
15
+ def path
16
+ "#{administration_id}/custom_fields"
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Moneybird::Service
4
+ class DocumentStyle
5
+ include Moneybird::Traits::AdministrationService
6
+ include Moneybird::Traits::Service
7
+ include Moneybird::Traits::FindAll
8
+
9
+ private
10
+
11
+ def resource_class
12
+ Moneybird::Resource::DocumentStyle
13
+ end
14
+
15
+ def path
16
+ "#{administration_id}/document_styles"
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Moneybird::Service::Document
4
+ class GeneralDocument
5
+ include Moneybird::Traits::AdministrationService
6
+ include Moneybird::Traits::Service
7
+ include Moneybird::Traits::Find
8
+ include Moneybird::Traits::FindAll
9
+ include Moneybird::Traits::Save
10
+ include Moneybird::Traits::Delete
11
+ include Moneybird::Traits::Synchronization
12
+
13
+ private
14
+
15
+ def resource_class
16
+ Moneybird::Resource::Documents::GeneralDocument
17
+ end
18
+
19
+ def path
20
+ "#{administration_id}/documents/general_documents"
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Moneybird::Service::Document
4
+ class GeneralJournalDocument
5
+ include Moneybird::Traits::AdministrationService
6
+ include Moneybird::Traits::Service
7
+ include Moneybird::Traits::Find
8
+ include Moneybird::Traits::FindAll
9
+ include Moneybird::Traits::Save
10
+ include Moneybird::Traits::Delete
11
+ include Moneybird::Traits::Synchronization
12
+
13
+ private
14
+
15
+ def resource_class
16
+ Moneybird::Resource::Documents::GeneralJournalDocument
17
+ end
18
+
19
+ def path
20
+ "#{administration_id}/documents/general_journal_documents"
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Moneybird::Service::Document
4
+ class PurchaseInvoice
5
+ include Moneybird::Traits::AdministrationService
6
+ include Moneybird::Traits::Service
7
+ include Moneybird::Traits::Find
8
+ include Moneybird::Traits::FindAll
9
+ include Moneybird::Traits::Save
10
+ include Moneybird::Traits::Delete
11
+ include Moneybird::Traits::Synchronization
12
+
13
+ private
14
+
15
+ def resource_class
16
+ Moneybird::Resource::Documents::Receipt
17
+ end
18
+
19
+ def path
20
+ "#{administration_id}/documents/purchase_invoices"
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Moneybird::Service::Document
4
+ class Receipt
5
+ include Moneybird::Traits::AdministrationService
6
+ include Moneybird::Traits::Service
7
+ include Moneybird::Traits::Find
8
+ include Moneybird::Traits::FindAll
9
+ include Moneybird::Traits::Save
10
+ include Moneybird::Traits::Delete
11
+ include Moneybird::Traits::Synchronization
12
+
13
+ private
14
+
15
+ def resource_class
16
+ Moneybird::Resource::Documents::Receipt
17
+ end
18
+
19
+ def path
20
+ "#{administration_id}/documents/receipts"
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Moneybird::Service::Document
4
+ class TypelessDocument
5
+ include Moneybird::Traits::AdministrationService
6
+ include Moneybird::Traits::Service
7
+ include Moneybird::Traits::Find
8
+ include Moneybird::Traits::FindAll
9
+ include Moneybird::Traits::Save
10
+ include Moneybird::Traits::Delete
11
+ include Moneybird::Traits::Synchronization
12
+
13
+ private
14
+
15
+ def resource_class
16
+ Moneybird::Resource::Documents::TypelessDocument
17
+ end
18
+
19
+ def path
20
+ "#{administration_id}/documents/typeless_documents"
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Moneybird::Service
4
+ class Estimate
5
+ include Moneybird::Traits::AdministrationService
6
+ include Moneybird::Traits::Service
7
+ include Moneybird::Traits::Find
8
+ include Moneybird::Traits::FindAll
9
+ include Moneybird::Traits::Save
10
+ include Moneybird::Traits::Delete
11
+ include Moneybird::Traits::Synchronization
12
+
13
+ private
14
+
15
+ def resource_class
16
+ Moneybird::Resource::Estimate
17
+ end
18
+
19
+ def path
20
+ "#{administration_id}/estimates"
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Moneybird::Service
4
+ class ExternalSalesInvoice
5
+ include Moneybird::Traits::AdministrationService
6
+ include Moneybird::Traits::Service
7
+ include Moneybird::Traits::Find
8
+ include Moneybird::Traits::FindAll
9
+ include Moneybird::Traits::Save
10
+ include Moneybird::Traits::Delete
11
+
12
+ private
13
+
14
+ def resource_class
15
+ Moneybird::Resource::ExternalSalesInvoice
16
+ end
17
+
18
+ def path
19
+ "#{administration_id}/external_sales_invoices"
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Moneybird::Service
4
+ class FinancialAccount
5
+ include Moneybird::Traits::AdministrationService
6
+ include Moneybird::Traits::Service
7
+ include Moneybird::Traits::FindAll
8
+
9
+ private
10
+
11
+ def resource_class
12
+ Moneybird::Resource::FinancialAccount
13
+ end
14
+
15
+ def path
16
+ "#{administration_id}/financial_accounts"
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Moneybird::Service
4
+ class FinancialMutation
5
+ include Moneybird::Traits::AdministrationService
6
+ include Moneybird::Traits::Service
7
+ include Moneybird::Traits::FindAll
8
+ include Moneybird::Traits::Synchronization
9
+
10
+ def link_booking(resource, booking)
11
+ client.patch("#{resource_path(resource)}/link_booking", booking.to_json)
12
+ end
13
+
14
+ private
15
+
16
+ def resource_class
17
+ Moneybird::Resource::FinancialMutation
18
+ end
19
+
20
+ def path
21
+ "#{administration_id}/financial_mutations"
22
+ end
23
+ end
24
+ end