ZCRMSDK 2.0.0 → 3.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (162) hide show
  1. checksums.yaml +4 -4
  2. data/src/ZCRMSDK.rb +84 -1
  3. data/src/com/zoho/api/authenticator/oauth_token.rb +87 -31
  4. data/src/com/zoho/api/authenticator/store/db_store.rb +48 -28
  5. data/src/com/zoho/api/authenticator/store/file_store.rb +69 -21
  6. data/src/com/zoho/api/authenticator/store/token_store.rb +7 -0
  7. data/src/com/zoho/api/logger/sdk_logger.rb +18 -9
  8. data/src/com/zoho/crm/api/assignment_rules/api_exception.rb +121 -0
  9. data/src/com/zoho/crm/api/assignment_rules/assignment_rule.rb +215 -0
  10. data/src/com/zoho/crm/api/assignment_rules/assignment_rules_operations.rb +61 -0
  11. data/src/com/zoho/crm/api/assignment_rules/default_user.rb +80 -0
  12. data/src/com/zoho/crm/api/assignment_rules/response_handler.rb +10 -0
  13. data/src/com/zoho/crm/api/assignment_rules/response_wrapper.rb +63 -0
  14. data/src/com/zoho/crm/api/attachments/attachment.rb +4 -4
  15. data/src/com/zoho/crm/api/attachments/attachments_operations.rb +6 -6
  16. data/src/com/zoho/crm/api/blue_print/blue_print_operations.rb +2 -2
  17. data/src/com/zoho/crm/api/blue_print/escalation.rb +80 -0
  18. data/src/com/zoho/crm/api/blue_print/field.rb +1107 -0
  19. data/src/com/zoho/crm/api/blue_print/next_transition.rb +38 -0
  20. data/src/com/zoho/crm/api/blue_print/process_info.rb +4 -4
  21. data/src/com/zoho/crm/api/blue_print/transition.rb +19 -1
  22. data/src/com/zoho/crm/api/blue_print/validation_error.rb +57 -0
  23. data/src/com/zoho/crm/api/bulk_read/bulk_read_operations.rb +3 -3
  24. data/src/com/zoho/crm/api/bulk_read/criteria.rb +20 -0
  25. data/src/com/zoho/crm/api/bulk_read/query.rb +5 -4
  26. data/src/com/zoho/crm/api/bulk_write/bulk_write_operations.rb +3 -3
  27. data/src/com/zoho/crm/api/bulk_write/resource.rb +24 -4
  28. data/src/com/zoho/crm/api/contact_roles/contact_roles_operations.rb +7 -7
  29. data/src/com/zoho/crm/api/currencies/currencies_operations.rb +7 -7
  30. data/src/com/zoho/crm/api/custom_views/criteria.rb +5 -4
  31. data/src/com/zoho/crm/api/custom_views/custom_view.rb +100 -41
  32. data/src/com/zoho/crm/api/custom_views/custom_views_operations.rb +2 -2
  33. data/src/com/zoho/crm/api/custom_views/{shared_details.rb → shared_to.rb} +2 -2
  34. data/src/com/zoho/crm/api/dc/au_datacenter.rb +3 -3
  35. data/src/com/zoho/crm/api/dc/cn_datacenter.rb +3 -3
  36. data/src/com/zoho/crm/api/dc/datacenter.rb +3 -2
  37. data/src/com/zoho/crm/api/dc/eu_datacenter.rb +3 -3
  38. data/src/com/zoho/crm/api/dc/in_datacenter.rb +3 -3
  39. data/src/com/zoho/crm/api/dc/us_datacenter.rb +3 -3
  40. data/src/com/zoho/crm/api/email_templates/api_exception.rb +121 -0
  41. data/src/com/zoho/crm/api/email_templates/attachment.rb +118 -0
  42. data/src/com/zoho/crm/api/email_templates/email_template.rb +390 -0
  43. data/src/com/zoho/crm/api/email_templates/email_templates_operations.rb +61 -0
  44. data/src/com/zoho/crm/api/email_templates/response_handler.rb +10 -0
  45. data/src/com/zoho/crm/api/email_templates/response_wrapper.rb +83 -0
  46. data/src/com/zoho/crm/api/field_attachments/api_exception.rb +121 -0
  47. data/src/com/zoho/crm/api/field_attachments/body_wrapper.rb +62 -0
  48. data/src/com/zoho/crm/api/field_attachments/field_attachments_operations.rb +52 -0
  49. data/src/com/zoho/crm/api/field_attachments/file_body_wrapper.rb +64 -0
  50. data/src/com/zoho/crm/api/field_attachments/response_handler.rb +10 -0
  51. data/src/com/zoho/crm/api/fields/external.rb +99 -0
  52. data/src/com/zoho/crm/api/fields/field.rb +192 -38
  53. data/src/com/zoho/crm/api/fields/fields_operations.rb +2 -2
  54. data/src/com/zoho/crm/api/fields/history_tracking.rb +80 -0
  55. data/src/com/zoho/crm/api/fields/maps.rb +80 -0
  56. data/src/com/zoho/crm/api/fields/multi_select_lookup.rb +19 -0
  57. data/src/com/zoho/crm/api/fields/multi_user_lookup.rb +175 -0
  58. data/src/com/zoho/crm/api/fields/pick_list_value.rb +19 -0
  59. data/src/com/zoho/crm/api/fields/related_details.rb +19 -0
  60. data/src/com/zoho/crm/api/files/file_operations.rb +2 -2
  61. data/src/com/zoho/crm/api/initializer.rb +41 -16
  62. data/src/com/zoho/crm/api/inventory_templates/api_exception.rb +121 -0
  63. data/src/com/zoho/crm/api/inventory_templates/inventory_template.rb +352 -0
  64. data/src/com/zoho/crm/api/inventory_templates/inventory_templates_operations.rb +82 -0
  65. data/src/com/zoho/crm/api/inventory_templates/response_handler.rb +10 -0
  66. data/src/com/zoho/crm/api/inventory_templates/response_wrapper.rb +83 -0
  67. data/src/com/zoho/crm/api/layouts/layout.rb +38 -0
  68. data/src/com/zoho/crm/api/layouts/layouts_operations.rb +2 -2
  69. data/src/com/zoho/crm/api/layouts/section.rb +19 -0
  70. data/src/com/zoho/crm/api/modules/module.rb +57 -0
  71. data/src/com/zoho/crm/api/modules/modules_operations.rb +4 -4
  72. data/src/com/zoho/crm/api/notes/notes_operations.rb +7 -7
  73. data/src/com/zoho/crm/api/notification/notification_operations.rb +6 -6
  74. data/src/com/zoho/crm/api/org/org_operations.rb +2 -2
  75. data/src/com/zoho/crm/api/pipeline/action_handler.rb +10 -0
  76. data/src/com/zoho/crm/api/pipeline/action_response.rb +10 -0
  77. data/src/com/zoho/crm/api/pipeline/action_wrapper.rb +63 -0
  78. data/src/com/zoho/crm/api/pipeline/api_exception.rb +129 -0
  79. data/src/com/zoho/crm/api/pipeline/body_wrapper.rb +61 -0
  80. data/src/com/zoho/crm/api/pipeline/forecast_category.rb +80 -0
  81. data/src/com/zoho/crm/api/pipeline/pick_list_value.rb +175 -0
  82. data/src/com/zoho/crm/api/pipeline/pipeline.rb +213 -0
  83. data/src/com/zoho/crm/api/pipeline/pipeline_operations.rb +165 -0
  84. data/src/com/zoho/crm/api/pipeline/response_handler.rb +10 -0
  85. data/src/com/zoho/crm/api/pipeline/response_wrapper.rb +63 -0
  86. data/src/com/zoho/crm/api/pipeline/stage.rb +80 -0
  87. data/src/com/zoho/crm/api/pipeline/success_response.rb +123 -0
  88. data/src/com/zoho/crm/api/pipeline/transfer_action_handler.rb +10 -0
  89. data/src/com/zoho/crm/api/pipeline/transfer_action_response.rb +10 -0
  90. data/src/com/zoho/crm/api/pipeline/transfer_action_wrapper.rb +63 -0
  91. data/src/com/zoho/crm/api/pipeline/transfer_and_delete_wrapper.rb +61 -0
  92. data/src/com/zoho/crm/api/pipeline/transfer_pipe_line.rb +80 -0
  93. data/src/com/zoho/crm/api/profiles/default_view.rb +99 -0
  94. data/src/com/zoho/crm/api/profiles/profile.rb +57 -0
  95. data/src/com/zoho/crm/api/profiles/profiles_operations.rb +2 -2
  96. data/src/com/zoho/crm/api/query/query_operations.rb +1 -1
  97. data/src/com/zoho/crm/api/record/api_exception.rb +2 -0
  98. data/src/com/zoho/crm/api/record/body_wrapper.rb +0 -19
  99. data/src/com/zoho/crm/api/record/count_handler.rb +10 -0
  100. data/src/com/zoho/crm/api/record/count_wrapper.rb +63 -0
  101. data/src/com/zoho/crm/api/record/field.rb +1 -0
  102. data/src/com/zoho/crm/api/record/image_upload.rb +213 -0
  103. data/src/com/zoho/crm/api/record/inventory_line_items.rb +56 -39
  104. data/src/com/zoho/crm/api/record/mass_update_body_wrapper.rb +4 -4
  105. data/src/com/zoho/crm/api/record/mass_update_territory.rb +80 -0
  106. data/src/com/zoho/crm/api/record/multi_select_lookup.rb +99 -0
  107. data/src/com/zoho/crm/api/record/multi_select_picklist.rb +80 -0
  108. data/src/com/zoho/crm/api/record/price_book.rb +31 -0
  109. data/src/com/zoho/crm/api/record/record_operations.rb +196 -26
  110. data/src/com/zoho/crm/api/record/tax.rb +80 -0
  111. data/src/com/zoho/crm/api/record/territory.rb +70 -12
  112. data/src/com/zoho/crm/api/record/widget.rb +80 -0
  113. data/src/com/zoho/crm/api/record/wizard.rb +80 -0
  114. data/src/com/zoho/crm/api/related_lists/related_lists_operations.rb +2 -2
  115. data/src/com/zoho/crm/api/related_records/related_records_operations.rb +6 -6
  116. data/src/com/zoho/crm/api/request_proxy.rb +3 -4
  117. data/src/com/zoho/crm/api/roles/roles_operations.rb +2 -2
  118. data/src/com/zoho/crm/api/sdk_config.rb +2 -68
  119. data/src/com/zoho/crm/api/send_mail/action_handler.rb +10 -0
  120. data/src/com/zoho/crm/api/send_mail/action_response.rb +10 -0
  121. data/src/com/zoho/crm/api/send_mail/action_wrapper.rb +63 -0
  122. data/src/com/zoho/crm/api/send_mail/api_exception.rb +125 -0
  123. data/src/com/zoho/crm/api/send_mail/body_wrapper.rb +61 -0
  124. data/src/com/zoho/crm/api/send_mail/data_subject_request.rb +80 -0
  125. data/src/com/zoho/crm/api/send_mail/inventory_details.rb +100 -0
  126. data/src/com/zoho/crm/api/send_mail/mail.rb +423 -0
  127. data/src/com/zoho/crm/api/send_mail/response_handler.rb +10 -0
  128. data/src/com/zoho/crm/api/send_mail/response_wrapper.rb +63 -0
  129. data/src/com/zoho/crm/api/send_mail/send_mail_operations.rb +61 -0
  130. data/src/com/zoho/crm/api/send_mail/success_response.rb +121 -0
  131. data/src/com/zoho/crm/api/send_mail/template.rb +10 -0
  132. data/src/com/zoho/crm/api/send_mail/user_address.rb +137 -0
  133. data/src/com/zoho/crm/api/share_records/share_records_operations.rb +4 -4
  134. data/src/com/zoho/crm/api/tags/tag.rb +19 -0
  135. data/src/com/zoho/crm/api/tags/tags_operations.rb +11 -11
  136. data/src/com/zoho/crm/api/taxes/taxes_operations.rb +6 -6
  137. data/src/com/zoho/crm/api/territories/response_wrapper.rb +20 -0
  138. data/src/com/zoho/crm/api/territories/territories_operations.rb +2 -2
  139. data/src/com/zoho/crm/api/territories/territory.rb +61 -23
  140. data/src/com/zoho/crm/api/users/users_operations.rb +6 -6
  141. data/src/com/zoho/crm/api/util/api_http_connector.rb +5 -4
  142. data/src/com/zoho/crm/api/util/constants.rb +140 -13
  143. data/src/com/zoho/crm/api/util/converter.rb +21 -4
  144. data/src/com/zoho/crm/api/util/form_data_converter.rb +3 -14
  145. data/src/com/zoho/crm/api/util/utility.rb +226 -70
  146. data/src/com/zoho/crm/api/variable_groups/variable_groups_operations.rb +3 -3
  147. data/src/com/zoho/crm/api/variables/variables_operations.rb +9 -9
  148. data/src/com/zoho/crm/api/wizards/api_exception.rb +121 -0
  149. data/src/com/zoho/crm/api/wizards/button.rb +214 -0
  150. data/src/com/zoho/crm/api/wizards/chart_data.rb +118 -0
  151. data/src/com/zoho/crm/api/wizards/connection.rb +80 -0
  152. data/src/com/zoho/crm/api/wizards/container.rb +119 -0
  153. data/src/com/zoho/crm/api/wizards/node.rb +118 -0
  154. data/src/com/zoho/crm/api/wizards/response_handler.rb +10 -0
  155. data/src/com/zoho/crm/api/wizards/response_wrapper.rb +63 -0
  156. data/src/com/zoho/crm/api/wizards/screen.rb +99 -0
  157. data/src/com/zoho/crm/api/wizards/segment.rb +176 -0
  158. data/src/com/zoho/crm/api/wizards/wizard.rb +273 -0
  159. data/src/com/zoho/crm/api/wizards/wizards_operations.rb +61 -0
  160. data/src/resources/JSONDetails.json +1 -1
  161. data/src/version.rb +1 -1
  162. metadata +88 -5
