ZCRMSDK 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a110d15f98a5b0ab1693efd7ec1ca7c43349138bfa55ea31ee90a3e30a75fc8e
4
+ data.tar.gz: 13c5d273eefe79b51cdbaa0380bf2a7c85b8c8417096868feb711d063d0c8f87
5
+ SHA512:
6
+ metadata.gz: 404cc9260859ee1d299da90c97e579bf3371df4b543856ed08dfcc2310a87aba5937bbb2386cf2e115a5627744868b0d4c8e7ed7c299b4df3e5f1b0ce110626a
7
+ data.tar.gz: 6d8095886bc76ad2e343d9d018dbfae84a5bf1b7a5d2a5046e50c67b0efc19052fe0b5a0c0da43cf3f90c36ac1911acce339d4b70a6c2af4d63f236cfe0a82f3
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ZCRMSDK/oauth_utility'
4
+ require 'ZCRMSDK/operations'
5
+ require 'ZCRMSDK/handler'
6
+ require 'ZCRMSDK/oauth_client'
7
+ require 'ZCRMSDK/operations'
8
+ require 'ZCRMSDK/org'
9
+ require 'ZCRMSDK/persistence'
10
+ require 'ZCRMSDK/request'
11
+ require 'ZCRMSDK/response'
12
+ require 'ZCRMSDK/utility'
13
+ require 'ZCRMSDK/restclient'
14
+ require 'ZCRMSDK/version'
@@ -0,0 +1,2944 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'utility'
4
+ require_relative 'operations'
5
+ require_relative 'request'
6
+ require_relative 'org'
7
+ require 'json'
8
+ module ZCRMSDK
9
+ module Handler
10
+ # THIS CLASS SERVES AS A PARENT CLASS TO OTHER HANDLER CLASSES
11
+ class APIHandler
12
+ attr_accessor :request_url_path, :request_body, :request_headers, :request_params, :request_method, :request_api_key
13
+ def initialize
14
+ @request_url_path = nil
15
+ @request_body = nil
16
+ @request_headers = nil
17
+ @request_params = nil
18
+ @request_method = nil
19
+ @request_api_key = nil
20
+ end
21
+
22
+ def self.get_instance
23
+ APIHandler.new
24
+ end
25
+
26
+ def add_param(key, value)
27
+ @request_params = {} if @request_params.nil?
28
+ @request_params.store(key, value)
29
+ end
30
+
31
+ def add_header(key, value)
32
+ @request_headers = {} if @request_headers.nil?
33
+ @request_headers.store(key, value)
34
+ end
35
+ end
36
+ # THIS CLASS IS USED TO HANDLE SINGLE ENTITY RELATED FUNCTIONALITY
37
+ class EntityAPIHandler < APIHandler
38
+ def initialize(zcrm_record)
39
+ @zcrmrecord = zcrm_record
40
+ end
41
+
42
+ def self.get_instance(zcrm_record)
43
+ EntityAPIHandler.new(zcrm_record)
44
+ end
45
+
46
+ def get_record
47
+ if @zcrmrecord.entity_id.nil?
48
+ raise Utility::ZCRMException.get_instance('get_record', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'id should be set for the record', 'ID IS NOT PROVIDED')
49
+ end
50
+
51
+ handler_ins = APIHandler.get_instance
52
+ handler_ins.request_url_path = ''
53
+ handler_ins.request_url_path = @zcrmrecord.module_api_name + '/' + @zcrmrecord.entity_id.to_s
54
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_GET
55
+ handler_ins.request_api_key = Utility::APIConstants::DATA
56
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
57
+ obj = EntityAPIHandlerHelper.get_instance
58
+ obj.set_record_properties(@zcrmrecord, api_response.response_json.dig(Utility::APIConstants::DATA, 0))
59
+ api_response.data = @zcrmrecord
60
+ api_response
61
+ end
62
+
63
+ def create_record
64
+ unless @zcrmrecord.entity_id.nil?
65
+ raise Utility::ZCRMException.get_instance('create_record', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'id should not be set for the record', 'ID PROVIDED')
66
+ end
67
+
68
+ handler_ins = APIHandler.get_instance
69
+ handler_ins.request_url_path = ''
70
+ handler_ins.request_url_path = @zcrmrecord.module_api_name
71
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_POST
72
+ handler_ins.request_api_key = Utility::APIConstants::DATA
73
+ helper_obj = EntityAPIHandlerHelper.get_instance
74
+ input_json = helper_obj.get_zcrmrecord_as_json(@zcrmrecord)
75
+ handler_ins.request_body = Utility::CommonUtil.create_api_supported_input_json(input_json, Utility::APIConstants::DATA)
76
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
77
+ response_details = api_response.response_json.dig(Utility::APIConstants::DATA, 0, 'details')
78
+ @zcrmrecord.entity_id = response_details['id']
79
+ @zcrmrecord.created_time = response_details['Created_Time']
80
+ created_by = response_details['Created_By']
81
+ @zcrmrecord.created_by = Operations::ZCRMUser.get_instance(created_by['id'], created_by['name'])
82
+ api_response.data = @zcrmrecord
83
+ api_response
84
+ end
85
+
86
+ def update_record
87
+ if @zcrmrecord.entity_id.nil?
88
+ raise Utility::ZCRMException.get_instance('update_record', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'id should be set for the record', 'ID IS NOT PROVIDED')
89
+ end
90
+
91
+ handler_ins = APIHandler.get_instance
92
+ handler_ins.request_url_path = ''
93
+ handler_ins.request_url_path = @zcrmrecord.module_api_name + '/' + @zcrmrecord.entity_id.to_s
94
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_PUT
95
+ handler_ins.request_api_key = Utility::APIConstants::DATA
96
+ helper_obj = EntityAPIHandlerHelper.get_instance
97
+ input_json = helper_obj.get_zcrmrecord_as_json(@zcrmrecord)
98
+ handler_ins.request_body = Utility::CommonUtil.create_api_supported_input_json(input_json, Utility::APIConstants::DATA)
99
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
100
+ response_details = api_response.response_json.dig(Utility::APIConstants::DATA, 0, 'details')
101
+ @zcrmrecord.entity_id = response_details['id']
102
+ @zcrmrecord.created_time = response_details['Created_Time']
103
+ @zcrmrecord.modified_time = response_details['Modified_Time']
104
+ created_by = response_details['Created_By']
105
+ @zcrmrecord.created_by = Operations::ZCRMUser.get_instance(created_by['id'], created_by['name'])
106
+ modified_by = response_details['Modified_By']
107
+ @zcrmrecord.modified_by = Operations::ZCRMUser.get_instance(modified_by['id'], modified_by['name'])
108
+ api_response.data = @zcrmrecord
109
+ api_response
110
+ end
111
+
112
+ def delete_record
113
+ if @zcrmrecord.entity_id.nil?
114
+ raise Utility::ZCRMException.get_instance('delete_record', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'id should be set for the record', 'ID IS NOT PROVIDED')
115
+ end
116
+
117
+ handler_ins = APIHandler.get_instance
118
+ handler_ins.request_url_path = ''
119
+ handler_ins.request_url_path = @zcrmrecord.module_api_name + '/' + @zcrmrecord.entity_id.to_s
120
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_DELETE
121
+ handler_ins.request_api_key = Utility::APIConstants::DATA
122
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
123
+ api_response
124
+ end
125
+
126
+ def convert_record(potential_record, details)
127
+ if @zcrmrecord.entity_id.nil?
128
+ raise Utility::ZCRMException.get_instance('convert_record', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'id should be set for the record', 'ID IS NOT PROVIDED')
129
+ end
130
+
131
+ handler_ins = APIHandler.get_instance
132
+ handler_ins.request_url_path = ''
133
+ handler_ins.request_url_path = @zcrmrecord.module_api_name + '/' + @zcrmrecord.entity_id.to_s + '/actions/convert'
134
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_POST
135
+ handler_ins.request_api_key = Utility::APIConstants::DATA
136
+ input_json = {}
137
+ unless details.nil?
138
+ details.each do |key, value|
139
+ input_json[key] = value
140
+ end
141
+ end
142
+ unless potential_record.nil?
143
+ entity_helper = EntityAPIHandlerHelper.get_instance
144
+ input_json['Deals'] = entity_helper.get_zcrmrecord_as_json(potential_record)
145
+ end
146
+ unless details.nil? && potential_record.nil?
147
+ input_json_arr = []
148
+ input_json_arr.push(input_json)
149
+ req_body_json = {}
150
+ req_body_json.store(Utility::APIConstants::DATA, input_json_arr)
151
+ handler_ins.request_body = req_body_json
152
+ end
153
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
154
+ converted_dict = {}
155
+ converted_ids_json = api_response.response_json.dig(Utility::APIConstants::DATA, 0)
156
+ if converted_ids_json.key?(Utility::APIConstants::CONTACTS) && !converted_ids_json.dig(Utility::APIConstants::CONTACTS).nil?
157
+ converted_dict.store(Utility::APIConstants::CONTACTS, converted_ids_json.dig(Utility::APIConstants::CONTACTS))
158
+ end
159
+ if converted_ids_json.key?(Utility::APIConstants::ACCOUNTS) && !converted_ids_json.dig(Utility::APIConstants::ACCOUNTS).nil?
160
+ converted_dict.store(Utility::APIConstants::ACCOUNTS, converted_ids_json.dig(Utility::APIConstants::ACCOUNTS))
161
+ end
162
+ if converted_ids_json.key?(Utility::APIConstants::DEALS) && !converted_ids_json.dig(Utility::APIConstants::DEALS).nil?
163
+ converted_dict.store(Utility::APIConstants::DEALS, converted_ids_json.dig(Utility::APIConstants::DEALS))
164
+ end
165
+ converted_dict
166
+ end
167
+
168
+ def upload_photo(file_path)
169
+ if file_path.nil?
170
+ raise Utility::ZCRMException.get_instance('upload_photo', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'file path must be given', 'FILEPATH NOT PROVIDED')
171
+ end
172
+ if @zcrmrecord.entity_id.nil?
173
+ raise Utility::ZCRMException.get_instance('upload_photo', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'id should be set for the record for uploading', 'ID IS NOT PROVIDED')
174
+ end
175
+
176
+ handler_ins = APIHandler.get_instance
177
+ handler_ins.request_url_path = ''
178
+ handler_ins.request_url_path = @zcrmrecord.module_api_name + '/' + @zcrmrecord.entity_id.to_s + '/photo'
179
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_POST
180
+ handler_ins.request_api_key = Utility::APIConstants::DATA
181
+ api_response = Request::APIRequest.get_instance(handler_ins).upload_file(file_path)
182
+ api_response
183
+ end
184
+
185
+ def download_photo
186
+ if @zcrmrecord.entity_id.nil?
187
+ raise Utility::ZCRMException.get_instance('download_photo', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'id should be set for the record for uploading', 'ID IS NOT PROVIDED')
188
+ end
189
+
190
+ handler_ins = APIHandler.get_instance
191
+ handler_ins.request_url_path = ''
192
+ handler_ins.request_url_path = @zcrmrecord.module_api_name + '/' + @zcrmrecord.entity_id.to_s + '/photo'
193
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_GET
194
+ handler_ins.request_api_key = Utility::APIConstants::DATA
195
+ Request::APIRequest.get_instance(handler_ins).download_file
196
+ end
197
+
198
+ def delete_photo
199
+ if @zcrmrecord.entity_id.nil?
200
+ raise Utility::ZCRMException.get_instance('delete_photo', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'id should be set for the record for uploading', 'ID IS NOT PROVIDED')
201
+ end
202
+
203
+ handler_ins = APIHandler.get_instance
204
+ handler_ins.request_url_path = ''
205
+ handler_ins.request_url_path = @zcrmrecord.module_api_name + '/' + @zcrmrecord.entity_id.to_s + '/photo'
206
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_DELETE
207
+ handler_ins.request_api_key = Utility::APIConstants::DATA
208
+ Request::APIRequest.get_instance(handler_ins).get_api_response
209
+ end
210
+ end
211
+ # THIS CLASS IS USED TO HANDLE MASS ENTITY RELATED FUNCTIONALITY
212
+ class MassEntityAPIHandler < APIHandler
213
+ def initialize(module_ins)
214
+ @module_instance = module_ins
215
+ end
216
+
217
+ def self.get_instance(module_ins)
218
+ MassEntityAPIHandler.new(module_ins)
219
+ end
220
+
221
+ def get_records(cvid, sort_by, sort_order, page, per_page, headers)
222
+ handler_ins = APIHandler.get_instance
223
+ handler_ins.request_url_path = ''
224
+ handler_ins.request_url_path += @module_instance.api_name
225
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_GET
226
+ handler_ins.add_param('cvid', cvid) unless cvid.nil?
227
+ handler_ins.add_param('sort_by', sort_by) unless sort_by.nil?
228
+ handler_ins.add_param('sort_order', sort_order) unless sort_order.nil?
229
+ unless headers.nil?
230
+ headers.each do |key, value|
231
+ handler_ins.add_header(key, value)
232
+ end
233
+ end
234
+ handler_ins.add_param('page', page)
235
+ handler_ins.add_param('per_page', per_page)
236
+ handler_ins.request_api_key = Utility::APIConstants::DATA
237
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
238
+ data_arr = bulk_api_response.response_json[Utility::APIConstants::DATA]
239
+ entity_helper = EntityAPIHandlerHelper.get_instance
240
+ record_ins_list = []
241
+ unless data_arr.nil?
242
+ data_arr.each do |record_data|
243
+ zcrm_record = Operations::ZCRMRecord.get_instance(@module_instance.api_name, record_data['id'])
244
+ entity_helper.set_record_properties(zcrm_record, record_data)
245
+ record_ins_list.push(zcrm_record)
246
+ end
247
+ end
248
+ bulk_api_response.data = record_ins_list
249
+ bulk_api_response
250
+ end
251
+
252
+ def create_records(record_ins_array, lar_id)
253
+ if record_ins_array.length > 100
254
+ raise Utility::ZCRMException.get_instance('create_records', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'records count must be less than or equals to 100', 'MORE RECORDS PROVIDED')
255
+ end
256
+
257
+ if record_ins_array.length < 1
258
+ raise Utility::ZCRMException.get_instance('create_records', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'records count must be at least 1', 'NO RECORDS PROVIDED')
259
+ end
260
+
261
+ handler_ins = APIHandler.get_instance
262
+ handler_ins.request_url_path = ''
263
+ handler_ins.request_url_path += @module_instance.api_name
264
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_POST
265
+ handler_ins.request_api_key = Utility::APIConstants::DATA
266
+ helper_obj = EntityAPIHandlerHelper.get_instance
267
+ data_array = []
268
+ record_ins_array.each do |zcrm_record|
269
+ if zcrm_record.entity_id.nil?
270
+ data_array.push(helper_obj.get_zcrmrecord_as_json(zcrm_record))
271
+ else
272
+ raise Utility::ZCRMException.get_instance('Records_Create', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'record id must be nil', 'ID IS PROVIDED')
273
+ end
274
+ end
275
+ request_json = {}
276
+ request_json[Utility::APIConstants::DATA] = data_array
277
+ request_json['lar_id'] = lar_id unless lar_id.nil?
278
+ handler_ins.request_body = request_json
279
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
280
+ created_records = []
281
+ entity_responses = bulk_api_response.bulk_entity_response
282
+ length = entity_responses.length
283
+ length -= 1
284
+ (0..length).each do |i|
285
+ entity_response_ins = entity_responses[i]
286
+ next unless entity_response_ins.status == Utility::APIConstants::STATUS_SUCCESS
287
+
288
+ record_create_details = entity_response_ins.details
289
+ new_record = record_ins_array[i]
290
+ entity_helper = EntityAPIHandlerHelper.get_instance
291
+ entity_helper.set_record_properties(new_record, record_create_details)
292
+ created_records.push(new_record)
293
+ entity_response_ins.data = new_record
294
+ end
295
+ bulk_api_response.data = created_records
296
+ bulk_api_response
297
+ end
298
+
299
+ def upsert_records(record_ins_array, duplicate_check_fields, lar_id)
300
+ if record_ins_array.length > 100
301
+ raise Utility::ZCRMException.get_instance('upsert_records', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'records count must be less than or equals to 100', 'MORE RECORDS PROVIDED')
302
+ end
303
+
304
+ if record_ins_array.length < 1
305
+ raise Utility::ZCRMException.get_instance('upsert_records', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'records count must be at least 1', 'NO RECORDS PROVIDED')
306
+ end
307
+
308
+ handler_ins = APIHandler.get_instance
309
+ handler_ins.request_url_path = ''
310
+ handler_ins.request_url_path = @module_instance.api_name + '/upsert'
311
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_POST
312
+ handler_ins.request_api_key = Utility::APIConstants::DATA
313
+ helper_obj = EntityAPIHandlerHelper.get_instance
314
+ data_array = []
315
+ record_ins_array.each do |zcrm_record|
316
+ input_json = helper_obj.get_zcrmrecord_as_json(zcrm_record)
317
+ unless zcrm_record.entity_id.nil?
318
+ input_json['id'] = zcrm_record.entity_id.to_s
319
+ end
320
+ data_array.push(input_json)
321
+ end
322
+ request_json['lar_id'] = lar_id unless lar_id.nil?
323
+ unless duplicate_check_fields.nil?
324
+ ids_as_string = ''
325
+ duplicate_check_fields.each do |duplicate_check_field|
326
+ ids_as_string += duplicate_check_field.to_s + ','
327
+ end
328
+ handler_ins.add_param('duplicate_check_fields', ids_as_string)
329
+ end
330
+
331
+ request_json = {}
332
+ request_json[Utility::APIConstants::DATA] = data_array
333
+ handler_ins.request_body = request_json
334
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
335
+ upsert_records = []
336
+ entity_responses = bulk_api_response.bulk_entity_response
337
+ length = entity_responses.length
338
+ length -= 1
339
+ (0..length).each do |i|
340
+ entity_response_ins = entity_responses[i]
341
+ next unless entity_response_ins.status == Utility::APIConstants::STATUS_SUCCESS
342
+
343
+ record_upsert_details = entity_response_ins.details
344
+ new_record = record_ins_array[i]
345
+ entity_helper = EntityAPIHandlerHelper.get_instance
346
+ entity_helper.set_record_properties(new_record, record_upsert_details)
347
+ upsert_records.push(new_record)
348
+ entity_response_ins.data = new_record
349
+ end
350
+ bulk_api_response.data = upsert_records
351
+ bulk_api_response
352
+ end
353
+
354
+ def update_records(record_ins_array)
355
+ if record_ins_array.length > 100
356
+ raise Utility::ZCRMException.get_instance('update_records', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'records count must be less than or equals to 100', 'MORE RECORDS PROVIDED')
357
+ end
358
+
359
+ if record_ins_array.length < 1
360
+ raise Utility::ZCRMException.get_instance('update_records', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'records count must be at least 1', 'NO RECORDS PROVIDED')
361
+ end
362
+
363
+ handler_ins = APIHandler.get_instance
364
+ handler_ins.request_url_path = ''
365
+ handler_ins.request_url_path += @module_instance.api_name
366
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_PUT
367
+ handler_ins.request_api_key = Utility::APIConstants::DATA
368
+ helper_obj = EntityAPIHandlerHelper.get_instance
369
+ data_array = []
370
+ record_ins_array.each do |zcrm_record|
371
+ input_json = helper_obj.get_zcrmrecord_as_json(zcrm_record)
372
+ if !zcrm_record.entity_id.nil?
373
+ input_json['id'] = zcrm_record.entity_id.to_s
374
+ else
375
+ raise Utility::ZCRMException.get_instance('Records_Update', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'record id must not be nil', 'RECORD ID NOT PROVIDED')
376
+ end
377
+ data_array.push(input_json)
378
+ end
379
+ request_json = {}
380
+ request_json[Utility::APIConstants::DATA] = data_array
381
+ handler_ins.request_body = request_json
382
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
383
+ updated_records = []
384
+ entity_responses = bulk_api_response.bulk_entity_response
385
+ length = entity_responses.length
386
+ length -= 1
387
+ (0..length).each do |i|
388
+ entity_response_ins = entity_responses[i]
389
+ next unless entity_response_ins.status == Utility::APIConstants::STATUS_SUCCESS
390
+
391
+ record_update_details = entity_response_ins.details
392
+ new_record = record_ins_array[i]
393
+ entity_helper = EntityAPIHandlerHelper.get_instance
394
+ entity_helper.set_record_properties(new_record, record_update_details)
395
+ updated_records.push(new_record)
396
+ entity_response_ins.data = new_record
397
+ end
398
+ bulk_api_response.data = updated_records
399
+ bulk_api_response
400
+ end
401
+
402
+ def mass_update_records(entityid_list, field_api_name, value)
403
+ if entityid_list.length > 100
404
+ raise Utility::ZCRMException.get_instance('mass_update_records', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'records count must be less than or equals to 100', 'MORE RECORDS PROVIDED')
405
+ end
406
+
407
+ if entityid_list.length < 1
408
+ raise Utility::ZCRMException.get_instance('mass_update_records', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'records count must be at least 1', 'NO RECORDS PROVIDED')
409
+ end
410
+
411
+ if field_api_name.nil?
412
+ raise Utility::ZCRMException.get_instance('mass_update_records', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'field api name must be provided', 'NO FIELD APINAME PROVIDED')
413
+ end
414
+
415
+ if value.nil?
416
+ raise Utility::ZCRMException.get_instance('mass_update_records', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'value must be provided', 'NO VALUE PROVIDED')
417
+ end
418
+
419
+ handler_ins = APIHandler.get_instance
420
+ handler_ins.request_url_path = ''
421
+ handler_ins.request_url_path += @module_instance.api_name
422
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_PUT
423
+ handler_ins.request_api_key = Utility::APIConstants::DATA
424
+ massentity_helper = MassEntityAPIHandlerHelper.get_instance
425
+ handler_ins.request_body = massentity_helper.construct_json_for_massupdate(entityid_list, field_api_name, value)
426
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
427
+ updated_records = []
428
+ entity_responses = bulk_api_response.bulk_entity_response
429
+ length = entity_responses.length - 1
430
+ (0..length).each do |i|
431
+ entity_response_ins = entity_responses[i]
432
+ next unless entity_response_ins.status == Utility::APIConstants::STATUS_SUCCESS
433
+
434
+ record_update_details = entity_response_ins.details
435
+ new_record = Operations::ZCRMRecord.get_instance(@module_instance.api_name, record_update_details['id'])
436
+ updated_records.push(new_record)
437
+ entity_response_ins.data = new_record
438
+ end
439
+ bulk_api_response.data = updated_records
440
+ bulk_api_response
441
+ end
442
+
443
+ def delete_records(entityid_list)
444
+ if entityid_list.length > 100
445
+ raise Utility::ZCRMException.get_instance('delete_records', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'records count must be less than or equals to 100', 'MORE RECORDS PROVIDED')
446
+ end
447
+
448
+ if entityid_list.length < 1
449
+ raise Utility::ZCRMException.get_instance('delete_records', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'records count must be at least 1', 'NO RECORDS PROVIDED')
450
+ end
451
+
452
+ handler_ins = APIHandler.get_instance
453
+ handler_ins.request_url_path = ''
454
+ handler_ins.request_url_path += @module_instance.api_name
455
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_DELETE
456
+ handler_ins.request_api_key = Utility::APIConstants::DATA
457
+ ids_as_string = ''
458
+ entityid_list.each do |entity_id|
459
+ ids_as_string += entity_id.to_s + ','
460
+ end
461
+ handler_ins.add_param('ids', ids_as_string)
462
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
463
+ entity_responses = bulk_api_response.bulk_entity_response
464
+ length = entity_responses.length - 1
465
+ (0..length).each do |i|
466
+ entity_response_ins = entity_responses[i]
467
+ record_delete_details = entity_response_ins.details
468
+ entity_response_ins.data = Operations::ZCRMRecord.get_instance(@module_instance.api_name, record_delete_details['id'])
469
+ end
470
+ bulk_api_response
471
+ end
472
+
473
+ def search_records(search_word, page, per_page, type)
474
+ if search_word.nil?
475
+ raise Utility::ZCRMException.get_instance('search_records', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'search word must be given', 'SEARCH WORD NOT PROVIDED')
476
+ end
477
+
478
+ handler_ins = APIHandler.get_instance
479
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_GET
480
+ handler_ins.request_url_path = @module_instance.api_name + '/search'
481
+ case type
482
+ when 'word'
483
+ handler_ins.add_param('word', search_word)
484
+ when 'phone'
485
+ handler_ins.add_param('phone', search_word)
486
+ when 'email'
487
+ handler_ins.add_param('email', search_word)
488
+ when 'criteria'
489
+ handler_ins.add_param('criteria', search_word)
490
+ end
491
+ handler_ins.add_param('page', page)
492
+ handler_ins.add_param('per_page', per_page)
493
+ handler_ins.request_api_key = Utility::APIConstants::DATA
494
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
495
+ data_arr = bulk_api_response.response_json[Utility::APIConstants::DATA]
496
+ entity_helper = EntityAPIHandlerHelper.get_instance
497
+ record_ins_list = []
498
+ data_arr.each do |record_data|
499
+ zcrm_record = Operations::ZCRMRecord.get_instance(@module_instance.api_name, record_data['id'])
500
+ entity_helper.set_record_properties(zcrm_record, record_data)
501
+ record_ins_list.push(zcrm_record)
502
+ end
503
+ bulk_api_response.data = record_ins_list
504
+ bulk_api_response
505
+ end
506
+
507
+ def get_deleted_records(trashed_type, page, per_page)
508
+ handler_ins = APIHandler.get_instance
509
+ handler_ins.request_url_path = ''
510
+ handler_ins.request_url_path = @module_instance.api_name + '/deleted'
511
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_GET
512
+ handler_ins.request_api_key = Utility::APIConstants::DATA
513
+ handler_ins.add_param('page', page)
514
+ handler_ins.add_param('per_page', per_page)
515
+ handler_ins.add_param('type', trashed_type) unless trashed_type.nil?
516
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
517
+ data_arr = bulk_api_response.response_json[Utility::APIConstants::DATA]
518
+ record_ins_list = []
519
+ massentity_helper = MassEntityAPIHandlerHelper.get_instance
520
+ data_arr.each do |record_data|
521
+ trash_record = Operations::ZCRMTrashRecord.get_instance(@module_instance.api_name, record_data['type'], record_data['id'])
522
+ massentity_helper.set_trash_record_properties(trash_record, record_data)
523
+ record_ins_list.push(trash_record)
524
+ end
525
+ bulk_api_response.data = record_ins_list
526
+ bulk_api_response
527
+ end
528
+ end
529
+ # THIS CLASS IS USED TO HANDLE MODULE RELATED FUNCTIONALITY
530
+ class ModuleAPIHandler < APIHandler
531
+ def initialize(module_instance)
532
+ @module_instance = module_instance
533
+ end
534
+
535
+ def self.get_instance(module_ins)
536
+ ModuleAPIHandler.new(module_ins)
537
+ end
538
+
539
+ def get_field(field_id)
540
+ if field_id.nil?
541
+ raise Utility::ZCRMException.get_instance('get_field', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'field id must be given', 'FIELD ID IS NOT PROVIDED')
542
+ end
543
+
544
+ handler_ins = APIHandler.get_instance
545
+ handler_ins.request_url_path = 'settings/fields/' + field_id.to_s
546
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_GET
547
+ handler_ins.request_api_key = Utility::APIConstants::FIELDS
548
+ handler_ins.add_param('module', @module_instance.api_name)
549
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
550
+ module_api_helper = ModuleAPIHandlerHelper.get_instance
551
+ api_response.data = module_api_helper.get_zcrmfield(api_response.response_json[Utility::APIConstants::FIELDS][0])
552
+ api_response
553
+ end
554
+
555
+ def get_all_fields
556
+ handler_ins = APIHandler.get_instance
557
+ handler_ins.request_url_path = 'settings/fields'
558
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_GET
559
+ handler_ins.request_api_key = Utility::APIConstants::FIELDS
560
+ handler_ins.add_param('module', @module_instance.api_name)
561
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
562
+ fields = bulk_api_response.response_json[Utility::APIConstants::FIELDS]
563
+ field_instance_arr = []
564
+ module_api_helper = ModuleAPIHandlerHelper.get_instance
565
+ fields.each do |field|
566
+ field_instance_arr.push(module_api_helper.get_zcrmfield(field))
567
+ end
568
+ bulk_api_response.data = field_instance_arr
569
+ bulk_api_response
570
+ end
571
+
572
+ def get_all_layouts
573
+ handler_ins = APIHandler.get_instance
574
+ handler_ins.request_url_path = 'settings/layouts'
575
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_GET
576
+ handler_ins.request_api_key = Utility::APIConstants::LAYOUTS
577
+ handler_ins.add_param('module', @module_instance.api_name)
578
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
579
+ layouts = bulk_api_response.response_json[Utility::APIConstants::LAYOUTS]
580
+ layout_instance_arr = []
581
+ module_api_helper = ModuleAPIHandlerHelper.get_instance
582
+ layouts.each do |layout|
583
+ layout_instance_arr.push(module_api_helper.get_zcrmlayout(layout))
584
+ end
585
+ bulk_api_response.data = layout_instance_arr
586
+ bulk_api_response
587
+ end
588
+
589
+ def get_layout(layout_id)
590
+ if layout_id.nil?
591
+ raise Utility::ZCRMException.get_instance('get_layout', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'layout id must be given', 'LAYOUT ID IS NOT PROVIDED')
592
+ end
593
+
594
+ handler_ins = APIHandler.get_instance
595
+ handler_ins.request_url_path = 'settings/layouts/' + layout_id.to_s
596
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_GET
597
+ handler_ins.request_api_key = Utility::APIConstants::LAYOUTS
598
+ handler_ins.add_param('module', @module_instance.api_name)
599
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
600
+ module_api_helper = ModuleAPIHandlerHelper.get_instance
601
+ api_response.data = module_api_helper.get_zcrmlayout(api_response.response_json[Utility::APIConstants::LAYOUTS][0])
602
+ api_response
603
+ end
604
+
605
+ def get_all_customviews
606
+ handler_ins = APIHandler.get_instance
607
+ handler_ins.request_url_path = 'settings/custom_views'
608
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_GET
609
+ handler_ins.request_api_key = Utility::APIConstants::CUSTOM_VIEWS
610
+ handler_ins.add_param('module', @module_instance.api_name)
611
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
612
+ response_json = bulk_api_response.response_json
613
+ categories = response_json['info'].key?('translation') ? response_json['info']['translation'] : nil
614
+ customviews = response_json[Utility::APIConstants::CUSTOM_VIEWS]
615
+ customview_instances = []
616
+ meta_data_api_helper = MetaDataAPIHandlerHelper.get_instance
617
+ customviews.each do |customview|
618
+ customview_instances.push(meta_data_api_helper.get_zcrm_customview(customview, @module_instance.api_name, categories))
619
+ end
620
+ bulk_api_response.data = customview_instances
621
+ bulk_api_response
622
+ end
623
+
624
+ def get_customview(customview_id)
625
+ if customview_id.nil?
626
+ raise Utility::ZCRMException.get_instance('get_customview', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'custom view id must be given', 'CUSTOM VIEW ID IS NOT PROVIDED')
627
+ end
628
+
629
+ handler_ins = APIHandler.get_instance
630
+ handler_ins.request_url_path = 'settings/custom_views/' + customview_id.to_s
631
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_GET
632
+ handler_ins.request_api_key = Utility::APIConstants::CUSTOM_VIEWS
633
+ handler_ins.add_param('module', @module_instance.api_name)
634
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
635
+ response_json = api_response.response_json
636
+ categories = response_json['info'].key?('translation') ? response_json['info']['translation'] : nil
637
+ meta_data_api_helper = MetaDataAPIHandlerHelper.get_instance
638
+ api_response.data = meta_data_api_helper.get_zcrm_customview(response_json[Utility::APIConstants::CUSTOM_VIEWS][0], @module_instance.api_name, categories)
639
+ api_response
640
+ end
641
+
642
+ def update_customview(customview_instance)
643
+ if customview_instance.nil?
644
+ raise Utility::ZCRMException.get_instance('update_customview', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'custom view instance must be given', 'NO CUSTOM VIEW INSTANCE PROVIDED')
645
+ end
646
+
647
+ handler_ins = APIHandler.get_instance
648
+ handler_ins.request_url_path = 'settings/custom_views/' + customview_instance.id.to_s
649
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_PUT
650
+ handler_ins.add_param('module', @module_instance.api_name)
651
+ module_api_helper = ModuleAPIHandlerHelper.get_instance
652
+ handler_ins.request_body = module_api_helper.construct_json_for_cv_update(customview_instance)
653
+ Request::APIRequest.get_instance(handler_ins).get_api_response
654
+ end
655
+
656
+ def get_all_relatedlists
657
+ handler_ins = APIHandler.get_instance
658
+ handler_ins.request_url_path = 'settings/related_lists'
659
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_GET
660
+ handler_ins.add_param('module', @module_instance.api_name)
661
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
662
+ response_json = bulk_api_response.response_json
663
+ related_lists = response_json[Utility::APIConstants::RELATED_LISTS]
664
+ relatedlist_instances = []
665
+ module_api_helper = ModuleAPIHandlerHelper.get_instance
666
+ related_lists.each do |related_list|
667
+ relatedlist_instances.push(module_api_helper.get_zcrm_module_related_list(related_list))
668
+ end
669
+ bulk_api_response.data = relatedlist_instances
670
+ bulk_api_response
671
+ end
672
+
673
+ def get_relatedlist(relatedlist_id)
674
+ if relatedlist_id.nil?
675
+ raise Utility::ZCRMException.get_instance('get_relatedlist', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'Related list id must be given', 'NO RELATED LIST ID PROVIDED')
676
+ end
677
+
678
+ handler_ins = APIHandler.get_instance
679
+ handler_ins.request_url_path = 'settings/related_lists/' + relatedlist_id.to_s
680
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_GET
681
+ handler_ins.add_param('module', @module_instance.api_name)
682
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
683
+ response_json = api_response.response_json
684
+ related_list = response_json[Utility::APIConstants::RELATED_LISTS][0]
685
+ module_api_helper = ModuleAPIHandlerHelper.get_instance
686
+ api_response.data = module_api_helper.get_zcrm_module_related_list(related_list)
687
+ api_response
688
+ end
689
+ end
690
+ # THIS CLASS SERVES THE MassEntityAPIHandler CLASS CONSTRUCTING JSON BODY AND INSTANCES
691
+ class MassEntityAPIHandlerHelper
692
+ def initialize; end
693
+
694
+ def self.get_instance
695
+ MassEntityAPIHandlerHelper.new
696
+ end
697
+
698
+ def set_trash_record_properties(trash_record_ins, record_data)
699
+ if record_data.key?('display_name')
700
+ trash_record_ins.display_name = record_data['display_name']
701
+ end
702
+ if record_data.key?('created_by')
703
+ unless record_data['created_by'].nil?
704
+ trash_record_ins.created_by = Operations::ZCRMUser.get_instance(record_data['created_by']['id'], record_data['created_by']['name'])
705
+ end
706
+ end
707
+ if record_data.key?('deleted_by')
708
+ unless record_data['deleted_by'].nil?
709
+ trash_record_ins.deleted_by = Operations::ZCRMUser.get_instance(record_data['deleted_by']['id'], record_data['deleted_by']['name'])
710
+ end
711
+ end
712
+ trash_record_ins.deleted_time = record_data['deleted_time']
713
+ end
714
+
715
+ def construct_json_for_massupdate(entityid_list, field_api_name, field_value)
716
+ input_json_arr = []
717
+ entityid_list.each do |entity_id|
718
+ each_json = {}
719
+ each_json['id'] = entity_id.to_s
720
+ each_json[field_api_name] = field_value
721
+ input_json_arr.push(each_json)
722
+ end
723
+ data_json = {}
724
+ data_json[Utility::APIConstants::DATA] = input_json_arr
725
+ data_json
726
+ end
727
+ end
728
+ # THIS CLASS SERVES THE EntityAPIHandler CLASS CONSTRUCTING JSON BODY AND INSTANCES
729
+ class EntityAPIHandlerHelper
730
+ def initialize; end
731
+
732
+ def self.get_instance
733
+ EntityAPIHandlerHelper.new
734
+ end
735
+
736
+ def get_zcrmrecord_as_json(zcrmrecord)
737
+ record_json = {}
738
+ apiname_vs_values = zcrmrecord.field_data
739
+ record_json['Owner'] = zcrmrecord.owner.id unless zcrmrecord.owner.nil?
740
+ unless zcrmrecord.layout.nil?
741
+ record_json['Layout'] = zcrmrecord.layout.id
742
+ end
743
+ unless zcrmrecord.line_items.empty?
744
+ record_json['Product_Details'] = get_line_item_json(zcrmrecord.line_items)
745
+ end
746
+ unless zcrmrecord.participants.empty?
747
+ record_json['Participants'] = get_participants_as_jsonarray(zcrmrecord)
748
+ end
749
+ unless zcrmrecord.price_details.empty?
750
+ record_json['Pricing_Details'] = get_price_details_as_jsonarray(zcrmrecord)
751
+ end
752
+ unless zcrmrecord.tax_list.empty?
753
+ record_json['Tax'] = get_tax_list_as_json(zcrmrecord)
754
+ end
755
+ unless zcrmrecord.tag_list.empty?
756
+ record_json['Tag'] = get_tag_list_as_json(zcrmrecord)
757
+ end
758
+ unless apiname_vs_values.empty?
759
+ apiname_vs_values.each do |key, value|
760
+ if value.is_a?(Operations::ZCRMRecord)
761
+ value = value.entity_id
762
+ elsif value.is_a?(Operations::ZCRMUser)
763
+ value = value.id
764
+ end
765
+ record_json.store(key, value)
766
+ end
767
+ end
768
+ record_json
769
+ end
770
+
771
+ def get_tag_list_as_json(zcrmrecord)
772
+ tag_list_json_arr = []
773
+ tag_list = zcrmrecord.tag_list
774
+ tag_list.each do |tag_ins|
775
+ tag = {}
776
+ tag['name'] = tag_ins.name unless tag_ins.name.nil?
777
+ tag['id'] = tag_ins.id unless tag_ins.id.nil?
778
+ tag_list_json_arr.push(tag)
779
+ end
780
+ tag_list_json_arr
781
+ end
782
+
783
+ def get_tax_list_as_json(zcrmrecord)
784
+ tax_list_json_arr = []
785
+ tax_list = zcrmrecord.tax_list
786
+ tax_list.each do |tax_ins|
787
+ tax_list_json_arr.push(tax_ins.name)
788
+ end
789
+ tax_list_json_arr
790
+ end
791
+
792
+ def get_price_details_as_jsonarray(zcrmrecord)
793
+ price_details_arr = []
794
+ price_details_list = zcrmrecord.price_details
795
+ price_details_list.each do |price_book_pricing_ins|
796
+ price_details_arr.push(get_zcrmprice_detail_as_json(price_book_pricing_ins))
797
+ end
798
+ price_details_arr
799
+ end
800
+
801
+ def get_zcrmprice_detail_as_json(price_book_pricing_ins)
802
+ price_detail_json = {}
803
+ unless price_book_pricing_ins.id.nil?
804
+ price_detail_json['id'] = price_book_pricing_ins.id
805
+ end
806
+ price_detail_json['discount'] = price_book_pricing_ins.discount
807
+ price_detail_json['to_range'] = price_book_pricing_ins.to_range
808
+ price_detail_json['from_range'] = price_book_pricing_ins.from_range
809
+ price_detail_json
810
+ end
811
+
812
+ def get_participants_as_jsonarray(zcrmrecord)
813
+ participants_arr = []
814
+ participants_list = zcrmrecord.participants
815
+ participants_list.each do |participant_ins|
816
+ participants_arr.push(get_zcrmparticipant_as_json(participant_ins))
817
+ end
818
+ participants_arr
819
+ end
820
+
821
+ def get_zcrmparticipant_as_json(participant_ins)
822
+ participant_json = {}
823
+ participant_json['participant'] = participant_ins.id
824
+ participant_json['type'] = participant_ins.type
825
+ participant_json['name'] = participant_ins.name
826
+ participant_json['Email'] = participant_ins.email
827
+ participant_json['invited'] = participant_ins.is_invited == true
828
+ participant_json['status'] = participant_ins.status
829
+ participant_json
830
+ end
831
+
832
+ def get_line_item_json(line_items_array)
833
+ line_items_as_json_array = []
834
+ line_items_array.each do |line_item|
835
+ line_item_data = {}
836
+ if line_item.quantity.nil?
837
+ raise Utility::ZCRMException.get_instance(@request_url_path, Utility::APIConstants::RESPONSECODE_BAD_REQUEST, "Mandatory Field 'quantity' is missing.", nil)
838
+ end
839
+
840
+ line_item_data['id'] = line_item.id unless line_item.id.nil?
841
+ unless line_item.product.nil?
842
+ line_item_data['product'] = line_item.product.entity_id
843
+ end
844
+ unless line_item.description.nil?
845
+ line_item_data['product_description'] = line_item.description
846
+ end
847
+ unless line_item.list_price.nil?
848
+ line_item_data['list_price'] = line_item.list_price
849
+ end
850
+ line_item_data['quantity'] = line_item.quantity
851
+ line_item_data['Discount'] = if line_item.discount_percentage.nil?
852
+ line_item.discount
853
+ else
854
+ line_item.discount_percentage + '%'
855
+ end
856
+
857
+ unless line_item.line_tax.nil?
858
+ line_taxes = line_item.line_tax
859
+ line_tax_array = []
860
+ line_taxes.each do |line_tax_instance|
861
+ tax = {}
862
+ tax['name'] = line_tax_instance.name
863
+ tax['value'] = line_tax_instance.value
864
+ tax['percentage'] = line_tax_instance.percentage
865
+ line_tax_array.push(tax)
866
+ line_item_data['line_tax'] = line_tax_array
867
+ end
868
+ end
869
+ line_items_as_json_array.push(line_item_data)
870
+ end
871
+ line_items_as_json_array
872
+ end
873
+
874
+ def get_zcrm_pricebook_pricing(price_details)
875
+ price_detail_ins = Operations::ZCRMPriceBookPricing.get_instance(price_details['id'])
876
+ price_detail_ins.discount = price_details['discount'].to_f
877
+ price_detail_ins.to_range = price_details['to_range'].to_f
878
+ price_detail_ins.from_range = price_details['from_range'].to_f
879
+ price_detail_ins
880
+ end
881
+
882
+ def get_zcrmparticipant(participant_details)
883
+ participant = Operations::ZCRMEventParticipant.get_instance(participant_details['type'], participant_details['participant'])
884
+ participant.name = participant_details['name']
885
+ participant.email = participant_details['Email']
886
+ participant.is_invited = participant_details['invited'] == true
887
+ participant.status = participant_details['status']
888
+ participant
889
+ end
890
+
891
+ def get_zcrminventory_line_item(line_item_details)
892
+ product_details = line_item_details['product']
893
+ line_item_instance = Operations::ZCRMInventoryLineItem.get_instance(line_item_details['id'])
894
+ product = Operations::ZCRMRecord.get_instance('Products', product_details['id'])
895
+ product.lookup_label = product_details['name']
896
+ if product_details.key?('Product_Code')
897
+ product.field_data['Product_Code'] = product_details['Product_Code']
898
+ end
899
+ line_item_instance.product = product
900
+ line_item_instance.description = line_item_details['product_description']
901
+ line_item_instance.quantity = line_item_details['quantity'].to_i
902
+ line_item_instance.list_price = line_item_details['list_price'].to_f
903
+ line_item_instance.total = line_item_details['total'].to_f
904
+ line_item_instance.discount = line_item_details['Discount'].to_f
905
+ line_item_instance.total_after_discount = line_item_details['total_after_discount'].to_f
906
+ line_item_instance.tax_amount = line_item_details['Tax'].to_f
907
+ line_taxes = line_item_details['line_tax']
908
+ unless line_taxes.nil?
909
+ line_taxes.each do |line_tax|
910
+ tax_instance = Operations::ZCRMTax.get_instance(line_tax['name'])
911
+ tax_instance.percentage = line_tax['percentage']
912
+ tax_instance.value = line_tax['value'].to_f
913
+ line_item_instance.line_tax.push(tax_instance)
914
+ end
915
+ end
916
+ line_item_instance.net_total = line_item_details['net_total'].to_f
917
+ line_item_instance
918
+ end
919
+
920
+ def get_zcrmsubform(sub_form_details)
921
+ sub_form_instance = Operations::ZCRMSubForm.get_instance(sub_form_details['id'])
922
+ sub_form_details.each do |key, value|
923
+ if key == 'Created_Time'
924
+ sub_form_instance.created_time = value
925
+ elsif key == 'Modified_Time'
926
+ sub_form_instance.modified_time = value
927
+ elsif key == 'Owner'
928
+ owner = Operations::ZCRMUser.get_instance(value['id'], value['name'])
929
+ sub_form_instance.owner = owner
930
+ elsif key == 'Layout'
931
+ layout = nil
932
+ unless value.nil?
933
+ layout = Operations::ZCRMLayout.get_instance(value['id'])
934
+ layout.name = value['name']
935
+ end
936
+ sub_form_instance.layout = layout
937
+ elsif key.start_with?('$')
938
+ sub_form_instance.properties.store(key.gsub('$', ''), value)
939
+ elsif value.is_a?(Hash) && !value.empty?
940
+ lookup_record = Operations::ZCRMRecord.get_instance(key, value.dig('id'))
941
+ lookup_record.name = value.key?('name') ? value.dig('name') : nil
942
+ sub_form_instance.field_data.store(key, lookup_record)
943
+ elsif value.is_a?(Array) && !value.empty?
944
+ arrayinstances = value
945
+ fieldarray = []
946
+ arrayinstances.each do |arrayinstance|
947
+ if arrayinstance.is_a?(Hash) && !arrayinstance.empty?
948
+ fieldarray.push(entity_api_handler_helper.get_zcrmsubform(arrayinstance))
949
+ else
950
+ fieldarray.push(arrayinstance)
951
+ end
952
+ end
953
+ sub_form_instance.field_data.store(key, fieldarray)
954
+ else
955
+ sub_form_instance.field_data.store(key, value)
956
+ end
957
+ end
958
+ sub_form_instance
959
+ end
960
+
961
+ def set_record_properties(zcrmrecord, response_hash)
962
+ entity_api_handler_helper = EntityAPIHandlerHelper.get_instance
963
+ response_hash.each do |key, value|
964
+ next if value.nil?
965
+
966
+ if key == 'id'
967
+ zcrmrecord.entity_id = value
968
+ elsif key == 'Product_Details'
969
+ line_items = value
970
+ line_items.each do |line_item|
971
+ zcrmrecord.line_items.push(entity_api_handler_helper.get_zcrminventory_line_item(line_item))
972
+ end
973
+ elsif key == 'Participants'
974
+ participants = value
975
+ participants.each do |participant|
976
+ zcrmrecord.participants.push(entity_api_handler_helper.get_zcrmparticipant(participant))
977
+ end
978
+ elsif key == 'Pricing_Details'
979
+ price_details = value
980
+ price_details.each do |price_detail|
981
+ zcrmrecord.price_details.push(entity_api_handler_helper.get_zcrm_pricebook_pricing(price_detail))
982
+ end
983
+ elsif key == 'Created_By'
984
+ created_by = Operations::ZCRMUser.get_instance(value['id'], value['name'])
985
+ zcrmrecord.created_by = created_by
986
+ elsif key == 'Modified_By'
987
+ modified_by = Operations::ZCRMUser.get_instance(value['id'], value['name'])
988
+ zcrmrecord.modified_by = modified_by
989
+ elsif key == 'Created_Time'
990
+ zcrmrecord.created_time = value
991
+ elsif key == 'Modified_Time'
992
+ zcrmrecord.modified_time = value
993
+ elsif key == 'Owner'
994
+ owner = Operations::ZCRMUser.get_instance(value['id'], value['name'])
995
+ zcrmrecord.owner = owner
996
+ elsif key == 'Layout'
997
+ layout = nil
998
+ unless value.nil?
999
+ layout = Operations::ZCRMLayout.get_instance(value['id'])
1000
+ layout.name = value['name']
1001
+ end
1002
+ zcrmrecord.layout = layout
1003
+ elsif (key == 'Handler') && !value.nil?
1004
+ handler = Operations::ZCRMUser.get_instance(value['id'], value['name'])
1005
+ zcrmrecord.field_data.store(key, handler)
1006
+ elsif (key == 'Tax') && value.is_a?(Array) && !value.empty?
1007
+ if value.is_a?(Array) && !value.empty?
1008
+ value.each do |tax_name|
1009
+ tax_ins = Operations::ZCRMTax.get_instance(tax_name)
1010
+ zcrmrecord.tax_list.push(tax_ins)
1011
+ end
1012
+ end
1013
+ elsif key == 'Tag'
1014
+ if value.is_a?(Array) && !value.empty?
1015
+ value.each do |tag|
1016
+ tag_ins = Operations::ZCRMTag.get_instance(tag['id'], tag['name'])
1017
+ zcrmrecord.tag_list.push(tag_ins)
1018
+ end
1019
+ end
1020
+ elsif (key == '$line_tax') && value.is_a?(Array) && !value.empty?
1021
+ value.each do |line_tax|
1022
+ tax_ins = Operations::ZCRMTax.get_instance(line_tax['name'])
1023
+ tax_ins.percentage = line_tax['percentage']
1024
+ tax_ins.value = line_tax['value']
1025
+ zcrmrecord.tax_list.push(tax_ins)
1026
+ end
1027
+ elsif key.start_with?('$')
1028
+ zcrmrecord.properties.store(key.gsub('$', ''), value)
1029
+ elsif key == 'Remind_At'
1030
+ zcrmrecord.field_data.store(key, value)
1031
+ elsif key == 'Recurring_Activity'
1032
+ zcrmrecord.field_data.store(key, value)
1033
+ elsif value.is_a?(Hash) && !value.empty?
1034
+ lookup_record = Operations::ZCRMRecord.get_instance(key, value.dig('id'))
1035
+ lookup_record.name = value.key?('name') ? value.dig('name') : nil
1036
+ zcrmrecord.field_data.store(key, lookup_record)
1037
+ elsif value.is_a?(Array) && !value.empty?
1038
+ arrayinstances = value
1039
+ fieldarray = []
1040
+ arrayinstances.each do |arrayinstance|
1041
+ if arrayinstance.is_a?(Hash) && !arrayinstance.empty?
1042
+ fieldarray.push(entity_api_handler_helper.get_zcrmsubform(arrayinstance))
1043
+ else
1044
+ fieldarray.push(arrayinstance)
1045
+ end
1046
+ end
1047
+ zcrmrecord.field_data.store(key, fieldarray)
1048
+ else
1049
+ zcrmrecord.field_data.store(key, value)
1050
+ end
1051
+ end
1052
+ end
1053
+ end
1054
+ # THIS CLASS SERVES THE ModuleAPIHandler CLASS CONSTRUCTING JSON BODY AND INSTANCES
1055
+ class ModuleAPIHandlerHelper
1056
+ def initialize; end
1057
+
1058
+ def self.get_instance
1059
+ ModuleAPIHandlerHelper.new
1060
+ end
1061
+
1062
+ def construct_json_for_cv_update(customview_instance)
1063
+ cv_settings = {}
1064
+ unless customview_instance.sort_by.nil?
1065
+ field_ins = customview_instance.sort_by
1066
+ field_details={}
1067
+ unless field_ins.id.nil?
1068
+ field_details['id']=field_ins.id
1069
+ end
1070
+
1071
+ unless field_ins.api_name.nil?
1072
+ field_details['api_name']=field_ins.api_name
1073
+ end
1074
+ cv_settings['sort_by'] = field_details
1075
+ end
1076
+ unless customview_instance.sort_order.nil?
1077
+ cv_settings['sort_order'] = customview_instance.sort_order
1078
+ end
1079
+ input_json = {}
1080
+ input_json[Utility::APIConstants::CUSTOM_VIEWS] = [cv_settings]
1081
+ input_json
1082
+ end
1083
+
1084
+ def get_zcrm_module_related_list(relatedlist_prop)
1085
+ relatedlist_ins = Operations::ZCRMModuleRelatedList.get_instance(relatedlist_prop['api_name'])
1086
+ relatedlist_ins.id = relatedlist_prop['id']
1087
+ relatedlist_ins.module_apiname = relatedlist_prop['module']
1088
+ relatedlist_ins.display_label = relatedlist_prop['display_label']
1089
+ relatedlist_ins.name = relatedlist_prop['name']
1090
+ relatedlist_ins.type = relatedlist_prop['type']
1091
+ relatedlist_ins.href = relatedlist_prop['href']
1092
+ relatedlist_ins.is_visible = relatedlist_prop.key?('visible') ? relatedlist_prop['visible'] == true : nil
1093
+ relatedlist_ins.action = relatedlist_prop['action']
1094
+ relatedlist_ins.sequence_number = relatedlist_prop['sequence_number']
1095
+ relatedlist_ins
1096
+ end
1097
+
1098
+ def get_picklist_value_instance(picklist)
1099
+ picklist_ins = Operations::ZCRMPickListValue.get_instance
1100
+ picklist_ins.display_value = picklist['display_value']
1101
+ picklist_ins.actual_value = picklist['actual_value']
1102
+ if picklist.key?('sequence_number') && !picklist['sequence_number'].nil?
1103
+ picklist_ins.sequence_number = picklist['sequence_number']
1104
+ end
1105
+ picklist_ins.maps = picklist['maps'] if picklist.key?('maps')
1106
+ picklist_ins
1107
+ end
1108
+
1109
+ def get_multiselect_lookup_field_instance(multi_select_lookup)
1110
+ multiselect_lookup_field_instance = Operations::ZCRMMultiSelectLookupField.get_instance(multi_select_lookup['api_name'])
1111
+ multiselect_lookup_field_instance.id = multi_select_lookup['id']
1112
+ multiselect_lookup_field_instance.connected_module = multi_select_lookup['connected_module']
1113
+ multiselect_lookup_field_instance.linking_module = multi_select_lookup['linking_module']
1114
+ multiselect_lookup_field_instance.display_label = multi_select_lookup['display_label']
1115
+ multiselect_lookup_field_instance
1116
+ end
1117
+
1118
+ def get_lookup_field_instance(lookup_field_details)
1119
+ lookup_field_instance = Operations::ZCRMLookupField.get_instance(lookup_field_details['api_name'])
1120
+ lookup_field_instance.display_label = lookup_field_details['display_label']
1121
+ lookup_field_instance.id = lookup_field_details['id']
1122
+ lookup_field_instance.module_apiname = lookup_field_details['module']
1123
+ lookup_field_instance
1124
+ end
1125
+
1126
+ def get_zcrmlayout(layout_details)
1127
+ layout_instance = Operations::ZCRMLayout.get_instance(layout_details['id'])
1128
+ layout_instance.created_time = layout_details['created_time']
1129
+ layout_instance.modified_time = layout_details['modified_time']
1130
+ layout_instance.name = layout_details['name']
1131
+ layout_instance.is_visible = layout_details['visible'] == true
1132
+ layout_instance.created_for = layout_details['created_for']
1133
+ unless layout_details['created_by'].nil?
1134
+ layout_instance.created_by = Operations::ZCRMUser.get_instance(layout_details['created_by']['id'], layout_details['created_by']['name'])
1135
+ end
1136
+ unless layout_details['modified_by'].nil?
1137
+ layout_instance.modified_by = Operations::ZCRMUser.get_instance(layout_details['modified_by']['id'], layout_details['modified_by']['name'])
1138
+ end
1139
+ accessible_profile_arr = layout_details['profiles']
1140
+ accessible_profile_instances = []
1141
+ unless accessible_profile_arr.nil?
1142
+ accessible_profile_arr.each do |profile|
1143
+ profile_ins = Operations::ZCRMProfile.get_instance(profile['id'], profile['name'])
1144
+ profile_ins.is_default = profile['default'] == true
1145
+ accessible_profile_instances.push(profile_ins)
1146
+ end
1147
+ end
1148
+ layout_instance.accessible_profiles = accessible_profile_instances
1149
+ layout_instance.sections = get_all_sections_of_layout(layout_details['sections'])
1150
+ layout_instance.status = layout_details['status']
1151
+ if layout_details.key?('convert_mapping')
1152
+ convert_modules = %w[Contacts Deals Accounts]
1153
+
1154
+ convert_modules.each do |convert_module|
1155
+ next unless layout_details['convert_mapping'].key?(convert_module)
1156
+
1157
+ convert_map = layout_details['convert_mapping'][convert_module]
1158
+ convert_map_ins = Operations::ZCRMLeadConvertMapping.get_instance(convert_map['name'], convert_map['id'])
1159
+ if convert_map.key?('fields')
1160
+ field_data = convert_map['fields']
1161
+ unless field_data.nil?
1162
+ field_data.each do |each_field_data|
1163
+ convert_mapping_field_ins = Operations::ZCRMLeadConvertMappingField.get_instance(each_field_data['api_name'], each_field_data['id'])
1164
+ convert_mapping_field_ins.field_label = each_field_data['field_label']
1165
+ convert_mapping_field_ins.is_required = each_field_data['required'] == true
1166
+ convert_map_ins.fields.push(convert_mapping_field_ins)
1167
+ end
1168
+ end
1169
+ end
1170
+ layout_instance.convert_mapping[convert_module] = convert_map_ins
1171
+ end
1172
+ end
1173
+ layout_instance
1174
+ end
1175
+
1176
+ def get_all_sections_of_layout(all_section_details)
1177
+ section_instances = []
1178
+ unless all_section_details.nil?
1179
+ all_section_details.each do |section|
1180
+ section_ins = Operations::ZCRMSection.get_instance(section['name'])
1181
+ section_ins.display_label = section['display_label']
1182
+ section_ins.column_count = section['column_count']
1183
+ section_ins.sequence_number = section['sequence_number']
1184
+ section_ins.fields = get_section_fields(section['fields'])
1185
+ section_ins.tab_traversal = section['tab_traversal']
1186
+ section_ins.is_subform_section = section['isSubformSection']
1187
+ section_ins.api_name = section['api_name']
1188
+ section_ins.properties = get_section_properties(section['properties'])
1189
+ section_instances.push(section_ins)
1190
+ end
1191
+ end
1192
+ section_instances
1193
+ end
1194
+
1195
+ def get_section_fields(fields)
1196
+ section_fields = []
1197
+ unless fields.nil?
1198
+ fields.each do |field|
1199
+ section_fields.push(get_zcrmfield(field))
1200
+ end
1201
+ end
1202
+ section_fields
1203
+ end
1204
+
1205
+ def get_section_properties(properties)
1206
+ section_properties = Operations::ZCRMSectionProperties.get_instance
1207
+ unless properties.nil?
1208
+ section_properties.reorder_rows = properties['reorder_rows']
1209
+ section_properties.tooltip = properties['tooltip']
1210
+ section_properties.maximum_rows = properties['maximum_rows']
1211
+ end
1212
+ section_properties
1213
+ end
1214
+
1215
+ def get_zcrmfield(field_details)
1216
+ field_instance = Operations::ZCRMField.get_instance(field_details['api_name'])
1217
+ field_instance.sequence_number = field_details.key?('sequence_number') ? field_details['sequence_number'].to_i : nil
1218
+ field_instance.id = field_details['id']
1219
+ field_instance.is_mandatory = field_details.key?('system_mandatory') ? field_details['system_mandatory'] == true : nil
1220
+ field_instance.default_value = field_details.key?('default_value') ? field_details['default_value'] : nil
1221
+ field_instance.is_custom_field = field_details.key?('custom_field') ? field_details['custom_field'] == true : nil
1222
+ field_instance.is_visible = field_details.key?('visible') ? field_details['visible'] == true : nil
1223
+ field_instance.field_label = field_details.key?('field_label') ? field_details['field_label'] : nil
1224
+ field_instance.length = field_details.key?('length') ? field_details['length'].to_i : nil
1225
+ field_instance.created_source = field_details.key?('created_source') ? field_details['created_source'] : nil
1226
+ field_instance.is_read_only = field_details.key?('read_only') ? field_details['read_only'] == true : nil
1227
+ field_instance.is_business_card_supported = field_details.key?('businesscard_supported') ? field_details['businesscard_supported'] == true : nil
1228
+ field_instance.data_type = field_details.key?('data_type') ? field_details['data_type'] : nil
1229
+ field_instance.convert_mapping = field_details.key?('convert_mapping') ? field_details['convert_mapping'] : nil
1230
+ field_instance.is_webhook = field_details.key?('webhook') ? field_details['webhook'] : nil
1231
+ field_instance.crypt = field_details.key?('crypt') ? field_details['crypt'] : nil
1232
+ field_instance.tooltip = field_details.key?('tooltip') ? field_details['tooltip'] : nil
1233
+ field_instance.is_field_read_only = field_details.key?('field_read_only') ? field_details['field_read_only'] : nil
1234
+ field_instance.association_details = field_details.key?('association_details') ? field_details['association_details'] : nil
1235
+ field_instance.subform = field_details.key?('subform') ? field_details['subform'] : nil
1236
+ field_instance.is_mass_update = field_details.key?('mass_update') ? field_details['mass_update'] : nil
1237
+ if field_details.key?('multiselectlookup') && !field_details['multiselectlookup'].empty?
1238
+ field_instance.multiselectlookup = get_multiselect_lookup_field_instance(field_details['multiselectlookup'])
1239
+ end
1240
+ if field_details.key?('view_type')
1241
+ viewtype_dict = field_details['view_type']
1242
+ field_layout_permissions = []
1243
+ field_layout_permissions.push('VIEW') if viewtype_dict['view']
1244
+ if viewtype_dict['quick_create']
1245
+ field_layout_permissions.push('QUICK_CREATE')
1246
+ end
1247
+ field_layout_permissions.push('CREATE') if viewtype_dict['create']
1248
+ field_layout_permissions.push('EDIT') if viewtype_dict['edit']
1249
+ field_instance.field_layout_permissions = field_layout_permissions
1250
+ end
1251
+ picklist_arr = field_details['pick_list_values']
1252
+ unless picklist_arr.empty?
1253
+ picklist_instance_arr = []
1254
+ picklist_arr.each do |picklist|
1255
+ picklist_instance_arr.push(get_picklist_value_instance(picklist))
1256
+ end
1257
+ field_instance.picklist_values = picklist_instance_arr
1258
+ end
1259
+ if field_details.key?('lookup') && !field_details['lookup'].empty?
1260
+ field_instance.lookup_field = get_lookup_field_instance(field_details['lookup'])
1261
+ end
1262
+ field_instance.is_unique_field = false
1263
+ field_instance.is_case_sensitive = false
1264
+ if field_details.key?('unique') && !field_details['unique'].empty?
1265
+ field_instance.is_unique_field = true
1266
+ field_instance.is_case_sensitive = field_details['unique']['casesensitive'] == true
1267
+ end
1268
+ if field_details.key?('decimal_place') && !field_details['decimal_place'].nil?
1269
+ field_instance.decimal_place = field_details['decimal_place']
1270
+ end
1271
+ if field_details.key?('json_type') && !field_details['json_type'].nil?
1272
+ field_instance.json_type = field_details['json_type']
1273
+ end
1274
+ field_instance.is_formula_field = false
1275
+ if field_details.key?('formula') && !field_details['formula'].empty?
1276
+ field_instance.is_formula_field = true
1277
+ field_instance.formula_return_type = field_details['formula']['return_type']
1278
+ field_instance.formula_expression = field_details['formula'].key?('expression') ? field_details['formula']['expression'] : nil
1279
+ end
1280
+ field_instance.is_currency_field = false
1281
+ if field_details.key?('currency') && !field_details['currency'].empty?
1282
+ field_instance.is_currency_field = true
1283
+ field_instance.precision = field_details['currency'].key?('precision') ? field_details['currency']['precision'].to_i : nil
1284
+ field_instance.rounding_option = field_details['currency'].key?('rounding_option') ? field_details['currency']['rounding_option'] : nil
1285
+ end
1286
+ field_instance.is_auto_number = false
1287
+ if field_details.key?('auto_number') && !field_details['auto_number'].empty?
1288
+ field_instance.is_auto_number = true
1289
+ field_instance.prefix = field_details['auto_number'].key?('prefix') ? field_details['auto_number']['prefix'] : nil
1290
+ field_instance.suffix = field_details['auto_number'].key?('suffix') ? field_details['auto_number']['suffix'] : nil
1291
+ field_instance.start_number = field_details['auto_number'].key?('start_number') ? field_details['auto_number']['start_number'] : nil
1292
+ end
1293
+ field_instance
1294
+ end
1295
+ end
1296
+ # THIS CLASS IS USED TO HANDLE META DATA RELATED FUNCTIONALITY
1297
+ class MetaDataAPIHandler < APIHandler
1298
+ def initialize; end
1299
+
1300
+ def self.get_instance
1301
+ MetaDataAPIHandler.new
1302
+ end
1303
+
1304
+ def get_all_modules
1305
+ handler_ins = APIHandler.get_instance
1306
+ handler_ins.request_url_path = 'settings/modules'
1307
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_GET
1308
+ handler_ins.request_api_key = ZCRMSDK::Utility::APIConstants::MODULES
1309
+ bulk_api_response = ZCRMSDK::Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
1310
+ modules_json = bulk_api_response.response_json.dig(ZCRMSDK::Utility::APIConstants::MODULES)
1311
+ module_ins_list = []
1312
+ module_helper = MetaDataAPIHandlerHelper.get_instance
1313
+ modules_json.each do |module_json|
1314
+ module_ins_list.push(module_helper.get_zcrmmodule(module_json))
1315
+ end
1316
+ bulk_api_response.data = module_ins_list
1317
+ bulk_api_response
1318
+ end
1319
+
1320
+ def get_module(module_api_name)
1321
+ if module_api_name.nil?
1322
+ raise Utility::ZCRMException.get_instance('get_module', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'module api name must be provided', 'NO MODULE API NAME PROVIDED')
1323
+ end
1324
+
1325
+ handler_ins = APIHandler.get_instance
1326
+ handler_ins.request_url_path = 'settings/modules/' + module_api_name
1327
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_GET
1328
+ handler_ins.request_api_key = ZCRMSDK::Utility::APIConstants::MODULES
1329
+ api_response = ZCRMSDK::Request::APIRequest.get_instance(handler_ins).get_api_response
1330
+ module_helper = MetaDataAPIHandlerHelper.get_instance
1331
+ module_json = api_response.response_json.dig(ZCRMSDK::Utility::APIConstants::MODULES)[0]
1332
+ api_response.data = module_helper.get_zcrmmodule(module_json)
1333
+ api_response
1334
+ end
1335
+ end
1336
+ # THIS CLASS SERVES THE MetaDataAPIHandler CLASS CONSTRUCTING JSON BODY AND INSTANCES
1337
+ class MetaDataAPIHandlerHelper
1338
+ def initialize; end
1339
+
1340
+ def self.get_instance
1341
+ MetaDataAPIHandlerHelper.new
1342
+ end
1343
+
1344
+ def get_relatedlist_property_instance(relatedlist_property)
1345
+ reltedlist_property_instance = Operations::ZCRMRelatedListProperties.get_instance
1346
+ reltedlist_property_instance.sort_by = relatedlist_property.key?('sort_by') ? relatedlist_property['sort_by'] : nil
1347
+ reltedlist_property_instance.sort_order = relatedlist_property.key?('sort_order') ? relatedlist_property['sort_order'] : nil
1348
+ reltedlist_property_instance.fields = relatedlist_property.key?('fields') ? relatedlist_property['fields'] : nil
1349
+ reltedlist_property_instance
1350
+ end
1351
+
1352
+ def get_zcrmmodule(module_details)
1353
+ crmmodule_instance = Operations::ZCRMModule.get_instance(module_details.dig(Utility::APIConstants::API_NAME))
1354
+ crmmodule_instance.is_viewable = module_details['viewable'] == true
1355
+ crmmodule_instance.is_creatable = module_details['creatable'] == true
1356
+ crmmodule_instance.is_convertable = module_details['convertable'] == true
1357
+ crmmodule_instance.is_editable = module_details['editable'] == true
1358
+ crmmodule_instance.is_deletable = module_details['deletable'] == true
1359
+ crmmodule_instance.web_link = module_details.key?('web_link') ? module_details['web_link'] : nil
1360
+ crmmodule_instance.singular_label = module_details['singular_label']
1361
+ crmmodule_instance.plural_label = module_details['plural_label']
1362
+ crmmodule_instance.id = module_details['id']
1363
+ crmmodule_instance.modified_time = module_details['modified_time']
1364
+ crmmodule_instance.is_inventory_template_supported = module_details['inventory_template_supported'] == true
1365
+ crmmodule_instance.is_api_supported = module_details['api_supported'] == true
1366
+ crmmodule_instance.is_scoring_supported = module_details['scoring_supported'] == true
1367
+ crmmodule_instance.module_name = module_details['module_name']
1368
+ crmmodule_instance.business_card_field_limit = module_details.key?('business_card_field_limit') ? module_details['business_card_field_limit'].to_i : nil
1369
+ crmmodule_instance.sequence_number = module_details.key?('sequence_number') ? module_details['sequence_number'] : nil
1370
+ crmmodule_instance.is_global_search_supported = module_details.key?('global_search_supported') ? module_details['global_search_supported'] == true : nil
1371
+ unless module_details['modified_by'].nil?
1372
+ crmmodule_instance.modified_by = Operations::ZCRMUser.get_instance(module_details['modified_by']['id'], module_details['modified_by']['name'])
1373
+ end
1374
+
1375
+ crmmodule_instance.is_custom_module = module_details['generated_type'] == 'custom'
1376
+
1377
+ if module_details.key?('business_card_fields')
1378
+ crmmodule_instance.business_card_fields = module_details['business_card_fields']
1379
+ end
1380
+
1381
+ profiles = module_details['profiles']
1382
+ unless profiles.nil?
1383
+ profiles.each do |profile|
1384
+ crmmodule_instance.profiles.push(Operations::ZCRMProfile.get_instance(profile['id'], profile['name']))
1385
+ end
1386
+ end
1387
+
1388
+ if module_details.key?('display_field') && !module_details['display_field'].nil?
1389
+ crmmodule_instance.display_field_name = module_details['display_field']
1390
+ end
1391
+ if module_details.key?('related_lists') && !module_details['related_lists'].nil?
1392
+ relatedlists = module_details['related_lists']
1393
+ relatedlist_instances = []
1394
+ unless relatedlists.nil?
1395
+ relatedlists.each do |relatedlist|
1396
+ module_relatedlist_ins = Operations::ZCRMModuleRelatedList.get_instance(relatedlist['api_name'])
1397
+ relatedlist_instances.push(module_relatedlist_ins.set_relatedlist_properties(relatedlist))
1398
+ end
1399
+ end
1400
+ crmmodule_instance.related_lists = relatedlist_instances
1401
+ end
1402
+ if module_details.key?('related_list_properties') && !module_details['related_list_properties'].nil?
1403
+ crmmodule_instance.related_list_properties = get_relatedlist_property_instance(module_details['related_list_properties'])
1404
+ end
1405
+ if module_details.key?('$properties') && !module_details['$properties'].nil?
1406
+ crmmodule_instance.properties = module_details['$properties']
1407
+ end
1408
+ if module_details.key?('per_page') && !module_details['per_page'].nil?
1409
+ crmmodule_instance.per_page = module_details['per_page'].to_i
1410
+ end
1411
+ if module_details.key?('search_layout_fields') && !module_details['search_layout_fields'].nil?
1412
+ crmmodule_instance.search_layout_fields = module_details['search_layout_fields']
1413
+ end
1414
+ if module_details.key?('custom_view') && !module_details['custom_view'].nil?
1415
+ meta_data_api_helper = MetaDataAPIHandlerHelper.get_instance
1416
+ crmmodule_instance.default_custom_view = meta_data_api_helper.get_zcrm_customview(module_details.dig('custom_view'), crmmodule_instance.api_name, nil)
1417
+ crmmodule_instance.default_custom_view_id = module_details['custom_view']['id']
1418
+ end
1419
+ if module_details.key?('territory') && !module_details['territory'].nil?
1420
+ crmmodule_instance.default_territory_id = module_details['territory']['id']
1421
+ crmmodule_instance.default_territory_name = module_details['territory']['name']
1422
+ end
1423
+ crmmodule_instance.is_kanban_view = module_details.key?('kanban_view') ? module_details['kanban_view'] == true : nil
1424
+ crmmodule_instance.is_filter_status = module_details.key?('filter_status') ? module_details['filter_status'] == true : nil
1425
+ crmmodule_instance.is_presence_sub_menu = module_details.key?('presence_sub_menu') ? module_details['presence_sub_menu_status'] == true : nil
1426
+ crmmodule_instance.arguments = module_details['arguments']
1427
+ crmmodule_instance.generated_type = module_details['generated_type']
1428
+ crmmodule_instance.is_quick_create = module_details['quick_create'] == true
1429
+ crmmodule_instance.is_kanban_view_supported = module_details.key?('kanban_view_supported') ? module_details['kanban_view_supported'] == true : nil
1430
+ crmmodule_instance.is_filter_supported = module_details.key?('filter_supported') ? module_details['filter_supported'] == true : nil
1431
+ unless module_details['parent_module'].nil?
1432
+ parent_module_instance = Operations::ZCRMModule.get_instance(module_details['parent_module']['api_name'])
1433
+ parent_module_instance.id = module_details['parent_module']['id']
1434
+ unless parent_module_instance.id.nil?
1435
+ crmmodule_instance.parent_module = parent_module_instance
1436
+ end
1437
+ end
1438
+ crmmodule_instance.is_feeds_required = module_details['feeds_required'] == true
1439
+ crmmodule_instance.is_email_template_support = module_details['emailTemplate_support'] == true
1440
+ crmmodule_instance.is_webform_supported = module_details['webform_supported'] == true
1441
+ crmmodule_instance.visibility = module_details['visibility']
1442
+ crmmodule_instance
1443
+ end
1444
+
1445
+ def construct_criteria(criteria)
1446
+ criteria_instance = Operations::ZCRMCustomViewCriteria.get_instance
1447
+ criteria_instance.field = criteria.key?('field') ? criteria['field'] : nil
1448
+ criteria_instance.comparator = criteria.key?('comparator') ? criteria['comparator'] : nil
1449
+ unless criteria['value'].nil?
1450
+ criteria_instance.index = $index
1451
+ criteria_instance.value = criteria['value']
1452
+ criteria_instance.pattern = $index.to_s
1453
+ $index = $index + 1
1454
+ criteria_instance.criteria = ' (' + criteria_instance.field .to_s + ':' + criteria_instance.comparator.to_s + ':' + criteria_instance.value.to_s + ') '
1455
+ end
1456
+ group_criteria = []
1457
+ unless criteria['group'].nil?
1458
+ i = 0
1459
+ while i < criteria['group'].count
1460
+ group_criteria.push(construct_criteria(criteria['group'][i]))
1461
+ i += 1
1462
+ end
1463
+ end
1464
+ criteria_instance.group = group_criteria unless group_criteria.nil?
1465
+ unless criteria['group_operator'].nil?
1466
+ criteria_instance.group_operator = criteria['group_operator']
1467
+ criteria_instance.criteria = '(' + group_criteria[0].criteria + criteria_instance.group_operator + group_criteria[1].criteria + ')'
1468
+ criteria_instance.pattern = '{' + group_criteria[0].pattern + criteria_instance.group_operator + group_criteria[1].pattern + '}'
1469
+ end
1470
+ criteria_instance
1471
+ end
1472
+
1473
+ def get_zcrm_customview(customview_details, module_api_name, categories = nil)
1474
+ customview_instance = Operations::ZCRMCustomView.get_instance(customview_details['id'], module_api_name)
1475
+ customview_instance.display_value = customview_details['display_value']
1476
+ customview_instance.is_default = customview_details['default'] == true
1477
+ customview_instance.name = customview_details['name']
1478
+ customview_instance.is_system_defined = customview_details['system_defined'] == true
1479
+ customview_instance.shared_details = customview_details['shared_details']
1480
+ customview_instance.system_name = customview_details['system_name']
1481
+ customview_instance.sort_by = customview_details.key?('sort_by') ? customview_details['sort_by'] : nil
1482
+ customview_instance.category = customview_details.key?('category') ? customview_details['category'] : nil
1483
+ customview_instance.fields = customview_details.key?('fields') ? customview_details['fields'] : nil
1484
+ customview_instance.favorite = customview_details.key?('favorite') ? customview_details['favorite'] : nil
1485
+ customview_instance.sort_order = customview_details.key?('sort_order') ? customview_details['sort_order'] : nil
1486
+ if customview_details.key?('criteria') && !customview_details['criteria'].nil?
1487
+ criteria = customview_details['criteria'] # entire criteria
1488
+ $index = 0
1489
+ customview_instance.criteria = construct_criteria(criteria)
1490
+ customview_instance.criteria_condition = customview_instance.criteria.criteria
1491
+ customview_instance.criteria_pattern = customview_instance.criteria.pattern
1492
+ end
1493
+ unless categories.nil?
1494
+ category_instances = []
1495
+ categories.each do |category|
1496
+ cv_category_instance = Operations::ZCRMCustomViewCategory.get_instance
1497
+ cv_category_instance.display_value = categories[category]
1498
+ cv_category_instance.actual_value = category
1499
+ category_instances.push(cv_category_instance)
1500
+ end
1501
+ customview_instance.categories = category_instances
1502
+ end
1503
+ if customview_details.key?('offline')
1504
+ customview_instance.is_off_line = customview_details['offline']
1505
+ end
1506
+ customview_instance
1507
+ end
1508
+ end
1509
+ # THIS CLASS IS USED TO HANDLE ORGANIZATION RELATED FUNCTIONALITY
1510
+ class OrganizationAPIHandler
1511
+ def initialize; end
1512
+
1513
+ def self.get_instance
1514
+ OrganizationAPIHandler.new
1515
+ end
1516
+
1517
+ def get_organization_details
1518
+ handler_ins = APIHandler.get_instance
1519
+ handler_ins.request_url_path = 'org'
1520
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_GET
1521
+ handler_ins.request_api_key = Utility::APIConstants::ORG
1522
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
1523
+ org_json = api_response.response_json[Utility::APIConstants::ORG][0]
1524
+ org_api_helper = OrganizationAPIHandlerHelper.get_instance
1525
+ api_response.data = org_api_helper.get_zcrm_organization(org_json)
1526
+ api_response
1527
+ end
1528
+
1529
+ def get_all_roles
1530
+ handler_ins = APIHandler.get_instance
1531
+ handler_ins.request_url_path = 'settings/roles'
1532
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_GET
1533
+ handler_ins.request_api_key = Utility::APIConstants::ROLES
1534
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
1535
+ roles = bulk_api_response.response_json[Utility::APIConstants::ROLES]
1536
+ role_instances = []
1537
+ org_api_helper = OrganizationAPIHandlerHelper.get_instance
1538
+ roles.each do |role|
1539
+ role_instances.push(org_api_helper.get_zcrm_role(role))
1540
+ end
1541
+ bulk_api_response.data = role_instances
1542
+ bulk_api_response
1543
+ end
1544
+
1545
+ def get_role(role_id)
1546
+ if role_id.nil?
1547
+ raise Utility::ZCRMException.get_instance('get_role', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'role id must be given', 'ROLE ID IS NOT PROVIDED')
1548
+ end
1549
+
1550
+ handler_ins = APIHandler.get_instance
1551
+ handler_ins.request_url_path = 'settings/roles/' + role_id.to_s
1552
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_GET
1553
+ handler_ins.request_api_key = Utility::APIConstants::ROLES
1554
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
1555
+ role = api_response.response_json[Utility::APIConstants::ROLES][0]
1556
+ org_api_helper = OrganizationAPIHandlerHelper.get_instance
1557
+ api_response.data = org_api_helper.get_zcrm_role(role)
1558
+ api_response
1559
+ end
1560
+
1561
+ def get_all_profiles
1562
+ handler_ins = APIHandler.get_instance
1563
+ handler_ins.request_url_path = 'settings/profiles'
1564
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_GET
1565
+ handler_ins.request_api_key = Utility::APIConstants::PROFILES
1566
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
1567
+ profiles = bulk_api_response.response_json[handler_ins.request_api_key]
1568
+ profile_instances = []
1569
+ org_api_helper = OrganizationAPIHandlerHelper.get_instance
1570
+ profiles.each do |profile|
1571
+ profile_instances.push(org_api_helper.get_zcrm_profile(profile))
1572
+ end
1573
+ bulk_api_response.data = profile_instances
1574
+ bulk_api_response
1575
+ end
1576
+
1577
+ def get_profile(profile_id)
1578
+ if profile_id.nil?
1579
+ raise Utility::ZCRMException.get_instance('get_profile', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'profile id must be given', 'PROFILE ID IS NOT PROVIDED')
1580
+ end
1581
+
1582
+ handler_ins = APIHandler.get_instance
1583
+ handler_ins.request_url_path = 'settings/profiles/' + profile_id.to_s
1584
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_GET
1585
+ handler_ins.request_api_key = Utility::APIConstants::PROFILES
1586
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
1587
+ profile = api_response.response_json[handler_ins.request_api_key][0]
1588
+ org_api_helper = OrganizationAPIHandlerHelper.get_instance
1589
+ api_response.data = org_api_helper.get_zcrm_profile(profile)
1590
+ api_response
1591
+ end
1592
+
1593
+ def create_user(user_instance)
1594
+ if user_instance.nil?
1595
+ raise Utility::ZCRMException.get_instance('create_user', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'user instance must be given', 'USER INSTANCE IS NOT PROVIDED')
1596
+ end
1597
+
1598
+ handler_ins = APIHandler.get_instance
1599
+ handler_ins.request_url_path = 'users'
1600
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_POST
1601
+ handler_ins.request_api_key = Utility::APIConstants::USERS
1602
+ org_api_helper = OrganizationAPIHandlerHelper.get_instance
1603
+ handler_ins.request_body = org_api_helper.construct_json_from_user_instance(user_instance)
1604
+ Request::APIRequest.get_instance(handler_ins).get_api_response
1605
+ end
1606
+
1607
+ def update_user(user_instance)
1608
+ if user_instance.nil? || user_instance.id.nil?
1609
+ raise Utility::ZCRMException.get_instance('update_user', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'user instance and id must be given', 'USER INSTANCE OR ID IS NOT PROVIDED')
1610
+ end
1611
+
1612
+ handler_ins = APIHandler.get_instance
1613
+ handler_ins.request_url_path = 'users/' + user_instance.id.to_s
1614
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_PUT
1615
+ handler_ins.request_api_key = Utility::APIConstants::USERS
1616
+ org_api_helper = OrganizationAPIHandlerHelper.get_instance
1617
+ handler_ins.request_body = org_api_helper.construct_json_from_user_instance(user_instance)
1618
+ Request::APIRequest.get_instance(handler_ins).get_api_response
1619
+ end
1620
+
1621
+ def delete_user(user_id)
1622
+ if user_id.nil?
1623
+ raise Utility::ZCRMException.get_instance('delete_user', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'user id must be given', 'USER ID IS NOT PROVIDED')
1624
+ end
1625
+
1626
+ handler_ins = APIHandler.get_instance
1627
+ handler_ins.request_url_path = 'users/' + user_id.to_s
1628
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_DELETE
1629
+ handler_ins.request_api_key = Utility::APIConstants::USERS
1630
+ Request::APIRequest.get_instance(handler_ins).get_api_response
1631
+ end
1632
+
1633
+ def get_user(user_id)
1634
+ if user_id.nil?
1635
+ raise Utility::ZCRMException.get_instance('get_user', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'user id must be given', 'USER ID IS NOT PROVIDED')
1636
+ end
1637
+
1638
+ handler_ins = APIHandler.get_instance
1639
+ handler_ins.request_url_path = 'users/' + user_id.to_s
1640
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_GET
1641
+ handler_ins.request_api_key = Utility::APIConstants::USERS
1642
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
1643
+ org_api_helper = OrganizationAPIHandlerHelper.get_instance
1644
+ api_response.data = org_api_helper.get_zcrm_user(api_response.response_json[Utility::APIConstants::USERS][0])
1645
+ api_response
1646
+ end
1647
+
1648
+ def get_all_users
1649
+ get_users
1650
+ end
1651
+
1652
+ def get_all_deactive_users
1653
+ get_users('DeactiveUsers')
1654
+ end
1655
+
1656
+ def get_all_active_users
1657
+ get_users('ActiveUsers')
1658
+ end
1659
+
1660
+ def get_all_confirmed_users
1661
+ get_users('ConfirmedUsers')
1662
+ end
1663
+
1664
+ def get_all_not_confirmed_users
1665
+ get_users('NotConfirmedUsers')
1666
+ end
1667
+
1668
+ def get_all_deleted_users
1669
+ get_users('DeletedUsers')
1670
+ end
1671
+
1672
+ def get_all_active_confirmed_users
1673
+ get_users('ActiveConfirmedUsers')
1674
+ end
1675
+
1676
+ def get_all_admin_users
1677
+ get_users('AdminUsers')
1678
+ end
1679
+
1680
+ def get_all_active_confirmed_admin_users
1681
+ get_users('ActiveConfirmedAdmins')
1682
+ end
1683
+
1684
+ def get_current_user
1685
+ get_users('CurrentUser')
1686
+ end
1687
+
1688
+ def get_users(user_type = nil)
1689
+ handler_ins = APIHandler.get_instance
1690
+ handler_ins.add_param('type', user_type) unless user_type.nil?
1691
+ handler_ins.request_url_path = 'users'
1692
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_GET
1693
+ handler_ins.request_api_key = Utility::APIConstants::USERS
1694
+ bulk_api_response = ZCRMSDK::Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
1695
+ users_json = bulk_api_response.response_json[Utility::APIConstants::USERS]
1696
+ user_instances = []
1697
+ org_api_helper = OrganizationAPIHandlerHelper.get_instance
1698
+ users_json.each do |user_details|
1699
+ user_instances.push(org_api_helper.get_zcrm_user(user_details))
1700
+ end
1701
+ bulk_api_response.data = user_instances
1702
+ bulk_api_response
1703
+ end
1704
+
1705
+ def search_users_by_criteria(criteria, type)
1706
+ if criteria.nil?
1707
+ raise Utility::ZCRMException.get_instance('search_users_by_criteria', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'criteria must be provided', 'NO CRITERIA PROVIDED')
1708
+ end
1709
+
1710
+ handler_ins = APIHandler.get_instance
1711
+ handler_ins.request_url_path = 'users/search'
1712
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_GET
1713
+ handler_ins.request_api_key = Utility::APIConstants::USERS
1714
+ handler_ins.add_param('criteria', criteria)
1715
+ handler_ins.add_param('type', type) unless type.nil?
1716
+ bulk_api_response = ZCRMSDK::Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
1717
+ users_json = bulk_api_response.response_json[Utility::APIConstants::USERS]
1718
+ user_instances = []
1719
+ org_api_helper = OrganizationAPIHandlerHelper.get_instance
1720
+ users_json.each do |user_details|
1721
+ user_instances.push(org_api_helper.get_zcrm_user(user_details))
1722
+ end
1723
+ bulk_api_response.data = user_instances
1724
+ bulk_api_response
1725
+ end
1726
+
1727
+ def create_organization_taxes(org_tax_instances)
1728
+ if org_tax_instances.length > 100
1729
+ raise Utility::ZCRMException.get_instance('create_organization_taxes', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'org tax count must be less than or equals to 100', 'MORE ORG TAXES PROVIDED')
1730
+ end
1731
+
1732
+ if org_tax_instances.length < 1
1733
+ raise Utility::ZCRMException.get_instance('create_organization_taxes', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'org tax count must be at least 1', 'NO ORG TAX PROVIDED')
1734
+ end
1735
+
1736
+ handler_ins = APIHandler.get_instance
1737
+ handler_ins.request_url_path = 'org/taxes'
1738
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_POST
1739
+ handler_ins.request_api_key = Utility::APIConstants::TAXES
1740
+ org_api_helper = OrganizationAPIHandlerHelper.get_instance
1741
+ data_array = []
1742
+ org_tax_instances.each do |org_tax_instance|
1743
+ if org_tax_instance.id.nil?
1744
+ data_array.push(org_api_helper.get_zcrmorgtax_as_json(org_tax_instance))
1745
+ else
1746
+ raise Utility::ZCRMException.get_instance('Org_tax_Create', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'org tax id must be nil', 'ORG TAX ID PROVIDED')
1747
+ end
1748
+ end
1749
+ request_json = {}
1750
+ request_json[Utility::APIConstants::TAXES] = data_array
1751
+ handler_ins.request_body = request_json
1752
+ bulk_api_response = ZCRMSDK::Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
1753
+ bulk_api_response
1754
+ end
1755
+
1756
+ def update_organization_taxes(org_tax_instances)
1757
+ if org_tax_instances.length > 100
1758
+ raise Utility::ZCRMException.get_instance('update_organization_taxes', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'org tax count must be less than or equals to 100', 'MORE ORG TAXES PROVIDED')
1759
+ end
1760
+
1761
+ if org_tax_instances.length < 1
1762
+ raise Utility::ZCRMException.get_instance('update_organization_taxes', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'org tax count must be at least 1', 'NO ORG TAX PROVIDED')
1763
+ end
1764
+
1765
+ handler_ins = APIHandler.get_instance
1766
+ handler_ins.request_url_path = 'org/taxes'
1767
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_PUT
1768
+ handler_ins.request_api_key = Utility::APIConstants::TAXES
1769
+ org_api_helper = OrganizationAPIHandlerHelper.get_instance
1770
+ data_array = []
1771
+ org_tax_instances.each do |org_tax_instance|
1772
+ if org_tax_instance.id.nil?
1773
+ raise Utility::ZCRMException.get_instance('Org_tax_update', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'org tax id must not be nil', 'ORG TAX ID NOT PROVIDED')
1774
+ else
1775
+ data_array.push(org_api_helper.get_zcrmorgtax_as_json(org_tax_instance))
1776
+ end
1777
+ end
1778
+
1779
+ request_json = {}
1780
+ request_json[Utility::APIConstants::TAXES] = data_array
1781
+ handler_ins.request_body = request_json
1782
+ bulk_api_response = ZCRMSDK::Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
1783
+ bulk_api_response
1784
+ end
1785
+
1786
+ def delete_organization_taxes(org_tax_ids)
1787
+ if org_tax_ids.length > 100
1788
+ raise Utility::ZCRMException.get_instance('delete_organization_taxes', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'org tax count must be less than or equals to 100', 'MORE ORG TAX PROVIDED')
1789
+ end
1790
+
1791
+ if org_tax_ids.length < 1
1792
+ raise Utility::ZCRMException.get_instance('delete_organization_taxes', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'org tax count must be at least 1', 'NO ORG TAX PROVIDED')
1793
+ end
1794
+
1795
+ handler_ins = APIHandler.get_instance
1796
+ handler_ins.request_url_path = 'org/taxes'
1797
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_DELETE
1798
+ handler_ins.request_api_key = Utility::APIConstants::TAXES
1799
+ ids_as_string = ''
1800
+ org_tax_ids.each do |org_tax_id|
1801
+ ids_as_string += org_tax_id.to_s + ','
1802
+ end
1803
+
1804
+ handler_ins.add_param('ids', ids_as_string)
1805
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
1806
+ bulk_api_response
1807
+ end
1808
+
1809
+ def delete_organization_tax(orgtax_id)
1810
+ if orgtax_id.nil?
1811
+ raise Utility::ZCRMException.get_instance('delete_organization_tax', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'org tax id must be given', 'NO ORG TAX ID PROVIDED')
1812
+ end
1813
+
1814
+ handler_ins = APIHandler.get_instance
1815
+ handler_ins.request_url_path = 'org/taxes/' + orgtax_id.to_s
1816
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_DELETE
1817
+ handler_ins.request_api_key = Utility::APIConstants::TAXES
1818
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
1819
+ api_response
1820
+ end
1821
+
1822
+ def get_organization_taxes
1823
+ handler_ins = APIHandler.get_instance
1824
+ handler_ins.request_url_path = 'org/taxes'
1825
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_GET
1826
+ handler_ins.request_api_key = Utility::APIConstants::TAXES
1827
+ bulk_api_response = ZCRMSDK::Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
1828
+ org_taxes_json = bulk_api_response.response_json[Utility::APIConstants::TAXES]
1829
+ org_taxes_instances = []
1830
+ org_api_helper = OrganizationAPIHandlerHelper.get_instance
1831
+ org_taxes_json.each do |org_tax|
1832
+ org_taxes_instances.push(org_api_helper.get_zcrm_org_tax_instance(org_tax))
1833
+ end
1834
+ bulk_api_response.data = org_taxes_instances
1835
+ bulk_api_response
1836
+ end
1837
+
1838
+ def get_organization_tax(org_tax_id)
1839
+ if org_tax_id.nil?
1840
+ raise Utility::ZCRMException.get_instance('get_organization_tax', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'org tax id must be given', 'NO ORG TAX ID PROVIDED')
1841
+ end
1842
+
1843
+ handler_ins = APIHandler.get_instance
1844
+ handler_ins.request_url_path = 'org/taxes/' + org_tax_id.to_s
1845
+ handler_ins.request_method = Utility::APIConstants::REQUEST_METHOD_GET
1846
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
1847
+ org_api_helper = OrganizationAPIHandlerHelper.get_instance
1848
+ api_response.data = org_api_helper.get_zcrm_org_tax_instance(api_response.response_json[Utility::APIConstants::TAXES][0])
1849
+ api_response
1850
+ end
1851
+ end
1852
+ # THIS CLASS SERVES THE OrganizationAPIHandler CLASS CONSTRUCTING JSON BODY AND INSTANCES
1853
+ class OrganizationAPIHandlerHelper
1854
+ def initialize; end
1855
+
1856
+ def self.get_instance
1857
+ OrganizationAPIHandlerHelper.new
1858
+ end
1859
+
1860
+ def get_zcrm_user_customizeinfo(customize_info)
1861
+ customize_info_instance = Operations::ZCRMUserCustomizeInfo.get_instance
1862
+ customize_info_instance.notes_desc = customize_info['notes_desc']
1863
+ customize_info_instance.is_to_show_right_panel = customize_info.key?('show_right_panel') ? customize_info['show_right_panel'] == true : nil
1864
+ customize_info_instance.is_bc_view = customize_info['bc_view']
1865
+ customize_info_instance.is_to_show_home = customize_info.key?('show_home') ? customize_info['show_home'] == true : nil
1866
+ customize_info_instance.is_to_show_detail_view = customize_info.key?('show_detail_view') ? customize_info['show_detail_view'] == true : nil
1867
+ customize_info_instance.unpin_recent_item = customize_info['unpin_recent_item']
1868
+ customize_info_instance
1869
+ end
1870
+
1871
+ def get_zcrm_org_tax_instance(org_tax)
1872
+ org_tax_instance = Operations::ZCRMOrgTax.get_instance(org_tax['id'], org_tax['name'])
1873
+ org_tax_instance.display_label = org_tax['display_label']
1874
+ org_tax_instance.value = org_tax['value']
1875
+ org_tax_instance
1876
+ end
1877
+
1878
+ def get_zcrm_user_theme(user_theme_info)
1879
+ user_theme_instance = Operations::ZCRMUserTheme.get_instance
1880
+ user_theme_instance.normal_tab_font_color = user_theme_info['normal_tab']['font_color']
1881
+ user_theme_instance.normal_tab_background = user_theme_info['normal_tab']['background']
1882
+ user_theme_instance.selected_tab_font_color = user_theme_info['selected_tab']['font_color']
1883
+ user_theme_instance.selected_tab_background = user_theme_info['selected_tab']['background']
1884
+ user_theme_instance.new_background = user_theme_info['new_background']
1885
+ user_theme_instance.background = user_theme_info['background']
1886
+ user_theme_instance.screen = user_theme_info['screen']
1887
+ user_theme_instance.type = user_theme_info['type']
1888
+ user_theme_instance
1889
+ end
1890
+
1891
+ def get_zcrmorgtax_as_json(zcrmorgtax_instance)
1892
+ orgtax_as_json = {}
1893
+ unless zcrmorgtax_instance.id.nil?
1894
+ orgtax_as_json['id'] = zcrmorgtax_instance.id.to_s
1895
+ end
1896
+ unless zcrmorgtax_instance.name.nil?
1897
+ orgtax_as_json['name'] = zcrmorgtax_instance.name
1898
+ end
1899
+ unless zcrmorgtax_instance.display_label.nil?
1900
+ orgtax_as_json['display_label'] = zcrmorgtax_instance.display_label
1901
+ end
1902
+ unless zcrmorgtax_instance.value.nil?
1903
+ orgtax_as_json['value'] = zcrmorgtax_instance.value
1904
+ end
1905
+ unless zcrmorgtax_instance.sequence_number.nil?
1906
+ orgtax_as_json['sequence_number'] = zcrmorgtax_instance.sequence_number
1907
+ end
1908
+ orgtax_as_json
1909
+ end
1910
+
1911
+ def construct_json_from_user_instance(user_instance)
1912
+ user_info_json = {}
1913
+ unless user_instance.role.nil?
1914
+ user_info_json['role'] = user_instance.role.id.to_s
1915
+ end
1916
+ unless user_instance.profile.nil?
1917
+ user_info_json['profile'] = user_instance.profile.id.to_s
1918
+ end
1919
+ unless user_instance.country.nil?
1920
+ user_info_json['country'] = user_instance.country
1921
+ end
1922
+ user_info_json['name'] = user_instance.name unless user_instance.name.nil?
1923
+ user_info_json['city'] = user_instance.city unless user_instance.city.nil?
1924
+ unless user_instance.signature.nil?
1925
+ user_info_json['signature'] = user_instance.signature
1926
+ end
1927
+ unless user_instance.name_format.nil?
1928
+ user_info_json['name_format'] = user_instance.name_format
1929
+ end
1930
+ unless user_instance.language.nil?
1931
+ user_info_json['language'] = user_instance.language
1932
+ end
1933
+ unless user_instance.locale.nil?
1934
+ user_info_json['locale'] = user_instance.locale
1935
+ end
1936
+ unless user_instance.is_personal_account.nil?
1937
+ user_info_json['personal_account'] = user_instance.is_personal_account == true
1938
+ end
1939
+ unless user_instance.default_tab_group.nil?
1940
+ user_info_json['default_tab_group'] = user_instance.default_tab_group
1941
+ end
1942
+ unless user_instance.street.nil?
1943
+ user_info_json['street'] = user_instance.street
1944
+ end
1945
+ unless user_instance.alias_aka.nil?
1946
+ user_info_json['alias'] = user_instance.alias_aka
1947
+ end
1948
+ unless user_instance.state.nil?
1949
+ user_info_json['state'] = user_instance.state
1950
+ end
1951
+ unless user_instance.country_locale.nil?
1952
+ user_info_json['country_locale'] = user_instance.country_locale
1953
+ end
1954
+ user_info_json['fax'] = user_instance.fax unless user_instance.fax.nil?
1955
+ unless user_instance.first_name.nil?
1956
+ user_info_json['first_name'] = user_instance.first_name
1957
+ end
1958
+ unless user_instance.email.nil?
1959
+ user_info_json['email'] = user_instance.email
1960
+ end
1961
+ user_info_json['zip'] = user_instance.zip unless user_instance.zip.nil?
1962
+ unless user_instance.decimal_separator.nil?
1963
+ user_info_json['decimal_separator'] = user_instance.decimal_separator
1964
+ end
1965
+ unless user_instance.reporting_to.nil?
1966
+ user_info_json['Reporting_To'] = get_reporting_to_as_json(user_instance.reporting_to)
1967
+ end
1968
+ unless user_instance.website.nil?
1969
+ user_info_json['website'] = user_instance.website
1970
+ end
1971
+ unless user_instance.time_format.nil?
1972
+ user_info_json['time_format'] = user_instance.time_format
1973
+ end
1974
+ unless user_instance.mobile.nil?
1975
+ user_info_json['mobile'] = user_instance.mobile
1976
+ end
1977
+ unless user_instance.last_name.nil?
1978
+ user_info_json['last_name'] = user_instance.last_name
1979
+ end
1980
+ unless user_instance.time_zone.nil?
1981
+ user_info_json['time_zone'] = user_instance.time_zone
1982
+ end
1983
+ unless user_instance.phone.nil?
1984
+ user_info_json['phone'] = user_instance.phone
1985
+ end
1986
+ user_info_json['dob'] = user_instance.dob unless user_instance.dob.nil?
1987
+ unless user_instance.date_format.nil?
1988
+ user_info_json['date_format'] = user_instance.date_format
1989
+ end
1990
+ unless user_instance.status.nil?
1991
+ user_info_json['status'] = user_instance.status
1992
+ end
1993
+ custom_fields_data = user_instance.field_apiname_vs_value
1994
+ unless custom_fields_data.nil?
1995
+ custom_fields_data.each do |key|
1996
+ user_info_json[key] = custom_fields_data[key]
1997
+ end
1998
+ end
1999
+ Utility::CommonUtil.create_api_supported_input_json(user_info_json, Utility::APIConstants::USERS)
2000
+ end
2001
+
2002
+ def get_reporting_to_as_json(reporting_to_details)
2003
+ reporting_to = {}
2004
+ reporting_to['id'] = reporting_to_details.id
2005
+ reporting_to
2006
+ end
2007
+
2008
+ def get_zcrm_role(role_details)
2009
+ role_instance = Operations::ZCRMRole.get_instance(role_details['id'], role_details['name'])
2010
+ role_instance.display_label = role_details['display_label']
2011
+ role_instance.description = role_details['description']
2012
+ unless role_details['forecast_manager'].nil?
2013
+ role_instance.forecast_manager = Operations::ZCRMUser.get_instance(role_details['forecast_manager']['id'], role_details['forecast_manager']['name'])
2014
+ end
2015
+ role_instance.is_admin = role_details['admin_user'] == true
2016
+ role_instance.is_share_with_peers = role_details['share_with_peers'] == true
2017
+ if role_details.key?('reporting_to') && !role_details['reporting_to'].nil?
2018
+ role_instance.reporting_to = Operations::ZCRMUser.get_instance(role_details['reporting_to']['id'], role_details['reporting_to']['name'])
2019
+ end
2020
+ role_instance
2021
+ end
2022
+
2023
+ def get_zcrm_profile(profile_details)
2024
+ profile_instance = Operations::ZCRMProfile.get_instance(profile_details['id'], profile_details['name'])
2025
+ profile_instance.created_time = profile_details['created_time']
2026
+ profile_instance.modified_time = profile_details['modified_time']
2027
+ profile_instance.description = profile_details['description']
2028
+ profile_instance.category = profile_details['category']
2029
+ unless profile_details['modified_by'].nil?
2030
+ profile_instance.modified_by = Operations::ZCRMUser.get_instance(profile_details['modified_by']['id'], profile_details['modified_by']['name'])
2031
+ end
2032
+ unless profile_details['created_by'].nil?
2033
+ profile_instance.created_by = Operations::ZCRMUser.get_instance(profile_details['created_by']['id'], profile_details['created_by']['name'])
2034
+ end
2035
+ if profile_details.key?('permissions_details')
2036
+ permissions = profile_details['permissions_details']
2037
+ unless permissions.nil?
2038
+ permissions.each do |permission|
2039
+ permission_ins = Operations::ZCRMPermission.get_instance(permission['name'], permission['id'])
2040
+ permission_ins.display_label = permission['display_label']
2041
+ permission_ins.module_api_name = permission['module']
2042
+ permission_ins.is_enabled = permission['enabled'] == true
2043
+ profile_instance.permissions.push(permission_ins)
2044
+ end
2045
+ end
2046
+ end
2047
+ if profile_details.key?('sections')
2048
+ sections = profile_details['sections']
2049
+ unless sections.nil?
2050
+ sections.each do |section|
2051
+ profile_section_instance = Operations::ZCRMProfileSection.get_instance(section['name'])
2052
+ if section.key?('categories')
2053
+ categories = section['categories']
2054
+ unless categories.nil?
2055
+ categories.each do |category|
2056
+ category_ins = Operations::ZCRMProfileCategory.get_instance(category['name'])
2057
+ category_ins.display_label = category['display_label']
2058
+ category_ins.permission_ids = category['permissions_details']
2059
+ category_ins.module_api_name = category.key?('module') ? category['module'] : nil
2060
+ profile_section_instance.categories.push(category_ins)
2061
+ end
2062
+ end
2063
+ end
2064
+ profile_instance.sections.push(profile_section_instance)
2065
+ end
2066
+ end
2067
+ end
2068
+ profile_instance
2069
+ end
2070
+
2071
+ def get_zcrm_organization(org_details)
2072
+ org_instance = Org::ZCRMOrganization.get_instance(org_details['company_name'], org_details['id'])
2073
+ org_instance.alias_aka = org_details['alias']
2074
+ org_instance.city = org_details['city']
2075
+ org_instance.country = org_details['country']
2076
+ org_instance.country_code = org_details['country_code']
2077
+ org_instance.currency_locale = org_details['currency_locale']
2078
+ org_instance.currency_symbol = org_details['currency_symbol']
2079
+ org_instance.currency = org_details['currency']
2080
+ org_instance.description = org_details['description']
2081
+ org_instance.employee_count = org_details['employee_count']
2082
+ org_instance.zia_portal_id = org_details['zia_portal_id']
2083
+ org_instance.photo_id = org_details['photo_id']
2084
+ org_instance.fax = org_details['fax']
2085
+ org_instance.privacy_settings = org_details['privacy_settings']
2086
+ org_instance.is_gapps_enabled = org_details['gapps_enabled'] == true
2087
+ org_instance.iso_code = org_details['iso_code']
2088
+ org_instance.mc_status = org_details['mc_status']
2089
+ org_instance.mobile = org_details['mobile']
2090
+ org_instance.phone = org_details['phone']
2091
+ org_instance.primary_email = org_details['primary_email']
2092
+ org_instance.primary_zuid = org_details['primary_zuid']
2093
+ org_instance.state = org_details['state']
2094
+ org_instance.street = org_details['street']
2095
+ org_instance.time_zone = org_details['time_zone']
2096
+ org_instance.website = org_details['website']
2097
+ org_instance.zgid = org_details['zgid']
2098
+ org_instance.zip_code = org_details['zip']
2099
+ unless org_details['license_details'].nil?
2100
+ license_details = org_details['license_details']
2101
+ org_instance.is_paid_account = license_details['paid'] == true
2102
+ org_instance.paid_type = license_details['paid_type']
2103
+ org_instance.paid_expiry = license_details['paid_expiry']
2104
+ org_instance.trial_type = license_details['trial_type']
2105
+ org_instance.trial_expiry = license_details['trial_expiry']
2106
+ org_instance.users_license_purchased = license_details['users_license_purchased']
2107
+ end
2108
+ org_instance
2109
+ end
2110
+
2111
+ def get_zcrm_user(user_details)
2112
+ user_instance = Operations::ZCRMUser.get_instance(user_details['id'], user_details.key?('name') ? user_details['name'] : nil)
2113
+ user_instance.is_microsoft = user_details['microsoft'] == true
2114
+ user_instance.country = user_details.key?('country') ? user_details['country'] : nil
2115
+ user_instance.role = Operations::ZCRMRole.get_instance(user_details['role']['id'], user_details['role']['name'])
2116
+ if user_details.key?('customize_info')
2117
+ user_instance.customize_info = get_zcrm_user_customizeinfo(user_details['customize_info'])
2118
+ end
2119
+ user_instance.city = user_details['city']
2120
+ user_instance.signature = user_details.key?('signature') ? user_details['signature'] : nil
2121
+ user_instance.name_format = user_details.key?('name_format') ? user_details['name_format'] : nil
2122
+ user_instance.language = user_details['language']
2123
+ user_instance.locale = user_details['locale']
2124
+ user_instance.is_personal_account = user_details.key?('personal_account') ? user_details['personal_account'] == true : nil
2125
+ user_instance.default_tab_group = user_details.key?('default_tab_group') ? user_details['default_tab_group'] : nil
2126
+ user_instance.alias_aka = user_details['alias']
2127
+ user_instance.street = user_details['street']
2128
+ user_instance.city = user_details['city']
2129
+ if user_details.key?('theme')
2130
+ user_instance.theme = get_zcrm_user_theme(user_details['theme'])
2131
+ end
2132
+ user_instance.state = user_details['state']
2133
+ user_instance.country_locale = user_details['country_locale']
2134
+ user_instance.fax = user_details['fax']
2135
+ user_instance.first_name = user_details['first_name']
2136
+ user_instance.email = user_details['email']
2137
+ user_instance.zip = user_details['zip']
2138
+ user_instance.decimal_separator = user_details.key?('decimal_separator') ? user_details['decimal_separator'] : nil
2139
+ user_instance.website = user_details['website']
2140
+ user_instance.time_format = user_details['time_format']
2141
+ user_instance.profile = Operations::ZCRMProfile.get_instance(user_details['profile']['id'], user_details['profile']['name'])
2142
+ user_instance.mobile = user_details['mobile']
2143
+ user_instance.last_name = user_details['last_name']
2144
+ user_instance.time_zone = user_details['time_zone']
2145
+ user_instance.zuid = user_details['zuid']
2146
+ user_instance.is_confirm = user_details['confirm'] == true
2147
+ user_instance.full_name = user_details['full_name']
2148
+ user_instance.phone = user_details['phone']
2149
+ user_instance.dob = user_details['dob']
2150
+ user_instance.offset = user_details['offset']
2151
+ user_instance.date_format = user_details['date_format']
2152
+ user_instance.status = user_details['status']
2153
+ if user_details.key?('territories')
2154
+ user_instance.territories = user_details['territories']
2155
+ end
2156
+ if user_details.key?('Reporting_To')
2157
+ unless user_details['Reporting_To'].nil?
2158
+ reporting_to = user_details['Reporting_To']
2159
+ user_instance.reporting_to = Operations::ZCRMUser.get_instance(reporting_to['id'], reporting_to['name'])
2160
+ end
2161
+ end
2162
+ if user_details.key?('Currency')
2163
+ user_instance.currency = user_details['Currency']
2164
+ end
2165
+ created_by = user_details['created_by']
2166
+ modified_by = user_details['Modified_By']
2167
+ user_instance.created_by = Operations::ZCRMUser.get_instance(created_by['id'], created_by['name'])
2168
+ user_instance.modified_by = Operations::ZCRMUser.get_instance(modified_by['id'], modified_by['name'])
2169
+ user_instance.is_online = user_details['Isonline']
2170
+ user_instance.created_time = user_details['created_time']
2171
+ user_instance.modified_time = user_details['Modified_Time']
2172
+ user_instance
2173
+ end
2174
+ end
2175
+ # THIS CLASS IS USED TO HANDLE TAG RELATED FUNCTIONALITY
2176
+ class TagAPIHandler < APIHandler
2177
+ def initialize(module_instance = nil)
2178
+ @module_instance = module_instance
2179
+ end
2180
+
2181
+ def self.get_instance(module_ins = nil)
2182
+ TagAPIHandler.new(module_ins)
2183
+ end
2184
+
2185
+ def get_tags
2186
+ handler_ins = APIHandler.get_instance
2187
+ handler_ins.request_url_path = 'settings/tags'
2188
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_GET
2189
+ handler_ins.request_api_key = ZCRMSDK::Utility::APIConstants::TAG
2190
+ handler_ins.add_param('module', @module_instance.api_name)
2191
+ bulk_api_response = ZCRMSDK::Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
2192
+ tags_json = bulk_api_response.response_json.dig(ZCRMSDK::Utility::APIConstants::TAG)
2193
+ tag_list = []
2194
+ tag_helper = TagAPIHandlerHelper.get_instance
2195
+ tags_json.each do |tag_json|
2196
+ tag_ins = Operations::ZCRMTag.get_instance(tag_json['id'], tag_json['name'])
2197
+ tag_list.push(tag_helper.get_zcrmtag(tag_ins, tag_json))
2198
+ end
2199
+ bulk_api_response.data = tag_list
2200
+ bulk_api_response
2201
+ end
2202
+
2203
+ def get_tag_count(tag_id)
2204
+ if tag_id.nil?
2205
+ raise Utility::ZCRMException.get_instance('get_tag_count', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'Tag id must be given', 'NO TAG ID PROVIDED')
2206
+ end
2207
+
2208
+ handler_ins = APIHandler.get_instance
2209
+ tag_id = tag_id.to_s
2210
+ handler_ins.request_url_path = 'settings/tags/' + tag_id + '/actions/records_count'
2211
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_GET
2212
+ handler_ins.request_api_key = ZCRMSDK::Utility::APIConstants::TAG
2213
+ handler_ins.add_param('module', @module_instance.api_name)
2214
+ api_response = ZCRMSDK::Request::APIRequest.get_instance(handler_ins).get_api_response
2215
+ tag_json = api_response.response_json
2216
+ tag_ins = Operations::ZCRMTag.get_instance(tag_id)
2217
+ tag_helper = TagAPIHandlerHelper.get_instance
2218
+ api_response.data = tag_helper.get_zcrmtag(tag_ins, tag_json)
2219
+ api_response
2220
+ end
2221
+
2222
+ def create_tags(tag_list)
2223
+ if tag_list.length > 50
2224
+ raise Utility::ZCRMException.get_instance('create_tags', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'Tag count must be less than or equals to 50', 'MORE TAGS PROVIDED')
2225
+ end
2226
+
2227
+ if tag_list.length < 1
2228
+ raise Utility::ZCRMException.get_instance('create_tags', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'Tag count must at least be 1', 'NO TAGS PROVIDED')
2229
+ end
2230
+
2231
+ handler_ins = APIHandler.get_instance
2232
+ handler_ins.request_url_path = 'settings/tags'
2233
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_POST
2234
+ handler_ins.request_api_key = ZCRMSDK::Utility::APIConstants::TAG
2235
+ handler_ins.add_param('module', @module_instance.api_name)
2236
+ data_array = []
2237
+ tag_helper = TagAPIHandlerHelper.get_instance
2238
+ tag_list.each do |tag|
2239
+ if tag.id.nil?
2240
+ data_array.push(tag_helper.construct_json_for_tag(tag))
2241
+ else
2242
+ raise Utility::ZCRMException.get_instance('Tags_Create', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'tag id must be nil', 'TAG ID PROVIDED')
2243
+ end
2244
+ end
2245
+ request_json = {}
2246
+ request_json[Utility::APIConstants::TAG] = data_array
2247
+ handler_ins.request_body = request_json
2248
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
2249
+ created_tags = []
2250
+ entity_responses = bulk_api_response.bulk_entity_response
2251
+ length = entity_responses.length
2252
+ length -= 1
2253
+ (0..length).each do |i|
2254
+ entity_response_ins = entity_responses[i]
2255
+ next unless entity_response_ins.status == Utility::APIConstants::STATUS_SUCCESS
2256
+
2257
+ tag_create_details = entity_response_ins.details
2258
+ new_tag = tag_list[i]
2259
+ tag_helper = TagAPIHandlerHelper.get_instance
2260
+ tag_helper.get_zcrmtag(new_tag, tag_create_details)
2261
+ created_tags.push(new_tag)
2262
+ entity_response_ins.data = new_tag
2263
+ end
2264
+ bulk_api_response.data = created_tags
2265
+ bulk_api_response
2266
+ end
2267
+
2268
+ def update_tags(tag_list)
2269
+ if tag_list.length > 50
2270
+ raise Utility::ZCRMException.get_instance('update_tags', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'Tag count must be less than or equals to 50', 'MORE TAGS PROVIDED')
2271
+ end
2272
+
2273
+ if tag_list.length < 1
2274
+ raise Utility::ZCRMException.get_instance('update_tags', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'Tag count must at least be 1', 'NO TAGS PROVIDED')
2275
+ end
2276
+
2277
+ handler_ins = APIHandler.get_instance
2278
+ handler_ins.request_url_path = 'settings/tags'
2279
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_PUT
2280
+ handler_ins.request_api_key = ZCRMSDK::Utility::APIConstants::TAG
2281
+ handler_ins.add_param('module', @module_instance.api_name)
2282
+ data_array = []
2283
+ tag_helper = TagAPIHandlerHelper.get_instance
2284
+ tag_list.each do |tag|
2285
+ if !tag.id.nil?
2286
+ data_array.push(tag_helper.construct_json_for_tag(tag))
2287
+ else
2288
+ raise Utility::ZCRMException.get_instance('Tags_update', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'tag id must not be nil', 'TAG ID NOT PROVIDED')
2289
+ end
2290
+ end
2291
+ request_json = {}
2292
+ request_json[Utility::APIConstants::TAG] = data_array
2293
+ handler_ins.request_body = request_json
2294
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
2295
+ updated_tags = []
2296
+ entity_responses = bulk_api_response.bulk_entity_response
2297
+ length = entity_responses.length
2298
+ length -= 1
2299
+ (0..length).each do |i|
2300
+ entity_response_ins = entity_responses[i]
2301
+ next unless entity_response_ins.status == Utility::APIConstants::STATUS_SUCCESS
2302
+
2303
+ tag_update_details = entity_response_ins.details
2304
+ new_tag = tag_list[i]
2305
+ tag_helper = TagAPIHandlerHelper.get_instance
2306
+ tag_helper.get_zcrmtag(new_tag, tag_update_details)
2307
+ updated_tags.push(new_tag)
2308
+ entity_response_ins.data = new_tag
2309
+ end
2310
+ bulk_api_response.data = updated_tags
2311
+ bulk_api_response
2312
+ end
2313
+
2314
+ def add_tags_to_multiple_records(tag_list, record_list)
2315
+ if tag_list.length > 50
2316
+ raise Utility::ZCRMException.get_instance('add_tags_to_multiple_records', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'Tag count must be less than or equals to 50', 'MORE TAGS PROVIDED')
2317
+ end
2318
+
2319
+ if tag_list.length < 1
2320
+ raise Utility::ZCRMException.get_instance('add_tags_to_multiple_records', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'Tag count must at least be 1', 'NO TAGS PROVIDED')
2321
+ end
2322
+
2323
+ if record_list.length > 100
2324
+ raise Utility::ZCRMException.get_instance('add_tags_to_multiple_records', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'records count must be less than or equals to 100', 'MORE RECORDS PROVIDED')
2325
+ end
2326
+
2327
+ if record_list.length < 1
2328
+ raise Utility::ZCRMException.get_instance('add_tags_to_multiple_records', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'records must at least be 1', 'NO RECORDS PROVIDED')
2329
+ end
2330
+
2331
+ record_ids_as_string = ''
2332
+ record_list.each do |record_id|
2333
+ record_ids_as_string += record_id.to_s + ','
2334
+ end
2335
+ handler_ins = APIHandler.get_instance
2336
+ handler_ins.request_url_path = @module_instance.api_name + '/actions/add_tags'
2337
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_POST
2338
+ handler_ins.request_api_key = ZCRMSDK::Utility::APIConstants::DATA
2339
+ handler_ins.add_param('ids', record_ids_as_string)
2340
+ tag_names_as_string = ''
2341
+ tag_list.each do |tag_name|
2342
+ tag_names_as_string += tag_name.to_s + ','
2343
+ end
2344
+ handler_ins.add_param('tag_names', tag_names_as_string)
2345
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
2346
+ entity_responses = bulk_api_response.bulk_entity_response
2347
+ length = entity_responses.length
2348
+ length -= 1
2349
+ records = []
2350
+ (0..length).each do |i|
2351
+ entity_response_ins = entity_responses[i]
2352
+ next unless entity_response_ins.status == Utility::APIConstants::STATUS_SUCCESS
2353
+ tag_added_details = entity_response_ins.details
2354
+ record = Operations::ZCRMRecord.get_instance(@module_instance.api_name, tag_added_details['id'])
2355
+ tag_added_details['tags'].each do |tag_name|
2356
+ record.tag_list.push(Operations::ZCRMTag.get_instance(nil, tag_name))
2357
+ end
2358
+ records.push(record)
2359
+ entity_response_ins.data = record
2360
+ end
2361
+ bulk_api_response.data = records
2362
+ bulk_api_response
2363
+ end
2364
+
2365
+ def remove_tags_from_multiple_records(tag_list, record_list)
2366
+ if tag_list.length > 50
2367
+ raise Utility::ZCRMException.get_instance('remove_tags_from_multiple_records', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'Tag count must be less than or equals to 50', 'MORE TAGS PROVIDED')
2368
+ end
2369
+
2370
+ if tag_list.length < 1
2371
+ raise Utility::ZCRMException.get_instance('remove_tags_from_multiple_records', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'Tag count must at least be 1', 'NO TAGS PROVIDED')
2372
+ end
2373
+
2374
+ if record_list.length > 100
2375
+ raise Utility::ZCRMException.get_instance('remove_tags_from_multiple_records', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'records count must be less than or equals to 100', 'MORE RECORDS PROVIDED')
2376
+ end
2377
+
2378
+ if record_list.length < 1
2379
+ raise Utility::ZCRMException.get_instance('remove_tags_from_multiple_records', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'records must at least be 1', 'NO RECORDS PROVIDED')
2380
+ end
2381
+
2382
+ record_ids_as_string = ''
2383
+ record_list.each do |record_id|
2384
+ record_ids_as_string += record_id.to_s + ','
2385
+ end
2386
+
2387
+ handler_ins = APIHandler.get_instance
2388
+ handler_ins.request_url_path = @module_instance.api_name + '/actions/remove_tags'
2389
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_POST
2390
+ handler_ins.request_api_key = ZCRMSDK::Utility::APIConstants::DATA
2391
+ handler_ins.add_param('ids', record_ids_as_string)
2392
+ tag_names_as_string = ''
2393
+ tag_list.each do |tag_name|
2394
+ tag_names_as_string += tag_name.to_s + ','
2395
+ end
2396
+
2397
+ handler_ins.add_param('tag_names', tag_names_as_string)
2398
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
2399
+ entity_responses = bulk_api_response.bulk_entity_response
2400
+ length = entity_responses.length
2401
+ length -= 1
2402
+ records = []
2403
+ (0..length).each do |i|
2404
+ entity_response_ins = entity_responses[i]
2405
+ next unless entity_response_ins.status == Utility::APIConstants::STATUS_SUCCESS
2406
+
2407
+ tag_added_details = entity_response_ins.details
2408
+ record = Operations::ZCRMRecord.get_instance(@module_instance.api_name, tag_added_details['id'])
2409
+ tag_added_details['tags'].each do |tag_name|
2410
+ record.tag_list.push(Operations::ZCRMTag.get_instance(nil, tag_name))
2411
+ end
2412
+ records.push(record)
2413
+ entity_response_ins.data = record
2414
+ end
2415
+ bulk_api_response.data = records
2416
+ bulk_api_response
2417
+ end
2418
+
2419
+ def add_tags(record, tag_list)
2420
+ if tag_list.length > 10
2421
+ raise Utility::ZCRMException.get_instance('add_tags', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'Tag count must be less than or equals to 10', 'MORE TAGS PROVIDED')
2422
+ end
2423
+
2424
+ if tag_list.length < 1
2425
+ raise Utility::ZCRMException.get_instance('add_tags', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'Tag count must at least be 1', 'NO TAGS PROVIDED')
2426
+ end
2427
+
2428
+ if record.nil? || record.entity_id.nil?
2429
+ raise Utility::ZCRMException.get_instance('add_tags', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, ' record instance and record id must be given', 'RECORD or RECORD ID NOT PROVIDED')
2430
+ end
2431
+
2432
+ handler_ins = APIHandler.get_instance
2433
+ handler_ins.request_url_path = record.module_api_name + '/' + record.entity_id + '/actions/add_tags'
2434
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_POST
2435
+ handler_ins.request_api_key = ZCRMSDK::Utility::APIConstants::DATA
2436
+ tag_names_as_string = ''
2437
+ tag_list.each do |tag_name|
2438
+ tag_names_as_string += tag_name.to_s + ','
2439
+ end
2440
+ handler_ins.add_param('tag_names', tag_names_as_string)
2441
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
2442
+ response_details = api_response.response_json.dig(Utility::APIConstants::DATA, 0, 'details')
2443
+ response_details['tags'].each do |tag_name|
2444
+ record.tag_list.push(Operations::ZCRMTag.get_instance(nil, tag_name))
2445
+ end
2446
+ api_response.data = record
2447
+ api_response
2448
+ end
2449
+
2450
+ def remove_tags(record, tag_list)
2451
+ if tag_list.length > 10
2452
+ raise Utility::ZCRMException.get_instance('remove_tags', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'Tag count must be less than or equals to 10', 'MORE TAGS PROVIDED')
2453
+ end
2454
+
2455
+ if tag_list.length < 1
2456
+ raise Utility::ZCRMException.get_instance('remove_tags', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'Tag count must be at least 1', 'NO TAGS PROVIDED')
2457
+ end
2458
+
2459
+ if record.nil? || record.entity_id.nil?
2460
+ raise Utility::ZCRMException.get_instance('remove_tags', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, ' record instance and record id must be given', 'RECORD or RECORD ID NOT PROVIDED')
2461
+ end
2462
+
2463
+ handler_ins = APIHandler.get_instance
2464
+ handler_ins.request_url_path = record.module_api_name + '/' + record.entity_id + '/actions/remove_tags'
2465
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_POST
2466
+ handler_ins.request_api_key = ZCRMSDK::Utility::APIConstants::DATA
2467
+ tag_names_as_string = ''
2468
+ tag_list.each do |tag_name|
2469
+ tag_names_as_string += tag_name.to_s + ','
2470
+ end
2471
+ handler_ins.add_param('tag_names', tag_names_as_string)
2472
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
2473
+ response_details = api_response.response_json.dig(Utility::APIConstants::DATA, 0, 'details')
2474
+ response_details['tags'].each do |tag_name|
2475
+ record.tag_list.push(Operations::ZCRMTag.get_instance(nil, tag_name))
2476
+ end
2477
+ api_response.data = record
2478
+ api_response
2479
+ end
2480
+
2481
+ def delete(tag_id)
2482
+ if tag_id.nil?
2483
+ raise Utility::ZCRMException.get_instance('delete', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, ' tag id must be given', 'TAG ID NOT PROVIDED')
2484
+ end
2485
+
2486
+ handler_ins = APIHandler.get_instance
2487
+ handler_ins.request_url_path = 'settings/tags/' + tag_id.to_s
2488
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_DELETE
2489
+ handler_ins.request_api_key = ZCRMSDK::Utility::APIConstants::TAG
2490
+ api_response = ZCRMSDK::Request::APIRequest.get_instance(handler_ins).get_api_response
2491
+ api_response
2492
+ end
2493
+
2494
+ def merge(tag_id, merge_tag_id)
2495
+ if tag_id.nil? || merge_tag_id.nil?
2496
+ raise Utility::ZCRMException.get_instance('merge', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, ' tag id and merge tag id must be given', 'TAG ID OR MERGE TAG ID NOT PROVIDED')
2497
+ end
2498
+
2499
+ handler_ins = APIHandler.get_instance
2500
+ handler_ins.request_url_path = 'settings/tags/' + merge_tag_id.to_s + '/actions/merge'
2501
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_POST
2502
+ handler_ins.request_api_key = ZCRMSDK::Utility::APIConstants::TAG
2503
+ tag_json = {}
2504
+ tag_json['conflict_id'] = tag_id.to_s
2505
+ handler_ins.request_body = handler_ins.request_body = Utility::CommonUtil.create_api_supported_input_json(tag_json, Utility::APIConstants::TAG)
2506
+ api_response = ZCRMSDK::Request::APIRequest.get_instance(handler_ins).get_api_response
2507
+ response_details = api_response.response_json.dig(Utility::APIConstants::TAG, 0, 'details')
2508
+ tag = Operations::ZCRMTag.get_instance(response_details['id'])
2509
+ tag_helper = TagAPIHandlerHelper.get_instance
2510
+ tag_helper.get_zcrmtag(tag, response_details)
2511
+ api_response.data = tag
2512
+ api_response
2513
+ end
2514
+
2515
+ def update(tag)
2516
+ if tag.nil? || tag.id.nil?
2517
+ raise Utility::ZCRMException.get_instance('update', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'tag instance and tag id must be given', 'TAG INSTANCE OR TAG ID NOT PROVIDED')
2518
+ end
2519
+
2520
+ handler_ins = APIHandler.get_instance
2521
+ handler_ins.request_url_path = 'settings/tags/' + tag.id.to_s
2522
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_PUT
2523
+ handler_ins.request_api_key = ZCRMSDK::Utility::APIConstants::TAG
2524
+ handler_ins.add_param('module', tag.module_apiname)
2525
+ tag_json = {}
2526
+ tag_json['name'] = tag.name
2527
+ handler_ins.request_body = handler_ins.request_body = Utility::CommonUtil.create_api_supported_input_json(tag_json, Utility::APIConstants::TAG)
2528
+ api_response = ZCRMSDK::Request::APIRequest.get_instance(handler_ins).get_api_response
2529
+ response_details = api_response.response_json.dig(Utility::APIConstants::TAG, 0, 'details')
2530
+ tag_helper = TagAPIHandlerHelper.get_instance
2531
+ tag_helper.get_zcrmtag(tag, response_details)
2532
+ api_response.data = tag
2533
+ api_response
2534
+ end
2535
+ end
2536
+ # THIS CLASS SERVES THE TagAPIHandler CLASS CONSTRUCTING JSON BODY AND INSTANCES
2537
+ class TagAPIHandlerHelper
2538
+ def initialize; end
2539
+
2540
+ def self.get_instance
2541
+ TagAPIHandlerHelper.new
2542
+ end
2543
+
2544
+ def get_zcrmtag(tag_ins, tag_details)
2545
+ tag_details.each do |key, value|
2546
+ tag_ins.id = value if (key == 'id') && !value.nil?
2547
+ if (key == 'created_by') && !value.nil?
2548
+ tag_ins.created_by = Operations::ZCRMUser.get_instance(tag_details['created_by']['id'], tag_details['created_by']['name'])
2549
+ end
2550
+ if (key == 'modified_by') && !value.nil?
2551
+ tag_ins.created_by = Operations::ZCRMUser.get_instance(tag_details['modified_by']['id'], tag_details['modified_by']['name'])
2552
+ end
2553
+ if (key == 'created_time') && !value.nil?
2554
+ tag_ins.created_time = tag_details['created_time']
2555
+ end
2556
+ if (key == 'modified_time') && !value.nil?
2557
+ tag_ins.modified_time = tag_details['modified_time']
2558
+ end
2559
+ if (key == 'count') && !value.nil?
2560
+ tag_ins.count = tag_details['count']
2561
+ end
2562
+ end
2563
+ tag_ins
2564
+ end
2565
+
2566
+ def construct_json_for_tag(zcrmtag)
2567
+ tag_json = {}
2568
+ tag_json['id'] = zcrmtag.id unless zcrmtag.id.nil?
2569
+ tag_json['name'] = zcrmtag.name unless zcrmtag.name.nil?
2570
+ tag_json
2571
+ end
2572
+ end
2573
+ # THIS CLASS IS USED TO HANDLE RELATED LIST RELATED FUNCTIONALITY
2574
+ class RelatedListAPIHandler < APIHandler
2575
+ def initialize(parentrecord, related_list)
2576
+ @parentrecord = parentrecord
2577
+ if related_list.instance_of?(Operations::ZCRMModuleRelation)
2578
+ @related_list = related_list
2579
+ else
2580
+ @junction_record = related_list
2581
+ end
2582
+ end
2583
+
2584
+ def self.get_instance(parentrecord, related_list)
2585
+ RelatedListAPIHandler.new(parentrecord, related_list)
2586
+ end
2587
+
2588
+ def get_records(sort_by_field, sort_order, page, per_page)
2589
+ handler_ins = APIHandler.get_instance
2590
+ handler_ins.request_url_path = ''
2591
+ handler_ins.request_url_path = @parentrecord.module_api_name + '/' + @parentrecord.entity_id + '/' + @related_list.api_name
2592
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_GET
2593
+ unless sort_by_field.nil?
2594
+ handler_ins.add_param('sort_by_field', sort_by_field)
2595
+ end
2596
+
2597
+ handler_ins.add_param('sort_order', sort_order) unless sort_order.nil?
2598
+ handler_ins.add_param('page', page)
2599
+ handler_ins.add_param('per_page', per_page)
2600
+ handler_ins.request_api_key = Utility::APIConstants::DATA
2601
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
2602
+ data_arr = bulk_api_response.response_json[Utility::APIConstants::DATA]
2603
+ entity_helper = EntityAPIHandlerHelper.get_instance
2604
+ record_ins_list = []
2605
+ data_arr.each do |record_data|
2606
+ zcrm_record = Operations::ZCRMRecord.get_instance(@related_list.api_name, record_data['id'])
2607
+ entity_helper.set_record_properties(zcrm_record, record_data)
2608
+ record_ins_list.push(zcrm_record)
2609
+ end
2610
+ bulk_api_response.data = record_ins_list
2611
+ bulk_api_response
2612
+ end
2613
+
2614
+ def upload_attachment(file_path)
2615
+ if file_path.nil?
2616
+ raise Utility::ZCRMException.get_instance('upload_attachment', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'file path must be given', 'FILEPATH NOT PROVIDED')
2617
+ end
2618
+
2619
+ handler_ins = APIHandler.get_instance
2620
+ handler_ins.request_url_path = ''
2621
+ handler_ins.request_url_path = @parentrecord.module_api_name + '/' + @parentrecord.entity_id + '/' + @related_list.api_name
2622
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_POST
2623
+ handler_ins.request_api_key = Utility::APIConstants::DATA
2624
+ api_response = Request::APIRequest.get_instance(handler_ins).upload_file(file_path)
2625
+ response_details = api_response.response_json.dig(Utility::APIConstants::DATA, 0, 'details')
2626
+ api_response.data = Operations::ZCRMAttachment.get_instance(@parent_record, response_details['id'])
2627
+ api_response
2628
+ end
2629
+
2630
+ def upload_link_as_attachment(link_url)
2631
+ if link_url.nil?
2632
+ raise Utility::ZCRMException.get_instance('upload_link_as_attachment', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'link URL must be given', 'URL_LINK NOT PROVIDED')
2633
+ end
2634
+
2635
+ handler_ins = APIHandler.get_instance
2636
+ handler_ins.request_url_path = ''
2637
+ handler_ins.request_url_path = @parentrecord.module_api_name + '/' + @parentrecord.entity_id + '/' + @related_list.api_name
2638
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_POST
2639
+ handler_ins.request_api_key = Utility::APIConstants::DATA
2640
+ api_response = Request::APIRequest.get_instance(handler_ins).upload_link_as_attachment(link_url)
2641
+ response_details = api_response.response_json.dig(Utility::APIConstants::DATA, 0, 'details')
2642
+ api_response.data = Operations::ZCRMAttachment.get_instance(@parent_record, response_details['id'])
2643
+ api_response
2644
+ end
2645
+
2646
+ def add_relation
2647
+ if @junction_record.nil?
2648
+ raise Utility::ZCRMException.get_instance('add_relation', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'junction_record must be given', 'JUNCTION RECORD NOT PROVIDED')
2649
+ end
2650
+
2651
+ handler_ins = APIHandler.get_instance
2652
+ handler_ins.request_url_path = ''
2653
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_PUT
2654
+ handler_ins.request_url_path = @parentrecord.module_api_name + '/' + @parentrecord.entity_id + '/' + @junction_record.api_name + '/' + @junction_record.id
2655
+ data_array = @junction_record.related_data
2656
+ handler_ins.request_body = Utility::CommonUtil.create_api_supported_input_json(data_array, Utility::APIConstants::DATA)
2657
+ handler_ins.request_api_key = Utility::APIConstants::DATA
2658
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
2659
+ api_response
2660
+ end
2661
+
2662
+ def remove_relation
2663
+ if @junction_record.nil?
2664
+ raise Utility::ZCRMException.get_instance('remove_relation', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'junction_record must be given', 'JUNCTION RECORD NOT PROVIDED')
2665
+ end
2666
+
2667
+ handler_ins = APIHandler.get_instance
2668
+ handler_ins.request_url_path = ''
2669
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_DELETE
2670
+ handler_ins.request_url_path = @parentrecord.module_api_name + '/' + @parentrecord.entity_id + '/' + @junction_record.api_name + '/' + @junction_record.id
2671
+ handler_ins.request_api_key = Utility::APIConstants::DATA
2672
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
2673
+ api_response
2674
+ end
2675
+
2676
+ def delete_attachment(attachment_id)
2677
+ if attachment_id.nil?
2678
+ raise Utility::ZCRMException.get_instance('delete_attachment', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'attachment id must be given', 'ID IS NOT PROVIDED')
2679
+ end
2680
+
2681
+ handler_ins = APIHandler.get_instance
2682
+ handler_ins.request_url_path = ''
2683
+ handler_ins.request_url_path = @parentrecord.module_api_name + '/' + @parentrecord.entity_id + '/' + @related_list.api_name + '/' + attachment_id
2684
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_DELETE
2685
+ handler_ins.request_api_key = Utility::APIConstants::DATA
2686
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
2687
+ api_response
2688
+ end
2689
+
2690
+ def download_attachment(attachment_id)
2691
+ if attachment_id.nil?
2692
+ raise Utility::ZCRMException.get_instance('download_attachment', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'attachment id must be given', 'ID IS NOT PROVIDED')
2693
+ end
2694
+
2695
+ handler_ins = APIHandler.get_instance
2696
+ handler_ins.request_url_path = ''
2697
+ handler_ins.request_url_path = @parentrecord.module_api_name + '/' + @parentrecord.entity_id + '/' + @related_list.api_name + '/' + attachment_id
2698
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_GET
2699
+ api_response = Request::APIRequest.get_instance(handler_ins).download_file
2700
+ api_response
2701
+ end
2702
+
2703
+ def add_note(note_ins)
2704
+ if note_ins.nil?
2705
+ raise Utility::ZCRMException.get_instance('add_note', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'note instance must be given', 'NOTE INSTANCE NOT PROVIDED')
2706
+ end
2707
+
2708
+ handler_ins = APIHandler.get_instance
2709
+ handler_ins.request_url_path = ''
2710
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_POST
2711
+ handler_ins.request_url_path = @parentrecord.module_api_name + '/' + @parentrecord.entity_id + '/' + @related_list.api_name
2712
+ handler_ins.request_api_key = Utility::APIConstants::DATA
2713
+ helper_obj = RelatedListAPIHandlerHelper.get_instance
2714
+ input_json = helper_obj.get_zcrmnote_as_json(note_ins)
2715
+ handler_ins.request_body = Utility::CommonUtil.create_api_supported_input_json(input_json, Utility::APIConstants::DATA)
2716
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
2717
+ response_details = api_response.response_json.dig(Utility::APIConstants::DATA, 0, 'details')
2718
+ api_response.data = helper_obj.get_zcrm_note(response_details, note_ins, @parentrecord)
2719
+ api_response
2720
+ end
2721
+
2722
+ def update_note(note_ins)
2723
+ if note_ins.nil? || note_ins.id.nil?
2724
+ raise Utility::ZCRMException.get_instance('update_note', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'note instance and note id must be given', 'NOTE INSTANCE OR NOTE ID NOT PROVIDED')
2725
+ end
2726
+
2727
+ handler_ins = APIHandler.get_instance
2728
+ handler_ins.request_url_path = ''
2729
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_PUT
2730
+ handler_ins.request_url_path = @parentrecord.module_api_name + '/' + @parentrecord.entity_id + '/' + @related_list.api_name + '/' + note_ins.id
2731
+ handler_ins.request_api_key = Utility::APIConstants::DATA
2732
+ helper_obj = RelatedListAPIHandlerHelper.get_instance
2733
+ input_json = helper_obj.get_zcrmnote_as_json(note_ins)
2734
+ handler_ins.request_body = Utility::CommonUtil.create_api_supported_input_json(input_json, Utility::APIConstants::DATA)
2735
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
2736
+ response_details = api_response.response_json.dig(Utility::APIConstants::DATA, 0, 'details')
2737
+ api_response.data = helper_obj.get_zcrm_note(response_details, note_ins, @parentrecord)
2738
+ api_response
2739
+ end
2740
+
2741
+ def delete_note(note_ins)
2742
+ if note_ins.nil? || note_ins.id.nil?
2743
+ raise Utility::ZCRMException.get_instance('delete_note', Utility::APIConstants::RESPONSECODE_BAD_REQUEST, 'note instance and note id must be given', 'NOTE INSTANCE OR NOTE ID NOT PROVIDED')
2744
+ end
2745
+
2746
+ handler_ins = APIHandler.get_instance
2747
+ handler_ins.request_url_path = ''
2748
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_DELETE
2749
+ handler_ins.request_url_path = @parentrecord.module_api_name + '/' + @parentrecord.entity_id + '/' + @related_list.api_name + '/' + note_ins.id
2750
+ handler_ins.request_api_key = Utility::APIConstants::DATA
2751
+ api_response = Request::APIRequest.get_instance(handler_ins).get_api_response
2752
+ api_response
2753
+ end
2754
+
2755
+ def get_attachments(page, per_page)
2756
+ handler_ins = APIHandler.get_instance
2757
+ handler_ins.request_url_path = ''
2758
+ handler_ins.request_url_path = @parentrecord.module_api_name + '/' + @parentrecord.entity_id + '/' + @related_list.api_name
2759
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_GET
2760
+ handler_ins.add_param('page', page)
2761
+ handler_ins.add_param('per_page', per_page)
2762
+ handler_ins.request_api_key = Utility::APIConstants::DATA
2763
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
2764
+ data_arr = bulk_api_response.response_json[Utility::APIConstants::DATA]
2765
+ helper_obj = RelatedListAPIHandlerHelper.get_instance
2766
+ attachment_ins_list = []
2767
+ data_arr.each do |attachmentdetails|
2768
+ zcrm_attachment = helper_obj.get_zcrm_attachment(attachmentdetails, @parentrecord)
2769
+ attachment_ins_list.push(zcrm_attachment)
2770
+ end
2771
+ bulk_api_response.data = attachment_ins_list
2772
+ bulk_api_response
2773
+ end
2774
+
2775
+ def get_notes(sort_by, sort_order, page, per_page)
2776
+ handler_ins = APIHandler.get_instance
2777
+ handler_ins.request_url_path = ''
2778
+ handler_ins.request_url_path = @parentrecord.module_api_name + '/' + @parentrecord.entity_id + '/' + @related_list.api_name
2779
+ handler_ins.request_method = ZCRMSDK::Utility::APIConstants::REQUEST_METHOD_GET
2780
+ handler_ins.add_param('sort_by', sort_by) unless sort_by.nil?
2781
+ handler_ins.add_param('sort_order', sort_order) unless sort_order.nil?
2782
+ handler_ins.add_param('page', page)
2783
+ handler_ins.add_param('per_page', per_page)
2784
+ handler_ins.request_api_key = Utility::APIConstants::DATA
2785
+ bulk_api_response = Request::APIRequest.get_instance(handler_ins).get_bulk_api_response
2786
+ data_arr = bulk_api_response.response_json[Utility::APIConstants::DATA]
2787
+ helper_obj = RelatedListAPIHandlerHelper.get_instance
2788
+ note_ins_list = []
2789
+ data_arr.each do |notedetails|
2790
+ zcrm_note = helper_obj.get_zcrm_note(notedetails, nil, @parentrecord)
2791
+ note_ins_list.push(zcrm_note)
2792
+ end
2793
+ bulk_api_response.data = note_ins_list
2794
+ bulk_api_response
2795
+ end
2796
+ end
2797
+ # THIS CLASS SERVES THE RelatedListAPIHandler CLASS CONSTRUCTING JSON BODY AND INSTANCES
2798
+ class RelatedListAPIHandlerHelper
2799
+ def initialize; end
2800
+
2801
+ def self.get_instance
2802
+ RelatedListAPIHandlerHelper.new
2803
+ end
2804
+
2805
+ def get_zcrmnote_as_json(note_ins)
2806
+ note = {}
2807
+ note['Note_Title'] = note_ins.title unless note_ins.title.nil?
2808
+ note['Note_Content'] = note_ins.content
2809
+ note
2810
+ end
2811
+
2812
+ def get_zcrm_note(note_details, zcrmnote_ins = nil, parentrecord = nil)
2813
+ if zcrmnote_ins.nil?
2814
+ zcrmnote_ins = ZCRMSDK::Operations::ZCRMNote.get_instance(parentrecord, note_details['id'])
2815
+ end
2816
+ zcrmnote_ins.id = note_details['id']
2817
+ if note_details.key?('Note_Title')
2818
+ zcrmnote_ins.title = note_details['Note_Title']
2819
+ end
2820
+ if note_details.key?('Note_Content')
2821
+ zcrmnote_ins.content = note_details['Note_Content']
2822
+ end
2823
+ if note_details.key?('Owner')
2824
+ unless note_details['Owner'].nil?
2825
+ owner = note_details['Owner']
2826
+ zcrmnote_ins.owner = ZCRMSDK::Operations::ZCRMUser.get_instance(owner['id'], owner['name'])
2827
+ end
2828
+ end
2829
+ if note_details.key?('Created_By')
2830
+ unless note_details['Created_By'].nil?
2831
+ created_by = note_details['Created_By']
2832
+ zcrmnote_ins.created_by = ZCRMSDK::Operations::ZCRMUser.get_instance(created_by['id'], created_by['name'])
2833
+ end
2834
+ end
2835
+ if note_details.key?('Modified_By')
2836
+ unless note_details['Modified_By'].nil?
2837
+ modified_by = note_details['Modified_By']
2838
+ zcrmnote_ins.modified_by = ZCRMSDK::Operations::ZCRMUser.get_instance(modified_by['id'], modified_by['name'])
2839
+ end
2840
+ end
2841
+ zcrmnote_ins.size = note_details['$size'] if note_details.key?('$size')
2842
+ if note_details.key?('Created_Time')
2843
+ zcrmnote_ins.created_time = note_details['Created_Time']
2844
+ end
2845
+ if note_details.key?('$editable')
2846
+ zcrmnote_ins.is_editable = note_details['$editable'] == true
2847
+ end
2848
+ if note_details.key?('Modified_Time')
2849
+ zcrmnote_ins.modified_time = note_details['Modified_Time']
2850
+ end
2851
+ if note_details.key?('$voice_note')
2852
+ zcrmnote_ins.is_voice_note = note_details['$voice_note']
2853
+ end
2854
+ if note_details.key?('$se_module')
2855
+ zcrmnote_ins.parent_module = note_details['$se_module']
2856
+ end
2857
+ if note_details.key?('Parent_Id')
2858
+ unless note_details['Parent_Id'].nil?
2859
+ parent_details = note_details['Parent_Id']
2860
+ unless parent_details['id'].nil?
2861
+ zcrmnote_ins.parent_id = parent_details['id']
2862
+ end
2863
+ unless parent_details['name'].nil?
2864
+ zcrmnote_ins.parent_name = parent_details['name']
2865
+ end
2866
+ end
2867
+ end
2868
+ zcrmnote_ins.size = note_details['$size'] if note_details.key?('$size')
2869
+ if note_details.key?('$attachments')
2870
+ unless note_details['$attachments'].nil?
2871
+ attachments = note_details['$attachments']
2872
+ attachment_instants = []
2873
+ attachments.each do |attachment|
2874
+ attachment_instants.push(get_zcrm_attachment(attachment, parentrecord))
2875
+ end
2876
+ zcrmnote_ins.attachments = attachment_instants
2877
+ end
2878
+ end
2879
+ zcrmnote_ins
2880
+ end
2881
+
2882
+ def get_zcrm_attachment(attachment_details, parent_record)
2883
+ attachment_ins = ZCRMSDK::Operations::ZCRMAttachment.get_instance(parent_record, attachment_details['id'])
2884
+ if attachment_details.key?('File_Name')
2885
+ attachment_ins.file_name = attachment_details['File_Name']
2886
+ end
2887
+ if attachment_details.key?('$editable')
2888
+ attachment_ins.is_editable = attachment_details['$editable'] == true
2889
+ end
2890
+ if attachment_details.key?('$file_id')
2891
+ attachment_ins.file_id = attachment_details['$file_id']
2892
+ end
2893
+ if attachment_details.key?('Owner')
2894
+ unless attachment_details['Owner'].nil?
2895
+ owner = attachment_details['Owner']
2896
+ attachment_ins.owner = ZCRMSDK::Operations::ZCRMUser.get_instance(owner['id'], owner['name'])
2897
+ end
2898
+ end
2899
+ if attachment_details.key?('Created_By')
2900
+ unless attachment_details['Created_By'].nil?
2901
+ created_by = attachment_details['Created_By']
2902
+ attachment_ins.created_by = ZCRMSDK::Operations::ZCRMUser.get_instance(created_by['id'], created_by['name'])
2903
+ end
2904
+ end
2905
+ if attachment_details.key?('Modified_By')
2906
+ unless attachment_details['Modified_By'].nil?
2907
+ modified_by = attachment_details['Modified_By']
2908
+ attachment_ins.modified_by = ZCRMSDK::Operations::ZCRMUser.get_instance(modified_by['id'], modified_by['name'])
2909
+ end
2910
+ end
2911
+ if attachment_details.key?('Created_Time')
2912
+ attachment_ins.created_time = attachment_details['Created_Time']
2913
+ end
2914
+ if attachment_details.key?('Modified_Time')
2915
+ attachment_ins.modified_time = attachment_details['Modified_Time']
2916
+ end
2917
+ if attachment_details.key?('$type')
2918
+ attachment_ins.type = attachment_details['$type']
2919
+ end
2920
+ if attachment_details.key?('$se_module')
2921
+ attachment_ins.parent_module = attachment_details['$se_module']
2922
+ end
2923
+ if attachment_details.key?('Parent_Id')
2924
+ unless attachment_details['Parent_Id'].nil?
2925
+ parent_details = attachment_details['Parent_Id']
2926
+ unless parent_details['id'].nil?
2927
+ attachment_ins.parent_id = parent_details['id']
2928
+ end
2929
+ unless parent_details['name'].nil?
2930
+ attachment_ins.parent_name = parent_details['name']
2931
+ end
2932
+ end
2933
+ end
2934
+ if attachment_details.key?('Size')
2935
+ attachment_ins.size = attachment_details['Size']
2936
+ end
2937
+ if attachment_details.key?('$link_url')
2938
+ attachment_ins.link_url = attachment_details['$link_url']
2939
+ end
2940
+ attachment_ins
2941
+ end
2942
+ end
2943
+ end
2944
+ end