tsubaiso-sdk 1.2.6 → 1.2.7

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 (37) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +3 -2
  3. data/lib/tsubaiso_sdk.rb +550 -118
  4. data/test/stubbings/stub_register.rb +196 -0
  5. data/test/tsubaiso_sdk/common_setup_and_teardown.rb +23 -0
  6. data/test/tsubaiso_sdk/test_ap_reason_masters.rb +26 -0
  7. data/test/tsubaiso_sdk/test_api_history.rb +27 -0
  8. data/test/tsubaiso_sdk/test_ar_reason_masters.rb +26 -0
  9. data/test/tsubaiso_sdk/test_bank_account.rb +34 -0
  10. data/test/tsubaiso_sdk/test_bank_account_master.rb +119 -0
  11. data/test/tsubaiso_sdk/test_bank_account_transaction.rb +61 -0
  12. data/test/tsubaiso_sdk/test_bank_reason_master.rb +90 -0
  13. data/test/tsubaiso_sdk/test_bonus.rb +26 -0
  14. data/test/tsubaiso_sdk/test_bulk_scheduled_dates.rb +24 -0
  15. data/test/tsubaiso_sdk/test_corporate_master.rb +27 -0
  16. data/test/tsubaiso_sdk/test_customer.rb +71 -0
  17. data/test/tsubaiso_sdk/test_dept.rb +66 -0
  18. data/test/tsubaiso_sdk/test_fixed_assets.rb +18 -0
  19. data/test/tsubaiso_sdk/test_journal.rb +53 -0
  20. data/test/tsubaiso_sdk/test_journal_distribution.rb +29 -0
  21. data/test/tsubaiso_sdk/test_manual_journal.rb +84 -0
  22. data/test/tsubaiso_sdk/test_payrolles.rb +26 -0
  23. data/test/tsubaiso_sdk/test_petty_cash_reason_master.rb +72 -0
  24. data/test/tsubaiso_sdk/test_physical_inventory_master.rb +84 -0
  25. data/test/tsubaiso_sdk/test_purchase.rb +120 -0
  26. data/test/tsubaiso_sdk/test_reimbursement_reason_master.rb +27 -0
  27. data/test/tsubaiso_sdk/test_reimbursements.rb +63 -0
  28. data/test/tsubaiso_sdk/test_reimbursements_transactions.rb +75 -0
  29. data/test/tsubaiso_sdk/test_sale.rb +125 -0
  30. data/test/tsubaiso_sdk/test_scheduled_dates.rb +16 -0
  31. data/test/tsubaiso_sdk/test_staff.rb +26 -0
  32. data/test/tsubaiso_sdk/test_staff_data.rb +71 -0
  33. data/test/tsubaiso_sdk/test_staff_datum_master.rb +37 -0
  34. data/test/tsubaiso_sdk/test_tag.rb +53 -0
  35. data/test/tsubaiso_sdk/test_tax_master.rb +25 -0
  36. metadata +35 -5
  37. data/test/test_tsubaiso_sdk.rb +0 -964
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2a8fcdac9b405b2c3bbb5725352eb209fd9e11b8932a4d7d817eaf949169a4cc
4
- data.tar.gz: f214e4a11b5bcd4ebf8b80e7771011eed14c15e4c43057b14f8f32eb9625a1d8
3
+ metadata.gz: 394ff46b866be9b88b3f3240d749d5981ae40c659f08c388adc763908f15b861
4
+ data.tar.gz: caa5951cfbc2dbcb16a72f240e5ebdfb3f70151eb7b763bb2c52a158fa72200d
5
5
  SHA512:
6
- metadata.gz: dcd2ee90dcc53b1e9fd810f2a219166b729bc3b7e512413e738b633daaa513167425474d0b8cabc9e47343022bc8e65b6111edaea0546c09497eb6a2ebc2b24b
7
- data.tar.gz: 2bee4d449797c0211a5f607e639815a3fb0134475bf50f1db0a042a546e3ae08e38bb4206f592125e85105ff8835b5ca1af8b5b741deb020dc53d6c6cf9fcd3c
6
+ metadata.gz: 7681bd9b474bf300e774b8d4594dd99580924af1563e8bafe2e605503023f8f66b87aaf976bf3539038240c74e67b817466e6eafb87127e603d2cb7a638d5a92
7
+ data.tar.gz: 8f8b1b847e9e876a5be43ea21826bd72144c26c4b2a45d67d732fd25a7d3d373129e20e1ea9120a762451f1fdf6bd53b40f765444420ae5f9b52462adb05ea88
data/Rakefile CHANGED
@@ -1,8 +1,9 @@
1
1
  require 'rake/testtask'
2
2
 
3
3
  Rake::TestTask.new do |t|
4
- t.libs << 'test'
4
+ t.libs << 'test'
5
+ t.test_files = FileList['test/tsubaiso_sdk/test_*']
5
6
  end
6
7
 
7
8
  desc 'Run tests'
8
- task :default => :test
9
+ task :default => :test
data/lib/tsubaiso_sdk.rb CHANGED
@@ -2,18 +2,181 @@ class TsubaisoSDK
2
2
  require 'net/http'
3
3
  require 'json'
4
4
 
5
+ module UrlBuilder
6
+ def url(root, resource, method, year = nil, month = nil)
7
+ if year && month && method == "list"
8
+ return root + "/" + resource + "/list/" + year.to_s + "/" + month.to_s
9
+ else
10
+ return root + "/" + resource + "/" + method
11
+ end
12
+ end
13
+ end
14
+
5
15
  def initialize(options = {})
6
16
  @base_url = options[:base_url] || 'https://tsubaiso.net'