@@ -56,7 +56,23 @@ module Util
56
56
  check = true
57
57
 
58
58
  unless value.nil?
59
- var_type = value.class.name
59
+ if key_details.key? Constants::INTERFACE and key_details[Constants::INTERFACE] == true
60
+ json_details = Initializer.get_initializer.json_details
61
+ interface_details = json_details[key_details[Constants::STRUCTURE_NAME]]
62
+ classes = interface_details[Constants::CLASSES]
63
+ check = false
64
+ classes.each do |each_class_name|
65
+ class_name_lower = each_class_name.to_s.downcase
66
+ value_class_name = til::Utility.path_to_package(value.class.name).downcase
67
+
68
+ if class_name_lower.downcase == value_class_name
69
+ check = true
70
+ break
71
+ end
72
+ end
73
+ else
74
+ var_type = value.class.name
75
+ end
60
76
  end
61
77
 
62
78
  if Constants::DATA_TYPE.key? type
@@ -70,7 +86,6 @@ module Util
70
86
  instance_number = index
71
87
  type = Constants::LIST_NAMESPACE + '(' + structure_name + ')'
72
88
  var_type = Constants::LIST_NAMESPACE + '(' + class_name + ')'
73
- expected_list_type = false
74
89
  check = false
75
90
 
76
91
  break
