[Home] [Help]
PACKAGE BODY: APPS.CSM_PROFILE_EVENT_PKG
Source
1 PACKAGE BODY CSM_PROFILE_EVENT_PKG AS
2 /* $Header: csmeprfb.pls 120.22.12010000.2 2008/11/17 11:34:21 trajasek ship $ */
3
4 g_pub_item VARCHAR2(30) := 'CSF_M_PROFILES';
5
6 FUNCTION get_all_omfs_resp_palm_users(p_responsibility_id IN NUMBER)
7 RETURN asg_download.user_list
8 IS
9 i NUMBER;
10 l_all_omfs_palm_users_list asg_download.user_list;
11
12 CURSOR l_omfs_resp_palm_users_csr(p_resp_id IN number)
13 IS
14 SELECT au.user_id
15 FROM asg_user_pub_resps aupr,
16 asg_user au
17 WHERE aupr.pub_name = 'SERVICEP'
18 AND aupr.responsibility_id = p_resp_id
19 AND au.user_name = aupr.user_name;
20
21 BEGIN
22 i := 0;
23 FOR r_omfs_resp_palm_users_rec IN l_omfs_resp_palm_users_csr(p_responsibility_id) LOOP
24 i := i + 1;
25 l_all_omfs_palm_users_list(i) := r_omfs_resp_palm_users_rec.user_id;
26 END LOOP;
27
28 RETURN l_all_omfs_palm_users_list;
29
30 END get_all_omfs_resp_palm_users;
31
32 PROCEDURE insert_profiles_acc(p_access_id IN number, p_user_id IN number, p_application_id IN number,
33 p_profile_option_id IN number, p_level_id IN number,
34 p_level_value IN number, p_level_value_application_id IN number,
35 p_profile_option_value IN varchar2, p_creation_date IN date)
36 IS
37 BEGIN
38 INSERT INTO csm_profile_option_values_acc(access_id,
39 user_id,
40 application_id,
41 profile_option_id,
42 level_id,
43 level_value,
44 level_value_application_id,
45 profile_option_value,
46 created_by,
47 creation_date,
48 last_updated_by,
49 last_update_date,
50 last_update_login
51 )
52 VALUES (p_access_id,
53 p_user_id,
54 p_application_id,
55 p_profile_option_id,
56 p_level_id,
57 p_level_value,
58 p_level_value_application_id,
59 p_profile_option_value,
60 fnd_global.user_id,
61 p_creation_date,
62 fnd_global.user_id,
63 p_creation_date,
64 fnd_global.login_id
65 );
66
67 EXCEPTION
68 WHEN OTHERS THEN
69 RAISE;
70 END insert_profiles_acc;
71
72 /**
73 Refreshes the CSM_PROFILE_VALUES_ACC table, and marks dirty for users accordingly
74 -- MODIFICATION HISTORY
75 -- Person Date Comments
76 -- Anurag 09/23/02 Added conditions for JTM_CREDIT_CARD_ENABLED in the cursor
77 where clauses
78 */
79 PROCEDURE Refresh_Acc (p_status OUT NOCOPY VARCHAR2,
80 p_message OUT NOCOPY VARCHAR2)
81 IS
82 PRAGMA AUTONOMOUS_TRANSACTION;
83 l_pub_item varchar2(30) := 'CSF_M_PROFILES';
84 l_prog_update_date jtm_con_request_data.last_run_date%TYPE;
85 l_access_id jtm_fnd_lookups_acc.access_id%TYPE;
86 l_user_id fnd_user.user_id%TYPE;
87 l_resp_id fnd_responsibility.responsibility_id%TYPE;
88 l_app_id fnd_application.application_id%TYPE;
89 l_markdirty boolean;
90 l_all_omfs_palm_user_list asg_download.user_list;
91 l_null_user_list asg_download.user_list;
92 l_single_access_id_list asg_download.access_list;
93 --a null list
94 l_null_access_list asg_download.access_list;
95 l_run_date date;
96 l_sqlerrno varchar2(20);
97 l_sqlerrmsg varchar2(2000);
98
99 CURSOR l_last_run_date_csr(p_pub_item IN varchar2)
100 IS
101 SELECT nvl(last_run_date, (sysdate - 365*50))
102 FROM jtm_con_request_data
103 WHERE package_name = 'CSM_PROFILE_EVENT_PKG'
104 AND procedure_name = 'REFRESH_ACC';
105
106 --Bug 5257429
107 /*WHENEVER A NEW PROFILE IS ADDED TO INSERT CURSOR, PLEASE DON'T FORGET TO ADD
108 THAT PROFILE TO C_PURGE CURSOR WHICH WILL OTHERWISE REMOVE IT*/
109 --Cursor to insert all profiles(without profile value)
110 CURSOR l_profiles_wovalue_ins_csr
111 IS
112 SELECT csm_profiles_acc_s.NEXTVAL as ACCESS_ID, au.user_id ,
113 opt.profile_option_id, opt.application_id
114 FROM fnd_profile_options opt,
115 ASG_USER au
116 WHERE (opt.profile_option_name = 'CSF_M_RECIPIENTS_BOUNDARY'
117 OR opt.profile_option_name = 'CSF_MOBILE_TASK_TIMES_UPDATABLE'
118 OR opt.profile_option_name = 'CSF_DEBRIEF_OVERLAPPING_LABOR'
119 OR opt.profile_option_name = 'INC_DEFAULT_INCIDENT_SEVERITY'
120 OR opt.profile_option_name = 'INC_DEFAULT_INCIDENT_URGENCY'
121 OR opt.profile_option_name = 'JTF_TIME_UOM_CLASS'
122 OR opt.profile_option_name = 'ICX_PREFERRED_CURRENCY'
123 OR opt.profile_option_name = 'JTF_TASK_DEFAULT_ASSIGNEE_STATUS'
124 OR opt.profile_option_name = 'CS_SR_RESTRICT_IB'
125 OR opt.profile_option_name = 'SERVER_TIMEZONE_ID'
126 OR opt.profile_option_name = 'CLIENT_TIMEZONE_ID'
127 OR opt.profile_option_name = 'CSF_BUSINESS_PROCESS'
128 OR opt.profile_option_name = 'CSM_SEARCH_RESULT_SET_SIZE'
129 OR opt.profile_option_name = 'CSM_IB_ITEMS_AT_LOCATION'
130 OR opt.profile_option_name = 'CSM_ITEM_CATEGORY_SET_FILTER'
131 OR opt.profile_option_name = 'CSM_ITEM_CATEGORY_FILTER'
132 OR opt.profile_option_name = 'CS_INV_VALIDATION_ORG'
133 OR opt.profile_option_name = 'INC_DEFAULT_INCIDENT_TYPE'
134 OR opt.profile_option_name = 'INC_DEFAULT_INCIDENT_STATUS'
135 OR opt.profile_option_name = 'CSM_ENABLE_CREATE_SR'
136 OR opt.profile_option_name = 'CSM_ENABLE_CREATE_TASK'
137 OR opt.profile_option_name = 'CSM_ENABLE_UPDATE_ASSIGNMENTS'
138 OR opt.profile_option_name = 'CSM_ENABLE_VIEW_CUST_PRODUCTS'
139 OR opt.profile_option_name = 'CSM_MAX_READINGS_PER_COUNTER'
140 OR opt.profile_option_name = 'CSF_RETURN_REASON'
141 OR opt.profile_option_name = 'CSFW_DEFAULT_DISTANCE_UNIT'
142 OR opt.profile_option_name = 'CSF_CAPTURE_TRAVEL'
143 OR opt.profile_option_name = 'CSM_LABOR_LINE_TOTAL_CHECK' --new CSM profile, obsoleted CSL profile
144 OR opt.profile_option_name = 'ICX_DATE_FORMAT_MASK'
145 OR opt.profile_option_name = 'JTM_TIMEPICKER_FORMAT'
146 OR opt.profile_option_name = 'CSM_TIME_REASONABILITY_CHECK_APPLY' --new CSM profile, obsoleted CSL profile
147 OR opt.profile_option_name = 'ICX_NUMERIC_CHARACTERS'
148 OR opt.profile_option_name = 'CSF_LABOR_DEBRIEF_DEFAULT_UOM'
149 OR opt.profile_option_name = 'CSF_UOM_HOURS'
150 OR opt.profile_option_name = 'CSZ_DEFAULT_CONTACT_BY'
151 OR opt.profile_option_name = 'HZ_REF_TERRITORY'
152 OR opt.profile_option_name = 'HZ_REF_LANG'
153 OR opt.profile_option_name = 'HZ_LANG_FOR_COUNTRY_DISPLAY'
154 OR opt.profile_option_name = 'CSM_MAX_ATTACHMENT_SIZE' --For PPC
155 OR opt.profile_option_name = 'CSF_UOM_MINUTES'
156 OR opt.profile_option_name = 'CSF_DEFAULT_TASK_STATUS_PERSONAL'
157 OR opt.profile_option_name = 'CSF_DEFAULT_TASK_TYPE_PERSONAL'
158 OR opt.profile_option_name = 'CSF:DEFAULT DEBRIEF BUSINESS PROCESS'
159 OR opt.profile_option_name = 'CSF:DEFAULT DEBRIEF TRANSACTION TYPE'
160 OR opt.profile_option_name = 'INV:EXPENSE_TO_ASSET_TRANSFER'
161 OR opt.profile_option_name = 'JTF_PROFILE_DEFAULT_CURRENCY'
162 OR opt.profile_option_name = 'CSF_DEFAULT_TASK_ASSIGNED_STATUS'
163 OR opt.profile_option_name = 'JTF_TASK_DEFAULT_TASK_STATUS'
164 OR opt.profile_option_name = 'JTF_TASK_DEFAULT_TASK_PRIORITY'
165 OR opt.profile_option_name = 'CSFW_PLANNED_TASK_WINDOW'
166 OR opt.profile_option_name = 'CS_SR_CONTACT_MANDATORY'
167 OR opt.profile_option_name = 'CSM_RESTRICT_DEBRIEF'
168 OR opt.profile_option_name = 'CSM_RESTRICT_ORDERS'
169 OR opt.profile_option_name = 'CSM_RESTRICT_TRANSFERS'
170 OR opt.profile_option_name = 'JTF_TASK_DEFAULT_TASK_TYPE'
171 )
172 AND NVL(opt.start_date_active, SYSDATE) <= SYSDATE
173 AND NVL(opt.end_date_active, SYSDATE) >= SYSDATE
174 AND NOT EXISTS
175 (SELECT 1
176 FROM csm_profile_option_values_acc acc
177 WHERE acc.profile_option_id = opt.profile_option_id
178 AND acc.application_id = opt.application_id
179 AND acc.user_id = au.user_id
180 );
181 -- get the profiles with values to be inserted
182 CURSOR l_profiles_ins_csr(p_last_upd_date date,
183 p_csm_appl_id fnd_application.application_id%TYPE,
184 p_csm_resp_id fnd_responsibility.responsibility_id%TYPE)
185 IS
186 SELECT val.application_id, val.profile_option_id, val.level_id, val.level_value,
187 val.level_value_application_id, val.profile_option_value, opt.profile_option_name
188 FROM fnd_profile_options opt,
189 fnd_profile_option_values val
190 WHERE (opt.profile_option_name = 'CSF_M_RECIPIENTS_BOUNDARY'
191 -- OR opt.profile_option_name = 'CSF_M_AGENDA_ALLOWCHANGESCOMPLETEDTASK' ---end_dated
192 OR opt.profile_option_name = 'CSF_MOBILE_TASK_TIMES_UPDATABLE'
193 OR opt.profile_option_name = 'CSF_DEBRIEF_OVERLAPPING_LABOR'
194 OR opt.profile_option_name = 'INC_DEFAULT_INCIDENT_SEVERITY'
195 OR opt.profile_option_name = 'INC_DEFAULT_INCIDENT_URGENCY'
196 OR opt.profile_option_name = 'JTF_TIME_UOM_CLASS'
197 OR opt.profile_option_name = 'ICX_PREFERRED_CURRENCY'
198 OR opt.profile_option_name = 'JTF_TASK_DEFAULT_ASSIGNEE_STATUS'
199 OR opt.profile_option_name = 'CS_SR_RESTRICT_IB'
200 OR opt.profile_option_name = 'SERVER_TIMEZONE_ID'
201 OR opt.profile_option_name = 'CLIENT_TIMEZONE_ID'
202 OR opt.profile_option_name = 'CSF_BUSINESS_PROCESS'
203 OR opt.profile_option_name = 'CSM_SEARCH_RESULT_SET_SIZE'
204 OR opt.profile_option_name = 'CSM_IB_ITEMS_AT_LOCATION'
205 OR opt.profile_option_name = 'CSM_ITEM_CATEGORY_SET_FILTER'
206 OR opt.profile_option_name = 'CSM_ITEM_CATEGORY_FILTER'
207 OR opt.profile_option_name = 'CS_INV_VALIDATION_ORG'
208 OR opt.profile_option_name = 'INC_DEFAULT_INCIDENT_TYPE'
209 OR opt.profile_option_name = 'INC_DEFAULT_INCIDENT_STATUS'
210 OR opt.profile_option_name = 'CSM_ENABLE_CREATE_SR'
211 OR opt.profile_option_name = 'CSM_ENABLE_CREATE_TASK'
212 OR opt.profile_option_name = 'CSM_ENABLE_UPDATE_ASSIGNMENTS'
213 OR opt.profile_option_name = 'CSM_ENABLE_VIEW_CUST_PRODUCTS'
214 OR opt.profile_option_name = 'CSM_MAX_READINGS_PER_COUNTER'
215 OR opt.profile_option_name = 'CSF_RETURN_REASON'
216 --R 12 updates
217 OR opt.profile_option_name = 'CSFW_DEFAULT_DISTANCE_UNIT'
218 OR opt.profile_option_name = 'CSF_CAPTURE_TRAVEL'
219 OR opt.profile_option_name = 'CSM_LABOR_LINE_TOTAL_CHECK' --new CSM profile, obsoleted CSL profile
220 OR opt.profile_option_name = 'ICX_DATE_FORMAT_MASK'
221 OR opt.profile_option_name = 'JTM_TIMEPICKER_FORMAT'
222 OR opt.profile_option_name = 'CSM_TIME_REASONABILITY_CHECK_APPLY' --new CSM profile, obsoleted CSL profile
223 OR opt.profile_option_name = 'ICX_NUMERIC_CHARACTERS'
224 OR opt.profile_option_name = 'CSF_LABOR_DEBRIEF_DEFAULT_UOM'
225 OR opt.profile_option_name = 'CSF_UOM_HOURS'
226 OR opt.profile_option_name = 'CSZ_DEFAULT_CONTACT_BY'
227 OR opt.profile_option_name = 'HZ_REF_TERRITORY'
228 OR opt.profile_option_name = 'HZ_REF_LANG'
229 OR opt.profile_option_name = 'HZ_LANG_FOR_COUNTRY_DISPLAY'
230 OR opt.profile_option_name = 'CSM_MAX_ATTACHMENT_SIZE' --For PPC
231 OR opt.profile_option_name = 'CSF_UOM_MINUTES'
232 OR opt.profile_option_name = 'CSF_DEFAULT_TASK_STATUS_PERSONAL'
233 OR opt.profile_option_name = 'CSF_DEFAULT_TASK_TYPE_PERSONAL'
234 OR opt.profile_option_name = 'CSF:DEFAULT DEBRIEF BUSINESS PROCESS'
235 OR opt.profile_option_name = 'CSF:DEFAULT DEBRIEF TRANSACTION TYPE'
236 OR opt.profile_option_name = 'INV:EXPENSE_TO_ASSET_TRANSFER'
237 OR opt.profile_option_name = 'JTF_PROFILE_DEFAULT_CURRENCY'
238 OR opt.profile_option_name = 'CSF_DEFAULT_TASK_ASSIGNED_STATUS'
239 OR opt.profile_option_name = 'JTF_TASK_DEFAULT_TASK_STATUS'
240 OR opt.profile_option_name = 'JTF_TASK_DEFAULT_TASK_PRIORITY'
241 OR opt.profile_option_name = 'CSFW_PLANNED_TASK_WINDOW'
242 OR opt.profile_option_name = 'CS_SR_CONTACT_MANDATORY'
243 OR opt.profile_option_name = 'CSM_RESTRICT_DEBRIEF'
244 OR opt.profile_option_name = 'CSM_RESTRICT_ORDERS'
245 OR opt.profile_option_name = 'CSM_RESTRICT_TRANSFERS'
246 OR opt.profile_option_name = 'JTF_TASK_DEFAULT_TASK_TYPE'
247 )
248 AND val.application_id = opt.application_id
249 AND val.profile_option_id = opt.profile_option_id
250 AND NVL(opt.start_date_active, SYSDATE) <= SYSDATE
251 AND NVL(opt.end_date_active, SYSDATE) >= SYSDATE
252 AND ( (val.level_id = 10001)
253 OR (val.level_id = 10004 AND val.level_value IN (SELECT USER_ID FROM ASG_USER WHERE ENABLED= 'Y'))
254 OR (val.level_id = 10002 AND val.level_value = p_csm_appl_id)
255 OR (val.level_id = 10003 AND val.level_value = p_csm_resp_id)
256 )
257 AND NOT EXISTS
258 (SELECT 1
259 FROM csm_profile_option_values_acc acc
260 WHERE acc.profile_option_id = val.profile_option_id
261 AND acc.application_id = val.application_id
262 AND acc.level_id = val.level_id
263 AND acc.level_value = val.level_value
264 AND acc.level_id <> 10003
265 UNION
266 SELECT 1
267 FROM csm_profile_option_values_acc acc,
268 fnd_responsibility resp
269 WHERE acc.profile_option_id = val.profile_option_id
270 AND acc.application_id = val.application_id
271 AND acc.level_id = val.level_id
272 AND acc.level_value = val.level_value
273 AND acc.level_id = 10003
274 AND acc.level_value = resp.responsibility_id
275 AND acc.level_value_application_id = resp.application_id
276 AND SYSDATE BETWEEN nvl(resp.start_date, sysdate) AND nvl(resp.end_date, sysdate)
277 )
278 ORDER BY val.application_id, val.profile_option_id, val.level_id desc ;
279
280 -- get the profiles to be updated
281 CURSOR l_profiles_upd_csr
282 IS
283 SELECT val.application_id,
284 val.profile_option_id,
285 val.level_id,
286 val.level_value,
287 val.level_value_application_id,
288 val.profile_option_value,
289 acc.user_id,
290 acc.access_id
291 FROM fnd_profile_option_values val,
292 csm_profile_option_values_acc acc
293 WHERE val.profile_option_id = acc.profile_option_id
294 AND val.application_id = acc.application_id
295 AND acc.level_id = val.level_id
296 AND acc.level_value = val.level_value
297 AND NVL(val.profile_option_value,-1) <> NVL(acc.profile_option_value,-1);
298
299 -- get the profiles to be deleted
300 CURSOR l_profiles_del_csr(p_last_upd_date date)
301 IS
302 SELECT acc.access_id, acc.application_id, acc.profile_option_id, acc.level_id, acc.level_value,
303 acc.level_value_application_id, acc.profile_option_value, opt.profile_option_name,
304 acc.user_id
305 FROM csm_profile_option_values_acc acc,
306 fnd_profile_options opt
307 WHERE acc.profile_option_id = opt.profile_option_id
311 AND (opt.profile_option_name = 'CSF_M_RECIPIENTS_BOUNDARY'
308 AND acc.application_id = opt.application_id
309 AND acc.level_id IS NOT NULL
310 AND acc.level_value IS NOT NULL
312 -- OR opt.profile_option_name = 'CSF_M_AGENDA_ALLOWCHANGESCOMPLETEDTASK'
313 OR opt.profile_option_name = 'CSF_MOBILE_TASK_TIMES_UPDATABLE'
314 OR opt.profile_option_name = 'CSF_DEBRIEF_OVERLAPPING_LABOR'
315 OR opt.profile_option_name = 'INC_DEFAULT_INCIDENT_SEVERITY'
316 OR opt.profile_option_name = 'INC_DEFAULT_INCIDENT_URGENCY'
317 OR opt.profile_option_name = 'JTF_TIME_UOM_CLASS'
318 OR opt.profile_option_name = 'ICX_PREFERRED_CURRENCY'
319 OR opt.profile_option_name = 'JTF_TASK_DEFAULT_ASSIGNEE_STATUS'
320 OR opt.profile_option_name = 'CS_SR_RESTRICT_IB'
321 OR opt.profile_option_name = 'SERVER_TIMEZONE_ID'
322 OR opt.profile_option_name = 'CLIENT_TIMEZONE_ID'
323 OR opt.profile_option_name = 'CSF_BUSINESS_PROCESS'
324 OR opt.profile_option_name = 'CSM_SEARCH_RESULT_SET_SIZE'
325 OR opt.profile_option_name = 'CSM_IB_ITEMS_AT_LOCATION'
326 OR opt.profile_option_name = 'CSM_ITEM_CATEGORY_SET_FILTER'
327 OR opt.profile_option_name = 'CSM_ITEM_CATEGORY_FILTER'
328 OR opt.profile_option_name = 'CS_INV_VALIDATION_ORG'
329 OR opt.profile_option_name = 'INC_DEFAULT_INCIDENT_TYPE'
330 OR opt.profile_option_name = 'INC_DEFAULT_INCIDENT_STATUS'
331 OR opt.profile_option_name = 'CSM_ENABLE_CREATE_SR'
332 OR opt.profile_option_name = 'CSM_ENABLE_CREATE_TASK'
333 OR opt.profile_option_name = 'CSM_ENABLE_UPDATE_ASSIGNMENTS'
334 OR opt.profile_option_name = 'CSM_ENABLE_VIEW_CUST_PRODUCTS'
335 OR opt.profile_option_name = 'CSM_MAX_READINGS_PER_COUNTER'
336 OR opt.profile_option_name = 'CSF_RETURN_REASON'
337 --R 12 updates
338 OR opt.profile_option_name = 'CSFW_DEFAULT_DISTANCE_UNIT'
339 OR opt.profile_option_name = 'CSF_CAPTURE_TRAVEL'
340 OR opt.profile_option_name = 'CSM_LABOR_LINE_TOTAL_CHECK'
341 OR opt.profile_option_name = 'ICX_DATE_FORMAT_MASK'
342 OR opt.profile_option_name = 'JTM_TIMEPICKER_FORMAT'
343 OR opt.profile_option_name = 'CSM_TIME_REASONABILITY_CHECK_APPLY'
344 OR opt.profile_option_name = 'ICX_NUMERIC_CHARACTERS'
345 OR opt.profile_option_name = 'CSF_LABOR_DEBRIEF_DEFAULT_UOM'
346 OR opt.profile_option_name = 'CSF_UOM_HOURS'
347 OR opt.profile_option_name = 'CSZ_DEFAULT_CONTACT_BY'
348 OR opt.profile_option_name = 'HZ_REF_TERRITORY'
349 OR opt.profile_option_name = 'HZ_REF_LANG'
350 OR opt.profile_option_name = 'HZ_LANG_FOR_COUNTRY_DISPLAY'
351 OR opt.profile_option_name = 'CSM_MAX_ATTACHMENT_SIZE' --For PPC
352 OR opt.profile_option_name = 'CSF_UOM_MINUTES'
353 OR opt.profile_option_name = 'CSF_DEFAULT_TASK_STATUS_PERSONAL'
354 OR opt.profile_option_name = 'CSF_DEFAULT_TASK_TYPE_PERSONAL'
355 OR opt.profile_option_name = 'CSF:DEFAULT DEBRIEF BUSINESS PROCESS'
356 OR opt.profile_option_name = 'CSF:DEFAULT DEBRIEF TRANSACTION TYPE'
357 OR opt.profile_option_name = 'INV:EXPENSE_TO_ASSET_TRANSFER'
358 OR opt.profile_option_name = 'JTF_PROFILE_DEFAULT_CURRENCY'
359 OR opt.profile_option_name = 'CSF_DEFAULT_TASK_ASSIGNED_STATUS'
360 OR opt.profile_option_name = 'JTF_TASK_DEFAULT_TASK_STATUS'
361 OR opt.profile_option_name = 'JTF_TASK_DEFAULT_TASK_PRIORITY'
362 OR opt.profile_option_name = 'CSFW_PLANNED_TASK_WINDOW'
363 OR opt.profile_option_name = 'CS_SR_CONTACT_MANDATORY'
364 OR opt.profile_option_name = 'CSM_RESTRICT_DEBRIEF'
365 OR opt.profile_option_name = 'CSM_RESTRICT_ORDERS'
366 OR opt.profile_option_name = 'CSM_RESTRICT_TRANSFERS'
367 OR opt.profile_option_name = 'JTF_TASK_DEFAULT_TASK_TYPE'
368 )
369 AND NOT EXISTS
370 (SELECT 1
371 FROM fnd_profile_option_values val
372 WHERE val.application_id = acc.application_id
373 AND val.profile_option_id = acc.profile_option_id
374 AND val.level_id = acc.level_id
375 AND val.level_value = acc.level_value
376 AND val.level_id <> 10003
377 UNION
378 SELECT 1
379 FROM fnd_profile_option_values val,
380 fnd_responsibility resp
381 WHERE val.application_id = acc.application_id
382 AND val.profile_option_id = acc.profile_option_id
383 AND val.level_id = acc.level_id
384 AND val.level_value = acc.level_value
385 AND val.level_id = 10003
386 AND val.level_value = resp.responsibility_id
387 AND val.level_value_application_id = resp.application_id
388 AND SYSDATE BETWEEN nvl(resp.start_date, sysdate) AND nvl(resp.end_date, sysdate)
389 )
390 ORDER BY acc.profile_option_id, acc.level_id desc
391 FOR UPDATE OF acc.profile_option_value, acc.level_id, acc.level_value nowait
392 ;
393
394 --Bug 5257429
395 CURSOR c_purge IS
396 SELECT /*+ index(ACC CSM_PROFILE_VALUES_ACC_N1) */
397 ACC.APPLICATION_ID,
398 ACC.PROFILE_OPTION_ID
399 FROM csm_profile_option_values_acc ACC
400 WHERE NOT EXISTS( SELECT 1
401 FROM FND_PROFILE_OPTIONS OPT
402 WHERE OPT.PROFILE_OPTION_ID = ACC.PROFILE_OPTION_ID
403 AND OPT.APPLICATION_ID = ACC.APPLICATION_ID
404 AND OPT.PROFILE_OPTION_NAME IN
405 ( 'CSF_M_RECIPIENTS_BOUNDARY'
406 , 'CSF_MOBILE_TASK_TIMES_UPDATABLE'
407 , 'CSF_DEBRIEF_OVERLAPPING_LABOR'
408 , 'INC_DEFAULT_INCIDENT_SEVERITY'
409 , 'INC_DEFAULT_INCIDENT_URGENCY'
410 , 'JTF_TIME_UOM_CLASS'
411 , 'ICX_PREFERRED_CURRENCY'
412 , 'JTF_TASK_DEFAULT_ASSIGNEE_STATUS'
413 , 'CS_SR_RESTRICT_IB'
417 , 'CSM_SEARCH_RESULT_SET_SIZE'
414 , 'SERVER_TIMEZONE_ID'
415 , 'CLIENT_TIMEZONE_ID'
416 , 'CSF_BUSINESS_PROCESS'
418 , 'CSM_IB_ITEMS_AT_LOCATION'
419 , 'CSM_ITEM_CATEGORY_SET_FILTER'
420 , 'CSM_ITEM_CATEGORY_FILTER'
421 , 'CS_INV_VALIDATION_ORG'
422 , 'INC_DEFAULT_INCIDENT_TYPE'
423 , 'INC_DEFAULT_INCIDENT_STATUS'
424 , 'CSM_ENABLE_CREATE_SR'
425 , 'CSM_ENABLE_CREATE_TASK'
426 , 'CSM_ENABLE_UPDATE_ASSIGNMENTS'
427 , 'CSM_ENABLE_VIEW_CUST_PRODUCTS'
428 , 'CSM_MAX_READINGS_PER_COUNTER'
429 , 'CSF_RETURN_REASON'
430 , 'CSFW_DEFAULT_DISTANCE_UNIT'
431 , 'CSF_CAPTURE_TRAVEL'
432 , 'CSM_LABOR_LINE_TOTAL_CHECK'
433 , 'ICX_DATE_FORMAT_MASK'
434 , 'JTM_TIMEPICKER_FORMAT'
435 , 'CSM_TIME_REASONABILITY_CHECK_APPLY'
436 , 'ICX_NUMERIC_CHARACTERS'
437 , 'CSF_LABOR_DEBRIEF_DEFAULT_UOM'
438 , 'CSF_UOM_HOURS'
439 , 'CSZ_DEFAULT_CONTACT_BY'
440 , 'HZ_REF_TERRITORY'
441 , 'HZ_REF_LANG'
442 , 'HZ_LANG_FOR_COUNTRY_DISPLAY'
443 , 'CSM_MAX_ATTACHMENT_SIZE' --For PPC
444 , 'CSF_UOM_MINUTES'
445 , 'CSF_DEFAULT_TASK_STATUS_PERSONAL'
446 , 'CSF_DEFAULT_TASK_TYPE_PERSONAL'
447 , 'CSF:DEFAULT DEBRIEF BUSINESS PROCESS'
448 , 'CSF:DEFAULT DEBRIEF TRANSACTION TYPE'
449 , 'INV:EXPENSE_TO_ASSET_TRANSFER'
450 , 'JTF_PROFILE_DEFAULT_CURRENCY'
451 , 'CSF_DEFAULT_TASK_ASSIGNED_STATUS'
452 , 'JTF_TASK_DEFAULT_TASK_STATUS'
453 , 'JTF_TASK_DEFAULT_TASK_PRIORITY'
454 , 'CSFW_PLANNED_TASK_WINDOW'
455 , 'CS_SR_CONTACT_MANDATORY'
456 , 'CSM_RESTRICT_DEBRIEF'
457 , 'CSM_RESTRICT_ORDERS'
458 , 'CSM_RESTRICT_TRANSFERS'
459 , 'JTF_TASK_DEFAULT_TASK_TYPE'
460 )
461 AND NVL(OPT.start_date_active, SYSDATE) <= SYSDATE
462 AND NVL(OPT.end_date_active, SYSDATE) >= SYSDATE
463 );
464
465 TYPE PURGE_TAB IS TABLE OF c_purge%ROWTYPE;
466 l_tab PURGE_TAB;
467
468 --Bug 5257429
469 CURSOR c_get_accessID(b_app_id NUMBER, b_prfopt_id NUMBER)
470 IS
471 SELECT ACC.ACCESS_ID,ACC.USER_ID
472 FROM csm_profile_option_values_acc ACC
473 WHERE ACC.APPLICATION_ID= b_app_id
474 AND ACC.PROFILE_OPTION_ID= b_prfopt_id;
475
476
477 CURSOR l_get_old_profile_csr (p_profile_option_id IN number, p_user_id IN number)
478 IS
479 SELECT access_id, profile_option_value, level_id
480 FROM csm_profile_option_values_acc
481 WHERE profile_option_id = p_profile_option_id
482 AND user_id = p_user_id
483 ORDER BY level_id desc
484 FOR UPDATE OF profile_option_value, level_id, level_value, last_update_date nowait;
485
486 -- get the value at the next profile level
487 CURSOR c_profiles_csr ( p_profile_option_name VARCHAR2,
488 p_user_id IN NUMBER DEFAULT NULL,
489 p_csm_resp_id IN NUMBER DEFAULT NULL,
490 p_csm_app_id IN NUMBER DEFAULT NULL
491 )
492 IS
493 SELECT val.profile_option_value,
494 val.level_id,
495 val.level_value,
496 val.level_value_application_id,
497 val.profile_option_id
498 FROM fnd_profile_options opt,
499 fnd_profile_option_values val
500 WHERE opt.profile_option_name = p_profile_option_name
501 AND NVL(opt.start_date_active, SYSDATE) <= SYSDATE
502 AND NVL(opt.end_date_active, SYSDATE) >= SYSDATE
503 AND opt.application_id = val.application_id
504 AND opt.profile_option_id = val.profile_option_id
505 AND ( ( val.level_id = 10001
506 )
507 OR
508 ( val.level_id = 10002 AND
509 val.level_value = p_csm_app_id
510 ) OR
511 ( val.level_id = 10003 AND
512 val.level_value = p_csm_resp_id
513 ) OR
514 ( val.level_id = 10004 AND
515 val.level_value = p_user_id
516 )
517 )
518 ORDER BY val.level_id DESC;
519
520 r_profiles_rec c_profiles_csr%ROWTYPE;
521
522 CURSOR c_profile ( p_profile_option_name IN VARCHAR2,
523 p_user_level_value IN NUMBER DEFAULT NULL,
524 p_csm_resp_id IN NUMBER default NULL,
525 p_csm_app_id IN NUMBER DEFAULT NULL
526 ) IS
527 SELECT val.profile_option_value,
528 val.level_id,
529 val.level_value,
530 val.level_value_application_id
531 FROM fnd_profile_options opt,
532 fnd_profile_option_values val
533 WHERE opt.profile_option_name = p_profile_option_name
534 AND NVL(opt.start_date_active, SYSDATE) <= SYSDATE
535 AND NVL(opt.end_date_active, SYSDATE) >= SYSDATE
536 AND opt.application_id = val.application_id
540 OR
537 AND opt.profile_option_id = val.profile_option_id
538 AND ( ( val.level_id = 10001
539 )
541 ( val.level_id = 10002 AND
542 val.level_value = p_csm_app_id
543 ) OR
544 ( val.level_id = 10003 AND
545 val.level_value = p_csm_resp_id
546 ) OR
547 ( val.level_id = 10004 AND
548 val.level_value = p_user_level_value
549 )
550 )
551 ORDER BY val.level_id DESC;
552
553 cursor c_csm_appl is
554 SELECT APPLICATION_ID
555 FROM fnd_application
556 where application_short_name = 'CSM';
557
558 cursor c_csm_resp(c_user_id NUMBER) is
559 select RESPONSIBILITY_ID
560 from ASG_USER
561 where USER_ID = c_user_id;
562
563 CURSOR c_profile_seq IS
564 SELECT csm_profiles_acc_s.NEXTVAL
565 FROM dual;
566
567 l_csm_appl_id fnd_application.application_id%TYPE;
568 l_csm_resp_id fnd_responsibility.responsibility_id%TYPE;
569 l_old_profile_option_value fnd_profile_option_values.profile_option_value%TYPE;
570 l_old_level_id fnd_profile_option_values.level_id%TYPE;
571 l_profile_option_value fnd_profile_option_values.profile_option_value%TYPE;
572 l_level_id fnd_profile_option_values.level_id%TYPE;
573 l_level_value fnd_profile_option_values.level_value%TYPE;
574 l_level_value_application_id fnd_profile_option_values.level_value_application_id%TYPE;
575
576 TYPE num_tab_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
577 l_acc_tab num_tab_type;
578 l_user_tab num_tab_type;
579
580 BEGIN
581 -- data program is run
582 l_run_date := SYSDATE;
583
584 -- get last conc program update date
585 OPEN l_last_run_date_csr(g_pub_item);
586 FETCH l_last_run_date_csr INTO l_prog_update_date;
587 CLOSE l_last_run_date_csr;
588
589 -- get csm application id
590 OPEN c_csm_appl;
591 FETCH c_csm_appl INTO l_csm_appl_id;
592 CLOSE c_csm_appl;
593
594
595 --Bug 5257429
596 OPEN c_purge;
597 FETCH c_purge BULK COLLECT INTO l_tab;
598 CLOSE c_purge;
599
600
601 CSM_UTIL_PKG.LOG('Entering DELETE to remove ' || l_tab.count||' records',
602 'CSM_PROFILE_EVENT_PKG.REFRESH_ACC',FND_LOG.LEVEL_PROCEDURE);
603
604 FOR I IN 1..l_tab.COUNT
605 LOOP
606 OPEN c_get_accessID(l_tab(I).APPLICATION_ID,l_tab(I).PROFILE_OPTION_ID);
607 FETCH c_get_accessID BULK COLLECT INTO l_acc_tab,l_user_tab;
608 CLOSE c_get_accessID;
609
610 FOR J IN 1..l_user_tab.COUNT
611 LOOP
612 l_markdirty := CSM_UTIL_PKG.MakeDirtyForUser(g_pub_item,l_acc_tab(J) ,l_user_tab(J), 'D', sysdate );
613 END LOOP;
614
615 FORALL J IN 1..l_acc_tab.COUNT
616 DELETE FROM csm_profile_option_values_acc WHERE ACCESS_ID=l_acc_tab(J);
617
618 END LOOP;
619
620 COMMIT;
621
622 --- process profile wovalue inserts
623 FOR r_profiles_ins_rec IN l_profiles_wovalue_ins_csr LOOP
624
625 -- insert into csm_profile_option_values_acc
626 insert_profiles_acc(r_profiles_ins_rec.access_id,r_profiles_ins_rec.user_id,r_profiles_ins_rec.application_id,
627 r_profiles_ins_rec.profile_option_id, 10001,
628 0, NULL,
629 NULL,l_run_date);
630
631 --mark dirty the SDQ for the user
632 l_markdirty := CSM_UTIL_PKG.MakeDirtyForUser(g_pub_item,
633 r_profiles_ins_rec.access_id, r_profiles_ins_rec.user_id, ASG_DOWNLOAD.INS, SYSDATE);
634
635 END LOOP; -- process profile wovalue inserts
636
637 COMMIT;
638
639 --process deletes
640 FOR r_profiles_del_rec IN l_profiles_del_csr(l_prog_update_date) LOOP
641
642 -- initialize the user list
643 l_all_omfs_palm_user_list := l_null_user_list;
644 l_resp_id := -99;
645 l_app_id := -99;
646 -- set the old profile option value
647 l_old_profile_option_value := r_profiles_del_rec.profile_option_value;
648
649 IF r_profiles_del_rec.level_id = 10004 THEN
650 l_all_omfs_palm_user_list(1) := r_profiles_del_rec.level_value;
651 ELSIF r_profiles_del_rec.level_id = 10003 THEN
652 l_resp_id := r_profiles_del_rec.level_value;
653 l_all_omfs_palm_user_list(1) := r_profiles_del_rec.user_id;
654 ELSIF r_profiles_del_rec.level_id = 10002 THEN
655 l_app_id := r_profiles_del_rec.level_value;
656 l_all_omfs_palm_user_list(1) := r_profiles_del_rec.user_id;
657 ELSE
658 -- get the specific user deleted
659 l_all_omfs_palm_user_list(1) := r_profiles_del_rec.user_id;
660 END IF;
661
662 -- loop for all the valid omfs palm users based on profile level_id
663 FOR i IN 1..l_all_omfs_palm_user_list.count LOOP
664 l_user_id := l_all_omfs_palm_user_list(i);
665
666 -- get csm responsibility id
667 OPEN c_csm_resp(l_user_id);
668 FETCH c_csm_resp INTO l_csm_resp_id;
669 CLOSE c_csm_resp;
670
671 IF csm_util_pkg.is_palm_user(l_user_id) THEN
672 OPEN c_profiles_csr(r_profiles_del_rec.profile_option_name, l_user_id, l_csm_resp_id, l_csm_appl_id);
673 FETCH c_profiles_csr INTO r_profiles_rec;
674 IF c_profiles_csr%FOUND THEN
675 IF r_profiles_rec.profile_option_value IS NULL THEN
679 r_profiles_rec.level_value := 0;
676 -- get profile at site level
677 fnd_profile.GET(NAME => r_profiles_del_rec.profile_option_name, VAL => r_profiles_rec.profile_option_value );
678 r_profiles_rec.level_id := 10001;
680 END IF;
681
682 UPDATE csm_profile_option_values_acc
683 SET profile_option_value = r_profiles_rec.profile_option_value,
684 level_id = r_profiles_rec.level_id,
685 level_value = r_profiles_rec.level_value,
686 level_value_application_id = r_profiles_rec.level_value_application_id,
687 last_update_date = l_run_date
688 WHERE CURRENT OF l_profiles_del_csr;
689
690 --mark dirty the SDQ for the user
691 l_markdirty := CSM_UTIL_PKG.MakeDirtyForUser(g_pub_item,
692 r_profiles_del_rec.access_id, l_user_id, ASG_DOWNLOAD.UPD, SYSDATE);
693 ELSE
694 --No value set for this profile at any level and hence set back to site level with value null
695 UPDATE csm_profile_option_values_acc
696 SET profile_option_value = NULL,
697 level_id = 10001,
698 level_value = 0,
699 level_value_application_id = NULL,
700 last_update_date = l_run_date
701 WHERE CURRENT OF l_profiles_del_csr;
702 --mark dirty the SDQ for the user
703 l_markdirty := CSM_UTIL_PKG.MakeDirtyForUser(g_pub_item,
704 r_profiles_del_rec.access_id, l_user_id, ASG_DOWNLOAD.UPD, SYSDATE);
705
706 END IF;
707 CLOSE c_profiles_csr;
708 ELSE
709 DELETE FROM csm_profile_option_values_acc WHERE profile_option_id = r_profiles_del_rec.profile_option_id
710 AND user_id = l_user_id;
711 END IF; -- if valid omfs user
712
713 END LOOP; --palm omfs user loop
714
715 END LOOP; -- process deletes
716 COMMIT;
717
718 --process updates STARTS
719 FOR r_profiles_upd_rec IN l_profiles_upd_csr LOOP
720
721 UPDATE csm_profile_option_values_acc
722 SET profile_option_value = r_profiles_upd_rec.profile_option_value,
723 last_update_date = l_run_date
724 WHERE USER_ID = r_profiles_upd_rec.user_id
725 AND profile_option_id = r_profiles_upd_rec.profile_option_id
726 AND level_id = r_profiles_upd_rec.level_id
727 AND level_value = r_profiles_upd_rec.level_value;
728
729 --mark dirty the SDQ for the user
730 l_markdirty := CSM_UTIL_PKG.MakeDirtyForUser(g_pub_item,
731 r_profiles_upd_rec.access_id, r_profiles_upd_rec.user_id, ASG_DOWNLOAD.UPD, SYSDATE);
732 END LOOP;
733 COMMIT;
734 --process updates ENDS
735
736 --process inserts STARTS
737 FOR r_profiles_ins_rec IN l_profiles_ins_csr(l_prog_update_date,
738 l_csm_appl_id, l_csm_resp_id) LOOP
739
740 -- initialize the user list
741 l_all_omfs_palm_user_list := l_null_user_list;
742
743 IF r_profiles_ins_rec.level_id = 10004 THEN
744 l_all_omfs_palm_user_list(1) := r_profiles_ins_rec.level_value;
745 ELSIF r_profiles_ins_rec.level_id = 10003 THEN
746 -- get all the omfs palm users for the responsibility id
747
748 l_all_omfs_palm_user_list := get_all_omfs_resp_palm_users(r_profiles_ins_rec.level_value);
749 ELSE
750 -- get all the omfs palm users
751 l_all_omfs_palm_user_list := csm_util_pkg.get_all_omfs_palm_user_list;
752
753 END IF;
754
755 -- loop for all the valid omfs palm users based on profile level_id
756 FOR i IN 1..l_all_omfs_palm_user_list.COUNT LOOP
757 l_user_id := l_all_omfs_palm_user_list(i);
758
759 IF (r_profiles_ins_rec.level_id <> 10004 OR (r_profiles_ins_rec.level_id = 10004
760 AND csm_util_pkg.is_palm_user(l_user_id))) THEN
761
762 -- delete any lower levels that exist for this profile for the user
763 OPEN l_get_old_profile_csr(r_profiles_ins_rec.profile_option_id, l_user_id);
764 FETCH l_get_old_profile_csr INTO l_access_id, l_old_profile_option_value, l_old_level_id;
765 IF l_get_old_profile_csr%FOUND THEN
766 -- only call the WF if a profile at a higher level is added; update the acc table with the new value
767 IF r_profiles_ins_rec.level_id > NVL(l_old_level_id,0) THEN
768
769 UPDATE csm_profile_option_values_acc
770 SET profile_option_value = r_profiles_ins_rec.profile_option_value,
771 level_id = r_profiles_ins_rec.level_id,
772 level_value = r_profiles_ins_rec.level_value,
773 level_value_application_id = r_profiles_ins_rec.level_value_application_id,
774 last_update_date = l_run_date
775 WHERE CURRENT OF l_get_old_profile_csr;
776
777 IF is_mfs_profile(p_profile_option_name=>r_profiles_ins_rec.profile_option_name) THEN
778 --mark dirty the SDQ for the user
779 l_markdirty := CSM_UTIL_PKG.MakeDirtyForUser(g_pub_item,
780 l_access_id, l_user_id, ASG_DOWNLOAD.UPD, SYSDATE);
781 END IF;
782 END IF;
783
784 ELSE -- not found so insert the record(mostly this case is not used as the record is already available)
785
786 IF (r_profiles_ins_rec.level_id = 10004 AND r_profiles_ins_rec.level_value = l_user_id) OR
790 OPEN c_profile_seq;
787 (r_profiles_ins_rec.level_id <> 10004) THEN
788
789 -- get the access_id
791 FETCH c_profile_seq INTO l_access_id;
792 CLOSE c_profile_seq;
793
794 -- insert into csm_profile_option_values_acc
795 insert_profiles_acc(l_access_id,l_user_id,r_profiles_ins_rec.application_id,
796 r_profiles_ins_rec.profile_option_id, r_profiles_ins_rec.level_id,
797 r_profiles_ins_rec.level_value, r_profiles_ins_rec.level_value_application_id,
798 r_profiles_ins_rec.profile_option_value,l_run_date);
799
800 --mark dirty the SDQ for the user
801 l_markdirty := CSM_UTIL_PKG.MakeDirtyForUser(g_pub_item,
802 l_access_id, l_user_id, ASG_DOWNLOAD.INS, SYSDATE);
803
804 END IF;
805 END IF;
806 CLOSE l_get_old_profile_csr;
807 END IF; --- check of is_palm_user for level 10004
808 END LOOP; --palm omfs user loop
809
810 END LOOP; -- process inserts
811
812 -- set the program update date in jtm_con_request_data to sysdate
813 UPDATE jtm_con_request_data
814 SET last_run_date = l_run_date,
815 last_update_date = SYSDATE
816 WHERE package_name = 'CSM_PROFILE_EVENT_PKG'
817 AND procedure_name = 'REFRESH_ACC';
818
819 p_status := 'FINE';
820 p_message := 'CSM_PROFILE_EVENT_PKG.Refresh_Acc Executed successfully';
821
822 COMMIT;
823
824 EXCEPTION
825 WHEN others THEN
826 l_sqlerrno := to_char(SQLCODE);
827 l_sqlerrmsg := substr(SQLERRM, 1,200);
828 ROLLBACK;
829 p_status := 'ERROR';
830 p_message := 'Error in CSM_PROFILE_EVENT_PKG.Refresh_Acc: ' || l_sqlerrno || ':' || l_sqlerrmsg;
831 csm_util_pkg.log('CSM_PROFILE_EVENT_PKG ERROR : ' || l_sqlerrno || ':' || l_sqlerrmsg, 'CSM_PROFILE_EVENT_PKG.REFRESH_ACC', FND_LOG.LEVEL_EXCEPTION);
832 fnd_file.put_line(fnd_file.log, 'CSM_PROFILE_EVENT_PKG ERROR : ' || l_sqlerrno || ':' || l_sqlerrmsg);
833
834 END Refresh_Acc;
835
836 /***
837 ** Populates the user's acc table with the profiles upon user creation
838 ***/
839
840 PROCEDURE refresh_user_acc(p_user_id IN NUMBER)
841 IS
842 l_sqlerrno VARCHAR2(20);
843 l_sqlerrmsg VARCHAR2(4000);
844 l_error_msg VARCHAR2(4000);
845 l_return_status VARCHAR2(2000);
846
847 l_run_date DATE;
848 l_access_id jtm_fnd_lookups_acc.access_id%TYPE;
849 l_markdirty BOOLEAN;
850
851 -- get the profiles to be inserted for the new user
852 CURSOR l_profiles_ins_csr(p_user_id IN number,
853 p_csm_appl_id fnd_application.application_id%TYPE,
854 p_csm_resp_id fnd_responsibility.responsibility_id%TYPE
855 )
856 IS
857 SELECT val.application_id, val.profile_option_id, val.level_id, val.level_value,
858 val.level_value_application_id, val.profile_option_value, opt.profile_option_name
859 FROM fnd_profile_options opt,
860 fnd_profile_option_values val
861 WHERE (opt.profile_option_name = 'CSF_M_RECIPIENTS_BOUNDARY'
862 -- OR opt.profile_option_name = 'CSF_M_AGENDA_ALLOWCHANGESCOMPLETEDTASK'
863 OR opt.profile_option_name = 'CSF_DEBRIEF_OVERLAPPING_LABOR'
864 OR opt.profile_option_name = 'CSF_MOBILE_TASK_TIMES_UPDATABLE'
865 OR opt.profile_option_name = 'INC_DEFAULT_INCIDENT_SEVERITY'
866 OR opt.profile_option_name = 'INC_DEFAULT_INCIDENT_URGENCY'
867 OR opt.profile_option_name = 'JTF_TIME_UOM_CLASS'
868 OR opt.profile_option_name = 'ICX_PREFERRED_CURRENCY'
869 OR opt.profile_option_name = 'JTF_TASK_DEFAULT_ASSIGNEE_STATUS'
870 OR opt.profile_option_name = 'CS_SR_RESTRICT_IB'
871 OR opt.profile_option_name = 'SERVER_TIMEZONE_ID'
872 OR opt.profile_option_name = 'CLIENT_TIMEZONE_ID'
873 OR opt.profile_option_name = 'CSF_BUSINESS_PROCESS'
874 OR opt.profile_option_name = 'CSM_SEARCH_RESULT_SET_SIZE'
875 OR opt.profile_option_name = 'CSM_IB_ITEMS_AT_LOCATION'
876 OR opt.profile_option_name = 'CSM_ITEM_CATEGORY_SET_FILTER'
877 OR opt.profile_option_name = 'CSM_ITEM_CATEGORY_FILTER'
878 OR opt.profile_option_name = 'CS_INV_VALIDATION_ORG'
879 OR opt.profile_option_name = 'INC_DEFAULT_INCIDENT_TYPE'
880 OR opt.profile_option_name = 'INC_DEFAULT_INCIDENT_STATUS'
881 OR opt.profile_option_name = 'CSM_ENABLE_CREATE_SR'
882 OR opt.profile_option_name = 'CSM_ENABLE_CREATE_TASK'
883 OR opt.profile_option_name = 'CSM_ENABLE_UPDATE_ASSIGNMENTS'
884 OR opt.profile_option_name = 'CSM_ENABLE_VIEW_CUST_PRODUCTS'
885 OR opt.profile_option_name = 'CSM_MAX_READINGS_PER_COUNTER'
886 --bug4172005
887 OR opt.profile_option_name = 'CSF_RETURN_REASON'
888 --R 12 updates
889 OR opt.profile_option_name = 'CSFW_DEFAULT_DISTANCE_UNIT'
890 OR opt.profile_option_name = 'CSF_CAPTURE_TRAVEL'
891 OR opt.profile_option_name = 'CSM_LABOR_LINE_TOTAL_CHECK'
892 OR opt.profile_option_name = 'ICX_DATE_FORMAT_MASK'
893 OR opt.profile_option_name = 'JTM_TIMEPICKER_FORMAT'
894 OR opt.profile_option_name = 'CSM_TIME_REASONABILITY_CHECK_APPLY'
895 OR opt.profile_option_name = 'ICX_NUMERIC_CHARACTERS'
896 OR opt.profile_option_name = 'CSF_LABOR_DEBRIEF_DEFAULT_UOM'
897 OR opt.profile_option_name = 'CSF_UOM_HOURS'
898 OR opt.profile_option_name = 'CSZ_DEFAULT_CONTACT_BY'
899 OR opt.profile_option_name = 'HZ_REF_TERRITORY'
900 OR opt.profile_option_name = 'HZ_REF_LANG'
901 OR opt.profile_option_name = 'HZ_LANG_FOR_COUNTRY_DISPLAY'
905 OR opt.profile_option_name = 'CSF_DEFAULT_TASK_TYPE_PERSONAL'
902 OR opt.profile_option_name = 'CSM_MAX_ATTACHMENT_SIZE' --For PPC
903 OR opt.profile_option_name = 'CSF_UOM_MINUTES'
904 OR opt.profile_option_name = 'CSF_DEFAULT_TASK_STATUS_PERSONAL'
906 OR opt.profile_option_name = 'CSF:DEFAULT DEBRIEF BUSINESS PROCESS'
907 OR opt.profile_option_name = 'CSF:DEFAULT DEBRIEF TRANSACTION TYPE'
908 OR opt.profile_option_name = 'INV:EXPENSE_TO_ASSET_TRANSFER'
909 OR opt.profile_option_name = 'JTF_PROFILE_DEFAULT_CURRENCY'
910 OR opt.profile_option_name = 'CSF_DEFAULT_TASK_ASSIGNED_STATUS'
911 OR opt.profile_option_name = 'JTF_TASK_DEFAULT_TASK_STATUS'
912 OR opt.profile_option_name = 'JTF_TASK_DEFAULT_TASK_PRIORITY'
913 OR opt.profile_option_name = 'CSFW_PLANNED_TASK_WINDOW'
914 OR opt.profile_option_name = 'CS_SR_CONTACT_MANDATORY'
915 OR opt.profile_option_name = 'CSM_RESTRICT_DEBRIEF'
916 OR opt.profile_option_name = 'CSM_RESTRICT_ORDERS'
917 OR opt.profile_option_name = 'CSM_RESTRICT_TRANSFERS'
918 OR opt.profile_option_name = 'JTF_TASK_DEFAULT_TASK_TYPE'
919 )
920 AND val.application_id IS NOT NULL
921 AND val.application_id = opt.application_id
922 AND val.profile_option_id = opt.profile_option_id
923 AND ( (val.level_id = 10001)
924 OR (val.level_id = 10004 AND val.level_value = p_user_id)
925 OR (val.level_id = 10002 AND val.level_value = p_csm_appl_id)
926 OR (val.level_id = 10003 AND val.level_value = p_csm_resp_id)
927 )
928 AND NOT EXISTS
929 (SELECT 1
930 FROM csm_profile_option_values_acc acc
931 WHERE acc.profile_option_id = val.profile_option_id
932 AND acc.application_id = val.application_id
933 AND acc.level_id = val.level_id
934 AND acc.level_value = val.level_value
935 AND val.level_id <> 10003
936 -- AND NVl(acc.level_value_application_id, -1) = NVL(val.level_value_application_id, -1)
937 AND acc.user_id = p_user_id
938 UNION
939 SELECT 1
940 FROM csm_profile_option_values_acc acc,
941 fnd_responsibility resp
942 WHERE acc.profile_option_id = val.profile_option_id
943 AND acc.application_id = val.application_id
944 AND acc.level_id = val.level_id
945 AND acc.level_value = val.level_value
946 AND acc.level_id = 10003
947 AND acc.level_value = resp.responsibility_id
948 AND acc.level_value_application_id = resp.application_id
949 AND acc.user_id = p_user_id
950 AND SYSDATE BETWEEN nvl(resp.start_date, sysdate) AND nvl(resp.end_date, sysdate)
951 )
952 ORDER BY val.application_id, val.profile_option_id, val.level_id desc
953 ;
954
955 CURSOR l_get_old_profile_csr (p_profile_option_id IN number, p_user_id IN number)
956 IS
957 SELECT access_id, profile_option_value, level_id
958 FROM csm_profile_option_values_acc
959 WHERE profile_option_id = p_profile_option_id
960 AND user_id = p_user_id
961 ORDER BY level_id desc
962 FOR UPDATE OF profile_option_value, level_id, level_value, last_update_date NOWAIT;
963
964 l_old_profile_option_value fnd_profile_option_values.profile_option_value%TYPE;
965 l_old_level_id fnd_profile_option_values.level_id%TYPE;
966
967 CURSOR c_csm_appl IS
968 SELECT APPLICATION_ID
969 FROM fnd_application
970 WHERE application_short_name = 'CSM';
971
972 CURSOR c_csm_resp (c_user_id NUMBER) IS
973 SELECT RESPONSIBILITY_ID
974 FROM asg_user
975 WHERE user_id = c_user_id;
976
977 CURSOR c_profile_seq IS
978 SELECT csm_profiles_acc_s.NEXTVAL
979 FROM dual;
980
981 l_csm_appl_id fnd_application.application_id%TYPE;
982 l_csm_resp_id fnd_responsibility.responsibility_id%TYPE;
983
984 BEGIN
985 l_run_date := SYSDATE;
986
987 -- get csm application id
988 OPEN c_csm_appl;
989 FETCH c_csm_appl INTO l_csm_appl_id;
990 CLOSE c_csm_appl;
991
992 -- get csm responsibility id
993 OPEN c_csm_resp(p_user_id);
994 FETCH c_csm_resp INTO l_csm_resp_id;
995 CLOSE c_csm_resp;
996
997 -- process inserts
998 FOR r_profiles_ins_rec IN l_profiles_ins_csr(p_user_id, l_csm_appl_id, l_csm_resp_id) LOOP
999 -- delete any lower levels that exist for this profile for the user
1000 OPEN l_get_old_profile_csr(r_profiles_ins_rec.profile_option_id, p_user_id);
1001 FETCH l_get_old_profile_csr INTO l_access_id, l_old_profile_option_value, l_old_level_id;
1002 IF l_get_old_profile_csr%FOUND THEN
1003 -- only call the WF if a profile at a higher level is added; update the acc table with the new value
1004 IF r_profiles_ins_rec.level_id > NVL(l_old_level_id,0) THEN
1005 UPDATE csm_profile_option_values_acc
1006 SET profile_option_value = r_profiles_ins_rec.profile_option_value,
1007 level_id = r_profiles_ins_rec.level_id,
1008 level_value = r_profiles_ins_rec.level_value,
1009 level_value_application_id = r_profiles_ins_rec.level_value_application_id,
1010 last_update_date = l_run_date
1011 WHERE CURRENT OF l_get_old_profile_csr;
1012
1013 IF is_mfs_profile(p_profile_option_name=>r_profiles_ins_rec.profile_option_name) THEN
1014 --mark dirty the SDQ for the user
1015 l_markdirty := CSM_UTIL_PKG.MakeDirtyForUser(g_pub_item,
1016 l_access_id, p_user_id, ASG_DOWNLOAD.UPD, SYSDATE);
1017 END IF;
1018
1019 -- start the profile_option_value_upd WF
1020 -- start_profile_upd_wf(l_access_id, r_profiles_ins_rec.profile_option_name,r_profiles_ins_rec.profile_option_value,
1024 IF (r_profiles_ins_rec.level_id = 10004 AND r_profiles_ins_rec.level_value = p_user_id) OR
1021 -- l_old_profile_option_value, p_user_id);
1022 END IF;
1023 ELSE
1025 (r_profiles_ins_rec.level_id <> 10004) THEN
1026
1027 -- get the access_id
1028 OPEN c_profile_seq;
1029 FETCH c_profile_seq INTO l_access_id;
1030 CLOSE c_profile_seq;
1031
1032 -- insert into csm_profile_option_values_acc
1033 insert_profiles_acc(l_access_id,p_user_id,r_profiles_ins_rec.application_id,
1034 r_profiles_ins_rec.profile_option_id, r_profiles_ins_rec.level_id,
1035 r_profiles_ins_rec.level_value, r_profiles_ins_rec.level_value_application_id,
1036 r_profiles_ins_rec.profile_option_value,l_run_date);
1037
1038 IF is_mfs_profile(p_profile_option_name=>r_profiles_ins_rec.profile_option_name) THEN
1039 --mark dirty the SDQ for the user
1040 l_markdirty := CSM_UTIL_PKG.MakeDirtyForUser(g_pub_item,
1041 l_access_id, p_user_id, ASG_DOWNLOAD.INS, SYSDATE);
1042 END IF;
1043
1044 -- start the profile_option_value_upd WF using null for the old profle option value
1045 -- start_profile_upd_wf(l_access_id, r_profiles_ins_rec.profile_option_name,r_profiles_ins_rec.profile_option_value,
1046 -- NULL, p_user_id);
1047
1048 END IF;
1049 END IF;
1050 CLOSE l_get_old_profile_csr;
1051
1052 END LOOP; -- process inserts
1053
1054 EXCEPTION
1055 WHEN OTHERS THEN
1056 l_sqlerrno := to_char(SQLCODE);
1057 l_sqlerrmsg := substr(SQLERRM, 1,2000);
1058 l_error_msg := ' Exception in refresh_user_acc for user_id:'
1059 || to_char(p_user_id) || ':' || l_sqlerrno || ':' || l_sqlerrmsg;
1060 CSM_UTIL_PKG.LOG(l_error_msg, 'csm_profile_event_pkg.refresh_user_acc',FND_LOG.LEVEL_EXCEPTION);
1061 RAISE;
1062 END refresh_user_acc;
1063
1064 FUNCTION IS_MFS_PROFILE(p_profile_option_name IN VARCHAR2) RETURN BOOLEAN
1065 IS
1066 l_sqlerrno VARCHAR2(20);
1067 l_sqlerrmsg VARCHAR2(4000);
1068 l_error_msg VARCHAR2(4000);
1069 l_return_status VARCHAR2(2000);
1070
1071 l_profile_option_name fnd_profile_options.profile_option_name%TYPE;
1072
1073 BEGIN
1074 l_profile_option_name := p_profile_option_name;
1075
1076 IF (l_profile_option_name = 'CSF_M_RECIPIENTS_BOUNDARY'
1077 -- OR l_profile_option_name = 'CSF_M_AGENDA_ALLOWCHANGESCOMPLETEDTASK'
1078 OR l_profile_option_name = 'CSF_DEBRIEF_OVERLAPPING_LABOR'
1079 OR l_profile_option_name = 'CSF_MOBILE_TASK_TIMES_UPDATABLE'
1080 OR l_profile_option_name = 'INC_DEFAULT_INCIDENT_SEVERITY'
1081 OR l_profile_option_name = 'INC_DEFAULT_INCIDENT_URGENCY'
1082 OR l_profile_option_name = 'JTF_TIME_UOM_CLASS'
1083 OR l_profile_option_name = 'ICX_PREFERRED_CURRENCY'
1084 OR l_profile_option_name = 'JTF_TASK_DEFAULT_ASSIGNEE_STATUS'
1085 OR l_profile_option_name = 'CS_SR_RESTRICT_IB'
1086 OR l_profile_option_name = 'SERVER_TIMEZONE_ID'
1087 OR l_profile_option_name = 'CLIENT_TIMEZONE_ID'
1088 OR l_profile_option_name = 'CSF_BUSINESS_PROCESS'
1089 OR l_profile_option_name = 'CSM_SEARCH_RESULT_SET_SIZE'
1090 OR l_profile_option_name = 'CSM_IB_ITEMS_AT_LOCATION'
1091 OR l_profile_option_name = 'CSM_ITEM_CATEGORY_SET_FILTER'
1092 OR l_profile_option_name = 'CSM_ITEM_CATEGORY_FILTER'
1093 OR l_profile_option_name = 'CS_INV_VALIDATION_ORG'
1094 OR l_profile_option_name = 'INC_DEFAULT_INCIDENT_TYPE'
1095 OR l_profile_option_name = 'CSM_ENABLE_CREATE_SR'
1096 OR l_profile_option_name = 'CSM_ENABLE_CREATE_TASK'
1097 OR l_profile_option_name = 'CSM_ENABLE_UPDATE_ASSIGNMENTS'
1098 OR l_profile_option_name = 'CSM_ENABLE_VIEW_CUST_PRODUCTS'
1099 --bug4172005
1100 OR l_profile_option_name = 'CSF_RETURN_REASON'
1101 OR l_profile_option_name = 'INC_DEFAULT_INCIDENT_STATUS'
1102 --R 12 updates
1103 OR l_profile_option_name = 'CSFW_DEFAULT_DISTANCE_UNIT'
1104 OR l_profile_option_name = 'CSF_CAPTURE_TRAVEL'
1105 OR l_profile_option_name = 'CSM_LABOR_LINE_TOTAL_CHECK'
1106 OR l_profile_option_name = 'ICX_DATE_FORMAT_MASK'
1107 OR l_profile_option_name = 'JTM_TIMEPICKER_FORMAT'
1108 OR l_profile_option_name = 'CSM_TIME_REASONABILITY_CHECK_APPLY'
1109 OR l_profile_option_name = 'ICX_NUMERIC_CHARACTERS'
1110 OR l_profile_option_name = 'CSF_LABOR_DEBRIEF_DEFAULT_UOM'
1111 OR l_profile_option_name = 'CSF_UOM_HOURS'
1112 OR l_profile_option_name = 'CSZ_DEFAULT_CONTACT_BY'
1113 OR l_profile_option_name = 'HZ_REF_TERRITORY'
1114 OR l_profile_option_name = 'HZ_REF_LANG'
1115 OR l_profile_option_name = 'HZ_LANG_FOR_COUNTRY_DISPLAY'
1116 OR l_profile_option_name = 'CSM_MAX_ATTACHMENT_SIZE' --For PPC
1117 OR l_profile_option_name = 'CSF_UOM_MINUTES'
1118 OR l_profile_option_name = 'CSF_DEFAULT_TASK_STATUS_PERSONAL'
1119 OR l_profile_option_name = 'CSF_DEFAULT_TASK_TYPE_PERSONAL'
1120 OR l_profile_option_name = 'CSF:DEFAULT DEBRIEF BUSINESS PROCESS'
1121 OR l_profile_option_name = 'CSF:DEFAULT DEBRIEF TRANSACTION TYPE'
1122 OR l_profile_option_name = 'INV:EXPENSE_TO_ASSET_TRANSFER'
1123 OR l_profile_option_name = 'JTF_PROFILE_DEFAULT_CURRENCY'
1124 OR l_profile_option_name = 'CSF_DEFAULT_TASK_ASSIGNED_STATUS'
1125 OR l_profile_option_name = 'JTF_TASK_DEFAULT_TASK_STATUS'
1126 OR l_profile_option_name = 'JTF_TASK_DEFAULT_TASK_PRIORITY'
1127 OR l_profile_option_name = 'CSFW_PLANNED_TASK_WINDOW'
1128 OR l_profile_option_name = 'CS_SR_CONTACT_MANDATORY'
1129 OR l_profile_option_name = 'CSM_RESTRICT_DEBRIEF'
1130 OR l_profile_option_name = 'CSM_RESTRICT_ORDERS'
1131 OR l_profile_option_name = 'CSM_RESTRICT_TRANSFERS'
1132 OR l_profile_option_name = 'JTF_TASK_DEFAULT_TASK_TYPE'
1133 ) THEN
1134 RETURN TRUE;
1135 ELSE
1136 RETURN FALSE;
1137 END IF;
1138
1139 EXCEPTION
1140 WHEN OTHERS THEN
1141 l_sqlerrno := TO_CHAR(SQLCODE);
1142 l_sqlerrmsg := SUBSTR(SQLERRM, 1,2000);
1143 l_error_msg := ' Exception in IS_MFS_PROFILE for profile_option_name:' || l_profile_option_name
1144 || ':' || l_sqlerrno || ':' || l_sqlerrmsg;
1145 CSM_UTIL_PKG.LOG(l_error_msg, 'CSM_PROFILE_EVENT_PKG.IS_MFS_PROFILE',FND_LOG.LEVEL_EXCEPTION);
1146 RETURN FALSE;
1147 END IS_MFS_PROFILE;
1148
1149 END CSM_PROFILE_EVENT_PKG;