Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3926 dpurdie 1
--------------------------------------------------------
2
--  File created - Thursday-August-01-2013   
3
--------------------------------------------------------
4
--------------------------------------------------------
5
--  DDL for Function GET_DATE
6
--------------------------------------------------------
7
 
8
  CREATE OR REPLACE FUNCTION "GET_DATE" RETURN DATE IS
9
 
10
/* ---------------------------------------------------------------------------
11
    Version: 1.0.0
12
   --------------------------------------------------------------------------- */
13
 
14
BEGIN
15
 
16
	RETURN TO_DATE( TO_CHAR( SYSDATE,'DD-MON-YYYY' ),'DD-MON-YYYY' );
17
 
18
END GET_DATE;
19
 
20
/
21
 
22
/
23
--------------------------------------------------------
24
--  DDL for Function GET_DATETIME
25
--------------------------------------------------------
26
 
27
  CREATE OR REPLACE FUNCTION "GET_DATETIME" RETURN DATE IS
28
 
29
/* ---------------------------------------------------------------------------
30
    Version: 1.0.0
31
   --------------------------------------------------------------------------- */
32
 
33
BEGIN
34
 
35
	RETURN TO_DATE( TO_CHAR( SYSDATE,'DD-MON-YYYY HH24:MI:SS' ),'DD-MON-YYYY HH24:MI:SS' );
36
 
37
END GET_DATETIME;
38
 
39
/
40
 
41
/
42
--------------------------------------------------------
43
--  DDL for Function GET_SYSTEM_VALUE
44
--------------------------------------------------------
45
 
46
  CREATE OR REPLACE FUNCTION "GET_SYSTEM_VALUE" ( sItemName IN SYSTEM_CONFIGURATION.ITEM_NAME%TYPE ) RETURN SYSTEM_CONFIGURATION.ITEM_VALUE%TYPE IS
47
 
48
/* ---------------------------------------------------------------------------
49
    Version: 1.0.0
50
   --------------------------------------------------------------------------- */
51
 
52
ItemValue SYSTEM_CONFIGURATION.ITEM_VALUE%TYPE;
53
 
54
BEGIN
55
	-- Get system value
56
	SELECT sc.ITEM_VALUE INTO ItemValue
57
	  FROM SYSTEM_CONFIGURATION sc
58
	 WHERE sc.ITEM_NAME = sItemName;
59
 
60
	RETURN ItemValue;
61
 
62
END GET_SYSTEM_VALUE;
63
 
64
/
65
 
66
/
67
--------------------------------------------------------
68
--  DDL for Function IN_LIST_NUMBER
69
--------------------------------------------------------
70
 
71
  CREATE OR REPLACE FUNCTION "IN_LIST_NUMBER" ( sInList IN VARCHAR2 ) RETURN DEPMGR_NUMBER_TAB_t IS
72
 
73
/* ---------------------------------------------------------------------------
74
    Version: 1.0.0
75
   --------------------------------------------------------------------------- */
76
 
77
    sync_rtags		   DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();
78
	pos				   NUMBER;
79
	in_list			   VARCHAR2(4000) := sInList || ',';
80
 
81
BEGIN
82
 
83
	IF NOT sInList IS NULL
84
	THEN
85
		LOOP
86
	        EXIT WHEN in_list IS NULL;
87
	        pos := INSTR ( in_list, ',' );
88
	        sync_rtags.extend;
89
	        sync_rtags(sync_rtags.count) := LTRIM ( RTRIM ( SUBSTR ( in_list, 1, pos-1 ) ) );
90
	        in_list := SUBSTR ( in_list, pos+1 );
91
		END LOOP;
92
	END IF;
93
 
94
	RETURN sync_rtags;
95
END IN_LIST_NUMBER;
96
 
97
/
98
 
99
/
100
--------------------------------------------------------
101
--  DDL for Function PRINT_SBOM_PACKAGES
102
--------------------------------------------------------
103
 
104
  CREATE OR REPLACE FUNCTION "PRINT_SBOM_PACKAGES" (v_dm_branch_name VARCHAR2, v_sbom_version VARCHAR2)
105
  RETURN NUMBER IS
106
 
107
  cur ref_cursor;
108
  SqlCmd VARCHAR2(4000);
109
BEGIN
110
 
111
  SqlCmd := ' 
112
  CREATE GLOBAL TEMPORARY TABLE sbom_packages
113
   ON COMMIT PRESERVE ROWS 
114
   AS SELECT DISTINCT pv.pv_id
115
      FROM deployment_manager.boms b
116
    INNER JOIN deployment_manager.bom_contents bc ON b.bom_id = bc.bom_id
117
    INNER JOIN deployment_manager.branches br ON b.branch_id = br.branch_id
118
    INNER JOIN deployment_manager.operating_systems os ON bc.node_id = os.node_id
119
    INNER JOIN deployment_manager.os_contents osc ON os.os_id = osc.os_id
120
    INNER JOIN release_manager.package_versions pv ON osc.prod_id = pv.pv_id
121
    WHERE br.branch_name = v_dm_branch_name
122
        AND b.bom_version||''.''||b.bom_lifecycle = v_sbom_version;
123
        ';
124
  EXECUTE SqlCmd;
125
 
126
 
127
  FOR cur IN SELECT DISTINCT pv_id FROM sbom_packages LOOP
128
 
129
    INSERT INTO sbom_packages (    
130
    SELECT DISTINCT PV.pv_id
131
      FROM release_content RC
132
      INNER JOIN package_versions PV ON PV.pv_id = RC.pv_id
133
      INNER JOIN packages P ON P.pkg_id = PV.pkg_id
134
      WHERE PV.pv_id IN ( SELECT DISTINCT dpv_id
135
                            FROM package_dependencies
136
                          START WITH pv_id = cur.pv_id
137
                        CONNECT BY pv_id = PRIOR dpv_id )
138
                               );
139
  END LOOP;
140
 
141
  FOR cur IN SELECT DISTINCT pv_id FROM sbom_packages LOOP
142
    Dbms_Output.put_line(cur.pv_id);
143
  END LOOP;
144
 
145
  RETURN 0;
146
END;
147
 
148
/
149
 
150
/
151
--------------------------------------------------------
152
--  DDL for Function STRREPLACE
153
--------------------------------------------------------
154
 
155
  CREATE OR REPLACE FUNCTION "STRREPLACE" (str varchar2, from_str varchar2, to_str varchar2)
156
  return varchar2
157
AS
158
  str_temp varchar2(4000);
159
  str_pos  number := instr(str, from_str);
160
BEGIN
161
  str_temp := str;
162
  while ( str_pos > 0 ) loop
163
    str_temp := substr(str_temp, 0, str_pos-1) || to_str ||
164
                substr(str_temp, str_pos + length(from_str));
165
    str_pos  := instr(str_temp, from_str);
166
  end loop;
167
  return str_temp;
168
END;
169
 
170
/
171
 
172
/
173
--------------------------------------------------------
174
--  DDL for Package PK_BASE_ENV
175
--------------------------------------------------------
176
 
177
  CREATE OR REPLACE PACKAGE "PK_BASE_ENV" IS
178
 
179
PROCEDURE Add_Base_Env ( sBaseEnvName IN BASE_ENV.BASE_ENV_NAME%TYPE,
180
						 nBosId IN BASE_ENV.BOS_ID%TYPE,
181
						 nBomId IN BASE_ENV.BOM_ID%TYPE,
182
						 nOsId IN OS_BASE_ENV.OS_ID%TYPE,
183
						 nUserId IN NUMBER );
184
 
185
PROCEDURE Update_Base_Env ( nBaseEnvId IN BASE_ENV.BASE_ENV_ID%TYPE,
186
							sBaseEnvName IN BASE_ENV.BASE_ENV_NAME%TYPE,
187
						 	nBosId IN BASE_ENV.BOS_ID%TYPE,
188
							nOsId IN OS_BASE_ENV.OS_ID%TYPE,
189
							nUserId IN NUMBER );		
190
 
191
FUNCTION Get_Base_Env_Id ( sBaseEnvName IN BASE_ENV.BASE_ENV_NAME%TYPE,
192
						   nBomId IN BASE_ENV.BOM_ID%TYPE ) RETURN BASE_ENV.BASE_ENV_ID%TYPE;
193
 
194
PROCEDURE Destroy_Base_Env ( nBaseEnvId IN BASE_ENV.BASE_ENV_ID%TYPE,
195
 		  				   	 nOsId IN OS_BASE_ENV.OS_ID%TYPE,
196
						 	 nUserId IN NUMBER);
197
 
198
PROCEDURE Add_Product ( sProdIdList IN VARCHAR2,
199
		  			  	nBaseEnvId IN BASE_ENV.BASE_ENV_ID%TYPE,
200
						nOsId IN OS_BASE_ENV.OS_ID%TYPE,
201
						nUserId IN NUMBER );
202
 
203
PROCEDURE Add_Product_Wrap ( nPkgId IN NUMBER,
204
		  				   	 sProdVersion IN VARCHAR2,
205
							 nBaseEnvId IN BASE_ENV_CONTENTS.BASE_ENV_ID%TYPE,
206
							 nOsId IN OS_BASE_ENV.OS_ID%TYPE,
207
							 nUserId IN NUMBER,
208
							 sComments IN VARCHAR2  );
209
 
210
PROCEDURE Remove_Products ( sProdIdList IN VARCHAR2,
211
		  			  	  	nBaseEnvId IN BASE_ENV_CONTENTS.BASE_ENV_ID%TYPE,
212
							nUserId IN NUMBER );
213
 
214
PROCEDURE Update_Product ( nOldProdId IN BASE_ENV_CONTENTS.PROD_ID%TYPE,
215
						   sNewProdIdVersion IN VARCHAR2,
216
						   nBaseEnvId IN BASE_ENV_CONTENTS.BASE_ENV_ID%TYPE,
217
						   nSeqNum IN BASE_ENV_CONTENTS.SEQ_NUM%TYPE,
218
						   sComments IN BASE_ENV_CONTENTS.BASE_ENV_COMMENTS%TYPE,
219
						   sSunOSElectronicName IN PACKAGES.SUNOS_ELECTRONIC_NAME%TYPE,
220
						   sWinElectronicName IN PACKAGES.WIN_ELECTRONIC_NAME%TYPE,
221
						   sNotXML IN BASE_ENV_CONTENTS.NOT_XML%TYPE,
222
						   sPatchElectronicName IN PACKAGE_VERSIONS.PATCH_ELECTRONIC_NAME%TYPE,
223
						   nUserId IN NUMBER,
224
						   outProdId OUT PACKAGE_VERSIONS.PV_ID%TYPE );
225
 
226
PROCEDURE Shift_Product_SeqNum ( nProdId IN BASE_ENV_CONTENTS.PROD_ID%TYPE,
227
		  				 	     nBaseEnvId IN BASE_ENV_CONTENTS.BASE_ENV_ID%TYPE,
228
						 		 nToSeqNum IN BASE_ENV_CONTENTS.SEQ_NUM%TYPE );
229
 
230
PROCEDURE Sort_Products ( sProdIdOrder IN VARCHAR2,
231
		  			  	  nBaseEnvId IN BASE_ENV_CONTENTS.BASE_ENV_ID%TYPE,
232
						  nUserId IN NUMBER );
233
 
234
 
235
END pk_Base_Env;
236
 
237
/
238
 
239
/
240
--------------------------------------------------------
241
--  DDL for Package PK_BASE_ENV_TEST
242
--------------------------------------------------------
243
 
244
  CREATE OR REPLACE PACKAGE "PK_BASE_ENV_TEST" IS
245
 
246
PROCEDURE Add_Base_Env ( sBaseEnvName IN BASE_ENV.BASE_ENV_NAME%TYPE,
247
						 nBosId IN BASE_ENV.BOS_ID%TYPE,
248
						 nBomId IN BASE_ENV.BOM_ID%TYPE,
249
						 nOsId IN OS_BASE_ENV.OS_ID%TYPE );
250
 
251
PROCEDURE Update_Base_Env ( nBaseEnvId IN BASE_ENV.BASE_ENV_ID%TYPE,
252
							sBaseEnvName IN BASE_ENV.BASE_ENV_NAME%TYPE,
253
						 	nBosId IN BASE_ENV.BOS_ID%TYPE );		
254
 
255
FUNCTION Get_Base_Env_Id ( sBaseEnvName IN BASE_ENV.BASE_ENV_NAME%TYPE,
256
						   nBomId IN BASE_ENV.BOM_ID%TYPE ) RETURN BASE_ENV.BASE_ENV_ID%TYPE;
257
 
258
PROCEDURE Destroy_Base_Env ( nBaseEnvId IN BASE_ENV.BASE_ENV_ID%TYPE );
259
 
260
PROCEDURE Add_Product ( sProdIdList IN VARCHAR2,
261
		  			  	nBaseEnvId IN BASE_ENV.BASE_ENV_ID%TYPE,
262
						nUserId IN NUMBER );
263
 
264
PROCEDURE Add_Product_Wrap ( nPkgId IN NUMBER,
265
		  				   	 sProdVersion IN VARCHAR2,
266
							 nBaseEnvId IN BASE_ENV_CONTENTS.BASE_ENV_ID%TYPE,
267
							 nUserId IN NUMBER,
268
							 sComments IN VARCHAR2  );
269
 
270
PROCEDURE Remove_Products ( sProdIdList IN VARCHAR2,
271
		  			  	  	nBaseEnvId IN BASE_ENV_CONTENTS.BASE_ENV_ID%TYPE,
272
							nUserId IN NUMBER );
273
 
274
PROCEDURE Update_Product ( nOldProdId IN BASE_ENV_CONTENTS.PROD_ID%TYPE,
275
						   sNewProdIdVersion IN VARCHAR2,
276
						   nBaseEnvId IN BASE_ENV_CONTENTS.BASE_ENV_ID%TYPE,
277
						   nSeqNum IN BASE_ENV_CONTENTS.SEQ_NUM%TYPE,
278
						   sComments IN BASE_ENV_CONTENTS.BASE_ENV_COMMENTS%TYPE,
279
						   sElectronicName IN PACKAGES.ELECTRONIC_NAME%TYPE );
280
 
281
PROCEDURE Shift_Product_SeqNum ( nProdId IN BASE_ENV_CONTENTS.PROD_ID%TYPE,
282
		  				 	     nBaseEnvId IN BASE_ENV_CONTENTS.BASE_ENV_ID%TYPE,
283
						 		 nToSeqNum IN BASE_ENV_CONTENTS.SEQ_NUM%TYPE );
284
 
285
PROCEDURE Sort_Products ( sProdIdOrder IN VARCHAR2,
286
		  			  	  nBaseEnvId IN BASE_ENV_CONTENTS.BASE_ENV_ID%TYPE,
287
						  nUserId IN NUMBER );
288
 
289
 
290
END pk_Base_Env_test;
291
 
292
/
293
 
294
/
295
--------------------------------------------------------
296
--  DDL for Package PK_BOM
297
--------------------------------------------------------
298
 
299
  CREATE OR REPLACE PACKAGE "PK_BOM" IS
300
 
301
PROCEDURE Add_Bom ( sBomName IN BOM_NAMES.BOM_NAME%TYPE DEFAULT NULL,
302
		  		  	sBomVersion IN BOMS.BOM_VERSION%TYPE,
303
		  		  	sBomLifeCycle IN BOMS.BOM_LIFECYCLE%TYPE,		
304
					sBomComments IN BOMS.BOM_COMMENTS%TYPE DEFAULT NULL,
305
					nToBranchId IN BOMS.BRANCH_ID%TYPE,
306
					nFromBomId IN BOMS.BOM_ID%TYPE DEFAULT NULL,
307
					nRtagId IN BOMS.RTAG_ID_FK%TYPE,
308
					nUserId IN BOM_STATE.USER_ID%TYPE );
309
 
310
PROCEDURE Update_Bom ( nBomId IN BOMS.BOM_ID%TYPE,
311
					   nRtagId IN BOMS.RTAG_ID_FK%TYPE,
312
					   sBomComment IN BOMS.BOM_COMMENTS%TYPE,
313
					   nUserId IN NUMBER );		
314
 
315
PROCEDURE Update_ProdBom ( nBomId IN BOMS.BOM_ID%TYPE,
316
					   nRtagId IN BOMS.RTAG_ID_FK%TYPE,
317
					   sBomComment IN BOMS.BOM_COMMENTS%TYPE,
318
					   nUserId IN NUMBER );							   			
319
 
320
FUNCTION New_Bom_Name ( sBomName IN BOM_NAMES.BOM_NAME%TYPE ) RETURN BOM_NAMES.BOM_NAME_ID%TYPE;	
321
FUNCTION New_Bom_Name ( nFromBomId IN BOMS.BOM_NAME_ID%TYPE ) RETURN BOMS.BOM_NAME_ID%TYPE;
322
 
323
PROCEDURE Accept_Reject ( nBomId IN BOMS.BOM_ID%TYPE,
324
						  cIsRejected IN BOMS.IS_REJECTED%TYPE,
325
						  sComments IN REJECTION_TRAIL.COMMENTS%TYPE,
326
						  nStateId IN BOM_STATE.STATE_ID%TYPE DEFAULT NULL,
327
						  nUserId IN REJECTION_TRAIL.USER_ID%TYPE  );
328
 
329
PROCEDURE Set_Bom_Official ( nBomId IN BOMS.BOM_ID%TYPE,
330
							 cIsOfficial IN BOMS.IS_READONLY%TYPE,
331
							 nStateId IN BOM_STATE.STATE_ID%TYPE,
332
							 nUserId IN NUMBER );		
333
 
334
PROCEDURE Update_Nodes_Version ( nBomId IN BOMS.BOM_ID%TYPE,
335
							 	 nUserId IN NUMBER );							 		
336
 
337
PROCEDURE Destroy_Bom ( nBomId IN VARCHAR2 );
338
 
339
PROCEDURE Destroy_BaseEnv ( nBaseEndIdCollector IN DEPMGR_NUMBER_TAB_t );
340
 
341
PROCEDURE Destroy_Hardware ( nHardwareNameIdCollector IN DEPMGR_NUMBER_TAB_t );			
342
 
343
PROCEDURE Get_Next_Version (nFromBomId IN BOMS.BOM_ID%TYPE,
344
							nToBranchId IN BOMS.BRANCH_ID%TYPE,
345
							sNextVersion OUT BOMS.BOM_VERSION%TYPE,
346
							sNextLifeCycle OUT BOMS.BOM_LIFECYCLE%TYPE,
347
							nParentBomId IN OUT BOMS.PARENT_BOM_ID%TYPE,
348
							nBomNameId IN BOMS.BOM_NAME_ID%TYPE );	
349
 
350
PROCEDURE Release_To ( nBomId IN BOM_STATE.BOM_ID%TYPE,
351
					   nUserId IN BOM_STATE.USER_ID%TYPE,
352
					   nToState IN BOM_STATE.STATE_ID%TYPE DEFAULT NULL,
353
					   sComments IN BOM_TRAIL.TRAIL_COMMENTS%TYPE DEFAULT NULL );	
354
 
355
PROCEDURE Accept_Reject_Comments ( nBomId IN BOMS.BOM_ID%TYPE,
356
		  						   nRejectSeq IN REJECTION_TRAIL.REJECT_SEQ%TYPE,
357
						  	   	   sComments IN REJECTION_TRAIL.COMMENTS%TYPE DEFAULT NULL,
358
						       	   nUserId IN REJECTION_TRAIL.USER_ID%TYPE );					   					
359
 
360
PROCEDURE Log_Bom_Trail ( nBomId IN BOM_TRAIL.BOM_ID%TYPE,
361
						  sAction IN BOM_TRAIL.TRAIL_ACTION%TYPE,
362
						  nUserId IN BOM_TRAIL.USER_ID%TYPE,
363
						  sComments IN BOM_TRAIL.TRAIL_COMMENTS%TYPE DEFAULT NULL  );	
364
 
365
PROCEDURE Log_Node_Trail ( nNodeId IN NODE_TRAIL.NODE_ID%TYPE,
366
						   sAction IN NODE_TRAIL.TRAIL_ACTION%TYPE,
367
						   nUserId IN NODE_TRAIL.USER_ID%TYPE  );	
368
 
369
PROCEDURE Log_Os_Trail ( nOsId IN OS_TRAIL.OS_ID%TYPE,
370
						  sAction IN OS_TRAIL.TRAIL_ACTION%TYPE,
371
						  nUserId IN OS_TRAIL.USER_ID%TYPE  );						   
372
 
373
 
374
 
375
END pk_Bom;
376
 
377
/
378
 
379
/
380
--------------------------------------------------------
381
--  DDL for Package PK_BOM_RPT
382
--------------------------------------------------------
383
 
384
  CREATE OR REPLACE PACKAGE "PK_BOM_RPT" AS
385
	   TYPE TOC_Type IS REF CURSOR RETURN TableOfContents%ROWTYPE;
386
END PK_BOM_RPT;
387
 
388
 
389
 
390
/
391
 
392
/
393
--------------------------------------------------------
394
--  DDL for Package PK_BOM_TEST
395
--------------------------------------------------------
396
 
397
  CREATE OR REPLACE PACKAGE "PK_BOM_TEST" IS
398
 
399
PROCEDURE Add_Bom ( sBomName IN BOM_NAMES.BOM_NAME%TYPE DEFAULT NULL,
400
		  		  	sBomVersion IN BOMS.BOM_VERSION%TYPE,
401
		  		  	sBomLifeCycle IN BOMS.BOM_LIFECYCLE%TYPE,		
402
					sBomComments IN BOMS.BOM_COMMENTS%TYPE DEFAULT NULL,
403
					nToBranchId IN BOMS.BRANCH_ID%TYPE,
404
					nFromBomId IN BOMS.BOM_ID%TYPE DEFAULT NULL,
405
					nUserId IN BOM_STATE.USER_ID%TYPE );
406
 
407
PROCEDURE Update_Bom ( nBomId IN BOMS.BOM_ID%TYPE,
408
					   nRtagId IN BOMS.RTAG_ID_FK%TYPE,
409
					   sBomComment IN BOMS.BOM_COMMENTS%TYPE,
410
					   nUserId IN NUMBER );					
411
 
412
FUNCTION New_Bom_Name ( sBomName IN BOM_NAMES.BOM_NAME%TYPE ) RETURN BOM_NAMES.BOM_NAME_ID%TYPE;	
413
FUNCTION New_Bom_Name ( nFromBomId IN BOMS.BOM_NAME_ID%TYPE ) RETURN BOMS.BOM_NAME_ID%TYPE;
414
 
415
PROCEDURE Accept_Reject ( nBomId IN BOMS.BOM_ID%TYPE,
416
						  cIsRejected IN BOMS.IS_REJECTED%TYPE,
417
						  sComments IN REJECTION_TRAIL.COMMENTS%TYPE,
418
						  nStateId IN BOM_STATE.STATE_ID%TYPE DEFAULT NULL,
419
						  nUserId IN REJECTION_TRAIL.USER_ID%TYPE  );
420
 
421
PROCEDURE Set_Bom_Official ( nBomId IN BOMS.BOM_ID%TYPE,
422
							 cIsOfficial IN BOMS.IS_READONLY%TYPE,
423
							 nStateId IN BOM_STATE.STATE_ID%TYPE,
424
							 nUserId IN NUMBER );		
425
 
426
PROCEDURE Update_Nodes_Version ( nBomId IN BOMS.BOM_ID%TYPE,
427
							 	 nUserId IN NUMBER );							 		
428
 
429
PROCEDURE Destroy_Bom ( nBomId IN VARCHAR2 );
430
 
431
PROCEDURE Destroy_BaseEnv ( nBaseEndIdCollector IN DEPMGR_NUMBER_TAB_t );
432
 
433
PROCEDURE Destroy_Hardware ( nHardwareNameIdCollector IN DEPMGR_NUMBER_TAB_t );			
434
 
435
PROCEDURE Get_Next_Version (nFromBomId IN BOMS.BOM_ID%TYPE,
436
							nToBranchId IN BOMS.BRANCH_ID%TYPE,
437
							sNextVersion OUT BOMS.BOM_VERSION%TYPE,
438
							sNextLifeCycle OUT BOMS.BOM_LIFECYCLE%TYPE,
439
							nParentBomId IN OUT BOMS.PARENT_BOM_ID%TYPE,
440
							nBomNameId IN BOMS.BOM_NAME_ID%TYPE );	
441
 
442
PROCEDURE Release_To ( nBomId IN BOM_STATE.BOM_ID%TYPE,
443
					   nUserId IN BOM_STATE.USER_ID%TYPE,
444
					   nToState IN BOM_STATE.STATE_ID%TYPE DEFAULT NULL,
445
					   sComments IN BOM_TRAIL.TRAIL_COMMENTS%TYPE DEFAULT NULL );	
446
 
447
PROCEDURE Accept_Reject_Comments ( nBomId IN BOMS.BOM_ID%TYPE,
448
		  						   nRejectSeq IN REJECTION_TRAIL.REJECT_SEQ%TYPE,
449
						  	   	   sComments IN REJECTION_TRAIL.COMMENTS%TYPE DEFAULT NULL,
450
						       	   nUserId IN REJECTION_TRAIL.USER_ID%TYPE );					   					
451
 
452
PROCEDURE Log_Bom_Trail ( nBomId IN BOM_TRAIL.BOM_ID%TYPE,
453
						  sAction IN BOM_TRAIL.TRAIL_ACTION%TYPE,
454
						  nUserId IN BOM_TRAIL.USER_ID%TYPE,
455
						  sComments IN BOM_TRAIL.TRAIL_COMMENTS%TYPE DEFAULT NULL  );	
456
 
457
PROCEDURE Log_Node_Trail ( nNodeId IN NODE_TRAIL.NODE_ID%TYPE,
458
						   sAction IN NODE_TRAIL.TRAIL_ACTION%TYPE,
459
						   nUserId IN NODE_TRAIL.USER_ID%TYPE  );	
460
 
461
PROCEDURE Log_Os_Trail ( nOsId IN OS_TRAIL.OS_ID%TYPE,
462
						  sAction IN OS_TRAIL.TRAIL_ACTION%TYPE,
463
						  nUserId IN OS_TRAIL.USER_ID%TYPE  );						   
464
 
465
 
466
 
467
END pk_Bom_Test;
468
 
469
/
470
 
471
/
472
--------------------------------------------------------
473
--  DDL for Package PK_NETWORK_NODE
474
--------------------------------------------------------
475
 
476
  CREATE OR REPLACE PACKAGE "PK_NETWORK_NODE" IS
477
/* ---------------------------------------------------------------------------
478
    Version: 1.0.0
479
   --------------------------------------------------------------------------- */
480
 
481
PROCEDURE Add_Node ( sNodeName IN NETWORK_NODES.NODE_NAME%TYPE,
482
  		   	   	     nNodeTypeId IN NETWORK_NODES.NODE_TYPE_ID%TYPE,
483
					 sNodeComments IN NETWORK_NODES.NODE_COMMENTS%TYPE,
484
					 nBomId IN BOM_CONTENTS.BOM_ID%TYPE,
485
					 nUserId IN NUMBER,
486
					 sNotXML IN NETWORK_NODES.NOT_XML%TYPE );
487
 
488
PROCEDURE Update_Node ( nNodeId IN NETWORK_NODES.NODE_ID%TYPE,
489
						sNodeName IN NETWORK_NODES.NODE_NAME%TYPE,
490
  		   	   	     	nNodeTypeId IN NETWORK_NODES.NODE_TYPE_ID%TYPE,
491
					 	sNodeComments IN NETWORK_NODES.NODE_COMMENTS%TYPE,
492
						nUserId IN NUMBER,
493
						nLifeCycle IN NUMBER,
494
						sNotXML IN NETWORK_NODES.NOT_XML%TYPE );					 
495
 
496
PROCEDURE Remove_Node ( sNodeIdList IN VARCHAR2,
497
					  	nBomId IN BOM_CONTENTS.BOM_ID%TYPE );	
498
 
499
PROCEDURE Destroy_Node ( nNodeIdCollection IN DEPMGR_NUMBER_TAB_t, nUserId IN NUMBER );	
500
 
501
PROCEDURE Destroy_Node ( nNodeIdList IN VARCHAR2, nUserId IN NUMBER );			
502
 
503
PROCEDURE Sort_Nodes ( sNodeIdOrder IN VARCHAR2,
504
		  			   nBomId IN BOMS.BOM_ID%TYPE,
505
					   nUserId IN NUMBER );						 
506
 
507
END pk_Network_Node;
508
 
509
/
510
 
511
/
512
--------------------------------------------------------
513
--  DDL for Package PK_NETWORK_NODE_TEST
514
--------------------------------------------------------
515
 
516
  CREATE OR REPLACE PACKAGE "PK_NETWORK_NODE_TEST" IS
517
/* ---------------------------------------------------------------------------
518
    Version: 1.0.0
519
   --------------------------------------------------------------------------- */
520
 
521
PROCEDURE Add_Node ( sNodeName IN NETWORK_NODES.NODE_NAME%TYPE,
522
  		   	   	     nNodeTypeId IN NETWORK_NODES.NODE_TYPE_ID%TYPE,
523
					 sNodeComments IN NETWORK_NODES.NODE_COMMENTS%TYPE,
524
					 nBomId IN BOM_CONTENTS.BOM_ID%TYPE,
525
					 nUserId IN NUMBER );
526
 
527
PROCEDURE Update_Node ( nNodeId IN NETWORK_NODES.NODE_ID%TYPE,
528
						sNodeName IN NETWORK_NODES.NODE_NAME%TYPE,
529
  		   	   	     	nNodeTypeId IN NETWORK_NODES.NODE_TYPE_ID%TYPE,
530
					 	sNodeComments IN NETWORK_NODES.NODE_COMMENTS%TYPE );					 
531
 
532
PROCEDURE Remove_Node ( sNodeIdList IN VARCHAR2,
533
					  	nBomId IN BOM_CONTENTS.BOM_ID%TYPE );	
534
 
535
PROCEDURE Destroy_Node ( nNodeIdCollection IN DEPMGR_NUMBER_TAB_t );	
536
 
537
PROCEDURE Destroy_Node ( nNodeIdList IN VARCHAR2 );			
538
 
539
PROCEDURE Sort_Nodes ( sNodeIdOrder IN VARCHAR2,
540
		  			   nBomId IN BOMS.BOM_ID%TYPE,
541
					   nUserId IN NUMBER );						 
542
 
543
END pk_Network_Node_test;
544
 
545
/
546
 
547
/
548
--------------------------------------------------------
549
--  DDL for Package PK_OPERATING_SYSTEM
550
--------------------------------------------------------
551
 
552
  CREATE OR REPLACE PACKAGE "PK_OPERATING_SYSTEM" 
553
IS
554
   PROCEDURE add_os (
555
      sosname         IN   operating_systems.os_name%TYPE,
556
      soscomments     IN   operating_systems.os_comments%TYPE,
557
      snodespecfile   IN   operating_systems.node_spec_file%TYPE,
558
      snotxml         IN   operating_systems.not_xml%TYPE,
559
      nnodeid         IN   operating_systems.node_id%TYPE,
560
      nbaseenvname    IN   base_env.base_env_name%TYPE,
561
      nbosid          IN   base_env.bos_id%TYPE DEFAULT NULL,
562
      nuserid         IN   NUMBER
563
   );
564
 
565
   PROCEDURE update_os (
566
      nosid           IN   operating_systems.os_id%TYPE,
567
      sosname         IN   operating_systems.os_name%TYPE,
568
      soscomments     IN   operating_systems.os_comments%TYPE,
569
      nbaseenvname    IN   base_env.base_env_name%TYPE,
570
      snodespecfile   IN   operating_systems.node_spec_file%TYPE,
571
      snotxml         IN   operating_systems.not_xml%TYPE,
572
      nuserid         IN   NUMBER
573
   );
574
 
575
   PROCEDURE add_product_wrap (
576
      npkgid         IN   NUMBER,
577
      sprodversion   IN   VARCHAR2,
578
      nosid          IN   os_contents.os_id%TYPE,
579
      nuserid        IN   NUMBER,
580
      scomments      IN   VARCHAR2 DEFAULT NULL
581
   );
582
 
583
   PROCEDURE set_base_conf (
584
      nosid        IN   os_base_env.os_id%TYPE,
585
      nbaseenvid   IN   os_base_env.base_env_id%TYPE
586
   );
587
 
588
   PROCEDURE shift_product_seqnum (
589
      nprodid     IN   os_contents.prod_id%TYPE,
590
      nosid       IN   os_contents.os_id%TYPE,
591
      ntoseqnum   IN   os_contents.seq_num%TYPE
592
   );
593
 
594
   PROCEDURE shift_bulk_products_seqnum (
595
      sprodidlist   IN   VARCHAR2,
596
      nosid         IN   os_contents.os_id%TYPE,
597
      cdirection    IN   CHAR
598
   );
599
 
600
   PROCEDURE destroy_os (
601
      nosidcollection   IN   depmgr_number_tab_t,
602
      nuserid           IN   NUMBER
603
   );
604
 
605
   PROCEDURE destroy_os (nosidlist IN VARCHAR2, nuserid IN NUMBER);
606
 
607
   PROCEDURE add_package_process (
608
      nprocidlist   IN   VARCHAR2,
609
	  npvid 		IN 	 processes_config.prod_id%TYPE,
610
      nosid         IN   os_contents.os_id%TYPE,
611
      nuserid       IN   NUMBER
612
   );
613
 
614
   PROCEDURE add_packages_process (
615
	  npvidlist		IN 	 VARCHAR2,
616
      nosid         IN   os_contents.os_id%TYPE,
617
      nuserid       IN   NUMBER
618
   );   
619
END pk_operating_system;
620
 
621
/
622
 
623
/
624
--------------------------------------------------------
625
--  DDL for Package PK_PRODUCT
626
--------------------------------------------------------
627
 
628
  CREATE OR REPLACE PACKAGE "PK_PRODUCT" IS
629
/* ---------------------------------------------------------------------------
630
    Version: 1.0.0
631
   --------------------------------------------------------------------------- */
632
 
633
PROCEDURE New_Product ( sProdName IN PACKAGES.PKG_NAME%TYPE,
634
						sProdVersion IN PACKAGE_VERSIONS.PKG_VERSION%TYPE,
635
						nUserId IN NUMBER,
636
						outProdId OUT PACKAGE_VERSIONS.PV_ID%TYPE );
637
 
638
PROCEDURE Add_Product ( sProdIdList IN VARCHAR2,
639
		  			  	nOsId IN OS_CONTENTS.OS_ID%TYPE,
640
						nUserId IN NUMBER );
641
 
642
PROCEDURE Hide_Product ( sProdIdList IN VARCHAR2,
643
		  			  	nOsId IN OS_CONTENTS.OS_ID%TYPE,
644
						nUserId IN NUMBER );	
645
 
646
PROCEDURE Unhide_Product ( sProdIdList IN NUMBER,
647
		  			  	nOsId IN OS_CONTENTS.OS_ID%TYPE,
648
						nUserId IN NUMBER );												
649
 
650
PROCEDURE Update_Process (nProcId IN PROCESSES_CONFIG.PROC_ID%TYPE,
651
		  				  nProdId IN PROCESSES_CONFIG.PROD_ID%TYPE,
652
		  				  nIsInterface IN PROCESSES_CONFIG.IS_INTERFACE%TYPE,		  
653
		  				  nOsId IN PROCESSES_CONFIG.OS_ID%TYPE,		  
654
						  nCmdInterface IN PROCESSES_CONFIG.CMD_INTERFACE%TYPE,
655
						  nPkgOwner IN PROCESSES_CONFIG.PKG_OWNER%TYPE,
656
						  sPkgHealthTag IN PROCESSES_CONFIG.PKG_HEALTH_TAG%TYPE,
657
						  nProduct IN PROCESSES_CONFIG.PROD_ID%TYPE );						
658
 
659
PROCEDURE Update_Product ( nOldProdId IN OS_CONTENTS.PROD_ID%TYPE,
660
						   sNewProdIdVersion IN VARCHAR2,
661
						   nOsId IN OS_CONTENTS.OS_ID%TYPE,
662
						   nSeqNum IN OS_CONTENTS.SEQ_NUM%TYPE,
663
						   sComments IN OS_CONTENTS.PRODUCT_COMMENTS%TYPE,
664
						   sSunOSElectronicName IN PACKAGES.SUNOS_ELECTRONIC_NAME%TYPE,
665
						   sWinElectronicName IN PACKAGES.WIN_ELECTRONIC_NAME%TYPE,
666
						   sIsNodeSpec IN OS_CONTENTS.IS_NODE_SPEC%TYPE,
667
						   sNotXML IN OS_CONTENTS.NOT_XML%TYPE,
668
						   sPatchElectronicName IN PACKAGE_VERSIONS.PATCH_ELECTRONIC_NAME%TYPE,
669
   						   nUserId IN NUMBER,
670
						   outProdId OUT PACKAGE_VERSIONS.PV_ID%TYPE );						 
671
 
672
PROCEDURE Replace_Product ( nOldProdId IN OS_CONTENTS.PROD_ID%TYPE,
673
		  				  	nNewProdId IN OS_CONTENTS.PROD_ID%TYPE,
674
		  			  	    nOsId IN OS_CONTENTS.OS_ID%TYPE,
675
							nUserId IN NUMBER );
676
 
677
PROCEDURE Remove_Process ( 	sProcName IN PROCESSES_CONFIG.PKG_HEALTH_TAG%TYPE,		
678
		  				   	sProdIdList IN VARCHAR2,
679
		  			  	  	nOsId IN OS_CONTENTS.OS_ID%TYPE,
680
							sCmdInterface IN PROCESSES_CONFIG.CMD_INTERFACE%TYPE,
681
							sPkgOwner IN PROCESSES_CONFIG.PKG_OWNER%TYPE,
682
							sInterface IN PROCESSES_CONFIG.IS_INTERFACE%TYPE,
683
							nUserId IN NUMBER );							
684
 
685
PROCEDURE Remove_Products ( sProdIdList IN VARCHAR2,
686
		  			  	  	nOsId IN OS_CONTENTS.OS_ID%TYPE,
687
							nUserId IN NUMBER ); 
688
 
689
PROCEDURE Add_Products_NodeSpec ( sProdIdList IN VARCHAR2,
690
		  			  	  		  nOsId IN OS_CONTENTS.OS_ID%TYPE,
691
								  nUserId IN NUMBER ); 														
692
 
693
PROCEDURE Accept_Reject ( nProdId IN PRODUCT_DETAILS.PROD_ID%TYPE,
694
						  nBomId IN BOMS.BOM_ID%TYPE,
695
						  sComments IN REJECTION_TRAIL.COMMENTS%TYPE DEFAULT NULL,
696
						  nUserId IN REJECTION_TRAIL.USER_ID%TYPE,
697
						  nOsId IN NUMBER );
698
 
699
PROCEDURE Accept_Reject_List ( nProdIdList IN VARCHAR2,
700
							   nBomId IN BOMS.BOM_ID%TYPE,
701
						  	   sComments IN REJECTION_TRAIL.COMMENTS%TYPE DEFAULT NULL,
702
						       nUserId IN REJECTION_TRAIL.USER_ID%TYPE,
703
							   nOsId IN NUMBER );
704
 
705
PROCEDURE Accept_Reject_Comments ( nProdId IN PRODUCT_DETAILS.PROD_ID%TYPE,
706
		  						   nRejectSeq IN REJECTION_TRAIL.REJECT_SEQ%TYPE,
707
						  	   	   sComments IN REJECTION_TRAIL.COMMENTS%TYPE DEFAULT NULL,
708
						       	   nUserId IN REJECTION_TRAIL.USER_ID%TYPE );				
709
 
710
PROCEDURE Sort_Products ( sProdIdOrder IN VARCHAR2,
711
		  			  	  nOsId IN OS_CONTENTS.OS_ID%TYPE,
712
						  nUserId IN NUMBER );	
713
 
714
PROCEDURE Remove_Obsolete_Patches ( nOsId IN OS_CONTENTS.OS_ID%TYPE,
715
		  						  	nUserId IN NUMBER );
716
 
717
 
718
FUNCTION GET_OS_ID ( PvId IN NUMBER ) RETURN NUMBER;	
719
 
720
FUNCTION GET_NODE_ID ( OsId IN NUMBER ) RETURN NUMBER;
721
 
722
PROCEDURE Add_Product_Note ( nProdId IN NUMBER,
723
		  				   	 sNotes IN VARCHAR2,
724
							 nUserId IN NUMBER );
725
 
726
PROCEDURE Edit_Product_Note ( nProdId IN NUMBER,
727
		  				   	 sNotes IN VARCHAR2,
728
							 nUserId IN NUMBER );							 
729
 
730
PROCEDURE Log_Product_Trail ( nProdId IN PRODUCT_TRAIL.PROD_ID%TYPE,
731
						  	  sAction IN PRODUCT_TRAIL.TRAIL_ACTION%TYPE,
732
						  	  nUserId IN PRODUCT_TRAIL.USER_ID%TYPE  );								 
733
 
734
END pk_Product;
735
 
736
/
737
 
738
/
739
--------------------------------------------------------
740
--  DDL for Package PK_PRODUCTION
741
--------------------------------------------------------
742
 
743
  CREATE OR REPLACE PACKAGE "PK_PRODUCTION" AS
744
/******************************************************************************
745
   NAME:       PK_PRODUCTION
746
   PURPOSE:
747
 
748
   REVISIONS:
749
   Ver        Date        Author           Description
750
   ---------  ----------  ---------------  ------------------------------------
751
   1.0        26/07/2006             1. Created this package.
752
******************************************************************************/
753
 
754
  PROCEDURE Release_Authorisation_Tester ( nPvId IN NUMBER,
755
  										   nBomId IN NUMBER,
756
										   nTesterId IN NUMBER,
757
										   sTesterComments IN VARCHAR2);
758
 
759
  PROCEDURE Release_Authorisation_Manager ( nPvId IN NUMBER,
760
  										   	nBomId IN NUMBER,
761
										   	nManagerId IN NUMBER,
762
										   	sManagerComments IN VARCHAR2);		
763
 
764
  PROCEDURE Log_Pkg_Trail ( nPkgId IN OS_TRAIL.OS_ID%TYPE,
765
						  	sAction IN OS_TRAIL.TRAIL_ACTION%TYPE,
766
						  	nUserId IN OS_TRAIL.USER_ID%TYPE  );
767
 
768
  PROCEDURE Reject_Product ( nPvId IN NUMBER,
769
							 nTesterId IN NUMBER,
770
							 sTesterComments IN VARCHAR2  );	
771
 
772
  PROCEDURE Add_Production_Bom ( nBomId IN NUMBER, 
773
  							   	 nBranchId IN NUMBER, 
774
								 nStateId IN NUMBER, 
775
								 nProjId IN NUMBER ); 							 																									   
776
 
777
END PK_PRODUCTION;
778
 
779
/
780
 
781
/
782
--------------------------------------------------------
783
--  DDL for Package PK_PRODUCT_TEST
784
--------------------------------------------------------
785
 
786
  CREATE OR REPLACE PACKAGE "PK_PRODUCT_TEST" IS
787
/* ---------------------------------------------------------------------------
788
    Version: 1.0.0
789
   --------------------------------------------------------------------------- */
790
 
791
PROCEDURE New_Product ( sProdName IN PACKAGES.PKG_NAME%TYPE,
792
						sProdVersion IN PACKAGE_VERSIONS.PKG_VERSION%TYPE,
793
						nUserId IN NUMBER,
794
						outProdId OUT PACKAGE_VERSIONS.PV_ID%TYPE );
795
 
796
PROCEDURE Add_Product ( sProdIdList IN VARCHAR2,
797
		  			  	nOsId IN OS_CONTENTS.OS_ID%TYPE,
798
						nUserId IN NUMBER );
799
 
800
PROCEDURE Hide_Product ( sProdIdList IN VARCHAR2,
801
		  			  	nOsId IN OS_CONTENTS.OS_ID%TYPE,
802
						nUserId IN NUMBER );	
803
 
804
PROCEDURE Unhide_Product ( sProdIdList IN NUMBER,
805
		  			  	nOsId IN OS_CONTENTS.OS_ID%TYPE,
806
						nUserId IN NUMBER );												
807
 
808
PROCEDURE Update_Process (nProcId IN PROCESSES_CONFIG.PROC_ID%TYPE,
809
		  				  nProdId IN PROCESSES_CONFIG.PROD_ID%TYPE,
810
		  				  nIsInterface IN PROCESSES_CONFIG.IS_INTERFACE%TYPE,		  
811
		  				  nOsId IN PROCESSES_CONFIG.OS_ID%TYPE,		  
812
						  nCmdInterface IN PROCESSES_CONFIG.CMD_INTERFACE%TYPE,
813
						  nPkgOwner IN PROCESSES_CONFIG.PKG_OWNER%TYPE,
814
						  sPkgHealthTag IN PROCESSES_CONFIG.PKG_HEALTH_TAG%TYPE,
815
						  nProduct IN PROCESSES_CONFIG.PROD_ID%TYPE );						
816
 
817
PROCEDURE Update_Product ( nOldProdId IN OS_CONTENTS.PROD_ID%TYPE,
818
						   sNewProdIdVersion IN VARCHAR2,
819
						   nOsId IN OS_CONTENTS.OS_ID%TYPE,
820
						   nSeqNum IN OS_CONTENTS.SEQ_NUM%TYPE,
821
						   sComments IN OS_CONTENTS.PRODUCT_COMMENTS%TYPE,
822
						   sSunOSElectronicName IN PACKAGES.SUNOS_ELECTRONIC_NAME%TYPE,
823
						   sWinElectronicName IN PACKAGES.WIN_ELECTRONIC_NAME%TYPE,
824
						   sIsNodeSpec IN OS_CONTENTS.IS_NODE_SPEC%TYPE,
825
						   sNotXML IN OS_CONTENTS.NOT_XML%TYPE,
826
						   sPatchElectronicName IN PACKAGE_VERSIONS.PATCH_ELECTRONIC_NAME%TYPE,
827
						   nUserId IN NUMBER,
828
						   outProdId OUT PACKAGE_VERSIONS.PV_ID%TYPE );						 
829
 
830
PROCEDURE Replace_Product ( nOldProdId IN OS_CONTENTS.PROD_ID%TYPE,
831
		  				  	nNewProdId IN OS_CONTENTS.PROD_ID%TYPE,
832
		  			  	    nOsId IN OS_CONTENTS.OS_ID%TYPE,
833
							nUserId IN NUMBER );
834
 
835
PROCEDURE Remove_Process ( 	sProcName IN PROCESSES_CONFIG.PKG_HEALTH_TAG%TYPE,		
836
		  				   	sProdIdList IN VARCHAR2,
837
		  			  	  	nOsId IN OS_CONTENTS.OS_ID%TYPE,
838
							sCmdInterface IN PROCESSES_CONFIG.CMD_INTERFACE%TYPE,
839
							sPkgOwner IN PROCESSES_CONFIG.PKG_OWNER%TYPE,
840
							sInterface IN PROCESSES_CONFIG.IS_INTERFACE%TYPE,
841
							nUserId IN NUMBER );							
842
 
843
PROCEDURE Remove_Products ( sProdIdList IN VARCHAR2,
844
		  			  	  	nOsId IN OS_CONTENTS.OS_ID%TYPE,
845
							nUserId IN NUMBER ); 
846
 
847
PROCEDURE Add_Products_NodeSpec ( sProdIdList IN VARCHAR2,
848
		  			  	  		  nOsId IN OS_CONTENTS.OS_ID%TYPE,
849
								  nUserId IN NUMBER ); 														
850
 
851
PROCEDURE Accept_Reject ( nProdId IN PRODUCT_DETAILS.PROD_ID%TYPE,
852
						  nBomId IN BOMS.BOM_ID%TYPE,
853
						  sComments IN REJECTION_TRAIL.COMMENTS%TYPE DEFAULT NULL,
854
						  nUserId IN REJECTION_TRAIL.USER_ID%TYPE,
855
						  nOsId IN NUMBER );
856
 
857
PROCEDURE Accept_Reject_List ( nProdIdList IN VARCHAR2,
858
							   nBomId IN BOMS.BOM_ID%TYPE,
859
						  	   sComments IN REJECTION_TRAIL.COMMENTS%TYPE DEFAULT NULL,
860
						       nUserId IN REJECTION_TRAIL.USER_ID%TYPE,
861
							   nOsId IN NUMBER );
862
 
863
PROCEDURE Accept_Reject_Comments ( nProdId IN PRODUCT_DETAILS.PROD_ID%TYPE,
864
		  						   nRejectSeq IN REJECTION_TRAIL.REJECT_SEQ%TYPE,
865
						  	   	   sComments IN REJECTION_TRAIL.COMMENTS%TYPE DEFAULT NULL,
866
						       	   nUserId IN REJECTION_TRAIL.USER_ID%TYPE );				
867
 
868
PROCEDURE Sort_Products ( sProdIdOrder IN VARCHAR2,
869
		  			  	  nOsId IN OS_CONTENTS.OS_ID%TYPE,
870
						  nUserId IN NUMBER );	
871
 
872
PROCEDURE Remove_Obsolete_Patches ( nOsId IN OS_CONTENTS.OS_ID%TYPE,
873
		  						  	nUserId IN NUMBER );
874
 
875
 
876
FUNCTION GET_OS_ID ( PvId IN NUMBER ) RETURN NUMBER;	
877
 
878
FUNCTION GET_NODE_ID ( OsId IN NUMBER ) RETURN NUMBER;
879
 
880
 
881
 
882
END pk_Product_Test;
883
 
884
/
885
 
886
/
887
--------------------------------------------------------
888
--  DDL for Package PK_PROJECT
889
--------------------------------------------------------
890
 
891
  CREATE OR REPLACE PACKAGE "PK_PROJECT" IS
892
 
893
 
894
PROCEDURE Add_Project ( sProjName IN DM_PROJECTS.PROJ_NAME%TYPE,
895
		  			  	nRMProjFk IN DM_PROJECTS.RM_PROJECTS_FK%TYPE );
896
 
897
PROCEDURE Update_Project ( nProjId IN DM_PROJECTS.PROJ_ID%TYPE,
898
		  				   sProjName IN DM_PROJECTS.PROJ_NAME%TYPE,
899
						   nRMProjFk IN DM_PROJECTS.RM_PROJECTS_FK%TYPE );		
900
 
901
PROCEDURE ShowHide_Project ( nProjId DM_PROJECTS.PROJ_ID%TYPE );						   				
902
 
903
PROCEDURE Remove_Project ( nProjId IN DM_PROJECTS.PROJ_ID%TYPE );						
904
 
905
PROCEDURE Add_Branch ( sBranchName IN BRANCHES.BRANCH_NAME%TYPE,
906
		  			   nProjId IN BRANCHES.PROJ_ID%TYPE,
907
					   nRMVTreeId IN BRANCHES.RM_VTREE_FK%TYPE,
908
                       sBranchComments IN BRANCHES.BRANCH_COMMENTS%TYPE );
909
 
910
PROCEDURE Update_Branch ( nBranchId IN BRANCHES.BRANCH_ID%TYPE,
911
		  				  sBranchName IN BRANCHES.BRANCH_NAME%TYPE,
912
					   	  nRMVTreeId IN BRANCHES.RM_VTREE_FK%TYPE,
913
                          sBranchComments IN BRANCHES.BRANCH_COMMENTS%TYPE );					   
914
 
915
PROCEDURE Remove_Branch ( nBranchId IN BRANCHES.BRANCH_ID%TYPE );	
916
 
917
PROCEDURE ShowHide_Branch ( nBranchId IN BRANCHES.BRANCH_ID%TYPE );
918
 
919
PROCEDURE ShowHide_Download ( nProjId DM_PROJECTS.PROJ_ID%TYPE );	
920
 
921
PROCEDURE ShowHide_StateDownload ( nStateId STATES.STATE_ID%TYPE );	
922
 
923
 
924
 
925
 
926
END pk_Project;
927
 
928
/
929
 
930
/
931
--------------------------------------------------------
932
--  DDL for Package PK_REPORT
933
--------------------------------------------------------
934
 
935
  CREATE OR REPLACE PACKAGE "PK_REPORT" IS
936
 
937
/*
938
------------------------------
939
||  Last Modified:  S.Vukovic
940
||  Modified Date:  8/Mar/2005
941
||  Spec Version:   1.0
942
------------------------------
943
*/
944
 
945
	TYPE typeCur IS REF CURSOR;
946
 
947
    /*================================================================================================*/
948
 
949
	FUNCTION BOM_PRODUCTS_BY_NODE_BY_OS ( BomId NUMBER ) RETURN typeCur;
950
 
951
	/*================================================================================================*/
952
 
953
 
954
END PK_REPORT;
955
 
956
/
957
 
958
/
959
--------------------------------------------------------
960
--  DDL for Package PK_REQUIREMENTS
961
--------------------------------------------------------
962
 
963
  CREATE OR REPLACE PACKAGE "PK_REQUIREMENTS" IS
964
 
965
PROCEDURE Add_Bom ( nFromBomId IN BOMS.BOM_ID%TYPE,
966
					nToBranchId IN BOMS.BRANCH_ID%TYPE );	
967
 
968
PROCEDURE Destroy_Bom ( nBomId IN VARCHAR2 );					
969
 
970
END pk_Requirements;
971
 
972
/
973
 
974
/
975
--------------------------------------------------------
976
--  DDL for Package PK_STATE
977
--------------------------------------------------------
978
 
979
  CREATE OR REPLACE PACKAGE "PK_STATE" IS
980
 
981
 
982
PROCEDURE Add_State ( sStateName IN STATES.STATE_NAME%TYPE,
983
		  			  nStateTypeEnum IN STATES.STATE_TYPE_ENUM%TYPE,
984
		  			  nProjId IN STATES.PROJ_ID%TYPE );
985
 
986
PROCEDURE Update_State ( nStateId IN STATES.STATE_ID%TYPE,
987
		  			   	 sStateName IN STATES.STATE_NAME%TYPE,
988
						 nStateSeq IN STATES.STATE_SEQ%TYPE,
989
						 nStateTypeEnum IN STATES.STATE_TYPE_ENUM%TYPE );
990
 
991
PROCEDURE Remove_State ( nStateId IN STATES.STATE_ID%TYPE );	
992
 
993
PROCEDURE Toggle_Is_Displayed ( nStateId IN BOM_STATE.STATE_ID%TYPE,
994
								nBomId IN BOM_STATE.BOM_ID%TYPE,
995
								cIsDisplay IN BOM_STATE.IS_DISPLAYED%TYPE );
996
 
997
PROCEDURE Auto_Hide ( nStateId IN BOM_STATE.STATE_ID%TYPE,
998
					  nInsertedBomId IN BOM_STATE.BOM_ID%TYPE,
999
					  nEventValue IN SYSTEM_CONFIGURATION.ITEM_VALUE%TYPE );								
1000
 
1001
END pk_State;
1002
 
1003
/
1004
 
1005
/
1006
--------------------------------------------------------
1007
--  DDL for Package PK_UTILS
1008
--------------------------------------------------------
1009
 
1010
  CREATE OR REPLACE PACKAGE "PK_UTILS" IS
1011
/* ---------------------------------------------------------------------------
1012
    Version: 1.0.0
1013
   --------------------------------------------------------------------------- */
1014
 
1015
PROCEDURE Clone_BOM ( nFromBomId IN BOMS.BOM_ID%TYPE,
1016
		  			  nToBomId IN BOMS.BOM_ID%TYPE,
1017
					  nUserId IN NUMBER );
1018
 
1019
PROCEDURE Copy_BOM_Contents ( nFromBomId IN BOMS.BOM_ID%TYPE,
1020
		  					  nToBomId IN BOMS.BOM_ID%TYPE );	
1021
 
1022
PROCEDURE Copy_Network_Node ( nFromBomId IN BOMS.BOM_ID%TYPE,
1023
		  					  nToBomId IN BOMS.BOM_ID%TYPE,
1024
							  nFromNodeId IN NUMBER DEFAULT 0  );	
1025
 
1026
PROCEDURE Paste_OS_Contents;							  
1027
 
1028
PROCEDURE Paste_Node ( sNodeIdList IN VARCHAR2,
1029
					   nFromBomId IN OPERATING_SYSTEMS.NODE_ID%TYPE,
1030
					   nToBomId IN OPERATING_SYSTEMS.NODE_ID%TYPE );
1031
 
1032
PROCEDURE Paste_Os ( sOsIdList IN VARCHAR2,
1033
					 nFromNodeId IN OPERATING_SYSTEMS.NODE_ID%TYPE,
1034
					 nToNodeId IN OPERATING_SYSTEMS.NODE_ID%TYPE );
1035
 
1036
PROCEDURE Paste_Products ( sProdIdList IN VARCHAR2,
1037
						   nFromOsId IN OS_CONTENTS.OS_ID%TYPE, 
1038
						   nToOsId IN OS_CONTENTS.OS_ID%TYPE );
1039
 
1040
PROCEDURE Paste_Products_To_Base_Env ( sProdIdList IN VARCHAR2,
1041
									   nFromOsId IN OS_CONTENTS.OS_ID%TYPE, 
1042
									   nToBaseEnvId IN BASE_ENV.BASE_ENV_ID%TYPE );						   
1043
 
1044
PROCEDURE Clean_Old_Id_Column;	
1045
 
1046
PROCEDURE Log_Rejection_Trail ( nEnumEntityType IN REJECTION_TRAIL.ENUM_ENTITY_TYPE%TYPE,
1047
								nEntityId IN REJECTION_TRAIL.ENTITY_ID%TYPE,
1048
								cIsRejected IN REJECTION_TRAIL.IS_REJECTED%TYPE,
1049
								nUserId IN REJECTION_TRAIL.USER_ID%TYPE,
1050
								sComments IN REJECTION_TRAIL.COMMENTS%TYPE DEFAULT NULL );
1051
 
1052
PROCEDURE Log_Action ( nUserId IN ACTION_TRAIL.USER_ID%TYPE, 
1053
					   nEvent IN ACTION_TRAIL.ACTION_EVENT%TYPE,
1054
					   sMethod IN ACTION_TRAIL.METHOD_CALL%TYPE DEFAULT NULL,
1055
					   sActionScript IN ACTION_TRAIL.ACTION_SCRIPT%TYPE DEFAULT NULL,
1056
					   sDescription IN ACTION_TRAIL.ACTION_DESCRIPTION%TYPE DEFAULT NULL  );					  						  				  				 
1057
 
1058
END pk_Utils;
1059
 
1060
/
1061
 
1062
/
1063
--------------------------------------------------------
1064
--  DDL for Package Body PK_BASE_ENV
1065
--------------------------------------------------------
1066
 
1067
  CREATE OR REPLACE PACKAGE BODY "PK_BASE_ENV" 
1068
IS
1069
/* ---------------------------------------------------------------------------
1070
    Version: 1.0.0
1071
   --------------------------------------------------------------------------- */
1072
 
1073
 
1074
/*--------------------------------------------------------------------------------------------------*/
1075
PROCEDURE Add_Base_Env ( sBaseEnvName IN BASE_ENV.BASE_ENV_NAME%TYPE,
1076
						 nBosId IN BASE_ENV.BOS_ID%TYPE,
1077
						 nBomId IN BASE_ENV.BOM_ID%TYPE,
1078
						 nOsId IN OS_BASE_ENV.OS_ID%TYPE,
1079
						 nUserId IN NUMBER ) IS
1080
 
1081
nBaseEnvId BASE_ENV.BASE_ENV_ID%TYPE;	
1082
NodeName VARCHAR2(4000);					 
1083
 
1084
BEGIN
1085
	/*--------------- Business Rules Here -------------------*/
1086
	/*-------------------------------------------------------*/
1087
 
1088
	SELECT NN.NODE_NAME INTO NodeName
1089
	FROM NETWORK_NODES NN, OPERATING_SYSTEMS OS
1090
	WHERE NN.NODE_ID = OS.NODE_ID
1091
	AND OS.OS_ID = nOsId;
1092
 
1093
	-- Get base_env_id
1094
	SELECT SEQ_BASE_ENV_ID.NEXTVAL INTO nBaseEnvId FROM DUAL;
1095
 
1096
	-- Insert new base env name
1097
	INSERT INTO BASE_ENV ( BASE_ENV_ID, BOS_ID, BASE_ENV_NAME, BOM_ID )
1098
	VALUES ( nBaseEnvId, nBosId, sBaseEnvName, nBomId );
1099
 
1100
	/* Log BOM_TRAIL */
1101
	pk_Bom.Log_Os_Trail ( nOsId, 'Added Base Configuration: '||sBaseEnvName||' into Node: '||NodeName, nUserId );	
1102
 
1103
	EXCEPTION
1104
    WHEN DUP_VAL_ON_INDEX
1105
	THEN		
1106
		RAISE_APPLICATION_ERROR (-20000, 'Base Configuration Name "'|| sBaseEnvName ||'" is Already Used in this BOM.');
1107
 
1108
END	Add_Base_Env;
1109
/*--------------------------------------------------------------------------------------------------*/
1110
PROCEDURE Update_Base_Env ( nBaseEnvId IN BASE_ENV.BASE_ENV_ID%TYPE,
1111
							sBaseEnvName IN BASE_ENV.BASE_ENV_NAME%TYPE,
1112
						 	nBosId IN BASE_ENV.BOS_ID%TYPE,
1113
							nOsId IN OS_BASE_ENV.OS_ID%TYPE,
1114
							nUserId IN NUMBER ) IS
1115
 
1116
NodeName VARCHAR2(4000);							
1117
 
1118
BEGIN
1119
	/*--------------- Business Rules Here -------------------*/
1120
	IF (nBaseEnvId IS NULL) 
1121
	THEN
1122
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nBaseEnvId= '|| nBaseEnvId  );
1123
 
1124
	END IF;
1125
	/*-------------------------------------------------------*/
1126
 
1127
	SELECT NN.NODE_NAME INTO NodeName
1128
	FROM NETWORK_NODES NN, OPERATING_SYSTEMS OS
1129
	WHERE NN.NODE_ID = OS.NODE_ID
1130
	AND OS.OS_ID = nOsId;
1131
 
1132
	-- Update Base Env
1133
	UPDATE BASE_ENV SET
1134
		BASE_ENV_NAME = sBaseEnvName,
1135
		BOS_ID = nBosId
1136
	WHERE BASE_ENV_ID = nBaseEnvId;
1137
 
1138
	/* Log BOM_TRAIL */
1139
	pk_Bom.Log_Os_Trail ( nOsId, 'Updated Base Configuration: '||sBaseEnvName||' on Node: '||NodeName, nUserId );	
1140
 
1141
	EXCEPTION
1142
    WHEN DUP_VAL_ON_INDEX
1143
	THEN		
1144
		RAISE_APPLICATION_ERROR (-20000, 'Base Configuration Name "'|| sBaseEnvName ||'" is Already Used in this BOM.');
1145
 
1146
END	Update_Base_Env;
1147
/*--------------------------------------------------------------------------------------------------*/
1148
FUNCTION Get_Base_Env_Id ( sBaseEnvName IN BASE_ENV.BASE_ENV_NAME%TYPE,
1149
						   nBomId IN BASE_ENV.BOM_ID%TYPE ) RETURN BASE_ENV.BASE_ENV_ID%TYPE IS
1150
 
1151
ReturnValue BASE_ENV.BASE_ENV_ID%TYPE;	
1152
 
1153
CURSOR curBaseEnv IS
1154
	SELECT be.BASE_ENV_ID
1155
	  FROM BASE_ENV be
1156
	 WHERE be.BASE_ENV_NAME = sBaseEnvName
1157
	   AND be.BOM_ID = nBomId;
1158
recBaseEnv curBaseEnv%ROWTYPE;
1159
 
1160
BEGIN
1161
	/*--------------- Business Rules Here -------------------*/
1162
	/*-------------------------------------------------------*/
1163
 
1164
	-- Get bom_name_id
1165
	OPEN curBaseEnv;
1166
	FETCH curBaseEnv INTO recBaseEnv;
1167
 
1168
	IF curBaseEnv%FOUND THEN
1169
		ReturnValue := recBaseEnv.BASE_ENV_ID;
1170
	ELSE
1171
		ReturnValue := NULL;
1172
	END IF;
1173
 
1174
	CLOSE curBaseEnv;
1175
 
1176
	RETURN ReturnValue;
1177
END	Get_Base_Env_Id;
1178
/*--------------------------------------------------------------------------------------------------*/
1179
PROCEDURE Destroy_Base_Env ( nBaseEnvId IN BASE_ENV.BASE_ENV_ID%TYPE, 
1180
		  				   	 nOsId IN OS_BASE_ENV.OS_ID%TYPE,
1181
						 	 nUserId IN NUMBER ) IS
1182
 
1183
BaseEnvName VARCHAR2(100);		
1184
NodeName VARCHAR2(4000);					 
1185
 
1186
BEGIN
1187
	/*--------------- Business Rules Here -------------------*/
1188
	IF (nBaseEnvId IS NULL) 
1189
	THEN
1190
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nBaseEnvId= '|| nBaseEnvId  );
1191
 
1192
	END IF;
1193
	/*-------------------------------------------------------*/
1194
 
1195
	SELECT NN.NODE_NAME INTO NodeName
1196
	FROM NETWORK_NODES NN, OPERATING_SYSTEMS OS
1197
	WHERE NN.NODE_ID = OS.NODE_ID
1198
	AND OS.OS_ID = nOsId;	
1199
 
1200
	SELECT BASE_ENV_NAME INTO BaseEnvName
1201
	FROM BASE_ENV
1202
	WHERE BASE_ENV_ID = nBaseEnvId;
1203
 
1204
	-- Destroy Base Env Contents
1205
	DELETE
1206
      FROM BASE_ENV_CONTENTS
1207
     WHERE BASE_ENV_ID = nBaseEnvId;
1208
 
1209
	-- Remove Base Env From BOM
1210
	DELETE 
1211
	  FROM OS_BASE_ENV obe
1212
	 WHERE obe.BASE_ENV_ID = nBaseEnvId;
1213
 
1214
	-- Destroy Base Env
1215
	DELETE 
1216
	  FROM BASE_ENV be
1217
	 WHERE be.BASE_ENV_ID = nBaseEnvId;		
1218
 
1219
	/* Log BOM_TRAIL */
1220
	pk_Bom.Log_Os_Trail ( nOsId, 'Destroyed Base Configuration: '||BaseEnvName||' on Node: '||NodeName, nUserId );		 		 
1221
 
1222
END	Destroy_Base_Env;
1223
/*--------------------------------------------------------------------------------------------------*/
1224
PROCEDURE Add_Product ( sProdIdList IN VARCHAR2,
1225
		  			  	nBaseEnvId IN BASE_ENV.BASE_ENV_ID%TYPE,
1226
						nOsId IN OS_BASE_ENV.OS_ID%TYPE,
1227
						nUserId IN NUMBER ) IS
1228
 
1229
NextSeqNum NUMBER;
1230
BaseEnvName VARCHAR2(100);
1231
PkgName VARCHAR2(100);
1232
PkgVersion VARCHAR2(100);
1233
NodeName VARCHAR2(4000); 
1234
 
1235
CURSOR prod_cur IS
1236
	SELECT pv.pv_id AS PROD_ID,
1237
		   pv.PV_DESCRIPTION
1238
	  FROM PACKAGE_VERSIONS pv
1239
	 WHERE pv.pv_id IN (
1240
	 	   			   	SELECT * 
1241
						  FROM THE ( SELECT CAST( IN_LIST_NUMBER( sProdIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual ) 
1242
						);
1243
prod_rec prod_cur%ROWTYPE;
1244
 
1245
 
1246
BEGIN
1247
	/*--------------- Business Rules Here -------------------*/
1248
	/*-------------------------------------------------------*/
1249
 
1250
	SELECT BASE_ENV_NAME INTO BaseEnvName 
1251
	FROM BASE_ENV
1252
	WHERE BASE_ENV_ID = nBaseEnvId;
1253
 
1254
	SELECT NN.NODE_NAME INTO NodeName
1255
	FROM NETWORK_NODES NN, OPERATING_SYSTEMS OS
1256
	WHERE NN.NODE_ID = OS.NODE_ID
1257
	AND OS.OS_ID = nOsId;
1258
 
1259
 
1260
	-- Get seq_num
1261
	SELECT MAX( bec.SEQ_NUM ) INTO NextSeqNum
1262
	  FROM BASE_ENV_CONTENTS bec
1263
	 WHERE bec.BASE_ENV_ID = nBaseEnvId;
1264
 
1265
	-- Set NextSeqNum to 0 if no existing products are found
1266
	IF NextSeqNum IS NULL THEN
1267
	   NextSeqNum := 1;
1268
	ELSE
1269
	   NextSeqNum := NextSeqNum + 1;
1270
	END IF;
1271
 
1272
 
1273
	-- Insert into OS Contents
1274
	OPEN prod_cur;
1275
	FETCH prod_cur INTO prod_rec;
1276
 
1277
	WHILE prod_cur%FOUND
1278
	LOOP
1279
 
1280
		INSERT INTO BASE_ENV_CONTENTS ( BASE_ENV_ID, SEQ_NUM, PROD_ID, BASE_ENV_COMMENTS )
1281
		VALUES (
1282
				nBaseEnvId, 
1283
				NextSeqNum, 
1284
				prod_rec.PROD_ID,
1285
				prod_rec.PV_DESCRIPTION
1286
				);
1287
 
1288
		SELECT PKG.PKG_NAME INTO PkgName
1289
		FROM PACKAGES PKG, PACKAGE_VERSIONS PV
1290
		WHERE PV.PV_ID = prod_rec.PROD_ID
1291
		AND PKG.PKG_ID = PV.PKG_ID;
1292
 
1293
		SELECT PKG_VERSION INTO PkgVersion
1294
		FROM PACKAGE_VERSIONS PV
1295
		WHERE PV.PV_ID = prod_rec.PROD_ID;				
1296
 
1297
		-- Log Action --
1298
		pk_Bom.Log_Os_Trail ( nOsId,  
1299
							  'Added Product: '||PkgName||' (Version '||PkgVersion||') to Base Configuration: '||BaseEnvName||' with Install Order: '||NextSeqNum||' on Node: '||NodeName,
1300
							  nUserId );
1301
 
1302
 
1303
		NextSeqNum := NextSeqNum + 1;
1304
		FETCH prod_cur INTO prod_rec;
1305
	END LOOP;
1306
 
1307
 
1308
	CLOSE prod_cur;
1309
 
1310
 
1311
END	Add_Product; 
1312
/*--------------------------------------------------------------------------------------------------*/
1313
PROCEDURE Remove_Products ( sProdIdList IN VARCHAR2,
1314
		  			  	  	nBaseEnvId IN BASE_ENV_CONTENTS.BASE_ENV_ID%TYPE,
1315
							nUserId IN NUMBER ) IS
1316
 
1317
PkgName VARCHAR2(100);
1318
PkgVersion VARCHAR2(100);		
1319
NextSeqNum NUMBER := 1;
1320
nIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();
1321
 
1322
CURSOR prod_cur IS
1323
	SELECT bec.PROD_ID, bec.SEQ_NUM
1324
	  FROM BASE_ENV_CONTENTS bec
1325
	 WHERE bec.BASE_ENV_ID = nBaseEnvId
1326
	 ORDER BY bec.SEQ_NUM;
1327
prod_rec prod_cur%ROWTYPE;	
1328
 
1329
 
1330
BEGIN
1331
	/*--------------- Business Rules Here -------------------*/
1332
	IF sProdIdList IS NULL
1333
	THEN
1334
		RAISE_APPLICATION_ERROR (-20000, 'Please select one or more Products.');
1335
 
1336
	END IF;
1337
	/*-------------------------------------------------------*/
1338
 
1339
 
1340
 
1341
	-- Remove Products
1342
	DELETE 
1343
	FROM BASE_ENV_CONTENTS
1344
	WHERE BASE_ENV_ID = nBaseEnvId
1345
	  AND PROD_ID IN ( 
1346
	  	  		  	    SELECT * 
1347
						  FROM THE ( SELECT CAST( IN_LIST_NUMBER( sProdIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual )  
1348
					 );
1349
 
1350
 
1351
	-- Update Seq Numbers
1352
	OPEN prod_cur;
1353
	FETCH prod_cur INTO prod_rec;
1354
 
1355
	WHILE prod_cur%FOUND
1356
	LOOP
1357
 
1358
		UPDATE BASE_ENV_CONTENTS SET
1359
		SEQ_NUM = NextSeqNum
1360
		WHERE BASE_ENV_ID = nBaseEnvId
1361
		  AND PROD_ID = prod_rec.PROD_ID;
1362
 
1363
		NextSeqNum := NextSeqNum + 1;
1364
		FETCH prod_cur INTO prod_rec;
1365
	END LOOP;
1366
 
1367
	CLOSE prod_cur;
1368
 
1369
	nIdCollector := IN_LIST_NUMBER ( sProdIdList );
1370
 
1371
	FOR i IN 1..nIdCollector.COUNT
1372
	LOOP
1373
		SELECT PKG.PKG_NAME INTO PkgName
1374
		FROM PACKAGES PKG, PACKAGE_VERSIONS PV
1375
		WHERE PV.PV_ID = nIdCollector(i)
1376
		AND PKG.PKG_ID = PV.PKG_ID;
1377
 
1378
		SELECT PKG_VERSION INTO PkgVersion
1379
		FROM PACKAGE_VERSIONS PV
1380
		WHERE PV.PV_ID = nIdCollector(i);	
1381
 
1382
		-- Log Action --
1383
		pk_Bom.Log_Os_Trail ( nBaseEnvId,  
1384
							  'Deleted Product: '||PkgName||' (Version: '||PkgVersion||') From Base Configuration from Node',
1385
							  nUserId );					  
1386
	END LOOP;	
1387
 
1388
 
1389
 
1390
END Remove_Products; 
1391
/*--------------------------------------------------------------------------------------------------*/
1392
PROCEDURE Add_Product_Wrap ( nPkgId IN NUMBER,
1393
		  				   	 sProdVersion IN VARCHAR2,
1394
							 nBaseEnvId IN BASE_ENV_CONTENTS.BASE_ENV_ID%TYPE,
1395
							 nOsId IN OS_BASE_ENV.OS_ID%TYPE,
1396
							 nUserId IN NUMBER,
1397
							 sComments IN VARCHAR2 ) IS
1398
 
1399
ProdId PACKAGE_VERSIONS.PV_ID%TYPE;
1400
ProdName PACKAGES.PKG_NAME%TYPE;
1401
 
1402
CURSOR prod_cur IS
1403
	SELECT bec.PROD_ID
1404
	  FROM BASE_ENV_CONTENTS bec
1405
	 WHERE bec.PROD_ID = ProdId
1406
	   AND bec.BASE_ENV_ID = nBaseEnvId;
1407
prod_rec prod_cur%ROWTYPE;
1408
 
1409
BEGIN
1410
	/*--------------- Business Rules Here -------------------*/                             
1411
	IF (NOT nPkgId IS NULL) AND (sProdVersion IS NULL) AND (NOT nBaseEnvId IS NULL) AND (NOT nUserId IS NULL) THEN
1412
	   RAISE_APPLICATION_ERROR (-20000, 'Please provide Product Version.('|| sProdVersion ||')' );
1413
 
1414
	ELSIF (nPkgId IS NULL) OR (sProdVersion IS NULL) OR (nBaseEnvId IS NULL) OR (nUserId IS NULL) THEN
1415
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nPkgId= '|| nPkgId ||', sProdVersion='|| sProdVersion ||', nBaseEnvId='|| nBaseEnvId ||', nUserId='|| nUserId );
1416
 
1417
	END IF;
1418
	/*-------------------------------------------------------*/
1419
 
1420
	-- Get Product Name --
1421
	SELECT PKG_NAME INTO ProdName FROM PACKAGES WHERE PKG_ID = nPkgId;
1422
 
1423
 
1424
	-- Create Product Version in Release Manager if Required, and Get Prod_id --
1425
	Seed_Package_Names_Versions ( ProdName, sProdVersion, nUserId, ProdId );
1426
 
1427
 
1428
	-- Add Product To Base Env --
1429
	OPEN prod_cur;
1430
	FETCH prod_cur INTO prod_rec;
1431
 
1432
	IF prod_cur%NOTFOUND THEN
1433
	   pk_Base_Env.Add_Product ( ProdId, nBaseEnvId, nOsId, nUserId );
1434
 
1435
	   -- Update Comments
1436
	   IF (NOT sComments IS NULL) THEN
1437
	   		UPDATE BASE_ENV_CONTENTS bec SET
1438
				bec.BASE_ENV_COMMENTS = sComments
1439
			 WHERE bec.BASE_ENV_ID = nBaseEnvId
1440
			   AND bec.PROD_ID = ProdId;
1441
 
1442
	   END IF;
1443
	END IF;
1444
 
1445
	CLOSE prod_cur;
1446
 
1447
 
1448
END	Add_Product_Wrap;    
1449
/*--------------------------------------------------------------------------------------------------*/
1450
PROCEDURE Update_Product ( nOldProdId IN BASE_ENV_CONTENTS.PROD_ID%TYPE,
1451
						   sNewProdIdVersion IN VARCHAR2,
1452
						   nBaseEnvId IN BASE_ENV_CONTENTS.BASE_ENV_ID%TYPE,
1453
						   nSeqNum IN BASE_ENV_CONTENTS.SEQ_NUM%TYPE,
1454
						   sComments IN BASE_ENV_CONTENTS.BASE_ENV_COMMENTS%TYPE,
1455
						   sSunOSElectronicName IN PACKAGES.SUNOS_ELECTRONIC_NAME%TYPE,
1456
						   sWinElectronicName IN PACKAGES.WIN_ELECTRONIC_NAME%TYPE,
1457
						   sNotXML IN BASE_ENV_CONTENTS.NOT_XML%TYPE,
1458
						   sPatchElectronicName IN PACKAGE_VERSIONS.PATCH_ELECTRONIC_NAME%TYPE,
1459
						   nUserId IN NUMBER,
1460
						   outProdId OUT PACKAGE_VERSIONS.PV_ID%TYPE ) IS
1461
 
1462
nNewProdId BASE_ENV_CONTENTS.PROD_ID%TYPE;		
1463
 
1464
sProdName PACKAGES.PKG_NAME%TYPE;					  
1465
 
1466
CURSOR curProd IS
1467
 	SELECT pv.PV_ID
1468
	  FROM PACKAGE_VERSIONS pv
1469
	 WHERE pv.pkg_id IN ( SELECT pv.pkg_id FROM PACKAGE_VERSIONS pv WHERE pv.PV_ID = nOldProdId )
1470
	   AND pv.PKG_VERSION = sNewProdIdVersion;
1471
recProd curProd%ROWTYPE;						   
1472
 
1473
BEGIN
1474
	/*--------------- Business Rules Here -------------------*/
1475
	IF (nOldProdId IS NULL) OR (sNewProdIdVersion IS NULL) OR (nBaseEnvId IS NULL) OR (nSeqNum IS NULL)
1476
	THEN
1477
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nOldProdId= '|| nOldProdId  ||', sNewProdIdVersion= '|| sNewProdIdVersion ||', nBaseEnvId= '|| nBaseEnvId ||', nSeqNum= '|| nSeqNum);
1478
	END IF;
1479
	/*-------------------------------------------------------*/
1480
 
1481
	-- Get new prod_id
1482
	OPEN curProd;
1483
	FETCH curProd INTO recProd;
1484
 
1485
	-- Get the Package Name
1486
	SELECT pkg.pkg_name into sProdName
1487
	FROM PACKAGES pkg, PACKAGE_VERSIONS pv
1488
	WHERE pkg.pkg_id = pv.pkg_id 
1489
	AND pv.pv_id = nOldProdId;		
1490
 
1491
	IF curProd%FOUND THEN
1492
		nNewProdId := recProd.PV_ID;
1493
	ELSE
1494
		-- Call Release Manager to add new product	
1495
		Seed_Package_Names_Versions ( sProdName, sNewProdIdVersion, nUserId, outProdId );
1496
 
1497
		nNewProdId := outProdId;
1498
		/*RAISE_APPLICATION_ERROR (-20000, 'Version '|| sNewProdIdVersion ||' does not exist.');*/
1499
	END IF;
1500
 
1501
	CLOSE curProd;
1502
 
1503
 
1504
	-- Update Product Details
1505
	UPDATE BASE_ENV_CONTENTS SET
1506
		PROD_ID = nNewProdId,
1507
		BASE_ENV_COMMENTS = sComments,
1508
		NOT_XML = sNotXML
1509
	 WHERE BASE_ENV_ID = nBaseEnvId
1510
	   AND PROD_ID = nOldProdId;
1511
 
1512
 
1513
	UPDATE PACKAGES SET
1514
		SUNOS_ELECTRONIC_NAME = sSunOSElectronicName,
1515
		WIN_ELECTRONIC_NAME = sWinElectronicName
1516
	WHERE  PKG_ID = 
1517
	(
1518
	 SELECT PKG_ID
1519
	 FROM PACKAGE_VERSIONS 
1520
	 WHERE PACKAGE_VERSIONS.PV_ID = nNewProdId
1521
	);   
1522
 
1523
 
1524
	UPDATE PACKAGE_VERSIONS SET 
1525
		 PATCH_ELECTRONIC_NAME = sPatchElectronicName
1526
	WHERE PV_ID = nNewProdId;   		   
1527
 
1528
 
1529
 
1530
	-- Update seq_num
1531
	Shift_Product_SeqNum ( nNewProdId, nBaseEnvId, nSeqNum );
1532
 
1533
END	Update_Product; 
1534
/*--------------------------------------------------------------------------------------------------*/
1535
PROCEDURE Shift_Product_SeqNum ( nProdId IN BASE_ENV_CONTENTS.PROD_ID%TYPE,
1536
		  				 	     nBaseEnvId IN BASE_ENV_CONTENTS.BASE_ENV_ID%TYPE,
1537
						 		 nToSeqNum IN BASE_ENV_CONTENTS.SEQ_NUM%TYPE ) IS
1538
 
1539
currSeqNum NUMBER;
1540
FromSeqNum NUMBER;
1541
 
1542
BEGIN
1543
	 -- Get Current seq_num
1544
	 SELECT bec.SEQ_NUM INTO currSeqNum
1545
	   FROM BASE_ENV_CONTENTS bec
1546
	  WHERE bec.BASE_ENV_ID = nBaseEnvId
1547
	    AND bec.PROD_ID = nProdId;
1548
 
1549
 
1550
	 IF currSeqNum > nToSeqNum
1551
	 THEN
1552
 
1553
		FromSeqNum := nToSeqNum;
1554
 
1555
			-- Shift others Up
1556
		UPDATE BASE_ENV_CONTENTS bec SET
1557
			   bec.SEQ_NUM = bec.SEQ_NUM + 1
1558
		 WHERE bec.BASE_ENV_ID = nBaseEnvId 
1559
		   AND bec.PROD_ID != nProdId
1560
		   AND bec.SEQ_NUM BETWEEN  FromSeqNum  AND  currSeqNum - 1;
1561
 
1562
 
1563
	 ELSIF currSeqNum < nToSeqNum
1564
	 THEN
1565
 
1566
		FromSeqNum := currSeqNum + 1;  
1567
 
1568
		 -- Shift others Down
1569
		UPDATE BASE_ENV_CONTENTS bec SET
1570
		   	   bec.SEQ_NUM = bec.SEQ_NUM - 1
1571
		 WHERE bec.BASE_ENV_ID = nBaseEnvId 
1572
		   AND bec.PROD_ID != nProdId
1573
		   AND bec.SEQ_NUM BETWEEN  FromSeqNum  AND  nToSeqNum;
1574
 
1575
	 END IF;
1576
 
1577
 
1578
	 -- Move Product to new seq_num
1579
	 UPDATE BASE_ENV_CONTENTS bec SET
1580
		    bec.SEQ_NUM = nToSeqNum
1581
	  WHERE bec.BASE_ENV_ID = nBaseEnvId 
1582
	    AND bec.PROD_ID = nProdId;
1583
 
1584
 
1585
 
1586
END Shift_Product_SeqNum;
1587
/*--------------------------------------------------------------------------------------------------*/
1588
PROCEDURE Sort_Products ( sProdIdOrder IN VARCHAR2,
1589
		  			  	  nBaseEnvId IN BASE_ENV_CONTENTS.BASE_ENV_ID%TYPE,
1590
						  nUserId IN NUMBER ) IS
1591
 
1592
	nIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();						 
1593
	SeqNum NUMBER;
1594
 
1595
 
1596
BEGIN
1597
	/*--------------- Business Rules Here -------------------*/
1598
	-- Check for parameters
1599
	IF (sProdIdOrder IS NULL)  OR (nBaseEnvId IS NULL) 
1600
	THEN
1601
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nBaseEnvId='|| nBaseEnvId  ||' sProdIdOrder='|| sProdIdOrder  );
1602
	END IF;
1603
	/*-------------------------------------------------------*/
1604
 
1605
	nIdCollector := IN_LIST_NUMBER ( sProdIdOrder );
1606
 
1607
	-- Set start sequence number
1608
	SeqNum := 1;
1609
 
1610
	FOR i IN 1..nIdCollector.COUNT
1611
	LOOP
1612
 
1613
		-- Update new sequence number
1614
		UPDATE BASE_ENV_CONTENTS osc SET
1615
			osc.SEQ_NUM = SeqNum
1616
		 WHERE osc.BASE_ENV_ID = nBaseEnvId
1617
		   AND osc.PROD_ID = nIdCollector(i);
1618
 
1619
		SeqNum := SeqNum + 1;
1620
 
1621
	END LOOP;
1622
 
1623
 
1624
END	Sort_Products;
1625
/*--------------------------------------------------------------------------------------------------*/
1626
 
1627
 
1628
END pk_Base_Env;
1629
 
1630
/
1631
 
1632
/
1633
--------------------------------------------------------
1634
--  DDL for Package Body PK_BASE_ENV_TEST
1635
--------------------------------------------------------
1636
 
1637
  CREATE OR REPLACE PACKAGE BODY "PK_BASE_ENV_TEST" 
1638
IS
1639
/* ---------------------------------------------------------------------------
1640
    Version: 1.0.0
1641
   --------------------------------------------------------------------------- */
1642
 
1643
 
1644
/*--------------------------------------------------------------------------------------------------*/
1645
PROCEDURE Add_Base_Env ( sBaseEnvName IN BASE_ENV.BASE_ENV_NAME%TYPE,
1646
						 nBosId IN BASE_ENV.BOS_ID%TYPE,
1647
						 nBomId IN BASE_ENV.BOM_ID%TYPE,
1648
						 nOsId IN OS_BASE_ENV.OS_ID%TYPE ) IS
1649
 
1650
nBaseEnvId BASE_ENV.BASE_ENV_ID%TYPE;						 
1651
 
1652
BEGIN
1653
	/*--------------- Business Rules Here -------------------*/
1654
	/*-------------------------------------------------------*/
1655
 
1656
	-- Get base_env_id
1657
	SELECT SEQ_BASE_ENV_ID.NEXTVAL INTO nBaseEnvId FROM DUAL;
1658
 
1659
	-- Insert new base env name
1660
	INSERT INTO BASE_ENV ( BASE_ENV_ID, BOS_ID, BASE_ENV_NAME, BOM_ID )
1661
	VALUES ( nBaseEnvId, nBosId, sBaseEnvName, nBomId );
1662
 
1663
 
1664
	EXCEPTION
1665
    WHEN DUP_VAL_ON_INDEX
1666
	THEN		
1667
		RAISE_APPLICATION_ERROR (-20000, 'Base Configuration Name "'|| sBaseEnvName ||'" is Already Used in this BOM.');
1668
 
1669
END	Add_Base_Env;
1670
/*--------------------------------------------------------------------------------------------------*/
1671
PROCEDURE Update_Base_Env ( nBaseEnvId IN BASE_ENV.BASE_ENV_ID%TYPE,
1672
							sBaseEnvName IN BASE_ENV.BASE_ENV_NAME%TYPE,
1673
						 	nBosId IN BASE_ENV.BOS_ID%TYPE ) IS
1674
 
1675
BEGIN
1676
	/*--------------- Business Rules Here -------------------*/
1677
	IF (nBaseEnvId IS NULL) 
1678
	THEN
1679
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nBaseEnvId= '|| nBaseEnvId  );
1680
 
1681
	END IF;
1682
	/*-------------------------------------------------------*/
1683
 
1684
	-- Update Base Env
1685
	UPDATE BASE_ENV SET
1686
		BASE_ENV_NAME = sBaseEnvName,
1687
		BOS_ID = nBosId
1688
	WHERE BASE_ENV_ID = nBaseEnvId;
1689
 
1690
 
1691
	EXCEPTION
1692
    WHEN DUP_VAL_ON_INDEX
1693
	THEN		
1694
		RAISE_APPLICATION_ERROR (-20000, 'Base Configuration Name "'|| sBaseEnvName ||'" is Already Used in this BOM.');
1695
 
1696
END	Update_Base_Env;
1697
/*--------------------------------------------------------------------------------------------------*/
1698
FUNCTION Get_Base_Env_Id ( sBaseEnvName IN BASE_ENV.BASE_ENV_NAME%TYPE,
1699
						   nBomId IN BASE_ENV.BOM_ID%TYPE ) RETURN BASE_ENV.BASE_ENV_ID%TYPE IS
1700
 
1701
ReturnValue BASE_ENV.BASE_ENV_ID%TYPE;	
1702
 
1703
CURSOR curBaseEnv IS
1704
	SELECT be.BASE_ENV_ID
1705
	  FROM BASE_ENV be
1706
	 WHERE be.BASE_ENV_NAME = sBaseEnvName
1707
	   AND be.BOM_ID = nBomId;
1708
recBaseEnv curBaseEnv%ROWTYPE;
1709
 
1710
BEGIN
1711
	/*--------------- Business Rules Here -------------------*/
1712
	/*-------------------------------------------------------*/
1713
 
1714
	-- Get bom_name_id
1715
	OPEN curBaseEnv;
1716
	FETCH curBaseEnv INTO recBaseEnv;
1717
 
1718
	IF curBaseEnv%FOUND THEN
1719
		ReturnValue := recBaseEnv.BASE_ENV_ID;
1720
	ELSE
1721
		ReturnValue := NULL;
1722
	END IF;
1723
 
1724
	CLOSE curBaseEnv;
1725
 
1726
	RETURN ReturnValue;
1727
END	Get_Base_Env_Id;
1728
/*--------------------------------------------------------------------------------------------------*/
1729
PROCEDURE Destroy_Base_Env ( nBaseEnvId IN BASE_ENV.BASE_ENV_ID%TYPE ) IS
1730
 
1731
 
1732
BEGIN
1733
	/*--------------- Business Rules Here -------------------*/
1734
	IF (nBaseEnvId IS NULL) 
1735
	THEN
1736
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nBaseEnvId= '|| nBaseEnvId  );
1737
 
1738
	END IF;
1739
	/*-------------------------------------------------------*/
1740
 
1741
	-- Destroy Base Env Contents
1742
	DELETE
1743
      FROM BASE_ENV_CONTENTS
1744
     WHERE BASE_ENV_ID = nBaseEnvId;
1745
 
1746
	-- Remove Base Env From BOM
1747
	DELETE 
1748
	  FROM OS_BASE_ENV obe
1749
	 WHERE obe.BASE_ENV_ID = nBaseEnvId;
1750
 
1751
	-- Destroy Base Env
1752
	DELETE 
1753
	  FROM BASE_ENV be
1754
	 WHERE be.BASE_ENV_ID = nBaseEnvId;				 
1755
 
1756
END	Destroy_Base_Env;
1757
/*--------------------------------------------------------------------------------------------------*/
1758
PROCEDURE Add_Product ( sProdIdList IN VARCHAR2,
1759
		  			  	nBaseEnvId IN BASE_ENV.BASE_ENV_ID%TYPE,
1760
						nUserId IN NUMBER ) IS
1761
 
1762
NextSeqNum NUMBER;
1763
 
1764
CURSOR prod_cur IS
1765
	SELECT pv.pv_id AS PROD_ID,
1766
		   pv.PV_DESCRIPTION
1767
	  FROM PACKAGE_VERSIONS pv
1768
	 WHERE pv.pv_id IN (
1769
	 	   			   	SELECT * 
1770
						  FROM THE ( SELECT CAST( IN_LIST_NUMBER( sProdIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual ) 
1771
						);
1772
prod_rec prod_cur%ROWTYPE;
1773
 
1774
 
1775
BEGIN
1776
	/*--------------- Business Rules Here -------------------*/
1777
	/*-------------------------------------------------------*/
1778
 
1779
	-- Get seq_num
1780
	SELECT MAX( bec.SEQ_NUM ) INTO NextSeqNum
1781
	  FROM BASE_ENV_CONTENTS bec
1782
	 WHERE bec.BASE_ENV_ID = nBaseEnvId;
1783
 
1784
	-- Set NextSeqNum to 0 if no existing products are found
1785
	IF NextSeqNum IS NULL THEN
1786
	   NextSeqNum := 1;
1787
	ELSE
1788
	   NextSeqNum := NextSeqNum + 1;
1789
	END IF;
1790
 
1791
 
1792
	-- Insert into OS Contents
1793
	OPEN prod_cur;
1794
	FETCH prod_cur INTO prod_rec;
1795
 
1796
	WHILE prod_cur%FOUND
1797
	LOOP
1798
 
1799
		INSERT INTO BASE_ENV_CONTENTS ( BASE_ENV_ID, SEQ_NUM, PROD_ID, BASE_ENV_COMMENTS )
1800
		VALUES (
1801
				nBaseEnvId, 
1802
				NextSeqNum, 
1803
				prod_rec.PROD_ID,
1804
				prod_rec.PV_DESCRIPTION
1805
				);
1806
 
1807
		-- Log Action --
1808
		pk_Utils.Log_Action ( nUserId, 
1809
							  1, 
1810
							  'pk_Base_Env.Add_Product with BASE_ENV_ID='|| nBaseEnvId ||', SEQ_NUM='|| NextSeqNum ||', PROD_ID='|| prod_rec.PROD_ID,
1811
							  NULL, NULL );
1812
 
1813
 
1814
		NextSeqNum := NextSeqNum + 1;
1815
		FETCH prod_cur INTO prod_rec;
1816
	END LOOP;
1817
 
1818
 
1819
	CLOSE prod_cur;
1820
 
1821
 
1822
END	Add_Product; 
1823
/*--------------------------------------------------------------------------------------------------*/
1824
PROCEDURE Remove_Products ( sProdIdList IN VARCHAR2,
1825
		  			  	  	nBaseEnvId IN BASE_ENV_CONTENTS.BASE_ENV_ID%TYPE,
1826
							nUserId IN NUMBER ) IS
1827
 
1828
NextSeqNum NUMBER := 1;
1829
 
1830
CURSOR prod_cur IS
1831
	SELECT bec.PROD_ID, bec.SEQ_NUM
1832
	  FROM BASE_ENV_CONTENTS bec
1833
	 WHERE bec.BASE_ENV_ID = nBaseEnvId
1834
	 ORDER BY bec.SEQ_NUM;
1835
prod_rec prod_cur%ROWTYPE;	  
1836
 
1837
BEGIN
1838
	/*--------------- Business Rules Here -------------------*/
1839
	IF sProdIdList IS NULL
1840
	THEN
1841
		RAISE_APPLICATION_ERROR (-20000, 'Please select one or more Products.');
1842
 
1843
	END IF;
1844
	/*-------------------------------------------------------*/
1845
 
1846
	-- Remove Products
1847
	DELETE 
1848
	FROM BASE_ENV_CONTENTS
1849
	WHERE BASE_ENV_ID = nBaseEnvId
1850
	  AND PROD_ID IN ( 
1851
	  	  		  	    SELECT * 
1852
						  FROM THE ( SELECT CAST( IN_LIST_NUMBER( sProdIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual )  
1853
					 );
1854
 
1855
 
1856
	-- Update Seq Numbers
1857
	OPEN prod_cur;
1858
	FETCH prod_cur INTO prod_rec;
1859
 
1860
	WHILE prod_cur%FOUND
1861
	LOOP
1862
 
1863
		UPDATE BASE_ENV_CONTENTS SET
1864
		SEQ_NUM = NextSeqNum
1865
		WHERE BASE_ENV_ID = nBaseEnvId
1866
		  AND PROD_ID = prod_rec.PROD_ID;
1867
 
1868
		NextSeqNum := NextSeqNum + 1;
1869
		FETCH prod_cur INTO prod_rec;
1870
	END LOOP;
1871
 
1872
	CLOSE prod_cur;
1873
 
1874
 
1875
 
1876
END Remove_Products; 
1877
/*--------------------------------------------------------------------------------------------------*/
1878
PROCEDURE Add_Product_Wrap ( nPkgId IN NUMBER,
1879
		  				   	 sProdVersion IN VARCHAR2,
1880
							 nBaseEnvId IN BASE_ENV_CONTENTS.BASE_ENV_ID%TYPE,
1881
							 nUserId IN NUMBER,
1882
							 sComments IN VARCHAR2 ) IS
1883
 
1884
ProdId PACKAGE_VERSIONS.PV_ID%TYPE;
1885
ProdName PACKAGES.PKG_NAME%TYPE;
1886
 
1887
CURSOR prod_cur IS
1888
	SELECT bec.PROD_ID
1889
	  FROM BASE_ENV_CONTENTS bec
1890
	 WHERE bec.PROD_ID = ProdId
1891
	   AND bec.BASE_ENV_ID = nBaseEnvId;
1892
prod_rec prod_cur%ROWTYPE;
1893
 
1894
BEGIN
1895
	/*--------------- Business Rules Here -------------------*/                             
1896
	IF (NOT nPkgId IS NULL) AND (sProdVersion IS NULL) AND (NOT nBaseEnvId IS NULL) AND (NOT nUserId IS NULL) THEN
1897
	   RAISE_APPLICATION_ERROR (-20000, 'Please provide Product Version.('|| sProdVersion ||')' );
1898
 
1899
	ELSIF (nPkgId IS NULL) OR (sProdVersion IS NULL) OR (nBaseEnvId IS NULL) OR (nUserId IS NULL) THEN
1900
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nPkgId= '|| nPkgId ||', sProdVersion='|| sProdVersion ||', nBaseEnvId='|| nBaseEnvId ||', nUserId='|| nUserId );
1901
 
1902
	END IF;
1903
	/*-------------------------------------------------------*/
1904
 
1905
	-- Get Product Name --
1906
	SELECT PKG_NAME INTO ProdName FROM PACKAGES WHERE PKG_ID = nPkgId;
1907
 
1908
 
1909
	-- Create Product Version in Release Manager if Required, and Get Prod_id --
1910
	Seed_Package_Names_Versions ( ProdName, sProdVersion, nUserId, ProdId );
1911
 
1912
 
1913
	-- Add Product To Base Env --
1914
	OPEN prod_cur;
1915
	FETCH prod_cur INTO prod_rec;
1916
 
1917
	IF prod_cur%NOTFOUND THEN
1918
	   pk_Base_Env.Add_Product ( ProdId, nBaseEnvId, nUserId );
1919
 
1920
	   -- Update Comments
1921
	   IF (NOT sComments IS NULL) THEN
1922
	   		UPDATE BASE_ENV_CONTENTS bec SET
1923
				bec.BASE_ENV_COMMENTS = sComments
1924
			 WHERE bec.BASE_ENV_ID = nBaseEnvId
1925
			   AND bec.PROD_ID = ProdId;
1926
 
1927
	   END IF;
1928
	END IF;
1929
 
1930
	CLOSE prod_cur;
1931
 
1932
 
1933
END	Add_Product_Wrap;    
1934
/*--------------------------------------------------------------------------------------------------*/
1935
PROCEDURE Update_Product ( nOldProdId IN BASE_ENV_CONTENTS.PROD_ID%TYPE,
1936
						   sNewProdIdVersion IN VARCHAR2,
1937
						   nBaseEnvId IN BASE_ENV_CONTENTS.BASE_ENV_ID%TYPE,
1938
						   nSeqNum IN BASE_ENV_CONTENTS.SEQ_NUM%TYPE,
1939
						   sComments IN BASE_ENV_CONTENTS.BASE_ENV_COMMENTS%TYPE,
1940
						   sElectronicName IN PACKAGES.ELECTRONIC_NAME%TYPE ) IS
1941
 
1942
nNewProdId BASE_ENV_CONTENTS.PROD_ID%TYPE;						  
1943
 
1944
CURSOR curProd IS
1945
 	SELECT pv.PV_ID
1946
	  FROM PACKAGE_VERSIONS pv
1947
	 WHERE pv.pkg_id IN ( SELECT pv.pkg_id FROM PACKAGE_VERSIONS pv WHERE pv.PV_ID = nOldProdId )
1948
	   AND pv.PKG_VERSION = sNewProdIdVersion;
1949
recProd curProd%ROWTYPE;						   
1950
 
1951
BEGIN
1952
	/*--------------- Business Rules Here -------------------*/
1953
	IF (nOldProdId IS NULL) OR (sNewProdIdVersion IS NULL) OR (nBaseEnvId IS NULL) OR (nSeqNum IS NULL)
1954
	THEN
1955
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nOldProdId= '|| nOldProdId  ||', sNewProdIdVersion= '|| sNewProdIdVersion ||', nBaseEnvId= '|| nBaseEnvId ||', nSeqNum= '|| nSeqNum);
1956
	END IF;
1957
	/*-------------------------------------------------------*/
1958
 
1959
	-- Get new prod_id
1960
	OPEN curProd;
1961
	FETCH curProd INTO recProd;
1962
 
1963
	IF curProd%FOUND THEN
1964
		nNewProdId := recProd.PV_ID;
1965
	ELSE
1966
		RAISE_APPLICATION_ERROR (-20000, 'Version '|| sNewProdIdVersion ||' does not exist.');
1967
	END IF;
1968
 
1969
	CLOSE curProd;
1970
 
1971
 
1972
	-- Update Product Details
1973
	UPDATE BASE_ENV_CONTENTS SET
1974
		PROD_ID = nNewProdId,
1975
		BASE_ENV_COMMENTS = sComments
1976
	 WHERE BASE_ENV_ID = nBaseEnvId
1977
	   AND PROD_ID = nOldProdId;
1978
 
1979
 
1980
	UPDATE PACKAGES SET
1981
		ELECTRONIC_NAME = sElectronicName
1982
	WHERE  PKG_ID = 
1983
	(
1984
	 SELECT PKG_ID
1985
	 FROM PACKAGE_VERSIONS 
1986
	 WHERE PACKAGE_VERSIONS.PV_ID = nNewProdId
1987
	);   
1988
 
1989
 
1990
 
1991
	-- Update seq_num
1992
	Shift_Product_SeqNum ( nNewProdId, nBaseEnvId, nSeqNum );
1993
 
1994
END	Update_Product; 
1995
/*--------------------------------------------------------------------------------------------------*/
1996
PROCEDURE Shift_Product_SeqNum ( nProdId IN BASE_ENV_CONTENTS.PROD_ID%TYPE,
1997
		  				 	     nBaseEnvId IN BASE_ENV_CONTENTS.BASE_ENV_ID%TYPE,
1998
						 		 nToSeqNum IN BASE_ENV_CONTENTS.SEQ_NUM%TYPE ) IS
1999
 
2000
currSeqNum NUMBER;
2001
FromSeqNum NUMBER;
2002
 
2003
BEGIN
2004
	 -- Get Current seq_num
2005
	 SELECT bec.SEQ_NUM INTO currSeqNum
2006
	   FROM BASE_ENV_CONTENTS bec
2007
	  WHERE bec.BASE_ENV_ID = nBaseEnvId
2008
	    AND bec.PROD_ID = nProdId;
2009
 
2010
 
2011
	 IF currSeqNum > nToSeqNum
2012
	 THEN
2013
 
2014
		FromSeqNum := nToSeqNum;
2015
 
2016
			-- Shift others Up
2017
		UPDATE BASE_ENV_CONTENTS bec SET
2018
			   bec.SEQ_NUM = bec.SEQ_NUM + 1
2019
		 WHERE bec.BASE_ENV_ID = nBaseEnvId 
2020
		   AND bec.PROD_ID != nProdId
2021
		   AND bec.SEQ_NUM BETWEEN  FromSeqNum  AND  currSeqNum - 1;
2022
 
2023
 
2024
	 ELSIF currSeqNum < nToSeqNum
2025
	 THEN
2026
 
2027
		FromSeqNum := currSeqNum + 1;  
2028
 
2029
		 -- Shift others Down
2030
		UPDATE BASE_ENV_CONTENTS bec SET
2031
		   	   bec.SEQ_NUM = bec.SEQ_NUM - 1
2032
		 WHERE bec.BASE_ENV_ID = nBaseEnvId 
2033
		   AND bec.PROD_ID != nProdId
2034
		   AND bec.SEQ_NUM BETWEEN  FromSeqNum  AND  nToSeqNum;
2035
 
2036
	 END IF;
2037
 
2038
 
2039
	 -- Move Product to new seq_num
2040
	 UPDATE BASE_ENV_CONTENTS bec SET
2041
		    bec.SEQ_NUM = nToSeqNum
2042
	  WHERE bec.BASE_ENV_ID = nBaseEnvId 
2043
	    AND bec.PROD_ID = nProdId;
2044
 
2045
 
2046
 
2047
END Shift_Product_SeqNum;
2048
/*--------------------------------------------------------------------------------------------------*/
2049
PROCEDURE Sort_Products ( sProdIdOrder IN VARCHAR2,
2050
		  			  	  nBaseEnvId IN BASE_ENV_CONTENTS.BASE_ENV_ID%TYPE,
2051
						  nUserId IN NUMBER ) IS
2052
 
2053
	nIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();						 
2054
	SeqNum NUMBER;
2055
 
2056
 
2057
BEGIN
2058
	/*--------------- Business Rules Here -------------------*/
2059
	-- Check for parameters
2060
	IF (sProdIdOrder IS NULL)  OR (nBaseEnvId IS NULL) 
2061
	THEN
2062
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nBaseEnvId='|| nBaseEnvId  ||' sProdIdOrder='|| sProdIdOrder  );
2063
	END IF;
2064
	/*-------------------------------------------------------*/
2065
 
2066
	nIdCollector := IN_LIST_NUMBER ( sProdIdOrder );
2067
 
2068
	-- Set start sequence number
2069
	SeqNum := 1;
2070
 
2071
	FOR i IN 1..nIdCollector.COUNT
2072
	LOOP
2073
 
2074
		-- Update new sequence number
2075
		UPDATE BASE_ENV_CONTENTS osc SET
2076
			osc.SEQ_NUM = SeqNum
2077
		 WHERE osc.BASE_ENV_ID = nBaseEnvId
2078
		   AND osc.PROD_ID = nIdCollector(i);
2079
 
2080
		SeqNum := SeqNum + 1;
2081
 
2082
	END LOOP;
2083
 
2084
 
2085
END	Sort_Products;
2086
/*--------------------------------------------------------------------------------------------------*/
2087
 
2088
 
2089
END pk_Base_Env_test;
2090
 
2091
/
2092
 
2093
/
2094
--------------------------------------------------------
2095
--  DDL for Package Body PK_BOM
2096
--------------------------------------------------------
2097
 
2098
  CREATE OR REPLACE PACKAGE BODY "PK_BOM" 
2099
IS
2100
/* ---------------------------------------------------------------------------
2101
    Version: 2.0
2102
   --------------------------------------------------------------------------- */
2103
 
2104
/*--------------------------------------------------------------------------------------------------*/
2105
PROCEDURE Add_Bom ( sBomName IN BOM_NAMES.BOM_NAME%TYPE DEFAULT NULL,
2106
		  		  	sBomVersion IN BOMS.BOM_VERSION%TYPE,
2107
		  		  	sBomLifeCycle IN BOMS.BOM_LIFECYCLE%TYPE,		
2108
					sBomComments IN BOMS.BOM_COMMENTS%TYPE DEFAULT NULL,
2109
					nToBranchId IN BOMS.BRANCH_ID%TYPE,
2110
					nFromBomId IN BOMS.BOM_ID%TYPE DEFAULT NULL,
2111
					nRtagId IN BOMS.RTAG_ID_FK%TYPE,
2112
					nUserId IN BOM_STATE.USER_ID%TYPE ) IS
2113
 
2114
BomId BOMS.BOM_ID%TYPE;
2115
ParentBomId BOMS.PARENT_BOM_ID%TYPE;
2116
BomNameId BOM_NAMES.BOM_NAME_ID%TYPE;
2117
BomVersion BOMS.BOM_VERSION%TYPE;
2118
BomLifeCycle BOMS.BOM_LIFECYCLE%TYPE;
2119
ProjId BRANCHES.PROJ_ID%TYPE;
2120
 
2121
CURSOR curBom IS 
2122
		SELECT bo.BOM_ID
2123
		  FROM BOMS bo,
2124
		  	   BRANCHES br
2125
		 WHERE bo.BRANCH_ID = br.BRANCH_ID
2126
		   AND br.PROJ_ID = ProjId
2127
		   AND bo.BOM_NAME_ID = BomNameId
2128
		   AND bo.BOM_VERSION = BomVersion
2129
		   AND bo.BOM_LIFECYCLE = BomLifeCycle;
2130
recBom curBom%ROWTYPE;
2131
 
2132
DUPLICATE_BOM EXCEPTION;
2133
 
2134
BEGIN
2135
	/*--------------- Business Rules Here -------------------*/
2136
	IF (nToBranchId IS NULL) OR (nUserId IS NULL)
2137
	THEN
2138
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nToBranchId= '|| nToBranchId ||', nUserId='|| nUserId );
2139
 
2140
	END IF;
2141
	/*-------------------------------------------------------*/
2142
 
2143
	-- Get bom_id
2144
	SELECT SEQ_BOM_ID.NEXTVAL INTO BomId FROM DUAL;
2145
 
2146
 
2147
	-- Get bom_name_id
2148
	IF nFromBomId IS NULL THEN
2149
		BomNameId := New_Bom_Name ( sBomName );
2150
        ParentBomId := BomId;
2151
	ELSE
2152
		BomNameId := New_Bom_Name ( nFromBomId );
2153
        ParentBomId := nFromBomId;
2154
	END IF;		
2155
 
2156
 
2157
 
2158
 
2159
	-- Get Bom Version and Lifecycle
2160
	--Get_Next_Version ( nFromBomId, nToBranchId, BomVersion, BomLifeCycle, ParentBomId, BomNameId );
2161
 
2162
 
2163
 
2164
	-- Get proj_id
2165
	SELECT br.PROJ_ID INTO ProjId
2166
	  FROM BRANCHES br
2167
	 WHERE br.BRANCH_ID = nToBranchId;
2168
 
2169
 
2170
 
2171
	-- Check for duplicate BOMs
2172
	OPEN curBom;
2173
    FETCH curBom INTO recBom;
2174
 
2175
    IF curBom%FOUND
2176
    THEN
2177
		RAISE DUPLICATE_BOM;
2178
	END IF;
2179
 
2180
	CLOSE curBom;
2181
 
2182
 
2183
 
2184
	-- Add Blank Bom --
2185
	INSERT INTO BOMS ( BOM_ID, BRANCH_ID, BOM_NAME_ID, BOM_COMMENTS, BOM_VERSION, BOM_LIFECYCLE, IS_READONLY, IS_HIDDEN, PARENT_BOM_ID, RTAG_ID_FK )
2186
	VALUES ( BomId, nToBranchId, BomNameId, sBomComments, sBomVersion, sBomLifeCycle, 'N', 'N', ParentBomId, nRtagId  );
2187
 
2188
 
2189
 
2190
 
2191
	/* Log BOM_TRAIL */
2192
	pk_Bom.Log_Bom_Trail ( BomId, 'CREATED: Version '|| sBomVersion ||'.'|| sBomLifeCycle , nUserId );
2193
 
2194
 
2195
 
2196
	IF nFromBomId IS NOT NULL THEN
2197
		/* Add Bom Clonned from ... */
2198
		pk_Utils.Clone_BOM ( nFromBomId, BomId, nUserId );
2199
 
2200
	END IF;
2201
 
2202
 
2203
 
2204
	--- Set Bom State ---
2205
	Release_To ( BomId, nUserId );
2206
 
2207
 
2208
	EXCEPTION
2209
    WHEN DUPLICATE_BOM
2210
	THEN		
2211
		RAISE_APPLICATION_ERROR (-20000, 'BOM "'|| sBomName ||' '|| BomVersion ||'.'|| BomLifeCycle ||'" is Already Used in this Project.');
2212
 
2213
END	Add_Bom;
2214
/*--------------------------------------------------------------------------------------------------*/
2215
PROCEDURE Update_Bom ( nBomId IN BOMS.BOM_ID%TYPE,
2216
					   nRtagId IN BOMS.RTAG_ID_FK%TYPE,
2217
					   sBomComment IN BOMS.BOM_COMMENTS%TYPE,
2218
					   nUserId IN NUMBER )  IS
2219
 
2220
ReleaseName VARCHAR2(100);					   
2221
 
2222
BEGIN
2223
	/*--------------- Business Rules Here -------------------*/
2224
	/*-------------------------------------------------------*/
2225
 
2226
	--- Update Bom Properties ---
2227
	UPDATE BOMS bo SET
2228
		bo.RTAG_ID_FK = nRtagId,
2229
		bo.BOM_COMMENTS = sBomComment
2230
	WHERE bo.BOM_ID = nBomId;
2231
 
2232
	SELECT RTAG_NAME INTO ReleaseName
2233
	FROM RELEASE_TAGS 
2234
	WHERE RTAG_ID = nRtagId;
2235
 
2236
 
2237
	/* Log BOM_TRAIL */
2238
	pk_Bom.Log_Bom_Trail ( nBomId, 'Updated BOM properties: Set Release Manager Reference ='||ReleaseName||' and comments ='||sBomComment, nUserId );
2239
 
2240
 
2241
END	Update_Bom;
2242
/*--------------------------------------------------------------------------------------------------*/
2243
PROCEDURE Update_ProdBom ( nBomId IN BOMS.BOM_ID%TYPE,
2244
					   nRtagId IN BOMS.RTAG_ID_FK%TYPE,
2245
					   sBomComment IN BOMS.BOM_COMMENTS%TYPE,
2246
					   nUserId IN NUMBER )  IS
2247
 
2248
ReleaseName VARCHAR2(100);					   
2249
 
2250
BEGIN
2251
	/*--------------- Business Rules Here -------------------*/
2252
	/*-------------------------------------------------------*/
2253
 
2254
	--- Update Bom Properties ---
2255
	UPDATE BOMS bo SET
2256
		bo.RTAG_ID_FK = nRtagId,
2257
		bo.BOM_COMMENTS = sBomComment
2258
	WHERE bo.BOM_ID = nBomId;
2259
 
2260
	SELECT BRANCH_NAME INTO ReleaseName
2261
	FROM BRANCHES 
2262
	WHERE BRANCH_ID = nRtagId;
2263
 
2264
 
2265
	/* Log BOM_TRAIL */
2266
	pk_Bom.Log_Bom_Trail ( nBomId, 'Updated BOM properties: Set Deployment Manager Reference ='||ReleaseName||' and comments ='||sBomComment, nUserId );
2267
 
2268
 
2269
END	Update_ProdBom;
2270
/*--------------------------------------------------------------------------------------------------*/
2271
FUNCTION New_Bom_Name ( sBomName IN BOM_NAMES.BOM_NAME%TYPE ) RETURN BOM_NAMES.BOM_NAME_ID%TYPE IS
2272
 
2273
ReturnValue 	 BOM_NAMES.BOM_NAME_ID%TYPE;	
2274
 
2275
CURSOR curBomNames IS
2276
	SELECT bn.BOM_NAME_ID
2277
	  FROM BOM_NAMES bn
2278
	 WHERE bn.BOM_NAME = sBomName;
2279
recBomNames curBomNames%ROWTYPE;
2280
 
2281
BEGIN
2282
	/*--------------- Business Rules Here -------------------*/
2283
	/*-------------------------------------------------------*/
2284
 
2285
	-- Check for existance of this name
2286
	OPEN curBomNames;
2287
	FETCH curBomNames INTO recBomNames;
2288
 
2289
	ReturnValue := NULL;
2290
	IF curBomNames%FOUND THEN
2291
		ReturnValue := recBomNames.BOM_NAME_ID;
2292
	END IF;
2293
 
2294
	CLOSE curBomNames;
2295
 
2296
 
2297
	-- Finnaly Create Name if required --    
2298
	IF ReturnValue IS NULL THEN
2299
		-- Get bom_name_id
2300
		SELECT SEQ_BOM_NAME_ID.NEXTVAL INTO ReturnValue FROM DUAL;
2301
 
2302
		INSERT INTO BOM_NAMES ( BOM_NAME_ID, BOM_NAME )
2303
		VALUES ( ReturnValue, sBomName );
2304
 
2305
	END IF;	
2306
 
2307
 
2308
	RETURN ReturnValue;
2309
END	New_Bom_Name;
2310
/*--------------------------------------------------------------------------------------------------*/
2311
FUNCTION New_Bom_Name ( nFromBomId IN BOMS.BOM_NAME_ID%TYPE ) RETURN BOMS.BOM_NAME_ID%TYPE IS
2312
 
2313
ReturnValue 	 BOMS.BOM_NAME_ID%TYPE;	
2314
 
2315
BEGIN
2316
	/*--------------- Business Rules Here -------------------*/
2317
	/*-------------------------------------------------------*/
2318
 
2319
	-- Get bom_name_id
2320
	SELECT bo.BOM_NAME_ID INTO ReturnValue
2321
	  FROM BOMS bo
2322
	 WHERE bo.BOM_ID = nFromBomId;
2323
 
2324
 
2325
	RETURN ReturnValue;
2326
END	New_Bom_Name;
2327
/*--------------------------------------------------------------------------------------------------*/
2328
PROCEDURE Accept_Reject ( nBomId IN BOMS.BOM_ID%TYPE,
2329
						  cIsRejected IN BOMS.IS_REJECTED%TYPE,
2330
						  sComments IN REJECTION_TRAIL.COMMENTS%TYPE,
2331
						  nStateId IN BOM_STATE.STATE_ID%TYPE DEFAULT NULL,
2332
						  nUserId IN REJECTION_TRAIL.USER_ID%TYPE  ) IS
2333
 
2334
StateName STATES.STATE_NAME%TYPE;						  
2335
IsOfficial BOMS.IS_READONLY%TYPE;	
2336
IsRejected VARCHAR2(50);					  
2337
 
2338
BEGIN
2339
	/*--------------- Business Rules Here -------------------*/
2340
	-- Check if Bom is official
2341
	SELECT bo.IS_READONLY INTO IsOfficial
2342
	  FROM BOMS bo
2343
	 WHERE bo.BOM_ID = nBomId;
2344
 
2345
	IF IsOfficial != 'Y' THEN
2346
		RAISE_APPLICATION_ERROR (-20000, 'BOM must be locked first.' );
2347
	END IF;
2348
	/*-------------------------------------------------------*/
2349
 
2350
	-- Get State Name
2351
	SELECT st.STATE_NAME INTO StateName
2352
	  FROM STATES st
2353
	 WHERE st.STATE_ID = nStateId;
2354
 
2355
 
2356
	-- AcceptReject BOM
2357
	UPDATE BOMS bo SET
2358
		bo.IS_REJECTED = cIsRejected
2359
	WHERE bo.BOM_ID = nBomId;
2360
 
2361
 
2362
	-- Auto-Hide Bom
2363
	IF cIsRejected = 'Y' THEN
2364
		pk_State.Auto_Hide ( nStateId, nBomId, GET_SYSTEM_VALUE('enumEVENT_ON_REJECT_BOM') );
2365
	ELSE
2366
		pk_State.Auto_Hide ( nStateId, nBomId, GET_SYSTEM_VALUE('enumEVENT_ON_ACCEPT_BOM') );
2367
	END IF;
2368
 
2369
 
2370
	-- Log Rejection Trail 
2371
	pk_Utils.Log_Rejection_Trail ( GET_SYSTEM_VALUE('enumENTITY_TYPE_BOM'), nBomId, cIsRejected, nUserId, sComments );
2372
 
2373
 
2374
	/* Log BOM_TRAIL */
2375
	-- Get Log Title
2376
	IsRejected := 'ACCEPTED';
2377
	IF cIsRejected = 'Y' THEN
2378
		IsRejected := 'REJECTED';
2379
	END IF;
2380
 
2381
	-- Finnaly log it
2382
	Log_Bom_Trail ( nBomId, IsRejected ||': By '|| StateName, nUserId, sComments );
2383
 
2384
END	Accept_Reject;
2385
/*--------------------------------------------------------------------------------------------------*/
2386
PROCEDURE Set_Bom_Official ( nBomId IN BOMS.BOM_ID%TYPE,
2387
							 cIsOfficial IN BOMS.IS_READONLY%TYPE,
2388
							 nStateId IN BOM_STATE.STATE_ID%TYPE,
2389
							 nUserId IN NUMBER )  IS
2390
 
2391
 
2392
BEGIN
2393
	/*--------------- Business Rules Here -------------------*/
2394
	/*-------------------------------------------------------*/
2395
	--- Set Bom Official or Not ---
2396
	UPDATE BOMS bo SET
2397
	bo.IS_READONLY = cIsOfficial
2398
	WHERE bo.BOM_ID = nBomId;
2399
 
2400
 
2401
	-- Auto-Hide Bom
2402
	IF cIsOfficial = 'Y' THEN
2403
		pk_State.Auto_Hide ( nStateId, nBomId, GET_SYSTEM_VALUE('enumEVENT_ON_LOCK_BOM') );
2404
 
2405
		-- Update node version
2406
		Update_Nodes_Version ( nBomId, nUserId );
2407
	ELSE
2408
		pk_State.Auto_Hide ( nStateId, nBomId, GET_SYSTEM_VALUE('enumEVENT_ON_UNLOCK_BOM') );
2409
	END IF;
2410
 
2411
 
2412
 
2413
	/* Log BOM_TRAIL */
2414
	pk_Bom.Log_Bom_Trail ( nBomId, 'LOCKED: '|| cIsOfficial, nUserId );
2415
 
2416
 
2417
END	Set_Bom_Official;
2418
/*--------------------------------------------------------------------------------------------------*/
2419
PROCEDURE Update_Nodes_Version ( nBomId IN BOMS.BOM_ID%TYPE,
2420
							 	 nUserId IN NUMBER )  IS
2421
 
2422
	CompareBomId NUMBER;
2423
	ProjId NUMBER;
2424
	BomVersion VARCHAR2(4000);
2425
 
2426
	CURSOR curUpdateNode IS
2427
		SELECT DISTINCT
2428
			   nlook.NODE_ID,
2429
			   DECODE ( nlc.LAST_LIFE_CYCLE,
2430
			   			NULL, 0,
2431
						nlc.LAST_LIFE_CYCLE + 1 ) AS NEW_LIFE_CYCLE	   
2432
		  FROM (
2433
 
2434
		  		/* ADDED PATCHES ONLY */
2435
				SELECT 'A' AS CHANGE_TYPE, newbom.PROD_ID, newbom.PK 
2436
				  FROM (
2437
				  		SELECT osc.PROD_ID,
2438
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK
2439
						  FROM OS_CONTENTS osc,
2440
						  	   OPERATING_SYSTEMS os,
2441
							   NETWORK_NODES nn,
2442
							   BOM_CONTENTS bc,
2443
							   PACKAGE_VERSIONS pv
2444
						 WHERE osc.OS_ID = os.OS_ID
2445
						   AND os.NODE_ID = nn.NODE_ID
2446
						   AND bc.NODE_ID = nn.NODE_ID
2447
						   AND osc.PROD_ID = pv.PV_ID
2448
						   AND NOT pv.IS_PATCH IS NULL
2449
						   AND bc.BOM_ID = nBomId	
2450
				  	   ) newbom,
2451
					   (
2452
					   	SELECT osc.PROD_ID,
2453
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK
2454
						  FROM OS_CONTENTS osc,
2455
						  	   OPERATING_SYSTEMS os,
2456
							   NETWORK_NODES nn,
2457
							   BOM_CONTENTS bc,
2458
							   PACKAGE_VERSIONS pv
2459
						 WHERE osc.OS_ID = os.OS_ID
2460
						   AND os.NODE_ID = nn.NODE_ID
2461
						   AND bc.NODE_ID = nn.NODE_ID
2462
						   AND osc.PROD_ID = pv.PV_ID
2463
						   AND NOT pv.IS_PATCH IS NULL
2464
						   AND bc.BOM_ID = CompareBomId	
2465
					   ) oldbom
2466
				 WHERE newbom.PK = oldbom.PK (+) 
2467
				   AND newbom.PROD_ID = oldbom.PROD_ID (+)
2468
				   AND oldbom.PK IS NULL
2469
				UNION 
2470
		  		/* ADDED PATCHES ONLY TO BASE CONFIGURATION */
2471
				SELECT 'A' AS CHANGE_TYPE, newbom.PROD_ID, newbom.PK 
2472
				  FROM (
2473
				  		SELECT bec.PROD_ID,
2474
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK
2475
						  FROM BASE_ENV_CONTENTS bec,
2476
						  	   OS_BASE_ENV obe,
2477
						  	   OPERATING_SYSTEMS os,
2478
							   NETWORK_NODES nn,
2479
							   BOM_CONTENTS bc,
2480
							   PACKAGE_VERSIONS pv
2481
						 WHERE obe.OS_ID = os.OS_ID
2482
						   AND bec.BASE_ENV_ID = obe.BASE_ENV_ID
2483
						   AND os.NODE_ID = nn.NODE_ID
2484
						   AND bc.NODE_ID = nn.NODE_ID
2485
						   AND bec.PROD_ID = pv.PV_ID
2486
						   AND NOT pv.IS_PATCH IS NULL
2487
						   AND bc.BOM_ID = nBomId	
2488
				  	   ) newbom,
2489
					   (
2490
					   	SELECT bec.PROD_ID,
2491
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK
2492
						  FROM BASE_ENV_CONTENTS bec,
2493
						  	   OS_BASE_ENV obe,
2494
						  	   OPERATING_SYSTEMS os,
2495
							   NETWORK_NODES nn,
2496
							   BOM_CONTENTS bc,
2497
							   PACKAGE_VERSIONS pv
2498
						 WHERE obe.OS_ID = os.OS_ID
2499
						   AND bec.BASE_ENV_ID = obe.BASE_ENV_ID
2500
						   AND os.NODE_ID = nn.NODE_ID
2501
						   AND bc.NODE_ID = nn.NODE_ID
2502
						   AND bec.PROD_ID = pv.PV_ID
2503
						   AND NOT pv.IS_PATCH IS NULL
2504
						   AND bc.BOM_ID = CompareBomId	
2505
					   ) oldbom
2506
				 WHERE newbom.PK = oldbom.PK (+) 
2507
				   AND newbom.PROD_ID = oldbom.PROD_ID (+)
2508
				   AND oldbom.PK IS NULL
2509
				UNION				
2510
 
2511
				/* ADDED PRODUCTS ONLY */
2512
				SELECT DECODE( oldbom.PROD_ID,
2513
							   NULL, 'A', 'U' ) AS CHANGE_TYPE, 
2514
					   newbom.PROD_ID, newbom.PK
2515
				  FROM (
2516
				  		SELECT osc.PROD_ID,
2517
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK,
2518
							   pv.PKG_ID,
2519
							   NVL( pv.V_EXT, '|LINK_A_NULL|' ) AS V_EXT
2520
						  FROM OS_CONTENTS osc,
2521
						  	   OPERATING_SYSTEMS os,
2522
							   NETWORK_NODES nn,
2523
							   BOM_CONTENTS bc,
2524
							   PACKAGE_VERSIONS pv
2525
						 WHERE osc.OS_ID = os.OS_ID
2526
						   AND os.NODE_ID = nn.NODE_ID
2527
						   AND bc.NODE_ID = nn.NODE_ID
2528
						   AND osc.PROD_ID = pv.PV_ID
2529
						   AND pv.IS_PATCH IS NULL
2530
						   AND bc.BOM_ID = nBomId	
2531
				  	   ) newbom,
2532
					   (
2533
					   	SELECT osc.PROD_ID,
2534
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK,
2535
							   pv.PKG_ID,
2536
							   NVL( pv.V_EXT, '|LINK_A_NULL|' ) AS V_EXT
2537
						  FROM OS_CONTENTS osc,
2538
						  	   OPERATING_SYSTEMS os,
2539
							   NETWORK_NODES nn,
2540
							   BOM_CONTENTS bc,
2541
							   PACKAGE_VERSIONS pv
2542
						 WHERE osc.OS_ID = os.OS_ID
2543
						   AND os.NODE_ID = nn.NODE_ID
2544
						   AND bc.NODE_ID = nn.NODE_ID
2545
						   AND osc.PROD_ID = pv.PV_ID
2546
						   AND pv.IS_PATCH IS NULL
2547
						   AND bc.BOM_ID = CompareBomId	
2548
					   ) oldbom
2549
				 WHERE newbom.PK = oldbom.PK (+) 
2550
				   --AND newbom.PROD_ID = oldbom.PROD_ID (+)
2551
				   AND newbom.PKG_ID  = oldbom.PKG_ID (+)
2552
				   AND newbom.V_EXT  = oldbom.V_EXT (+) 
2553
				   AND ( oldbom.PROD_ID != newbom.PROD_ID  OR oldbom.PROD_ID IS NULL )	
2554
				   AND newbom.PROD_ID NOT IN 
2555
				   (
2556
				   	   SELECT osc.PROD_ID
2557
					   FROM OS_CONTENTS osc,
2558
					  	    OPERATING_SYSTEMS os,
2559
							NETWORK_NODES nn,
2560
							BOM_CONTENTS bc,
2561
							PACKAGE_VERSIONS pv
2562
					  WHERE osc.OS_ID = os.OS_ID
2563
						AND os.NODE_ID = nn.NODE_ID
2564
						AND bc.NODE_ID = nn.NODE_ID
2565
						AND osc.PROD_ID = pv.PV_ID
2566
						AND pv.IS_PATCH IS NULL
2567
						AND bc.BOM_ID = CompareBomId
2568
				  )	 				   
2569
 
2570
				UNION
2571
 
2572
				/* ADDED PRODUCTS ONLY TO BASE CONFIGURATION */
2573
				SELECT DECODE( oldbom.PROD_ID,
2574
							   NULL, 'A', 'U' ) AS CHANGE_TYPE, 
2575
					   newbom.PROD_ID, newbom.PK
2576
				  FROM (
2577
				  		SELECT bec.PROD_ID,
2578
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK,
2579
							   pv.PKG_ID,
2580
							   NVL( pv.V_EXT, '|LINK_A_NULL|' ) AS V_EXT
2581
						  FROM BASE_ENV_CONTENTS bec,
2582
						  	   OS_BASE_ENV obe,
2583
						  	   OPERATING_SYSTEMS os,
2584
							   NETWORK_NODES nn,
2585
							   BOM_CONTENTS bc,
2586
							   PACKAGE_VERSIONS pv
2587
						 WHERE obe.OS_ID = os.OS_ID
2588
						   AND bec.BASE_ENV_ID = obe.BASE_ENV_ID
2589
						   AND os.NODE_ID = nn.NODE_ID
2590
						   AND bc.NODE_ID = nn.NODE_ID
2591
						   AND bec.PROD_ID = pv.PV_ID
2592
						   AND pv.IS_PATCH IS NULL
2593
						   AND bc.BOM_ID = nBomId	
2594
				  	   ) newbom,
2595
					   (
2596
					   	SELECT bec.PROD_ID,
2597
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK,
2598
							   pv.PKG_ID,
2599
							   NVL( pv.V_EXT, '|LINK_A_NULL|' ) AS V_EXT
2600
						  FROM BASE_ENV_CONTENTS bec,
2601
						  	   OS_BASE_ENV obe,
2602
						  	   OPERATING_SYSTEMS os,
2603
							   NETWORK_NODES nn,
2604
							   BOM_CONTENTS bc,
2605
							   PACKAGE_VERSIONS pv
2606
						 WHERE obe.OS_ID = os.OS_ID
2607
						   AND bec.BASE_ENV_ID = obe.BASE_ENV_ID
2608
						   AND os.NODE_ID = nn.NODE_ID
2609
						   AND bc.NODE_ID = nn.NODE_ID
2610
						   AND bec.PROD_ID = pv.PV_ID
2611
						   AND pv.IS_PATCH IS NULL
2612
						   AND bc.BOM_ID = CompareBomId	
2613
					   ) oldbom
2614
				 WHERE newbom.PK = oldbom.PK (+) 
2615
				   --AND newbom.PROD_ID = oldbom.PROD_ID (+)
2616
				   AND newbom.PKG_ID  = oldbom.PKG_ID (+)
2617
				   AND newbom.V_EXT  = oldbom.V_EXT (+) 
2618
				   AND ( oldbom.PROD_ID != newbom.PROD_ID  OR oldbom.PROD_ID IS NULL )	   
2619
				UNION
2620
 
2621
				/* REMOVED PRODUCTS ONLY*/    
2622
				SELECT 'R' AS CHANGE_TYPE, oldbom.PROD_ID, oldbom.PK
2623
				  FROM (
2624
				  		SELECT osc.PROD_ID,
2625
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK,
2626
							   pv.PKG_ID,
2627
							   NVL( pv.V_EXT, '|LINK_A_NULL|' ) AS V_EXT
2628
						  FROM OS_CONTENTS osc,
2629
						  	   OPERATING_SYSTEMS os,
2630
							   NETWORK_NODES nn,
2631
							   BOM_CONTENTS bc,
2632
							   PACKAGE_VERSIONS pv
2633
						 WHERE osc.OS_ID = os.OS_ID
2634
						   AND os.NODE_ID = nn.NODE_ID
2635
						   AND bc.NODE_ID = nn.NODE_ID
2636
						   AND osc.PROD_ID = pv.PV_ID
2637
						   AND pv.IS_PATCH IS NULL
2638
						   AND bc.BOM_ID = nBomId	
2639
				  	   ) newbom,
2640
					   (
2641
					   	SELECT osc.PROD_ID,
2642
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK,
2643
							   pv.PKG_ID,
2644
							   NVL( pv.V_EXT, '|LINK_A_NULL|' ) AS V_EXT
2645
						  FROM OS_CONTENTS osc,
2646
						  	   OPERATING_SYSTEMS os,
2647
							   NETWORK_NODES nn,
2648
							   BOM_CONTENTS bc,
2649
							   PACKAGE_VERSIONS pv
2650
						 WHERE osc.OS_ID = os.OS_ID
2651
						   AND os.NODE_ID = nn.NODE_ID
2652
						   AND bc.NODE_ID = nn.NODE_ID
2653
						   AND osc.PROD_ID = pv.PV_ID
2654
						   AND pv.IS_PATCH IS NULL
2655
						   AND bc.BOM_ID = CompareBomId	
2656
					   ) oldbom
2657
				 WHERE newbom.PK (+) = oldbom.PK  
2658
				   --AND newbom.PROD_ID (+) = oldbom.PROD_ID
2659
				   AND newbom.PKG_ID (+) = oldbom.PKG_ID
2660
				   AND newbom.V_EXT (+) = oldbom.V_EXT   
2661
				   AND newbom.PK IS NULL  
2662
				UNION   
2663
				/* REMOVED PATCHES */    
2664
				SELECT 'R' AS CHANGE_TYPE, oldbom.PROD_ID, oldbom.PK
2665
				  FROM (
2666
				  		SELECT osc.PROD_ID,
2667
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK
2668
						  FROM OS_CONTENTS osc,
2669
						  	   OPERATING_SYSTEMS os,
2670
							   NETWORK_NODES nn,
2671
							   BOM_CONTENTS bc,
2672
							   PACKAGE_VERSIONS pv
2673
						 WHERE osc.OS_ID = os.OS_ID
2674
						   AND os.NODE_ID = nn.NODE_ID
2675
						   AND bc.NODE_ID = nn.NODE_ID
2676
						   AND osc.PROD_ID = pv.PV_ID
2677
						   AND NOT pv.IS_PATCH IS NULL
2678
						   AND bc.BOM_ID = nBomId	
2679
				  	   ) newbom,
2680
					   (
2681
					   	SELECT osc.PROD_ID,
2682
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK
2683
						  FROM OS_CONTENTS osc,
2684
						  	   OPERATING_SYSTEMS os,
2685
							   NETWORK_NODES nn,
2686
							   BOM_CONTENTS bc,
2687
							   PACKAGE_VERSIONS pv
2688
						 WHERE osc.OS_ID = os.OS_ID
2689
						   AND os.NODE_ID = nn.NODE_ID
2690
						   AND bc.NODE_ID = nn.NODE_ID
2691
						   AND osc.PROD_ID = pv.PV_ID
2692
						   AND NOT pv.IS_PATCH IS NULL
2693
						   AND bc.BOM_ID = CompareBomId	
2694
					   ) oldbom
2695
				 WHERE newbom.PK (+) = oldbom.PK  
2696
				   AND newbom.PROD_ID (+) = oldbom.PROD_ID  
2697
				   AND newbom.PK IS NULL 
2698
				   UNION
2699
				/* REMOVED PRODUCTS ONLY FROM BASE CONFIGURATION*/    
2700
				SELECT 'R' AS CHANGE_TYPE, oldbom.PROD_ID, oldbom.PK
2701
				  FROM (
2702
				  		SELECT bec.PROD_ID,
2703
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK,
2704
							   pv.PKG_ID,
2705
							   NVL( pv.V_EXT, '|LINK_A_NULL|' ) AS V_EXT
2706
						  FROM BASE_ENV_CONTENTS bec,
2707
						  	   OS_BASE_ENV obe,
2708
						  	   OPERATING_SYSTEMS os,
2709
							   NETWORK_NODES nn,
2710
							   BOM_CONTENTS bc,
2711
							   PACKAGE_VERSIONS pv
2712
						 WHERE obe.OS_ID = os.OS_ID
2713
						   AND bec.BASE_ENV_ID = obe.BASE_ENV_ID
2714
						   AND os.NODE_ID = nn.NODE_ID
2715
						   AND bc.NODE_ID = nn.NODE_ID
2716
						   AND bec.PROD_ID = pv.PV_ID
2717
						   AND pv.IS_PATCH IS NULL
2718
						   AND bc.BOM_ID = nBomId	
2719
				  	   ) newbom,
2720
					   (
2721
					   	SELECT bec.PROD_ID,
2722
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK,
2723
							   pv.PKG_ID,
2724
							   NVL( pv.V_EXT, '|LINK_A_NULL|' ) AS V_EXT
2725
						  FROM BASE_ENV_CONTENTS bec,
2726
						  	   OS_BASE_ENV obe,
2727
						  	   OPERATING_SYSTEMS os,
2728
							   NETWORK_NODES nn,
2729
							   BOM_CONTENTS bc,
2730
							   PACKAGE_VERSIONS pv
2731
						 WHERE obe.OS_ID = os.OS_ID
2732
						   AND bec.BASE_ENV_ID = obe.BASE_ENV_ID 
2733
						   AND os.NODE_ID = nn.NODE_ID
2734
						   AND bc.NODE_ID = nn.NODE_ID
2735
						   AND bec.PROD_ID = pv.PV_ID
2736
						   AND pv.IS_PATCH IS NULL
2737
						   AND bc.BOM_ID = CompareBomId	
2738
					   ) oldbom
2739
				 WHERE newbom.PK (+) = oldbom.PK  
2740
				   --AND newbom.PROD_ID (+) = oldbom.PROD_ID
2741
				   AND newbom.PKG_ID (+) = oldbom.PKG_ID
2742
				   AND newbom.V_EXT (+) = oldbom.V_EXT   
2743
				   AND newbom.PK IS NULL  
2744
				UNION   
2745
				/* REMOVED PATCHES FROM BASE CONFIGURATION*/    
2746
				SELECT 'R' AS CHANGE_TYPE, oldbom.PROD_ID, oldbom.PK
2747
				  FROM (
2748
				  		SELECT bec.PROD_ID,
2749
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK
2750
						  FROM BASE_ENV_CONTENTS bec,
2751
						  	   OS_BASE_ENV obe,
2752
						  	   OPERATING_SYSTEMS os,
2753
							   NETWORK_NODES nn,
2754
							   BOM_CONTENTS bc,
2755
							   PACKAGE_VERSIONS pv
2756
						 WHERE obe.OS_ID = os.OS_ID
2757
						   AND bec.BASE_ENV_ID = obe.BASE_ENV_ID
2758
						   AND os.NODE_ID = nn.NODE_ID
2759
						   AND bc.NODE_ID = nn.NODE_ID
2760
						   AND bec.PROD_ID = pv.PV_ID
2761
						   AND NOT pv.IS_PATCH IS NULL
2762
						   AND bc.BOM_ID = nBomId	
2763
				  	   ) newbom,
2764
					   (
2765
					   	SELECT bec.PROD_ID,
2766
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK
2767
						  FROM BASE_ENV_CONTENTS bec,
2768
						  	   OS_BASE_ENV obe,
2769
						  	   OPERATING_SYSTEMS os,
2770
							   NETWORK_NODES nn,
2771
							   BOM_CONTENTS bc,
2772
							   PACKAGE_VERSIONS pv
2773
						 WHERE obe.OS_ID = os.OS_ID
2774
						   AND bec.BASE_ENV_ID = obe.BASE_ENV_ID
2775
						   AND os.NODE_ID = nn.NODE_ID
2776
						   AND bc.NODE_ID = nn.NODE_ID
2777
						   AND bec.PROD_ID = pv.PV_ID
2778
						   AND NOT pv.IS_PATCH IS NULL
2779
						   AND bc.BOM_ID = CompareBomId	
2780
					   ) oldbom
2781
				 WHERE newbom.PK (+) = oldbom.PK  
2782
				   AND newbom.PROD_ID (+) = oldbom.PROD_ID  
2783
				   AND newbom.PK IS NULL				    	
2784
 
2785
		       ) qry,
2786
			   (
2787
 
2788
		  		SELECT nn.NODE_ID,
2789
					   nn.NODE_NAME,
2790
					   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK
2791
				  FROM OPERATING_SYSTEMS os,
2792
					   NETWORK_NODES nn,
2793
					   BOM_CONTENTS bc
2794
				 WHERE os.NODE_ID = nn.NODE_ID
2795
				   AND bc.NODE_ID = nn.NODE_ID
2796
				   AND bc.BOM_ID = nBomId
2797
 
2798
		  	   ) nlook,
2799
			   (
2800
 
2801
				SELECT nn.NODE_NAME, 
2802
					   MAX(nn.NODE_LIFE_CYCLE) AS LAST_LIFE_CYCLE
2803
				  FROM BOMS bo,
2804
				  	   BOM_CONTENTS bc,
2805
					   BRANCHES br,
2806
					   NETWORK_NODES nn
2807
				 WHERE bc.BOM_ID = bo.BOM_ID
2808
				   AND bo.BRANCH_ID = br.BRANCH_ID
2809
				   AND bc.NODE_ID = nn.NODE_ID
2810
				   AND br.PROJ_ID = ProjId
2811
		  	     GROUP BY nn.NODE_NAME
2812
 
2813
			   ) nlc
2814
		 WHERE nlook.PK = qry.PK 
2815
		   AND nlc.NODE_NAME = nlook.NODE_NAME;
2816
	recUpdateNode curUpdateNode%ROWTYPE;
2817
 
2818
 
2819
 
2820
BEGIN
2821
	/*--------------- Business Rules Here -------------------*/
2822
	/*-------------------------------------------------------*/
2823
 
2824
	-- Get some BOM details
2825
	SELECT bo.PARENT_BOM_ID, br.PROJ_ID, bo.BOM_VERSION ||'.'|| bo.BOM_LIFECYCLE INTO CompareBomId, ProjId, BomVersion
2826
	  FROM BOMS bo,
2827
	  	   BRANCHES br
2828
	 WHERE bo.BOM_ID = nBomId
2829
	   AND bo.BRANCH_ID = br.BRANCH_ID;
2830
 
2831
 
2832
	-- Update node version
2833
	OPEN curUpdateNode;
2834
	FETCH curUpdateNode INTO recUpdateNode;
2835
 
2836
	WHILE curUpdateNode%FOUND
2837
	LOOP
2838
 
2839
		UPDATE NETWORK_NODES nn SET
2840
			nn.NODE_VERSION = BomVersion,
2841
			nn.NODE_LIFE_CYCLE = recUpdateNode.NEW_LIFE_CYCLE
2842
		 WHERE nn.NODE_ID = recUpdateNode.NODE_ID;
2843
 
2844
		FETCH curUpdateNode INTO recUpdateNode;
2845
	END LOOP;
2846
 
2847
 
2848
	CLOSE curUpdateNode;	
2849
 
2850
END	Update_Nodes_Version;
2851
/*--------------------------------------------------------------------------------------------------*/
2852
PROCEDURE Destroy_Bom ( nBomId IN VARCHAR2 ) IS
2853
 
2854
rowCount NUMBER;
2855
nIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();
2856
nBomIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();
2857
 
2858
BEGIN
2859
	/*--------------- Business Rules Here -------------------*/
2860
	IF (nBomId IS NULL) 
2861
	THEN
2862
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nBomId= '|| nBomId );
2863
 
2864
	END IF;
2865
 
2866
	-- Check Requirements
2867
	pk_Requirements.Destroy_Bom ( nBomId );
2868
 
2869
	/*-------------------------------------------------------*/
2870
 
2871
 
2872
 
2873
	-- Load Collector
2874
	nBomIdCollector := IN_LIST_NUMBER( nBomId );
2875
 
2876
 
2877
	-- Destroy BASE_ENV
2878
	nIdCollector := NULL;
2879
	SELECT CAST ( MULTISET ( SELECT be.BASE_ENV_ID
2880
	  	   		  		   	   FROM BASE_ENV be
2881
	 						  WHERE be.BOM_ID IN   ( 
2882
								  	  		  	      SELECT * 
2883
													  FROM THE ( SELECT CAST( nBomIdCollector AS DEPMGR_NUMBER_TAB_t ) FROM dual )  
2884
												 	) 
2885
						    ) AS DEPMGR_NUMBER_TAB_t ) INTO nIdCollector FROM DUAL;
2886
 
2887
	Destroy_BaseEnv ( nIdCollector );
2888
 
2889
 
2890
 
2891
	-- Destroy NETWORK_NODES
2892
	nIdCollector := NULL;
2893
	SELECT CAST ( MULTISET ( SELECT bc.NODE_ID
2894
	  	   		  		   	   FROM BOM_CONTENTS bc
2895
	 						  WHERE bc.BOM_ID IN   ( 
2896
								  	  		  	      SELECT * 
2897
													  FROM THE ( SELECT CAST( nBomIdCollector AS DEPMGR_NUMBER_TAB_t ) FROM dual )  
2898
												 	) 
2899
						    ) AS DEPMGR_NUMBER_TAB_t ) INTO nIdCollector FROM DUAL;
2900
 
2901
	pk_Network_Node.Destroy_Node ( nIdCollector, 0 );
2902
 
2903
 
2904
 
2905
	-- Destroy HARDWARE
2906
	nIdCollector := NULL;
2907
	SELECT CAST ( MULTISET ( SELECT hr.HARDWARE_NAME_ID
2908
	  	   		  		   	   FROM HARDWARE hr
2909
	 						  WHERE hr.BOM_ID IN   ( 
2910
								  	  		  	      SELECT * 
2911
													  FROM THE ( SELECT CAST( nBomIdCollector AS DEPMGR_NUMBER_TAB_t ) FROM dual )  
2912
												 	)
2913
							) AS DEPMGR_NUMBER_TAB_t ) INTO nIdCollector FROM DUAL;
2914
 
2915
	Destroy_Hardware ( nIdCollector );
2916
 
2917
 
2918
 
2919
	-- Destroy BOM_STATE
2920
	DELETE 
2921
	  FROM BOM_STATE bs
2922
	 WHERE bs.BOM_ID IN ( 
2923
	  	  		  	      SELECT * 
2924
						  FROM THE ( SELECT CAST( nBomIdCollector AS DEPMGR_NUMBER_TAB_t ) FROM dual )  
2925
					 	);
2926
 
2927
 
2928
	-- Destroy BOM_TRAIL
2929
	DELETE 
2930
	  FROM BOM_TRAIL bt
2931
	 WHERE bt.BOM_ID IN ( 
2932
	  	  		  	      SELECT * 
2933
						  FROM THE ( SELECT CAST( nBomIdCollector AS DEPMGR_NUMBER_TAB_t ) FROM dual )  
2934
					 	); 
2935
 
2936
 
2937
	---- Finnaly Destroy BOM ----
2938
	DELETE 
2939
	  FROM BOMS bo
2940
	 WHERE bo.BOM_ID IN ( 
2941
	  	  		  	      SELECT * 
2942
						  FROM THE ( SELECT CAST( nBomIdCollector AS DEPMGR_NUMBER_TAB_t ) FROM dual )  
2943
					 	);
2944
 
2945
 
2946
 
2947
END	Destroy_Bom;
2948
/*--------------------------------------------------------------------------------------------------*/
2949
PROCEDURE Destroy_BaseEnv ( nBaseEndIdCollector IN DEPMGR_NUMBER_TAB_t ) IS
2950
 
2951
 
2952
BEGIN
2953
	/*--------------- Business Rules Here -------------------*/
2954
	/*-------------------------------------------------------*/
2955
 
2956
	-- Destroy BASE_ENV_CONTENTS
2957
	DELETE
2958
	  FROM BASE_ENV_CONTENTS bec
2959
	 WHERE bec.BASE_ENV_ID IN ( SELECT * FROM TABLE ( CAST ( nBaseEndIdCollector AS DEPMGR_NUMBER_TAB_t ) ) );
2960
 
2961
	-- Destroy OS_BASE_ENV
2962
	DELETE
2963
	  FROM OS_BASE_ENV obe
2964
	 WHERE obe.BASE_ENV_ID IN ( SELECT * FROM TABLE ( CAST ( nBaseEndIdCollector AS DEPMGR_NUMBER_TAB_t ) ) );
2965
 
2966
	 -- Destroy BASE_ENV
2967
	DELETE
2968
	  FROM BASE_ENV be
2969
	 WHERE be.BASE_ENV_ID IN ( SELECT * FROM TABLE ( CAST ( nBaseEndIdCollector AS DEPMGR_NUMBER_TAB_t ) ) );
2970
 
2971
 
2972
END	Destroy_BaseEnv;
2973
/*--------------------------------------------------------------------------------------------------*/
2974
PROCEDURE Destroy_Hardware ( nHardwareNameIdCollector IN DEPMGR_NUMBER_TAB_t ) IS
2975
 
2976
nIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();
2977
 
2978
BEGIN
2979
	/*--------------- Business Rules Here -------------------*/
2980
	/*-------------------------------------------------------*/
2981
 
2982
    -- Destroy NETWORK_NODES
2983
    nIdCollector := NULL;
2984
    SELECT CAST ( MULTISET ( SELECT hn.NODE_ID
2985
	  	   		  		   	   FROM HARDWARE_NODE hn
2986
	 						  WHERE hn.HARDWARE_NAME_ID IN ( SELECT * FROM TABLE ( CAST ( nHardwareNameIdCollector AS DEPMGR_NUMBER_TAB_t ) ) ) 
2987
						   ) AS DEPMGR_NUMBER_TAB_t ) INTO nIdCollector FROM DUAL;
2988
 
2989
    pk_Network_Node.Destroy_Node ( nIdCollector, 0 );
2990
 
2991
 
2992
	-- Finnaly Destroy HARDWARE
2993
	DELETE
2994
	  FROM HARDWARE hd
2995
	 WHERE hd.HARDWARE_NAME_ID IN ( SELECT * FROM TABLE ( CAST ( nHardwareNameIdCollector AS DEPMGR_NUMBER_TAB_t ) ) );
2996
 
2997
END	Destroy_Hardware;
2998
/*--------------------------------------------------------------------------------------------------*/
2999
PROCEDURE Get_Next_Version (nFromBomId IN BOMS.BOM_ID%TYPE,
3000
							nToBranchId IN BOMS.BRANCH_ID%TYPE,
3001
							sNextVersion OUT BOMS.BOM_VERSION%TYPE,
3002
							sNextLifeCycle OUT BOMS.BOM_LIFECYCLE%TYPE,
3003
							nParentBomId IN OUT BOMS.PARENT_BOM_ID%TYPE,
3004
							nBomNameId IN BOMS.BOM_NAME_ID%TYPE ) IS
3005
 
3006
IsNotHead NUMBER;
3007
FromBranch NUMBER;
3008
LastRootVersion NUMBER;
3009
LastVersion BOMS.BOM_VERSION%TYPE;
3010
 
3011
CURSOR curBoms IS
3012
	SELECT Max ( CAST ( bo.BOM_VERSION AS NUMBER  ) ) AS LAST_VERSION
3013
		  FROM BOMS bo,
3014
		  	   BRANCHES br
3015
		 WHERE bo.BRANCH_ID = br.BRANCH_ID
3016
		   AND br.PROJ_ID IN ( SELECT br.PROJ_ID  FROM BRANCHES br  WHERE br.BRANCH_ID = nToBranchId )	
3017
		   AND bo.BOM_NAME_ID = nBomNameId;
3018
recBoms curBoms%ROWTYPE;
3019
 
3020
 
3021
BEGIN
3022
 
3023
	/*--------------- Business Rules Here -------------------*/
3024
	/*-------------------------------------------------------*/
3025
	-- Get Last Root Version
3026
 
3027
	OPEN curBoms;
3028
	FETCH curBoms INTO recBoms;	
3029
	LastRootVersion := recBoms.LAST_VERSION;
3030
	CLOSE curBoms;
3031
 
3032
 
3033
 
3034
 
3035
 
3036
	IF nFromBomId IS NULL THEN
3037
		/* Blank BOM Required */
3038
 
3039
		-- Get Next Available Version
3040
		sNextVersion := '1';
3041
		sNextLifeCycle := '0';
3042
		IF LastRootVersion IS NOT NULL THEN
3043
			sNextVersion := CAST( LastRootVersion + 1 AS VARCHAR2 );
3044
		END IF;
3045
 
3046
 
3047
 
3048
	ELSE
3049
		/* Create Bom From ... */
3050
 
3051
		-- Check if BOM is comming from different Iteration
3052
		SELECT bo.BRANCH_ID INTO FromBranch
3053
		  FROM BOMS bo
3054
		 WHERE bo.BOM_ID = nFromBomId; 
3055
 
3056
 
3057
 
3058
		IF FromBranch = nToBranchId THEN
3059
			/* Bom is comming from same Iteration */
3060
			/* i.e. Continue on same version stream. */
3061
 
3062
			-- Set parent_id
3063
			nParentBomId := nFromBomId;
3064
 
3065
 
3066
			-- Get Last Version 
3067
			SELECT bo.BOM_VERSION INTO LastVersion
3068
			  FROM BOMS bo
3069
			 WHERE bo.BOM_ID = nFromBomId;
3070
 
3071
 
3072
			-- Check if Bom is Head (i.e. Last on its branch )
3073
			SELECT COUNT(*) INTO IsNotHead
3074
			  FROM BOMS bo,
3075
			  	   BRANCHES br
3076
			 WHERE bo.BRANCH_ID = br.BRANCH_ID
3077
			   AND br.PROJ_ID IN ( SELECT br.PROJ_ID FROM BRANCHES br WHERE br.BRANCH_ID = FromBranch )
3078
			   AND bo.PARENT_BOM_ID = nFromBomId
3079
			   AND bo.BOM_VERSION = LastVersion
3080
			   AND bo.BOM_ID != bo.PARENT_BOM_ID;
3081
 
3082
 
3083
			IF IsNotHead = 0 THEN
3084
				/* Bom IS Head (i.e. Last on its branch ) */
3085
 
3086
				-- Get Bom Version and LifeCycle
3087
				SELECT bo.BOM_VERSION, bo.BOM_LIFECYCLE INTO sNextVersion, sNextLifeCycle
3088
				  FROM BOMS bo
3089
				 WHERE bo.BOM_ID = nFromBomId;
3090
 
3091
				-- Increase Lifecycle
3092
				sNextLifeCycle := CAST (  ( CAST( sNextLifeCycle AS NUMBER ) + 1 )  AS VARCHAR2 );
3093
 
3094
 
3095
			ELSE
3096
				/* Bom IS NOT Head */
3097
 
3098
				-- Get Bom Version and LifeCycle
3099
				SELECT bo.BOM_VERSION, bo.BOM_LIFECYCLE INTO sNextVersion, sNextLifeCycle
3100
				  FROM BOMS bo
3101
				 WHERE bo.BOM_ID = nFromBomId;
3102
 
3103
				-- Branch Bom Version 
3104
				sNextVersion := sNextVersion ||'.'|| sNextLifeCycle;
3105
 
3106
				-- Reset Lifecycle to 1
3107
				sNextLifeCycle := '1';
3108
 
3109
			END IF;	
3110
 
3111
 
3112
		ELSE
3113
			/* BOM is comming from Different Iteration */
3114
			/* i.e. Start new version stream. */
3115
 
3116
			-- Get Next Available Version
3117
			sNextVersion := '1';
3118
			sNextLifeCycle := '0';
3119
			IF LastRootVersion IS NOT NULL THEN
3120
				sNextVersion := CAST( LastRootVersion + 1 AS VARCHAR2 );
3121
			END IF;
3122
 
3123
		END IF;
3124
 
3125
 
3126
	END IF;
3127
 
3128
 
3129
END	Get_Next_Version;
3130
/*--------------------------------------------------------------------------------------------------*/
3131
PROCEDURE Release_To ( nBomId IN BOM_STATE.BOM_ID%TYPE,
3132
					   nUserId IN BOM_STATE.USER_ID%TYPE,
3133
					   nToState IN BOM_STATE.STATE_ID%TYPE DEFAULT NULL,
3134
					   sComments IN BOM_TRAIL.TRAIL_COMMENTS%TYPE DEFAULT NULL ) IS
3135
 
3136
rowCount NUMBER;	
3137
IsOfficial BOMS.IS_READONLY%TYPE;					 
3138
StateId BOM_STATE.STATE_ID%TYPE;
3139
StateName STATES.STATE_NAME%TYPE;
3140
 
3141
BEGIN
3142
	/*--------------- Business Rules Here -------------------*/
3143
	-- Check if already released
3144
	SELECT Count(*) INTO rowCount
3145
	  FROM BOM_STATE bs
3146
	 WHERE bs.BOM_ID = nBomId
3147
	   AND bs.STATE_ID = nToState;
3148
 
3149
	IF rowCount > 0 THEN
3150
	   RAISE_APPLICATION_ERROR (-20000, 'This BOM is already release' );
3151
	END IF;
3152
 
3153
 
3154
	-- Check if Bom is official
3155
	SELECT bo.IS_READONLY INTO IsOfficial
3156
	  FROM BOMS bo
3157
	 WHERE bo.BOM_ID = nBomId;
3158
 
3159
	IF (IsOfficial != 'Y') AND (nToState IS NOT NULL) THEN
3160
		RAISE_APPLICATION_ERROR (-20000, 'BOM must be locked first' );
3161
	END IF;
3162
	/*-------------------------------------------------------*/
3163
 
3164
 
3165
	-- Get State --
3166
	StateId := nToState;
3167
	IF StateId IS NULL THEN
3168
		-- If state_id is null it is considered as state_type_enum = 'BOM Creator'
3169
		SELECT st.STATE_ID INTO StateId
3170
		  FROM BOMS bo,
3171
		  	   BRANCHES br,
3172
			   DM_PROJECTS proj,
3173
			   STATES st
3174
		 WHERE bo.BRANCH_ID = br.BRANCH_ID
3175
		   AND br.PROJ_ID = proj.PROJ_ID
3176
		   AND st.PROJ_ID = proj.PROJ_ID
3177
		   AND bo.BOM_ID = nBomId
3178
		   AND st.STATE_TYPE_ENUM = GET_SYSTEM_VALUE('enumSTATE_TYPE_CREATOR');	
3179
	END IF;
3180
 
3181
 
3182
	-- Add Bom to State --
3183
	INSERT INTO BOM_STATE (BOM_ID, STATE_ID, DATE_STAMP, IS_DISPLAYED, USER_ID )
3184
	VALUES( nBomId,
3185
			StateId,
3186
			GET_DATE(),
3187
			'Y',
3188
			nUserId );
3189
 
3190
 
3191
 
3192
	-- Auto-Hide Bom
3193
	pk_State.Auto_Hide ( StateId, nBomId, GET_SYSTEM_VALUE('enumEVENT_ON_RELEASE_TO') );
3194
 
3195
 
3196
	/* Log BOM_TRAIL */
3197
	-- Get State Name --
3198
	SELECT st.STATE_NAME INTO StateName
3199
	  FROM STATES st
3200
	 WHERE st.STATE_ID = StateId;
3201
 
3202
	-- Log Action 
3203
	pk_Bom.Log_Bom_Trail ( nBomId, 'RELEASED TO: '|| StateName, nUserId, sComments );
3204
 
3205
 
3206
END	Release_To;
3207
/*--------------------------------------------------------------------------------------------------*/
3208
PROCEDURE Accept_Reject_Comments ( nBomId IN BOMS.BOM_ID%TYPE,
3209
		  						   nRejectSeq IN REJECTION_TRAIL.REJECT_SEQ%TYPE,
3210
						  	   	   sComments IN REJECTION_TRAIL.COMMENTS%TYPE DEFAULT NULL,
3211
						       	   nUserId IN REJECTION_TRAIL.USER_ID%TYPE ) IS
3212
 
3213
IsRejected REJECTION_TRAIL.IS_REJECTED%TYPE;
3214
 
3215
BEGIN
3216
	/*--------------- Business Rules Here -------------------*/
3217
	IF (nBomId IS NULL)
3218
	THEN
3219
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nBomId= '|| nBomId  );
3220
	END IF;
3221
	/*-------------------------------------------------------*/
3222
 
3223
	IF nRejectSeq IS NULL THEN
3224
		/* CREATE New Note */
3225
 
3226
		-- Get last IsRejected state
3227
		SELECT rt.IS_REJECTED INTO IsRejected
3228
		  FROM REJECTION_TRAIL rt
3229
		 WHERE rt.ENTITY_ID = nBomId
3230
		   AND rt.ENUM_ENTITY_TYPE = GET_SYSTEM_VALUE('enumENTITY_TYPE_BOM')
3231
		   AND rt.REJECT_SEQ =
3232
		   (
3233
		   	SELECT MAX(REJECT_SEQ) FROM
3234
			REJECTION_TRAIL rt
3235
		 	WHERE rt.ENTITY_ID = nBomId
3236
		   	AND rt.ENUM_ENTITY_TYPE = GET_SYSTEM_VALUE('enumENTITY_TYPE_BOM')
3237
 
3238
		   );
3239
 
3240
 
3241
		/* Log Rejection Trail */
3242
		pk_Utils.Log_Rejection_Trail ( GET_SYSTEM_VALUE('enumENTITY_TYPE_BOM'), nBomId, IsRejected, nUserId, sComments );
3243
 
3244
	ELSE
3245
		/* EDIT Note */
3246
		UPDATE REJECTION_TRAIL rt SET
3247
			rt.COMMENTS = sComments,
3248
			rt.USER_ID = nUserId,
3249
			rt.DATE_TIME_STAMP = GET_DATETIME()
3250
		WHERE rt.ENUM_ENTITY_TYPE = GET_SYSTEM_VALUE('enumENTITY_TYPE_BOM')
3251
		  AND rt.ENTITY_ID = nBomId
3252
		  AND rt.REJECT_SEQ = nRejectSeq;
3253
 
3254
 
3255
	END IF;
3256
 
3257
 
3258
END	Accept_Reject_Comments;
3259
/*--------------------------------------------------------------------------------------------------*/
3260
PROCEDURE Log_Bom_Trail ( nBomId IN BOM_TRAIL.BOM_ID%TYPE,
3261
						  sAction IN BOM_TRAIL.TRAIL_ACTION%TYPE,
3262
						  nUserId IN BOM_TRAIL.USER_ID%TYPE,
3263
						  sComments IN BOM_TRAIL.TRAIL_COMMENTS%TYPE DEFAULT NULL  ) IS
3264
 
3265
 
3266
BEGIN
3267
	/*--------------- Business Rules Here -------------------*/
3268
	IF (nBomId IS NULL) OR (sAction IS NULL) OR (nUserId IS NULL)
3269
	THEN
3270
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nBomId= '|| nBomId ||', sAction='|| sAction ||', nUserId='|| nUserId );
3271
	END IF;
3272
	/*-------------------------------------------------------*/
3273
 
3274
	INSERT INTO BOM_TRAIL ( BOM_ID, TRAIL_ACTION, TRAIL_COMMENTS, USER_ID, DATE_TIME_STAMP )
3275
	VALUES ( nBomId, sAction, sComments, nUserId, GET_DATETIME() );	
3276
 
3277
END	Log_Bom_Trail;
3278
/*--------------------------------------------------------------------------------------------------*/
3279
PROCEDURE Log_Node_Trail ( nNodeId IN NODE_TRAIL.NODE_ID%TYPE,
3280
						  sAction IN NODE_TRAIL.TRAIL_ACTION%TYPE,
3281
						  nUserId IN NODE_TRAIL.USER_ID%TYPE  ) IS
3282
 
3283
 
3284
BEGIN
3285
	/*--------------- Business Rules Here -------------------*/
3286
	IF (nNodeId IS NULL) OR (sAction IS NULL) OR (nUserId IS NULL)
3287
	THEN
3288
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nNodeId= '|| nNodeId ||', sAction='|| sAction ||', nUserId='|| nUserId );
3289
	END IF;
3290
	/*-------------------------------------------------------*/
3291
 
3292
	INSERT INTO NODE_TRAIL ( NODE_ID, TRAIL_ACTION, USER_ID, DATE_TIME_STAMP )
3293
	VALUES ( nNodeId, sAction, nUserId, GET_DATETIME() );	
3294
 
3295
END	Log_Node_Trail;
3296
/*--------------------------------------------------------------------------------------------------*/
3297
PROCEDURE Log_Os_Trail ( nOsId IN OS_TRAIL.OS_ID%TYPE,
3298
						  sAction IN OS_TRAIL.TRAIL_ACTION%TYPE,
3299
						  nUserId IN OS_TRAIL.USER_ID%TYPE  ) IS
3300
 
3301
 
3302
BEGIN
3303
	/*--------------- Business Rules Here -------------------*/
3304
	IF (nOsId IS NULL) OR (sAction IS NULL) OR (nUserId IS NULL)
3305
	THEN
3306
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nOsId= '|| nOsId ||', sAction='|| sAction ||', nUserId='|| nUserId );
3307
	END IF;
3308
	/*-------------------------------------------------------*/
3309
 
3310
	INSERT INTO OS_TRAIL ( OS_ID, TRAIL_ACTION, USER_ID, DATE_TIME_STAMP )
3311
	VALUES ( nOsId, sAction, nUserId, GET_DATETIME() );	
3312
 
3313
END	Log_Os_Trail;
3314
/*--------------------------------------------------------------------------------------------------*/
3315
 
3316
END pk_Bom;
3317
 
3318
/
3319
 
3320
/
3321
--------------------------------------------------------
3322
--  DDL for Package Body PK_BOM_TEST
3323
--------------------------------------------------------
3324
 
3325
  CREATE OR REPLACE PACKAGE BODY "PK_BOM_TEST" 
3326
IS
3327
/* ---------------------------------------------------------------------------
3328
    Version: 2.0
3329
   --------------------------------------------------------------------------- */
3330
 
3331
/*--------------------------------------------------------------------------------------------------*/
3332
PROCEDURE Add_Bom ( sBomName IN BOM_NAMES.BOM_NAME%TYPE DEFAULT NULL,
3333
		  		  	sBomVersion IN BOMS.BOM_VERSION%TYPE,
3334
		  		  	sBomLifeCycle IN BOMS.BOM_LIFECYCLE%TYPE,		
3335
					sBomComments IN BOMS.BOM_COMMENTS%TYPE DEFAULT NULL,
3336
					nToBranchId IN BOMS.BRANCH_ID%TYPE,
3337
					nFromBomId IN BOMS.BOM_ID%TYPE DEFAULT NULL,
3338
					nUserId IN BOM_STATE.USER_ID%TYPE ) IS
3339
 
3340
BomId BOMS.BOM_ID%TYPE;
3341
ParentBomId BOMS.PARENT_BOM_ID%TYPE;
3342
BomNameId BOM_NAMES.BOM_NAME_ID%TYPE;
3343
BomVersion BOMS.BOM_VERSION%TYPE;
3344
BomLifeCycle BOMS.BOM_LIFECYCLE%TYPE;
3345
ProjId BRANCHES.PROJ_ID%TYPE;
3346
 
3347
CURSOR curBom IS 
3348
		SELECT bo.BOM_ID
3349
		  FROM BOMS bo,
3350
		  	   BRANCHES br
3351
		 WHERE bo.BRANCH_ID = br.BRANCH_ID
3352
		   AND br.PROJ_ID = ProjId
3353
		   AND bo.BOM_NAME_ID = BomNameId
3354
		   AND bo.BOM_VERSION = BomVersion
3355
		   AND bo.BOM_LIFECYCLE = BomLifeCycle;
3356
recBom curBom%ROWTYPE;
3357
 
3358
DUPLICATE_BOM EXCEPTION;
3359
 
3360
BEGIN
3361
	/*--------------- Business Rules Here -------------------*/
3362
	IF (nToBranchId IS NULL) OR (nUserId IS NULL)
3363
	THEN
3364
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nToBranchId= '|| nToBranchId ||', nUserId='|| nUserId );
3365
 
3366
	END IF;
3367
	/*-------------------------------------------------------*/
3368
 
3369
	-- Get bom_id
3370
	SELECT SEQ_BOM_ID.NEXTVAL INTO BomId FROM DUAL;
3371
 
3372
 
3373
	-- Get bom_name_id
3374
	IF nFromBomId IS NULL THEN
3375
		BomNameId := New_Bom_Name ( sBomName );
3376
        ParentBomId := BomId;
3377
	ELSE
3378
		BomNameId := New_Bom_Name ( nFromBomId );
3379
        ParentBomId := nFromBomId;
3380
	END IF;		
3381
 
3382
 
3383
 
3384
 
3385
	-- Get Bom Version and Lifecycle
3386
	--Get_Next_Version ( nFromBomId, nToBranchId, BomVersion, BomLifeCycle, ParentBomId, BomNameId );
3387
 
3388
 
3389
 
3390
	-- Get proj_id
3391
	SELECT br.PROJ_ID INTO ProjId
3392
	  FROM BRANCHES br
3393
	 WHERE br.BRANCH_ID = nToBranchId;
3394
 
3395
 
3396
 
3397
	-- Check for duplicate BOMs
3398
	OPEN curBom;
3399
    FETCH curBom INTO recBom;
3400
 
3401
    IF curBom%FOUND
3402
    THEN
3403
		RAISE DUPLICATE_BOM;
3404
	END IF;
3405
 
3406
	CLOSE curBom;
3407
 
3408
 
3409
 
3410
	-- Add Blank Bom --
3411
	INSERT INTO BOMS ( BOM_ID, BRANCH_ID, BOM_NAME_ID, BOM_COMMENTS, BOM_VERSION, BOM_LIFECYCLE, IS_READONLY, IS_HIDDEN, PARENT_BOM_ID )
3412
	VALUES ( BomId, nToBranchId, BomNameId, sBomComments, sBomVersion, sBomLifeCycle, 'N', 'N', ParentBomId  );
3413
 
3414
 
3415
 
3416
 
3417
	/* Log BOM_TRAIL */
3418
	pk_Bom.Log_Bom_Trail ( BomId, 'CREATED: Version '|| sBomVersion ||'.'|| sBomLifeCycle , nUserId );
3419
 
3420
 
3421
 
3422
	IF nFromBomId IS NOT NULL THEN
3423
		/* Add Bom Clonned from ... */
3424
		pk_Utils.Clone_BOM ( nFromBomId, BomId, nUserId );
3425
 
3426
	END IF;
3427
 
3428
 
3429
 
3430
	--- Set Bom State ---
3431
	Release_To ( BomId, nUserId );
3432
 
3433
 
3434
	EXCEPTION
3435
    WHEN DUPLICATE_BOM
3436
	THEN		
3437
		RAISE_APPLICATION_ERROR (-20000, 'BOM "'|| sBomName ||' '|| BomVersion ||'.'|| BomLifeCycle ||'" is Already Used in this Project.');
3438
 
3439
END	Add_Bom;
3440
/*--------------------------------------------------------------------------------------------------*/
3441
PROCEDURE Update_Bom ( nBomId IN BOMS.BOM_ID%TYPE,
3442
					   nRtagId IN BOMS.RTAG_ID_FK%TYPE,
3443
					   sBomComment IN BOMS.BOM_COMMENTS%TYPE,
3444
					   nUserId IN NUMBER )  IS
3445
 
3446
ReleaseName VARCHAR2(100);					   
3447
 
3448
BEGIN
3449
	/*--------------- Business Rules Here -------------------*/
3450
	/*-------------------------------------------------------*/
3451
 
3452
	--- Update Bom Properties ---
3453
	UPDATE BOMS bo SET
3454
		bo.RTAG_ID_FK = nRtagId,
3455
		bo.BOM_COMMENTS = sBomComment
3456
	WHERE bo.BOM_ID = nBomId;
3457
 
3458
	SELECT RTAG_NAME INTO ReleaseName
3459
	FROM RELEASE_TAGS 
3460
	WHERE RTAG_ID = nRtagId;
3461
 
3462
 
3463
	/* Log BOM_TRAIL */
3464
	pk_Bom.Log_Bom_Trail ( nBomId, 'Updated BOM properties: Set Release Manager Reference ='||ReleaseName||' and comments ='||sBomComment, nUserId );
3465
 
3466
 
3467
END	Update_Bom;
3468
/*--------------------------------------------------------------------------------------------------*/
3469
FUNCTION New_Bom_Name ( sBomName IN BOM_NAMES.BOM_NAME%TYPE ) RETURN BOM_NAMES.BOM_NAME_ID%TYPE IS
3470
 
3471
ReturnValue 	 BOM_NAMES.BOM_NAME_ID%TYPE;	
3472
 
3473
CURSOR curBomNames IS
3474
	SELECT bn.BOM_NAME_ID
3475
	  FROM BOM_NAMES bn
3476
	 WHERE bn.BOM_NAME = sBomName;
3477
recBomNames curBomNames%ROWTYPE;
3478
 
3479
BEGIN
3480
	/*--------------- Business Rules Here -------------------*/
3481
	/*-------------------------------------------------------*/
3482
 
3483
	-- Check for existance of this name
3484
	OPEN curBomNames;
3485
	FETCH curBomNames INTO recBomNames;
3486
 
3487
	ReturnValue := NULL;
3488
	IF curBomNames%FOUND THEN
3489
		ReturnValue := recBomNames.BOM_NAME_ID;
3490
	END IF;
3491
 
3492
	CLOSE curBomNames;
3493
 
3494
 
3495
	-- Finnaly Create Name if required --    
3496
	IF ReturnValue IS NULL THEN
3497
		-- Get bom_name_id
3498
		SELECT SEQ_BOM_NAME_ID.NEXTVAL INTO ReturnValue FROM DUAL;
3499
 
3500
		INSERT INTO BOM_NAMES ( BOM_NAME_ID, BOM_NAME )
3501
		VALUES ( ReturnValue, sBomName );
3502
 
3503
	END IF;	
3504
 
3505
 
3506
	RETURN ReturnValue;
3507
END	New_Bom_Name;
3508
/*--------------------------------------------------------------------------------------------------*/
3509
FUNCTION New_Bom_Name ( nFromBomId IN BOMS.BOM_NAME_ID%TYPE ) RETURN BOMS.BOM_NAME_ID%TYPE IS
3510
 
3511
ReturnValue 	 BOMS.BOM_NAME_ID%TYPE;	
3512
 
3513
BEGIN
3514
	/*--------------- Business Rules Here -------------------*/
3515
	/*-------------------------------------------------------*/
3516
 
3517
	-- Get bom_name_id
3518
	SELECT bo.BOM_NAME_ID INTO ReturnValue
3519
	  FROM BOMS bo
3520
	 WHERE bo.BOM_ID = nFromBomId;
3521
 
3522
 
3523
	RETURN ReturnValue;
3524
END	New_Bom_Name;
3525
/*--------------------------------------------------------------------------------------------------*/
3526
PROCEDURE Accept_Reject ( nBomId IN BOMS.BOM_ID%TYPE,
3527
						  cIsRejected IN BOMS.IS_REJECTED%TYPE,
3528
						  sComments IN REJECTION_TRAIL.COMMENTS%TYPE,
3529
						  nStateId IN BOM_STATE.STATE_ID%TYPE DEFAULT NULL,
3530
						  nUserId IN REJECTION_TRAIL.USER_ID%TYPE  ) IS
3531
 
3532
StateName STATES.STATE_NAME%TYPE;						  
3533
IsOfficial BOMS.IS_READONLY%TYPE;	
3534
IsRejected VARCHAR2(50);					  
3535
 
3536
BEGIN
3537
	/*--------------- Business Rules Here -------------------*/
3538
	-- Check if Bom is official
3539
	SELECT bo.IS_READONLY INTO IsOfficial
3540
	  FROM BOMS bo
3541
	 WHERE bo.BOM_ID = nBomId;
3542
 
3543
	IF IsOfficial != 'Y' THEN
3544
		RAISE_APPLICATION_ERROR (-20000, 'BOM must be locked first.' );
3545
	END IF;
3546
	/*-------------------------------------------------------*/
3547
 
3548
	-- Get State Name
3549
	SELECT st.STATE_NAME INTO StateName
3550
	  FROM STATES st
3551
	 WHERE st.STATE_ID = nStateId;
3552
 
3553
 
3554
	-- AcceptReject BOM
3555
	UPDATE BOMS bo SET
3556
		bo.IS_REJECTED = cIsRejected
3557
	WHERE bo.BOM_ID = nBomId;
3558
 
3559
 
3560
	-- Auto-Hide Bom
3561
	IF cIsRejected = 'Y' THEN
3562
		pk_State.Auto_Hide ( nStateId, nBomId, GET_SYSTEM_VALUE('enumEVENT_ON_REJECT_BOM') );
3563
	ELSE
3564
		pk_State.Auto_Hide ( nStateId, nBomId, GET_SYSTEM_VALUE('enumEVENT_ON_ACCEPT_BOM') );
3565
	END IF;
3566
 
3567
 
3568
	-- Log Rejection Trail 
3569
	pk_Utils.Log_Rejection_Trail ( GET_SYSTEM_VALUE('enumENTITY_TYPE_BOM'), nBomId, cIsRejected, nUserId, sComments );
3570
 
3571
 
3572
	/* Log BOM_TRAIL */
3573
	-- Get Log Title
3574
	IsRejected := 'ACCEPTED';
3575
	IF cIsRejected = 'Y' THEN
3576
		IsRejected := 'REJECTED';
3577
	END IF;
3578
 
3579
	-- Finnaly log it
3580
	Log_Bom_Trail ( nBomId, IsRejected ||': By '|| StateName, nUserId, sComments );
3581
 
3582
END	Accept_Reject;
3583
/*--------------------------------------------------------------------------------------------------*/
3584
PROCEDURE Set_Bom_Official ( nBomId IN BOMS.BOM_ID%TYPE,
3585
							 cIsOfficial IN BOMS.IS_READONLY%TYPE,
3586
							 nStateId IN BOM_STATE.STATE_ID%TYPE,
3587
							 nUserId IN NUMBER )  IS
3588
 
3589
BEGIN
3590
	/*--------------- Business Rules Here -------------------*/
3591
	/*-------------------------------------------------------*/
3592
 
3593
	--- Set Bom Official or Not ---
3594
	UPDATE BOMS bo SET
3595
	bo.IS_READONLY = cIsOfficial
3596
	WHERE bo.BOM_ID = nBomId;
3597
 
3598
 
3599
	-- Auto-Hide Bom
3600
	IF cIsOfficial = 'Y' THEN
3601
		pk_State.Auto_Hide ( nStateId, nBomId, GET_SYSTEM_VALUE('enumEVENT_ON_LOCK_BOM') );
3602
 
3603
		-- Update node version
3604
		Update_Nodes_Version ( nBomId, nUserId );
3605
 
3606
	ELSE
3607
		pk_State.Auto_Hide ( nStateId, nBomId, GET_SYSTEM_VALUE('enumEVENT_ON_UNLOCK_BOM') );
3608
	END IF;
3609
 
3610
 
3611
 
3612
	/* Log BOM_TRAIL */
3613
	pk_Bom.Log_Bom_Trail ( nBomId, 'LOCKED: '|| cIsOfficial, nUserId );
3614
 
3615
 
3616
END	Set_Bom_Official;
3617
/*--------------------------------------------------------------------------------------------------*/
3618
PROCEDURE Update_Nodes_Version ( nBomId IN BOMS.BOM_ID%TYPE,
3619
							 	 nUserId IN NUMBER )  IS
3620
 
3621
	CompareBomId NUMBER;
3622
	ProjId NUMBER;
3623
	BomVersion VARCHAR2(4000);
3624
 
3625
	CURSOR curUpdateNode IS
3626
		SELECT DISTINCT
3627
			   nlook.NODE_ID,
3628
			   DECODE ( nlc.LAST_LIFE_CYCLE,
3629
			   			NULL, 0,
3630
						nlc.LAST_LIFE_CYCLE + 1 ) AS NEW_LIFE_CYCLE	   
3631
		  FROM (
3632
 
3633
		  		/* ADDED PATCHES ONLY */
3634
				SELECT 'A' AS CHANGE_TYPE, newbom.PROD_ID, newbom.PK 
3635
				  FROM (
3636
				  		SELECT osc.PROD_ID,
3637
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK
3638
						  FROM OS_CONTENTS osc,
3639
						  	   OPERATING_SYSTEMS os,
3640
							   NETWORK_NODES nn,
3641
							   BOM_CONTENTS bc,
3642
							   PACKAGE_VERSIONS pv
3643
						 WHERE osc.OS_ID = os.OS_ID
3644
						   AND os.NODE_ID = nn.NODE_ID
3645
						   AND bc.NODE_ID = nn.NODE_ID
3646
						   AND osc.PROD_ID = pv.PV_ID
3647
						   AND NOT pv.IS_PATCH IS NULL
3648
						   AND bc.BOM_ID = nBomId	
3649
				  	   ) newbom,
3650
					   (
3651
					   	SELECT osc.PROD_ID,
3652
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK
3653
						  FROM OS_CONTENTS osc,
3654
						  	   OPERATING_SYSTEMS os,
3655
							   NETWORK_NODES nn,
3656
							   BOM_CONTENTS bc,
3657
							   PACKAGE_VERSIONS pv
3658
						 WHERE osc.OS_ID = os.OS_ID
3659
						   AND os.NODE_ID = nn.NODE_ID
3660
						   AND bc.NODE_ID = nn.NODE_ID
3661
						   AND osc.PROD_ID = pv.PV_ID
3662
						   AND NOT pv.IS_PATCH IS NULL
3663
						   AND bc.BOM_ID = CompareBomId	
3664
					   ) oldbom
3665
				 WHERE newbom.PK = oldbom.PK (+) 
3666
				   AND newbom.PROD_ID = oldbom.PROD_ID (+)
3667
				   AND oldbom.PK IS NULL
3668
				UNION 
3669
		  		/* ADDED PATCHES ONLY TO BASE CONFIGURATION */
3670
				SELECT 'A' AS CHANGE_TYPE, newbom.PROD_ID, newbom.PK 
3671
				  FROM (
3672
				  		SELECT bec.PROD_ID,
3673
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK
3674
						  FROM BASE_ENV_CONTENTS bec,
3675
						  	   OS_BASE_ENV obe,
3676
						  	   OPERATING_SYSTEMS os,
3677
							   NETWORK_NODES nn,
3678
							   BOM_CONTENTS bc,
3679
							   PACKAGE_VERSIONS pv
3680
						 WHERE obe.OS_ID = os.OS_ID
3681
						   AND bec.BASE_ENV_ID = obe.BASE_ENV_ID
3682
						   AND os.NODE_ID = nn.NODE_ID
3683
						   AND bc.NODE_ID = nn.NODE_ID
3684
						   AND bec.PROD_ID = pv.PV_ID
3685
						   AND NOT pv.IS_PATCH IS NULL
3686
						   AND bc.BOM_ID = nBomId	
3687
				  	   ) newbom,
3688
					   (
3689
					   	SELECT bec.PROD_ID,
3690
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK
3691
						  FROM BASE_ENV_CONTENTS bec,
3692
						  	   OS_BASE_ENV obe,
3693
						  	   OPERATING_SYSTEMS os,
3694
							   NETWORK_NODES nn,
3695
							   BOM_CONTENTS bc,
3696
							   PACKAGE_VERSIONS pv
3697
						 WHERE obe.OS_ID = os.OS_ID
3698
						   AND bec.BASE_ENV_ID = obe.BASE_ENV_ID
3699
						   AND os.NODE_ID = nn.NODE_ID
3700
						   AND bc.NODE_ID = nn.NODE_ID
3701
						   AND bec.PROD_ID = pv.PV_ID
3702
						   AND NOT pv.IS_PATCH IS NULL
3703
						   AND bc.BOM_ID = CompareBomId	
3704
					   ) oldbom
3705
				 WHERE newbom.PK = oldbom.PK (+) 
3706
				   AND newbom.PROD_ID = oldbom.PROD_ID (+)
3707
				   AND oldbom.PK IS NULL
3708
				UNION				
3709
 
3710
				/* ADDED PRODUCTS ONLY */
3711
				SELECT DECODE( oldbom.PROD_ID,
3712
							   NULL, 'A', 'U' ) AS CHANGE_TYPE, 
3713
					   newbom.PROD_ID, newbom.PK
3714
				  FROM (
3715
				  		SELECT osc.PROD_ID,
3716
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK,
3717
							   pv.PKG_ID,
3718
							   NVL( pv.V_EXT, '|LINK_A_NULL|' ) AS V_EXT
3719
						  FROM OS_CONTENTS osc,
3720
						  	   OPERATING_SYSTEMS os,
3721
							   NETWORK_NODES nn,
3722
							   BOM_CONTENTS bc,
3723
							   PACKAGE_VERSIONS pv
3724
						 WHERE osc.OS_ID = os.OS_ID
3725
						   AND os.NODE_ID = nn.NODE_ID
3726
						   AND bc.NODE_ID = nn.NODE_ID
3727
						   AND osc.PROD_ID = pv.PV_ID
3728
						   AND pv.IS_PATCH IS NULL
3729
						   AND bc.BOM_ID = nBomId	
3730
				  	   ) newbom,
3731
					   (
3732
					   	SELECT osc.PROD_ID,
3733
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK,
3734
							   pv.PKG_ID,
3735
							   NVL( pv.V_EXT, '|LINK_A_NULL|' ) AS V_EXT
3736
						  FROM OS_CONTENTS osc,
3737
						  	   OPERATING_SYSTEMS os,
3738
							   NETWORK_NODES nn,
3739
							   BOM_CONTENTS bc,
3740
							   PACKAGE_VERSIONS pv
3741
						 WHERE osc.OS_ID = os.OS_ID
3742
						   AND os.NODE_ID = nn.NODE_ID
3743
						   AND bc.NODE_ID = nn.NODE_ID
3744
						   AND osc.PROD_ID = pv.PV_ID
3745
						   AND pv.IS_PATCH IS NULL
3746
						   AND bc.BOM_ID = CompareBomId	
3747
					   ) oldbom
3748
				 WHERE newbom.PK = oldbom.PK (+) 
3749
				   --AND newbom.PROD_ID = oldbom.PROD_ID (+)
3750
				   AND newbom.PKG_ID  = oldbom.PKG_ID (+)
3751
				   AND newbom.V_EXT  = oldbom.V_EXT (+) 
3752
				   AND ( oldbom.PROD_ID != newbom.PROD_ID  OR oldbom.PROD_ID IS NULL )	   
3753
				UNION
3754
 
3755
				/* ADDED PRODUCTS ONLY TO BASE CONFIGURATION */
3756
				SELECT DECODE( oldbom.PROD_ID,
3757
							   NULL, 'A', 'U' ) AS CHANGE_TYPE, 
3758
					   newbom.PROD_ID, newbom.PK
3759
				  FROM (
3760
				  		SELECT bec.PROD_ID,
3761
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK,
3762
							   pv.PKG_ID,
3763
							   NVL( pv.V_EXT, '|LINK_A_NULL|' ) AS V_EXT
3764
						  FROM BASE_ENV_CONTENTS bec,
3765
						  	   OS_BASE_ENV obe,
3766
						  	   OPERATING_SYSTEMS os,
3767
							   NETWORK_NODES nn,
3768
							   BOM_CONTENTS bc,
3769
							   PACKAGE_VERSIONS pv
3770
						 WHERE obe.OS_ID = os.OS_ID
3771
						   AND bec.BASE_ENV_ID = obe.BASE_ENV_ID
3772
						   AND os.NODE_ID = nn.NODE_ID
3773
						   AND bc.NODE_ID = nn.NODE_ID
3774
						   AND bec.PROD_ID = pv.PV_ID
3775
						   AND pv.IS_PATCH IS NULL
3776
						   AND bc.BOM_ID = nBomId	
3777
				  	   ) newbom,
3778
					   (
3779
					   	SELECT bec.PROD_ID,
3780
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK,
3781
							   pv.PKG_ID,
3782
							   NVL( pv.V_EXT, '|LINK_A_NULL|' ) AS V_EXT
3783
						  FROM BASE_ENV_CONTENTS bec,
3784
						  	   OS_BASE_ENV obe,
3785
						  	   OPERATING_SYSTEMS os,
3786
							   NETWORK_NODES nn,
3787
							   BOM_CONTENTS bc,
3788
							   PACKAGE_VERSIONS pv
3789
						 WHERE obe.OS_ID = os.OS_ID
3790
						   AND bec.BASE_ENV_ID = obe.BASE_ENV_ID
3791
						   AND os.NODE_ID = nn.NODE_ID
3792
						   AND bc.NODE_ID = nn.NODE_ID
3793
						   AND bec.PROD_ID = pv.PV_ID
3794
						   AND pv.IS_PATCH IS NULL
3795
						   AND bc.BOM_ID = CompareBomId	
3796
					   ) oldbom
3797
				 WHERE newbom.PK = oldbom.PK (+) 
3798
				   --AND newbom.PROD_ID = oldbom.PROD_ID (+)
3799
				   AND newbom.PKG_ID  = oldbom.PKG_ID (+)
3800
				   AND newbom.V_EXT  = oldbom.V_EXT (+) 
3801
				   AND ( oldbom.PROD_ID != newbom.PROD_ID  OR oldbom.PROD_ID IS NULL )	   
3802
				UNION
3803
 
3804
				/* REMOVED PRODUCTS ONLY*/    
3805
				SELECT 'R' AS CHANGE_TYPE, oldbom.PROD_ID, oldbom.PK
3806
				  FROM (
3807
				  		SELECT osc.PROD_ID,
3808
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK,
3809
							   pv.PKG_ID,
3810
							   NVL( pv.V_EXT, '|LINK_A_NULL|' ) AS V_EXT
3811
						  FROM OS_CONTENTS osc,
3812
						  	   OPERATING_SYSTEMS os,
3813
							   NETWORK_NODES nn,
3814
							   BOM_CONTENTS bc,
3815
							   PACKAGE_VERSIONS pv
3816
						 WHERE osc.OS_ID = os.OS_ID
3817
						   AND os.NODE_ID = nn.NODE_ID
3818
						   AND bc.NODE_ID = nn.NODE_ID
3819
						   AND osc.PROD_ID = pv.PV_ID
3820
						   AND pv.IS_PATCH IS NULL
3821
						   AND bc.BOM_ID = nBomId	
3822
				  	   ) newbom,
3823
					   (
3824
					   	SELECT osc.PROD_ID,
3825
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK,
3826
							   pv.PKG_ID,
3827
							   NVL( pv.V_EXT, '|LINK_A_NULL|' ) AS V_EXT
3828
						  FROM OS_CONTENTS osc,
3829
						  	   OPERATING_SYSTEMS os,
3830
							   NETWORK_NODES nn,
3831
							   BOM_CONTENTS bc,
3832
							   PACKAGE_VERSIONS pv
3833
						 WHERE osc.OS_ID = os.OS_ID
3834
						   AND os.NODE_ID = nn.NODE_ID
3835
						   AND bc.NODE_ID = nn.NODE_ID
3836
						   AND osc.PROD_ID = pv.PV_ID
3837
						   AND pv.IS_PATCH IS NULL
3838
						   AND bc.BOM_ID = CompareBomId	
3839
					   ) oldbom
3840
				 WHERE newbom.PK (+) = oldbom.PK  
3841
				   --AND newbom.PROD_ID (+) = oldbom.PROD_ID
3842
				   AND newbom.PKG_ID (+) = oldbom.PKG_ID
3843
				   AND newbom.V_EXT (+) = oldbom.V_EXT   
3844
				   AND newbom.PK IS NULL  
3845
				UNION   
3846
				/* REMOVED PATCHES */    
3847
				SELECT 'R' AS CHANGE_TYPE, oldbom.PROD_ID, oldbom.PK
3848
				  FROM (
3849
				  		SELECT osc.PROD_ID,
3850
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK
3851
						  FROM OS_CONTENTS osc,
3852
						  	   OPERATING_SYSTEMS os,
3853
							   NETWORK_NODES nn,
3854
							   BOM_CONTENTS bc,
3855
							   PACKAGE_VERSIONS pv
3856
						 WHERE osc.OS_ID = os.OS_ID
3857
						   AND os.NODE_ID = nn.NODE_ID
3858
						   AND bc.NODE_ID = nn.NODE_ID
3859
						   AND osc.PROD_ID = pv.PV_ID
3860
						   AND NOT pv.IS_PATCH IS NULL
3861
						   AND bc.BOM_ID = nBomId	
3862
				  	   ) newbom,
3863
					   (
3864
					   	SELECT osc.PROD_ID,
3865
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK
3866
						  FROM OS_CONTENTS osc,
3867
						  	   OPERATING_SYSTEMS os,
3868
							   NETWORK_NODES nn,
3869
							   BOM_CONTENTS bc,
3870
							   PACKAGE_VERSIONS pv
3871
						 WHERE osc.OS_ID = os.OS_ID
3872
						   AND os.NODE_ID = nn.NODE_ID
3873
						   AND bc.NODE_ID = nn.NODE_ID
3874
						   AND osc.PROD_ID = pv.PV_ID
3875
						   AND NOT pv.IS_PATCH IS NULL
3876
						   AND bc.BOM_ID = CompareBomId	
3877
					   ) oldbom
3878
				 WHERE newbom.PK (+) = oldbom.PK  
3879
				   AND newbom.PROD_ID (+) = oldbom.PROD_ID  
3880
				   AND newbom.PK IS NULL 
3881
				   UNION
3882
				/* REMOVED PRODUCTS ONLY FROM BASE CONFIGURATION*/    
3883
				SELECT 'R' AS CHANGE_TYPE, oldbom.PROD_ID, oldbom.PK
3884
				  FROM (
3885
				  		SELECT bec.PROD_ID,
3886
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK,
3887
							   pv.PKG_ID,
3888
							   NVL( pv.V_EXT, '|LINK_A_NULL|' ) AS V_EXT
3889
						  FROM BASE_ENV_CONTENTS bec,
3890
						  	   OS_BASE_ENV obe,
3891
						  	   OPERATING_SYSTEMS os,
3892
							   NETWORK_NODES nn,
3893
							   BOM_CONTENTS bc,
3894
							   PACKAGE_VERSIONS pv
3895
						 WHERE obe.OS_ID = os.OS_ID
3896
						   AND bec.BASE_ENV_ID = obe.BASE_ENV_ID
3897
						   AND os.NODE_ID = nn.NODE_ID
3898
						   AND bc.NODE_ID = nn.NODE_ID
3899
						   AND bec.PROD_ID = pv.PV_ID
3900
						   AND pv.IS_PATCH IS NULL
3901
						   AND bc.BOM_ID = nBomId	
3902
				  	   ) newbom,
3903
					   (
3904
					   	SELECT bec.PROD_ID,
3905
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK,
3906
							   pv.PKG_ID,
3907
							   NVL( pv.V_EXT, '|LINK_A_NULL|' ) AS V_EXT
3908
						  FROM BASE_ENV_CONTENTS bec,
3909
						  	   OS_BASE_ENV obe,
3910
						  	   OPERATING_SYSTEMS os,
3911
							   NETWORK_NODES nn,
3912
							   BOM_CONTENTS bc,
3913
							   PACKAGE_VERSIONS pv
3914
						 WHERE obe.OS_ID = os.OS_ID
3915
						   AND bec.BASE_ENV_ID = obe.BASE_ENV_ID 
3916
						   AND os.NODE_ID = nn.NODE_ID
3917
						   AND bc.NODE_ID = nn.NODE_ID
3918
						   AND bec.PROD_ID = pv.PV_ID
3919
						   AND pv.IS_PATCH IS NULL
3920
						   AND bc.BOM_ID = CompareBomId	
3921
					   ) oldbom
3922
				 WHERE newbom.PK (+) = oldbom.PK  
3923
				   --AND newbom.PROD_ID (+) = oldbom.PROD_ID
3924
				   AND newbom.PKG_ID (+) = oldbom.PKG_ID
3925
				   AND newbom.V_EXT (+) = oldbom.V_EXT   
3926
				   AND newbom.PK IS NULL  
3927
				UNION   
3928
				/* REMOVED PATCHES FROM BASE CONFIGURATION*/    
3929
				SELECT 'R' AS CHANGE_TYPE, oldbom.PROD_ID, oldbom.PK
3930
				  FROM (
3931
				  		SELECT bec.PROD_ID,
3932
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK
3933
						  FROM BASE_ENV_CONTENTS bec,
3934
						  	   OS_BASE_ENV obe,
3935
						  	   OPERATING_SYSTEMS os,
3936
							   NETWORK_NODES nn,
3937
							   BOM_CONTENTS bc,
3938
							   PACKAGE_VERSIONS pv
3939
						 WHERE obe.OS_ID = os.OS_ID
3940
						   AND bec.BASE_ENV_ID = obe.BASE_ENV_ID
3941
						   AND os.NODE_ID = nn.NODE_ID
3942
						   AND bc.NODE_ID = nn.NODE_ID
3943
						   AND bec.PROD_ID = pv.PV_ID
3944
						   AND NOT pv.IS_PATCH IS NULL
3945
						   AND bc.BOM_ID = nBomId	
3946
				  	   ) newbom,
3947
					   (
3948
					   	SELECT bec.PROD_ID,
3949
							   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK
3950
						  FROM BASE_ENV_CONTENTS bec,
3951
						  	   OS_BASE_ENV obe,
3952
						  	   OPERATING_SYSTEMS os,
3953
							   NETWORK_NODES nn,
3954
							   BOM_CONTENTS bc,
3955
							   PACKAGE_VERSIONS pv
3956
						 WHERE obe.OS_ID = os.OS_ID
3957
						   AND bec.BASE_ENV_ID = obe.BASE_ENV_ID
3958
						   AND os.NODE_ID = nn.NODE_ID
3959
						   AND bc.NODE_ID = nn.NODE_ID
3960
						   AND bec.PROD_ID = pv.PV_ID
3961
						   AND NOT pv.IS_PATCH IS NULL
3962
						   AND bc.BOM_ID = CompareBomId	
3963
					   ) oldbom
3964
				 WHERE newbom.PK (+) = oldbom.PK  
3965
				   AND newbom.PROD_ID (+) = oldbom.PROD_ID  
3966
				   AND newbom.PK IS NULL				    	
3967
 
3968
		       ) qry,
3969
			   (
3970
 
3971
		  		SELECT nn.NODE_ID,
3972
					   nn.NODE_NAME,
3973
					   nn.NODE_NAME ||'_'|| os.OS_NAME AS PK
3974
				  FROM OPERATING_SYSTEMS os,
3975
					   NETWORK_NODES nn,
3976
					   BOM_CONTENTS bc
3977
				 WHERE os.NODE_ID = nn.NODE_ID
3978
				   AND bc.NODE_ID = nn.NODE_ID
3979
				   AND bc.BOM_ID = nBomId
3980
 
3981
		  	   ) nlook,
3982
			   (
3983
 
3984
				SELECT nn.NODE_NAME, 
3985
					   MAX(nn.NODE_LIFE_CYCLE) AS LAST_LIFE_CYCLE
3986
				  FROM BOMS bo,
3987
				  	   BOM_CONTENTS bc,
3988
					   BRANCHES br,
3989
					   NETWORK_NODES nn
3990
				 WHERE bc.BOM_ID = bo.BOM_ID
3991
				   AND bo.BRANCH_ID = br.BRANCH_ID
3992
				   AND bc.NODE_ID = nn.NODE_ID
3993
				   AND br.PROJ_ID = ProjId
3994
		  	     GROUP BY nn.NODE_NAME
3995
 
3996
			   ) nlc
3997
		 WHERE nlook.PK = qry.PK 
3998
		   AND nlc.NODE_NAME = nlook.NODE_NAME;
3999
	recUpdateNode curUpdateNode%ROWTYPE;
4000
 
4001
 
4002
 
4003
BEGIN
4004
	/*--------------- Business Rules Here -------------------*/
4005
	/*-------------------------------------------------------*/
4006
 
4007
	-- Get some BOM details
4008
	SELECT bo.PARENT_BOM_ID, br.PROJ_ID, bo.BOM_VERSION ||'.'|| bo.BOM_LIFECYCLE INTO CompareBomId, ProjId, BomVersion
4009
	  FROM BOMS bo,
4010
	  	   BRANCHES br
4011
	 WHERE bo.BOM_ID = nBomId
4012
	   AND bo.BRANCH_ID = br.BRANCH_ID;
4013
 
4014
 
4015
	-- Update node version
4016
	OPEN curUpdateNode;
4017
	FETCH curUpdateNode INTO recUpdateNode;
4018
 
4019
	WHILE curUpdateNode%FOUND
4020
	LOOP
4021
 
4022
		UPDATE NETWORK_NODES nn SET
4023
			nn.NODE_VERSION = BomVersion,
4024
			nn.NODE_LIFE_CYCLE = recUpdateNode.NEW_LIFE_CYCLE
4025
		 WHERE nn.NODE_ID = recUpdateNode.NODE_ID;
4026
 
4027
		FETCH curUpdateNode INTO recUpdateNode;
4028
	END LOOP;
4029
 
4030
 
4031
	CLOSE curUpdateNode;	
4032
 
4033
END	Update_Nodes_Version;
4034
/*--------------------------------------------------------------------------------------------------*/
4035
PROCEDURE Destroy_Bom ( nBomId IN VARCHAR2 ) IS
4036
 
4037
rowCount NUMBER;
4038
nIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();
4039
nBomIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();
4040
 
4041
BEGIN
4042
	/*--------------- Business Rules Here -------------------*/
4043
	IF (nBomId IS NULL) 
4044
	THEN
4045
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nBomId= '|| nBomId );
4046
 
4047
	END IF;
4048
 
4049
	-- Check Requirements
4050
	pk_Requirements.Destroy_Bom ( nBomId );
4051
 
4052
	/*-------------------------------------------------------*/
4053
 
4054
 
4055
 
4056
	-- Load Collector
4057
	nBomIdCollector := IN_LIST_NUMBER( nBomId );
4058
 
4059
 
4060
	-- Destroy BASE_ENV
4061
	nIdCollector := NULL;
4062
	SELECT CAST ( MULTISET ( SELECT be.BASE_ENV_ID
4063
	  	   		  		   	   FROM BASE_ENV be
4064
	 						  WHERE be.BOM_ID IN   ( 
4065
								  	  		  	      SELECT * 
4066
													  FROM THE ( SELECT CAST( nBomIdCollector AS DEPMGR_NUMBER_TAB_t ) FROM dual )  
4067
												 	) 
4068
						    ) AS DEPMGR_NUMBER_TAB_t ) INTO nIdCollector FROM DUAL;
4069
 
4070
	Destroy_BaseEnv ( nIdCollector );
4071
 
4072
 
4073
 
4074
	-- Destroy NETWORK_NODES
4075
	nIdCollector := NULL;
4076
	SELECT CAST ( MULTISET ( SELECT bc.NODE_ID
4077
	  	   		  		   	   FROM BOM_CONTENTS bc
4078
	 						  WHERE bc.BOM_ID IN   ( 
4079
								  	  		  	      SELECT * 
4080
													  FROM THE ( SELECT CAST( nBomIdCollector AS DEPMGR_NUMBER_TAB_t ) FROM dual )  
4081
												 	) 
4082
						    ) AS DEPMGR_NUMBER_TAB_t ) INTO nIdCollector FROM DUAL;
4083
 
4084
	pk_Network_Node.Destroy_Node ( nIdCollector, 0 );
4085
 
4086
 
4087
 
4088
	-- Destroy HARDWARE
4089
	nIdCollector := NULL;
4090
	SELECT CAST ( MULTISET ( SELECT hr.HARDWARE_NAME_ID
4091
	  	   		  		   	   FROM HARDWARE hr
4092
	 						  WHERE hr.BOM_ID IN   ( 
4093
								  	  		  	      SELECT * 
4094
													  FROM THE ( SELECT CAST( nBomIdCollector AS DEPMGR_NUMBER_TAB_t ) FROM dual )  
4095
												 	)
4096
							) AS DEPMGR_NUMBER_TAB_t ) INTO nIdCollector FROM DUAL;
4097
 
4098
	Destroy_Hardware ( nIdCollector );
4099
 
4100
 
4101
 
4102
	-- Destroy BOM_STATE
4103
	DELETE 
4104
	  FROM BOM_STATE bs
4105
	 WHERE bs.BOM_ID IN ( 
4106
	  	  		  	      SELECT * 
4107
						  FROM THE ( SELECT CAST( nBomIdCollector AS DEPMGR_NUMBER_TAB_t ) FROM dual )  
4108
					 	);
4109
 
4110
 
4111
	-- Destroy BOM_TRAIL
4112
	DELETE 
4113
	  FROM BOM_TRAIL bt
4114
	 WHERE bt.BOM_ID IN ( 
4115
	  	  		  	      SELECT * 
4116
						  FROM THE ( SELECT CAST( nBomIdCollector AS DEPMGR_NUMBER_TAB_t ) FROM dual )  
4117
					 	); 
4118
 
4119
 
4120
	---- Finnaly Destroy BOM ----
4121
	DELETE 
4122
	  FROM BOMS bo
4123
	 WHERE bo.BOM_ID IN ( 
4124
	  	  		  	      SELECT * 
4125
						  FROM THE ( SELECT CAST( nBomIdCollector AS DEPMGR_NUMBER_TAB_t ) FROM dual )  
4126
					 	);
4127
 
4128
 
4129
 
4130
END	Destroy_Bom;
4131
/*--------------------------------------------------------------------------------------------------*/
4132
PROCEDURE Destroy_BaseEnv ( nBaseEndIdCollector IN DEPMGR_NUMBER_TAB_t ) IS
4133
 
4134
 
4135
BEGIN
4136
	/*--------------- Business Rules Here -------------------*/
4137
	/*-------------------------------------------------------*/
4138
 
4139
	-- Destroy BASE_ENV_CONTENTS
4140
	DELETE
4141
	  FROM BASE_ENV_CONTENTS bec
4142
	 WHERE bec.BASE_ENV_ID IN ( SELECT * FROM TABLE ( CAST ( nBaseEndIdCollector AS DEPMGR_NUMBER_TAB_t ) ) );
4143
 
4144
	-- Destroy OS_BASE_ENV
4145
	DELETE
4146
	  FROM OS_BASE_ENV obe
4147
	 WHERE obe.BASE_ENV_ID IN ( SELECT * FROM TABLE ( CAST ( nBaseEndIdCollector AS DEPMGR_NUMBER_TAB_t ) ) );
4148
 
4149
	 -- Destroy BASE_ENV
4150
	DELETE
4151
	  FROM BASE_ENV be
4152
	 WHERE be.BASE_ENV_ID IN ( SELECT * FROM TABLE ( CAST ( nBaseEndIdCollector AS DEPMGR_NUMBER_TAB_t ) ) );
4153
 
4154
 
4155
END	Destroy_BaseEnv;
4156
/*--------------------------------------------------------------------------------------------------*/
4157
PROCEDURE Destroy_Hardware ( nHardwareNameIdCollector IN DEPMGR_NUMBER_TAB_t ) IS
4158
 
4159
nIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();
4160
 
4161
BEGIN
4162
	/*--------------- Business Rules Here -------------------*/
4163
	/*-------------------------------------------------------*/
4164
 
4165
    -- Destroy NETWORK_NODES
4166
    nIdCollector := NULL;
4167
    SELECT CAST ( MULTISET ( SELECT hn.NODE_ID
4168
	  	   		  		   	   FROM HARDWARE_NODE hn
4169
	 						  WHERE hn.HARDWARE_NAME_ID IN ( SELECT * FROM TABLE ( CAST ( nHardwareNameIdCollector AS DEPMGR_NUMBER_TAB_t ) ) ) 
4170
						   ) AS DEPMGR_NUMBER_TAB_t ) INTO nIdCollector FROM DUAL;
4171
 
4172
    pk_Network_Node.Destroy_Node ( nIdCollector, 0 );
4173
 
4174
 
4175
	-- Finnaly Destroy HARDWARE
4176
	DELETE
4177
	  FROM HARDWARE hd
4178
	 WHERE hd.HARDWARE_NAME_ID IN ( SELECT * FROM TABLE ( CAST ( nHardwareNameIdCollector AS DEPMGR_NUMBER_TAB_t ) ) );
4179
 
4180
END	Destroy_Hardware;
4181
/*--------------------------------------------------------------------------------------------------*/
4182
PROCEDURE Get_Next_Version (nFromBomId IN BOMS.BOM_ID%TYPE,
4183
							nToBranchId IN BOMS.BRANCH_ID%TYPE,
4184
							sNextVersion OUT BOMS.BOM_VERSION%TYPE,
4185
							sNextLifeCycle OUT BOMS.BOM_LIFECYCLE%TYPE,
4186
							nParentBomId IN OUT BOMS.PARENT_BOM_ID%TYPE,
4187
							nBomNameId IN BOMS.BOM_NAME_ID%TYPE ) IS
4188
 
4189
IsNotHead NUMBER;
4190
FromBranch NUMBER;
4191
LastRootVersion NUMBER;
4192
LastVersion BOMS.BOM_VERSION%TYPE;
4193
 
4194
CURSOR curBoms IS
4195
	SELECT Max ( CAST ( bo.BOM_VERSION AS NUMBER  ) ) AS LAST_VERSION
4196
		  FROM BOMS bo,
4197
		  	   BRANCHES br
4198
		 WHERE bo.BRANCH_ID = br.BRANCH_ID
4199
		   AND br.PROJ_ID IN ( SELECT br.PROJ_ID  FROM BRANCHES br  WHERE br.BRANCH_ID = nToBranchId )	
4200
		   AND bo.BOM_NAME_ID = nBomNameId;
4201
recBoms curBoms%ROWTYPE;
4202
 
4203
 
4204
BEGIN
4205
 
4206
	/*--------------- Business Rules Here -------------------*/
4207
	/*-------------------------------------------------------*/
4208
	-- Get Last Root Version
4209
 
4210
	OPEN curBoms;
4211
	FETCH curBoms INTO recBoms;	
4212
	LastRootVersion := recBoms.LAST_VERSION;
4213
	CLOSE curBoms;
4214
 
4215
 
4216
 
4217
 
4218
 
4219
	IF nFromBomId IS NULL THEN
4220
		/* Blank BOM Required */
4221
 
4222
		-- Get Next Available Version
4223
		sNextVersion := '1';
4224
		sNextLifeCycle := '0';
4225
		IF LastRootVersion IS NOT NULL THEN
4226
			sNextVersion := CAST( LastRootVersion + 1 AS VARCHAR2 );
4227
		END IF;
4228
 
4229
 
4230
 
4231
	ELSE
4232
		/* Create Bom From ... */
4233
 
4234
		-- Check if BOM is comming from different Iteration
4235
		SELECT bo.BRANCH_ID INTO FromBranch
4236
		  FROM BOMS bo
4237
		 WHERE bo.BOM_ID = nFromBomId; 
4238
 
4239
 
4240
 
4241
		IF FromBranch = nToBranchId THEN
4242
			/* Bom is comming from same Iteration */
4243
			/* i.e. Continue on same version stream. */
4244
 
4245
			-- Set parent_id
4246
			nParentBomId := nFromBomId;
4247
 
4248
 
4249
			-- Get Last Version 
4250
			SELECT bo.BOM_VERSION INTO LastVersion
4251
			  FROM BOMS bo
4252
			 WHERE bo.BOM_ID = nFromBomId;
4253
 
4254
 
4255
			-- Check if Bom is Head (i.e. Last on its branch )
4256
			SELECT COUNT(*) INTO IsNotHead
4257
			  FROM BOMS bo,
4258
			  	   BRANCHES br
4259
			 WHERE bo.BRANCH_ID = br.BRANCH_ID
4260
			   AND br.PROJ_ID IN ( SELECT br.PROJ_ID FROM BRANCHES br WHERE br.BRANCH_ID = FromBranch )
4261
			   AND bo.PARENT_BOM_ID = nFromBomId
4262
			   AND bo.BOM_VERSION = LastVersion
4263
			   AND bo.BOM_ID != bo.PARENT_BOM_ID;
4264
 
4265
 
4266
			IF IsNotHead = 0 THEN
4267
				/* Bom IS Head (i.e. Last on its branch ) */
4268
 
4269
				-- Get Bom Version and LifeCycle
4270
				SELECT bo.BOM_VERSION, bo.BOM_LIFECYCLE INTO sNextVersion, sNextLifeCycle
4271
				  FROM BOMS bo
4272
				 WHERE bo.BOM_ID = nFromBomId;
4273
 
4274
				-- Increase Lifecycle
4275
				sNextLifeCycle := CAST (  ( CAST( sNextLifeCycle AS NUMBER ) + 1 )  AS VARCHAR2 );
4276
 
4277
 
4278
			ELSE
4279
				/* Bom IS NOT Head */
4280
 
4281
				-- Get Bom Version and LifeCycle
4282
				SELECT bo.BOM_VERSION, bo.BOM_LIFECYCLE INTO sNextVersion, sNextLifeCycle
4283
				  FROM BOMS bo
4284
				 WHERE bo.BOM_ID = nFromBomId;
4285
 
4286
				-- Branch Bom Version 
4287
				sNextVersion := sNextVersion ||'.'|| sNextLifeCycle;
4288
 
4289
				-- Reset Lifecycle to 1
4290
				sNextLifeCycle := '1';
4291
 
4292
			END IF;	
4293
 
4294
 
4295
		ELSE
4296
			/* BOM is comming from Different Iteration */
4297
			/* i.e. Start new version stream. */
4298
 
4299
			-- Get Next Available Version
4300
			sNextVersion := '1';
4301
			sNextLifeCycle := '0';
4302
			IF LastRootVersion IS NOT NULL THEN
4303
				sNextVersion := CAST( LastRootVersion + 1 AS VARCHAR2 );
4304
			END IF;
4305
 
4306
		END IF;
4307
 
4308
 
4309
	END IF;
4310
 
4311
 
4312
END	Get_Next_Version;
4313
/*--------------------------------------------------------------------------------------------------*/
4314
PROCEDURE Release_To ( nBomId IN BOM_STATE.BOM_ID%TYPE,
4315
					   nUserId IN BOM_STATE.USER_ID%TYPE,
4316
					   nToState IN BOM_STATE.STATE_ID%TYPE DEFAULT NULL,
4317
					   sComments IN BOM_TRAIL.TRAIL_COMMENTS%TYPE DEFAULT NULL ) IS
4318
 
4319
rowCount NUMBER;	
4320
IsOfficial BOMS.IS_READONLY%TYPE;					 
4321
StateId BOM_STATE.STATE_ID%TYPE;
4322
StateName STATES.STATE_NAME%TYPE;
4323
 
4324
BEGIN
4325
	/*--------------- Business Rules Here -------------------*/
4326
	-- Check if already released
4327
	SELECT Count(*) INTO rowCount
4328
	  FROM BOM_STATE bs
4329
	 WHERE bs.BOM_ID = nBomId
4330
	   AND bs.STATE_ID = nToState;
4331
 
4332
	IF rowCount > 0 THEN
4333
	   RAISE_APPLICATION_ERROR (-20000, 'This BOM is already release' );
4334
	END IF;
4335
 
4336
 
4337
	-- Check if Bom is official
4338
	SELECT bo.IS_READONLY INTO IsOfficial
4339
	  FROM BOMS bo
4340
	 WHERE bo.BOM_ID = nBomId;
4341
 
4342
	IF (IsOfficial != 'Y') AND (nToState IS NOT NULL) THEN
4343
		RAISE_APPLICATION_ERROR (-20000, 'BOM must be locked first' );
4344
	END IF;
4345
	/*-------------------------------------------------------*/
4346
 
4347
 
4348
	-- Get State --
4349
	StateId := nToState;
4350
	IF StateId IS NULL THEN
4351
		-- If state_id is null it is considered as state_type_enum = 'BOM Creator'
4352
		SELECT st.STATE_ID INTO StateId
4353
		  FROM BOMS bo,
4354
		  	   BRANCHES br,
4355
			   DM_PROJECTS proj,
4356
			   STATES st
4357
		 WHERE bo.BRANCH_ID = br.BRANCH_ID
4358
		   AND br.PROJ_ID = proj.PROJ_ID
4359
		   AND st.PROJ_ID = proj.PROJ_ID
4360
		   AND bo.BOM_ID = nBomId
4361
		   AND st.STATE_TYPE_ENUM = GET_SYSTEM_VALUE('enumSTATE_TYPE_CREATOR');	
4362
	END IF;
4363
 
4364
 
4365
	-- Add Bom to State --
4366
	INSERT INTO BOM_STATE (BOM_ID, STATE_ID, DATE_STAMP, IS_DISPLAYED, USER_ID )
4367
	VALUES( nBomId,
4368
			StateId,
4369
			GET_DATE(),
4370
			'Y',
4371
			nUserId );
4372
 
4373
 
4374
 
4375
	-- Auto-Hide Bom
4376
	pk_State.Auto_Hide ( StateId, nBomId, GET_SYSTEM_VALUE('enumEVENT_ON_RELEASE_TO') );
4377
 
4378
 
4379
	/* Log BOM_TRAIL */
4380
	-- Get State Name --
4381
	SELECT st.STATE_NAME INTO StateName
4382
	  FROM STATES st
4383
	 WHERE st.STATE_ID = StateId;
4384
 
4385
	-- Log Action 
4386
	pk_Bom.Log_Bom_Trail ( nBomId, 'RELEASED TO: '|| StateName, nUserId, sComments );
4387
 
4388
 
4389
END	Release_To;
4390
/*--------------------------------------------------------------------------------------------------*/
4391
PROCEDURE Accept_Reject_Comments ( nBomId IN BOMS.BOM_ID%TYPE,
4392
		  						   nRejectSeq IN REJECTION_TRAIL.REJECT_SEQ%TYPE,
4393
						  	   	   sComments IN REJECTION_TRAIL.COMMENTS%TYPE DEFAULT NULL,
4394
						       	   nUserId IN REJECTION_TRAIL.USER_ID%TYPE ) IS
4395
 
4396
IsRejected REJECTION_TRAIL.IS_REJECTED%TYPE;
4397
 
4398
BEGIN
4399
	/*--------------- Business Rules Here -------------------*/
4400
	IF (nBomId IS NULL)
4401
	THEN
4402
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nBomId= '|| nBomId  );
4403
	END IF;
4404
	/*-------------------------------------------------------*/
4405
 
4406
	IF nRejectSeq IS NULL THEN
4407
		/* CREATE New Note */
4408
 
4409
		-- Get last IsRejected state
4410
		SELECT rt.IS_REJECTED INTO IsRejected
4411
		  FROM REJECTION_TRAIL rt
4412
		 WHERE rt.ENTITY_ID = nBomId
4413
		   AND rt.ENUM_ENTITY_TYPE = GET_SYSTEM_VALUE('enumENTITY_TYPE_BOM')
4414
		   AND ROWNUM = 1
4415
		 ORDER BY rt.REJECT_SEQ;
4416
 
4417
 
4418
		/* Log Rejection Trail */
4419
		pk_Utils.Log_Rejection_Trail ( GET_SYSTEM_VALUE('enumENTITY_TYPE_BOM'), nBomId, IsRejected, nUserId, sComments );
4420
 
4421
 
4422
	ELSE
4423
		/* EDIT Note */
4424
		UPDATE REJECTION_TRAIL rt SET
4425
			rt.COMMENTS = sComments,
4426
			rt.USER_ID = nUserId,
4427
			rt.DATE_TIME_STAMP = GET_DATETIME()
4428
		WHERE rt.ENUM_ENTITY_TYPE = GET_SYSTEM_VALUE('enumENTITY_TYPE_BOM')
4429
		  AND rt.ENTITY_ID = nBomId
4430
		  AND rt.REJECT_SEQ = nRejectSeq;
4431
 
4432
 
4433
	END IF;
4434
 
4435
 
4436
END	Accept_Reject_Comments;
4437
/*--------------------------------------------------------------------------------------------------*/
4438
PROCEDURE Log_Bom_Trail ( nBomId IN BOM_TRAIL.BOM_ID%TYPE,
4439
						  sAction IN BOM_TRAIL.TRAIL_ACTION%TYPE,
4440
						  nUserId IN BOM_TRAIL.USER_ID%TYPE,
4441
						  sComments IN BOM_TRAIL.TRAIL_COMMENTS%TYPE DEFAULT NULL  ) IS
4442
 
4443
 
4444
BEGIN
4445
	/*--------------- Business Rules Here -------------------*/
4446
	IF (nBomId IS NULL) OR (sAction IS NULL) OR (nUserId IS NULL)
4447
	THEN
4448
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nBomId= '|| nBomId ||', sAction='|| sAction ||', nUserId='|| nUserId );
4449
	END IF;
4450
	/*-------------------------------------------------------*/
4451
 
4452
	INSERT INTO BOM_TRAIL ( BOM_ID, TRAIL_ACTION, TRAIL_COMMENTS, USER_ID, DATE_TIME_STAMP )
4453
	VALUES ( nBomId, sAction, sComments, nUserId, GET_DATETIME() );	
4454
 
4455
END	Log_Bom_Trail;
4456
/*--------------------------------------------------------------------------------------------------*/
4457
PROCEDURE Log_Node_Trail ( nNodeId IN NODE_TRAIL.NODE_ID%TYPE,
4458
						  sAction IN NODE_TRAIL.TRAIL_ACTION%TYPE,
4459
						  nUserId IN NODE_TRAIL.USER_ID%TYPE  ) IS
4460
 
4461
 
4462
BEGIN
4463
	/*--------------- Business Rules Here -------------------*/
4464
	IF (nNodeId IS NULL) OR (sAction IS NULL) OR (nUserId IS NULL)
4465
	THEN
4466
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nNodeId= '|| nNodeId ||', sAction='|| sAction ||', nUserId='|| nUserId );
4467
	END IF;
4468
	/*-------------------------------------------------------*/
4469
 
4470
	INSERT INTO NODE_TRAIL ( NODE_ID, TRAIL_ACTION, USER_ID, DATE_TIME_STAMP )
4471
	VALUES ( nNodeId, sAction, nUserId, GET_DATETIME() );	
4472
 
4473
END	Log_Node_Trail;
4474
/*--------------------------------------------------------------------------------------------------*/
4475
PROCEDURE Log_Os_Trail ( nOsId IN OS_TRAIL.OS_ID%TYPE,
4476
						  sAction IN OS_TRAIL.TRAIL_ACTION%TYPE,
4477
						  nUserId IN OS_TRAIL.USER_ID%TYPE  ) IS
4478
 
4479
 
4480
BEGIN
4481
	/*--------------- Business Rules Here -------------------*/
4482
	IF (nOsId IS NULL) OR (sAction IS NULL) OR (nUserId IS NULL)
4483
	THEN
4484
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nOsId= '|| nOsId ||', sAction='|| sAction ||', nUserId='|| nUserId );
4485
	END IF;
4486
	/*-------------------------------------------------------*/
4487
 
4488
	INSERT INTO OS_TRAIL ( OS_ID, TRAIL_ACTION, USER_ID, DATE_TIME_STAMP )
4489
	VALUES ( nOsId, sAction, nUserId, GET_DATETIME() );	
4490
 
4491
END	Log_Os_Trail;
4492
/*--------------------------------------------------------------------------------------------------*/
4493
 
4494
END pk_Bom_Test;
4495
 
4496
/
4497
 
4498
/
4499
--------------------------------------------------------
4500
--  DDL for Package Body PK_NETWORK_NODE
4501
--------------------------------------------------------
4502
 
4503
  CREATE OR REPLACE PACKAGE BODY "PK_NETWORK_NODE" 
4504
IS
4505
/* ---------------------------------------------------------------------------
4506
    Version: 1.0.0
4507
   --------------------------------------------------------------------------- */
4508
 
4509
/*--------------------------------------------------------------------------------------------------*/
4510
PROCEDURE Add_Node ( sNodeName IN NETWORK_NODES.NODE_NAME%TYPE,
4511
  		   	   	     nNodeTypeId IN NETWORK_NODES.NODE_TYPE_ID%TYPE,
4512
					 sNodeComments IN NETWORK_NODES.NODE_COMMENTS%TYPE,
4513
					 nBomId IN BOM_CONTENTS.BOM_ID%TYPE,
4514
					 nUserId IN NUMBER,
4515
					 sNotXML IN NETWORK_NODES.NOT_XML%TYPE ) IS
4516
 
4517
NodeID NUMBER;
4518
 
4519
CURSOR nn_cur IS -- Check Node Name Duplicates
4520
		SELECT bc.node_id
4521
		  FROM BOM_CONTENTS bc,
4522
		  	   NETWORK_NODES nn
4523
		 WHERE bc.NODE_ID = nn.NODE_ID
4524
		   AND bc.BOM_ID = nBomId 
4525
		   AND UPPER( nn.NODE_NAME ) = UPPER( sNodeName );
4526
nn_rec nn_cur%ROWTYPE;
4527
 
4528
DUPLICATE_NODE_NAME EXCEPTION;
4529
 
4530
BEGIN
4531
	/*--------------- Business Rules Here -------------------*/
4532
	OPEN nn_cur;
4533
    FETCH nn_cur INTO nn_rec;
4534
 
4535
    IF nn_cur%FOUND
4536
    THEN
4537
		RAISE DUPLICATE_NODE_NAME;
4538
	END IF;
4539
 
4540
	CLOSE nn_cur;
4541
	/*-------------------------------------------------------*/
4542
 
4543
 
4544
	-- Get node_id
4545
	SELECT SEQ_NODE_ID.NEXTVAL INTO NodeID FROM DUAL;
4546
 
4547
 
4548
	-- Insert new Network Node			  
4549
	INSERT INTO NETWORK_NODES ( NODE_ID, NODE_TYPE_ID, NODE_NAME, NODE_COMMENTS, NOT_XML )
4550
	VALUES (
4551
			NodeID,
4552
			nNodeTypeId,
4553
			sNodeName,
4554
			sNodeComments,
4555
			sNotXML
4556
			);
4557
 
4558
 
4559
	-- Link Node with the BOM
4560
	INSERT INTO BOM_CONTENTS ( BOM_ID, NODE_ID )
4561
	VALUES (
4562
		    nBomId,
4563
			NodeID
4564
		    );
4565
 
4566
	/* Log BOM_TRAIL */
4567
	pk_Bom.Log_Bom_Trail ( nBomId, 'Added Network Node: '||sNodeName, nUserId );				
4568
 
4569
EXCEPTION
4570
    WHEN DUPLICATE_NODE_NAME
4571
	THEN		
4572
		RAISE_APPLICATION_ERROR (-20000, 'Node Name "'|| sNodeName ||'" is Already Used in this BOM.');
4573
 
4574
END	Add_Node;
4575
/*--------------------------------------------------------------------------------------------------*/
4576
PROCEDURE Update_Node ( nNodeId IN NETWORK_NODES.NODE_ID%TYPE,
4577
						sNodeName IN NETWORK_NODES.NODE_NAME%TYPE,
4578
  		   	   	     	nNodeTypeId IN NETWORK_NODES.NODE_TYPE_ID%TYPE,
4579
					 	sNodeComments IN NETWORK_NODES.NODE_COMMENTS%TYPE,
4580
						nUserId IN NUMBER,
4581
						nLifeCycle IN NUMBER,
4582
						sNotXML IN NETWORK_NODES.NOT_XML%TYPE ) IS
4583
 
4584
BomID NUMBER;
4585
 
4586
CURSOR nn_cur IS -- Check Node Name Duplicates
4587
		SELECT bc.node_id
4588
		  FROM BOM_CONTENTS bc,
4589
		  	   NETWORK_NODES nn
4590
		 WHERE bc.NODE_ID = nn.NODE_ID
4591
		   AND bc.BOM_ID = BomId 
4592
		   AND UPPER( nn.NODE_NAME ) = UPPER( sNodeName )
4593
		   AND nn.NODE_ID != nNodeId;
4594
nn_rec nn_cur%ROWTYPE;
4595
 
4596
DUPLICATE_NODE_NAME EXCEPTION;
4597
 
4598
BEGIN
4599
	/*--------------- Business Rules Here -------------------*/
4600
	-- Check all parameters
4601
	IF (nNodeId IS NULL)  OR  (nNodeTypeId IS NULL) 
4602
	THEN
4603
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nNodeId='|| nNodeId  ||', nNodeTypeId='|| nNodeTypeId  );
4604
 
4605
	END IF;
4606
 
4607
	-- Get bom_id
4608
	SELECT bc.BOM_ID INTO BomId
4609
	  FROM BOM_CONTENTS bc
4610
	 WHERE bc.NODE_ID = nNodeId; 
4611
 
4612
	-- Check for duplicate names
4613
	OPEN nn_cur;
4614
    FETCH nn_cur INTO nn_rec;
4615
 
4616
    IF nn_cur%FOUND
4617
    THEN
4618
		RAISE DUPLICATE_NODE_NAME;
4619
	END IF;
4620
 
4621
	CLOSE nn_cur;
4622
	/*-------------------------------------------------------*/
4623
 
4624
	-- Update Network Node Details
4625
	UPDATE NETWORK_NODES nn SET
4626
		nn.NODE_NAME = sNodeName,
4627
		nn.NODE_COMMENTS = sNodeComments,
4628
		nn.NODE_TYPE_ID = nNodeTypeId,
4629
		nn.NODE_LIFE_CYCLE = nLifeCycle,
4630
		nn.NOT_XML = sNotXML
4631
	 WHERE nn.NODE_ID = nNodeId;
4632
 
4633
 	/* Log BOM_TRAIL */
4634
	pk_Bom.Log_Bom_Trail ( BomID, 'Updated Network Node: '||sNodeName, nUserId );
4635
 
4636
 
4637
EXCEPTION
4638
    WHEN DUPLICATE_NODE_NAME
4639
	THEN		
4640
		RAISE_APPLICATION_ERROR (-20000, 'Node Name "'|| sNodeName ||'" is Already Used in this BOM.');
4641
 
4642
END	Update_Node;
4643
/*--------------------------------------------------------------------------------------------------*/
4644
PROCEDURE Remove_Node ( sNodeIdList IN VARCHAR2,
4645
					  	nBomId IN BOM_CONTENTS.BOM_ID%TYPE ) IS
4646
 
4647
 
4648
 
4649
NODE_ID_REQUIRED EXCEPTION;
4650
 
4651
BEGIN
4652
	/*--------------- Business Rules Here -------------------*/
4653
    IF sNodeIdList IS NULL
4654
    THEN
4655
		RAISE NODE_ID_REQUIRED;
4656
	END IF;
4657
	/*-------------------------------------------------------*/
4658
 
4659
 
4660
 
4661
	-- Remove from Bom Contents
4662
	DELETE FROM BOM_CONTENTS
4663
	WHERE bom_id = nBomId
4664
	  AND node_id IN (
4665
		  		  	  SELECT *
4666
   	   		   	      FROM THE ( SELECT CAST( IN_LIST_NUMBER( sNodeIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual )
4667
		  		  	 );
4668
 
4669
 
4670
	-- Remove Network Nodes
4671
	DELETE FROM NETWORK_NODES
4672
	WHERE node_id IN (
4673
		  		  	  SELECT *
4674
   	   		   	      FROM THE ( SELECT CAST( IN_LIST_NUMBER( sNodeIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual )
4675
		  		  	 );
4676
 
4677
 
4678
 
4679
EXCEPTION
4680
    WHEN NODE_ID_REQUIRED
4681
	THEN		
4682
		RAISE_APPLICATION_ERROR (-20000, 'You must select at least one Network Node.');
4683
 
4684
END	Remove_Node;
4685
/*--------------------------------------------------------------------------------------------------*/
4686
PROCEDURE Destroy_Node ( nNodeIdCollection IN DEPMGR_NUMBER_TAB_t, nUserId IN NUMBER ) IS
4687
 
4688
nIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();
4689
NodeName VARCHAR2(4000);
4690
BomId NUMBER;
4691
 
4692
BEGIN
4693
	/*--------------- Business Rules Here -------------------*/
4694
	/*-------------------------------------------------------*/
4695
 
4696
	IF (nNodeIdCollection.COUNT > 0) THEN  
4697
 
4698
	   			--Log Action Trail
4699
		FOR i IN 1..nNodeIdCollection.COUNT
4700
		LOOP
4701
			-- Get bom_id
4702
			SELECT bc.BOM_ID INTO BomId
4703
	  		FROM BOM_CONTENTS bc
4704
			WHERE bc.NODE_ID = nNodeIdCollection(i);	
4705
 
4706
			--Get node_name
4707
			SELECT nn.NODE_NAME INTO NodeName
4708
	  		FROM NETWORK_NODES nn
4709
			WHERE nn.NODE_ID = nNodeIdCollection(i);	
4710
 
4711
			/* Log BOM_TRAIL */
4712
			pk_Bom.Log_Bom_Trail ( BomId, 'Deleted Network Node: '||NodeName, nUserId );
4713
 
4714
		END LOOP;				  
4715
 
4716
		-- Destroy Hardware Node Link
4717
		DELETE 
4718
		  FROM HARDWARE_NODE hn
4719
		 WHERE hn.NODE_ID IN ( SELECT * FROM TABLE ( CAST ( nNodeIdCollection AS DEPMGR_NUMBER_TAB_t ) ) );
4720
 
4721
 
4722
		-- Destroy Node from Bom Contents
4723
		DELETE 
4724
		  FROM BOM_CONTENTS bc
4725
		 WHERE bc.NODE_ID IN ( SELECT * FROM TABLE ( CAST ( nNodeIdCollection AS DEPMGR_NUMBER_TAB_t ) ) );
4726
 
4727
 
4728
		-- Destroy Operation Systems
4729
		nIdCollector := NULL;
4730
		SELECT CAST ( MULTISET ( SELECT os.OS_ID
4731
		  	   		  		   	   FROM OPERATING_SYSTEMS os
4732
		 						  WHERE os.NODE_ID IN ( SELECT * FROM TABLE ( CAST ( nNodeIdCollection AS DEPMGR_NUMBER_TAB_t ) ) )
4733
							    ) AS DEPMGR_NUMBER_TAB_t ) INTO nIdCollector FROM DUAL;
4734
 
4735
		pk_Operating_System.Destroy_Os ( nIdCollector, nUserId );
4736
 
4737
		---- Finnaly destroy Network Node ----
4738
		DELETE
4739
		  FROM NETWORK_NODES nn
4740
		 WHERE nn.NODE_ID IN ( SELECT * FROM TABLE ( CAST ( nNodeIdCollection AS DEPMGR_NUMBER_TAB_t ) ) );		 
4741
 
4742
	END IF; 
4743
 
4744
 
4745
END	Destroy_Node;
4746
/*--------------------------------------------------------------------------------------------------*/
4747
PROCEDURE Destroy_Node ( nNodeIdList IN VARCHAR2, nUserId IN NUMBER ) IS
4748
 
4749
nIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();
4750
 
4751
BEGIN
4752
	/*--------------- Business Rules Here -------------------*/
4753
	/*-------------------------------------------------------*/
4754
	nIdCollector := IN_LIST_NUMBER ( nNodeIdList );
4755
 
4756
	Destroy_Node ( nIdCollector, nUserId);	
4757
 
4758
 
4759
END	Destroy_Node;
4760
/*--------------------------------------------------------------------------------------------------*/
4761
PROCEDURE Sort_Nodes ( sNodeIdOrder IN VARCHAR2,
4762
		  			   nBomId IN BOMS.BOM_ID%TYPE,
4763
					   nUserId IN NUMBER ) IS
4764
 
4765
	nIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();						 
4766
	SeqNum NUMBER;
4767
 
4768
BEGIN
4769
	/*--------------- Business Rules Here -------------------*/
4770
	-- Check for parameters
4771
	IF (sNodeIdOrder IS NULL)  OR (nBomId IS NULL) 
4772
	THEN
4773
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nBomId='|| nBomId  ||' sNodeIdOrder='|| sNodeIdOrder  );
4774
	END IF;
4775
	/*-------------------------------------------------------*/
4776
 
4777
	nIdCollector := IN_LIST_NUMBER ( sNodeIdOrder );
4778
 
4779
	-- Set start sequence number
4780
	SeqNum := 1;
4781
 
4782
	FOR i IN 1..nIdCollector.COUNT
4783
	LOOP
4784
 
4785
		-- Update new sequence number
4786
		UPDATE BOM_CONTENTS bc SET
4787
			bc.SEQ_NUM = SeqNum
4788
		 WHERE bc.BOM_ID = nBomId
4789
		   AND bc.NODE_ID = nIdCollector(i);
4790
 
4791
		SeqNum := SeqNum + 1;
4792
 
4793
	END LOOP;
4794
 
4795
 
4796
END	Sort_Nodes;
4797
/*--------------------------------------------------------------------------------------------------*/
4798
END pk_Network_Node;
4799
 
4800
/
4801
 
4802
/
4803
--------------------------------------------------------
4804
--  DDL for Package Body PK_NETWORK_NODE_TEST
4805
--------------------------------------------------------
4806
 
4807
  CREATE OR REPLACE PACKAGE BODY "PK_NETWORK_NODE_TEST" 
4808
IS
4809
/* ---------------------------------------------------------------------------
4810
    Version: 1.0.0
4811
   --------------------------------------------------------------------------- */
4812
 
4813
/*--------------------------------------------------------------------------------------------------*/
4814
PROCEDURE Add_Node ( sNodeName IN NETWORK_NODES.NODE_NAME%TYPE,
4815
  		   	   	     nNodeTypeId IN NETWORK_NODES.NODE_TYPE_ID%TYPE,
4816
					 sNodeComments IN NETWORK_NODES.NODE_COMMENTS%TYPE,
4817
					 nBomId IN BOM_CONTENTS.BOM_ID%TYPE,
4818
					 nUserId IN NUMBER ) IS
4819
 
4820
NodeID NUMBER;
4821
 
4822
CURSOR nn_cur IS -- Check Node Name Duplicates
4823
		SELECT bc.node_id
4824
		  FROM BOM_CONTENTS bc,
4825
		  	   NETWORK_NODES nn
4826
		 WHERE bc.NODE_ID = nn.NODE_ID
4827
		   AND bc.BOM_ID = nBomId 
4828
		   AND UPPER( nn.NODE_NAME ) = UPPER( sNodeName );
4829
nn_rec nn_cur%ROWTYPE;
4830
 
4831
DUPLICATE_NODE_NAME EXCEPTION;
4832
 
4833
BEGIN
4834
	/*--------------- Business Rules Here -------------------*/
4835
	OPEN nn_cur;
4836
    FETCH nn_cur INTO nn_rec;
4837
 
4838
    IF nn_cur%FOUND
4839
    THEN
4840
		RAISE DUPLICATE_NODE_NAME;
4841
	END IF;
4842
 
4843
	CLOSE nn_cur;
4844
	/*-------------------------------------------------------*/
4845
 
4846
 
4847
	-- Get node_id
4848
	SELECT SEQ_NODE_ID.NEXTVAL INTO NodeID FROM DUAL;
4849
 
4850
 
4851
	-- Insert new Network Node			  
4852
	INSERT INTO NETWORK_NODES ( NODE_ID, NODE_TYPE_ID, NODE_NAME, NODE_COMMENTS )
4853
	VALUES (
4854
			NodeID,
4855
			nNodeTypeId,
4856
			sNodeName,
4857
			sNodeComments
4858
			);
4859
 
4860
 
4861
	-- Link Node with the BOM
4862
	INSERT INTO BOM_CONTENTS ( BOM_ID, NODE_ID )
4863
	VALUES (
4864
		    nBomId,
4865
			NodeID
4866
		    );
4867
 
4868
	/* Log BOM_TRAIL */
4869
	pk_Bom.Log_Bom_Trail ( nBomId, 'ADDED NETWORK NODE: '||sNodeName, nUserId );			
4870
 
4871
EXCEPTION
4872
    WHEN DUPLICATE_NODE_NAME
4873
	THEN		
4874
		RAISE_APPLICATION_ERROR (-20000, 'Node Name "'|| sNodeName ||'" is Already Used in this BOM.');
4875
 
4876
END	Add_Node;
4877
/*--------------------------------------------------------------------------------------------------*/
4878
PROCEDURE Update_Node ( nNodeId IN NETWORK_NODES.NODE_ID%TYPE,
4879
						sNodeName IN NETWORK_NODES.NODE_NAME%TYPE,
4880
  		   	   	     	nNodeTypeId IN NETWORK_NODES.NODE_TYPE_ID%TYPE,
4881
					 	sNodeComments IN NETWORK_NODES.NODE_COMMENTS%TYPE ) IS
4882
 
4883
BomID NUMBER;
4884
 
4885
CURSOR nn_cur IS -- Check Node Name Duplicates
4886
		SELECT bc.node_id
4887
		  FROM BOM_CONTENTS bc,
4888
		  	   NETWORK_NODES nn
4889
		 WHERE bc.NODE_ID = nn.NODE_ID
4890
		   AND bc.BOM_ID = BomId 
4891
		   AND UPPER( nn.NODE_NAME ) = UPPER( sNodeName )
4892
		   AND nn.NODE_ID != nNodeId;
4893
nn_rec nn_cur%ROWTYPE;
4894
 
4895
DUPLICATE_NODE_NAME EXCEPTION;
4896
 
4897
BEGIN
4898
	/*--------------- Business Rules Here -------------------*/
4899
	-- Check all parameters
4900
	IF (nNodeId IS NULL)  OR  (nNodeTypeId IS NULL) 
4901
	THEN
4902
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nNodeId='|| nNodeId  ||', nNodeTypeId='|| nNodeTypeId  );
4903
 
4904
	END IF;
4905
 
4906
	-- Get bom_id
4907
	SELECT bc.BOM_ID INTO BomId
4908
	  FROM BOM_CONTENTS bc
4909
	 WHERE bc.NODE_ID = nNodeId; 
4910
 
4911
	-- Check for duplicate names
4912
	OPEN nn_cur;
4913
    FETCH nn_cur INTO nn_rec;
4914
 
4915
    IF nn_cur%FOUND
4916
    THEN
4917
		RAISE DUPLICATE_NODE_NAME;
4918
	END IF;
4919
 
4920
	CLOSE nn_cur;
4921
	/*-------------------------------------------------------*/
4922
 
4923
	-- Update Network Node Details
4924
	UPDATE NETWORK_NODES nn SET
4925
		nn.NODE_NAME = sNodeName,
4926
		nn.NODE_COMMENTS = sNodeComments,
4927
		nn.NODE_TYPE_ID = nNodeTypeId
4928
	 WHERE nn.NODE_ID = nNodeId;
4929
 
4930
 
4931
 
4932
EXCEPTION
4933
    WHEN DUPLICATE_NODE_NAME
4934
	THEN		
4935
		RAISE_APPLICATION_ERROR (-20000, 'Node Name "'|| sNodeName ||'" is Already Used in this BOM.');
4936
 
4937
END	Update_Node;
4938
/*--------------------------------------------------------------------------------------------------*/
4939
PROCEDURE Remove_Node ( sNodeIdList IN VARCHAR2,
4940
					  	nBomId IN BOM_CONTENTS.BOM_ID%TYPE ) IS
4941
 
4942
 
4943
 
4944
NODE_ID_REQUIRED EXCEPTION;
4945
 
4946
BEGIN
4947
	/*--------------- Business Rules Here -------------------*/
4948
    IF sNodeIdList IS NULL
4949
    THEN
4950
		RAISE NODE_ID_REQUIRED;
4951
	END IF;
4952
	/*-------------------------------------------------------*/
4953
 
4954
 
4955
 
4956
	-- Remove from Bom Contents
4957
	DELETE FROM BOM_CONTENTS
4958
	WHERE bom_id = nBomId
4959
	  AND node_id IN (
4960
		  		  	  SELECT *
4961
   	   		   	      FROM THE ( SELECT CAST( IN_LIST_NUMBER( sNodeIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual )
4962
		  		  	 );
4963
 
4964
 
4965
	-- Remove Network Nodes
4966
	DELETE FROM NETWORK_NODES
4967
	WHERE node_id IN (
4968
		  		  	  SELECT *
4969
   	   		   	      FROM THE ( SELECT CAST( IN_LIST_NUMBER( sNodeIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual )
4970
		  		  	 );
4971
 
4972
 
4973
 
4974
EXCEPTION
4975
    WHEN NODE_ID_REQUIRED
4976
	THEN		
4977
		RAISE_APPLICATION_ERROR (-20000, 'You must select at least one Network Node.');
4978
 
4979
END	Remove_Node;
4980
/*--------------------------------------------------------------------------------------------------*/
4981
PROCEDURE Destroy_Node ( nNodeIdCollection IN DEPMGR_NUMBER_TAB_t ) IS
4982
 
4983
nIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();
4984
 
4985
BEGIN
4986
	/*--------------- Business Rules Here -------------------*/
4987
	/*-------------------------------------------------------*/
4988
 
4989
	IF (nNodeIdCollection.COUNT > 0) THEN   
4990
 
4991
		-- Destroy Hardware Node Link
4992
		DELETE 
4993
		  FROM HARDWARE_NODE hn
4994
		 WHERE hn.NODE_ID IN ( SELECT * FROM TABLE ( CAST ( nNodeIdCollection AS DEPMGR_NUMBER_TAB_t ) ) );
4995
 
4996
 
4997
		-- Destroy Node from Bom Contents
4998
		DELETE 
4999
		  FROM BOM_CONTENTS bc
5000
		 WHERE bc.NODE_ID IN ( SELECT * FROM TABLE ( CAST ( nNodeIdCollection AS DEPMGR_NUMBER_TAB_t ) ) );
5001
 
5002
 
5003
		-- Destroy Operation Systems
5004
		nIdCollector := NULL;
5005
		SELECT CAST ( MULTISET ( SELECT os.OS_ID
5006
		  	   		  		   	   FROM OPERATING_SYSTEMS os
5007
		 						  WHERE os.NODE_ID IN ( SELECT * FROM TABLE ( CAST ( nNodeIdCollection AS DEPMGR_NUMBER_TAB_t ) ) )
5008
							    ) AS DEPMGR_NUMBER_TAB_t ) INTO nIdCollector FROM DUAL;
5009
 
5010
		pk_Operating_System.Destroy_Os ( nIdCollector );
5011
 
5012
 
5013
 
5014
 
5015
		---- Finnaly destroy Network Node ----
5016
		DELETE
5017
		  FROM NETWORK_NODES nn
5018
		 WHERE nn.NODE_ID IN ( SELECT * FROM TABLE ( CAST ( nNodeIdCollection AS DEPMGR_NUMBER_TAB_t ) ) );
5019
 
5020
 
5021
	END IF; 
5022
 
5023
 
5024
END	Destroy_Node;
5025
/*--------------------------------------------------------------------------------------------------*/
5026
PROCEDURE Destroy_Node ( nNodeIdList IN VARCHAR2 ) IS
5027
 
5028
nIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();
5029
 
5030
BEGIN
5031
	/*--------------- Business Rules Here -------------------*/
5032
	/*-------------------------------------------------------*/
5033
	nIdCollector := IN_LIST_NUMBER ( nNodeIdList );
5034
 
5035
	Destroy_Node ( nIdCollector );	
5036
 
5037
 
5038
END	Destroy_Node;
5039
/*--------------------------------------------------------------------------------------------------*/
5040
PROCEDURE Sort_Nodes ( sNodeIdOrder IN VARCHAR2,
5041
		  			   nBomId IN BOMS.BOM_ID%TYPE,
5042
					   nUserId IN NUMBER ) IS
5043
 
5044
	nIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();						 
5045
	SeqNum NUMBER;
5046
 
5047
BEGIN
5048
	/*--------------- Business Rules Here -------------------*/
5049
	-- Check for parameters
5050
	IF (sNodeIdOrder IS NULL)  OR (nBomId IS NULL) 
5051
	THEN
5052
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nBomId='|| nBomId  ||' sNodeIdOrder='|| sNodeIdOrder  );
5053
	END IF;
5054
	/*-------------------------------------------------------*/
5055
 
5056
	nIdCollector := IN_LIST_NUMBER ( sNodeIdOrder );
5057
 
5058
	-- Set start sequence number
5059
	SeqNum := 1;
5060
 
5061
	FOR i IN 1..nIdCollector.COUNT
5062
	LOOP
5063
 
5064
		-- Update new sequence number
5065
		UPDATE BOM_CONTENTS bc SET
5066
			bc.SEQ_NUM = SeqNum
5067
		 WHERE bc.BOM_ID = nBomId
5068
		   AND bc.NODE_ID = nIdCollector(i);
5069
 
5070
		SeqNum := SeqNum + 1;
5071
 
5072
	END LOOP;
5073
 
5074
 
5075
END	Sort_Nodes;
5076
/*--------------------------------------------------------------------------------------------------*/
5077
END pk_Network_Node_test;
5078
 
5079
/
5080
 
5081
/
5082
--------------------------------------------------------
5083
--  DDL for Package Body PK_OPERATING_SYSTEM
5084
--------------------------------------------------------
5085
 
5086
  CREATE OR REPLACE PACKAGE BODY "PK_OPERATING_SYSTEM" 
5087
IS
5088
/* ---------------------------------------------------------------------------
5089
    Modified: Rupesh Solanki
5090
	Date: 20/03/2006
5091
   --------------------------------------------------------------------------- */
5092
 
5093
/*--------------------------------------------------------------------------------------------------*/
5094
PROCEDURE Add_Os ( sOsName IN OPERATING_SYSTEMS.OS_NAME%TYPE,
5095
		  		   sOsComments IN OPERATING_SYSTEMS.OS_COMMENTS%TYPE,
5096
				   sNodeSpecFile IN OPERATING_SYSTEMS.NODE_SPEC_FILE%TYPE,
5097
 				   sNotXML IN OPERATING_SYSTEMS.NOT_XML%TYPE,
5098
				   nNodeId IN OPERATING_SYSTEMS.NODE_ID%TYPE,
5099
				   nBaseEnvName IN BASE_ENV.BASE_ENV_NAME%TYPE,
5100
				   nBosId IN BASE_ENV.BOS_ID%TYPE DEFAULT NULL,
5101
				   nUserId IN NUMBER ) IS
5102
 
5103
OsID NUMBER;
5104
BosId NUMBER;
5105
BaseEnvId NUMBER;
5106
BomId NUMBER;
5107
 
5108
CURSOR curOs IS -- Check Node Name Duplicates
5109
		SELECT os.OS_ID
5110
		  FROM OPERATING_SYSTEMS os
5111
		 WHERE os.NODE_ID = nNodeId
5112
		   AND UPPER(os.OS_NAME) = UPPER(sOsName);
5113
recOs curOs%ROWTYPE;
5114
 
5115
DUPLICATE_OS_NAME EXCEPTION;
5116
 
5117
BEGIN
5118
	/*--------------- Business Rules Here -------------------*/
5119
	-- Check for duplicate names
5120
	OPEN curOs;
5121
    FETCH curOs INTO recOs;
5122
 
5123
    IF curOs%FOUND
5124
    THEN
5125
		RAISE DUPLICATE_OS_NAME;
5126
	END IF;
5127
 
5128
	CLOSE curOs;
5129
	/*-------------------------------------------------------*/
5130
 
5131
	-- Get os_id
5132
	SELECT SEQ_OS_ID.NEXTVAL INTO OsID FROM DUAL;
5133
 
5134
	-- Insert new OS
5135
	INSERT INTO OPERATING_SYSTEMS ( OS_ID, OS_NAME, NODE_ID, OS_COMMENTS, NODE_SPEC_FILE, NOT_XML ) 
5136
	VALUES ( OsID, sOsName, nNodeId, sOsComments, sNodeSpecFile, sNotXML  );
5137
 
5138
 
5139
 
5140
	/* Set up Base Configuration */
5141
	IF nBaseEnvName IS NOT NULL THEN
5142
 
5143
		-- Get bom_id
5144
		SELECT bc.BOM_ID INTO BomId
5145
		  FROM BOM_CONTENTS bc
5146
		 WHERE bc.NODE_ID = nNodeId;
5147
 
5148
 
5149
		-- Set bos _id to default
5150
		BosId := 5;		-- This is Generic OS in BOS_TYPES table
5151
		IF nBosId IS NOT NULL THEN
5152
			BosId := nBosId;
5153
		END IF;
5154
 
5155
 
5156
		-- Get base_env_id
5157
		BaseEnvId := pk_Base_Env.Get_Base_Env_Id ( nBaseEnvName, BomId );
5158
 
5159
 
5160
		-- Create Base Env if Required
5161
		IF BaseEnvId IS NULL THEN
5162
 
5163
			pk_Base_Env.Add_Base_Env ( nBaseEnvName, BosId, BomId, OsID, nUserId );
5164
 
5165
			BaseEnvId := pk_Base_Env.Get_Base_Env_Id ( nBaseEnvName, BomId );
5166
 
5167
		END IF;
5168
 
5169
		-- Finally assign this  base env to OS
5170
		INSERT INTO OS_BASE_ENV ( OS_ID, BASE_ENV_ID )
5171
		VALUES ( OsID, BaseEnvId );
5172
 
5173
	END IF;
5174
 
5175
 
5176
	/* Log BOM_TRAIL */
5177
	pk_Bom.Log_Node_Trail ( nNodeId, 'Added Operating System: '||sOsName, nUserId );	
5178
 
5179
 
5180
	EXCEPTION
5181
    WHEN DUPLICATE_OS_NAME
5182
	THEN		
5183
		RAISE_APPLICATION_ERROR (-20000, 'OS Name "'|| sOsName ||'" is Already Used in this Network Node.');
5184
 
5185
END	Add_Os;
5186
/*--------------------------------------------------------------------------------------------------*/
5187
PROCEDURE Update_Os ( nOsId IN OPERATING_SYSTEMS.OS_ID%TYPE,
5188
					  sOsName IN OPERATING_SYSTEMS.OS_NAME%TYPE,
5189
		  		   	  sOsComments IN OPERATING_SYSTEMS.OS_COMMENTS%TYPE,
5190
				  	  nBaseEnvName IN BASE_ENV.BASE_ENV_NAME%TYPE,
5191
					  sNodeSpecFile IN OPERATING_SYSTEMS.NODE_SPEC_FILE%TYPE,
5192
					  sNotXML IN OPERATING_SYSTEMS.NOT_XML%TYPE,
5193
					  nUserId IN NUMBER  ) IS
5194
 
5195
BomId NUMBER;
5196
BosId NUMBER;
5197
BaseEnvId NUMBER;
5198
NodeId NUMBER;
5199
 
5200
CURSOR curOs IS
5201
		SELECT os.OS_ID
5202
		  FROM OPERATING_SYSTEMS os
5203
		 WHERE os.NODE_ID = NodeId
5204
		   AND UPPER(os.OS_NAME) = UPPER(sOsName)
5205
		   AND os.OS_ID != nOsId;
5206
recOs curOs%ROWTYPE;
5207
 
5208
DUPLICATE_OS_NAME EXCEPTION;
5209
 
5210
BEGIN
5211
	/*--------------- Business Rules Here -------------------*/
5212
	-- Check for parameters
5213
	IF (nOsId IS NULL) 
5214
	THEN
5215
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nOsId='|| nOsId   );
5216
 
5217
	END IF;
5218
 
5219
 
5220
	-- Get node_id
5221
	SELECT os.NODE_ID INTO NodeId
5222
	  FROM OPERATING_SYSTEMS os
5223
	 WHERE os.OS_ID = nOsId;
5224
 
5225
 
5226
	-- Check for duplicate names
5227
	OPEN curOs;
5228
    FETCH curOs INTO recOs;
5229
 
5230
    IF curOs%FOUND
5231
    THEN
5232
		RAISE DUPLICATE_OS_NAME;
5233
	END IF;
5234
 
5235
	CLOSE curOs;
5236
	/*-------------------------------------------------------*/
5237
 
5238
	-- Delete current Base Env
5239
	DELETE
5240
	  FROM OS_BASE_ENV obe
5241
	 WHERE obe.OS_ID = nOsId;
5242
 
5243
 
5244
	/* Set up Base Configuration */
5245
	IF nBaseEnvName IS NOT NULL THEN
5246
 
5247
		-- Get bom_id
5248
		SELECT bc.BOM_ID INTO BomId
5249
		  FROM BOM_CONTENTS bc
5250
		 WHERE bc.NODE_ID = NodeId;
5251
 
5252
 
5253
		-- Get base_env_id
5254
		BaseEnvId := pk_Base_Env.Get_Base_Env_Id ( nBaseEnvName, BomId );
5255
 
5256
 
5257
		-- Set bos _id to default
5258
		BosId := 5;		-- This is Generic OS in BOS_TYPES table
5259
 
5260
 
5261
		-- Create Base Env if Required
5262
		IF BaseEnvId IS NULL THEN
5263
 
5264
			pk_Base_Env.Add_Base_Env ( nBaseEnvName, BosId, BomId, nOsId, nUserId );
5265
 
5266
			BaseEnvId := pk_Base_Env.Get_Base_Env_Id ( nBaseEnvName, BomId );
5267
 
5268
		ELSE
5269
			-- Get bos_id
5270
			SELECT be.BOS_ID INTO BosId
5271
			  FROM BASE_ENV be
5272
			 WHERE be.BASE_ENV_ID = BaseEnvId;
5273
 
5274
		END IF;
5275
 
5276
 
5277
		-- Finally assign this  base env to OS
5278
		INSERT INTO OS_BASE_ENV ( OS_ID, BASE_ENV_ID )
5279
		VALUES ( nOsId, BaseEnvId );
5280
 
5281
	END IF;
5282
 
5283
 
5284
 
5285
	-- Update Os Details
5286
	UPDATE OPERATING_SYSTEMS os SET
5287
		os.OS_NAME = sOsName,
5288
		os.OS_COMMENTS = sOsComments,
5289
		os.NODE_SPEC_FILE = sNodeSpecFile,
5290
		os.NOT_XML = sNotXML
5291
	 WHERE os.OS_ID = nOsId;
5292
 
5293
	/* Log BOM_TRAIL */
5294
	pk_Bom.Log_Node_Trail ( NodeId, 'Updated Operating System: '||sOsName, nUserId );		 
5295
 
5296
 
5297
	EXCEPTION
5298
    WHEN DUPLICATE_OS_NAME
5299
	THEN		
5300
		RAISE_APPLICATION_ERROR (-20000, 'OS Name "'|| sOsName ||'" is Already Used in this Network Node.');
5301
 
5302
END	Update_Os;
5303
/*--------------------------------------------------------------------------------------------------*/
5304
PROCEDURE Add_Product_Wrap ( nPkgId IN NUMBER,
5305
		  				   	 sProdVersion IN VARCHAR2,
5306
							 nOsId IN OS_CONTENTS.OS_ID%TYPE,
5307
							 nUserId IN NUMBER,
5308
							 sComments IN VARCHAR2 DEFAULT NULL ) IS
5309
 
5310
ProdId PACKAGE_VERSIONS.PV_ID%TYPE;
5311
ProdName PACKAGES.PKG_NAME%TYPE;
5312
 
5313
CURSOR prod_cur IS
5314
	SELECT osc.PROD_ID
5315
	  FROM OS_CONTENTS osc
5316
	 WHERE osc.PROD_ID = ProdId
5317
	   AND osc.OS_ID = nOsId;
5318
prod_rec prod_cur%ROWTYPE;
5319
 
5320
BEGIN
5321
	/*--------------- Business Rules Here -------------------*/                             
5322
	IF (NOT nPkgId IS NULL) AND (sProdVersion IS NULL) AND (NOT nOsId IS NULL) AND (NOT nUserId IS NULL) THEN
5323
	   RAISE_APPLICATION_ERROR (-20000, 'Please provide Product Version.' );
5324
 
5325
	ELSIF (nPkgId IS NULL) OR (sProdVersion IS NULL) OR (nOsId IS NULL) OR (nUserId IS NULL) THEN
5326
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nPkgId= '|| nPkgId ||', sProdVersion='|| sProdVersion ||', nOsId='|| nOsId ||', nUserId='|| nUserId );
5327
 
5328
	END IF;
5329
	/*-------------------------------------------------------*/
5330
 
5331
	-- Get Product Name --
5332
	SELECT PKG_NAME INTO ProdName FROM PACKAGES WHERE PKG_ID = nPkgId;
5333
 
5334
 
5335
	-- Create Product Version in Release Manager if Required, and Get Prod_id --
5336
	Seed_Package_Names_Versions ( ProdName, sProdVersion, nUserId, ProdId );
5337
 
5338
 
5339
	-- Add Product To OS --
5340
	OPEN prod_cur;
5341
	FETCH prod_cur INTO prod_rec;
5342
 
5343
	IF prod_cur%NOTFOUND THEN
5344
	   pk_Product.Add_Product ( ProdId, nOsId, nUserId );
5345
 
5346
	   -- Add comments if required
5347
	   IF (NOT sComments IS NULL) THEN
5348
	   		UPDATE OS_CONTENTS osc SET
5349
				osc.PRODUCT_COMMENTS = sComments
5350
			 WHERE osc.OS_ID = nOsId
5351
			   AND osc.PROD_ID = ProdId;
5352
 
5353
	   END IF;
5354
 
5355
 
5356
	END IF;
5357
 
5358
	CLOSE prod_cur;
5359
 
5360
 
5361
END	Add_Product_Wrap;
5362
/*--------------------------------------------------------------------------------------------------*/
5363
PROCEDURE Set_Base_Conf ( nOsId IN OS_BASE_ENV.OS_ID%TYPE,
5364
		  				  nBaseEnvId IN OS_BASE_ENV.BASE_ENV_ID%TYPE ) IS
5365
 
5366
BEGIN
5367
	/*--------------- Business Rules Here -------------------*/
5368
	/*-------------------------------------------------------*/
5369
 
5370
	-- Delete current Base Conf setting
5371
	DELETE FROM OS_BASE_ENV
5372
	WHERE OS_ID = nOsId;
5373
 
5374
	-- Set new Base Conf	
5375
	IF NOT nBaseEnvId IS NULL
5376
	THEN
5377
		INSERT INTO OS_BASE_ENV ( OS_ID, BASE_ENV_ID )
5378
		VALUES ( nOsId, nBaseEnvId );
5379
	END IF;
5380
 
5381
END	Set_Base_Conf;
5382
/*--------------------------------------------------------------------------------------------------*/
5383
PROCEDURE Shift_Product_SeqNum ( nProdId IN OS_CONTENTS.PROD_ID%TYPE,
5384
		  				 	     nOsId IN OS_CONTENTS.OS_ID%TYPE,
5385
						 		 nToSeqNum IN OS_CONTENTS.SEQ_NUM%TYPE ) IS
5386
 
5387
currSeqNum NUMBER;
5388
FromSeqNum NUMBER;
5389
 
5390
BEGIN
5391
	 -- Get Current seq_num
5392
	 SELECT osc.SEQ_NUM INTO currSeqNum
5393
	   FROM OS_CONTENTS osc
5394
	  WHERE osc.OS_ID = nOsId
5395
	    AND osc.PROD_ID = nProdId;
5396
 
5397
 
5398
	 IF currSeqNum > nToSeqNum
5399
	 THEN
5400
 
5401
		FromSeqNum := nToSeqNum;
5402
 
5403
			-- Shift others Up
5404
		UPDATE OS_CONTENTS osc SET
5405
			   osc.SEQ_NUM = osc.SEQ_NUM + 1
5406
		 WHERE osc.OS_ID = nOsId 
5407
		   AND osc.PROD_ID != nProdId
5408
		   AND osc.SEQ_NUM BETWEEN  FromSeqNum  AND  currSeqNum - 1;
5409
 
5410
 
5411
	 ELSIF currSeqNum < nToSeqNum
5412
	 THEN
5413
 
5414
		FromSeqNum := currSeqNum + 1;  
5415
 
5416
		 -- Shift others Down
5417
		UPDATE OS_CONTENTS osc SET
5418
		   	   osc.SEQ_NUM = osc.SEQ_NUM - 1
5419
		 WHERE osc.OS_ID = nOsId 
5420
		   AND osc.PROD_ID != nProdId
5421
		   AND osc.SEQ_NUM BETWEEN  FromSeqNum  AND  nToSeqNum;
5422
 
5423
	 END IF;
5424
 
5425
 
5426
	 -- Move Product to new seq_num
5427
	 UPDATE OS_CONTENTS osc SET
5428
		    osc.SEQ_NUM = nToSeqNum
5429
	  WHERE osc.OS_ID = nOsId 
5430
	    AND osc.PROD_ID = nProdId;
5431
 
5432
 
5433
 
5434
END Shift_Product_SeqNum;
5435
/*--------------------------------------------------------------------------------------------------*/
5436
PROCEDURE Shift_Bulk_Products_SeqNum ( sProdIdList IN VARCHAR2,
5437
		  							   nOsId IN OS_CONTENTS.OS_ID%TYPE,
5438
									   cDirection IN CHAR ) IS
5439
 
5440
MinSeqNum	  NUMBER := 1;									   
5441
FirstSeqNum   NUMBER;
5442
LastSeqNum 	  NUMBER;
5443
MaxSeqNum	  NUMBER;
5444
 
5445
 
5446
CURSOR osc_down_cur IS
5447
	SELECT osc.prod_id, osc.seq_num
5448
	  FROM OS_CONTENTS osc
5449
	 WHERE osc.OS_ID = nOsId
5450
	   AND osc.PROD_ID IN (
5451
						   SELECT *
5452
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sProdIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual ) 
5453
	   	   			   	   )
5454
	ORDER BY osc.seq_num ASC;
5455
osc_down_rec osc_down_cur%ROWTYPE;	
5456
 
5457
CURSOR osc_up_cur IS
5458
	SELECT osc.prod_id, osc.seq_num
5459
	  FROM OS_CONTENTS osc
5460
	 WHERE osc.OS_ID = nOsId
5461
	   AND osc.PROD_ID IN (
5462
						   SELECT *
5463
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sProdIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual ) 
5464
	   	   			   	   )
5465
	ORDER BY osc.seq_num DESC;
5466
osc_up_rec osc_up_cur%ROWTYPE;
5467
 
5468
 
5469
BEGIN
5470
	/*--------------- Business Rules Here -------------------*/
5471
	IF sProdIdList IS NULL
5472
	THEN
5473
		RAISE_APPLICATION_ERROR (-20000, 'Please select one or more Products.');
5474
 
5475
	ELSIF (nOsId IS NULL) OR (cDirection IS NULL)
5476
	THEN
5477
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nOsId= '|| nOsId ||', cDirection='|| cDirection );
5478
 
5479
	END IF;
5480
	/*-------------------------------------------------------*/
5481
 
5482
 
5483
 
5484
	-- Get First seq_num
5485
	SELECT MIN( osc.SEQ_NUM ) INTO FirstSeqNum
5486
	  FROM OS_CONTENTS osc
5487
	 WHERE osc.OS_ID = nOsId
5488
	   AND osc.PROD_ID IN (
5489
						   SELECT *
5490
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sProdIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual ) 
5491
	   	   			   	   );
5492
 
5493
	-- Get Last seq_num
5494
	SELECT MAX( osc.SEQ_NUM ) INTO LastSeqNum
5495
	  FROM OS_CONTENTS osc
5496
	 WHERE osc.OS_ID = nOsId
5497
	   AND osc.PROD_ID IN (
5498
						   SELECT *
5499
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sProdIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual ) 
5500
	   	   			   	   );
5501
 
5502
    -- Get Max seq_num
5503
	SELECT MAX( osc.SEQ_NUM ) INTO MaxSeqNum
5504
	  FROM OS_CONTENTS osc
5505
	 WHERE osc.OS_ID = nOsId;
5506
 
5507
 
5508
 
5509
    IF cDirection = '+'
5510
	THEN
5511
		-- Shift UP
5512
		IF LastSeqNum < MaxSeqNum
5513
		THEN
5514
			/* Can only shift up if maxseqnum is not reached */
5515
			OPEN osc_up_cur;
5516
			FETCH osc_up_cur INTO osc_up_rec;
5517
 
5518
			WHILE osc_up_cur%FOUND
5519
			LOOP
5520
				Shift_Product_SeqNum ( osc_up_rec.PROD_ID, nOsId, osc_up_rec.SEQ_NUM + 1  );
5521
 
5522
				FETCH osc_up_cur INTO osc_up_rec;
5523
			END LOOP;
5524
 
5525
 
5526
			CLOSE osc_up_cur;
5527
 
5528
 
5529
		END IF;
5530
 
5531
 
5532
 
5533
 
5534
	ELSIF cDirection = '-'
5535
	THEN
5536
		-- Shift DOWN
5537
		IF FirstSeqNum > MinSeqNum
5538
		THEN
5539
			/* Can only shift down if minseqnum is not reached */
5540
			OPEN osc_down_cur;
5541
			FETCH osc_down_cur INTO osc_down_rec;
5542
 
5543
			WHILE osc_down_cur%FOUND
5544
			LOOP
5545
				Shift_Product_SeqNum ( osc_down_rec.PROD_ID, nOsId, osc_down_rec.SEQ_NUM - 1  );
5546
 
5547
				FETCH osc_down_cur INTO osc_down_rec;
5548
			END LOOP;
5549
 
5550
			CLOSE osc_down_cur;
5551
 
5552
 
5553
		END IF;
5554
 
5555
 
5556
	END IF;
5557
 
5558
 
5559
END Shift_Bulk_Products_SeqNum;
5560
/*--------------------------------------------------------------------------------------------------*/
5561
PROCEDURE Destroy_Os ( nOsIdCollection IN DEPMGR_NUMBER_TAB_t, nUserId IN NUMBER ) IS
5562
 
5563
nIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();
5564
NodeId NUMBER;
5565
OsName VARCHAR2(4000);
5566
 
5567
BEGIN
5568
	/*--------------- Business Rules Here -------------------*/
5569
	/*-------------------------------------------------------*/
5570
 
5571
	IF (nOsIdCollection.COUNT > 0) THEN   
5572
			--Log Action Trail
5573
		FOR i IN 1..nOsIdCollection.COUNT
5574
		LOOP
5575
			-- Get node_id
5576
			SELECT os.NODE_ID INTO NodeId
5577
	  		FROM OPERATING_SYSTEMS os
5578
			WHERE os.OS_ID = nOsIdCollection(i);	
5579
 
5580
			--Get os_name
5581
			SELECT os.OS_NAME INTO OsName
5582
	  		FROM OPERATING_SYSTEMS os
5583
			WHERE os.OS_ID = nOsIdCollection(i);	
5584
 
5585
			/* Log BOM_TRAIL */
5586
			pk_Bom.Log_Node_Trail ( NodeId, 'Deleted Operating System: '||OsName, nUserId );		 
5587
 
5588
 
5589
 
5590
		END LOOP;
5591
 
5592
		-- Destroy PROCESSES_CONFIG
5593
		DELETE 
5594
		  FROM PROCESSES_CONFIG pc
5595
		 WHERE pc.OS_ID IN ( SELECT * FROM TABLE ( CAST ( nOsIdCollection AS DEPMGR_NUMBER_TAB_t ) ) );
5596
 
5597
 
5598
		-- Destroy OS_CONTENTS
5599
		DELETE 
5600
		  FROM OS_CONTENTS osc
5601
		 WHERE osc.OS_ID IN ( SELECT * FROM TABLE ( CAST ( nOsIdCollection AS DEPMGR_NUMBER_TAB_t ) ) );
5602
 
5603
 
5604
		-- Destroy OS_BASE_ENV
5605
		DELETE 
5606
		  FROM OS_BASE_ENV obe
5607
		 WHERE obe.OS_ID IN ( SELECT * FROM TABLE ( CAST ( nOsIdCollection AS DEPMGR_NUMBER_TAB_t ) ) );
5608
 
5609
 
5610
		-- Destroy HIDE_PRODUCTS
5611
		DELETE 
5612
		  FROM HIDE_PRODUCTS hp
5613
		 WHERE hp.OS_ID IN ( SELECT * FROM TABLE ( CAST ( nOsIdCollection AS DEPMGR_NUMBER_TAB_t ) ) ); 
5614
 
5615
 
5616
		-- Destroy OS_TRAIL
5617
		DELETE
5618
		  FROM OS_TRAIL ot
5619
		 WHERE ot.OS_ID IN ( SELECT * FROM TABLE ( CAST ( nOsIdCollection AS DEPMGR_NUMBER_TAB_t ) ) ); 
5620
 
5621
 
5622
		---- Finnaly destroy Operating System ----
5623
		DELETE
5624
		  FROM OPERATING_SYSTEMS os
5625
		 WHERE os.OS_ID IN ( SELECT * FROM TABLE ( CAST ( nOsIdCollection AS DEPMGR_NUMBER_TAB_t ) ) );
5626
 
5627
 
5628
 
5629
 
5630
	END IF; 
5631
 
5632
 
5633
 
5634
END	Destroy_Os;
5635
/*--------------------------------------------------------------------------------------------------*/
5636
PROCEDURE Destroy_Os ( nOsIdList IN VARCHAR2, nUserId IN NUMBER ) IS
5637
 
5638
nIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();
5639
 
5640
BEGIN
5641
	/*--------------- Business Rules Here -------------------*/
5642
	IF nOsIdList IS NULL
5643
	THEN
5644
		RAISE_APPLICATION_ERROR (-20000, 'Please select one or more Operating Systems.');
5645
 
5646
	END IF;
5647
	/*-------------------------------------------------------*/
5648
	nIdCollector := IN_LIST_NUMBER ( nOsIdList );
5649
 
5650
	Destroy_Os ( nIdCollector, nUserId );					 
5651
 
5652
END	Destroy_Os;
5653
 
5654
/*-------------------------------------------------------------------------------------------------------*/
5655
  PROCEDURE add_package_process (
5656
      nprocidlist   IN   VARCHAR2,
5657
	  npvid 		IN 	 processes_config.prod_id%TYPE,	  
5658
      nosid         IN   os_contents.os_id%TYPE,
5659
      nuserid       IN   NUMBER
5660
   )
5661
   IS
5662
      processname   VARCHAR2 (4000);
5663
	  PkgName 		VARCHAR2 (4000);
5664
	  nPkgId		NUMBER;
5665
 
5666
	  nIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();
5667
 
5668
 
5669
 
5670
/*Rupesh Release on 17/05/2006*/
5671
     CURSOR proc_cur
5672
      IS
5673
         SELECT prc.proc_id, prc.proc_name, prc.proc_description, 
5674
		 		prc.run_as, prc.pkg_owner, prc.is_interface
5675
           FROM processes prc
5676
          WHERE prc.proc_id IN (
5677
                   SELECT *
5678
                     FROM THE
5679
                             (SELECT CAST
5680
                                        (in_list_number (nprocidlist) AS DEPMGR_NUMBER_TAB_t
5681
                                        )
5682
                                FROM DUAL
5683
                             ));
5684
 
5685
      proc_rec      proc_cur%ROWTYPE;
5686
   BEGIN
5687
 
5688
   BEGIN
5689
   	 SELECT PKG.PKG_NAME, PKG.PKG_ID INTO PkgName, nPkgId
5690
	 FROM PACKAGE_VERSIONS PV, PACKAGES PKG
5691
	 WHERE PV.PV_ID = npvid
5692
	 AND PKG.PKG_ID = PV.PKG_ID;
5693
	 EXCEPTION
5694
	 WHEN NO_DATA_FOUND THEN
5695
	 	  RAISE_APPLICATION_ERROR (-20000, 'Select the Package Name and Version: ' );
5696
   END;	 
5697
 
5698
 
5699
      OPEN proc_cur;
5700
 
5701
      FETCH proc_cur
5702
       INTO proc_rec;
5703
 
5704
      WHILE proc_cur%FOUND
5705
      LOOP
5706
         INSERT INTO processes_config
5707
                     (proc_id, prod_id, os_id, pkg_health_tag, cmd_interface, pkg_owner, is_interface, proc_description, pkg_id
5708
                     )
5709
              VALUES (proc_rec.proc_id, npvid, nosid, proc_rec.proc_name, proc_rec.run_as, proc_rec.pkg_owner, proc_rec.is_interface, proc_rec.proc_description, nPkgId
5710
                     );
5711
 
5712
         SELECT prc.proc_name
5713
           INTO processname
5714
           FROM processes prc
5715
          WHERE prc.proc_id = proc_rec.proc_id;
5716
 
5717
	-- Log Action --
5718
	pk_Bom.Log_Os_Trail ( nosid,  
5719
						  'Added process with health tag '|| processname ||' for product '|| PkgName,
5720
						  nUserId );
5721
 
5722
         FETCH proc_cur
5723
          INTO proc_rec;
5724
      END LOOP;
5725
   END;
5726
 
5727
/*--------------------------------------------------------------------------------------------------*/
5728
/*-------------------------------------------------------------------------------------------------------*/
5729
  PROCEDURE add_packages_process (
5730
      npvidlist   	IN   VARCHAR2,	  
5731
      nosid         IN   os_contents.os_id%TYPE,
5732
      nuserid       IN   NUMBER
5733
   )
5734
   IS
5735
      processname   VARCHAR2 (4000);
5736
	  PkgName 		VARCHAR2 (4000);
5737
 
5738
	  nIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();
5739
 
5740
 
5741
 
5742
/*Rupesh Release on 17/05/2006*/
5743
     CURSOR proc_cur
5744
      IS
5745
         SELECT prc.proc_id, prc.proc_name, prc.proc_description, 
5746
		 		prc.run_as, prc.pkg_owner, prc.is_interface, pp.PV_ID
5747
           FROM processes prc, release_manager.package_processes pp
5748
          WHERE pp.pv_id IN (
5749
                   SELECT *
5750
                     FROM THE
5751
                             (SELECT CAST
5752
                                        (in_list_number (npvidlist) AS DEPMGR_NUMBER_TAB_t
5753
                                        )
5754
                                FROM DUAL
5755
                             ))
5756
			AND	pp.PROC_ID = prc.PROC_ID;
5757
 
5758
      proc_rec      proc_cur%ROWTYPE;
5759
   BEGIN
5760
 
5761
 
5762
 
5763
      OPEN proc_cur;
5764
 
5765
      FETCH proc_cur
5766
       INTO proc_rec;
5767
 
5768
      WHILE proc_cur%FOUND
5769
      LOOP
5770
 
5771
   	 SELECT PKG.PKG_NAME INTO PkgName
5772
	 FROM PACKAGE_VERSIONS PV, PACKAGES PKG
5773
	 WHERE PV.PV_ID = proc_rec.pv_id
5774
	 AND PKG.PKG_ID = PV.PKG_ID;	  
5775
 
5776
         INSERT INTO processes_config
5777
                     (proc_id, prod_id, os_id, pkg_health_tag, cmd_interface, pkg_owner, is_interface, proc_description
5778
                     )
5779
              VALUES (proc_rec.proc_id, proc_rec.pv_id, nosid, proc_rec.proc_name, proc_rec.run_as, proc_rec.pkg_owner, proc_rec.is_interface, proc_rec.proc_description
5780
                     );
5781
 
5782
         SELECT prc.proc_name
5783
           INTO processname
5784
           FROM processes prc
5785
          WHERE prc.proc_id = proc_rec.proc_id;
5786
 
5787
	-- Log Action --
5788
	pk_Bom.Log_Os_Trail ( nosid,  
5789
						  'Added process with health tag '|| processname ||' for product '|| PkgName,
5790
						  nUserId );
5791
 
5792
         FETCH proc_cur
5793
          INTO proc_rec;
5794
      END LOOP;
5795
   END;
5796
 
5797
/*--------------------------------------------------------------------------------------------------*/
5798
 
5799
 
5800
 
5801
END pk_Operating_System;
5802
 
5803
/
5804
 
5805
/
5806
--------------------------------------------------------
5807
--  DDL for Package Body PK_PRODUCT
5808
--------------------------------------------------------
5809
 
5810
  CREATE OR REPLACE PACKAGE BODY "PK_PRODUCT" 
5811
IS
5812
/* ---------------------------------------------------------------------------
5813
    Modified By: Rupesh Solanki
5814
   Date: 20/03/2006
5815
   --------------------------------------------------------------------------- */
5816
 
5817
   /*--------------------------------------------------------------------------------------------------*/
5818
   PROCEDURE new_product (
5819
      sprodname      IN       PACKAGES.pkg_name%TYPE,
5820
      sprodversion   IN       package_versions.pkg_version%TYPE,
5821
      nuserid        IN       NUMBER,
5822
      outprodid      OUT      package_versions.pv_id%TYPE
5823
   )
5824
   IS
5825
   BEGIN
5826
/*--------------- Business Rules Here -------------------*/
5827
/*-------------------------------------------------------*/
5828
 
5829
      -- Call Release Manager to add new product
5830
      seed_package_names_versions (sprodname,
5831
                                   sprodversion,
5832
                                   nuserid,
5833
                                   outprodid
5834
                                  );
5835
   END new_product;
5836
 
5837
/*--------------------------------------------------------------------------------------------------*/
5838
   PROCEDURE add_product (
5839
      sprodidlist   IN   VARCHAR2,
5840
      nosid         IN   os_contents.os_id%TYPE,
5841
      nuserid       IN   NUMBER
5842
   )
5843
   IS
5844
      nextseqnum   NUMBER;
5845
      pkgname      VARCHAR2 (100);
5846
      pkgversion   VARCHAR2 (100);
5847
      nodename     VARCHAR2 (4000);
5848
 
5849
      CURSOR prod_cur
5850
      IS
5851
         SELECT   qry.pv_id AS prod_id, qry.pv_description, qry.comments,
5852
                  qry.is_patch
5853
             FROM (
5854
                   /* Products */
5855
                   SELECT pv.pv_id, TO_NUMBER (NULL) AS install_order,
5856
                          TO_NUMBER (NULL) AS pkg_id, pv.pv_description,
5857
                          pv.comments, pv.is_patch
5858
                     FROM package_versions pv
5859
                    WHERE pv.is_patch IS NULL
5860
                      AND pv.pv_id IN (
5861
                             SELECT *
5862
                               FROM THE
5863
                                       (SELECT CAST
5864
                                                  (in_list_number (sprodidlist) AS depmgr_number_tab_t
5865
                                                  )
5866
                                          FROM DUAL
5867
                                       ))
5868
                   UNION ALL
5869
                   /* Patches */
5870
                   SELECT pv.pv_id, pp.install_order, pv.pkg_id,
5871
                          pv.pv_description, pv.comments, pv.is_patch
5872
                     FROM package_patches pp, package_versions pv
5873
                    WHERE pp.patch_id = pv.pv_id
5874
                      AND pp.patch_id IN (
5875
                             SELECT *
5876
                               FROM THE
5877
                                       (SELECT CAST
5878
                                                  (in_list_number (sprodidlist) AS depmgr_number_tab_t
5879
                                                  )
5880
                                          FROM DUAL
5881
                                       ))) qry
5882
         ORDER BY qry.pkg_id, qry.install_order;
5883
 
5884
      prod_rec     prod_cur%ROWTYPE;
5885
   BEGIN
5886
/*--------------- Business Rules Here -------------------*/
5887
/*-------------------------------------------------------*/
5888
 
5889
      -- Get seq_num
5890
      SELECT MAX (osc.seq_num)
5891
        INTO nextseqnum
5892
        FROM os_contents osc
5893
       WHERE osc.os_id = nosid;
5894
 
5895
      -- Set NextSeqNum to 0 if no existing products are found
5896
      IF nextseqnum IS NULL
5897
      THEN
5898
         nextseqnum := 1;
5899
      ELSE
5900
         nextseqnum := nextseqnum + 1;
5901
      END IF;
5902
 
5903
      -- Insert into OS Contents
5904
      OPEN prod_cur;
5905
 
5906
      FETCH prod_cur
5907
       INTO prod_rec;
5908
 
5909
      WHILE prod_cur%FOUND
5910
      LOOP
5911
         IF (prod_rec.is_patch IS NULL)
5912
         THEN
5913
            INSERT INTO os_contents
5914
                        (os_id, seq_num, prod_id,
5915
                         product_comments
5916
                        )
5917
                 VALUES (nosid, nextseqnum, prod_rec.prod_id,
5918
                         prod_rec.pv_description
5919
                        );
5920
         ELSE
5921
            INSERT INTO os_contents
5922
                        (os_id, seq_num, prod_id,
5923
                         product_comments
5924
                        )
5925
                 VALUES (nosid, nextseqnum, prod_rec.prod_id,
5926
                         prod_rec.comments
5927
                        );
5928
         END IF;
5929
 
5930
         SELECT pkg.pkg_name
5931
           INTO pkgname
5932
           FROM PACKAGES pkg, package_versions pv
5933
          WHERE pv.pv_id = prod_rec.prod_id AND pkg.pkg_id = pv.pkg_id;
5934
 
5935
         SELECT pkg_version
5936
           INTO pkgversion
5937
           FROM package_versions pv
5938
          WHERE pv.pv_id = prod_rec.prod_id;
5939
 
5940
         SELECT nn.node_name
5941
           INTO nodename
5942
           FROM network_nodes nn, operating_systems os
5943
          WHERE nn.node_id = os.node_id AND os.os_id = nosid;
5944
 
5945
         -- Log Action --
5946
         pk_bom.log_os_trail (nosid,
5947
                                 'Added Product: '
5948
                              || pkgname
5949
                              || ' (Version: '
5950
                              || pkgversion
5951
                              || ') with Install Order: '
5952
                              || nextseqnum
5953
                              || ' on Node: '
5954
                              || nodename,
5955
                              nuserid
5956
                             );
5957
         nextseqnum := nextseqnum + 1;
5958
 
5959
         FETCH prod_cur
5960
          INTO prod_rec;
5961
      END LOOP;
5962
 
5963
      CLOSE prod_cur;
5964
   END add_product;
5965
 
5966
/*--------------------------------------------------------------------------------------------------*/
5967
   PROCEDURE hide_product (
5968
      sprodidlist   IN   VARCHAR2,
5969
      nosid         IN   os_contents.os_id%TYPE,
5970
      nuserid       IN   NUMBER
5971
   )
5972
   IS
5973
   BEGIN
5974
/*--------------- Business Rules Here -------------------*/
5975
/*-------------------------------------------------------*/
5976
      INSERT INTO hide_products
5977
                  (os_id, prod_id
5978
                  )
5979
           VALUES (nosid, sprodidlist
5980
                  );
5981
   END hide_product;
5982
 
5983
/*--------------------------------------------------------------------------------------------------*/
5984
   PROCEDURE unhide_product (
5985
      sprodidlist   IN   NUMBER,
5986
      nosid         IN   os_contents.os_id%TYPE,
5987
      nuserid       IN   NUMBER
5988
   )
5989
   IS
5990
   BEGIN
5991
/*--------------- Business Rules Here -------------------*/
5992
/*-------------------------------------------------------*/
5993
      DELETE FROM hide_products
5994
            WHERE prod_id = sprodidlist AND os_id = nosid;
5995
   END unhide_product;
5996
 
5997
/*--------------------------------------------------------------------------------------------------*/
5998
   PROCEDURE update_process (
5999
      nprocid         IN   processes_config.proc_id%TYPE,
6000
      nprodid         IN   processes_config.prod_id%TYPE,
6001
      nisinterface    IN   processes_config.is_interface%TYPE,
6002
      nosid           IN   processes_config.os_id%TYPE,
6003
      ncmdinterface   IN   processes_config.cmd_interface%TYPE,
6004
      npkgowner       IN   processes_config.pkg_owner%TYPE,
6005
      spkghealthtag   IN   processes_config.pkg_health_tag%TYPE,
6006
      nproduct        IN   processes_config.prod_id%TYPE
6007
   )
6008
   IS
6009
   BEGIN
6010
      UPDATE processes_config
6011
         SET cmd_interface = ncmdinterface,
6012
             pkg_owner = npkgowner,
6013
             is_interface = nisinterface,
6014
             pkg_health_tag = spkghealthtag,
6015
             prod_id = nproduct
6016
       WHERE prod_id = nprodid AND os_id = nosid AND proc_id = nprocid;
6017
   END update_process;
6018
 
6019
/*--------------------------------------------------------------------------------------------------*/
6020
   PROCEDURE update_product (
6021
      noldprodid             IN       os_contents.prod_id%TYPE,
6022
      snewprodidversion      IN       VARCHAR2,
6023
      nosid                  IN       os_contents.os_id%TYPE,
6024
      nseqnum                IN       os_contents.seq_num%TYPE,
6025
      scomments              IN       os_contents.product_comments%TYPE,
6026
      ssunoselectronicname   IN       PACKAGES.sunos_electronic_name%TYPE,
6027
      swinelectronicname     IN       PACKAGES.win_electronic_name%TYPE,
6028
      sisnodespec            IN       os_contents.is_node_spec%TYPE,
6029
      snotxml                IN       os_contents.not_xml%TYPE,
6030
      spatchelectronicname   IN       package_versions.patch_electronic_name%TYPE,
6031
      nuserid                IN       NUMBER,
6032
      outprodid              OUT      package_versions.pv_id%TYPE
6033
   )
6034
   IS
6035
      nnewprodid   os_contents.prod_id%TYPE;
6036
      sprodname    PACKAGES.pkg_name%TYPE;
6037
 
6038
      CURSOR curprod
6039
      IS
6040
         SELECT pv.pv_id
6041
           FROM package_versions pv
6042
          WHERE pv.pkg_id IN (SELECT pv.pkg_id
6043
                                FROM package_versions pv
6044
                               WHERE pv.pv_id = noldprodid)
6045
            AND pv.pkg_version = snewprodidversion;
6046
 
6047
      recprod      curprod%ROWTYPE;
6048
   BEGIN
6049
      /*--------------- Business Rules Here -------------------*/
6050
      IF    (noldprodid IS NULL)
6051
         OR (snewprodidversion IS NULL)
6052
         OR (nosid IS NULL)
6053
         OR (nseqnum IS NULL)
6054
      THEN
6055
         raise_application_error (-20000,
6056
                                     'Missing some parameters! nOldProdId= '
6057
                                  || noldprodid
6058
                                  || ', sNewProdIdVersion= '
6059
                                  || snewprodidversion
6060
                                  || ', nOsId= '
6061
                                  || nosid
6062
                                  || ', nSeqNum= '
6063
                                  || nseqnum
6064
                                 );
6065
      END IF;
6066
 
6067
/*-------------------------------------------------------*/
6068
 
6069
      -- Get new prod_id
6070
      OPEN curprod;
6071
 
6072
      FETCH curprod
6073
       INTO recprod;
6074
 
6075
      -- Get the Package Name
6076
      SELECT pkg.pkg_name
6077
        INTO sprodname
6078
        FROM PACKAGES pkg, package_versions pv
6079
       WHERE pkg.pkg_id = pv.pkg_id AND pv.pv_id = noldprodid;
6080
 
6081
      IF curprod%FOUND
6082
      THEN
6083
         nnewprodid := recprod.pv_id;
6084
      ELSE
6085
         -- Call Release Manager to add new product
6086
         seed_package_names_versions (sprodname,
6087
                                      snewprodidversion,
6088
                                      nuserid,
6089
                                      outprodid
6090
                                     );
6091
         nnewprodid := outprodid;
6092
      /*RAISE_APPLICATION_ERROR (-20000, 'Version '|| sNewProdIdVersion ||' does not exist.');*/
6093
      END IF;
6094
 
6095
      CLOSE curprod;
6096
 
6097
      -- Update Product Details
6098
      UPDATE os_contents
6099
         SET prod_id = nnewprodid,
6100
             product_comments = scomments,
6101
             not_xml = snotxml,
6102
             is_node_spec = sisnodespec
6103
       WHERE os_id = nosid AND prod_id = noldprodid;
6104
 
6105
      --Update Package Electronic Name Details In Packages Table
6106
      UPDATE PACKAGES
6107
         SET sunos_electronic_name = ssunoselectronicname,
6108
             win_electronic_name = swinelectronicname
6109
       WHERE pkg_id = (SELECT pkg_id
6110
                         FROM package_versions
6111
                        WHERE package_versions.pv_id = nnewprodid);
6112
 
6113
      --Update Patch Electronic Name In Package Versions Table
6114
      UPDATE package_versions
6115
         SET patch_electronic_name = spatchelectronicname
6116
       WHERE pv_id = nnewprodid;
6117
 
6118
      -- Update seq_num
6119
      pk_operating_system.shift_product_seqnum (nnewprodid, nosid, nseqnum);
6120
   END update_product;
6121
 
6122
/*--------------------------------------------------------------------------------------------------*/
6123
   PROCEDURE replace_product (
6124
      noldprodid   IN   os_contents.prod_id%TYPE,
6125
      nnewprodid   IN   os_contents.prod_id%TYPE,
6126
      nosid        IN   os_contents.os_id%TYPE,
6127
      nuserid      IN   NUMBER
6128
   )
6129
   IS
6130
      oldversion   VARCHAR2 (100);
6131
      newversion   VARCHAR2 (100);
6132
      pkgname      VARCHAR2 (100);
6133
      nodename     VARCHAR2 (4000);
6134
   BEGIN
6135
/*--------------- Business Rules Here -------------------*/
6136
/*-------------------------------------------------------*/
6137
      UPDATE os_contents
6138
         SET prod_id = nnewprodid
6139
       WHERE prod_id = noldprodid AND os_id = nosid;
6140
 
6141
      SELECT pkg_version
6142
        INTO oldversion
6143
        FROM package_versions
6144
       WHERE pv_id = noldprodid;
6145
 
6146
      SELECT pkg_version
6147
        INTO newversion
6148
        FROM package_versions
6149
       WHERE pv_id = nnewprodid;
6150
 
6151
      SELECT pkg.pkg_name
6152
        INTO pkgname
6153
        FROM PACKAGES pkg, package_versions pv
6154
       WHERE pv.pv_id = nnewprodid AND pkg.pkg_id = pv.pkg_id;
6155
 
6156
      SELECT nn.node_name
6157
        INTO nodename
6158
        FROM network_nodes nn, operating_systems os
6159
       WHERE nn.node_id = os.node_id AND os.os_id = nosid;
6160
 
6161
      -- Log Action --
6162
      pk_bom.log_os_trail (nosid,
6163
                              'Updated Product: '
6164
                           || pkgname
6165
                           || ' from Version: '
6166
                           || oldversion
6167
                           || ' to '
6168
                           || newversion
6169
                           || ' on Node: '
6170
                           || nodename,
6171
                           nuserid
6172
                          );
6173
   END replace_product;
6174
 
6175
/*--------------------------------------------------------------------------------------------------*/
6176
   PROCEDURE remove_process (
6177
      sprocname       IN   processes_config.pkg_health_tag%TYPE,
6178
      sprodidlist     IN   VARCHAR2,
6179
      nosid           IN   os_contents.os_id%TYPE,
6180
      scmdinterface   IN   processes_config.cmd_interface%TYPE,
6181
      spkgowner       IN   processes_config.pkg_owner%TYPE,
6182
      sinterface      IN   processes_config.is_interface%TYPE,
6183
      nuserid         IN   NUMBER
6184
   )
6185
   IS
6186
      processname   VARCHAR2 (4000);
6187
      nodename      VARCHAR2 (4000);
6188
   BEGIN
6189
      -- Log Action --
6190
      pk_bom.log_os_trail (nosid,
6191
                           'Deleted Process: ' || sprocname || ' From Node. ',
6192
                           nuserid
6193
                          );
6194
 
6195
/*Select the Correct Details - Begin*/
6196
      IF scmdinterface IS NOT NULL
6197
      THEN
6198
         IF sinterface IS NOT NULL
6199
         THEN
6200
            IF spkgowner IS NOT NULL
6201
            THEN
6202
               DELETE FROM processes_config
6203
                     WHERE os_id = nosid
6204
                       AND prod_id = sprodidlist
6205
                       AND pkg_health_tag = sprocname
6206
                       AND cmd_interface = scmdinterface
6207
                       AND pkg_owner = spkgowner
6208
                       AND is_interface = sinterface;
6209
            ELSE
6210
      /*sPkgOwner IS NULL, sInterface IS NOT NULL, sCmdInterface IS NOT NULL*/
6211
               DELETE FROM processes_config
6212
                     WHERE os_id = nosid
6213
                       AND prod_id = sprodidlist
6214
                       AND pkg_health_tag = sprocname
6215
                       AND cmd_interface = scmdinterface
6216
                       AND pkg_owner IS NULL
6217
                       AND is_interface = sinterface;
6218
            END IF;
6219
         ELSE               /* sInterface IS NULL, sCmdInterface IS NOT NULL*/
6220
            IF spkgowner IS NOT NULL
6221
            THEN
6222
               DELETE FROM processes_config
6223
                     WHERE os_id = nosid
6224
                       AND prod_id = sprodidlist
6225
                       AND pkg_health_tag = sprocname
6226
                       AND cmd_interface = scmdinterface
6227
                       AND pkg_owner = spkgowner
6228
                       AND is_interface IS NULL;
6229
            ELSE
6230
         /* sPkqOwner IS NULL, sInterface IS NULL, sCmdInterface IS NOT NULL*/
6231
               DELETE FROM processes_config
6232
                     WHERE os_id = nosid
6233
                       AND prod_id = sprodidlist
6234
                       AND pkg_health_tag = sprocname
6235
                       AND cmd_interface = scmdinterface
6236
                       AND pkg_owner IS NULL
6237
                       AND is_interface IS NULL;
6238
            END IF;
6239
         END IF;
6240
      ELSE                                          /* sCmdInterface IS NULL*/
6241
         IF sinterface IS NOT NULL
6242
         THEN
6243
            IF spkgowner IS NOT NULL
6244
            THEN
6245
               DELETE FROM processes_config
6246
                     WHERE os_id = nosid
6247
                       AND prod_id = sprodidlist
6248
                       AND pkg_health_tag = sprocname
6249
                       AND cmd_interface IS NULL
6250
                       AND pkg_owner = spkgowner
6251
                       AND is_interface = sinterface;
6252
            ELSE
6253
        /* sPkgOwner is NULL, sInterface IS NOT NULL, sCmdInterface IS NULL */
6254
               DELETE FROM processes_config
6255
                     WHERE os_id = nosid
6256
                       AND prod_id = sprodidlist
6257
                       AND pkg_health_tag = sprocname
6258
                       AND cmd_interface IS NULL
6259
                       AND pkg_owner IS NULL
6260
                       AND is_interface = sinterface;
6261
            END IF;
6262
         ELSE                   /* sInterface IS NULL, sCmdInterface IS NULL*/
6263
            IF spkgowner IS NOT NULL
6264
            THEN
6265
               DELETE FROM processes_config
6266
                     WHERE os_id = nosid
6267
                       AND prod_id = sprodidlist
6268
                       AND pkg_health_tag = sprocname
6269
                       AND cmd_interface IS NULL
6270
                       AND pkg_owner = spkgowner
6271
                       AND is_interface IS NULL;
6272
            ELSE
6273
             /* sPkgOwner IS NULL, sInterface IS NULL, sCmdInterface IS NULL*/
6274
               DELETE FROM processes_config
6275
                     WHERE os_id = nosid
6276
                       AND prod_id = sprodidlist
6277
                       AND pkg_health_tag = sprocname
6278
                       AND cmd_interface IS NULL
6279
                       AND pkg_owner IS NULL
6280
                       AND is_interface IS NULL;
6281
            END IF;
6282
         END IF;
6283
      END IF;
6284
/*Select the Correct Details - End*/
6285
   END remove_process;
6286
 
6287
/*--------------------------------------------------------------------------------------------------*/
6288
   PROCEDURE remove_products (
6289
      sprodidlist   IN   VARCHAR2,
6290
      nosid         IN   os_contents.os_id%TYPE,
6291
      nuserid       IN   NUMBER
6292
   )
6293
   IS
6294
      pkgname        VARCHAR2 (100);
6295
      pkgversion     VARCHAR2 (100);
6296
      nextseqnum     NUMBER              := 1;
6297
      nidcollector   depmgr_number_tab_t := depmgr_number_tab_t ();
6298
      nodename       VARCHAR2 (4000);
6299
 
6300
      CURSOR prod_cur
6301
      IS
6302
         SELECT   osc.prod_id, osc.seq_num
6303
             FROM os_contents osc
6304
            WHERE osc.os_id = nosid
6305
         ORDER BY osc.seq_num;
6306
 
6307
      prod_rec       prod_cur%ROWTYPE;
6308
   BEGIN
6309
      /*--------------- Business Rules Here -------------------*/
6310
      IF sprodidlist IS NULL
6311
      THEN
6312
         raise_application_error (-20000,
6313
                                  'Please select one or more Products.'
6314
                                 );
6315
      END IF;
6316
 
6317
/*-------------------------------------------------------*/
6318
      SELECT nn.node_name
6319
        INTO nodename
6320
        FROM network_nodes nn, operating_systems os
6321
       WHERE nn.node_id = os.node_id AND os.os_id = nosid;
6322
 
6323
      -- Remove Products
6324
      DELETE FROM os_contents
6325
            WHERE os_id = nosid
6326
              AND prod_id IN (
6327
                     SELECT *
6328
                       FROM THE
6329
                               (SELECT CAST
6330
                                          (in_list_number (sprodidlist) AS depmgr_number_tab_t
6331
                                          )
6332
                                  FROM DUAL
6333
                               ));
6334
 
6335
      -- Remove Processes
6336
      DELETE FROM processes_config
6337
            WHERE os_id = nosid
6338
              AND pkg_id IN (
6339
                     SELECT pkg_id
6340
                       FROM package_versions
6341
                      WHERE pv_id IN (
6342
                               SELECT *
6343
                                 FROM THE
6344
                                         (SELECT CAST
6345
                                                    (in_list_number
6346
                                                                  (sprodidlist) AS depmgr_number_tab_t
6347
                                                    )
6348
                                            FROM DUAL
6349
                                         )));
6350
 
6351
      -- Update Seq Numbers
6352
      OPEN prod_cur;
6353
 
6354
      FETCH prod_cur
6355
       INTO prod_rec;
6356
 
6357
      WHILE prod_cur%FOUND
6358
      LOOP
6359
         UPDATE os_contents
6360
            SET seq_num = nextseqnum
6361
          WHERE os_id = nosid AND prod_id = prod_rec.prod_id;
6362
 
6363
         nextseqnum := nextseqnum + 1;
6364
 
6365
         FETCH prod_cur
6366
          INTO prod_rec;
6367
      END LOOP;
6368
 
6369
      CLOSE prod_cur;
6370
 
6371
      nidcollector := in_list_number (sprodidlist);
6372
 
6373
      FOR i IN 1 .. nidcollector.COUNT
6374
      LOOP
6375
         SELECT pkg.pkg_name
6376
           INTO pkgname
6377
           FROM PACKAGES pkg, package_versions pv
6378
          WHERE pv.pv_id = nidcollector (i) AND pkg.pkg_id = pv.pkg_id;
6379
 
6380
         SELECT pkg_version
6381
           INTO pkgversion
6382
           FROM package_versions pv
6383
          WHERE pv.pv_id = nidcollector (i);
6384
 
6385
         -- Log Action --
6386
         pk_bom.log_os_trail (nosid,
6387
                                 'Deleted Product: '
6388
                              || pkgname
6389
                              || ' (Version: '
6390
                              || pkgversion
6391
                              || ') from Node: '
6392
                              || nodename,
6393
                              nuserid
6394
                             );
6395
      END LOOP;
6396
   END remove_products;
6397
 
6398
/*--------------------------------------------------------------------------------------------------*/
6399
   PROCEDURE add_products_nodespec (
6400
      sprodidlist   IN   VARCHAR2,
6401
      nosid         IN   os_contents.os_id%TYPE,
6402
      nuserid       IN   NUMBER
6403
   )
6404
   IS
6405
      nextseqnum   NUMBER             := 1;
6406
 
6407
      CURSOR prod_cur
6408
      IS
6409
         SELECT   osc.prod_id, osc.seq_num
6410
             FROM os_contents osc
6411
            WHERE osc.os_id = nosid
6412
         ORDER BY osc.seq_num;
6413
 
6414
      prod_rec     prod_cur%ROWTYPE;
6415
   BEGIN
6416
      /*--------------- Business Rules Here -------------------*/
6417
      IF sprodidlist IS NULL
6418
      THEN
6419
         raise_application_error (-20000,
6420
                                  'Please select one or more Products.'
6421
                                 );
6422
      END IF;
6423
 
6424
/*-------------------------------------------------------*/
6425
      UPDATE os_contents
6426
         SET is_node_spec = ''
6427
       WHERE os_id = nosid;
6428
 
6429
      -- Set Nodespec On
6430
      UPDATE os_contents
6431
         SET is_node_spec = 'on'
6432
       WHERE os_id = nosid
6433
         AND prod_id IN (
6434
                SELECT *
6435
                  FROM THE
6436
                          (SELECT CAST
6437
                                     (in_list_number (sprodidlist) AS depmgr_number_tab_t
6438
                                     )
6439
                             FROM DUAL
6440
                          ));
6441
   END add_products_nodespec;
6442
 
6443
/*--------------------------------------------------------------------------------------------------*/
6444
   PROCEDURE accept_reject (
6445
      nprodid     IN   product_details.prod_id%TYPE,
6446
      nbomid      IN   boms.bom_id%TYPE,
6447
      scomments   IN   rejection_trail.comments%TYPE DEFAULT NULL,
6448
      nuserid     IN   rejection_trail.user_id%TYPE,
6449
      nosid       IN   NUMBER
6450
   )
6451
   IS
6452
      isrejected   product_details.is_rejected%TYPE;
6453
      pkgname      VARCHAR2 (100);
6454
      pkgversion   VARCHAR2 (100);
6455
      nodename     VARCHAR2 (4000);
6456
 
6457
      CURSOR curprod
6458
      IS
6459
         SELECT pd.*
6460
           FROM product_details pd
6461
          WHERE pd.prod_id = nprodid;
6462
 
6463
      recprod      curprod%ROWTYPE;
6464
   BEGIN
6465
      /*--------------- Business Rules Here -------------------*/
6466
      IF (nprodid IS NULL)
6467
      THEN
6468
         raise_application_error (-20000,
6469
                                  'Please select at least one product.'
6470
                                 );
6471
      END IF;
6472
 
6473
/*-------------------------------------------------------*/
6474
 
6475
      -- Set new Accept-Reject state
6476
      isrejected := 'Y';
6477
 
6478
      SELECT nn.node_name
6479
        INTO nodename
6480
        FROM network_nodes nn, operating_systems os
6481
       WHERE nn.node_id = os.node_id AND os.os_id = nosid;
6482
 
6483
      OPEN curprod;
6484
 
6485
      FETCH curprod
6486
       INTO recprod;
6487
 
6488
      IF curprod%FOUND
6489
      THEN
6490
         /* Product Details found */
6491
         SELECT pkg.pkg_name
6492
           INTO pkgname
6493
           FROM PACKAGES pkg, package_versions pv
6494
          WHERE pv.pv_id = nprodid AND pkg.pkg_id = pv.pkg_id;
6495
 
6496
         SELECT pkg_version
6497
           INTO pkgversion
6498
           FROM package_versions pv
6499
          WHERE pv.pv_id = nprodid;
6500
 
6501
         -- Set new Accept-Reject state
6502
         IF recprod.is_rejected = 'Y'
6503
         THEN
6504
            isrejected := 'N';
6505
            -- Log Action --
6506
            pk_bom.log_os_trail (nosid,
6507
                                    'Accepted Product: '
6508
                                 || pkgname
6509
                                 || ' '
6510
                                 || pkgversion
6511
                                 || ' on Node: '
6512
                                 || nodename,
6513
                                 nuserid
6514
                                );
6515
         ELSE
6516
            isrejected := 'Y';
6517
            -- Log Action --
6518
            pk_bom.log_os_trail (nosid,
6519
                                    'Rejected Product: '
6520
                                 || pkgname
6521
                                 || ' '
6522
                                 || pkgversion
6523
                                 || ' on Node: '
6524
                                 || nodename,
6525
                                 nuserid
6526
                                );
6527
         END IF;
6528
 
6529
         -- Toggle Accept-Reject State
6530
         UPDATE product_details pd
6531
            SET pd.is_rejected = isrejected
6532
          WHERE pd.prod_id = nprodid;
6533
      ELSE
6534
         /* Product Details NOT found */
6535
 
6536
         -- Toggle Accept-Reject State
6537
         INSERT INTO product_details
6538
                     (prod_id, is_rejected
6539
                     )
6540
              VALUES (nprodid, isrejected
6541
                     );
6542
      END IF;
6543
 
6544
      CLOSE curprod;
6545
 
6546
      -- Reflect changes to the BOM level
6547
 
6548
      /* Log Rejection Trail */
6549
      pk_utils.log_rejection_trail
6550
                                 (get_system_value ('enumENTITY_TYPE_PRODUCT'),
6551
                                  nprodid,
6552
                                  isrejected,
6553
                                  nuserid,
6554
                                  scomments
6555
                                 );
6556
   END accept_reject;
6557
 
6558
/*--------------------------------------------------------------------------------------------------*/
6559
   PROCEDURE accept_reject_list (
6560
      nprodidlist   IN   VARCHAR2,
6561
      nbomid        IN   boms.bom_id%TYPE,
6562
      scomments     IN   rejection_trail.comments%TYPE DEFAULT NULL,
6563
      nuserid       IN   rejection_trail.user_id%TYPE,
6564
      nosid         IN   NUMBER
6565
   )
6566
   IS
6567
      nidcollector   depmgr_number_tab_t := depmgr_number_tab_t ();
6568
   BEGIN
6569
      /*--------------- Business Rules Here -------------------*/
6570
      IF (nprodidlist IS NULL)
6571
      THEN
6572
         raise_application_error (-20000,
6573
                                  'Please select at least one product.'
6574
                                 );
6575
      END IF;
6576
 
6577
/*-------------------------------------------------------*/
6578
      nidcollector := in_list_number (nprodidlist);
6579
 
6580
      FOR i IN 1 .. nidcollector.COUNT
6581
      LOOP
6582
         accept_reject (nidcollector (i), nbomid, scomments, nuserid, nosid);
6583
      END LOOP;
6584
   END accept_reject_list;
6585
 
6586
/*--------------------------------------------------------------------------------------------------*/
6587
   PROCEDURE accept_reject_comments (
6588
      nprodid      IN   product_details.prod_id%TYPE,
6589
      nrejectseq   IN   rejection_trail.reject_seq%TYPE,
6590
      scomments    IN   rejection_trail.comments%TYPE DEFAULT NULL,
6591
      nuserid      IN   rejection_trail.user_id%TYPE
6592
   )
6593
   IS
6594
      isrejected   rejection_trail.is_rejected%TYPE;
6595
   BEGIN
6596
      /*--------------- Business Rules Here -------------------*/
6597
      IF (nprodid IS NULL)
6598
      THEN
6599
         raise_application_error (-20000,
6600
                                     'Missing some parameters! nProdId= '
6601
                                  || nprodid
6602
                                 );
6603
      END IF;
6604
 
6605
/*-------------------------------------------------------*/
6606
      IF nrejectseq IS NULL
6607
      THEN
6608
         /* CREATE New Note */
6609
 
6610
         -- Get last IsRejected state
6611
         SELECT   rt.is_rejected
6612
             INTO isrejected
6613
             FROM rejection_trail rt
6614
            WHERE rt.entity_id = nprodid
6615
              AND rt.enum_entity_type =
6616
                                  get_system_value ('enumENTITY_TYPE_PRODUCT')
6617
              AND ROWNUM = 1
6618
         ORDER BY rt.reject_seq;
6619
 
6620
         /* Log Rejection Trail */
6621
         pk_utils.log_rejection_trail
6622
                                 (get_system_value ('enumENTITY_TYPE_PRODUCT'),
6623
                                  nprodid,
6624
                                  isrejected,
6625
                                  nuserid,
6626
                                  scomments
6627
                                 );
6628
      ELSE
6629
         /* EDIT Note */
6630
         UPDATE rejection_trail rt
6631
            SET rt.comments = scomments,
6632
                rt.user_id = nuserid,
6633
                rt.date_time_stamp = get_datetime ()
6634
          WHERE rt.enum_entity_type =
6635
                                  get_system_value ('enumENTITY_TYPE_PRODUCT')
6636
            AND rt.entity_id = nprodid
6637
            AND rt.reject_seq = nrejectseq;
6638
      END IF;
6639
   END accept_reject_comments;
6640
 
6641
/*--------------------------------------------------------------------------------------------------*/
6642
   PROCEDURE sort_products (
6643
      sprodidorder   IN   VARCHAR2,
6644
      nosid          IN   os_contents.os_id%TYPE,
6645
      nuserid        IN   NUMBER
6646
   )
6647
   IS
6648
      nidcollector   depmgr_number_tab_t := depmgr_number_tab_t ();
6649
      seqnum         NUMBER;
6650
   BEGIN
6651
      /*--------------- Business Rules Here -------------------*/
6652
      -- Check for parameters
6653
      IF (sprodidorder IS NULL) OR (nosid IS NULL)
6654
      THEN
6655
         raise_application_error (-20000,
6656
                                     'Missing some parameters! nOsId='
6657
                                  || nosid
6658
                                  || ' sProdIdOrder='
6659
                                  || sprodidorder
6660
                                 );
6661
      END IF;
6662
 
6663
/*-------------------------------------------------------*/
6664
      nidcollector := in_list_number (sprodidorder);
6665
      -- Set start sequence number
6666
      seqnum := 1;
6667
 
6668
      FOR i IN 1 .. nidcollector.COUNT
6669
      LOOP
6670
         -- Update new sequence number
6671
         UPDATE os_contents osc
6672
            SET osc.seq_num = seqnum
6673
          WHERE osc.os_id = nosid AND osc.prod_id = nidcollector (i);
6674
 
6675
         seqnum := seqnum + 1;
6676
      END LOOP;
6677
   END sort_products;
6678
 
6679
/*--------------------------------------------------------------------------------------------------*/
6680
   PROCEDURE remove_obsolete_patches (
6681
      nosid     IN   os_contents.os_id%TYPE,
6682
      nuserid   IN   NUMBER
6683
   )
6684
   IS
6685
      nextseqnum         NUMBER                     := 1;
6686
 
6687
      CURSOR prod_cur
6688
      IS
6689
         SELECT   osc.prod_id, osc.seq_num
6690
             FROM os_contents osc
6691
            WHERE osc.os_id = nosid
6692
         ORDER BY osc.seq_num;
6693
 
6694
      prod_rec           prod_cur%ROWTYPE;
6695
 
6696
      CURSOR log_obsolete_cur
6697
      IS
6698
         SELECT osc.prod_id, pv.pkg_version
6699
           FROM os_contents osc, package_versions pv
6700
          WHERE pv.pv_id = osc.prod_id
6701
            AND pv.is_obsolete = 'Y'
6702
            AND osc.os_id = nosid;
6703
 
6704
      log_obsolete_rec   log_obsolete_cur%ROWTYPE;
6705
   BEGIN
6706
      -- Log Obsolete Patches
6707
      OPEN log_obsolete_cur;
6708
 
6709
      FETCH log_obsolete_cur
6710
       INTO log_obsolete_rec;
6711
 
6712
      WHILE log_obsolete_cur%FOUND
6713
      LOOP
6714
         pk_bom.log_os_trail (nosid,
6715
                                 'Removed Obsolete Patch: '
6716
                              || log_obsolete_rec.pkg_version,
6717
                              nuserid
6718
                             );
6719
 
6720
         FETCH log_obsolete_cur
6721
          INTO log_obsolete_rec;
6722
      END LOOP;
6723
 
6724
      CLOSE log_obsolete_cur;
6725
 
6726
      -- Delete Obsolete Patches in the OS.
6727
      DELETE FROM os_contents
6728
            WHERE os_id = nosid
6729
              AND prod_id IN (
6730
                     SELECT osc.prod_id
6731
                       FROM os_contents osc, package_versions pv
6732
                      WHERE pv.pv_id = osc.prod_id
6733
                        AND pv.is_obsolete = 'Y'
6734
                        AND osc.os_id = nosid);
6735
 
6736
      -- Update Seq Numbers
6737
      OPEN prod_cur;
6738
 
6739
      FETCH prod_cur
6740
       INTO prod_rec;
6741
 
6742
      WHILE prod_cur%FOUND
6743
      LOOP
6744
         UPDATE os_contents
6745
            SET seq_num = nextseqnum
6746
          WHERE os_id = nosid AND prod_id = prod_rec.prod_id;
6747
 
6748
         nextseqnum := nextseqnum + 1;
6749
 
6750
         FETCH prod_cur
6751
          INTO prod_rec;
6752
      END LOOP;
6753
 
6754
      CLOSE prod_cur;
6755
   END remove_obsolete_patches;
6756
 
6757
/*--------------------------------------------------------------------------------------------------*/
6758
   FUNCTION get_os_id (pvid IN NUMBER)
6759
      RETURN NUMBER
6760
   IS
6761
      returnvalue   NUMBER;
6762
   BEGIN
6763
      SELECT osc.os_id
6764
        INTO returnvalue
6765
        FROM os_contents osc
6766
       WHERE osc.prod_id = pvid;
6767
 
6768
      RETURN returnvalue;
6769
   END;
6770
 
6771
/*--------------------------------------------------------------------------------------------------*/
6772
   FUNCTION get_node_id (osid IN NUMBER)
6773
      RETURN NUMBER
6774
   IS
6775
      returnvalue   NUMBER;
6776
   BEGIN
6777
      SELECT os.node_id
6778
        INTO returnvalue
6779
        FROM operating_systems os
6780
       WHERE os.os_id = osid;
6781
 
6782
      RETURN returnvalue;
6783
   END;
6784
 
6785
/*-------------------------------------------------------------------------------------------------------*/
6786
   PROCEDURE add_product_note (
6787
      nprodid   IN   NUMBER,
6788
      snotes    IN   VARCHAR2,
6789
      nuserid   IN   NUMBER
6790
   )
6791
   IS
6792
   BEGIN
6793
      INSERT INTO product_notes
6794
           VALUES (nprodid, snotes);
6795
 
6796
      /* log Product_Trail*/
6797
      pk_product.log_product_trail (nprodid, snotes, nuserid);
6798
   END add_product_note;
6799
 
6800
/*-------------------------------------------------------------------------------------------------------*/
6801
   PROCEDURE edit_product_note (
6802
      nprodid   IN   NUMBER,
6803
      snotes    IN   VARCHAR2,
6804
      nuserid   IN   NUMBER
6805
   )
6806
   IS
6807
   BEGIN
6808
      UPDATE product_notes
6809
         SET notes = snotes
6810
       WHERE prod_id = nprodid;
6811
 
6812
      /* log Product_Trail*/
6813
      pk_product.log_product_trail (nprodid, snotes, nuserid);
6814
   END edit_product_note;
6815
 
6816
/*--------------------------------------------------------------------------------------------------*/
6817
   PROCEDURE log_product_trail (
6818
      nprodid   IN   product_trail.prod_id%TYPE,
6819
      saction   IN   product_trail.trail_action%TYPE,
6820
      nuserid   IN   product_trail.user_id%TYPE
6821
   )
6822
   IS
6823
   BEGIN
6824
      /*--------------- Business Rules Here -------------------*/
6825
      IF (nprodid IS NULL) OR (saction IS NULL) OR (nuserid IS NULL)
6826
      THEN
6827
         raise_application_error (-20000,
6828
                                     'Missing some parameters! nProdId= '
6829
                                  || nprodid
6830
                                  || ', sAction='
6831
                                  || saction
6832
                                  || ', nUserId='
6833
                                  || nuserid
6834
                                 );
6835
      END IF;
6836
 
6837
/*-------------------------------------------------------*/
6838
      INSERT INTO product_trail
6839
                  (prod_id, trail_action, user_id, date_time_stamp
6840
                  )
6841
           VALUES (nprodid, saction, nuserid, get_datetime ()
6842
                  );
6843
   END log_product_trail;
6844
/*--------------------------------------------------------------------------------------------------*/
6845
END pk_product;
6846
 
6847
/
6848
 
6849
/
6850
--------------------------------------------------------
6851
--  DDL for Package Body PK_PRODUCTION
6852
--------------------------------------------------------
6853
 
6854
  CREATE OR REPLACE PACKAGE BODY "PK_PRODUCTION" 
6855
IS
6856
/* ---------------------------------------------------------------------------
6857
    Version: 1.0.0
6858
   --------------------------------------------------------------------------- */
6859
 
6860
 
6861
/*--------------------------------------------------------------------------------------------------*/
6862
PROCEDURE Release_Authorisation_Tester ( nPvId IN NUMBER,
6863
  					  				   	 nBomId IN NUMBER,
6864
										 nTesterId IN NUMBER,
6865
										 sTesterComments IN VARCHAR2 ) IS
6866
 
6867
 
6868
BEGIN
6869
	/*--------------- Business Rules Here -------------------*/
6870
	/*-------------------------------------------------------*/
6871
 
6872
 
6873
 
6874
	-- Insert Into Release Authorisation Table --
6875
	INSERT INTO RELEASE_AUTHORISATION ( PV_ID, BOM_ID, TESTER_ID, TESTER_COMMENTS, TESTER_DATESTAMP )
6876
	VALUES ( nPvId, nBomId, nTesterId, sTesterComments, GET_DATETIME() );
6877
 
6878
 
6879
 
6880
END	Release_Authorisation_Tester;
6881
 
6882
/*--------------------------------------------------------------------------------------------------*/
6883
 
6884
/*--------------------------------------------------------------------------------------------------*/
6885
PROCEDURE Release_Authorisation_Manager ( nPvId IN NUMBER,
6886
  					  				   	  nBomId IN NUMBER,
6887
										  nManagerId IN NUMBER,
6888
										  sManagerComments IN VARCHAR2 ) IS
6889
 
6890
 
6891
BEGIN
6892
	/*--------------- Business Rules Here -------------------*/
6893
	/*-------------------------------------------------------*/
6894
 
6895
 
6896
 
6897
	-- Insert Into Release Authorisation Table --
6898
	UPDATE RELEASE_AUTHORISATION 
6899
	SET MANAGER_ID = nManagerId,
6900
		MANAGER_COMMENTS = sManagerComments,
6901
		MANAGER_DATESTAMP = GET_DATETIME(),
6902
		IS_OFFICIAL = 'Y'
6903
	WHERE PV_ID = nPvId
6904
	AND BOM_ID = nBomId;	
6905
 
6906
 
6907
 
6908
END	Release_Authorisation_Manager;
6909
 
6910
/*--------------------------------------------------------------------------------------------------*/
6911
 
6912
/*--------------------------------------------------------------------------------------------------*/
6913
PROCEDURE Log_Pkg_Trail ( nPkgId IN OS_TRAIL.OS_ID%TYPE,
6914
						  sAction IN OS_TRAIL.TRAIL_ACTION%TYPE,
6915
						  nUserId IN OS_TRAIL.USER_ID%TYPE  ) IS
6916
 
6917
 
6918
BEGIN
6919
	/*--------------- Business Rules Here -------------------*/
6920
	IF (nPkgId IS NULL) OR (sAction IS NULL) OR (nUserId IS NULL)
6921
	THEN
6922
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nOsId= '|| nPkgId ||', sAction='|| sAction ||', nUserId='|| nUserId );
6923
	END IF;
6924
	/*-------------------------------------------------------*/
6925
 
6926
	INSERT INTO PACKAGE_TRAIL ( PKG_ID, TRAIL_ACTION, USER_ID, DATE_TIME_STAMP )
6927
	VALUES ( nPkgId, sAction, nUserId, GET_DATETIME() );	
6928
 
6929
END	Log_Pkg_Trail;
6930
/*--------------------------------------------------------------------------------------------------*/
6931
PROCEDURE Reject_Product ( nPvId IN NUMBER,
6932
						   nTesterId IN NUMBER,
6933
						   sTesterComments IN VARCHAR2 ) IS
6934
 
6935
IsRejected PRODUCT_DETAILS.IS_REJECTED%TYPE;		
6936
 
6937
CURSOR curProd IS
6938
	SELECT pd.*
6939
	  FROM PRODUCT_DETAILS pd
6940
	 WHERE pd.PROD_ID = nPvId;
6941
recProd curProd%ROWTYPE;				   
6942
 
6943
BEGIN
6944
 
6945
	-- Set new Accept-Reject state
6946
	IsRejected := 'Y';
6947
 
6948
 
6949
	OPEN curProd;
6950
	FETCH curProd INTO recProd;	
6951
 
6952
	IF curProd%FOUND THEN
6953
		/* Product Details found */	
6954
 
6955
		-- Toggle Accept-Reject State 
6956
		UPDATE PRODUCT_DETAILS pd SET
6957
		pd.IS_REJECTED = IsRejected
6958
		WHERE pd.PROD_ID = nPvId;
6959
 
6960
	ELSE
6961
		/* Product Details NOT found */
6962
 
6963
		-- Toggle Accept-Reject State	
6964
		INSERT INTO PRODUCT_DETAILS ( PROD_ID, IS_REJECTED )
6965
		VALUES ( nPvId, IsRejected );	
6966
 
6967
 
6968
 
6969
	END IF;	
6970
	CLOSE curProd;	
6971
 
6972
	/* Log Rejection Trail */
6973
	pk_Utils.Log_Rejection_Trail ( GET_SYSTEM_VALUE('enumENTITY_TYPE_PRODUCT'), nPvId, IsRejected, nTesterId, sTesterComments );
6974
 
6975
 
6976
 
6977
 
6978
 
6979
END Reject_Product;
6980
/*--------------------------------------------------------------------------------------------------*/
6981
PROCEDURE Add_Production_Bom ( nBomId IN NUMBER, 
6982
  							   nBranchId IN NUMBER, 
6983
							   nStateId IN NUMBER, 
6984
							   nProjId IN NUMBER ) IS
6985
 
6986
BEGIN
6987
 
6988
	 --Update the boms table with the branch_id
6989
	 UPDATE BOMS
6990
	 SET RTAG_ID_FK = nBranchId
6991
	 WHERE BOM_ID = nBomId;
6992
 
6993
	 --Add the production bom into the production_bom table
6994
	 INSERT INTO PRODUCTION_BOM (PROJ_ID, BOM_ID, STATE_ID)
6995
	 VALUES(nProjId, nBomId, nStateId);
6996
 
6997
 
6998
 
6999
 
7000
END Add_Production_Bom;
7001
/*--------------------------------------------------------------------------------------------------*/								 
7002
END pk_production;
7003
 
7004
/
7005
 
7006
/
7007
--------------------------------------------------------
7008
--  DDL for Package Body PK_PRODUCT_TEST
7009
--------------------------------------------------------
7010
 
7011
  CREATE OR REPLACE PACKAGE BODY "PK_PRODUCT_TEST" 
7012
IS
7013
/* ---------------------------------------------------------------------------
7014
    Modified By: Rupesh Solanki
7015
	Date: 20/03/2006
7016
   --------------------------------------------------------------------------- */
7017
 
7018
/*--------------------------------------------------------------------------------------------------*/
7019
PROCEDURE New_Product ( sProdName IN PACKAGES.PKG_NAME%TYPE,
7020
						sProdVersion IN PACKAGE_VERSIONS.PKG_VERSION%TYPE,
7021
						nUserId IN NUMBER,
7022
						outProdId OUT PACKAGE_VERSIONS.PV_ID%TYPE ) IS
7023
 
7024
 
7025
BEGIN
7026
	/*--------------- Business Rules Here -------------------*/
7027
	/*-------------------------------------------------------*/
7028
 
7029
	-- Call Release Manager to add new product
7030
	Seed_Package_Names_Versions ( sProdName, sProdVersion, nUserId, outProdId );
7031
 
7032
 
7033
END	New_Product;
7034
/*--------------------------------------------------------------------------------------------------*/
7035
PROCEDURE Add_Product ( sProdIdList IN VARCHAR2,
7036
		  			  	nOsId IN OS_CONTENTS.OS_ID%TYPE,
7037
						nUserId IN NUMBER ) IS
7038
 
7039
NextSeqNum NUMBER;
7040
PkgName VARCHAR2(100);
7041
PkgVersion VARCHAR2(100);
7042
NodeName VARCHAR2(4000);
7043
 
7044
CURSOR prod_cur IS
7045
	SELECT qry.PV_ID AS PROD_ID,
7046
		   qry.PV_DESCRIPTION,
7047
           qry.COMMENTS,
7048
           qry.IS_PATCH
7049
	  FROM ( 
7050
      		/* Products */
7051
			SELECT pv.PV_ID, TO_NUMBER(NULL) AS INSTALL_ORDER, TO_NUMBER(NULL) AS PKG_ID, pv.PV_DESCRIPTION, pv.COMMENTS, pv.IS_PATCH
7052
			  FROM PACKAGE_VERSIONS pv
7053
			 WHERE pv.IS_PATCH IS NULL
7054
			   AND pv.PV_ID IN (
7055
			 	   			   	SELECT * 
7056
								  FROM THE ( SELECT CAST( IN_LIST_NUMBER( sProdIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual ) 
7057
								)
7058
 
7059
			UNION ALL
7060
 
7061
            /* Patches */  
7062
			SELECT pv.PV_ID, pp.INSTALL_ORDER, pv.PKG_ID, pv.PV_DESCRIPTION, pv.COMMENTS, pv.IS_PATCH
7063
			  FROM PACKAGE_PATCHES pp,
7064
			  	   PACKAGE_VERSIONS pv
7065
			 WHERE pp.PATCH_ID = pv.PV_ID
7066
			   AND pp.PATCH_ID IN (
7067
			 	   			   	SELECT * 
7068
								  FROM THE ( SELECT CAST( IN_LIST_NUMBER( sProdIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual ) 
7069
								)  		
7070
	        ) qry  
7071
	 ORDER BY qry.PKG_ID, qry.INSTALL_ORDER;
7072
prod_rec prod_cur%ROWTYPE;
7073
 
7074
 
7075
BEGIN
7076
	/*--------------- Business Rules Here -------------------*/
7077
	/*-------------------------------------------------------*/
7078
 
7079
	-- Get seq_num
7080
	SELECT MAX( osc.SEQ_NUM ) INTO NextSeqNum
7081
	  FROM OS_CONTENTS osc
7082
	 WHERE osc.OS_ID = nOsId;
7083
 
7084
	-- Set NextSeqNum to 0 if no existing products are found
7085
	IF NextSeqNum IS NULL THEN
7086
	   NextSeqNum := 1;
7087
	ELSE
7088
	   NextSeqNum := NextSeqNum + 1;
7089
	END IF;
7090
 
7091
 
7092
	-- Insert into OS Contents
7093
	OPEN prod_cur;
7094
	FETCH prod_cur INTO prod_rec;
7095
 
7096
	WHILE prod_cur%FOUND
7097
	LOOP
7098
 
7099
        IF (prod_rec.IS_PATCH IS NULL) THEN
7100
            INSERT INTO OS_CONTENTS ( OS_ID, SEQ_NUM, PROD_ID, PRODUCT_COMMENTS )
7101
       		VALUES (
7102
       				nOsId, 
7103
       				NextSeqNum, 
7104
       				prod_rec.PROD_ID,
7105
       				prod_rec.PV_DESCRIPTION
7106
       				);
7107
        ELSE
7108
            INSERT INTO OS_CONTENTS ( OS_ID, SEQ_NUM, PROD_ID, PRODUCT_COMMENTS )
7109
    		VALUES (
7110
    				nOsId, 
7111
    				NextSeqNum, 
7112
    				prod_rec.PROD_ID,
7113
    				prod_rec.COMMENTS
7114
    				);
7115
        END IF;
7116
 
7117
 
7118
		SELECT PKG.PKG_NAME INTO PkgName
7119
		FROM PACKAGES PKG, PACKAGE_VERSIONS PV
7120
		WHERE PV.PV_ID = prod_rec.PROD_ID
7121
		AND PKG.PKG_ID = PV.PKG_ID;
7122
 
7123
		SELECT PKG_VERSION INTO PkgVersion
7124
		FROM PACKAGE_VERSIONS PV
7125
		WHERE PV.PV_ID = prod_rec.PROD_ID;
7126
 
7127
		SELECT NN.NODE_NAME INTO NodeName
7128
		FROM NETWORK_NODES NN, OPERATING_SYSTEMS OS
7129
		WHERE NN.NODE_ID = OS.NODE_ID
7130
		AND OS.OS_ID = nOsId;
7131
 
7132
 
7133
		-- Log Action --
7134
		pk_Bom.Log_Os_Trail ( nOsId,  
7135
							  'Added Product: '||PkgName||' (Version: '||PkgVersion||') with Install Order: '||NextSeqNum||' on Node: '||NodeName,
7136
							  nUserId );
7137
 
7138
 
7139
		NextSeqNum := NextSeqNum + 1;
7140
		FETCH prod_cur INTO prod_rec;
7141
	END LOOP;
7142
 
7143
 
7144
	CLOSE prod_cur;
7145
 
7146
 
7147
END	Add_Product;
7148
/*--------------------------------------------------------------------------------------------------*/
7149
PROCEDURE Hide_Product ( sProdIdList IN VARCHAR2,
7150
		  			  	nOsId IN OS_CONTENTS.OS_ID%TYPE,
7151
						nUserId IN NUMBER ) IS
7152
 
7153
BEGIN
7154
	/*--------------- Business Rules Here -------------------*/
7155
	/*-------------------------------------------------------*/
7156
 
7157
 
7158
            INSERT INTO HIDE_PRODUCTS ( OS_ID, PROD_ID )
7159
       		VALUES (
7160
       				nOsId, 
7161
       				sProdIdList
7162
       				);
7163
 
7164
END	Hide_Product;
7165
/*--------------------------------------------------------------------------------------------------*/
7166
PROCEDURE Unhide_Product ( sProdIdList IN NUMBER,
7167
		  			  	nOsId IN OS_CONTENTS.OS_ID%TYPE,
7168
						nUserId IN NUMBER ) IS
7169
 
7170
BEGIN
7171
	/*--------------- Business Rules Here -------------------*/
7172
	/*-------------------------------------------------------*/
7173
 
7174
 
7175
            DELETE FROM HIDE_PRODUCTS WHERE 
7176
			PROD_ID = sProdIdList
7177
			AND OS_ID = nOsId;
7178
 
7179
END	Unhide_Product;
7180
/*--------------------------------------------------------------------------------------------------*/
7181
PROCEDURE Update_Process (nProcId IN PROCESSES_CONFIG.PROC_ID%TYPE,
7182
		  				  nProdId IN PROCESSES_CONFIG.PROD_ID%TYPE,
7183
		  				  nIsInterface IN PROCESSES_CONFIG.IS_INTERFACE%TYPE, 		  
7184
		  				  nOsId IN PROCESSES_CONFIG.OS_ID%TYPE,		  
7185
						  nCmdInterface IN PROCESSES_CONFIG.CMD_INTERFACE%TYPE,
7186
						  nPkgOwner IN PROCESSES_CONFIG.PKG_OWNER%TYPE,
7187
						  sPkgHealthTag IN PROCESSES_CONFIG.PKG_HEALTH_TAG%TYPE,
7188
						  nProduct IN PROCESSES_CONFIG.PROD_ID%TYPE) IS
7189
 
7190
BEGIN
7191
 
7192
	 UPDATE PROCESSES_CONFIG SET
7193
	 	CMD_INTERFACE = nCmdInterface,
7194
		PKG_OWNER = nPkgOwner,
7195
		IS_INTERFACE = nIsInterface,
7196
		PKG_HEALTH_TAG = sPkgHealthTag,
7197
		PROD_ID = nProduct 
7198
 
7199
 
7200
	 WHERE PROD_ID = nProdId
7201
	 AND OS_ID = nOsId
7202
	 AND PROC_ID = nProcId	;						  
7203
 
7204
 
7205
END Update_Process;
7206
 
7207
/*--------------------------------------------------------------------------------------------------*/
7208
PROCEDURE Update_Product ( nOldProdId IN OS_CONTENTS.PROD_ID%TYPE,
7209
						   sNewProdIdVersion IN VARCHAR2,
7210
						   nOsId IN OS_CONTENTS.OS_ID%TYPE,
7211
						   nSeqNum IN OS_CONTENTS.SEQ_NUM%TYPE,
7212
						   sComments IN OS_CONTENTS.PRODUCT_COMMENTS%TYPE,
7213
						   sSunOSElectronicName IN PACKAGES.SUNOS_ELECTRONIC_NAME%TYPE,
7214
						   sWinElectronicName IN PACKAGES.WIN_ELECTRONIC_NAME%TYPE,
7215
						   sIsNodeSpec IN OS_CONTENTS.IS_NODE_SPEC%TYPE,
7216
						   sNotXML IN OS_CONTENTS.NOT_XML%TYPE,
7217
						   sPatchElectronicName IN PACKAGE_VERSIONS.PATCH_ELECTRONIC_NAME%TYPE,
7218
						   nUserId IN NUMBER,
7219
						   outProdId OUT PACKAGE_VERSIONS.PV_ID%TYPE ) IS
7220
 
7221
nNewProdId OS_CONTENTS.PROD_ID%TYPE;
7222
 
7223
sProdName PACKAGES.PKG_NAME%TYPE;
7224
 
7225
 
7226
 
7227
 
7228
 
7229
CURSOR curProd IS
7230
 	SELECT pv.PV_ID
7231
	  FROM PACKAGE_VERSIONS pv
7232
	 WHERE pv.pkg_id IN ( SELECT pv.pkg_id FROM PACKAGE_VERSIONS pv WHERE pv.PV_ID = nOldProdId )
7233
	   AND pv.PKG_VERSION = sNewProdIdVersion;
7234
recProd curProd%ROWTYPE;						   
7235
 
7236
BEGIN
7237
	/*--------------- Business Rules Here -------------------*/
7238
	IF (nOldProdId IS NULL) OR (sNewProdIdVersion IS NULL) OR (nOsId IS NULL) OR (nSeqNum IS NULL)
7239
	THEN
7240
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nOldProdId= '|| nOldProdId  ||', sNewProdIdVersion= '|| sNewProdIdVersion ||', nOsId= '|| nOsId ||', nSeqNum= '|| nSeqNum);
7241
	END IF;
7242
	/*-------------------------------------------------------*/
7243
 
7244
	-- Get new prod_id
7245
	OPEN curProd;
7246
	FETCH curProd INTO recProd;
7247
 
7248
	SELECT pkg.pkg_name into sProdName
7249
	FROM PACKAGES pkg, PACKAGE_VERSIONS pv
7250
	WHERE pkg.pkg_id = pv.pkg_id 
7251
	AND pv.pv_id = nOldProdId;
7252
 
7253
 
7254
	IF curProd%FOUND THEN
7255
	   nNewProdId := recProd.PV_ID;
7256
	ELSE
7257
		Seed_Package_Names_Versions ( sProdName, sNewProdIdVersion, nUserId, outProdId );
7258
		nNewProdId := outProdId;
7259
		/*RAISE_APPLICATION_ERROR (-20000, 'Version '|| sNewProdIdVersion ||' does not exist.');*/
7260
	END IF;
7261
 
7262
	CLOSE curProd;
7263
 
7264
 
7265
	-- Update Product Details
7266
	UPDATE OS_CONTENTS SET
7267
		PROD_ID = nNewProdId,
7268
		PRODUCT_COMMENTS = sComments,
7269
		NOT_XML = sNotXML,
7270
		IS_NODE_SPEC = sIsNodeSpec
7271
	 WHERE OS_ID = nOsId
7272
	   AND PROD_ID = nOldProdId;
7273
 
7274
	--Update Package Electronic Name Details In Packages Table 
7275
	UPDATE PACKAGES SET
7276
		SUNOS_ELECTRONIC_NAME = sSunOSElectronicName,
7277
		WIN_ELECTRONIC_NAME = sWinElectronicName
7278
	WHERE  PKG_ID = 
7279
	(
7280
	 SELECT PKG_ID
7281
	 FROM PACKAGE_VERSIONS 
7282
	 WHERE PACKAGE_VERSIONS.PV_ID = nNewProdId
7283
	);
7284
 
7285
	--Update Patch Electronic Name In Package Versions Table
7286
	UPDATE PACKAGE_VERSIONS SET
7287
		   PATCH_ELECTRONIC_NAME = sPatchElectronicName
7288
	WHERE PV_ID = nNewProdId;	   
7289
 
7290
 
7291
	-- Update seq_num
7292
	pk_Operating_System.Shift_Product_SeqNum ( nNewProdId, nOsId, nSeqNum );
7293
 
7294
END	Update_Product;
7295
/*--------------------------------------------------------------------------------------------------*/
7296
PROCEDURE Replace_Product ( nOldProdId IN OS_CONTENTS.PROD_ID%TYPE,
7297
		  				  	nNewProdId IN OS_CONTENTS.PROD_ID%TYPE,
7298
		  			  	    nOsId IN OS_CONTENTS.OS_ID%TYPE,
7299
							nUserId IN NUMBER ) IS
7300
 
7301
OldVersion VARCHAR2(100);
7302
NewVersion VARCHAR2(100);
7303
PkgName    VARCHAR2(100);	
7304
NodeName VARCHAR2(4000);	
7305
 
7306
BEGIN
7307
	/*--------------- Business Rules Here -------------------*/
7308
	/*-------------------------------------------------------*/
7309
 
7310
 
7311
	UPDATE OS_CONTENTS SET
7312
	PROD_ID = nNewProdId
7313
	WHERE PROD_ID = nOldProdId
7314
	  AND OS_ID = nOsId;
7315
 
7316
	SELECT PKG_VERSION INTO OldVersion
7317
	FROM PACKAGE_VERSIONS
7318
	WHERE PV_ID = nOldProdId;
7319
 
7320
	SELECT PKG_VERSION INTO NewVersion
7321
	FROM PACKAGE_VERSIONS
7322
	WHERE PV_ID = nNewProdId;	
7323
 
7324
	SELECT PKG.PKG_NAME INTO PkgName
7325
	FROM PACKAGES PKG, PACKAGE_VERSIONS PV
7326
	WHERE PV.PV_ID = nNewProdId
7327
	AND PKG.PKG_ID = PV.PKG_ID; 
7328
 
7329
	SELECT NN.NODE_NAME INTO NodeName
7330
	FROM NETWORK_NODES NN, OPERATING_SYSTEMS OS
7331
	WHERE NN.NODE_ID = OS.NODE_ID
7332
	AND OS.OS_ID = nOsId;
7333
 
7334
 
7335
	-- Log Action --
7336
	pk_Bom.Log_Os_Trail ( nOsId, 
7337
						  'Updated Product: '||PkgName|| ' from Version: '||OldVersion||' to '||NewVersion||' on Node: '||NodeName,
7338
						  nUserId );
7339
 
7340
END	Replace_Product;
7341
/*--------------------------------------------------------------------------------------------------*/
7342
PROCEDURE Remove_Process ( sProcName IN PROCESSES_CONFIG.PKG_HEALTH_TAG%TYPE,	
7343
		  				   sProdIdList IN VARCHAR2,
7344
		  			  	   nOsId IN OS_CONTENTS.OS_ID%TYPE,
7345
  						   sCmdInterface IN PROCESSES_CONFIG.CMD_INTERFACE%TYPE,
7346
						   sPkgOwner IN PROCESSES_CONFIG.PKG_OWNER%TYPE,
7347
						   sInterface IN PROCESSES_CONFIG.IS_INTERFACE%TYPE,
7348
						   nUserId IN NUMBER ) IS
7349
 
7350
ProcessName VARCHAR2(4000);
7351
NodeName VARCHAR2(4000);
7352
 
7353
BEGIN
7354
 
7355
 
7356
/*Select the Correct Details - Begin*/
7357
 
7358
		 IF sCmdInterface IS NOT NULL THEN
7359
		 	IF sInterface IS NOT NULL THEN
7360
			   IF sPkgOwner IS NOT NULL THEN
7361
			   		 SELECT PKG_HEALTH_TAG INTO ProcessName
7362
					 FROM PROCESSES_CONFIG
7363
					 WHERE OS_ID = nOsId
7364
					 AND PROD_ID = sProdIdList
7365
					 AND PKG_HEALTH_TAG = sProcName
7366
					 AND CMD_INTERFACE = sCmdInterface
7367
					 AND PKG_OWNER = sPkgOwner
7368
					 AND IS_INTERFACE = sInterface;			   	  
7369
 
7370
			   ELSE/*sPkgOwner IS NULL, sInterface IS NOT NULL, sCmdInterface IS NOT NULL*/
7371
			   		 SELECT PKG_HEALTH_TAG INTO ProcessName
7372
					 FROM PROCESSES_CONFIG
7373
					 WHERE OS_ID = nOsId
7374
					 AND PROD_ID = sProdIdList
7375
					 AND PKG_HEALTH_TAG = sProcName
7376
					 AND CMD_INTERFACE = sCmdInterface
7377
					 AND PKG_OWNER IS NULL
7378
					 AND IS_INTERFACE = sInterface;				   
7379
			   END IF ;  
7380
			ELSE 
7381
				 IF sInterface IS NULL OR sInterface = 'F' THEN/* sInterface IS NULL, sCmdInterface IS NOT NULL*/
7382
			   	   IF sPkgOwner IS NOT NULL THEN
7383
			   	   	 SELECT PKG_HEALTH_TAG INTO ProcessName
7384
					 FROM PROCESSES_CONFIG
7385
					 WHERE OS_ID = nOsId
7386
					 AND PROD_ID = sProdIdList
7387
					 AND PKG_HEALTH_TAG = sProcName
7388
					 AND CMD_INTERFACE = sCmdInterface
7389
					 AND PKG_OWNER = sPkgOwner
7390
					 AND (IS_INTERFACE = 'F' OR IS_INTERFACE IS NULL);				    
7391
				   ELSE/* sPkqOwner IS NULL, sInterface IS NULL, sCmdInterface IS NOT NULL*/
7392
			   	   	 SELECT PKG_HEALTH_TAG INTO ProcessName
7393
					 FROM PROCESSES_CONFIG
7394
					 WHERE OS_ID = nOsId
7395
					 AND PROD_ID = sProdIdList
7396
					 AND PKG_HEALTH_TAG = sProcName
7397
					 AND CMD_INTERFACE = sCmdInterface
7398
					 AND PKG_OWNER IS NULL
7399
					 AND IS_INTERFACE IS NULL;				   
7400
				   END IF;
7401
				  END IF; 
7402
			END IF;
7403
		 ELSE/* sCmdInterface IS NULL*/
7404
		 		IF sInterface IS NOT NULL THEN
7405
				   IF sPkgOwner IS NOT NULL THEN				   	  
7406
			   		 SELECT PKG_HEALTH_TAG INTO ProcessName
7407
					 FROM PROCESSES_CONFIG
7408
					 WHERE OS_ID = nOsId
7409
					 AND PROD_ID = sProdIdList
7410
					 AND PKG_HEALTH_TAG = sProcName
7411
					 AND CMD_INTERFACE IS NULL
7412
					 AND PKG_OWNER = sPkgOwner
7413
					 AND IS_INTERFACE = sInterface;					   
7414
				   ELSE/* sPkgOwner is NULL, sInterface IS NOT NULL, sCmdInterface IS NULL */
7415
			   		 SELECT PKG_HEALTH_TAG INTO ProcessName
7416
					 FROM PROCESSES_CONFIG
7417
					 WHERE OS_ID = nOsId
7418
					 AND PROD_ID = sProdIdList
7419
					 AND PKG_HEALTH_TAG = sProcName
7420
					 AND CMD_INTERFACE IS NULL
7421
					 AND PKG_OWNER IS NULL
7422
					 AND IS_INTERFACE = sInterface;						   
7423
				   END IF;
7424
				ELSE
7425
				  IF sInterface IS NULL OR sInterface = 'F' THEN/* sInterface IS NULL, sCmdInterface IS NULL*/
7426
					IF sPkgOwner IS NOT NULL THEN
7427
			   		 SELECT PKG_HEALTH_TAG INTO ProcessName
7428
					 FROM PROCESSES_CONFIG
7429
					 WHERE OS_ID = nOsId
7430
					 AND PROD_ID = sProdIdList
7431
					 AND PKG_HEALTH_TAG = sProcName
7432
					 AND CMD_INTERFACE IS NULL
7433
					 AND PKG_OWNER = sPkgOwner
7434
					 AND (IS_INTERFACE IS NULL OR IS_INTERFACE = 'F');						   
7435
					ELSE/* sPkgOwner IS NULL, sInterface IS NULL, sCmdInterface IS NULL*/
7436
			   		 SELECT PKG_HEALTH_TAG INTO ProcessName
7437
					 FROM PROCESSES_CONFIG
7438
					 WHERE OS_ID = nOsId
7439
					 AND PROD_ID = sProdIdList
7440
					 AND PKG_HEALTH_TAG = sProcName
7441
					 AND CMD_INTERFACE IS NULL
7442
					 AND PKG_OWNER IS NULL
7443
					 AND IS_INTERFACE IS NULL;										
7444
					END IF;
7445
				  END IF;	
7446
				END IF;
7447
		 END IF;
7448
 
7449
 
7450
/*Select the Correct Details - End */
7451
 
7452
	-- Log Action --
7453
	pk_Bom.Log_Os_Trail ( nOsId, 
7454
						  'Deleted Process: '||ProcessName||' From Node: '||NodeName,
7455
						  nUserId );
7456
 
7457
 
7458
/*Select the Correct Details - Begin*/	
7459
		 IF sCmdInterface IS NOT NULL THEN
7460
		 	IF sInterface IS NOT NULL THEN
7461
			   IF sPkgOwner IS NOT NULL THEN
7462
			   		 DELETE
7463
					 FROM PROCESSES_CONFIG
7464
					 WHERE OS_ID = nOsId
7465
					 AND PROD_ID = sProdIdList
7466
					 AND PKG_HEALTH_TAG = sProcName
7467
					 AND CMD_INTERFACE = sCmdInterface
7468
					 AND PKG_OWNER = sPkgOwner
7469
					 AND IS_INTERFACE = sInterface;			   	  
7470
 
7471
			   ELSE/*sPkgOwner IS NULL, sInterface IS NOT NULL, sCmdInterface IS NOT NULL*/
7472
			   		 DELETE
7473
					 FROM PROCESSES_CONFIG
7474
					 WHERE OS_ID = nOsId
7475
					 AND PROD_ID = sProdIdList
7476
					 AND PKG_HEALTH_TAG = sProcName
7477
					 AND CMD_INTERFACE = sCmdInterface
7478
					 AND PKG_OWNER IS NULL
7479
					 AND IS_INTERFACE = sInterface;				   
7480
			   END IF;
7481
			ELSE/* sInterface IS NULL, sCmdInterface IS NOT NULL*/
7482
			   	   IF sPkgOwner IS NOT NULL THEN
7483
			   	   	 DELETE
7484
					 FROM PROCESSES_CONFIG
7485
					 WHERE OS_ID = nOsId
7486
					 AND PROD_ID = sProdIdList
7487
					 AND PKG_HEALTH_TAG = sProcName
7488
					 AND CMD_INTERFACE = sCmdInterface
7489
					 AND PKG_OWNER = sPkgOwner
7490
					 AND IS_INTERFACE IS NULL;				    
7491
				   ELSE/* sPkqOwner IS NULL, sInterface IS NULL, sCmdInterface IS NOT NULL*/
7492
			   	   	 DELETE
7493
					 FROM PROCESSES_CONFIG
7494
					 WHERE OS_ID = nOsId
7495
					 AND PROD_ID = sProdIdList
7496
					 AND PKG_HEALTH_TAG = sProcName
7497
					 AND CMD_INTERFACE = sCmdInterface
7498
					 AND PKG_OWNER IS NULL
7499
					 AND IS_INTERFACE IS NULL;				   
7500
				   END IF;
7501
			END IF;
7502
		 ELSE/* sCmdInterface IS NULL*/
7503
		 		IF sInterface IS NOT NULL THEN
7504
				   IF sPkgOwner IS NOT NULL THEN				   	  
7505
			   		 DELETE
7506
					 FROM PROCESSES_CONFIG
7507
					 WHERE OS_ID = nOsId
7508
					 AND PROD_ID = sProdIdList
7509
					 AND PKG_HEALTH_TAG = sProcName
7510
					 AND CMD_INTERFACE IS NULL
7511
					 AND PKG_OWNER = sPkgOwner
7512
					 AND IS_INTERFACE = sInterface;					   
7513
				   ELSE/* sPkgOwner is NULL, sInterface IS NOT NULL, sCmdInterface IS NULL */
7514
			   		 DELETE
7515
					 FROM PROCESSES_CONFIG
7516
					 WHERE OS_ID = nOsId
7517
					 AND PROD_ID = sProdIdList
7518
					 AND PKG_HEALTH_TAG = sProcName
7519
					 AND CMD_INTERFACE IS NULL
7520
					 AND PKG_OWNER IS NULL
7521
					 AND IS_INTERFACE = sInterface;						   
7522
				   END IF;
7523
				ELSE/* sInterface IS NULL, sCmdInterface IS NULL*/
7524
					IF sPkgOwner IS NOT NULL THEN
7525
			   		 DELETE
7526
					 FROM PROCESSES_CONFIG
7527
					 WHERE OS_ID = nOsId
7528
					 AND PROD_ID = sProdIdList
7529
					 AND PKG_HEALTH_TAG = sProcName
7530
					 AND CMD_INTERFACE IS NULL
7531
					 AND PKG_OWNER = sPkgOwner
7532
					 AND IS_INTERFACE IS NULL;						   
7533
					ELSE/* sPkgOwner IS NULL, sInterface IS NULL, sCmdInterface IS NULL*/
7534
			   		 DELETE
7535
					 FROM PROCESSES_CONFIG
7536
					 WHERE OS_ID = nOsId
7537
					 AND PROD_ID = sProdIdList
7538
					 AND PKG_HEALTH_TAG = sProcName
7539
					 AND CMD_INTERFACE IS NULL
7540
					 AND PKG_OWNER IS NULL
7541
					 AND IS_INTERFACE IS NULL;										
7542
					END IF;
7543
				END IF;
7544
		 END IF;
7545
 
7546
 
7547
/*Select the Correct Details - End*/				  
7548
 
7549
END Remove_Process;							
7550
/*--------------------------------------------------------------------------------------------------*/
7551
PROCEDURE Remove_Products ( sProdIdList IN VARCHAR2,
7552
		  			  	  	nOsId IN OS_CONTENTS.OS_ID%TYPE,
7553
							nUserId IN NUMBER ) IS
7554
 
7555
PkgName VARCHAR2(100);
7556
PkgVersion VARCHAR2(100);		
7557
NextSeqNum NUMBER := 1;
7558
nIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();	
7559
NodeName VARCHAR2(4000);
7560
 
7561
CURSOR prod_cur IS
7562
	SELECT osc.PROD_ID, osc.SEQ_NUM
7563
	  FROM OS_CONTENTS osc
7564
	 WHERE osc.OS_ID = nOsId
7565
	 ORDER BY osc.SEQ_NUM;
7566
prod_rec prod_cur%ROWTYPE;	  
7567
 
7568
BEGIN
7569
	/*--------------- Business Rules Here -------------------*/
7570
	IF sProdIdList IS NULL
7571
	THEN
7572
		RAISE_APPLICATION_ERROR (-20000, 'Please select one or more Products.');
7573
 
7574
	END IF;
7575
	/*-------------------------------------------------------*/
7576
 
7577
	SELECT NN.NODE_NAME INTO NodeName
7578
	FROM NETWORK_NODES NN, OPERATING_SYSTEMS OS
7579
	WHERE NN.NODE_ID = OS.NODE_ID
7580
	AND OS.OS_ID = nOsId; 	
7581
 
7582
	-- Remove Products
7583
	DELETE 
7584
	FROM OS_CONTENTS
7585
	WHERE OS_ID = nOsId
7586
	  AND PROD_ID IN ( 
7587
	  	  		  	    SELECT * 
7588
						  FROM THE ( SELECT CAST( IN_LIST_NUMBER( sProdIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual )  
7589
					 );
7590
 
7591
 
7592
	-- Remove Processes
7593
	DELETE 
7594
	FROM PROCESSES_CONFIG
7595
	WHERE OS_ID = nOsId
7596
	  AND PROD_ID IN ( 
7597
	  	  		  	    SELECT * 
7598
						  FROM THE ( SELECT CAST( IN_LIST_NUMBER( sProdIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual )  
7599
					 );  
7600
 
7601
 
7602
	-- Update Seq Numbers
7603
	OPEN prod_cur;
7604
	FETCH prod_cur INTO prod_rec;
7605
 
7606
	WHILE prod_cur%FOUND
7607
	LOOP
7608
 
7609
		UPDATE OS_CONTENTS SET
7610
		SEQ_NUM = NextSeqNum
7611
		WHERE OS_ID = nOsId
7612
		  AND PROD_ID = prod_rec.PROD_ID;
7613
 
7614
		NextSeqNum := NextSeqNum + 1;
7615
		FETCH prod_cur INTO prod_rec;
7616
 
7617
 
7618
	END LOOP;
7619
 
7620
	CLOSE prod_cur;
7621
 
7622
	nIdCollector := IN_LIST_NUMBER ( sProdIdList );
7623
 
7624
	FOR i IN 1..nIdCollector.COUNT
7625
	LOOP
7626
		SELECT PKG.PKG_NAME INTO PkgName
7627
		FROM PACKAGES PKG, PACKAGE_VERSIONS PV
7628
		WHERE PV.PV_ID = nIdCollector(i)
7629
		AND PKG.PKG_ID = PV.PKG_ID;
7630
 
7631
		SELECT PKG_VERSION INTO PkgVersion
7632
		FROM PACKAGE_VERSIONS PV
7633
		WHERE PV.PV_ID = nIdCollector(i);	
7634
 
7635
		-- Log Action --
7636
		pk_Bom.Log_Os_Trail ( nOsId,  
7637
							  'Deleted Product: '||PkgName||' (Version: '||PkgVersion||') from Node: '||NodeName,
7638
							  nUserId );
7639
 
7640
	END LOOP;
7641
 
7642
 
7643
 
7644
 
7645
 
7646
 
7647
 
7648
END Remove_Products; 
7649
/*--------------------------------------------------------------------------------------------------*/
7650
PROCEDURE Add_Products_NodeSpec ( sProdIdList IN VARCHAR2,
7651
		  			  	  		  nOsId IN OS_CONTENTS.OS_ID%TYPE,
7652
								  nUserId IN NUMBER ) IS
7653
 
7654
NextSeqNum NUMBER := 1;
7655
 
7656
CURSOR prod_cur IS
7657
	SELECT osc.PROD_ID, osc.SEQ_NUM
7658
	  FROM OS_CONTENTS osc
7659
	 WHERE osc.OS_ID = nOsId
7660
	 ORDER BY osc.SEQ_NUM;
7661
prod_rec prod_cur%ROWTYPE;	  
7662
 
7663
BEGIN
7664
	/*--------------- Business Rules Here -------------------*/
7665
	IF sProdIdList IS NULL
7666
	THEN
7667
		RAISE_APPLICATION_ERROR (-20000, 'Please select one or more Products.');
7668
 
7669
	END IF;
7670
	/*-------------------------------------------------------*/
7671
	UPDATE OS_CONTENTS
7672
	SET IS_NODE_SPEC = ''
7673
	WHERE OS_ID = nOsId;
7674
 
7675
	-- Set Nodespec On
7676
	UPDATE OS_CONTENTS
7677
	SET IS_NODE_SPEC = 'on'
7678
	WHERE OS_ID = nOsId
7679
	  AND PROD_ID IN ( 
7680
	  	  		  	    SELECT * 
7681
						  FROM THE ( SELECT CAST( IN_LIST_NUMBER( sProdIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual )  
7682
					 );
7683
 
7684
END Add_Products_NodeSpec; 
7685
/*--------------------------------------------------------------------------------------------------*/
7686
PROCEDURE Accept_Reject ( nProdId IN PRODUCT_DETAILS.PROD_ID%TYPE,	
7687
						  nBomId IN BOMS.BOM_ID%TYPE,
7688
						  sComments IN REJECTION_TRAIL.COMMENTS%TYPE DEFAULT NULL,
7689
						  nUserId IN REJECTION_TRAIL.USER_ID%TYPE,
7690
						  nOsId IN NUMBER ) IS
7691
 
7692
IsRejected PRODUCT_DETAILS.IS_REJECTED%TYPE;
7693
 
7694
PkgName VARCHAR2(100);
7695
PkgVersion VARCHAR2(100);
7696
NodeName VARCHAR2(4000);
7697
 
7698
CURSOR curProd IS
7699
	SELECT pd.*
7700
	  FROM PRODUCT_DETAILS pd
7701
	 WHERE pd.PROD_ID = nProdId;
7702
recProd curProd%ROWTYPE;
7703
 
7704
BEGIN
7705
	/*--------------- Business Rules Here -------------------*/
7706
	IF (nProdId IS NULL)
7707
	THEN
7708
		RAISE_APPLICATION_ERROR (-20000, 'Please select at least one product.' );
7709
	END IF;
7710
	/*-------------------------------------------------------*/
7711
 
7712
	-- Set new Accept-Reject state
7713
	IsRejected := 'Y';
7714
 
7715
	SELECT NN.NODE_NAME INTO NodeName
7716
	FROM NETWORK_NODES NN, OPERATING_SYSTEMS OS
7717
	WHERE NN.NODE_ID = OS.NODE_ID
7718
	AND OS.OS_ID = nOsId; 	
7719
 
7720
 
7721
	OPEN curProd;
7722
	FETCH curProd INTO recProd;
7723
 
7724
	IF curProd%FOUND THEN
7725
		/* Product Details found */
7726
 
7727
		SELECT PKG.PKG_NAME INTO PkgName
7728
		FROM PACKAGES PKG, PACKAGE_VERSIONS PV
7729
		WHERE PV.PV_ID = nProdId
7730
		AND PKG.PKG_ID = PV.PKG_ID;
7731
 
7732
		SELECT PKG_VERSION INTO PkgVersion
7733
		FROM PACKAGE_VERSIONS PV
7734
		WHERE PV.PV_ID = nProdId;	
7735
 
7736
		-- Set new Accept-Reject state
7737
		IF recProd.IS_REJECTED = 'Y' THEN
7738
			IsRejected := 'N';
7739
			-- Log Action --
7740
			pk_Bom.Log_Os_Trail ( nOsId, 
7741
								  'Accepted Product: '||PkgName||' '||PkgVersion||' on Node: '||NodeName,
7742
						  		  nUserId );
7743
 
7744
		ELSE
7745
			IsRejected := 'Y';
7746
			-- Log Action --
7747
			pk_Bom.Log_Os_Trail ( nOsId, 
7748
								  'Rejected Product: '||PkgName||' '||PkgVersion||' on Node: '||NodeName,
7749
						  		  nUserId );			
7750
		END IF;
7751
 
7752
		-- Toggle Accept-Reject State 
7753
		UPDATE PRODUCT_DETAILS pd SET
7754
		pd.IS_REJECTED = IsRejected
7755
		WHERE pd.PROD_ID = nProdId;
7756
 
7757
 
7758
	ELSE
7759
		/* Product Details NOT found */
7760
 
7761
		-- Toggle Accept-Reject State	
7762
		INSERT INTO PRODUCT_DETAILS ( PROD_ID, IS_REJECTED )
7763
		VALUES ( nProdId, IsRejected );
7764
 
7765
 
7766
	END IF;
7767
 
7768
	CLOSE curProd;
7769
 
7770
 
7771
	-- Reflect changes to the BOM level
7772
 
7773
 
7774
 
7775
	/* Log Rejection Trail */
7776
	pk_Utils.Log_Rejection_Trail ( GET_SYSTEM_VALUE('enumENTITY_TYPE_PRODUCT'), nProdId, IsRejected, nUserId, sComments );
7777
 
7778
 
7779
END	Accept_Reject;
7780
/*--------------------------------------------------------------------------------------------------*/
7781
PROCEDURE Accept_Reject_List ( nProdIdList IN VARCHAR2,
7782
							   nBomId IN BOMS.BOM_ID%TYPE,
7783
						  	   sComments IN REJECTION_TRAIL.COMMENTS%TYPE DEFAULT NULL,
7784
						       nUserId IN REJECTION_TRAIL.USER_ID%TYPE,
7785
							   nOsId IN NUMBER ) IS
7786
 
7787
nIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();
7788
 
7789
BEGIN
7790
	/*--------------- Business Rules Here -------------------*/
7791
	IF (nProdIdList IS NULL)
7792
	THEN
7793
		RAISE_APPLICATION_ERROR (-20000, 'Please select at least one product.' );
7794
	END IF;
7795
	/*-------------------------------------------------------*/
7796
 
7797
	nIdCollector := IN_LIST_NUMBER ( nProdIdList );
7798
 
7799
	FOR i IN 1..nIdCollector.COUNT
7800
	LOOP
7801
		Accept_Reject ( nIdCollector(i), nBomId, sComments, nUserId, nOsId);
7802
	END LOOP;
7803
 
7804
 
7805
END	Accept_Reject_List;
7806
/*--------------------------------------------------------------------------------------------------*/
7807
PROCEDURE Accept_Reject_Comments ( nProdId IN PRODUCT_DETAILS.PROD_ID%TYPE,
7808
		  						   nRejectSeq IN REJECTION_TRAIL.REJECT_SEQ%TYPE,
7809
						  	   	   sComments IN REJECTION_TRAIL.COMMENTS%TYPE DEFAULT NULL,
7810
						       	   nUserId IN REJECTION_TRAIL.USER_ID%TYPE ) IS
7811
 
7812
IsRejected REJECTION_TRAIL.IS_REJECTED%TYPE;
7813
 
7814
BEGIN
7815
	/*--------------- Business Rules Here -------------------*/
7816
	IF (nProdId IS NULL)
7817
	THEN
7818
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nProdId= '|| nProdId  );
7819
	END IF;
7820
	/*-------------------------------------------------------*/
7821
 
7822
	IF nRejectSeq IS NULL THEN
7823
		/* CREATE New Note */
7824
 
7825
		-- Get last IsRejected state
7826
		SELECT rt.IS_REJECTED INTO IsRejected
7827
		  FROM REJECTION_TRAIL rt
7828
		 WHERE rt.ENTITY_ID = nProdId
7829
		   AND rt.ENUM_ENTITY_TYPE = GET_SYSTEM_VALUE('enumENTITY_TYPE_PRODUCT')
7830
		   AND ROWNUM = 1
7831
		 ORDER BY rt.REJECT_SEQ;
7832
 
7833
 
7834
		/* Log Rejection Trail */
7835
		pk_Utils.Log_Rejection_Trail ( GET_SYSTEM_VALUE('enumENTITY_TYPE_PRODUCT'), nProdId, IsRejected, nUserId, sComments );
7836
 
7837
 
7838
	ELSE
7839
		/* EDIT Note */
7840
		UPDATE REJECTION_TRAIL rt SET
7841
			rt.COMMENTS = sComments,
7842
			rt.USER_ID = nUserId,
7843
			rt.DATE_TIME_STAMP = GET_DATETIME()
7844
		WHERE rt.ENUM_ENTITY_TYPE = GET_SYSTEM_VALUE('enumENTITY_TYPE_PRODUCT')
7845
		  AND rt.ENTITY_ID = nProdId
7846
		  AND rt.REJECT_SEQ = nRejectSeq;
7847
 
7848
 
7849
	END IF;
7850
 
7851
 
7852
END	Accept_Reject_Comments;
7853
/*--------------------------------------------------------------------------------------------------*/
7854
PROCEDURE Sort_Products ( sProdIdOrder IN VARCHAR2,
7855
		  			  	  nOsId IN OS_CONTENTS.OS_ID%TYPE,
7856
						  nUserId IN NUMBER ) IS
7857
 
7858
	nIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();						 
7859
	SeqNum NUMBER;
7860
 
7861
BEGIN
7862
	/*--------------- Business Rules Here -------------------*/
7863
	-- Check for parameters
7864
	IF (sProdIdOrder IS NULL)  OR (nOsId IS NULL) 
7865
	THEN
7866
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nOsId='|| nOsId  ||' sProdIdOrder='|| sProdIdOrder  );
7867
	END IF;
7868
	/*-------------------------------------------------------*/
7869
 
7870
	nIdCollector := IN_LIST_NUMBER ( sProdIdOrder );
7871
 
7872
	-- Set start sequence number
7873
	SeqNum := 1;
7874
 
7875
	FOR i IN 1..nIdCollector.COUNT
7876
	LOOP
7877
 
7878
		-- Update new sequence number
7879
		UPDATE OS_CONTENTS osc SET
7880
			osc.SEQ_NUM = SeqNum
7881
		 WHERE osc.OS_ID = nOsId
7882
		   AND osc.PROD_ID = nIdCollector(i);
7883
 
7884
		SeqNum := SeqNum + 1;
7885
 
7886
	END LOOP;
7887
 
7888
 
7889
END	Sort_Products;
7890
/*--------------------------------------------------------------------------------------------------*/
7891
PROCEDURE Remove_Obsolete_Patches ( nOsId IN OS_CONTENTS.OS_ID%TYPE,
7892
		  						  	nUserId IN NUMBER ) IS
7893
 
7894
 
7895
NextSeqNum NUMBER := 1;									
7896
 
7897
 
7898
CURSOR prod_cur IS
7899
	SELECT osc.PROD_ID, osc.SEQ_NUM
7900
	  FROM OS_CONTENTS osc
7901
	 WHERE osc.OS_ID = nOsId
7902
	 ORDER BY osc.SEQ_NUM;
7903
prod_rec prod_cur%ROWTYPE;										
7904
 
7905
 
7906
BEGIN
7907
 
7908
	 -- Delete Obsolete Patches in the OS.
7909
	 DELETE FROM OS_CONTENTS 
7910
	 WHERE OS_ID = nOsId
7911
	 AND PROD_ID IN 
7912
	 (
7913
	 	  SELECT osc.PROD_ID
7914
	 	  FROM OS_CONTENTS osc, PACKAGE_VERSIONS pv
7915
		  WHERE pv.PV_ID = osc.PROD_ID
7916
		  AND pv.IS_OBSOLETE = 'Y'
7917
		  AND osc.OS_ID = nOsId
7918
	 );  	
7919
 
7920
 
7921
	-- Update Seq Numbers
7922
	OPEN prod_cur;
7923
	FETCH prod_cur INTO prod_rec;
7924
 
7925
	WHILE prod_cur%FOUND
7926
	LOOP
7927
 
7928
		UPDATE OS_CONTENTS SET
7929
		SEQ_NUM = NextSeqNum
7930
		WHERE OS_ID = nOsId
7931
		  AND PROD_ID = prod_rec.PROD_ID;
7932
 
7933
		NextSeqNum := NextSeqNum + 1;
7934
		FETCH prod_cur INTO prod_rec;
7935
 
7936
 
7937
	END LOOP;
7938
 
7939
	CLOSE prod_cur;	 								
7940
 
7941
END Remove_Obsolete_Patches;
7942
/*--------------------------------------------------------------------------------------------------*/
7943
FUNCTION GET_OS_ID ( PvId IN NUMBER ) RETURN NUMBER IS
7944
 
7945
	ReturnValue NUMBER;
7946
 
7947
BEGIN
7948
	SELECT osc.OS_ID INTO ReturnValue
7949
	  FROM OS_CONTENTS osc
7950
	 WHERE osc.PROD_ID = PvId;
7951
 
7952
	RETURN ReturnValue;
7953
END;
7954
/*--------------------------------------------------------------------------------------------------*/
7955
FUNCTION GET_NODE_ID ( OsId IN NUMBER ) RETURN NUMBER IS
7956
 
7957
	ReturnValue NUMBER;
7958
 
7959
BEGIN
7960
	SELECT os.NODE_ID INTO ReturnValue
7961
	  FROM OPERATING_SYSTEMS os
7962
	 WHERE os.OS_ID = OsId;
7963
 
7964
	RETURN ReturnValue;
7965
END;
7966
/*-------------------------------------------------------------------------------------------------------*/
7967
 
7968
/*-------------------------------------------------------------------------------------------------------*/
7969
 
7970
 
7971
END pk_Product_Test;
7972
 
7973
/
7974
 
7975
/
7976
--------------------------------------------------------
7977
--  DDL for Package Body PK_PROJECT
7978
--------------------------------------------------------
7979
 
7980
  CREATE OR REPLACE PACKAGE BODY "PK_PROJECT" 
7981
IS
7982
/* ---------------------------------------------------------------------------
7983
    Version: 2.0
7984
   --------------------------------------------------------------------------- */
7985
 
7986
 
7987
/*--------------------------------------------------------------------------------------------------*/
7988
PROCEDURE Add_Project ( sProjName IN DM_PROJECTS.PROJ_NAME%TYPE,
7989
		  			  	nRMProjFk IN DM_PROJECTS.RM_PROJECTS_FK%TYPE ) IS
7990
 
7991
ProjId NUMBER;
7992
 
7993
BEGIN
7994
	/*--------------- Business Rules Here -------------------*/
7995
	/*-------------------------------------------------------*/
7996
 
7997
	-- Get proj_id --
7998
	SELECT SEQ_PROJ_ID.NEXTVAL INTO ProjId FROM DUAL;
7999
 
8000
 
8001
	-- Insert Branch --
8002
	INSERT INTO DM_PROJECTS ( PROJ_ID, PROJ_NAME, RM_PROJECTS_FK, IS_HIDDEN )
8003
	VALUES ( ProjId, sProjName, nRMProjFk, NULL );
8004
 
8005
	EXCEPTION
8006
    WHEN DUP_VAL_ON_INDEX
8007
	THEN		
8008
		RAISE_APPLICATION_ERROR (-20000, 'Project Name "'|| sProjName ||'" is Already Used.');
8009
 
8010
END	Add_Project;
8011
/*--------------------------------------------------------------------------------------------------*/
8012
PROCEDURE Update_Project ( nProjId IN DM_PROJECTS.PROJ_ID%TYPE,
8013
		  				   sProjName IN DM_PROJECTS.PROJ_NAME%TYPE,
8014
						   nRMProjFk IN DM_PROJECTS.RM_PROJECTS_FK%TYPE ) IS
8015
 
8016
 
8017
BEGIN
8018
	/*--------------- Business Rules Here -------------------*/
8019
	/*-------------------------------------------------------*/
8020
 
8021
 
8022
	-- Update Project --
8023
	UPDATE DM_PROJECTS SET
8024
	PROJ_NAME = sProjName,
8025
	RM_PROJECTS_FK = nRMProjFk
8026
	WHERE PROJ_ID = nProjId;
8027
 
8028
	EXCEPTION
8029
    WHEN DUP_VAL_ON_INDEX
8030
	THEN		
8031
		RAISE_APPLICATION_ERROR (-20000, 'Project Name "'|| sProjName ||'" is Already Used.');
8032
 
8033
END	Update_Project;
8034
/*--------------------------------------------------------------------------------------------------*/
8035
PROCEDURE ShowHide_Project ( nProjId DM_PROJECTS.PROJ_ID%TYPE ) IS
8036
 
8037
currIsHidden DM_PROJECTS.IS_HIDDEN%TYPE;
8038
 
8039
BEGIN
8040
	/*--------------- Business Rules Here -------------------*/
8041
	/*-------------------------------------------------------*/
8042
 
8043
	-- Get current IsHidden State
8044
	SELECT dmp.IS_HIDDEN INTO currIsHidden
8045
	  FROM DM_PROJECTS dmp
8046
	 WHERE dmp.PROJ_ID = nProjId;
8047
 
8048
 
8049
	-- Toggle IsHidden State --
8050
	IF currIsHidden = 'Y' THEN
8051
	   currIsHidden := NULL;
8052
	ELSE
8053
	   currIsHidden := 'Y';
8054
	END IF;
8055
 
8056
 
8057
	-- Update State --
8058
	UPDATE DM_PROJECTS dmp SET
8059
	IS_HIDDEN = currIsHidden
8060
	WHERE dmp.PROJ_ID = nProjId;
8061
 
8062
 
8063
END	ShowHide_Project;
8064
/*--------------------------------------------------------------------------------------------------*/
8065
PROCEDURE Remove_Project ( nProjId IN DM_PROJECTS.PROJ_ID%TYPE ) IS
8066
 
8067
rowCount NUMBER DEFAULT 0;
8068
 
8069
BEGIN
8070
	/*--------------- Business Rules Here -------------------*/
8071
	-- Check for Dependencies (Branches)
8072
	SELECT Count(*) INTO rowCount
8073
	  FROM BRANCHES br
8074
	 WHERE br.PROJ_ID = nProjId;
8075
 
8076
	IF rowCount > 0 THEN
8077
	   RAISE_APPLICATION_ERROR (-20000, 'Some Branches are still using this Project ( Counted '|| rowCount ||' ).' );
8078
	END IF; 
8079
 
8080
	-- Check for Dependencies (States)
8081
	SELECT Count(*) INTO rowCount
8082
	  FROM STATES st
8083
	  WHERE st.PROJ_ID = nProjId;
8084
 
8085
	IF rowCount > 0 THEN
8086
	   RAISE_APPLICATION_ERROR (-20000, 'Some States are still using this Project ( Counted '|| rowCount ||' ).' );
8087
	END IF; 
8088
	/*-------------------------------------------------------*/
8089
 
8090
 
8091
	-- Remove Notificaitons --
8092
	DELETE 
8093
	  FROM NOTIFY_USER nu
8094
	 WHERE nu.PROJ_ID = nProjId;
8095
 
8096
    -- Remove Product Queue --
8097
	DELETE 
8098
	  FROM PRODUCTS_QUEUE pq
8099
	 WHERE pq.PROJ_ID = nProjId; 
8100
 
8101
	-- Remove Project --
8102
	DELETE 
8103
	  FROM DM_PROJECTS dmp
8104
	 WHERE dmp.PROJ_ID = nProjId; 
8105
 
8106
 
8107
END	Remove_Project;
8108
/*--------------------------------------------------------------------------------------------------*/
8109
PROCEDURE Add_Branch ( sBranchName IN BRANCHES.BRANCH_NAME%TYPE,
8110
		  			   nProjId IN BRANCHES.PROJ_ID%TYPE,
8111
					   nRMVTreeId IN BRANCHES.RM_VTREE_FK%TYPE,
8112
                       sBranchComments IN BRANCHES.BRANCH_COMMENTS%TYPE ) IS
8113
 
8114
BranchId NUMBER;
8115
 
8116
BEGIN
8117
	/*--------------- Business Rules Here -------------------*/
8118
	/*-------------------------------------------------------*/
8119
 
8120
	-- Get branch_id --
8121
	SELECT SEQ_BRANCH_ID.NEXTVAL INTO BranchId FROM DUAL;
8122
 
8123
 
8124
	-- Insert Branch --
8125
	INSERT INTO BRANCHES (BRANCH_ID, PROJ_ID, BRANCH_NAME, RM_VTREE_FK, BRANCH_COMMENTS )
8126
	VALUES ( BranchId, nProjId, sBranchName, nRMVTreeId, sBranchComments );
8127
 
8128
	EXCEPTION
8129
    WHEN DUP_VAL_ON_INDEX
8130
	THEN		
8131
		RAISE_APPLICATION_ERROR (-20000, 'Branch Name "'|| sBranchName ||'" is Already Used.');
8132
 
8133
END	Add_Branch;
8134
/*--------------------------------------------------------------------------------------------------*/
8135
PROCEDURE Remove_Branch ( nBranchId IN BRANCHES.BRANCH_ID%TYPE ) IS
8136
 
8137
rowCount NUMBER DEFAULT 0;
8138
 
8139
BEGIN
8140
	/*--------------- Business Rules Here -------------------*/
8141
	-- Check for Dependencies
8142
	SELECT Count(*) INTO rowCount
8143
	  FROM BOMS bo
8144
	 WHERE bo.BRANCH_ID = nBranchId;
8145
 
8146
	IF rowCount > 0 THEN
8147
	   RAISE_APPLICATION_ERROR (-20000, 'Some BOMS are still using this Branch ( Counted '|| rowCount ||' ).' );
8148
	END IF; 
8149
	/*-------------------------------------------------------*/
8150
 
8151
	-- Remove Branch --
8152
	DELETE 
8153
	  FROM BRANCHES br
8154
	 WHERE br.BRANCH_ID = nBranchId; 
8155
 
8156
 
8157
END	Remove_Branch;
8158
/*--------------------------------------------------------------------------------------------------*/
8159
PROCEDURE Update_Branch ( nBranchId IN BRANCHES.BRANCH_ID%TYPE,
8160
		  				  sBranchName IN BRANCHES.BRANCH_NAME%TYPE,
8161
					   	  nRMVTreeId IN BRANCHES.RM_VTREE_FK%TYPE,
8162
                          sBranchComments IN BRANCHES.BRANCH_COMMENTS%TYPE ) IS
8163
 
8164
 
8165
BEGIN
8166
	/*--------------- Business Rules Here -------------------*/
8167
	/*-------------------------------------------------------*/
8168
 
8169
 
8170
	-- Update Branch --
8171
	UPDATE BRANCHES SET
8172
	BRANCH_NAME = sBranchName,
8173
	RM_VTREE_FK = nRMVTreeId,
8174
    BRANCH_COMMENTS = sBranchComments
8175
	WHERE BRANCH_ID = nBranchId;
8176
 
8177
	EXCEPTION
8178
    WHEN DUP_VAL_ON_INDEX
8179
	THEN		
8180
		RAISE_APPLICATION_ERROR (-20000, 'Branch Name "'|| sBranchName ||'" is Already Used.');
8181
 
8182
END	Update_Branch;
8183
/*--------------------------------------------------------------------------------------------------*/
8184
PROCEDURE ShowHide_Branch ( nBranchId IN BRANCHES.BRANCH_ID%TYPE ) IS
8185
 
8186
currIsHidden BRANCHES.IS_HIDDEN%TYPE;
8187
 
8188
BEGIN
8189
	/*--------------- Business Rules Here -------------------*/
8190
	/*-------------------------------------------------------*/
8191
 
8192
	-- Get current IsHidden State
8193
	SELECT br.IS_HIDDEN INTO currIsHidden
8194
	  FROM BRANCHES br
8195
	 WHERE br.BRANCH_ID = nBranchId;
8196
 
8197
 
8198
	-- Toggle IsHidden State --
8199
	IF currIsHidden = 'Y' THEN
8200
	   currIsHidden := NULL;
8201
	ELSE
8202
	   currIsHidden := 'Y';
8203
	END IF;
8204
 
8205
 
8206
	-- Update State --
8207
	UPDATE BRANCHES SET
8208
	IS_HIDDEN = currIsHidden
8209
	WHERE BRANCH_ID = nBranchId;
8210
 
8211
 
8212
END	ShowHide_Branch;
8213
/*--------------------------------------------------------------------------------------------------*/
8214
PROCEDURE ShowHide_Download ( nProjId DM_PROJECTS.PROJ_ID%TYPE ) IS
8215
 
8216
currIsDownload DM_PROJECTS.IS_DOWNLOAD%TYPE;
8217
 
8218
BEGIN
8219
	/*--------------- Business Rules Here -------------------*/
8220
	/*-------------------------------------------------------*/
8221
 
8222
	-- Get current IsHidden State
8223
	SELECT dmp.IS_DOWNLOAD INTO currIsDownload
8224
	  FROM DM_PROJECTS dmp
8225
	 WHERE dmp.PROJ_ID = nProjId;
8226
 
8227
 
8228
	-- Toggle IsHidden State --
8229
	IF currIsDownload = 'Y' THEN
8230
	   currIsDownload := NULL;
8231
	ELSE
8232
	   currIsDownload := 'Y';
8233
	END IF;
8234
 
8235
 
8236
	-- Update State --
8237
	UPDATE DM_PROJECTS dmp SET
8238
	IS_DOWNLOAD = currIsDownload
8239
	WHERE dmp.PROJ_ID = nProjId;
8240
 
8241
 
8242
END	ShowHide_Download;
8243
/*--------------------------------------------------------------------------------------------------*/
8244
PROCEDURE ShowHide_StateDownload ( nStateId STATES.STATE_ID%TYPE ) IS
8245
 
8246
currIsDownload DM_PROJECTS.IS_DOWNLOAD%TYPE;
8247
 
8248
BEGIN
8249
	/*--------------- Business Rules Here -------------------*/
8250
	/*-------------------------------------------------------*/
8251
 
8252
	-- Get current IsHidden State
8253
	SELECT st.IS_DOWNLOAD INTO currIsDownload
8254
	  FROM STATES st
8255
	 WHERE st.STATE_ID = nStateId;
8256
 
8257
 
8258
	-- Toggle IsHidden State --
8259
	IF currIsDownload = 'Y' THEN
8260
	   currIsDownload := NULL;
8261
	ELSE
8262
	   currIsDownload := 'Y';
8263
	END IF;
8264
 
8265
 
8266
	-- Update State --
8267
	UPDATE STATES st SET
8268
	IS_DOWNLOAD = currIsDownload
8269
	WHERE st.STATE_ID = nStateId;
8270
 
8271
 
8272
END	ShowHide_StateDownload;
8273
 
8274
END pk_Project;
8275
 
8276
/
8277
 
8278
/
8279
--------------------------------------------------------
8280
--  DDL for Package Body PK_REPORT
8281
--------------------------------------------------------
8282
 
8283
  CREATE OR REPLACE PACKAGE BODY "PK_REPORT" IS
8284
 
8285
/*
8286
------------------------------
8287
||  Last Modified:  S.Vukovic
8288
||  Modified Date:  8/Mar/2005
8289
||  Body Version:   1.0
8290
------------------------------
8291
*/
8292
 
8293
 
8294
/*-------------------------------------------------------------------------------------------------------*/
8295
FUNCTION BOM_PRODUCTS_BY_NODE_BY_OS ( BomId NUMBER ) RETURN typeCur IS
8296
 
8297
	records typeCur;
8298
 
8299
BEGIN
8300
 
8301
 
8302
	OPEN records FOR
8303
	SELECT nn.NODE_ID,
8304
		   nt.NODE_ICON,
8305
		   nn.NODE_NAME,
8306
		   bt.BOS_ICON,
8307
		   obe.BASE_ENV_ID,
8308
		   os.OS_ID,
8309
		   os.OS_NAME,
8310
		   osc.SEQ_NUM,
8311
		   osc.PROD_ID,
8312
		   pkg.PKG_NAME,
8313
		   pv.PKG_VERSION
8314
	  FROM BOM_CONTENTS bc,
8315
	  	   OPERATING_SYSTEMS os,
8316
		   OS_CONTENTS osc,
8317
		   OS_BASE_ENV obe,
8318
		   BASE_ENV be,
8319
		   BOS_TYPES bt,
8320
		   NETWORK_NODES nn,
8321
		   NODE_TYPES nt,
8322
		   PACKAGE_VERSIONS pv,
8323
		   PACKAGES pkg
8324
	 WHERE os.NODE_ID (+) = nn.NODE_ID 
8325
	   AND nn.NODE_ID = bc.NODE_ID 
8326
	   AND nn.NODE_TYPE_ID = nt.NODE_TYPE_ID (+)
8327
	   AND bc.BOM_ID = BomId
8328
	   AND pv.PKG_ID = pkg.PKG_ID (+)
8329
	   AND osc.OS_ID (+) = os.OS_ID 
8330
	   AND osc.PROD_ID = pv.PV_ID (+)
8331
	   AND obe.OS_ID (+) = os.OS_ID
8332
	   AND obe.BASE_ENV_ID = be.BASE_ENV_ID (+)
8333
	   AND be.BOS_ID = bt.BOS_ID (+)
8334
	ORDER BY UPPER(nn.NODE_NAME), UPPER(os.OS_NAME), osc.SEQ_NUM;
8335
 
8336
 
8337
	RETURN records;	   
8338
 
8339
END;
8340
/*-------------------------------------------------------------------------------------------------------*/
8341
END PK_REPORT;
8342
 
8343
/
8344
 
8345
/
8346
--------------------------------------------------------
8347
--  DDL for Package Body PK_REQUIREMENTS
8348
--------------------------------------------------------
8349
 
8350
  CREATE OR REPLACE PACKAGE BODY "PK_REQUIREMENTS" 
8351
IS
8352
/* ---------------------------------------------------------------------------
8353
    Version: 1.0.0
8354
   --------------------------------------------------------------------------- */
8355
 
8356
/*--------------------------------------------------------------------------------------------------*/
8357
PROCEDURE Add_Bom ( nFromBomId IN BOMS.BOM_ID%TYPE,
8358
					   nToBranchId IN BOMS.BRANCH_ID%TYPE ) IS
8359
 
8360
rowCount NUMBER;
8361
FromBranchId NUMBER;
8362
 
8363
BEGIN
8364
	/*--------------- Business Rules Here -------------------*/
8365
	/*-------------------------------------------------------*/
8366
 
8367
	-- Get FromBranchId
8368
	SELECT bo.BRANCH_ID INTO FromBranchId
8369
	  FROM BOMS bo
8370
	 WHERE bo.BOM_ID = nFromBomId;
8371
 
8372
 
8373
	IF FromBranchId = nToBranchId THEN
8374
		/* Only check for rules if same branch_id */
8375
 
8376
 
8377
		-- REQUIREMENT: Cannot Branch more then 2 BOMs from parent
8378
		SELECT COUNT(*) INTO rowCount
8379
		  FROM BOMS bo
8380
		 WHERE bo.PARENT_BOM_ID = nFromBomId
8381
		   AND bo.BRANCH_ID = nToBranchId
8382
		   AND bo.BOM_ID != bo.PARENT_BOM_ID;
8383
 
8384
		IF rowCount >= 2 THEN
8385
		   RAISE_APPLICATION_ERROR (-20000, 'This BOM is already branched.' );
8386
		END IF;  
8387
 
8388
	END IF;
8389
 
8390
 
8391
END	Add_Bom;
8392
/*--------------------------------------------------------------------------------------------------*/
8393
PROCEDURE Destroy_Bom ( nBomId IN VARCHAR2 ) IS
8394
 
8395
rowCount NUMBER;
8396
nBomIdCollector DEPMGR_NUMBER_TAB_t := DEPMGR_NUMBER_TAB_t();
8397
 
8398
BEGIN
8399
	/*--------------- Business Rules Here -------------------*/
8400
	/*-------------------------------------------------------*/
8401
	nBomIdCollector := IN_LIST_NUMBER( nBomId );
8402
 
8403
	-- REQUIREMENT: For now if can only deal with one bom at a time
8404
	IF nBomIdCollector.Count > 1 THEN
8405
		RAISE_APPLICATION_ERROR (-20000, 'Please select one BOM only.' );
8406
	END IF;
8407
 
8408
 
8409
	-- REQUIREMENT: BOM need to be Unlocked
8410
	SELECT Count(*) INTO rowCount
8411
	  FROM BOMS bo
8412
	 WHERE bo.IS_READONLY = 'Y'
8413
	   AND bo.BOM_ID IN ( 
8414
	  	  		  	      SELECT * 
8415
						  FROM THE ( SELECT CAST( nBomIdCollector AS DEPMGR_NUMBER_TAB_t ) FROM dual )  
8416
					 	 );
8417
 
8418
	IF rowCount > 0 THEN
8419
	   RAISE_APPLICATION_ERROR (-20000, 'Cannot Destroy as selected BOM is locked.' );
8420
	END IF;
8421
 
8422
 
8423
	-- REQUIREMENT: Cannot be a parent to someone
8424
	SELECT Count(*) INTO rowCount
8425
	  FROM BOMS bo
8426
	 WHERE bo.BOM_ID != bo.PARENT_BOM_ID
8427
	   AND bo.PARENT_BOM_ID IN ( 
8428
			  	  		  	      SELECT * 
8429
								  FROM THE ( SELECT CAST( nBomIdCollector AS DEPMGR_NUMBER_TAB_t ) FROM dual )  
8430
							 	);
8431
 
8432
	IF rowCount > 0 THEN
8433
	   RAISE_APPLICATION_ERROR (-20000, 'Cannot Destroy as some BOMs are created or branched from this BOM.' );
8434
	END IF;								
8435
 
8436
 
8437
	-- Check for Dependencies (Knowledge Base Notes)
8438
	SELECT Count(*) INTO rowCount
8439
	  FROM BOM_NOTES bn
8440
	 WHERE bn.BOM_ID IN ( 
8441
	  	  		  	      SELECT * 
8442
						  FROM THE ( SELECT CAST( nBomIdCollector AS DEPMGR_NUMBER_TAB_t ) FROM dual )  
8443
					 	);
8444
 
8445
	IF rowCount > 0 THEN
8446
	   RAISE_APPLICATION_ERROR (-20000, 'Cannot Destroy as some knowledge base notes are attached to this BOM.' );
8447
	END IF;
8448
 
8449
 
8450
END	Destroy_Bom;
8451
/*--------------------------------------------------------------------------------------------------*/
8452
 
8453
 
8454
END pk_Requirements;
8455
 
8456
/
8457
 
8458
/
8459
--------------------------------------------------------
8460
--  DDL for Package Body PK_STATE
8461
--------------------------------------------------------
8462
 
8463
  CREATE OR REPLACE PACKAGE BODY "PK_STATE" 
8464
IS
8465
/* ---------------------------------------------------------------------------
8466
    Version: 1.0.0
8467
   --------------------------------------------------------------------------- */
8468
 
8469
 
8470
/*--------------------------------------------------------------------------------------------------*/
8471
PROCEDURE Add_State ( sStateName IN STATES.STATE_NAME%TYPE,
8472
		  			  nStateTypeEnum IN STATES.STATE_TYPE_ENUM%TYPE,
8473
		  			  nProjId IN STATES.PROJ_ID%TYPE ) IS
8474
 
8475
StateId NUMBER;
8476
NextStateSeq NUMBER;
8477
 
8478
 
8479
BEGIN
8480
	/*--------------- Business Rules Here -------------------*/
8481
	/*-------------------------------------------------------*/
8482
 
8483
	-- Get state_id --
8484
	SELECT SEQ_STATE_ID.NEXTVAL INTO StateId FROM DUAL;
8485
 
8486
	-- Get Next Release Sequence
8487
	SELECT MAX( st.STATE_SEQ ) INTO NextStateSeq
8488
	  FROM STATES st
8489
	 WHERE st.PROJ_ID = nProjId;
8490
 
8491
	IF NextStateSeq IS NULL THEN
8492
	   NextStateSeq := 1;
8493
	ELSE
8494
	   NextStateSeq := NextStateSeq + 1;
8495
	END IF;
8496
 
8497
 
8498
	-- Insert Branch --
8499
	INSERT INTO STATES ( STATE_ID, PROJ_ID, STATE_NAME, STATE_SEQ, STATE_TYPE_ENUM )
8500
	VALUES ( StateId, nProjId, sStateName, NextStateSeq, nStateTypeEnum );
8501
 
8502
 
8503
	EXCEPTION
8504
    WHEN DUP_VAL_ON_INDEX
8505
	THEN		
8506
		RAISE_APPLICATION_ERROR (-20000, 'State Name "'|| sStateName ||'" is Already Used.');
8507
 
8508
END	Add_State;
8509
/*--------------------------------------------------------------------------------------------------*/
8510
PROCEDURE Update_State ( nStateId IN STATES.STATE_ID%TYPE,
8511
		  			   	 sStateName IN STATES.STATE_NAME%TYPE,
8512
						 nStateSeq IN STATES.STATE_SEQ%TYPE,
8513
						 nStateTypeEnum IN STATES.STATE_TYPE_ENUM%TYPE ) IS
8514
 
8515
currSeqNum NUMBER;
8516
FromSeqNum NUMBER;
8517
ProjId NUMBER;
8518
 
8519
BEGIN
8520
	/*--------------- Business Rules Here -------------------*/
8521
	/*-------------------------------------------------------*/
8522
	-- Get State proj_id --
8523
	SELECT st.PROJ_ID INTO ProjId  FROM STATES st WHERE st.STATE_ID = nStateId;
8524
 
8525
 
8526
	-- Get Current seq_num
8527
	SELECT st.STATE_SEQ INTO currSeqNum
8528
	  FROM STATES st
8529
	 WHERE st.STATE_ID = nStateId;
8530
 
8531
 
8532
	IF currSeqNum > nStateSeq
8533
	THEN
8534
 
8535
		FromSeqNum := nStateSeq;
8536
 
8537
		-- Shift others Up
8538
		UPDATE STATES st SET
8539
			   st.STATE_SEQ = st.STATE_SEQ + 1
8540
		 WHERE st.PROJ_ID = ProjId
8541
		   AND st.STATE_SEQ BETWEEN  FromSeqNum  AND  currSeqNum - 1;
8542
 
8543
 
8544
	ELSIF currSeqNum < nStateSeq
8545
	THEN
8546
 
8547
		FromSeqNum := currSeqNum + 1;  
8548
 
8549
		 -- Shift others Down
8550
		UPDATE STATES st SET
8551
		   	   st.STATE_SEQ = st.STATE_SEQ - 1
8552
		 WHERE st.PROJ_ID = ProjId
8553
		   AND st.STATE_SEQ BETWEEN  FromSeqNum  AND  nStateSeq;
8554
 
8555
	END IF;
8556
 
8557
 
8558
	-- Update State --
8559
	UPDATE STATES st SET
8560
	st.STATE_NAME = sStateName,
8561
	st.STATE_SEQ = nStateSeq,
8562
	st.STATE_TYPE_ENUM = nStateTypeEnum
8563
	WHERE st.STATE_ID = nStateId;
8564
 
8565
	EXCEPTION
8566
    WHEN DUP_VAL_ON_INDEX
8567
	THEN		
8568
		RAISE_APPLICATION_ERROR (-20000, 'State Name "'|| sStateName ||'" is Already Used.');
8569
 
8570
END	Update_State;
8571
/*--------------------------------------------------------------------------------------------------*/
8572
PROCEDURE Remove_State ( nStateId IN STATES.STATE_ID%TYPE ) IS
8573
 
8574
rowCount NUMBER DEFAULT 0;
8575
ProjId NUMBER;
8576
NextSeqNum NUMBER;
8577
 
8578
CURSOR curStates IS
8579
	SELECT st.STATE_ID
8580
	  FROM STATES st
8581
	 WHERE st.PROJ_ID = ProjId
8582
	 ORDER BY st.STATE_SEQ;
8583
recStates curStates%ROWTYPE;
8584
 
8585
BEGIN
8586
	/*--------------- Business Rules Here -------------------*/
8587
	-- Check for Dependencies (BOMS)
8588
	SELECT Count(*) INTO rowCount
8589
	  FROM BOM_STATE bs
8590
	 WHERE bs.STATE_ID = nStateId;
8591
 
8592
	IF rowCount > 0 THEN
8593
	   RAISE_APPLICATION_ERROR (-20000, 'Some BOMS are still using this State ( Counted '|| rowCount ||' ).' );
8594
	END IF; 
8595
	/*-------------------------------------------------------*/
8596
 
8597
	-- Get State proj_id --
8598
	SELECT st.PROJ_ID INTO ProjId  FROM STATES st WHERE st.STATE_ID = nStateId;
8599
 
8600
 
8601
	-- Remove State --
8602
	DELETE 
8603
	  FROM STATES st
8604
	 WHERE st.STATE_ID = nStateId;
8605
 
8606
 
8607
	-- Update Seq Number --
8608
	OPEN curStates;
8609
	FETCH curStates INTO recStates;
8610
 
8611
	NextSeqNum := 1;
8612
	WHILE curStates%FOUND
8613
	LOOP
8614
 
8615
		UPDATE STATES st SET
8616
		st.STATE_SEQ = NextSeqNum
8617
		WHERE st.STATE_ID = recStates.STATE_ID;
8618
 
8619
		NextSeqNum := NextSeqNum + 1;
8620
		FETCH curStates INTO recStates;
8621
	END LOOP;
8622
 
8623
	CLOSE curStates; 
8624
 
8625
 
8626
END	Remove_State;
8627
/*--------------------------------------------------------------------------------------------------*/
8628
PROCEDURE Toggle_Is_Displayed ( nStateId IN BOM_STATE.STATE_ID%TYPE,
8629
								nBomId IN BOM_STATE.BOM_ID%TYPE,
8630
								cIsDisplay IN BOM_STATE.IS_DISPLAYED%TYPE ) IS
8631
 
8632
IsDisplayed BOM_STATE.IS_DISPLAYED%TYPE;
8633
 
8634
BEGIN
8635
	/*--------------- Business Rules Here -------------------*/
8636
	/*-------------------------------------------------------*/
8637
 
8638
	-- Get Current is_displayed
8639
	/*SELECT bs.IS_DISPLAYED INTO IsDisplayed
8640
	  FROM BOM_STATE bs
8641
	 WHERE bs.BOM_ID = nBomId
8642
	   AND bs.STATE_ID = nStateId;
8643
 
8644
 
8645
	-- Toggle is_displayed
8646
	IF IsDisplayed = 'Y' THEN
8647
		IsDisplayed := 'N';
8648
	ELSE
8649
		IsDisplayed := 'Y';
8650
	END IF;*/
8651
 
8652
 
8653
	-- Update bom state
8654
	UPDATE BOM_STATE SET
8655
	IS_DISPLAYED = cIsDisplay
8656
	WHERE BOM_ID = nBomId
8657
	  AND STATE_ID = nStateId;
8658
 
8659
 
8660
END	Toggle_Is_Displayed;
8661
 
8662
/*--------------------------------------------------------------------------------------------------*/
8663
PROCEDURE Auto_Hide ( nStateId IN BOM_STATE.STATE_ID%TYPE,
8664
					  nInsertedBomId IN BOM_STATE.BOM_ID%TYPE,
8665
					  nEventValue IN SYSTEM_CONFIGURATION.ITEM_VALUE%TYPE ) IS
8666
 
8667
CURSOR curParent IS
8668
	SELECT bo.BOM_ID,
8669
		   bo.IS_READONLY,
8670
		   bo.IS_REJECTED
8671
	  FROM BOMS bo
8672
	 WHERE bo.BOM_ID IN (	
8673
	 					 SELECT bo.PARENT_BOM_ID
8674
						   FROM BOMS bo
8675
						  WHERE bo.BOM_ID = nInsertedBomId
8676
						    AND bo.BOM_ID != bo.PARENT_BOM_ID
8677
	 					);
8678
recParent curParent%ROWTYPE;	
8679
 
8680
ParentBomId BOMS.PARENT_BOM_ID%TYPE;
8681
ParentOfficial BOMS.IS_READONLY%TYPE;	
8682
ParentRejected BOMS.IS_REJECTED%TYPE;			  
8683
 
8684
BEGIN
8685
	/*--------------- Business Rules Here -------------------*/
8686
	/*-------------------------------------------------------*/
8687
 
8688
	-- Get Parent Details
8689
	OPEN curParent;
8690
	FETCH curParent INTO recParent;
8691
 
8692
	ParentBomId := recParent.BOM_ID;
8693
	ParentOfficial := recParent.IS_READONLY;
8694
	ParentRejected := recParent.IS_REJECTED;
8695
 
8696
	CLOSE curParent;
8697
 
8698
 
8699
	IF ParentOfficial = 'Y' THEN
8700
		/* Auto-Hide BOM */
8701
 
8702
		IF nEventValue = GET_SYSTEM_VALUE('enumEVENT_ON_RELEASE_TO') THEN
8703
			/* REQUIREMENT: Hide Rejected parent */
8704
 
8705
			IF ParentRejected = 'Y' THEN
8706
				-- Update bom state
8707
				UPDATE BOM_STATE SET
8708
					IS_DISPLAYED = 'N'
8709
				WHERE BOM_ID = ParentBomId
8710
				  AND STATE_ID = nStateId;
8711
 
8712
			END IF;
8713
 
8714
 
8715
		ELSIF ( nEventValue = GET_SYSTEM_VALUE('enumEVENT_ON_LOCK_BOM') )  OR  (nEventValue = GET_SYSTEM_VALUE('enumEVENT_ON_ACCEPT_BOM') ) THEN
8716
			/* REQUIREMENT: Hide Rejected or Accepted parent */
8717
 
8718
			IF NOT ParentRejected IS NULL THEN
8719
				-- Update bom state
8720
				UPDATE BOM_STATE SET
8721
					IS_DISPLAYED = 'N'
8722
				WHERE BOM_ID = ParentBomId
8723
				  AND STATE_ID = nStateId;
8724
 
8725
			END IF;
8726
 
8727
 
8728
		ELSIF ( nEventValue = GET_SYSTEM_VALUE('enumEVENT_ON_UNLOCK_BOM') )  OR  (nEventValue = GET_SYSTEM_VALUE('enumEVENT_ON_REJECT_BOM') ) THEN
8729
			/* REQUIREMENT: Show parent */
8730
 
8731
			-- Update bom state
8732
			UPDATE BOM_STATE SET
8733
				IS_DISPLAYED = 'Y'
8734
			WHERE BOM_ID = ParentBomId
8735
			  AND STATE_ID = nStateId;
8736
 
8737
		END IF;
8738
 
8739
 
8740
 
8741
	END IF;
8742
 
8743
 
8744
 
8745
 
8746
END	Auto_Hide;
8747
/*--------------------------------------------------------------------------------------------------*/
8748
 
8749
 
8750
END pk_State;
8751
 
8752
/
8753
 
8754
/
8755
--------------------------------------------------------
8756
--  DDL for Package Body PK_UTILS
8757
--------------------------------------------------------
8758
 
8759
  CREATE OR REPLACE PACKAGE BODY "PK_UTILS" 
8760
IS
8761
/* ---------------------------------------------------------------------------
8762
    Version: 1.0.0
8763
   --------------------------------------------------------------------------- */
8764
 
8765
/*--------------------------------------------------------------------------------------------------*/
8766
PROCEDURE Clone_BOM ( nFromBomId IN BOMS.BOM_ID%TYPE,
8767
		  			  nToBomId IN BOMS.BOM_ID%TYPE,
8768
					  nUserId IN NUMBER ) IS
8769
 
8770
FromBom VARCHAR2(4000);
8771
 
8772
BEGIN
8773
	/*--------------- Business Rules Here -------------------*/
8774
	/*-------------------------------------------------------*/
8775
 
8776
	-- Define old_bom_id
8777
	UPDATE BOMS bo SET
8778
	bo.OLD_BOM_ID = nFromBomId
8779
	WHERE bo.BOM_ID = nToBomId;
8780
 
8781
	-- Copy Bom Contents
8782
	Copy_BOM_Contents ( nFromBomId, nToBomId );
8783
 
8784
 
8785
	-- Finnaly Clean old_id columns
8786
	Clean_Old_Id_Column();
8787
 
8788
 
8789
 
8790
 
8791
	/* Log BOM_TRAIL */
8792
	-- Get FromBom Details
8793
	SELECT proj.PROJ_NAME ||' / '|| br.BRANCH_NAME ||' / '|| bn.BOM_NAME ||' '|| bo.BOM_VERSION ||'.'|| BOM_LIFECYCLE
8794
		   INTO FromBom 
8795
	  FROM DM_PROJECTS proj,
8796
	  	   BOMS bo,
8797
		   BOM_NAMES bn,
8798
		   BRANCHES br
8799
	 WHERE br.PROJ_ID = proj.PROJ_ID
8800
	   AND bo.BRANCH_ID = br.BRANCH_ID
8801
	   AND bo.BOM_NAME_ID = bn.BOM_NAME_ID
8802
	   AND bo.BOM_ID = nFromBomId;
8803
 
8804
	-- Log Action
8805
	pk_Bom.Log_Bom_Trail ( nToBomId, 'COPIED: From '|| FromBom, nUserId );
8806
 
8807
 
8808
END	Clone_BOM;
8809
/*--------------------------------------------------------------------------------------------------*/
8810
PROCEDURE Copy_BOM_Contents ( nFromBomId IN BOMS.BOM_ID%TYPE,
8811
		  					  nToBomId IN BOMS.BOM_ID%TYPE ) IS
8812
 
8813
 
8814
BEGIN
8815
	/*--------------- Business Rules Here -------------------*/
8816
	/*-------------------------------------------------------*/
8817
 
8818
	-- Copy Network Nodes
8819
	Copy_Network_Node ( nFromBomId, nToBomId ); 
8820
 
8821
 
8822
	-- Copy Hardware Names
8823
	INSERT INTO HARDWARE ( HARDWARE_NAME_ID, BOM_ID, HARDWARE_NAME, TIER_NAME, OLD_HARDWARE_NAME_ID )
8824
	SELECT SEQ_HARDWARE_NAME_ID.NEXTVAL AS HARDWARE_NAME_ID, 
8825
		   nToBomId AS BOM_ID, 
8826
		   hw.HARDWARE_NAME, 
8827
		   hw.TIER_NAME, 
8828
		   hw.HARDWARE_NAME_ID AS OLD_HARDWARE_NAME_ID
8829
	  FROM HARDWARE hw
8830
	 WHERE hw.BOM_ID = nFromBomId;
8831
 
8832
 
8833
	-- Copy Hardware Matrix
8834
	INSERT INTO HARDWARE_NODE ( HARDWARE_NAME_ID, NODE_ID) 
8835
	SELECT hw.HARDWARE_NAME_ID, 
8836
		   nn.NODE_ID
8837
	  FROM HARDWARE hw,
8838
	  	   NETWORK_NODES nn,
8839
		   HARDWARE_NODE hd
8840
	 WHERE hd.NODE_ID = nn.OLD_NODE_ID
8841
	   AND hd.HARDWARE_NAME_ID = hw.OLD_HARDWARE_NAME_ID
8842
	   AND hw.BOM_ID = nToBomId;
8843
 
8844
 
8845
	-- Copy Base Environments
8846
	INSERT INTO BASE_ENV ( BASE_ENV_ID, BOS_ID, BASE_ENV_NAME, OLD_BASE_ENV_ID, BOM_ID )
8847
	SELECT SEQ_BASE_ENV_ID.NEXTVAL AS BASE_ENV_ID, 
8848
		   be.BOS_ID, 
8849
		   be.BASE_ENV_NAME, 
8850
		   be.BASE_ENV_ID AS OLD_BASE_ENV_ID, 
8851
		   nToBomId AS BOM_ID   
8852
	  FROM BASE_ENV be
8853
	 WHERE be.BOM_ID = nFromBomId;
8854
 
8855
 
8856
	-- Relink Base Environment Contents
8857
	INSERT INTO BASE_ENV_CONTENTS ( BASE_ENV_ID, PROD_ID, BASE_ENV_COMMENTS, SEQ_NUM, IS_NODE_SPEC, NOT_XML )
8858
	SELECT be.BASE_ENV_ID AS BASE_ENV_ID, 
8859
		   bec.PROD_ID, 
8860
		   bec.BASE_ENV_COMMENTS, 
8861
		   bec.SEQ_NUM,
8862
		   bec.IS_NODE_SPEC,
8863
		   bec.NOT_XML
8864
	  FROM BASE_ENV be,
8865
	  	   BASE_ENV_CONTENTS bec
8866
	 WHERE bec.BASE_ENV_ID = be.OLD_BASE_ENV_ID
8867
	   AND be.BOM_ID = nToBomId;
8868
 
8869
 
8870
    -- Copy OS
8871
	INSERT INTO OPERATING_SYSTEMS ( OS_ID, OS_NAME, NODE_ID, OS_COMMENTS, OLD_OS_ID, NODE_SPEC_FILE, NOT_XML ) 
8872
	SELECT SEQ_OS_ID.NEXTVAL AS OS_ID, 
8873
		   os.OS_NAME, 
8874
		   nn.NODE_ID AS NODE_ID, 
8875
		   os.OS_COMMENTS, 
8876
		   os.OS_ID AS OLD_OS_ID,
8877
		   os.NODE_SPEC_FILE,
8878
		   os.NOT_XML
8879
	  FROM OPERATING_SYSTEMS os,
8880
	  	   NETWORK_NODES nn,
8881
		   BOM_CONTENTS bc
8882
	 WHERE bc.NODE_ID = nn.NODE_ID
8883
	   AND os.NODE_ID = nn.OLD_NODE_ID
8884
	   AND bc.BOM_ID = nToBomId;
8885
 
8886
 
8887
 
8888
    -- Relink OS Base Environments
8889
	INSERT INTO OS_BASE_ENV ( OS_ID, BASE_ENV_ID ) 
8890
	SELECT os.OS_ID AS OS_ID,
8891
		   be.BASE_ENV_ID AS BASE_ENV_ID
8892
	  FROM OPERATING_SYSTEMS os,
8893
	  	   NETWORK_NODES nn,
8894
		   BOM_CONTENTS bc,
8895
		   OS_BASE_ENV osbe,
8896
		   BASE_ENV be
8897
	 WHERE osbe.OS_ID = os.OLD_OS_ID
8898
	   AND osbe.BASE_ENV_ID = be.OLD_BASE_ENV_ID
8899
	   AND bc.NODE_ID = nn.NODE_ID
8900
	   AND os.NODE_ID = nn.NODE_ID
8901
	   AND bc.BOM_ID = nToBomId;
8902
 
8903
 
8904
	-- Copy OS Contents
8905
	INSERT INTO OS_CONTENTS ( OS_ID, SEQ_NUM, PROD_ID, PRODUCT_COMMENTS, CHANGE_LOG_FLAG, IS_NODE_SPEC, NOT_XML ) 	  
8906
	SELECT os.OS_ID AS OS_ID, 
8907
		   osc.SEQ_NUM, 
8908
		   osc.PROD_ID, 
8909
		   osc.PRODUCT_COMMENTS, 
8910
		   osc.CHANGE_LOG_FLAG,
8911
		   osc.IS_NODE_SPEC,
8912
		   osc.NOT_XML
8913
	  FROM OPERATING_SYSTEMS os,
8914
	  	   BOM_CONTENTS bc,
8915
		   OS_CONTENTS osc
8916
	 WHERE bc.NODE_ID = os.NODE_ID
8917
	   AND osc.OS_ID = os.OLD_OS_ID
8918
	   AND bc.BOM_ID = nToBomId;
8919
 
8920
 
8921
    -- Copy Processes Config
8922
	INSERT INTO PROCESSES_CONFIG ( PROC_ID, PROD_ID, OS_ID, PKG_HEALTH_TAG, CMD_INTERFACE, PKG_OWNER, IS_INTERFACE, PROC_DESCRIPTION, PKG_ID ) 	  
8923
	SELECT pc.PROC_ID, 
8924
		   pc.PROD_ID, 
8925
		   os.OS_ID AS OS_ID, 
8926
		   pc.PKG_HEALTH_TAG, 
8927
		   pc.CMD_INTERFACE,
8928
		   pc.PKG_OWNER,
8929
		   pc.IS_INTERFACE,
8930
		   pc.PROC_DESCRIPTION,
8931
		   pc.PKG_ID 
8932
	  FROM OPERATING_SYSTEMS os,
8933
	  	   BOM_CONTENTS bc,
8934
		   PROCESSES_CONFIG pc
8935
	 WHERE bc.NODE_ID = os.NODE_ID
8936
	   AND pc.OS_ID = os.OLD_OS_ID
8937
	   AND bc.BOM_ID = nToBomId;
8938
 
8939
 
8940
	-- Copy Hide Products/Patches
8941
	INSERT INTO HIDE_PRODUCTS (OS_ID, PROD_ID)
8942
	SELECT os.OS_ID, 
8943
		   hp.PROD_ID
8944
	FROM   HIDE_PRODUCTS hp,
8945
		   OPERATING_SYSTEMS os,
8946
		   BOM_CONTENTS bc
8947
	WHERE  hp.OS_ID = os.OLD_OS_ID
8948
	AND    bc.NODE_ID = os.NODE_ID
8949
	AND    bc.BOM_ID = nToBomId ; 	   
8950
 
8951
 
8952
END	Copy_BOM_Contents;
8953
/*--------------------------------------------------------------------------------------------------*/
8954
PROCEDURE Copy_Network_Node ( nFromBomId IN BOMS.BOM_ID%TYPE,
8955
		  					  nToBomId IN BOMS.BOM_ID%TYPE,
8956
							  nFromNodeId IN NUMBER DEFAULT 0  ) IS
8957
 
8958
 
8959
BEGIN
8960
	/*--------------- Business Rules Here -------------------*/
8961
	/*-------------------------------------------------------*/
8962
 
8963
	-- Copy Network Nodes
8964
	INSERT INTO NETWORK_NODES ( NODE_ID, NODE_TYPE_ID, NODE_NAME, NODE_COMMENTS, OLD_NODE_ID, NODE_VERSION, NODE_LIFE_CYCLE )
8965
	SELECT SEQ_NODE_ID.NEXTVAL AS NODE_ID, 
8966
		   nn.NODE_TYPE_ID, 
8967
		   nn.NODE_NAME, 
8968
		   nn.NODE_COMMENTS, 
8969
		   nn.NODE_ID AS OLD_NODE_ID,
8970
		   nn.NODE_VERSION, 
8971
		   nn.NODE_LIFE_CYCLE
8972
	  FROM NETWORK_NODES nn,
8973
	  	   BOM_CONTENTS bc
8974
	 WHERE bc.NODE_ID = nn.NODE_ID
8975
	   AND (
8976
	   	    ( bc.NODE_ID = bc.NODE_ID  AND  nFromNodeId = 0 ) OR
8977
			( bc.NODE_ID = nFromNodeId     AND  nFromNodeId != 0 )
8978
	   	   )
8979
	   AND bc.BOM_ID = nFromBomId;
8980
 
8981
 
8982
	-- Relink Bom Contents
8983
	INSERT INTO BOM_CONTENTS ( BOM_ID, NODE_ID, SEQ_NUM)
8984
	SELECT bo.BOM_ID,
8985
		   nn.NODE_ID,
8986
		   bc.SEQ_NUM
8987
	  FROM BOMS bo,
8988
	  	   BOM_CONTENTS bc,
8989
		   NETWORK_NODES nn
8990
	 WHERE bc.BOM_ID = bo.OLD_BOM_ID
8991
	   AND bc.NODE_ID = nn.OLD_NODE_ID
8992
	   AND (
8993
	   	    ( nn.OLD_NODE_ID = nn.OLD_NODE_ID  AND  nFromNodeId = 0 ) OR
8994
			( nn.OLD_NODE_ID = nFromNodeId     AND  nFromNodeId != 0 )
8995
	   	   )
8996
	   AND bo.BOM_ID = nToBomId;  
8997
 
8998
END	Copy_Network_Node;
8999
/*--------------------------------------------------------------------------------------------------*/
9000
PROCEDURE Paste_Products ( sProdIdList IN VARCHAR2,
9001
						   nFromOsId IN OS_CONTENTS.OS_ID%TYPE, 
9002
						   nToOsId IN OS_CONTENTS.OS_ID%TYPE ) IS
9003
 
9004
MaxSeqNum NUMBER;						 
9005
 
9006
BEGIN
9007
	/*--------------- Business Rules Here -------------------*/
9008
	/*-------------------------------------------------------*/
9009
 
9010
	-- Get Max seq_num
9011
	SELECT COUNT(*) INTO MaxSeqNum
9012
	  FROM OS_CONTENTS osc
9013
	 WHERE osc.OS_ID = nToOsId;
9014
 
9015
 
9016
	-- Copy OS Contents
9017
	INSERT INTO OS_CONTENTS ( OS_ID, SEQ_NUM, PROD_ID, PRODUCT_COMMENTS, CHANGE_LOG_FLAG ) 	  
9018
	SELECT nToOsId AS OS_ID, 
9019
		   ROWNUM + MaxSeqNum, 
9020
		   osc.PROD_ID, 
9021
		   osc.PRODUCT_COMMENTS, 
9022
		   osc.CHANGE_LOG_FLAG
9023
	  FROM OS_CONTENTS osc
9024
	 WHERE osc.OS_ID = nFromOsId
9025
	   AND osc.PROD_ID IN (
9026
						   SELECT *
9027
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sProdIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual ) 
9028
	   	   			   	   );
9029
 
9030
 
9031
    -- Copy Processes Config
9032
	INSERT INTO PROCESSES_CONFIG ( PROC_ID, PROD_ID, OS_ID, PKG_HEALTH_TAG, CMD_INTERFACE ) 	  
9033
	SELECT pc.PROC_ID, 
9034
		   pc.PROD_ID, 
9035
		   nToOsId AS OS_ID, 
9036
		   pc.PKG_HEALTH_TAG, 
9037
		   pc.CMD_INTERFACE 
9038
	  FROM OPERATING_SYSTEMS os,
9039
	  	   BOM_CONTENTS bc,
9040
		   PROCESSES_CONFIG pc
9041
	 WHERE bc.NODE_ID = os.NODE_ID
9042
	   AND pc.OS_ID = os.OLD_OS_ID
9043
	   AND bc.BOM_ID = nFromOsId
9044
	   AND pc.PROD_ID IN (
9045
						   SELECT *
9046
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sProdIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual ) 
9047
	   	   			   	   );
9048
 
9049
 
9050
    EXCEPTION
9051
    WHEN DUP_VAL_ON_INDEX
9052
	THEN		
9053
		RAISE_APPLICATION_ERROR (-20000, 'Cannot Paste Duplicate Product.');	
9054
 
9055
END	Paste_Products;
9056
/*--------------------------------------------------------------------------------------------------*/
9057
PROCEDURE Paste_Products_To_Base_Env ( sProdIdList IN VARCHAR2,
9058
									   nFromOsId IN OS_CONTENTS.OS_ID%TYPE, 
9059
									   nToBaseEnvId IN BASE_ENV.BASE_ENV_ID%TYPE ) IS
9060
 
9061
MaxSeqNum NUMBER;						 
9062
 
9063
BEGIN
9064
	/*--------------- Business Rules Here -------------------*/
9065
	/*-------------------------------------------------------*/
9066
 
9067
	-- Get Max seq_num
9068
	SELECT COUNT(*) INTO MaxSeqNum
9069
	  FROM BASE_ENV_CONTENTS bec
9070
	 WHERE bec.BASE_ENV_ID = nToBaseEnvId;
9071
 
9072
 
9073
	-- Copy OS Contents
9074
	INSERT INTO BASE_ENV_CONTENTS ( BASE_ENV_ID, PROD_ID, BASE_ENV_COMMENTS, SEQ_NUM ) 	  
9075
	SELECT nToBaseEnvId AS BASE_ENV_ID, 
9076
		   osc.PROD_ID,
9077
		   osc.PRODUCT_COMMENTS, 
9078
		   ROWNUM + MaxSeqNum 
9079
	  FROM OS_CONTENTS osc
9080
	 WHERE osc.OS_ID = nFromOsId
9081
	   AND osc.PROD_ID IN (
9082
						   SELECT *
9083
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sProdIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual ) 
9084
	   	   			   	   );
9085
 
9086
 
9087
        EXCEPTION
9088
    WHEN DUP_VAL_ON_INDEX
9089
	THEN		
9090
		RAISE_APPLICATION_ERROR (-20000, 'Cannot Paste Duplicate Product.');	
9091
 
9092
END	Paste_Products_To_Base_Env;
9093
/*--------------------------------------------------------------------------------------------------*/
9094
PROCEDURE Paste_Os ( sOsIdList IN VARCHAR2,
9095
					 nFromNodeId IN OPERATING_SYSTEMS.NODE_ID%TYPE,
9096
					 nToNodeId IN OPERATING_SYSTEMS.NODE_ID%TYPE ) IS
9097
 
9098
ToBomId NUMBER;					 
9099
 
9100
BEGIN
9101
	/*--------------- Business Rules Here -------------------*/
9102
	/*-------------------------------------------------------*/
9103
 
9104
	-- Get ToBomId
9105
	SELECT bc.BOM_ID INTO ToBomId
9106
	  FROM BOM_CONTENTS bc
9107
 	 WHERE bc.NODE_ID = nToNodeId;
9108
 
9109
 
9110
    -- Copy OS
9111
	INSERT INTO OPERATING_SYSTEMS ( OS_ID, OS_NAME, NODE_ID, OS_COMMENTS, OLD_OS_ID ) 
9112
	SELECT SEQ_OS_ID.NEXTVAL AS OS_ID, 
9113
		   os.OS_NAME, 
9114
		   nToNodeId AS NODE_ID, 
9115
		   os.OS_COMMENTS, 
9116
		   os.OS_ID AS OLD_OS_ID
9117
	  FROM OPERATING_SYSTEMS os
9118
	 WHERE os.NODE_ID = nFromNodeId
9119
	   AND os.OS_ID IN (
9120
					   	  SELECT *
9121
				   	     	FROM THE ( SELECT CAST( IN_LIST_NUMBER( sOsIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual ) 
9122
   	   			   	    );
9123
 
9124
 
9125
	-- Paste OS Contents
9126
	Paste_OS_Contents();
9127
 
9128
 
9129
 
9130
	-- Finnaly Clean old_id columns
9131
	Clean_Old_Id_Column();
9132
 
9133
 
9134
	EXCEPTION
9135
    WHEN DUP_VAL_ON_INDEX
9136
	THEN		
9137
		RAISE_APPLICATION_ERROR (-20000, 'Cannot Paste Duplicate Operating Systems.');	
9138
 
9139
END	Paste_Os;
9140
/*--------------------------------------------------------------------------------------------------*/
9141
PROCEDURE Paste_Node ( sNodeIdList IN VARCHAR2,
9142
					   nFromBomId IN OPERATING_SYSTEMS.NODE_ID%TYPE,
9143
					   nToBomId IN OPERATING_SYSTEMS.NODE_ID%TYPE ) IS
9144
 
9145
CURSOR curNodeName IS -- Check Node Name Duplicates			
9146
	SELECT nn.NODE_ID
9147
	  FROM (
9148
	  		SELECT UPPER( nn.NODE_NAME ) AS NODE_NAME
9149
		      FROM NETWORK_NODES nn
9150
		     WHERE nn.NODE_ID IN (
9151
		  							SELECT *
9152
		     						  FROM THE ( SELECT CAST( IN_LIST_NUMBER( sNodeIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual )
9153
		  					     )  
9154
	  	   ) nname,
9155
		   BOM_CONTENTS bc,
9156
	  	   NETWORK_NODES nn	
9157
	 WHERE bc.NODE_ID = nn.NODE_ID
9158
	   AND bc.BOM_ID = nToBomId
9159
	   AND UPPER( nn.NODE_NAME ) = UPPER( nname.NODE_NAME );
9160
recNodeName curNodeName%ROWTYPE;	   					 
9161
 
9162
BEGIN
9163
	/*--------------- Business Rules Here -------------------*/
9164
	OPEN curNodeName;
9165
    FETCH curNodeName INTO recNodeName;
9166
 
9167
    IF curNodeName%FOUND
9168
    THEN
9169
		RAISE_APPLICATION_ERROR (-20000, 'Cannot Paste Duplicate Network Nodes.'   );
9170
 
9171
	END IF;
9172
 
9173
	CLOSE curNodeName;
9174
	/*-------------------------------------------------------*/
9175
 
9176
	-- Copy Network Nodes
9177
	INSERT INTO NETWORK_NODES ( NODE_ID, NODE_TYPE_ID, NODE_NAME, NODE_COMMENTS, OLD_NODE_ID, NODE_VERSION, NODE_LIFE_CYCLE )
9178
	SELECT SEQ_NODE_ID.NEXTVAL AS NODE_ID, 
9179
		   nn.NODE_TYPE_ID, 
9180
		   nn.NODE_NAME, 
9181
		   nn.NODE_COMMENTS, 
9182
		   nn.NODE_ID AS OLD_NODE_ID,
9183
		   nn.NODE_VERSION, 
9184
		   nn.NODE_LIFE_CYCLE
9185
	  FROM NETWORK_NODES nn,
9186
	  	   BOM_CONTENTS bc
9187
	 WHERE bc.NODE_ID = nn.NODE_ID
9188
	   AND bc.BOM_ID = nFromBomId
9189
	   AND nn.NODE_ID IN (
9190
					   	  SELECT *
9191
				   	     	FROM THE ( SELECT CAST( IN_LIST_NUMBER( sNodeIdList ) AS DEPMGR_NUMBER_TAB_t ) FROM dual ) 
9192
   	   			   	     );
9193
 
9194
 
9195
	-- Relink Bom Contents
9196
	INSERT INTO BOM_CONTENTS ( BOM_ID, NODE_ID )
9197
	SELECT nToBomId,
9198
		   nn.NODE_ID
9199
	  FROM NETWORK_NODES nn
9200
	 WHERE NOT nn.OLD_NODE_ID IS NULL;
9201
 
9202
 
9203
    -- Copy OS
9204
	INSERT INTO OPERATING_SYSTEMS ( OS_ID, OS_NAME, NODE_ID, OS_COMMENTS, OLD_OS_ID ) 
9205
	SELECT SEQ_OS_ID.NEXTVAL AS OS_ID, 
9206
		   os.OS_NAME, 
9207
		   nn.NODE_ID, 
9208
		   os.OS_COMMENTS, 
9209
		   os.OS_ID AS OLD_OS_ID
9210
	  FROM OPERATING_SYSTEMS os,
9211
	  	   NETWORK_NODES nn
9212
	 WHERE os.NODE_ID = nn.OLD_NODE_ID;
9213
 
9214
 
9215
	-- Paste OS Contents
9216
	Paste_OS_Contents();
9217
 
9218
 
9219
 
9220
	-- Finnaly Clean old_id columns
9221
	Clean_Old_Id_Column();
9222
 
9223
 
9224
END	Paste_Node;
9225
/*--------------------------------------------------------------------------------------------------*/
9226
PROCEDURE Paste_OS_Contents IS
9227
 
9228
 
9229
BEGIN
9230
	/*--------------- Business Rules Here -------------------*/
9231
	/*-------------------------------------------------------*/
9232
 
9233
 
9234
	/* Base environment copy is a bit more complex when is copied from different bom. TODO */   
9235
	/* CODE HERE */
9236
 
9237
	-- Copy OS Contents
9238
	INSERT INTO OS_CONTENTS ( OS_ID, SEQ_NUM, PROD_ID, PRODUCT_COMMENTS, CHANGE_LOG_FLAG ) 	  
9239
	SELECT os.OS_ID AS OS_ID, 
9240
		   osc.SEQ_NUM, 
9241
		   osc.PROD_ID, 
9242
		   osc.PRODUCT_COMMENTS, 
9243
		   osc.CHANGE_LOG_FLAG
9244
	  FROM OS_CONTENTS osc,
9245
	  	   OPERATING_SYSTEMS os
9246
	 WHERE osc.OS_ID = os.OLD_OS_ID;
9247
 
9248
 
9249
    -- Copy Processes Config
9250
	INSERT INTO PROCESSES_CONFIG ( PROC_ID, PROD_ID, OS_ID, PKG_HEALTH_TAG, CMD_INTERFACE, PKG_ID ) 	  
9251
	SELECT pc.PROC_ID, 
9252
		   pc.PROD_ID, 
9253
		   os.OS_ID AS OS_ID, 
9254
		   pc.PKG_HEALTH_TAG, 
9255
		   pc.CMD_INTERFACE,
9256
		   pc.PKG_ID 
9257
	  FROM PROCESSES_CONFIG pc,
9258
	  	   OPERATING_SYSTEMS os
9259
	 WHERE pc.OS_ID = os.OLD_OS_ID;
9260
 
9261
 
9262
 
9263
END	Paste_OS_Contents;
9264
/*--------------------------------------------------------------------------------------------------*/
9265
PROCEDURE Clean_Old_Id_Column IS
9266
 
9267
 
9268
BEGIN
9269
	/*--------------- Business Rules Here -------------------*/
9270
	/*-------------------------------------------------------*/
9271
 
9272
	-- Clean all old_id columns
9273
	UPDATE BOMS SET OLD_BOM_ID = NULL;
9274
	UPDATE NETWORK_NODES SET OLD_NODE_ID = NULL;
9275
	UPDATE HARDWARE SET OLD_HARDWARE_NAME_ID = NULL;
9276
	UPDATE OPERATING_SYSTEMS SET OLD_OS_ID = NULL;
9277
	UPDATE BASE_ENV SET OLD_BASE_ENV_ID = NULL;
9278
 
9279
 
9280
 
9281
END	Clean_Old_Id_Column;
9282
/*--------------------------------------------------------------------------------------------------*/
9283
PROCEDURE Log_Rejection_Trail ( nEnumEntityType IN REJECTION_TRAIL.ENUM_ENTITY_TYPE%TYPE,
9284
								nEntityId IN REJECTION_TRAIL.ENTITY_ID%TYPE,
9285
								cIsRejected IN REJECTION_TRAIL.IS_REJECTED%TYPE,
9286
								nUserId IN REJECTION_TRAIL.USER_ID%TYPE,
9287
								sComments IN REJECTION_TRAIL.COMMENTS%TYPE DEFAULT NULL ) IS
9288
 
9289
nNextRejectSeq REJECTION_TRAIL.REJECT_SEQ%TYPE;
9290
 
9291
CURSOR curRejectTrail IS
9292
	SELECT MAX(rt.REJECT_SEQ) AS LAST_REJECT_SEQ
9293
	  FROM REJECTION_TRAIL rt
9294
	 WHERE rt.ENTITY_ID = nEntityId
9295
	   AND rt.ENUM_ENTITY_TYPE = nEnumEntityType;
9296
recRejectTrail curRejectTrail%ROWTYPE;
9297
 
9298
BEGIN
9299
	/*--------------- Business Rules Here -------------------*/
9300
	/*-------------------------------------------------------*/
9301
 
9302
	-- Get nNextRejectSeq
9303
	OPEN curRejectTrail;
9304
	FETCH curRejectTrail INTO recRejectTrail;
9305
 
9306
	nNextRejectSeq := 1;
9307
	IF recRejectTrail.LAST_REJECT_SEQ IS NOT NULL THEN
9308
	   nNextRejectSeq := recRejectTrail.LAST_REJECT_SEQ + 1;
9309
	END IF;
9310
 
9311
	CLOSE curRejectTrail;
9312
 
9313
 
9314
 
9315
	-- Insert Rejection Comment
9316
	INSERT INTO REJECTION_TRAIL ( ENUM_ENTITY_TYPE, ENTITY_ID, REJECT_SEQ, IS_REJECTED, COMMENTS, DATE_TIME_STAMP, USER_ID )
9317
	VALUES ( 
9318
		   nEnumEntityType,
9319
		   nEntityId,
9320
		   nNextRejectSeq,
9321
		   cIsRejected,
9322
		   sComments,
9323
		   GET_DATETIME(),
9324
		   nUserId
9325
		    );
9326
 
9327
END	Log_Rejection_Trail;
9328
/*--------------------------------------------------------------------------------------------------*/
9329
PROCEDURE Log_Action ( nUserId IN ACTION_TRAIL.USER_ID%TYPE, 
9330
					   nEvent IN ACTION_TRAIL.ACTION_EVENT%TYPE,
9331
					   sMethod IN ACTION_TRAIL.METHOD_CALL%TYPE DEFAULT NULL,
9332
					   sActionScript IN ACTION_TRAIL.ACTION_SCRIPT%TYPE DEFAULT NULL,
9333
					   sDescription IN ACTION_TRAIL.ACTION_DESCRIPTION%TYPE DEFAULT NULL ) IS
9334
 
9335
BEGIN
9336
	/*--------------- Business Rules Here -------------------*/
9337
	/*-------------------------------------------------------*/
9338
 
9339
	INSERT INTO ACTION_TRAIL ( ACTION_STAMP, USER_ID, ACTION_EVENT, METHOD_CALL, ACTION_SCRIPT, ACTION_DESCRIPTION )
9340
	VALUES (
9341
		    TO_DATE( TO_CHAR( SYSDATE,'DD-MON-YYYY HH24:MI:SS' ),'DD-MON-YYYY HH24:MI:SS' ),
9342
			nUserId,
9343
			nEvent,
9344
			sMethod,
9345
			sActionScript,
9346
			sDescription
9347
		   );
9348
 
9349
END	Log_Action;
9350
/*--------------------------------------------------------------------------------------------------*/
9351
 
9352
 
9353
END pk_Utils;
9354
 
9355
/
9356
 
9357
/
9358
--------------------------------------------------------
9359
--  DDL for Procedure ADD_PROCESS
9360
--------------------------------------------------------
9361
set define off;
9362
 
9363
  CREATE OR REPLACE PROCEDURE "ADD_PROCESS" (nProcId IN PROCESSES_CONFIG.PROC_ID%TYPE,
9364
	   	  		  						 sHealthTag IN PROCESSES_CONFIG.PKG_HEALTH_TAG%TYPE,
9365
	   	  		  						 nOsId IN PROCESSES_CONFIG.OS_ID%TYPE,
9366
										 sCmdInterface IN PROCESSES_CONFIG.CMD_INTERFACE%TYPE,
9367
										 sPkgOwner IN PROCESSES_CONFIG.PKG_OWNER%TYPE,
9368
										 sIsInterface IN PROCESSES_CONFIG.IS_INTERFACE%TYPE,
9369
										 nProdId IN PROCESSES_CONFIG.PROD_ID%TYPE,
9370
										 nUserId IN NUMBER) IS
9371
 
9372
 
9373
PkgName VARCHAR2(100);
9374
nPkgId	NUMBER;										 
9375
 
9376
 
9377
/*Rupesh Release 6/02/2006*/
9378
BEGIN
9379
 
9380
	 SELECT PKG.PKG_NAME, PKG.PKG_ID INTO PkgName, nPkgId
9381
	 FROM PACKAGE_VERSIONS PV, PACKAGES PKG
9382
	 WHERE PV.PV_ID = nProdId
9383
	 AND PKG.PKG_ID = PV.PKG_ID;
9384
 
9385
	 INSERT INTO PROCESSES_CONFIG (PROC_ID, PKG_HEALTH_TAG, OS_ID, CMD_INTERFACE, PKG_OWNER, IS_INTERFACE, PROD_ID, PKG_ID )
9386
	 VALUES (nProcId, sHealthTag, nOsId, sCmdInterface, sPkgOwner, sIsInterface, nProdId, nPkgId);
9387
 
9388
 
9389
 
9390
	-- Log Action --
9391
	pk_Bom.Log_Os_Trail ( nOsId,  
9392
						  'Added process with health tag '|| sHealthTag ||' for product '|| PkgName,
9393
						  nUserId );
9394
 
9395
 
9396
END ADD_PROCESS;
9397
 
9398
/
9399
 
9400
/
9401
--------------------------------------------------------
9402
--  DDL for Procedure LOG_ACTION
9403
--------------------------------------------------------
9404
set define off;
9405
 
9406
  CREATE OR REPLACE PROCEDURE "LOG_ACTION" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
9407
										 enumActionTypeName IN ACTION_TYPE.NAME%TYPE,
9408
                                         nUserId IN ACTION_LOG.USER_ID%TYPE,
9409
										 sAdditionalComments IN ACTION_LOG.DESCRIPTION%TYPE DEFAULT NULL  ) IS
9410
/* ---------------------------------------------------------------------------
9411
    Version: 3.0
9412
   --------------------------------------------------------------------------- */
9413
 
9414
    ActionTypeId NUMBER;
9415
 
9416
BEGIN
9417
 
9418
    -- Get Action Type FK
9419
    SELECT act.ACTTYPE_ID INTO ActionTypeId
9420
      FROM ACTION_TYPE act
9421
     WHERE act.NAME = enumActionTypeName;
9422
 
9423
 
9424
    INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
9425
    VALUES ( nUserId, ORA_SYSDATETIME, nPvId, sAdditionalComments, ActionTypeId );
9426
 
9427
 
9428
END Log_Action;
9429
 
9430
/
9431
 
9432
/
9433
--------------------------------------------------------
9434
--  DDL for Procedure NEW_UNIT_TEST
9435
--------------------------------------------------------
9436
set define off;
9437
 
9438
  CREATE OR REPLACE PROCEDURE "NEW_UNIT_TEST" ( nPv_id IN NUMBER,
9439
                                            nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,
9440
                                            sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,
9441
                                            sDpkg_path IN VARCHAR2,
9442
                                            sResults IN VARCHAR2,
9443
                                            sCompletion_date IN VARCHAR2,
9444
                                            nCompleted_by IN NUMBER,
9445
											enumTEST_TYPE_AUTOMATIC IN NUMBER,
9446
											enumTEST_TYPE_NOT_DONE IN NUMBER,
9447
											outFileName OUT VARCHAR2
9448
                                           ) IS
9449
/* ---------------------------------------------------------------------------
9450
    Version: 3.2.0
9451
   --------------------------------------------------------------------------- */
9452
 
9453
   	FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'DM_TEST';
9454
 
9455
    newID NUMBER;
9456
    ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;
9457
    ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;
9458
 
9459
BEGIN
9460
 
9461
	-- Get new ID --
9462
   	SELECT SEQ_UNIT_TESTS.NEXTVAL INTO newID FROM DUAL;
9463
 
9464
 
9465
       	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
9466
        	outFileName := sResults;
9467
    		ResultsAttachment := sDpkg_path || '/' || outFileName;
9468
        END IF;
9469
 
9470
 
9471
	-- Remove NOT_DONE entry if exists
9472
	DELETE FROM UNIT_TESTS
9473
	 WHERE pv_id = nPv_id
9474
	   AND test_types_fk = enumTEST_TYPE_NOT_DONE;
9475
 
9476
	--- Add Additional Note ---
9477
    INSERT INTO UNIT_TESTS ( TEST_ID,
9478
								PV_ID,
9479
								TEST_TYPES_FK,
9480
								TEST_SUMMARY,
9481
								COMPLETION_DATE,
9482
								COMPLETED_BY,
9483
								RESULTS_URL,
9484
								RESULTS_ATTACHMENT_NAME )
9485
    VALUES (
9486
       	newID,
9487
           nPv_id,
9488
           nTestTypeId,
9489
           sTest_summary,
9490
           SYSDATE(),
9491
           nCompleted_by,
9492
           ResultsURL,
9493
           ResultsAttachment );
9494
 
9495
END New_Unit_Test;
9496
 
9497
/
9498
 
9499
/
9500
--------------------------------------------------------
9501
--  DDL for Procedure SP_GET_TOC
9502
--------------------------------------------------------
9503
set define off;
9504
 
9505
  CREATE OR REPLACE PROCEDURE "SP_GET_TOC" (toc_Cursor IN OUT PK_BOM_RPT.TOC_Type,Test_Parameter IN varchar2)
9506
AS
9507
  LAST_PAGE INTEGER;
9508
  BEGIN
9509
       DELETE FROM TableOfContents;
9510
       COMMIT;
9511
       EXECUTE IMMEDIATE Test_Parameter;
9512
       SELECT cast(MAX(PAGE) as INTEGER) into LAST_PAGE FROM TableOfContents;
9513
       LAST_PAGE := LAST_PAGE + 2;
9514
       insert into tableofcontents
9515
       values
9516
       ('Base Configurations',LAST_PAGE,GET_DATE());
9517
       COMMIT;
9518
  	   OPEN toc_Cursor FOR
9519
	   	 SELECT * FROM TableOfContents;
9520
END sp_get_toc;
9521
 
9522
 
9523
/
9524
 
9525
/
9526
--------------------------------------------------------
9527
--  DDL for Procedure WRITE_PRODUCTION_HISTORY
9528
--------------------------------------------------------
9529
set define off;
9530
 
9531
  CREATE OR REPLACE PROCEDURE "WRITE_PRODUCTION_HISTORY" (nBomId IN NUMBER,
9532
	   	  		  									  sBomName IN VARCHAR2,
9533
													  sNodeName IN VARCHAR2,
9534
													  sComment IN VARCHAR2,
9535
													  nUserId IN NUMBER
9536
	   	  		  									  )IS
9537
 
9538
/******************************************************************************
9539
   NAME:       WRITE_PRODUCTION_HISTORY
9540
   PURPOSE:    
9541
 
9542
   REVISIONS:
9543
   Ver        Date        Author           Description
9544
   ---------  ----------  ---------------  ------------------------------------
9545
   1.0        6/07/2006          1. Created this procedure.
9546
 
9547
   NOTES:
9548
 
9549
   Automatically available Auto Replace Keywords:
9550
      Object Name:     WRITE_PRODUCTION_HISTORY
9551
      Sysdate:         6/07/2006
9552
      Date and Time:   6/07/2006, 11:52:11 AM, and 6/07/2006 11:52:11 AM
9553
      Username:         (set in TOAD Options, Procedure Editor)
9554
      Table Name:       (set in the "New PL/SQL Object" dialog)
9555
 
9556
******************************************************************************/
9557
BEGIN
9558
   INSERT INTO PRODUCTION_HISTORY (BOM_ID, BOM_NAME, NODE_NAME, COMMENTS, DATE_TIME_STAMP, USER_ID)
9559
   VALUES (nBomId, sBomName, sNodeName, sComment, GET_DATETIME(), nUserId);
9560
 
9561
 
9562
END WRITE_PRODUCTION_HISTORY;
9563
 
9564
/
9565
 
9566
/