@@ -108,7 +123,9 @@ module Util
108
123
 
109
124
  if key_details.key?(Constants::VALUES) && (!key_details.key?(Constants::PICKLIST) || (key_details[Constants::PICKLIST] && Initializer.get_initializer.sdk_config.pick_list_validation))
110
125
  value = value.value if value.is_a? Util::Choice
111
- unless key_details[Constants::VALUES].include? value
126
+
127
+ values_ja = key_details[Constants::VALUES]
128
+ unless values_ja.include? value
112
129
 
113
130
  unless instance_number.nil?
114
131
  error[Constants::INDEX] = instance_number
@@ -120,7 +137,7 @@ module Util
120
137
 
121
138
  error[Constants::ERROR_HASH_FIELD] = member_name
122
139
 
123
- error[Constants::ACCEPTED_VALUES] = key_details[Constants::VALUES]
140
+ error[Constants::ACCEPTED_VALUES] = values_ja
124
141
 
125
142
  raise SDKException.new(Constants::UNACCEPTED_VALUES_ERROR, nil, error, nil)
126
143
  end
@@ -13,10 +13,10 @@ module Util
13
13
  end
14
14
 
15
15
  def append_to_request(request_base, request_object)
16
- request_base.set_form(set_file_fody(request_object), Constants::MULTIPART_FORM_DATA) if request_object.is_a?(Hash)
16
+ request_base.set_form(set_file_body(request_object), Constants::MULTIPART_FORM_DATA) if request_object.is_a?(Hash)
17
17
  end
