DBA Data[Home] [Help]

PACKAGE BODY: APPS.PRODUCT_FAMILY_PKG

Source


1 PACKAGE BODY Product_Family_PKG AS
2 /* $Header: BOMPFAPB.pls 120.2 2005/06/21 03:32:41 appldev ship $ */
3 
4 
5 	PROCEDURE Update_PF_Item_Id(X_Inventory_Item_Id	NUMBER,
6 			  	    X_Organization_Id	NUMBER,
7 				    X_PF_Item_Id	NUMBER,
8 				    X_Trans_Type	VARCHAR2,
9 				    X_Error_Msg	    IN OUT NOCOPY VARCHAR2,
10 				    X_Error_Code    IN OUT NOCOPY NUMBER) IS
11 	BEGIN
12 
13 		UPDATE MTL_SYSTEM_ITEMS
14 		   SET Product_Family_Item_Id = X_PF_Item_Id
15 		 WHERE Inventory_Item_Id = X_Inventory_Item_Id
16 		   and Organization_id  = X_Organization_Id;
17 
18 		-- All exception handling is done by the trigger
19 		-- that is fired due to this Update and this
20 		-- Package let it pass thru without intervention.
21 
22 	END Update_PF_Item_Id;
23 
24 
25 
26 	/************** Procedure Delete_PF_Memeber *******************/
27 
28 	PROCEDURE Delete_PF_Member(X_Member_Item_Id	NUMBER,
29 				   X_Organization_Id	NUMBER,
30 				   X_Bill_Sequence_Id	NUMBER,
31 				   X_Error_Msg IN OUT NOCOPY VARCHAR2,
32 				   X_Error_Code IN OUT NOCOPY NUMBER) IS
33 	X_Err_Msg	VARCHAR2(2000);
34 	X_Err_Code	NUMBER;	-- These local variables are for the call made to the other func.
35 	BEGIN
36 
37 		DELETE FROM Bom_Inventory_Components
38 		 WHERE Component_Item_Id = X_Member_Item_Id
39 		   AND Bill_Sequence_Id  = X_Bill_Sequence_Id; -- This will delete all the records under
40 							       -- that Bill_Sequence_Id.
41 
42 		--Once the record has been deleted also NULL the Product_Family_Item_Id.
43 
44 		Update_PF_Item_Id(X_Inventory_Item_Id => X_Member_Item_Id,
45 				  X_Organization_Id   => X_Organization_Id,
46 				  X_PF_Item_Id	  => NULL,
47 				  X_Trans_Type	  => 'REMOVE',
48 				  X_Error_Msg	  => X_Err_Msg,
49 				  X_Error_Code	  => X_Err_Code);
50 
51 	END Delete_PF_Member;
52 
53 
54 
55 	/***************** Function Check_Overlap_Dates *********************/
56 
57 	FUNCTION Check_Overlap_Dates (X_Effectivity_Date DATE,
58 				      X_Disable_Date	 DATE,
59 				      X_Member_Item_Id	 NUMBER,
60 				      X_Bill_Sequence_Id NUMBER,
61 				      X_Rowid		 VARCHAR2) RETURN BOOLEAN IS
62 	X_Count	NUMBER := 0;
63 	CURSOR X_All_Dates IS
64 		SELECT 'X' date_available FROM sys.dual
65 		 WHERE EXISTS (
66 				SELECT 1 from BOM_Inventory_Components
67 				 WHERE Component_Item_Id = X_Member_Item_Id
68 				   AND Bill_Sequence_Id  = X_Bill_Sequence_Id
69 				   AND (( RowId		<> X_RowID ) or (X_RowId IS NULL))
70 				   AND ( X_Disable_Date IS NULL
71 					 OR ( Trunc(X_Disable_Date) >= Trunc(Effectivity_Date)
72 					    )
73 					)
74 				   AND ( Trunc(X_Effectivity_Date) <= Trunc(Disable_Date)
75 					 OR Disable_Date IS NULL
76 					)
77 			       );
78 	BEGIN
79 
80 		FOR X_Date IN X_All_Dates LOOP
81 			X_Count := X_Count + 1;
82 		END LOOP;
83 
84 		-- If count <> 0 that means the current date is overlapping with some record.
85 		IF X_Count <> 0 THEN
86 			RETURN TRUE;
87 		ELSE
88 			RETURN FALSE;
89 		END IF;
90 
91 	END Check_Overlap_Dates;
92 
93 	/*********************** Procedure Update_Config_Item **********************/
94 
95         PROCEDURE Update_Config_Item(X_PF_Item_Id       NUMBER,
96                                     X_Base_Item_Id     NUMBER,
97                                     X_Organization_Id  NUMBER,
98                                     X_Error_Msg   IN OUT NOCOPY  VARCHAR2,
99                                     X_Error_Code  IN OUT NOCOPY  NUMBER) IS
100 
101 
102 	CURSOR X_Config_Items IS
103 		SELECT config_item_id
104 		  FROM BOM_ATO_Configurations BAC
105 		 WHERE BAC.Base_Model_Id   = X_Base_Item_Id
106 		   AND BAC.Organization_Id = X_Organization_Id;
107 	X_TransType	Varchar2(15);
108 	X_Err_Msg	VarChar2(80);
109 	X_Err_Code	NUMBER;
110 
111 	BEGIN
112 		-- If the user selects or deselects a MODEL item as a PF Member then update the
113 		-- Product_Family_Item_Id with the value of PF_Item_id passed here, which can be
114 		-- an actuall value or a NULL. A Null indicates that the user has removed a
115 		-- memeber from PF which is of type MODEL.
116 
117 
118 		IF X_PF_Item_Id IS NULL THEN
119 
120 			X_TransType := 'REMOVE';
121 		ELSE
122 			X_TransType := 'ADD';
123 		END IF;
124 
125 		--First set the Product_Family_Item_Id for the Base Item itself.
126 
127                 Update_PF_Item_Id(X_Inventory_Item_Id => X_Base_Item_Id,
128                                   X_Organization_Id   => X_Organization_Id,
129                                   X_PF_Item_Id    => X_PF_Item_Id,
130                                   X_Trans_Type    => X_TransType,
131                                   X_Error_Msg     => X_Err_Msg,
132                                   X_Error_Code    => X_Err_Code);
133 
134 
135 		-- After that loop thru the cursor to Update all the Config Item
136 		FOR X_Config IN X_Config_Items LOOP
137 			Update_PF_Item_Id(X_Inventory_Item_Id => X_Config.Config_Item_Id,
138                                   	  X_Organization_Id   => X_Organization_Id,
139                                   	  X_PF_Item_Id    => X_PF_Item_Id,
140                                   	  X_Trans_Type    => X_TransType,
141                                   	  X_Error_Msg     => X_Err_Msg,
142                                   	  X_Error_Code    => X_Err_Code);
143 		END LOOP;
144 
145 	END Update_Config_Item;
146 
147 	PROCEDURE GetMemberInfo(p_Organization_id	IN 	NUMBER,
148 				p_Component_Item_Id	IN	NUMBER,
149 				x_Bom_Item_Type		IN OUT NOCOPY VARCHAR2,
150 				x_Forecast_Control	IN OUT NOCOPY VARCHAR2,
151 				x_Planning_Method	IN OUT NOCOPY VARCHAR2
152 				)
153 	 IS
154 	CURSOR X_MemberDetail IS
155 	  SELECT ML1.Meaning Bom_Item_Type,
156 		 ML2.Meaning Forecast_Control,
157 		 ML3.Meaning Planning_Method
158 	    FROM MTL_System_Items MSI,
159 		 MFG_Lookups ML1,
160 		 MFG_Lookups ML2,
161 		 MFG_Lookups ML3
162 	   WHERE MSI.Inventory_Item_Id = p_Component_Item_Id
163 	     AND MSI.Organization_Id   = p_Organization_Id
164 	     AND ML1.Lookup_Code(+)    = MSI.Bom_Item_Type
165 	     AND ML1.Lookup_Type(+)    = 'BOM_ITEM_TYPE'
166 	     AND ML2.Lookup_Code(+)    = MSI.ATO_Forecast_Control
167 	     AND ML2.Lookup_Type(+)    = 'MRP_ATO_FORECAST_CONTROL'
168 	     AND ML3.Lookup_Code(+)    = MSI.MRP_Planning_Code
169 	     AND ML3.Lookup_Type(+)    = 'MRP_PLANNING_CODE';
170 	BEGIN
171 		FOR X_Member IN X_MemberDetail LOOP
172 			x_Bom_Item_Type		:= X_Member.Bom_Item_Type;
173 			x_Forecast_Control	:= X_Member.Forecast_Control;
174 			x_Planning_Method	:= X_Member.Planning_Method;
175 		END LOOP;
176 	END GetMemberInfo;
177 
178 	FUNCTION Check_Unique(X_Assembly_Item_Id NUMBER,
179         		      X_Organization_Id  NUMBER) RETURN BOOLEAN
180 	IS
181    	dummy        NUMBER;
182 	BEGIN
183    		SELECT 1 INTO dummy FROM dual
184     		 WHERE not exists
185           		(SELECT 1 FROM bom_bill_of_materials
186             		  WHERE assembly_item_id = X_Assembly_item_id
187               		    AND organization_id = X_organization_id
188           		);
189 		RETURN TRUE;
190    EXCEPTION
191       WHEN no_data_found THEN
192 		RETURN FALSE;
193 END Check_Unique;
194 
195  END Product_Family_PKG;