myob_acumatica 0.1.2 → 0.1.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.
@@ -0,0 +1,255 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+ require 'logger'
5
+ require 'date'
6
+ require 'dotenv/load'
7
+ require 'myob_acumatica'
8
+
9
+ access_token = ENV['MYOB_ACUMATICA_ACCESS_TOKEN']
10
+ logger = Logger.new($stdout)
11
+
12
+ MyobAcumatica::Api::Payment.get_ad_hoc_schema(
13
+ access_token: access_token,
14
+ logger: logger
15
+ )
16
+
17
+ MyobAcumatica::Api::Customer.put_entity(
18
+ access_token: access_token,
19
+ entity: {
20
+ 'CustomerID' => { 'value' => 'JOHNGOODPAYER' },
21
+ 'CustomerName' => { 'value' => 'John Good PAYER' },
22
+ 'CustomerClass' => { 'value' => 'CUSTDFT' },
23
+ 'MainContact' => {
24
+ 'Email' => { 'value' => 'demo@gmail.com' },
25
+ 'Address' => {
26
+ 'AddressLine1' => { 'value' => '4030 Lake Washington Blvd NE' },
27
+ 'AddressLine2' => { 'value' => 'Suite 100' },
28
+ 'City' => { 'value' => 'Kirkland' },
29
+ 'State' => { 'value' => 'WA' },
30
+ 'PostalCode' => { 'value' => '98033' },
31
+ 'Country' => { 'value' => 'US' }
32
+ }
33
+ }
34
+ },
35
+ logger: logger
36
+ )
37
+
38
+ invoice1 = MyobAcumatica::Api::Invoice.put_entity(
39
+ access_token: access_token,
40
+ entity: {
41
+ 'Customer' => { 'value' => 'JOHNGOODPAYER' },
42
+ 'Date' => { 'value' => Date.today.strftime('%Y-%m-%d') },
43
+ 'DueDate' => { 'value' => (Date.today + 30).strftime('%Y-%m-%d') },
44
+ 'Terms' => { 'value' => 'NET14DAYS' },
45
+ 'Hold' => { 'value' => false },
46
+ 'PostPeriod' => { 'value' => '08-2025' },
47
+ 'BillingAddressOverride' => { 'value' => true },
48
+ 'BillingAddress' => {
49
+ 'AddressLine1' => { 'value' => 'Fillmore Str' },
50
+ 'City' => { 'value' => 'San Francisco' },
51
+ 'State' => { 'value' => 'CA' }
52
+ },
53
+ 'Description' => { 'value' => 'Test stock item' },
54
+ 'Details' => [
55
+ {
56
+ 'Description' => { 'value' => 'Pair of sneakers' },
57
+ 'Quantity' => { 'value' => 1 },
58
+ 'UnitPrice' => { 'value' => 100.00 }
59
+ }
60
+ ],
61
+ 'custom' => {
62
+ 'Document' => {
63
+ 'DiscDate' => { 'value' => (Date.today + 10).strftime('%Y-%m-%dT00:00:00+00:00') }
64
+ }
65
+ }
66
+ },
67
+ logger: logger
68
+ )
69
+
70
+ puts "Created invoice: #{invoice1['ReferenceNbr']['value']}"
71
+
72
+ MyobAcumatica::Api::Invoice.release(
73
+ access_token: access_token,
74
+ entity: {
75
+ 'id' => invoice1['id']
76
+ },
77
+ logger: logger
78
+ )
79
+
80
+ payment45 = MyobAcumatica::Api::Payment.put_entity(
81
+ access_token: access_token,
82
+ entity: {
83
+ 'CustomerID' => { 'value' => 'JOHNGOODPAYER' },
84
+ 'ApplicationDate' => { 'value' => '2025-05-6' },
85
+ 'PostPeriod' => { 'value' => '11-2025' },
86
+ 'Branch' => { 'value' => 'MAIN' },
87
+ 'PaymentMethod' => { 'value' => 'CASH' },
88
+ 'CashAccount' => { 'value' => 'CASHACCC' },
89
+ 'Hold' => { 'value' => true },
90
+ 'Applications' => [
91
+ {
92
+ 'DocType' => { 'value' => 'Invoice' },
93
+ 'ReferenceNbr' => { 'value' => invoice1['ReferenceNbr']['value'] },
94
+ 'AmountPaid' => { 'value' => 45.0 },
95
+ 'Apply' => { 'value' => true }
96
+ }
97
+ ]
98
+ },
99
+ logger: logger
100
+ )
101
+
102
+ MyobAcumatica::Api::Payment.put_entity(
103
+ access_token: access_token,
104
+ entity: {
105
+ 'id' => payment45['id'],
106
+ 'Hold' => { 'value' => false }
107
+ },
108
+ logger: logger
109
+ )
110
+
111
+ MyobAcumatica::Api::Payment.release_payment(
112
+ access_token: access_token,
113
+ entity: { 'id' => payment45['id'] },
114
+ logger: logger
115
+ )
116
+
117
+ payment55 = MyobAcumatica::Api::Payment.put_entity(
118
+ access_token: access_token,
119
+ entity: {
120
+ 'CustomerID' => { 'value' => 'JOHNGOODPAYER' },
121
+ 'CustomerLocationID' => { 'value' => 'MAIN' },
122
+ 'ApplicationDate' => { 'value' => '2025-05-6' },
123
+ 'PostPeriod' => { 'value' => '11-2025' },
124
+ 'Branch' => { 'value' => 'MAIN' },
125
+ 'PaymentMethod' => { 'value' => 'CASH' },
126
+ 'CashAccount' => { 'value' => 'CASHACCC' },
127
+ 'Hold' => { 'value' => false },
128
+ 'Applications' => [
129
+ {
130
+ 'DocType' => { 'value' => 'Invoice' },
131
+ 'ReferenceNbr' => { 'value' => invoice1['ReferenceNbr']['value'] },
132
+ 'AmountPaid' => { 'value' => 55.0 },
133
+ 'Apply' => { 'value' => true }
134
+ }
135
+ ]
136
+ },
137
+ logger: logger
138
+ )
139
+
140
+ MyobAcumatica::Api::Payment.invoke_action(
141
+ access_token: access_token,
142
+ action_name: 'ReleasePayment',
143
+ entity: { 'id' => payment55['id'] },
144
+ logger: logger
145
+ )
146
+
147
+ MyobAcumatica::Api::Payment.get_by_id(
148
+ access_token: access_token,
149
+ id: payment45['id'],
150
+ logger: logger
151
+ )
152
+
153
+ MyobAcumatica::Api::Payment.get_by_keys(
154
+ access_token: access_token,
155
+ keys: [payment55['Type']['value'], payment55['ReferenceNbr']['value']],
156
+ logger: logger
157
+ )
158
+
159
+ MyobAcumatica::Api::Payment.get_list(
160
+ access_token: access_token,
161
+ query_params: {
162
+ '$filter' => "Type eq 'Payment'"
163
+ },
164
+ logger: logger
165
+ )
166
+
167
+ MyobAcumatica::Api::Payment.put_file(
168
+ access_token: access_token,
169
+ keys: [payment45['Type']['value'], payment45['ReferenceNbr']['value']],
170
+ file_path: 'examples/dummy.pdf',
171
+ logger: logger
172
+ )
173
+
174
+ # cc_pay = MyobAcumatica::Api::Payment.put_entity(
175
+ # access_token: access_token,
176
+ # entity: {
177
+ # 'Type' => { 'value' => 'Payment' },
178
+ # 'CustomerID' => { 'value' => customer['CustomerID'] },
179
+ # 'ApplicationDate' => { 'value' => '2025-05-6' },
180
+ # 'PostPeriod' => { 'value' => '11-2025' },
181
+ # 'Branch' => { 'value' => 'MAIN' },
182
+ # 'PaymentMethod' => { 'value' => 'CCARD' },
183
+ # 'CashAccount' => { 'value' => 'CASHACCOUNT' },
184
+ # 'Hold' => { 'value' => false }
185
+ # },
186
+ # logger: logger
187
+ # )
188
+
189
+ # MyobAcumatica::Api::Payment.card_operation(
190
+ # access_token: access_token,
191
+ # entity: {
192
+ # 'ReferenceNbr' => { 'value' => cc_pay['ReferenceNbr']['value'] }
193
+ # },
194
+ # parameters: {
195
+ # 'Operation' => { 'value' => 'Authorize' },
196
+ # 'Amount' => { 'value' => 60.0 }
197
+ # },
198
+ # logger: logger
199
+ # )
200
+
201
+ # MyobAcumatica::Api::Payment.capture_credit_card_payment(
202
+ # access_token: access_token,
203
+ # entity: {
204
+ # 'ReferenceNbr' => { 'value' => cc_pay['ReferenceNbr']['value'] }
205
+ # },
206
+ # parameters: {
207
+ # 'Amount' => { 'value' => 60.0 }
208
+ # },
209
+ # logger: logger
210
+ # )
211
+
212
+ # MyobAcumatica::Api::Payment.release_payment(
213
+ # access_token: access_token,
214
+ # entity: {
215
+ # 'ReferenceNbr' => { 'value' => cc_pay['ReferenceNbr']['value'] }
216
+ # },
217
+ # logger: logger
218
+ # )
219
+
220
+ # voidable = MyobAcumatica::Api::Payment.put_entity(
221
+ # access_token: access_token,
222
+ # entity: {
223
+ # 'Type' => { 'value' => 'Payment' },
224
+ # 'CustomerID' => { 'value' => customer['CustomerID'] },
225
+ # 'ApplicationDate' => { 'value' => Date.today.strftime('%Y-%m-%d') },
226
+ # 'PaymentMethod' => { 'value' => cash_method },
227
+ # 'CashAccount' => { 'value' => cash_account },
228
+ # 'Hold' => { 'value' => true }
229
+ # },
230
+ # logger: logger
231
+ # )
232
+
233
+ # MyobAcumatica::Api::Payment.void_payment(
234
+ # access_token: access_token,
235
+ # entity: { 'ReferenceNbr' => { 'value' => voidable['ReferenceNbr']['value'] } },
236
+ # logger: logger
237
+ # )
238
+
239
+ # MyobAcumatica::Api::Payment.void_card_payment(
240
+ # access_token: access_token,
241
+ # entity: { 'ReferenceNbr' => { 'value' => cc_pay['ReferenceNbr']['value'] } },
242
+ # logger: logger
243
+ # )
244
+
245
+ MyobAcumatica::Api::Payment.delete_by_keys(
246
+ access_token: access_token,
247
+ keys: [payment55['Type']['value'], payment55['ReferenceNbr']['value']],
248
+ logger: logger
249
+ )
250
+
251
+ MyobAcumatica::Api::Payment.delete_by_id(
252
+ access_token: access_token,
253
+ id: payment45['id'],
254
+ logger: logger
255
+ )
data/examples/tax.rb ADDED
@@ -0,0 +1,99 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+ require 'logger'
5
+ require 'date'
6
+ require 'dotenv/load'
7
+ require 'myob_acumatica'
8
+
9
+ access_token = ENV['MYOB_ACUMATICA_ACCESS_TOKEN']
10
+ logger = Logger.new($stdout)
11
+
12
+ MyobAcumatica::Api::Tax.get_ad_hoc_schema(
13
+ access_token: access_token,
14
+ logger: logger
15
+ )
16
+
17
+ gst = MyobAcumatica::Api::Tax.put_entity(
18
+ access_token: access_token,
19
+ entity: {
20
+ 'TaxID' => { 'value' => 'GST' },
21
+ 'Description' => { 'value' => 'Goods and Services Tax' },
22
+ 'TaxType' => { 'value' => 'Sales' },
23
+ 'CalculateOn' => { 'value' => 'Exclusive Document-Level' },
24
+ 'TaxAgency' => { 'value' => 'ATO' },
25
+ 'TaxPayableAccount' => { 'value' => '2200' },
26
+ 'TaxPayableSubaccount' => { 'value' => '000-000' }
27
+ },
28
+ logger: logger
29
+ )
30
+
31
+ vat = MyobAcumatica::Api::Tax.put_entity(
32
+ access_token: access_token,
33
+ entity: {
34
+ 'TaxID' => { 'value' => 'VAT20' },
35
+ 'Description' => { 'value' => 'Value Added Tax 20%' },
36
+ 'TaxType' => { 'value' => 'Sales' },
37
+ 'CalculateOn' => { 'value' => 'Exclusive Document-Level' },
38
+ 'TaxAgency' => { 'value' => 'ATO' },
39
+ 'TaxPayableAccount' => { 'value' => '2200' },
40
+ 'TaxPayableSubaccount' => { 'value' => '000-000' }
41
+ },
42
+ logger: logger
43
+ )
44
+
45
+ puts "Created GST with id=#{gst['id']}"
46
+ puts "Created VAT20 with id=#{vat['id']}"
47
+
48
+ gst_by_keys = MyobAcumatica::Api::Tax.get_by_keys(
49
+ access_token: access_token,
50
+ keys: ['GST'],
51
+ logger: logger
52
+ )
53
+ puts "Fetched by keys: #{gst_by_keys['TaxID']&.dig('value')}"
54
+
55
+ gst_by_id = MyobAcumatica::Api::Tax.get_by_id(
56
+ access_token: access_token,
57
+ id: gst['id'],
58
+ logger: logger
59
+ )
60
+ puts "Fetched by id: #{gst_by_id['TaxID']&.dig('value')}"
61
+
62
+ list = MyobAcumatica::Api::Tax.get_list(
63
+ access_token: access_token,
64
+ query_params: { '$filter' => "TaxType eq 'Sales'", '$top' => 5 },
65
+ logger: logger
66
+ )
67
+ puts "Listed #{list.size} tax record(s)"
68
+
69
+ gst = MyobAcumatica::Api::Tax.put_entity(
70
+ access_token: access_token,
71
+ entity: {
72
+ 'id' => gst['id'],
73
+ 'Description' => { 'value' => 'GST (updated desc)' }
74
+ },
75
+ logger: logger
76
+ )
77
+ puts 'Updated GST description'
78
+
79
+ MyobAcumatica::Api::Tax.put_file(
80
+ access_token: access_token,
81
+ keys: ['GST'],
82
+ file_path: 'examples/dummy.pdf',
83
+ logger: logger
84
+ )
85
+ puts 'Attached file to GST'
86
+
87
+ MyobAcumatica::Api::Tax.delete_by_keys(
88
+ access_token: access_token,
89
+ keys: ['VAT20'],
90
+ logger: logger
91
+ )
92
+ puts 'Deleted VAT20 by keys'
93
+
94
+ MyobAcumatica::Api::Tax.delete_by_id(
95
+ access_token: access_token,
96
+ id: gst['id'],
97
+ logger: logger
98
+ )
99
+ puts 'Deleted GST by id'