18
18
 
19
- def set_file_fody(request_object)
19
+ def set_file_body(request_object)
20
20
  data = []
21
21
  request_object.each do |key, value|
22
22
  if value.is_a? Array
@@ -38,18 +38,7 @@ module Util
38
38
 
39
39
  def form_request(request_instance, class_path, instance_no, member_json_details = nil)
40
40
  require_relative '../initializer'
41
- if @common_api_handler.api_path.include? Constants::PHOTO
42
- path = @common_api_handler.api_path.split("/")
43
- if path.length == 6
44
- module_api_name = path[3].downcase
45
- if path[1].downcase == Constants::CRM && path[2].downcase == Constants::API_VERSION && path[5].downcase == Constants::PHOTO && !(Constants::PHOTO_SUPPORTED_MODULES.include? module_api_name)
46
- api_supported_module = Utility::api_supported_module
47
- if api_supported_module.key?(module_api_name) && api_supported_module[module_api_name].downcase != "custom"
48
- raise SDKException.new(Constants::INVALID_MODULE, Constants::PHOTO_UPLOAD_ERROR_MESSAGE)
49
- end
50
- end
51
- end
52
- end
41
+
53
42
  package_name = Utility.path_to_package(class_path)
54
43
  class_details = Initializer.json_details[package_name]
55
44
  request_hash = {}
@@ -22,17 +22,78 @@ module Util
22
22
 
23
23
  @@apitype_vs_structurename = {}
24
24
 
25
- @@api_supported_module ={}
26
-
27
25
  @@new_file = false
28
26
 
29
27
  @@get_modified_modules = false
30
28
 
31
29
  @@force_refresh = false
32
- def self.api_supported_module
33
- @@api_supported_module
30
+ def self.set_handler_api_path(module_api_name, handler_instance)
31
+ if handler_instance.nil?
32
+ return
33
+ end
34
+ api_path = handler_instance.api_path
35
+ if module_api_name.downcase == api_path.downcase
36
+ api_path_split = api_path.split('/')
37
+ api_path_split.each do |api_path_split|
38
+ split_lower = api_path_split[i].downcase
39
+ if split_lower == module_api_name.downcase
40
+ api_path_splits[i] = module_api_name
41
+ elsif Constants::DEFAULT_MODULENAME_VS_APINAME.key? split_lower && !Constants::DEFAULT_MODULENAME_VS_APINAME[split_lower].nil?
42
+ api_path_splits[i] = Constants::DEFAULT_MODULENAME_VS_APINAME[split_lower]
43
+ end
44
+ api_path = api_path_splits.join("/")
45
+ handler_instance.api_path = api_path
46
+ end
47
+ end
48
+ end
49
+
50
+ def self.file_exists_flow(module_api_name,record_field_details_path,last_modified_time)
51
+ @@sync_lock.synchronize do
52
+ initializer = Initializer.get_initializer
53
+ record_field_details_json = JSON.parse(File.read(record_field_details_path))
54
+ last_modified_time_exists = false
55
+ if record_field_details_json.key?(Constants::FIELDS_LAST_MODIFIED_TIME) && !record_field_details_json[Constants::FIELDS_LAST_MODIFIED_TIME].nil?
56
+ if get_current_time_in_millis - record_field_details_json[Constants::FIELDS_LAST_MODIFIED_TIME] > 3_600_000
57
+ last_modified_time_exists = true
58
+ end
59
+ end
60
+ if !record_field_details_json.key?(Constants::FIELDS_LAST_MODIFIED_TIME) || @@force_refresh
61
+ last_modified_time_exists = true
62
+ end
63
+
64
+ if initializer.sdk_config.auto_refresh_fields && !@@new_file && !@@get_modified_modules && last_modified_time_exists
65
+ @@get_modified_modules = true
66
+ last_modified_time = (record_field_details_json.key? Constants::FIELDS_LAST_MODIFIED_TIME) ? record_field_details_json[Constants::FIELDS_LAST_MODIFIED_TIME] : nil
67
+ modify_fields(record_field_details_path, last_modified_time)
68
+ @@get_modified_modules = false
69
+ elsif !initializer.sdk_config.auto_refresh_fields && @@force_refresh && !@@get_modified_modules
70
+ @@get_modified_modules = true
71
+ modify_fields(record_field_details_path, last_modified_time)
72
+ @@get_modified_modules = false
73
+ end
74
+
75
+ record_field_details_json = JSON.parse(File.read(record_field_details_path))
76
+ return if module_api_name.nil? || record_field_details_json.key?(module_api_name.downcase)
77
+
78
+ fill_data_type
79
+
80
+ record_field_details_json[module_api_name.downcase] = {}
81
+
82
+ File.open(record_field_details_path, 'w') do |f|
83
+ f.write(record_field_details_json.to_json)
84
+ end
85
+ field_details = get_fields_details(module_api_name)
86
+ record_field_details_json = JSON.parse(File.read(record_field_details_path))
87
+
88
+ record_field_details_json[module_api_name.downcase] = field_details
89
+
90
+ File.open(record_field_details_path, 'w') do |f|
91
+ f.write(record_field_details_json.to_json)
92
+ end
93
+ end
34
94
  end