7
- @access_token = options[:access_token]
17
+ @access_token = options[:access_token] || "Fake_Token"
18
+ end
19
+
20
+ def list_bank_account_masters
21
+ params = { 'format' => 'json' }
22
+ uri = URI.parse(@base_url + '/bank_account_masters/list')
23
+ api_request(uri, 'GET', params)
24
+ end
25
+
26
+
27
+ def update_bank_account_master(options)
28
+ params = {}
29
+ candidate_keys = [
30
+ :name,
31
+ :account_type,
32
+ :account_number,
33
+ :nominee,
34
+ :memo,
35
+ :start_ymd,
36
+ :finish_ymd,
37
+ :zengin_bank_code,
38
+ :zengin_branch_code,
39
+ :zengin_client_code_sogo,
40
+ :currency_code,
41
+ :currency_rate_master_code
42
+ ]
43
+
44
+ params = create_parameters(candidate_keys,options)
45
+ params['format'] = 'json'
46
+ uri = URI.parse(@base_url + '/bank_account_masters/update/' + options[:id].to_s)
47
+ api_request(uri, 'POST', params)
48
+ end
49
+
50
+ def list_bank_account_transactions(bank_account_id)
51
+ params = {
52
+ 'format' => 'json',
53
+ 'bank_account_id' => bank_account_id.to_i
54
+ }
55
+ uri = URI.parse(@base_url + "/bank_account_transactions/list")
56
+ api_request(uri, 'GET', params)
57
+ end
58
+
59
+ def show_bank_account_transaction(id)
60
+ params = {
61
+ 'format' => 'json',
62
+ }
63
+ uri = URI.parse(@base_url + "/bank_account_transactions/show/#{id}")
64
+ api_request(uri, 'GET', params)
65
+ end
66
+
67
+ def create_bank_account_transaction(options)
68
+ params = {
69
+ 'bank_account_id' => options[:bank_account_id],
70
+ 'journal_timestamp' => options[:journal_timestamp],
71
+ 'price_value' => options[:price_value],
72
+ 'price_value_fc' => options[:price_value_fc],
73
+ 'exchange_rate' => options[:exchange_rate],
74
+ 'reason_code' => options[:reason_code],
75
+ 'dc' => options[:dc],
76
+ 'brief' => options[:brief],
77
+ 'memo' => options[:memo],
78
+ 'tag_list' => options[:tag_list],
79
+ 'dept_code' => options[:dept_code],
80
+ 'format' => 'json'
81
+ }
82
+ uri = URI.parse(@base_url + '/bank_account_transactions/create')
83
+ api_request(uri, 'POST', params)
84
+ end
85
+
86
+ def destroy_bank_account_transaction(id)
87
+ params = {
88
+ 'format' => 'json'
89
+ }
90
+ uri = URI.parse(@base_url + "/bank_account_transactions/destroy/#{id}")
91
+ api_request(uri, 'POST', params)
92
+ end
93
+
94
+ def update_bank_account_transaction(options)
95
+ params = {}
96
+ candidate_keys = [
97
+ :bank_account_id,
98
+ :journal_timestamp,
99
+ :price_value,
100
+ :price_value_fc,
101
+ :exchange_rate,
102
+ :reason_code,
103
+ :dc,
104
+ :brief,
105
+ :memo,
106
+ :tag_list,
107
+ :dept_code,
108
+ ]
109
+
110
+ params = create_parameters(candidate_keys,options)
111
+ params['format'] = 'json'
112
+ uri = URI.parse(@base_url + "/bank_account_transactions/update/#{options[:id]}")
113
+ api_request(uri, "POST",params)
114
+ end
115
+
116
+ def list_bank_account(options)
117
+ params = {
118
+ 'format' => 'json',
119
+ }
120
+ uri = URI.parse(@base_url + "/bank_accounts/list/#{options[:year]}/#{options[:month]}")
121
+ api_request(uri,'GET',params)
122
+ end
123
+
124
+ def create_bank_account(options)
125
+ params = {
126
+ 'bank_account_master_id' => options[:bank_account_master_id],
127
+ 'start_timestamp' => options[:start_timestamp],
128
+ 'finish_timestamp' => options[:finish_timestamp],
129
+ 'format' => 'json'
130
+ }
131
+
132
+ uri = URI.parse(@base_url + '/bank_accounts/create')
133
+ api_request(uri, 'POST', params)
134
+ end
135
+
136
+ def show_bank_account_master(master_id)
137
+ params = { 'format' => 'json' }
138
+ uri = URI.parse(@base_url + '/bank_account_masters/show/' + master_id.to_s)
139
+ api_request(uri, 'GET', params)
140
+ end
141
+
142
+ def destroy_bank_account_master(destroy_id)
143
+ params = { 'format' => 'json' }
144
+ uri = URI.parse(@base_url + '/bank_account_masters/destroy/' + destroy_id.to_s)
145
+ api_request(uri, 'POST', params)
146
+ end
147
+
148
+ def create_bank_account_master(options)
149
+ params = {
150
+ 'format' => 'json',
151
+ 'name' => options[:name],
152
+ 'account_type' => options[:account_type],
153
+ 'account_number' => options[:account_number],
154
+ 'nominee' => options[:nominee],
155
+ 'memo' => options[:memo],
156
+ 'start_ymd' => options[:start_ymd],
157
+ 'finish_ymd' => options[:finish_ymd],
158
+ 'zengin_bank_code' => options[:zengin_bank_code],
159
+ 'zengin_branch_code' => options[:zengin_branch_code],
160
+ 'zengin_client_code_sogo' => options[:zengin_client_code_sogo],
161
+ 'currency_code' => options[:currency_code],
162
+ 'currency_rate_master_code' => options[:currency_rate_master_code]
163
+ }
164
+
165
+ uri = URI.parse(@base_url + '/bank_account_masters/create')
166
+ api_request(uri, 'POST', params)
167
+ end
168
+
169
+ def index_api_history
170
+ params = { 'format' => 'json' }
171
+ uri = URI.parse(@base_url + '/api_histories/index')
172
+ api_request(uri, 'GET', params)
8
173
  end
