DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSC_ROUTING_UTL

Source


1 PACKAGE BODY CSC_ROUTING_UTL AS
2 /* $Header: cscotmrb.pls 120.20 2006/11/02 18:59:49 hbchung ship $ */
3 
4 ------------------------------------------------------------------------------
5 --  Procedure:   decode_ani
6 --  Usage:    used by the Routing module to decode the string passed in the
7 --            IVT values to the constituent telephone number pieces required
8 --            by the get_customerid_from_ANI function.
9 --  Parameters:  NI code received
10 --  Return:  4 substrings
11 --
12 ------------------------------------------------------------------------------
13 PROCEDURE decode_ANI (
14 		    p_ANI_CODE          IN  VARCHAR2,
15 		    p_country_code      OUT NOCOPY VARCHAR2,
16 		    p_area_code         OUT NOCOPY VARCHAR2,
17 		    p_phone_num         OUT NOCOPY VARCHAR2,
18 		    p_phone_ext         OUT NOCOPY VARCHAR2)
19 IS
20 
21 BEGIN
22    --
23    --   this is a much more complex problem thatn is initially coded here.
24    --   Once the contents of the IVR ANI is defined, thois code will
25    --   have to be modified.
26    --
27    IF LENGTH(p_ANI_CODE) = 7 THEN
28 	  p_country_code := null;
29 	  p_area_code :=  null;
30 	  p_phone_num := p_ANI_CODE;
31 	  p_phone_ext := null;
32    ELSIF LENGTH(p_ANI_CODE) = 10 THEN
33 	  p_country_code := null;
34 	  p_area_code := substr(p_ANI_CODE,1,3);
35 	  p_phone_num := substr(p_ANI_CODE,4,7);
36 	  p_phone_ext := null;
37    ELSIF LENGTH(p_ANI_CODE) > 10 THEN
38 	  p_country_code := substr(p_ANI_CODE,1,3);
39 	  p_area_code := substr(p_ANI_CODE,4,3);
40 	  p_phone_num := substr(p_ANI_CODE,7,7);
41 	  p_phone_ext := null;
42 -- if none of the above pass everything in phone number field
43    ELSE
44 	  p_country_code := null;
45 	  p_area_code := null;
46 	  p_phone_num := p_ANI_CODE;
47 	  p_phone_ext := null;
48    END IF;
49 
50 END decode_ANI;
51 
52 ------------------------------------------------------------------------------
53 --  Function	: Get_Customer_From_Account_Num
54 --  Usage	: Used by the Routing module to get the customer ID from the
55 --		  customer account number
56 --  Description	: This function retrieves the primary party id associated
57 --		  with the specified customer account number.
58 --  Parameters	:
59 --	p_customer_account_number	IN	VARCHAR2(30)	Required
60 --
61 --  Return	: NUMBER
62 --		  If the given customer does not exist, this function returns
63 --		  NULL.
64 ------------------------------------------------------------------------------
65 
66 
67 FUNCTION Get_Customer_From_Account_Num
68 ( p_cust_acct_number	IN	VARCHAR2)
69 RETURN NUMBER IS
70 
71     p_party_id         NUMBER(15) := null;
72 
73     --
74     -- get party ID given customer account number
75     --
76     CURSOR c_party_id (anum  VARCHAR2) IS
77       SELECT party_id
78       FROM   hz_cust_accounts
79       WHERE  account_number = anum;
80 BEGIN
81 
82     OPEN c_party_id (p_cust_acct_number);
83     FETCH c_party_id INTO p_party_id;
84     IF c_party_id%NOTFOUND THEN
85        CLOSE c_party_id;
86        RETURN NULL;
87     END IF;
88     CLOSE c_party_id;
89     RETURN to_number(p_party_id);
90 
91 END Get_Customer_From_Account_Num;
92 
93 
94 ------------------------------------------------------------------------------
95 --  Function	: Get_Customer_From_Contract_Num
96 --  Usage	: Used by the Routing module to get the customer ID from the
97 --		  contract number.
98 --  Description	: This function retrieves a party ID from
99 --		  OKC_ given a contract number. If there
100 --		  is more than one customer associated with the given
101 --		  contract, this function will return the first party ID
102 --		  that it retrieves.
103 --  Parameters	:
104 --	p_contract_number	IN	VARCHAR2(30)	Required
105 --
106 --  Return	: NUMBER
107 --		  If there is no party associated with the given contract,
108 --		  or the contract does not exist, this function returns NULL.
109 ------------------------------------------------------------------------------
110 FUNCTION Get_Customer_From_Contract_Num
111 ( p_contract_number	IN	VARCHAR2)
112 RETURN NUMBER IS
113 
114     p_party_id	NUMBER(15);
115     --
116     -- get party ID given a contract number
117     --
118     /********
119     CURSOR c_party_id IS
120       SELECT customer_id
121       FROM   ra_customer_trx_all
122       WHERE  invoice_number = p_contract_number;
123 	 ***/
124 
125 BEGIN
126 
127 	/******
128     OPEN c_party_id;
129     FETCH c_party_id INTO p_party_id;
130     IF c_party_id%NOTFOUND THEN
131        CLOSE c_party_id;
132        RETURN NULL;
133     END IF;
134     CLOSE c_party_id;
135 	****/
136 
137     RETURN p_party_id;
138 
139 END Get_Customer_From_Contract_Num;
140 
141 ------------------------------------------------------------------------------
142 --  Function	: Get_Customer_From_Site_Num
143 --  Usage	: Used by the Routing module to get the customer ID from the
144 --		  party site number.
145 --  Description	: This function retrieves a party ID from
146 --		  HZ_PARTY_SITES given a site number.
147 --  Parameters	:
148 --	p_site_number	IN	VARCHAR2(30)	Required
149 --
150 --  Return	: NUMBER
151 --		  If there is no party associated with the given site number,
152 --		  this function returns NULL.
153 ------------------------------------------------------------------------------
154 FUNCTION Get_Customer_From_Site_Num (p_site_number IN VARCHAR2)
155 	Return Number IS
156 
157     p_party_id         NUMBER(15);
158 
159     --
160     -- get party ID given site number
161     --
162     CURSOR c_party_id (snum  VARCHAR2) IS
163       SELECT party_id
164       FROM   hz_party_sites
165       WHERE  party_site_number = snum;
166 BEGIN
167 
168     OPEN c_party_id (p_site_number);
169     FETCH c_party_id INTO p_party_id;
170     IF c_party_id%NOTFOUND THEN
171        CLOSE c_party_id;
172        RETURN NULL;
173     END IF;
174     CLOSE c_party_id;
175     RETURN p_party_id;
176 
177 END Get_Customer_From_Site_Num;
178 
179 ------------------------------------------------------------------------------
180 --  Function	: Get_Customer_From_Repair_Num
181 --  Usage	: Used by the Routing module to get the customer ID from the
182 --		  repair number.
183 --  Description	: This function retrieves a party ID from
184 --		  CSD_REPAIRS_V given a repair number. If there
185 --  Parameters	:
186 --	p_repair_number	IN	VARCHAR2(30)	Required
187 --
188 --  Return	: NUMBER
189 --		  If there is no party associated with the given repair,
190 --		  or the repair does not exist, this function returns NULL.
191 ------------------------------------------------------------------------------
192 FUNCTION Get_Customer_From_Repair_Num
193       ( p_repair_number	IN	VARCHAR2)
194 RETURN NUMBER
195 IS
196     p_party_id	NUMBER(15);
197     --
198     -- get party ID given a repair number
199     --
200     CURSOR c_party_id (repnum  NUMBER) IS
201       SELECT 	inc.customer_id
202       FROM   	csd_repairs	rep,
203 			cs_incidents_v inc
204       WHERE  	rep.repair_number = repnum
205 	   AND	rep.incident_id   = inc.incident_id;
206 
207 BEGIN
208 
209     OPEN c_party_id (p_repair_number);
210     FETCH c_party_id INTO p_party_id;
211     IF c_party_id%NOTFOUND THEN
212        CLOSE c_party_id;
213        RETURN NULL;
214     END IF;
215     CLOSE c_party_id;
216 
217     RETURN p_party_id;
218 
219 END Get_Customer_From_Repair_Num;
220 
221 ------------------------------------------------------------------------------
222 --  Function	: Get_Customer_From_Defect_Num
223 --  Usage	: Used by the Routing module to get the customer ID from the
224 --		  defect number.
225 --  Description	: This function retrieves a party ID from
226 --		  CSS_DEF_DEFECTS_ALL_V given a defect number.
227 --  Parameters	:
228 --	p_defect_number	IN	VARCHAR2(30)	Required
229 --
230 --  Return	: NUMBER
231 --		  If there is no party associated with the given defect,
232 --		  or the defect does not exist, this function returns NULL.
233 ------------------------------------------------------------------------------
234 FUNCTION Get_Customer_From_Defect_Num
235 ( p_defect_number	IN	VARCHAR2)
236 RETURN NUMBER IS
237 
238     p_party_id	NUMBER(15);
239 /*
240     --
241     -- get party ID given a defect number
242     --
243     CURSOR c_party_id (defnum   VARCHAR2) IS
244       SELECT 	inc.incident_Id
245       FROM   	css_def_defects_all_v	def,
246 			cs_incident_links	inl,
247 			cs_incidents_v		inc
248       WHERE  	def.defect_number = defnum
249 	   AND	def.defect_id	   = inl.link_id
250 	   AND	inl.from_incident_id   = inc.incident_id;
251 */
252 
253 BEGIN
254 
255  /*   OPEN c_party_id (p_defect_number);
256     FETCH c_party_id INTO p_party_id;
257     IF c_party_id%NOTFOUND THEN
258        CLOSE c_party_id;
259        RETURN NULL;
260     END IF;
261     CLOSE c_party_id;
262 */
263 
264     RETURN p_party_id;
265 
266 END Get_Customer_From_Defect_Num;
267 
268 ------------------------------------------------------------------------------
269 --  Function	: Get_Customer_From_ANI
270 --  Usage	: Used by the Routing module to get the party ID from the
271 --		  contact's phone number
272 --  Description	: This function retrieves a party ID from the
273 --		  HZ_CONTACT_POINTS table given a phone number of a customer contact.
274 --		  If there is more than one customer associated with the given phone
275 --		  number, this function will return the first customer ID that
276 --		  it retrieves.
277 --  Parameters	:
278 --	p_area_code		IN	VARCHAR2(10)	Optional
279 --	p_phone_number		IN	VARCHAR2(40)	Required
280 --	p_extension		IN	VARCHAR2(20)	Optional
281 --	p_country_code		IN	VARCHAR2(20)	Optional
282 --
283 --  Return	: NUMBER
284 --		  If there is no customer associated with the given phone
285 --		  number, or the phone number does not exist (in the system),
286 --		  this function returns NULL.
287 ------------------------------------------------------------------------------
288 
289 
290 FUNCTION Get_Customer_From_ANI
291 ( p_country_code	IN	VARCHAR2	:= NULL,
292   p_area_code		IN	VARCHAR2 := NULL,
293   p_phone_number	IN	VARCHAR2,
294   p_extension		IN	VARCHAR2 := NULL)
295 RETURN NUMBER IS
296 
297     p_party_id         NUMBER(15);
298 
299 
300     --
301     -- get party ID given phone number, country code, area code and extension
302     --
303 /* Enhancement: 1685717 Parties are queried by ordering last_update_date on               *//* hz_contact_points in descending order, so that active parties are selected first       */
304 
305 /*
306     CURSOR c_party_id (p_country  VARCHAR2,
307 				   p_area     VARCHAR2,
308 				   p_phone    VARCHAR2,
309 				   p_ext      VARCHAR2) IS
310       SELECT party.party_id
311       FROM   HZ_PARTIES			party,
312 		   hz_contact_points	cp
313       WHERE  cp.phone_number = p_phone AND
314 		   cp.phone_country_code = p_country AND
315              cp.phone_area_code = p_area       AND
316              cp.phone_extension = p_ext 	 AND
317 		   cp.owner_table_name = 'HZ_PARTIES' AND
318 		   cp.owner_table_id   = party.party_id ;
319 */
320 
321     CURSOR c_party_id (p_country  VARCHAR2,
322 				   p_area     VARCHAR2,
323 				   p_phone    VARCHAR2,
324 				   p_ext      VARCHAR2) IS
325       SELECT cp.owner_table_id party_id
326       FROM hz_contact_points cp
327       WHERE  cp.phone_number = p_phone AND
328 		   cp.phone_country_code = p_country AND
329              cp.phone_area_code = p_area       AND
330              cp.phone_extension = p_ext 	 AND
331 		   cp.owner_table_name = 'HZ_PARTIES'
332 	 ORDER BY cp.last_update_date DESC;
333     --
334     -- get customer ID given phone number and extension
335     --
336 /*
337     CURSOR c_party_id_w_area_code (p_phone  VARCHAR2, p_ext  VARCHAR2) IS
338       SELECT party.party_id
339       FROM   HZ_PARTIES			party,
340 		   hz_contact_points	cp
341       WHERE  cp.phone_number = p_phone AND
342              cp.phone_extension = p_ext 	 AND
343 		   cp.owner_table_name = 'HZ_PARTIES' AND
344 		   cp.owner_table_id   = party.party_id ;
345 */
346 
347     CURSOR c_party_id_w_area_code (p_phone  VARCHAR2, p_ext  VARCHAR2) IS
348       SELECT cp.owner_table_id  party_id
349 	 FROM   hz_contact_points	cp
350       WHERE  cp.phone_number = p_phone AND
351              cp.phone_extension = p_ext 	 AND
352 		   cp.owner_table_name = 'HZ_PARTIES'
353 	 ORDER BY cp.last_update_date DESC;
354 
355     --
356     -- get customer ID given phone number and area code
357     --
358 /*
359     CURSOR c_party_id_w_ctry_code (p_area  VARCHAR2, p_phone  VARCHAR2) IS
360       SELECT party.party_id
361       FROM   HZ_PARTIES			party,
362 		   hz_contact_points	cp
363       WHERE  cp.phone_number = p_phone AND
364              cp.phone_area_code = p_area       AND
365 		   cp.owner_table_name = 'HZ_PARTIES' AND
366 		   cp.owner_table_id   = party.party_id ;
367  */
368     CURSOR c_party_id_w_ctry_code (p_area  VARCHAR2, p_phone  VARCHAR2) IS
369       SELECT cp.owner_table_id party_id
370       FROM   hz_contact_points	cp
371       WHERE  cp.phone_number = p_phone AND
372              cp.phone_area_code = p_area       AND
373 		   cp.owner_table_name = 'HZ_PARTIES'
374 	 ORDER BY cp.last_update_date DESC;
375     --
376     -- get customer ID given phone number, area code and country code
377     --
378 /*
379     CURSOR c_party_id_w_extension (p_country  VARCHAR2,
380 							p_area     VARCHAR2,
381 							p_phone    VARCHAR2) IS
382       SELECT party.party_id
383       FROM   HZ_PARTIES			party,
384 		   hz_contact_points	cp
385       WHERE  cp.phone_number = p_phone AND
386              cp.phone_area_code = p_area       AND
387              cp.phone_country_code = p_country AND
388 		   cp.owner_table_name = 'HZ_PARTIES' AND
389 		   cp.owner_table_id   = party.party_id;
390 */
391 
392     CURSOR c_party_id_w_extension (p_country  VARCHAR2,
393 							p_area     VARCHAR2,
394 							p_phone    VARCHAR2) IS
395       SELECT cp.owner_table_id party_id
396 	 FROM   hz_contact_points	cp
397       WHERE  cp.phone_number = p_phone AND
398              cp.phone_area_code = p_area       AND
399              cp.phone_country_code = p_country AND
400 		   cp.owner_table_name = 'HZ_PARTIES'
401       ORDER BY cp.last_update_date DESC;
402     --
403     -- get customer ID given phone number only
404     --
405 /*
406     CURSOR c_party_id_w_all (p_phone  VARCHAR2) IS
407       SELECT party.party_id
408       FROM   HZ_PARTIES			party,
409 		   hz_contact_points	cp
410       WHERE  cp.phone_number = p_phone AND
411 		   cp.owner_table_name = 'HZ_PARTIES' AND
412 		   cp.owner_table_id   = party.party_id ;
413 */
414 
415     CURSOR c_party_id_w_all (p_phone  VARCHAR2) IS
416       SELECT cp.owner_table_id party_id
417 	 FROM   hz_contact_points	cp
418       WHERE  cp.phone_number = p_phone AND
419 		   cp.owner_table_name = 'HZ_PARTIES'
420       ORDER BY cp.last_update_date DESC;
421 
422 BEGIN
423 
424     IF p_country_code IS NOT NULL AND
425 		 p_area_code IS NOT NULL AND
426 		 p_extension IS NOT NULL THEN
427       OPEN c_party_id(p_country_code, p_area_code, p_phone_number, p_extension);
428       FETCH c_party_id INTO p_party_id;
429       IF c_party_id%NOTFOUND THEN
430          CLOSE c_party_id;
431          RETURN NULL;
432       END IF;
433       CLOSE c_party_id;
434       RETURN to_number(p_party_id);
435     END IF;
436 
437     IF p_country_code IS NULL AND p_area_code IS NULL AND p_extension IS NOT NULL THEN
438       OPEN c_party_id_w_area_code(p_phone_number, p_extension);
439       FETCH c_party_id_w_area_code INTO p_party_id;
440       IF c_party_id_w_area_code%NOTFOUND THEN
441          CLOSE c_party_id_w_area_code;
442          RETURN NULL;
443       END IF;
444       CLOSE c_party_id_w_area_code;
445       RETURN to_number(p_party_id);
446     END IF;
447 
448     IF p_country_code IS NULL AND p_area_code IS NOT NULL AND
449 		p_extension IS NULL THEN
450       OPEN c_party_id_w_ctry_code(p_area_code, p_phone_number);
451       FETCH c_party_id_w_ctry_code INTO p_party_id;
452       IF c_party_id_w_ctry_code%NOTFOUND THEN
453          CLOSE c_party_id_w_ctry_code;
454          RETURN NULL;
455       END IF;
456       CLOSE c_party_id_w_ctry_code;
457       RETURN to_number(p_party_id);
458     END IF;
459 
460     IF p_country_code IS NOT NULL AND p_area_code IS NOT NULL
461 		 AND p_extension IS NULL THEN
462       OPEN c_party_id_w_extension(p_country_code, p_area_code, p_phone_number);
463       FETCH c_party_id_w_extension INTO p_party_id;
464       IF c_party_id_w_extension%NOTFOUND THEN
465          CLOSE c_party_id_w_extension;
466          RETURN NULL;
467       END IF;
468       CLOSE c_party_id_w_extension;
469       RETURN to_number(p_party_id);
470     END IF;
471 
472     IF p_area_code IS NULL AND p_extension IS NULL
473 		AND p_country_code IS NULL THEN
474       OPEN c_party_id_w_all(p_phone_number);
475       FETCH c_party_id_w_all INTO p_party_id;
476       IF c_party_id_w_all%NOTFOUND THEN
477          CLOSE c_party_id_w_all;
478          RETURN NULL;
479       END IF;
480       CLOSE c_party_id_w_all;
481       RETURN to_number(p_party_id);
482     END IF;
483 
484 END Get_Customer_From_ANI;
485 
486 ------------------------------------------------------------------------------
487 --  Function	: Get_Customer_From_CustomerNum
488 --  Usage	: Used by the Routing module to get the customer ID from the
489 --		  customer number
490 --  Description	: This function retrieves a party ID from the
491 --		  HZ_PARTIES table given a party number. If there is more than one
492 --		  party with the given number, this function will return the
493 --		  first party ID that it retrieves.
494 --  Parameters	:
495 --	p_party_number	IN	VARCHAR2(30)	Required
496 --
497 --  Return	: NUMBER
498 --		  If the given customer does not exist, this function returns
499 --		  NULL.
500 ------------------------------------------------------------------------------
501 
502 
503 FUNCTION Get_Customer_From_CustomerNum
504 ( p_party_number	IN	VARCHAR2)
505 RETURN NUMBER IS
506 
507     --p_party_id         ra_customers.customer_id%type;
508     p_party_id           number;
509 
510     --
511     -- get party ID gievn customer number
512     --
513     CURSOR c_party_id (pnum  VARCHAR2) IS
514       SELECT party_id
515       FROM   hz_parties
516       WHERE  party_number = pnum;
517 BEGIN
518 
519     OPEN c_party_id(p_party_number);
520     FETCH c_party_id INTO p_party_id;
521     IF c_party_id%NOTFOUND THEN
522        CLOSE c_party_id;
523        RETURN NULL;
524     END IF;
525     CLOSE c_party_id;
526     RETURN to_number(p_party_id);
527 
528 END Get_Customer_From_CustomerNum;
529 
530 ------------------------------------------------------------------------------
531 --  Function	: Get_Customer_From_InvoiceNum
532 --  Usage	: Used by the Routing module to get the customer ID from the
533 --		  sales invoice number.
534 --  Description	: This function retrieves a customer ID from the
535 --		  RA_CUSTOMER_TRX_ALL table given an invoice number. If there
536 --		  are more than one customer associated with the given
537 --		  invoice, this function will return the first customer ID
538 --		  that it retrieves.
539 --  Parameters	:
540 --	p_invoice_number	IN	VARCHAR2(20)	Required
541 --
542 --  Return	: NUMBER
543 --		  If there is no customer associated with the given invoice,
544 --		  or the invoice does not exist, this function returns NULL.
545 ------------------------------------------------------------------------------
546 FUNCTION Get_Customer_From_InvoiceNum
547 ( p_invoice_number	IN	VARCHAR2)
548 RETURN NUMBER IS
549 
550  p_ship_to_customer_id     ra_customer_trx_all.ship_to_customer_id%type;
551  p_bill_to_customer_id     ra_customer_trx_all.bill_to_customer_id%type;
552 
553     --
554     -- get customer ID given an invoice number
555     --
556     CURSOR c_customer_id (invnum  VARCHAR2) IS
557       SELECT ship_to_customer_id, bill_to_customer_id
558       FROM   ra_customer_trx_all
559       WHERE  trx_number = invnum;
560 
561 BEGIN
562 
563     OPEN c_customer_id(p_invoice_number);
564     FETCH c_customer_id INTO p_ship_to_customer_id, p_bill_to_customer_id;
565     IF c_customer_id%NOTFOUND THEN
566        CLOSE c_customer_id;
567        RETURN NULL;
568     END IF;
569     CLOSE c_customer_id;
570     IF p_ship_to_customer_id IS NOT NULL THEN
571        RETURN to_number(p_ship_to_customer_id);
572     ELSE
573        RETURN to_number(p_bill_to_customer_id);
574     END IF;
575 
576 END Get_Customer_From_InvoiceNum;
577 
578 ------------------------------------------------------------------------------
579 --  Function	: Get_Name_Of_Customer
580 --  Usage	: Used by the Routing module to get the customer name from the
581 --		  customer ID
582 --  Description	: This function retrieves the customer name from the
583 --		  HZ_PARTIES table given a customer ID.
584 --  Parameters	:
585 --	p_party_id		IN	NUMBER		Required
586 --
587 --  Return	: VARCHAR2(255)
588 --		  If there is no customer with the given party ID, this
589 --		  function returns NULL.
590 ------------------------------------------------------------------------------
591 
592 FUNCTION Get_Name_Of_Customer
593 ( p_party_id		IN	NUMBER)
594 RETURN VARCHAR2 IS
595     p_party_name         VARCHAR2(255);
596 
597     --
598     -- get party name given a party ID
599     --
600     CURSOR c_party_name (pid  NUMBER) IS
601       SELECT party_name
602       FROM   hz_parties
603       WHERE  party_id = pid;
604 BEGIN
605 
606     OPEN c_party_name(p_party_id);
607     FETCH c_party_name INTO p_party_name;
608     IF c_party_name%NOTFOUND THEN
609        CLOSE c_party_name;
610        RETURN NULL;
611     END IF;
612     CLOSE c_party_name;
613     RETURN p_party_name;
614 END Get_Name_Of_Customer;
615 
616 ------------------------------------------------------------------------------
617 --  Function	: Get_Status_Of_Customer
618 --  Usage	: Used by the Routing module to get the customer status
619 --  Description	: This function retrieves the customer status flag from the
620 --		  HZ_PARTIES table given a party ID.
621 --  Parameters	:
622 --	p_party_id		IN	NUMBER		Required
623 --
624 --  Return	: VARCHAR2(1)
625 --		  If there is no customer with the given customer ID, this
626 --		  function returns NULL.
627 ------------------------------------------------------------------------------
628 
629 FUNCTION Get_Status_Of_Customer(p_party_id		IN	NUMBER)
630 RETURN VARCHAR2
631 IS
632     p_customer_status         varchar2(1);
633 
634     --
635     -- get customer status given a party ID
636     --
637     CURSOR c_customer_status (pid  NUMBER) IS
638       SELECT status
639       FROM   hz_parties
640       WHERE  party_iD = pid;
641 BEGIN
642 
643     OPEN c_customer_status(p_party_id);
644     FETCH c_customer_status INTO p_customer_status;
645     IF c_customer_status%NOTFOUND THEN
646        CLOSE c_customer_status;
647        RETURN NULL;
648     END IF;
649     CLOSE c_customer_status;
650     RETURN p_customer_status;
651 END Get_Status_Of_Customer;
652 
653 
654 ------------------------------------------------------------------------------
655 --  Function	: Is_CP_Existent
656 --  Usage	: Used by the Routing module to determine whether a customer
657 --		  product exists in the installed base with the given ID
658 --  Description	: This function finds a row in the CS_CUSTOMER_PRODUCTS_ALL
659 --		  table that matches the given customer product ID.
660 --  Parameters	:
661 --	p_customer_product_id	IN	NUMBER		Required
662 --
663 --  Return	: BOOLEAN
664 --		  If there is a row that matches the given ID, this function
665 --		  returns TRUE. Else it returns FALSE.
666 ------------------------------------------------------------------------------
667 
668 FUNCTION Is_CP_Existent(p_customer_product_id	   IN	NUMBER)
669 RETURN BOOLEAN IS
670 
671     p_customer_pid   NUMBER(15);
672 
673     --
674     -- check if the given customer product ID exists
675     --
676     CURSOR c_customer_product_id (prodid  NUMBER) IS
677       SELECT customer_product_id
678       FROM   cs_customer_products_all
679       WHERE  customer_product_id = prodid;
680 BEGIN
681 
682     OPEN c_customer_product_id(p_customer_product_id);
683     FETCH c_customer_product_id INTO p_customer_pid;
684     IF c_customer_product_id%NOTFOUND THEN
685        CLOSE c_customer_product_id;
686        RETURN false;
687     ELSE
688        CLOSE c_customer_product_id;
689        RETURN true;
690     END IF;
691 END Is_CP_Existent;
692 
693 
694 ------------------------------------------------------------------------------
695 --  Function	: Customer_ID_Exists
696 --  Usage	: Used by the Routing module to determine whether a customer
697 --		  exists with the given ID
698 --  Description	: This function finds a row in the HZ_PARTIES
699 --		  table that matches the given customer ID.
700 --  Parameters	:
701 --	p_customer_id	IN	NUMBER		Required
702 --
703 --  Return	: BOOLEAN
704 --		  If there is a row that matches the given ID, this function
705 --		  returns TRUE. Else it returns FALSE.
706 ------------------------------------------------------------------------------
707 
708 FUNCTION Customer_ID_Exists(p_customer_id IN NUMBER) Return BOOLEAN IS
709 
710     p_party_id   NUMBER(15);
711 
712     --
713     -- check if the given customer ID exists
714     --
715     CURSOR c_party_id (custid  NUMBER) IS
716       SELECT party_id
717       FROM   hz_parties
718       WHERE  party_id = custid;
719 BEGIN
720 
721     OPEN c_party_id(p_customer_id);
722     FETCH c_party_id INTO p_party_id;
723     IF c_party_id%NOTFOUND THEN
724        CLOSE c_party_id;
725        RETURN false;
726     ELSE
727        CLOSE c_party_id;
728        RETURN true;
729     END IF;
730 END Customer_ID_Exists;
731 
732 
733 ------------------------------------------------------------------------------
734 --  Function	: Get_CP_From_ReferenceNum
735 --  Usage	: Used by the Routing module to get the customer product ID
736 --		  from the reference number
737 --  Description	: This function retrieves a customer product ID from the
738 --		  CS_CUSTOMER_PRODUCT_ALL table given a reference number.
739 --  Parameters	:
740 --	p_reference_number	IN	NUMBER		Required
741 --
742 --  Return	: NUMBER
743 --		  If the given reference number does not exist, this function
744 --		  returns NULL.
745 ------------------------------------------------------------------------------
746 
747 FUNCTION Get_CP_From_ReferenceNum(p_reference_number	IN	NUMBER)
748 RETURN NUMBER IS
749 
750 
751     p_customer_product_id     cs_customer_products_all.customer_product_id%type;
752 
753     --
754     -- get customer product ID given a reference number
755     --
756     CURSOR c_customer_product_id (refnum  NUMBER) IS
757       SELECT customer_product_id
758       FROM   cs_customer_products_all
759       WHERE  reference_number = refnum;
760 
761 BEGIN
762 
763     OPEN c_customer_product_id(p_reference_number);
764     IF c_customer_product_id%NOTFOUND THEN
765        CLOSE c_customer_product_id;
766        RETURN NULL;
767     END IF;
768     FETCH c_customer_product_id INTO p_customer_product_id;
769     CLOSE c_customer_product_id;
770     RETURN to_number(p_customer_product_id);
771 
772 END Get_CP_From_ReferenceNum;
773 
774 ------------------------------------------------------------------------------
775 --  Function	: Get_Product_From_ReferenceNum
776 --  Usage	: Used by the Routing module to get the inventory item ID
777 --		  from the reference number
778 --  Description	: This function retrieves an inventory item ID from the
779 --		  CS_CUSTOMER_PRODUCT_ALL table given a reference number.
780 --  Parameters	:
781 --	p_reference_number	IN	NUMBER		Required
782 --
783 --  Return	: NUMBER
784 --		  If the given reference number does not exist, this function
785 --		  returns NULL.
786 ------------------------------------------------------------------------------
787 
788 FUNCTION Get_Product_From_ReferenceNum(p_reference_number	IN	NUMBER)
789 RETURN NUMBER IS
790     p_inventory_item_id   cs_customer_products_all.inventory_item_id%type;
791 
792     --
793     -- get inventory item ID given a reference number
794     --
795     CURSOR c_inventory_item_id (refnum  NUMBER) IS
796       SELECT inventory_item_id
797       FROM   cs_customer_products_all
798       WHERE  reference_number = refnum;
799 BEGIN
800 
801     OPEN c_inventory_item_id(p_reference_number);
802     IF c_inventory_item_id%NOTFOUND THEN
803        CLOSE c_inventory_item_id;
804        RETURN NULL;
805     END IF;
806     FETCH c_inventory_item_id INTO p_inventory_item_id;
807     CLOSE c_inventory_item_id;
808     RETURN to_number(p_inventory_item_id);
809 END Get_Product_From_ReferenceNum;
810 
811 
812 ------------------------------------------------------------------------------
813 --  Function	: Get_Name_Of_Product
814 --  Usage	: Used by the Routing module to get the product name from the
815 --		  inventory item ID
816 --  Description	: This function retrieves the product name from the
817 --		  MTL_SYSTEM_ITEMS table given an inventory item ID and an
818 --		  organization ID. The inventory organization ID is required
819 --		  because the same item can be defined in more than one
820 --		  organization.
821 --  Parameters	:
822 --	p_inventory_item_id	IN	NUMBER		Required
823 --	p_inventory_org_id	IN	NUMBER		Required
824 --
825 --  Return	: VARCHAR2(240)
826 --		  If there is no product with the given inventory item ID,
827 --		  this function returns NULL.
828 ------------------------------------------------------------------------------
829 FUNCTION Get_Name_Of_Product
830 ( p_inventory_item_id	IN	NUMBER,
831   p_inventory_org_id	IN	NUMBER)
832 RETURN VARCHAR2 IS
833 
834     p_product_name   mtl_system_items.description%type;
835 
836     --
837     -- get name given an inventory item ID and a inventory organization ID
838     --
839     CURSOR c_product_name (invid  NUMBER, orgid  NUMBER) IS
840       SELECT description
841       FROM   mtl_system_items
842       WHERE  inventory_item_id = invid AND
843              organization_id = orgid;
844 BEGIN
845 
846     OPEN c_product_name(p_inventory_item_id, p_inventory_org_id);
847     IF c_product_name%NOTFOUND THEN
848        CLOSE c_product_name;
849        RETURN NULL;
850     END IF;
851     FETCH c_product_name INTO p_product_name;
852     CLOSE c_product_name;
853     RETURN p_product_name;
854 
855 END Get_Name_Of_Product;
856 
857 ------------------------------------------------------------------------------
858 --  Function	: Get_Customer_From_Email
859 --  Usage	: Used to get the party ID from the sender's email address (email
860 --		  integration)
861 --  Description	: This function retrieves a party ID from the
862 --		  JTF_CONTACT_POINTS_V given a email address.
863 --		  If there is more than one customer associated with the given email
864 --		  address, this function will return the first customer ID that
865 --		  it retrieves.
866 --  Parameters	:
867 --	p_email_address	IN	VARCHAR2(2000)	Required
868 --
869 --  Return	: NUMBER
870 --		  If there is no customer associated with the given email
871 --		  address, or the email address does not exist (in the system),
872 --		  this function returns NULL.
873 ------------------------------------------------------------------------------
874 
875 FUNCTION Get_Customer_From_Email
876 ( p_email_address	IN	VARCHAR2)
877 Return Number Is
878 
879     p_party_id         NUMBER(15);
880 /*
881     CURSOR c_party_id (email  VARCHAR2) IS
882       SELECT party_id
883       FROM   JTF_CONTACT_POINTS_V
884       WHERE  Upper(email_address) = Upper(email) ;
885 */
886 
887 /* Enhancement: 1685717 Parties are queried by ordering last_update_date on               *//* hz_contact_points in descending order, so that active parties are selected first       */
888 
889 	CURSOR c_party_id (email VARCHAR2) IS
890 		SELECT owner_table_id party_id
891 	 	FROM   hz_contact_points
892 		WHERE  owner_table_name = 'HZ_PARTIES'
893 		AND    contact_point_type = 'EMAIL'
894 		AND    UPPER(email_address) = UPPER(email)
895 	     ORDER BY last_update_date DESC;
896 
897 BEGIN
898 
899     OPEN c_party_id(p_email_address);
900     FETCH c_party_id INTO p_party_id;
901     IF c_party_id%NOTFOUND THEN
902        CLOSE c_party_id;
903        RETURN NULL;
904     END IF;
905     CLOSE c_party_id;
906 
907     RETURN p_party_id;
908 
909 END Get_Customer_From_Email;
910 
911 
912 --
913 ------------------------------------------------------------------------------
914 --  Function	: Get_Customer_From_ContactNum
915 --  Usage	: Used to get the party ID from the Contact Number passed in the IVR parms
916 --  Description	: This function retrieves a party ID from the
917 --		  HZ_PARTIES table by traversing the relationships from HZ_ORG_CONTACTS
918 --          and HZ_RELATIONSHIPS.
919 --		  If there is more than one party_id associated with the given ContactNum
920 --		  this function will return the first party_id that it retrieves.
921 --  Parameters	:
922 --	p_contact_number  IN	VARCHAR2(1996)	Required
923 --
924 --  Return	: NUMBER
925 --		  If there is no party_id associated with the given ContactNum
926 --		  this function returns NULL.
927 ------------------------------------------------------------------------------
928 
929 FUNCTION Get_Customer_From_ContactNum
930 ( p_contact_number  IN	VARCHAR2)
931 Return Number IS
932 
933    CURSOR  cnum (connum  IN  VARCHAR2) IS
934 		 SELECT  p.party_id
935 		   FROM  hz_parties p,
936 			    hz_relationships r,
937 			    hz_org_contacts c
938             WHERE  c.contact_number = connum
939 		    AND  c.party_relationship_id = r.relationship_id
940 		    AND  r.object_id = p.party_id
941                     AND  r.subject_table_name = 'HZ_PARTIES'
942                     AND  r.object_table_name = 'HZ_PARTIES'
943                     AND  r.directional_flag = 'F';
944    p_party_id         NUMBER := null;
945 
946 BEGIN
947 
948     OPEN cnum (p_contact_number);
949     FETCH cnum INTO p_party_id;
950     IF cnum%NOTFOUND THEN
951        CLOSE cnum;
952        RETURN NULL;
953     END IF;
954     CLOSE cnum;
955 
956     RETURN p_party_id;
957 
958 END   Get_Customer_From_ContactNum;
959 
960 ------------------------------------------------------------------------------
961 --  Function	: reverse_number
962 --  Usage	: Used to get reverse number for the number passed to function
963 --  Description	: This function is built to reverse the number passed to it.
964 --		  This function can be used instead of the standard REVERSE
965 --		  function because the REVERSE fucntion cannot be used in PL/
966 --  Parameters	:
967 --	p_phone_number  IN	VARCHAR2(1996)	Required
968 --
969 --  Return	: VARCHAR2
970 -----------------------------------------------------------------------------
971 FUNCTION reverse_number(p_phone_number VARCHAR2)
972 RETURN VARCHAR2
973 IS
974   l_filtered_number     VARCHAR2(2000);
975   l_ret_number  VARCHAR2(2000);
976   l_changed_number  VARCHAR2(2000);
977 
978 BEGIN
979 
980   l_filtered_number := translate(
981     p_phone_number,
982     '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz()- .+''~`\/@#$^&*_,|}{[]?<>=";:',
983     '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz');
984 
985   IF l_filtered_number IS NULL OR l_filtered_number='' THEN
986     RETURN NULL;
987   END IF;
988   IF length(l_filtered_number) > 0 THEN
989     FOR I IN REVERSE 1..length(l_filtered_number) LOOP
990       l_ret_number := l_ret_number || substr(l_filtered_number,I,1);
991     END LOOP;
992     FOR I IN 1..length(l_ret_number) LOOP
993         l_filtered_number := substr(l_ret_number,I,1);
994         select decode(upper(l_filtered_number),'A','2','B','2','C','2',
995                                           'D','3','E','3','F','3',
996                                           'G','4','H','4','I','4',
997                                           'J','5','K','5','L','5',
998                                           'M','6','N','6','O','6',
999                                           'P','7','Q','7','R','7','S','7',
1000                                           'T','8','U','8','V','8',
1001                                           'W','9','X','9','Y','9','Z','9',l_filtered_number) into l_filtered_number from dual;
1002         l_changed_number := l_changed_number||l_filtered_number;
1003 
1004     END LOOP;
1005     l_ret_number := l_changed_number;
1006   END IF;
1007 
1008   RETURN l_ret_number;
1009 END reverse_number;
1010 
1011 
1012 
1013 ------------------------------------------------------------------------------
1014 --  Function	: Get_Customer_From_Reverse_ANI
1015 --  Usage	: Used to get the party ID from the reversed ANI Number passed in the IVR parms
1016 --  Description	: This function retrieves a owner_table_id from the
1017 --		  HZ_CONTACT_POINTS
1018 --		  If there is more than one party_id associated with the given ContactNum
1019 --		  this function will return the first party_id that it retrieves.
1020 --  Parameters	:
1021 --	p_rANI  IN	VARCHAR2(1996)	Required
1022 --
1023 --  Return	: NUMBER
1024 --		  If there is no party_id associated with the given ContactNum
1025 --		  this function returns NULL.
1026 ------------------------------------------------------------------------------
1027 FUNCTION get_customer_from_reverse_ANI(p_rANI IN VARCHAR2,
1028                                        x_uwq_multi_record_match OUT NOCOPY VARCHAR2,
1029                                        x_phone_id OUT NOCOPY NUMBER )
1030 RETURN NUMBER
1031 IS
1032         l_phone_num 	VARCHAR2(30):=NULL;
1033         l_party_id  	NUMBER:=NULL;
1034         l_phone_id  	NUMBER:=NULL;
1035         l_rANI      	VARCHAR2(30):=NULL;
1036 	l_stripped_rANI VARCHAR2(30):= NULL;
1037         n_use_exact_ani VARCHAR2(2);
1038 --
1039         CURSOR transpose_phone_cur IS
1040                 SELECT transposed_phone_number, owner_table_id, contact_point_id
1041                 FROM hz_contact_points
1042                 WHERE transposed_phone_number LIKE l_rANI
1043                 AND owner_table_name = 'HZ_PARTIES'
1044                 ORDER BY last_update_date DESC;
1045 
1046 BEGIN
1047         IF p_rANI IS NULL THEN
1048            RETURN to_number(NULL);
1049         END IF;
1050 
1051         fnd_profile.get('CSC_CUSTOMER_FROM_EXACT_ANI',n_use_exact_ani);
1052         IF NVL(n_use_exact_ani,'Y') = 'Y' THEN
1053            l_rANI := p_rANI||'%';
1054            OPEN transpose_phone_cur;
1055            LOOP
1056              IF transpose_phone_cur%NOTFOUND THEN
1057                 EXIT;
1058              END IF;
1059              FETCH transpose_phone_cur INTO l_phone_num, l_party_id, l_phone_id;
1060            END LOOP;
1061            IF transpose_phone_cur%ROWCOUNT > 1 THEN
1062               CLOSE transpose_phone_cur;
1063               x_uwq_multi_record_match := '"MULTIPLE_PHONE_NUMBERS"';
1064               x_phone_id := l_phone_id;
1065               RETURN to_number(NULL);
1066            END IF;
1067            CLOSE transpose_phone_cur;
1068            x_phone_id := l_phone_id;
1069            RETURN l_party_id;
1070         ELSE
1071            l_stripped_rANI := SUBSTR(p_rANI,1, LENGTH(p_rANI)-1);
1072 	   l_rANI := l_stripped_rANI||'%';
1073            OPEN transpose_phone_cur;
1074            LOOP
1075              IF transpose_phone_cur%NOTFOUND THEN
1076                 EXIT;
1077              END IF;
1078              FETCH transpose_phone_cur INTO l_phone_num, l_party_id, l_phone_id;
1079            END LOOP;
1080            IF transpose_phone_cur%ROWCOUNT > 1 THEN
1081               CLOSE transpose_phone_cur;
1082               x_uwq_multi_record_match := '"MULTIPLE_PHONE_NUMBERS" uwq_stripped_reverse_ani="'||l_stripped_rANI||'"';
1083               x_phone_id := l_phone_id;
1084               RETURN to_number(NULL);
1085            END IF;
1086            CLOSE transpose_phone_cur;
1087            x_phone_id := l_phone_id;
1088            RETURN l_party_id;
1089         END IF;
1090 END;
1091 
1092 --------------------------------------------------------------------------
1093 --
1094 ------------------------------------------------------------------------------
1095 --  Procedure	: Get_Cust_Acct_From_Account_Num
1096 --  Usage	: Used to get Party_id,Cust_account_id,last_update_date from
1097 --		  hz_cust_accounts
1098 --  Parameters	:
1099 --	p_customer_account_number	IN	VARCHAR2(30)	Required
1100 --	x_party_id			OUT NOCOPY	NUMBER(15)
1101 --	x_cust_account_id		OUT NOCOPY	NUMBER(15)
1102 --	x_last_update_date		OUT NOCOPY	DATE
1103 --
1104 ------------------------------------------------------------------------------
1105 
1106 PROCEDURE Get_Cust_Acct_From_Account_Num
1107 ( p_cust_acct_number IN VARCHAR2,
1108   x_party_id OUT NOCOPY NUMBER,
1109   x_cust_account_id OUT NOCOPY NUMBER,
1110   x_last_update_date OUT NOCOPY DATE) IS
1111 
1112     CURSOR c_party_id (anum  VARCHAR2) IS
1113       SELECT party_id,cust_account_id,last_update_date
1114       FROM   hz_cust_accounts
1115       WHERE  account_number = anum;
1116 BEGIN
1117 
1118     OPEN c_party_id (p_cust_acct_number);
1119     FETCH c_party_id INTO x_party_id,x_cust_account_id,x_last_update_date;
1120     CLOSE c_party_id;
1121 
1122 END Get_Cust_Acct_From_Account_Num;
1123 
1124 ------------------------------------------------------------------------------
1125 --  Function    : Get_Party_Name_From_Party_id
1126 --  Usage       : used to lookup customer name to pass over to softphone
1127 --  Parameters  :
1128 --      p_party_id                    IN  NOCOPY NUMBER
1129 --
1130 --  Returns     :
1131 --      party_name varchar2(1996)
1132 ------------------------------------------------------------------------------
1133 
1134 FUNCTION Get_Party_Name_From_Party_id
1135 (p_party_id IN number)
1136 Return varchar2 IS
1137 
1138 x_party_name varchar2(1996);
1139 
1140 BEGIN
1141    IF p_party_id IS NOT NULL THEN
1142       BEGIN
1143          SELECT party_name
1144            INTO x_party_name
1145            FROM hz_parties
1146           WHERE party_id = p_party_id;
1147 	 EXCEPTION WHEN NO_DATA_FOUND THEN
1148 	    x_party_name := 'NOTFOUND';
1149 	    return x_party_name;
1150 	 END;
1151    END IF;
1152 
1153    return x_party_name;
1154 END;
1155 
1156 ------------------------------------------------------------------------------
1157 --  Procedure   : CSC_Customer_Lookup
1158 --  Usage       : OTM will make a call to this API for customer lookup
1159 --  Parameters  :
1160 --      p_media_data                    IN OUT   NOCOPY  CCT_KEY_VALUE_LIST
1161 --
1162 ------------------------------------------------------------------------------
1163 PROCEDURE CSC_Customer_Lookup
1164 ( p_media_data IN OUT NOCOPY cct_keyvalue_varr) IS
1165 
1166    l_customer_num              varchar2(100);
1167    l_contact_num               varchar2(100);
1168    l_contract_num              varchar2(240);
1169    l_sr_num                    varchar2(240);
1170    l_order_num                 varchar2(240);
1171    l_invoice_num               varchar2(240);
1172    l_system                    varchar2(240);
1173    l_ssn                       varchar2(240);
1174    l_rma_num                   varchar2(240);
1175    l_system_name               varchar2(240);
1176    l_tag_num                   varchar2(240);
1177    l_country_code              varchar2(100);
1178    l_area_code                 varchar2(100);
1179    l_phone_num                 varchar2(100);
1180    l_complete_phone_num        varchar2(100);
1181    l_serial_num                varchar2(100);
1182    l_rma                       varchar2(100);
1183    l_ani                       varchar2(100);
1184    l_int_id                    varchar2(100);
1185    l_account_code              varchar2(100);
1186    l_screen_pop_action         varchar2(100);
1187    l_media_item_id             varchar2(100);
1188    l_dnis                      varchar2(100);
1189    l_event_name                varchar2(100);
1190    l_agent                     varchar2(100);
1191    l_media_type                varchar2(100);
1192    l_callID                    varchar2(100);
1193    l_sender_name               varchar2(100);
1194    l_cust_prod_id              varchar2(100);
1195    l_inv_item_id               varchar2(100);
1196    l_emp_id                    varchar2(100);
1197    l_lot_num                   varchar2(100);
1198    l_po_num                    varchar2(100);
1199    l_quote_num                 varchar2(100);
1200    l_instance_name             varchar2(100);
1201    l_workitemID                varchar2(100);
1202    x_exist_flag                varchar2(1);
1203    l_put_result                varchar2(256);
1204    l_phone_passed_flag         varchar2(1):='N';
1205    l_email_cust_id             number;
1206    l_rphone                    varchar2(1996);
1207    l_uwq_multi_record_match    varchar2(2000);
1208    l_phone_id                  number;
1209    l_customer_id               number;
1210    l_match                     varchar2(1):='0';
1211    l_cust_account_id           number;
1212    l_acct_last_update_date     date;
1213    l_hdr_info_tbl              CSC_SERVICE_KEY_PVT.HDR_info_tbl_type;
1214 
1215    --Variables used only for transfer/conference values
1216    l_xfer_action_id            NUMBER;
1217    l_xfer_interaction_id       NUMBER;
1218    l_xfer_service_key_name     VARCHAR2(40);
1219    l_xfer_service_key_value    VARCHAR2(240);
1220    l_xfer_call_reason          VARCHAR2(40);
1221    l_party_id                  NUMBER;
1222    l_xfer_cust_party_id        NUMBER;
1223    l_xfer_rel_party_id         NUMBER;
1224    l_xfer_per_party_id         NUMBER;
1225    l_xfer_cust_phone_id        NUMBER;
1226    l_xfer_cust_email_id        NUMBER;
1227    l_xfer_rel_phone_id         NUMBER;
1228    l_xfer_rel_email_id         NUMBER;
1229    l_xfer_cust_account_id      NUMBER;
1230    l_trans_conf_flag           VARCHAR2(1) := 'N';
1231    l_processed_flag            VARCHAR2(1) := 'Y';
1232    n_use_exact_ani             VARCHAR2(3) := 'Y';
1233    l_stripped_rANI             VARCHAR2(50):= null;
1234 
1235    l_instance_num              varchar2(100);
1236    l_customer_name             varchar2(1996);
1237 
1238    l_done_it                   varchar2(10);
1239 BEGIN
1240    /*--New Flag to prevent this new lookup to be called again
1241    l_done_it      := cct_collection_util_pub.get(p_media_data, 'DONE_IT',x_exist_flag);
1242 
1243    IF nvl(l_done_it,'NO') = 'DONE' AND x_exist_flag = 'Y' THEN
1244       --Went thru the parsing already, no need to go again.
1245       RETURN;
1246    END IF;
1247    */
1248 
1249    l_xfer_action_id := cct_collection_util_pub.get(p_media_data, 'ActionID',x_exist_flag);
1250    IF l_xfer_action_id is not null AND x_exist_flag = 'Y' THEN
1251       l_trans_conf_flag := 'Y';
1252    END IF;
1253    l_xfer_interaction_id      := cct_collection_util_pub.get(p_media_data, 'INTERACTION_ID',x_exist_flag);
1254    l_xfer_service_key_name    := cct_collection_util_pub.get(p_media_data, 'SERVICE_KEY_NAME',x_exist_flag);
1255    l_xfer_service_key_value   := cct_collection_util_pub.get(p_media_data, 'SERVICE_KEY_VALUE',x_exist_flag);
1256    l_xfer_call_reason         := cct_collection_util_pub.get(p_media_data, 'CALL_REASON',x_exist_flag);
1257    l_xfer_cust_party_id       := cct_collection_util_pub.get(p_media_data, 'CUST_PARTY_ID',x_exist_flag);
1258    l_xfer_rel_party_id        := cct_collection_util_pub.get(p_media_data, 'REL_PARTY_ID',x_exist_flag);
1259    l_xfer_per_party_id        := cct_collection_util_pub.get(p_media_data, 'PER_PARTY_ID',x_exist_flag);
1260    l_xfer_cust_phone_id       := cct_collection_util_pub.get(p_media_data, 'CUST_PHONE_ID',x_exist_flag);
1261    l_xfer_cust_email_id       := cct_collection_util_pub.get(p_media_data, 'CUST_EMAIL_ID',x_exist_flag);
1262    l_xfer_rel_phone_id        := cct_collection_util_pub.get(p_media_data, 'REL_PHONE_ID',x_exist_flag);
1263    l_xfer_rel_email_id        := cct_collection_util_pub.get(p_media_data, 'REL_EMAIL_ID',x_exist_flag);
1264    l_xfer_cust_account_id     := cct_collection_util_pub.get(p_media_data, 'CUST_ACCOUNT_ID',x_exist_flag);
1265    l_party_id                 := cct_collection_util_pub.get(p_media_data, 'PARTY_ID',x_exist_flag);
1266    IF l_party_id is not null AND x_exist_flag = 'Y' THEN
1267       l_customer_id := l_party_id;
1268    END IF;
1269 
1270    l_customer_num             := cct_collection_util_pub.get(p_media_data, 'CustomerNum',x_exist_flag);
1271    l_contact_num              := cct_collection_util_pub.get(p_media_data, 'ContactNum', x_exist_flag);
1272    l_account_code             := cct_collection_util_pub.get(p_media_data, 'AccountCode', x_exist_flag);
1273    l_contract_num             := cct_collection_util_pub.get(p_media_data, 'ContractNum', x_exist_flag);
1274    l_invoice_num              := cct_collection_util_pub.get(p_media_data, 'InvoiceNum', x_exist_flag);
1275    l_order_num                := cct_collection_util_pub.get(p_media_data, 'OrderNum',  x_exist_flag);
1276    l_ssn                      := cct_collection_util_pub.get(p_media_data, 'SocialSecurityNumber', x_exist_flag);
1277    l_rma_num                  := cct_collection_util_pub.get(p_media_data, 'RMANum', x_exist_flag);
1278    l_serial_num               := cct_collection_util_pub.get(p_media_data, 'SerialNum', x_exist_flag);
1279    l_sr_num                   := cct_collection_util_pub.get(p_media_data, 'ServiceRequestNum', x_exist_flag);
1280    l_instance_name            := cct_collection_util_pub.get(p_media_data, 'InstanceName', x_exist_flag);
1281    l_instance_num             := cct_collection_util_pub.get(p_media_data, 'InstanceNum', x_exist_flag);
1282    l_tag_num                  := cct_collection_util_pub.get(p_media_data, 'TagNumber', x_exist_flag);
1283    l_system_name              := cct_collection_util_pub.get(p_media_data, 'SystemName', x_exist_flag);
1284 
1285 
1286    --Set service key name and value based on the hierarchy specified in SRD
1287    if l_customer_id is not null then
1288       --p_action_param := p_action_param||'uwq_party_id="'||l_customer_id||'"';
1289       l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerID',l_customer_id);
1290       l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'PARTY_ID',l_customer_id);
1291       l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'WhichIVR','PartyID');
1292       --this fix is for user who uses default or custom lookup, even when l_customer_id is not null
1293       --it will still check for service key value pairs
1294       if (l_sr_num is null) AND
1295          (l_instance_name is null) AND
1296          (l_instance_num is null) AND
1297          (l_serial_num is null) AND
1298          (l_tag_num is null) AND
1299          (l_system_name is null) AND
1300          (l_rma_num is null) AND
1301          (l_order_num is null) AND
1302          (l_ssn is null) AND
1303          (l_contract_num is null) AND
1304          (l_invoice_num is null) THEN
1305          l_match := 1;
1306          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'MatchFlag',l_match);
1307          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'ProcessedFlag',l_processed_flag);
1308     --     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'DONE_IT','DONE');
1309 
1310          --Resolve party_name from party_id
1311          l_customer_name := get_party_name_from_party_id(l_customer_id);
1312 	    IF l_customer_name <> 'NOTFOUND' THEN
1313             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerName',l_customer_name);
1314 	    END IF;
1315          RETURN;
1316       end if;
1317    end if;
1318 
1319    l_country_code             := cct_collection_util_pub.get(p_media_data, 'CountryCode', x_exist_flag);
1320    if x_exist_flag = 'Y'  then
1321       l_phone_passed_flag := 'Y';
1322    end if;
1323    l_area_code := cct_collection_util_pub.get(p_media_data, 'AreaCode', x_exist_flag);
1324    if x_exist_flag = 'Y' then
1325       l_phone_passed_flag := 'Y';
1326    end if;
1327    l_phone_num := cct_collection_util_pub.get(p_media_data, 'PhoneNumber', x_exist_flag);
1328    if x_exist_flag = 'Y' then
1329       l_phone_passed_flag := 'Y';
1330    end if;
1331    l_screen_pop_action        := cct_collection_util_pub.get(p_media_data, 'occtScreenPopAction', x_exist_flag);
1332    l_ani                      := cct_collection_util_pub.get(p_media_data, 'occtANI', x_exist_flag);
1333    l_media_item_id            := cct_collection_util_pub.get(p_media_data, 'occtMediaItemID', x_exist_flag);
1334    l_event_name               := cct_collection_util_pub.get(p_media_data, 'occtEventName', x_exist_flag);
1335    l_agent                    := cct_collection_util_pub.get(p_media_data, 'occtAgentID', x_exist_flag);
1336    l_dnis                     := cct_collection_util_pub.get(p_media_data, 'occtDNIS', x_exist_flag);
1337    l_workitemID               := cct_collection_util_pub.get(p_media_data, 'workItemID', x_exist_flag);
1338    l_media_type               := cct_collection_util_pub.get(p_media_data, 'occtMediaType', x_exist_flag);
1339    l_callID                   := cct_collection_util_pub.get(p_media_data, 'occtCallID', x_exist_flag);
1340    l_sender_name              := cct_collection_util_pub.get(p_media_data, 'oiemSenderName', x_exist_flag);
1341    if x_exist_flag = 'Y' and l_sender_name is not null then
1342       l_email_cust_id := csc_routing_utl.Get_Customer_from_Email(l_sender_name);
1343    end if;
1344    l_cust_prod_id             := cct_collection_util_pub.get(p_media_data, 'CustomerProductID', x_exist_flag);
1345    l_inv_item_id              := cct_collection_util_pub.get(p_media_data, 'InventoryItemID', x_exist_flag);
1346    l_emp_id                   := cct_collection_util_pub.get(p_media_data, 'employeeID', x_exist_flag);
1347    l_lot_num                  := cct_collection_util_pub.get(p_media_data, 'LotNum', x_exist_flag);
1348    l_po_num                   := cct_collection_util_pub.get(p_media_data, 'PurchaseOrderNum', x_exist_flag);
1349    l_quote_num                := cct_collection_util_pub.get(p_media_data, 'QuoteNum', x_exist_flag);
1350 
1351 
1352 /*
1353       --First preference is given to user hook.
1354    IF JTF_USR_HKS.OK_TO_EXECUTE('CSC_UWQ_FORM_ROUTE', 'CSC_UWQ_FORM_OBJ', 'B', 'C') THEN
1355       l_customer_id := NULL;
1356       l_cust_account_id := NULL;
1357       l_phone_id := NULL;
1358 
1359       --calling R12 user hook signature
1360       CSC_UWQ_FORM_ROUTE_CUHK.CSC_UWQ_FORM_OBJ_PRE(p_media_data      => p_media_data,
1361                                                    x_party_id        => l_customer_id,
1362                                                    x_cust_account_id => l_cust_account_id,
1363                                                    x_phone_id        => l_phone_id);
1364 
1365 
1366       If l_customer_id is not null THEN
1367          --append l_customer_id back to p_media_data
1368          --p_action_param := p_action_param||'uwq_party_id="'||l_customer_id||'"';
1369       End if;
1370       If l_cust_account_id is not null Then
1371          --append l_cust_account_id back to p_media_data
1372          --p_action_param := p_action_param||'uwq_cust_account_id="'||l_cust_account_id ||'"';      End If;
1373       End if;
1374       If l_phone_id is not null Then
1375          --append l_phone_id back to p_media_data
1376          --p_action_param := p_action_param||'uwq_phone_id="'||l_phone_id ||'"';
1377       End If;
1378       RETURN;
1379    ELSE
1380 
1381 
1382       IF (l_trans_conf_flag = 'Y') THEN
1383       --This IF condition is added to fix bug 3773311. It is specific to xfr between
1384       --telesales and cc.
1385          IF (l_xfer_cust_party_id is not null) AND
1386             (l_xfer_rel_party_id is not null) AND
1387             (l_xfer_cust_party_id = l_xfer_rel_party_id) AND
1388             (l_xfer_cust_party_id <> nvl(l_xfer_per_party_id,-1)) THEN
1389 
1390             --since this is a xfr call from ebc, all search keys would needed to be initialized
1391             --to avoid any confusion.
1392             l_sr_num := null;
1393             l_instance_name := null;
1394             l_instance_num := null;
1395             l_serial_num := null;
1396             l_tag_num := null;
1397             l_system_name := null;
1398             l_rma_num := null;
1399             l_order_num := null;
1400             l_ssn := null;
1401             l_contract_num := null;
1402             l_invoice_num := null;
1403 
1404             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'FromEBC','Y');
1405             --foo needs to clear out uwq_service_key_name and value
1406          ELSE
1407             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'FromEBC','N');
1408             --foo needs to append all the xfr params to p_action_param
1409          END IF;
1410       END IF;
1411 
1412 */
1413 
1414       --Service Key gets priority
1415       if l_sr_num is not null then
1416          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'WhichIVR','SR');
1417 
1418          --call anand lookup to search for sr num
1419          CSC_SERVICE_KEY_PVT.service_key_search(p_skey_name =>  'SERVICE_REQUEST_NUMBER',
1420                                                 p_skey_value =>  l_sr_num,
1421                                                 x_hdr_info_tbl => l_hdr_info_tbl);
1422          IF (l_hdr_info_tbl.count = 0) THEN
1423             l_match := '0';
1424          ELSIF (l_hdr_info_tbl.count = 1) THEN
1425             l_match := '1';
1426             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerID',l_hdr_info_tbl(1).cust_party_id);
1427 
1428             IF l_hdr_info_tbl(1).rel_party_id is not null THEN
1429                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'SKEY_rel_party_id',l_hdr_info_tbl(1).rel_party_id);
1430 
1431                l_customer_name := get_party_name_from_party_id(l_hdr_info_tbl(1).rel_party_id);
1432                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerName',l_customer_name);
1433             END IF;
1434 
1435             IF l_hdr_info_tbl(1).cust_party_id is not null THEN
1436                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'PARTY_ID',l_hdr_info_tbl(1).cust_party_id);
1437 
1438                IF l_customer_name IS NULL THEN
1439                   l_customer_name := get_party_name_from_party_id(l_hdr_info_tbl(1).cust_party_id);
1440                   l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerName',l_customer_name);
1441                END IF;
1442             END IF;
1443 
1444             IF l_hdr_info_tbl(1).employee_id is not null THEN
1445                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'employeeID',l_hdr_info_tbl(1).employee_id);
1446             END IF;
1447 
1448             IF l_hdr_info_tbl(1).cust_phone_id is not null THEN
1449                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'SKEY_cust_phone_id',l_hdr_info_tbl(1).cust_phone_id);
1450             END IF;
1451 
1452             IF l_hdr_info_tbl(1).account_id is not null THEN
1453                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'SKEY_account_id',l_hdr_info_tbl(1).account_id);
1454             END IF;
1455 
1456             IF l_hdr_info_tbl(1).rel_phone_id is not null THEN
1457                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'SKEY_rel_phone_id',l_hdr_info_tbl(1).rel_phone_id);
1458             END IF;
1459 
1460             IF l_hdr_info_tbl(1).per_party_id is not null THEN
1461                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'SKEY_per_party_id',l_hdr_info_tbl(1).per_party_id);
1462             END IF;
1463 
1464             IF l_hdr_info_tbl(1).rel_email_id is not null THEN
1465                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'SKEY_rel_email_id',l_hdr_info_tbl(1).rel_email_id);
1466             END IF;
1467 
1468             IF l_hdr_info_tbl(1).cust_email_id is not null THEN
1469                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'SKEY_cust_email_id',l_hdr_info_tbl(1).cust_email_id);
1470             END IF;
1471 
1472             --bug 5640146
1473             --passing service_key_id
1474 		  IF l_hdr_info_tbl(1).service_key_id IS NOT NULL THEN
1475 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'service_key_id',l_hdr_info_tbl(1).service_key_id);
1476 		  END IF;
1477 
1478 		  --passing org_id
1479 		  IF l_hdr_info_tbl(1).org_id IS NOT NULL THEN
1480 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_skey_org_id',l_hdr_info_tbl(1).org_id);
1481 		  END IF;
1482             --end of bug 5640146
1483 
1484          ELSE --(l_hdr_info_tbl.count > 1) THEN
1485             l_match := 'M';
1486             --remember to append the SR # to the p_action_str in foo
1487          END IF;
1488          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'MatchFlag',l_match);
1489          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'ProcessedFlag',l_processed_flag);
1490         -- l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'DONE_IT','DONE');
1491          RETURN;
1492       elsif l_emp_id is not null then
1493          l_match := '0';
1494          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'WhichIVR','Employee');
1495          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'employeeID',l_emp_id);
1496          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'ProcessedFlag',l_processed_flag);
1497          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'MatchFlag',l_match);
1498        --  l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'DONE_IT','DONE');
1499          RETURN;
1500       elsif l_instance_name is not null then
1501          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'WhichIVR','InstanceName');
1502 
1503          --call anand lookup to search for instance name
1504          CSC_SERVICE_KEY_PVT.service_key_search(p_skey_name =>  'INSTANCE_NAME',
1505                                                 p_skey_value =>  l_instance_name,
1506                                                 x_hdr_info_tbl => l_hdr_info_tbl);
1507           IF (l_hdr_info_tbl.count = 0) THEN
1508             l_match := '0';
1509          ELSIF (l_hdr_info_tbl.count = 1) THEN
1510             l_match := '1';
1511             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerID',l_hdr_info_tbl(1).cust_party_id);
1512             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'PARTY_ID',l_hdr_info_tbl(1).cust_party_id);
1513 
1514             --must check if account_id is null before setting.
1515             IF l_hdr_info_tbl(1).account_id IS NOT NULL THEN
1516                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'SKEY_account_id',l_hdr_info_tbl(1).account_id);
1517 		  END IF;
1518 
1519             --bug 5640146
1520             --passing service_key_id
1521 		  IF l_hdr_info_tbl(1).service_key_id IS NOT NULL THEN
1522 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'service_key_id',l_hdr_info_tbl(1).service_key_id);
1523 		  END IF;
1524 
1525 		  --passing org_id
1526 		  IF l_hdr_info_tbl(1).org_id IS NOT NULL THEN
1527 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_skey_org_id',l_hdr_info_tbl(1).org_id);
1528 		  END IF;
1529             --end of bug 5640146
1530 
1531             --Resolve party_name from party_id
1532             l_customer_name := get_party_name_from_party_id(l_hdr_info_tbl(1).cust_party_id);
1533             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerName',l_customer_name);
1534          ELSE --(l_hdr_info_tbl.count > 1) THEN
1535             l_match := 'M';
1536             --remember to append the instance name to the p_action_str in foo
1537          END IF;
1538             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'MatchFlag',l_match);
1539             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'ProcessedFlag',l_processed_flag);
1540           --  l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'DONE_IT','DONE');
1541             RETURN;
1542       elsif l_instance_num is not null then
1543          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'WhichIVR','InstanceNum');
1544 
1545          --call anand lookup to search for instance num
1546          CSC_SERVICE_KEY_PVT.service_key_search(p_skey_name =>  'INSTANCE_NUMBER',
1547                                                 p_skey_value =>  l_instance_num,
1548                                                 x_hdr_info_tbl => l_hdr_info_tbl);
1549           IF (l_hdr_info_tbl.count = 0) THEN
1550             l_match := '0';
1551          ELSIF (l_hdr_info_tbl.count = 1) THEN
1552             l_match := '1';
1553             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerID',l_hdr_info_tbl(1).cust_party_id);
1554             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'PARTY_ID',l_hdr_info_tbl(1).cust_party_id);
1555 
1556             --must check if account_id is null before setting.
1557 	       IF l_hdr_info_tbl(1).account_id IS NOT NULL THEN
1558                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'SKEY_account_id',l_hdr_info_tbl(1).account_id);
1559 	       END IF;
1560 
1561             --bug 5640146
1562             --passing service_key_id
1563 		  IF l_hdr_info_tbl(1).service_key_id IS NOT NULL THEN
1564 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'service_key_id',l_hdr_info_tbl(1).service_key_id);
1565 		  END IF;
1566 
1567 		  --passing org_id
1568 		  IF l_hdr_info_tbl(1).org_id IS NOT NULL THEN
1569 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_skey_org_id',l_hdr_info_tbl(1).org_id);
1570 		  END IF;
1571             --end of bug 5640146
1572 
1573             --Resolve party_name from party_id
1574             l_customer_name := get_party_name_from_party_id(l_hdr_info_tbl(1).cust_party_id);
1575             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerName',l_customer_name);
1576          ELSE --(l_hdr_info_tbl.count > 1) THEN
1577             l_match := 'M';
1578          END IF;
1579             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'MatchFlag',l_match);
1580             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'ProcessedFlag',l_processed_flag);
1581            -- l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'DONE_IT','DONE');
1582             RETURN;
1583       elsif l_serial_num is not null then
1584          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'WhichIVR','SerialNum');
1585 
1586          --call anand lookup to search for serial num
1587          CSC_SERVICE_KEY_PVT.service_key_search(p_skey_name =>  'SERIAL_NUMBER',
1588                                                 p_skey_value =>  l_serial_num,
1589                                                 x_hdr_info_tbl => l_hdr_info_tbl);
1590           IF (l_hdr_info_tbl.count = 0) THEN
1591             l_match := '0';
1592          ELSIF (l_hdr_info_tbl.count = 1) THEN
1593             l_match := '1';
1594             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerID',l_hdr_info_tbl(1).cust_party_id);
1595             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'PARTY_ID',l_hdr_info_tbl(1).cust_party_id);
1596 
1597             --must check if account_id is null before setting.
1598 		  IF l_hdr_info_tbl(1).account_id IS NOT NULL THEN
1599                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'SKEY_account_id',l_hdr_info_tbl(1).account_id);
1600 	       END IF;
1601 
1602             --bug 5640146
1603             --passing service_key_id
1604 		  IF l_hdr_info_tbl(1).service_key_id IS NOT NULL THEN
1605 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'service_key_id',l_hdr_info_tbl(1).service_key_id);
1606 		  END IF;
1607 
1608 		  --passing org_id
1609 		  IF l_hdr_info_tbl(1).org_id IS NOT NULL THEN
1610 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_skey_org_id',l_hdr_info_tbl(1).org_id);
1611 		  END IF;
1612             --end of bug 5640146
1613 
1614             --Resolve party_name from party_id
1615             l_customer_name := get_party_name_from_party_id(l_hdr_info_tbl(1).cust_party_id);
1616             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerName',l_customer_name);
1617          ELSE --(l_hdr_info_tbl.count > 1) THEN
1618             l_match := 'M';
1619             --remember to append the serial # to the p_action_str in foo
1620          END IF;
1621             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'MatchFlag',l_match);
1622             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'ProcessedFlag',l_processed_flag);
1623             --l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'DONE_IT','DONE');
1624             RETURN;
1625       elsif l_tag_num is not null then
1626          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'WhichIVR','TagNum');
1627 
1628          --call anand lookup to search for tag num
1629          CSC_SERVICE_KEY_PVT.service_key_search(p_skey_name =>  'EXTERNAL_REFERENCE',
1630                                                 p_skey_value =>  l_tag_num,
1631                                                 x_hdr_info_tbl => l_hdr_info_tbl);
1632           IF (l_hdr_info_tbl.count = 0) THEN
1633             l_match := '0';
1634          ELSIF (l_hdr_info_tbl.count = 1) THEN
1635             l_match := '1';
1636             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerID',l_hdr_info_tbl(1).cust_party_id);
1637             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'PARTY_ID',l_hdr_info_tbl(1).cust_party_id);
1638 
1639             --must check if account_id is null before setting.
1640 	       IF l_hdr_info_tbl(1).account_id IS NOT NULL THEN
1641                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'SKEY_account_id',l_hdr_info_tbl(1).account_id);
1642 	       END IF;
1643 
1644             --bug 5640146
1645             --passing service_key_id
1646 		  IF l_hdr_info_tbl(1).service_key_id IS NOT NULL THEN
1647 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'service_key_id',l_hdr_info_tbl(1).service_key_id);
1648 		  END IF;
1649 
1650 		  --passing org_id
1651 		  IF l_hdr_info_tbl(1).org_id IS NOT NULL THEN
1652 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_skey_org_id',l_hdr_info_tbl(1).org_id);
1653 		  END IF;
1654             --end of bug 5640146
1655 
1656             --Resolve party_name from party_id
1657             l_customer_name := get_party_name_from_party_id(l_hdr_info_tbl(1).cust_party_id);
1658             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerName',l_customer_name);
1659          ELSE --(l_hdr_info_tbl.count > 1) THEN
1660             l_match := 'M';
1661             --remember to append the tag # to the p_action_str in foo
1662          END IF;
1663             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'MatchFlag',l_match);
1664             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'ProcessedFlag',l_processed_flag);
1665            -- l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'DONE_IT','DONE');
1666             RETURN;
1667       elsif l_system_name is not null then
1668          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'WhichIVR','SystemName');
1669 
1670                            --call anand lookup to search for system name
1671          CSC_SERVICE_KEY_PVT.service_key_search(p_skey_name =>  'SYSTEM_NUMBER',
1672                                                 p_skey_value =>  l_system_name,
1673                                                 x_hdr_info_tbl => l_hdr_info_tbl);
1674           IF (l_hdr_info_tbl.count = 0) THEN
1675             l_match := '0';
1676          ELSIF (l_hdr_info_tbl.count = 1) THEN
1677             l_match := '1';
1678             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerID',l_hdr_info_tbl(1).cust_party_id);
1679             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'PARTY_ID',l_hdr_info_tbl(1).cust_party_id);
1680 
1681             --must check if account_id is null before setting.
1682             IF l_hdr_info_tbl(1).account_id IS NOT NULL THEN
1683                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'SKEY_account_id',l_hdr_info_tbl(1).account_id);
1684 		  END IF;
1685 
1686             --bug 5640146
1687             --passing service_key_id
1688 		  IF l_hdr_info_tbl(1).service_key_id IS NOT NULL THEN
1689 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'service_key_id',l_hdr_info_tbl(1).service_key_id);
1690 		  END IF;
1691 
1692 		  --passing org_id
1693 		  IF l_hdr_info_tbl(1).org_id IS NOT NULL THEN
1694 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_skey_org_id',l_hdr_info_tbl(1).org_id);
1695 		  END IF;
1696             --end of bug 5640146
1697 
1698             --Resolve party_name from party_id
1699             l_customer_name := get_party_name_from_party_id(l_hdr_info_tbl(1).cust_party_id);
1700             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerName',l_customer_name);
1701          ELSE --(l_hdr_info_tbl.count > 1) THEN
1702             l_match := 'M';
1703             --remember to append the system # to the p_action_str in foo
1704          END IF;
1705             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'MatchFlag',l_match);
1706             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'ProcessedFlag',l_processed_flag);
1707          --   l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'DONE_IT','DONE');
1708             RETURN;
1709       elsif l_rma_num is not null then
1710          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'WhichIVR','RMANum');
1711 
1712          --call anand lookup to search for rma num
1713          CSC_SERVICE_KEY_PVT.service_key_search(p_skey_name =>  'RMA_NUMBER',
1714                                                 p_skey_value =>  l_rma_num,
1715                                                 x_hdr_info_tbl => l_hdr_info_tbl);
1716           IF (l_hdr_info_tbl.count = 0) THEN
1717             l_match := '0';
1718          ELSIF (l_hdr_info_tbl.count = 1) THEN
1719             l_match := '1';
1720             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerID',l_hdr_info_tbl(1).cust_party_id);
1721             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'PARTY_ID',l_hdr_info_tbl(1).cust_party_id);
1722 
1723             --must check if account_id is null before setting.
1724             IF l_hdr_info_tbl(1).account_id IS NOT NULL THEN
1725                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'SKEY_account_id',l_hdr_info_tbl(1).account_id);
1726 		  END IF;
1727 
1728             --bug 5640146
1729             --passing service_key_id
1730 		  IF l_hdr_info_tbl(1).service_key_id IS NOT NULL THEN
1731 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'service_key_id',l_hdr_info_tbl(1).service_key_id);
1732 		  END IF;
1733 
1734 		  --passing org_id
1735 		  IF l_hdr_info_tbl(1).org_id IS NOT NULL THEN
1736 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_skey_org_id',l_hdr_info_tbl(1).org_id);
1737 		  END IF;
1738             --end of bug 5640146
1739 
1740             --Resolve party_name from party_id
1741             l_customer_name := get_party_name_from_party_id(l_hdr_info_tbl(1).cust_party_id);
1742             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerName',l_customer_name);
1743          ELSE --(l_hdr_info_tbl.count > 1) THEN
1744             l_match := 'M';
1745             --remember to append the rma # to the p_action_str in foo
1746          END IF;
1747             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'MatchFlag',l_match);
1748             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'ProcessedFlag',l_processed_flag);
1749           --  l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'DONE_IT','DONE');
1750             RETURN;
1751       elsif l_order_num is not null then
1752          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'WhichIVR','OrderNum');
1753 
1754          --call anand lookup to search for order num
1755          CSC_SERVICE_KEY_PVT.service_key_search(p_skey_name =>  'ORDER_NUMBER',
1756                                                 p_skey_value =>  l_order_num,
1757                                                 x_hdr_info_tbl => l_hdr_info_tbl);
1758           IF (l_hdr_info_tbl.count = 0) THEN
1759             l_match := '0';
1760          ELSIF (l_hdr_info_tbl.count = 1) THEN
1761             l_match := '1';
1762             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerID',l_hdr_info_tbl(1).cust_party_id);
1763             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'PARTY_ID',l_hdr_info_tbl(1).cust_party_id);
1764 
1765             --must check if account_id is null before setting.
1766             IF l_hdr_info_tbl(1).account_id IS NOT NULL THEN
1767                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'SKEY_account_id',l_hdr_info_tbl(1).account_id);
1768 		  END IF;
1769 
1770             --bug 5640146
1771             --passing service_key_id
1772 		  IF l_hdr_info_tbl(1).service_key_id IS NOT NULL THEN
1773 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'service_key_id',l_hdr_info_tbl(1).service_key_id);
1774 		  END IF;
1775 
1776 		  --passing org_id
1777 		  IF l_hdr_info_tbl(1).org_id IS NOT NULL THEN
1778 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_skey_org_id',l_hdr_info_tbl(1).org_id);
1779 		  END IF;
1780             --end of bug 5640146
1781 
1782             --Resolve party_name from party_id
1783             l_customer_name := get_party_name_from_party_id(l_hdr_info_tbl(1).cust_party_id);
1784             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerName',l_customer_name);
1785          ELSE --(l_hdr_info_tbl.count > 1) THEN
1786             l_match := 'M';
1787             --remember to append the order # to the p_action_str in foo
1788          END IF;
1789             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'MatchFlag',l_match);
1790             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'ProcessedFlag',l_processed_flag);
1791           --  l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'DONE_IT','DONE');
1792             RETURN;
1793       elsif l_ssn is not null then
1794          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'WhichIVR','SSN');
1795 
1796           --call anand lookup to search for ssn
1797          CSC_SERVICE_KEY_PVT.service_key_search(p_skey_name =>  'SSN',
1798                                                 p_skey_value =>  l_ssn,
1799                                                 x_hdr_info_tbl => l_hdr_info_tbl);
1800           IF (l_hdr_info_tbl.count = 0) THEN
1801             l_match := '0';
1802          ELSIF (l_hdr_info_tbl.count = 1) THEN
1803             l_match := '1';
1804             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerID',l_hdr_info_tbl(1).cust_party_id);
1805             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'PARTY_ID',l_hdr_info_tbl(1).cust_party_id);
1806 
1807             --bug 5640146
1808             --passing service_key_id
1809 		  IF l_hdr_info_tbl(1).service_key_id IS NOT NULL THEN
1810 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'service_key_id',l_hdr_info_tbl(1).service_key_id);
1811 		  END IF;
1812 
1813 		  --passing org_id
1814 		  IF l_hdr_info_tbl(1).org_id IS NOT NULL THEN
1815 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_skey_org_id',l_hdr_info_tbl(1).org_id);
1816 		  END IF;
1817             --end of bug 5640146
1818 
1819             --Resolve party_name from party_id
1820             l_customer_name := get_party_name_from_party_id(l_hdr_info_tbl(1).cust_party_id);
1821             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerName',l_customer_name);
1822          ELSE --(l_hdr_info_tbl.count > 1) THEN
1823             l_match := 'M';
1824             --remember to append the ssn to the p_action_str in foo
1825          END IF;
1826             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'MatchFlag',l_match);
1827             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'ProcessedFlag',l_processed_flag);
1828          --   l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'DONE_IT','DONE');
1829             RETURN;
1830       elsif l_contract_num is not null then
1831          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'WhichIVR','ContractNum');
1832 
1833          --call anand lookup to search for contract num
1834          CSC_SERVICE_KEY_PVT.service_key_search(p_skey_name =>  'CONTRACT_NUMBER',
1835                                                 p_skey_value =>  l_contract_num,
1836                                                 x_hdr_info_tbl => l_hdr_info_tbl);
1837           IF (l_hdr_info_tbl.count = 0) THEN
1838             l_match := '0';
1839          ELSIF (l_hdr_info_tbl.count = 1) THEN
1840             l_match := '1';
1841 
1842             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerID',l_hdr_info_tbl(1).cust_party_id);
1843             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'PARTY_ID',l_hdr_info_tbl(1).cust_party_id);
1844 
1845             --bug 5640146
1846             --passing service_key_id
1847 		  IF l_hdr_info_tbl(1).service_key_id IS NOT NULL THEN
1848 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'service_key_id',l_hdr_info_tbl(1).service_key_id);
1849 		  END IF;
1850 
1851 		  --passing org_id
1852 		  IF l_hdr_info_tbl(1).org_id IS NOT NULL THEN
1853 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_skey_org_id',l_hdr_info_tbl(1).org_id);
1854 		  END IF;
1855             --end of bug 5640146
1856 
1857             --Resolve party_name from party_id
1858             l_customer_name := get_party_name_from_party_id(l_hdr_info_tbl(1).cust_party_id);
1859             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerName',l_customer_name);
1860          ELSE --(l_hdr_info_tbl.count > 1) THEN
1861             l_match := 'M';
1862             --remember to append the contract # to the p_action_str in foo
1863          END IF;
1864             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'MatchFlag',l_match);
1865             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'ProcessedFlag',l_processed_flag);
1866            -- l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'DONE_IT','DONE');
1867             RETURN;
1868       elsif l_invoice_num is not null then
1869          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'WhichIVR','InvoiceNum');
1870 
1871          --call anand lookup to search for invoice num
1872          CSC_SERVICE_KEY_PVT.service_key_search(p_skey_name =>  'INVOICE_NUMBER',
1873                                                 p_skey_value =>  l_invoice_num,
1874                                                 x_hdr_info_tbl => l_hdr_info_tbl);
1875           IF (l_hdr_info_tbl.count = 0) THEN
1876             l_match := '0';
1877          ELSIF (l_hdr_info_tbl.count = 1) THEN
1878             l_match := '1';
1879             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerID',l_hdr_info_tbl(1).cust_party_id);
1880             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'PARTY_ID',l_hdr_info_tbl(1).cust_party_id);
1881 
1882             --must check if account_id is null before setting.
1883            IF l_hdr_info_tbl(1).account_id IS NOT NULL THEN
1884               l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'SKEY_account_id',l_hdr_info_tbl(1).account_id);
1885 		 END IF;
1886 
1887             --bug 5640146
1888             --passing service_key_id
1889 		  IF l_hdr_info_tbl(1).service_key_id IS NOT NULL THEN
1890 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'service_key_id',l_hdr_info_tbl(1).service_key_id);
1891 		  END IF;
1892 
1893 		  --passing org_id
1894 		  IF l_hdr_info_tbl(1).org_id IS NOT NULL THEN
1895 		     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_skey_org_id',l_hdr_info_tbl(1).org_id);
1896 		  END IF;
1897             --end of bug 5640146
1898 
1899             --Resolve party_name from party_id
1900             l_customer_name := get_party_name_from_party_id(l_hdr_info_tbl(1).cust_party_id);
1901             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerName',l_customer_name);
1902          ELSE --(l_hdr_info_tbl.count > 1) THEN
1903             l_match := 'M';
1904             --remember to append the invoice # to the p_action_str in foo
1905          END IF;
1906             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'MatchFlag',l_match);
1907             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'ProcessedFlag',l_processed_flag);
1908          --   l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'DONE_IT','DONE');
1909             RETURN;
1910       end if;
1911 
1912       --Customer Num LookUp
1913       If l_customer_num is not null THEN
1914          l_customer_id := null;
1915          l_customer_id := CSC_ROUTING_UTL.Get_Customer_From_CustomerNum(p_party_number => l_customer_num);
1916          IF l_customer_id IS NOT NULL THEN
1917            l_match := '1';
1918            l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'WhichIVR','PartyID');
1919 
1920            --bug 5615536
1921            l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerID',l_customer_id);
1922            l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'PARTY_ID',l_customer_id);
1923 		 --end of bug 5615536
1924 
1925            l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'MatchFlag',l_match);
1926            l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'ProcessedFlag',l_processed_flag);
1927 
1928            --Resolve party_name from party_id
1929            l_customer_name := get_party_name_from_party_id(l_customer_id);
1930            l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerName',l_customer_name);
1931         --   l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'DONE_IT','DONE');
1932            RETURN;
1933          END IF;
1934       END IF;
1935 
1936       --AccountCode lookup
1937       IF l_account_code IS NOT NULL THEN
1938          l_customer_id := null;
1939          CSC_ROUTING_UTL.Get_Cust_Acct_From_Account_Num( p_cust_acct_number  => l_account_code,
1940                                                          x_party_id          => l_customer_id,
1941                                                          x_cust_account_id   => l_cust_account_id,
1942                                                          x_last_update_date  => l_acct_last_update_date);
1943          IF l_customer_id IS NOT NULL THEN
1944             l_match := '1';
1945             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'WhichIVR','AccountCode');
1946             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerID',l_customer_id);
1947             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'PARTY_ID',l_customer_id);
1948 
1949             --must check if account_id is null before setting.
1950 	       IF l_cust_account_id IS NOT NULL THEN
1951                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_cust_account_id',l_cust_account_id);
1952 	       END IF;
1953 
1954             IF l_acct_last_update_date IS NOT NULL THEN
1955                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_last_update_date',l_acct_last_update_date);
1956 	       END IF;
1957 
1958             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'MatchFlag',l_match);
1959             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'ProcessedFlag',l_processed_flag);
1960 
1961             --Resolve party_name from party_id
1962             l_customer_name := get_party_name_from_party_id(l_customer_id);
1963             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerName',l_customer_name);
1964          --   l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'DONE_IT','DONE');
1965             RETURN;
1966          END IF;
1967       END IF;
1968 
1969       --Phone lookup
1970       IF l_phone_passed_flag = 'Y' THEN
1971          l_complete_phone_num := l_country_code || l_area_code || l_phone_num;
1972          IF l_complete_phone_num IS NOT NULL THEN
1973             l_customer_id := NULL;
1974             l_rphone := HZ_PHONE_NUMBER_PKG.transpose(l_complete_phone_num);
1975             l_customer_id := CSC_ROUTING_UTL.get_customer_from_reverse_ANI(l_rphone,
1976                                                                            l_uwq_multi_record_match,
1977                                                                            l_phone_id);
1978             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'WhichIVR','CompletePhone');
1979 
1980             IF l_customer_id IS NOT NULL THEN
1981                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerID',l_customer_id);
1982                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'PARTY_ID',l_customer_id);
1983 
1984                IF l_phone_id IS NOT NULL THEN
1985                   l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_phone_id',l_phone_id);
1986 			END IF;
1987 
1988                --Resolve party_name from party_id
1989                l_customer_name := get_party_name_from_party_id(l_customer_id);
1990                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerName',l_customer_name);
1991 
1992                l_match := '1';
1993             ELSE
1994                IF l_uwq_multi_record_match is not null THEN
1995                   l_match := 'M';
1996                   l_uwq_multi_record_match := 'MULTIPLE_PHONE_NUMBERS';
1997                   fnd_profile.get('CSC_CUSTOMER_FROM_EXACT_ANI',n_use_exact_ani);
1998                   IF NVL(n_use_exact_ani,'Y') = 'N' THEN
1999                     l_stripped_rANI := SUBSTR(l_rphone,1, LENGTH(l_rphone)-1);
2000                     l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_stripped_reverse_ani',l_stripped_rANI);
2001                   END IF;
2002                ELSE
2003                   l_match := '1';
2004                END IF;
2005             END IF;
2006 
2007             IF l_uwq_multi_record_match IS NOT NULL THEN
2008                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_multi_record_match',l_uwq_multi_record_match);
2009 	       END IF;
2010 
2011             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'MatchFlag',l_match);
2012 
2013             IF l_rphone IS NOT NULL THEN
2014                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_reverse_ani',l_rphone);
2015 		  END IF;
2016 
2017             IF l_complete_phone_num IS NOT NULL THEN
2018                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_complete_phone_num',l_complete_phone_num);
2019 	       END IF;
2020 
2021             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'ProcessedFlag',l_processed_flag);
2022           --  l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'DONE_IT','DONE');
2023             RETURN;
2024          END IF;
2025       END IF;
2026 
2027       --Contact Num lookup
2028       IF l_contact_num IS NOT NULL THEN
2029          l_customer_id := null;
2030          l_customer_id := CSC_ROUTING_UTL.Get_Customer_From_CustomerNum( p_party_number   => l_contact_num);
2031          IF l_customer_id IS NOT NULL THEN
2032             l_match := '1';
2033             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'WhichIVR','PartyID');
2034             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerID',l_customer_id);
2035             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'PARTY_ID',l_customer_id);
2036             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'MatchFlag',l_match);
2037             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'ProcessedFlag',l_processed_flag);
2038 
2039             --Resolve party_name from party_id
2040             l_customer_name := get_party_name_from_party_id(l_customer_id);
2041             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerName',l_customer_name);
2042          --   l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'DONE_IT','DONE');
2043 
2044             RETURN;
2045          END IF;
2046       END IF;
2047 
2048 
2049       --ANI lookup
2050       IF l_ani IS NOT NULL THEN
2051          --Note: standard REVERSE function cannot be used in PL-SQL as it is a reserved word in PL-SQL
2052          --to replace this function REVERSE_NUMBER function was created
2053          l_customer_id := NULL;
2054          l_rphone := HZ_PHONE_NUMBER_PKG.transpose(l_ani);
2055          l_customer_id := CSC_ROUTING_UTL.get_customer_from_reverse_ANI(l_rphone,
2056                                                                         l_uwq_multi_record_match,
2057                                                                         l_phone_id);
2058          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'WhichIVR','ANI');
2059 
2060          IF l_customer_id is not null THEN --Exact Match
2061             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerID',l_customer_id);
2062             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'PARTY_ID',l_customer_id);
2063 
2064             IF l_phone_id IS NOT NULL THEN
2065                l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_phone_id',l_phone_id);
2066 		  END IF;
2067 
2068             --Resolve party_name from party_id
2069             l_customer_name := get_party_name_from_party_id(l_customer_id);
2070             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerName',l_customer_name);
2071             l_match := '1';
2072          ELSE
2073             IF l_uwq_multi_record_match is not null THEN
2074                l_match := 'M';
2075                l_uwq_multi_record_match := 'MULTIPLE_PHONE_NUMBERS';
2076                fnd_profile.get('CSC_CUSTOMER_FROM_EXACT_ANI',n_use_exact_ani);
2077 
2078                IF NVL(n_use_exact_ani,'Y') = 'N' THEN
2079                  l_stripped_rANI := SUBSTR(l_rphone,1, LENGTH(l_rphone)-1);
2080                  l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_stripped_reverse_ani',l_stripped_rANI);
2081                END IF;
2082             ELSE
2083                l_match := '0';
2084             END IF;
2085          END IF;
2086 
2087          IF l_uwq_multi_record_match IS NOT NULL THEN
2088             l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_multi_record_match',l_uwq_multi_record_match);
2089 	    END IF;
2090 
2091          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'MatchFlag',l_match);
2092          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'uwq_reverse_ani',l_rphone);
2093          l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'ProcessedFlag',l_processed_flag);
2094       --   l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'DONE_IT','DONE');
2095          RETURN;
2096 
2097       END IF;
2098 EXCEPTION
2099    WHEN OTHERS THEN
2100       l_customer_id := null;
2101       l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'CustomerID',l_customer_id);
2102       l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'PARTY_ID',l_customer_id);
2103       l_match := '0';
2104       l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'MatchFlag',l_match);
2105       l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'ProcessedFlag',l_processed_flag);
2106     --  l_put_result := CCT_COLLECTION_UTIL_PUB.PUT(p_media_data,'DONE_IT','DONE');
2107 
2108 END CSC_Customer_Lookup;
2109 
2110 END CSC_Routing_UTL;
2111