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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +30 -3
- data/Gemfile.lock +1 -1
- data/README.md +106 -38
- data/examples/invoice.rb +64 -9
- data/examples/payment.rb +255 -0
- data/examples/tax.rb +99 -0
- data/lib/myob_acumatica/api/payment.rb +506 -0
- data/lib/myob_acumatica/api/tax.rb +350 -0
- data/lib/myob_acumatica/version.rb +1 -1
- data/lib/myob_acumatica.rb +2 -0
- metadata +6 -2
data/examples/payment.rb
ADDED
@@ -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'
|