9
174
 
10
175
  def list_sales(year, month)
11
176
  params = {
12
- 'year' => year,
13
- 'month' => month,
14
177
  'format' => 'json'
15
178
  }
16
- uri = URI.parse(@base_url + '/ar/list/')
179
+ uri = URI.parse(@base_url + "/ar/list/#{year.to_i}/#{month.to_i}")
17
180
  api_request(uri, 'GET', params)
18
181
  end
19
182
 
@@ -25,17 +188,15 @@ class TsubaisoSDK
25
188
  'ar_segment' => options[:ar_segment],
26
189
  'format' => 'json'
27
190
  }
28
- uri = URI.parse(@base_url + '/ar_receipts/balance/')
191
+ uri = URI.parse(@base_url + '/ar/balance')
29
192
  api_request(uri, 'GET', params)
30
193
  end
31
194
 
32
195
  def list_purchases(year, month)
33
196
  params = {
34
- 'year' => year,
35
- 'month' => month,
36
197
  'format' => 'json'
37
198
  }
38
- uri = URI.parse(@base_url + '/ap_payments/list/')
199
+ uri = URI.parse(@base_url + "/ap_payments/list/#{year.to_i}/#{month.to_i}")
39
200
  api_request(uri, 'GET', params)
40
201
  end
41
202
 
@@ -47,29 +208,27 @@ class TsubaisoSDK
47
208
  'ap_segment' => options[:ap_segment],
48
209
  'format' => 'json'
49
210
  }
50
- uri = URI.parse(@base_url + '/ap_payments/balance/')
211
+ uri = URI.parse(@base_url + '/ap_payments/balance')
51
212
  api_request(uri, 'GET', params)
52
213
  end
53
214
 
54
215
  def list_customers
55
216
  params = { 'format' => 'json' }
56
- uri = URI.parse(@base_url + '/customer_masters/list/')
217
+ uri = URI.parse(@base_url + '/customer_masters/list')
57
218
  api_request(uri, 'GET', params)
58
219
  end
59
220
 
60
221
  def list_payrolls(year, month)
61
222
  params = {
62
- 'format' => 'json',
63
- 'year' => year,
64
- 'month' => month
223
+ 'format' => 'json'
65
224
  }
66
- uri = URI.parse(@base_url + '/payrolls/list/')
225
+ uri = URI.parse(@base_url + "/payrolls/list/#{year.to_s}/#{month.to_s}")
67
226
  api_request(uri, 'GET', params)
68
227
  end
69
228
 
70
229
  def list_staff
71
230
  params = { 'format' => 'json' }
72
- uri = URI.parse(@base_url + '/staffs/list/')
231
+ uri = URI.parse(@base_url + '/staffs/list')
73
232
  api_request(uri, 'GET', params)
74
233
  end
75
234
 
@@ -78,13 +237,13 @@ class TsubaisoSDK
78
237
  'format' => 'json',
79
238
  'staff_id' => staff_id
80
239
  }
81
- uri = URI.parse(@base_url + '/staff_data/list/')
240
+ uri = URI.parse(@base_url + '/staff_data/list')
82
241
  api_request(uri, 'GET', params)
83
242
  end
84
243
 
85
244
  def list_staff_datum_masters
86
245
  params = { 'format' => 'json' }
87
- uri = URI.parse(@base_url + '/staff_datum_masters/list/')
246
+ uri = URI.parse(@base_url + '/staff_datum_masters/list')
88
247
  api_request(uri, 'GET', params)
89
248
  end
90
249
 
@@ -94,7 +253,7 @@ class TsubaisoSDK
94
253
  'year' => year,
95
254
  'month' => month
96
255
  }
97
- uri = URI.parse(@base_url + '/reimbursements/list/')
256
+ uri = URI.parse(@base_url + '/reimbursements/list')
98
257
  api_request(uri, 'GET', params)
99
258
  end
100
259
 
@@ -103,54 +262,58 @@ class TsubaisoSDK
103
262
  'format' => 'json',
104
263
  'id' => reimbursement_id.to_i
105
264
  }
106
- uri = URI.parse(@base_url + '/reimbursement_transactions/list/')
265
+ uri = URI.parse(@base_url + '/reimbursement_transactions/list')
107
266
  api_request(uri, 'GET', params)
108
267
  end
109
268
 
110
269
  def list_reimbursement_reason_masters
111
270
  params = { 'format' => 'json' }
112
- uri = URI.parse(@base_url + '/reimbursement_reason_masters/list/')
271
+ uri = URI.parse(@base_url + '/reimbursement_reason_masters/list')
113
272
  api_request(uri, 'GET', params)
114
273
  end
115
274
 
116
- def list_manual_journals(year = nil, month = nil)
117
- params = {
118
- 'year' => year,
119
- 'month' => month,
120
- 'format' => 'json'
121
- }
122
- uri = URI.parse(@base_url + '/manual_journals/list/')
275
+ def list_manual_journals(year, month)
276
+ params = { 'format' => 'json' }
277
+ uri = URI.parse(@base_url + "/manual_journals/list/#{year.to_i}/#{month.to_i}")
123
278
  api_request(uri, 'GET', params)
