DBA Data[Home] [Help]

PACKAGE BODY: APPS.AHL_RM_ASSO_DOCASO_PVT

Source


1 PACKAGE BODY AHL_RM_ASSO_DOCASO_PVT AS
2 /* $Header: AHLVRODB.pls 120.0 2005/05/26 02:01:22 appldev noship $ */
3 
4 G_PKG_NAME    VARCHAR2(30):= 'AHL_RM_ASSO_DOCASO_PVT';
5 G_DEBUG  VARCHAR2(1)   := NVL(AHL_DEBUG_PUB.is_log_enabled,'N');
6 
7  -- Populate doc table from RM table info.
8 PROCEDURE Populate_Doc_Tbl(
9 p_x_association_tbl	IN OUT NOCOPY	doc_association_tbl,
10 p_x_doc_assos_tbl	IN OUT NOCOPY 	AHL_DI_ASSO_DOC_GEN_PUB.association_tbl
11 )
12 IS
13 
14 BEGIN
15 
16     IF p_x_association_tbl.count >0 THEN
17       FOR i in p_x_association_tbl.FIRST .. p_x_association_tbl.LAST
18       LOOP
19 	  p_x_doc_assos_tbl(i).DOC_TITLE_ASSO_ID	:= p_x_association_tbl(i).DOC_TITLE_ASSO_ID;
20 	  p_x_doc_assos_tbl(i).DOCUMENT_ID		:= p_x_association_tbl(i).DOCUMENT_ID;
21 	  p_x_doc_assos_tbl(i).DOCUMENT_NO		:= p_x_association_tbl(i).DOCUMENT_NO;
22 	  p_x_doc_assos_tbl(i).DOC_REVISION_ID		:= p_x_association_tbl(i).DOC_REVISION_ID;
23 	  p_x_doc_assos_tbl(i).REVISION_NO		:= p_x_association_tbl(i).REVISION_NO;
24 	  p_x_doc_assos_tbl(i).USE_LATEST_REV_FLAG	:= p_x_association_tbl(i).USE_LATEST_REV_FLAG;
25 	  p_x_doc_assos_tbl(i).ASO_OBJECT_TYPE_CODE	:= p_x_association_tbl(i).OBJECT_TYPE_CODE;
26 	  p_x_doc_assos_tbl(i).ASO_OBJECT_DESC		:= p_x_association_tbl(i).OBJECT_TYPE_DESC;
27 	  p_x_doc_assos_tbl(i).ASO_OBJECT_ID		:= p_x_association_tbl(i).OBJECT_ID;
28 	  p_x_doc_assos_tbl(i).SERIAL_NO		:= p_x_association_tbl(i).SERIAL_NO;
29 	  p_x_doc_assos_tbl(i).SOURCE_LANG		:= p_x_association_tbl(i).SOURCE_LANG;
30 	  p_x_doc_assos_tbl(i).CHAPTER			:= p_x_association_tbl(i).CHAPTER;
31 	  p_x_doc_assos_tbl(i).SECTION			:= p_x_association_tbl(i).SECTION;
32 	  p_x_doc_assos_tbl(i).SUBJECT			:= p_x_association_tbl(i).SUBJECT;
33 	  p_x_doc_assos_tbl(i).PAGE			:= p_x_association_tbl(i).PAGE;
34 	  p_x_doc_assos_tbl(i).FIGURE			:= p_x_association_tbl(i).FIGURE;
35 	  p_x_doc_assos_tbl(i).NOTE			:= p_x_association_tbl(i).NOTE;
36 	  p_x_doc_assos_tbl(i).SOURCE_REF_CODE		:= p_x_association_tbl(i).SOURCE_REF_CODE;
37 	  p_x_doc_assos_tbl(i).SOURCE_REF_MEAN		:= p_x_association_tbl(i).SOURCE_REF_MEAN;
38 	  p_x_doc_assos_tbl(i).OBJECT_VERSION_NUMBER	:= p_x_association_tbl(i).OBJECT_VERSION_NUMBER;
39 	  p_x_doc_assos_tbl(i).ATTRIBUTE_CATEGORY	:= p_x_association_tbl(i).ATTRIBUTE_CATEGORY;
40 	  p_x_doc_assos_tbl(i).ATTRIBUTE1		:= p_x_association_tbl(i).ATTRIBUTE1;
41 	  p_x_doc_assos_tbl(i).ATTRIBUTE2		:= p_x_association_tbl(i).ATTRIBUTE2;
42 	  p_x_doc_assos_tbl(i).ATTRIBUTE3		:= p_x_association_tbl(i).ATTRIBUTE3;
43 	  p_x_doc_assos_tbl(i).ATTRIBUTE4		:= p_x_association_tbl(i).ATTRIBUTE4;
44 	  p_x_doc_assos_tbl(i).ATTRIBUTE5		:= p_x_association_tbl(i).ATTRIBUTE5;
45 	  p_x_doc_assos_tbl(i).ATTRIBUTE6		:= p_x_association_tbl(i).ATTRIBUTE6;
46 	  p_x_doc_assos_tbl(i).ATTRIBUTE7		:= p_x_association_tbl(i).ATTRIBUTE7;
47 	  p_x_doc_assos_tbl(i).ATTRIBUTE8		:= p_x_association_tbl(i).ATTRIBUTE8;
48 	  p_x_doc_assos_tbl(i).ATTRIBUTE9		:= p_x_association_tbl(i).ATTRIBUTE9;
49 	  p_x_doc_assos_tbl(i).ATTRIBUTE10		:= p_x_association_tbl(i).ATTRIBUTE10;
50 	  p_x_doc_assos_tbl(i).ATTRIBUTE11		:= p_x_association_tbl(i).ATTRIBUTE11;
51 	  p_x_doc_assos_tbl(i).ATTRIBUTE12		:= p_x_association_tbl(i).ATTRIBUTE12;
52 	  p_x_doc_assos_tbl(i).ATTRIBUTE13		:= p_x_association_tbl(i).ATTRIBUTE13;
53 	  p_x_doc_assos_tbl(i).ATTRIBUTE14		:= p_x_association_tbl(i).ATTRIBUTE14;
54 	  p_x_doc_assos_tbl(i).ATTRIBUTE15		:= p_x_association_tbl(i).ATTRIBUTE15;
55 	  p_x_doc_assos_tbl(i).DML_OPERATION		:= p_x_association_tbl(i).DML_OPERATION;
56       END LOOP;
57    END IF;
58 
59 END Populate_Doc_Tbl;
60 
61 
62 PROCEDURE PROCESS_ASSOCIATION
63 (
64  p_api_version                  IN  		NUMBER    := 1.0,
65  p_init_msg_list                IN  		VARCHAR2  := FND_API.G_TRUE,
66  p_commit                       IN  		VARCHAR2  := FND_API.G_FALSE,
67  p_validation_level             IN  		NUMBER    := FND_API.G_VALID_LEVEL_FULL,
68  p_validate_only            	IN  		VARCHAR2  := FND_API.G_TRUE,
69  p_default                      IN  		VARCHAR2  := FND_API.G_FALSE,
70  p_module_type                  IN  		VARCHAR2,
71  x_return_status                OUT 		NOCOPY VARCHAR2,
72  x_msg_count                    OUT 		NOCOPY NUMBER,
73  x_msg_data                     OUT 		NOCOPY VARCHAR2,
74  p_x_association_tbl            IN  OUT NOCOPY  doc_association_tbl
75  )
76 
77 IS
78 
79 cursor get_route_status (p_route_id in number)
80 is
81 select revision_status_code
82 from ahl_routes_app_v
83 where route_id = p_route_id;
84 
85 l_obj_status 			VARCHAR2(30);
86 
87 cursor get_oper_status (p_operation_id in number)
88 is
89 select revision_status_code
90 from ahl_operations_b
91 where operation_id = p_operation_id;
92 
93 l_api_name                  VARCHAR2(30)   := 'process_association';
94 l_api_version               NUMBER         := 1.0;
95 l_return_status             VARCHAR2(1);
96 l_msg_count                 NUMBER	       := NULL;
97 l_msg_data			VARCHAR2(2000);
98 l_x_operation_rec           AHL_RM_OPERATION_PVT.operation_rec_type ;
99 l_x_route_rec               AHL_RM_ROUTE_PVT.route_rec_type ;
100 l_x_doc_assos_tbl           AHL_DI_ASSO_DOC_GEN_PUB.association_tbl;
101 BEGIN
102 
103 
104 	-- Standard call to check for call compatibility.
105 	IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version,
106 				       p_api_version,
107 				       l_api_name,G_PKG_NAME)
108 	THEN
109 	      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
110 	END IF;
111 
112 	-- Standard Start of API savepoint
113 	SAVEPOINT process_association;
114 
115 	-- Check if API is called in debug mode. If yes, enable debug.
116 
117 	IF G_DEBUG='Y' THEN
118 	AHL_DEBUG_PUB.enable_debug;
119 	END IF;
120 
121 	-- Debug info.
122 
123 	IF G_DEBUG='Y' THEN
124 	AHL_DEBUG_PUB.debug( 'enter ahl_rm_asso_doc_aso_pub.Process Association');
125 	END IF;
126 
127 	-- Initialize message list if p_init_msg_list is set to TRUE.
128 	IF FND_API.to_boolean(p_init_msg_list)
129 	THEN
130 		FND_MSG_PUB.initialize;
131 	END IF;
132 
133 	--  Initialize API return status to success
134 
135 	x_return_status:=FND_API.G_RET_STS_SUCCESS ;
136 
137         IF p_x_association_tbl.count >0 THEN
138          FOR i in p_x_association_tbl.FIRST .. p_x_association_tbl.LAST
139          LOOP
140           AHL_RM_ROUTE_UTIL.validate_lookup(
141 		x_return_status 	=>	x_return_status,
142 		x_msg_data		=>	x_msg_data,
143 		p_lookup_type		=>	'AHL_OBJECT_TYPE',
144 		p_lookup_meaning	=>	p_x_association_tbl(i).object_type_desc,
145 		p_x_lookup_code		=>	p_x_association_tbl(i).object_type_code
146 	   );
147 	  IF x_return_status = FND_API.G_RET_STS_ERROR THEN
148 	     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
149 		 fnd_log.string
150 		 (
151 		     fnd_log.level_statement,
152 		    'ahl.plsql.'||g_pkg_name||'.'||l_api_name||':',
153 		     'Error -- Invalid lookup specified'
154 		 );
155 	     END IF;
156 	     RAISE FND_API.G_EXC_ERROR;
157 	  END IF;
158 
159 	  -- If Id is null derive object id from object Number and revision
160 	  -- This will fail if no record are passed to this API or if records with different association types are passed. This needs to be fixed sooner or later. - Balaji
161 	  IF p_x_association_tbl(i).object_id IS NULL THEN
162 		IF p_x_association_tbl(i).object_type_code = 'ROUTE' THEN
163 		  -- Function to convert Operation number, operation revision to id
164 		  AHL_RM_ROUTE_UTIL.Route_Number_To_Id
165 		  (
166 		   p_route_number		=>	p_x_association_tbl(i).object_number,
167 		   p_route_revision		=>	p_x_association_tbl(i).object_revision,
168 		   x_route_id			=>	p_x_association_tbl(i).object_id,
169 		   x_return_status		=>	x_return_status
170 		  );
171 		ELSIF p_x_association_tbl(i).object_type_code = 'OPERATION' THEN
172 		  -- Function to convert Operation number, operation revision to id
173 		  AHL_RM_ROUTE_UTIL.Operation_Number_To_Id
174 		  (
175 		   p_operation_number		=>	p_x_association_tbl(i).object_number,
176 		   p_operation_revision		=>	p_x_association_tbl(i).object_revision,
177 		   x_operation_id		=>	p_x_association_tbl(i).object_id,
178 		   x_return_status		=>	x_return_status
179 		  );
180 		END IF;
181 		IF x_return_status = FND_API.G_RET_STS_ERROR THEN
182 		     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
183 			 fnd_log.string
184 			 (
185 			     fnd_log.level_statement,
186 			    'ahl.plsql.'||g_pkg_name||'.'||l_api_name||':',
187 			     'Error in converting Object Number, Object Revision to ID'
188 			 );
189 		     END IF;
190 		     RAISE FND_API.G_EXC_ERROR;
191 		END IF;
192 	   END IF;
193 	  END LOOP;
194 	END IF;
195 
196 	--l_x_association_tbl  := p_x_association_tbl  ;
197 
198 	--This is to be added before calling   AHL_DI_ASSO_DOC_GEN_PUB.PROCESS_ASSOCIATION ()
199 	-- Validate Application Usage
200 	IF (p_x_association_tbl(1).object_type_code = 'ROUTE')
201 	THEN
202 	  AHL_RM_ROUTE_UTIL.validate_ApplnUsage
203 	  (
204 	     p_object_id              => p_x_association_tbl(1).OBJECT_ID,
205 	     p_association_type       => p_x_association_tbl(1).OBJECT_TYPE_CODE,
206 	     x_return_status          => x_return_status,
207 	     x_msg_data               => x_msg_data
208 	  );
209 
210 	-- If any severe error occurs, then, abort API.
211 	  IF x_return_status = FND_API.G_RET_STS_ERROR THEN
212 	    RAISE FND_API.G_EXC_ERROR;
213 	  ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
214 	    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
215 	  END IF;
216 	END IF;
217 
218 	-- Populate doc table from RM table info. procedure added in 11.5.10
219 	populate_doc_tbl(
220 	p_x_association_tbl	=> p_x_association_tbl,
221 	p_x_doc_assos_tbl	=> l_x_doc_assos_tbl
222 	);
223 
224 
225 	 AHL_DEBUG_PUB.debug( 'before call on AHL_DI_ASSO_DOC_GEN_PUB.PROCESS_ASSOCIATION');
226 
227 	AHL_DI_ASSO_DOC_GEN_PUB.PROCESS_ASSOCIATION
228 	(
229 	 p_api_version               => p_api_version ,
230 	 p_init_msg_list             => p_init_msg_list ,
231 	 p_commit                    => FND_API.G_FALSE ,
232 	 p_validation_level          => p_validation_level ,
233 	 p_validate_only             => p_validate_only ,
234 	 p_module_type               => p_module_type ,
235 	 x_return_status             => x_return_status ,
236 	 x_msg_count                 => x_msg_count ,
237 	 x_msg_data                  => x_msg_data ,
238 	 p_x_association_tbl         => l_x_doc_assos_tbl
239 	) ;
240 
241 	l_msg_count := FND_MSG_PUB.count_msg;
242 
243 	IF l_msg_count > 0 THEN
244 	   X_msg_count := l_msg_count;
245 	   X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
246 	   RAISE FND_API.G_EXC_ERROR;
247 	END IF;
248 
249 	-- call is success so copy the DOC_TITLE_ASSO_ID and Object_version_number back into RM record structure. Balaji added in 11510+ as a part of code cleanup.
250 	FOR i IN l_x_doc_assos_tbl.FIRST..l_x_doc_assos_tbl.LAST
251 	LOOP
252 		p_x_association_tbl(i).DOC_TITLE_ASSO_ID := l_x_doc_assos_tbl(i).DOC_TITLE_ASSO_ID;
253 		p_x_association_tbl(i).OBJECT_VERSION_NUMBER := l_x_doc_assos_tbl(i).OBJECT_VERSION_NUMBER;
254 	END LOOP;
255 
256 	IF G_DEBUG='Y' THEN
257 	    AHL_DEBUG_PUB.debug( 'AHL_DI_ASSO_DOC_GEN_PUB.PROCESS_ASSOCIATION is called');
258 	    AHL_DEBUG_PUB.debug( 'PRITHWI the aso object type code is '||  p_x_association_tbl(1).object_type_code );
259 	END IF;
260 
261 	IF ( p_x_association_tbl(1).object_type_code = 'OPERATION')
262 	THEN
263 		  IF G_DEBUG='Y' THEN
264 			AHL_DEBUG_PUB.debug( 'aso_object_type_code = OPERATION');
265 		  END IF;
266 
267 		-- Check if the Route is existing and in Draft status
268 		AHL_RM_ROUTE_UTIL.validate_operation_status
269 		(
270 			p_x_association_tbl(1).OBJECT_ID,
271 			l_msg_data,
272 			l_return_status
273 		);
274 
275 		IF l_return_status = FND_API.G_RET_STS_ERROR THEN
276 			FND_MESSAGE.SET_NAME('AHL',l_msg_data);
277 			FND_MSG_PUB.ADD;
278 			x_return_status := l_return_status;
279 			RETURN;
280 		END IF;
281 
282 		-- Update route status from APPROVAL_REJECTED to DRAFT
283 		OPEN get_oper_status (p_x_association_tbl(1).OBJECT_ID);
284 		FETCH get_oper_status INTO l_obj_status;
285 		IF (get_oper_status%FOUND AND l_obj_status = 'APPROVAL_REJECTED')
286 		THEN
287 			UPDATE ahl_operations_b
288 			SET revision_status_code = 'DRAFT'
289 			WHERE operation_id = p_x_association_tbl(1).OBJECT_ID;
290 		END IF;
291 		CLOSE get_oper_status;
292 
293 
294 	ELSIF ( p_x_association_tbl(1).object_type_code = 'ROUTE')
295 	THEN
296 		IF G_DEBUG='Y' THEN
297 			AHL_DEBUG_PUB.debug( 'aso_object_type_code = ROUTE');
298 		END IF;
299 
300 		-- Check if the Route is existing and in Draft status
301 		AHL_RM_ROUTE_UTIL.validate_route_status
302 		(
303 			p_x_association_tbl(1).OBJECT_ID,
304 			l_msg_data,
305 			l_return_status
306 		);
307 
308 		IF l_return_status = FND_API.G_RET_STS_ERROR THEN
309 			FND_MESSAGE.SET_NAME('AHL',l_msg_data);
310 			FND_MSG_PUB.ADD;
311 			x_return_status := l_return_status;
312 			RETURN;
313 		END IF;
314 
315 		-- Update route status from APPROVAL_REJECTED to DRAFT
316   		OPEN get_route_status (p_x_association_tbl(1).OBJECT_ID);
317 		FETCH get_route_status INTO l_obj_status;
318 		IF (get_route_status%FOUND AND l_obj_status = 'APPROVAL_REJECTED')
319 		THEN
320 			UPDATE ahl_routes_b
321 			SET revision_status_code = 'DRAFT'
322 			WHERE route_id = p_x_association_tbl(1).OBJECT_ID;
323 		END IF;
324 		CLOSE get_route_status;
325 
326 	END IF ;
327 
328 	l_msg_count := FND_MSG_PUB.count_msg;
329 
330 	IF l_msg_count > 0 THEN
331 	   X_msg_count := l_msg_count;
332 	   X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
333 	   RAISE FND_API.G_EXC_ERROR;
334 	END IF;
335 
336 	 IF FND_API.TO_BOOLEAN(p_commit) THEN
337 	    COMMIT;
338 	 END IF;
339 
340 	-- Check if API is called in debug mode. If yes, disable debug.
341 
342 	IF G_DEBUG='Y' THEN
343 		  AHL_DEBUG_PUB.disable_debug;
344 	END IF;
345 
346 	EXCEPTION
347 	 WHEN FND_API.G_EXC_ERROR THEN
348 	    ROLLBACK TO process_association;
349 	    x_return_status := FND_API.G_RET_STS_ERROR;
350 	    FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
351 				       p_count => x_msg_count,
352 				       p_data  => X_msg_data);
353 		-- Debug info.
354 		IF G_DEBUG='Y' THEN
355 			  AHL_DEBUG_PUB.log_app_messages (x_msg_count, x_msg_data, 'UNEXPECTED ERROR' );
356 			  AHL_DEBUG_PUB.debug( 'ahl_rm_asso_doc_aso_pub.Process Association');
357 			  AHL_DEBUG_PUB.disable_debug;
358 		END IF;
359 
360 	 WHEN OTHERS THEN
361 	    ROLLBACK TO process_association;
362 	    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
363 	    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
364 	    THEN
365 	    fnd_msg_pub.add_exc_msg(p_pkg_name        =>G_PKG_NAME ,
366 				    p_procedure_name  => 'PROCESS_ASSOCIATION',
367 				    p_error_text      => SUBSTR(SQLERRM,1,240));
368 	    END IF;
369 	    FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
370 				       p_count => x_msg_count,
371 				       p_data  => X_msg_data);
372 
373 
374 
375 END process_association;
376 
377 END AHL_RM_ASSO_DOCASO_PVT;