DBA Data[Home] [Help]

PACKAGE BODY: APPS.PQP_HROSS_REPORTS

Source


1 PACKAGE BODY pqp_hross_reports  AS
2  /* $Header: pqphrossrpt.pkb 120.6 2006/01/05 04:14 nkkrishn noship $ */
3 
4 -- =============================================================================
5 -- ~ Package Body Global variables:
6 -- =============================================================================
7   g_debug                       BOOLEAN;
8   g_pkg                CONSTANT VARCHAR2(150) := 'pqp_hross_reports.';
9 
10 -- =============================================================================
11 -- ~ Compare_Values: Function to determine whether two strings are the same or
12 -- ~ different
13 -- =============================================================================
14 FUNCTION Compare_Values
15          (p_parameter1     IN VARCHAR2
16          ,p_parameter2    IN VARCHAR2
17           ) RETURN Varchar2 IS
18   l_parameter1             VARCHAR2(100);
19   l_parameter2             VARCHAR2(100);
20   l_return_status             VARCHAR2(5);
21   l_proc_name      CONSTANT   VARCHAR2(150) := g_pkg||'Compare_Values';
22 
23 BEGIN
24   Hr_utility.set_location('Entering:' || l_proc_name, 10);
25 
26   IF p_parameter1 IS NOT NULL OR p_parameter2 IS NOT NULL THEN
27 
28     --remove blank spaces from in between
29     SELECT REPLACE(p_parameter1, ' ') INTO l_parameter1 FROM DUAL;
30     SELECT REPLACE(p_parameter2, ' ') INTO l_parameter2 FROM DUAL;
31 
32     IF l_parameter1 = l_parameter2 THEN
33       l_return_status := '=';
34     ELSE
35       l_return_status := '<>';
36       P_DATA_MISMATCH_FLAG := TRUE;
37     END IF;
38   END IF;
39   RETURN l_return_status;
40 
41 EXCEPTION
42   WHEN OTHERS THEN
43    Hr_Utility.set_location('Leaving:' || l_proc_name, 90);
44    RETURN l_return_status;
45 
46 END Compare_Values;
47 
48 -- =============================================================================
49 -- ~ Before_Report_Trigger:
50 -- =============================================================================
51 PROCEDURE Before_Report_Trigger IS
52 
53    l_proc_name  CONSTANT    VARCHAR2(150):= g_pkg ||
54                                            'Before_Report_Trigger';
55    l_date_format            VARCHAR2(20);
56    l_date_value             VARCHAR2(20);
57 BEGIN
58    hr_utility.set_location('Entering: ' || l_proc_name, 10);
59 
60    --Set the value of person id where clause
61    fnd_profile.get('ICX_DATE_FORMAT_MASK', l_date_format);
62 
63    GENERIC_WHERE :=  ' AND 1=1 ' ||
64                      ' AND ppf.business_group_id LIKE (''' ||
65                              P_BUSINESS_GROUP_ID || ''') ';
66 
67    IF P_PERSON_TYPE IS NOT NULL AND P_PERSON_TYPE <> ' ' THEN
68       PERSON_TYPE_WHERE := ' AND ppt.person_type_id LIKE (''' ||
69                            P_PERSON_TYPE || ''') ';
70    END IF;
71    IF P_ORGANIZATION_ID IS NOT NULL AND P_ORGANIZATION_ID <> ' ' THEN
72       ORGANNIZATION_NAME_WHERE := ' AND paf.organization_id LIKE (''' ||
73                                   P_ORGANIZATION_ID || ''') ';
74    END IF;
75    IF P_PAYROLL_ID IS NOT NULL AND P_PAYROLL_ID <> ' ' THEN
76       PAYROLL_NAME_WHERE := ' AND paf.payroll_id LIKE (''' ||
77                             P_PAYROLL_ID || ''') ';
78    END IF;
79    IF P_LOCATION_ID IS NOT NULL AND P_LOCATION_ID <> ' ' THEN
80       LOCATION_NAME_WHERE := ' AND paf.location_id LIKE (''' ||
81                              P_LOCATION_ID || ''') ';
82    END IF;
83    IF P_LAST_NAME IS NOT NULL AND P_LAST_NAME <> ' ' THEN
84       LAST_NAME_WHERE := ' AND lower(ppf.last_name) LIKE LOWER(''' ||
85                          P_LAST_NAME || ''') ';
86    END IF;
87 
88    IF P_FIRST_NAME IS NOT NULL AND P_FIRST_NAME <> ' '  THEN
89       FIRST_NAME_WHERE := ' AND lower(ppf.first_name) LIKE LOWER(''' ||
90                           P_FIRST_NAME || ''') ';
91    END IF;
92 
93    IF P_NATIONAL_IDENTIFIER IS NOT NULL AND P_NATIONAL_IDENTIFIER <> ' ' THEN
94       NATIONAL_IDENTIFIER_WHERE := ' AND ppf.national_identifier ' ||
95                           ' LIKE (''' || P_NATIONAL_IDENTIFIER || ''') ';
96    END IF;
97 
98    IF P_STUDENT_NUMBER IS NOT NULL AND P_STUDENT_NUMBER <> ' ' THEN
99       STUDENT_NUMBER_WHERE := ' AND ipe.person_number LIKE (''' ||
100                               P_STUDENT_NUMBER || ''') ';
101    END IF;
102    IF P_PERSON_ID_GROUP_QUERY IS NOT NULL AND
103                                           P_PERSON_ID_GROUP_QUERY <> ' ' THEN
104       PERSON_ID_GROUP_QUERY_WHERE := ' AND ppf.party_id IN ' ||
105                                      P_PERSON_ID_GROUP_QUERY ;
106    END IF;
107    PERSON_ID_LIST_WHERE :=  GENERIC_WHERE || PERSON_TYPE_WHERE ||
108                             ORGANNIZATION_NAME_WHERE || PAYROLL_NAME_WHERE ||
109                             LOCATION_NAME_WHERE || LAST_NAME_WHERE ||
110 			    FIRST_NAME_WHERE || NATIONAL_IDENTIFIER_WHERE ||
111 			    STUDENT_NUMBER_WHERE || PERSON_ID_GROUP_QUERY_WHERE;
112 
113    --Set the value of end date check where clause
114    PERSON_END_DATE_WHERE := ' AND ppf.effective_end_date = (SELECT max(ppf1.effective_end_date) ' ||
115                                                               ' FROM per_people_f ppf1, per_person_types ppt1 ' ||
116                                                              ' WHERE (to_date(''' || P_EFFECTIVE_START_DATE || ''', ''' || l_date_format || ''') between paf.effective_start_date and paf.effective_end_date ' ||
117                                                                  ' OR to_date(''' || P_EFFECTIVE_END_DATE || ''', ''' || l_date_format || ''') between paf.effective_start_date and paf.effective_end_date ) ' ||
118                                                                ' AND ppf1.person_id = ppf.person_id ' ||
119 							       ' AND ppf1.person_type_id = ppt1.person_type_id ' ||
120                                                                ' AND ppt1.system_person_type in (''EMP'', ''EMP_APL'') ' ||
121      							       ' AND ppt1.active_flag = ''Y'') ';
122 
123 --   PERSON_END_DATE_WHERE2 := ' AND to_date(''' || P_EFFECTIVE_END_DATE || ''', ''' || l_date_format || ''') between ppf.effective_start_date and ppf.effective_end_date ';
124    ASSIGNMENT_END_DATE_WHERE := ' AND (to_date(''' || P_EFFECTIVE_START_DATE || ''', ''' || l_date_format || ''') between paf.effective_start_date and paf.effective_end_date ' ||
125                                      ' OR to_date(''' || P_EFFECTIVE_END_DATE || ''', ''' || l_date_format || ''') between paf.effective_start_date and paf.effective_end_date )';
126    ADDRESS_END_DATE_WHERE := ' AND to_date(''' || P_EFFECTIVE_END_DATE || ''', ''' || l_date_format || ''') between  per.date_from(+) and nvl(per.date_to(+), to_date(''' || P_EFFECTIVE_END_DATE || ''', ''' || l_date_format || ''')) ';
127 
128    --Set the value of order by clause
129    ORDER_BY_CLAUSE := 'ORDER BY MismatchIndicatorFlag DESC, UPPER(LastName), UPPER(FirstName), NationalIdentifier';
130    IF P_SORT_BY = 'STU_LNM' THEN
131       ORDER_BY_CLAUSE := 'ORDER BY UPPER(LastName), UPPER(FirstName), NationalIdentifier';
132    END IF;
133    IF P_SORT_BY = 'STU_NID' THEN
134       ORDER_BY_CLAUSE := 'ORDER BY NationalIdentifier'; --Should be unique, so no need of secondary sort column
135    END IF;
136    IF P_SORT_BY = 'STU_NUM' THEN
137       ORDER_BY_CLAUSE := 'ORDER BY StudentNumber'; --Should be unique, so no need of secondary sort column
138    END IF;
139 
140    --Set the value of data mismatch flag to false
141    P_DATA_MISMATCH_FLAG := FALSE;
142    MATCHING_RECORDS_COUNTER := 0;
143    MISMATCH_RECORDS_COUNTER := 0;
144 
145    hr_utility.set_location('Leaving: ' || l_proc_name, 20);
146 
147 END Before_Report_Trigger;
148 
149 -- =============================================================================
150 -- ~ Before_Report_Trigger:
151 -- =============================================================================
152 FUNCTION Before_Report_Trigger RETURN BOOLEAN IS
153 
154    l_proc_name  CONSTANT    VARCHAR2(150):= g_pkg ||
155                                            'Before_Report_Trigger';
156    l_date_format            VARCHAR2(20);
157    l_date_value             VARCHAR2(20);
158 BEGIN
159    hr_utility.set_location('Entering: ' || l_proc_name, 10);
160 
161    --Set the value of person id where clause
162    fnd_profile.get('ICX_DATE_FORMAT_MASK', l_date_format);
163 
164    GENERIC_WHERE :=  ' AND 1=1 ';
165 
166    IF P_PERSON_TYPE IS NOT NULL AND P_PERSON_TYPE <> ' ' THEN
167       PERSON_TYPE_WHERE := ' AND ppt.person_type_id LIKE (''' ||
168                            P_PERSON_TYPE || ''') ';
169    END IF;
170    IF P_ORGANIZATION_ID IS NOT NULL AND P_ORGANIZATION_ID <> ' ' THEN
171       ORGANNIZATION_NAME_WHERE := ' AND paf.organization_id LIKE (''' ||
172                                   P_ORGANIZATION_ID || ''') ';
173    END IF;
174    IF P_PAYROLL_ID IS NOT NULL AND P_PAYROLL_ID <> ' ' THEN
175       PAYROLL_NAME_WHERE := ' AND paf.payroll_id LIKE (''' ||
176                             P_PAYROLL_ID || ''') ';
177    END IF;
178    IF P_LOCATION_ID IS NOT NULL AND P_LOCATION_ID <> ' ' THEN
179       LOCATION_NAME_WHERE := ' AND paf.location_id LIKE (''' ||
180                              P_LOCATION_ID || ''') ';
181    END IF;
182    IF P_LAST_NAME IS NOT NULL AND P_LAST_NAME <> ' ' THEN
183       LAST_NAME_WHERE := ' AND lower(ppf.last_name) LIKE LOWER(''' ||
184                          P_LAST_NAME || ''') ';
185    END IF;
186 
187    IF P_FIRST_NAME IS NOT NULL AND P_FIRST_NAME <> ' '  THEN
188       FIRST_NAME_WHERE := ' AND lower(ppf.first_name) LIKE LOWER(''' ||
189                           P_FIRST_NAME || ''') ';
190    END IF;
191 
192    IF P_NATIONAL_IDENTIFIER IS NOT NULL AND P_NATIONAL_IDENTIFIER <> ' ' THEN
193       NATIONAL_IDENTIFIER_WHERE := ' AND ppf.national_identifier ' ||
194                           ' LIKE (''' || P_NATIONAL_IDENTIFIER || ''') ';
195    END IF;
196 
197    IF P_STUDENT_NUMBER IS NOT NULL AND P_STUDENT_NUMBER <> ' ' THEN
198       STUDENT_NUMBER_WHERE := ' AND ipe.person_number LIKE (''' ||
199                               P_STUDENT_NUMBER || ''') ';
200    END IF;
201    IF P_PERSON_ID_GROUP_QUERY IS NOT NULL AND
202                                           P_PERSON_ID_GROUP_QUERY <> ' ' THEN
203       PERSON_ID_GROUP_QUERY_WHERE := ' AND ppf.party_id IN ' ||
204                                      P_PERSON_ID_GROUP_QUERY ;
205    END IF;
206    PERSON_ID_LIST_WHERE :=  GENERIC_WHERE || PERSON_TYPE_WHERE ||
207                             ORGANNIZATION_NAME_WHERE || PAYROLL_NAME_WHERE ||
208                             LOCATION_NAME_WHERE || LAST_NAME_WHERE ||
209 			    FIRST_NAME_WHERE || NATIONAL_IDENTIFIER_WHERE ||
210 			    STUDENT_NUMBER_WHERE || PERSON_ID_GROUP_QUERY_WHERE;
211 
212    --Set the value of end date check where clause
213    PERSON_END_DATE_WHERE := ' AND ppf.effective_end_date = (SELECT max(ppf1.effective_end_date) ' ||
214                                                               ' FROM per_people_f ppf1, per_person_types ppt1 ' ||
215                                                              ' WHERE (to_date(''' || P_EFFECTIVE_START_DATE || ''', ''' || l_date_format || ''') between paf.effective_start_date and paf.effective_end_date ' ||
216                                                                  ' OR to_date(''' || P_EFFECTIVE_END_DATE || ''', ''' || l_date_format || ''') between paf.effective_start_date and paf.effective_end_date ) ' ||
217                                                                ' AND ppf1.person_id = ppf.person_id ' ||
218 							       ' AND ppf1.person_type_id = ppt1.person_type_id ' ||
219                                                                ' AND ppt1.system_person_type in (''EMP'', ''EMP_APL'') ' ||
220      							       ' AND ppt1.active_flag = ''Y'') ';
221 
222 
223 --   PERSON_END_DATE_WHERE2 := ' AND to_date(''' || P_EFFECTIVE_END_DATE || ''', ''' || l_date_format || ''') between ppf.effective_start_date and ppf.effective_end_date ';
224    ASSIGNMENT_END_DATE_WHERE := ' AND (to_date(''' || P_EFFECTIVE_END_DATE || ''', ''' || l_date_format || ''') between paf.effective_start_date and paf.effective_end_date ' ||
225                                  ' OR  to_date(''' || P_EFFECTIVE_START_DATE || ''', ''' || l_date_format || ''') between paf.effective_start_date and paf.effective_end_date) ';
226    ADDRESS_END_DATE_WHERE := ' AND to_date(''' || P_EFFECTIVE_END_DATE || ''', ''' || l_date_format || ''') between  per.date_from(+) and nvl(per.date_to(+), to_date(''' || P_EFFECTIVE_END_DATE || ''', ''' || l_date_format || ''')) ';
227 
228    --Set the value of order by clause
229    ORDER_BY_CLAUSE := 'ORDER BY MismatchIndicatorFlag DESC, UPPER(LastName), UPPER(FirstName), NationalIdentifier';
230    IF P_SORT_BY = 'STU_LNM' THEN
231       ORDER_BY_CLAUSE := 'ORDER BY UPPER(LastName), UPPER(FirstName), NationalIdentifier';
232    END IF;
233    IF P_SORT_BY = 'STU_NID' THEN
234       ORDER_BY_CLAUSE := 'ORDER BY NationalIdentifier'; --Should be unique, so no need of secondary sort column
235    END IF;
236    IF P_SORT_BY = 'STU_NUM' THEN
237       ORDER_BY_CLAUSE := 'ORDER BY StudentNumber'; --Should be unique, so no need of secondary sort column
238    END IF;
239 
240    --Set the value of data mismatch flag to false
241    P_DATA_MISMATCH_FLAG := FALSE;
242    MATCHING_RECORDS_COUNTER := 0;
243    MISMATCH_RECORDS_COUNTER := 0;
244 
245    hr_utility.set_location('Leaving: ' || l_proc_name, 20);
246    RETURN TRUE;
247 END Before_Report_Trigger;
248 
249 -- =============================================================================
250 -- ~ Generate_Report:
254          ,p_business_group_name    IN VARCHAR2
251 -- =============================================================================
252 PROCEDURE Generate_Report
253          (p_person_id_group_query  IN VARCHAR2
255          ,p_business_group_id      IN VARCHAR2
259          ,p_person_type_desc       IN VARCHAR2
256          ,p_effective_start_date   IN VARCHAR2
257          ,p_effective_end_date     IN VARCHAR2
258          ,p_person_type            IN VARCHAR2
260          ,p_organization_name      IN VARCHAR2
261          ,p_organization_id        IN VARCHAR2
262          ,p_payroll_name           IN VARCHAR2
263          ,p_payroll_id             IN VARCHAR2
264          ,p_location_value         IN VARCHAR2
265          ,p_location_id            IN VARCHAR2
266          ,p_person_id_group        IN VARCHAR2
267          ,p_last_name              IN VARCHAR2
268          ,p_first_name             IN VARCHAR2
269          ,p_national_identifier    IN VARCHAR2
270          ,p_student_number         IN VARCHAR2
271          ,p_template_code          IN VARCHAR2
272          ,p_template_lang          IN VARCHAR2
273          ,p_template_ter           IN VARCHAR2
274          ,p_output_format          IN VARCHAR2
275          ,p_report_name            IN VARCHAR2
276          ,p_data_match_filter      IN VARCHAR2
277          ,p_report_run_date        IN VARCHAR2
278          ,p_data_match_filter_desc IN VARCHAR2
279          ,p_sort_by                IN VARCHAR2
280          ,p_sort_by_desc           IN VARCHAR2
281          ,p_return_status          IN OUT NOCOPY VARCHAR2) AS
282    l_proc_name  CONSTANT    VARCHAR2(150):= g_pkg ||
283                                            'Generate_Report';
284    l_request_id             NUMBER;
285    l_layout_flag            BOOLEAN;
286 BEGIN
287    hr_utility.set_location('Entering: ' || l_proc_name, 10);
288 
289    l_layout_flag := fnd_request.add_layout(template_appl_name => 'PQP'
290                                           ,template_code      => p_template_code
291                                           ,template_language  => p_template_lang
292                                           ,template_territory => p_template_ter
293                                           ,output_format      => p_output_format);
294 
295    l_request_id := fnd_request.submit_request(application => 'PQP'
296                                              ,program     => 'PQPCMPRPT'
297 					     ,description => p_report_name
298                                              ,argument1   => p_person_id_group_query
299                                              ,argument2   => p_business_group_name
300                                              ,argument3   => p_business_group_id
301                                              ,argument4   => p_effective_start_date
302                                              ,argument5   => p_effective_end_date
303                                              ,argument6   => p_person_type
304                                              ,argument7   => p_person_type_desc
308 					     ,argument11  => p_payroll_id
305 					     ,argument8   => p_organization_name
306 					     ,argument9   => p_organization_id
307 					     ,argument10  => p_payroll_name
309 					     ,argument12  => p_location_value
310 					     ,argument13  => p_location_id
311 					     ,argument14  => p_person_id_group
312 					     ,argument15  => p_last_name
313 					     ,argument16  => p_first_name
314 					     ,argument17  => p_national_identifier
315 					     ,argument18  => p_student_number
316 					     ,argument19  => p_report_name
317 					     ,argument20  => p_data_match_filter
318 					     ,argument21  => p_report_run_date
319 					     ,argument22  => p_data_match_filter_desc
320 					     ,argument23  => p_sort_by
321 					     ,argument24  => p_sort_by_desc);
322 
323    COMMIT;
324    p_return_status := l_request_id;
325 
326    hr_utility.set_location ('Request Id:' || l_request_id ,20);
327    hr_utility.set_location('Leaving: ' || l_proc_name, 30);
328 
329 END Generate_Report;
330 
331 -- =============================================================================
332 -- ~ Get_Date: Get Date field in session format
333 -- =============================================================================
334 FUNCTION Get_Date(p_date IN DATE) RETURN VARCHAR2 IS
335   l_return_value             VARCHAR2(20);
336   l_date_format              VARCHAR2(20);
337 BEGIN
338   fnd_profile.get('ICX_DATE_FORMAT_MASK', l_date_format);
339   SELECT to_char(fnd_date.canonical_to_date(fnd_date.date_to_canonical(p_date)), l_date_format) into l_return_value FROM dual;
340   RETURN l_return_value;
341 END Get_Date;
342 
343 -- =============================================================================
344 -- ~ Get_Count: Function to return the count of matching and mismatching records
345 -- =============================================================================
346 Function Get_Count(p_parameter  IN VARCHAR2) RETURN VARCHAR2 IS
347   l_return_value             VARCHAR2(20);
348 BEGIN
349   IF p_parameter = 'MATCH_COUNT' THEN
350     l_return_value := MATCHING_RECORDS_COUNTER;
351   END IF;
352   IF p_parameter = 'MISMATCH_COUNT' THEN
353     l_return_value := MISMATCH_RECORDS_COUNTER;
354   END IF;
355   IF p_parameter = 'TOTAL_COUNT' THEN
356     l_return_value := MATCHING_RECORDS_COUNTER + MISMATCH_RECORDS_COUNTER;
357   END IF;
358   RETURN l_return_value;
359 END Get_Count;
360 
361 
362 -- =============================================================================
363 -- ~ Get_Mismatch_Indicator_Flag: Function to return Mismatch Indicator Flag
364 -- =============================================================================
365 FUNCTION Get_Mismatch_Indicator_Flag RETURN VARCHAR2 IS
366   l_return_value             VARCHAR2(1);
367 BEGIN
368   IF P_DATA_MISMATCH_FLAG THEN
369      l_return_value := 'Y';
370      MISMATCH_RECORDS_COUNTER := MISMATCH_RECORDS_COUNTER + 1;
371   ELSE
372      l_return_value := 'N';
373      MATCHING_RECORDS_COUNTER := MATCHING_RECORDS_COUNTER + 1;
374   END IF;
375   P_DATA_MISMATCH_FLAG := FALSE;
376   RETURN l_return_value;
377 END Get_Mismatch_Indicator_Flag;
378 
379 -- =============================================================================
380 -- ~ Record_Filter: Function to return Mismatch Indicator Flag
381 -- =============================================================================
382 FUNCTION Record_Filter(p_mismatch_indicator_flag  IN VARCHAR2
383                       ,p_full_name  IN VARCHAR2) RETURN BOOLEAN IS
384   l_return_value             BOOLEAN;
385 BEGIN
386 
387   IF P_DATA_MATCH_FILTER = 'ALL_RECORDS' THEN
388      RETURN TRUE;
389   END IF;
390   IF P_DATA_MATCH_FILTER = 'MATCHING_RECORDS' THEN
391      IF p_mismatch_indicator_flag = 'Y' THEN
392         RETURN FALSE;
393      ELSE
394         RETURN TRUE;
395      END IF;
396   END IF;
397 
398   IF P_DATA_MATCH_FILTER = 'MISMATCH_RECORDS' THEN
399      IF p_mismatch_indicator_flag = 'Y' THEN
400         RETURN TRUE;
401      ELSE
402         RETURN FALSE;
403      END IF;
404   END IF;
405 END Record_Filter;
406 
407 -- =============================================================================
408 -- ~ Get_Primary_Telephone_Number: Returns the primary telephone number
409 -- =============================================================================
410 Function Get_Primary_Telephone_Number(p_owner_table_id IN VARCHAR2) RETURN VARCHAR2 IS
411 
412    -- Cursor to get the primary telephone number
413   CURSOR csr_pri_telephone_num (c_owner_table_id IN VARCHAR2) IS
414   SELECT phone_country_code, phone_area_code, phone_number, phone_extension
415     FROM hz_contact_points
416    WHERE owner_table_id = c_owner_table_id
417      AND phone_line_type = 'GEN'
418      AND primary_flag = 'Y';
419 
420   l_primary_return_value             VARCHAR2(50);
421   l_primary_country_code             hz_contact_points.phone_country_code%TYPE;
422   l_primary_area_code                hz_contact_points.phone_area_code%TYPE;
423   l_primary_phone_number             hz_contact_points.phone_number%TYPE;
424   l_primary_phone_extn               hz_contact_points.phone_extension%TYPE;
425 BEGIN
426 
427   IF (csr_pri_telephone_num%ISOPEN) THEN
428     CLOSE csr_pri_telephone_num;
429   END IF;
430 
431   OPEN  csr_pri_telephone_num (c_owner_table_id => p_owner_table_id);
432   FETCH csr_pri_telephone_num
433     INTO l_primary_country_code, l_primary_area_code, l_primary_phone_number, l_primary_phone_extn;
434   --Return blank if no primary telephone number found
435   IF csr_pri_telephone_num%NOTFOUND THEN
436      CLOSE csr_pri_telephone_num;
437      RETURN ' ';
438   END IF;
439   CLOSE csr_pri_telephone_num;
440 
441 
445 --    l_primary_return_value := '+' || l_primary_country_code;
442   --Else, return the telephone number in correct format
443   l_primary_return_value := ' ';
444   IF l_primary_country_code IS NOT NULL THEN
446     l_primary_return_value := l_primary_country_code;
447   END IF;
448   IF l_primary_area_code IS NOT NULL THEN
449 --    l_primary_return_value := l_primary_return_value || ' (' || l_primary_area_code || ')';
450     l_primary_return_value := l_primary_return_value || ' ' || l_primary_area_code;
451   END IF;
452   IF l_primary_phone_number IS NOT NULL THEN
453     l_primary_return_value := l_primary_return_value || ' ' || l_primary_phone_number;
454   END IF;
455   IF l_primary_phone_extn IS NOT NULL THEN
456 --    l_primary_return_value := l_primary_return_value || ' x ' || l_primary_phone_extn;
457     l_primary_return_value := l_primary_return_value || ' ' || l_primary_phone_extn;
458   END IF;
459 
460   RETURN l_primary_return_value;
461 
462 END Get_Primary_Telephone_Number;
463 
464 
465 -- =============================================================================
466 -- ~ Get_Secondary_Telephone_Number: Returns the secondary telephone number
467 -- =============================================================================
468 Function Get_Secondary_Telephone_Number(p_owner_table_id IN VARCHAR2) RETURN VARCHAR2 IS
469 
470    -- Cursor to get the secondary telephone number
471   CURSOR csr_sec_telephone_num (c_owner_table_id IN VARCHAR2) IS
472   SELECT phone_country_code, phone_area_code, phone_number, phone_extension
473     FROM hz_contact_points
474    WHERE owner_table_id = c_owner_table_id
475      AND phone_line_type = 'GEN'
476      AND primary_flag <> 'Y'
477      AND creation_date = (SELECT MAX(creation_date)
478                            FROM hz_contact_points
479                           WHERE owner_table_id = c_owner_table_id
480 		            AND phone_line_type = 'GEN'
481 			    AND primary_flag <> 'Y');
482 
483   l_secondary_return_value             VARCHAR2(50);
484   l_secondary_country_code             hz_contact_points.phone_country_code%TYPE;
485   l_secondary_area_code                hz_contact_points.phone_area_code%TYPE;
486   l_secondary_phone_number             hz_contact_points.phone_number%TYPE;
487   l_secondary_phone_extn               hz_contact_points.phone_extension%TYPE;
488 BEGIN
489 
490   IF (csr_sec_telephone_num%ISOPEN) THEN
491     CLOSE csr_sec_telephone_num;
492   END IF;
493 
494   OPEN  csr_sec_telephone_num (c_owner_table_id => p_owner_table_id);
495   FETCH csr_sec_telephone_num
496      INTO l_secondary_country_code, l_secondary_area_code, l_secondary_phone_number, l_secondary_phone_extn;
497   --Return blank if no secondary telephone number found
498   IF csr_sec_telephone_num%NOTFOUND THEN
499      CLOSE csr_sec_telephone_num;
500      RETURN ' ';
501   END IF;
502   CLOSE csr_sec_telephone_num;
503 
504   --Else, return the telephone number in correct format
505   l_secondary_return_value := ' ';
506   IF l_secondary_country_code IS NOT NULL THEN
507 --    l_secondary_return_value := '+' || l_secondary_country_code;
508     l_secondary_return_value := l_secondary_country_code;
509   END IF;
510   IF l_secondary_area_code IS NOT NULL THEN
511 --    l_secondary_return_value := l_secondary_return_value || ' (' || l_secondary_area_code || ')';
512     l_secondary_return_value := l_secondary_return_value || ' ' || l_secondary_area_code;
513   END IF;
514   IF l_secondary_phone_number IS NOT NULL THEN
515     l_secondary_return_value := l_secondary_return_value || ' ' || l_secondary_phone_number;
516   END IF;
517   IF l_secondary_phone_extn IS NOT NULL THEN
518 --    l_secondary_return_value := l_secondary_return_value || ' x ' || l_secondary_phone_extn;
519     l_secondary_return_value := l_secondary_return_value || ' ' || l_secondary_phone_extn;
520   END IF;
521 
522   RETURN l_secondary_return_value;
523 
524 END Get_Secondary_Telephone_Number;
525 
526 END pqp_hross_reports;