124
279
  end
125
280
 
126
281
  def list_journals(options)
127
- params = {
128
- 'start_date' => options[:start_date],
129
- 'finish_date' => options[:finish_date],
130
- 'start_created_at' => options[:start_created_at],
131
- 'finish_created_at' => options[:finish_created_at],
132
- 'timestamp_order' => options[:timestamp_order],
133
- 'account_codes' => options[:account_codes],
134
- 'price' => options[:price],
135
- 'memo' => options[:memo],
136
- 'dept_code' => options[:dept_code],
137
- 'tag_list' => options[:tag_list],
138
- 'id' => options[:id],
139
- 'format' => 'json'
140
- }
141
- uri = URI.parse(@base_url + '/journals/list/')
282
+ params = {}
283
+ candidate_keys = [
284
+ :start_date,
285
+ :finish_date,
286
+ :start_created_at,
287
+ :finish_created_at,
288
+ :account_codes,
289
+ :price_min,
290
+ :price_max,
291
+ :memo,
292
+ :dept_code,
293
+ :id,
294
+ :tag_list,
295
+ ]
296
+ params = create_parameters(candidate_keys,options)
297
+ params['format'] = 'json'
298
+ uri = URI.parse(@base_url + '/journals/list')
142
299
  api_request(uri, 'GET', params)
143
300
  end
144
301
 
145
302
  def list_depts
146
303
  params = { 'format' => 'json' }
147
- uri = URI.parse(@base_url + '/depts/list/')
304
+ uri = URI.parse(@base_url + '/depts/list')
305
+ api_request(uri, 'GET', params)
306
+ end
307
+
308
+ def list_tax_masters
309
+ params = { 'format' => 'json' }
310
+ uri = URI.parse(@base_url + '/tax_masters/list')
148
311
  api_request(uri, 'GET', params)
149
312
  end
150
313
 
151
314
  def list_tags
152
315
  params = { 'format' => 'json' }
153
- uri = URI.parse(@base_url + '/tags/list/')
316
+ uri = URI.parse(@base_url + '/tags/list')
154
317
  api_request(uri, 'GET', params)
155
318
  end
156
319
 
@@ -160,7 +323,7 @@ class TsubaisoSDK
160
323
  'bonus_no' => bonus_no,
161
324
  'target_year' => target_year
162
325
  }
163
- uri = URI.parse(@base_url + '/bonuses/list/')
326
+ uri = URI.parse(@base_url + '/bonuses/list')
164
327
  api_request(uri, 'GET', params)
165
328
  end
166
329
 
@@ -172,14 +335,42 @@ class TsubaisoSDK
172
335
 
173
336
  def list_ar_reason_masters
174
337
  params = { 'format' => 'json' }
175
- uri = URI.parse(@base_url + '/ar_reason_masters/list/')
338
+ uri = URI.parse(@base_url + '/ar_reason_masters/list')
339
+ api_request(uri, 'GET', params)
340
+ end
341
+
342
+ def list_physical_inventory_masters
343
+ params = { 'format' => 'json' }
344
+ uri = URI.parse(@base_url + '/physical_inventory_masters/list')
345
+ api_request(uri, 'GET', params)
346
+ end
347
+
348
+ def list_bank_reason_masters
349
+ params = { 'format' => 'json' }
350
+ uri = URI.parse(@base_url + '/bank_reason_masters/list')
176
351
  api_request(uri, 'GET', params)
177
352
  end
178
353
 
179
354
  # Alpha version now.
180
355
  def list_fixed_assets
181
356
  params = { 'format' => 'json' }
182
- uri = URI.parse(@base_url + '/fixed_assets/list/')
357
+ uri = URI.parse(@base_url + '/fixed_assets/list')
358
+ api_request(uri, 'GET', params)
359
+ end
360
+
361
+ def list_petty_cash_reason_masters
362
+ params = { 'format' => 'json' }
363
+ uri = URI.parse(@base_url + '/petty_cash_reason_masters/list')
364
+ api_request(uri, 'GET', params)
365
+ end
366
+
367
+ def list_api_history(options)
368
+ params = {
369
+ 'format' => 'json',
370
+ 'month' => options[:month],
371
+ 'year' => options[:year]
372
+ }
373
+ uri = URI.parse(@base_url + '/api_histories/list')
183
374
  api_request(uri, 'GET', params)
184
375
  end
185
376
 
@@ -190,6 +381,12 @@ class TsubaisoSDK
190
381
  api_request(uri, 'GET', params)
191
382
  end
192
383
 
384
+ def show_tax_master(tax_master_id)
385
+ params = { 'format' => 'json' }
386
+ uri = URI.parse(@base_url + "/tax_masters/show/#{tax_master_id}")
387
+ api_request(uri, 'GET', params)
388
+ end
389
+
193
390
  def show_purchase(voucher)
194
391
  purchase_id = voucher.scan(/\d/).join('')
195
392
  params = { 'format' => 'json' }
@@ -204,6 +401,15 @@ class TsubaisoSDK
204
401
  api_request(uri, 'GET', params)
205
402
  end
206
403
 
404
+ def show_customer_by_code(code)
405
+ params = {
406
+ 'code' => code,
407
+ 'format' => 'json'
408
+ }
409
+ uri = URI.parse(@base_url + '/customer_masters/show')
410
+ api_request(uri, 'GET', params)
411
+ end
412
+
207
413
  def show_staff(staff_id)
208
414
  staff_id = staff_id.to_i
209
415
  params = { 'format' => 'json' }
@@ -219,12 +425,12 @@ class TsubaisoSDK
219
425
  'time' => options[:time],
