DBA Data[Home] [Help]

PACKAGE BODY: APPS.JTS_SETUP_FLOW_HIEARCHY_PKG

Source


1 PACKAGE BODY JTS_SETUP_FLOW_HIEARCHY_PKG as
2 /* $Header: jtstcsfb.pls 115.3 2002/06/07 11:53:18 pkm ship    $ */
3 
4 
5 -- --------------------------------------------------------------------
6 -- Package name     : JTS_SETUP_FLOW_HIEARCHY_PKG
7 -- Purpose          : Setup Summary Hiearchy.
8 -- History          : 27-Feb-02  Sung Ha Huh  Created.
9 -- NOTE             :
10 -- --------------------------------------------------------------------
11 
12 
13 FUNCTION GET_NEXT_FLOW_ID RETURN NUMBER IS
14    l_flow_id 	JTS_SETUP_FLOWS_B.flow_id%TYPE;
15 BEGIN
16    SELECT jts_setup_flows_b_s.nextval
17    INTO   l_flow_id
18    FROM   sys.dual;
19 
20    return (l_flow_id);
21 EXCEPTION
22   WHEN OTHERS THEN
23     APP_EXCEPTION.RAISE_EXCEPTION;
24 END GET_NEXT_FLOW_ID;
25 
26 FUNCTION GET_FLOW_ID(p_code IN VARCHAR2) RETURN NUMBER IS
27    l_flow_id 	JTS_SETUP_FLOWS_B.flow_id%TYPE := NULL;
28 BEGIN
29   SELECT flow_id
30   INTO   l_flow_id
31   FROM   JTS_SETUP_FLOWS_B
32   WHERE  flow_code = p_code;
33   return (l_flow_id);
34 EXCEPTION
35   WHEN NO_DATA_FOUND THEN
36     return NULL;
37   WHEN OTHERS THEN
38     APP_EXCEPTION.RAISE_EXCEPTION;
39 END GET_FLOW_ID;
40 
41 -------------------------------------------------
42 -- This is for seeding the Flow hiearchy.
43 -- Inserts a flow.  Parent_id is found by
44 -- the flow_code of the parent.
45 -- Precondition: Parents need to be inserted first
46 -- in to the tables.
47 -------------------------------------------------
48 PROCEDURE INSERT_ROW(
49   p_flow_code		IN VARCHAR2,
50   p_flow_type 		IN VARCHAR2,
51   p_parent_code		IN VARCHAR2,
52   p_has_child_flag 	IN VARCHAR2,
53   p_flow_sequence	IN NUMBER,
54   p_overview_url 	IN VARCHAR2,
55   p_diagnostics_url 	IN VARCHAR2,
56   p_dpf_code 		IN VARCHAR2,
57   p_dpf_asn 		IN VARCHAR2,
58   p_num_steps 		IN NUMBER,
59   p_flow_name 		IN VARCHAR2,
60   p_created_by		IN NUMBER,
61   p_last_updated_by	IN NUMBER,
62   p_last_update_login 	IN NUMBER,
63   x_flow_id		OUT NUMBER
64 ) IS
65   l_parent_id	JTS_SETUP_FLOWS_B.parent_id%TYPE;
66 BEGIN
67 
68   x_flow_id := get_next_flow_id;
69 
70   l_parent_id := get_flow_id(p_parent_code);
71 
72   insert into JTS_SETUP_FLOWS_B (
73     FLOW_ID,
74     FLOW_CODE,
75     FLOW_TYPE,
76     PARENT_ID,
77     HAS_CHILD_FLAG,
78     FLOW_SEQUENCE,
79     OVERVIEW_URL,
80     DIAGNOSTICS_URL,
81     DPF_CODE,
82     DPF_ASN,
83     NUM_STEPS,
84     OBJECT_VERSION_NUMBER,
85     CREATION_DATE,
86     CREATED_BY,
87     LAST_UPDATE_DATE,
88     LAST_UPDATED_BY,
89     LAST_UPDATE_LOGIN
90   ) values (
91     X_FLOW_ID,
92     p_flow_code,
93     P_FLOW_TYPE,
94     l_parent_id,
95     P_HAS_CHILD_FLAG,
96     P_FLOW_SEQUENCE,
97     P_OVERVIEW_URL,
98     P_DIAGNOSTICS_URL,
99     P_DPF_CODE,
100     P_DPF_ASN,
101     P_NUM_STEPS,
102     1,
103     sysdate,
104     p_created_by,
105     sysdate,
106     p_last_updated_by,
107     p_last_update_login
108   );
109 
110   insert into JTS_SETUP_FLOWS_TL (
111     FLOW_ID,
112     FLOW_CODE,
113     FLOW_NAME,
114     CREATION_DATE,
115     CREATED_BY,
116     LAST_UPDATE_DATE,
117     LAST_UPDATED_BY,
118     LAST_UPDATE_LOGIN,
119     LANGUAGE,
120     SOURCE_LANG
121   ) select
122     X_FLOW_ID,
123     p_flow_code,
124     P_FLOW_NAME,
125     sysdate,
126     p_created_by,
127     sysdate,
128     p_last_updated_by,
129     p_last_update_login,
130     L.LANGUAGE_CODE,
131     userenv('LANG')
132   from FND_LANGUAGES L
133   where L.INSTALLED_FLAG in ('I', 'B')
134   and not exists
135     (select NULL
136     from JTS_SETUP_FLOWS_TL T
137     where T.FLOW_ID = X_FLOW_ID
138     and T.LANGUAGE = L.LANGUAGE_CODE);
139 
140 EXCEPTION
141   WHEN OTHERS THEN
142     APP_EXCEPTION.RAISE_EXCEPTION;
143 
144 END INSERT_ROW;
145 
146 -------------------------------------------------
147 -- This is for seeding the Flow hiearchy.
148 -- Deletes a flow based on flow_code
149 -------------------------------------------------
150 PROCEDURE DELETE_ROW(p_flow_code IN VARCHAR2) IS
151 BEGIN
152   DELETE FROM jts_setup_flows_b
153   WHERE  flow_code = p_flow_code;
154 
155   DELETE FROM jts_setup_flows_tl
156   WHERE  flow_code = p_flow_code;
157 
158 EXCEPTION
159   WHEN OTHERS THEN
160     APP_EXCEPTION.RAISE_EXCEPTION;
161 
162 END DELETE_ROW;
163 
164 -------------------------------------------------
165 -- This is for seeding the Flow hiearchy.
166 -- Deletes a flow based on flow_id
167 -------------------------------------------------
168 PROCEDURE DELETE_ROW(p_flow_id	IN NUMBER) IS
169 BEGIN
170   DELETE FROM jts_setup_flows_b
171   WHERE  flow_id = p_flow_id;
172 
173   DELETE FROM jts_setup_flows_tl
174   WHERE  flow_id = p_flow_id;
175 
176 EXCEPTION
177   WHEN OTHERS THEN
178     APP_EXCEPTION.RAISE_EXCEPTION;
179 
180 END DELETE_ROW;
181 
182 -------------------------------------------------
183 -- This is for seeding the Flow hiearchy.
184 -- Warning: Should be only used in exceptional cases
185 --  	    where updating is absolutely necessary
186 --	    because of a setup error.
187 --  	    Users cannot call this procedure
188 -- Updates a flow
189 -------------------------------------------------
190 procedure UPDATE_ROW (
191   P_FLOW_CODE 		in VARCHAR2,
192   P_FLOW_TYPE 		in VARCHAR2,
193   P_PARENT_CODE		in VARCHAR2,
194   P_HAS_CHILD_FLAG 	in VARCHAR2,
195   P_FLOW_SEQUENCE 	in NUMBER,
196   P_OVERVIEW_URL 	in VARCHAR2,
197   P_DIAGNOSTICS_URL 	in VARCHAR2,
198   P_DPF_CODE 		in VARCHAR2,
199   P_DPF_ASN 		in VARCHAR2,
200   P_NUM_STEPS 		in NUMBER,
201   P_FLOW_NAME 		in VARCHAR2,
202   P_LAST_UPDATE_DATE 	in DATE,
203   P_LAST_UPDATED_BY 	in NUMBER,
204   P_LAST_UPDATE_LOGIN 	in NUMBER
205 ) is
206   l_parent_id 	JTS_SETUP_FLOWS_B.parent_id%TYPE;
207 begin
208   l_parent_id := get_flow_id(p_parent_code);
209 
210   update JTS_SETUP_FLOWS_B set
211     FLOW_TYPE = P_FLOW_TYPE,
212     PARENT_ID = L_PARENT_ID,
213     HAS_CHILD_FLAG = P_HAS_CHILD_FLAG,
214     FLOW_SEQUENCE = P_FLOW_SEQUENCE,
215     OVERVIEW_URL = P_OVERVIEW_URL,
216     DIAGNOSTICS_URL = P_DIAGNOSTICS_URL,
217     DPF_CODE = P_DPF_CODE,
218     DPF_ASN = P_DPF_ASN,
219     NUM_STEPS = P_NUM_STEPS,
220     LAST_UPDATE_DATE = P_LAST_UPDATE_DATE,
221     LAST_UPDATED_BY = P_LAST_UPDATED_BY,
222     LAST_UPDATE_LOGIN = P_LAST_UPDATE_LOGIN
223   where FLOW_CODE = P_FLOW_CODE;
224 
225   if (sql%notfound) then
226     raise no_data_found;
227   end if;
228 
229   update JTS_SETUP_FLOWS_TL set
230     FLOW_NAME = P_FLOW_NAME,
231     LAST_UPDATE_DATE = P_LAST_UPDATE_DATE,
232     LAST_UPDATED_BY = P_LAST_UPDATED_BY,
233     LAST_UPDATE_LOGIN = P_LAST_UPDATE_LOGIN,
234     SOURCE_LANG = userenv('LANG')
235   where FLOW_CODE = P_FLOW_CODE
236   and userenv('LANG') in (LANGUAGE, SOURCE_LANG);
237 
238   if (sql%notfound) then
239     raise no_data_found;
240   end if;
241 EXCEPTION
242   WHEN OTHERS THEN
243     APP_EXCEPTION.RAISE_EXCEPTION;
244 end UPDATE_ROW;
245 
246 -------------------------------------------------
247 -- This is for seeding the Flow hiearchy.
248 --
249 -- Translates the flow name
250 -------------------------------------------------
251 PROCEDURE TRANSLATE_ROW (
252          p_flow_code  		IN VARCHAR2,
253          p_owner    		IN VARCHAR2,
254          p_flow_name  		IN VARCHAR2
255         )
256 IS
257 BEGIN
258     update jts_setup_flows_tl set
259        flow_name = nvl(p_flow_name, flow_name),
260        source_lang = userenv('LANG'),
261        last_update_date = sysdate,
262        last_updated_by = decode(p_owner, 'SEED', 1, 0),
263        last_update_login = 0
264     where  flow_code = p_flow_code
265     and    userenv('LANG') in (language, source_lang);
266 
267 EXCEPTION
268   WHEN OTHERS THEN
269     APP_EXCEPTION.RAISE_EXCEPTION;
270 END TRANSLATE_ROW;
271 
272 -------------------------------------------------
273 -- This is for seeding the Flow hiearchy.
274 --
275 -- Uploads a flow
276 -- If p_flow_id is not NULL and there is no flow with
277 -- such flow_id in the database, then a new flow_id will be used
278 -------------------------------------------------
279 PROCEDURE LOAD_ROW (
280           P_FLOW_CODE      	IN VARCHAR2,
281           P_OWNER              	IN VARCHAR2,
282           p_flow_type   	IN VARCHAR2,
283           p_parent_code        	IN VARCHAR2,
284           p_has_child_flag      IN VARCHAR2,
285           p_flow_sequence      	IN NUMBER,
286           p_num_steps    	IN NUMBER,
287   	  P_OVERVIEW_URL 	in VARCHAR2,
288   	  P_DIAGNOSTICS_URL 	in VARCHAR2,
289   	  P_DPF_CODE 		in VARCHAR2,
290   	  P_DPF_ASN 		in VARCHAR2,
291           P_FLOW_NAME         	IN VARCHAR2
292          )
293 IS
294    l_user_id      	JTS_SETUP_FLOWS_B.created_by%TYPE := 0;
295    l_count	  	number := 0;
296    l_flow_id     	JTS_SETUP_FLOWS_B.flow_id%TYPE;
297 
298 BEGIN
299    if P_OWNER = 'SEED' then
300       l_user_id := 1;
301    end if;
302 
303    select count(*)
304    into	  l_count
305    from   jts_setup_flows_b
306    where  flow_code = p_flow_code;
307 
308 
309    IF (l_count = 0) THEN --no flow with p_flow_code exists.  Use p_flow_code to insert a new row
310       IF p_flow_code IS NOT NULL THEN --use a new flow_id
311       	INSERT_ROW (
312 	    p_flow_code			=>  p_flow_code,
313   	    p_flow_type 		=>  p_flow_type,
314   	    p_parent_code 		=>  p_parent_code,
315   	    p_has_child_flag 		=>  p_has_child_flag,
316   	    p_flow_sequence 		=>  p_flow_sequence,
317   	    p_overview_url 		=>  p_overview_url,
318   	    p_diagnostics_url 		=>  p_diagnostics_url,
319   	    p_dpf_code 			=>  p_dpf_code,
320   	    p_dpf_asn 			=>  p_dpf_asn,
321   	    p_num_steps 		=>  p_num_steps,
322   	    p_flow_name 		=>  p_flow_name,
323       	    p_created_by    		=>  l_user_id,
324       	    p_last_updated_by  		=>  l_user_id,
325       	    p_last_update_login  	=>  1,
326       	    x_flow_id   		=>  l_flow_id
327       	);
328       END IF;
329    ELSE --flow with p_flow_code exists, update
330 
331       UPDATE_ROW (
332   	  P_FLOW_CODE 			=>  p_flow_code,
333   	  P_FLOW_TYPE 			=>  p_flow_type,
334   	  P_PARENT_CODE			=>  p_parent_code,
335   	  P_HAS_CHILD_FLAG 		=>  p_has_child_flag,
336   	  P_FLOW_SEQUENCE 		=>  p_flow_sequence,
337   	  P_OVERVIEW_URL 		=>  p_overview_url,
338   	  P_DIAGNOSTICS_URL 		=>  p_diagnostics_url,
339   	  P_DPF_CODE 			=>  p_dpf_code,
340   	  P_DPF_ASN 			=>  p_dpf_asn,
341   	  P_NUM_STEPS 			=>  p_num_steps,
342   	  P_FLOW_NAME 			=>  p_flow_name,
343   	  P_LAST_UPDATE_DATE 		=>  sysdate,
344   	  P_LAST_UPDATED_BY 		=>  l_user_id,
345   	  P_LAST_UPDATE_LOGIN 		=>  1
346       );
347    end if;
348 EXCEPTION
349   WHEN OTHERS THEN
350     APP_EXCEPTION.RAISE_EXCEPTION;
351 END LOAD_ROW;
352 
353 
354 procedure LOCK_ROW (
355   X_FLOW_ID in NUMBER,
356   X_FLOW_CODE in VARCHAR2,
357   X_FLOW_TYPE in VARCHAR2,
358   X_PARENT_ID in NUMBER,
359   X_HAS_CHILD_FLAG in VARCHAR2,
360   X_FLOW_SEQUENCE in NUMBER,
361   X_OVERVIEW_URL in VARCHAR2,
362   X_DIAGNOSTICS_URL in VARCHAR2,
363   X_DPF_CODE in VARCHAR2,
364   X_DPF_ASN in VARCHAR2,
365   X_NUM_STEPS in NUMBER,
366   X_SECURITY_GROUP_ID in NUMBER,
367   X_OBJECT_VERSION_NUMBER in NUMBER,
368   X_FLOW_NAME in VARCHAR2
369 ) is
370   cursor c is select
371       FLOW_TYPE,
372       PARENT_ID,
373       HAS_CHILD_FLAG,
374       FLOW_SEQUENCE,
375       OVERVIEW_URL,
376       DIAGNOSTICS_URL,
377       DPF_CODE,
378       DPF_ASN,
379       NUM_STEPS,
380       SECURITY_GROUP_ID,
381       OBJECT_VERSION_NUMBER
382     from JTS_SETUP_FLOWS_B
383     where FLOW_ID = X_FLOW_ID
384     and FLOW_CODE = X_FLOW_CODE
385     for update of FLOW_ID nowait;
386   recinfo c%rowtype;
387 
388   cursor c1 is select
389       FLOW_NAME,
390       decode(LANGUAGE, userenv('LANG'), 'Y', 'N') BASELANG
391     from JTS_SETUP_FLOWS_TL
392     where FLOW_ID = X_FLOW_ID
393     and FLOW_CODE = X_FLOW_CODE
394     and userenv('LANG') in (LANGUAGE, SOURCE_LANG)
395     for update of FLOW_ID nowait;
396 begin
397   open c;
398   fetch c into recinfo;
399   if (c%notfound) then
400     close c;
401     fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
402     app_exception.raise_exception;
403   end if;
404   close c;
405   if (    ((recinfo.FLOW_TYPE = X_FLOW_TYPE)
406            OR ((recinfo.FLOW_TYPE is null) AND (X_FLOW_TYPE is null)))
407       AND ((recinfo.PARENT_ID = X_PARENT_ID)
408            OR ((recinfo.PARENT_ID is null) AND (X_PARENT_ID is null)))
409       AND ((recinfo.HAS_CHILD_FLAG = X_HAS_CHILD_FLAG)
410            OR ((recinfo.HAS_CHILD_FLAG is null) AND (X_HAS_CHILD_FLAG is null)))
411       AND (recinfo.FLOW_SEQUENCE = X_FLOW_SEQUENCE)
412       AND ((recinfo.OVERVIEW_URL = X_OVERVIEW_URL)
413            OR ((recinfo.OVERVIEW_URL is null) AND (X_OVERVIEW_URL is null)))
414       AND ((recinfo.DIAGNOSTICS_URL = X_DIAGNOSTICS_URL)
415            OR ((recinfo.DIAGNOSTICS_URL is null) AND (X_DIAGNOSTICS_URL is null)))
416       AND ((recinfo.DPF_CODE = X_DPF_CODE)
417            OR ((recinfo.DPF_CODE is null) AND (X_DPF_CODE is null)))
418       AND ((recinfo.DPF_ASN = X_DPF_ASN)
419            OR ((recinfo.DPF_ASN is null) AND (X_DPF_ASN is null)))
420       AND ((recinfo.NUM_STEPS = X_NUM_STEPS)
421            OR ((recinfo.NUM_STEPS is null) AND (X_NUM_STEPS is null)))
422       AND ((recinfo.SECURITY_GROUP_ID = X_SECURITY_GROUP_ID)
423            OR ((recinfo.SECURITY_GROUP_ID is null) AND (X_SECURITY_GROUP_ID is null)))
424       AND (recinfo.OBJECT_VERSION_NUMBER = X_OBJECT_VERSION_NUMBER)
425   ) then
426     null;
427   else
428     fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
429     app_exception.raise_exception;
430   end if;
431 
432   for tlinfo in c1 loop
433     if (tlinfo.BASELANG = 'Y') then
434       if (    (tlinfo.FLOW_NAME = X_FLOW_NAME)
435       ) then
436         null;
437       else
438         fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
439         app_exception.raise_exception;
440       end if;
441     end if;
442   end loop;
443   return;
444 end LOCK_ROW;
445 
446 
447 procedure ADD_LANGUAGE
448 is
449 begin
450   delete from JTS_SETUP_FLOWS_TL T
451   where not exists
452     (select NULL
453     from JTS_SETUP_FLOWS_B B
454     where B.FLOW_ID = T.FLOW_ID
455     and B.FLOW_CODE = T.FLOW_CODE
456     );
457 
458   update JTS_SETUP_FLOWS_TL T set (
459       FLOW_NAME
460     ) = (select
461       B.FLOW_NAME
462     from JTS_SETUP_FLOWS_TL B
463     where B.FLOW_ID = T.FLOW_ID
464     and B.FLOW_CODE = T.FLOW_CODE
465     and B.LANGUAGE = T.SOURCE_LANG)
466   where (
467       T.FLOW_ID,
468       T.FLOW_CODE,
469       T.LANGUAGE
470   ) in (select
471       SUBT.FLOW_ID,
472       SUBT.FLOW_CODE,
473       SUBT.LANGUAGE
474     from JTS_SETUP_FLOWS_TL SUBB, JTS_SETUP_FLOWS_TL SUBT
475     where SUBB.FLOW_ID = SUBT.FLOW_ID
476     and SUBB.FLOW_CODE = SUBT.FLOW_CODE
477     and SUBB.LANGUAGE = SUBT.SOURCE_LANG
478     and (SUBB.FLOW_NAME <> SUBT.FLOW_NAME
479   ));
480 
481   insert into JTS_SETUP_FLOWS_TL (
482     FLOW_ID,
483     FLOW_CODE,
484     FLOW_NAME,
485     CREATION_DATE,
486     CREATED_BY,
487     LAST_UPDATE_DATE,
488     LAST_UPDATED_BY,
489     LAST_UPDATE_LOGIN,
490     SECURITY_GROUP_ID,
491     LANGUAGE,
492     SOURCE_LANG
493   ) select
494     B.FLOW_ID,
495     B.FLOW_CODE,
496     B.FLOW_NAME,
497     B.CREATION_DATE,
498     B.CREATED_BY,
499     B.LAST_UPDATE_DATE,
500     B.LAST_UPDATED_BY,
501     B.LAST_UPDATE_LOGIN,
502     B.SECURITY_GROUP_ID,
503     L.LANGUAGE_CODE,
504     B.SOURCE_LANG
505   from JTS_SETUP_FLOWS_TL B, FND_LANGUAGES L
506   where L.INSTALLED_FLAG in ('I', 'B')
507   and B.LANGUAGE = userenv('LANG')
508   and not exists
509     (select NULL
510     from JTS_SETUP_FLOWS_TL T
511     where T.FLOW_ID = B.FLOW_ID
512     and T.FLOW_CODE = B.FLOW_CODE
513     and T.LANGUAGE = L.LANGUAGE_CODE);
514 end ADD_LANGUAGE;
515 
516 END JTS_SETUP_FLOW_HIEARCHY_PKG;