DBA Data[Home] [Help]

PACKAGE BODY: APPS.CS_SERVICEREQUEST_UTIL

Source


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