220
426
  'format' => 'json'
221
427
  }
222
- id = options[:id]
428
+ # id = options[:id]
223
429
  else
224
430
  params = { 'format' => 'json' }
225
- id = options
431
+ id = "/" + options.to_s
226
432
  end
227
- uri = URI.parse(@base_url + "/staff_data/show/#{id}")
433
+ uri = URI.parse(@base_url + "/staff_data/show#{id}")
228
434
  api_request(uri, 'GET', params)
229
435
  end
230
436
 
@@ -234,12 +440,11 @@ class TsubaisoSDK
234
440
  'code' => options[:code],
235
441
  'format' => 'json'
236
442
  }
237
- id = options[:id]
238
443
  else
239
444
  params = { 'format' => 'json' }
240
- id = options
445
+ id = '/' + options.to_s
241
446
  end
242
- uri = URI.parse(@base_url + "/staff_datum_masters/show/#{id}")
447
+ uri = URI.parse(@base_url + "/staff_datum_masters/show#{id}")
243
448
  api_request(uri, 'GET', params)
244
449
  end
245
450
 
@@ -309,6 +514,35 @@ class TsubaisoSDK
309
514
  api_request(uri, 'GET', params)
310
515
  end
311
516
 
517
+ def show_physical_inventory_master(physical_inventory_master_id)
518
+ params = { 'format' => 'json' }
519
+ uri = URI.parse(@base_url + "/physical_inventory_masters/show/#{physical_inventory_master_id}")
520
+ api_request(uri, 'GET', params)
521
+ end
522
+
523
+ def show_bank_reason_master(bank_reason_master_id)
524
+ params = { 'format' => 'json' }
525
+ uri = URI.parse(@base_url + "/bank_reason_masters/show/#{bank_reason_master_id}")
526
+ api_request(uri, 'GET', params)
527
+ end
528
+
529
+ def show_petty_cash_reason_master(petty_cash_reason_master_id)
530
+ params = { 'format' => 'json' }
531
+ uri = URI.parse(@base_url + "/petty_cash_reason_masters/show/#{petty_cash_reason_master_id}")
532
+ api_request(uri, 'GET', params)
533
+ end
534
+
535
+ def show_corporate_master(corporate_master_id, options = {})
536
+ params = {
537
+ 'ccode' => options[:ccode],
538
+ 'format' => 'json'
539
+ }
540
+ corporate_master_id = '/' + corporate_master_id.to_s if corporate_master_id
541
+
542
+ uri = URI.parse(@base_url + "/corporate_masters/show#{corporate_master_id}")
543
+ api_request(uri, 'GET', params)
544
+ end
545
+
312
546
  def create_customer(options)
313
547
  available_keys = [
314
548
  'accountant_email',
@@ -354,18 +588,33 @@ class TsubaisoSDK
354
588
  'withholding_tax_base',
355
589
  'withholding_tax_segment',
356
590
  'zip',
591
+ 'pay_date_if_holiday',
592
+ 'receive_date_if_holiday',
357
593
  'data_partner'
358
594
  ]
359
595
  params = {}
360
- available_keys.each do |key|
361
- params[key.to_s] = options[key.to_sym]
362
- end
596
+ params = create_parameters(available_keys.map{|x| x.to_sym},options)
363
597
  params['format'] = 'json'
364
598
 
365
599
  uri = URI.parse(@base_url + '/customer_masters/create')
366
600
  api_request(uri, 'POST', params)
367
601
  end
368
602
 
603
+ def create_bank_reason_masters(options)
604
+ params = {
605
+ 'sort_number' => options[:sort_number],
606
+ 'reason_code' => options[:reason_code],
607
+ 'reason_name' => options[:reason_name],
608
+ 'dc' => options[:dc],
609
+ 'is_valid' => options[:is_valid],
610
+ 'memo' => options[:memo],
611
+ 'account_code' => options[:account_code],
612
+ 'format' => 'json'
613
+ }
614
+ uri = URI.parse(@base_url + '/bank_reason_masters/create')
615
+ api_request(uri, 'POST', params)
616
+ end
617
+
369
618
  def create_sale(options)
