DBA Data[Home] [Help]

PACKAGE BODY: APPS.CS_SERVICEREQUEST_UTIL

Source


1 PACKAGE BODY CS_ServiceRequest_UTIL AS
2 /* $Header: csusrb.pls 120.30 2008/01/09 11:58:04 nveerara ship $ */
3 
4 G_ACTION_SUBTYPE CONSTANT VARCHAR2(5) := 'ACT';
5 G_PKG_NAME          CONSTANT VARCHAR2(30) := 'CS_ServiceRequest_UTIL';
6 G_TABLE_NAME        CONSTANT VARCHAR2(40) := 'CS_INCIDENTS_ALL_B';
7 G_TL_TABLE_NAME     CONSTANT VARCHAR2(40) := 'CS_INCIDENTS_ALL_TL';
8 
9 -- -----------------------------------------------------------------------------
10 -- Procedure Name : get_org_details
11 -- Parameter      :
12 -- IN             : p_org_id             This is a foreign key to table
13 --                                       mtl_paramters
14 -- OUT            : x_maint_org          Maintenance organization associated
15 --                                       with p_org_id
16 --                : x_eam_enabled_flag   Eam Enabled flag for paramter p_org_id
17 --                : x_return_status      Indicates success or error condition
18 --                                       encountered by the procedure
19 -- Description    : This procedure checks whether party role code exist in
20 --                  party role table and is active on system date or not.
21 -- Modification History
22 -- Date     Name     Description
23 ---------- -------- ------------------------------------------------------------
24 -- 04/21/05 smisra   Created
25 -- 08/29/05 smisra   Used NVL in select statement
26 -- -----------------------------------------------------------------------------
27 PROCEDURE get_org_details
28 ( p_org_id           IN         NUMBER
29 , x_eam_enabled_flag OUT NOCOPY VARCHAR2
30 , x_maint_org_id     OUT NOCOPY NUMBER
31 , x_master_org_id    OUT NOCOPY NUMBER
32 , x_return_Status    OUT NOCOPY VARCHAR2
33 ) IS
34 CURSOR c_org_info IS
35   SELECT
36     NVL(maint_organization_id,-1)
37   , NVL(master_organization_id,-1)
38   , NVL(eam_enabled_flag,'X')
39   FROM mtl_parameters
40   WHERE organization_id = p_org_id;
41 BEGIN
42   OPEN  c_org_info;
43   FETCH c_org_info INTO x_maint_org_id, x_master_org_id, x_eam_enabled_flag;
44   IF c_org_info % NOTFOUND
45   THEN
46     x_return_status := FND_API.G_RET_STS_ERROR;
47   ELSE
48     x_return_status := FND_API.G_RET_STS_SUCCESS;
49   END IF;
50   CLOSE c_org_info;
51 --
52 EXCEPTION
53   WHEN OTHERS THEN
54     FND_MESSAGE.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
55     FND_MESSAGE.set_token('P_TEXT','CS_SERVICEREQUEST_UTIL.get_org_details'||'-'||SQLERRM);
56     FND_MSG_PUB.ADD;
57     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
58 END get_org_details;
59 -- -----------------------------------------------------------------------------
60 -- Procedure Name : get_status_details
61 -- Parameter      :
62 -- IN             : p_status_id             This foreign key to
63 --                                          cs_incident_statuses_b
64 -- OUT            : x_close_flag
65 --                : x_disallow_request_update    Any SR attribute except statrus
66 --                                               can not be updated.
67 --                : x_disallow_agent_dispatch    owner update not allowed
68 --                : x_disallow_product_update    product update not allowed
69 --                : x_pending_approval_flag      Indicates if a status id is
70 --                                               used as intermediate status
71 --                                               in ERES process
72 --                : x_intermediated_status_id    Intermediate status to be
73 --                                               used before ERES action
74 --                : x_approval_action_status_id  Status to be used for
75 --                                               ERES approval
76 --                : x_rejection_action_status_id Status to be used for
77 --                                               ERES rejection
78 --                : x_return_stauts         indicates if validation failed or
79 --                                          succeeded
80 -- Description    : This procedure accesses incident status table and get all
81 --                  attributes associated with incident status.
82 -- Modification History
83 -- Date     Name     Description
84 -- -------- -------- -----------------------------------------------------------
85 -- 06/20/05 smisra   Created
86 -- -----------------------------------------------------------------------------
87 PROCEDURE get_status_details
88 ( p_status_id                  IN         NUMBER
89 , x_close_flag                 OUT NOCOPY VARCHAR2
90 , x_disallow_request_update    OUT NOCOPY VARCHAR2
91 , x_disallow_agent_dispatch    OUT NOCOPY VARCHAR2
92 , x_disallow_product_update    OUT NOCOPY VARCHAR2
93 , x_pending_approval_flag      OUT NOCOPY VARCHAR2
94 , x_intermediate_status_id     OUT NOCOPY VARCHAR2
95 , x_approval_action_status_id  OUT NOCOPY VARCHAR2
96 , x_rejection_action_status_id OUT NOCOPY VARCHAR2
97 , x_return_status              OUT NOCOPY VARCHAR2
98 ) IS
99 l_dt DATE;
100 BEGIN
101   x_return_status := FND_API.G_RET_STS_SUCCESS;
102   l_dt := trunc(sysdate);
103   SELECT
104     NVL(close_flag             ,'N')
105   , NVL(disallow_request_update,'N')
106   , NVL(disallow_agent_dispatch,'N')
107   , NVL(disallow_product_update,'N')
108   , NVL(pending_approval_flag  ,'N')
109   , intermediate_status_id
110   , approval_action_status_id
111   , rejection_action_status_id
112   INTO
113     x_close_flag
114   , x_disallow_request_update
115   , x_disallow_agent_dispatch
116   , x_disallow_product_update
117   , x_pending_approval_flag
118   , x_intermediate_status_id
119   , x_approval_action_status_id
120   , x_rejection_action_status_id
121   FROM
122     cs_incident_statuses_b
123   WHERE incident_status_id = p_status_id
124   --  AND trunc(sysdate) BETWEEN NVL(start_date_active,l_dt)
125   --                         AND NVL(end_date_active  ,l_dt)
126   ;
127 EXCEPTION
128   WHEN NO_DATA_FOUND THEN
129     x_return_status := FND_API.G_RET_STS_ERROR;
130   WHEN OTHERS THEN
131     FND_MESSAGE.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
132     FND_MESSAGE.set_token ('P_TEXT','CS_SERVICEREQUEST_UTIL.get_status_details'||'-'||SQLERRM);
133     FND_MSG_PUB.ADD;
134     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
135 END get_status_details;
136 -- -----------------------------------------------------------------------------
137 -- Procedure Name : get_customer_product_details
138 -- Parameter      :
139 -- IN             : p_customer_product_id   This foreign key to
140 --                                          csi_item_instances table.
141 -- OUT            :
142 --                : x_party_source_table    Party source table.
143 --                : x_party_id              customer product customer Id
144 --                : x_inv_master_org_id     inventory master org
145 --                : x_inv_item_id           Inventory item associated with
146 --                                          customer product
147 --                : x_maint_org_id          last validation org
148 --                : x_external_reference    external reference for CP
149 --                : x_serial_number         CP serail number
150 --                : x_start_dt_active       Customer product Active from
151 --                : x_end_dt_active         Customer product Active up to
152 --                : x_loc_type              Customer product location type.
153 --                : x_return_stauts         indicates if validation failed or
154 --                                          succeeded
155 -- Description    : This procedure accesses customer product table and get
156 --                  customer product details that a used by customer product
157 --                  validation procedure
158 --                  This procedure can be used by current serial number and
159 --                  external reference validations too.
160 -- Modification History
161 -- Date     Name     Description
162 -- -------- -------- -----------------------------------------------------------
163 -- 05/10/05 smisra   Created
164 -- -----------------------------------------------------------------------------
165 PROCEDURE get_customer_product_details
166 ( p_customer_product_id   IN         NUMBER
167 , x_party_source_table    OUT NOCOPY VARCHAR2
168 , x_party_id              OUT NOCOPY NUMBER
169 , x_inv_master_org_id     OUT NOCOPY NUMBER
170 , x_inv_item_id           OUT NOCOPY NUMBER
171 , x_maint_org_id          OUT NOCOPY NUMBER
172 , x_external_reference    OUT NOCOPY VARCHAR2
173 , x_serial_number         OUT NOCOPY VARCHAR2
174 , x_start_dt_active       OUT NOCOPY DATE
175 , x_end_dt_active         OUT NOCOPY DATE
176 , x_loc_type              OUT NOCOPY VARCHAR2
177 , x_return_status         OUT NOCOPY VARCHAR2
178 ) IS
179 
180 CURSOR  c_cp IS
181 SELECT
182   owner_party_source_table
183 , owner_party_id
184 , inv_master_organization_id
185 , inventory_item_id
186 , last_vld_organization_id
187 , active_start_date
188 , active_end_date
189 , location_type_code
190 , external_reference
191 , serial_number
192 FROM
193   csi_item_instances
194 WHERE instance_id = p_customer_product_id;
195 --
196 BEGIN
197   OPEN c_cp;
198   FETCH c_cp
199   INTO
200     x_party_source_table
201   , x_party_id
202   , x_inv_master_org_id
203   , x_inv_item_id
204   , x_maint_org_id
205   , x_start_dt_active
206   , x_end_dt_active
207   , x_loc_type
208   , x_external_reference
209   , x_serial_number
210   ;
211   IF c_cp%NOTFOUND
212   THEN
213     x_return_status := FND_API.G_RET_STS_ERROR;
214   ELSE
215     x_return_status := FND_API.G_RET_STS_SUCCESS;
216   END IF;
217   CLOSE c_cp;
218 END;
219 -- -----------------------------------------------------------------------------
220 -- Procedure Name : get_item_details
221 -- Parameter      :
222 -- IN             : p_inv_item_id           inventory item. This paramter and
223 --                                          p_inventory_org id is a key to
224 --                                          mtl_system_items_b table.
225 --                : p_inventory__org_id     inventory organization
226 -- OUT            : x_enable_flag           indicates if item is enabled
227 --                : x_serv_req_enabled      indicates if inv item can be used
228 --                                          in a service request.
229 --                : x_eam_item_type         indicatea if inv item is an asset
230 --                : x_start_date_active     Inventory item Active from
231 --                : x_end_date_active       Inventory item Active up to
232 --                : x_return_stauts         indicates if validation failed or
233 --                                          succeeded
234 -- Description    : This procedure accesses item master table and gets inventory
235 --                  item details that are used for further validations.
236 -- Modification History
237 -- Date     Name     Description
238 -- -------- -------- -----------------------------------------------------------
239 -- 05/05/05 smisra   Created
240 -- 08/29/05 smisra   Used NVL in select statement
241 -- -----------------------------------------------------------------------------
242 PROCEDURE get_item_details
243 ( p_inventory_org_id             NUMBER
244 , p_inv_item_id                  NUMBER
245 , x_enabled_flag      OUT NOCOPY VARCHAR2
246 , x_serv_req_enabled  OUT NOCOPY VARCHAR2
247 , x_eam_item_type     OUT NOCOPY NUMBER
248 , x_start_date_active OUT NOCOPY DATE
249 , x_end_date_active   OUT NOCOPY DATE
250 , x_return_status     OUT NOCOPY VARCHAR2
251 ) IS
252 BEGIN
253   SELECT
254     NVL(enabled_flag,'N')
255   , NVL(serv_req_enabled_code,'N')
256   , NVL(eam_item_type,-1)
257   , start_date_active
258   , end_date_active
259   INTO
260     x_enabled_flag
261   , x_serv_req_enabled
262   , x_eam_item_type
263   , x_start_date_active
264   , x_end_date_active
265   FROM
266     mtl_system_items
267   WHERE organization_id = p_inventory_org_id
268     AND inventory_item_id = p_inv_item_id;
269   x_return_status := FND_API.G_RET_STS_SUCCESS;
270 EXCEPTION
271   WHEN NO_DATA_FOUND THEN
272     x_return_status := FND_API.G_RET_STS_ERROR;
273   WHEN OTHERS THEN
274     x_return_status := FND_API.G_RET_STS_ERROR;
275 END;
276 -- -----------------------------------------------------------------------------
277 -- Function  Name : get_unassigned_indicator
278 -- Parameter      :
279 -- IN             : p_incident_owner_id  NUMBER
280 --                : p_owner_group_id     NUMBER
281 -- Description    : This function return unassinged indicator based on owner and
282 --                  group values
283 -- Modification History
284 -- Date     Name     Description
285 -- -------- -------- -----------------------------------------------------------
286 -- 03/25/05 smisra   Created
287 -- -----------------------------------------------------------------------------
288 FUNCTION get_unassigned_indicator
289 (p_incident_owner_id IN NUMBER
290 ,p_owner_group_id    IN NUMBER) RETURN NUMBER
291 IS
292 BEGIN
293   if (p_incident_owner_id IS NOT NULL AND
294       p_owner_group_id    IS NOT NULL )
295   THEN
296     RETURN 3;
297   ELSIF (p_incident_owner_id IS     NULL AND
298          p_owner_group_id    IS NOT NULL )
299   THEN
300     RETURN 2;
301   ELSIF (p_incident_owner_id IS NOT NULL AND
302          p_owner_group_id    IS     NULL )
303   THEN
304     RETURN 1;
305   ELSE
306     RETURN 0;
307   END IF;
308 END get_unassigned_indicator;
309 --
310 -- The following function are local function. Introduced in 11.5.10
311 -- Function to derive the correct values to be passed to the cross validation
312 -- APIs. ie. if the new values is passed, then use the new value, else use
313 -- the old value. (since decode cannot be used out of a select stmnt. this
314 -- approach was considered.
315 --
316 -- The function is overloaded to handle the 3 data types, number, varchar2
317 -- and date
318 FUNCTION GET_RIGHT_NUM (
319    p_new_num_value       IN   NUMBER,
320    p_old_num_value       IN   NUMBER )
321 RETURN NUMBER
322 IS
323 BEGIN
324    if ( p_new_num_value = FND_API.G_MISS_NUM ) then
325       return p_old_num_value;
326    else
327       return p_new_num_value;
328    end if;
329 
330 END  GET_RIGHT_NUM;
331 
332 FUNCTION GET_RIGHT_CHAR (
333    p_new_char_value       IN   VARCHAR2,
334    p_old_char_value       IN   VARCHAR2 )
335 RETURN VARCHAR2
336 IS
337 BEGIN
338    if ( p_new_char_value = FND_API.G_MISS_CHAR ) then
339       return p_old_char_value;
340    else
341       return p_new_char_value;
342    end if;
343 
344 END  GET_RIGHT_CHAR;
345 
346 FUNCTION GET_RIGHT_DATE (
347    p_new_date_value       IN   DATE,
348    p_old_date_value       IN   DATE )
349 RETURN DATE
350 IS
351 BEGIN
352    if ( p_new_date_value = FND_API.G_MISS_DATE ) then
353       return p_old_date_value;
354    else
355       return p_new_date_value;
356    end if;
357 
358 END  GET_RIGHT_DATE;
359 
360 -- --------------------------------------------------------------------------------
361 -- Convert_Request_Number_To_ID
362 --	convert a service request number to the corresponding internal ID.
363 -- --------------------------------------------------------------------------------
364 PROCEDURE Convert_Request_Number_To_ID  (
365 	p_api_name		 IN  VARCHAR2,
366 	p_parameter_name	 IN  VARCHAR2,
367 	p_request_number	 IN  VARCHAR2,
368 	p_org_id		 IN  NUMBER := NULL,
369  	p_request_id	  	 OUT NOCOPY NUMBER ,
370 	x_return_status		 OUT NOCOPY VARCHAR2
371   ) IS
372     l_api_name        CONSTANT VARCHAR2(30)    := 'Convert_Request_Number_To_ID';
373     l_api_name_full   CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
374   BEGIN
375     -- Initialize Return Status to SUCCESS
376     x_return_status := FND_API.G_RET_STS_SUCCESS;
377     BEGIN
378 	  SELECT incident_id INTO p_request_id
379 	  FROM cs_incidents_all_b
380 	  WHERE incident_number = p_request_number ;
381     EXCEPTION
382 	WHEN NO_DATA_FOUND THEN
383 	   x_return_status := FND_API.G_RET_STS_ERROR;
384 	   Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
385 				     p_token_v     => p_request_number,
386 				     p_token_p     => p_parameter_name,
387                                      p_table_name  => G_TABLE_NAME,
388                                      p_column_name => 'INCIDENT_NUMBER' );
389 	WHEN OTHERS THEN
390 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
391 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
392 	      fnd_msg_pub.ADD;
393 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
394     END;
395   END Convert_Request_Number_To_ID;
396 -- --------------------------------------------------------------------------------
397 --  Convert_Type_To_ID
398 --	convert a service request or action type to the corresponding internal ID.
399 -- --------------------------------------------------------------------------------
400   PROCEDURE Convert_Type_To_ID (
401 	p_api_name		IN  VARCHAR2,
402 	p_parameter_name	IN  VARCHAR2,
403 	p_type_name		IN  VARCHAR2,
404 	p_subtype		IN  VARCHAR2,
405 	p_parent_type_id	IN  NUMBER := FND_API.G_MISS_NUM,
406  	p_type_id		OUT NOCOPY NUMBER,
407 	x_return_status		OUT NOCOPY VARCHAR2
408   ) IS
409   l_api_name         CONSTANT VARCHAR2(30)    := 'Convert_Type_To_ID';
410   l_api_name_full    CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
411 
412   BEGIN
413     -- Initialize Return Status to SUCCESS
414     x_return_status := FND_API.G_RET_STS_SUCCESS;
415 
416     IF p_subtype = G_ACTION_SUBTYPE  THEN
417 	IF p_parent_type_id = FND_API.g_MISS_NUM THEN
418 	-- the subtype is 'ACT' and the user did not pass in parent_type_id
419 	-- it is possible that multiple rows will be returned and hence TOO_MANY_ROWS
420 	-- exception must be handled
421 	    BEGIN
422 	          SELECT incident_type_id INTO p_type_id
423 		  FROM cs_incident_types_vl
424 		  WHERE incident_subtype = p_subtype
425 		  AND   UPPER(name)  = UPPER(p_type_name);
426 
427 	    EXCEPTION
428 		WHEN NO_DATA_FOUND THEN
429 		   x_return_status := FND_API.G_RET_STS_ERROR;
430 	           Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
431 				     	     p_token_v     => p_type_name,
432 				     	     p_token_p     => p_parameter_name,
433                                              p_table_name  => 'CS_INCIDENT_TYPES_VL',
434                                              p_column_name => 'NAME' );
435 		WHEN TOO_MANY_ROWS THEN
436 		   x_return_status := FND_API.G_RET_STS_ERROR;
437 	           Add_Duplicate_Value_Msg( p_token_an    => l_api_name_full,
438 				     	    p_token_p     => p_parameter_name,
439                                             p_table_name  => 'CS_INCIDENT_TYPES_VL',
440                                             p_column_name => 'NAME' );
441 		WHEN OTHERS THEN
442 	      	   fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
443 	           fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
444 	           fnd_msg_pub.ADD;
445 	           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
446 	    END;
447 	ELSE
448 	      -- the subtype is 'ACT' and the user did pass in parent_type_id
449 	      -- it is not possible that multiple rows will be returned and hence TOO_MANY_ROWS
450 	      -- exception need not be handled
451 	      BEGIN
452 	          SELECT incident_type_id INTO p_type_id
453 		  FROM cs_incident_types_vl
454 		  WHERE incident_subtype = p_subtype
455 		  AND   UPPER(name)  = UPPER(p_type_name)
456 		  AND   ((parent_incident_type_id = p_parent_type_id)
457 			 OR (parent_incident_type_id IS NULL
458 			     AND p_parent_type_id IS NULL));
459 
460 	      EXCEPTION
461 		WHEN NO_DATA_FOUND THEN
462 		   x_return_status := FND_API.G_RET_STS_ERROR;
463 	           Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
464 				     	     p_token_v     => p_type_name,
465 				     	     p_token_p     => p_parameter_name,
466                                              p_table_name  => 'CS_INCIDENT_TYPES_VL',
467                                              p_column_name => 'NAME' );
468 		WHEN OTHERS THEN
469 	           fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
470 	           fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
471 	           fnd_msg_pub.ADD;
472 	           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
473 	      END;
474 	   END IF;
475    ELSE
476         -- if this is a SR type
477 	BEGIN
478 		SELECT incident_type_id INTO p_type_id
479 		  FROM cs_incident_types_vl
480 		  WHERE incident_subtype = p_subtype
481 		  AND   UPPER(name)  = UPPER(p_type_name)
482                   AND   TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
483                   AND   TRUNC(NVL(end_date_active, SYSDATE))
484                   AND   rownum<2;
485 	EXCEPTION
486 		WHEN NO_DATA_FOUND THEN
487 	   	   x_return_status := FND_API.G_RET_STS_ERROR;
488 	           Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
489 				     	     p_token_v     => p_type_name,
490 				     	     p_token_p     => p_parameter_name,
491                                              p_table_name  => 'CS_INCIDENT_TYPES_VL',
492                                              p_column_name => 'NAME' );
493 		WHEN OTHERS THEN
494 	           fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
495 	           fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
496 	           fnd_msg_pub.ADD;
497 	           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
498 	END;
499    END IF;
500   END Convert_Type_To_ID;
501 
502 -- --------------------------------------------------------------------------------
503 -- Convert_Status_To_ID
504 --	convert a service request or action status to the corresponding internal ID.
505 -- --------------------------------------------------------------------------------
506 
507   PROCEDURE Convert_Status_To_ID (
508 	p_api_name			 IN   VARCHAR2,
509 	p_parameter_name		 IN   VARCHAR2,
510 	p_status_name			 IN   VARCHAR2,
511 	p_subtype			 IN   VARCHAR2,
512  	p_status_id		    	 OUT  NOCOPY NUMBER,
513 	x_return_status			 OUT  NOCOPY VARCHAR2
514   ) IS
515 
516   l_api_name        CONSTANT VARCHAR2(30)    := 'Convert_Status_To_ID';
517   l_api_name_full   CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
518 
519   BEGIN
520     -- Initialize Return Status to SUCCESS
521     x_return_status := FND_API.G_RET_STS_SUCCESS;
522 
523     BEGIN
524 	  SELECT incident_status_id INTO p_status_id
525 	  FROM cs_incident_statuses_vl
526 	  WHERE incident_subtype = p_subtype
527 	  AND   UPPER(name)  = UPPER(p_status_name)
528           AND   TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
529                 AND TRUNC(NVL(end_date_active, SYSDATE))
530           AND   rownum<2;
531     EXCEPTION
532 	WHEN NO_DATA_FOUND THEN
533 	   x_return_status := FND_API.G_RET_STS_ERROR;
534 	   Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
535 				     p_token_v     => p_status_name,
536 				     p_token_p     => p_parameter_name,
537                                      p_table_name  => 'CS_INCIDENT_STATUSES_VL',
538                                      p_column_name => 'NAME');
539 	WHEN OTHERS THEN
540 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
541 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
542 	      fnd_msg_pub.ADD;
543 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
544     END;
545   END Convert_Status_to_ID;
546 -- --------------------------------------------------------------------------------
547 -- Convert_Severity_To_ID
548 --	convert a service request or action severity to the corresponding internal ID.
549 -- --------------------------------------------------------------------------------
550   PROCEDURE Convert_Severity_To_ID (
551 	p_api_name			 IN  VARCHAR2,
552 	p_parameter_name		 IN  VARCHAR2,
553 	p_severity_name		  	 IN  VARCHAR2,
554 	p_subtype			 IN  VARCHAR2,
555 	p_severity_id			OUT  NOCOPY NUMBER,
556 	x_return_status			OUT  NOCOPY VARCHAR2
557   ) IS
558 
559   l_api_name       CONSTANT VARCHAR2(30)    := 'Convert_Severity_To_ID';
560   l_api_name_full  CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
561 
562 
563   BEGIN
564     -- Initialize Return Status to SUCCESS
565     x_return_status := FND_API.G_RET_STS_SUCCESS;
566 
567     BEGIN
568 	  SELECT incident_severity_id INTO p_severity_id
569 	  FROM cs_incident_severities_vl
570 	  WHERE incident_subtype = p_subtype
571 	  AND   UPPER(name)  = UPPER(p_severity_name)
572           AND   TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
573                 AND TRUNC(NVL(end_date_active, SYSDATE))
574           AND   rownum<2;
575     EXCEPTION
576 	WHEN NO_DATA_FOUND THEN
577 	   x_return_status := FND_API.G_RET_STS_ERROR;
578 	   Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
579 				     p_token_v     => p_severity_name,
580 				     p_token_p     => p_parameter_name,
581                                      p_table_name  => 'CS_INCIDENT_SEVERITIES_VL',
582                                      p_column_name => 'NAME');
583 	WHEN OTHERS THEN
584 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
585 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
586 	      fnd_msg_pub.ADD;
587 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
588     END;
589   END Convert_Severity_To_ID;
590 
591 /*
592 ** Convert_Urgency_To_ID
593 ** 1. Convert a service request urgency to the corresponding internal ID.
594 */
595 PROCEDURE Convert_Urgency_To_ID
596 ( p_api_name             IN   VARCHAR2,
597   p_parameter_name       IN   VARCHAR2,
598   p_urgency_name         IN   VARCHAR2,
599   p_urgency_id           OUT  NOCOPY NUMBER,
600   x_return_status        OUT  NOCOPY VARCHAR2
601 )
602 IS
603   l_api_name          CONSTANT VARCHAR2(30)    := 'Convert_Urgency_To_ID';
604   l_api_name_full     CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
605 
606 
607 BEGIN
608   -- Initialize the return status.
609   x_return_status := FND_API.G_RET_STS_SUCCESS;
610 
611   -- Fetch ID from database.
612   SELECT incident_urgency_id INTO p_urgency_id
613   FROM   cs_incident_urgencies_vl
614   WHERE  UPPER(name) = UPPER(p_urgency_name)
615   AND    TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
616                 AND TRUNC(NVL(end_date_active, SYSDATE))
617   AND    rownum<2;
618 
619 EXCEPTION
620   WHEN NO_DATA_FOUND THEN
621         x_return_status := FND_API.G_RET_STS_ERROR;
622         Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
623 			          p_token_v     => p_urgency_name,
624 			          p_token_p     => p_parameter_name,
625                                   p_table_name  => 'CS_INCIDENT_URGENCIES_VL',
626                                   p_column_name => 'NAME');
627   WHEN OTHERS THEN
628 	fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
629 	fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
630 	fnd_msg_pub.ADD;
631 	x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
632 END Convert_Urgency_To_ID;
633 
634 /*
635 ** Convert_Customer_To_ID
636 ** 1. Convert a customer name or a customer number to the corresponding
637 **    internal ID.
638 */
639 -- -----------------------------------------------------------------------------
640 -- Modification History
641 -- Date     Name     Desc
642 -- -------- -------- -----------------------------------------------------------
643 -- 12/16/05 smisra   Bug 4890701
644 --                   This procedure is never called with some value of param
645 --                   p_customer_name. so program logic related to this param
646 --                   is never executed. The code related to p_customer_name
647 --                   has performance issues. hence removing all the logic
648 --                   related to parameter p_customer_name
649 -- -----------------------------------------------------------------------------
650 PROCEDURE Convert_Customer_To_ID
651 ( p_api_name             IN   VARCHAR2,
652   p_parameter_name_nb    IN   VARCHAR2,
653   p_parameter_name_n     IN   VARCHAR2,
654   p_customer_number      IN   VARCHAR2  := FND_API.G_MISS_CHAR,
655   p_customer_name        IN   VARCHAR2  := FND_API.G_MISS_CHAR,
656   p_customer_id          OUT  NOCOPY NUMBER,
657   x_return_status        OUT  NOCOPY VARCHAR2
658 )
659 IS
660   l_api_name         CONSTANT VARCHAR2(30) := 'Convert_Customer_To_ID';
661   l_api_name_full    CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_api_name;
662 BEGIN
663   -- Initialize the return status.
664   x_return_status := FND_API.G_RET_STS_SUCCESS;
665 
666   -- Fetch ID from database.
667 
668   IF p_customer_number <> FND_API.G_MISS_CHAR THEN
669     BEGIN
670         SELECT a.party_id INTO p_customer_id
671         FROM hz_parties a
672         WHERE a.party_number = p_customer_number;
673     EXCEPTION
674       WHEN NO_DATA_FOUND THEN
675               x_return_status := FND_API.G_RET_STS_ERROR;
676               Add_Invalid_Argument_Msg( p_token_an   => l_api_name_full,
677 			                p_token_v    => p_customer_number,
678 			                p_token_p    => p_parameter_name_nb,
679                                         p_table_name => G_TABLE_NAME,
680                                         p_column_name => 'CUSTOMER_NUMBER');
681       WHEN OTHERS THEN
682 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
683 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
684 	      fnd_msg_pub.ADD;
685 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
686     END;
687     -- If the customer name parameter is also passed, generate an
688     -- informational message.
689 
690     IF p_customer_name <> FND_API.G_MISS_CHAR THEN
691       Add_Param_Ignored_Msg( p_token_an   => l_api_name_full,
692 			     p_token_ip   => p_parameter_name_n,
693                              p_table_name => G_TABLE_NAME,
694                              p_column_name => 'CUSTOMER_NAME' );
695     END IF;
696   /* Bug 4890701 smisra 12/16/05
697   This is procedure is used only in csvsrb.pls
698   and it is not used with parameter p_customer_name. so this condition
699   will never execute. hence removing this piece.
700   ELSE
701     BEGIN
702       SELECT a.party_id INTO p_customer_id
703       FROM hz_parties a
704       WHERE UPPER(a.party_name) = UPPER(p_customer_name);
705 
706     EXCEPTION
707       WHEN NO_DATA_FOUND THEN
708         x_return_status := FND_API.G_RET_STS_ERROR;
709         Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
710 			          p_token_v     => p_customer_name,
711 			          p_token_p     => p_parameter_name_n,
712                                   p_table_name  => G_TABLE_NAME,
713                                   p_column_name => 'CUSTOMER_NAME' );
714       WHEN TOO_MANY_ROWS THEN
715         x_return_status := FND_API.G_RET_STS_ERROR;
716 	Add_Duplicate_Value_Msg( p_token_an    => l_api_name_full,
717 				 p_token_p     => p_parameter_name_n,
718                                  p_table_name  => G_TABLE_NAME,
719                                  p_column_name => 'CUSTOMER_NAME' );
720       WHEN OTHERS THEN
721 	fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
722 	fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
723 	fnd_msg_pub.ADD;
724 	x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
725     END;
726   **************************************************************************/
727   END IF;
728 END Convert_Customer_To_ID;
729 
730 
731 -----------------------------------------------------------------------------
732 -- Convert_Employee_To_ID
733 --   Convert an employee name or an employee number to the corresponding
734 --   internal ID.
735 -----------------------------------------------------------------------------
736 PROCEDURE Convert_Employee_To_ID
737 ( p_api_name             IN   VARCHAR2,
738   p_parameter_name_nb    IN   VARCHAR2,
739   p_employee_number      IN   VARCHAR2  := FND_API.G_MISS_CHAR,
740   p_employee_id          OUT  NOCOPY NUMBER,
741   x_return_status        OUT  NOCOPY VARCHAR2
742 )
743 IS
744  l_api_name        CONSTANT VARCHAR2(30)    := 'Convert_Employee_To_ID';
745  l_api_name_full   CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
746 BEGIN
747   -- Initialize the return status.
748   x_return_status := FND_API.G_RET_STS_SUCCESS;
749 
750   -- Fetch ID from database.
751   IF (p_employee_number <> FND_API.G_MISS_CHAR) THEN
752     BEGIN
753       SELECT person_id INTO p_employee_id
754       FROM   per_people_x
755       WHERE  employee_number = p_employee_number;
756     EXCEPTION
757       WHEN NO_DATA_FOUND THEN
758         x_return_status := FND_API.G_RET_STS_ERROR;
759         Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
760 			          p_token_v     => p_employee_number,
761 			          p_token_p     => p_parameter_name_nb,
762                                   p_table_name  => null,
763                                   p_column_name => 'EMPLOYEE_NUMBER' );
764       WHEN TOO_MANY_ROWS THEN
765         x_return_status := FND_API.G_RET_STS_ERROR;
766 		Add_Duplicate_Value_Msg( p_token_an    => l_api_name_full,
767 				 	 p_token_p     => p_parameter_name_nb,
768                                          p_table_name  => null,
769                                          p_column_name => 'EMPLOYEE_NUMBER' );
770       WHEN OTHERS THEN
771 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
772 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
773 	      fnd_msg_pub.ADD;
774 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
775 
776     END;
777   END IF;
778 
779 END Convert_Employee_To_ID;
780 
781 
782 /*
783 ** Convert_CP_Ref_Number_To_ID
784 ** 1. Convert a customer product reference number to the corresponding
785 **    customer product ID.
786 */
787 PROCEDURE Convert_CP_Ref_Number_To_ID
788 ( p_api_name             IN   VARCHAR2,
789   p_parameter_name       IN   VARCHAR2,
790   p_cp_ref_number        IN   NUMBER,
791   p_org_id               IN   NUMBER    := NULL,
792   p_customer_product_id  OUT  NOCOPY NUMBER,
793   x_return_status        OUT  NOCOPY VARCHAR2
794 )
795 IS
796   l_api_name         CONSTANT VARCHAR2(30)    := 'Convert_CP_Ref_Number_To_ID';
797   l_api_name_full    CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
798   l_cp_ref_number    csi_item_instances.instance_number % type;
799 
800 BEGIN
801   -- Initialize the return status.
802   x_return_status := FND_API.G_RET_STS_SUCCESS;
803   l_cp_ref_number := to_char(p_cp_ref_number);
804 
805   -- Fetch ID from database.
806     SELECT instance_id
807     INTO p_customer_product_id
808     FROM csi_item_instances
809     WHERE instance_number = l_cp_ref_number;
810 
811 EXCEPTION
812     WHEN NO_DATA_FOUND THEN
813 	  x_return_status := FND_API.G_RET_STS_ERROR;
814 	  Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
815 				    p_token_v     => TO_CHAR(p_cp_ref_number),
816 				    p_token_p     => p_parameter_name,
817                                     p_table_name  => null,
818                                     p_column_name => 'CP_REF_NUMBER' );
819     WHEN OTHERS THEN
820 	 fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
821 	 fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
822 	 fnd_msg_pub.ADD;
823 	 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
824 END Convert_CP_Ref_Number_To_ID;
825 
826 /*
827 ** Convert_RMA_Number_To_ID
828 ** 1. Convert an RMA number into the corresponding sales order header ID.
829 */
830 PROCEDURE Convert_RMA_Number_To_ID
831 ( p_api_name             IN   VARCHAR2,
832   p_parameter_name       IN   VARCHAR2,
833   p_rma_number           IN   NUMBER,
834   p_order_type_id        IN   NUMBER    := NULL,
835   p_org_id               IN   NUMBER    := NULL,
836   p_rma_header_id        OUT  NOCOPY NUMBER,
837   x_return_status        OUT  NOCOPY VARCHAR2
838 )
839 IS
840   l_api_name          CONSTANT VARCHAR2(30)    := 'Convert_RMA_Number_To_ID';
841   l_api_name_full     CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
842 
843 
844 BEGIN
845   -- Initialize the return status.
846   x_return_status := FND_API.G_RET_STS_SUCCESS;
847 
848   -- Fetch ID from database.
849   SELECT header_id INTO p_rma_header_id
850   FROM   so_headers_all
851   WHERE  order_number = p_rma_number
852   AND    order_type_id = NVL(p_order_type_id,order_type_id) ;
853 
854 EXCEPTION
855   WHEN NO_DATA_FOUND THEN
856     x_return_status := FND_API.G_RET_STS_ERROR;
857 
858     Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
859   		              p_token_v     => TO_CHAR(p_rma_number),
860 			      p_token_p     => p_parameter_name,
861                               p_table_name  => G_TABLE_NAME ,
862                               p_column_name => 'RMA_NUMBER' );
863 
864   WHEN TOO_MANY_ROWS THEN
865     x_return_status := FND_API.G_RET_STS_ERROR;
866 
867     Add_Duplicate_Value_Msg( p_token_an    => l_api_name_full,
868 			     p_token_p     => p_parameter_name,
869                              p_table_name  => G_TABLE_NAME ,
870                              p_column_name => 'RMA_NUMBER' );
871   WHEN OTHERS THEN
872       fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
873       fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
874       fnd_msg_pub.ADD;
875       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
876 END Convert_RMA_Number_To_ID;
877 
878 -- --------------------------------------------------------------------------------
879 -- Validate_Who_info
880 -- --------------------------------------------------------------------------------
881   PROCEDURE Validate_Who_Info (
882 	p_api_name			 IN  VARCHAR2,
883 	p_parameter_name_usr		 IN  VARCHAR2,
884 	p_parameter_name_login		 IN  VARCHAR2,
885 	p_user_id			 IN  NUMBER,
886 	p_login_id			 IN  NUMBER,
887 	x_return_status			OUT  NOCOPY VARCHAR2
888   ) IS
889   l_dummy 		VARCHAR2(1);
890   l_api_name            CONSTANT VARCHAR2(30)    := 'Validate_Who_Info';
891   l_api_name_full       CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
892 
893   BEGIN
894     -- Initialize Return Status to SUCCESS
895     x_return_status := FND_API.G_RET_STS_SUCCESS;
896 
897     BEGIN
898 
899       -- Special check to not check the dates when the user ID is (-1).
900       IF p_user_id = -1 THEN
901         SELECT 'x' INTO l_dummy
902         FROM   fnd_user
903         WHERE  user_id = p_user_id;
904       ELSE
905           SELECT 'x' INTO l_dummy
906 	  FROM	fnd_user
907 	  WHERE	user_id  = p_user_id
908 	  AND   TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date, SYSDATE))
909 			AND TRUNC(NVL(end_date, SYSDATE));
910       END IF;
911 
912     EXCEPTION
913 	WHEN NO_DATA_FOUND THEN
914 	   x_return_status := FND_API.G_RET_STS_ERROR;
915            Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
916   		              	     p_token_v     => TO_CHAR(p_user_id),
917 			       	     p_token_p     => p_parameter_name_usr,
918                                      p_table_name  => G_TABLE_NAME,
919                                      p_column_name => 'CREATED_BY');
920 	WHEN OTHERS THEN
921 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
922 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
923 	      fnd_msg_pub.ADD;
924 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
925 
926            RETURN;
927     END;
928 
929     IF p_login_id IS NOT NULL THEN
930 
931       BEGIN
932    	  SELECT 'x' INTO l_dummy
933 	  FROM	fnd_logins
934 	  WHERE	login_id  = p_login_id
935 	  AND	user_id	  = p_user_id;
936       EXCEPTION
937 	WHEN NO_DATA_FOUND THEN
938 	   	x_return_status := FND_API.G_RET_STS_ERROR;
939            	Add_Invalid_Argument_Msg( p_token_an => l_api_name_full,
940   		p_token_v      => TO_CHAR(p_login_id),
941 		p_token_p      => p_parameter_name_login,
942                 p_table_name   => G_TABLE_NAME,
943                 p_column_name    => 'LAST_UPDATE_LOGIN' );
944 
945 	WHEN OTHERS THEN
946 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
947 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
948 	      fnd_msg_pub.ADD;
949 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
950       END;
951     END IF;
952   END Validate_Who_Info;
953 
954 
955 /*
956 ** Validate_Type
957 ** 1. Verify that the service request type is a valid and active type.
958 ** 2. Verify that if the type of the request has any related statuses defined,
959 **    the status given is one of the active related statuses.
960 */
961 
962 /*******************************
963 --commented out to test new type validation proc below.
964 PROCEDURE Validate_Type
965 ( p_api_name             IN   VARCHAR2,
966   p_parameter_name       IN   VARCHAR2,
967   p_type_id   		 IN   NUMBER,
968   p_subtype  		 IN   VARCHAR2,
969   p_status_id  		 IN   NUMBER,
970   p_resp_id              IN   NUMBER,
971   p_operation            IN   VARCHAR2,
972   x_return_status        OUT  NOCOPY VARCHAR2,
973   -- for cmro_eam
974   x_CMRO_flag            OUT  NOCOPY VARCHAR2,
975   x_maintenance_flag     OUT  NOCOPY VARCHAR2
976 )
977 IS
978   l_dummy  		VARCHAR2(1);
979   l_status 		NUMBER;
980   l_api_name            CONSTANT VARCHAR2(30)    := 'Validate_Type';
981   l_api_name_full       CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
982   l_profile             VARCHAR2(9);
983 
984   CURSOR val_type_map IS
985   SELECT 'x'
986   FROM   cs_sr_type_mapping
987   WHERE  incident_type_id  = p_type_id
988   AND    responsibility_id = p_resp_id
989   AND    TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date, SYSDATE))
990                         AND     TRUNC(NVL(end_date, SYSDATE));
991 
992   CURSOR val_type IS
993   SELECT  CMRO_flag,Maintenance_flag
994   FROM   cs_incident_types_b
995   WHERE  incident_type_id = p_type_id
996   AND    incident_subtype = p_subtype
997   AND    TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
998                        AND     TRUNC(NVL(end_date_active, SYSDATE));
999 
1000 BEGIN
1001   -- Initialize the return status.
1002   x_return_status := FND_API.G_RET_STS_SUCCESS;
1003   x_CMRO_flag := NULL;
1004   x_maintenance_flag := NULL;
1005 
1006   l_profile       := FND_PROFILE.VALUE('CS_SR_USE_TYPE_RESPON_SETUP');
1007 
1008   -- Verify the type ID against the database.
1009 
1010   IF l_profile='YES' Then
1011         OPEN val_type_map;
1012         FETCH val_type_map INTO l_dummy;
1013         IF (val_type_map%NOTFOUND) THEN
1014                   CLOSE val_type_map;
1015                   x_return_status := FND_API.G_RET_STS_ERROR;
1016                   fnd_message.set_name ('CS', 'CS_SR_TYPE_BY_RESP');
1017                   fnd_message.set_token ('OPERATION',p_operation);
1018                   fnd_msg_pub.ADD;
1019         ELSE
1020                   x_return_status  := FND_API.G_RET_STS_SUCCESS;
1021                   --Fixed bug 2809312, moved this close cursor here from
1022                   --after the if.
1023                   CLOSE val_type_map;
1024         END IF;
1025   ELSE
1026         OPEN val_type;
1027 	-- for cmro_eam
1028         FETCH val_type INTO x_CMRO_flag,x_maintenance_flag;
1029         IF (val_type%NOTFOUND) THEN
1030                   CLOSE val_type;
1031                   x_return_status := FND_API.G_RET_STS_ERROR;
1032                   RAISE NO_DATA_FOUND ;
1033         ELSE
1034                   x_return_status  := FND_API.G_RET_STS_SUCCESS;
1035                   --Fixed bug 2809312, moved this close cursor here from
1036                   --after the if.
1037                   CLOSE val_type;
1038         END IF;
1039   END IF;
1040 
1041 EXCEPTION
1042   WHEN NO_DATA_FOUND THEN
1043     x_return_status := FND_API.G_RET_STS_ERROR;
1044     Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
1045 	              	      p_token_v     => TO_CHAR(p_type_id),
1046 			      p_token_p     => p_parameter_name,
1047                               p_table_name  => G_TABLE_NAME,
1048                               p_column_name => 'INCIDENT_TYPE_ID' );
1049 
1050   WHEN OTHERS THEN
1051 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
1052 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
1053 	      fnd_msg_pub.ADD;
1054 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1055 END Validate_Type;
1056 
1057 *******************************/
1058 
1059 -- DJ API Cleanup
1060 -- New proc. to validate type for security
1061 PROCEDURE Validate_Type (
1062    p_parameter_name       IN   VARCHAR2,
1063    p_type_id   		  IN   NUMBER,
1064    p_subtype  		  IN   VARCHAR2,
1065    p_status_id            IN   NUMBER,   -- not used in proc.
1066    p_resp_id              IN   NUMBER,
1067    p_resp_appl_id         IN   NUMBER,   -- new for 11.5.10 default NULL
1068    p_business_usage       IN   VARCHAR2, -- new for 11.5.10 default NULL
1069    p_ss_srtype_restrict   IN   VARCHAR2, -- new for 11.5.10 default 'N'
1070    p_operation            IN   VARCHAR2, -- new for 11.5.10 used for self_service resp.
1071    x_return_status        OUT  NOCOPY VARCHAR2,
1072    x_cmro_flag            OUT  NOCOPY VARCHAR2,  -- new for 11.5.10
1073    x_maintenance_flag     OUT  NOCOPY VARCHAR2 ) -- new for 11.5.10
1074 IS
1075    l_dummy  		 VARCHAR2(1);
1076    l_status 		 NUMBER;
1077    l_api_name            CONSTANT VARCHAR2(30) := 'Validate_Type';
1078    l_api_name_full       CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_api_name;
1079 
1080    -- this is used to indicate if the out flag params. are populated or not.
1081    l_flags_set           VARCHAR2(1) := 'N';
1082    l_start_date          DATE;
1083    l_end_date            DATE;
1084 
1085    cursor val_type_map is
1086    select 'x'
1087    from   cs_sr_type_mapping
1088    where  incident_type_id  = p_type_id
1089    and    responsibility_id = p_resp_id
1090    and    application_id    = p_resp_appl_id  -- new for 11.5.10
1091    and    trunc(sysdate) between trunc(nvl(start_date, sysdate))
1092                          and     trunc(nvl(end_date, sysdate));
1093 
1094    -- For bug 3474365
1095    cursor val_type_unsecure is
1096    select UPPER(cmro_flag), UPPER(maintenance_flag),start_date_active,end_date_active
1097    from   cs_incident_types_b
1098    where  incident_type_id = p_type_id
1099    and    incident_subtype = p_subtype;
1100 --   and    trunc(sysdate) between trunc(nvl(start_date_active, sysdate))
1101 --			 and     trunc(nvl(end_date_active,   sysdate));
1102 
1103    cursor val_type_secure is
1104    select cmro_flag, maintenance_flag ,start_date_active,end_date_active
1105    from   cs_incident_types_vl_sec
1106    where  incident_type_id  = p_type_id
1107    and    incident_subtype  = p_subtype;
1108  --  and    trunc(sysdate) between trunc(nvl(start_date_active, sysdate))
1109  --                        and     trunc(nvl(end_date_active, sysdate));
1110 
1111 BEGIN
1112   -- Initialize the return status.
1113   x_return_status     := FND_API.G_RET_STS_SUCCESS;
1114   x_cmro_flag         := NULL;
1115   x_maintenance_flag  := NULL;
1116 
1117   -- Verify the type ID against the database.
1118   if ( p_business_usage = 'SELF_SERVICE' ) then
1119      if ( p_ss_srtype_restrict = 'Y' AND p_operation = 'CREATE') then
1120 	open  val_type_map;
1121 	fetch val_type_map into l_dummy;
1122 	close val_type_map;
1123 
1124 	if ( l_dummy = 'x' ) then
1125 	   x_return_status := FND_API.G_RET_STS_SUCCESS;
1126         else
1127 	   -- new message for 11.5.10
1128 	   -- You do not have access to the service request type that is
1129 	   -- being created. Please contact your system administrator.
1130            fnd_message.set_name ('CS', 'CS_SR_WEB_NO_PRIV');
1131            fnd_msg_pub.ADD;
1132 	   x_return_status := FND_API.G_RET_STS_ERROR;
1133 	end if;
1134      else
1135        -- For bug 3474365 - included an if condition while called for validating old sr type
1136        -- for self_Service applications.
1137 
1138 
1139        if ( p_operation = 'UPDATE') then
1140 	open  val_type_unsecure;
1141 	fetch val_type_unsecure into x_cmro_flag, x_maintenance_flag,l_start_date,l_end_date;
1142 
1143 	if ( val_type_unsecure%notfound ) then
1144 	   -- new message for 11.5.10
1145 	   -- Invalid type. Given type is either end dated or does not exist
1146 	   -- as a valid type.
1147            fnd_message.set_name ('CS', 'CS_SR_INVALID_TYPE');
1148 	   fnd_message.set_token('API_NAME', l_api_name_full);
1149            fnd_msg_pub.ADD;
1150 	   x_return_status := FND_API.G_RET_STS_ERROR;
1151 
1152         elsif (not( trunc(sysdate) >= trunc(nvl(l_start_date, sysdate))
1153                       and     trunc(sysdate) <= trunc(nvl(l_end_date, sysdate)) )) then
1154            fnd_message.set_name ('CS', 'CS_SR_INVALID_TYPE');
1155            fnd_message.set_token('API_NAME', l_api_name_full);
1156            fnd_msg_pub.ADD;
1157 	   x_return_status := FND_API.G_RET_STS_ERROR;
1158         else
1159 	   l_flags_set     := 'Y';
1160 	   x_return_status := FND_API.G_RET_STS_SUCCESS;
1161 	end if;
1162 	close val_type_unsecure;
1163 
1164       elsif ( p_operation = 'UPDATE_OLD') then
1165           open  val_type_unsecure;
1166 	  fetch val_type_unsecure into x_cmro_flag, x_maintenance_flag,l_start_date,l_end_date;
1167 
1168 	  if ( val_type_unsecure%notfound ) then
1169 	   -- new message for 11.5.10
1170 	   -- Invalid type. Given type is either end dated or does not exist
1171 	   -- as a valid type.
1172            fnd_message.set_name ('CS', 'CS_SR_INVALID_TYPE');
1173 	   fnd_message.set_token('API_NAME', l_api_name_full);
1174            fnd_msg_pub.ADD;
1175 	   x_return_status := FND_API.G_RET_STS_ERROR;
1176          else
1177 	   l_flags_set     := 'Y';
1178 	   x_return_status := FND_API.G_RET_STS_SUCCESS;
1179 	 end if;
1180 	 close val_type_unsecure;
1181 
1182       end if; -- if ( p_operation = 'UPDATE') then
1183      end if;    -- if ( p_ss_srtype_restrict = 'Y' ) then
1184   else   -- p_business_usage = AGENT
1185 
1186   -- For bug 3474365 - included an if condition while called for validating old sr type
1187   -- when the security is off
1188 
1189   -- For bug 3732793 included the or condition for create
1190      if ( p_operation = 'UPDATE' OR p_operation = 'CREATE') then
1191      open val_type_secure;
1192      fetch val_type_secure into x_cmro_flag, x_maintenance_flag,l_start_date,l_end_date;
1193 
1194      if ( val_type_secure%notfound ) then
1195         -- new message for 11.5.10
1196         -- Current responsibility does not have sufficient priviledges to access
1197         -- service requests of this type. Please contact your system administrator.
1198         fnd_message.set_name ('CS', 'CS_SR_AGENT_NO_PRIV');
1199 	fnd_message.set_token('API_NAME', l_api_name_full);
1200         fnd_msg_pub.ADD;
1201         x_return_status := FND_API.G_RET_STS_ERROR;
1202      elsif (not( trunc(sysdate) >= trunc(nvl(l_start_date, sysdate))
1203                       and     trunc(sysdate) <= trunc(nvl(l_end_date, sysdate)) )) then
1204            fnd_message.set_name ('CS', 'CS_SR_INVALID_TYPE');
1205            fnd_message.set_token('API_NAME', l_api_name_full);
1206            fnd_msg_pub.ADD;
1207 	   x_return_status := FND_API.G_RET_STS_ERROR;
1208      else
1209 	l_flags_set     := 'Y';
1210 	x_return_status := FND_API.G_RET_STS_SUCCESS;
1211      end if;
1212      close val_type_secure;
1213    elsif ( p_operation = 'UPDATE_OLD') then
1214           open  val_type_secure;
1215 	  fetch val_type_secure into x_cmro_flag, x_maintenance_flag,l_start_date,l_end_date;
1216 
1217 	  if ( val_type_secure%notfound ) then
1218 	   -- new message for 11.5.10
1219 	   -- Invalid type. Given type is either end dated or does not exist
1220 	   -- as a valid type.
1221            -- For bug 3902711
1222            --fnd_message.set_name ('CS', 'CS_SR_INVALID_TYPE');
1223            fnd_message.set_name ('CS', 'CS_SR_AGENT_NO_PRIV');
1224 	   fnd_message.set_token('API_NAME', l_api_name_full);
1225            fnd_msg_pub.ADD;
1226 	   x_return_status := FND_API.G_RET_STS_ERROR;
1227          else
1228 	   l_flags_set     := 'Y';
1229 	   x_return_status := FND_API.G_RET_STS_SUCCESS;
1230 	 end if;
1231 	 close val_type_secure;
1232 
1233    end if; -- if ( p_operation = 'UPDATE') then
1234   end if;   -- if ( p_business_usage = 'SELF_SERVICE' ) then
1235 
1236   -- get the values of the flags for the out parameters if not set
1237   if ( x_return_status = FND_API.G_RET_STS_SUCCESS and
1238        l_flags_set     = 'N' ) then
1239      open  val_type_unsecure;
1240      fetch val_type_unsecure into x_cmro_flag, x_maintenance_flag,l_start_date,l_end_date;
1241      close val_type_unsecure;
1242   end if;
1243 
1244 EXCEPTION
1245   WHEN NO_DATA_FOUND THEN
1246     x_return_status := FND_API.G_RET_STS_ERROR;
1247     Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
1248 	              	      p_token_v     => TO_CHAR(p_type_id),
1249 			      p_token_p     => p_parameter_name,
1250                               p_table_name  => G_TABLE_NAME,
1251                               p_column_name => 'INCIDENT_TYPE_ID' );
1252 
1253   WHEN OTHERS THEN
1254 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
1255 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
1256 	      fnd_msg_pub.ADD;
1257 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1258 END Validate_Type;
1259 /*
1260 ** Validate_Status
1261 ** Note : This procedure is used during Create Service Request.
1262 ** 1. Find whether Status Group is Mapped to Type, If yes use Status Group (SG1)
1263 ** 2. Find whether Status Group is mapped to Type-Resp. If yes, use status Group (SG2)
1264 ** 3. If No status Group is mapped
1265 **    Check whether status is a valid status with Valid_in_Create set as 'Y'
1266 ** 4. If a Status Group is mapped (SG1) or (SG2)
1267 **    Is the Status a valid Status with Valid_In_Create set as 'Y'
1268 **    Does Given Status exist in CS_ALLOWED_STATUSES for the Given Group?
1269 ** 5. Return to the caller via the p_close_flag parameter whether or not the
1270 **    status is a "closed" status. This will be useful to the caller for
1271 **    managing the closed date.
1272 */
1273 PROCEDURE Validate_Status
1274 ( p_api_name             IN   VARCHAR2,
1275   p_parameter_name       IN   VARCHAR2,
1276   p_status_id 		 IN   NUMBER,
1277   p_subtype      	 IN   VARCHAR2,
1278   p_type_id      	 IN   NUMBER,
1279   p_resp_id		 IN   NUMBER,
1280   p_close_flag           OUT  NOCOPY VARCHAR2,
1281   p_operation         IN             VARCHAR2,
1282   x_return_status        OUT  NOCOPY VARCHAR2
1283 )
1284 IS
1285 
1286    l_status_group_id	  NUMBER := 0;
1287 
1288     -- Cursor to Validate Status
1289 
1290     CURSOR all_statuses_csr IS
1291     SELECT seeded_flag, close_flag
1292     FROM   cs_incident_statuses_b
1293     WHERE  incident_subtype = p_subtype
1294     AND    incident_status_id = p_status_id
1295     AND    valid_in_create_flag = 'Y'
1296     AND    TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
1297     AND     TRUNC(NVL(end_date_active, SYSDATE));
1298 
1299     CURSOR all_statuses_csr1 IS
1300     SELECT seeded_flag, close_flag
1301       FROM cs_incident_statuses_b
1302      WHERE incident_subtype = p_subtype
1303        AND incident_status_id = p_status_id
1304        AND TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
1305        AND TRUNC(NVL(end_date_active, SYSDATE));
1306 
1307     CURSOR group_for_type_Csr IS
1308     SELECT status_Group_id
1309     FROM   cs_incident_types_B
1310     WHERE  Incident_type_id = p_type_id;
1311     /* Type is already validated **/
1312 
1313     CURSOR group_for_type_resp_csr IS
1314     SELECT status_Group_id
1315     FROM   cs_sr_type_mapping
1316     WHERE  Incident_type_id = p_type_id
1317     AND    responsibility_id = p_resp_id
1318     AND    status_group_id IS NOT NULL;
1319 
1320     -- Check Status is allowed for the Group
1321     CURSOR allowed_Statuses_csr IS
1322     SELECT incident_status_id
1323     FROM   cs_sr_allowed_statuses
1324     WHERE  status_Group_id = l_status_group_id
1325     AND    incident_Status_id = p_status_id
1326     AND    TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date, SYSDATE))
1327                           AND     TRUNC(NVL(end_date, SYSDATE));
1328 
1329    l_seeded_flag          VARCHAR2(3);
1330    l_status               NUMBER;
1331    l_incident_Status_id   NUMBER;
1332    l_count         	  NUMBER;
1333 
1334    l_api_name      CONSTANT VARCHAR2(30)    := 'Validate_Status';
1335    l_api_name_full CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
1336 BEGIN
1337    -- Initialize the return status.
1338    x_return_status  := FND_API.G_RET_STS_SUCCESS;
1339 
1340    IF NVL(p_operation,'CREATE') = 'CREATE' THEN
1341 
1342       OPEN all_statuses_Csr;
1343       FETCH all_statuses_csr INTO l_seeded_flag, p_close_flag;
1344       IF (all_statuses_Csr%NOTFOUND) THEN
1345    	    CLOSE all_statuses_csr;
1346 	    RAISE NO_DATA_FOUND ;
1347       END IF;
1348       CLOSE all_statuses_csr;
1349    ELSE
1350       OPEN all_statuses_Csr1;
1351 	FETCH all_statuses_csr1 INTO l_seeded_flag, p_close_flag;
1352 	IF (all_statuses_Csr1%NOTFOUND) THEN
1353 	   CLOSE all_statuses_csr1;
1354 	   RAISE NO_DATA_FOUND ;
1355 	END IF;
1356 
1357 	CLOSE all_statuses_csr1;
1358    END IF;
1359 
1360 
1361    -- Check Whether Any Group is mapped for Type and Resp.
1362    OPEN group_for_type_resp_csr;
1363    FETCH group_for_type_resp_csr INTO l_status_group_id;
1364    IF (group_for_type_resp_csr%NOTFOUND) THEN
1365  	    -- No Group is mapped for Type and Resp, try Type
1366        OPEN group_for_type_csr;
1367        FETCH group_for_type_csr INTO l_status_group_id;
1368        IF (group_for_type_csr%NOTFOUND) THEN
1369 	      -- No Group is mapped for Type, All Valid statuses are Valid.
1370 	      NULL;
1371        END IF;
1372 	   CLOSE group_for_type_csr;
1373    END IF;
1374    CLOSE group_for_type_resp_csr;
1375 
1376    IF (l_status_group_id > 0) THEN
1377    	  -- Status group has been  Found
1378       -- Check for allowed statuses
1379       OPEN  allowed_Statuses_csr;
1380       FETCH allowed_Statuses_csr INTO l_incident_Status_id;
1381       IF (allowed_Statuses_csr%NOTFOUND) THEN
1382 	   -- This Status is not Allowed for this Group
1383 	   CLOSE allowed_Statuses_csr;
1384 	   RAISE NO_DATA_FOUND ;
1385       END IF;
1386       CLOSE allowed_Statuses_csr;
1387    END IF;
1388 
1389 
1390 EXCEPTION
1391   WHEN NO_DATA_FOUND THEN
1392     x_return_status := FND_API.G_RET_STS_ERROR;
1393 
1394     Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
1395 	              	      p_token_v     => TO_CHAR(p_status_id),
1396 			      p_token_p     => p_parameter_name,
1397                               p_table_name  => G_TABLE_NAME,
1398                               p_column_name => 'INCIDENT_STATUS_ID' );
1399   WHEN OTHERS THEN
1400 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
1401 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
1402 	      fnd_msg_pub.ADD;
1403 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1404 END Validate_Status;
1405 
1406 /*
1407 ** Validate_Updated_Status
1408 ** Note : This procedure is used during Update Service Request.
1409 ** 1. Find whether Status Group is Mapped to Type, If yes use Status Group (SG1)
1410 ** 2. Find whether Status Group is mapped to Type-Resp. If yes, use status Group (SG2)
1411 ** 3. If No status Group is mapped
1412 **    Check whether status is a valid status.
1413 ** 4. If a Status Group is mapped (SG1) or (SG2)
1414 **    Is Status Transition defined for this group
1415 **    If yes, Is the current Transition Allowed
1416 **    If Status Transition are not defined.
1417 ****    Does Given Status exist in CS_ALLOWED_STATUSES for the Given Group?
1418 ** 5. Return to the caller via the p_close_flag parameter whether or not the
1419 **    status is a "closed" status. This will be useful to the caller for
1420 **    managing the closed date.
1421 */
1422 
1423 PROCEDURE Validate_Updated_Status
1424 ( p_api_name                   IN        VARCHAR2,
1425   p_parameter_name             IN        VARCHAR2,
1426   p_resp_id                    IN        NUMBER,
1427   p_new_status_id              IN        NUMBER,
1428   p_old_status_id              IN        NUMBER,
1429   p_subtype      	           IN        VARCHAR2,
1430   p_type_id      	           IN        NUMBER,
1431   p_old_type_id                IN        NUMBER := NULL,
1432   p_close_flag                OUT NOCOPY VARCHAR2,
1433   p_disallow_request_update   OUT NOCOPY VARCHAR2,
1434   p_disallow_owner_update     OUT NOCOPY VARCHAR2,
1435   p_disallow_product_update   OUT NOCOPY VARCHAR2,
1436   x_return_status             OUT NOCOPY VARCHAR2
1437 )
1438 IS
1439 
1440    l_status_group_id 		NUMBER := 0;
1441    l_status_Transition_id 	NUMBER;
1442    l_incident_status_id		NUMBER;
1443    l_old_status_group_id      NUMBER := 0;
1444 
1445 
1446     -- Cursor to Validate Status
1447     CURSOR all_statuses_csr IS
1448     SELECT seeded_flag, close_flag
1449     FROM   cs_incident_statuses_b
1450     WHERE  incident_subtype = p_subtype
1451     AND    incident_status_id = p_new_status_id
1452     AND    TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
1453                         AND     TRUNC(NVL(end_date_active, SYSDATE));
1454 
1455     CURSOR group_for_type_Csr (l_type_id IN NUMBER) IS
1456     SELECT status_Group_id
1457     FROM   cs_incident_types_B
1458     WHERE  Incident_type_id = l_type_id
1459     AND    TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
1460                         AND     TRUNC(NVL(end_date_active, SYSDATE));
1461     /* Type is already validated **/
1462 
1463     CURSOR group_for_type_resp_csr (l_type_id IN NUMBER, l_resp_id IN NUMBER) IS
1464     SELECT status_Group_id
1465     FROM   cs_sr_type_mapping
1466     WHERE  Incident_type_id = l_type_id
1467     AND    responsibility_id = l_resp_id
1468     AND    TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date, SYSDATE))
1469                         AND     TRUNC(NVL(end_date, SYSDATE)) ;
1470 
1471     -- Check Status is allowed for the Group
1472     CURSOR allowed_Statuses_csr ( p_status_group_id IN NUMBER) IS
1473     SELECT incident_status_id
1474     FROM   cs_sr_allowed_statuses
1475     WHERE  status_Group_id = p_status_group_id
1476     AND    incident_Status_id = p_new_status_id
1477     AND    TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date, SYSDATE))
1478                           AND     TRUNC(NVL(end_date, SYSDATE));
1479 
1480     -- Check Whether transitions are defined for the Group.
1481     CURSOR status_Transitions_csr IS
1482     SELECT status_Transition_id
1483     FROM   cs_sr_status_transitions
1484     WHERE  status_Group_id = l_status_group_id
1485     AND    TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date, SYSDATE))
1486                           AND     TRUNC(NVL(end_date, SYSDATE));
1487     /** This above should later be moved to use transition IND**/
1488 
1489     -- Check Whether Current update is a Valid transitions for the Group.
1490     CURSOR valid_status_Transitions_csr IS
1491     SELECT status_Transition_id
1492     FROM   cs_sr_status_transitions
1493     WHERE  status_Group_id = l_status_group_id
1494     AND    FROM_Incident_status_id =   p_old_status_id
1495     AND    TO_Incident_status_id   = p_new_status_id
1496     AND    TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date, SYSDATE))
1497                           AND     TRUNC(NVL(end_date, SYSDATE));
1498 
1499   l_api_name       CONSTANT VARCHAR2(30)    := 'Validate_Updated_Status';
1500   l_api_name_full  CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
1501   l_status_valid            VARCHAR2(1);
1502   l_count	   NUMBER;
1503 
1504 BEGIN
1505 
1506   -- Initialize the return status.
1507   x_return_status := FND_API.G_RET_STS_SUCCESS;
1508   l_status_valid            := 'N' ;
1509 
1510    -- Verify the given status against the cs_incident_statuses table.
1511    -- Get all the values for the flags.
1512    -- Changed the new_status_id to old_status_id for fixing Bug# 2094344.
1513   -- For bug 3306908 - commented the date validation
1514 
1515    SELECT close_flag, disallow_request_update,
1516 	      disallow_agent_dispatch, disallow_product_update
1517    INTO   p_close_flag, p_disallow_request_update,
1518 	      p_disallow_owner_update, p_disallow_product_update
1519    FROM   cs_incident_statuses_b
1520    WHERE  incident_status_id = p_old_status_id
1521    AND    incident_subtype = p_subtype;
1522   -- AND    TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
1523 --		 	 AND     TRUNC(NVL(end_date_active, SYSDATE));
1524 
1525    --Added the query because the close_date did not populate with SYSDATE
1526    SELECT close_flag INTO p_close_flag
1527    FROM   cs_incident_statuses_b
1528    WHERE  incident_status_id = p_new_status_id
1529    AND    incident_subtype = p_subtype
1530    AND    TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
1531                           AND     TRUNC(NVL(end_date_active, SYSDATE));
1532    /*** Move the Above as Cursors ****/
1533 
1534    -- Check Whether Any Group is mapped for Type and Resp.
1535    OPEN group_for_type_resp_csr(p_type_id,p_resp_id);
1536    FETCH group_for_type_resp_csr INTO l_status_group_id;
1537    IF (group_for_type_resp_csr%NOTFOUND) THEN
1538  	    -- No Group is mapped for Type and Resp, try Type
1539        OPEN group_for_type_csr(p_type_id);
1540        FETCH group_for_type_csr INTO l_status_group_id;
1541        IF (group_for_type_csr%NOTFOUND) THEN
1542 	        -- No Group is mapped for Type, All Valid statuses are Valid.
1543 	        NULL;
1544        END IF;
1545   	   CLOSE group_for_type_csr;
1546    END IF;
1547   CLOSE group_for_type_resp_csr;
1548 
1549    -- If the type has changed then get the status group mapped to the
1550    -- old SR Type
1551 
1552    IF (NVL(p_type_id ,00) <> NVL(p_old_type_id,00) AND
1553       (p_old_type_id IS NOT NULL)
1554 	 )THEN
1555 
1556       -- Check Whether Any Group is mapped for Type and Resp.
1557 
1558        OPEN group_for_type_resp_csr(p_old_type_id,p_resp_id);
1559 	 FETCH group_for_type_resp_csr INTO l_old_status_group_id;
1560 
1561 	 IF (group_for_type_resp_csr%NOTFOUND) THEN
1562 	    -- No Group is mapped for Type and Resp, try Type
1563 
1564 	     OPEN group_for_type_csr(p_old_type_id);
1565 	    FETCH group_for_type_csr INTO l_old_status_group_id;
1566 
1567 	    IF (group_for_type_csr%NOTFOUND) THEN
1568   	       -- No Group is mapped for Type, All Valid statuses are Valid.
1569 	       NULL;
1570 	    END IF;
1571 	    CLOSE group_for_type_csr;
1572 	 END IF;
1573 	 CLOSE group_for_type_resp_csr;
1574    END IF;
1575 
1576    IF (NVL(p_type_id ,00) <> NVL(p_old_type_id,00) AND
1577        p_old_type_id IS NOT NULL AND
1578 	  l_status_group_id <> l_old_status_group_id
1579 	 ) THEN
1580 	 -- Since the type and status group is changed we need to validate only that the
1581 	 -- status exists in the status group and not the transition.
1582 
1583 	  OPEN allowed_Statuses_csr(l_status_group_id);
1584       FETCH allowed_Statuses_csr INTO l_incident_Status_id;
1585 
1586       IF (allowed_Statuses_csr%NOTFOUND) THEN
1587 	    -- This Status is not Allowed for this Group
1588 	    CLOSE allowed_Statuses_csr;
1589 	    RAISE NO_DATA_FOUND ;
1590 	 END IF;
1591 	 CLOSE allowed_Statuses_csr;
1592 
1593    ELSE
1594       IF (l_status_group_id > 0) THEN
1595    	     -- Status group has been  Found , Check whether transition are defined.
1596          OPEN status_transitions_csr;
1597          FETCH status_transitions_csr INTO l_status_transition_id;
1598 
1599          IF (status_transitions_csr%NOTFOUND) THEN
1600 	      -- Status transitions are not defined, ck only allowed Status
1601 	      OPEN  allowed_Statuses_csr(l_status_group_id);
1602               FETCH allowed_Statuses_csr INTO l_incident_Status_id;
1603 
1604         	   IF (allowed_Statuses_csr%NOTFOUND) THEN
1605 	   	       -- This Status is not Allowed for this Group
1606 	   		   CLOSE allowed_Statuses_csr;
1607 		   	   RAISE NO_DATA_FOUND ;
1608             END IF;
1609             CLOSE allowed_Statuses_csr;
1610          ELSE
1611  	        -- Status Transitions are defined, check whether current trans. is valid
1612 	        OPEN valid_status_transitions_csr;
1613 	        FETCH valid_status_transitions_csr INTO l_status_transition_id;
1614 	        IF (valid_status_transitions_csr%NOTFOUND) THEN
1615 		      CLOSE valid_status_transitions_csr;
1616 		      RAISE NO_DATA_FOUND;
1617 	        END IF;
1618 	        CLOSE valid_status_transitions_csr;
1619   	     END IF;
1620       END IF;
1621    END IF;
1622 EXCEPTION
1623   WHEN NO_DATA_FOUND THEN
1624     x_return_status := FND_API.G_RET_STS_ERROR;
1625     Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
1626 	              	      p_token_v     => TO_CHAR(p_new_status_id),
1627 		              p_token_p     => p_parameter_name,
1628                               p_table_name  => G_TABLE_NAME,
1629                               p_column_name => 'INCIDENT_STATUS_ID' );
1630   WHEN OTHERS THEN
1631 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
1632 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
1633 	      fnd_msg_pub.ADD;
1634 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1635 END Validate_Updated_Status;
1636 
1637 
1638 -- Validate_Severity
1639 --	verify that the service request severity is a valid and active.
1640 -- --------------------------------------------------------------------------------
1641   PROCEDURE Validate_Severity (
1642 	p_api_name			 IN  VARCHAR2,
1643 	p_parameter_name		 IN  VARCHAR2,
1644 	p_severity_id			 IN  NUMBER,
1645 	p_subtype			 IN  VARCHAR2,
1646 	x_return_status			OUT  NOCOPY VARCHAR2
1647   ) IS
1648 
1649   l_dummy 	     VARCHAR2(1);
1650   l_api_name         CONSTANT VARCHAR2(30)    := 'Validate_Severity';
1651   l_api_name_full    CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
1652 
1653   BEGIN
1654     -- Initialize Return Status to SUCCESS
1655     x_return_status := FND_API.G_RET_STS_SUCCESS;
1656 
1657     BEGIN
1658 	  SELECT 'x' INTO l_dummy
1659 	  FROM  cs_incident_severities_b
1660 	  WHERE incident_subtype = p_subtype
1661 	  AND   incident_severity_id = p_severity_id
1662 	  AND   TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
1663 			AND TRUNC(NVL(end_date_active, SYSDATE));
1664     EXCEPTION
1665 	WHEN NO_DATA_FOUND THEN
1666 	   x_return_status := FND_API.G_RET_STS_ERROR;
1667            Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
1668   		              	     p_token_v     => TO_CHAR(p_severity_id),
1669 		      	     	     p_token_p     => p_parameter_name,
1670                                      p_table_name  => G_TABLE_NAME,
1671                                      p_column_name => 'SEVERITY_ID' );
1672 	WHEN OTHERS THEN
1673 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
1674 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
1675 	      fnd_msg_pub.ADD;
1676 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1677 
1678     END;
1679   END Validate_Severity ;
1680 
1681 
1682 -- --------------------------------------------------------------------------------
1683 --  Validate_Urgency
1684 --	verify that the service request urgency is a valid and active.
1685 -- --------------------------------------------------------------------------------
1686   PROCEDURE Validate_Urgency (
1687 	p_api_name			 IN  VARCHAR2,
1688 	p_parameter_name		 IN  VARCHAR2,
1689 	p_urgency_id			 IN  NUMBER,
1690 	x_return_status			 OUT NOCOPY VARCHAR2
1691   ) IS
1692 
1693     l_dummy 	           VARCHAR2(1);
1694     l_api_name             CONSTANT VARCHAR2(30)    := 'Validate_Urgency';
1695     l_api_name_full        CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
1696 
1697   BEGIN
1698     -- Initialize Return Status to SUCCESS
1699     x_return_status := FND_API.G_RET_STS_SUCCESS;
1700 
1701     BEGIN
1702 	  SELECT 'x' INTO l_dummy
1703 	  FROM  cs_incident_urgencies_b
1704 	  WHERE incident_urgency_id = p_urgency_id
1705 	  AND   TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
1706 			AND TRUNC(NVL(end_date_active, SYSDATE));
1707     EXCEPTION
1708 	WHEN NO_DATA_FOUND THEN
1709 	   x_return_status := FND_API.G_RET_STS_ERROR;
1710            Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
1711   		              	     p_token_v     => TO_CHAR(p_urgency_id),
1712 			      	     p_token_p     => p_parameter_name,
1713                                      p_table_name  => G_TABLE_NAME,
1714                                      p_column_name => 'URGENCY_ID' );
1715 	WHEN OTHERS THEN
1716 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
1717 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
1718 	      fnd_msg_pub.ADD;
1719 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1720 
1721     END;
1722   END Validate_Urgency;
1723 
1724 
1725 /*
1726 ** Validate_Closed_Date
1727 ** 1. The closed date is validated against the service request date.
1728 **    Therefore, this procedure takes in the service request date as a
1729 **    parameter.
1730 ** 2. Verify that the closed date is later than the service request date.
1731 */
1732   PROCEDURE Validate_Closed_Date
1733   ( p_api_name             IN   VARCHAR2,
1734     p_parameter_name       IN   VARCHAR2,
1735     p_closed_date          IN   DATE,
1736     p_request_date         IN   DATE,
1737     x_return_status        OUT  NOCOPY VARCHAR2
1738   )
1739   IS
1740  l_api_name        CONSTANT VARCHAR2(30)    := 'Validate_Closed_Date';
1741  l_api_name_full   CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
1742 
1743 
1744   BEGIN
1745     IF p_closed_date >= p_request_date THEN
1746       x_return_status := FND_API.G_RET_STS_SUCCESS;
1747     ELSE
1748       x_return_status := FND_API.G_RET_STS_ERROR;
1749       Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
1750   	              	        p_token_v     => TO_CHAR(p_closed_date),
1751   		     		p_token_p     => p_parameter_name,
1752                                 p_table_name  => G_TABLE_NAME ,
1753                                 p_column_name => 'CLOSED_DATE' );
1754     END IF;
1755 
1756   EXCEPTION
1757 	WHEN OTHERS THEN
1758 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
1759 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
1760 	      fnd_msg_pub.ADD;
1761 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1762 
1763   END Validate_Closed_Date;
1764 
1765 ---- Added for Enh# 1830701
1766   PROCEDURE Validate_Inc_Reported_Date
1767   ( p_api_name             IN   VARCHAR2,
1768     p_parameter_name       IN   VARCHAR2,
1769     p_request_date         IN   DATE,
1770     p_inc_occurred_date    IN   DATE,
1771     x_return_status        OUT  NOCOPY VARCHAR2
1772   )
1773   IS
1774  l_api_name       CONSTANT VARCHAR2(30)    := 'Validate_Inc_Reported_Date';
1775  l_api_name_full  CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
1776 
1777   BEGIN
1778   /* p_request_date is the incident date and the incident date
1779      should be greater than and equal to the incident occured_date*/
1780 
1781     IF p_request_date >= p_inc_occurred_date THEN
1782       x_return_status := FND_API.G_RET_STS_SUCCESS;
1783     ELSE
1784       x_return_status := FND_API.G_RET_STS_ERROR;
1785        fnd_message.set_name ('CS','CS_INC_DATES_MISMATCH');
1786        fnd_message.set_token ('INCIDENT_DATE',TO_CHAR(p_request_date));
1787        fnd_message.set_token ('INCIDENT_OCC_DATE',TO_CHAR(p_inc_occurred_date));
1788        FND_MSG_PUB.ADD;
1789     END IF;
1790   EXCEPTION
1791 	WHEN OTHERS THEN
1792 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
1793 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
1794 	      fnd_msg_pub.ADD;
1795 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1796 
1797   END Validate_Inc_Reported_Date;
1798 
1799   PROCEDURE Validate_Inc_Occurred_Date
1800   ( p_api_name             IN   VARCHAR2,
1801     p_parameter_name       IN   VARCHAR2,
1802     p_inc_occurred_date    IN   DATE,
1803     p_request_date         IN   DATE,
1804     x_return_status        OUT  NOCOPY VARCHAR2
1805   )
1806   IS
1807   l_api_name         CONSTANT VARCHAR2(30)    := 'Validate_Inc_Occurred_Date';
1808   l_api_name_full    CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
1809 
1810   BEGIN
1811     IF p_inc_occurred_date <= p_request_date THEN
1812       x_return_status := FND_API.G_RET_STS_SUCCESS;
1813     ELSE
1814       x_return_status := FND_API.G_RET_STS_ERROR;
1815        fnd_message.set_name ('CS','CS_INC_DATES_MISMATCH');
1816        fnd_message.set_token ('INCIDENT_DATE',TO_CHAR(p_request_date));
1817        fnd_message.set_token ('INCIDENT_OCC_DATE',TO_CHAR(p_inc_occurred_date));
1818        FND_MSG_PUB.ADD;
1819     END IF;
1820   EXCEPTION
1821 	WHEN OTHERS THEN
1822 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
1823 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
1824 	      fnd_msg_pub.ADD;
1825 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1826 
1827   END Validate_Inc_Occurred_Date;
1828 
1829   PROCEDURE Validate_Inc_Resolved_Date
1830   ( p_api_name             IN   VARCHAR2,
1831     p_parameter_name       IN   VARCHAR2,
1832     p_inc_resolved_date    IN   DATE,
1833     p_request_date         IN   DATE,
1834     x_return_status        OUT  NOCOPY VARCHAR2
1835   )
1836   IS
1837  l_api_name        CONSTANT VARCHAR2(30)    := 'Validate_Inc_Resolved_Date';
1838  l_api_name_full   CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
1839 
1840   BEGIN
1841     IF p_inc_resolved_date >= p_request_date THEN
1842       x_return_status := FND_API.G_RET_STS_SUCCESS;
1843     ELSE
1844       x_return_status := FND_API.G_RET_STS_ERROR;
1845       Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
1846   	              	        p_token_v     => TO_CHAR(p_inc_resolved_date),
1847   			      	p_token_p     => p_parameter_name,
1848                                 p_table_name  => G_TABLE_NAME,
1849                                 p_column_name => 'INCIDENT_RESOLVED_DATE' );
1850     END IF;
1851   EXCEPTION
1852 	WHEN OTHERS THEN
1853 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
1854 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
1855 	      fnd_msg_pub.ADD;
1856 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1857 
1858   END Validate_Inc_Resolved_Date;
1859 
1860   PROCEDURE Validate_Inc_Responded_Date
1861   ( p_api_name               IN   VARCHAR2,
1862     p_parameter_name         IN   VARCHAR2,
1863     p_inc_responded_by_date  IN   DATE,
1864     p_request_date           IN   DATE,
1865     x_return_status          OUT  NOCOPY VARCHAR2
1866   )
1867   IS
1868   l_api_name          CONSTANT VARCHAR2(30)    := 'Validate_Inc_Responded_Date';
1869   l_api_name_full     CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
1870 
1871   BEGIN
1872     IF p_inc_responded_by_date >= p_request_date THEN
1873       x_return_status := FND_API.G_RET_STS_SUCCESS;
1874     ELSE
1875       x_return_status := FND_API.G_RET_STS_ERROR;
1876       Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
1877   	              	        p_token_v     => TO_CHAR(p_inc_responded_by_date),
1878   			      	p_token_p     => p_parameter_name,
1879                                 p_table_name  => G_TABLE_NAME,
1880                                 p_column_name => 'INC_RESPONDED_BY_DATE' );
1881     END IF;
1882   EXCEPTION
1883 	WHEN OTHERS THEN
1884 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
1885 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
1886 	      fnd_msg_pub.ADD;
1887 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1888 
1889   END Validate_Inc_Responded_Date;
1890 
1891 ---- Added for Enh# 1830701
1892 -- -----------------------------------------------------------------------------
1893 -- Modification History
1894 -- Date     Name     Desc
1895 -- -------- -------- -----------------------------------------------------------
1896 -- 12/14/05 smisra   Bug 4386879
1897 --                   Added a new out param x_incident_country and set it based
1898 --                   on country associated with location
1899 -- -----------------------------------------------------------------------------
1900   PROCEDURE Validate_Inc_Location_Id
1901   ( p_api_name             	IN   VARCHAR2,
1902     p_parameter_name       	IN   VARCHAR2,
1903     -- New parameter added for validation based on location type --anmukher -- 08/18/03
1904     p_incident_location_type	IN   VARCHAR2,
1905     p_incident_location_id 	IN   NUMBER,
1906     x_incident_country          OUT  NOCOPY VARCHAR2,
1907     x_return_status        	OUT  NOCOPY VARCHAR2
1908   )
1909   IS
1910     l_api_name                   CONSTANT VARCHAR2(30)    := 'Validate_Inc_Location_Id';
1911     l_api_name_full              CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
1912 
1913     -- Added for validation based on location type --anmukher -- 08/18/03
1914     e_invalid_location_type	 EXCEPTION;
1915 
1916   BEGIN
1917 
1918     -- Initialize Return Status to SUCCESS
1919     x_return_status := FND_API.G_RET_STS_SUCCESS;
1920 
1921     BEGIN
1922     -- IF block added for validation based on location type --anmukher -- 08/18/03
1923       If p_incident_location_type = 'HZ_LOCATION' Then
1924 
1925 	  SELECT country INTO x_incident_country
1926 	  FROM  hz_locations
1927 	  WHERE location_id = p_incident_location_id;
1928       Elsif p_incident_location_type = 'HZ_PARTY_SITE' Then
1929 
1930           SELECT b.country INTO x_incident_country
1931 	  FROM   hz_party_sites a,
1932                  hz_locations b
1933           WHERE  party_site_id = p_incident_location_id
1934             AND  a.location_id = b.location_id;
1935 
1936        Else
1937 
1938            RAISE e_invalid_location_type;
1939 
1940        End If;
1941 
1942 
1943     EXCEPTION
1944 	WHEN NO_DATA_FOUND THEN
1945 	   x_return_status := FND_API.G_RET_STS_ERROR;
1946            Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
1947   		              	     p_token_v     => TO_CHAR(p_incident_location_id),
1948 			      	     p_token_p     => p_parameter_name,
1949                                      p_table_name  => G_TABLE_NAME ,
1950                                      p_column_name => 'INCIDENT_LOCATION_ID' );
1951         -- Added for validation based on location type --anmukher -- 08/18/03
1952         WHEN e_invalid_location_type THEN
1953 	   x_return_status := FND_API.G_RET_STS_ERROR;
1954            Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
1955   		              	     p_token_v     => p_incident_location_type,
1956 			      	     p_token_p     => 'p_incident_location_type',
1957                                      p_table_name  => G_TABLE_NAME ,
1958                                      p_column_name => 'INCIDENT_LOCATION_TYPE' );
1959 	WHEN OTHERS THEN
1960 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
1961 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
1962 	      fnd_msg_pub.ADD;
1963 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1964 
1965     END;
1966   END Validate_Inc_Location_Id;
1967 
1968   PROCEDURE Validate_Incident_Country
1969   ( p_api_name             IN   VARCHAR2,
1970     p_parameter_name       IN   VARCHAR2,
1971     p_incident_country     IN   VARCHAR2,
1972     x_return_status        OUT  NOCOPY VARCHAR2
1973   )
1974   IS
1975   l_dummy              VARCHAR2(1);
1976   l_api_name           CONSTANT VARCHAR2(30)    := 'Validate_Incident_Country';
1977   l_api_name_full      CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
1978 
1979   BEGIN
1980 
1981     -- Initialize Return Status to SUCCESS
1982     x_return_status := FND_API.G_RET_STS_SUCCESS;
1983 
1984     BEGIN
1985 	  SELECT 'x' INTO l_dummy
1986 	  FROM  fnd_territories
1987 	  WHERE territory_code = p_incident_country;
1988 
1989     EXCEPTION
1990 	WHEN NO_DATA_FOUND THEN
1991 	   x_return_status := FND_API.G_RET_STS_ERROR;
1992            Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
1993   		              	     p_token_v     => p_incident_country,
1994 			      	     p_token_p     => p_parameter_name,
1995                                      p_table_name  => G_TABLE_NAME,
1996                                      p_column_name => 'INCIDENT_COUNTRY' );
1997 	WHEN OTHERS THEN
1998 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
1999 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
2000 	      fnd_msg_pub.ADD;
2001 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2002 
2003     END;
2004   END Validate_Incident_Country;
2005 
2006 -------------------------------------------------------------------------------
2007 -- Validate_Employee
2008 -- Verify that the employee is valid and active.
2009 -- Made the LOV query and cursor query in sync.by shijain dated 11th oct 2002
2010 
2011 -------------------------------------------------------------------------------
2012 -- -----------------------------------------------------------------------------
2013 -- Modification History
2014 -- Date     Name     Desc
2015 -- -------- -------- -----------------------------------------------------------
2016 -- 12/12/05 smisra   Contingent worker support project
2017 --                   replaced the view per_employees_x with per_workforce_x so
2018 --                   that emaployee and temp worker could be SR contact
2019 -- -----------------------------------------------------------------------------
2020 PROCEDURE Validate_Employee
2021 ( p_api_name		IN	VARCHAR2,
2022   p_parameter_name	IN	VARCHAR2,
2023   p_employee_id		IN	NUMBER,
2024   p_org_id		IN	NUMBER   := NULL,
2025   p_employee_name	OUT	NOCOPY VARCHAR2,
2026   x_return_status	OUT	NOCOPY VARCHAR2
2027 )
2028 IS
2029   l_orig_org_id		NUMBER;
2030   l_dummy  	       VARCHAR2(1);
2031   l_api_name           CONSTANT VARCHAR2(30)    := 'Validate_Employee';
2032   l_api_name_full      CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
2033 
2034  CURSOR employee IS
2035  SELECT  'x'
2036  FROM per_workforce_x hr
2037  WHERE hr.person_id = p_employee_id
2038  AND NVL(hr.termination_date,SYSDATE) >= SYSDATE;
2039 
2040 BEGIN
2041   -- Initialize return status to success
2042   x_return_status := FND_API.G_RET_STS_SUCCESS;
2043 
2044   OPEN employee;
2045   FETCH employee INTO l_dummy;
2046   IF (employee%NOTFOUND) THEN
2047     x_return_status := FND_API.G_RET_STS_ERROR;
2048     CLOSE employee;
2049 
2050     RAISE NO_DATA_FOUND;
2051   END IF;
2052   CLOSE employee;
2053 
2054 EXCEPTION
2055     WHEN NO_DATA_FOUND THEN
2056       x_return_status := FND_API.G_RET_STS_ERROR;
2057 	Add_Invalid_Argument_Msg
2058 	          ( p_token_an    => l_api_name_full,
2059                     p_token_v     => TO_CHAR(p_employee_id),
2060 	            p_token_p     => p_parameter_name,
2061                     p_table_name  => G_TABLE_NAME,
2062                     p_column_name => 'EMPLOYEE_ID' );
2063 
2064     WHEN OTHERS THEN
2065 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
2066 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
2067 	      fnd_msg_pub.ADD;
2068 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2069 END Validate_Employee;
2070 
2071 -- --------------------------------------------------------------------------------
2072 -- Validate_Customer
2073 --	verify that the given customer is a valid and active customer.
2074 --      Check that the party_type of the Customer is same as the passed Caller_type (Bug 3666089)
2075 -- --------------------------------------------------------------------------------
2076   PROCEDURE Validate_Customer (
2077 	p_api_name			IN   VARCHAR2,
2078 	p_parameter_name		IN   VARCHAR2,
2079 	p_customer_id			IN   NUMBER,
2080 	p_caller_type                   IN   VARCHAR2,      --Bug 3666089
2081 	x_return_status			OUT  NOCOPY VARCHAR2
2082   ) IS
2083 
2084 -- l_dummy 	VARCHAR2(1);
2085  l_party_type     VARCHAR2(30);     -- Bug 3666089
2086  l_api_name                   CONSTANT VARCHAR2(30)    := 'Validate_Customer';
2087  l_api_name_full              CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
2088 
2089  --For bug 2885111
2090  l_associated_col1  VARCHAR2(240);
2091  l_token_v VARCHAR2(4000);
2092 
2093   BEGIN
2094     -- Initialize Return Status to SUCCESS
2095     x_return_status := FND_API.G_RET_STS_SUCCESS;
2096 
2097     --For bug 2885111
2098     l_associated_col1 := G_TABLE_NAME ||'.'||'CUSTOMER_ID';
2099     l_token_v := TO_CHAR(p_customer_id);
2100 
2101     BEGIN
2102 	SELECT party_type INTO l_party_type    -- Bug 3666089
2103 	  FROM  hz_parties a
2104 	  WHERE a.party_id = p_customer_id
2105 	  AND	a.status = 'A'
2106           AND   a.party_type IN ('ORGANIZATION','PERSON');
2107 
2108     EXCEPTION
2109 	WHEN NO_DATA_FOUND THEN
2110 		   x_return_status := FND_API.G_RET_STS_ERROR;
2111 
2112 		   -- For bug 2885111 - adding a new error message
2113 		    FND_MESSAGE.Set_Name('CS', 'CS_SR_INVALID_CUSTOMER');
2114 		    FND_MESSAGE.Set_Token('API_NAME', l_api_name_full);
2115 		    FND_MESSAGE.Set_Token('VALUE',l_token_v);
2116 		    FND_MESSAGE.Set_Token('P_NAME', p_parameter_name);
2117 		    FND_MSG_PUB.ADD_DETAIL(p_associated_column1 => l_associated_col1);
2118 
2119 
2120           /* Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
2121   		              	     p_token_v     => TO_CHAR(p_customer_id),
2122 		      	     	     p_token_p     => p_parameter_name,
2123                                      p_table_name  => G_TABLE_NAME,
2124                                      p_column_name => 'CUSTOMER_ID' ); */
2125 	WHEN OTHERS THEN
2126 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
2127 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
2128 	      fnd_msg_pub.ADD;
2129 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2130 
2131     END;
2132     --Addition for 3666089 starts
2133     IF (l_party_type <> p_caller_type) THEN
2134         x_return_status := FND_API.G_RET_STS_ERROR;
2135         FND_MESSAGE.Set_Name('CS', 'CS_SR_INVALID_CUST_TYPE');
2136         FND_MSG_PUB.ADD; --3666089 (Jun 15)
2137     END IF;
2138     --Addition for 3666089 Ends
2139 
2140   END Validate_Customer;
2141 
2142 /*
2143 ** Validate_Bill_To_Ship_To_Ct - validate_bill_to_ship_to_contact
2144 ** 1. Same procedure will be used to Validate Bill_To and Ship_To Contacts
2145 ** 2. Contat can be
2146 **    a. If Bill_to_customer is person , contact can be same person (Self)
2147 **    b. If bill_to_customer is person or Org, Contact can be a Relationship
2148 **       between the Bill_To Customer and a Person
2149 */
2150 
2151 PROCEDURE Validate_Bill_To_Ship_To_Ct (
2152    p_api_name             IN   VARCHAR2,
2153    p_parameter_name       IN   VARCHAR2,
2154    p_bill_to_contact_id   IN   NUMBER,
2155    p_bill_to_party_id     IN   NUMBER,
2156    p_customer_type	  IN   VARCHAR2,
2157    x_return_status        OUT  NOCOPY VARCHAR2 )
2158 IS
2159    l_dummy  VARCHAR2(1);
2160    l_api_name         CONSTANT VARCHAR2(30) := 'Validate_Bill_To_Ship_To_Ct';
2161    l_api_name_full    CONSTANT VARCHAR2(70) := G_PKG_NAME||'.'||l_api_name;
2162    l_party_type       hz_parties.party_type % type;
2163 
2164    CURSOR bill_to_party_type_csr is
2165      SELECT party_type from hz_parties
2166       WHERE party_id = p_bill_to_party_id;
2167 
2168    CURSOR validate_bill_to_contact_csr IS
2169    SELECT 'x'
2170    FROM    Hz_Parties sub,
2171            Hz_Relationships r
2172    WHERE r.object_id    = p_bill_to_party_id
2173    AND   r.party_id     = p_bill_to_contact_id
2174    AND   sub.status     = 'A'
2175    AND   r.status       = 'A'
2176    AND   r.subject_id   = sub.party_id
2177    AND   sub.party_type = 'PERSON'
2178    AND   NVL(r.start_date, SYSDATE-1) < SYSDATE
2179    AND   NVL(r.end_date, SYSDATE+1) > SYSDATE;
2180 
2181 BEGIN
2182    -- Initialize the return status.
2183    x_return_status := FND_API.G_RET_STS_SUCCESS;
2184 
2185    /*
2186    IF (p_bill_to_party_id = p_bill_to_contact_id AND
2187       p_customer_type = 'PERSON')           THEN
2188       x_return_status := FND_API.G_RET_STS_SUCCESS;
2189    */
2190    /* if bill_to_party_id is same as bill_to_contact_id then bill_to_party_id
2191       has to be of type PERSON because contact has has to be of type PERSON
2192       2/11/04 smisra Bug 3379631
2193       Above 3 lines are replaced by 10 following lines
2194    */
2195    IF (p_bill_to_party_id = p_bill_to_contact_id) then
2196       OPEN bill_to_party_type_csr;
2197       FETCH bill_to_party_type_csr into l_party_type;
2198       CLOSE bill_to_party_type_csr;
2199       IF (l_party_type <> 'PERSON') then
2200          x_return_status := FND_API.G_RET_STS_ERROR;
2201          RAISE NO_DATA_FOUND;
2202       END IF;
2203    ELSE
2204       OPEN validate_bill_to_contact_csr;
2205       FETCH validate_bill_to_contact_csr INTO l_dummy;
2206 
2207       IF (validate_bill_to_contact_csr%NOTFOUND) THEN
2208          x_return_status := FND_API.G_RET_STS_ERROR;
2209          CLOSE validate_bill_to_contact_csr;
2210          RAISE NO_DATA_FOUND;
2211       END IF;
2212 
2213       CLOSE validate_bill_to_contact_csr;
2214    END IF;
2215 
2216 EXCEPTION
2217    WHEN NO_DATA_FOUND THEN
2218       x_return_status := FND_API.G_RET_STS_ERROR;
2219       Add_Invalid_Argument_Msg(p_token_an    => l_api_name_full,
2220          p_token_v     => TO_CHAR(p_bill_to_contact_id),
2221          p_token_p     => p_parameter_name ,
2222          p_table_name  => G_TABLE_NAME,
2223          p_column_name => 'BILL_TO_CONTACT_ID' );
2224 
2225    WHEN OTHERS THEN
2226       fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
2227       fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
2228       fnd_msg_pub.ADD;
2229       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2230 
2231 END Validate_Bill_To_Ship_To_Ct;
2232 
2233 
2234 /*
2235 ** Validate_Customer_Contact
2236 ** 1. The validation of the customer contact depends on the value of the
2237 **    service request customer. Therefore, the service request customer is
2238 **    passed in as a parameter.
2239 ** 2. Since customer relationships is a multi-org entity, this procedure
2240 **    accepts ORG_ID as a parameter.
2241 ** 3. Verify that the contact is an active contact within the operating unit.
2242 ** 4. Verify that the contact belongs to the service request customer, or one
2243 **    of its related customers.
2244 ** 5. Made the LOV query and the validation in sync, dated oct 11th 2002 by
2245 **    shijain, also the union part is removed from the cursor to check the
2246 **    self condition as in that case the customer is already valid.
2247 ** 6. Added one more in parameter as p_customer_type, to get the header
2248 **    customer_type by shijain.
2249 *
2250 **** Commented and replaced by Validate_bill_To_contact in 11.5.9 */
2251 PROCEDURE Validate_Customer_Contact
2252 ( p_api_name             IN   VARCHAR2,
2253   p_parameter_name       IN   VARCHAR2,
2254   p_customer_contact_id  IN   NUMBER,
2255   p_customer_id  	 IN   NUMBER,
2256   p_org_id               IN   NUMBER     := NULL,
2257   p_customer_type        IN   VARCHAR2,
2258   x_return_status        OUT  NOCOPY VARCHAR2 )
2259 IS
2260    l_dummy  VARCHAR2(1);
2261    l_api_name          CONSTANT VARCHAR2(30) := 'Validate_Customer_Contact';
2262    l_api_name_full     CONSTANT VARCHAR2(70) := G_PKG_NAME||'.'||l_api_name;
2263 
2264    CURSOR validate_bill_to_contact_csr IS
2265    SELECT 'x'
2266    FROM    Hz_Parties sub,
2267    Hz_Relationships r
2268    WHERE r.object_id = p_customer_id
2269    AND   r.party_id  = p_customer_contact_id
2270    AND   sub.status  = 'A'
2271    AND   r.status    = 'A'
2272    AND   r.subject_id = sub.party_id
2273    AND   sub.party_type = 'PERSON'
2274    AND   NVL(r.start_date, SYSDATE-1) < SYSDATE
2275    AND   NVL(r.end_date, SYSDATE+1) > SYSDATE;
2276 
2277 BEGIN
2278    -- Initialize the return status.
2279    x_return_status := FND_API.G_RET_STS_SUCCESS;
2280 
2281    IF ( p_customer_id = p_customer_contact_id AND
2282 	p_customer_type = 'PERSON')  THEN
2283       x_return_status := FND_API.G_RET_STS_SUCCESS;
2284    ELSE
2285       OPEN validate_bill_to_contact_csr;
2286       FETCH validate_bill_to_contact_csr INTO l_dummy;
2287 
2288       IF (validate_bill_to_contact_csr%NOTFOUND) THEN
2289          x_return_status := FND_API.G_RET_STS_ERROR;
2290          CLOSE validate_bill_to_contact_csr;
2291          RAISE NO_DATA_FOUND;
2292       END IF;
2293 
2294       CLOSE validate_bill_to_contact_csr;
2295 
2296    END IF;
2297 EXCEPTION
2298    WHEN NO_DATA_FOUND THEN
2299       x_return_status := FND_API.G_RET_STS_ERROR;
2300       Add_Invalid_Argument_Msg(
2301 	 p_token_an    => l_api_name_full,
2302          p_token_v     => TO_CHAR(p_customer_contact_id),
2303          p_token_p     => p_parameter_name,
2304          p_table_name  => G_TABLE_NAME,
2305          p_column_name => 'CUSTOMER_CONTACT_ID' );
2306 
2307    WHEN OTHERS THEN
2308       fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
2309       fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
2310       fnd_msg_pub.ADD;
2311       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2312 
2313 END Validate_Customer_Contact;
2314 
2315 --Procedure added to support contacts of type relation
2316 --Added on Jan 22nd 2001
2317 -- Made the LOV query and cursor query in sync.by shijain dated 11th oct 2002
2318 
2319 -- 06/06/06 spusegao Modified the WHERE clause 'AND NVL(r.start_date, SYSDATE-1) < SYSDATE' to
2320 --                   'AND NVL(r.start_date, SYSDATE-1) <= SYSDATE' for bug # 5216551.
2321 
2322 PROCEDURE Validate_Org_Relationship
2323 ( p_api_name             IN   VARCHAR2,
2324   p_parameter_name       IN   VARCHAR2,
2325   p_customer_contact_id  IN   NUMBER,
2326   p_customer_id  	 IN   NUMBER,
2327   p_org_id               IN   NUMBER     := NULL,
2328   x_return_status        OUT  NOCOPY VARCHAR2
2329 )
2330 IS
2331     l_dummy  VARCHAR2(1);
2332   	l_api_name                   CONSTANT VARCHAR2(30)    := 'Validate_Org_Relationship';
2333     l_api_name_full              CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
2334 
2335   CURSOR party_relationship IS
2336   SELECT 'x'
2337   FROM    Hz_Parties sub,
2338           Hz_Relationships r,
2339           Hz_Parties obj
2340   WHERE r.object_id = p_customer_id
2341   AND   r.party_id  = p_customer_contact_id
2342   AND   sub.status = 'A'
2343   AND   r.status   = 'A'
2344   AND   obj.status = 'A'
2345   AND   r.subject_id = sub.party_id
2346   AND   r.object_id  = obj.party_id
2347   AND   sub.party_type = 'PERSON'
2348   AND   obj.party_type = 'ORGANIZATION'
2349   AND   NVL(r.start_date, SYSDATE-1) <= SYSDATE
2350   AND   NVL(r.end_date, SYSDATE+1) > SYSDATE;
2351 
2352 BEGIN
2353   -- Initialize the return status.
2354   x_return_status := FND_API.G_RET_STS_SUCCESS;
2355 
2356   OPEN party_relationship;
2357   FETCH party_relationship INTO l_dummy;
2358 
2359   IF (party_relationship%NOTFOUND) THEN
2360     x_return_status := FND_API.G_RET_STS_ERROR;
2361     CLOSE party_relationship;
2362     RAISE NO_DATA_FOUND;
2363   END IF;
2364 
2365   CLOSE party_relationship;
2366 
2367 EXCEPTION
2368    WHEN NO_DATA_FOUND THEN
2369        	  x_return_status := FND_API.G_RET_STS_ERROR;
2370     	  Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
2371 	              	      	    p_token_v     => TO_CHAR(p_customer_contact_id),
2372 				    p_token_p     => p_parameter_name,
2373                                     p_table_name  => G_TABLE_NAME,
2374                                     p_column_name => 'CUSTOMER_CONTACT_ID' );
2375    WHEN OTHERS THEN
2376 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
2377 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
2378 	      fnd_msg_pub.ADD;
2379 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2380 
2381 END Validate_Org_Relationship;
2382 
2383 -- Made the LOV query and cursor query in sync.by shijain dated 11th oct 2002
2384 
2385 PROCEDURE Validate_Person_Relationship
2386 ( p_api_name             IN   VARCHAR2,
2387   p_parameter_name       IN   VARCHAR2,
2388   p_customer_contact_id  IN   NUMBER,
2389   p_customer_id  	 IN   NUMBER,
2390   p_org_id               IN   NUMBER     := NULL,
2391   x_return_status        OUT  NOCOPY VARCHAR2
2392 )
2393 IS
2394     l_dummy  VARCHAR2(1);
2395   	l_api_name                   CONSTANT VARCHAR2(30)    := 'Validate_Person_Relationship';
2396     l_api_name_full              CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
2397 
2398   CURSOR party_relationship_per IS
2399   SELECT 'x'
2400   FROM    Hz_Parties sub,
2401           Hz_Relationships r,
2402           Hz_Parties obj
2403   WHERE r.object_id = p_customer_id
2404   AND   r.party_id  = p_customer_contact_id
2405   AND   sub.status = 'A'
2406   AND   r.status   = 'A'
2407   AND   obj.status = 'A'
2408   AND   r.subject_id = sub.party_id
2409   AND   r.object_id  = obj.party_id
2410   AND   sub.party_type = 'PERSON'
2411   AND   obj.party_type = 'PERSON'
2412   -- Made below changes as per bug6629807 put <= instead of < rtripath 12/30/2007
2413   AND   NVL(r.start_date, SYSDATE-1) <= SYSDATE
2414   AND   NVL(r.end_date, SYSDATE+1) > SYSDATE;
2415 
2416 BEGIN
2417   -- Initialize the return status.
2418   x_return_status := FND_API.G_RET_STS_SUCCESS;
2419 
2420   IF p_customer_id = p_customer_contact_id THEN
2421       x_return_status := FND_API.G_RET_STS_SUCCESS;
2422   ELSE
2423       OPEN party_relationship_per;
2424       FETCH party_relationship_per INTO l_dummy;
2425       IF (party_relationship_per%NOTFOUND) THEN
2426           x_return_status := FND_API.G_RET_STS_ERROR;
2427           CLOSE party_relationship_per;
2428 
2429           RAISE NO_DATA_FOUND;
2430       END IF;
2431       CLOSE party_relationship_per;
2432    END IF;
2433 
2434 EXCEPTION
2435         WHEN NO_DATA_FOUND THEN
2436     	  x_return_status := FND_API.G_RET_STS_ERROR;
2437     	  Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
2438 	              	      	    p_token_v     => TO_CHAR(p_customer_contact_id),
2439 				    p_token_p     => p_parameter_name,
2440                                     p_table_name  => G_TABLE_NAME,
2441                                     p_column_name => 'CUSTOMER_CONTACT_ID' );
2442 	WHEN OTHERS THEN
2443 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
2444 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
2445 	      fnd_msg_pub.ADD;
2446 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2447 
2448 END Validate_Person_Relationship;
2449 
2450 -----------------------------------------------------------------------------
2451 -- Validate_Customer_Product
2452 --   1. Since the installed base is a multi-org entity, this procedure accepts
2453 --      ORG_ID as a parameter.
2454 --   2. Verify that the customer pro
2455 -----------------------------------------------------------------------------
2456 PROCEDURE Validate_Customer_Product
2457 ( p_api_name		IN	VARCHAR2,
2458   p_parameter_name	IN	VARCHAR2,
2459   p_customer_product_id	IN	NUMBER,
2460   p_org_id		IN	NUMBER	:= NULL,
2461   p_customer_id		IN 	NUMBER,
2462   p_inventory_item_id	OUT	NOCOPY NUMBER,
2463   p_inventory_org_id    IN      NUMBER,
2464   x_return_status	OUT	NOCOPY VARCHAR2 )
2465 IS
2466    l_api_name         CONSTANT VARCHAR2(30) := 'Validate_Customer_Product';
2467    l_api_name_full    CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_api_name;
2468 
2469 BEGIN
2470    -- Initialize the return status.
2471    x_return_status := FND_API.G_RET_STS_SUCCESS;
2472 
2473    -- Changes made by shijain dec 4th 2002, added the check if the profile
2474    -- value of cs_sr_restrict_ib is yes then check for hz_party_sites and
2475    -- hz_locations else don't need to check anything
2476 
2477    IF CS_ServiceRequest_PVT.g_restrict_ib = 'YES' THEN
2478       SELECT a.inventory_item_id
2479       INTO   p_inventory_item_id
2480       FROM   csi_item_instances a,
2481       mtl_system_items_b b,
2482       csi_i_parties cip
2483       WHERE  a.instance_id = p_customer_product_id
2484       --AND a.owner_party_id = p_customer_id
2485       AND cip.party_id = p_customer_id
2486       AND TRUNC(SYSDATE) BETWEEN TRUNC(NVL(a.active_start_date,SYSDATE))
2487       AND TRUNC(NVL(a.active_end_date, SYSDATE))
2488       AND a.location_type_code IN ('HZ_PARTY_SITES','HZ_LOCATIONS')
2489       AND a.owner_party_source_table = 'HZ_PARTIES'
2490       AND a.instance_id = cip.instance_id
2491       AND cip.party_source_table  = 'HZ_PARTIES'
2492       AND a.inventory_item_id = b.inventory_item_id
2493       AND b.organization_id = p_inventory_org_id
2494       -- Commented service_item_flag condition as this is not used
2495       -- anymore and added contract_item_type_code condition
2496       -- AND b.service_item_flag = 'N'
2497       -- For ER 3701924
2498       -- AND contract_item_type_code IS NULL
2499       AND b.enabled_flag  = 'Y'
2500       -- Added for Bug# 2167129,2175917
2501       AND b.serv_req_enabled_code = 'E'
2502       AND TRUNC(SYSDATE) BETWEEN TRUNC(NVL(b.start_date_active, SYSDATE))
2503       AND TRUNC(NVL(b.end_date_active, SYSDATE))
2504       AND rownum<2;
2505    ELSE
2506       SELECT a.inventory_item_id
2507       INTO   p_inventory_item_id
2508       FROM   csi_item_instances a,
2509       mtl_system_items_b b,
2510       csi_i_parties cip
2511       WHERE  a.instance_id = p_customer_product_id
2512       -- AND a.owner_party_id = p_customer_id
2513       AND cip.party_id = p_customer_id
2514       AND TRUNC(SYSDATE) BETWEEN TRUNC(NVL(a.active_start_date,SYSDATE))
2515       AND TRUNC(NVL(a.active_end_date, SYSDATE))
2516       AND a.owner_party_source_table = 'HZ_PARTIES'
2517       AND a.instance_id = cip.instance_id
2518       AND cip.party_source_table  = 'HZ_PARTIES'
2519       AND a.inventory_item_id = b.inventory_item_id
2520       AND b.organization_id = p_inventory_org_id
2521       -- Commented service_item_flag condition as this is not used
2522       -- anymore and added contract_item_type_code condition
2523       -- AND b.service_item_flag = 'N'
2524       -- For ER 3701924
2525       -- AND contract_item_type_code IS NULL
2526       AND b.enabled_flag  = 'Y'
2527       -- Added for Bug# 2167129,2175917
2528       AND b.serv_req_enabled_code = 'E'
2529       AND TRUNC(SYSDATE) BETWEEN TRUNC(NVL(b.start_date_active, SYSDATE))
2530       AND TRUNC(NVL(b.end_date_active, SYSDATE))
2531       AND rownum<2;
2532    END IF;
2533 
2534 EXCEPTION
2535    WHEN NO_DATA_FOUND THEN
2536       x_return_status := FND_API.G_RET_STS_ERROR;
2537       Add_Invalid_Argument_Msg(
2538 	 p_token_an    => l_api_name_full,
2539          p_token_v     => TO_CHAR(p_customer_product_id),
2540          p_token_p     => p_parameter_name,
2541          p_table_name  => G_TABLE_NAME,
2542          p_column_name => 'CUSTOMER_PRODUCT_ID' );
2543 
2544    WHEN OTHERS THEN
2545       fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
2546       fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
2547       fnd_msg_pub.ADD;
2548       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2549 
2550 END Validate_Customer_Product;
2551 
2552 /*
2553 Modification History
2554 Date     Name     Desc
2555 -------- -------- ---------------------------------------------------------------
2556 03/25/05 smisra   Bug 4239975 Modified this procedure and removed validation of
2557                   current serial number when customer product is null and
2558                   inventory item is IB trackable.
2559 */
2560 ----------------------------------------------
2561 PROCEDURE  Validate_Current_Serial(
2562    p_api_name               IN  VARCHAR2,
2563    p_parameter_name         IN  VARCHAR2,
2564    p_inventory_item_id      IN  NUMBER   := NULL,
2565    p_inventory_org_id       IN  NUMBER,
2566    p_customer_product_id    IN  NUMBER  := NULL,
2567    p_customer_id            IN NUMBER   := NULL,
2568    p_current_serial_number  IN VARCHAR2,
2569    x_return_status          OUT  NOCOPY VARCHAR2 )
2570 IS
2571    l_dummy           VARCHAR2(1);
2572    inv_item_IB_trackable        VARCHAR2(1);
2573    l_api_name        CONSTANT VARCHAR2(30)    := 'Validate_Current_Serial';
2574    l_api_name_full   CONSTANT VARCHAR2(70)    := G_PKG_NAME||'.'||l_api_name;
2575 
2576 
2577 BEGIN
2578    -- Initialize the return status.
2579    x_return_status := FND_API.G_RET_STS_SUCCESS;
2580 
2581    --Check if installed base or not
2582    --Added a condition to fix bug# 1902127, since the script
2583    --fails while creating/updating an SR for non-IB.
2584 
2585    IF ( p_customer_product_id IS NOT NULL ) AND
2586       ( p_customer_product_id <> FND_API.G_MISS_NUM ) THEN
2587 
2588       -- Changes made by shijain dec 4th 2002, added the check if the profile
2589       -- value of cs_sr_restrict_ib is yes then check for hz_party_sites and
2590       -- hz_locations else don't need to check anything
2591 
2592       IF CS_ServiceRequest_PVT.g_restrict_ib = 'YES' THEN
2593 
2594          SELECT 'x' INTO l_dummy
2595          FROM   csi_item_instances a,
2596                 mtl_system_items_b b,
2597                 csi_i_parties cip
2598          WHERE  a.instance_id = p_customer_product_id
2599          AND a.serial_number = p_current_serial_number
2600          -- AND a.owner_party_account_id = p_customer_id
2601          AND cip.party_id = p_customer_id
2602          AND a.instance_id = cip.instance_id
2603          AND cip.party_source_table  = 'HZ_PARTIES'
2604          AND    b.serv_req_enabled_code = 'E'
2605          -- Added contract_item_type_code condition
2606 	 -- For ER 3701924
2607          -- AND contract_item_type_code IS NULL
2608          -- Added for Bug# 2167129,2175917
2609          AND a.location_type_code IN ('HZ_PARTY_SITES','HZ_LOCATIONS')
2610          AND TRUNC(SYSDATE) BETWEEN TRUNC(NVL(a.active_start_date,SYSDATE))
2611          AND TRUNC(NVL(a.active_end_date, SYSDATE))
2612          AND b.inventory_item_id = a.inventory_item_id
2613          AND b.organization_id = p_inventory_org_id
2614          AND rownum<2;
2615       ELSE
2616          SELECT 'x' INTO l_dummy
2617          FROM   csi_item_instances a,
2618                 mtl_system_items_b b,
2619                 csi_i_parties cip
2620          WHERE  a.instance_id = p_customer_product_id
2621          AND a.serial_number = p_current_serial_number
2622          -- AND a.owner_party_account_id = p_customer_id
2623          AND cip.party_id = p_customer_id
2624          AND a.instance_id = cip.instance_id
2625          AND cip.party_source_table  = 'HZ_PARTIES'
2626          AND    b.serv_req_enabled_code = 'E'
2627          -- Added contract_item_type_code condition
2628 	 -- For ER 3701924
2629          -- AND contract_item_type_code IS NULL
2630          AND TRUNC(SYSDATE) BETWEEN TRUNC(NVL(a.active_start_date,SYSDATE))
2631          AND TRUNC(NVL(a.active_end_date, SYSDATE))
2632          AND b.inventory_item_id = a.inventory_item_id
2633          AND b.organization_id = p_inventory_org_id
2634          AND rownum < 2;
2635       END IF;
2636    END IF;
2637 
2638 EXCEPTION
2639    WHEN NO_DATA_FOUND THEN
2640       x_return_status := FND_API.G_RET_STS_ERROR;
2641       Add_Invalid_Argument_Msg(p_token_an    => l_api_name_full,
2642          p_token_v     => p_current_serial_number,
2643          p_token_p     => p_parameter_name ,
2644          p_table_name  => G_TABLE_NAME,
2645          p_column_name => 'CURRENT_SERIAL_NUMBER');
2646 
2647    WHEN OTHERS THEN
2648       fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
2649       fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
2650       fnd_msg_pub.ADD;
2651       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2652 
2653 END Validate_Current_Serial;
2654 
2655 -- for cmro_eam
2656 -- ------------------------------------------------------------------------------
2657 -- Validate Inventory_Org
2658 -- 1. verify that the given inventory org is valid
2659 -- ------------------------------------------------------------------------------
2660 -- -----------------------------------------------------------------------------
2661 -- Modification History
2662 -- Date     Name     Desc
2663 -- -------- -------- -----------------------------------------------------------
2664 -- 06/09/05 smisra   Release 12 changes
2665 --                   removed parameter p_maintenance_flag and it's processing
2666 -- -----------------------------------------------------------------------------
2667 PROCEDURE Validate_Inventory_Org(
2668         p_api_name              IN VARCHAR2,
2669         p_parameter_name        IN VARCHAR2,
2670         p_inv_org_id            IN NUMBER,
2671         x_inv_org_master_org_flag OUT NOCOPY VARCHAR2,
2672         x_return_status           OUT NOCOPY VARCHAR2
2673 ) IS
2674    l_api_name                   CONSTANT VARCHAR2(30) := 'Validate_Inventory_Org';
2675    l_api_name_full              CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_api_name;
2676    l_dummy VARCHAR2(1);
2677 
2678 l_eam_enabled             mtl_parameters.eam_enabled_flag       % TYPE;
2679 l_maint_org_id            mtl_parameters.maint_organization_id  % TYPE;
2680 l_master_org_id           mtl_parameters.master_organization_id % TYPE;
2681 BEGIN
2682    -- Initialize Return Status to SUCCESS
2683     x_return_status := FND_API.G_RET_STS_SUCCESS;
2684     x_inv_org_master_org_flag := NULL;
2685 
2686   get_org_details
2687   ( p_org_id           => p_inv_org_id
2688   , x_eam_enabled_flag => l_eam_enabled
2689   , x_maint_org_id     => l_maint_org_id
2690   , x_master_org_id    => l_master_org_id
2691   , x_return_Status    => x_return_status
2692   );
2693   IF x_return_status = FND_API.G_RET_STS_ERROR
2694   THEN
2695     RAISE NO_DATA_FOUND;
2696   END IF;
2697   IF p_inv_org_id = l_master_org_id
2698   THEN
2699     x_inv_org_master_org_flag := 'Y';
2700   ELSE
2701     x_inv_org_master_org_flag := 'N';
2702   END IF;
2703 /***** replace this query ith the above procedure call 7/27/05 smisra
2704       select 'x' INTO l_dummy
2705       from mtl_parameters
2706       where organization_id = p_inv_org_id;
2707 ***/
2708 EXCEPTION
2709    WHEN NO_DATA_FOUND THEN
2710       x_return_status := FND_API.G_RET_STS_ERROR;
2711       Add_Invalid_Argument_Msg(
2712 	 p_token_an    => l_api_name_full,
2713          p_token_v     => p_inv_org_id,
2714          p_token_p     => p_parameter_name ,
2715          p_table_name  => G_TABLE_NAME,
2716          p_column_name => 'INVENTORY_ORG_ID');
2717 
2718    WHEN OTHERS THEN
2719       fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
2720       fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
2721       fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
2722       fnd_msg_pub.ADD;
2723       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2724 
2725 END Validate_Inventory_Org;
2726 
2727 -- ------------------------------------------------------------------------------
2728 -- Validate Owning Department
2729 -- 1. verfity that the departmnet is activ in bom_departments
2730 -- 2. verify that the department is vaild for the given organization
2731 -- ------------------------------------------------------------------------------
2732 PROCEDURE Validate_Owning_Department(
2733       p_api_name                IN VARCHAR2,
2734       p_parameter_name          IN VARCHAR2,
2735       p_inv_org_id              IN NUMBER,
2736       p_owning_dept_id          IN NUMBER,
2737       p_maintenance_flag        IN VARCHAR2,
2738       x_return_status           OUT NOCOPY VARCHAR2
2739     )IS
2740     l_api_name           CONSTANT VARCHAR2(30) := 'Validate_Owning_Department';
2741     l_api_name_full      CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_api_name;
2742     l_dummy VARCHAR2(1);
2743 BEGIN
2744     -- Initialize Return Status to SUCCESS
2745     x_return_status := FND_API.G_RET_STS_SUCCESS;
2746 
2747    IF (p_maintenance_flag = 'Y' or p_maintenance_flag = 'y') THEN
2748       IF (p_owning_dept_id IS NOT NULL AND
2749             p_owning_dept_id <> FND_API.G_MISS_NUM) THEN
2750          select 'x' INTO l_dummy
2751          from bom_departments b
2752          where b.department_id = p_owning_dept_id
2753          and TRUNC(NVL(b.disable_date,SYSDATE+1)) > TRUNC(SYSDATE)
2754          and b.organization_id = p_inv_org_id;
2755       END IF;
2756    END IF;
2757 
2758 EXCEPTION
2759    WHEN NO_DATA_FOUND THEN
2760       x_return_status := FND_API.G_RET_STS_ERROR;
2761       Add_Invalid_Argument_Msg(
2762 	 p_token_an    => l_api_name_full,
2763          p_token_v     => p_owning_dept_id,
2764          p_token_p     => p_parameter_name ,
2765          p_table_name  => G_TABLE_NAME,
2766          p_column_name => 'OWNING_DEPARTMENT_ID');
2767 
2768    WHEN OTHERS THEN
2769       fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
2770       fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
2771       fnd_msg_pub.ADD;
2772       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2773 
2774 END Validate_Owning_Department;
2775 
2776 -- --------------------------------------------------------------------------------
2777 -- Validate_Product
2778 -- 1. verify that the products exists in the given operating unit and the
2779 --    inventory org specified in the profile options.
2780 -- 2. ensure that the product is a serviceable item.
2781 -- --------------------------------------------------------------------------------
2782 -- -----------------------------------------------------------------------------
2783 -- Modification History
2784 -- Date     Name     Desc
2785 -- -------- -------- -----------------------------------------------------------
2786 -- 06/07/05 smisra   Release 12 changes
2787 --                   Add parameter p_maint_organization_id to perform EAM item
2788 --                   validation. Removed the existing query to validate EAM item
2789 --                   As per new validation EAM item can belong to maint org or
2790 --                   any org that is maintained by maint org.
2791 --                   Old validation logic can be seen in file version:115.221
2792 -- 08/03/05 smisra   added a new param p_inv_org_master_org_flag. if this flag
2793 --                   is Y then item can belong to any org in the master org
2794 --                   that is maintained by maint_organization_id otherwise
2795 --                   item should belong to inv org only.
2796 -- 08/25/05 smisra   gave error if maint_organization_id is G_MISS_NUM for
2797 --                   EAM SRs
2798 -- -----------------------------------------------------------------------------
2799 PROCEDURE Validate_Product
2800 ( p_api_name              IN         VARCHAR2
2801 , p_parameter_name        IN         VARCHAR2
2802 , p_inventory_item_id     IN         NUMBER
2803 , p_inventory_org_id      IN         NUMBER
2804 , x_return_status         OUT NOCOPY VARCHAR2
2805 , p_maintenance_flag      IN         VARCHAR2
2806 , p_maint_organization_id   IN         NUMBER
2807 , p_inv_org_master_org_flag IN VARCHAR2
2808 ) IS
2809 
2810 l_dummy 	VARCHAR2(1);
2811 l_api_name           CONSTANT VARCHAR2(30) := 'Validate_Product';
2812 l_api_name_full      CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_api_name;
2813 
2814 
2815 BEGIN
2816     -- Initialize Return Status to SUCCESS
2817   x_return_status := FND_API.G_RET_STS_SUCCESS;
2818   -- for cmro_eam
2819   IF (p_maintenance_flag = 'Y' or p_maintenance_flag = 'y') THEN
2820     IF p_maint_organization_id IS NULL OR
2821        p_maint_organization_id = FND_API.G_MISS_NUM
2822     THEN
2823       x_return_status := FND_API.G_RET_STS_ERROR;
2824       Add_Null_Parameter_Msg
2825       ( p_token_an    => l_api_name_full
2826       , p_token_np    => 'p_maint_organization_id'
2827       , p_table_name  => G_TABLE_NAME
2828       , p_column_name => 'MAINT_ORGANIZATION_ID'
2829       );
2830     ELSIF p_inv_org_master_org_flag = 'Y'
2831     THEN
2832       SELECT 'X'
2833       INTO   l_dummy
2834       FROM   mtl_system_items_b msi,
2835              mtl_parameters     mp
2836       WHERE  msi.inventory_item_id     = p_inventory_item_id
2837         AND  msi.enabled_flag          = 'Y'
2838         AND  msi.serv_req_enabled_code = 'E'
2839         AND  msi.organization_id       = mp.organization_id
2840         AND  mp.maint_organization_id  = p_maint_organization_id
2841         AND  mp.master_organization_id = p_inventory_org_id
2842         AND  msi.eam_item_type IN (1,3)
2843         AND  TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
2844                                 AND TRUNC(NVL(end_date_active  , SYSDATE))
2845         AND  rownum = 1;
2846     ELSE
2847       SELECT 'X'
2848       INTO   l_dummy
2849       FROM   mtl_system_items_b msi,
2850              mtl_parameters     mp
2851       WHERE  msi.inventory_item_id     = p_inventory_item_id
2852         AND  msi.enabled_flag          = 'Y'
2853         AND  msi.serv_req_enabled_code = 'E'
2854         AND  msi.organization_id       = mp.organization_id
2855         AND  mp.maint_organization_id  = p_maint_organization_id
2856         AND  mp.organization_id = p_inventory_org_id
2857         AND  msi.eam_item_type IN (1,3)
2858         AND  TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
2859                                 AND TRUNC(NVL(end_date_active  , SYSDATE));
2860     END IF; -- end if for condition p_maint_organization_id IS NULL
2861   ELSE
2862     -- item is not EAM
2863     SELECT 'x' INTO l_dummy
2864     FROM  mtl_system_items_b msi
2865     WHERE msi.inventory_item_id     = p_inventory_item_id
2866       AND msi.enabled_flag          = 'Y'
2867       AND msi.serv_req_enabled_code = 'E'
2868       -- For ER 3701924
2869       -- AND   msi.contract_item_type_code IS NULL
2870       AND TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
2871                              AND TRUNC(NVL(end_date_active  , SYSDATE))
2872       AND msi.organization_id = p_inventory_org_id;
2873   END IF;
2874 EXCEPTION
2875   WHEN NO_DATA_FOUND THEN
2876     x_return_status := FND_API.G_RET_STS_ERROR;
2877     Add_Invalid_Argument_Msg
2878     ( p_token_an    => l_api_name_full
2879     , p_token_v     => TO_CHAR(p_inventory_item_id)
2880     , p_token_p     => p_parameter_name
2881     , p_table_name  => G_TABLE_NAME
2882     , p_column_name => 'INVENTORY_ITEM_ID'
2883     );
2884   WHEN OTHERS THEN
2885     fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
2886     fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
2887     fnd_msg_pub.ADD;
2888     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2889 END Validate_Product;
2890 
2891 
2892 -- --------------------------------------------------------------------------------
2893 -- Validate_Problem_Code
2894 --	verify that the problem code is an active problem code - same validation as UI
2895 --      First based on the parameters, check whether u find records in cs_sr_prob_code_mapping
2896 --      If 1 or more records are found
2897 --                  then verify whether the given problem code is present in the records
2898 --          Raise error if no problem code matches the given problem code
2899 --      If 0 records are found in the Query, then validate the given problem code
2900 --          agains cs_lookups
2901 -- --------------------------------------------------------------------------------
2902 --  DJ API Cleanup
2903 --  Changed the validation of Problem code to invoke the problem code
2904 --  validation api cs_sr_prob_code_mapping_pkg.validate_problem_code
2905 PROCEDURE Validate_Problem_Code (
2906 	p_api_name			 IN  VARCHAR2,
2907 	p_parameter_name		 IN  VARCHAR2,
2908 	p_problem_code 			 IN  VARCHAR2,
2909         p_incident_type_id               IN  NUMBER,
2910         p_inventory_item_id              IN  NUMBER,
2911 	p_inventory_org_id               IN  NUMBER, -- added for API cleanup
2912 	p_category_id                    IN  NUMBER, -- added for API cleanup
2913 	x_return_status			OUT  NOCOPY VARCHAR2)
2914 IS
2915 
2916    l_api_name         CONSTANT VARCHAR2(30)    := 'Validate_Problem_Code';
2917    l_api_name_full    CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
2918 
2919    l_pc_rec           cs_sr_prob_code_mapping_pkg.probcode_search_rec;
2920 
2921    lx_msg_count       NUMBER;
2922    lx_msg_data        VARCHAR2(2000);
2923 
2924 BEGIN
2925    -- Initialize Return Status to SUCCESS
2926    x_return_status := FND_API.G_RET_STS_SUCCESS;
2927 
2928    -- populate the problem code mapping record type
2929    l_pc_rec.service_request_type_id := p_incident_type_id;
2930    l_pc_rec.inventory_item_id       := p_inventory_item_id;
2931    l_pc_rec.organization_id         := p_inventory_org_id;
2932    l_pc_rec.product_category_id     := p_category_id;
2933 
2934    -- invoke the prob. code validation API that returns back if the given
2935    -- problem code is valid for the given mapping criteria. This API call
2936    -- is introduced in 11.5.10 and replaces the SQL logic that was present
2937    -- pre 11.5.10
2938 
2939    cs_sr_prob_code_mapping_pkg.validate_problem_code (
2940       p_api_version             => 1.0,
2941       p_init_msg_list           => FND_API.G_TRUE,
2942       p_probcode_criteria_rec   => l_pc_rec,
2943       p_problem_code            => p_problem_code,
2944       x_return_status           => x_return_status,
2945       x_msg_count               => lx_msg_count,
2946       x_msg_data                => lx_msg_data );
2947 
2948    if ( x_return_status <> FND_API.G_RET_STS_SUCCESS ) then
2949       -- new message for 11.5.10
2950       -- Problem code is not valid. Please check the values for the following:\
2951       -- Service request type, inventory item and product category.
2952       fnd_message.set_name ('CS', 'CS_SR_PROB_CODE_INVALID');
2953       fnd_message.set_token('API_NAME', l_api_name_full );
2954       fnd_msg_pub.add;
2955    end if;
2956 
2957 
2958 EXCEPTION
2959    WHEN OTHERS THEN
2960       fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
2961       fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
2962       fnd_msg_pub.ADD;
2963       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2964 
2965 END Validate_Problem_Code;
2966 
2967 -- -----------------------------------------------------------------------------
2968 -- Validate_Cust_Pref_Lang_Code
2969 -- -----------------------------------------------------------------------------
2970 
2971   PROCEDURE Validate_Cust_Pref_Lang_Code (
2972 	p_api_name			 IN  VARCHAR2,
2973 	p_parameter_name		 IN  VARCHAR2,
2974 	p_cust_pref_lang_code		 IN  VARCHAR2,
2975 	x_return_status			OUT  NOCOPY VARCHAR2
2976   ) IS
2977 
2978   l_dummy 	VARCHAR2(1);
2979   l_api_name                   CONSTANT VARCHAR2(30)    := 'Validate_Cust_Pref_Lang_Code';
2980   l_api_name_full              CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
2981 
2982   BEGIN
2983     -- Initialize Return Status to SUCCESS
2984     x_return_status := FND_API.G_RET_STS_SUCCESS;
2985 
2986     BEGIN
2987 	SELECT 'x' INTO l_dummy
2988 	  FROM  cs_sr_preferred_lang_v
2989           WHERE language_code = p_cust_pref_lang_code
2990           AND   trunc(sysdate) between trunc(nvl(start_date_active,sysdate))
2991           AND   trunc(nvl(end_date_active,sysdate));
2992 
2993     EXCEPTION
2994 	WHEN NO_DATA_FOUND THEN
2995 	   x_return_status := FND_API.G_RET_STS_ERROR;
2996            Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
2997   		              	     p_token_v     => p_cust_pref_lang_code,
2998 				     p_token_p     => p_parameter_name,
2999                                      p_table_name  => G_TABLE_NAME,
3000                                      p_column_name => 'CUST_PERF_LANG_CODE');
3001 	WHEN OTHERS THEN
3002 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
3003 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
3004 	      fnd_msg_pub.ADD;
3005 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3006 
3007     END;
3008   END Validate_Cust_Pref_Lang_Code;
3009 
3010 -- ----------------------------------------------------------------------------
3011 -- Validate_Comm_Pref_Code
3012 -- -----------------------------------------------------------------------------
3013   PROCEDURE Validate_Comm_Pref_Code (
3014 	p_api_name			 IN  VARCHAR2,
3015 	p_parameter_name		 IN  VARCHAR2,
3016 	p_comm_pref_code		 IN  VARCHAR2,
3017 	x_return_status			OUT  NOCOPY VARCHAR2
3018   ) IS
3019   l_dummy 	VARCHAR2(60);
3020   l_api_name                   CONSTANT VARCHAR2(30)    := 'Validate_Comm_Pref_Code';
3021   l_api_name_full              CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
3022 
3023   BEGIN
3024     -- Initialize Return Status to SUCCESS
3025     x_return_status := FND_API.G_RET_STS_SUCCESS;
3026 
3027     BEGIN
3028 	SELECT DISTINCT lookup_code INTO l_dummy
3029 	  FROM  ar_lookups
3030           WHERE lookup_type = 'COMMUNICATION_TYPE'
3031           AND   lookup_code = p_comm_pref_code;
3032 
3033     EXCEPTION
3034 	WHEN NO_DATA_FOUND THEN
3035 	   x_return_status := FND_API.G_RET_STS_ERROR;
3036            Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
3037   		              	     p_token_v     => p_comm_pref_code,
3038 			      	     p_token_p     => p_parameter_name,
3039                                      p_table_name  => G_TABLE_NAME,
3040                                      p_column_name => 'COMM_PREF_CODE' );
3041 	WHEN OTHERS THEN
3042 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
3043 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
3044 	      fnd_msg_pub.ADD;
3045 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3046     END;
3047   END Validate_Comm_Pref_Code;
3048 
3049 -- --------------------------------------------------------------------------------
3050 -- Validate_Category_Id
3051 /*
3052 Modification History
3053 Date       Name     Desc
3054 ---------- -------- ---------------------------------------------------------------
3055 02/28/2005 smisra   Bug 4083288
3056                     Added a parameter category set id. Performed validation using
3057                     this parameter instead of profile option value for category set
3058                     id. Replaced invalid argument Error message with meaningful
3059                     Error message.
3060 */
3061 -- --------------------------------------------------------------------------------
3062   PROCEDURE Validate_Category_Id(
3063 	p_api_name			 IN  VARCHAR2,
3064 	p_parameter_name		 IN  VARCHAR2,
3065 	p_category_id                    IN  NUMBER,
3066         p_category_set_id                IN  NUMBER,
3067 	x_return_status			OUT  NOCOPY VARCHAR2
3068   ) IS
3069 
3070   l_dummy 	VARCHAR2(1);
3071   l_profile     VARCHAR2(255);
3072   l_api_name                   CONSTANT VARCHAR2(30)    := 'Validate_Category_Id';
3073   l_api_name_full              CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
3074 
3075 BEGIN
3076     -- Initialize Return Status to SUCCESS
3077     x_return_status := FND_API.G_RET_STS_SUCCESS;
3078     -- Changed the Profile CS_SR_PLATFORM_CATEGORY_SET to
3079     -- CS_SR_DEFAULT_CATEGORY_SET.Fix for Bug# 2102330
3080 
3081     --l_profile       := FND_PROFILE.VALUE('CS_SR_DEFAULT_CATEGORY_SET');
3082     l_profile := p_category_set_id;
3083 
3084     BEGIN
3085         IF (p_category_id IS NOT NULL AND
3086             l_profile IS NOT NULL ) THEN
3087 	  SELECT 'x' INTO l_dummy
3088           --FROM  mtl_item_categories ic
3089           FROM  mtl_category_set_valid_cats ic
3090 	  WHERE ic.category_id = p_category_id
3091 	  AND	ic.category_set_id  = l_profile;
3092           --AND   ic.organization_id  = CS_STD.Get_Item_Valdn_Orgzn_Id;
3093         ELSE
3094           IF (l_profile IS NULL AND
3095               p_category_id IS NOT NULL) THEN
3096               RAISE NO_DATA_FOUND;
3097           END IF;
3098         END IF;
3099 
3100     EXCEPTION
3101 	WHEN NO_DATA_FOUND THEN
3102 	   x_return_status := FND_API.G_RET_STS_ERROR;
3103 	   fnd_message.set_name ('CS', 'CS_SR_CAT_CATSET_COMB_INVALID');
3104 	   fnd_message.set_token ('CAT_SET',nvl(l_profile,'NULL'));
3105 	   fnd_message.set_token ('CAT_ID',p_category_id);
3106 	   fnd_msg_pub.ADD;
3107 	WHEN OTHERS THEN
3108 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
3109 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
3110 	      fnd_msg_pub.ADD;
3111 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3112 
3113     END;
3114   END Validate_Category_Id;
3115 
3116 -- --------------------------------------------------------------------------------
3117 -- Validate_Category_Set_Id
3118 /*
3119 Modification History
3120 Date       Name     Desc
3121 ---------- -------- ---------------------------------------------------------------
3122 02/28/2005 smisra   Bug 4083288
3123                     Replaced invalid argument Error message with meaningful
3124                     Error message.
3125 */
3126 -- --------------------------------------------------------------------------------
3127   PROCEDURE Validate_Category_Set_Id(
3128 	p_api_name			 IN  VARCHAR2,
3129 	p_parameter_name		 IN  VARCHAR2,
3130 	p_category_id                    IN  NUMBER,
3131         p_category_set_id                IN  NUMBER,
3132         p_inventory_item_id              IN  NUMBER,
3133         p_inventory_org_id               IN  NUMBER,
3134 	x_return_status			OUT  NOCOPY VARCHAR2
3135   ) IS
3136 
3137   l_dummy 	     VARCHAR2(1);
3138   l_api_name         CONSTANT VARCHAR2(30)    := 'Validate_Category_Set_Id';
3139   l_api_name_full    CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
3140 
3141   l_validation       varchar2(1);
3142 BEGIN
3143     -- Initialize Return Status to SUCCESS
3144     x_return_status := FND_API.G_RET_STS_SUCCESS;
3145 
3146         IF (p_inventory_item_id IS NULL OR
3147             p_inventory_item_id = FND_API.G_MISS_NUM) THEN
3148             l_validation := 'C';
3149 	    SELECT 'x' INTO l_dummy
3150             FROM  mtl_category_set_valid_cats
3151 	    WHERE category_id = p_category_id
3152 	    AND	  category_set_id  = p_category_set_id;
3153         ELSIF (p_inventory_item_id IS NOT NULL) THEN
3154             l_validation := 'I';
3155              SELECT 'x' INTO l_dummy
3156              FROM   mtl_item_categories
3157              WHERE  inventory_item_id = p_inventory_item_id
3158              AND    category_id = p_category_id
3159              AND    category_set_id = p_category_set_id
3160              --AND    organization_id = CS_STD.Get_Item_Valdn_Orgzn_Id;
3161              AND    organization_id = p_inventory_org_id ;
3162 	     /* Bug 2661668/2648017 - use org_id parameter for validation of org */
3163         END IF;
3164 
3165     EXCEPTION
3166 	WHEN NO_DATA_FOUND THEN
3167 	   x_return_status := FND_API.G_RET_STS_ERROR;
3168            IF (l_validation = 'I') THEN
3169 	     fnd_message.set_name ('CS', 'CS_SR_CAT_ITEM_COMB_INVALID');
3170 	     fnd_message.set_token ('CAT_SET',p_category_set_id);
3171 	     fnd_message.set_token ('CAT_ID',nvl(to_char(p_category_id),'NULL'));
3172 	     fnd_message.set_token ('ITEM_ID',nvl(to_char(p_inventory_item_id),'NULL'));
3173 	     fnd_msg_pub.ADD;
3174            ELSE
3175 	     fnd_message.set_name ('CS', 'CS_SR_CAT_CATSET_COMB_INVALID');
3176 	     fnd_message.set_token ('CAT_SET',p_category_set_id);
3177 	     fnd_message.set_token ('CAT_ID',nvl(to_char(p_category_id),'NULL'));
3178 	     fnd_msg_pub.ADD;
3179            END IF;
3180 	WHEN OTHERS THEN
3181 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
3182 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
3183 	      fnd_msg_pub.ADD;
3184 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3185 
3186   END Validate_Category_Set_Id;
3187 
3188 -- --------------------------------------------------------------------------------
3189 -- Validate_External_Reference
3190 -- --------------------------------------------------------------------------------
3191 -- -----------------------------------------------------------------------------
3192 -- Modification History
3193 -- Date     Name     Desc
3194 -- -------- -------- -----------------------------------------------------------
3195 -- 12/16/05 smisra   4869097
3196 --                   Modified queries for ext ref when cust prod is null and
3197 --                   added two conditions:
3198 --                   1. join between item instances and instance parties
3199 --                   2. organization of item should be equal to parameter
3200 --                      inventory org
3201 -- -----------------------------------------------------------------------------
3202   PROCEDURE Validate_External_Reference(
3203     p_api_name			     IN  VARCHAR2,
3204     p_parameter_name		 IN  VARCHAR2,
3205     p_external_reference     IN  VARCHAR2,
3206     p_customer_product_id    IN  NUMBER,
3207     p_inventory_item_id      IN  NUMBER   := NULL,
3208     p_inventory_org_id       IN  NUMBER   := NULL,
3209     p_customer_id            IN NUMBER    := NULL,
3210     x_return_status			 OUT  NOCOPY VARCHAR2
3211   ) IS
3212 
3213   l_dummy 	VARCHAR2(1);
3214   inv_item_IB_trackable        VARCHAR2(1);
3215   l_api_name                   CONSTANT VARCHAR2(30)    := 'Validate_External_Reference';
3216   l_api_name_full              CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
3217 
3218 CURSOR c_ib_restrict
3219   IS SELECT COMMS_NL_TRACKABLE_FLAG
3220 	 FROM  mtl_system_items_b
3221 	 WHERE inventory_item_id = p_inventory_item_id
3222 	 AND organization_id = p_inventory_org_id;
3223 
3224 BEGIN
3225 
3226    x_return_status := FND_API.G_RET_STS_SUCCESS;
3227 
3228    -- For bug 3746983
3229 
3230    IF ( p_customer_product_id IS NOT NULL ) AND
3231       ( p_customer_product_id <> FND_API.G_MISS_NUM ) THEN
3232 
3233       IF CS_ServiceRequest_PVT.g_restrict_ib = 'YES' THEN
3234 
3235          SELECT 'x' INTO l_dummy
3236          FROM   csi_item_instances a,
3237                 mtl_system_items_b b,
3238                 csi_i_parties cip
3239          WHERE  a.instance_id = p_customer_product_id
3240          AND a.external_reference = p_external_reference
3241          AND cip.party_id = p_customer_id
3242          AND a.instance_id = cip.instance_id
3243          AND cip.party_source_table  = 'HZ_PARTIES'
3244          AND    b.serv_req_enabled_code = 'E'
3245          AND a.location_type_code IN ('HZ_PARTY_SITES','HZ_LOCATIONS')
3246          AND TRUNC(SYSDATE) BETWEEN TRUNC(NVL(a.active_start_date,SYSDATE))
3247          AND TRUNC(NVL(a.active_end_date, SYSDATE))
3248          AND b.inventory_item_id = a.inventory_item_id
3249          AND b.organization_id = p_inventory_org_id
3250          AND rownum<2;
3251       ELSE
3252 
3253          SELECT 'x' INTO l_dummy
3254          FROM   csi_item_instances a,
3255                 mtl_system_items_b b,
3256                 csi_i_parties cip
3257          WHERE  a.instance_id = p_customer_product_id
3258          AND a.external_reference = p_external_reference
3259          AND cip.party_id = p_customer_id
3260          AND a.instance_id = cip.instance_id
3261          AND cip.party_source_table  = 'HZ_PARTIES'
3262          AND    b.serv_req_enabled_code = 'E'
3263          AND TRUNC(SYSDATE) BETWEEN TRUNC(NVL(a.active_start_date,SYSDATE))
3264          AND TRUNC(NVL(a.active_end_date, SYSDATE))
3265          AND b.inventory_item_id = a.inventory_item_id
3266          AND b.organization_id = p_inventory_org_id
3267          AND rownum < 2;
3268       END IF;
3269     ELSE
3270 
3271 	   OPEN  c_ib_restrict;
3272 	   FETCH c_ib_restrict INTO inv_item_IB_trackable;
3273 	   CLOSE c_ib_restrict;
3274 
3275      IF inv_item_IB_trackable = 'Y' THEN
3276 
3277       IF CS_ServiceRequest_PVT.g_restrict_ib = 'YES' THEN
3278 
3279 	     SELECT 'X' INTO l_dummy
3280              FROM csi_item_instances a,
3281              mtl_system_items_b b,
3282              csi_i_parties cip
3283 	     WHERE b.inventory_item_id = p_inventory_item_id
3284              AND b.organization_id = p_inventory_org_id
3285 	     AND b.inventory_item_id = a.inventory_item_id
3286 	     AND cip.party_id = p_customer_id
3287              AND a.instance_id = cip.instance_id
3288 	     AND a.external_reference = p_external_reference
3289              AND a.location_type_code IN ('HZ_PARTY_SITES','HZ_LOCATIONS')
3290              AND TRUNC(SYSDATE) BETWEEN TRUNC(NVL(a.active_start_date,SYSDATE))
3291              AND TRUNC(NVL(a.active_end_date, SYSDATE))
3292 	     AND rownum < 2;
3293 
3294       ELSE
3295 
3296 	     SELECT 'X' INTO l_dummy
3297 	     FROM csi_item_instances a,
3298              mtl_system_items_b b,
3299 	     csi_i_parties cip
3300 	     WHERE b.inventory_item_id = p_inventory_item_id
3301              AND b.organization_id = p_inventory_org_id
3302 	     AND b.inventory_item_id = a.inventory_item_id
3303 	     AND cip.party_id = p_customer_id
3304              AND a.instance_id = cip.instance_id
3305 	     AND a.external_reference = p_external_reference
3306              AND TRUNC(SYSDATE) BETWEEN TRUNC(NVL(a.active_start_date,SYSDATE))
3307              AND TRUNC(NVL(a.active_end_date, SYSDATE))
3308 	     AND rownum < 2;
3309 
3310 	  END IF;
3311      END IF;
3312 
3313    END IF;
3314 
3315     EXCEPTION
3316 	WHEN NO_DATA_FOUND THEN
3317 	   x_return_status := FND_API.G_RET_STS_ERROR;
3318            Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
3319   		              	     p_token_v     => p_external_reference,
3320 			      	     p_token_p     => p_parameter_name ,
3321                                      p_table_name  => G_TABLE_NAME,
3322                                      p_column_name => 'EXTERNAL_REFERENCE');
3323 	WHEN OTHERS THEN
3324 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
3325 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
3326 	      fnd_msg_pub.ADD;
3327 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3328 
3329 END Validate_External_Reference;
3330 
3331 -- --------------------------------------------------------------------------------
3332 -- Validate_System_Id
3333 -- --------------------------------------------------------------------------------
3334 
3335   PROCEDURE Validate_System_Id(
3336 	p_api_name			 IN  VARCHAR2,
3337 	p_parameter_name		 IN  VARCHAR2,
3338 	p_system_id                      IN  NUMBER,
3339 	x_return_status			OUT  NOCOPY VARCHAR2
3340   ) IS
3341 
3342   l_dummy 	VARCHAR2(1);
3343   l_api_name                   CONSTANT VARCHAR2(30)    := 'Validate_System_Id';
3344   l_api_name_full              CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
3345 
3346 BEGIN
3347     -- Initialize Return Status to SUCCESS
3348     x_return_status := FND_API.G_RET_STS_SUCCESS;
3349 
3350     SELECT 'x' INTO l_dummy
3351     FROM  csi_systems_vl
3352     WHERE system_id = p_system_id;
3353 
3354     EXCEPTION
3355 	WHEN NO_DATA_FOUND THEN
3356 	   x_return_status := FND_API.G_RET_STS_ERROR;
3357            Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
3358   		              	     p_token_v     => TO_CHAR(p_system_id),
3359 			      	     p_token_p     => p_parameter_name,
3360                                      p_table_name  => G_TABLE_NAME,
3361                                      p_column_name => 'SYSTEM_ID' );
3362 	WHEN OTHERS THEN
3363 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
3364 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
3365 	      fnd_msg_pub.ADD;
3366 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3367 
3368   END Validate_System_Id;
3369 
3370 --------------------------------------------------------------------
3371 /*
3372 ** Validate_Exp_Resolution_Date
3373 ** 1. The expected resolution date is validated against the service request
3374 **    date. Therefore, this procedure takes in the service request date as a
3375 **    parameter.
3376 ** 2. Verify that the expected resolution date is later than the service
3377 **    request date.
3378 */
3379 PROCEDURE Validate_Exp_Resolution_Date
3380 ( p_api_name             IN   VARCHAR2,
3381   p_parameter_name       IN   VARCHAR2,
3382   p_exp_resolution_date  IN   DATE,
3383   p_request_date         IN   DATE,
3384   x_return_status        OUT  NOCOPY VARCHAR2
3385 )
3386 IS
3387   l_api_name                   CONSTANT VARCHAR2(30)    := 'Validate_Exp_Resolution_Date';
3388   l_api_name_full              CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
3389 
3390 BEGIN
3391   IF p_exp_resolution_date >= p_request_date THEN
3392     x_return_status := FND_API.G_RET_STS_SUCCESS;
3393   ELSE
3394     x_return_status := FND_API.G_RET_STS_ERROR;
3395     Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
3396 	              	      p_token_v     => TO_CHAR(p_exp_resolution_date),
3397 			      p_token_p     => p_parameter_name,
3398                               p_table_name  => G_TABLE_NAME ,
3399                               p_column_name => 'EXPECTED_RESOLUTION_DATE' );
3400   END IF;
3401 
3402  EXCEPTION
3403 	WHEN OTHERS THEN
3404 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
3405 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
3406 	      fnd_msg_pub.ADD;
3407 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3408 
3409 END Validate_Exp_Resolution_Date;
3410 
3411 
3412 -- --------------------------------------------------------------------------------
3413 -- Validate_Bill_To_Ship_To_Party
3414 -- Same procedure is used to validate Bill_to and Ship_To Parties
3415 -- 1. Party must be Active of type Person or Organization
3416 -- 2. Must have a valid relationship with the SR Customer.
3417 -- 3. Added one more out parameter as x_customer_type to get the bill_to_party
3418 --    customer type.
3419 -- 4. Added one more in parameter as p_customer_type, to get the header
3420 --    customer_type.
3421 -- --------------------------------------------------------------------------------
3422 
3423 PROCEDURE Validate_Bill_To_Ship_To_Party (
3424 	p_api_name			 IN  VARCHAR2,
3425 	p_parameter_name		 IN  VARCHAR2,
3426 	p_bill_to_party_id		 IN  NUMBER,
3427 	p_customer_id			 IN  NUMBER,
3428         x_customer_type                  IN OUT NOCOPY VARCHAR2,
3429 	x_return_status			 OUT NOCOPY VARCHAR2
3430   )
3431 AS
3432   l_api_name        CONSTANT VARCHAR2(30) := 'Validate_Bill_To_Ship_ToParty';
3433   l_api_name_full   CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_api_name;
3434 
3435   CURSOR Bill_To_Party  IS
3436     SELECT p.party_type
3437     FROM Hz_parties p ,
3438 	 Hz_Relationships r
3439     WHERE p.party_id = p_bill_to_party_id
3440     AND   p.status = 'A'
3441     AND   p.party_type IN ('PERSON','ORGANIZATION')
3442     AND   r.object_id =  p_customer_id
3443     AND   r.subject_id = p.party_id
3444     AND   r.status = 'A'
3445     -- Added to remove TCA violation -- relationship should be active -- anmukher -- 08/14/03
3446     AND   TRUNC(SYSDATE) BETWEEN TRUNC(NVL(r.START_DATE, SYSDATE)) AND TRUNC(NVL(r.END_DATE, SYSDATE));
3447 
3448     l_dummy VARCHAR2(5);
3449     l_customer_type VARCHAR2(30);
3450 BEGIN
3451   -- Initialize return status to success
3452   x_return_status := FND_API.G_RET_STS_SUCCESS;
3453 
3454   /* Changes made for 1159, added the condition that if the customer_id
3455      is same as the bill_to_party_id then we should just return success
3456      else we should check if its a valid relationship*/
3457 
3458   IF  (p_customer_id=p_bill_to_party_id) THEN
3459      x_return_status := FND_API.G_RET_STS_SUCCESS;
3460   ELSE
3461      OPEN bill_to_party;
3462      FETCH bill_to_party INTO l_customer_type;
3463      x_customer_type:= l_customer_type;
3464      IF (bill_to_party%NOTFOUND) THEN
3465            x_return_status := FND_API.G_RET_STS_ERROR;
3466            CLOSE bill_to_party;
3467 
3468            RAISE NO_DATA_FOUND;
3469      END IF;
3470      CLOSE bill_to_party ;
3471   END IF;
3472 
3473 EXCEPTION
3474    WHEN NO_DATA_FOUND THEN
3475                x_return_status := FND_API.G_RET_STS_ERROR;
3476                Add_Invalid_Argument_Msg
3477                              ( p_token_an    =>  l_api_name_full,
3478                                p_token_v     =>  TO_CHAR(p_bill_to_party_id),
3479                                p_token_p     =>  p_parameter_name,
3480                                p_table_name  =>  G_TABLE_NAME,
3481                                p_column_name =>  'BILL_TO_CUSTOMER_ID');
3482    WHEN OTHERS THEN
3483 	fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
3484 	fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
3485 	fnd_msg_pub.ADD;
3486 	x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3487 END Validate_Bill_To_Ship_To_Party;
3488 
3489 -- --------------------------------------------------------------------------------
3490 -- Validate_Bill_To_Ship_To_Site (New Procedure for 11.5.9)
3491 -- Same procedure is used to validate Bill_to and Ship_To Sites
3492 -- 1. Site must be an active site attached to party
3493 -- 2. Site USe must be Valid and Must be BILL_TO or SHIP_TO as required
3494 -- 3. p_site_use_type will be BILL_TO or SHIP_TO
3495 -- --------------------------------------------------------------------------------
3496 
3497 PROCEDURE Validate_Bill_To_Ship_To_Site (
3498 	p_api_name			 IN  VARCHAR2,
3499 	p_parameter_name		 IN  VARCHAR2,
3500 	p_bill_to_site_id		 IN  NUMBER,
3501 	p_bill_to_party_id		 IN  NUMBER,
3502 	p_site_use_type			 IN  VARCHAR2,
3503     x_site_use_id            OUT NOCOPY NUMBER,
3504 	x_return_status			 OUT NOCOPY VARCHAR2
3505   )
3506 AS
3507   l_api_name        CONSTANT VARCHAR2(30) := 'Validate_Bill_To_Ship_To_Site';
3508   l_api_name_full   CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_api_name;
3509 
3510   CURSOR Bill_To_Site  IS
3511     SELECT su.party_site_use_id
3512     FROM Hz_Party_Sites  s,
3513 	 Hz_Party_Site_Uses su
3514     WHERE s.party_site_id = su.party_site_id
3515     AND   s.party_site_id = p_bill_to_site_id
3516     AND   s.party_id 	  = p_bill_to_party_id
3517     AND   s.status = 'A'
3518     AND   su.status = 'A'
3519     -- Commented out to remove TCA Violation -- Party site use dates not to be checked -- anmukher -- 08/14/03
3520     -- AND   TRUNC(SYSDATE) BETWEEN TRUNC(NVL(su.begin_date,SYSDATE))
3521 			-- AND TRUNC(NVL(su.end_date,SYSDATE))
3522     AND   su.site_use_type = p_site_use_type;
3523 
3524     l_dummy VARCHAR2(5);
3525 BEGIN
3526   -- Initialize return status to success
3527   x_return_status := FND_API.G_RET_STS_SUCCESS;
3528 
3529   OPEN bill_to_site;
3530   FETCH bill_to_site INTO x_site_use_id;
3531   IF (bill_to_site%NOTFOUND) THEN
3532     x_return_status := FND_API.G_RET_STS_ERROR;
3533     CLOSE bill_to_site;
3534 
3535     RAISE NO_DATA_FOUND;
3536   END IF;
3537   CLOSE bill_to_site ;
3538 EXCEPTION
3539    WHEN NO_DATA_FOUND THEN
3540         CS_ServiceRequest_UTIL.Add_Invalid_Argument_Msg
3541                       ( p_token_an    =>  l_api_name_full,
3542                         p_token_v     =>  TO_CHAR(p_bill_to_site_id),
3543                         p_token_p     =>  p_parameter_name,
3544                         p_table_name  =>  G_TABLE_NAME ,
3545                         p_column_name =>  'BILL_TO_SITE_ID' );
3546    WHEN OTHERS THEN
3547 	fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
3548 	fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
3549 	fnd_msg_pub.ADD;
3550 	x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3551 END Validate_Bill_To_Ship_To_Site ;
3552 
3553 
3554 PROCEDURE Validate_Install_Site
3555 ( p_parameter_name       IN   VARCHAR2,
3556   p_install_site_id  	 IN   NUMBER,
3557   p_customer_id  	 IN   NUMBER,
3558   x_return_status        OUT  NOCOPY VARCHAR2
3559 )
3560 IS
3561   l_api_name         CONSTANT VARCHAR2(30)    := 'Validate_Install_Site';
3562   l_api_name_full    CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
3563 
3564   l_install_customer_id NUMBER;
3565 
3566   BEGIN
3567     -- Initialize Return Status to SUCCESS
3568     x_return_status := FND_API.G_RET_STS_SUCCESS;
3569 
3570     BEGIN
3571 
3572 	-- Fix to bug # 2529361.included keyword distinct in select clause.
3573 	-- # 2615775 - removed reference to hz_party_site_uses..
3574 
3575         SELECT DISTINCT s.party_id  INTO l_install_customer_id
3576         FROM   Hz_Party_Sites s
3577         WHERE s.party_site_id = p_install_site_id
3578         AND   s.status = 'A'
3579 		-- Belongs to SR Customer
3580         AND ( s.party_id = p_customer_id
3581 		-- or one of its relationships
3582               OR s.party_id IN (
3583                  SELECT r.party_id
3584                  FROM   Hz_Relationships r
3585                  WHERE r.object_id     = p_customer_id
3586                  AND   r.status = 'A'
3587                  -- Added to remove TCA violation -- Relationship should be active -- anmukher -- 08/14/03
3588                  AND   TRUNC(SYSDATE) BETWEEN TRUNC(NVL(r.START_DATE, SYSDATE)) AND TRUNC(NVL(r.END_DATE, SYSDATE)) )
3589 		-- or one of its Related parties
3590               OR s.party_id IN (
3591                  SELECT sub.party_id
3592                  FROM   Hz_Parties  p,
3593                         Hz_Parties sub,
3594                         Hz_Parties obj,
3595                         Hz_Relationships r
3596                  WHERE obj.party_id  = p_customer_id
3597                  AND   sub.status = 'A'
3598                  AND   obj.status = 'A'
3599                  AND   r.status   = 'A'
3600                  AND   p.status   = 'A'
3601                  AND   TRUNC(SYSDATE) BETWEEN TRUNC(NVL(r.START_DATE, SYSDATE)) AND TRUNC(NVL(r.END_DATE, SYSDATE))
3602                  AND   sub.party_type IN ('PERSON','ORGANIZATION')
3603                  AND   p.party_id = r.party_id
3604                  AND   r.object_id = obj.party_id
3605                  AND   r.subject_id = sub.party_id ));
3606 
3607     EXCEPTION
3608 	WHEN NO_DATA_FOUND THEN
3609 	   x_return_status := FND_API.G_RET_STS_ERROR;
3610            Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
3611   		              	     p_token_v     => TO_CHAR(p_install_site_id),
3612   		      	             p_token_p     => p_parameter_name,
3613                                      p_table_name  => G_TABLE_NAME,
3614                                      p_column_name => 'INSTALL_SITE_ID' );
3615 
3616 		WHEN OTHERS THEN
3617 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
3618 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
3619 	      fnd_msg_pub.ADD;
3620 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3621 
3622     END;
3623 
3624 END Validate_Install_Site;
3625 
3626 /*
3627 ** Validate_Resolution_Code
3628 ** 1. Verify that the resolution code is an active resolution code.
3629 */
3630 PROCEDURE Validate_Resolution_Code (
3631   p_api_name             IN   VARCHAR2,
3632   p_parameter_name       IN   VARCHAR2,
3633   p_resolution_code      IN   VARCHAR2,
3634   x_return_status        OUT  NOCOPY VARCHAR2)
3635 IS
3636   l_dummy  VARCHAR2(1);
3637   l_api_name            CONSTANT VARCHAR2(30)    := 'Validate_Resolution_Code';
3638   l_api_name_full       CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
3639 
3640 BEGIN
3641   -- Initialize the return status.
3642   x_return_status := FND_API.G_RET_STS_SUCCESS;
3643 
3644 
3645 
3646 
3647 EXCEPTION
3648    WHEN NO_DATA_FOUND THEN
3649       x_return_status := FND_API.G_RET_STS_ERROR;
3650       Add_Invalid_Argument_Msg(
3651 	 p_token_an    => l_api_name_full,
3652          p_token_v     => p_resolution_code,
3653          p_token_p     => p_parameter_name,
3654          p_table_name  => G_TABLE_NAME,
3655          p_column_name => 'RESOLUTION_CODE' );
3656    WHEN OTHERS THEN
3657       fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
3658       fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
3659       fnd_msg_pub.ADD;
3660       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3661 
3662 END Validate_Resolution_Code;
3663 
3664 -- --------------------------------------------------------------------------------
3665 -- Validate_Act_Resolution_Date
3666 -- 1. The actual resolution date must be validated against the service request date,
3667 --	therefore this procedure takes in the service request date as a parameter.
3668 -- 2. Verify that the actual resolution date is later than the service request date
3669 -- --------------------------------------------------------------------------------
3670   PROCEDURE Validate_Act_Resolution_Date (
3671 	p_api_name			 IN  VARCHAR2,
3672 	p_parameter_name		 IN  VARCHAR2,
3673 	p_act_resolution_date		 IN  DATE,
3674 	p_request_date			 IN  DATE,
3675 	x_return_status			OUT  NOCOPY VARCHAR2
3676   ) IS
3677   l_api_name                   CONSTANT VARCHAR2(30)    := 'Validate_Act_Resolution_Date';
3678   l_api_name_full              CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
3679 
3680   BEGIN
3681 
3682     IF p_act_resolution_date >= p_request_date THEN
3683 	x_return_status := FND_API.G_RET_STS_SUCCESS;
3684     ELSE
3685 	x_return_status := FND_API.G_RET_STS_ERROR;
3686         Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
3687   		              	  p_token_v     => TO_CHAR(p_act_resolution_date),
3688 			      	  p_token_p     => p_parameter_name,
3689                                   p_table_name  => G_TABLE_NAME,
3690                                   p_column_name => 'ACTUAL_RESOLUTION_DATE' );
3691     END IF;
3692   EXCEPTION
3693 	WHEN OTHERS THEN
3694 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
3695 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
3696 	      fnd_msg_pub.ADD;
3697 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3698 
3699   END Validate_Act_Resolution_Date;
3700 
3701 ----------------------------
3702 -- 3224828 contracts : x_contract_id IN OUT parameter
3703 PROCEDURE Validate_Contract_Service_Id
3704 ( p_api_name             IN   VARCHAR2,
3705   p_parameter_name       IN   VARCHAR2,
3706   p_contract_service_id  IN   NUMBER,
3707   x_contract_id          IN OUT  NOCOPY NUMBER,
3708   x_contract_number      OUT  NOCOPY VARCHAR2,
3709   x_return_status        OUT  NOCOPY VARCHAR2
3710 )IS
3711 
3712   l_test             VARCHAR2(150);
3713   l_api_name         CONSTANT VARCHAR2(30)    := 'Validate_Contract_Service_Id';
3714   l_api_name_full    CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
3715   l_contract_id          NUMBER;
3716 
3717 BEGIN
3718 	-- Initialize the return status.
3719 	x_return_status := FND_API.G_RET_STS_SUCCESS;
3720 
3721         select chr_id
3722 	into l_contract_id
3723 	from okc_k_lines_b
3724 	where id = p_contract_service_id;
3725 
3726 
3727 
3728 	SELECT contract_number INTO x_contract_number
3729           FROM okc_k_headers_all_b
3730          WHERE id = l_contract_id;
3731 
3732 	if (l_contract_id <> x_contract_id AND x_contract_id IS NOT NULL AND x_contract_id <> FND_API.G_MISS_NUM) then
3733 	    x_contract_id := l_contract_id;
3734             Add_Param_Ignored_Msg( p_token_an   => l_api_name_full,
3735 			           p_token_ip   => 'p_contract_id',
3736                                    p_table_name => G_TABLE_NAME,
3737                                    p_column_name => 'CONTRACT_ID' );
3738 
3739 	end if;
3740 
3741          x_contract_id := l_contract_id;
3742 
3743   /*      SELECT line_number, chr_id
3744 	INTO l_test, x_contract_id
3745 	FROM okc_k_lines_b
3746 	WHERE id = p_contract_service_id ;   */
3747 
3748         --SELECT chr_id INTO x_contract_id
3749         --FROM okc_k_lines_b
3750         --WHERE id = p_contract_service_id;
3751 
3752 EXCEPTION
3753  WHEN NO_DATA_FOUND THEN
3754     	 x_return_status := FND_API.G_RET_STS_ERROR;
3755     	 Add_Invalid_Argument_Msg(p_token_an    => l_api_name_full,
3756 	              	      	  p_token_v     => p_contract_service_id,
3757 			      	  p_token_p     => p_parameter_name ,
3758                                   p_table_name  => G_TABLE_NAME,
3759                                   p_column_name => 'CONTRACT_SERVICE_ID');
3760 
3761    WHEN OTHERS THEN
3762 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
3763 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
3764 	      fnd_msg_pub.ADD;
3765 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3766 END Validate_Contract_Service_Id;
3767 ---------------------------------------------------------------------------
3768 
3769 PROCEDURE Validate_Contract_Id
3770 ( p_api_name             IN   VARCHAR2,
3771   p_parameter_name       IN   VARCHAR2,
3772   p_contract_id          IN   NUMBER,
3773   x_contract_number      OUT  NOCOPY VARCHAR2,
3774   x_return_status        OUT  NOCOPY VARCHAR2
3775 )IS
3776 
3777   l_api_name                   CONSTANT VARCHAR2(30)    := 'Validate_Contract_Id';
3778   l_api_name_full              CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
3779 
3780 BEGIN
3781 
3782 	 -- Initialize the return status.
3783 	 x_return_status := FND_API.G_RET_STS_SUCCESS;
3784 
3785          SELECT contract_number
3786 	 INTO x_contract_number
3787 	 FROM okc_k_headers_all_b
3788 	 WHERE id = p_contract_id ;
3789 
3790 EXCEPTION
3791 	 WHEN NO_DATA_FOUND THEN
3792 		 x_return_status := FND_API.G_RET_STS_ERROR;
3793 		 Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
3794 	              	      		   p_token_v     => p_contract_id,
3795 			      		   p_token_p     => p_parameter_name,
3796                                            p_table_name  => G_TABLE_NAME,
3797                                            p_column_name => 'CONTRACT_ID' );
3798 
3799 	WHEN OTHERS THEN
3800 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
3801 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
3802 	      fnd_msg_pub.ADD;
3803 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3804 
3805 
3806 END Validate_Contract_Id;
3807 
3808 ---------------------------------------------------------------------------
3809 
3810 -- -----------------------------------------------------------------------------
3811 -- Modification History
3812 -- Date     Name     Desc
3813 -- -------- -------- -----------------------------------------------------------
3814 -- 12/30/05 smisra   Bug 4869065
3815 --                   Removed the logic because support_site_id will now be
3816 --                   derived based on resource_id
3817 --                   ****** Do not Use This Procedure *****
3818 -- -----------------------------------------------------------------------------
3819 PROCEDURE Validate_Support_Site_Id
3820 ( p_api_name             IN  VARCHAR2,
3821   p_parameter_name       IN  VARCHAR2,
3822   p_support_site_id      IN  NUMBER,
3823   p_owner_id             IN  NUMBER,
3824   p_resource_type        IN  VARCHAR2,
3825   p_org_id               IN  NUMBER,
3826   x_return_status        OUT NOCOPY VARCHAR2
3827 )IS
3828 
3829   l_test           VARCHAR2(1);
3830   l_api_name       CONSTANT VARCHAR2(30)    := 'Validate_Support_Site_Id';
3831   l_api_name_full  CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
3832 BEGIN
3833 
3834 	  -- Initialize the return status.
3835 	  x_return_status := FND_API.G_RET_STS_ERROR;
3836 /****
3837 Bug 4869065
3838 The sql is very expensive. Support site is a denormalized col.
3839 so validation of resource id will determine the support site too. no need to
3840 cross validate support site and resource
3841 	  x_return_status := FND_API.G_RET_STS_SUCCESS;
3842 
3843      	 SELECT 'x'
3844 	 INTO l_test
3845 	 FROM cs_sr_owners_v
3846 	 WHERE resource_type  =  UPPER(p_resource_type)
3847          AND resource_id = p_owner_id
3848          AND  support_site_id = p_support_site_id  ;
3849 ****/
3850 EXCEPTION
3851    WHEN NO_DATA_FOUND THEN
3852     	 x_return_status := FND_API.G_RET_STS_ERROR;
3853     	 Add_Invalid_Argument_Msg(p_token_an    => l_api_name_full,
3854 	              	          p_token_v     => p_support_site_id,
3855 			      	  p_token_p     => p_parameter_name,
3856                                     p_table_name  => null,
3857                                   p_column_name => 'P_SUPPORT_SITE_ID' );
3858 
3859    WHEN OTHERS THEN
3860 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
3861 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
3862 	      fnd_msg_pub.ADD;
3863 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3864 END Validate_Support_Site_Id;
3865 ---------------------------------------------------------
3866 
3867 PROCEDURE Validate_Group_Type
3868 ( p_api_name             IN   VARCHAR2,
3869   p_parameter_name       IN   VARCHAR2,
3870   p_group_type           IN   VARCHAR2,
3871   -- p_resource_type        IN   VARCHAR2,
3872   x_return_status        OUT  NOCOPY VARCHAR2
3873 )IS
3874 
3875   l_api_name          CONSTANT VARCHAR2(30)    := 'Validate_Group_Type';
3876   l_api_name_full     CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
3877 
3878 BEGIN
3879 
3880   -- Initialize the return status.
3881   x_return_status := FND_API.G_RET_STS_SUCCESS;
3882 
3883 /* For 1159, we changed the logic, as RS_TEAM is not supported anymore,
3884    if the resource_type is not RS_GROUP, we raise an error oherwise
3885    just return success by shijain*/
3886 
3887      IF (p_group_type = 'RS_GROUP') THEN
3888          x_return_status := FND_API.G_RET_STS_SUCCESS;
3889      ELSE
3890         x_return_status := FND_API.G_RET_STS_ERROR;
3891          Add_Invalid_Argument_Msg( p_token_an    =>  l_api_name_full,
3892                                    p_token_v     =>  p_group_type,
3893                                    p_token_p     =>  p_parameter_name ,
3894                                    p_table_name  => G_TABLE_NAME ,
3895                                    p_column_name => 'GROUP_TYPE' );
3896      END IF;
3897 EXCEPTION
3898          WHEN NO_DATA_FOUND THEN
3899 		 x_return_status := FND_API.G_RET_STS_ERROR;
3900 		 Add_Invalid_Argument_Msg( p_token_an    =>  l_api_name_full,
3901                                            p_token_v     =>  p_group_type,
3902                                            p_token_p     =>  p_parameter_name,
3903                                            p_table_name  => G_TABLE_NAME ,
3904                                            p_column_name => 'GROUP_TYPE' );
3905 
3906 	WHEN OTHERS THEN
3907 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
3908 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
3909 	      fnd_msg_pub.ADD;
3910 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3911 
3912 
3913 END Validate_Group_Type;
3914 
3915 ----------------------------------------
3916 PROCEDURE Validate_Group_Id
3917 ( p_api_name             IN   VARCHAR2,
3918   p_parameter_name       IN   VARCHAR2,
3919   p_group_type           IN   VARCHAR2,
3920   p_owner_group_id       IN   NUMBER,
3921   x_group_name           OUT  NOCOPY VARCHAR2,
3922   x_return_status        OUT  NOCOPY VARCHAR2
3923 )IS
3924 
3925   l_test            VARCHAR2(150);
3926   l_api_name        CONSTANT VARCHAR2(30)    := 'Validate_Group_Id';
3927   l_api_name_full   CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
3928 
3929 BEGIN
3930 
3931   -- Initialize the return status.
3932   x_return_status := FND_API.G_RET_STS_SUCCESS;
3933 
3934 /* This change is for 1159, only RS_GROUP group type is checked, if its not RS_GROUP then return an error*/
3935 
3936 IF ( p_group_type = 'RS_GROUP' ) THEN
3937   SELECT grp.group_name INTO x_group_name
3938   FROM jtf_rs_groups_vl grp,
3939   jtf_rs_group_usages usg
3940   WHERE grp.group_id = p_owner_group_id
3941   AND   grp.group_id = usg.group_id
3942   AND   usg.usage    = 'SUPPORT'
3943   AND   SYSDATE BETWEEN NVL(start_date_active, SYSDATE)
3944   AND   NVL( end_date_active, SYSDATE ) ;
3945 ELSE
3946   x_return_status := FND_API.G_RET_STS_ERROR;
3947   -- 3303106
3948       --   Add_Invalid_Argument_Msg
3949           Add_Null_Parameter_Msg ( p_token_an    =>  l_api_name_full,
3950                                    p_token_np    =>  'p_group_type',
3951                                    p_table_name  =>  G_TABLE_NAME,
3952                                    p_column_name =>  'GROUP_TYPE');
3953 END IF;
3954 
3955 
3956 EXCEPTION
3957          WHEN NO_DATA_FOUND THEN
3958 		 x_return_status := FND_API.G_RET_STS_ERROR;
3959 		 Add_Invalid_Argument_Msg( p_token_an    =>  l_api_name_full,
3960                                            p_token_v     =>  p_owner_group_id,
3961                                            p_token_p     =>  p_parameter_name,
3962                                            p_table_name  => G_TABLE_NAME,
3963                                            p_column_name => 'OWNER_GROUP_ID');
3964 
3965 	WHEN OTHERS THEN
3966 	      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
3967 	      fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
3968 	      fnd_msg_pub.ADD;
3969 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3970 END Validate_Group_Id;
3971 
3972 ----------------------------------------
3973 -- DJ API Cleanup
3974 -- Existing proc. modified to query from CS secure view on JTF resource
3975 -- -----------------------------------------------------------------------------
3976 -- Modification History
3977 -- Date     Name     Desc
3978 -- -------- -------- -----------------------------------------------------------
3979 -- 07/20/05 smisra   Bug 3875584
3980 --                   Added a new parameter p_mode. If value of this parameter
3981 --                   is CREATE then this procedure gives warning for invalid
3982 --                   owner id. for all other values of p_mode, this procedure
3983 --                   give invalid parameter error for invalid owner id
3984 -- 12/30/05 smisra   Bug 4773215, 4869065
3985 --                   Added an out parameter x_resource_type. It is derived based
3986 --                   on resource id. it is set to constant string 'RS_' and
3987 --                   category associated with the resource. This value is
3988 --                   validated using validate_resource_type procedure.
3989 --                   Added an out parameter x_support_site_id. It is derived
3990 --                   based on resource_id
3991 -- -----------------------------------------------------------------------------
3992 PROCEDURE Validate_Owner
3993 ( p_api_name             IN   VARCHAR2,
3994   p_parameter_name       IN   VARCHAR2,
3995   p_owner_id             IN   NUMBER,
3996   p_group_type           IN   VARCHAR2,
3997   p_owner_group_id       IN   NUMBER,
3998   p_org_id               IN   NUMBER,
3999   p_incident_type_id     IN   NUMBER, -- new for 11.5.10 for Security rule
4000   p_mode                 IN   VARCHAR2 DEFAULT NULL,
4001   x_owner_name           OUT  NOCOPY VARCHAR2,
4002   x_owner_id             OUT  NOCOPY NUMBER,
4003   x_resource_type        OUT NOCOPY VARCHAR2,
4004   x_support_site_id      OUT NOCOPY NUMBER,
4005   x_return_status        OUT  NOCOPY VARCHAR2 )
4006 IS
4007 
4008   l_test                VARCHAR2(1);
4009   l_api_name            CONSTANT VARCHAR2(30):= 'Validate_Owner';
4010   l_api_name_full       CONSTANT VARCHAR2(61):= G_PKG_NAME||'.'||l_api_name;
4011 
4012   CURSOR get_valid_owner IS
4013   SELECT res.resource_name, res.resource_id, 'RS_' || res.category,
4014          DECODE(res.category, 'EMPLOYEE', res.support_site_id, NULL)
4015   FROM jtf_rs_group_members          grp,
4016        cs_jtf_rs_resource_extns_sec  res
4017        -- jtf_rs_resource_extns_tl res; Replaced with CS Secure view
4018   WHERE grp.resource_id = p_owner_id
4019   AND   grp.group_id    = p_owner_group_id
4020   AND   grp.resource_id = res.resource_id;
4021 
4022 BEGIN
4023    -- Initialize the return status.
4024    x_return_status := FND_API.G_RET_STS_SUCCESS;
4025 
4026    -- set the context of the SR type before querying the CS Secure view
4027    -- for JTF resources
4028    cs_sr_security_context.set_sr_security_context (
4029       p_context_attribute         => 'SRTYPE_ID',
4030       p_context_attribute_value   =>  p_incident_type_id );
4031 
4032    IF (     p_owner_group_id IS NOT NULL
4033         AND p_owner_group_id <> FND_API.G_MISS_NUM )
4034    THEN
4035       OPEN  get_valid_owner;
4036       FETCH get_valid_owner INTO x_owner_name, x_owner_id, x_resource_type, x_support_site_id;
4037       IF ( get_valid_owner%NOTFOUND ) THEN
4038          CLOSE get_valid_owner;
4039          RAISE NO_DATA_FOUND ;
4040       END IF;
4041       CLOSE get_valid_owner;
4042    ELSE
4043       SELECT resource_name, resource_id , 'RS_' || res.category,
4044              DECODE(res.category, 'EMPLOYEE', res.support_site_id, NULL)
4045       INTO   x_owner_name, x_owner_id, x_resource_type, x_support_site_id
4046       FROM   cs_jtf_rs_resource_extns_sec res
4047       -- FROM   jtf_rs_resource_extns_vl res; Replaced with CS secure view
4048       WHERE  res.resource_id = p_owner_id
4049       AND    trunc(sysdate) between trunc(nvl(start_date_active, sysdate))
4050 			    and     trunc(nvl(end_date_active,   sysdate));
4051    END IF;
4052    Validate_Resource_Type
4053    ( p_api_name       => l_api_name_full
4054    , p_parameter_name => 'p_resource_type'
4055    , p_resource_type  => x_resource_type
4056    , x_return_status  => x_return_status
4057    );
4058 
4059 EXCEPTION
4060   WHEN NO_DATA_FOUND THEN
4061       IF p_mode = 'CREATE'
4062       THEN
4063         x_return_status := FND_API.G_RET_STS_SUCCESS;
4064         -- 3277647 changed from error to warning Add_Invalid_Argument_Msg
4065 
4066         Add_Param_Ignored_MSg ( p_token_an    =>  l_api_name_full,
4067                                 p_token_ip     =>  p_parameter_name,
4068                                 p_table_name  =>  null,
4069                                 p_column_name => 'P_OWNER_ID');
4070       ELSE
4071         x_return_status := FND_API.G_RET_STS_ERROR;
4072         Add_Invalid_Argument_Msg
4073         ( p_token_an    => l_api_name_full
4074         , p_token_v     => TO_CHAR(p_owner_id)
4075         , p_token_p     => p_parameter_name
4076         , p_table_name  => G_TABLE_NAME
4077         , p_column_name => 'incident_owner_id'
4078         );
4079       END IF;
4080   WHEN OTHERS THEN
4081        fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
4082        fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
4083        fnd_msg_pub.ADD;
4084        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4085 END Validate_Owner;
4086 
4087 ------------------------------------------------------
4088 
4089 PROCEDURE Validate_Resource_Type
4090 ( p_api_name             IN   VARCHAR2,
4091   p_parameter_name       IN   VARCHAR2,
4092   p_resource_type        IN   VARCHAR2,
4093   x_return_status        OUT  NOCOPY VARCHAR2
4094 )IS
4095 
4096   l_test            VARCHAR2(150);
4097   l_api_name        CONSTANT VARCHAR2(30)    := 'Validate_Resource_Type';
4098   l_api_name_full   CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
4099 
4100 BEGIN
4101 
4102     -- Initialize the return status.
4103     x_return_status := FND_API.G_RET_STS_SUCCESS;
4104 
4105     IF (UPPER(p_resource_type) IN ('RS_EMPLOYEE','RS_OTHER','RS_SUPPLIER_CONTACT', 'RS_PARTNER','RS_PARTY','RS_TBH'))
4106     THEN
4107          x_return_status := FND_API.G_RET_STS_SUCCESS;
4108     ELSE
4109          RAISE NO_DATA_FOUND;
4110     END IF;
4111 EXCEPTION
4112    WHEN NO_DATA_FOUND THEN
4113          x_return_status := FND_API.G_RET_STS_ERROR;
4114          Add_Invalid_Argument_Msg( p_token_an    =>  p_api_name,
4115                                    p_token_v     =>  p_resource_type,
4116                                    p_token_p     =>  p_parameter_name,
4117                                    p_table_name  => G_TABLE_NAME,
4118                                    p_column_name => 'RESOURCE_TYPE');
4119 
4120      WHEN OTHERS THEN
4121          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
4122        	 fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
4123        	 fnd_msg_pub.ADD;
4124        	 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4125 END Validate_Resource_Type;
4126 
4127 ----------------------------------------------------
4128 -- Validate Platform Id
4129 -- 11 jul 2006 Modified version 120.26 to fix bug # 5361090.
4130 --                      Added x_serial_controlled_flag as OUT parameter to
4131 --                      Validate_Platform_id procedure.
4132 
4133 PROCEDURE Validate_Platform_Id
4134 ( p_api_name                 IN   VARCHAR2,
4135   p_parameter_name           IN   VARCHAR2,
4136   p_platform_id              IN   NUMBER,
4137   p_organization_id          IN   NUMBER,
4138   x_serial_controlled_flag  OUT NOCOPY VARCHAR2,
4139   x_return_status           OUT  NOCOPY VARCHAR2
4140 )IS
4141 
4142   l_test                  VARCHAR2(1);
4143   l_api_name              CONSTANT VARCHAR2(30)    := 'Validate_Platform_Id';
4144   l_api_name_full         CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
4145   l_control_code          NUMBER;
4146   no_platform_excp        EXCEPTION;
4147 
4148 BEGIN
4149   -- Initialize the return status.
4150   x_return_status := FND_API.G_RET_STS_SUCCESS;
4151 
4152   SELECT NVL(revision_qty_control_code,0)
4153     INTO l_control_code
4154     FROM mtl_system_items_vl item,
4155          mtl_item_categories ic
4156    WHERE item.organization_id   = p_organization_id
4157      AND item.inventory_item_id = p_platform_id
4158      AND item.organization_id   = ic.organization_id
4159      AND item.inventory_item_id = ic.inventory_item_id
4160      AND ic.category_set_id     = fnd_profile.value('CS_SR_PLATFORM_CATEGORY_SET');
4161 
4162   IF l_control_code <> 2 THEN
4163      x_serial_controlled_flag := 'N';
4164   ELSIF l_control_code = 2 THEN
4165      x_serial_controlled_flag := 'Y';
4166   END IF ;
4167 
4168 EXCEPTION
4169      WHEN no_data_found THEN
4170           x_serial_controlled_flag := 'N';
4171           x_return_status := FND_API.G_RET_STS_ERROR;
4172 
4173           Add_Invalid_Argument_Msg(p_token_an    =>  p_api_name,
4174                                    p_token_v     =>  p_platform_id,
4175                                    p_token_p     =>  p_parameter_name,
4176                                    p_table_name  =>  G_TABLE_NAME ,
4177                                    p_column_name => 'PLATFORM_ID' );
4178 
4179      WHEN OTHERS THEN
4180          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
4181        	 fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
4182        	 fnd_msg_pub.ADD;
4183        	 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4184 
4185 END Validate_Platform_Id;
4186 
4187 -- Validate Component Id
4188 
4189 PROCEDURE Validate_CP_Comp_Id
4190 ( p_api_name             IN   VARCHAR2,
4191   p_parameter_name       IN   VARCHAR2,
4192   p_cp_component_id      IN   NUMBER,
4193   p_customer_product_id  IN   NUMBER,
4194   p_org_id               IN   NUMBER,
4195   x_return_status        OUT  NOCOPY  VARCHAR2
4196 )IS
4197 
4198   l_test                  VARCHAR2(1);
4199   l_api_name              CONSTANT VARCHAR2(30)    := 'Validate_CP_Comp_Id';
4200   l_api_name_full         CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
4201 
4202 BEGIN
4203 	-- Initialize the return status.
4204 	x_return_status := FND_API.G_RET_STS_SUCCESS;
4205 
4206 	SELECT 'x'
4207 	INTO l_test
4208 	FROM cs_sr_new_acc_cp_rg_v
4209 	WHERE instance_id = p_cp_component_id
4210 	AND object_id = p_customer_product_id
4211 	AND rownum < 2;
4212 EXCEPTION
4213     WHEN NO_DATA_FOUND THEN
4214          x_return_status := FND_API.G_RET_STS_ERROR;
4215          Add_Invalid_Argument_Msg( p_token_an    =>  p_api_name,
4216                                    p_token_v     =>  p_cp_component_id,
4217                                    p_token_p     =>  p_parameter_name,
4218                                    p_table_name  => G_TABLE_NAME ,
4219                                    p_column_name => 'CP_COMPONENT_ID');
4220 
4221     WHEN OTHERS THEN
4222          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
4223        	 fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
4224        	 fnd_msg_pub.ADD;
4225        	 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4226 
4227 END Validate_CP_Comp_Id;
4228 
4229 -- Validate Product Revision
4230 PROCEDURE Validate_Product_Revision
4231 ( p_api_name             IN   VARCHAR2,
4232   p_parameter_name       IN   VARCHAR2,
4233   p_product_revision     IN   VARCHAR2,
4234   p_customer_product_id  IN   NUMBER,
4235   p_inventory_org_id     IN   NUMBER,
4236   p_inventory_item_id    IN   NUMBER,
4237   x_return_status        OUT  NOCOPY VARCHAR2
4238 )IS
4239 
4240   l_test               VARCHAR2(1);
4241   l_rev_control_code   NUMBER;
4242   l_api_name           CONSTANT VARCHAR2(30)    := 'Validate_Product_Revision';
4243   l_api_name_full      CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
4244 
4245 BEGIN
4246   -- Initialize the return status.
4247   x_return_status := FND_API.G_RET_STS_SUCCESS;
4248   BEGIN
4249     SELECT revision_qty_control_code
4250     INTO l_rev_control_code
4251     FROM mtl_system_items_b
4252     WHERE inventory_item_id = p_inventory_item_id
4253     AND   organization_id = p_inventory_org_id;
4254 
4255     IF l_rev_control_code = 2 THEN
4256     BEGIN
4257         SELECT 'x'
4258 	INTO l_test
4259 	FROM csi_item_instances
4260 	WHERE instance_id = p_customer_product_id
4261         AND   inventory_revision = p_product_revision;
4262 
4263     EXCEPTION
4264          WHEN NO_DATA_FOUND THEN
4265          x_return_status := FND_API.G_RET_STS_ERROR;
4266          Add_Invalid_Argument_Msg(
4267           p_token_an =>  p_api_name,
4268           p_token_v  =>  p_product_revision,
4269           p_token_p  =>  p_parameter_name,
4270           p_table_name => null,
4271           p_column_name => null);
4272 
4273 	WHEN OTHERS THEN
4274          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
4275        	 fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
4276        	 fnd_msg_pub.ADD;
4277        	 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4278     END;
4279     END IF;
4280   EXCEPTION
4281      WHEN NO_DATA_FOUND THEN
4282          x_return_status := FND_API.G_RET_STS_ERROR;
4283          Add_Invalid_Argument_Msg( p_token_an    =>  p_api_name,
4284                                    p_token_v     =>  p_product_revision,
4285                                    p_token_p     =>  p_parameter_name,
4286                                    p_table_name  => G_TABLE_NAME ,
4287                                    p_column_name => 'PRODUCT_REVISION');
4288 
4289     WHEN OTHERS THEN
4290 	    x_return_status := FND_API.G_RET_STS_ERROR;
4291 	    Add_Invalid_Argument_Msg( p_token_an    =>  p_api_name,
4292                                       p_token_v     =>  TO_CHAR(p_inventory_item_id),
4293                                       p_token_p     =>  p_parameter_name,
4294                                       p_table_name  => G_TABLE_NAME ,
4295                                       p_column_name => 'PRODUCT_REVISION' );
4296   END;
4297 
4298 END Validate_Product_Revision;
4299 -- This procedure can validate version of a customer product or
4300 -- customer porduct component or customer product subcomponent
4301 -- validate_compnent_version and validate_subcomponent procedure have
4302 -- same logic and we need to change validation logic as per bug 3566783
4303 -- so we creation this procedue that can be used for component version
4304 -- and subcomponent version.
4305 -- smisra 5/4/04
4306 PROCEDURE Validate_product_Version
4307 ( p_parameter_name       IN     VARCHAR2,
4308   p_instance_id          IN     NUMBER,
4309   p_inventory_org_id     IN     NUMBER,
4310   p_product_version      IN OUT NOCOPY VARCHAR2,
4311   x_return_status        OUT    NOCOPY VARCHAR2
4312 )IS
4313 
4314   l_test               VARCHAR2(1);
4315   l_api_name           CONSTANT VARCHAR2(30)    := 'Validate_product_Version';
4316   l_api_name_full      CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
4317   l_dummy              NUMBER;
4318   l_rev_control_code   NUMBER;
4319   l_product_version  cs_incidents_all_b.component_version % type;
4320 
4321   CURSOR  c_inv_item
4322   IS SELECT inventory_item_id, inventory_revision
4323      FROM   CSI_ITEM_INSTANCES
4324      WHERE  INSTANCE_ID  = p_instance_id;
4325 
4326 
4327   CURSOR c_rev_code(l_inv_item_id IN NUMBER)
4328   IS SELECT revision_qty_control_code
4329      FROM mtl_system_items_b
4330      WHERE inventory_item_id = l_inv_item_id
4331      AND   organization_id = p_inventory_org_id;
4332 
4333 BEGIN
4334     -- Initialize the return status.
4335     x_return_status := FND_API.G_RET_STS_SUCCESS;
4336     IF p_instance_id is null THEN
4337        p_product_version := null;
4338     ELSE
4339 
4340        OPEN c_inv_item;
4341        FETCH c_inv_item INTO l_dummy, l_product_version;
4342        CLOSE c_inv_item;
4343 
4344        OPEN c_rev_code(l_dummy);
4345        FETCH c_rev_code INTO l_rev_control_code;
4346        CLOSE c_rev_code;
4347 
4348 
4349        IF l_rev_control_code = 2 THEN
4350           IF (p_product_version = FND_API.G_MISS_CHAR) then
4351               p_product_version := l_product_version;
4352           ELSIF (nvl(p_product_version,'@#') <> nvl(l_product_version,'@#')) THEN
4353               x_return_status := FND_API.G_RET_STS_ERROR;
4354               Add_Invalid_Argument_Msg(
4355                     p_token_an =>  l_api_name_full,
4356                     p_token_v  =>  p_product_version,
4357                     p_token_p  =>  p_parameter_name,
4358                     p_table_name => null,
4359                     p_column_name => null);
4360           END IF;
4361        END IF;
4362     END IF;
4363 
4364 EXCEPTION
4365       WHEN NO_DATA_FOUND THEN
4366            x_return_status := FND_API.G_RET_STS_ERROR;
4367            Add_Invalid_Argument_Msg( p_token_an    =>  l_api_name_full,
4368                                      p_token_v     =>  p_product_version,
4369                                      p_token_p     =>  p_parameter_name,
4370                                      p_table_name  => G_TABLE_NAME ,
4371                                      p_column_name => 'COMPONENT_VERSION' );
4372       WHEN OTHERS  THEN
4373            fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
4374            fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
4375            fnd_msg_pub.ADD;
4376            x_return_status := fnd_api.g_ret_sts_unexp_error;
4377 END Validate_product_Version;
4378 --
4379 -- Validate Component Version
4380 PROCEDURE Validate_Component_Version
4381 ( p_api_name             IN   VARCHAR2,
4382   p_parameter_name       IN   VARCHAR2,
4383   p_component_version    IN   VARCHAR2,
4384   p_cp_component_id      IN   NUMBER,
4385   p_customer_product_id  IN   NUMBER,
4386   p_inventory_org_id     IN   NUMBER,
4387   x_return_status        OUT  NOCOPY VARCHAR2
4388 )IS
4389 
4390   l_test               VARCHAR2(1);
4391   l_api_name           CONSTANT VARCHAR2(30)    := 'Validate_Component_Version';
4392   l_api_name_full      CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
4393   l_dummy              NUMBER;
4394   l_rev_control_code   NUMBER;
4395 
4396   CURSOR  c_inv_item
4397   IS SELECT inventory_item_id
4398      FROM   CSI_ITEM_INSTANCES
4399      WHERE  INSTANCE_ID  = p_cp_component_id;
4400 
4401 
4402   CURSOR c_rev_code(l_inv_item_id IN NUMBER)
4403   IS SELECT revision_qty_control_code
4404      FROM mtl_system_items_b
4405      WHERE inventory_item_id = l_inv_item_id
4406      AND   organization_id = p_inventory_org_id;
4407 
4408 BEGIN
4409 	-- Initialize the return status.
4410 	x_return_status := FND_API.G_RET_STS_SUCCESS;
4411 
4412 	-- For bug 3337848 - Check for revision control
4413 
4414 	BEGIN
4415 
4416 	   OPEN c_inv_item;
4417 	   FETCH c_inv_item INTO l_dummy;
4418 	   CLOSE c_inv_item;
4419 
4420 	   OPEN c_rev_code(l_dummy);
4421 	   FETCH c_rev_code INTO l_rev_control_code;
4422 	   CLOSE c_rev_code;
4423 
4424 
4425 	   IF l_rev_control_code = 2 THEN
4426 	   BEGIN
4427 	        SELECT 'x'
4428 		INTO l_test
4429 		FROM csi_item_instances
4430 		WHERE instance_id = p_cp_component_id
4431 	        AND   inventory_revision = p_component_version;
4432 
4433 	   EXCEPTION
4434 		 WHEN NO_DATA_FOUND THEN
4435                          -- 3352160 modified value of p_token_an
4436 		         x_return_status := FND_API.G_RET_STS_ERROR;
4437 		         Add_Invalid_Argument_Msg(
4438 			          p_token_an =>  l_api_name_full,
4439 			          p_token_v  =>  p_component_version,
4440 			          p_token_p  =>  p_parameter_name,
4441 			          p_table_name => null,
4442 			          p_column_name => null);
4443 
4444 		WHEN OTHERS THEN
4445 			 fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
4446 		       	 fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
4447 		       	 fnd_msg_pub.ADD;
4448 		       	 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4449 	  END;
4450 	  END IF;
4451 
4452 
4453 
4454 
4455 EXCEPTION
4456 	 WHEN NO_DATA_FOUND THEN
4457 		 x_return_status := FND_API.G_RET_STS_ERROR;
4458 		 Add_Invalid_Argument_Msg( p_token_an    =>  l_api_name_full,
4459                                            p_token_v     =>  p_component_version,
4460                                            p_token_p     =>  p_parameter_name,
4461                                            p_table_name  => G_TABLE_NAME ,
4462                                            p_column_name => 'COMPONENT_VERSION' );
4463       WHEN OTHERS  THEN
4464 		 fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
4465 		 fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
4466 		 fnd_msg_pub.ADD;
4467 		 x_return_status := fnd_api.g_ret_sts_unexp_error;
4468  END;
4469 END Validate_Component_Version;
4470 
4471 -- Validate Subcomponent Version
4472 PROCEDURE Validate_Subcomponent_Version
4473 ( p_api_name             IN   VARCHAR2,
4474   p_parameter_name       IN   VARCHAR2,
4475   p_subcomponent_version IN   VARCHAR2,
4476   p_cp_component_id      IN   NUMBER,
4477   p_cp_subcomponent_id   IN   NUMBER,
4478   p_customer_product_id  IN   NUMBER,
4479   p_inventory_org_id     IN   NUMBER,
4480   x_return_status        OUT  NOCOPY VARCHAR2
4481 )IS
4482 
4483   l_test               VARCHAR2(1);
4484   l_api_name           CONSTANT VARCHAR2(30)    := 'Validate_Subcomponent_Version';
4485   l_api_name_full      CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
4486   l_dummy              NUMBER;
4487   l_rev_control_code   NUMBER;
4488 
4489   CURSOR  c_inv_item
4490   IS SELECT inventory_item_id
4491      FROM   CSI_ITEM_INSTANCES
4492      WHERE  INSTANCE_ID  = p_cp_subcomponent_id;
4493 
4494 
4495   CURSOR c_rev_code(l_inv_item_id IN NUMBER)
4496   IS SELECT revision_qty_control_code
4497      FROM mtl_system_items_b
4498      WHERE inventory_item_id = l_inv_item_id
4499      AND   organization_id = p_inventory_org_id;
4500 
4501 BEGIN
4502 	-- Initialize the return status.
4503 	x_return_status := FND_API.G_RET_STS_SUCCESS;
4504 
4505         -- For bug 3337848 - for revision control
4506 
4507 	  BEGIN
4508 	   OPEN c_inv_item;
4509 	   FETCH c_inv_item INTO l_dummy;
4510 	   CLOSE c_inv_item;
4511 
4512 	   OPEN c_rev_code(l_dummy);
4513 	   FETCH c_rev_code INTO l_rev_control_code;
4514 	   CLOSE c_rev_code;
4515 
4516 	  IF l_rev_control_code = 2 THEN
4517 	  BEGIN
4518 	        SELECT 'x'
4519 		INTO l_test
4520 		FROM csi_item_instances
4521 		WHERE instance_id = p_cp_subcomponent_id
4522 	        AND   inventory_revision = p_subcomponent_version;
4523 
4524 	 EXCEPTION
4525          WHEN NO_DATA_FOUND THEN
4526                  -- 3352160 - modified value of p_token_an
4527 	         x_return_status := FND_API.G_RET_STS_ERROR;
4528 	         Add_Invalid_Argument_Msg(
4529 		          p_token_an =>  l_api_name_full,
4530 		          p_token_v  =>  p_subcomponent_version,
4531 		          p_token_p  =>  p_parameter_name,
4532 		          p_table_name => null,
4533 		          p_column_name => null);
4534 
4535 	 WHEN OTHERS THEN
4536 	         fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
4537 	       	 fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
4538 	       	 fnd_msg_pub.ADD;
4539 	       	 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4540 	END;
4541 	END IF;
4542 
4543 
4544 
4545 EXCEPTION
4546 	 WHEN NO_DATA_FOUND THEN
4547          x_return_status := FND_API.G_RET_STS_ERROR;
4548          Add_Invalid_Argument_Msg( p_token_an    =>  l_api_name_full,
4549                                    p_token_v     =>  p_subcomponent_version,
4550                                    p_token_p     =>  p_parameter_name ,
4551                                    p_table_name  => G_TABLE_NAME,
4552                                    p_column_name => 'SUBCOMPONENT_VERSION');
4553       WHEN OTHERS  THEN
4554          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
4555          fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
4556          fnd_msg_pub.ADD;
4557          x_return_status := fnd_api.g_ret_sts_unexp_error;
4558  END;
4559 END Validate_Subcomponent_Version;
4560 ----------------------------------------------------------------------------------
4561 
4562 -- Validate Sub Component Id
4563 PROCEDURE Validate_CP_SubComp_Id
4564 ( p_api_name             IN   VARCHAR2,
4565   p_parameter_name       IN   VARCHAR2,
4566   p_cp_subcomponent_id   IN   NUMBER,
4567   p_cp_component_id      IN   NUMBER,
4568   p_customer_product_id  IN   NUMBER,
4569   p_org_id               IN   NUMBER,
4570   x_return_status        OUT  NOCOPY VARCHAR2
4571 )IS
4572 
4573   l_test            VARCHAR2(1);
4574   l_api_name        CONSTANT VARCHAR2(30)    := 'Validate_CP_SubComp_Id';
4575   l_api_name_full   CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
4576 
4577 BEGIN
4578 	-- Initialize the return status.
4579 	x_return_status := FND_API.G_RET_STS_SUCCESS;
4580 
4581         /* SELECT 'x'
4582 	 INTO l_test
4583 	 FROM cs_customer_products_all
4584 	 WHERE customer_product_id = p_cp_subcomponent_id
4585          AND   config_parent_id = p_cp_component_id
4586          AND   config_root_id   = p_customer_product_id; */
4587 
4588          -- For bug 3338046 - the view has records of ser_req_enabled = 'E'
4589 	SELECT  'x'
4590 	INTO l_test
4591 	FROM cs_sr_new_acc_cp_rg_v
4592 	WHERE instance_id = p_cp_subcomponent_id
4593 	AND object_id = p_cp_component_id
4594 	AND rownum < 2;
4595 
4596 EXCEPTION
4597      WHEN NO_DATA_FOUND THEN
4598          x_return_status := FND_API.G_RET_STS_ERROR;
4599          Add_Invalid_Argument_Msg( p_token_an    =>  l_api_name_full,
4600                                    p_token_v     =>  TO_CHAR(p_cp_subcomponent_id),
4601                                    p_token_p     => p_parameter_name,
4602                                    p_table_name  => G_TABLE_NAME ,
4603                                    p_column_name => 'CP_SUBCOMPONENT_ID');
4604 
4605       WHEN OTHERS  THEN
4606          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
4607          fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
4608          fnd_msg_pub.ADD;
4609          x_return_status := fnd_api.g_ret_sts_unexp_error;
4610 
4611 END Validate_CP_SubComp_Id;
4612 
4613 
4614 -- Validate INV ITEM REVISION
4615 PROCEDURE Validate_Inv_Item_Rev
4616 ( p_api_name                   IN   VARCHAR2,
4617   p_parameter_name             IN   VARCHAR2,
4618   p_inv_item_revision          IN   VARCHAR2,
4619   p_inventory_item_id          IN   NUMBER,
4620   p_inventory_org_id           IN   NUMBER,
4621   x_return_status              OUT  NOCOPY VARCHAR2
4622 )IS
4623 
4624   l_test               VARCHAR2(1);
4625   l_rev_control_code   NUMBER;
4626   l_api_name           CONSTANT VARCHAR2(30)    := 'Validate_Inv_Item_Rev';
4627   l_api_name_full      CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
4628 
4629 BEGIN
4630   -- Initialize the return status.
4631   x_return_status := FND_API.G_RET_STS_SUCCESS;
4632 
4633   BEGIN
4634     SELECT revision_qty_control_code
4635     INTO l_rev_control_code
4636     FROM mtl_system_items_b
4637     WHERE inventory_item_id = p_inventory_item_id
4638     AND   serv_req_enabled_code = 'E'
4639     AND   organization_id = p_inventory_org_id;
4640 
4641     IF l_rev_control_code = 2 THEN
4642       BEGIN
4643          SELECT 'x'
4644 	 INTO l_test
4645 	 FROM mtl_item_revisions
4646 	 WHERE inventory_item_id = p_inventory_item_id
4647          AND   organization_id  = p_inventory_org_id
4648 	 AND   revision         = p_inv_item_revision;
4649 
4650       EXCEPTION
4651 	 WHEN NO_DATA_FOUND THEN
4652          x_return_status := FND_API.G_RET_STS_ERROR;
4653          Add_Invalid_Argument_Msg( p_token_an    =>  l_api_name_full,
4654                                    p_token_v     =>  p_inv_item_revision,
4655                                    p_token_p     =>  p_parameter_name,
4656                                    p_table_name  => G_TABLE_NAME ,
4657                                    p_column_name => 'INV_ITEM_REVISION' );
4658      WHEN OTHERS  THEN
4659          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
4660          fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
4661          fnd_msg_pub.ADD;
4662          x_return_status := fnd_api.g_ret_sts_unexp_error;
4663 
4664       END;
4665     END IF;
4666 
4667   EXCEPTION
4668     WHEN NO_DATA_FOUND THEN
4669 	    x_return_status := FND_API.G_RET_STS_ERROR;
4670 	    Add_Invalid_Argument_Msg( p_token_an    =>  l_api_name_full,
4671                                       p_token_v     =>  TO_CHAR(p_inventory_item_id),
4672                                       p_token_p     =>  p_parameter_name,
4673                                       p_table_name  => G_TABLE_NAME ,
4674                                       p_column_name => 'INVENTORY_ITEM_ID' );
4675 
4676       WHEN OTHERS  THEN
4677          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
4678          fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
4679          fnd_msg_pub.ADD;
4680          x_return_status := fnd_api.g_ret_sts_unexp_error;
4681 
4682 END;
4683 END Validate_Inv_Item_Rev;
4684 ------------------------------------------------------
4685 
4686 -- Validate INV COMP ID
4687 PROCEDURE Validate_Inv_Comp_Id
4688 ( p_api_name                   IN   VARCHAR2,
4689   p_parameter_name             IN   VARCHAR2,
4690   p_inventory_org_id           IN   NUMBER,
4691   p_inv_component_id           IN   NUMBER,
4692   p_inventory_item_id          IN   NUMBER,
4693   x_return_status              OUT  NOCOPY VARCHAR2
4694 )IS
4695 
4696   l_test          VARCHAR2(1);
4697   l_api_name      CONSTANT VARCHAR2(30)    := 'Validate_Inv_Comp_Id';
4698   l_api_name_full CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
4699 
4700 BEGIN
4701 	-- Initialize the return status.
4702 	x_return_status := FND_API.G_RET_STS_SUCCESS;
4703 
4704 
4705 /*   commenting out this SQL as the view cs_sr_inv_components_v is not
4706      looking at the effective date of the inventory_item_id.
4707          SELECT 'x'
4708 	 INTO l_test
4709 	 FROM cs_sr_inv_components_v
4710 	 WHERE organization_id = p_inventory_org_id
4711          AND   component_id = p_inv_component_id
4712          AND   inventory_item_id  = p_inventory_item_id;
4713 */
4714 
4715 	SELECT 'X' INTO l_test
4716 	FROM
4717 	bom_bill_of_materials bom,
4718 	bom_inventory_components bic,
4719 	mtl_system_items_b kfv
4720 	WHERE
4721 	bom.organization_id = kfv.organization_id AND
4722 	bic.bill_sequence_id = bom.common_bill_sequence_id AND
4723 	trunc(sysdate) between trunc(bic.effectivity_date) and
4724 	nvl(bic.disable_date, trunc(sysdate)) AND
4725 	trunc(sysdate) between trunc(nvl(kfv.start_date_active,sysdate)) and
4726 	nvl(kfv.end_date_active, trunc(sysdate)) AND
4727 	kfv.inventory_item_id = bic.component_item_id AND
4728 	bom.organization_id = p_inventory_org_id AND
4729 	bom.assembly_item_id = p_inventory_item_id AND
4730 	bic.component_item_id = p_inv_component_id AND
4731 	bom.alternate_bom_designator IS NULL;
4732 
4733 EXCEPTION
4734 	WHEN NO_DATA_FOUND THEN
4735          x_return_status := FND_API.G_RET_STS_ERROR;
4736          Add_Invalid_Argument_Msg( p_token_an    =>  l_api_name_full,
4737                                    p_token_v     =>  TO_CHAR(p_inv_component_id),
4738                                    p_token_p     =>  p_parameter_name,
4739                                    p_table_name  => G_TABLE_NAME ,
4740                                    p_column_name => 'INV_COMPONENT_ID' );
4741       WHEN OTHERS  THEN
4742          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
4743          fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
4744          fnd_msg_pub.ADD;
4745          x_return_status := fnd_api.g_ret_sts_unexp_error;
4746 
4747 END  Validate_Inv_Comp_Id;
4748 -----------------------------------------
4749 
4750 -- Validate INV COMP VER
4751 -- For BUG 2930217, we check the revision_qty_control_code being 2, before we validate the
4752 -- inv_component_version.
4753 
4754 PROCEDURE Validate_Inv_Comp_Ver (
4755    p_api_name                   IN   VARCHAR2,
4756    p_parameter_name             IN   VARCHAR2,
4757    p_inventory_org_id           IN   NUMBER,
4758    p_inv_component_id           IN   NUMBER,
4759    p_inv_component_version      IN   VARCHAR2,
4760    x_return_status              OUT  NOCOPY VARCHAR2 )
4761 IS
4762    l_rev_control_code   NUMBER;
4763    l_api_name           CONSTANT VARCHAR2(30) := 'Validate_Inv_Comp_Ver';
4764    l_api_name_full      CONSTANT VARCHAR2(70) := G_PKG_NAME||'.'||l_api_name;
4765    l_test               VARCHAR2(3);
4766 BEGIN
4767    -- Initialize the return status.
4768    x_return_status := FND_API.G_RET_STS_SUCCESS;
4769 
4770    SELECT revision_qty_control_code
4771    INTO   l_rev_control_code
4772    FROM   mtl_system_items_b
4773    WHERE  inventory_item_id = p_inv_component_id
4774    AND    organization_id   = p_inventory_org_id;
4775 
4776    IF l_rev_control_code = 2 THEN
4777       SELECT 'x'
4778       INTO   l_test
4779       FROM   mtl_item_revisions
4780       WHERE  organization_id   = p_inventory_org_id
4781       AND    inventory_item_id = p_inv_component_id
4782       AND    revision          = p_inv_component_version ;
4783    END IF;
4784 
4785 EXCEPTION
4786    WHEN NO_DATA_FOUND THEN
4787       x_return_status := FND_API.G_RET_STS_ERROR;
4788       Add_Invalid_Argument_Msg(
4789 	 p_token_an    => l_api_name_full,
4790          p_token_v     => p_inv_component_version,
4791          p_token_p     => p_parameter_name,
4792          p_table_name  => G_TABLE_NAME ,
4793          p_column_name => 'INV_COMPONENT_VERSION' );
4794 
4795    WHEN OTHERS THEN
4796       x_return_status := FND_API.G_RET_STS_ERROR;
4797       Add_Invalid_Argument_Msg(
4798 	 p_token_an    => l_api_name_full,
4799          p_token_v     => p_inv_component_version,
4800          p_token_p     => p_parameter_name,
4801          p_table_name  => G_TABLE_NAME ,
4802          p_column_name => 'INV_COMPONENT_VERSION' );
4803 
4804 END  Validate_Inv_Comp_Ver;
4805 
4806 
4807 -- Validate INV SUBCOMP ID
4808 PROCEDURE Validate_Inv_SubComp_Id (
4809    p_api_name                   IN   VARCHAR2,
4810    p_parameter_name             IN   VARCHAR2,
4811    p_inventory_org_id           IN   NUMBER,
4812    p_inv_subcomponent_id        IN   NUMBER,
4813    p_inv_component_id           IN   NUMBER,
4814    x_return_status              OUT  NOCOPY VARCHAR2 )
4815 IS
4816 
4817    l_test            VARCHAR2(1);
4818    l_api_name        CONSTANT VARCHAR2(30)    := 'Validate_Inv_SubComp_Id';
4819    l_api_name_full   CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
4820 
4821 BEGIN
4822    -- Initialize the return status.
4823    x_return_status := FND_API.G_RET_STS_SUCCESS;
4824 
4825 /* commenting out this SQL , as the view cs_sr_inv_subcomponents_v does not
4826    take the effective dates of the inv_subcomp_id in the invwentory table.
4827    SELECT 'x'
4828    INTO   l_test
4829    FROM   cs_sr_inv_subcomponents_v
4830    WHERE  organization_id = p_inventory_org_id
4831    AND    subcomponent_id = p_inv_subcomponent_id
4832    AND    component_id    = p_inv_component_id
4833    AND    rownum < 2 ;
4834 */
4835 
4836 	SELECT 'X' INTO l_test
4837 	FROM
4838 	bom_bill_of_materials bom,
4839 	bom_inventory_components bic,
4840 	mtl_system_items_b kfv
4841 	WHERE
4842 	bom.organization_id = kfv.organization_id AND
4843 	bic.bill_sequence_id = bom.common_bill_sequence_id AND
4844 	trunc(sysdate) between trunc(bic.effectivity_date) and
4845 	nvl(bic.disable_date, trunc(sysdate)) AND
4846 	trunc(sysdate) between trunc(nvl(kfv.start_date_active,sysdate)) and
4847 	nvl(kfv.end_date_active, trunc(sysdate)) AND
4848 	kfv.inventory_item_id = bic.component_item_id AND
4849 	bom.organization_id = p_inventory_org_id AND
4850 	bom.assembly_item_id = p_inv_component_id AND
4851 	bic.component_item_id = p_inv_subcomponent_id AND
4852 	bom.alternate_bom_designator IS NULL;
4853 
4854 
4855 EXCEPTION
4856    WHEN NO_DATA_FOUND THEN
4857       x_return_status := FND_API.G_RET_STS_ERROR;
4858       Add_Invalid_Argument_Msg( p_token_an    =>  l_api_name_full,
4859          p_token_v     =>  TO_CHAR(p_inv_subcomponent_id),
4860          p_token_p     =>  p_parameter_name,
4861          p_table_name  => G_TABLE_NAME ,
4862          p_column_name => 'INV_SUBCOMPONENT_ID' );
4863 
4864    WHEN OTHERS  THEN
4865       fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
4866       fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
4867       fnd_msg_pub.ADD;
4868       x_return_status := fnd_api.g_ret_sts_unexp_error;
4869 
4870 END  Validate_Inv_SubComp_Id;
4871 -------------------------------------
4872 
4873 -- Validate INV SUb COMP VER
4874 PROCEDURE Validate_Inv_SubComp_Ver
4875 ( p_api_name                   IN   VARCHAR2,
4876   p_parameter_name             IN   VARCHAR2,
4877   p_inventory_org_id           IN   NUMBER,
4878   p_inv_subcomponent_id        IN   NUMBER,
4879   p_inv_subcomponent_version   IN   VARCHAR2,
4880   x_return_status              OUT  NOCOPY VARCHAR2
4881 )IS
4882 
4883   l_test            VARCHAR2(1);
4884   l_api_name        CONSTANT VARCHAR2(30)    := 'Validate_Inv_SubComp_Ver';
4885   l_api_name_full   CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
4886   l_rev_control_code   NUMBER;
4887 
4888 BEGIN
4889 	-- Initialize the return status.
4890 	x_return_status := FND_API.G_RET_STS_SUCCESS;
4891 
4892    SELECT revision_qty_control_code
4893    INTO   l_rev_control_code
4894    FROM   mtl_system_items_b
4895    WHERE  inventory_item_id = p_inv_subcomponent_id
4896    AND    organization_id   = p_inventory_org_id;
4897 
4898    IF l_rev_control_code = 2 THEN
4899 	SELECT 'x'
4900 	INTO l_test
4901 	FROM mtl_item_revisions
4902 	WHERE organization_id = p_inventory_org_id
4903         AND   inventory_item_id = p_inv_subcomponent_id
4904         AND   revision          = p_inv_subcomponent_version ;
4905    END IF;
4906 
4907 EXCEPTION
4908       WHEN NO_DATA_FOUND THEN
4909          x_return_status := FND_API.G_RET_STS_ERROR;
4910          Add_Invalid_Argument_Msg( p_token_an    =>  l_api_name_full,
4911                                    p_token_v     =>  p_inv_subcomponent_version,
4912                                    p_token_p     =>  p_parameter_name,
4913                                    p_table_name  => G_TABLE_NAME ,
4914                                    p_column_name => 'INV_SUBCOMPONENT_VERSION' );
4915       WHEN OTHERS  THEN
4916          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
4917          fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
4918          fnd_msg_pub.ADD;
4919          x_return_status := fnd_api.g_ret_sts_unexp_error;
4920 
4921 END  Validate_Inv_SubComp_Ver;
4922 
4923 -- Validate  SR CREATION CHANNEL
4924 PROCEDURE Validate_SR_Channel
4925 ( p_api_name                   IN   VARCHAR2,
4926   p_parameter_name             IN   VARCHAR2,
4927   p_sr_creation_channel        IN   VARCHAR2,
4928   x_return_status              OUT  NOCOPY VARCHAR2
4929 )IS
4930 
4931   l_dummy         VARCHAR2(1);
4932   l_api_name      CONSTANT VARCHAR2(30)    := 'Validate_SR_Channel';
4933   l_api_name_full CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
4934 
4935 BEGIN
4936 	-- Initialize the return status.
4937 	x_return_status := FND_API.G_RET_STS_SUCCESS;
4938 
4939 	SELECT 'x' INTO l_dummy
4940 	FROM  CS_LOOKUPS
4941 	WHERE lookup_code = UPPER(p_sr_creation_channel)
4942 	AND   lookup_type = 'CS_SR_CREATION_CHANNEL'
4943 	AND   TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
4944 			AND TRUNC(NVL(end_date_active, SYSDATE)) ;
4945 
4946 EXCEPTION
4947      WHEN NO_DATA_FOUND THEN
4948          x_return_status := FND_API.G_RET_STS_ERROR;
4949          Add_Invalid_Argument_Msg( p_token_an    =>  l_api_name_full,
4950                                    p_token_v     =>  p_sr_creation_channel,
4951                                    p_token_p     =>  p_parameter_name,
4952                                    p_table_name  => G_TABLE_NAME ,
4953                                    p_column_name => 'SR_CREATION_CHANNEL' );
4954       WHEN OTHERS  THEN
4955          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
4956          fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
4957          fnd_msg_pub.ADD;
4958          x_return_status := fnd_api.g_ret_sts_unexp_error;
4959 
4960 END  Validate_SR_Channel;
4961 ---------------------------------------------------------------------------------
4962 
4963 -- Validate Language Id
4964 PROCEDURE Validate_CP_Language_Id
4965 ( p_api_name                   IN  VARCHAR2,
4966   p_parameter_name             IN  VARCHAR2,
4967   p_language_id                IN  NUMBER,
4968   p_customer_product_id        IN  NUMBER,
4969   x_return_status              OUT NOCOPY VARCHAR2
4970 )IS
4971 
4972   l_test            VARCHAR2(1);
4973   l_api_name        CONSTANT VARCHAR2(30)    := 'Validate_CP_Language_Id';
4974   l_api_name_full   CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
4975 
4976 BEGIN
4977 	-- Initialize the return status.
4978 	x_return_status := FND_API.G_RET_STS_SUCCESS;
4979 	 SELECT 'x'
4980 	 INTO l_test
4981 	 FROM cs_cp_languages
4982 	 WHERE cp_language_id = p_language_id
4983          AND    customer_product_id = p_customer_product_id;
4984 
4985 EXCEPTION
4986 	 WHEN NO_DATA_FOUND THEN
4987          x_return_status := FND_API.G_RET_STS_ERROR;
4988          Add_Invalid_Argument_Msg( p_token_an    =>  l_api_name_full ,
4989                                    p_token_v     =>  TO_CHAR(p_language_id),
4990                                    p_token_p     =>  p_parameter_name,
4991                                    p_table_name => G_TABLE_NAME,
4992                                    p_column_name => 'LANGUAGE_ID');
4993       WHEN OTHERS  THEN
4994          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
4995          fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
4996          fnd_msg_pub.ADD;
4997          x_return_status := fnd_api.g_ret_sts_unexp_error;
4998 
4999 END Validate_CP_Language_Id;
5000 ---------------------------------------------------------------------------------------------
5001 
5002 -- Validate Territory Id
5003 PROCEDURE Validate_Territory_Id
5004 ( p_api_name                   IN   VARCHAR2,
5005   p_parameter_name             IN   VARCHAR2,
5006   p_territory_id                IN   NUMBER,
5007   p_owner_id                    IN    NUMBER,
5008   x_return_status              OUT  NOCOPY VARCHAR2
5009 )IS
5010 
5011   l_test             VARCHAR2(1);
5012   l_api_name         CONSTANT VARCHAR2(30)    := 'Validate_Territory_Id';
5013   l_api_name_full    CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
5014 
5015 BEGIN
5016 	-- Initialize the return status.
5017 	x_return_status := FND_API.G_RET_STS_SUCCESS;
5018 
5019 	SELECT 'x' INTO l_test
5020 	FROM JTF_TERR_RSC_ALL
5021 	WHERE resource_id = p_owner_id
5022         AND   terr_id = p_territory_id;
5023 
5024 EXCEPTION
5025 	 WHEN NO_DATA_FOUND THEN
5026          x_return_status := FND_API.G_RET_STS_ERROR;
5027          Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full ,
5028                                    p_token_v     => TO_CHAR(p_territory_id),
5029                                    p_token_p     => p_parameter_name,
5030                                    p_table_name  => G_TABLE_NAME,
5031                                    p_column_name => 'TERRITORY_ID');
5032       WHEN OTHERS  THEN
5033          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
5034          fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
5035          fnd_msg_pub.ADD;
5036          x_return_status := fnd_api.g_ret_sts_unexp_error;
5037 
5038 END Validate_Territory_Id;
5039 
5040 
5041 --------------------
5042 -- This validation has to look into JTF_CONTACT_POINTS_V because
5043 -- this view has contact point ids  belonging to PARTIES only and not to PARTY_SITES
5044 -- Validate Contact Point Id
5045 PROCEDURE Validate_Per_Contact_Point_Id
5046 ( p_api_name                   IN   VARCHAR2,
5047   p_parameter_name             IN   VARCHAR2,
5048   p_contact_point_type         IN   VARCHAR2,
5049   p_contact_point_id           IN   NUMBER,
5050   p_party_id                   IN   NUMBER,
5051   x_return_status              OUT  NOCOPY VARCHAR2
5052 )IS
5053 
5054   l_test             NUMBER;
5055   l_api_name         CONSTANT VARCHAR2(30)    := 'Validate_Per_Contact_Point_Id';
5056   l_api_name_full    CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
5057 
5058 BEGIN
5059 	-- Initialize the return status.
5060 	x_return_status := FND_API.G_RET_STS_SUCCESS;
5061 
5062 	SELECT a.contact_point_id INTO l_test
5063 	FROM HZ_CONTACT_POINTS a
5064 	WHERE a.contact_point_type =  p_contact_point_type
5065 	AND   a.contact_point_id   =  p_contact_point_id
5066 	AND   a.OWNER_TABLE_ID     =  p_party_id
5067 	AND   a.OWNER_TABLE_NAME   =  'HZ_PARTIES'
5068 	AND   a.STATUS = 'A';
5069 EXCEPTION
5070       WHEN NO_DATA_FOUND THEN
5071          x_return_status := FND_API.G_RET_STS_ERROR;
5072       -- new message for 11.5.10
5073       -- Contact point is not valid. Please check the values for the following:
5074 	  -- party ,contact point and contact point type.
5075 
5076          fnd_message.set_name ('CS', 'CS_SR_CONT_POINT_INVALID');
5077          fnd_message.set_token('API_NAME', l_api_name_full );
5078          fnd_msg_pub.add;
5079 
5080       WHEN OTHERS  THEN
5081          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
5082          fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
5083          fnd_msg_pub.ADD;
5084          x_return_status := fnd_api.g_ret_sts_unexp_error;
5085 
5086 END Validate_Per_Contact_Point_Id;
5087 ---------------------------------------
5088 
5089 -- Validate Contact Point Id
5090 PROCEDURE Validate_Emp_Contact_Point_Id
5091 ( p_api_name                   IN   VARCHAR2,
5092   p_parameter_name             IN   VARCHAR2,
5093   p_employee_id                IN   NUMBER,
5094   p_contact_point_id           IN   NUMBER,
5095   x_return_status              OUT  NOCOPY VARCHAR2
5096 )IS
5097 
5098   l_test             NUMBER;
5099   l_api_name         CONSTANT VARCHAR2(30)    := 'Validate_Emp_Contact_Point_Id';
5100   l_api_name_full    CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
5101 
5102 BEGIN
5103 	-- Initialize the return status.
5104 	x_return_status := FND_API.G_RET_STS_SUCCESS;
5105 
5106 	SELECT PHONE_ID
5107 	INTO  l_test
5108 	FROM  per_phones
5109 	WHERE parent_id  = p_employee_id
5110         AND   parent_table  = 'PER_ALL_PEOPLE_F'
5111 	AND   phone_id = p_contact_point_id ;
5112 
5113 EXCEPTION
5114 	 WHEN NO_DATA_FOUND THEN
5115          x_return_status := FND_API.G_RET_STS_ERROR;
5116          Add_Invalid_Argument_Msg( p_token_an    =>  l_api_name_full ,
5117                                    p_token_v     =>  TO_CHAR(p_contact_point_id),
5118                                    p_token_p     =>  p_parameter_name,
5119                                    p_table_name  => 'CS_HZ_SR_CONTACT_POINTS' ,
5120                                    p_column_name => 'CONTACT_POINT_ID');
5121       WHEN OTHERS  THEN
5122          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
5123          fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
5124          fnd_msg_pub.ADD;
5125          x_return_status := fnd_api.g_ret_sts_unexp_error;
5126 
5127 END Validate_Emp_Contact_Point_Id;
5128 -----------------------------------------------------------------
5129 
5130 -- Validate Contact Point Type
5131 PROCEDURE Validate_Contact_Point_Type
5132 ( p_api_name                   IN   VARCHAR2,
5133   p_parameter_name             IN   VARCHAR2,
5134   p_contact_point_type         IN   VARCHAR2,
5135   x_return_status              OUT  NOCOPY VARCHAR2
5136 )IS
5137 
5138   l_test           VARCHAR2(1);
5139   l_api_name       CONSTANT VARCHAR2(30)    := 'Validate_Contact_Point_Type';
5140   l_api_name_full  CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
5141 
5142 BEGIN
5143   -- Initialize the return status.
5144   x_return_status := FND_API.G_RET_STS_SUCCESS;
5145 
5146   SELECT 'x'
5147   INTO l_test
5148   FROM AR_LOOKUPS
5149   WHERE  lookup_code = UPPER(p_contact_point_type)
5150   AND    (lookup_type = 'COMMUNICATION_TYPE' OR lookup_type = 'PHONE_LINE_TYPE')
5151   AND    TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
5152   AND     TRUNC(NVL(end_date_active, SYSDATE))
5153   AND     ROWNUM <= 1 ;
5154 EXCEPTION
5155  WHEN NO_DATA_FOUND THEN
5156      x_return_status := FND_API.G_RET_STS_ERROR;
5157      Add_Invalid_Argument_Msg( p_token_an    =>  l_api_name_full ,
5158                                p_token_v     =>  p_contact_point_type,
5159                                p_token_p     => p_parameter_name,
5160                                p_table_name => 'CS_HZ_SR_CONTACT_POINTS',
5161                                p_column_name  => 'CONTACT_POINT_TYPE');
5162  WHEN OTHERS  THEN
5163          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
5164          fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
5165          fnd_msg_pub.ADD;
5166          x_return_status := fnd_api.g_ret_sts_unexp_error;
5167 END Validate_Contact_Point_Type;
5168 
5169 -- Validate Contact Type
5170 PROCEDURE Validate_Contact_Type
5171 ( p_api_name           IN   VARCHAR2,
5172   p_parameter_name     IN   VARCHAR2,
5173   p_contact_type       IN   VARCHAR2,
5174   x_return_status      OUT  NOCOPY VARCHAR2
5175 )IS
5176 
5177   l_test            VARCHAR2(1);
5178   l_api_name        CONSTANT VARCHAR2(30)    := 'Validate_Contact_Type';
5179   l_api_name_full   CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
5180 
5181 BEGIN
5182 	-- Initialize the return status.
5183 	x_return_status := FND_API.G_RET_STS_SUCCESS;
5184 
5185 	SELECT 'x' INTO l_test
5186 	FROM CS_LOOKUPS
5187 	WHERE  lookup_code = UPPER(p_contact_type)
5188         AND    (lookup_type = 'CS_SR_CONTACT_TYPES')
5189         AND    TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
5190                         AND     TRUNC(NVL(end_date_active, SYSDATE))
5191         AND ROWNUM <= 1;
5192 
5193 EXCEPTION
5194      WHEN NO_DATA_FOUND THEN
5195      	x_return_status := FND_API.G_RET_STS_ERROR;
5196      	Add_Invalid_Argument_Msg( p_token_an    =>  l_api_name_full ,
5197                                   p_token_v     =>  p_contact_type,
5198                                   p_token_p     =>  p_parameter_name,
5199                                   p_table_name => 'CS_HZ_SR_CONTACT_POINTS',
5200                                   p_column_name  => 'CONTACT_TYPE');
5201       WHEN OTHERS  THEN
5202          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
5203          fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
5204          fnd_msg_pub.ADD;
5205          x_return_status := fnd_api.g_ret_sts_unexp_error;
5206 END Validate_Contact_Type;
5207 ---------------------------------------
5208 
5209 --Validate Account ID
5210 PROCEDURE Validate_Account_Id
5211 (p_api_name        IN   VARCHAR2,
5212  p_parameter_name  IN   VARCHAR2,
5213  p_account_id      IN   NUMBER,
5214  p_customer_id     IN   NUMBER,
5215  x_return_status   OUT  NOCOPY VARCHAR2
5216 )
5217 IS
5218 
5219   l_test            VARCHAR2(1);
5220   l_api_name        CONSTANT VARCHAR2(30)    := 'Validate_Account_Id';
5221   l_api_name_full   CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
5222 
5223 BEGIN
5224 	-- Initialize the return status.
5225 	x_return_status := FND_API.G_RET_STS_SUCCESS;
5226 
5227 	SELECT 'x' INTO l_test
5228 	FROM hz_cust_accounts   a
5229 	WHERE a.cust_account_id = p_account_id
5230         AND   a.party_id = p_customer_id
5231 	AND   a.status = 'A'
5232 	-- Added to remove TCA violation -- Sysdate should fall within Account Activation Date and Termination Date -- anmukher -- 08/14/03
5233 	AND   TRUNC(SYSDATE) BETWEEN TRUNC(NVL(a.ACCOUNT_ACTIVATION_DATE, SYSDATE)) AND TRUNC(NVL(a.ACCOUNT_TERMINATION_DATE, SYSDATE));
5234 EXCEPTION
5235 	 WHEN NO_DATA_FOUND THEN
5236 		 x_return_status := FND_API.G_RET_STS_ERROR;
5237 		 Add_Invalid_Argument_Msg( p_token_an    =>  l_api_name_full ,
5238                                            p_token_v     =>  TO_CHAR(p_account_id),
5239                                            p_token_p     =>  p_parameter_name,
5240                                            p_table_name  => G_TABLE_NAME ,
5241                                            p_column_name => 'ACCOUNT_ID');
5242       WHEN OTHERS  THEN
5243 		 fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
5244 		 fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
5245 		 fnd_msg_pub.ADD;
5246 		 x_return_status := fnd_api.g_ret_sts_unexp_error;
5247 
5248 END Validate_Account_Id;
5249 
5250 -- --------------------------------------------------------------------------------
5251 -- Is_MultiOrg_Enabled
5252 --  Description : Checks if the multiorg is enabled
5253 --		returns TRUE if multiorg is enabled
5254 -- --------------------------------------------------------------------------------
5255 FUNCTION Is_MultiOrg_Enabled RETURN BOOLEAN IS
5256   l_multiorg_enabled  VARCHAR2(1);
5257 BEGIN
5258     SELECT multi_org_flag INTO l_multiorg_enabled
5259 	FROM FND_PRODUCT_GROUPS;
5260 
5261     IF l_multiorg_enabled = 'Y' THEN
5262 	RETURN TRUE;
5263     ELSE
5264         RETURN FALSE;
5265     END IF;
5266 
5267 END Is_MultiOrg_Enabled;
5268 
5269 
5270 -------------------------------------------------------------------------------
5271 -- Function Is_Context_Enabled
5272 -- Description:
5273 --   Returns TRUE if the ConText Option is enabled.
5274 -- ----------------------------------------------------------------------------
5275 FUNCTION Is_Context_Enabled RETURN BOOLEAN IS
5276   l_dummy VARCHAR2(1);
5277 BEGIN
5278   IF (FND_PROFILE.Value('INC_ENABLE_CONTEXT_SEARCH') = 'Y') THEN
5279     RETURN TRUE;
5280   ELSE
5281     RETURN FALSE;
5282   END IF;
5283 EXCEPTION
5284   WHEN NO_DATA_FOUND THEN
5285     RETURN FALSE;
5286 END Is_Context_Enabled;
5287 
5288 
5289 --------------------------------------------------------------------------
5290 -- Procedure Add_Desc_Flex_Msg
5291 -- Usage:
5292 --   This procedure is called from the Validate_Desc_Flex routine in the
5293 --   Create_ServiceRequest API.
5294 -- Description:
5295 --   Add the error message from the FND_FLEX_DESCVAL package to the message
5296 --   list.
5297 --------------------------------------------------------------------------
5298 
5299 PROCEDURE Add_Desc_Flex_Msg
5300 ( p_token_an	VARCHAR2,
5301   p_token_dfm	VARCHAR2
5302 )
5303 IS
5304 BEGIN
5305   IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5306     FND_MESSAGE.Set_Name('CS', 'CS_API_SR_DESC_FLEX_ERROR');
5307     FND_MESSAGE.Set_Token('API_NAME', p_token_an);
5308     FND_MESSAGE.Set_Token('DESC_FLEX_MSG', p_token_dfm);
5309     FND_MSG_PUB.ADD;
5310   END IF;
5311 END Add_Desc_Flex_Msg;
5312 
5313 
5314 --------------------------------------------------------------------------
5315 -- Add_Invalid_Argument_Msg
5316 --------------------------------------------------------------------------
5317 
5318 PROCEDURE Add_Invalid_Argument_Msg
5319 ( p_token_an	VARCHAR2,
5320   p_token_v	VARCHAR2,
5321   p_token_p	VARCHAR2
5322 )
5323 IS
5324 -- bug 2833245 created a new local variable for assigning the value as NULL
5325 l_token_v VARCHAR2(4000);
5326 --end for bug 2833245
5327 
5328 BEGIN
5329 
5330   --bug 2833245 condition to check the token value
5331   l_token_v := p_token_v;
5332   if l_token_v = FND_API.G_MISS_CHAR then
5333   l_token_v := NULL;
5334   end if;
5335   -- end for bug 2833245
5336 
5337 
5338   IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5339     FND_MESSAGE.Set_Name('CS', 'CS_API_ALL_INVALID_ARGUMENT');
5340     FND_MESSAGE.Set_Token('API_NAME', p_token_an);
5341     --bug 2833245 pass the local variable for setting the token
5342     FND_MESSAGE.Set_Token('VALUE',l_token_v);
5343     -- end for bug 2833245
5344     FND_MESSAGE.Set_Token('PARAMETER', p_token_p);
5345     FND_MSG_PUB.ADD;
5346   END IF;
5347 END Add_Invalid_Argument_Msg;
5348 
5349 
5350 --------------------------------------------------------------------------
5351 -- Procedure Add_Key_Flex_Msg
5352 -- Usage:
5353 --   This procedure is called from the Convert_Key_Flex_To_ID routine in
5354 --   the Create_ServiceRequest API.
5355 -- Description:
5356 --   Add the error message from the FND_FLEX_KEYVAL package to the message
5357 --   list.
5358 --------------------------------------------------------------------------
5359 
5360 PROCEDURE Add_Key_Flex_Msg
5361 ( p_token_an	VARCHAR2,
5362   p_token_kfm	VARCHAR2
5363 )
5364 IS
5365 BEGIN
5366   IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5367     FND_MESSAGE.Set_Name('CS', 'CS_API_SR_KEY_FLEX_ERROR');
5368     FND_MESSAGE.Set_Token('API_NAME', p_token_an);
5369     FND_MESSAGE.Set_Token('KEY_FLEX_MSG', p_token_kfm);
5370     FND_MSG_PUB.ADD;
5371   END IF;
5372 END Add_Key_Flex_Msg;
5373 
5374 
5375 --------------------------------------------------------------------------
5376 -- Add_Null_Parameter_Msg
5377 --------------------------------------------------------------------------
5378 
5379 PROCEDURE Add_Null_Parameter_Msg
5380 ( p_token_an	VARCHAR2,
5381   p_token_np	VARCHAR2
5382 )
5383 IS
5384 BEGIN
5385   IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5386     FND_MESSAGE.Set_Name('CS', 'CS_API_ALL_NULL_PARAMETER');
5387     FND_MESSAGE.Set_Token('API_NAME', p_token_an);
5388     FND_MESSAGE.Set_Token('NULL_PARAM', p_token_np);
5389     FND_MSG_PUB.ADD;
5390   END IF;
5391 END Add_Null_Parameter_Msg;
5392 
5393 
5394 --------------------------------------------------------------------------
5395 -- Add_Param_Ignored_Msg
5396 --------------------------------------------------------------------------
5397 
5398 PROCEDURE Add_Param_Ignored_Msg
5399 ( p_token_an	VARCHAR2,
5400   p_token_ip	VARCHAR2
5401 )
5402 IS
5403 BEGIN
5404   IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
5405     FND_MESSAGE.Set_Name('CS', 'CS_API_ALL_PARAM_IGNORED');
5406     FND_MESSAGE.Set_Token('API_NAME', p_token_an);
5407     FND_MESSAGE.Set_Token('IGNORED_PARAM', p_token_ip);
5408     FND_MSG_PUB.ADD_DETAIL( p_message_type => FND_MSG_PUB.G_WARNING_MSG);
5409   END IF;
5410 END Add_Param_Ignored_Msg;
5411 
5412 
5413 --------------------------------------------------------------------------
5414 -- Add_Cp_Flag_Ignored_Msg
5415 --------------------------------------------------------------------------
5416 
5417 
5418 PROCEDURE Add_Cp_Flag_Ignored_Msg
5419 (p_token_an   VARCHAR2,
5420  p_token_ip   VARCHAR2,
5421  p_token_pv	  VARCHAR2
5422  )
5423 IS
5424 BEGIN
5425   IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
5426     FND_MESSAGE.Set_Name('CS', 'CS_API_SR_CP_FLAG_IGNORED');
5427     FND_MESSAGE.Set_Token('API_NAME', p_token_an);
5428     FND_MESSAGE.Set_Token('VALUE', p_token_ip);
5429     FND_MESSAGE.Set_Token('DEFAULT_VALUE', p_token_pv);
5430     FND_MSG_PUB.ADD_DETAIL( p_message_type => FND_MSG_PUB.G_WARNING_MSG);
5431   END IF;
5432 END Add_Cp_Flag_Ignored_Msg;
5433 
5434 
5435 --------------------------------------------------------------------------
5436 -- Add_Duplicate_Value__Msg
5437 --------------------------------------------------------------------------
5438 
5439 PROCEDURE Add_Duplicate_Value_Msg( p_token_an	IN   VARCHAR2,
5440 				   p_token_p    IN   VARCHAR2 ) IS
5441 
5442 BEGIN
5443   IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5444     FND_MESSAGE.Set_Name('CS', 'CS_API_ALL_DUPLICATE_VALUE');
5445     FND_MESSAGE.Set_Token('API_NAME', p_token_an);
5446     FND_MESSAGE.Set_Token('DUPLICATE_VAL_PARAM', p_token_p);
5447     FND_MSG_PUB.ADD;
5448   END IF;
5449 END Add_Duplicate_Value_Msg;
5450 
5451 
5452 PROCEDURE Add_Same_Val_Update_Msg( p_token_an	IN   VARCHAR2,
5453 				   p_token_p	IN   VARCHAR2 ) IS
5454 BEGIN
5455   IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
5456     FND_MESSAGE.Set_Name('CS', 'CS_API_ALL_SAME_VAL_UPDATE');
5457     FND_MESSAGE.Set_Token('API_NAME', p_token_an);
5458     FND_MESSAGE.Set_Token('SAME_VAL_PARAM', p_token_p);
5459     FND_MSG_PUB.ADD;
5460   END IF;
5461 END Add_Same_Val_Update_Msg;
5462 
5463 
5464 PROCEDURE Add_Missing_Param_Msg( p_token_an	IN   VARCHAR2,
5465 				 p_token_mp	IN   VARCHAR2 ) IS
5466 BEGIN
5467   IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5468     FND_MESSAGE.SET_NAME('CS', 'CS_API_ALL_MISSING_PARAM');
5469     FND_MESSAGE.SET_TOKEN('API_NAME', p_token_an);
5470     FND_MESSAGE.SET_TOKEN('MISSING_PARAM', p_token_mp);
5471     FND_MSG_PUB.ADD;
5472   END IF;
5473 END Add_Missing_Param_Msg;
5474 
5475 
5476 PROCEDURE call_internal_hook( p_package_name IN VARCHAR2 ,
5477    p_api_name IN VARCHAR2 ,
5478    p_processing_type IN VARCHAR2,
5479    x_return_status OUT NOCOPY VARCHAR2 )
5480 IS
5481   l_api_name                   CONSTANT VARCHAR2(30)    := 'call_internal_hook';
5482   l_api_name_full              CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
5483 
5484 
5485   CURSOR c1  IS
5486     SELECT hook_package, hook_api
5487     FROM jtf_hooks_data
5488     WHERE package_name = p_package_name
5489     AND api_name = p_api_name
5490     AND execute_flag = 'Y'
5491     AND processing_type = p_processing_type
5492     ORDER BY execution_order;
5493 
5494     v_cursorid INTEGER ;
5495     v_blockstr VARCHAR2(2000);
5496     v_dummy INTEGER;
5497 
5498 BEGIN
5499 
5500     FOR i IN c1  LOOP
5501          v_blockstr := ' begin '||i.hook_package || '.' ||i.hook_api||'(:1); end; ' ;
5502           EXECUTE IMMEDIATE v_blockstr USING OUT  x_return_status ;
5503 
5504          IF NOT (x_return_status = fnd_api.g_ret_sts_success)  THEN
5505             x_return_status := fnd_api.g_ret_sts_unexp_error;
5506             RAISE fnd_api.g_exc_unexpected_error;
5507          END IF;
5508      END LOOP;
5509    EXCEPTION
5510       WHEN fnd_api.g_exc_unexpected_error  THEN
5511          x_return_status := fnd_api.g_ret_sts_unexp_error;
5512 
5513       WHEN OTHERS  THEN
5514          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
5515          fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
5516          fnd_msg_pub.ADD;
5517          x_return_status := fnd_api.g_ret_sts_unexp_error;
5518 
5519 END call_internal_hook ;
5520 
5521 -- -----------------------------------------------------------------------
5522 --  Procedure   : Validate_Bill_To_Ship_To_Acct
5523 --  Function    : Verify that the Bill To Account is valid for given customer site OR customer.
5524 --  Parameters  :
5525 --  IN  :p_api_name             IN   VARCHAR2      Required Name of the calling procedure.
5526 --       p_parameter_name       IN   VARCHAR2      Required Name of the parameter in the
5527 --                                                 calling procedure (e.g. 'p_bill_to_account').
5528 --       p_bill_to_account_id   IN   NUMBER        Required Unique bill to account identifier
5529 --       p_bill_to_customer_id  IN   NUMBER        Unique Bill to customer ientifier
5530 --  OUT :x_return_status        OUT  VARCHAR2(1)
5531 --       FND_API.G_RET_STS_SUCCESS         => Bill_to_Account is valid
5532 --       FND_API.G_RET_STS_ERROR           => Bill_to_Account is invalid
5533 -- -----------------------------------------------------------------------
5534 
5535 PROCEDURE Validate_Bill_To_Ship_To_Acct
5536 ( p_api_name             IN   VARCHAR2,
5537   p_parameter_name       IN   VARCHAR2,
5538   p_account_id   	 IN   NUMBER,
5539   p_party_id   		 IN   NUMBER,
5540   x_return_status        OUT  NOCOPY VARCHAR2
5541 )
5542 AS
5543   l_dummy 	  VARCHAR2(1);
5544   l_api_name      CONSTANT VARCHAR2(30)  := 'Validate_Bill_To_Ship_To_Acct';
5545   l_api_name_full CONSTANT VARCHAR2(61)  := G_PKG_NAME||'.'||l_api_name;
5546 
5547 BEGIN
5548       -- Initialize the return status.
5549       x_return_status := FND_API.G_RET_STS_SUCCESS;
5550       -- Validation
5551       SELECT 'x' INTO l_dummy
5552       FROM  hz_cust_accounts
5553       WHERE cust_account_id = p_account_id
5554       AND   party_id = p_party_id
5555       AND   status = 'A';
5556 EXCEPTION
5557 	WHEN NO_DATA_FOUND THEN
5558 	   x_return_status := FND_API.G_RET_STS_ERROR;
5559 	   Add_Invalid_Argument_Msg( p_token_an    => l_api_name_full,
5560 				     p_token_v     => p_account_id,
5561 				     p_token_p     => p_parameter_name,
5562                                      p_table_name  => G_TABLE_NAME,
5563                                      p_column_name => 'ACCOUNT_ID' );
5564 
5565       WHEN OTHERS  THEN
5566          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
5567          fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
5568          fnd_msg_pub.ADD;
5569          x_return_status := fnd_api.g_ret_sts_unexp_error;
5570 END Validate_Bill_To_Ship_To_Acct ;
5571 
5572 -- -----------------------------------------------------------------------
5573 -- Start of Comments
5574 --  Procedure   : Validate_source_program_code
5575 --  Function    : Verify that the source program code is valid lookup code
5576 --                from the lookup CS_SR_SOURCE_PROGRAMS.
5577 --
5578 --  Parameters  :
5579 --
5580 --    IN  : p_api_name             IN   VARCHAR2        Required
5581 --                                 Name of the calling procedure.
5582 --          p_parameter_name       IN   VARCHAR2        Required
5583 --                                 Name of the parameter in the calling procedure
5584 --                                 (e.g. 'p_source_program_code').
5585 --          p_source_program_code  IN   VARCHAR2(30)    Required
5586 --                                 Service request source program code
5587 --
5588 --    OUT : x_return_status        OUT  VARCHAR2(1)
5589 --          FND_API.G_RET_STS_SUCCESS         => source_program_code is valid
5590 --          FND_API.G_RET_STS_ERROR           => source_program_code is invalid
5591 --
5592 --  Notes : Unknown exceptions (i.e. unexpected errors) should be
5593 --          handled by the calling procedure.
5594 -- End of Comments
5595 -- -----------------------------------------------------------------------
5596 
5597 
5598 PROCEDURE Validate_source_program_Code
5599     ( p_api_name                      IN   VARCHAR2,
5600       p_parameter_name                IN   VARCHAR2,
5601       p_source_program_code           IN   VARCHAR2,
5602       x_return_status                 OUT  NOCOPY VARCHAR2
5603     )IS
5604   l_dummy  		VARCHAR2(1);
5605   l_api_name           CONSTANT VARCHAR2(30)    := 'Validate_source_program_Code';
5606   l_api_name_full      CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
5607 
5608 BEGIN
5609       -- Initialize the return status.
5610       x_return_status := FND_API.G_RET_STS_SUCCESS;
5611 
5612       -- Verify the request CP against the database.
5613       SELECT 'x' INTO l_dummy
5614       FROM   CS_LOOKUPS
5615       WHERE  lookup_code = UPPER(p_source_program_code)
5616       AND    lookup_type = 'CS_SR_SOURCE_PROGRAMS'
5617       AND    enabled_flag = 'Y'
5618       AND    TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
5619                             AND     TRUNC(NVL(end_date_active, SYSDATE));
5620 
5621 EXCEPTION
5622 	WHEN NO_DATA_FOUND THEN
5623 	   x_return_status := FND_API.G_RET_STS_ERROR;
5624 	   Add_Invalid_Argument_Msg( p_token_an => l_api_name_full,
5625 				     p_token_v  => p_source_program_code,
5626 				     p_token_p  => p_parameter_name,
5627                                      p_table_name  => G_TABLE_NAME,
5628                                      p_column_name => 'CREATION_PROGRAM_CODE' );
5629 
5630       WHEN OTHERS  THEN
5631          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
5632          fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
5633          fnd_msg_pub.ADD;
5634          x_return_status := fnd_api.g_ret_sts_unexp_error;
5635 END Validate_source_program_Code;
5636 -- -----------------------------------------------------------------------
5637 -- Start of Comments
5638 --  Procedure   : Validate_INC_DIST_QUAL_UOM
5639 --  Function    : Verify that the INC_DIST_QUAL_UOM is valid lookup
5640 --                code from the lookup CS_SR_DISTANCE_UOM
5641 --
5642 --  Parameters  :
5643 --
5644 --    IN  : p_api_name             IN   VARCHAR2        Required
5645 --                                 Name of the calling procedure.
5646 --          p_parameter_name       IN   VARCHAR2        Required
5647 --                                 Name of the parameter in the calling procedure
5648 --                                 (e.g. 'P_INC_DIST_QUAL_UOM').
5649 --          P_INC_DIST_QUAL_UOM  IN   VARCHAR2(30)
5650 --                              Service request incident distance qualifier UOM
5651 --    OUT : x_return_status        OUT  VARCHAR2(1)
5652 --          FND_API.G_RET_STS_SUCCESS   => INC_DIST_QUAL_UOM is valid
5653 --          FND_API.G_RET_STS_ERROR     => INC_DIST_QUAL_UOM is invalid
5654 --
5655 --  Notes : Unknown exceptions (i.e. unexpected errors) should be
5656 --          handled by the calling procedure.
5657 -- End of Comments
5658 -- -----------------------------------------------------------------------
5659 
5660 PROCEDURE Validate_INC_DIST_QUAL_UOM
5661     ( p_api_name                      IN   VARCHAR2,
5662       p_parameter_name                IN   VARCHAR2,
5663       p_INC_DIST_QUAL_UOM             IN   VARCHAR2,
5664       x_return_status                 OUT  NOCOPY VARCHAR2
5665     ) IS
5666       l_dummy  VARCHAR2(1);
5667       l_api_name                   CONSTANT VARCHAR2(30)    := 'Validate_INC_DIST_QUAL_UOM';
5668       l_api_name_full              CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
5669 
5670 BEGIN
5671       -- Initialize the return status.
5672       x_return_status := FND_API.G_RET_STS_SUCCESS;
5673 
5674       -- Verify the request CP against the database.
5675       SELECT 'x' INTO l_dummy
5676       FROM   CS_LOOKUPS
5677       WHERE  lookup_code = UPPER(p_INC_DIST_QUAL_UOM)
5678       AND    lookup_type = 'CS_SR_DISTANCE_UOM'
5679       AND    enabled_flag = 'Y'
5680       AND    TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
5681                             AND     TRUNC(NVL(end_date_active, SYSDATE));
5682 
5683 EXCEPTION
5684 	WHEN NO_DATA_FOUND THEN
5685 	   x_return_status := FND_API.G_RET_STS_ERROR;
5686 	   Add_Invalid_Argument_Msg( p_token_an => l_api_name_full,
5687 				     p_token_v  => p_INC_DIST_QUAL_UOM,
5688 				     p_token_p  => p_parameter_name ,
5689                                      p_table_name => G_TABLE_NAME,
5690                                      p_column_name => 'INCIDENT_DISTANCE_QUAL_UOM');
5691 
5692       WHEN OTHERS  THEN
5693          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
5694          fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
5695          fnd_msg_pub.ADD;
5696          x_return_status := fnd_api.g_ret_sts_unexp_error;
5697 
5698 
5699 END Validate_INC_DIST_QUAL_UOM;
5700 
5701 
5702 -- -----------------------------------------------------------------------
5703 -- Start of Comments
5704 --  Procedure   : Validate_INC_DIRECTION_QUAL
5705 --  Function    : Verify that the INC_DIRECTION_QUAL is valid lookup
5706 --                code from the lookup CS_SR_DIRECTIONS.
5707 --
5708 --  Parameters  :
5709 --
5710 --    IN  : p_api_name             IN   VARCHAR2        Required
5711 --                                 Name of the calling procedure.
5712 --          p_parameter_name       IN   VARCHAR2        Required
5713 --                                 Name of the parameter in the calling procedure
5714 --                                 (e.g. 'p_INC_DIRECTION_QUAL').
5715 --          p_INC_DIRECTION_QUAL  IN   VARCHAR2(30)
5716 --                                 Service request incident direction qualifier
5717 --
5718 --    OUT : x_return_status        OUT  VARCHAR2(1)
5719 --          FND_API.G_RET_STS_SUCCESS => INC_DIRECTION_QUAL is valid
5720 --          FND_API.G_RET_STS_ERROR   => INC_DIRECTION_QUAL is invalid
5721 --
5722 --  Notes : Unknown exceptions (i.e. unexpected errors) should be
5723 --          handled by the calling procedure.
5724 -- End of Comments
5725 -- -----------------------------------------------------------------------
5726 
5727 PROCEDURE Validate_INC_DIRECTION_QUAL
5728     ( p_api_name                      IN   VARCHAR2,
5729       p_parameter_name                IN   VARCHAR2,
5730       p_INC_DIRECTION_QUAL            IN   VARCHAR2,
5731       x_return_status                 OUT  NOCOPY VARCHAR2
5732     )IS
5733       l_dummy  		VARCHAR2(1);
5734       l_api_name        CONSTANT VARCHAR2(30)    := 'Validate_INC_DIRECTION_QUAL';
5735       l_api_name_full   CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
5736 
5737 BEGIN
5738       -- Initialize the return status.
5739       x_return_status := FND_API.G_RET_STS_SUCCESS;
5740 
5741       -- Verify the request CP against the database.
5742       SELECT 'x' INTO l_dummy
5743       FROM   CS_LOOKUPS
5744       WHERE  lookup_code = UPPER(p_INC_DIRECTION_QUAL)
5745       AND    lookup_type = 'CS_SR_DIRECTIONS'
5746       AND    enabled_flag = 'Y'
5747       AND    TRUNC(SYSDATE) BETWEEN TRUNC(NVL(start_date_active, SYSDATE))
5748                             AND     TRUNC(NVL(end_date_active, SYSDATE));
5749 
5750 EXCEPTION
5751 	WHEN NO_DATA_FOUND THEN
5752 	   x_return_status := FND_API.G_RET_STS_ERROR;
5753 	   Add_Invalid_Argument_Msg( p_token_an => l_api_name_full,
5754 				     p_token_v  => p_INC_DIRECTION_QUAL,
5755 				     p_token_p  => p_parameter_name,
5756                                      p_table_name => G_TABLE_NAME,
5757                                      p_column_name => 'INCIDENT_DIRECTION_QUALIFIER' );
5758 
5759       WHEN OTHERS  THEN
5760          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
5761          fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
5762          fnd_msg_pub.ADD;
5763          x_return_status := fnd_api.g_ret_sts_unexp_error;
5764 
5765 
5766 END Validate_INC_DIRECTION_QUAL;
5767 
5768 
5769 --------------------------------------------------------------------------
5770 -- Procedure Add_Desc_Flex_Msg
5771 -- Usage:
5772 --   This procedure is called from the Validate_Desc_Flex routine in the
5773 --   Create_ServiceRequest API.
5774 -- Description:
5775 --   Add the error message from the FND_FLEX_DESCVAL package to the message
5776 --   list.
5777 --------------------------------------------------------------------------
5778 
5779 PROCEDURE Add_Desc_Flex_Msg
5780 ( p_token_an	   VARCHAR2,
5781   p_token_dfm  	   VARCHAR2,
5782   p_table_name  IN VARCHAR2 ,
5783   p_column_name IN VARCHAR2
5784 )
5785 IS
5786 l_associated_col1  VARCHAR2(240);
5787 
5788 BEGIN
5789   IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5790 
5791     IF p_table_name IS NOT NULL THEN
5792        l_associated_col1 := p_table_name ;
5793        IF p_column_name IS NOT NULL THEN
5794           l_associated_col1 := l_associated_col1 ||'.'||p_column_name ;
5795        END IF ;
5796     ELSIF p_column_name IS NOT NULL THEN
5797        l_associated_col1 := p_column_name;
5798     ELSE
5799        l_associated_col1 := p_token_dfm ;
5800     END IF ;
5801 
5802     FND_MESSAGE.Set_Name('CS', 'CS_API_SR_DESC_FLEX_ERROR');
5803     FND_MESSAGE.Set_Token('API_NAME', p_token_an);
5804     FND_MESSAGE.Set_Token('DESC_FLEX_MSG', p_token_dfm);
5805     FND_MSG_PUB.ADD_DETAIL(p_associated_column1 => l_associated_col1);
5806 
5807   END IF;
5808 END Add_Desc_Flex_Msg;
5809 
5810 --------------------------------------------------------------------------
5811 -- Start of comments
5812 --  Procedure	: Add_Invalid_Argument_Msg
5813 --  Description	: Overloaded procedure to Add the CS_API_ALL_INVALID_ARGUMENT
5814 --                message to the message list.
5815 --
5816 --  Parameters	:
5817 --  IN		:
5818 --	p_token_an    IN  VARCHAR2  Required     --	Value of the API_NAME token.
5819 --	p_token_v     IN  VARCHAR2  Required     --	Value of the VALUE token.
5820 --	p_token_p     IN  VARCHAR2  Required     --	Value of the PARAMETER token.
5821 --      p_column_name IN  VARCHAR2  Default Null --     Name of the database column/control
5822 --                                                      parameter being validated
5823 --      p_table_name  IN  VARCHAR2  Default Null --     Name of the database table/control
5824 --                                                      parameter being validated
5825 -- End of comments
5826 --------------------------------------------------------------------------
5827 
5828 PROCEDURE Add_Invalid_Argument_Msg ( p_token_an	   IN VARCHAR2,
5829                                      p_token_v	   IN VARCHAR2,
5830                                      p_token_p	   IN VARCHAR2 ,
5831                                      p_table_name  IN VARCHAR2 ,
5832                                      p_column_name IN VARCHAR2
5833 )
5834 IS
5835 l_associated_col1  VARCHAR2(240);
5836 --bug 2833245 created a new local variable for assigning the value as NULL
5837 l_token_v VARCHAR2(4000);
5838 --end for bug 2833245
5839 BEGIN
5840   IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5841 
5842     IF p_table_name IS NOT NULL THEN
5843        l_associated_col1 := p_table_name ;
5844        IF p_column_name IS NOT NULL THEN
5845           l_associated_col1 := l_associated_col1 ||'.'||p_column_name ;
5846        END IF ;
5847     ELSIF p_column_name IS NOT NULL THEN
5848        l_associated_col1 := p_column_name;
5849     ELSE
5850        l_associated_col1 := p_token_p ;
5851     END IF ;
5852 
5853     --bug 2833245 condition to check the token value
5854     l_token_v := p_token_v;
5855     if l_token_v = FND_API.G_MISS_CHAR then
5856     l_token_v := NULL;
5857     end if;
5858     -- end for bug 2833245
5859 
5860     FND_MESSAGE.Set_Name('CS', 'CS_API_ALL_INVALID_ARGUMENT');
5861     FND_MESSAGE.Set_Token('API_NAME', p_token_an);
5862     --bug 2833245 pass the local variable for setting the token
5863     FND_MESSAGE.Set_Token('VALUE',l_token_v);
5864     -- end for bug 2833245
5865     FND_MESSAGE.Set_Token('PARAMETER', p_token_p);
5866     FND_MSG_PUB.ADD_DETAIL(p_associated_column1 => l_associated_col1);
5867 
5868     --For bug 2885111 - to remove the blank message
5869     --FND_MSG_PUB.ADD_DETAIL(p_associated_column1 => l_associated_col1);
5870   END IF;
5871 END Add_Invalid_Argument_Msg;
5872 
5873 
5874 --------------------------------------------------------------------------
5875 -- Start of comments
5876 --  Procedure	: Add_Key_Flex_Msg
5877 --  Description	: Overloaded Procedure to Add the CS_API_SR_KEY_FLEX_ERROR message to the i
5878 --                message list.
5879 --  Usage       : This procedure is called from the Convert_Key_Flex_To_ID routine in
5880 --                the Create_ServiceRequest API.
5881 --  Parameters	:
5882 --  IN		:
5883 --	p_token_an	IN  VARCHAR2	Required 	Value of the API_NAME token.
5884 --	p_token_kfm	IN  VARCHAR2	Required	Value of the KEY_FLEX_MSG token.
5885 -- End of comments
5886 --------------------------------------------------------------------------
5887 
5888 PROCEDURE Add_Key_Flex_Msg ( p_token_an    IN VARCHAR2,
5889                              p_token_kfm   IN VARCHAR2,
5890                              p_table_name  IN VARCHAR2 ,
5891                              p_column_name IN VARCHAR2
5892 )
5893 IS
5894 l_associated_col1  VARCHAR2(240);
5895 BEGIN
5896   IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5897 
5898     IF p_table_name IS NOT NULL THEN
5899        l_associated_col1 := p_table_name ;
5900        IF p_column_name IS NOT NULL THEN
5901           l_associated_col1 := l_associated_col1 ||'.'||p_column_name ;
5902        END IF ;
5903     ELSIF p_column_name IS NOT NULL THEN
5904        l_associated_col1 := p_column_name;
5905     ELSE
5906        l_associated_col1 := p_token_kfm ;
5907     END IF ;
5908     FND_MESSAGE.Set_Name('CS', 'CS_API_SR_KEY_FLEX_ERROR');
5909     FND_MESSAGE.Set_Token('API_NAME', p_token_an);
5910     FND_MESSAGE.Set_Token('KEY_FLEX_MSG', p_token_kfm);
5911     FND_MSG_PUB.ADD_DETAIL(p_associated_column1 => l_associated_col1);
5912   END IF;
5913 END Add_Key_Flex_Msg;
5914 
5915 --------------------------------------------------------------------------
5916 -- Start of comments
5917 --  Procedure	: Add_Missing_Param_Msg
5918 --  Description	: Overloaded Procedure to Add the CS_API_ALL_MISSING_PARAM message to the message
5919 --		  list.
5920 --  Parameters	:
5921 --  IN		:
5922 --	p_token_an    IN  VARCHAR2  Required     --	Value of the API_NAME token.
5923 --	p_token_v     IN  VARCHAR2  Required     --	Value of the VALUE token.
5924 --	p_token_p     IN  VARCHAR2  Required     --	Value of the PARAMETER token.
5925 --      p_column_name IN  VARCHAR2  Default Null --     Name of the database column/control
5926 --                                                      parameter being validated
5927 --      p_table_name  IN  VARCHAR2  Default Null --     Name of the database table/control
5928 --                                                      parameter being validated
5929 -- End of comments
5930 --------------------------------------------------------------------------
5931 
5932 PROCEDURE Add_Missing_Param_Msg ( p_token_an    IN  VARCHAR2,
5933                                   p_token_mp    IN  VARCHAR2,
5934                                   p_table_name  IN  VARCHAR2 ,
5935                                   p_column_name IN  VARCHAR2 ) IS
5936 l_associated_col1  VARCHAR2(240);
5937 BEGIN
5938   IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5939 
5940     IF p_table_name IS NOT NULL THEN
5941        l_associated_col1 := p_table_name ;
5942        IF p_column_name IS NOT NULL THEN
5943           l_associated_col1 := l_associated_col1 ||'.'||p_column_name ;
5944        END IF ;
5945     ELSIF p_column_name IS NOT NULL THEN
5946        l_associated_col1 := p_column_name;
5947     ELSE
5948        l_associated_col1 := p_token_mp ;
5949     END IF ;
5950     FND_MESSAGE.SET_NAME('CS', 'CS_API_ALL_MISSING_PARAM');
5951     FND_MESSAGE.SET_TOKEN('API_NAME', p_token_an);
5952     FND_MESSAGE.SET_TOKEN('MISSING_PARAM', p_token_mp);
5953     FND_MSG_PUB.ADD_DETAIL(p_associated_column1 => l_associated_col1);
5954   END IF;
5955 END Add_Missing_Param_Msg;
5956 
5957 --------------------------------------------------------------------------
5958 -- Start of comments
5959 --  Procedure	: Add_Null_Parameter_Msg
5960 --  Description	: Overloaded Procedure to Add the CS_API_ALL_NULL_PARAMETER message to the message
5961 --		  list.
5962 --  Parameters	:
5963 --  IN		:
5964 --	p_token_an    IN  VARCHAR2  Required     --	Value of the API_NAME token.
5965 --	p_token_v     IN  VARCHAR2  Required     --	Value of the VALUE token.
5966 --	p_token_p     IN  VARCHAR2  Required     --	Value of the PARAMETER token.
5967 --      p_column_name IN  VARCHAR2  Default Null --     Name of the database column/control
5968 --                                                      parameter being validated
5969 --      p_table_name  IN  VARCHAR2  Default Null --     Name of the database table/control
5970 --                                                      parameter being validated
5971 -- End of comments
5972 --------------------------------------------------------------------------
5973 
5974 PROCEDURE Add_Null_Parameter_Msg ( p_token_an    IN  VARCHAR2,
5975                                    p_token_np	 IN  VARCHAR2,
5976                                    p_table_name  IN  VARCHAR2 ,
5977                                    p_column_name IN  VARCHAR2
5978 )
5979 IS
5980 l_associated_col1  VARCHAR2(240);
5981 BEGIN
5982   IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5983 
5984     IF p_table_name IS NOT NULL THEN
5985        l_associated_col1 := p_table_name ;
5986        IF p_column_name IS NOT NULL THEN
5987           l_associated_col1 := l_associated_col1 ||'.'||p_column_name ;
5988        END IF ;
5989     ELSIF p_column_name IS NOT NULL THEN
5990        l_associated_col1 := p_column_name;
5991     ELSE
5992        l_associated_col1 := p_token_np ;
5993     END IF ;
5994     FND_MESSAGE.Set_Name('CS', 'CS_API_ALL_NULL_PARAMETER');
5995     FND_MESSAGE.Set_Token('API_NAME', p_token_an);
5996     FND_MESSAGE.Set_Token('NULL_PARAM', p_token_np);
5997     FND_MSG_PUB.ADD_DETAIL(p_associated_column1 => l_associated_col1);
5998   END IF;
5999 END Add_Null_Parameter_Msg;
6000 
6001 --------------------------------------------------------------------------
6002 -- Start of comments
6003 --  Procedure	: Add_Param_Ignored_Msg
6004 --  Description	: Overloaded Procedure to Add the CS_API_ALL_PARAM_IGNORED message to the message
6005 --		  list.
6006 --  Parameters	:
6007 --  IN		:
6008 --	p_token_an    IN  VARCHAR2  Required     --	Value of the API_NAME token.
6009 --	p_token_v     IN  VARCHAR2  Required     --	Value of the VALUE token.
6010 --	p_token_p     IN  VARCHAR2  Required     --	Value of the PARAMETER token.
6011 --      p_column_name IN  VARCHAR2  Default Null --     Name of the database column/control
6012 --                                                      parameter being validated
6013 --      p_table_name  IN  VARCHAR2  Default Null --     Name of the database table/control
6014 --                                                      parameter being validated
6015 -- End of comments
6016 --------------------------------------------------------------------------
6017 
6018 PROCEDURE Add_Param_Ignored_Msg ( p_token_an	 IN  VARCHAR2,
6019                                   p_token_ip     IN  VARCHAR2,
6020                                   p_table_name   IN  VARCHAR2 ,
6021                                   p_column_name  IN  VARCHAR2
6022 )
6023 IS
6024 l_associated_col1  VARCHAR2(240);
6025 BEGIN
6026   IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
6027 
6028     IF p_table_name IS NOT NULL THEN
6029        l_associated_col1 := p_table_name ;
6030        IF p_column_name IS NOT NULL THEN
6031           l_associated_col1 := l_associated_col1 ||'.'||p_column_name ;
6032        END IF ;
6033     ELSIF p_column_name IS NOT NULL THEN
6034        l_associated_col1 := p_column_name;
6035     ELSE
6036        l_associated_col1 := p_token_ip ;
6037     END IF ;
6038     FND_MESSAGE.Set_Name('CS', 'CS_API_ALL_PARAM_IGNORED');
6039     FND_MESSAGE.Set_Token('API_NAME', p_token_an);
6040     FND_MESSAGE.Set_Token('IGNORED_PARAM', p_token_ip);
6041     FND_MSG_PUB.ADD_DETAIL(p_associated_column1 => l_associated_col1);
6042   END IF;
6043 END Add_Param_Ignored_Msg;
6044 
6045 --------------------------------------------------------------------------
6046 -- Start of comments
6047 --  Procedure	: Add_Duplicate_Value_Msg
6048 --  Description	: Overloaded Procedure to Add the CS_API_ALL_PARAM_IGNORED message to the message
6049 --		  list.
6050 --  Parameters	:
6051 --  IN		:
6052 --	p_token_an    IN  VARCHAR2  Required     --	Value of the API_NAME token.
6053 --	p_token_v     IN  VARCHAR2  Required     --	Value of the VALUE token.
6054 --	p_token_p     IN  VARCHAR2  Required     --	Value of the PARAMETER token.
6055 --      p_column_name IN  VARCHAR2  Default Null --     Name of the database column/control
6056 --                                                      parameter being validated
6057 --      p_table_name  IN  VARCHAR2  Default Null --     Name of the database table/control
6058 --                                                      parameter being validated
6059 -- End of comments
6060 --------------------------------------------------------------------------
6061 
6062 PROCEDURE Add_Duplicate_Value_Msg( p_token_an	 IN  VARCHAR2,
6063 				   p_token_p     IN  VARCHAR2,
6064                                    p_table_name  IN  VARCHAR2 ,
6065                                    p_column_name IN  VARCHAR2 ) IS
6066 l_associated_col1  VARCHAR2(240);
6067 
6068 BEGIN
6069   IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6070 
6071     IF p_table_name IS NOT NULL THEN
6072        l_associated_col1 := p_table_name ;
6073        IF p_column_name IS NOT NULL THEN
6074           l_associated_col1 := l_associated_col1 ||'.'||p_column_name ;
6075        END IF ;
6076     ELSIF p_column_name IS NOT NULL THEN
6077        l_associated_col1 := p_column_name;
6078     ELSE
6079        l_associated_col1 := p_token_p ;
6080     END IF ;
6081     FND_MESSAGE.Set_Name('CS', 'CS_API_ALL_DUPLICATE_VALUE');
6082     FND_MESSAGE.Set_Token('API_NAME', p_token_an);
6083     FND_MESSAGE.Set_Token('DUPLICATE_VAL_PARAM', p_token_p);
6084     FND_MSG_PUB.ADD_DETAIL(p_associated_column1 => l_associated_col1);
6085   END IF;
6086 END Add_Duplicate_Value_Msg;
6087 
6088 --------------------------------------------------------------------------
6089 -- Start of comments
6090 --  Procedure	: Add_Same_Val_Update_Msg
6091 --  Description	: Overloaded Procedure to Add the CS_API_ALL_PARAM_IGNORED message to the message
6092 --		  list.
6093 --  Parameters	:
6094 --  IN		:
6095 --	p_token_an    IN  VARCHAR2  Required     --	Value of the API_NAME token.
6096 --	p_token_v     IN  VARCHAR2  Required     --	Value of the VALUE token.
6097 --	p_token_p     IN  VARCHAR2  Required     --	Value of the PARAMETER token.
6098 --      p_column_name IN  VARCHAR2  Default Null --     Name of the database column/control
6099 --                                                      parameter being validated
6100 --      p_table_name  IN  VARCHAR2  Default Null --     Name of the database table/control
6101 --                                                      parameter being validated
6102 -- End of comments
6103 --------------------------------------------------------------------------
6104 
6105 PROCEDURE Add_Same_Val_Update_Msg( p_token_an	 IN  VARCHAR2,
6106 				   p_token_p	 IN  VARCHAR2,
6107                                    p_table_name  IN  VARCHAR2 ,
6108                                    p_column_name IN  VARCHAR2 ) IS
6109 l_associated_col1  VARCHAR2(240);
6110 BEGIN
6111   IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
6112 
6113     IF p_table_name IS NOT NULL THEN
6114        l_associated_col1 := p_table_name ;
6115        IF p_column_name IS NOT NULL THEN
6116           l_associated_col1 := l_associated_col1 ||'.'||p_column_name ;
6117        END IF ;
6118     ELSIF p_column_name IS NOT NULL THEN
6119        l_associated_col1 := p_column_name;
6120     ELSE
6121        l_associated_col1 := p_token_p ;
6122     END IF ;
6123     FND_MESSAGE.Set_Name('CS', 'CS_API_ALL_SAME_VAL_UPDATE');
6124     FND_MESSAGE.Set_Token('API_NAME', p_token_an);
6125     FND_MESSAGE.Set_Token('SAME_VAL_PARAM', p_token_p);
6126     FND_MSG_PUB.ADD_DETAIL(p_associated_column1 => l_associated_col1,
6127                            p_message_type => FND_MSG_PUB.G_WARNING_MSG);
6128   END IF;
6129 END Add_Same_Val_Update_Msg;
6130 
6131 -- -----------------------------------------------------------------------------
6132 ---
6133 -- Validate_Site_Site_Use
6134 -- Same procedure is used to validate Bill_to and Ship_To Site and Sites Use.
6135 -- 1. Site must be an active site attached to party
6136 -- 2. Site Use must be Valid and Must be BILL_TO or SHIP_TO as required
6137 -- 3. p_site_use_type will be BILL_TO or SHIP_TO
6138 -- -----------------------------------------------------------------------------
6139 -- Modification History
6140 -- Date     Name     Desc
6141 -- -------- -------- -----------------------------------------------------------
6142 -- 07/22/05 smisra   Bug 4292583
6143 --                   Modified query and replaced literal 'A' with a variable
6144 --                   having a value 'A' for performance reasons.
6145 -- -----------------------------------------------------------------------------
6146 PROCEDURE Validate_Site_Site_Use (
6147         p_api_name                       IN  VARCHAR2,
6148         p_parameter_name                 IN  VARCHAR2,
6149         p_site_id                        IN  NUMBER,
6150         p_site_use_id                    IN  NUMBER,
6151         p_party_id                       IN  NUMBER,
6152         p_site_use_type                  IN  VARCHAR2,
6153         x_return_status                  OUT NOCOPY VARCHAR2
6154 )
6155 AS
6156 l_literal_a VARCHAR2(3);
6157     l_api_name        CONSTANT VARCHAR2(30) := 'Validate_Site_Site_Use';
6158     l_api_name_full   CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_api_name;
6159 
6160   CURSOR Site_Site_Use  IS
6161     SELECT s.status
6162     FROM Hz_Party_Sites  s,
6163          Hz_Party_Site_Uses su
6164     WHERE s.party_site_id = su.party_site_id
6165     AND   s.party_site_id = p_site_id
6166     AND   s.party_id      = p_party_id
6167     AND   su.party_site_use_id = p_site_use_id
6168     AND   s.status = l_literal_a
6169     AND   su.status = l_literal_a
6170     -- Commented out to remove TCA Violation -- Party site use dates not to be checked -- anmukher -- 08/14/03
6171     -- AND   trunc(sysdate) between trunc(nvl(su.begin_date,sysdate))
6172                         -- and trunc(nvl(su.end_date,sysdate))
6173     AND   su.site_use_type = p_site_use_type;
6174 
6175     l_dummy Varchar2(5);
6176 BEGIN
6177   -- Initialize return status to success
6178   x_return_status := FND_API.G_RET_STS_SUCCESS;
6179   l_literal_a     := 'A';
6180   OPEN site_site_use;
6181   FETCH site_site_use INTO l_dummy;
6182   IF (site_site_use%NOTFOUND) THEN
6183     x_return_status := FND_API.G_RET_STS_ERROR;
6184     CLOSE site_site_use;
6185 
6186     RAISE NO_DATA_FOUND;
6187   END IF;
6188   CLOSE site_site_use ;
6189 EXCEPTION
6190    WHEN NO_DATA_FOUND THEN
6191         CS_ServiceRequest_UTIL.Add_Invalid_Argument_Msg
6192                          (p_token_an =>  l_api_name_full,
6193                           p_token_v  =>  'site_id:='||to_char(p_site_id)||' or site_use_id:='||to_char(p_site_use_id),
6194                           p_token_p  =>  p_parameter_name );
6195 
6196    WHEN OTHERS THEN
6197         fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
6198         fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
6199         fnd_msg_pub.add;
6200         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6201 END Validate_Site_Site_Use ;
6202 
6203 -- -----------------------------------------------------------------------------
6204 ---
6205 -- Validate_Bill_Ship_Site_Use
6206 -- Same procedure is used to validate Bill_to and Ship_To Sites
6207 -- 1. Site Use must be an active site attached to party
6208 -- 2. Site USe must be Valid and Must be BILL_TO or SHIP_TO as required
6209 -- 3. p_site_use_type will be BILL_TO or SHIP_TO
6210 -- -----------------------------------------------------------------------------
6211 
6212 PROCEDURE Validate_Bill_Ship_Site_Use (
6213         p_api_name                       IN  VARCHAR2,
6214         p_parameter_name                 IN  VARCHAR2,
6215         p_site_use_id                    IN  NUMBER,
6216         p_party_id                       IN  NUMBER,
6217         p_site_use_type                  IN  VARCHAR2,
6218         x_site_id                        OUT  NOCOPY NUMBER,
6219         x_return_status                  OUT  NOCOPY VARCHAR2
6220 ) IS
6221   l_api_name          CONSTANT VARCHAR2(30)    := 'Validate_Bill_Ship_Site_Use';
6222   l_api_name_full     CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
6223 
6224     CURSOR Bill_To_Site_Use  IS
6225     SELECT s.party_site_id
6226     FROM Hz_Party_Sites  s,
6227          Hz_Party_Site_Uses su
6228     WHERE s.party_site_id = su.party_site_id
6229     AND   su.party_site_use_id = p_site_use_id
6230     AND   s.party_id      = p_party_id
6231     AND   s.status = 'A'
6232     AND   su.status = 'A'
6233     -- Commented out to remove TCA Violation -- Party site use dates not to be checked -- anmukher -- 08/14/03
6234     -- AND   trunc(sysdate) between trunc(nvl(su.begin_date,sysdate))
6235                         -- and trunc(nvl(su.end_date,sysdate))
6236     AND   su.site_use_type = p_site_use_type;
6237 
6238 BEGIN
6239 
6240   -- Initialize return status to success
6241   x_return_status := FND_API.G_RET_STS_SUCCESS;
6242 
6243   OPEN bill_to_site_use;
6244   FETCH bill_to_site_use INTO x_site_id;
6245   IF (bill_to_site_use%NOTFOUND) THEN
6246     x_return_status := FND_API.G_RET_STS_ERROR;
6247     CLOSE bill_to_site_use;
6248 
6249     RAISE NO_DATA_FOUND;
6250   END IF;
6251   CLOSE bill_to_site_use ;
6252 
6253 EXCEPTION
6254    WHEN NO_DATA_FOUND THEN
6255         CS_ServiceRequest_UTIL.Add_Invalid_Argument_Msg(
6256                           p_token_an =>  l_api_name_full,
6257                           p_token_v  =>  to_char(p_site_use_id),
6258                           p_token_p  =>  p_parameter_name );
6259 
6260    WHEN OTHERS THEN
6261         fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
6262         fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
6263         fnd_msg_pub.add;
6264         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6265 END Validate_Bill_Ship_Site_Use;
6266 
6267 
6268 -- DJ API Cleanup; added new proc
6269 -- Procedure to be called when SR Type changes and service security is
6270 -- enabled.
6271 -- If there are any open Tasks, add a WARNING message to the Message stack,
6272 -- but return back a success status. It is upto the calling program to pull
6273 -- out the error msg. from the stack and processed as needed.
6274 
6275 PROCEDURE TASK_OWNER_CROSS_VAL (
6276    p_incident_id          IN   NUMBER,
6277    x_return_status        OUT  NOCOPY VARCHAR2 )
6278 IS
6279    l_dummy               NUMBER := 0;
6280    l_sr_agent_security   VARCHAR2(15);
6281    l_api_name            CONSTANT VARCHAR2(30) := 'TASK_OWNER_CROSS_VAL';
6282    l_api_name_full       CONSTANT VARCHAR2(70) := G_PKG_NAME||'.'||l_api_name;
6283 BEGIN
6284 
6285    -- procedure always returns a success status but may populate a warning
6286    -- message in the message stack
6287    x_return_status := FND_API.G_RET_STS_SUCCESS;
6288 
6289    -- Check if service security is enable. This select will always return
6290    -- with atleast one record.
6291    select sr_agent_security
6292    into   l_sr_agent_security
6293    from   cs_system_options
6294    where  rownum = 1;
6295 
6296    if ( l_sr_agent_security <> 'ANONE' ) then
6297       select count(*)
6298       into   l_dummy
6299       from   jtf_tasks_b          a,
6300 	     jtf_task_statuses_b  b
6301       where  a.source_object_id        = p_incident_id
6302       and    a.source_object_type_code = 'SR'
6303       and    a.task_status_id          = b.task_status_id
6304       and    b.closed_flag             <> 'Y';
6305 
6306       if ( l_dummy > 0 ) then
6307          -- put in a warning message into the msg. stack.
6308          -- new message for 11.5.10
6309          -- There are open tasks associated to the service request. Changing the
6310          -- service request type may invalidate some of the task assignments.
6311          -- Please verify that the task owners are valid for the new service
6312          -- request type.
6313          fnd_message.set_name ('CS', 'CS_SR_TASK_OWNER_INVALID');
6314          fnd_msg_pub.ADD;
6315       end if;
6316    end if;
6317 
6318 EXCEPTION
6319    WHEN OTHERS THEN
6320       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6321       fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
6322       fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
6323       fnd_msg_pub.add;
6324 
6325 END TASK_OWNER_CROSS_VAL;
6326 
6327 -- KP API Cleanup; added new proc
6328 -- Procedure to be called when Incident Location Id or CP changes. If
6329 -- Customer Product Id is passed , the incident Location Id should
6330 -- be the same as Install Base location.
6331 
6332  PROCEDURE CP_INCIDENT_SITE_CROSS_VAL(
6333         p_parameter_name                 IN  VARCHAR2,
6334         p_incident_location_id           IN   NUMBER,
6335         p_customer_product_id            IN   NUMBER,
6336         x_return_status                  OUT NOCOPY varchar2  )
6337  IS
6338   l_dummy 	VARCHAR2(1);
6339   l_api_name                   CONSTANT VARCHAR2(30)    := 'CP_INCIDENT_SITE_CROSS_VAL';
6340   l_api_name_full              CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
6341 
6342  BEGIN
6343 
6344 	x_return_status := FND_API.G_RET_STS_SUCCESS;
6345 
6346     SELECT 'x' INTO l_dummy
6347     FROM   csi_item_instances a
6348     WHERE  a.instance_id = p_customer_product_id
6349     AND    a.location_id = p_incident_location_id;
6350 
6351  EXCEPTION
6352    WHEN NO_DATA_FOUND THEN
6353       x_return_status := FND_API.G_RET_STS_ERROR;
6354       fnd_message.set_name ('CS', 'CS_INVALID_INC_LOCATION');
6355       fnd_message.set_token('INCIDENT_LOCATION_ID',  p_incident_location_id);
6356       fnd_message.set_token('CUSTOMER_PRODUCT_ID',   p_customer_product_id);
6357 	  fnd_msg_pub.add;
6358 
6359    WHEN OTHERS THEN
6360         fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
6361         fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
6362         fnd_msg_pub.add;
6363         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6364 
6365 END CP_INCIDENT_SITE_CROSS_VAL;
6366 
6367 -- KP API Cleanup; added new proc
6368 -- Procedure to be called when install site Id or CP changes. If
6369 -- Customer Product Id is passed , the install site Id should
6370 -- be the same as Install Base location.
6371 
6372  PROCEDURE CP_INSTALL_SITE_CROSS_VAL (
6373         p_parameter_name                 IN  VARCHAR2,
6374         p_install_site_id           IN   NUMBER,
6375         p_customer_product_id            IN   NUMBER,
6376         x_return_status                  OUT NOCOPY varchar2  )
6377  IS
6378   l_dummy 	VARCHAR2(1);
6379   l_api_name                   CONSTANT VARCHAR2(30)    := 'CP_INSTALL_SITE_CROSS_VAL';
6380   l_api_name_full              CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
6381 
6382  BEGIN
6383 
6384 	x_return_status := FND_API.G_RET_STS_SUCCESS;
6385 
6386     SELECT 'x' INTO l_dummy
6387     FROM   csi_item_instances a
6388     WHERE  a.instance_id = p_customer_product_id
6389     AND    a.install_location_type_code = 'HZ_PARTY_SITES'
6390     AND    a.install_location_id = p_install_site_id;
6391 
6392  EXCEPTION
6393    WHEN NO_DATA_FOUND THEN
6394       x_return_status := FND_API.G_RET_STS_ERROR;
6395       fnd_message.set_name ('CS', 'CS_INVALID_INSTALL_SITE');
6396       fnd_message.set_token('INSTALL_SITE_ID',  p_install_site_id);
6397       fnd_message.set_token('CUSTOMER_PRODUCT_ID',   p_customer_product_id);
6398 	  fnd_msg_pub.add;
6399 
6400    WHEN OTHERS THEN
6401         fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
6402         fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
6403         fnd_msg_pub.add;
6404         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6405 
6406 END CP_INSTALL_SITE_CROSS_VAL;
6407 
6408 
6409 -- KP API Cleanup
6410 -- Introduced the res. code cross val proc. for 11.5.10
6411 -- Validate the resolution code to confirm that it is a valid RC for the
6412 -- given mapping criteria: inventory_item_id, incident_type, category_id
6413 -- and problem code
6414 -- Invoke the res. code validation API:
6415 --       cs_sr_res_code_mapping_pkg.vaidate_resolution_code
6416 
6417 PROCEDURE Resolution_Code_Cross_Val (
6418    p_parameter_name                 IN  VARCHAR2,
6419    p_resolution_code                IN  VARCHAR2,
6420    p_problem_code                   IN  VARCHAR2,
6421    p_incident_type_id               IN  NUMBER,
6422    p_category_id                    IN  NUMBER,
6423    p_inventory_item_id              IN  NUMBER,
6424    p_inventory_org_id               IN  NUMBER,
6425    x_return_status                  OUT NOCOPY VARCHAR2  )
6426 IS
6427   l_dummy 	VARCHAR2(1);
6428   l_api_name       CONSTANT VARCHAR2(30)    := 'resolution_code_cross_val';
6429   l_api_name_full  CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
6430 
6431   l_rc_rec         cs_sr_res_code_mapping_pkg.rescode_search_rec;
6432   lx_msg_count     NUMBER;
6433   lx_msg_data      VARCHAR2(2000);
6434 
6435 BEGIN
6436    x_return_status := FND_API.G_RET_STS_SUCCESS;
6437 
6438    -- populate the res. code record type
6439 
6440    l_rc_rec.service_request_type_id := p_incident_type_id;
6441    l_rc_rec.inventory_item_id       := p_inventory_item_id;
6442    l_rc_rec.organization_id         := p_inventory_org_id;
6443    l_rc_rec.product_category_id     := p_category_id;
6444    l_rc_rec.problem_code            := p_problem_code;
6445 
6446    cs_sr_res_code_mapping_pkg.validate_resolution_code (
6447       p_api_version            => 1.0,
6448       p_init_msg_list          => FND_API.G_TRUE,
6449       p_rescode_criteria_rec   => l_rc_rec,
6450       p_resolution_code        => p_resolution_code,
6451       x_return_status          => x_return_status,
6452       x_msg_count              => lx_msg_count,
6453       x_msg_data               => lx_msg_data );
6454 
6455    if ( x_return_status <> FND_API.G_RET_STS_SUCCESS ) then
6456       -- new message for 11.5.10
6457       -- Resolution code is not valid. Please check the values for the following:
6458       -- Service request type, inventory item, product category and problem code.
6459       fnd_message.set_name ('CS', 'CS_SR_RES_CODE_INVALID');
6460       fnd_message.set_token('API_NAME', l_api_name_full );
6461       fnd_msg_pub.add;
6462    end if;
6463 
6464 EXCEPTION
6465    WHEN OTHERS THEN
6466       fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
6467       fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
6468       fnd_msg_pub.add;
6469       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6470 
6471 END Resolution_Code_Cross_Val;
6472 
6473 -- KP API Cleanup; added new proc
6474 -- Procedure to be called when SR Status changes. Check if the SR
6475 -- is changed to closed status. If yes then,
6476 -- If there are any open Tasks, with the  restrict_flag set to 'Y''
6477 -- raise error.
6478 
6479 PROCEDURE Task_Restrict_Close_Cross_Val(
6480    p_incident_id          IN   NUMBER,
6481    p_status_id            IN   NUMBER,
6482    x_return_status        OUT  NOCOPY VARCHAR2 )
6483 IS
6484    l_dummy            NUMBER                := 0;
6485    l_api_name         CONSTANT VARCHAR2(30) := 'TASK_RESTRICT_CLOSE_CROSS_VAL';
6486    l_api_name_full    CONSTANT VARCHAR2(70) := G_PKG_NAME||'.'||l_api_name;
6487 
6488    l_close_flag         VARCHAR2(10);
6489 
6490 BEGIN
6491    x_return_status := FND_API.G_RET_STS_SUCCESS;
6492 
6493    SELECT close_flag
6494    INTO   l_close_flag
6495    FROM   cs_incident_statuses_b
6496    WHERE  incident_status_id = p_status_id;
6497 
6498    IF ( l_close_flag = 'Y' ) THEN
6499      SELECT COUNT(*)
6500      INTO   l_dummy
6501      FROM   jtf_tasks_b
6502      WHERE  source_object_id        = p_incident_id
6503      AND    source_object_type_code = 'SR'
6504      AND    NVL(open_flag,'Y')      = 'Y'
6505      AND    restrict_closure_flag   = 'Y'
6506      AND    NVL(deleted_flag,'N')   = 'N';
6507 
6508       if ( l_dummy > 0 ) then
6509          x_return_status := FND_API.G_RET_STS_ERROR;
6510          -- This service request has open dependent tasks. Please close these
6511          -- tasks before closing the service request.
6512          fnd_message.set_name ('CS', 'CS_SR_CANNOT_CLOSE_SR');
6513          fnd_msg_pub.add;
6514       end if;
6515 
6516    END IF;
6517 
6518 EXCEPTION
6519    WHEN OTHERS THEN
6520       fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
6521       fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
6522       fnd_msg_pub.add;
6523       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6524 
6525 END TASK_RESTRICT_CLOSE_CROSS_VAL;
6526 
6527 -- KP API Cleanup; added new proc
6528 -- -----------------------------------------------------------------------------
6529 -- Modification History
6530 -- Date     Name     Desc
6531 -- -------- -------- -----------------------------------------------------------
6532 -- 11/15/05 smisra   Bug 4105758 and 4432736
6533 --                   Put validate_contract_line in comments and used
6534 --                   oks_entitlement_pub.get_contract to get list of applicable
6535 --                   contracts and compared input value with the list. If input
6536 --                   is present in the list, contract is valid, otherwise it is
6537 --                   invalid.
6538 -- -------- -------- -----------------------------------------------------------
6539 PROCEDURE CONTRACTS_CROSS_VAL (
6540    p_parameter_name          IN  VARCHAR2,
6541    p_contract_service_id     IN  NUMBER,
6542    p_busiproc_id             IN  NUMBER,
6543    p_request_date            IN  DATE,
6544    p_inventory_item_id	     IN  NUMBER,
6545    p_inv_org_id              IN  NUMBER,
6546    p_install_site_id	     IN  NUMBER,
6547    p_customer_product_id     IN  NUMBER,
6548    p_account_id		     IN  NUMBER,
6549    p_customer_id	     IN  NUMBER,
6550    p_system_id               IN  NUMBER,
6551    x_return_status           OUT NOCOPY varchar2  )
6552 IS
6553    x_dummy 	         VARCHAR2(1);
6554    valid_contract_flag   VARCHAR2(1) := 'N';
6555    l_contract_index      BINARY_INTEGER;
6556 
6557    l_api_name            CONSTANT VARCHAR2(30) := 'contracts_cross_val';
6558    l_api_name_full       CONSTANT VARCHAR2(70) := G_PKG_NAME||'.'||l_api_name;
6559 
6560    -- Parameter to be used to pass to the contracts API.
6561    l_covlevel_tbl        OKS_ENTITLEMENTS_PUB.COVLEVEL_TBL_TYPE;
6562    lx_covlevel_tbl       OKS_ENTITLEMENTS_PUB.COVLEVEL_TBL_TYPE;
6563 
6564    lx_return_status      VARCHAR2(5);
6565    lx_msg_count          NUMBER;
6566    lx_msg_data           VARCHAR2(2000);
6567 
6568 l_ent_contracts OKS_ENTITLEMENTS_PUB.get_contop_tbl;
6569 px_inp_rec      OKS_ENTITLEMENTS_PUB.get_contin_rec;
6570 l_match_found   BOOLEAN;
6571 BEGIN
6572 
6573    x_return_status := FND_API.G_RET_STS_SUCCESS;
6574 
6575   px_inp_rec.contract_number          := NULL;
6576   px_inp_rec.contract_number_modifier := NULL;
6577   px_inp_rec.service_line_id          := NULL;
6578   px_inp_rec.party_id                 := p_customer_id;
6579   px_inp_rec.site_id                  := p_install_site_id;
6580   px_inp_rec.cust_acct_id             := p_account_id;
6581   px_inp_rec.system_id                := p_system_id;
6582   px_inp_rec.item_id                  := p_inventory_item_id;
6583   px_inp_rec.product_id               := p_customer_product_id;
6584   px_inp_rec.request_date             := p_request_date;
6585   --px_inp_rec.incident_date            := p_incident_occurred_date;
6586   --px_inp_rec.severity_id              := p_severity_id;
6587   --px_inp_rec.time_zone_id             := p_time_zone_id;
6588   px_inp_rec.business_process_id      := p_busiproc_id;
6589   px_inp_rec.calc_resptime_flag       := 'N';
6590   px_inp_rec.validate_flag            := 'Y';
6591   --px_inp_rec.sort_key                 := 'RSN';
6592   px_inp_rec.dates_in_input_tz        := 'N';
6593 
6594   OKS_ENTITLEMENTS_PUB.get_contracts
6595   ( p_api_version   => 1.0
6596   , p_init_msg_list => fnd_api.g_false
6597   , p_inp_rec       => px_inp_rec
6598   , x_return_status => x_return_status
6599   , x_msg_count     => lx_msg_count
6600   , x_msg_data      => lx_msg_data
6601   , x_ent_contracts => l_ent_contracts
6602   );
6603   IF x_return_status = FND_API.G_RET_STS_SUCCESS
6604   THEN
6605     l_match_found := false;
6606     IF l_ent_contracts.count > 0
6607     THEN
6608       FOR loop_indx in l_ent_contracts.FIRST..l_ent_contracts.LAST
6609       LOOP
6610         IF p_contract_service_id = l_ent_contracts(loop_indx).service_line_id
6611         THEN
6612           l_match_found := true;
6613           EXIT;
6614         END IF;
6615       END LOOP;
6616     END IF;
6617     --  if contract is not found in contract list, set return status to Error
6618     IF l_match_found = false
6619     THEN
6620       x_return_status := FND_API.G_RET_STS_ERROR;
6621     END IF;
6622   END IF;
6623 
6624    /*************** when bug 4109990 is fixed, uncomment this part
6625    l_covlevel_tbl(1).covlevel_code  := 'OKX_COVITEM';
6626    l_covlevel_tbl(1).covlevel_id    := p_inventory_item_id;
6627    l_covlevel_tbl(1).inv_org_id     := p_inv_org_id;
6628    l_covlevel_tbl(1).covered_yn     := 'N';
6629 
6630    l_covlevel_tbl(2).covlevel_code  := 'OKX_CUSTPROD';
6631    l_covlevel_tbl(2).covlevel_id    := p_customer_product_id;
6632    l_covlevel_tbl(2).inv_org_id     := NULL;
6633    l_covlevel_tbl(2).covered_yn     := 'N';
6634 
6635    l_covlevel_tbl(3).covlevel_code  := 'OKX_CUSTACCT';
6636    l_covlevel_tbl(3).covlevel_id    := p_account_id;
6637    l_covlevel_tbl(3).inv_org_id     := NULL;
6638    l_covlevel_tbl(3).covered_yn     := 'N';
6639 
6640    l_covlevel_tbl(4).covlevel_code  := 'OKX_PARTYSITE';
6641    l_covlevel_tbl(4).covlevel_id    := p_install_site_id;
6642    l_covlevel_tbl(4).inv_org_id     := NULL;
6643    l_covlevel_tbl(4).covered_yn     := 'N';
6644 
6645    l_covlevel_tbl(5).covlevel_code  := 'OKX_PARTY';
6646    l_covlevel_tbl(5).covlevel_id    := p_customer_id;
6647    l_covlevel_tbl(5).inv_org_id     := NULL;
6648    l_covlevel_tbl(5).covered_yn     := 'N';
6649 
6650    l_covlevel_tbl(6).covlevel_code  := 'OKX_COVSYST';
6651    l_covlevel_tbl(6).covlevel_id    := p_system_id;
6652    l_covlevel_tbl(6).inv_org_id     := NULL;
6653    l_covlevel_tbl(6).covered_yn     := 'N';
6654 
6655    OKS_ENTITLEMENTS_PUB.VALIDATE_CONTRACT_LINE (
6656       p_api_version          => 1,
6657       p_init_msg_list        => FND_API.G_FALSE,
6658       p_contract_line_id     => p_contract_service_id,
6659       p_busiproc_id          => p_busiproc_id,
6660       p_request_date         => p_request_date,
6661       p_covlevel_tbl_in      => l_covlevel_tbl,
6662       p_verify_combination   => 'N',
6663       x_return_status        => lx_return_status  ,
6664       x_msg_count            => lx_msg_count ,
6665       x_msg_data             => lx_msg_data,
6666       x_covlevel_tbl_out     => lx_covlevel_tbl,
6667       x_combination_valid    => x_dummy) ;
6668 
6669    l_contract_index := lx_covlevel_tbl.FIRST;
6670 
6671    IF ( lx_return_status = FND_API.G_RET_STS_SUCCESS ) then
6672       WHILE l_contract_index IS NOT NULL LOOP
6673          IF lx_covlevel_tbl(l_contract_index).covered_yn = 'Y' THEN
6674             valid_contract_flag := 'Y';
6675          END IF;
6676          l_contract_index := lx_covlevel_tbl.NEXT(l_contract_index);
6677       END LOOP;
6678 
6679       IF valid_contract_flag = 'N' THEN
6680          x_return_status := FND_API.G_RET_STS_ERROR;
6681          -- new message for 11.5.10
6682          -- Contract is not valid. Please check the values for the following:
6683          -- Service request type, inventory item, instance, account and
6684          -- install site.
6685          --fnd_message.set_name ('CS', 'CS_SR_CONTRACT_INVALID');
6686          --fnd_message.set_token('API_NAME', l_api_name_full );
6687          --fnd_msg_pub.add;
6688       END IF;
6689    ELSE     -- For BUG 3665768
6690          x_return_status := FND_API.G_RET_STS_ERROR;
6691          --fnd_message.set_name ('CS', 'CS_SR_CONTRACT_INVALID');
6692          --fnd_message.set_token('API_NAME', l_api_name_full );
6693          --fnd_msg_pub.add;
6694    END IF;    -- IF ( lx_return_status = FND_API.G_RET_STS_SUCCESS ) then
6695    *************** when bug 4109990 is fixed, uncomment this part  *********/
6696 
6697 EXCEPTION
6698    WHEN OTHERS THEN
6699       fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
6700       fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
6701       fnd_msg_pub.add;
6702       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6703 
6704 END CONTRACTS_CROSS_VAL;
6705 
6706 -- KP API Cleanup; added new proc
6707 -- Procedure to be called when cp_component_id changes. Check if it has
6708 -- has a valid relation with the inv_component_id
6709 
6710 PROCEDURE INV_COMPONENT_CROSS_VAL(
6711    p_parameter_name        IN   VARCHAR2,
6712    p_inv_component_id      IN   NUMBER,
6713    p_cp_component_id       IN   NUMBER,
6714    x_return_status         OUT  NOCOPY VARCHAR2 )
6715 IS
6716    l_dummy                 VARCHAR2(1);
6717    l_api_name              CONSTANT VARCHAR2(30) := 'Inv_Component_Cross_Val';
6718    l_api_name_full         CONSTANT VARCHAR2(70) := G_PKG_NAME||'.'||l_api_name;
6719 
6720 BEGIN
6721 
6722    x_return_status := FND_API.G_RET_STS_SUCCESS;
6723 
6724    SELECT 'X'
6725    INTO   l_dummy
6726    FROM   CSI_ITEM_INSTANCES
6727    WHERE  INSTANCE_ID        = p_cp_component_id
6728    AND    INVENTORY_ITEM_ID  = p_inv_component_id;
6729 
6730 EXCEPTION
6731    WHEN NO_DATA_FOUND THEN
6732    -- For bug 3324210 and 3324179
6733       x_return_status := FND_API.G_RET_STS_ERROR;
6734       CS_ServiceRequest_UTIL.Add_Invalid_Argument_Msg(
6735          p_token_an =>  l_api_name_full,
6736       --   p_token_v  =>  to_char(p_cp_component_id), --3815710
6737         p_token_v => to_char(p_inv_component_id),
6738          p_token_p  =>  p_parameter_name );
6739 
6740    WHEN OTHERS THEN
6741       fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
6742       fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
6743       fnd_msg_pub.add;
6744       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6745 
6746 END INV_COMPONENT_CROSS_VAL;
6747 
6748 -- KP API Cleanup; added new proc
6749 -- Procedure to be called when cp_subcomponent_id changes. Check if it has
6750 -- has a valid relation with the inv_subcomponent_id
6751 
6752 PROCEDURE INV_SUBCOMPONENT_CROSS_VAL(
6753    p_parameter_name                 IN  VARCHAR2,
6754    p_inv_subcomponent_id            IN  NUMBER,
6755    p_cp_subcomponent_id             IN  NUMBER,
6756    x_return_status                  OUT NOCOPY VARCHAR2 )
6757 
6758 IS
6759    l_dummy                      VARCHAR2(1);
6760    l_api_name                   CONSTANT VARCHAR2(30)    := 'Inv_Subcomponent_Cross_Val';
6761    l_api_name_full              CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
6762 
6763 BEGIN
6764 
6765    x_return_status := FND_API.G_RET_STS_SUCCESS;
6766 
6767    SELECT 'X' INTO l_dummy
6768    FROM CSI_ITEM_INSTANCES
6769    WHERE      INSTANCE_ID = p_cp_subcomponent_id
6770    AND  INVENTORY_ITEM_ID = p_inv_subcomponent_id;
6771 
6772 EXCEPTION
6773    WHEN NO_DATA_FOUND THEN
6774       -- For bug 3324210 and 3324179
6775       x_return_status := FND_API.G_RET_STS_ERROR;
6776       CS_ServiceRequest_UTIL.Add_Invalid_Argument_Msg(
6777          p_token_an =>  l_api_name_full,
6778          p_token_v  =>  to_char(p_cp_subcomponent_id),
6779          p_token_p  =>  p_parameter_name );
6780 
6781    WHEN OTHERS THEN
6782       fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
6783       fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
6784       fnd_msg_pub.add;
6785       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6786 
6787 END INV_SUBCOMPONENT_CROSS_VAL;
6788 
6789 -- where did this requirement come from?
6790 -- security
6791 -- Added new procedure to set the grants depending on the
6792 -- value of the agent security.
6793 -- C for Custom
6794 -- S for Standard
6795 -- N for None
6796 PROCEDURE SETUP_SR_AGENT_SECURITY (
6797    p_sr_agent_security IN VARCHAR2,
6798    x_return_status     OUT NOCOPY VARCHAR2 )
6799 IS
6800 BEGIN
6801   x_return_status := FND_API.G_RET_STS_SUCCESS;
6802 END SETUP_SR_AGENT_SECURITY;
6803 
6804 
6805  -- Added new function if the responsibility has access to
6806 -- the passed SR type
6807 
6808 FUNCTION VALIDATE_INCIDENT_ACCESS (
6809    p_api_name               IN   VARCHAR2,
6810    p_resp_business_usage    IN   VARCHAR2,
6811    p_incident_id            IN   NUMBER )
6812 RETURN BOOLEAN
6813 IS
6814 
6815    l_access VARCHAR2(3) := 'N';
6816 
6817 BEGIN
6818    IF p_resp_business_usage = 'AGENT' THEN
6819 
6820       SELECT 'Y'
6821       INTO l_access
6822       FROM cs_incidents_b_sec
6823       WHERE incident_id = p_incident_id;
6824 
6825    ELSE
6826       l_access := 'Y';
6827    END IF;
6828 
6829    IF l_access = 'N' THEN
6830       return false;
6831    ELSIF l_access = 'Y' THEN
6832       return true;
6833    END IF;
6834 EXCEPTION
6835    when no_data_found then
6836       return false;
6837    when others then
6838       return false;
6839 END VALIDATE_INCIDENT_ACCESS;
6840 
6841 -- end for security
6842 
6843 -- DJ API Cleanup; added new proc
6844 -- Procedure to be called when either the inv. component or the cp component
6845 -- changes.
6846 --
6847 
6848 PROCEDURE CP_COMP_ID_CROSS_VAL (
6849    p_inv_component_id    IN   NUMBER,
6850    p_cp_component_id     IN   NUMBER,
6851    x_return_status       OUT  NOCOPY VARCHAR2 )
6852 IS
6853    l_dummy             NUMBER := 0;
6854 BEGIN
6855    x_return_status := FND_API.G_RET_STS_SUCCESS;
6856    /*
6857    select 1
6858    into   l_dummy
6859    from   csi_item_instances
6860    where
6861 
6862 */
6863 
6864 END CP_COMP_ID_CROSS_VAL;
6865 
6866 -- DJ API Cleanup
6867 -- Procedure to disallow SR Type change for the following cases:
6868 -- From EAM to Non Eam
6869 -- From Non Eam to EAM
6870 
6871 PROCEDURE VALIDATE_TYPE_CHANGE (
6872    p_old_eam_type_flag        IN          VARCHAR2,
6873    p_new_eam_type_flag        IN          VARCHAR2,
6874    x_return_status            OUT NOCOPY  VARCHAR2 )
6875 IS
6876    l_api_name_full   VARCHAR2(70) := G_PKG_NAME||'.VALIDATE_TYPE_CHANGE';
6877 BEGIN
6878    if ( p_old_eam_type_flag <> p_new_eam_type_flag ) then
6879       x_return_status := FND_API.G_RET_STS_ERROR;
6880 
6881       -- Set different message depending on the nature of the type change
6882       if ( p_old_eam_type_flag = 'Y' ) then
6883          -- new message for 11.5.10
6884          -- The system could not update the Type. The Type cannot be changed from a
6885          -- Maintenance Type to a non-Maintenance Type.
6886 	 fnd_message.set_name ('CS', 'CS_SR_DISALLOW_TYPE_UPD_1');
6887 	 fnd_message.set_token('API_NAME', l_api_name_full );
6888 	 fnd_msg_pub.add;
6889       else
6890 	 -- new message for 11.5.10
6891 	 -- The system could not update the Type. The Type cannot be changed from a
6892 	 -- non-Maintenance Type to a Maintenance Type.
6893 	 fnd_message.set_name ('CS', 'CS_SR_DISALLOW_TYPE_UPD_2');
6894 	 fnd_message.set_token('API_NAME', l_api_name_full );
6895 	 fnd_msg_pub.add;
6896       end if;
6897    else
6898       x_return_status := FND_API.G_RET_STS_SUCCESS;
6899    end if;
6900 
6901 EXCEPTION
6902    WHEN OTHERS THEN
6903       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6904 
6905       FND_MESSAGE.SET_NAME ('CS', 'CS_API_SR_UNKNOWN_ERROR');
6906       FND_MESSAGE.SET_TOKEN ('P_TEXT',l_api_name_full||'-'||SQLERRM);
6907       FND_MSG_PUB.ADD;
6908 
6909 END VALIDATE_TYPE_CHANGE;
6910 
6911 
6912 -- KP API Cleanup
6913 -- Service request Cross Val procedure
6914 
6915 -- -----------------------------------------------------------------------------
6916 -- Modification History
6917 -- Date     Name     Desc
6918 -- -------- -------- -----------------------------------------------------------
6919 -- 02/28/05 smisra   Bug 4083288
6920 --                   Passed category_set_id to validate_category_id call.
6921 --                   performed validation of category id if category_set_id
6922 --                   is changed
6923 -- 03/25/05 smisra   Bug 4239975 Modified call to validate_current_serial_number.
6924 --                   Now it is called only if both customer product and
6925 --                   current serial number are not null and one of them has
6926 --                   changed.
6927 -- 05/09/05 smisra   add validation of maint_organization_id
6928 --                   used new procedure validation_customer_product_id to
6929 --                   validate customer product. it takes an addtional parameter
6930 --                   maint_organization_id
6931 -- 05/12/05 smisra   removed validation of parameter item_serial_number
6932 -- 08/03/05 smisra   1. added validation for owning dept
6933 --                   2. retrieved inv_org_master_org_flag for inv org
6934 --                   3. passed inv_org_master_org_flag to validate_product,
6935 --                      validate_maint_organization_id,
6936 --                      validate_customer_product_id
6937 -- 08/15/05 smisra   called validate product on when maint org changes
6938 -- 12/23/05 smisra   Bug 4894942
6939 --                   Removed call to contracts_cross_val. Now it is moved to
6940 --                   vldt_sr_rec procedure of PVT API.
6941 -- 12/30/05 smisra   bug 4773215
6942 --                   Removed owner validatation using validate_owner. This validation
6943 --                   is done in vldt_sr_rec of PVT API itself so that resource type
6944 --                   can be derived based on resource id
6945 --                   removed call to validate resource type as it is now being derived
6946 --                   based on resource id
6947 --                   Removed call to validate support site. From now on, it is
6948 --                   derived based onm resource id. Derivation happens in
6949 --                   vldt_Sr_rec of PVT API.
6950 -- -----------------------------------------------------------------------------
6951 PROCEDURE SERVICEREQUEST_CROSS_VAL (
6952    p_new_sr_rec          IN   cs_servicerequest_pvt.service_request_rec_type,
6953    p_old_sr_rec          IN   cs_servicerequest_pvt.sr_oldvalues_rec_type,
6954    x_cross_val_out_rec   OUT  NOCOPY sr_cross_val_out_rec_type,
6955    x_return_status       OUT  NOCOPY VARCHAR2 )
6956 IS
6957    lx_return_status    VARCHAR2(1);
6958    l_api_name_full     VARCHAR2(70) := G_PKG_NAME||'.SERVICEREQUEST_CROSS_VAL';
6959 
6960    -- Local variables used to store the value that is passed to the cross val
6961    -- procedures. This values is populated with the new value if passed, or if
6962    -- G_MISS_XXX is passed, the old values is retrieved and passed
6963    l_problem_code      VARCHAR2(30);
6964    l_res_code          VARCHAR2(30);
6965    l_sr_type_id        NUMBER;
6966    l_inv_item_id       NUMBER;
6967    l_inv_org_id        NUMBER;
6968    l_category_id       NUMBER;
6969    l_cont_srv_id       NUMBER; -- contract service id
6970    l_busi_proc_id      NUMBER; -- business process id
6971    l_request_date      DATE;
6972    l_inst_site_id      NUMBER; -- install site id
6973    l_cust_prod_id      NUMBER;
6974    l_account_id        NUMBER;
6975    l_customer_id       NUMBER;
6976    l_system_id         NUMBER;
6977    l_status_id         NUMBER;
6978    l_inc_loc_id        NUMBER; -- incident location id
6979    l_inc_loc_type      VARCHAR2(30);  -- incident location type  9/19 changes
6980    l_owner_id          NUMBER;
6981    l_group_type        VARCHAR2(240);
6982    l_owner_grp_id      NUMBER; -- owner group id
6983    l_maint_flag        VARCHAR2(10); -- EAM flag for SR Type
6984    -- 3303078
6985    l_inv_item_rev      VARCHAR2(240); --NUMBER;  -- inventory item revision
6986    l_inv_comp_id       NUMBER;  -- inventory component id
6987    l_cp_comp_id        NUMBER;
6988    l_cp_comp_ver       VARCHAR2(3); --NUMBER; -- cp component version
6989    l_sup_site_id       NUMBER;  -- support site id
6990    l_res_type          VARCHAR2(240); -- resource type
6991    l_bto_site_id       NUMBER;  -- bill to site id
6992    l_bto_party_id      NUMBER;  -- bill to party id
6993    l_sto_site_id       NUMBER;  -- ship to site id
6994    l_sto_party_id      NUMBER;  -- ship to party id
6995    l_bto_cont_id       NUMBER;  -- bill to contact id
6996    l_sto_cont_id       NUMBER;  -- ship to contact id
6997    l_cust_type         VARCHAR2(240); -- customer type
6998    l_bto_acc_id        NUMBER;  -- bill to account id
6999    l_sto_acc_id        NUMBER;  -- ship to account id
7000    l_external_ref      VARCHAR2(240); -- external reference
7001    l_prod_revision     VARCHAR2(240); -- inv. item revision
7002    l_cur_serial        VARCHAR2(240); -- current serial number
7003    l_inv_subcomp_id       NUMBER;        -- inv. subcomponent id
7004    l_cp_subcomp_id        NUMBER;        -- cp. subcomponent id
7005    l_inv_comp_ver      VARCHAR2(240); -- inv. component version
7006    l_inv_scomp_id      NUMBER; -- inv. subcomponent id
7007    l_inv_scomp_ver     VARCHAR2(240); -- inv. subcomponent version
7008    l_cat_set_id        NUMBER; -- category set id
7009    l_bto_site_use      NUMBER; -- bill to site use id
7010    l_sto_site_use      NUMBER; -- ship to site use id
7011    l_cp_scomp_id       NUMBER; -- cp subcomponent id
7012    l_cp_scomp_ver      VARCHAR2(3);  --NUMBER; -- cp subcomponent version
7013 
7014    lx_owner_name       VARCHAR2(240); -- used in validate_owner
7015    lx_owner_id         NUMBER;        -- used in validate_owner
7016    lx_site_use_id      NUMBER;        -- used in validate_bill_to_ship_to_site
7017 
7018  -- 3224828 contracts
7019    l_contract_id       NUMBER; -- contract id
7020    l_con_number        cs_incidents_all_b.contract_number % type;
7021 
7022  -- 3340433
7023    l_inv_change_by_cp  VARCHAR2(1):= 'N'; --set when inv_item_id is overwritten by cp
7024    l_inv_id_from_cp    NUMBER;
7025  -- 3360274
7026    l_resource_type     VARCHAR2(240); -- used in validate_resource_type
7027 
7028 l_inv_org_master_org_flag VARCHAR2(1);
7029 l_maint_organization_id   cs_incidents_all_b.maint_organization_id % TYPE;
7030 l_owning_dept_id          cs_incidents_all_b.owning_department_id  % TYPE;
7031 
7032 BEGIN
7033    -- Initialize return status to success
7034    x_return_status := FND_API.G_RET_STS_SUCCESS;
7035 
7036    -- Fetch the values that need to be used in the validation procedures. If the
7037    -- value is passed to the API, then use the passed in value, if not, use the
7038    -- existing DB value
7039 
7040    l_problem_code := get_right_char(
7041                         p_new_char_value => p_new_sr_rec.problem_code,
7042                         p_old_char_value => p_old_sr_rec.problem_code);
7043    l_sr_type_id   := get_right_num(
7044                         p_new_num_value  => p_new_sr_rec.type_id,
7045                         p_old_num_value  => p_old_sr_rec.incident_type_id);
7046    l_inv_item_id  := get_right_num(
7047                         p_new_num_value  => p_new_sr_rec.inventory_item_id,
7048                         p_old_num_value  => p_old_sr_rec.inventory_item_id);
7049    l_inv_org_id   := get_right_num(
7050                         p_new_num_value => p_new_sr_rec.inventory_org_id,
7051                         p_old_num_value => p_old_sr_rec.inv_organization_id);
7052    l_category_id  := get_right_num(
7053                         p_new_num_value => p_new_sr_rec.category_id,
7054                         p_old_num_value => p_old_sr_rec.category_id);
7055    l_res_code     := get_right_char(
7056                         p_new_char_value => p_new_sr_rec.resolution_code,
7057                         p_old_char_value => p_old_sr_rec.resolution_code);
7058    l_cont_srv_id  := get_right_num(
7059                         p_new_num_value  => p_new_sr_rec.contract_service_id,
7060                         p_old_num_value  => p_old_sr_rec.contract_service_id);
7061    l_request_date := get_right_date(
7062                         p_new_date_value  => p_new_sr_rec.request_date,
7063                         p_old_date_value  => p_old_sr_rec.incident_date);
7064    l_inst_site_id := get_right_num(
7065                         p_new_num_value  => p_new_sr_rec.install_site_id,
7066                         p_old_num_value  => p_old_sr_rec.install_site_id);
7067    l_cust_prod_id := get_right_num(
7068                         p_new_num_value  => p_new_sr_rec.customer_product_id,
7069                         p_old_num_value  => p_old_sr_rec.customer_product_id);
7070    l_account_id   := get_right_num(
7071                         p_new_num_value  => p_new_sr_rec.account_id,
7072                         p_old_num_value  => p_old_sr_rec.account_id);
7073    l_customer_id  := get_right_num(
7074                         p_new_num_value  => p_new_sr_rec.customer_id,
7075                         p_old_num_value  => p_old_sr_rec.customer_id);
7076    l_system_id    := get_right_num(
7077                         p_new_num_value  => p_new_sr_rec.system_id,
7078                         p_old_num_value  => p_old_sr_rec.system_id);
7079    l_status_id    := get_right_num(
7080                         p_new_num_value  => p_new_sr_rec.status_id,
7081                         p_old_num_value  => p_old_sr_rec.incident_status_id);
7082    l_inc_loc_id   := get_right_num(
7083                         p_new_num_value  => p_new_sr_rec.incident_location_id,
7084                         p_old_num_value  => p_old_sr_rec.incident_location_id);
7085    l_inc_loc_type   := get_right_char(
7086                         p_new_char_value  => p_new_sr_rec.incident_location_type,
7087                         p_old_char_value  => p_old_sr_rec.incident_location_type);
7088    l_owner_id     := get_right_num(
7089                         p_new_num_value  => p_new_sr_rec.owner_id,
7090                         p_old_num_value  => p_old_sr_rec.incident_owner_id);
7091    l_group_type   := get_right_char(
7092                         p_new_char_value => p_new_sr_rec.group_type,
7093                         p_old_char_value => p_old_sr_rec.group_type);
7094    l_owner_grp_id := get_right_num(
7095                         p_new_num_value  => p_new_sr_rec.owner_group_id,
7096                         p_old_num_value  => p_old_sr_rec.owner_group_id);
7097    l_maint_flag   := get_right_char(
7098                         p_new_char_value => p_new_sr_rec.new_type_maintenance_flag,
7099                         p_old_char_value => p_new_sr_rec.old_type_maintenance_flag);
7100    l_inv_item_rev := get_right_char(
7101                         p_new_char_value  => p_new_sr_rec.inv_item_revision,
7102                         p_old_char_value  => p_old_sr_rec.inv_item_revision);
7103    l_inv_comp_id  := get_right_num(
7104                         p_new_num_value  => p_new_sr_rec.inv_component_id,
7105                         p_old_num_value  => p_old_sr_rec.inv_component_id);
7106    l_cp_comp_id   := get_right_num(
7107                         p_new_num_value  => p_new_sr_rec.cp_component_id,
7108                         p_old_num_value  => p_old_sr_rec.cp_component_id);
7109    l_cp_comp_ver  := get_right_char(
7110                         p_new_char_value  => p_new_sr_rec.component_version,
7111                         p_old_char_value  => p_old_sr_rec.component_version);
7112    l_sup_site_id  := get_right_num(
7113                         p_new_num_value  => p_new_sr_rec.site_id,
7114                         p_old_num_value  => p_old_sr_rec.site_id);
7115    l_res_type     := get_right_char(
7116                         p_new_char_value => p_new_sr_rec.resource_type,
7117                         p_old_char_value => p_old_sr_rec.resource_type);
7118    l_bto_site_id := get_right_num(
7119                         p_new_num_value  => p_new_sr_rec.bill_to_site_id,
7120                         p_old_num_value  => p_old_sr_rec.bill_to_site_id);
7121    l_bto_party_id:= get_right_num(
7122                         p_new_num_value  => p_new_sr_rec.bill_to_party_id,
7123                         p_old_num_value  => p_old_sr_rec.bill_to_party_id);
7124    l_sto_site_id := get_right_num(
7125                         p_new_num_value  => p_new_sr_rec.ship_to_site_id,
7126                         p_old_num_value  => p_old_sr_rec.ship_to_site_id);
7127    l_sto_party_id:= get_right_num(
7128                         p_new_num_value  => p_new_sr_rec.ship_to_party_id,
7129                         p_old_num_value  => p_old_sr_rec.ship_to_party_id);
7130    l_bto_cont_id  := get_right_num(
7131                         p_new_num_value  => p_new_sr_rec.bill_to_contact_id,
7132                         p_old_num_value  => p_old_sr_rec.bill_to_contact_id);
7133    l_cust_type    := get_right_char(
7134                         p_new_char_value => p_new_sr_rec.caller_type,
7135                         p_old_char_value => p_old_sr_rec.caller_type);
7136    l_sto_cont_id  := get_right_num(
7137                         p_new_num_value  => p_new_sr_rec.ship_to_contact_id,
7138                         p_old_num_value  => p_old_sr_rec.ship_to_contact_id);
7139    l_bto_acc_id   := get_right_num(
7140                         p_new_num_value  => p_new_sr_rec.bill_to_account_id,
7141                         p_old_num_value  => p_old_sr_rec.bill_to_account_id);
7142    l_sto_acc_id   := get_right_num(
7143                         p_new_num_value  => p_new_sr_rec.ship_to_account_id,
7144                         p_old_num_value  => p_old_sr_rec.ship_to_account_id);
7145    l_external_ref := get_right_char(
7146                         p_new_char_value => p_new_sr_rec.external_reference,
7147                         p_old_char_value => p_old_sr_rec.external_reference);
7148    l_prod_revision:= get_right_char(
7149                         p_new_char_value => p_new_sr_rec.product_revision,
7150                         p_old_char_value => p_old_sr_rec.product_revision);
7151    l_cur_serial   := get_right_char(
7152                         p_new_char_value => p_new_sr_rec.current_serial_number,
7153                         p_old_char_value => p_old_sr_rec.current_serial_number);
7154    l_inv_subcomp_id  := get_right_num(
7155                         p_new_num_value  => p_new_sr_rec.inv_subcomponent_id,
7156                         p_old_num_value  => p_old_sr_rec.inv_subcomponent_id);
7157    l_cp_subcomp_id   := get_right_num(
7158                         p_new_num_value  => p_new_sr_rec.cp_subcomponent_id,
7159                         p_old_num_value  => p_old_sr_rec.cp_subcomponent_id);
7160    l_inv_comp_ver := get_right_char(
7161                         p_new_char_value => p_new_sr_rec.inv_component_version,
7162                         p_old_char_value => p_old_sr_rec.inv_component_version);
7163    l_inv_scomp_id := get_right_num(
7164                         p_new_num_value  => p_new_sr_rec.inv_subcomponent_id,
7165                         p_old_num_value  => p_old_sr_rec.inv_subcomponent_id);
7166    l_inv_scomp_ver:= get_right_char(
7167                         p_new_char_value => p_new_sr_rec.inv_subcomponent_version,
7168                         p_old_char_value => p_old_sr_rec.inv_subcomponent_version );
7169    l_cat_set_id   := get_right_num(
7170                         p_new_num_value  => p_new_sr_rec.category_set_id,
7171                         p_old_num_value  => p_old_sr_rec.category_set_id);
7172    l_cp_scomp_id  := get_right_num(
7173                         p_new_num_value  => p_new_sr_rec.cp_subcomponent_id,
7174                         p_old_num_value  => p_old_sr_rec.cp_subcomponent_id);
7175    l_bto_site_use := get_right_num(
7176                         p_new_num_value  => p_new_sr_rec.bill_to_site_use_id,
7177                         p_old_num_value  => p_old_sr_rec.bill_to_site_use_id);
7178    l_sto_site_use := get_right_num(
7179                         p_new_num_value  => p_new_sr_rec.ship_to_site_use_id,
7180                         p_old_num_value  => p_old_sr_rec.ship_to_site_use_id);
7181    l_cp_scomp_ver := get_right_char(
7182                         p_new_char_value  => p_new_sr_rec.subcomponent_version,
7183                         p_old_char_value  => p_old_sr_rec.subcomponent_version);
7184    l_maint_organization_id := get_right_num(
7185                         p_new_num_value  => p_new_sr_rec.maint_organization_id,
7186                         p_old_num_value  => p_old_sr_rec.maint_organization_id);
7187    l_owning_dept_id     := get_right_num
7188                            ( p_new_num_value  => p_new_sr_rec.owning_dept_id
7189                            , p_old_num_value  => p_old_sr_rec.owning_department_id
7190                            );
7191 
7192    -- 3224898 contracts
7193    l_contract_id := get_right_num(
7194                        p_new_num_value  => p_new_sr_rec.contract_id,
7195 		       p_old_num_value  => p_old_sr_rec.contract_id);
7196    l_resource_type := get_right_char(
7197                         p_new_char_value  => p_new_sr_rec.resource_type,
7198                         p_old_char_value  => p_old_sr_rec.resource_type);
7199 
7200 
7201 
7202 -- Start the cross validation checks and call outs
7203   -- this is done to inv_org_master_org_flag for further validation
7204   IF l_inv_org_id IS NOT NULL
7205   THEN
7206     CS_ServiceRequest_UTIL.Validate_Inventory_Org
7207     ( p_api_name                => 'CS_SERVICEREQUEST_UTIL.servicerequest_cross_val'
7208     , p_parameter_name          => 'Inventory Organization'
7209     , p_inv_org_id              => l_inv_org_id
7210     , x_inv_org_master_org_flag => l_inv_org_master_org_flag
7211     , x_return_status           => lx_return_status
7212     );
7213   END IF;
7214   -- validate maintenance organization id
7215   IF l_maint_organization_id IS NOT NULL AND
7216      (l_maint_organization_id <> NVL(p_old_sr_rec.maint_organization_id,-1) OR
7217      NVL(l_inv_org_id,-1) <> NVL(p_old_sr_rec.inv_organization_id,-1) )
7218   THEN
7219     validate_maint_organization_id
7220     ( p_maint_organization_id   => l_maint_organization_id
7221     , p_inventory_org_id        => l_inv_org_id
7222     , p_inv_org_master_org_flag => l_inv_org_master_org_flag
7223     , x_return_status           => lx_return_status
7224     );
7225     IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7226       x_return_status := FND_API.G_RET_STS_ERROR;
7227       RETURN;
7228     END IF;
7229   END IF;
7230   --
7231   IF l_owning_dept_id IS NOT NULL AND
7232      (l_owning_dept_id                <> NVL(p_old_sr_rec.owning_department_id ,-9) OR
7233       NVL(l_maint_organization_id,-9) <> NVL(p_old_sr_rec.maint_organization_id,-9))
7234   THEN
7235     CS_ServiceRequest_UTIL.Validate_Owning_department
7236     ( p_api_name         => 'CS_SERVICEREQUEST_UTIL.validate_owning_department',
7237       p_parameter_name   => 'Owning Department',
7238       p_inv_org_id       => l_maint_organization_id,
7239       p_owning_dept_id   => l_owning_dept_id,
7240       p_maintenance_flag => l_maint_flag,
7241       x_return_status    => lx_return_status
7242     );
7243     IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS)
7244     THEN
7245       x_return_status := FND_API.G_RET_STS_ERROR;
7246       RETURN;
7247     END IF;
7248   END IF;
7249   --
7250 /* For bug 3340433 - moved validate_product and validate_customer_product
7251 before the validations which uses inventory_item_id */
7252 -- Inventory item cross validation
7253     IF  ((p_new_sr_rec.inventory_org_id <> FND_API.G_MISS_NUM) AND
7254        (nvl(p_new_sr_rec.inventory_org_id,-99) <>
7255 			       nvl(p_old_sr_rec.inv_organization_id,-99)))
7256      OR
7257        ((p_new_sr_rec.inventory_item_id <> FND_API.G_MISS_NUM) AND
7258        (nvl(p_new_sr_rec.inventory_item_id,-99) <>
7259 			       nvl(p_old_sr_rec.inventory_item_id,-99)))
7260      OR
7261 	  ((p_new_sr_rec.customer_product_id <> FND_API.G_MISS_NUM) AND
7262        (nvl(p_new_sr_rec.customer_product_id,-99) <>
7263 			       nvl(p_old_sr_rec.customer_product_id,-99))) OR
7264        NVL(l_maint_organization_id,-99) <> NVL(p_old_sr_rec.maint_organization_id,-99)
7265    THEN
7266      if (l_inv_item_id IS NOT NULL and l_inv_item_id <> FND_API.G_MISS_NUM) then
7267        VALIDATE_PRODUCT (
7268          p_api_name             => NULL,
7269          p_parameter_name       => 'inventory_item_id',
7270          p_inventory_item_id    => l_inv_item_id,
7271          p_inventory_org_id     => l_inv_org_id,
7272          p_maintenance_flag     => l_maint_flag,
7273          p_maint_organization_id => l_maint_organization_id,
7274          p_inv_org_master_org_flag => l_inv_org_master_org_flag,
7275          x_return_status        => lx_return_status );
7276 
7277       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7278          x_return_status := FND_API.G_RET_STS_ERROR;
7279          RETURN;
7280       END IF;
7281      END IF;
7282    END IF; -- validate inventory item end if
7283 
7284 
7285 
7286 
7287 ---  Validate customer product
7288    IF l_cust_prod_id IS NOT NULL AND
7289       ( l_cust_prod_id        <> NVL(p_old_sr_rec.customer_product_id,-1) OR
7290         NVL(l_inv_item_id,-1) <> NVL(p_old_sr_rec.inventory_item_id  ,-1) OR
7291         NVL(l_inv_org_id ,-1) <> NVL(p_old_sr_rec.inv_organization_id,-1) OR
7292         NVL(l_maint_organization_id,-1) <> NVL(p_old_sr_rec.maint_organization_id,-1))
7293    THEN
7294       validate_customer_product_id
7295       ( p_customer_product_id   => l_cust_prod_id
7296       , p_customer_id           => l_customer_id
7297       , p_inventory_item_id     => l_inv_id_from_cp
7298       , p_inventory_org_id      => l_inv_org_id
7299       , p_maint_organization_id => l_maint_organization_id
7300       , p_inv_org_master_org_flag => l_inv_org_master_org_flag
7301       , x_return_status         => lx_return_status
7302       );
7303 
7304       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7305          x_return_status := FND_API.G_RET_STS_ERROR;
7306          RETURN;
7307       END IF;
7308 
7309      -- For bug 3340433
7310       if (nvl(l_inv_id_from_cp,-99) <> nvl(l_inv_item_id,-99) ) then
7311      -- For bug 3586812
7312        IF l_inv_item_id IS NOT NULL THEN
7313 	       Add_Param_Ignored_Msg(
7314 	           p_token_an  => l_api_name_full,
7315 		       p_token_ip  => 'p_inventory_item_id' );
7316        END IF;
7317           l_inv_item_id := l_inv_id_from_cp;
7318           l_inv_change_by_cp := 'Y';
7319       end if;
7320 
7321    END IF;  -- validate customer product end if
7322 
7323 
7324 
7325 -- Problem code cross validation
7326 -- Validate problem code if any of the following changes: type, category or
7327 -- item
7328    IF ((p_new_sr_rec.type_id <> FND_API.G_MISS_NUM) AND
7329        (nvl(p_new_sr_rec.type_id,-99) <>
7330 			       nvl(p_old_sr_rec.incident_type_id,-99)))
7331      OR
7332        ((p_new_sr_rec.problem_code <> FND_API.G_MISS_CHAR) AND
7333        (nvl(p_new_sr_rec.problem_code,-99) <>
7334                                nvl(p_old_sr_rec.problem_code,-99)))
7335      OR
7336       ((p_new_sr_rec.category_id <> FND_API.G_MISS_NUM) AND
7337        (nvl(p_new_sr_rec.category_id,-99) <>
7338 			       nvl(p_old_sr_rec.category_id,-99)))
7339      OR
7340       ((p_new_sr_rec.inventory_item_id <> FND_API.G_MISS_NUM) AND
7341        (nvl(p_new_sr_rec.inventory_item_id,-99) <>
7342 			       nvl(p_old_sr_rec.inventory_item_id,-99)))
7343     OR ( l_inv_change_by_cp = 'Y')
7344    THEN
7345       if ( l_problem_code IS NOT NULL and l_problem_code <> FND_API.G_MISS_CHAR ) then
7346          VALIDATE_PROBLEM_CODE (
7347             p_api_name             => NULL,
7348             p_parameter_name       => 'problem code',
7349             p_problem_code         => l_problem_code,
7350             p_incident_type_id     => l_sr_type_id,
7351             p_inventory_item_id    => l_inv_item_id,
7352 	        p_inventory_org_id     => l_inv_org_id,
7353             p_category_id          => l_category_id,
7354             x_return_status        => lx_return_status );
7355 
7356          IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7357             x_return_status := FND_API.G_RET_STS_ERROR;
7358             RETURN;
7359          END IF;
7360       END IF;   -- if ( l_problem_code IS NULL or l_problem_code <> FND_API
7361    END IF;  -- validate proble code end if
7362 
7363 -- Resolution code cross validation
7364 -- Validat resolution code if any of the following changes: type, category,
7365 -- item or problem code
7366    IF ((p_new_sr_rec.type_id <> FND_API.G_MISS_NUM) AND
7367        (nvl(p_new_sr_rec.type_id,-99) <>
7368 			       nvl(p_old_sr_rec.incident_type_id,-99)))
7369      OR
7370       ((p_new_sr_rec.category_id <> FND_API.G_MISS_NUM) AND
7371        (nvl(p_new_sr_rec.category_id,-99) <>
7372 			       nvl(p_old_sr_rec.category_id,-99)))
7373      OR
7374       ((p_new_sr_rec.inventory_item_id <> FND_API.G_MISS_NUM) AND
7375        (nvl(p_new_sr_rec.inventory_item_id,-99) <>
7376 			       nvl(p_old_sr_rec.inventory_item_id,-99)))
7377      OR
7378       ((p_new_sr_rec.problem_code <> FND_API.G_MISS_CHAR) AND
7379        (nvl(p_new_sr_rec.problem_code,-99) <>
7380 			       nvl(p_old_sr_rec.problem_code,-99)))
7381      OR
7382       ((p_new_sr_rec.resolution_code <> FND_API.G_MISS_CHAR) AND
7383        (nvl(p_new_sr_rec.resolution_code,-99) <>
7384                                nvl(p_old_sr_rec.resolution_code,-99)))
7385      OR ( l_inv_change_by_cp = 'Y')
7386    THEN
7387 
7388       if ( l_res_code IS NOT NULL and l_res_code <> FND_API.G_MISS_CHAR ) then
7389          RESOLUTION_CODE_CROSS_VAL (
7390             p_parameter_name       => 'problem code',
7391             p_resolution_code      => l_res_code,
7392             p_problem_code         => l_problem_code,
7393             p_incident_type_id     => l_sr_type_id,
7394             p_category_id          => l_category_id,
7395             p_inventory_item_id    => l_inv_item_id,
7396             p_inventory_org_id     => l_inv_org_id,
7397             x_return_status        => lx_return_status );
7398 
7399          IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7400             x_return_status := FND_API.G_RET_STS_ERROR;
7401             RETURN;
7402          END IF;
7403       END IF;  -- if ( l_res_code IS NOT NULL or l_res_code <> FND_API
7404 
7405    END IF;  -- validate resolution code end if
7406 
7407 -- contracts cross val
7408 -- Validate contract if any one of the following changes: type, install site,
7409 -- inv. item, customer product, account, customer or system
7410 -- Need to perform the validation only if there is a value for the contract
7411 -- service id. That is the reason the if condition has the contract service
7412 -- id check as well
7413    x_cross_val_out_rec.contract_service_id_valid := 'Y';
7414    /* smisra 12/20/05 Bug 4894942
7415    Now this validation is called from vldt_sr_rec
7416    IF ((nvl(p_new_sr_rec.install_site_id,-99) <> FND_API.G_MISS_NUM) AND
7417        (nvl(p_new_sr_rec.install_site_id,-99) <>
7418 			       nvl(p_old_sr_rec.install_site_id,-99)))
7419      OR
7420       ((p_new_sr_rec.type_id <> FND_API.G_MISS_NUM) AND
7421        (nvl(p_new_sr_rec.type_id,-99) <>
7422 			       nvl(p_old_sr_rec.incident_type_id,-99)))
7423      OR
7424       ((nvl(p_new_sr_rec.inventory_item_id,-99) <> FND_API.G_MISS_NUM) AND
7425        (nvl(p_new_sr_rec.inventory_item_id,-99) <>
7426 			       nvl(p_old_sr_rec.inventory_item_id,-99)))
7427      OR
7428       ((nvl(p_new_sr_rec.customer_product_id,-99) <> FND_API.G_MISS_NUM) AND
7429        (nvl(p_new_sr_rec.customer_product_id,-99) <>
7430 			       nvl(p_old_sr_rec.customer_product_id,-99)))
7431      OR
7432       ((nvl(p_new_sr_rec.account_id,-99) <> FND_API.G_MISS_NUM) AND
7433        (nvl(p_new_sr_rec.account_id,-99) <> nvl(p_old_sr_rec.account_id,-99)))
7434      OR
7435       ((p_new_sr_rec.customer_id <> FND_API.G_MISS_NUM) AND
7436        (nvl(p_new_sr_rec.customer_id,-99) <> nvl(p_old_sr_rec.customer_id,-99)))
7437      OR
7438       ((nvl(p_new_sr_rec.system_id,-99) <> FND_API.G_MISS_NUM) AND
7439        (nvl(p_new_sr_rec.system_id,-99) <> nvl(p_old_sr_rec.system_id,-99)))
7440      -- 3224898 contracts
7441      OR
7442       ((nvl(p_new_sr_rec.contract_id,-99) <> FND_API.G_MISS_NUM) AND
7443        (nvl(p_new_sr_rec.contract_id,-99) <> nvl(p_old_sr_rec.contract_id,-99)))
7444      OR
7445        ((nvl(p_new_sr_rec.contract_service_id,-99) <> FND_API.G_MISS_NUM) AND
7446        (nvl(p_new_sr_rec.contract_service_id,-99) <> nvl(p_old_sr_rec.contract_service_id,-99)))
7447      OR ( l_inv_change_by_cp = 'Y')
7448    THEN
7449       lx_return_status := FND_API.G_RET_STS_SUCCESS;
7450 
7451       if ( l_cont_srv_id IS NOT NULL and l_cont_srv_id <> FND_API.G_MISS_NUM ) then
7452          begin
7453             select business_process_id
7454             into   l_busi_proc_id
7455             from   cs_incident_types_b
7456             where  incident_type_id = l_sr_type_id;
7457          exception
7458             when no_data_found then
7459               raise fnd_api.g_exc_unexpected_error;
7460 	      -- Invalid type. Given type is either end dated or does not exist
7461 	      -- as a valid type.
7462               fnd_message.set_name ('CS', 'CS_SR_INVALID_TYPE');
7463 	      fnd_message.set_token('API_NAME', l_api_name_full);
7464               fnd_msg_pub.ADD;
7465 	      lx_return_status := FND_API.G_RET_STS_ERROR;
7466          end;
7467 
7468 	 if ( lx_return_status = FND_API.G_RET_STS_SUCCESS ) then
7469 
7470 	    -- 3224898 contracts
7471 	     Validate_Contract_Service_Id(
7472                         p_api_name            => l_api_name_full,
7473                         p_parameter_name      => 'p_contract_service_id',
7474                         p_contract_service_id => l_cont_srv_id,
7475                         x_contract_id         => l_contract_id,
7476                         x_contract_number     => l_con_number,
7477                         x_return_status       => lx_return_status);
7478 
7479               IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7480                 -- x_return_status := FND_API.G_RET_STS_ERROR;
7481                  x_cross_val_out_rec.contract_service_id_valid := 'N';
7482                 -- RETURN;
7483               ELSE
7484 	        x_cross_val_out_rec.contract_id := l_contract_id;
7485 	        x_cross_val_out_rec.contract_number := l_con_number;
7486                 CONTRACTS_CROSS_VAL (
7487                    p_parameter_name          => 'contract_service_id',
7488                    p_contract_service_id     => l_cont_srv_id,
7489                    p_busiproc_id           => l_busi_proc_id,
7490                    p_request_date          => l_request_date,
7491                    p_inventory_item_id     => l_inv_item_id,
7492                    p_inv_org_id            => l_inv_org_id,
7493                    p_install_site_id       => l_inst_site_id,
7494                    p_customer_product_id   => l_cust_prod_id,
7495                    p_account_id            => l_account_id,
7496                    p_customer_id           => l_customer_id,
7497 	           p_system_id             => l_system_id,
7498                    x_return_status         => lx_return_status );
7499 
7500 
7501                 IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS)
7502                 THEN
7503                   --x_return_status := FND_API.G_RET_STS_ERROR;
7504                   lx_return_status  := FND_API.G_RET_STS_SUCCESS;
7505 	          x_cross_val_out_rec.contract_service_id_valid := 'N';
7506 	          x_cross_val_out_rec.contract_id               := NULL;
7507 	          x_cross_val_out_rec.contract_number           := NULL;
7508                   --RETURN;
7509                 END IF;
7510               END IF; -- end of else after validate_contract_service_id procedure
7511 	 END IF; -- if ( lx_return_status = FND_API.G_RET_STS_SUCCESS ) then Business process process id else
7512       END IF;  --  if ( l_cont_srv_ind IS NOT NULL or l_cont_srv_ind
7513    END IF;  -- validate contracts end if
7514    *********/
7515 
7516 -- Tasks restrict close cross val
7517 -- When closing a SR, if there are any open tasks with the task restrict
7518 -- closure flag set to Y, then do not allow the closure of the SR.
7519    IF ( p_new_sr_rec.status_id <> FND_API.G_MISS_NUM ) AND
7520       ( nvl(p_new_sr_rec.status_id,-99) <>
7521 			      nvl(p_old_sr_rec.incident_status_id,-99) )
7522    THEN
7523 
7524       TASK_RESTRICT_CLOSE_CROSS_VAL (
7525          p_incident_id           => p_old_sr_rec.incident_id,
7526          p_status_id             => l_status_id,
7527          x_return_status         => lx_return_status );
7528    END IF;
7529 
7530    IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7531       x_return_status := FND_API.G_RET_STS_ERROR;
7532       RETURN;
7533    END IF;
7534 
7535 -- Incident Location cross val
7536 -- 9/19 changes.
7537 /* Commented out , as the SR UI , nor other UI's are doing this validation
7538 
7539    IF ( p_new_sr_rec.incident_location_id <> FND_API.G_MISS_NUM ) AND
7540       (nvl(p_new_sr_rec.incident_location_id,-99) <>
7541 				   nvl(p_old_sr_rec.incident_location_id,-99))
7542      OR
7543       ((p_new_sr_rec.customer_product_id <> FND_API.G_MISS_NUM) AND
7544        (nvl(p_new_sr_rec.customer_product_id,-99) <>
7545 			       nvl(p_old_sr_rec.customer_product_id,-99)))
7546    THEN
7547       IF l_cust_prod_id <> NULL THEN
7548 
7549          CP_INCIDENT_SITE_CROSS_VAL (
7550             p_parameter_name        => 'incident_location_id',
7551             p_incident_location_id  => l_inc_loc_id,
7552             p_customer_product_id   => l_cust_prod_id,
7553             x_return_status         => lx_return_status );
7554      ELSE
7555 
7556           Validate_Inc_Location_Id  (
7557             p_api_name               => NULL,
7558             p_parameter_name         => 'incident_location_id',
7559             p_incident_location_id   => p_new_sr_rec.incident_location_id,
7560             p_incident_location_type => l_inc_loc_type,
7561             x_return_status          => lx_return_status );
7562 
7563      END IF;
7564    END IF;
7565 
7566    IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7567       x_return_status := FND_API.G_RET_STS_ERROR;
7568       RETURN;
7569    END IF;
7570 */
7571 
7572 --- Install site cross val
7573 
7574    IF ( p_new_sr_rec.install_site_id <> FND_API.G_MISS_NUM ) AND
7575       (nvl(p_new_sr_rec.install_site_id,-99) <>
7576 				   nvl(p_old_sr_rec.install_site_id,-99))
7577      OR
7578       ((p_new_sr_rec.customer_product_id <> FND_API.G_MISS_NUM) AND
7579        (nvl(p_new_sr_rec.customer_product_id,-99) <>
7580 			       nvl(p_old_sr_rec.customer_product_id,-99)))
7581    THEN
7582      -- For bug 3342410 - included the cust_prod_id check
7583      if ( l_inst_site_id IS NOT NULL and l_inst_site_id <> FND_API.G_MISS_NUM )AND
7584          ( l_cust_prod_id IS NOT NULL and l_cust_prod_id <> FND_API.G_MISS_NUM) then
7585       CP_INSTALL_SITE_CROSS_VAL (
7586          p_parameter_name        => 'install site id',
7587          p_install_site_id       => l_inst_site_id,
7588          p_customer_product_id   => l_cust_prod_id,
7589          x_return_status         => lx_return_status );
7590    END IF;
7591   END IF;
7592    IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7593       x_return_status := FND_API.G_RET_STS_ERROR;
7594       RETURN;
7595    END IF;
7596 
7597 -- Task owner cross val. When SR Type changes, return back a warning message
7598 -- that the change may invalidate some task owners.
7599    IF ((p_new_sr_rec.type_id <> FND_API.G_MISS_NUM) AND
7600        (nvl(p_new_sr_rec.type_id,-99) <>
7601 			       nvl(p_old_sr_rec.incident_type_id,-99)))
7602    THEN
7603 
7604       TASK_OWNER_CROSS_VAL (
7605          p_incident_id        => p_old_sr_rec.incident_id,
7606          x_return_status      => lx_return_status );
7607 
7608       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7609          x_return_status := FND_API.G_RET_STS_ERROR;
7610          RETURN;
7611       END IF;
7612    END IF; -- task owner cross val
7613 
7614 
7615 
7616 -- Inventory item revision cross val
7617 -- Validate item revision when any of the following changes: item
7618 -- 3303078 inv_item_revision should be G_MISS_CHAR
7619    IF ((p_new_sr_rec.inventory_item_id <> FND_API.G_MISS_NUM) AND
7620        (nvl(p_new_sr_rec.inventory_item_id,-99) <>
7621 			       nvl(p_old_sr_rec.inventory_item_id,-99)))
7622      OR
7623        ((p_new_sr_rec.inv_item_revision <> FND_API.G_MISS_CHAR) AND
7624        (nvl(p_new_sr_rec.inv_item_revision,-99) <>
7625 			       nvl(p_old_sr_rec.inv_item_revision,-99)))
7626      OR ( l_inv_change_by_cp = 'Y')
7627 
7628    THEN
7629      if ( l_inv_item_rev IS NOT NULL and l_inv_item_rev <> FND_API.G_MISS_CHAR ) then
7630       VALIDATE_INV_ITEM_REV (
7631          p_api_name             => NULL,
7632          p_parameter_name       => 'inventory item revision',
7633          p_inv_item_revision    => l_inv_item_rev,
7634          p_inventory_item_id    => l_inv_item_id,
7635          p_inventory_org_id     => l_inv_org_id,
7636          x_return_status        => lx_return_status );
7637 
7638       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7639          x_return_status := FND_API.G_RET_STS_ERROR;
7640          RETURN;
7641       END IF;
7642     END IF;
7643    END IF;  -- validate item revision end if
7644 
7645 ---  inventory component  validation
7646 
7647    IF ((p_new_sr_rec.inventory_item_id <> FND_API.G_MISS_NUM) AND
7648        (nvl(p_new_sr_rec.inventory_item_id,-99) <>
7649 			       nvl(p_old_sr_rec.inventory_item_id,-99)))
7650      OR
7651       ((p_new_sr_rec.inv_component_id <> FND_API.G_MISS_NUM) AND
7652        (nvl(p_new_sr_rec.inv_component_id,-99) <>
7653 			       nvl(p_old_sr_rec.inv_component_id,-99)))
7654      OR ( l_inv_change_by_cp = 'Y')
7655    THEN
7656 
7657 
7658      if ( l_inv_comp_id IS NOT NULL and l_inv_comp_id <> FND_API.G_MISS_NUM ) then
7659       VALIDATE_INV_COMP_ID (
7660          p_api_name             => NULL,
7661          p_parameter_name       => 'inventory component id',
7662          p_inv_component_id     => l_inv_comp_id,
7663          p_inventory_item_id    => l_inv_item_id,
7664          p_inventory_org_id     => l_inv_org_id,
7665          x_return_status        => lx_return_status );
7666 
7667       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7668          x_return_status := FND_API.G_RET_STS_ERROR;
7669          RETURN;
7670       END IF;
7671     END IF;
7672    END IF;  -- validate item component end if
7673 
7674    -- Validate inv subcomponent smisra 12/21/03
7675    -- Made changes as one of the condition was missed out. On update even when the
7676    -- inv subsomp id had null the API will validate it. corected the code for this.
7677 
7678    IF ((p_new_sr_rec.inv_subcomponent_id <> FND_API.G_MISS_NUM) AND
7679        (nvl(p_new_sr_rec.inv_subcomponent_id, -99) <>
7680 	                   nvl(p_old_sr_rec.inv_subcomponent_id,-99)))
7681       OR
7682       ((p_new_sr_rec.inv_component_id <> FND_API.G_MISS_NUM) AND
7683        (nvl(p_new_sr_rec.inv_component_id,-99) <>
7684 	                   nvl(p_old_sr_rec.inv_component_id,-99)))
7685       OR
7686       ((p_new_sr_rec.inventory_org_id <> FND_API.G_MISS_NUM) AND
7687        (nvl(p_new_sr_rec.inventory_org_id,-99) <>
7688 			       nvl(p_old_sr_rec.inv_organization_id,-99)))
7689         THEN
7690 
7691      if ( l_inv_subcomp_id IS NOT NULL and l_inv_subcomp_id <> FND_API.G_MISS_NUM ) then
7692 
7693        CS_ServiceRequest_UTIL.Validate_Inv_SubComp_Id(
7694          p_api_name            => NULL,
7695          p_parameter_name      => 'p_inv_subcomponent_id',
7696          p_inventory_org_id    => l_inv_org_id,
7697          p_inv_subcomponent_id => l_inv_subcomp_id,
7698          p_inv_component_id    => l_inv_comp_id,
7699          x_return_status       => lx_return_status );
7700 
7701      IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7702        x_return_status := FND_API.G_RET_STS_ERROR;
7703        RETURN;
7704      END IF;
7705     END IF;
7706    END IF;
7707 
7708 
7709 
7710 ---    Validate CP component id
7711    IF ((p_new_sr_rec.inv_component_id <> FND_API.G_MISS_NUM) AND
7712        (nvl(p_new_sr_rec.inv_component_id,-99) <>
7713 			       nvl(p_old_sr_rec.inv_component_id,-99)))
7714 	OR ((p_new_sr_rec.cp_component_id <> FND_API.G_MISS_NUM) AND
7715        (nvl(p_new_sr_rec.cp_component_id,-99) <>
7716 			       nvl(p_old_sr_rec.cp_component_id,-99)))
7717    THEN
7718      if ( l_cp_comp_id IS NOT NULL and l_cp_comp_id <> FND_API.G_MISS_NUM ) then
7719       CP_COMP_ID_CROSS_VAL (
7720          p_inv_component_id     => l_inv_comp_id,
7721          p_cp_component_id      => l_cp_comp_id,
7722          x_return_status        => lx_return_status );
7723 
7724       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7725          x_return_status := FND_API.G_RET_STS_ERROR;
7726          RETURN;
7727       END IF;
7728     END IF;
7729    END IF;  -- validate cp component id end if
7730 
7731 ---- Validate_Bill_To_Site
7732 
7733    IF ((l_bto_site_id <> FND_API.G_MISS_NUM AND l_bto_site_id IS NOT NULL))
7734    THEN
7735       IF (l_bto_party_id = FND_API.G_MISS_NUM OR l_bto_party_id IS NULL) THEN
7736           fnd_message.set_name ('CS', 'CS_SR_PARENT_CHILD_CHECK');
7737           fnd_message.set_token ('CHILD_PARAM','bill_to_site_id');
7738           fnd_message.set_token ('PARENT_PARAM','bill_to_party_id');
7739           fnd_msg_pub.ADD;
7740           x_return_status := FND_API.G_RET_STS_ERROR;
7741           RETURN;
7742       END IF;
7743    END IF;
7744    IF ((p_new_sr_rec.bill_to_party_id <> FND_API.G_MISS_NUM) AND
7745        (nvl(p_new_sr_rec.bill_to_party_id,-99) <>
7746 			       nvl(p_old_sr_rec.bill_to_party_id,-99)))
7747      OR
7748       ((p_new_sr_rec.bill_to_site_id <> FND_API.G_MISS_NUM) AND
7749        (nvl(p_new_sr_rec.bill_to_site_id,-99) <>
7750 			       nvl(p_old_sr_rec.bill_to_site_id,-99)))
7751    THEN
7752 
7753      if ( l_bto_site_id IS NOT NULL and l_bto_site_id <> FND_API.G_MISS_NUM ) then
7754       VALIDATE_BILL_TO_SHIP_TO_SITE (
7755          p_api_name             => NULL,
7756          p_parameter_name       => 'bill to site id',
7757          p_bill_to_site_id      => l_bto_site_id,
7758          p_bill_to_party_id     => l_bto_party_id,
7759          p_site_use_type        => 'BILL_TO',
7760          x_site_use_id          => x_cross_val_out_rec.bill_to_site_use_id,
7761          x_return_status        => lx_return_status );
7762 
7763       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7764          x_return_status := FND_API.G_RET_STS_ERROR;
7765          RETURN;
7766       END IF;
7767     END IF;
7768    END IF;  -- validate bill to site id end if
7769 
7770 ---- Validate_ship_to_Site
7771 
7772    IF ((l_sto_site_id <> FND_API.G_MISS_NUM AND l_sto_site_id IS NOT NULL))
7773    THEN
7774       IF (l_sto_party_id = FND_API.G_MISS_NUM OR l_sto_party_id IS NULL) THEN
7775           fnd_message.set_name ('CS', 'CS_SR_PARENT_CHILD_CHECK');
7776           fnd_message.set_token ('CHILD_PARAM','ship_to_site_id');
7777           fnd_message.set_token ('PARENT_PARAM','ship_to_party_id');
7778           fnd_msg_pub.ADD;
7779           x_return_status := FND_API.G_RET_STS_ERROR;
7780           RETURN;
7781       END IF;
7782    END IF;
7783 
7784 IF ((p_new_sr_rec.ship_to_party_id <> FND_API.G_MISS_NUM) AND
7785        (nvl(p_new_sr_rec.ship_to_party_id,-99) <>
7786 			       nvl(p_old_sr_rec.ship_to_party_id,-99)))
7787      OR
7788       ((p_new_sr_rec.ship_to_site_id <> FND_API.G_MISS_NUM) AND
7789        (nvl(p_new_sr_rec.ship_to_site_id,-99) <>
7790 			       nvl(p_old_sr_rec.ship_to_site_id,-99)))
7791    THEN
7792 
7793      if ( l_sto_site_id IS NOT NULL and l_sto_site_id <> FND_API.G_MISS_NUM ) then
7794       VALIDATE_BILL_TO_SHIP_TO_SITE (
7795          p_api_name             => NULL,
7796          p_parameter_name       => 'ship to site id',
7797          p_bill_to_site_id      => l_sto_site_id,
7798          p_bill_to_party_id     => l_sto_party_id,
7799          p_site_use_type        => 'SHIP_TO',
7800          x_site_use_id          => x_cross_val_out_rec.ship_to_site_use_id,
7801          x_return_status        => lx_return_status );
7802 
7803       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7804          x_return_status := FND_API.G_RET_STS_ERROR;
7805          RETURN;
7806       END IF;
7807     END IF;
7808    END IF;  -- validate ship to site id end if
7809 
7810 ---- Validate Bill to contact id
7811    IF ((l_bto_cont_id <> FND_API.G_MISS_NUM AND l_bto_cont_id IS NOT NULL)) THEN
7812       IF (l_bto_party_id = FND_API.G_MISS_NUM OR l_bto_party_id IS NULL) THEN
7813 
7814           fnd_message.set_name ('CS', 'CS_SR_PARENT_CHILD_CHECK');
7815           fnd_message.set_token ('CHILD_PARAM','bill_to_contact_id');
7816           fnd_message.set_token ('PARENT_PARAM','bill_to_party_id');
7817           fnd_msg_pub.ADD;
7818 
7819          x_return_status := FND_API.G_RET_STS_ERROR;
7820          RETURN;
7821       END IF;
7822    END IF;
7823    IF ((p_new_sr_rec.bill_to_party_id <> FND_API.G_MISS_NUM) AND
7824        (nvl(p_new_sr_rec.bill_to_party_id,-99) <>
7825 			       nvl(p_old_sr_rec.bill_to_party_id,-99)))
7826      OR
7827       ((p_new_sr_rec.bill_to_contact_id <> FND_API.G_MISS_NUM) AND
7828        (nvl(p_new_sr_rec.bill_to_contact_id,-99) <>
7829 			       nvl(p_old_sr_rec.bill_to_contact_id,-99)))
7830    THEN
7831 
7832      IF ( l_bto_cont_id IS NOT NULL and l_bto_cont_id <> FND_API.G_MISS_NUM ) then
7833       VALIDATE_BILL_TO_SHIP_TO_CT (
7834          p_api_name             => NULL,
7835          p_parameter_name       => 'bill to contact id',
7836          p_bill_to_contact_id   => l_bto_cont_id,
7837          p_bill_to_party_id     => l_bto_party_id,
7838          p_customer_type        => l_cust_type,
7839          x_return_status        => lx_return_status );
7840 
7841       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7842          x_return_status := FND_API.G_RET_STS_ERROR;
7843          RETURN;
7844       END IF;
7845     END IF;  -- IF ( l_bto_cont_id IS NOT NULL and l_bto_cont_id <>
7846    END IF;  -- validate bill to contact id end if
7847 
7848 ---- Validate ship to contact id
7849    IF ((l_sto_cont_id <> FND_API.G_MISS_NUM AND l_sto_cont_id IS NOT NULL)) THEN
7850       IF (l_sto_party_id = FND_API.G_MISS_NUM OR l_sto_party_id IS NULL) THEN
7851 
7852           fnd_message.set_name ('CS', 'CS_SR_PARENT_CHILD_CHECK');
7853           fnd_message.set_token ('CHILD_PARAM','ship_to_contact_id');
7854           fnd_message.set_token ('PARENT_PARAM','ship_to_party_id');
7855           fnd_msg_pub.ADD;
7856 
7857          x_return_status := FND_API.G_RET_STS_ERROR;
7858          RETURN;
7859       END IF;
7860    END IF;
7861    IF ((p_new_sr_rec.ship_to_party_id <> FND_API.G_MISS_NUM) AND
7862        (nvl(p_new_sr_rec.ship_to_party_id,-99) <>
7863 			       nvl(p_old_sr_rec.ship_to_party_id,-99)))
7864      OR
7865       ((p_new_sr_rec.ship_to_contact_id <> FND_API.G_MISS_NUM) AND
7866        (nvl(p_new_sr_rec.ship_to_contact_id,-99) <>
7867 			       nvl(p_old_sr_rec.ship_to_contact_id,-99)))
7868 
7869    THEN
7870 
7871      if ( l_sto_cont_id IS NOT NULL and l_sto_cont_id <> FND_API.G_MISS_NUM ) then
7872       VALIDATE_BILL_TO_SHIP_TO_CT (
7873          p_api_name             => NULL,
7874          p_parameter_name       => 'ship to contact id',
7875          p_bill_to_contact_id   => l_sto_cont_id,
7876          p_bill_to_party_id     => l_sto_party_id,
7877          p_customer_type        => l_cust_type,
7878          x_return_status        => lx_return_status );
7879 
7880       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7881          x_return_status := FND_API.G_RET_STS_ERROR;
7882          RETURN;
7883       END IF;
7884     END IF;
7885    END IF;  -- validate ship to contact id end if
7886 
7887 --- Validate Bill to account id
7888 
7889    IF ((p_new_sr_rec.bill_to_party_id <> FND_API.G_MISS_NUM) AND
7890        (nvl(p_new_sr_rec.bill_to_party_id,-99) <>
7891 			       nvl(p_old_sr_rec.bill_to_party_id,-99)))
7892      OR
7893       ((p_new_sr_rec.bill_to_account_id <> FND_API.G_MISS_NUM) AND
7894        (nvl(p_new_sr_rec.bill_to_account_id,-99) <>
7895 			       nvl(p_old_sr_rec.bill_to_account_id,-99)))
7896 
7897    THEN
7898 
7899      if ( l_bto_acc_id IS NOT NULL and l_bto_acc_id <> FND_API.G_MISS_NUM ) then
7900       VALIDATE_BILL_TO_SHIP_TO_ACCT (
7901          p_api_name             => NULL,
7902          p_parameter_name       => 'bill to account id',
7903          p_account_id           => l_bto_acc_id,
7904          p_party_id             => l_bto_party_id,
7905          x_return_status        => lx_return_status );
7906 
7907       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7908          x_return_status := FND_API.G_RET_STS_ERROR;
7909          RETURN;
7910       END IF;
7911     END IF;
7912    END IF;  -- validate bill to account id end if
7913 
7914 --- Validate ship to account id
7915 
7916    IF ((p_new_sr_rec.ship_to_party_id <> FND_API.G_MISS_NUM) AND
7917        (nvl(p_new_sr_rec.ship_to_party_id,-99) <>
7918 			       nvl(p_old_sr_rec.ship_to_party_id,-99)))
7919      OR
7920       ((p_new_sr_rec.ship_to_account_id <> FND_API.G_MISS_NUM) AND
7921        (nvl(p_new_sr_rec.ship_to_account_id,-99) <>
7922 			       nvl(p_old_sr_rec.ship_to_account_id,-99)))
7923 
7924    THEN
7925 
7926      if ( l_sto_acc_id IS NOT NULL and l_sto_acc_id <> FND_API.G_MISS_NUM ) then
7927       VALIDATE_BILL_TO_SHIP_TO_ACCT (
7928          p_api_name             => NULL,
7929          p_parameter_name       => 'ship to account id',
7930          p_account_id           => l_sto_acc_id,
7931          p_party_id             => l_sto_party_id,
7932          x_return_status        => lx_return_status );
7933 
7934       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7935          x_return_status := FND_API.G_RET_STS_ERROR;
7936          RETURN;
7937       END IF;
7938     END IF;
7939    END IF;  -- validate ship to account id end if
7940 
7941 --- Validate External Reference
7942    IF ((p_new_sr_rec.customer_product_id <> FND_API.G_MISS_NUM) AND
7943        (nvl(p_new_sr_rec.customer_product_id,-99) <>
7944 			       nvl(p_old_sr_rec.customer_product_id,-99)))
7945      OR
7946       ((p_new_sr_rec.external_reference <> FND_API.G_MISS_CHAR) AND
7947        (nvl(p_new_sr_rec.external_reference,-99) <>
7948 			       nvl(p_old_sr_rec.external_reference,-99)))
7949 
7950    THEN
7951 
7952      if ( l_external_ref IS NOT NULL and l_external_ref <> FND_API.G_MISS_CHAR ) then
7953       -- For bug 3746983
7954       VALIDATE_EXTERNAL_REFERENCE (
7955          p_api_name               => NULL,
7956          p_parameter_name         => 'external reference',
7957          p_external_reference     => l_external_ref,
7958 	 p_customer_product_id    => l_cust_prod_id,
7959          p_inventory_item_id      => l_inv_item_id,
7960          p_inventory_org_id       => l_inv_org_id,
7961          p_customer_id            => l_customer_id,
7962          x_return_status          => lx_return_status );
7963 
7964       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7965          x_return_status := FND_API.G_RET_STS_ERROR;
7966          RETURN;
7967       END IF;
7968     END IF;
7969    END IF;  -- validate external reference end if
7970 
7971 --- Validate Product Revision
7972    /**** Aug 13th 2004. Replaced with validate_product_version. This proc will return
7973    product revision if product revision is not passed
7974    IF ((p_new_sr_rec.inventory_item_id <> FND_API.G_MISS_NUM) AND
7975        (nvl(p_new_sr_rec.inventory_item_id,-99) <>
7976 			       nvl(p_old_sr_rec.inventory_item_id,-99)))
7977      OR
7978       ((p_new_sr_rec.customer_product_id <> FND_API.G_MISS_NUM) AND
7979        (nvl(p_new_sr_rec.customer_product_id,-99) <>
7980 			       nvl(p_old_sr_rec.customer_product_id,-99)))
7981      OR
7982       ((p_new_sr_rec.product_revision <> FND_API.G_MISS_CHAR) AND
7983        (nvl(p_new_sr_rec.product_revision,-99) <>
7984 			       nvl(p_old_sr_rec.product_revision,-99)))
7985      OR ( l_inv_change_by_cp = 'Y')
7986 
7987    THEN
7988 
7989      if ( l_prod_revision IS NOT NULL and l_prod_revision <> FND_API.G_MISS_CHAR ) then
7990       VALIDATE_PRODUCT_REVISION (
7991          p_api_name             => NULL,
7992          p_parameter_name       => 'product revision',
7993          p_customer_product_id  => l_cust_prod_id,
7994          p_product_revision     => l_prod_revision,
7995          p_inventory_item_id    => l_inv_item_id,
7996          p_inventory_org_id     => l_inv_org_id,
7997          x_return_status        => lx_return_status );
7998 
7999       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8000          x_return_status := FND_API.G_RET_STS_ERROR;
8001          RETURN;
8002       END IF;
8003     END IF;
8004    END IF;  -- validate product revision end if
8005    ****/
8006    l_prod_revision := p_new_sr_rec.product_revision;
8007    IF ((p_new_sr_rec.customer_product_id <> FND_API.G_MISS_NUM) AND
8008        (nvl(p_new_sr_rec.customer_product_id,-99) <>
8009 			       nvl(p_old_sr_rec.customer_product_id,-99)))
8010      OR
8011       (l_prod_revision is not null AND
8012        (nvl(p_new_sr_rec.product_revision,'-99') <>
8013 			       nvl(p_old_sr_rec.product_revision,'-99')))
8014 
8015    THEN
8016 
8017      		VALIDATE_PRODUCT_VERSION
8018 		( p_parameter_name       => 'Product Revision',
8019 		  p_instance_id          => l_cust_prod_id,
8020 		  p_inventory_org_id     => l_inv_org_id,
8021 		  p_product_version      => l_prod_revision,
8022 		  x_return_status        => lx_return_status );
8023 
8024       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8025          x_return_status := FND_API.G_RET_STS_ERROR;
8026          RETURN;
8027       END IF;
8028    END IF;  -- validate product revision end if
8029    x_cross_val_out_rec.product_revision := l_prod_revision;
8030 
8031 --- Validate current serial number
8032 
8033    IF ((p_new_sr_rec.customer_product_id <> FND_API.G_MISS_NUM) AND
8034        (nvl(p_new_sr_rec.customer_product_id,-99) <>
8035 			       nvl(p_old_sr_rec.customer_product_id,-99)))
8036      OR
8037       ((p_new_sr_rec.current_serial_number <> FND_API.G_MISS_CHAR) AND
8038        (nvl(p_new_sr_rec.current_serial_number,-99) <>
8039 			       nvl(p_old_sr_rec.current_serial_number,-99)))
8040 
8041    THEN
8042 
8043      IF ( l_cur_serial   IS NOT NULL AND l_cur_serial   <> FND_API.G_MISS_CHAR ) AND
8044         ( l_cust_prod_id IS NOT NULL AND l_cust_prod_id <> FND_API.G_MISS_NUM  )
8045      THEN
8046         -- For bug 3746983
8047 	  VALIDATE_CURRENT_SERIAL (
8048          p_api_name               => NULL,
8049          p_parameter_name         => 'current serial number',
8050 	 p_inventory_item_id      => l_inv_item_id,
8051          p_inventory_org_id       => l_inv_org_id,
8052          p_customer_product_id    => l_cust_prod_id,
8053          p_customer_id            => l_customer_id,
8054          p_current_serial_number  => l_cur_serial,
8055          x_return_status          => lx_return_status );
8056 
8057       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8058          x_return_status := FND_API.G_RET_STS_ERROR;
8059          RETURN;
8060       END IF;
8061     END IF;
8062    END IF;  -- validate current serial number end if
8063 
8064 -- For bug 3592032 - moved call to INV_SUBCOMPONENT_CROSS_VAL after validate_cp_subcomp_id
8065 
8066 
8067 -- Validate Inventory component version
8068    IF ((p_new_sr_rec.inv_component_id <> FND_API.G_MISS_NUM) AND
8069        (nvl(p_new_sr_rec.inv_component_id,-99) <>
8070 			       nvl(p_old_sr_rec.inv_component_id,-99)))
8071      OR
8072       ((p_new_sr_rec.inv_component_version <> FND_API.G_MISS_CHAR) AND
8073        (nvl(p_new_sr_rec.inv_component_version,-99) <>
8074 			       nvl(p_old_sr_rec.inv_component_version,-99)))
8075 
8076    THEN
8077 
8078      if ( l_inv_comp_ver IS NOT NULL and l_inv_comp_ver <> FND_API.G_MISS_CHAR ) then
8079       VALIDATE_INV_COMP_VER (
8080          p_api_name               => NULL,
8081          p_parameter_name         => 'inventory component version',
8082          p_inv_component_id       => l_inv_comp_id,
8083          p_inventory_org_id       => l_inv_org_id,
8084          p_inv_component_version  => l_inv_comp_ver,
8085          x_return_status          => lx_return_status );
8086 
8087       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8088          x_return_status := FND_API.G_RET_STS_ERROR;
8089          RETURN;
8090       END IF;
8091     END IF;
8092    END IF;  -- validate item component version end if
8093 
8094 ----    Validate CP component id
8095 
8096    IF ((p_new_sr_rec.customer_product_id <> FND_API.G_MISS_NUM) AND
8097        (nvl(p_new_sr_rec.customer_product_id,-99) <>
8098 			       nvl(p_old_sr_rec.customer_product_id,-99)))
8099      OR
8100       ((p_new_sr_rec.cp_component_id <> FND_API.G_MISS_NUM) AND
8101        (nvl(p_new_sr_rec.cp_component_id,-99) <>
8102 			       nvl(p_old_sr_rec.cp_component_id,-99)))
8103 
8104    THEN
8105      if ( l_cp_comp_id IS NOT NULL and l_cp_comp_id <> FND_API.G_MISS_NUM ) then
8106       VALIDATE_CP_COMP_ID (
8107          p_api_name             => NULL,
8108          p_parameter_name       => 'CP component id',
8109          p_customer_product_id  => l_cust_prod_id,
8110          p_cp_component_id      => l_cp_comp_id,
8111          p_org_id               => NULL,
8112 	     x_return_status        => lx_return_status );
8113 
8114       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8115          x_return_status := FND_API.G_RET_STS_ERROR;
8116          RETURN;
8117       END IF;
8118     END IF;
8119    END IF;  -- validate CP component id end if
8120 
8121 ----   Validate CP component version
8122 -- For bug 3337848 - change from component_version_id to component_version
8123    /***
8124    IF ((p_new_sr_rec.cp_component_id <> FND_API.G_MISS_NUM) AND
8125        (nvl(p_new_sr_rec.cp_component_id,-99) <>
8126 			       nvl(p_old_sr_rec.cp_component_id,-99)))
8127      OR
8128       ((p_new_sr_rec.component_version <> FND_API.G_MISS_CHAR) AND
8129        (nvl(p_new_sr_rec.component_version,-99) <>
8130 			       nvl(p_old_sr_rec.component_version,-99)))
8131 
8132    THEN
8133 
8134      if ( l_cp_comp_ver IS NOT NULL and l_cp_comp_ver <> FND_API.G_MISS_CHAR ) then
8135      		VALIDATE_COMPONENT_VERSION
8136 		( p_api_name             => NULL,
8137 		  p_parameter_name       => 'CP component version',
8138 		  p_component_version    => l_cp_comp_ver,
8139 		  p_cp_component_id      => l_cp_comp_id,
8140 		  p_customer_product_id  => l_cust_prod_id,
8141 		  p_inventory_org_id     => l_inv_org_id,
8142 		  x_return_status        => lx_return_status );
8143 
8144 
8145       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8146          x_return_status := FND_API.G_RET_STS_ERROR;
8147          RETURN;
8148       END IF;
8149      END IF;
8150    END IF;  -- validate CP component vesion end if
8151    ********************/
8152    l_cp_comp_ver := p_new_sr_rec.component_version;
8153    IF ((p_new_sr_rec.cp_component_id <> FND_API.G_MISS_NUM) AND
8154        (nvl(p_new_sr_rec.cp_component_id,-99) <>
8155 			       nvl(p_old_sr_rec.cp_component_id,-99)))
8156      OR
8157       ((l_cp_comp_id is not null) AND
8158        (nvl(p_new_sr_rec.component_version,'-99') <>
8159 			       nvl(p_old_sr_rec.component_version,'-99')))
8160 
8161    THEN
8162      		VALIDATE_PRODUCT_VERSION
8163 		( p_parameter_name       => 'CP component version',
8164 		  p_instance_id          => l_cp_comp_id,
8165 		  p_inventory_org_id     => l_inv_org_id,
8166 		  p_product_version      => l_cp_comp_ver,
8167 		  x_return_status        => lx_return_status );
8168       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8169          x_return_status := FND_API.G_RET_STS_ERROR;
8170          RETURN;
8171       END IF;
8172    END IF;  -- validate CP component vesion end if
8173    x_cross_val_out_rec.component_version := l_cp_comp_ver;
8174 
8175    -- For bug 3592032 - moved call to VALIDATE_INV_SUBCOMP_VER after validate_cp_subcomp_id
8176 
8177 
8178 
8179 ---  Validate Category set id
8180    IF ((p_new_sr_rec.inventory_item_id <> FND_API.G_MISS_NUM) AND
8181        (nvl(p_new_sr_rec.inventory_item_id,-99) <>
8182 			       nvl(p_old_sr_rec.inventory_item_id,-99)))
8183      OR
8184       ((nvl(p_new_sr_rec.category_id,-99) <> FND_API.G_MISS_NUM) AND
8185        (nvl(p_new_sr_rec.category_id,-99) <>
8186 			       nvl(p_old_sr_rec.category_id,-99)))
8187      OR
8188       ((p_new_sr_rec.category_set_id <> FND_API.G_MISS_NUM) AND
8189        (nvl(p_new_sr_rec.category_set_id,-99) <>
8190 			       nvl(p_old_sr_rec.category_set_id,-99)))
8191      OR ( l_inv_change_by_cp = 'Y')
8192    THEN
8193 
8194      if ( l_cat_set_id IS NOT NULL and l_cat_set_id <> FND_API.G_MISS_NUM ) then
8195       VALIDATE_CATEGORY_SET_ID (
8196          p_api_name             => NULL,
8197          p_parameter_name       => 'Category set id',
8198          p_category_id          => l_category_id,
8199          p_category_set_id      => l_cat_set_id,
8200          p_inventory_item_id    => l_inv_item_id,
8201          p_inventory_org_id     => l_inv_org_id,
8202          x_return_status        => lx_return_status );
8203 
8204       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8205          x_return_status := FND_API.G_RET_STS_ERROR;
8206          RETURN;
8207       END IF;
8208     END IF;
8209    END IF;  -- validate category set id end if
8210 
8211 -- Validate the category_id
8212 --   1. If the category_id has changed
8213 --   2. check category_set_id is null ( passed/DB value)
8214    IF ((p_new_sr_rec.category_id <> FND_API.G_MISS_NUM) AND
8215        (nvl(p_new_sr_rec.category_id,-99) <>
8216 			       nvl(p_old_sr_rec.category_id,-99)) OR
8217        (nvl(p_new_sr_rec.category_set_id,-99) <> FND_API.G_MISS_NUM) AND
8218        (nvl(p_new_sr_rec.category_set_id,-99) <>
8219 			       nvl(p_old_sr_rec.category_set_id,-99)))
8220    THEN
8221      if ( l_cat_set_id IS NULL OR l_cat_set_id = FND_API.G_MISS_NUM ) then
8222 	 VALIDATE_CATEGORY_ID
8223       ( p_api_name        => NULL,
8224         p_parameter_name  => 'Category id',
8225         p_category_id     => l_category_id,
8226         p_category_set_id => l_cat_set_id,
8227         x_return_status   => lx_return_status
8228       );
8229       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8230          x_return_status := FND_API.G_RET_STS_ERROR;
8231          RETURN;
8232       END IF;
8233     END IF;
8234    END IF;  -- validate category id end if
8235 
8236 
8237 
8238 --- Validate Inventory component id
8239    IF ((p_new_sr_rec.inv_component_id <> FND_API.G_MISS_NUM) AND
8240        (nvl(p_new_sr_rec.inv_component_id,-99) <>
8241 			       nvl(p_old_sr_rec.inv_component_id,-99)))
8242      OR
8243       ((p_new_sr_rec.cp_component_id <> FND_API.G_MISS_NUM) AND
8244        (nvl(p_new_sr_rec.cp_component_id,-99) <>
8245 			       nvl(p_old_sr_rec.cp_component_id,-99)))
8246 
8247    THEN
8248      if ( l_cp_comp_id IS NOT NULL and l_cp_comp_id <> FND_API.G_MISS_NUM ) and
8249         ( l_inv_comp_id IS NOT NULL and l_inv_comp_id <> FND_API.G_MISS_NUM ) then
8250       INV_COMPONENT_CROSS_VAL (
8251          p_parameter_name       => 'Inventory component',
8252          p_cp_component_id      => l_cp_comp_id,
8253          p_inv_component_id     => l_inv_comp_id,
8254          x_return_status        => lx_return_status );
8255 
8256       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8257          x_return_status := FND_API.G_RET_STS_ERROR;
8258          RETURN;
8259       END IF;
8260     END IF;
8261    END IF;  -- validate Inventory  component end if
8262 
8263 ---  Validate CP subcomponent id
8264 
8265    IF ((p_new_sr_rec.cp_subcomponent_id <> FND_API.G_MISS_NUM) AND
8266        (nvl(p_new_sr_rec.cp_subcomponent_id,-99) <>
8267 			       nvl(p_old_sr_rec.cp_subcomponent_id,-99)))
8268      OR
8269       ((p_new_sr_rec.cp_component_id <> FND_API.G_MISS_NUM) AND
8270        (nvl(p_new_sr_rec.cp_component_id,-99) <>
8271 			       nvl(p_old_sr_rec.cp_component_id,-99)))
8272 	 OR
8273 	  ((p_new_sr_rec.customer_product_id <> FND_API.G_MISS_NUM) AND
8274        (nvl(p_new_sr_rec.customer_product_id,-99) <>
8275 			       nvl(p_old_sr_rec.customer_product_id,-99)))
8276    THEN
8277 
8278      if ( l_cp_scomp_id IS NOT NULL and l_cp_scomp_id <> FND_API.G_MISS_NUM ) then
8279       VALIDATE_CP_SUBCOMP_ID  (
8280          p_api_name             => NULL,
8281          p_parameter_name       => 'CP subcomponent id',
8282          p_cp_component_id      => l_cp_comp_id,
8283          p_cp_subcomponent_id   => l_cp_scomp_id,
8284          p_customer_product_id  => l_cust_prod_id,
8285          p_org_id               => NULL,
8286          x_return_status        => lx_return_status );
8287 
8288       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8289          x_return_status := FND_API.G_RET_STS_ERROR;
8290          RETURN;
8291       END IF;
8292     END IF;
8293    END IF;  -- validate CP subcomponent end if
8294 
8295    -- For bug 3592032
8296    --- Validate Inventory subcomponent id
8297    IF ((p_new_sr_rec.inv_subcomponent_id <> FND_API.G_MISS_NUM) AND
8298        (nvl(p_new_sr_rec.inv_subcomponent_id,-99) <>
8299 			       nvl(p_old_sr_rec.inv_subcomponent_id,-99)))
8300      OR
8301       ((p_new_sr_rec.cp_subcomponent_id <> FND_API.G_MISS_NUM) AND
8302        (nvl(p_new_sr_rec.cp_subcomponent_id,-99) <>
8303 			       nvl(p_old_sr_rec.cp_subcomponent_id,-99)))
8304 
8305    THEN
8306      if ( l_cp_subcomp_id IS NOT NULL and l_cp_subcomp_id <> FND_API.G_MISS_NUM ) and
8307         ( l_inv_subcomp_id IS NOT NULL and l_inv_subcomp_id <> FND_API.G_MISS_NUM ) then
8308       INV_SUBCOMPONENT_CROSS_VAL (
8309          p_parameter_name       => 'inv subcomponent',
8310          p_inv_subcomponent_id  => l_inv_subcomp_id,
8311          p_cp_subcomponent_id   => l_cp_subcomp_id,
8312          x_return_status        => lx_return_status );
8313 
8314       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8315          x_return_status := FND_API.G_RET_STS_ERROR;
8316          RETURN;
8317       END IF;
8318     END IF;
8319    END IF;  -- validate inventory subcomponent end if
8320 
8321    ---  Validate Inv subcomponent version
8322    IF ((p_new_sr_rec.inv_subcomponent_id <> FND_API.G_MISS_NUM) AND
8323        (nvl(p_new_sr_rec.inv_subcomponent_id,-99) <>
8324 			       nvl(p_old_sr_rec.inv_subcomponent_id,-99)))
8325      OR
8326       ((p_new_sr_rec.inv_subcomponent_version <> FND_API.G_MISS_CHAR) AND
8327        (nvl(p_new_sr_rec.inv_subcomponent_version,-99) <>
8328 			       nvl(p_old_sr_rec.inv_subcomponent_version,-99)))
8329 
8330    THEN
8331 
8332      if ( l_inv_scomp_ver IS NOT NULL and l_inv_scomp_ver <> FND_API.G_MISS_CHAR ) then
8333       VALIDATE_INV_SUBCOMP_VER (
8334          p_api_name                 => NULL,
8335          p_parameter_name           => 'Inv subcomponent version',
8336          p_inv_subcomponent_version => l_inv_scomp_ver,
8337          p_inv_subcomponent_id      => l_inv_scomp_id,
8338          p_inventory_org_id         => l_inv_org_id,
8339          x_return_status            => lx_return_status );
8340 
8341       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8342          x_return_status := FND_API.G_RET_STS_ERROR;
8343          RETURN;
8344       END IF;
8345     END IF;
8346    END IF;  -- validate Inv subcomponent version end if
8347 
8348    -- end of change for bug 3592032
8349 
8350 
8351 --- Validate the CP suncomponent version
8352 -- For bug 3337848 - change from component_version_id to component_version
8353 
8354    /*** smisra 5/4/04 bug 3566783
8355    IF ((p_new_sr_rec.cp_subcomponent_id <> FND_API.G_MISS_NUM) AND
8356        (nvl(p_new_sr_rec.cp_subcomponent_id,-99) <>
8357 			       nvl(p_old_sr_rec.cp_subcomponent_id,-99)))
8358      OR
8359       ((p_new_sr_rec.subcomponent_version <> FND_API.G_MISS_CHAR) AND
8360        (nvl(p_new_sr_rec.subcomponent_version,-99) <>
8361 			       nvl(p_old_sr_rec.subcomponent_version,-99)))
8362 
8363    THEN
8364      if ( l_cp_scomp_ver IS NOT NULL and l_cp_scomp_ver <> FND_API.G_MISS_CHAR ) then
8365        VALIDATE_SUBCOMPONENT_VERSION (
8366          p_api_name             => NULL,
8367          p_parameter_name       => 'CP subcomponent version',
8368          p_cp_component_id      => l_cp_comp_id,
8369          p_cp_subcomponent_id   => l_cp_scomp_id,
8370          p_customer_product_id  => l_cust_prod_id,
8371          p_subcomponent_version => l_cp_scomp_ver,
8372 	  p_inventory_org_id    => l_inv_org_id,
8373          x_return_status        => lx_return_status );
8374 
8375       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8376          x_return_status := FND_API.G_RET_STS_ERROR;
8377          RETURN;
8378       END IF;
8379     END IF;
8380    END IF;  -- validate CP subcomponent version end if
8381    *********************************/
8382    l_cp_scomp_ver := p_new_sr_rec.subcomponent_version;
8383    IF ((p_new_sr_rec.cp_subcomponent_id <> FND_API.G_MISS_NUM) AND
8384        (nvl(p_new_sr_rec.cp_subcomponent_id,-99) <>
8385 			       nvl(p_old_sr_rec.cp_subcomponent_id,-99)))
8386      OR
8387       ((l_cp_scomp_id is not null) AND
8388        (nvl(p_new_sr_rec.subcomponent_version,'-99') <>
8389 			       nvl(p_old_sr_rec.subcomponent_version,'-99')))
8390 
8391    THEN
8392      		VALIDATE_PRODUCT_VERSION
8393 		( p_parameter_name       => 'CP subcomponent version',
8394 		  p_instance_id          => l_cp_scomp_id,
8395 		  p_inventory_org_id     => l_inv_org_id,
8396 		  p_product_version      => l_cp_scomp_ver,
8397 		  x_return_status        => lx_return_status );
8398       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8399          x_return_status := FND_API.G_RET_STS_ERROR;
8400          RETURN;
8401       END IF;
8402    END IF;  -- validate CP component vesion end if
8403    x_cross_val_out_rec.subcomponent_version := l_cp_scomp_ver;
8404 
8405 
8406 
8407 ---    Validate bill to site and site use
8408    IF ((p_new_sr_rec.bill_to_party_id <> FND_API.G_MISS_NUM) AND
8409        (nvl(p_new_sr_rec.bill_to_party_id,-99) <>
8410 			       nvl(p_old_sr_rec.bill_to_party_id,-99)))
8411      OR
8412       ((p_new_sr_rec.bill_to_site_id <> FND_API.G_MISS_NUM) AND
8413        (nvl(p_new_sr_rec.bill_to_site_id,-99) <>
8414 			       nvl(p_old_sr_rec.bill_to_site_id,-99)))
8415      OR
8416       ((p_new_sr_rec.bill_to_site_use_id <> FND_API.G_MISS_NUM) AND
8417        (nvl(p_new_sr_rec.bill_to_site_use_id,-99) <>
8418 			       nvl(p_old_sr_rec.bill_to_site_use_id,-99)))
8419 
8420    THEN
8421 
8422      if ( l_bto_site_id IS NOT NULL and l_bto_site_id <> FND_API.G_MISS_NUM ) then
8423       VALIDATE_BILL_TO_SHIP_TO_SITE (
8424          p_api_name             => NULL,
8425          p_parameter_name       => 'bill to site id',
8426          p_bill_to_site_id      => l_bto_site_id,
8427          p_bill_to_party_id     => l_bto_party_id,
8428          p_site_use_type        => 'BILL_TO',
8429          --p_site_use_id          => l_bto_site_use,
8430          x_site_use_id          => lx_site_use_id,
8431          x_return_status        => lx_return_status );
8432 
8433       IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8434          x_return_status := FND_API.G_RET_STS_ERROR;
8435          RETURN;
8436       END IF;
8437     END IF;
8438    END IF;  -- validate bill to site and site use end if
8439 
8440 ---    Validate ship to site and site use
8441   -- ship_to_party_id is a reqd field if ship_to_site_use_id is passed,
8442   -- so check if passed, else return error
8443    IF ((l_sto_site_use <> FND_API.G_MISS_NUM AND
8444         l_sto_site_use IS NOT NULL))
8445    THEN
8446       IF (l_sto_party_id = FND_API.G_MISS_NUM OR
8447           l_sto_party_id IS NULL) THEN
8448                    fnd_message.set_name ('CS', 'CS_SR_PARENT_CHILD_CHECK');
8449                    fnd_message.set_token ('CHILD_PARAM','ship_to_site_use_id');
8450                    fnd_message.set_token ('PARENT_PARAM','ship_to_party_id');
8451                    fnd_msg_pub.ADD;
8452              x_return_status := FND_API.G_RET_STS_ERROR;
8453              RETURN;
8454       END IF;
8455    END IF;
8456 /*
8457     BUG 3702517 - Commented out
8458    IF ((p_new_sr_rec.ship_to_party_id <> FND_API.G_MISS_NUM) AND
8459        (nvl(p_new_sr_rec.ship_to_party_id,-99) <>
8460 			       nvl(p_old_sr_rec.ship_to_party_id,-99)))
8461      OR
8462       ((p_new_sr_rec.ship_to_site_id <> FND_API.G_MISS_NUM) AND
8463        (nvl(p_new_sr_rec.ship_to_site_id,-99) <>
8464 			       nvl(p_old_sr_rec.ship_to_site_id,-99)))
8465      OR
8466       ((p_new_sr_rec.ship_to_site_use_id <> FND_API.G_MISS_NUM) AND
8467        (nvl(p_new_sr_rec.ship_to_site_use_id,-99) <>
8468 			       nvl(p_old_sr_rec.ship_to_site_use_id,-99)))
8469    THEN
8470 
8471       if ( l_sto_site_use IS NOT NULL and l_sto_site_use <> FND_API.G_MISS_NUM ) then
8472          Validate_Site_Site_Use (
8473             p_api_name             => NULL,
8474             p_parameter_name       => 'ship_to_site_use_id',
8475             p_site_id              => l_sto_site_id,
8476             p_site_use_id          => l_sto_site_use,
8477             p_party_id             => l_sto_party_id,
8478             p_site_use_type        => 'SHIP_TO',
8479             x_return_status        => lx_return_status );
8480 
8481          if (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8482             x_return_status := FND_API.G_RET_STS_ERROR;
8483             RETURN;
8484          end if;
8485       end if;
8486    END IF;  -- validate ship to site and site use end if
8487    end of comment out for Bug 3702517
8488 */
8489 -- Bug 3702517 change begins
8490 ---------------------------
8491     IF
8492         (
8493             ( p_new_sr_rec.ship_to_party_id <> FND_API.G_MISS_NUM ) AND
8494             (
8495 	        NVL(p_new_sr_rec.ship_to_party_id,-99) <> NVL(p_old_sr_rec.ship_to_party_id,-99)
8496             )
8497 	)
8498         OR
8499         (
8500 	    ( p_new_sr_rec.ship_to_site_id <> FND_API.G_MISS_NUM ) AND
8501             (
8502 	        NVL(p_new_sr_rec.ship_to_site_id,-99) <> NVL(p_old_sr_rec.ship_to_site_id,-99)
8503 	    )
8504 	)
8505 	OR
8506         (
8507             (p_new_sr_rec.ship_to_site_use_id <> FND_API.G_MISS_NUM ) AND
8508             (
8509                 NVL(p_new_sr_rec.ship_to_site_use_id,-99) <> NVL(p_old_sr_rec.ship_to_site_use_id,-99)
8510             )
8511         )
8512     THEN
8513         IF
8514         -- Both ship_to_site_id and ship_to_site_use_id are available
8515         -- => call Validate_Site_Site_Use
8516 	(
8517 	    l_sto_site_use IS NOT NULL and l_sto_site_use <> FND_API.G_MISS_NUM AND
8518             l_sto_site_id  IS NOT NULL AND l_sto_site_id  <> FND_API.G_MISS_NUM
8519 	)
8520 	THEN
8521             Validate_Site_Site_Use
8522 	    (
8523                 p_api_name             => NULL,
8524                 p_parameter_name       => 'SHIP_TO_SITE_USE_ID',
8525                 p_site_id              => l_sto_site_id,
8526                 p_site_use_id          => l_sto_site_use,
8527                 p_party_id             => l_sto_party_id,
8528                 p_site_use_type        => 'SHIP_TO',
8529                 x_return_status        => lx_return_status
8530             );
8531             IF
8532                 (lx_return_status <> FND_API.G_RET_STS_SUCCESS)
8533             THEN
8534                 x_return_status := FND_API.G_RET_STS_ERROR;
8535                 RETURN;
8536             END IF;
8537 
8538         ELSIF
8539         -- Ship_to_site_use_id is available, but ship_to_site_id is not passed
8540         -- => Call Validate_Bill_Ship_Site_Use
8541             (
8542                 (
8543                     l_sto_site_use <> FND_API.G_MISS_NUM AND
8544                     l_sto_site_use IS NOT NULL
8545                 )
8546                 AND
8547                 (
8548                     l_sto_site_id IS NULL  OR
8549                     l_sto_site_id = FND_API.G_MISS_NUM
8550                 )
8551             )
8552         THEN
8553             Validate_Bill_Ship_Site_Use
8554             (
8555                 p_api_name            => null,
8556                 p_parameter_name      => 'SHIP_TO SITE USE ',
8557                 p_site_use_id         => l_sto_site_use,
8558                 p_party_id            => l_sto_party_id,
8559                 p_site_use_type       => 'SHIP_TO',
8560                 x_site_id             => l_sto_site_id,
8561                 x_return_status       => lx_return_status
8562             );
8563             IF
8564                 (lx_return_status <> FND_API.G_RET_STS_SUCCESS)
8565             THEN
8566                 x_return_status := FND_API.G_RET_STS_ERROR;
8567                 RETURN;
8568             ELSE
8569                 x_cross_val_out_rec.ship_to_site_id := l_sto_site_id;
8570             END IF;
8571 
8572         ELSIF
8573 	-- Ship_to_site_id is available, but ship_to_site_use_id is not passed
8574 	-- => Call Validate_Bill_To_Ship_To_Site
8575 	    (
8576                 (
8577                     l_sto_site_id <> FND_API.G_MISS_NUM AND
8578                     l_sto_site_id IS NOT NULL
8579                 )
8580                 AND
8581                 (
8582                     l_sto_site_use IS NULL  OR
8583                     l_sto_site_use = FND_API.G_MISS_NUM
8584                 )
8585             )
8586         THEN
8587             Validate_Bill_To_Ship_To_Site
8588             (
8589                 p_api_name            => null,
8590                 p_parameter_name      => 'SHIP_TO SITE ',
8591                 p_bill_to_site_id     => l_sto_site_id,  -- Parameter name is a misnomer,spec to be modified later
8592                 p_bill_to_party_id    => l_sto_party_id, -- Parameter name is a misnomer,spec to be modified later
8593                 p_site_use_type       => 'SHIP_TO',
8594                 x_site_use_id         => l_sto_site_use,
8595                 x_return_status       => lx_return_status
8596             );
8597             IF
8598                 (lx_return_status <> FND_API.G_RET_STS_SUCCESS)
8599             THEN
8600                 x_return_status := FND_API.G_RET_STS_ERROR;
8601                 RETURN;
8602             ELSE
8603                 x_cross_val_out_rec.ship_to_site_use_id := l_sto_site_use;
8604             END IF;
8605         END IF;
8606     END IF;
8607 --Bug 3702517 change ends
8608 -------------------------
8609 ---    Validate bill to site and site use
8610   IF ((l_bto_site_use <> FND_API.G_MISS_NUM AND
8611       l_bto_site_use IS NOT NULL))
8612   THEN
8613      IF (l_bto_party_id = FND_API.G_MISS_NUM OR
8614          l_bto_party_id IS NULL) THEN
8615                   fnd_message.set_name ('CS', 'CS_SR_PARENT_CHILD_CHECK');
8616                   fnd_message.set_token ('CHILD_PARAM','bill_to_site_use_id');
8617                   fnd_message.set_token ('PARENT_PARAM','bill_to_party_id');
8618                   fnd_msg_pub.ADD;
8619             x_return_status := FND_API.G_RET_STS_ERROR;
8620             RETURN;
8621      END IF;
8622   END IF;
8623    IF ((p_new_sr_rec.bill_to_party_id <> FND_API.G_MISS_NUM) AND
8624        (nvl(p_new_sr_rec.bill_to_party_id,-99) <>
8625 			       nvl(p_old_sr_rec.bill_to_party_id,-99)))
8626      OR
8627       ((p_new_sr_rec.bill_to_site_id <> FND_API.G_MISS_NUM) AND
8628        (nvl(p_new_sr_rec.bill_to_site_id,-99) <>
8629 			       nvl(p_old_sr_rec.bill_to_site_id,-99)))
8630      OR
8631       ((p_new_sr_rec.bill_to_site_use_id <> FND_API.G_MISS_NUM) AND
8632        (nvl(p_new_sr_rec.bill_to_site_use_id,-99) <>
8633 			       nvl(p_old_sr_rec.bill_to_site_use_id,-99)))
8634    THEN
8635       IF ( l_bto_site_use IS NOT NULL and l_bto_site_use <> FND_API.G_MISS_NUM AND
8636            l_bto_site_id  IS NOT NULL AND l_bto_site_id  <> FND_API.G_MISS_NUM) THEN
8637          -- this call is made when both site use and site id are available
8638          Validate_Site_Site_Use (
8639             p_api_name             => NULL,
8640             p_parameter_name       => 'bill_to_site_use_id',
8641             p_site_id              => l_bto_site_id,
8642             p_site_use_id          => l_bto_site_use,
8643             p_party_id             => l_bto_party_id,
8644             p_site_use_type        => 'BILL_TO',
8645             x_return_status        => lx_return_status );
8646 
8647          if (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8648             x_return_status := FND_API.G_RET_STS_ERROR;
8649             RETURN;
8650          end if;
8651       ELSIF ( ( l_bto_site_use <> FND_API.G_MISS_NUM AND l_bto_site_use IS NOT NULL )  AND
8652               ( l_bto_site_id IS NULL  OR l_bto_site_id = FND_API.G_MISS_NUM )
8653             ) THEN
8654             -- this call is made when site use is availabel but site id is not available
8655             CS_ServiceRequest_UTIL.Validate_Bill_Ship_Site_Use
8656             ( p_api_name            => null,
8657               -- p_parameter_name      => 'Ship_To Site Use ', /* Modified during 3702517 fix */
8658                  p_parameter_name      => 'BILL TO SITE USE',
8659               p_site_use_id         => l_bto_site_use,
8660               p_party_id            => l_bto_party_id,
8661               p_site_use_type       => 'BILL_TO',
8662               x_site_id             => l_bto_site_id,
8663               x_return_status       => lx_return_status
8664              );
8665            IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8666               x_return_status := FND_API.G_RET_STS_ERROR;
8667               RETURN;
8668            ELSE
8669               x_cross_val_out_rec.bill_to_site_id := l_bto_site_id;
8670            END IF;
8671       ELSIF ( ( l_bto_site_id <> FND_API.G_MISS_NUM AND l_bto_site_id IS NOT NULL )  AND
8672               ( l_bto_site_use IS NULL  OR l_bto_site_use = FND_API.G_MISS_NUM )
8673             ) THEN
8674             -- this call is made when site use is not available but site id is available
8675             CS_ServiceRequest_UTIL.Validate_Bill_To_Ship_To_Site
8676             ( p_api_name            => null,
8677               -- p_parameter_name      => 'Ship_To Site ', /* Modified during 3702517 fix */
8678               p_parameter_name      => 'SHIP TO SITE',
8679               p_bill_to_site_id     => l_bto_site_id,
8680               p_bill_to_party_id    => l_bto_party_id,
8681               p_site_use_type       => 'BILL_TO',
8682               x_site_use_id         => l_bto_site_use,
8683               x_return_status       => lx_return_status
8684             );
8685             IF (lx_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8686               x_return_status := FND_API.G_RET_STS_ERROR;
8687               RETURN;
8688             ELSE
8689               x_cross_val_out_rec.bill_to_site_use_id := l_bto_site_use;
8690             END IF;
8691       END IF;
8692    END IF;  -- validate bill to site and site use end if
8693 
8694 
8695    /* For bug 3340433 - assigning the proper values to the out rec */
8696    x_cross_val_out_rec.inventory_item_id   := l_inv_item_id;
8697 
8698 
8699 
8700    /*
8701    x_cross_val_out_rec.bill_to_site_use_id := l_bto_site_use;
8702    x_cross_val_out_rec.ship_to_site_use_id :=
8703    x_cross_val_out_rec.bill_to_site_id     := l_bto_site_id;
8704    x_cross_val_out_rec.ship_to_site_id     :=
8705    x_cross_val_out_rec.contract_id         := l_contract_id;
8706    x_cross_val_out_rec.contract_number     := l_con_number;
8707 */
8708 
8709 
8710 EXCEPTION
8711    WHEN OTHERS THEN
8712       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8713 
8714       FND_MESSAGE.SET_NAME ('CS', 'CS_API_SR_UNKNOWN_ERROR');
8715       FND_MESSAGE.SET_TOKEN ('P_TEXT',l_api_name_full||'-'||SQLERRM);
8716       FND_MSG_PUB.ADD;
8717 
8718 END SERVICEREQUEST_CROSS_VAL;
8719 
8720 
8721 
8722 -- -----------------------------------------------------------------------------
8723 -- Modification History
8724 -- Date     Name     Desc
8725 -- -------- -------- -----------------------------------------------------------
8726 -- 05/12/05 smisra   removed item_serial_number from select statement. This col
8727 --                   is obsolete from release 12.
8728 -- -----------------------------------------------------------------------------
8729 PROCEDURE Prepare_Audit_Record (
8730        p_api_version            IN  VARCHAR2,
8731        p_request_id             IN  NUMBER,
8732        x_return_status          OUT  NOCOPY VARCHAR2,
8733        x_msg_count              OUT  NOCOPY NUMBER,
8734        x_msg_data               OUT  NOCOPY VARCHAR2,
8735        x_audit_vals_rec         OUT  NOCOPY  CS_ServiceRequest_PVT.SR_AUDIT_REC_TYPE) IS
8736 
8737 CURSOR L_SERVICEREQUEST_CSR IS
8738      SELECT
8739                 INCIDENT_STATUS_ID              INCIDENT_STATUS_ID  ,
8740                 INCIDENT_STATUS_ID              OLD_INCIDENT_STATUS_ID     ,
8741                 'N'                             CHANGE_INCIDENT_STATUS_FLAG    ,
8742                 INCIDENT_TYPE_ID                INCIDENT_TYPE_ID ,
8743                 INCIDENT_TYPE_ID                OLD_INCIDENT_TYPE_ID,
8744                 'N'                             CHANGE_INCIDENT_TYPE_FLAG ,
8745                 INCIDENT_URGENCY_ID             INCIDENT_URGENCY_ID ,
8746                 INCIDENT_URGENCY_ID             OLD_INCIDENT_URGENCY_ID    ,
8747                 'N'                             CHANGE_INCIDENT_URGENCY_FLAG   ,
8748                 INCIDENT_SEVERITY_ID            INCIDENT_SEVERITY_ID,
8749                 INCIDENT_SEVERITY_ID            OLD_INCIDENT_SEVERITY_ID   ,
8750                 'N'                             CHANGE_INCIDENT_SEVERITY_FLAG  ,
8751                 TO_NUMBER(NULL)                 RESPONSIBLE_GROUP_ID,
8752                 TO_NUMBER(NULL)                 OLD_RESPONSIBLE_GROUP_ID   ,
8753                 'N'                             CHANGE_RESPONSIBLE_GROUP_FLAG  ,
8754                 INCIDENT_OWNER_ID               INCIDENT_OWNER_ID,
8755                 INCIDENT_OWNER_ID               OLD_INCIDENT_OWNER_ID      ,
8756                 'N'                             CHANGE_INCIDENT_OWNER_FLAG,
8757                 'N'                             CREATE_MANUAL_ACTION      ,
8758                 to_number(null)                 ACTION_ID ,
8759                 EXPECTED_RESOLUTION_DATE        EXPECTED_RESOLUTION_DATE   ,
8760                 EXPECTED_RESOLUTION_DATE        OLD_EXPECTED_RESOLUTION_DATE    ,
8761                 'N'                             CHANGE_RESOLUTION_FLAG     ,
8762                 'N'                             NEW_WORKFLOW_FLAG,
8763                 TO_CHAR(NULL)                   WORKFLOW_PROCESS_NAME     ,
8764                 TO_CHAR(NULL)                   WORKFLOW_PROCESS_ITEMKEY  ,
8765                 OWNER_GROUP_ID                  GROUP_ID  ,
8766                 OWNER_GROUP_ID                  OLD_GROUP_ID     ,
8767                 'N'                             CHANGE_GROUP_FLAG,
8768                 OBLIGATION_DATE                 OBLIGATION_DATE  ,
8769                 OBLIGATION_DATE                 OLD_OBLIGATION_DATE ,
8770                 'N'                             CHANGE_OBLIGATION_FLAG     ,
8771                 SITE_ID                         SITE_ID   ,
8772                 SITE_ID                         OLD_SITE_ID      ,
8773                 'N'                             CHANGE_SITE_FLAG,
8774                 BILL_TO_CONTACT_ID              BILL_TO_CONTACT_ID  ,
8775                 BILL_TO_CONTACT_ID              OLD_BILL_TO_CONTACT_ID     ,
8776                 'N'                             CHANGE_BILL_TO_FLAG,
8777                 SHIP_TO_CONTACT_ID              SHIP_TO_CONTACT_ID  ,
8778                 SHIP_TO_CONTACT_ID              OLD_SHIP_TO_CONTACT_ID     ,
8779                 'N'                             CHANGE_SHIP_TO_FLAG ,
8780                 INCIDENT_DATE                   INCIDENT_DATE   ,
8781                 INCIDENT_DATE                   OLD_INCIDENT_DATE,
8782                 'N'                             CHANGE_INCIDENT_DATE_FLAG  ,
8783                 CLOSE_DATE                      CLOSE_DATE      ,
8784                 CLOSE_DATE                      OLD_CLOSE_DATE   ,
8785                 'N'                             CHANGE_CLOSE_DATE_FLAG ,
8786                 CUSTOMER_PRODUCT_ID             CUSTOMER_PRODUCT_ID ,
8787                 CUSTOMER_PRODUCT_ID             OLD_CUSTOMER_PRODUCT_ID    ,
8788                 'N'                             CHANGE_CUSTOMER_PRODUCT_FLAG    ,
8789                 PLATFORM_ID                     PLATFORM_ID      ,
8790                 PLATFORM_ID                     OLD_PLATFORM_ID  ,
8791                 'N'                             CHANGE_PLATFORM_ID_FLAG    ,
8792                 PLATFORM_VERSION_ID             PLATFORM_VERSION_ID,
8793                 PLATFORM_VERSION_ID             OLD_PLATFORM_VERSION_ID    ,
8794                 'N'                             CHANGE_PLAT_VER_ID_FLAG    ,
8795                 CP_COMPONENT_ID                 CP_COMPONENT_ID  ,
8796                 CP_COMPONENT_ID                 OLD_CP_COMPONENT_ID ,
8797                 'N'                             CHANGE_CP_COMPONENT_ID_FLAG,
8798                 CP_COMPONENT_VERSION_ID         CP_COMPONENT_VERSION_ID    ,
8799                 CP_COMPONENT_VERSION_ID         OLD_CP_COMPONENT_VERSION_ID,
8800                 'N'                             CHANGE_CP_COMP_VER_ID_FLAG ,
8801                 CP_SUBCOMPONENT_ID              CP_SUBCOMPONENT_ID  ,
8802                 CP_SUBCOMPONENT_ID              OLD_CP_SUBCOMPONENT_ID     ,
8803                 'N'                             CHANGE_CP_SUBCOMPONENT_ID_FLAG  ,
8804                 CP_SUBCOMPONENT_VERSION_ID      CP_SUBCOMPONENT_VERSION_ID ,
8805                 CP_SUBCOMPONENT_VERSION_ID      OLD_CP_SUBCOMPONENT_VERSION_ID  ,
8806                 'N'                             CHANGE_CP_SUBCOMP_VER_ID_FLAG   ,
8807                 LANGUAGE_ID                     LANGUAGE_ID      ,
8808                 LANGUAGE_ID                     OLD_LANGUAGE_ID  ,
8809                 'N'                             CHANGE_LANGUAGE_ID_FLAG    ,
8810                 TERRITORY_ID                    TERRITORY_ID   ,
8811                 TERRITORY_ID                    OLD_TERRITORY_ID ,
8812                 'N'                             CHANGE_TERRITORY_ID_FLAG   ,
8813                 CP_REVISION_ID                  CP_REVISION_ID   ,
8814                 CP_REVISION_ID                  OLD_CP_REVISION_ID  ,
8815                 'N'                             CHANGE_CP_REVISION_ID_FLAG ,
8816                 INV_ITEM_REVISION               INV_ITEM_REVISION  ,
8817                 INV_ITEM_REVISION               OLD_INV_ITEM_REVISION      ,
8818                 'N'                             CHANGE_INV_ITEM_REVISION   ,
8819                 INV_COMPONENT_ID                INV_COMPONENT_ID ,
8820                 INV_COMPONENT_ID                OLD_INV_COMPONENT_ID,
8821                 'N'                             CHANGE_INV_COMPONENT_ID    ,
8822                 INV_COMPONENT_VERSION           INV_COMPONENT_VERSION      ,
8823                 INV_COMPONENT_VERSION           OLD_INV_COMPONENT_VERSION  ,
8824                 'N'                             CHANGE_INV_COMPONENT_VERSION    ,
8825                 INV_SUBCOMPONENT_ID             INV_SUBCOMPONENT_ID,
8826                 INV_SUBCOMPONENT_ID             OLD_INV_SUBCOMPONENT_ID    ,
8827                 'N'                             CHANGE_INV_SUBCOMPONENT_ID ,
8828                 INV_SUBCOMPONENT_VERSION        INV_SUBCOMPONENT_VERSION   ,
8829                 INV_SUBCOMPONENT_VERSION        OLD_INV_SUBCOMPONENT_VERSION    ,
8830                 'N'                             CHANGE_INV_SUBCOMP_VERSION ,
8831                 RESOURCE_TYPE                   RESOURCE_TYPE  ,
8832                 RESOURCE_TYPE                   OLD_RESOURCE_TYPE,
8833                 'N'                             CHANGE_RESOURCE_TYPE_FLAG  ,
8834                 SECURITY_GROUP_ID               SECURITY_GROUP_ID  ,
8835                 'N'                             UPGRADED_STATUS_FLAG,
8836                 GROUP_TYPE                      OLD_GROUP_TYPE   ,
8837                 GROUP_TYPE                      GROUP_TYPE     ,
8838                 'N'                             CHANGE_GROUP_TYPE_FLAG     ,
8839                 OWNER_ASSIGNED_TIME             OLD_OWNER_ASSIGNED_TIME    ,
8840                 OWNER_ASSIGNED_TIME             OWNER_ASSIGNED_TIME ,
8841                 'N'                             CHANGE_ASSIGNED_TIME_FLAG  ,
8842                 INV_PLATFORM_ORG_ID             INV_PLATFORM_ORG_ID,
8843                 INV_PLATFORM_ORG_ID             OLD_INV_PLATFORM_ORG_ID    ,
8844                 'N'                             CHANGE_PLATFORM_ORG_ID_FLAG,
8845                 COMPONENT_VERSION               COMPONENT_VERSION  ,
8846                 COMPONENT_VERSION               OLD_COMPONENT_VERSION      ,
8847                 'N'                             CHANGE_COMP_VER_FLAG,
8848                 SUBCOMPONENT_VERSION            SUBCOMPONENT_VERSION   ,
8849                 SUBCOMPONENT_VERSION            OLD_SUBCOMPONENT_VERSION   ,
8850                 'N'                             CHANGE_SUBCOMP_VER_FLAG    ,
8851                 PRODUCT_REVISION                PRODUCT_REVISION ,
8852                 PRODUCT_REVISION                OLD_PRODUCT_REVISION,
8853                 'N'                             CHANGE_PRODUCT_REVISION_FLAG    ,
8854                 STATUS_FLAG                     STATUS_FLAG      ,
8855                 STATUS_FLAG                     OLD_STATUS_FLAG  ,
8856                 'N'                             CHANGE_STATUS_FLAG  ,
8857                 INVENTORY_ITEM_ID               INVENTORY_ITEM_ID  ,
8858                 INVENTORY_ITEM_ID               OLD_INVENTORY_ITEM_ID     ,
8859                 'N'                             CHANGE_INVENTORY_ITEM_FLAG,
8860                 INV_ORGANIZATION_ID             INV_ORGANIZATION_ID      ,
8861                 INV_ORGANIZATION_ID             OLD_INV_ORGANIZATION_ID   ,
8862                 'N'                             CHANGE_INV_ORGANIZATION_FLAG   ,
8863                 PRIMARY_CONTACT_ID              PRIMARY_CONTACT_ID ,
8864                 'N'                             CHANGE_PRIMARY_CONTACT_FLAG    ,
8865                 PRIMARY_CONTACT_ID              OLD_PRIMARY_CONTACT_ID        ,
8866                 TO_CHAR(null)                   UPGRADE_FLAG_FOR_CREATE,
8867                 INCIDENT_NUMBER                 OLD_INCIDENT_NUMBER,
8868                 INCIDENT_NUMBER                 INCIDENT_NUMBER,
8869                 CUSTOMER_ID                     OLD_CUSTOMER_ID   ,
8870                 CUSTOMER_ID                     CUSTOMER_ID      ,
8871                 BILL_TO_SITE_USE_ID             OLD_BILL_TO_SITE_USE_ID,
8872                 BILL_TO_SITE_USE_ID             BILL_TO_SITE_USE_ID,
8873                 EMPLOYEE_ID                     OLD_EMPLOYEE_ID,
8874                 EMPLOYEE_ID                     EMPLOYEE_ID,
8875                 SHIP_TO_SITE_USE_ID             OLD_SHIP_TO_SITE_USE_ID,
8876                 SHIP_TO_SITE_USE_ID             SHIP_TO_SITE_USE_ID,
8877                 PROBLEM_CODE                    OLD_PROBLEM_CODE,
8878                 PROBLEM_CODE                    PROBLEM_CODE,
8879                 ACTUAL_RESOLUTION_DATE          OLD_ACTUAL_RESOLUTION_DATE,
8880                 ACTUAL_RESOLUTION_DATE          ACTUAL_RESOLUTION_DATE,
8881                 INSTALL_SITE_USE_ID             OLD_INSTALL_SITE_USE_ID,
8882                 INSTALL_SITE_USE_ID             INSTALL_SITE_USE_ID,
8883                 CURRENT_SERIAL_NUMBER           OLD_CURRENT_SERIAL_NUMBER,
8884                 CURRENT_SERIAL_NUMBER           CURRENT_SERIAL_NUMBER,
8885                 SYSTEM_ID                       OLD_SYSTEM_ID,
8886                 SYSTEM_ID                       SYSTEM_ID,
8887                 INCIDENT_ATTRIBUTE_1            OLD_INCIDENT_ATTRIBUTE_1,
8888                 INCIDENT_ATTRIBUTE_1            INCIDENT_ATTRIBUTE_1,
8889                 INCIDENT_ATTRIBUTE_2            OLD_INCIDENT_ATTRIBUTE_2 ,
8890                 INCIDENT_ATTRIBUTE_2            INCIDENT_ATTRIBUTE_2,
8891                 INCIDENT_ATTRIBUTE_3            OLD_INCIDENT_ATTRIBUTE_3,
8892                 INCIDENT_ATTRIBUTE_3            INCIDENT_ATTRIBUTE_3,
8893                 INCIDENT_ATTRIBUTE_4            OLD_INCIDENT_ATTRIBUTE_4,
8894                 INCIDENT_ATTRIBUTE_4            INCIDENT_ATTRIBUTE_4,
8895                 INCIDENT_ATTRIBUTE_5            OLD_INCIDENT_ATTRIBUTE_5,
8896                 INCIDENT_ATTRIBUTE_5            INCIDENT_ATTRIBUTE_5,
8897                 INCIDENT_ATTRIBUTE_6            OLD_INCIDENT_ATTRIBUTE_6,
8898                 INCIDENT_ATTRIBUTE_6            INCIDENT_ATTRIBUTE_6,
8899                 INCIDENT_ATTRIBUTE_7            OLD_INCIDENT_ATTRIBUTE_7,
8900                 INCIDENT_ATTRIBUTE_7            INCIDENT_ATTRIBUTE_7,
8901                 INCIDENT_ATTRIBUTE_8            OLD_INCIDENT_ATTRIBUTE_8,
8902                 INCIDENT_ATTRIBUTE_8            INCIDENT_ATTRIBUTE_8,
8903                 INCIDENT_ATTRIBUTE_9            OLD_INCIDENT_ATTRIBUTE_9,
8904                 INCIDENT_ATTRIBUTE_9            INCIDENT_ATTRIBUTE_9,
8905                 INCIDENT_ATTRIBUTE_10            OLD_INCIDENT_ATTRIBUTE_10,
8906                 INCIDENT_ATTRIBUTE_10            INCIDENT_ATTRIBUTE_10,
8907                 INCIDENT_ATTRIBUTE_11            OLD_INCIDENT_ATTRIBUTE_11,
8908                 INCIDENT_ATTRIBUTE_11            INCIDENT_ATTRIBUTE_11,
8909                 INCIDENT_ATTRIBUTE_12            OLD_INCIDENT_ATTRIBUTE_12,
8910                 INCIDENT_ATTRIBUTE_12            INCIDENT_ATTRIBUTE_12,
8911                 INCIDENT_ATTRIBUTE_13            OLD_INCIDENT_ATTRIBUTE_13,
8912                 INCIDENT_ATTRIBUTE_13            INCIDENT_ATTRIBUTE_13,
8913                 INCIDENT_ATTRIBUTE_14            OLD_INCIDENT_ATTRIBUTE_14,
8914                 INCIDENT_ATTRIBUTE_14            INCIDENT_ATTRIBUTE_14,
8915                 INCIDENT_ATTRIBUTE_15            OLD_INCIDENT_ATTRIBUTE_15,
8916                 INCIDENT_ATTRIBUTE_15            INCIDENT_ATTRIBUTE_15,
8917                 INCIDENT_CONTEXT                 OLD_INCIDENT_CONTEXT,
8918                 INCIDENT_CONTEXT                INCIDENT_CONTEXT,
8919                 RESOLUTION_CODE                 OLD_RESOLUTION_CODE,
8920                 RESOLUTION_CODE                 RESOLUTION_CODE,
8921                 ORIGINAL_ORDER_NUMBER           OLD_ORIGINAL_ORDER_NUMBER,
8922                 ORIGINAL_ORDER_NUMBER           ORIGINAL_ORDER_NUMBER,
8923                 ORG_ID                          OLD_ORG_ID,
8924                 ORG_ID                          ORG_ID,
8925                 PURCHASE_ORDER_NUM              OLD_PURCHASE_ORDER_NUMBER,
8926                 PURCHASE_ORDER_NUM              PURCHASE_ORDER_NUMBER,
8927                 PUBLISH_FLAG                    OLD_PUBLISH_FLAG,
8928                 PUBLISH_FLAG                    PUBLISH_FLAG,
8929                 QA_COLLECTION_ID                OLD_QA_COLLECTION_ID,
8930                 QA_COLLECTION_ID                QA_COLLECTION_ID,
8931                 CONTRACT_ID                     OLD_CONTRACT_ID,
8932                 CONTRACT_ID                     CONTRACT_ID,
8933                 CONTRACT_NUMBER                 OLD_CONTRACT_NUMBER,
8934                 CONTRACT_NUMBER                 CONTRACT_NUMBER,
8935                 CONTRACT_SERVICE_ID             OLD_CONTRACT_SERVICE_ID,
8936                 CONTRACT_SERVICE_ID             CONTRACT_SERVICE_ID,
8937                 TIME_ZONE_ID                    OLD_TIME_ZONE_ID,
8938                 TIME_ZONE_ID                    TIME_ZONE_ID,
8939                 ACCOUNT_ID                      OLD_ACCOUNT_ID,
8940                 ACCOUNT_ID                      ACCOUNT_ID,
8941                 TIME_DIFFERENCE                 OLD_TIME_DIFFERENCE,
8942                 TIME_DIFFERENCE                 TIME_DIFFERENCE,
8943                 CUSTOMER_PO_NUMBER              OLD_CUSTOMER_PO_NUMBER,
8944                 CUSTOMER_PO_NUMBER              CUSTOMER_PO_NUMBER,
8945                 CUSTOMER_TICKET_NUMBER          OLD_CUSTOMER_TICKET_NUMBER,
8946                 CUSTOMER_TICKET_NUMBER          CUSTOMER_TICKET_NUMBER,
8947                 CUSTOMER_SITE_ID                OLD_CUSTOMER_SITE_ID,
8948                 CUSTOMER_SITE_ID                CUSTOMER_SITE_ID,
8949                 CALLER_TYPE                     OLD_CALLER_TYPE,
8950                 CALLER_TYPE                     CALLER_TYPE,
8951                 SECURITY_GROUP_ID               OLD_SECURITY_GROUP_ID,
8952                 ORIG_SYSTEM_REFERENCE           OLD_ORIG_SYSTEM_REFERENCE,
8953                 ORIG_SYSTEM_REFERENCE           ORIG_SYSTEM_REFERENCE,
8954                 ORIG_SYSTEM_REFERENCE_ID        OLD_ORIG_SYSTEM_REFERENCE_ID,
8955                 ORIG_SYSTEM_REFERENCE_ID        ORIG_SYSTEM_REFERENCE_ID,
8956                 REQUEST_ID                      REQUEST_ID,
8957                 PROGRAM_APPLICATION_ID          PROGRAM_APPLICATION_ID,
8958                 PROGRAM_ID                      PROGRAM_ID,
8959                 PROGRAM_UPDATE_DATE             PROGRAM_UPDATE_DATE,
8960                 PROJECT_NUMBER                  OLD_PROJECT_NUMBER,
8961                 PROJECT_NUMBER                  PROJECT_NUMBER,
8962                 PLATFORM_VERSION                OLD_PLATFORM_VERSION,
8963                 PLATFORM_VERSION                PLATFORM_VERSION,
8964                 DB_VERSION                      OLD_DB_VERSION,
8965                 DB_VERSION                      DB_VERSION,
8966                 CUST_PREF_LANG_ID               OLD_CUST_PREF_LANG_ID,
8967                 CUST_PREF_LANG_ID               CUST_PREF_LANG_ID,
8968                 TIER                            OLD_TIER,
8969                 TIER                            TIER,
8970                 CATEGORY_ID                     OLD_CATEGORY_ID,
8971                 CATEGORY_ID                     CATEGORY_ID,
8972                 OPERATING_SYSTEM                OLD_OPERATING_SYSTEM,
8973                 OPERATING_SYSTEM                OPERATING_SYSTEM,
8974                 OPERATING_SYSTEM_VERSION        OLD_OPERATING_SYSTEM_VERSION,
8975                 OPERATING_SYSTEM_VERSION        OPERATING_SYSTEM_VERSION,
8976                 DATABASE                        OLD_DATABASE ,
8977                 DATABASE                        DATABASE,
8978                 GROUP_TERRITORY_ID              OLD_GROUP_TERRITORY_ID,
8979                 GROUP_TERRITORY_ID              GROUP_TERRITORY_ID,
8980                 COMM_PREF_CODE                  OLD_COMM_PREF_CODE,
8981                 COMM_PREF_CODE                  COMM_PREF_CODE,
8982                 LAST_UPDATE_CHANNEL             OLD_LAST_UPDATE_CHANNEL,
8983                 LAST_UPDATE_CHANNEL             LAST_UPDATE_CHANNEL,
8984                 CUST_PREF_LANG_CODE             OLD_CUST_PREF_LANG_CODE,
8985                 CUST_PREF_LANG_CODE              CUST_PREF_LANG_CODE,
8986                 ERROR_CODE                      OLD_ERROR_CODE,
8987                 ERROR_CODE                      ERROR_CODE,
8988                 CATEGORY_SET_ID                 OLD_CATEGORY_SET_ID,
8989                 CATEGORY_SET_ID                 CATEGORY_SET_ID,
8990                 EXTERNAL_REFERENCE              OLD_EXTERNAL_REFERENCE,
8991                 EXTERNAL_REFERENCE              EXTERNAL_REFERENCE,
8992                 INCIDENT_OCCURRED_DATE          OLD_INCIDENT_OCCURRED_DATE,
8993                 INCIDENT_OCCURRED_DATE          INCIDENT_OCCURRED_DATE,
8994                 INCIDENT_RESOLVED_DATE          OLD_INCIDENT_RESOLVED_DATE,
8995                 INCIDENT_RESOLVED_DATE          INCIDENT_RESOLVED_DATE,
8996                 INC_RESPONDED_BY_DATE           OLD_INC_RESPONDED_BY_DATE,
8997                 INC_RESPONDED_BY_DATE           INC_RESPONDED_BY_DATE,
8998                 INCIDENT_LOCATION_ID            OLD_INCIDENT_LOCATION_ID ,
8999                 INCIDENT_LOCATION_ID            INCIDENT_LOCATION_ID,
9000                 INCIDENT_ADDRESS                OLD_INCIDENT_ADDRESS,
9001                 INCIDENT_ADDRESS                INCIDENT_ADDRESS,
9002                 INCIDENT_CITY                   OLD_INCIDENT_CITY,
9003                 INCIDENT_CITY                   INCIDENT_CITY,
9004                 INCIDENT_STATE                  OLD_INCIDENT_STATE,
9005                 INCIDENT_STATE                  INCIDENT_STATE,
9006                 INCIDENT_COUNTRY                OLD_INCIDENT_COUNTRY,
9007                 INCIDENT_COUNTRY                INCIDENT_COUNTRY,
9008                 INCIDENT_PROVINCE               OLD_INCIDENT_PROVINCE,
9009                 INCIDENT_PROVINCE               INCIDENT_PROVINCE,
9010                 INCIDENT_POSTAL_CODE            OLD_INCIDENT_POSTAL_CODE,
9011                 INCIDENT_POSTAL_CODE            INCIDENT_POSTAL_CODE,
9012                 INCIDENT_COUNTY                 OLD_INCIDENT_COUNTY,
9013                 INCIDENT_COUNTY                 INCIDENT_COUNTY,
9014                 SR_CREATION_CHANNEL             OLD_SR_CREATION_CHANNEL,
9015                 SR_CREATION_CHANNEL             SR_CREATION_CHANNEL,
9016                 DEF_DEFECT_ID                   OLD_DEF_DEFECT_ID,
9017                 DEF_DEFECT_ID                   DEF_DEFECT_ID,
9018                 DEF_DEFECT_ID2                  OLD_DEF_DEFECT_ID2,
9019                 DEF_DEFECT_ID2                  DEF_DEFECT_ID2,
9020                 EXTERNAL_ATTRIBUTE_1            OLD_EXTERNAL_ATTRIBUTE_1,
9021                 EXTERNAL_ATTRIBUTE_1            EXTERNAL_ATTRIBUTE_1,
9022                 EXTERNAL_ATTRIBUTE_2            OLD_EXTERNAL_ATTRIBUTE_2,
9023                 EXTERNAL_ATTRIBUTE_2            EXTERNAL_ATTRIBUTE_2,
9024                 EXTERNAL_ATTRIBUTE_3            OLD_EXTERNAL_ATTRIBUTE_3,
9025                 EXTERNAL_ATTRIBUTE_3            EXTERNAL_ATTRIBUTE_3,
9026                 EXTERNAL_ATTRIBUTE_4            OLD_EXTERNAL_ATTRIBUTE_4,
9027                 EXTERNAL_ATTRIBUTE_4            EXTERNAL_ATTRIBUTE_4,
9028                 EXTERNAL_ATTRIBUTE_5            OLD_EXTERNAL_ATTRIBUTE_5,
9029                 EXTERNAL_ATTRIBUTE_5            EXTERNAL_ATTRIBUTE_5,
9030                 EXTERNAL_ATTRIBUTE_6            OLD_EXTERNAL_ATTRIBUTE_6,
9031                 EXTERNAL_ATTRIBUTE_6            EXTERNAL_ATTRIBUTE_6,
9032                 EXTERNAL_ATTRIBUTE_7            OLD_EXTERNAL_ATTRIBUTE_7,
9033                 EXTERNAL_ATTRIBUTE_7            EXTERNAL_ATTRIBUTE_7,
9034                 EXTERNAL_ATTRIBUTE_8            OLD_EXTERNAL_ATTRIBUTE_8,
9035                 EXTERNAL_ATTRIBUTE_8            EXTERNAL_ATTRIBUTE_8,
9036                 EXTERNAL_ATTRIBUTE_9            OLD_EXTERNAL_ATTRIBUTE_9,
9037                 EXTERNAL_ATTRIBUTE_9            EXTERNAL_ATTRIBUTE_9,
9038                 EXTERNAL_ATTRIBUTE_10            OLD_EXTERNAL_ATTRIBUTE_10,
9039                 EXTERNAL_ATTRIBUTE_10            EXTERNAL_ATTRIBUTE_10,
9040                 EXTERNAL_ATTRIBUTE_11            OLD_EXTERNAL_ATTRIBUTE_11,
9041                 EXTERNAL_ATTRIBUTE_11            EXTERNAL_ATTRIBUTE_11,
9042                 EXTERNAL_ATTRIBUTE_12            OLD_EXTERNAL_ATTRIBUTE_12,
9043                 EXTERNAL_ATTRIBUTE_12            EXTERNAL_ATTRIBUTE_12,
9044                 EXTERNAL_ATTRIBUTE_13            OLD_EXTERNAL_ATTRIBUTE_13,
9045                 EXTERNAL_ATTRIBUTE_13            EXTERNAL_ATTRIBUTE_13,
9046                 EXTERNAL_ATTRIBUTE_14            OLD_EXTERNAL_ATTRIBUTE_14,
9047                 EXTERNAL_ATTRIBUTE_14            EXTERNAL_ATTRIBUTE_14,
9048                 EXTERNAL_ATTRIBUTE_15            OLD_EXTERNAL_ATTRIBUTE_15,
9049                 EXTERNAL_ATTRIBUTE_15            EXTERNAL_ATTRIBUTE_15,
9050                 EXTERNAL_CONTEXT                 OLD_EXTERNAL_CONTEXT,
9051                 EXTERNAL_CONTEXT                 EXTERNAL_CONTEXT,
9052                 LAST_UPDATE_PROGRAM_CODE         OLD_LAST_UPDATE_PROGRAM_CODE,
9053                 LAST_UPDATE_PROGRAM_CODE         LAST_UPDATE_PROGRAM_CODE,
9054                 CREATION_PROGRAM_CODE            OLD_CREATION_PROGRAM_CODE,
9055                 CREATION_PROGRAM_CODE            CREATION_PROGRAM_CODE,
9056                 COVERAGE_TYPE                    OLD_COVERAGE_TYPE,
9057                 COVERAGE_TYPE                    COVERAGE_TYPE,
9058                 BILL_TO_ACCOUNT_ID               OLD_BILL_TO_ACCOUNT_ID,
9059                 BILL_TO_ACCOUNT_ID               BILL_TO_ACCOUNT_ID,
9060                 SHIP_TO_ACCOUNT_ID               OLD_SHIP_TO_ACCOUNT_ID,
9061                 SHIP_TO_ACCOUNT_ID               SHIP_TO_ACCOUNT_ID,
9062                 CUSTOMER_EMAIL_ID                OLD_CUSTOMER_EMAIL_ID,
9063                 CUSTOMER_EMAIL_ID                CUSTOMER_EMAIL_ID,
9064                 CUSTOMER_PHONE_ID                OLD_CUSTOMER_PHONE_ID,
9065                 CUSTOMER_PHONE_ID                CUSTOMER_PHONE_ID,
9066                 BILL_TO_PARTY_ID                 OLD_BILL_TO_PARTY_ID,
9067                 BILL_TO_PARTY_ID                 BILL_TO_PARTY_ID,
9068                 SHIP_TO_PARTY_ID                 OLD_SHIP_TO_PARTY_ID,
9069                 SHIP_TO_PARTY_ID                 SHIP_TO_PARTY_ID,
9070                 BILL_TO_SITE_ID                  OLD_BILL_TO_SITE_ID,
9071                 BILL_TO_SITE_ID                  BILL_TO_SITE_ID,
9072                 SHIP_TO_SITE_ID                  OLD_SHIP_TO_SITE_ID ,
9073                 SHIP_TO_SITE_ID                  SHIP_TO_SITE_ID,
9074                 PROGRAM_LOGIN_ID                 OLD_PROGRAM_LOGIN_ID,
9075                 PROGRAM_LOGIN_ID                 PROGRAM_LOGIN_ID,
9076                 INCIDENT_POINT_OF_INTEREST       OLD_INCIDENT_POINT_OF_INTEREST,
9077                 INCIDENT_POINT_OF_INTEREST       INCIDENT_POINT_OF_INTEREST,
9078                 INCIDENT_CROSS_STREET            OLD_INCIDENT_CROSS_STREET,
9079                 INCIDENT_CROSS_STREET            INCIDENT_CROSS_STREET,
9080                 INCIDENT_DIRECTION_QUALIFIER     OLD_INCIDENT_DIRECTION_QUALIF,
9081                 INCIDENT_DIRECTION_QUALIFIER     INCIDENT_DIRECTION_QUALIF,
9082                 INCIDENT_DISTANCE_QUALIFIER      OLD_INCIDENT_DISTANCE_QUALIF,
9083                 INCIDENT_DISTANCE_QUALIFIER      INCIDENT_DISTANCE_QUALIF,
9084                 INCIDENT_DISTANCE_QUAL_UOM       OLD_INCIDENT_DISTANCE_QUAL_UOM,
9085                 INCIDENT_DISTANCE_QUAL_UOM       INCIDENT_DISTANCE_QUAL_UOM,
9086                 INCIDENT_ADDRESS2                OLD_INCIDENT_ADDRESS2,
9087                 INCIDENT_ADDRESS2                INCIDENT_ADDRESS2,
9088                 INCIDENT_ADDRESS3                OLD_INCIDENT_ADDRESS3,
9089                 INCIDENT_ADDRESS3                INCIDENT_ADDRESS3,
9090                 INCIDENT_ADDRESS4                OLD_INCIDENT_ADDRESS4,
9091                 INCIDENT_ADDRESS4                INCIDENT_ADDRESS4,
9092                 INCIDENT_ADDRESS_STYLE           OLD_INCIDENT_ADDRESS_STYLE,
9093                 INCIDENT_ADDRESS_STYLE           INCIDENT_ADDRESS_STYLE,
9094                 INCIDENT_ADDR_LINES_PHONETIC     OLD_INCIDENT_ADDR_LNS_PHONETIC,
9095                 INCIDENT_ADDR_LINES_PHONETIC     INCIDENT_ADDR_LNS_PHONETIC,
9096                 INCIDENT_PO_BOX_NUMBER           OLD_INCIDENT_PO_BOX_NUMBER,
9097                 INCIDENT_PO_BOX_NUMBER           INCIDENT_PO_BOX_NUMBER,
9098                 INCIDENT_HOUSE_NUMBER            OLD_INCIDENT_HOUSE_NUMBER,
9099                 INCIDENT_HOUSE_NUMBER            INCIDENT_HOUSE_NUMBER,
9100                 INCIDENT_STREET_SUFFIX           OLD_INCIDENT_STREET_SUFFIX,
9101                 INCIDENT_STREET_SUFFIX           INCIDENT_STREET_SUFFIX,
9102                 INCIDENT_STREET                  OLD_INCIDENT_STREET,
9103                 INCIDENT_STREET                  INCIDENT_STREET,
9104                 INCIDENT_STREET_NUMBER           OLD_INCIDENT_STREET_NUMBER,
9105                 INCIDENT_STREET_NUMBER           INCIDENT_STREET_NUMBER,
9106                 INCIDENT_FLOOR                   OLD_INCIDENT_FLOOR,
9107                 INCIDENT_FLOOR                   INCIDENT_FLOOR,
9108                 INCIDENT_SUITE                   OLD_INCIDENT_SUITE,
9109                 INCIDENT_SUITE                   INCIDENT_SUITE,
9110                 INCIDENT_POSTAL_PLUS4_CODE       OLD_INCIDENT_POSTAL_PLUS4_CODE,
9111                 INCIDENT_POSTAL_PLUS4_CODE       INCIDENT_POSTAL_PLUS4_CODE,
9112                 INCIDENT_POSITION                OLD_INCIDENT_POSITION,
9113                 INCIDENT_POSITION                INCIDENT_POSITION,
9114                 INCIDENT_LOCATION_DIRECTIONS     OLD_INCIDENT_LOC_DIRECTIONS,
9115                 INCIDENT_LOCATION_DIRECTIONS     INCIDENT_LOC_DIRECTIONS,
9116                 INCIDENT_LOCATION_DESCRIPTION    OLD_INCIDENT_LOC_DESCRIPTION,
9117                 INCIDENT_LOCATION_DESCRIPTION    INCIDENT_LOC_DESCRIPTION,
9118                 INSTALL_SITE_ID                  OLD_INSTALL_SITE_ID,
9119                 INSTALL_SITE_ID                  INSTALL_SITE_ID,
9120                 INCIDENT_LAST_MODIFIED_DATE      INCIDENT_LAST_MODIFIED_DATE,
9121                 TO_CHAR(null)                    UPDATED_ENTITY_CODE,
9122                 TO_NUMBER(null)                  UPDATED_ENTITY_ID,
9123                 TO_CHAR(null)                    ENTITY_ACTIVITY_CODE,
9124                 TIER_VERSION                     OLD_TIER_VERSION,
9125                 TIER_VERSION                     TIER_VERSION,
9126                 OBJECT_VERSION_NUMBER            OLD_INC_OBJECT_VERSION_NUMBER ,
9127                 OBJECT_VERSION_NUMBER            INC_OBJECT_VERSION_NUMBER,
9128                 REQUEST_ID                       OLD_INC_REQUEST_ID,
9129                 REQUEST_ID                       INC_REQUEST_ID,
9130                 PROGRAM_APPLICATION_ID           OLD_INC_PROGRAM_APPLICATION_ID,
9131                 PROGRAM_APPLICATION_ID           INC_PROGRAM_APPLICATION_ID,
9132                 PROGRAM_ID                       OLD_INC_PROGRAM_ID,
9133                 PROGRAM_ID                       INC_PROGRAM_ID,
9134                 PROGRAM_UPDATE_DATE              OLD_INC_PROGRAM_UPDATE_DATE,
9135                 PROGRAM_UPDATE_DATE              INC_PROGRAM_UPDATE_DATE,
9136                 OWNING_DEPARTMENT_ID             OLD_OWNING_DEPARTMENT_ID ,
9137                 OWNING_DEPARTMENT_ID             OWNING_DEPARTMENT_ID,
9138                 INCIDENT_LOCATION_TYPE           OLD_INCIDENT_LOCATION_TYPE,
9139                 INCIDENT_LOCATION_TYPE           INCIDENT_LOCATION_TYPE,
9140                 UNASSIGNED_INDICATOR             OLD_UNASSIGNED_INDICATOR,
9141                 UNASSIGNED_INDICATOR             UNASSIGNED_INDICATOR,
9142 		MAINT_ORGANIZATION_ID            OLD_MAINT_ORGANIZATION_ID,
9143 		MAINT_ORGANIZATION_ID            MAINT_ORGANIZATION_ID
9144          FROM   cs_incidents_all_b
9145         WHERE  incident_id = p_request_id;
9146 
9147     l_audit_vals_rec    CS_ServiceRequest_PVT.SR_AUDIT_REC_TYPE;
9148     l_api_name          CONSTANT VARCHAR2(30) := 'Prepare_Audit_Record';
9149     l_api_version       CONSTANT NUMBER       := 1.0;
9150 
9151   BEGIN
9152 
9153     -- Initialize return status to SUCCESS
9154     x_return_status := FND_API.G_RET_STS_SUCCESS;
9155 
9156    OPEN  l_ServiceRequest_csr;
9157   FETCH l_ServiceRequest_csr INTO x_audit_vals_rec;
9158 
9159   IF ( l_ServiceRequest_csr%NOTFOUND ) THEN
9160 
9161      CS_ServiceRequest_UTIL.Add_Invalid_Argument_Msg
9162                                ( p_token_an    =>  l_api_name,
9163                                  p_token_v     =>  TO_CHAR(p_request_id),
9164                                  p_token_p     =>  'p_request_id',
9165                                  p_table_name  =>  'CS_INCIDENTS_ALL_B',
9166                                  p_column_name => 'REQUEST_ID' );
9167      CLOSE l_ServiceRequest_csr;
9168   ELSE
9169      CLOSE l_ServiceRequest_csr;
9170   END IF;
9171 
9172 
9173  END Prepare_Audit_Record;
9174 --
9175 -- -------------------------------------------------------------------
9176 -- Validate_Desc_Flex
9177 -- -------------------------------------------------------------------
9178 
9179 PROCEDURE Validate_Desc_Flex
9180 ( p_api_name			IN	VARCHAR2,
9181   p_application_short_name	IN	VARCHAR2,
9182   p_desc_flex_name		IN	VARCHAR2,
9183   p_desc_segment1		IN	VARCHAR2,
9184   p_desc_segment2		IN	VARCHAR2,
9185   p_desc_segment3		IN	VARCHAR2,
9186   p_desc_segment4		IN	VARCHAR2,
9187   p_desc_segment5		IN	VARCHAR2,
9188   p_desc_segment6		IN	VARCHAR2,
9189   p_desc_segment7		IN	VARCHAR2,
9190   p_desc_segment8		IN	VARCHAR2,
9191   p_desc_segment9		IN	VARCHAR2,
9192   p_desc_segment10		IN	VARCHAR2,
9193   p_desc_segment11		IN	VARCHAR2,
9194   p_desc_segment12		IN	VARCHAR2,
9195   p_desc_segment13		IN	VARCHAR2,
9196   p_desc_segment14		IN	VARCHAR2,
9197   p_desc_segment15		IN	VARCHAR2,
9198   p_desc_context		IN	VARCHAR2,
9199   p_resp_appl_id		IN	NUMBER		:= NULL,
9200   p_resp_id			IN	NUMBER		:= NULL,
9201   p_return_status		OUT	NOCOPY VARCHAR2
9202 )
9203 IS
9204   l_error_message	VARCHAR2(2000);
9205 BEGIN
9206   -- Initialize API return status to success
9207   p_return_status := FND_API.G_RET_STS_SUCCESS;
9208 
9209 
9210   IF ( p_desc_context   || p_desc_segment1  || p_desc_segment2  ||
9211        p_desc_segment3  || p_desc_segment4  || p_desc_segment5  ||
9212        p_desc_segment6  || p_desc_segment7  || p_desc_segment8  ||
9213        p_desc_segment9  || p_desc_segment10 || p_desc_segment11 ||
9214        p_desc_segment12 || p_desc_segment13 || p_desc_segment14 ||
9215        p_desc_segment15
9216      ) IS NOT NULL THEN
9217 
9218     FND_FLEX_DESCVAL.Set_Context_Value(p_desc_context);
9219 
9220     FND_FLEX_DESCVAL.Set_Column_Value('INCIDENT_ATTRIBUTE_1', p_desc_segment1);
9221     FND_FLEX_DESCVAL.Set_Column_Value('INCIDENT_ATTRIBUTE_2', p_desc_segment2);
9222     FND_FLEX_DESCVAL.Set_Column_Value('INCIDENT_ATTRIBUTE_3', p_desc_segment3);
9223     FND_FLEX_DESCVAL.Set_Column_Value('INCIDENT_ATTRIBUTE_4', p_desc_segment4);
9224     FND_FLEX_DESCVAL.Set_Column_Value('INCIDENT_ATTRIBUTE_5', p_desc_segment5);
9225     FND_FLEX_DESCVAL.Set_Column_Value('INCIDENT_ATTRIBUTE_6', p_desc_segment6);
9226     FND_FLEX_DESCVAL.Set_Column_Value('INCIDENT_ATTRIBUTE_7', p_desc_segment7);
9227     FND_FLEX_DESCVAL.Set_Column_Value('INCIDENT_ATTRIBUTE_8', p_desc_segment8);
9228     FND_FLEX_DESCVAL.Set_Column_Value('INCIDENT_ATTRIBUTE_9', p_desc_segment9);
9229     FND_FLEX_DESCVAL.Set_Column_Value('INCIDENT_ATTRIBUTE_10', p_desc_segment10);
9230     FND_FLEX_DESCVAL.Set_Column_Value('INCIDENT_ATTRIBUTE_11', p_desc_segment11);
9231     FND_FLEX_DESCVAL.Set_Column_Value('INCIDENT_ATTRIBUTE_12', p_desc_segment12);
9232     FND_FLEX_DESCVAL.Set_Column_Value('INCIDENT_ATTRIBUTE_13', p_desc_segment13);
9233     FND_FLEX_DESCVAL.Set_Column_Value('INCIDENT_ATTRIBUTE_14', p_desc_segment14);
9234     FND_FLEX_DESCVAL.Set_Column_Value('INCIDENT_ATTRIBUTE_15', p_desc_segment15);
9235 
9236     IF NOT FND_FLEX_DESCVAL.Validate_Desccols
9237              ( appl_short_name => p_application_short_name,
9238                desc_flex_name  => p_desc_flex_name,
9239                resp_appl_id    => p_resp_appl_id,
9240                resp_id         => p_resp_id
9241              ) THEN
9242       l_error_message := FND_FLEX_DESCVAL.Error_Message;
9243       CS_ServiceRequest_UTIL.Add_Desc_Flex_Msg(p_api_name, l_error_message);
9244       p_return_status := FND_API.G_RET_STS_ERROR;
9245     END IF;
9246   END IF;
9247 
9248 END Validate_Desc_Flex;
9249 -- -----------------------------------------------------------------------------
9250 -- Procedure Name : validate_party_role_code
9251 -- Parameter      :
9252 -- IN             : p_party_role_code    This is a foreign key to table
9253 --                                       cs_pary_roles_b
9254 --                : x_return_status      Indicates success or error condition
9255 --                                       encountered by the procedure
9256 -- Description    : This procedure checks whether party role code exist in
9257 --                  party role table and is active on system date or not.
9258 -- Modification History
9259 -- Date     Name     Description
9260 ---------- -------- ------------------------------------------------------------
9261 -- 04/21/05 smisra   Created
9262 -- 05/12/05 smisra   Changed the database column names
9263 --                   effective_[start|end]_date to [start|end]_date_active
9264 -- -----------------------------------------------------------------------------
9265 PROCEDURE validate_party_role_code
9266 ( p_party_role_code IN         VARCHAR2
9267 , x_return_status   OUT NOCOPY VARCHAR2
9268 ) IS
9269 l_start_dt DATE;
9270 l_end_dt   DATE;
9271 l_sys_dt   DATE;
9272 CURSOR c_party_role IS
9273   SELECT
9274     NVL(start_date_active, SYSDATE-1)
9275   , NVL(end_date_active  , SYSDATE+1)
9276   FROM
9277     cs_party_roles_b
9278   WHERE party_role_code = p_party_role_code;
9279 BEGIN
9280   x_return_status := FND_API.G_RET_STS_SUCCESS;
9281   l_sys_dt := SYSDATE;
9282   IF p_party_role_code <> 'CONTACT'
9283   THEN
9284     OPEN  c_party_role;
9285     FETCH c_party_role INTO l_start_dt, l_end_dt;
9286 
9287     IF c_party_role % NOTFOUND
9288     THEN
9289       x_return_status := FND_API.G_RET_STS_ERROR;
9290       FND_MESSAGE.set_name('CS','CS_SR_PARTY_ROLE_NE');
9291       FND_MESSAGE.set_token('API_NAME','cs_servicerequest_util.validate_party_role_code');
9292       FND_MESSAGE.set_token('PARTY_ROLE_CODE',p_party_role_code);
9293       FND_MSG_PUB.add_detail(p_associated_column1 => 'cs_hz_sr_contact_points.party_role_code');
9294       --FND_MSG_PUB.ADD_DETAIL(p_associated_column1 => l_associated_col1);
9295     ELSIF l_sys_dt < NVL(l_start_dt, l_sys_dt) OR
9296           l_sys_dt > NVL(l_end_dt  , l_sys_dt)
9297     THEN
9298       x_return_status := FND_API.G_RET_STS_ERROR;
9299       FND_MESSAGE.set_name('CS','CS_SR_PARTYROLE_INACTIVE');
9300       FND_MESSAGE.set_token('API_NAME','cs_servicerequest_util.validate_party_role_code');
9301       FND_MESSAGE.set_token('PARTY_ROLE_CODE',p_party_role_code);
9302       FND_MSG_PUB.add_detail(p_associated_column1 => 'cs_hz_sr_contact_points.party_role_code');
9303     END IF;
9304     CLOSE c_party_role;
9305   END IF;
9306 --
9307 EXCEPTION
9308   WHEN OTHERS THEN
9309     IF c_party_role%ISOPEN
9310     THEN
9311       CLOSE c_party_role;
9312     END IF;
9313     FND_MESSAGE.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
9314     FND_MESSAGE.set_token('P_TEXT','CS_SERVICEREQUEST_UTIL.validate_party_role_code'||'-'||SQLERRM);
9315     FND_MSG_PUB.ADD;
9316     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9317 END validate_party_role_code;
9318 -- -----------------------------------------------------------------------------
9319 -- Procedure Name : validate_org_id
9320 -- Parameter      :
9321 -- IN             : p_org_id        This is a foreign key to table
9322 --                                  hr_all_organization_units
9323 --                : x_return_status Indicates success or error condition
9324 --                                  encountered by the procedure
9325 -- Description    : This procedure checks whether org id exist in
9326 --                  hr organization table and is active on system date or not.
9327 -- Modification History
9328 -- Date     Name     Description
9329 ---------- -------- ------------------------------------------------------------
9330 -- 04/21/05 smisra   Created
9331 -- 08/15/05 smisra   Changed the table name from hr_all_organization_units to
9332 --                   hr_operating_units
9333 -- 8/25/05 smisra    truncated local variable l_sys_dt because table
9334 --                   hr_operating_units does not store time component.
9335 -- -----------------------------------------------------------------------------
9336 PROCEDURE validate_org_id
9337 ( p_org_id NUMBER
9338 , x_return_status OUT NOCOPY VARCHAR2
9339 ) IS
9340 l_dt_from  DATE;
9341 l_dt_to    DATE;
9342 l_sys_dt   DATE;
9343 BEGIN
9344   x_return_status := FND_API.G_RET_STS_SUCCESS;
9345   l_sys_dt := TRUNC(SYSDATE);
9346   SELECT
9347     date_from
9348   , date_to
9349   INTO
9350     l_dt_from
9351   , l_dt_to
9352   FROM
9353     hr_operating_units
9354   WHERE organization_id = p_org_id;
9355   IF l_sys_dt < NVL(l_dt_from, l_sys_dt) OR
9356      l_sys_dt > NVL(l_dt_to  , l_sys_dt)
9357   THEN
9358     FND_MESSAGE.set_name ('CS', 'CS_SR_ORG_ID_INACTIVE');
9359     FND_MESSAGE.set_token ('API_NAME', 'CS_SERVICEREQUEST_UTIL.validate_org_id');
9360     FND_MESSAGE.set_token ('ORG_ID', p_org_id);
9361     FND_MSG_PUB.ADD;
9362     x_return_status := FND_API.G_RET_STS_ERROR;
9363   END IF;
9364 EXCEPTION
9365   WHEN NO_DATA_FOUND THEN
9366     x_return_status := FND_API.G_RET_STS_ERROR;
9367     Add_Invalid_Argument_Msg
9368     ( p_token_an    => 'cs_servicerequest_util.validate_org_id'
9369     , p_token_v     => TO_CHAR(p_org_id)
9370     , p_token_p     => 'p_org_id'
9371     , p_table_name  => G_TABLE_NAME
9372     , p_column_name => 'ORG_ID'
9373     );
9374    WHEN OTHERS THEN
9375      fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
9376      fnd_message.set_token ('P_TEXT','cs_servicerequest_util.validate_org_id'||'-'||SQLERRM);
9377      fnd_msg_pub.ADD;
9378      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9379 END validate_org_id;
9380 -- -----------------------------------------------------------------------------
9381 -- Procedure Name : validate_maint_organization_id
9382 -- Parameter      :
9383 -- IN             : p_maint_organization_id maintenance organization
9384 --                : p_inventory_org_id      Inventory organization id
9385 --                : p_inv_org_master_org_flag
9386 --                                          Indicates if inv org is a master Org
9387 -- OUT            : x_return_stauts         indicates if validation failed or
9388 --                                          succeeded
9389 -- Description    : This procedure check if maint org exists in mtl paramters
9390 --                  table, it is EAM enable. If inventory org is passed then
9391 --                  it should be same as master organization associated with
9392 --                  maintenance organization.
9393 -- Modification History
9394 -- Date     Name     Description
9395 ----------- -------- -----------------------------------------------------------
9396 -- 05/05/05 smisra   Created
9397 -- 08/03/05 smisra   Add param p_inv_org_master_org_flag
9398 --                   if p_inv_org_master_org_flag is 'Y' then master org for
9399 --                   maint_organization should be same as inv org
9400 -- -----------------------------------------------------------------------------
9401 PROCEDURE validate_maint_organization_id
9402 ( p_maint_organization_id   IN         NUMBER
9403 , p_inventory_org_id        IN         NUMBER
9404 , p_inv_org_master_org_flag IN         VARCHAR2
9405 , x_return_status           OUT NOCOPY VARCHAR2
9406 ) IS
9407 l_eam_enabled   mtl_parameters.eam_enabled_flag       % TYPE;
9408 l_maint_org_id  mtl_parameters.maint_organization_id  % TYPE;
9409 l_master_org_id mtl_parameters.master_organization_id % TYPE;
9410 l_api_name_full VARCHAR2(61);
9411 l_col           VARCHAR2(61);
9412 BEGIN
9413   l_api_name_full := G_PKG_NAME || '.validate_maint_organization_id';
9414   l_col := G_TABLE_NAME || '.MAINT_ORGANIZATION_ID';
9415   x_return_status := FND_API.G_RET_STS_SUCCESS;
9416   IF p_inv_org_master_org_flag = 'N' -- means inv org is not a master org
9417   THEN
9418     get_org_details
9419     ( p_org_id           => p_inventory_org_id
9420     , x_eam_enabled_flag => l_eam_enabled
9421     , x_maint_org_id     => l_maint_org_id
9422     , x_master_org_id    => l_master_org_id
9423     , x_return_Status    => x_return_status
9424     );
9425     IF x_return_status <> FND_API.G_RET_STS_SUCCESS
9426     THEN
9427       Add_Invalid_Argument_Msg
9428       ( p_token_an    => l_api_name_full
9429       , p_token_v     => to_char(p_inventory_org_id)
9430       , p_token_p     => 'p_inventory_org_id'
9431       , p_table_name  => G_TABLE_NAME
9432       , p_column_name => 'INVENTORY_ORG_ID'
9433       );
9434     ELSIF NVL(l_maint_org_id,-99) <> p_maint_organization_id
9435     THEN
9436       x_return_status := FND_API.G_RET_STS_ERROR;
9437       FND_MESSAGE.set_name  ('CS'      , 'CS_SR_INV_ORG_NOT_MAINT_BY');
9438       FND_MESSAGE.set_token ('API_NAME', l_api_name_full);
9439       FND_MESSAGE.set_token ('MAINT_ORG_ID'   , TO_CHAR(p_maint_organization_id));
9440       FND_MESSAGE.set_token ('INV_ORG_ID'   , TO_CHAR(p_inventory_org_id));
9441       FND_MSG_PUB.add_detail(p_associated_column1 => l_col);
9442     END IF;
9443   ELSE -- inv org is a master org or inv org is not passed
9444     get_org_details
9445     ( p_org_id           => p_maint_organization_id
9446     , x_eam_enabled_flag => l_eam_enabled
9447     , x_maint_org_id     => l_maint_org_id
9448     , x_master_org_id    => l_master_org_id
9449     , x_return_Status    => x_return_status
9450     );
9451     IF x_return_status <> FND_API.G_RET_STS_SUCCESS
9452     THEN
9453       Add_Invalid_Argument_Msg
9454       ( p_token_an    => l_api_name_full
9455       , p_token_v     => to_char(p_maint_organization_id)
9456       , p_token_p     => 'p_maint_organization_id'
9457       , p_table_name  => G_TABLE_NAME
9458       , p_column_name => 'MAINT_ORGANIZATION_ID'
9459       );
9460     ELSIF l_eam_enabled <> 'Y'
9461     THEN
9462       x_return_status := FND_API.G_RET_STS_ERROR;
9463       FND_MESSAGE.set_name  ('CS'      , 'CS_SR_MAINT_ORG_NON_EAM');
9464       FND_MESSAGE.set_token ('API_NAME', l_api_name_full);
9465       FND_MESSAGE.set_token ('MAINT_ORG_ID', TO_CHAR(p_maint_organization_id));
9466       FND_MSG_PUB.add_detail(p_associated_column1 => l_col);
9467     ELSIF p_inventory_org_id IS NOT NULL AND
9468           p_inventory_org_id <> FND_API.G_MISS_NUM AND
9469           p_inventory_org_id <> l_master_org_id
9470     THEN
9471       x_return_status := FND_API.G_RET_STS_ERROR;
9472       FND_MESSAGE.set_name  ('CS'        , 'CS_SR_MAINT_INV_ORG_MISMATCH');
9473       FND_MESSAGE.set_token ('API_NAME'  , l_api_name_full);
9474       FND_MESSAGE.set_token ('MAINT_ORG_ID' , TO_CHAR(p_maint_organization_id));
9475       FND_MSG_PUB.add_detail(p_associated_column1 => l_col);
9476     END IF;
9477   END IF;
9478 
9479 END validate_maint_organization_id;
9480 -- -----------------------------------------------------------------------------
9481 -- Procedure Name : validate_customer_product_id
9482 -- Parameter      :
9483 -- IN             : p_customer_product_id   This foreign key to
9484 --                                          csi_item_instances table.
9485 --                : p_customer_id           Service Request customer
9486 --                : p_inventory_org_id      Inventory organization id
9487 --                : p_maint_organization_id maintenance organization
9488 --                : p_inv_org_master_org_flag
9489 --                                          Indicates if inv org is a master Org
9490 -- OUT            : x_inventory_item_id     Inventory item associated with
9491 --                                          customer product
9492 --                : x_return_stauts         indicates if validation failed or
9493 --                                          succeeded
9494 -- Description    : This procedure performs following checks
9495 --                  1. customer product should exist in csi_item_instances table
9496 --                  2. service request customer should be related to customer
9497 --                      product
9498 --                  3. Inventory item associated with customer product should
9499 --                     3.1 enabled
9500 --                     3.2 Service Request enabled
9501 --                  4. If maintenance organization is passed then validation org
9502 --                     associated with customer product should be same as
9503 --                     maint org or should be maintained by maintenance org
9504 --                  5. if profile 'CS_SR_RESTRICT_IB is 'YES' then customer
9505 --                     should be installed at a HZ_PARTY_SITE or HZ_LOCATION
9506 -- Modification History
9507 -- Date     Name     Description
9508 ----------- -------- -----------------------------------------------------------
9509 -- 05/06/05 smisra   Created
9510 -- 08/03/05 smisra   Add param p_inv_org_master_org_flag
9511 -- 08/29/05 smisra   Corrected message codes and tokens
9512 -- 10/27/05 smisra   Correct token name for message CS_SR_LVD_ORG_NOT_MAINT_BY
9513 --                   removed variable l_return_Status as it is not used
9514 --                   replaced hard coded procedure name in set token calls with
9515 --                   a variable to avoid spelling differences
9516 -- -----------------------------------------------------------------------------
9517 PROCEDURE validate_customer_product_id
9518 ( p_customer_product_id     IN            NUMBER
9519 , p_customer_id             IN            NUMBER
9520 , p_inventory_org_id        IN            NUMBER
9521 , p_maint_organization_id   IN            NUMBER
9522 , p_inv_org_master_org_flag IN            VARCHAR2
9523 , p_inventory_item_id       IN OUT NOCOPY NUMBER
9524 , x_return_status              OUT NOCOPY VARCHAR2
9525 ) IS
9526 --
9527 CURSOR c_prod_rel IS
9528 SELECT 1
9529 FROM csi_i_parties
9530 WHERE instance_id        = p_customer_product_id
9531   AND party_id           = p_customer_id
9532   AND party_source_table = 'HZ_PARTIES';
9533 
9534 l_party_id          csi_i_parties.party_id                      % TYPE;
9535 l_source_table      csi_item_instances.owner_party_source_table % TYPE;
9536 l_loc_type          csi_item_instances.location_type_code       % TYPE;
9537 l_external_ref      csi_item_instances.external_reference        % TYPE;
9538 l_serial_number     csi_item_instances.serial_number            % TYPE;
9539 l_inv_org_id        mtl_parameters.organization_id              % TYPE;
9540 l_maint_org_id      mtl_parameters.organization_id              % TYPE;
9541 l_master_org_id     mtl_parameters.organization_id              % TYPE;
9542 l_eam_enabled_flag  mtl_parameters.eam_enabled_flag             % TYPE;
9543 l_eam_type          mtl_system_items_b.eam_item_type            % TYPE;
9544 l_inv_item_id       mtl_system_items_b.inventory_item_id        % TYPE;
9545 l_enabled_flag      mtl_system_items_b.enabled_flag             % TYPE;
9546 l_last_vld_org_id   mtl_system_items_b.inventory_item_id        % TYPE;
9547 l_serv_req_enabled  mtl_system_items_b.serv_req_enabled_code    % TYPE;
9548 l_sys_dt            DATE;
9549 l_end_dt            DATE;
9550 l_start_dt          DATE;
9551 l_dummy             NUMBER;
9552 l_proc_name         VARCHAR2(61);
9553 BEGIN
9554   l_sys_dt    := SYSDATE;
9555   l_proc_name := 'CS_SERVICEREQUEST_UTIL.validate_customer_product_id';
9556   get_customer_product_details
9557   ( p_customer_product_id   => p_customer_product_id
9558   , x_party_source_table    => l_source_table
9559   , x_party_id              => l_party_id
9560   , x_inv_master_org_id     => l_inv_org_id
9561   , x_inv_item_id           => l_inv_item_id
9562   , x_maint_org_id          => l_last_vld_org_id
9563   , x_external_reference    => l_external_ref
9564   , x_serial_number         => l_serial_number
9565   , x_start_dt_active       => l_start_dt
9566   , x_end_dt_active         => l_end_dt
9567   , x_loc_type              => l_loc_type
9568   , x_return_status         => x_return_status
9569   );
9570   IF x_return_status <> FND_API.G_RET_STS_SUCCESS
9571   THEN
9572     RAISE NO_DATA_FOUND;
9573   END IF;
9574   --
9575   IF l_sys_dt < NVL(l_start_dt, l_sys_dt) OR
9576      l_sys_dt > NVL(l_end_dt  , l_sys_dt)
9577   THEN
9578     FND_MESSAGE.set_name('CS','CS_SR_CP_INACTIVE');
9579     FND_MESSAGE.set_token('CP_ID',TO_CHAR(p_customer_product_id));
9580     FND_MESSAGE.set_token('API_NAME'  , l_proc_name);
9581     FND_MSG_PUB.add_detail(p_associated_column1=> 'CS_INCIDENTS_ALL_B.CUSTOMER_PRODUCT_ID');
9582     RAISE FND_API.G_EXC_ERROR;
9583   END IF;
9584   --
9585   IF CS_SERVICEREQUEST_PVT.g_restrict_ib = 'YES' AND
9586      l_loc_type NOT IN ('HZ_PARTY_SITES', 'HZ_LOCATIONS')
9587   THEN
9588     FND_MESSAGE.set_name('CS','CS_SR_CP_LOCATION_INVALID'); -- Customer porduct installed location is invalid
9589     FND_MESSAGE.set_token('LOC',l_loc_type);
9590     FND_MESSAGE.set_token('CP_ID',TO_CHAR(p_customer_product_id));
9591     FND_MESSAGE.set_token('API_NAME'  , l_proc_name);
9592     FND_MSG_PUB.add_detail(p_associated_column1=> 'CS_INCIDENTS_ALL_B.CUSTOMER_PRODUCT_ID');
9593     RAISE FND_API.G_EXC_ERROR;
9594   END IF;
9595   --
9596   IF NVL(l_source_table,'#') <> 'HZ_PARTIES'
9597   THEN
9598     FND_MESSAGE.set_name('CS','CS_SR_CP_CUST_SOURCE_INVALID'); -- product is not for TCA parties
9599     FND_MESSAGE.set_token('PARTY_SOURCE',l_source_table);
9600     FND_MESSAGE.set_token('CP_ID',TO_CHAR(p_customer_product_id));
9601     FND_MSG_PUB.add_detail(p_associated_column1=> 'CS_INCIDENTS_ALL_B.CUSTOMER_PRODUCT_ID');
9602     RAISE FND_API.G_EXC_ERROR;
9603   END IF;
9604   --
9605   IF p_customer_id <> NVL(l_party_id,-1)
9606   THEN
9607     OPEN c_prod_rel;
9608     FETCH c_prod_rel into l_dummy;
9609     IF c_prod_rel % NOTFOUND
9610     THEN
9611       FND_MESSAGE.set_name('CS','CS_SR_CP_CUST_INVALID'); -- cust not related to product
9612       FND_MESSAGE.set_token('CP_ID',TO_CHAR(p_customer_product_id));
9613       FND_MESSAGE.set_token('CUST_ID',TO_CHAR(p_customer_id));
9614       FND_MSG_PUB.add_detail(p_associated_column1=> 'CS_INCIDENTS_ALL_B.CUSTOMER_PRODUCT_ID');
9615       CLOSE c_prod_rel;
9616       RAISE FND_API.G_EXC_ERROR;
9617     ELSE
9618       CLOSE c_prod_rel;
9619     END IF;
9620   END IF;
9621   --
9622   -- if inventory item is passed and is same as inv item associated with
9623   -- customer product then no need to check various flags associated with in v item
9624   -- because these checks were already performed during inv item validation.
9625   IF l_inv_item_id <> NVL(p_inventory_item_id,-1)
9626   THEN
9627     -- get item_details
9628     get_item_details
9629     ( p_inventory_org_id  => p_inventory_org_id
9630     , p_inv_item_id       => l_inv_item_id
9631     , x_enabled_flag      => l_enabled_flag
9632     , x_serv_req_enabled  => l_serv_req_enabled
9633     , x_eam_item_type     => l_eam_type
9634     , x_start_date_active => l_start_dt
9635     , x_end_date_active   => l_end_dt
9636     , x_return_status     => x_return_status
9637     );
9638     IF x_return_status <> FND_API.G_RET_STS_SUCCESS
9639     THEN
9640       FND_MESSAGE.set_name('CS','CS_SR_CP_ITEM_ID'); -- item associated with CP does not exists
9641       FND_MESSAGE.set_token('CP_ID',TO_CHAR(p_customer_product_id));
9642       FND_MESSAGE.set_token('INV_ITEM_ID',TO_CHAR(l_inv_item_id));
9643       FND_MSG_PUB.add_detail(p_associated_column1=> 'CS_INCIDENTS_ALL_B.CUSTOMER_PRODUCT_ID');
9644       RAISE FND_API.G_EXC_ERROR;
9645     END IF;
9646     IF l_enabled_flag <> 'Y'
9647     THEN
9648       FND_MESSAGE.set_name('CS','CS_SR_CP_ITEM_DISABLED'); -- item associated with CP is not enabled
9649       FND_MESSAGE.set_token('CP_ID',TO_CHAR(p_customer_product_id));
9650       FND_MESSAGE.set_token('INV_ITEM_ID',TO_CHAR(l_inv_item_id));
9651       FND_MESSAGE.set_token('API_NAME'  , l_proc_name);
9652       FND_MSG_PUB.add_detail(p_associated_column1=> 'CS_INCIDENTS_ALL_B.CUSTOMER_PRODUCT_ID');
9653       RAISE FND_API.G_EXC_ERROR;
9654     END IF;
9655     IF l_serv_req_enabled <> 'E'
9656     THEN
9657       FND_MESSAGE.set_name('CS','CS_SR_CP_ITEM_NOT_SERV'); -- item associated with CP is not serviceable
9658       FND_MESSAGE.set_token('CP_ID',TO_CHAR(p_customer_product_id));
9659       FND_MESSAGE.set_token('INV',TO_CHAR(l_inv_item_id));
9660       FND_MESSAGE.set_token('API_NAME'  , l_proc_name);
9661       FND_MSG_PUB.add_detail(p_associated_column1=> 'CS_INCIDENTS_ALL_B.CUSTOMER_PRODUCT_ID');
9662       RAISE FND_API.G_EXC_ERROR;
9663     END IF;
9664     IF l_sys_dt < NVL(l_start_dt,l_sys_dt) OR
9665        l_sys_dt > NVL(l_end_dt  ,l_sys_dt)
9666     THEN
9667       FND_MESSAGE.set_name('CS','CS_SR_CP_ITEM_INACTIVE'); --Item associated with CP is inactive
9668       FND_MESSAGE.set_token('CP_ID',TO_CHAR(p_customer_product_id));
9669       FND_MESSAGE.set_token('INV_ITEM_ID',TO_CHAR(l_inv_item_id));
9670       FND_MSG_PUB.add_detail(p_associated_column1=> 'CS_INCIDENTS_ALL_B.CUSTOMER_PRODUCT_ID');
9671       RAISE FND_API.G_EXC_ERROR;
9672     END IF;
9673     -- All validations succeeded, so assign item for CP to p_inventory_item_id
9674     p_inventory_item_id := l_inv_item_id;
9675   END IF;
9676     -- Get org infor for last_vld_org
9677   IF p_maint_organization_id IS NOT NULL
9678   THEN
9679     get_org_details
9680     ( p_org_id           => l_last_vld_org_id
9681     , x_eam_enabled_flag => l_eam_enabled_flag
9682     , x_maint_org_id     => l_maint_org_id
9683     , x_master_org_id    => l_master_org_id
9684     , x_return_Status    => x_return_status
9685     );
9686     IF x_return_status <> FND_API.G_RET_STS_SUCCESS
9687     THEN
9688       FND_MESSAGE.set_name('CS','CS_SR_CP_LAST_VLD_ORG'); -- Last validation org does not exists
9689       FND_MESSAGE.set_token('CP_ID',TO_CHAR(p_customer_product_id));
9690       FND_MESSAGE.set_token('MAINT_ORG_ID',TO_CHAR(l_last_vld_org_id));
9691       FND_MSG_PUB.add_detail(p_associated_column1=> 'CS_INCIDENTS_ALL_B.CUSTOMER_PRODUCT_ID');
9692       RAISE FND_API.G_EXC_ERROR;
9693     END IF;
9694     /* last vlg org may not be eam enabled but it might be maintained bu maint org
9695        so no need for this check
9696     IF l_eam_enabled_flag <> 'Y'
9697     THEN
9698       FND_MESSAGE.set_name('CS','CS_SR_CP_MAINT_EAM'); -- Maintenance Organization is NOT Eam Enabled
9699       FND_MESSAGE.set_token('MAINT_ORG_ID',TO_CHAR(p_maint_organization_id));
9700       FND_MSG_PUB.add_detail(p_associated_column1=> 'CS_INCIDENTS_ALL_B.CUSTOMER_PRODUCT_ID');
9701       RAISE FND_API.G_EXC_ERROR;
9702     END IF;
9703      */
9704     IF l_maint_org_id <> p_maint_organization_id
9705     THEN
9706       FND_MESSAGE.set_name('CS','CS_SR_LVD_ORG_NOT_MAINT_BY'); -- CP is not maintained by Maintenance Organization
9707       FND_MESSAGE.set_token('API_NAME'  , l_proc_name);
9708       FND_MESSAGE.set_token('MAINT_ORG_ID',TO_CHAR(p_maint_organization_id));
9709       FND_MESSAGE.set_token('VAL_ORG_ID',TO_CHAR(l_maint_org_id));
9710       FND_MSG_PUB.add_detail(p_associated_column1=> 'CS_INCIDENTS_ALL_B.CUSTOMER_PRODUCT_ID');
9711       RAISE FND_API.G_EXC_ERROR;
9712     END IF;
9713     IF p_inv_org_master_org_flag = 'Y' AND
9714        l_master_org_id <> p_inventory_org_id
9715     THEN
9716       FND_MESSAGE.set_name('CS','CS_SR_VLD_INV_ORG_MISMATCH');
9717       FND_MESSAGE.set_token('VAL_ORG',TO_CHAR(l_maint_org_id));
9718       FND_MSG_PUB.add_detail(p_associated_column1=> 'CS_INCIDENTS_ALL_B.CUSTOMER_PRODUCT_ID');
9719       RAISE FND_API.G_EXC_ERROR;
9720     END IF;
9721   END IF; -- p_maint_organization check
9722 --
9723 EXCEPTION
9724   WHEN NO_DATA_FOUND THEN
9725     x_return_status := FND_API.G_RET_STS_ERROR;
9726     Add_Invalid_Argument_Msg
9727     ( p_token_an    => l_proc_name
9728     , p_token_v     => TO_CHAR(p_customer_product_id)
9729     , p_token_p     => 'customer_product_id'
9730     , p_table_name  => G_TABLE_NAME
9731     , p_column_name => 'CUSTOMER_PRODUCT_ID'
9732     );
9733   WHEN FND_API.G_EXC_ERROR  THEN
9734     x_return_status := FND_API.G_RET_STS_ERROR;
9735 END validate_customer_product_id;
9736 -- -----------------------------------------------------------------------------
9737 -- Procedure Name : get_reacted_resolved_dates
9738 -- Parameter      :
9739 -- IN             : p_incident_status_id         This foreign key to
9740 --                                               cs_incideent_statuses_b
9741 --                : p_old_incident_status_id     This foreign key to
9742 --                                               cs_incideent_statuses_b
9743 --                : p_old_incident_resolved_date old value of resolution date
9744 --                : p_old_inc_responded_by_date  old value of response date
9745 -- OUT            : x_incident_resolved_date     New value of resolution date
9746 --                : x_inc_responded_by_date      New value of response date
9747 --                : x_return_stauts              indicates if validation failed
9748 --                                               or succeeded
9749 -- Description    : This procedure defaults incident resolved and responded
9750 --                  dates based on old and new value of service request status
9751 -- Modification History
9752 -- Date     Name     Description
9753 -- -------- -------- -----------------------------------------------------------
9754 -- 06/28/05 smisra   Created
9755 -- -----------------------------------------------------------------------------
9756 PROCEDURE get_reacted_resolved_dates
9757 ( p_incident_status_id         IN            NUMBER
9758 , p_old_incident_status_id     IN            NUMBER
9759 , p_old_inc_responded_by_date  IN            DATE
9760 , p_old_incident_resolved_date IN            DATE
9761 , x_inc_responded_by_date      IN OUT NOCOPY DATE
9762 , x_incident_resolved_date     IN OUT NOCOPY DATE
9763 , x_return_status                 OUT NOCOPY VARCHAR2
9764 ) IS
9765 l_new_responded_flag   CS_INCIDENT_STATUSES_B.responded_flag % TYPE;
9766 l_old_responded_flag   CS_INCIDENT_STATUSES_B.responded_flag % TYPE;
9767 l_new_resolved_flag    CS_INCIDENT_STATUSES_B.resolved_flag  % TYPE;
9768 l_old_resolved_flag    CS_INCIDENT_STATUSES_B.resolved_flag  % TYPE;
9769 BEGIN
9770   -- Logic added for 11.5.10 enhancement : Usability changes
9771   x_return_status := FND_API.G_RET_STS_SUCCESS;
9772   SELECT
9773     responded_flag
9774   , resolved_flag
9775   INTO
9776     l_new_responded_flag
9777   , l_new_resolved_flag
9778   FROM  cs_incident_statuses_vl
9779   WHERE incident_status_id=p_incident_status_id ;
9780 
9781   SELECT
9782     responded_flag
9783   , resolved_flag
9784   INTO
9785     l_old_responded_flag
9786   , l_old_resolved_flag
9787   FROM  cs_incident_statuses_vl
9788   WHERE incident_status_id=p_old_incident_status_id ;
9789 
9790   IF((l_old_responded_flag <>'Y' OR l_old_responded_flag is NULL) AND
9791      (l_new_responded_flag='Y'))
9792   THEN
9793     IF(x_inc_responded_by_date is NULL )
9794     THEN
9795       IF (p_old_inc_responded_by_date is NULL )
9796       THEN
9797          x_inc_responded_by_date:=SYSDATE;
9798       ELSE
9799         x_inc_responded_by_date:=p_old_inc_responded_by_date;
9800       END IF;
9801     END IF;
9802   ELSIF((l_old_responded_flag ='Y') AND (l_new_responded_flag='Y'))
9803   THEN
9804     IF (x_inc_responded_by_date is NULL)
9805     THEN
9806       IF (p_old_inc_responded_by_date is NULL)
9807       THEN
9808         x_inc_responded_by_date:=SYSDATE;
9809       ELSE
9810         x_inc_responded_by_date:=p_old_inc_responded_by_date;
9811       END IF;
9812     END IF;
9813   ELSIF((l_old_responded_flag ='Y') AND (l_new_responded_flag <> 'Y' OR
9814          l_new_responded_flag is NULL))
9815     THEN
9816     IF (x_inc_responded_by_date is NULL)
9817     THEN
9818        x_inc_responded_by_date:=p_old_inc_responded_by_date;
9819     END IF;
9820   END IF;
9821 
9822   IF((l_old_resolved_flag <> 'Y' OR l_old_resolved_flag is NULL) AND
9823     (l_new_resolved_flag='Y'))
9824   THEN
9825     IF (x_incident_resolved_date is NULL) THEN
9826       IF (p_old_incident_resolved_date is NULL )THEN
9827         x_incident_resolved_date:=SYSDATE;
9828       ELSE
9829         x_incident_resolved_date:=p_old_incident_resolved_date;
9830       END IF;
9831     END IF;
9832   ELSIF ((l_old_resolved_flag='Y') AND
9833          (l_new_resolved_flag  <> 'Y' OR l_new_resolved_flag is NULL))
9834   THEN
9835     IF(x_incident_resolved_date is NULL AND
9836        p_old_incident_resolved_date is NOT NULL)
9837     THEN
9838         x_incident_resolved_date:=NULL;
9839     END IF;
9840   ELSIF((l_old_resolved_flag='Y') AND (l_new_resolved_flag ='Y' )) THEN
9841     IF(x_incident_resolved_date is NULL AND
9842        p_old_incident_resolved_date is NOT NULL) THEN
9843       x_incident_resolved_date:=p_old_incident_resolved_date;
9844     ELSIF (x_incident_resolved_date is NULL AND
9845            p_old_incident_resolved_date is NULL) THEN
9846       x_incident_resolved_date:=SYSDATE;
9847     END IF ;
9848   END IF;
9849 EXCEPTION
9850   WHEN OTHERS THEN
9851     FND_MESSAGE.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
9852     FND_MESSAGE.set_token
9853     ( 'P_TEXT'
9854     , 'CS_SERVICEREQUEST_UTIL.get_status_details'||'-'||SQLERRM
9855     );
9856     FND_MSG_PUB.ADD;
9857     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9858 END get_reacted_resolved_dates;
9859 -- -----------------------------------------------------------------------------
9860 -- Procedure Name : get_party_details
9861 -- Parameter      :
9862 -- IN             : p_party_id           This is a foreign key to table
9863 --                                       hz_parties
9864 -- OUT            : x_party_type         it is the party type associated with
9865 --                : x_status             represents active or inactive status
9866 --                                       of party_id
9867 --                                       party id
9868 --                : x_return_status      Indicates success or error condition
9869 --                                       encountered by the procedure
9870 -- Description    : This procedure returns party type for a given party id
9871 --                  if party id does not exist then it returns an error
9872 -- Modification History
9873 -- Date     Name     Description
9874 ---------- -------- ------------------------------------------------------------
9875 -- 08/04/05 smisra   Created
9876 ---------- -------- ------------------------------------------------------------
9877 PROCEDURE get_party_details
9878 ( p_party_id      IN            NUMBER
9879 , x_party_type       OUT NOCOPY VARCHAR2
9880 , x_status           OUT NOCOPY VARCHAR2
9881 , x_return_status    OUT NOCOPY VARCHAR2
9882 ) IS
9883 BEGIN
9884   -- Initialize Return Status to SUCCESS
9885   x_return_status := FND_API.G_RET_STS_SUCCESS;
9886 
9887   SELECT
9888     party_type
9889   , status
9890   INTO
9891     x_party_type
9892   , x_status
9893   FROM
9894      hz_parties a
9895   WHERE a.party_id = p_party_id;
9896 
9897 EXCEPTION
9898   WHEN NO_DATA_FOUND THEN
9899     x_return_status := FND_API.G_RET_STS_ERROR;
9900 
9901   WHEN OTHERS THEN
9902     fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
9903     fnd_message.set_token
9904     ( 'P_TEXT'
9905     , 'CS_SERVICEREQUEST_UTIL.get_party_detail:'||'-'||SQLERRM
9906     );
9907     fnd_msg_pub.ADD;
9908     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9909 
9910 END get_party_details;
9911 -- -----------------------------------------------------------------------------
9912 -- Procedure Name : update_task_address
9913 -- Parameter      :
9914 -- IN             : p_incident_id        This is a foreign key to table
9915 --                                       cs_incidents_all_b
9916 -- OUT            : p_location_type      This is location type of service
9917 --                                       request
9918 --                : p_location_id        This is incident location id of
9919 --                                       service request
9920 --                : x_return_status      Indicates success or error condition
9921 --                                       encountered by the procedure
9922 -- Description    : This procedure find all tasks for a service request and
9923 --                  updates location id or address id of tasks depending on
9924 --                  location type value of parameter location type.
9925 --                  if location type is HZ_LOCATION then task.address_id
9926 --                  is set to null, location id is set to parameter
9927 --                  p_location_id otherwise task location is is set to null and
9928 --                  task address id is set to parameter p_location id.
9929 -- Modification History
9930 -- Date     Name     Description
9931 ---------- -------- ------------------------------------------------------------
9932 -- 10/04/05 smisra   Created
9933 -- 10/06/05 smisra   modified query to get SR tasks so that rejected tasks too
9934 --                   get selected.
9935 -- 10/14/05 smisra   uncommented x_retrun_status setting
9936 ---------- -------- ------------------------------------------------------------
9937 PROCEDURE update_task_address
9938 ( p_incident_id   IN         NUMBER
9939 , p_location_type IN         VARCHAR2
9940 , p_location_id   IN         NUMBER
9941 , x_return_status OUT NOCOPY VARCHAR2
9942 ) IS
9943 --
9944 CURSOR c_tasks IS
9945  SELECT
9946    task.task_id
9947  , task.object_version_number
9948  , DECODE(typ.rule, 'DISPATCH', 'Y', 'N') fs_task
9949  FROM
9950    jtf_tasks_b          task
9951  , jtf_task_statuses_b  stat
9952  , jtf_task_types_b     typ
9953  WHERE source_object_type_code = 'SR'
9954    AND source_object_id        = p_incident_id
9955    AND stat.task_status_id     = task.task_status_id
9956    AND typ.task_type_id        = task.task_type_id
9957    AND NVL(stat.completed_flag, 'N') <> 'Y'
9958    AND NVL(stat.closed_flag   , 'N') <> 'Y'
9959    AND NVL(stat.cancelled_flag, 'N') <> 'Y'
9960  ;
9961 l_site_id     cs_incidents_all_b.incident_location_id % TYPE;
9962 l_location_id cs_incidents_all_b.incident_location_id % TYPE;
9963 l_msg_count   NUMBER;
9964 l_msg_data    VARCHAR2(4000);
9965 --
9966 BEGIN
9967   x_return_status := FND_API.G_RET_STS_SUCCESS;
9968   --
9969   FOR task_rec in c_tasks LOOP
9970     -- set address variables
9971     IF p_location_type = 'HZ_LOCATION'
9972     THEN
9973       l_location_id := p_location_id;
9974       l_site_id     := NULL;
9975     ELSE
9976       l_location_id := NULL;
9977       l_site_id     := p_location_id;
9978     END IF;
9979     --
9980     IF task_rec.fs_task = 'Y'
9981     THEN
9982       IF p_location_id IS NULL
9983       THEN
9984         FND_MESSAGE.set_name ('CS', 'CS_SR_OPEN_FS_TASKS');
9985         FND_MESSAGE.set_token
9986         ( 'API_NAME'
9987         , 'CS_SERVICEREQUEST_UTIL.update_task_address'
9988         );
9989         FND_MSG_PUB.ADD_DETAIL
9990         ( p_associated_column1 => 'CS_INCIDENTS_ALL_B.incident_location_id'
9991         );
9992         RAISE FND_API.G_EXC_ERROR;
9993       END IF;
9994     END IF;
9995     --
9996     -- Call task update APIs
9997     --
9998     IF task_rec.fs_task = 'Y'
9999     THEN
10000       CSF_TASKS_PUB.update_task
10001       ( p_api_version           => 1.0
10002       , p_task_id               => task_rec.task_id
10003       , p_object_version_number => task_rec.object_version_number
10004       , p_location_id           => l_location_id
10005       , p_address_id            => l_site_id
10006       , x_return_status         => x_return_status
10007       , x_msg_count             => l_msg_count
10008       , x_msg_data              => l_msg_data
10009       );
10010     ELSE
10011       JTF_TASKS_PUB.update_task
10012       ( p_api_version           => 1.0
10013       , p_task_id               => task_rec.task_id
10014       , p_object_version_number => task_rec.object_version_number
10015       , p_location_id           => l_location_id
10016       , p_address_id            => l_site_id
10017       , p_enable_workflow       => FND_API.G_MISS_CHAR
10018       , p_abort_workflow        => FND_API.G_MISS_CHAR
10019       , p_task_split_flag       => FND_API.G_MISS_CHAR
10020       , x_return_status         => x_return_status
10021       , x_msg_count             => l_msg_count
10022       , x_msg_data              => l_msg_data
10023       );
10024     END IF;
10025     --
10026     -- check Error status
10027     --
10028     IF x_return_status = FND_API.G_RET_STS_ERROR
10029     THEN
10030       RAISE FND_API.G_EXC_ERROR;
10031     ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR
10032     THEN
10033       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10034     END IF;
10035     --
10036   END LOOP;
10037 EXCEPTION
10038   WHEN FND_API.G_EXC_ERROR
10039   THEN
10040     x_return_status := FND_API.G_RET_STS_ERROR;
10041   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
10042   THEN
10043     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10044   WHEN OTHERS
10045   THEN
10046     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10047 END update_task_address;
10048 
10049 -- Verify_LocationUpdate_For_FSTasks
10050 -- Following procedure validates if the update to the service request location is allowed.
10051 -- If there FS tasks associated with the SR and if the work on these FS tasks is in progress
10052 -- OR if the FS tasks are scheduled then the update to the SR location is not allowed.
10053 
10054 PROCEDURE Verify_LocUpdate_For_FSTasks
10055          (p_incident_id   IN NUMBER,
10056           x_return_status OUT NOCOPY VARCHAR2) IS
10057 
10058     l_task_id            NUMBER ;
10059     l_task_type_id       NUMBER ;
10060     l_task_status_id     NUMBER ;
10061     l_task_rule          VARCHAR2(30) ;
10062     l_assigned_flag      VARCHAR2(1) ;
10063     l_completed_flag     VARCHAR2(1) ;
10064     l_cancelled_flag     VARCHAR2(1) ;
10065     l_rejected_flag      VARCHAR2(1) ;
10066     l_schedulable_flag   VARCHAR2(1) ;
10067     l_closed_flag        VARCHAR2(1) ;
10068     l_start_date_type    VARCHAR2(30) ;
10069     l_end_date_type      VARCHAR2(30) ;
10070 
10071     l_planned_start_date   DATE ;
10072     l_planned_end_date     DATE ;
10073     l_scheduled_start_date DATE ;
10074     l_scheduled_end_date   DATE ;
10075     l_actual_start_date    DATE ;
10076     l_actual_end_date      DATE ;
10077     l_actual_effort        NUMBER ;
10078     l_actual_effort_uom    VARCHAR2(5);
10079     l_planned_effort       NUMBER ;
10080     l_planned_effort_uom   VARCHAR2(5);
10081 
10082     loc_update_not_alwd_exp EXCEPTION;
10083 
10084     -- cursor to get all the tasks for a service request.
10085     CURSOR c_tasks IS
10086            SELECT task_id,
10087                   task_type_id,
10088                   task_status_id,
10089                   planned_start_date,
10090                   planned_end_date,
10091                   scheduled_start_date,
10092                   scheduled_end_date,
10093                   actual_start_date,
10094                   actual_end_date,
10095                   planned_effort,
10096                   planned_effort_uom,
10097                   actual_effort,
10098                   actual_effort_uom
10099              FROM jtf_tasks_vl
10100             WHERE source_object_id = p_incident_id
10101               AND source_object_type_code = 'SR' ;
10102 
10103     -- Cursor to get the details of a task status
10104     CURSOR c_task_status (l_task_status_id IN NUMBER) IS
10105            SELECT assigned_flag,
10106                   completed_flag,
10107                   cancelled_flag,
10108                   rejected_flag,
10109                   schedulable_flag,
10110                   closed_flag,
10111                   start_date_type,
10112                   end_date_type
10113              FROM jtf_task_statuses_vl
10114             WHERE task_status_id = l_task_status_id ;
10115 
10116     -- Cursor to get the details of a task type
10117     CURSOR c_task_type (l_task_type_id IN NUMBER) IS
10118            SELECT rule
10119              FROM jtf_task_types_vl
10120             WHERE task_type_id = l_task_type_id ;
10121 
10122     -- Cursor to get the details of the task assignment.
10123     CURSOR c_assignee_id (l_task_id IN NUMBER) IS
10124            SELECT resource_id
10125              FROM jtf_task_assignments
10126             WHERE task_id = l_task_id ;
10127 BEGIN
10128     -- Check if the profile option for the state restriction is set.
10129     -- then only apply the logic in this function
10130 
10131     x_return_status := FND_API.G_RET_STS_SUCCESS;
10132 
10133     IF FND_PROFILE.VALUE('CS_SR_ENABLE_TASK_STATE_RESTRICTIONS') = 'Y' THEN
10134        -- Get all the tasks for the service request
10135        FOR c_tasks_rec IN c_tasks
10136            LOOP
10137               -- Check if it is a field service task
10138                  OPEN c_task_type (c_tasks_rec.task_type_id);
10139                 FETCH c_task_type INTO l_task_rule;
10140                 CLOSE c_task_type;
10141 
10142                 IF l_task_rule = 'DISPATCH' THEN
10143                    -- get the task status details
10144                     OPEN c_task_status (c_tasks_rec.task_status_id);
10145 
10146                    FETCH c_task_status
10147                     INTO l_assigned_flag,
10148                          l_completed_flag,
10149                          l_cancelled_flag,
10150                          l_rejected_flag,
10151                          l_schedulable_flag,
10152                          l_closed_flag,
10153                          l_start_date_type,
10154                          l_end_date_type;
10155 
10156                    CLOSE c_task_status ;
10157 
10158                    IF( c_tasks_rec.scheduled_start_date IS NOT NULL    AND  -- SCHEDULED
10159                        c_tasks_rec.scheduled_end_date IS NOT NULL      AND
10160                        l_schedulable_flag = 'Y'              AND
10161                        l_start_date_type = 'SCHEDULED_START' AND
10162                        l_end_date_type = 'SCHEDULED_END'
10163                       ) OR -- ASSIGNED
10164                      ( c_tasks_rec.scheduled_start_date IS NOT NULL   AND
10165                        c_tasks_rec.scheduled_end_date IS NOT NULL     AND
10166                        l_assigned_flag = 'Y'                AND
10167                        l_start_date_type = 'SCHEDULED_START' AND
10168                        l_end_date_type = 'SCHEDULED_END'
10169                       ) OR -- EXECUTED
10170                      ( c_tasks_rec.actual_start_date IS NOT NULL       AND
10171                        c_tasks_rec.actual_end_date IS NOT NULL         AND
10172                        c_tasks_rec.actual_effort IS NOT NULL           AND
10173                        c_tasks_rec.actual_effort_uom IS NOT NULL       AND
10174                        l_completed_flag = 'Y'                AND
10175                        l_start_date_type = 'ACTUAL_START'    AND
10176                        l_end_date_type = 'ACTUAL_END'
10177                       ) OR -- EXECUTED
10178                      ( l_completed_flag = 'Y' OR
10179                        l_cancelled_flag = 'Y' OR
10180                        l_rejected_flag = 'Y'  OR
10181                        l_closed_flag = 'Y'
10182                      ) THEN
10183                      RAISE loc_update_not_alwd_exp ;
10184                    ELSE
10185                      x_return_status := FND_API.G_RET_STS_SUCCESS;
10186                    END IF ;
10187                 END IF; -- end if for DISPATCH
10188            END LOOP;
10189     ELSE
10190      x_return_status := FND_API.G_RET_STS_SUCCESS;
10191     END IF;
10192 
10193 EXCEPTION
10194      WHEN loc_update_not_alwd_exp THEN
10195           FND_MESSAGE.SET_Name('CS','CS_SR_LOC_UPD_NOT_ALLWD');
10196           FND_MSG_PUB.ADD;
10197           x_return_status := FND_API.G_RET_STS_ERROR;
10198      WHEN FND_API.G_EXC_ERROR THEN
10199           x_return_status := FND_API.G_RET_STS_ERROR;
10200      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10201           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10202      WHEN OTHERS THEN
10203           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10204 END Verify_LocUpdate_For_FSTasks;
10205 
10206 
10207 -- -------------------------------------------------------------------
10208 -- Validate_External_Desc_Flex
10209 -- Moved this procedure from cspsrb.pls as a part of bug fix for bug 5216510.
10210 -- For ER# 2501166 added these external attributes date 1st oct 2002
10211 -- -------------------------------------------------------------------
10212 PROCEDURE Validate_External_Desc_Flex
10213 ( p_api_name                    IN      VARCHAR2,
10214   p_application_short_name      IN      VARCHAR2,
10215   p_ext_desc_flex_name          IN      VARCHAR2,
10216   p_ext_desc_segment1           IN      VARCHAR2,
10217   p_ext_desc_segment2           IN      VARCHAR2,
10218   p_ext_desc_segment3           IN      VARCHAR2,
10219   p_ext_desc_segment4           IN      VARCHAR2,
10220   p_ext_desc_segment5           IN      VARCHAR2,
10221   p_ext_desc_segment6           IN      VARCHAR2,
10222   p_ext_desc_segment7           IN      VARCHAR2,
10223   p_ext_desc_segment8           IN      VARCHAR2,
10224   p_ext_desc_segment9           IN      VARCHAR2,
10225   p_ext_desc_segment10          IN      VARCHAR2,
10226   p_ext_desc_segment11          IN      VARCHAR2,
10227   p_ext_desc_segment12          IN      VARCHAR2,
10228   p_ext_desc_segment13          IN      VARCHAR2,
10229   p_ext_desc_segment14          IN      VARCHAR2,
10230   p_ext_desc_segment15          IN      VARCHAR2,
10231   p_ext_desc_context            IN      VARCHAR2,
10232   p_resp_appl_id                IN      NUMBER          := NULL,
10233   p_resp_id                     IN      NUMBER          := NULL,
10234   p_return_status               OUT     NOCOPY VARCHAR2
10235 )
10236 IS
10237   l_error_message       VARCHAR2(2000);
10238 BEGIN
10239   -- Initialize API return status to success
10240   p_return_status := FND_API.G_RET_STS_SUCCESS;
10241 
10242   IF ( p_ext_desc_context   || p_ext_desc_segment1  || p_ext_desc_segment2  ||
10243        p_ext_desc_segment3  || p_ext_desc_segment4  || p_ext_desc_segment5  ||
10244        p_ext_desc_segment6  || p_ext_desc_segment7  || p_ext_desc_segment8  ||
10245        p_ext_desc_segment9  || p_ext_desc_segment10 || p_ext_desc_segment11 ||
10246        p_ext_desc_segment12 || p_ext_desc_segment13 || p_ext_desc_segment14 ||
10247        p_ext_desc_segment15
10248      ) IS NOT NULL THEN
10249 
10250     FND_FLEX_DESCVAL.Set_Context_Value(p_ext_desc_context);
10251     FND_FLEX_DESCVAL.Set_Column_Value('EXTERNAL_ATTRIBUTE_1', p_ext_desc_segment1);
10252     FND_FLEX_DESCVAL.Set_Column_Value('EXTERNAL_ATTRIBUTE_2', p_ext_desc_segment2);
10253     FND_FLEX_DESCVAL.Set_Column_Value('EXTERNAL_ATTRIBUTE_3', p_ext_desc_segment3);
10254     FND_FLEX_DESCVAL.Set_Column_Value('EXTERNAL_ATTRIBUTE_4', p_ext_desc_segment4);
10255     FND_FLEX_DESCVAL.Set_Column_Value('EXTERNAL_ATTRIBUTE_5', p_ext_desc_segment5);
10256     FND_FLEX_DESCVAL.Set_Column_Value('EXTERNAL_ATTRIBUTE_6', p_ext_desc_segment6);
10257     FND_FLEX_DESCVAL.Set_Column_Value('EXTERNAL_ATTRIBUTE_7', p_ext_desc_segment7);
10258     FND_FLEX_DESCVAL.Set_Column_Value('EXTERNAL_ATTRIBUTE_8', p_ext_desc_segment8);
10259     FND_FLEX_DESCVAL.Set_Column_Value('EXTERNAL_ATTRIBUTE_9', p_ext_desc_segment9);
10260     FND_FLEX_DESCVAL.Set_Column_Value('EXTERNAL_ATTRIBUTE_10', p_ext_desc_segment10);
10261     FND_FLEX_DESCVAL.Set_Column_Value('EXTERNAL_ATTRIBUTE_11', p_ext_desc_segment11);
10262     FND_FLEX_DESCVAL.Set_Column_Value('EXTERNAL_ATTRIBUTE_12', p_ext_desc_segment12);
10263     FND_FLEX_DESCVAL.Set_Column_Value('EXTERNAL_ATTRIBUTE_13', p_ext_desc_segment13);
10264     FND_FLEX_DESCVAL.Set_Column_Value('EXTERNAL_ATTRIBUTE_14', p_ext_desc_segment14);
10265     FND_FLEX_DESCVAL.Set_Column_Value('EXTERNAL_ATTRIBUTE_15', p_ext_desc_segment15);
10266 
10267     IF NOT FND_FLEX_DESCVAL.Validate_Desccols
10268              ( appl_short_name => p_application_short_name,
10269                desc_flex_name  => p_ext_desc_flex_name,
10270                resp_appl_id    => p_resp_appl_id,
10271                resp_id         => p_resp_id
10272              ) THEN
10273       l_error_message := FND_FLEX_DESCVAL.Error_Message;
10274       CS_ServiceRequest_UTIL.Add_Desc_Flex_Msg(p_api_name, l_error_message);
10275       p_return_status := FND_API.G_RET_STS_ERROR;
10276     END IF;
10277   END IF;
10278 
10279 END Validate_External_Desc_Flex;
10280 
10281 ----------------------------------------------------
10282 -- Validate Platform Version Id
10283 
10284 PROCEDURE Validate_Platform_Version_Id
10285 ( p_api_name             IN   VARCHAR2,
10286   p_parameter_name       IN   VARCHAR2,
10287   p_platform_id          IN   NUMBER,
10288   p_organization_id      IN   NUMBER,
10289   p_platform_Version_id  IN   NUMBER,
10290   x_return_status        OUT  NOCOPY VARCHAR2
10291 )IS
10292 
10293   l_api_name                  CONSTANT VARCHAR2(30)    := 'Validate_Platform_Version_Id';
10294   l_api_name_full             CONSTANT VARCHAR2(61)    := G_PKG_NAME||'.'||l_api_name;
10295   l_revision_qty_control_code          NUMBER;
10296   l_platform_Version_id                NUMBER;
10297 
10298   invld_platform_version_id_excp     EXCEPTION;
10299 
10300   CURSOR get_version_id IS
10301          SELECT revision_id
10302            INTO l_platform_Version_id
10303            FROM mtl_item_revisions
10304           WHERE organization_id   = p_organization_id
10305             AND inventory_item_id = p_platform_id
10306             AND revision_id       = p_platform_Version_id ;
10307 
10308 BEGIN
10309   -- Initialize the return status.
10310   x_return_status := FND_API.G_RET_STS_SUCCESS;
10311 
10312   IF p_platform_id IS NOT NULL THEN
10313      -- Check if the platform is serial number controlled
10314 
10315      SELECT revision_qty_control_code
10316        INTO l_revision_qty_control_code
10317        FROM mtl_system_items_b
10318       WHERE inventory_item_id = p_platform_id
10319         AND organization_id = p_organization_id ;
10320 
10321      IF NVL(l_revision_qty_control_code,-99) = 2 THEN
10322 
10323         OPEN get_version_id;
10324        FETCH get_version_id INTO l_platform_Version_id;
10325        CLOSE get_version_id;
10326 
10327        IF l_platform_Version_id IS NOT NULL THEN
10328           x_return_status :=  FND_API.G_RET_STS_SUCCESS;
10329        ELSE
10330           RAISE invld_platform_version_id_excp;
10331        END IF;
10332      END IF;
10333    END IF;
10334 
10335 EXCEPTION
10336      WHEN invld_platform_version_id_excp THEN
10337           x_return_status := FND_API.G_RET_STS_ERROR;
10338           Add_Invalid_Argument_Msg
10339                 (p_token_an    => l_api_name_full,
10340                  p_token_v     => TO_CHAR(p_platform_version_id),
10341                  p_token_p     => p_parameter_name ,
10342                  p_table_name  => G_TABLE_NAME,
10343                  p_column_name => 'PLATFORM_VERSION_ID' );
10344 
10345      WHEN OTHERS THEN
10346          fnd_message.set_name ('CS', 'CS_API_SR_UNKNOWN_ERROR');
10347          fnd_message.set_token ('P_TEXT',l_api_name_full||'-'||SQLERRM);
10348          fnd_msg_pub.ADD;
10349          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10350 
10351 END Validate_Platform_Version_Id;
10352 
10353 FUNCTION BOOLEAN_TO_NUMBER (
10354    p_function_name       IN   VARCHAR2)
10355 RETURN NUMBER
10356 IS
10357 BEGIN
10358    if ( FND_FUNCTION.TEST(p_function_name) ) then
10359       return 0;
10360    else
10361       return 1;
10362    end if;
10363 
10364  END  BOOLEAN_TO_NUMBER;
10365 
10366 
10367 END CS_ServiceRequest_UTIL;