35
- def self.get_fields(module_api_name)
95
+
96
+ def self.get_fields(module_api_name, handler_instance=nil)
36
97
  require_relative '../initializer'
37
98
  initializer = Initializer.get_initializer
38
99
  record_field_details_path = nil
@@ -46,62 +107,25 @@ module Util
46
107
 
47
108
  Dir.mkdir resoures_folder_path unless File.exist? resoures_folder_path
48
109
  record_field_details_path = get_record_json_file_path
49
-
110
+ module_api_name = verify_module_api_name(module_api_name)
111
+ set_handler_api_path(module_api_name,handler_instance)
112
+
50
113
  if File.exist? record_field_details_path
51
- record_field_details_json = JSON.parse(File.read(record_field_details_path))
52
- last_modified_time_exists = false
53
- if @@force_refresh
54
- if record_field_details_json.key?(Constants::FIELDS_LAST_MODIFIED_TIME) && !record_field_details_json[Constants::FIELDS_LAST_MODIFIED_TIME].nil?
55
- if get_current_time_in_millis - record_field_details_json[Constants::FIELDS_LAST_MODIFIED_TIME] > 3_600_000
56
- last_modified_time_exists = true
57
- end
58
- end
59
- end
60
- if initializer.sdk_config.auto_refresh_fields && !@@new_file && !@@get_modified_modules && last_modified_time_exists
61
- @@get_modified_modules = true
62
- last_modified_time = (record_field_details_json.key? Constants::FIELDS_LAST_MODIFIED_TIME) ? record_field_details_json[Constants::FIELDS_LAST_MODIFIED_TIME] : nil
63
- modify_fields(record_field_details_path, last_modified_time)
64
- @@get_modified_modules = false
65
- elsif !initializer.sdk_config.auto_refresh_fields && @@force_refresh && !@@get_modified_modules
66
- @@get_modified_modules = true
67
- modify_fields(record_field_details_path, last_modified_time)
68
- @@get_modified_modules = false
69
- end
70
-
71
- record_field_details_json = JSON.parse(File.read(record_field_details_path))
72
- return if module_api_name.nil? || record_field_details_json.key?(module_api_name.downcase)
73
-
74
- fill_data_type
75
-
76
- record_field_details_json[module_api_name.downcase] = {}
77
-
78
- File.open(record_field_details_path, 'w') do |f|
79
- f.write(record_field_details_json.to_json)
80
- end
81
- field_details = get_fields_details(module_api_name)
82
- record_field_details_json = JSON.parse(File.read(record_field_details_path))
83
-
84
- record_field_details_json[module_api_name.downcase] = field_details
85
-
86
- File.open(record_field_details_path, 'w') do |f|
87
- f.write(record_field_details_json.to_json)
88
- end
89
-
114
+ file_exists_flow(module_api_name,record_field_details_path,last_modified_time)
90
115
  elsif initializer.sdk_config.auto_refresh_fields
91
116
  @@new_file = true
92
117
  fill_data_type
93
- if @@api_supported_module.length == 0
94
- @@api_supported_module = get_modules_api_names(nil)
95
- end
118
+ api_supported_modules = get_modules(nil)
119
+ record_field_details_json = File.exist? record_field_details_path ? JSON.parse(File.read(record_field_details_path)) : {}
96
120
 
97
121
  record_field_details_json = { Constants::FIELDS_LAST_MODIFIED_TIME => get_current_time_in_millis }
98
- @@api_supported_module.each_key do |module_name|
122
+ api_supported_modules.each_key do |module_name|
99
123
  unless record_field_details_json.key? module_name.downcase
100
124
  record_field_details_json[module_name.downcase] = {}
101
125
  File.open(record_field_details_path, 'w') do |f|
102
126
  f.write(record_field_details_json.to_json)
103
127
  end
104
- field_details = get_fields_details(module_name)
128
+ field_details = get_fields_details(api_supported_modules[module_name][Constants::API_NAME])
105
129
  record_field_details_json = JSON.parse(File.read(record_field_details_path))