370
619
  params = {
371
620
  'price_including_tax' => options[:price_including_tax],
@@ -387,6 +636,30 @@ class TsubaisoSDK
387
636
  api_request(uri, 'POST', params)
388
637
  end
389
638
 
639
+ def find_or_create_sale(options)
640
+ params = {}
641
+ available_keys = [
642
+ 'price_including_tax',
643
+ 'realization_timestamp',
644
+ 'customer_master_code',
645
+ 'dept_code',
646
+ 'reason_master_code',
647
+ 'dc',
648
+ 'memo',
649
+ 'tax_code',
650
+ 'sales_tax',
651
+ 'scheduled_memo',
652
+ 'scheduled_receive_timestamp',
653
+ 'tag_list',
654
+ 'data_partner',
655
+ 'key'
656
+ ]
657
+ params = create_parameters(available_keys.map{|x| x.to_sym},options)
658
+ params['format'] = 'json'
659
+ uri = URI.parse(@base_url + '/ar/find_or_create')
660
+ api_request(uri, 'POST', params)
661
+ end
662
+
390
663
  def create_purchase(options)
391
664
  params = {
392
665
  'price_including_tax' => options[:price_including_tax],
@@ -406,6 +679,26 @@ class TsubaisoSDK
406
679
  api_request(uri, 'POST', params)
407
680
  end
408
681
 
682
+ def find_or_create_purchase(options)
683
+ params = {
684
+ 'price_including_tax' => options[:price_including_tax],
685
+ 'accrual_timestamp' => options[:accrual_timestamp],
686
+ 'customer_master_code' => options[:customer_master_code],
687
+ 'dept_code' => options[:dept_code],
688
+ 'reason_master_code' => options[:reason_master_code],
689
+ 'dc' => options[:dc],
690
+ 'memo' => options[:memo],
691
+ 'tax_code' => options[:tax_code],
692
+ 'port_type' => options[:port_type],
693
+ 'tag_list' => options[:tag_list],
694
+ 'data_partner' => options[:data_partner],
695
+ 'key' => options[:key],
696
+ 'format' => 'json'
697
+ }
698
+ uri = URI.parse(@base_url + '/ap_payments/find_or_create')
699
+ api_request(uri, 'POST', params)
700
+ end
701
+
409
702
  def create_staff_data(options)
410
703
  params = {
411
704
  'staff_id' => options[:staff_id],
@@ -447,7 +740,7 @@ class TsubaisoSDK
447
740
  'dept_code' => options[:dept_code],
448
741
  'memo' => options[:memo]
449
742
  }
450
- uri = URI.parse(@base_url + '/reimbursements/create/')
743
+ uri = URI.parse(@base_url + '/reimbursements/create')
451
744
  api_request(uri, 'POST', params)
452
745
  end
453
746
 
@@ -466,7 +759,7 @@ class TsubaisoSDK
466
759
  'tax_type' => options[:tax_type],
467
760
  'data_partner' => options[:data_partner]
468
761
  }
469
- uri = URI.parse(@base_url + '/reimbursement_transactions/create/')
762
+ uri = URI.parse(@base_url + '/reimbursement_transactions/create')
470
763
  api_request(uri, 'POST', params)
471
764
  end
472
765
 
@@ -482,7 +775,7 @@ class TsubaisoSDK
482
775
  'start_date' => options[:start_date],
483
776
  'finish_date' => options[:finish_date]
484
777
  }
485
- uri = URI.parse(@base_url + '/depts/create/')
778
+ uri = URI.parse(@base_url + '/depts/create')
486
779
  api_request(uri, 'POST', params)
487
780
  end
488
781
 
@@ -496,7 +789,7 @@ class TsubaisoSDK
496
789
  'start_ymd' => options[:start_ymd],
497
790
  'finish_ymd' => options[:finish_ymd]
498
791
  }
499
- uri = URI.parse(@base_url + '/tags/create/')
792
+ uri = URI.parse(@base_url + '/tags/create')
500
793
  api_request(uri, 'POST', params)
501
794
  end
502
795
 
@@ -516,12 +809,56 @@ class TsubaisoSDK
516
809
  'criteria' => options[:criteria],
517
810
  'distribution_conditions' => options[:distribution_conditions]
518
811
  }
519
- uri = URI.parse(@base_url + '/journal_distributions/create/')
812
+ uri = URI.parse(@base_url + '/journal_distributions/create')
813
+ api_request(uri, 'POST', params)
814
+ end
815
+
816
+ def create_petty_cash_reason_master(options)
817
+ params = {
818
+ 'format' => 'json',
819
+ 'reason_code' => options[:reason_code],
820
+ 'reason_name' => options[:reason_name],
821
+ 'dc' => options[:dc],
822
+ 'account_code' => options[:account_code],
823
+ 'is_valid' => options[:is_valid],
824
+ 'memo' => options[:memo],
825
+ 'port_type' => options[:port_type],
826
+ 'sort_number' => options[:sort_number]
827
+ }
828
+ uri = URI.parse(@base_url + '/petty_cash_reason_masters/create')
829
+ api_request(uri, 'POST', params)
830
+ end
831
+
832
+ def create_physical_inventory_masters(options)
833
+ params = {}
834
+ candidate_keys = [:name, :start_ymd, :finish_ymd, :memo, :tag_list, :dept_code]
835
+ params = create_parameters(candidate_keys,options)
836
+ params['format'] = 'json'
837
+
838
+ uri = URI.parse(@base_url + '/physical_inventory_masters/create')
520
839
  api_request(uri, 'POST', params)
521
840
  end
522
841
 
523
842
  def update_sale(options)
524
- params = options.merge({ 'format' => 'json' })
843
+ available_keys = [
844
+ 'id',
845
+ 'price_including_tax',
846
+ 'realization_timestamp',
847
+ 'customer_master_code',
848
+ 'dept_code',
849
+ 'reason_master_code',
850
+ 'dc',
851
+ 'memo',
852
+ 'tax_code',
853
+ 'sales_tax',
854
+ 'scheduled_memo',
855
+ 'scheduled_receive_timestamp',
856
+ 'tag_list',
857
+ 'data_partner'
858
+ ]
859
+ params = {}
860
+ params = create_parameters(available_keys.map{|x| x.to_sym},options)
861
+ params['format'] = 'json'
525
862
  uri = URI.parse(@base_url + "/ar/update/#{options[:id]}")
526
863
  api_request(uri, 'POST', params)
527
864
  end
@@ -578,18 +915,36 @@ class TsubaisoSDK
578
915
  'withholding_tax_base',
579
916
  'withholding_tax_segment',
580
917
  'zip',
918
+ 'pay_date_if_holiday',
919
+ 'receive_date_if_holiday',
581
920
  'data_partner'
582
921
  ]
583
922
  params = {}
584
- available_keys.each do |key|
585
- params[key.to_s] = options[key.to_sym]
586
- end
923
+ params = create_parameters(available_keys.map{|x| x.to_sym},options)
587
924
  params['format'] = 'json'
588
925
 
589
926
  uri = URI.parse(@base_url + "/customer_masters/update/#{options[:id]}")
