tsubaiso-sdk 1.2.6 → 1.2.7

Sign up to get free protection for your applications and to get access to all the features.
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