106
130
  record_field_details_json[module_name.downcase] = field_details
107
131
  File.open(record_field_details_path, 'w') do |f|
@@ -189,10 +213,30 @@ module Util
189
213
  f.write(record_field_details_json.to_json)
190
214
  end
191
215
  modified_modules.each_key do |module_api_name|
192
- get_fields(module_api_name)
216
+ module_data = modified_modules[module_api_name]
217
+ get_fields(module_data[Constants::API_NAME])
193
218
  end
194
219
  end
195
220
 
221
+ def self.verify_module_api_name(module_api_name)
222
+
223
+ if !module_api_name.nil?
224
+ if Constants::DEFAULT_MODULENAME_VS_APINAME.key? (module_api_name.downcase) && !Constants::DEFAULT_MODULENAME_VS_APINAME[module_api_name.downcase].nil?
225
+ return Constants::DEFAULT_MODULENAME_VS_APINAME[module_api_name.downcase]
226
+ end
227
+ end
228
+
229
+ record_field_details_path = get_record_json_file_path
230
+
231
+ if File.exist? record_field_details_path
232
+ fields_json = JSON.parse(File.open(record_field_details_path).read)
233
+ if fields_json.key? Constants::SDK_MODULE_METADATA and fields_json[Constants::SDK_MODULE_METADATA].key? module_api_name.downcase
234
+ return fields_json[Constants::SDK_MODULE_METADATA][module_api_name.downcase][Constants::API_NAME]
235
+ end
236
+ end
237
+ return module_api_name
238
+ end
239
+
196
240
  def self.delete_fields(record_field_details_json, module_api_name)
197
241
  subform_modules = []
198
242
 
@@ -233,9 +277,10 @@ module Util
233
277
  if !File.exist?(record_field_details_path) || (File.exist?(record_field_details_path) && !(JSON.parse(File.read(record_field_details_path)).key? key))
234
278
  is_new_data = true
235
279
  related_list_values = get_related_list_details(module_api_name)
236
- record_field_details_json = {}
237
- if File.exist? record_field_details_path
280
+ if File.exist? (record_field_details_path)
238
281
  record_field_details_json = JSON.parse(File.read(record_field_details_path))
282
+ else
283
+ record_field_details_json = {}
239
284
  end
240
285
  record_field_details_json[key] = related_list_values
241
286
  File.open(record_field_details_path, 'w') do |f|
@@ -253,6 +298,7 @@ module Util
253
298
  end
254
299
  rescue SDKException => e
255
300
  SDKLog::SDKLogger.severe(Constants::EXCEPTION, e)
301
+ raise e
256
302
  rescue StandardError => e
257
303
  ex = SDKException.new(nil, Constants::EXCEPTION, nil, e)
258
304
  SDKLog::SDKLogger.severe(Constants::EXCEPTION, ex)
@@ -347,12 +393,11 @@ module Util
347
393
  def self.fill_data_type
348
394
  return unless @@apitype_vs_datatype.empty?
349
395
 
350
- field_api_names_string = %w[autonumber textarea text website email phone mediumtext multiselectlookup profileimage]
396
+ field_api_names_string = %w[autonumber textarea text website email phone mediumtext profileimage]
351
397
  field_api_names_integer = %w[integer]
352
398
  field_api_names_boolean = %w[boolean]
353
399
  field_api_names_long = %w[bigint long]
354
400
  field_api_names_double = %w[double percent lookup currency]
355
- field_api_names_file = %w[imageupload]
356
401
  field_api_names_field_file = %w[fileupload]
357
402
  field_api_names_datetime = %w[datetime event_reminder]
358
403
  field_api_names_date = %w[date]
@@ -367,6 +412,8 @@ module Util
367
412
  field_api_names_recurring_activity = %w[RRULE]
368
413
  field_api_names_reminder = %w[multireminder]
369
414
  field_api_names_consent_look_up = %w[consent_lookup]
415
+ field_api_name_image_upload = %w["imageupload"]
416
+ field_api_name_multiselect_lookup = %w["multiselectlookup"]
370
417
 
371
418
  field_api_names_string.each do |field_api_name|
372
419
  @@apitype_vs_datatype[field_api_name] = Constants::STRING
@@ -388,10 +435,6 @@ module Util
388
435
  @@apitype_vs_datatype[field_api_name] = Constants::LONG
389
436
  end
390
437
 
391
- field_api_names_file.each do |field_api_name|
392
- @@apitype_vs_datatype[field_api_name] = Constants::FILE_NAMESPACE
393
- end
394
-
395
438
  field_api_names_field_file.each do |field_api_name|
396
439
  @@apitype_vs_datatype[field_api_name] = Constants::LIST_NAMESPACE
397
440
  @@apitype_vs_structurename[field_api_name] = Constants::FIELD_FILE_NAMESPACE
@@ -435,7 +478,7 @@ module Util
435
478
  field_api_names_multiuser_lookup.each do |field_api_name|
436
479
  @@apitype_vs_datatype[field_api_name] = Constants::LIST_NAMESPACE
437
480
 
438
- @@apitype_vs_structurename[field_api_name] = Constants::USER_NAMESPACE
481
+ @@apitype_vs_structurename[field_api_name] = Constants::RECORD_NAMESPACE
439
482
  end