590
927
  api_request(uri, 'POST', params)
591
928
  end
592
929
 
930
+ def update_bank_reason_masters(options)
931
+ params = {}
932
+ candidate_keys = [
933
+ :sort_number,
934
+ :reason_code,
935
+ :reason_name,
936
+ :dc,
937
+ :is_valid,
938
+ :memo,
939
+ :account_code
940
+ ]
941
+
942
+ params = create_parameters(candidate_keys,options)
943
+ params['format'] = 'json'
944
+ uri = URI.parse(@base_url + '/bank_reason_masters/update/' + options[:id].to_s)
945
+ api_request(uri, "POST",params)
946
+ end
947
+
593
948
  def update_staff_data(options)
594
949
  params = {
595
950
  'memo' => options[:memo],
@@ -604,7 +959,7 @@ class TsubaisoSDK
604
959
  params[:no_finish_timestamp] = options[:no_finish_timestamp]
605
960
  end
606
961
 
607
- uri = URI.parse(@base_url + "/staff_data/update/#{options[:id]}")
962
+ uri = URI.parse(@base_url + "/staff_data/update/#{options[:staff_id]}")
608
963
  api_request(uri, 'POST', params)
609
964
  end
610
965
 
@@ -621,66 +976,103 @@ class TsubaisoSDK
621
976
  end
622
977
 
623
978
  def update_reimbursement(reimbursement_id, options)
624
- params = {
625
- 'format' => 'json',
626
- 'applicant' => options[:applicant],
627
- 'application_term' => options[:application_term],
628
- 'staff_code' => options[:staff_code],
629
- 'dept_code' => options[:dept_code],
630
- 'memo' => options[:memo]
631
- }
979
+ params = {}
980
+ candidate_keys = [
981
+ :applicant,
982
+ :application_term,
983
+ :staff_code,
984
+ :dept_code,
985
+ :memo,
986
+ ]
987
+ params = create_parameters(candidate_keys,options)
988
+ params['format'] = 'json'
632
989
  uri = URI.parse(@base_url + "/reimbursements/update/#{reimbursement_id}")
633
990
  api_request(uri, 'POST', params)
634
991
  end
635
992
 
636
993
  def update_reimbursement_transaction(options)
637
- params = {
638
- 'format' => 'json',
639
- 'port_type' => options[:port_type],
640
- 'transaction_timestamp' => options[:transaction_timestamp],
641
- 'price_value' => options[:price_value],
642
- 'dc' => options[:dc],
643
- 'reason_code' => options[:reason_code],
644
- 'brief' => options[:brief],
645
- 'memo' => options[:memo],
646
- 'tag_list' => options[:tag_list],
647
- 'tax_type' => options[:tax_type],
648
- 'data_partner' => options[:data_partner]
649
- }
994
+ params = {}
995
+ candidate_keys = [
996
+ :port_type,
997
+ :transaction_timestamp,
998
+ :price_value,
999
+ :bc,
1000
+ :reason_code,
1001
+ :brief,
1002
+ :memo,
1003
+ :tag_list,
1004
+ :tax_type,
1005
+ :data_partner
1006
+ ]
1007
+ params = create_parameters(candidate_keys,options)
1008
+ params['format'] = 'json'
1009
+
650
1010
  uri = URI.parse(@base_url + "/reimbursement_transactions/update/#{options[:id]}")
651
1011
  api_request(uri, 'POST', params)
652
1012
  end
653
1013
 
654
1014
  def update_dept(dept_id, options)
655
- params = {
656
- 'format' => 'json',
657
- 'sort_no' => options[:sort_no],
658
- 'code' => options[:code],
659
- 'name' => options[:name],
660
- 'name_abbr' => options[:name_abbr],
661
- 'color' => options[:color],
662
- 'memo' => options[:memo],
663
- 'start_date' => options[:start_date],
664
- 'finish_date' => options[:finish_date]
665
- }
1015
+ params = {}
1016
+ candidate_keys = [
1017
+ :sort_no,
1018
+ :code,
1019
+ :name,
1020
+ :memo,
1021
+ :name_abbr,
1022
+ :color,
1023
+ :start_date,
1024
+ :finish_date
1025
+ ]
1026
+ params = create_parameters(candidate_keys,options)
1027
+ params['format'] = 'json'
666
1028
  uri = URI.parse(@base_url + "/depts/update/#{dept_id}")
667
1029
  api_request(uri, 'POST', params)
668
1030
  end
669
1031
 
670
1032
  def update_tag(tag_id, options)
671
- params = {
672
- 'format' => 'json',
673
- 'code' => options[:code],
674
- 'name' => options[:name],
675
- 'sort_no' => options[:sort_no],
676
- 'tag_group_code' => options[:tag_group_code],
677
- 'start_ymd' => options[:start_ymd],
678
- 'finish_ymd' => options[:finish_ymd]
679
- }
1033
+ params = {}
1034
+ candidate_keys = [
1035
+ :code,
1036
+ :name,
1037
+ :sort_no,
1038
+ :tagg_group_code,
1039
+ :start_ymd,
1040
+ :finish_ymd
1041
+ ]
1042
+ params = create_parameters(candidate_keys,options)
1043
+ params['format'] = 'json'
680
1044
  uri = URI.parse(@base_url + "/tags/update/#{tag_id}")
681
1045
  api_request(uri, 'POST', params)
682
1046
  end
683
1047
 
1048
+ def update_petty_cash_reason_master(petty_cash_reason_master_id, options)
1049
+ params = {}
1050
+ candidate_keys = [
1051
+ :reason_code,
1052
+ :reason_name,
1053
+ :dc,
1054
+ :account_code,
1055
+ :is_valid,
1056
+ :memo,
1057
+ :port_type,
1058
+ :sort_number
1059
+ ]
1060
+ params = create_parameters(candidate_keys,options)
1061
+ params['format'] = 'json'
1062
+ uri = URI.parse(@base_url + "/petty_cash_reason_masters/update/#{petty_cash_reason_master_id}")
1063
+ api_request(uri, 'POST', params)
1064
+ end
1065
+
1066
+ def update_physical_inventory_masters(options)
1067
+ params = {}
1068
+ candidate_keys = [:name, :start_ymd, :finish_ymd, :memo]
1069
+ params = create_parameters(candidate_keys,options)
1070
+ params['format'] = 'json'
1071
+
1072
+ uri = URI.parse(@base_url + "/physical_inventory_masters/update/#{options[:id]}")
1073
+ api_request(uri, 'POST', params)
1074
+ end
1075
+
684
1076
  def destroy_sale(voucher)
685
1077
  sale_id = voucher.scan(/\d/).join('')
686
1078
  params = { 'format' => 'json' }
@@ -688,6 +1080,12 @@ class TsubaisoSDK
688
1080
  api_request(uri, 'POST', params)
689
1081
  end
690
1082
 
1083
+ def destroy_bank_reason_masters(destroy_id)
1084
+ params = {'format' => 'json'}
1085
+ uri = URI.parse(@base_url + '/bank_reason_masters/destroy/' + destroy_id.to_s)
1086
+ api_request(uri,"POST",params)
1087
+ end
1088
+
691
1089
  def destroy_purchase(voucher)
692
1090
  purchase_id = voucher.scan(/\d/).join('')
693
1091
  params = { 'format' => 'json' }
@@ -750,8 +1148,43 @@ class TsubaisoSDK
750
1148
  api_request(uri, 'POST', params)
751
1149
  end
752
1150
 
1151
+ def scheduled_date(target_date, sight, closing_day, shift = 'before')
1152
+ params = { 'format' => 'json', target_date: target_date, sight: sight, closing_day: closing_day, shift: shift }
1153
+ uri = URI.parse(@base_url + '/scheduled_dates/calc')
1154
+ api_request(uri, 'GET', params)
1155
+ end
1156
+
1157
+ def destroy_petty_cash_reason_master(petty_cash_reason_master_id)
1158
+ params = { 'format' => 'json' }
1159
+ uri = URI.parse(@base_url + "/petty_cash_reason_masters/destroy/#{petty_cash_reason_master_id}")
1160
+ api_request(uri, 'POST', params)
1161
+ end
1162
+
1163
+ def destroy_physical_inventory_masters(physical_inventory_masters_id)
1164
+ params = { 'format' => 'json' }
1165
+ uri = URI.parse(@base_url + "/physical_inventory_masters/destroy/#{physical_inventory_masters_id}")
1166
+ api_request(uri, 'POST', params)
1167
+ end
1168
+
1169
+ def next_customer_code
1170
+ params = {
1171
+ 'format' => 'json'
1172
+ }
1173
+ uri = URI.parse(@base_url + '/customer_masters/next_code')
1174
+ api_request(uri, 'GET', params)
1175
+ end
1176
+
753
1177
  private
754
1178
 
1179
+
1180
+ def create_parameters(keys,options)
1181
+ # Add new keys and value if options has keys, even if value in options is nil.
1182
+ # This code avoid updateing attributes witch is not specified by the users.
1183
+ (keys & options.keys).inject({ 'format' => 'json' }) do |params, key|
1184
+ params.merge(key.to_s => options[key]) # Hash#slice can be replace this code if your ruby is =< 2.5.0
1185
+ end
1186
+ end
1187
+
755
1188
  def api_request(uri, http_verb, params)
756
1189
  http = Net::HTTP.new(uri.host, uri.port)
757
1190
  initheader = { 'Content-Type' => 'application/json' }
@@ -792,29 +1225,28 @@ class TsubaisoSDK
792
1225
 
793
1226
  def make_journal_dcs(journal_dcs)
794
1227
  return nil if journal_dcs.nil?
1228
+
795
1229
  journal_dcs.map { |journal_dc| make_journal_dc(journal_dc) }
796
1230
  end
797
1231
 
798
1232
  def make_journal_dc(journal_dc)
799
- { 'debit' => make_journal_dc_oneside(journal_dc[:debit]),
1233
+ {
1234
+ 'debit' => make_journal_dc_oneside(journal_dc[:debit]),
800
1235
  'credit' => make_journal_dc_oneside(journal_dc[:credit]),
801
1236
  'dept_code' => journal_dc[:dept_code],
802
- 'memo' => journal_dc[:memo] }
1237
+ 'memo' => journal_dc[:memo],
1238
+ 'tag_list' => journal_dc[:tag_list]
1239
+ }
803
1240
  end
804
1241
 
805
1242
  def make_journal_dc_oneside(side)
806
1243
  return nil if side.nil?
807
- { 'account_code' => side[:account_code].to_s,
1244
+
1245
+ {
1246
+ 'account_code' => side[:account_code].to_s,
808
1247
  'price_including_tax' => side[:price_including_tax],
809
1248
  'tax_type' => side[:tax_type],
810
- 'sales_tax' => side[:sales_tax] }
811
- end
812
-
813
- def next_customer_code
814
- params = {
815
- 'format' => 'json'
1249
+ 'sales_tax' => side[:sales_tax]
816
1250
  }
817
- uri = URI.parse(@base_url + '/customer_masters/next_code')
818
- api_request(uri, 'GET', params)
819
1251
  end
820
1252
  end