ZCRMSDK 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,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