440
483
 
441
484
  field_api_names_multimodule_lookup.each do |field_api_name|
@@ -465,6 +508,15 @@ module Util
465
508
 
466
509
  @@apitype_vs_structurename[field_api_name] = Constants::CONSENT_NAMESPACE
467
510
  end
511
+
512
+ field_api_name_image_upload.each do |field_api_name|
513
+ @@apitype_vs_datatype[field_api_name] = Constants::LIST_NAMESPACE
514
+ @@apitype_vs_structurename[field_api_name] = Constants::IMAGEUPLOAD_NAMESPACE
515
+ end
516
+ field_api_name_multiselect_lookup.each do |field_api_name|
517
+ @@apitype_vs_datatype[field_api_name] = Constants::LIST_NAMESPACE
518
+ @@apitype_vs_structurename[field_api_name] = Constants::RECORD_NAMESPACE
519
+ end
468
520
  end
469
521
 
470
522
  def self.set_data_type(field_detail, field_instance, module_api_name)
@@ -478,7 +530,8 @@ module Util
478
530
  if !field_instance.system_mandatory.nil? && field_instance.system_mandatory && !((module_api_name == Constants::CALLS.downcase) && (key_name.downcase == Constants::CALL_DURATION.downcase))
479
531
  field_detail[Constants::REQUIRED] = true
480
532
  end
481
- if Constants::INVENTORY_MODULES.include?(module_api_name) && (key_name.downcase == Constants::PRODUCT_DETAILS.downcase)
533
+
534
+ if Constants::KEY_VS_INVENTORY_MODULE.key?(key_name) && (module_api_name.downcase == Constants::KEY_VS_INVENTORY_MODULE[key_name].downcase)
482
535
  field_detail[Constants::NAME] = key_name
483
536
  field_detail[Constants::TYPE] = Constants::LIST_NAMESPACE
484
537
  field_detail[Constants::STRUCTURE_NAME] = Constants::INVENTORY_LINE_ITEMS
@@ -498,7 +551,7 @@ module Util
498
551
  return
499
552
  elsif (key_name.downcase == Constants::COMMENTS.downcase) && ((module_api_name == Constants::SOLUTIONS.downcase) || (module_api_name == Constants::CASES.downcase))
500
553
  field_detail[Constants::NAME] = key_name
501
- field_detail[Constants::TYPE] = Constants::LAYOUT_NAMESPACE
554
+ field_detail[Constants::TYPE] = Constants::LIST_NAMESPACE
502
555
  field_detail[Constants::STRUCTURE_NAME] = Constants::COMMENTS_NAMESPACE
503
556
  field_detail[Constants::LOOKUP] = true
504
557
  return
@@ -508,6 +561,17 @@ module Util
508
561
  field_detail[Constants::LOOKUP] = true
509
562
  field_detail[Constants::STRUCTURE_NAME] = Constants::LAYOUT_NAMESPACE
510
563
  return
564
+ elsif (key_name.downcase() == Constants::TERRITORIES.downcase or key_name.downcase() == Constants::TERRITORY.downcase) and !field_instance.custom_field.nil? and !field_instance.custom_field
565
+ field_detail[Constants::NAME] = key_name
566
+ field_detail[Constants::TYPE] = Constants::LIST_NAMESPACE
567
+ field_detail[Constants::STRUCTURE_NAME] = Constants::TERRITORY_NAMESPACE
568
+ field_detail[Constants::LOOKUP] = true
569
+ return
570
+ elsif key_name.downcase() == Constants::TAX.downcase and module_api_name.downcase() == Constants::PRODUCTS.downcase
571
+ field_detail[Constants::NAME] = key_name
572
+ field_detail[Constants::TYPE] = Constants::LIST_NAMESPACE
573
+ field_detail[Constants::STRUCTURE_NAME] = Constants::TAX_NAMESPACE
574
+ return
511
575
  elsif @@apitype_vs_datatype.include? data_type
512
576
  field_detail[Constants::TYPE] = @@apitype_vs_datatype[data_type]
513
577
  elsif data_type.downcase == Constants::FORMULA.downcase
@@ -524,6 +588,31 @@ module Util
524
588
  field_detail[Constants::LOOKUP] = true if data_type.downcase.include? Constants::LOOKUP
525
589
  field_detail[Constants::SKIP_MANDATORY] = true if data_type.downcase.include? Constants::CONSENT_LOOKUP
526
590
 
591
+
592
+ if data_type.downcase.include? Constants::MULTI_SELECT_LOOKUP
593
+ field_detail[Constants::SKIP_MANDATORY] = true
594
+ if !field.multiselectlookup.nil?
595
+ if !field.multiselectlookup.linking_module.nil?
596
+ linking_module = field.multiselectlookup.linking_module
597
+ field_detail[Constants::MODULE] = linking_module
598
+ module_name = linking_module
599
+ end
600
+ end
601
+ field_detail[Constants::SUBFORM] = true
602
+ end
603
+
604
+ if data_type.downcase.include? Constants::MULTI_USER_LOOKUP
605
+ field_detail[Constants::SKIP_MANDATORY] = true
606
+ if !field.multiuserlookup.nil?
607
+ if !field.multiuserlookup.linking_module.nil?
608
+ linking_module = field.multiuserlookup.linking_module
609
+ field_detail[Constants::MODULE] = linking_module
610
+ module_name = linking_module
611
+ end
612
+ end
613
+ field_detail[Constants::SUBFORM] = true
614
+ end
615
+
527
616
  if @@apitype_vs_structurename.include? data_type
528
617
  field_detail[Constants::STRUCTURE_NAME] = @@apitype_vs_structurename[data_type]
529
618
  end
@@ -560,13 +649,8 @@ module Util
560
649
  get_fields(module_name) if !module_name.nil? && !module_name.empty?
561
650
  field_detail[Constants::NAME] = key_name
562
651
  end
563
-
564
- def self.get_modules
565
- @@sync_lock.synchronize do
566
- @@api_supported_module = get_modules_api_names(nil)
567
- end
568
- end
569
- def self.get_modules_api_names(header)
652
+
653
+ def self.get_modules(header)
570
654
  api_names = {}
571
655
  header_map = HeaderMap.new
572
656
  unless header.nil?
@@ -585,7 +669,12 @@ module Util
585
669
  if response_object.is_a? Modules::ResponseWrapper
586
670
  modules = response_object.modules
587
671
  modules.each do |module_ins|
588
- api_names[module_ins.api_name.downcase] = module_ins.generated_type.value if module_ins.api_supported
672
+ if module_ins.api_supported
673
+ module_details = {}
674
+ module_details[Constants::API_NAME] = module_ins.api_name
675
+ module_details[Constants::GENERATED_TYPE] = module_ins.generated_type.value
676
+ api_names[module_ins.api_name.downcase] = module_details
677
+ end
589
678
  end
590
679
  elsif response_object.is_a? Modules::APIException
591
680
  error_response = {}
@@ -596,6 +685,13 @@ module Util
596
685
  end
597
686
  end
598
687
  end
688
+ if @@force_refresh
689
+ begin
690
+ write_module_meta_data(get_record_json_file_path, api_names)
691
+ rescue StandardError => e
692
+ raise SDKException.new(Constants::EXCEPTION,e)
693
+ end
694
+ end
599
695
  api_names
600
696
  end
601
697
 
@@ -617,6 +713,66 @@ module Util
617
713
  false
618
714
  end
619
715
 
716
+ def self.verify_photo_support(module_api_name)
717
+ @@sync_lock.synchronize do
718
+ begin
719
+ module_api_name = verify_module_api_name(module_api_name)
720
+ if Constants::PHOTO_SUPPORTED_MODULES.key? module_api_name
721
+ return true
722
+ end
723
+ modules = get_module_names()
724
+ if modules.key? module_api_name.downcase || !modules[module_api_name.downcase].nil?
725
+ module_meta_data = modules[module_api_name.downcase]
726
+
727
+ if module_meta_data[Constants::GENERATED_TYPE] != Constants::GENERATED_TYPE_CUSTOM
728
+ raise SDKException.new(Constants::UPLOAD_PHOTO_UNSUPPORTED_ERROR,Constants::UPLOAD_PHOTO_UNSUPPORTED_MESSAGE + module_api_name)
729
+ end
730
+ end
731
+ rescue SDKException => e
732
+ raise e
733
+ rescue StandardError => e
734
+ ex = SDKException.new(nil, Constants::EXCEPTION, nil, e)
735
+ SDKLog::SDKLogger.severe(Constants::EXCEPTION, ex)
736
+ raise ex
737
+ end
738
+ return true
739
+ end
740
+ end
741
+
742
+ def self.get_module_names()
743
+ module_data = {}
744
+ resoures_folder_path = initializer.resources_path + '/' + Constants::RESOURCES
745
+ Dir.mkdir resoures_folder_path unless File.exist? resoures_folder_path
746
+
747
+ record_field_details_path = get_record_json_file_path
748
+
749
+ is_null = false
750
+ if File.exists? record_field_details_path
751
+ json = JSON.parse(File.read(record_field_details_path))
752
+ if !json.key? Constants::SDK_MODULE_METADATA
753
+ is_null = true
754
+ elsif json[Constants::SDK_MODULE_METADATA].nil?
755
+ is_null = true
756
+ end
757
+ end
758
+ if !File.exists? os.path.exists(record_field_details_path) || is_null
759
+ module_data = get_modules(nil)
760
+ write_module_meta_data(record_field_details_path, module_data)
761
+ return module_data
762
+ end
763
+ record_field_details_json = JSON.parse(File.read(record_field_details_path))
764
+ module_data = record_field_details_json[Constants::SDK_MODULE_METADATA]
765
+ return module_data
766
+ end
767
+
768
+ def self.write_module_meta_data(record_field_details_path, module_data)
769
+ field_details_json = File.exist? record_field_details_path ? JSON.parse(File.read(record_field_details_path)):{}
770
+ field_details_json[Constants::SDK_MODULE_METADATA] = module_data
771
+ File.open(record_field_details_path, 'w') do |f|
772
+ f.write(field_details_json.to_json)
773
+ end
774
+ end
775
+
620
776
  def self.get_related_list_details(module_api_name)
621
777
  rlo = RelatedLists::RelatedListsOperations.new(module_api_name)
622
778
  response = rlo.get_related_lists