DBA Data[Home] [Help]

PACKAGE BODY: APPS.BIC_LIFECYCLE_EXTRACT_PKG

Source


1 PACKAGE BODY bic_lifecycle_extract_pkg AS
2 /* $Header: biclcexb.pls 120.4 2005/12/27 10:32:17 vsegu ship $ */
3 
4   -- Global variables for who columns
5   g_last_updated_by          NUMBER;
6   g_created_by               NUMBER;
7   g_last_update_login        NUMBER;
8   g_request_id               NUMBER;
9   g_program_application_id   NUMBER;
10   g_program_id               NUMBER;
11 
12   g_lc_comparison_type    VARCHAR2(15);
13   g_measure_for_lc_stage  VARCHAR2(30);
14   g_lc_granularity_level  VARCHAR2(15);
15   g_lc_starting_period    DATE;
16   g_lc_new_cust_period    NUMBER;
17   g_lc_insig_level        NUMBER;
18 
19   g_lc_measure_id         NUMBER;
20 --start month and end month for which LC stages being calculated
21 
22   g_lc_st_month   DATE ;
23   g_lc_end_month  DATE ;
24   -- user defined exceptions
25    NO_LC_SETUP_DATA   EXCEPTION;
26  NO_LC_PROFILE_DATA EXCEPTION;
27  NO_LC_MEASURE_ID   EXCEPTION;
28 
29 -----------------------------
30 
31 PROCEDURE Initialize ;
32 
33 FUNCTION Common_Select RETURN VARCHAR2 ;
34 --PROCEDURE get_lc_months ;
35 PROCEDURE Insert_New_Cust ;
36 PROCEDURE Insert_Insig_Cust(p_select VARCHAR2) ;
37 PROCEDURE Month_Range ( p_lc_comp_type  VARCHAR2,
38                         p_lc_gran_level VARCHAR2,
39                         p_n1            OUT NOCOPY NUMBER,
40                         p_n2            OUT NOCOPY NUMBER,
41                         p_n3            OUT NOCOPY NUMBER ) ;
42 PROCEDURE Insert_Record (p_org_id       NUMBER,
43                          p_measure_id   NUMBER,
44                          p_start_date   DATE,
45                          p_cust_id      NUMBER,
46                          p_value        NUMBER) ;
47 
48 PROCEDURE Insert_Others(p_select      VARCHAR2) ;
49 
50 FUNCTION Find_Stage (p_op1       VARCHAR2,
51                      p_op2       VARCHAR2,
52                      p_growth    NUMBER,
53                      p_lcf       NUMBER,
54                      p_vlu1      NUMBER,
55                      p_vlu2      NUMBER) RETURN NUMBER;
56 
57 PROCEDURE write_log (p_msg VARCHAR2, p_proc_name VARCHAR2) ;
58 
59 TYPE curTyp IS REF CURSOR ;
60 
61 g_growing_vlu1   number ;
62 g_growing_vlu2   number ;
63 g_defected_vlu1  number ;
64 g_defected_vlu2  number ;
65 g_declining_vlu1 number ;
66 g_declining_vlu2 number ;
67 
68 g_op_growing1    varchar(2) ;
69 g_op_growing2    varchar(2) ;
70 g_op_defected1   varchar(2) ;
71 g_op_defected2   varchar(2) ;
72 g_op_declining1  varchar(2) ;
73 g_op_declining2  varchar(2) ;
74 -------------------------------------------------------------------------
75 -------------------------------------------------------------------------
76 PROCEDURE  extract_lifecycle_data (
77     p_start_date   DATE,
78     p_end_date     DATE,
79     p_delete_flag  varchar2,
80     p_org_id       NUMBER
81     )  IS
82  x_c_select        VARCHAR2(2000) ;
83  rec_count	   number;
84  x_mult_factor    bic_measure_attribs.mult_factor    % TYPE;
85  x_operation_type bic_measure_attribs.operation_type % TYPE;
86  x_sttmnt         varchar2(2000);
87 BEGIN
88   rec_count      := 0;
89   g_lc_st_month  := p_start_date;
90   g_lc_end_month := p_end_date  ;
91     bic_consolidate_cust_data_pkg.purge_party_summary_data;
92     bic_consolidate_cust_data_pkg.purge_customer_summary_data;
93     Initialize ;
94     bic_summary_extract_pkg.debug(' entered extract_lifecycle_data + : ');
95   IF p_delete_flag = 'N' THEN
96     bic_summary_extract_pkg.extract_periods (
97   				add_months(p_start_date ,g_lc_new_cust_period*- 1),
98 				p_end_date,
99 				'LIFE_CYCLE',
100 				'N',
101 				p_delete_flag,
102 				p_org_id);
103    ELSE
104     bic_summary_extract_pkg.extract_all_periods(
105                 add_months(p_start_date ,g_lc_new_cust_period*- 1),
106 				p_end_date);
107 
108    END IF;
109   SELECT count(*) INTO rec_count
110   FROM	 bic_temp_periods;
111   IF rec_count = 0 THEN
112     write_log('LIFE_CYCLE data  already extracted',
113 			  'bic_lifecycle_extract_pkg.extract_lifecycle_data');
114   	RETURN;
115   END IF;
116 --  write_log('Value of g_lc_comparision type ' || g_lc_comparison_type,
117 	--		  'bic_lifecycle_extract_pkg.extract_lifecycle_data');
118 --  write_log('Value of g_lc_granularity_level  ' || g_lc_granularity_level,
119 	--		  'bic_lifecycle_extract_pkg.extract_lifecycle_data');
120 
121   IF g_lc_granularity_level = 'Year' THEN
122         bic_summary_extract_pkg.g_period_start_date := ADD_MONTHS(p_start_date,-23);
123   END IF;
124   IF g_lc_comparison_type = 'POP' THEN
125         IF g_lc_granularity_level = 'Month' THEN
126             bic_summary_extract_pkg.g_period_start_date := ADD_MONTHS(p_start_date,-1);
127         ELSIF g_lc_granularity_level = 'Quarter' THEN
128             bic_summary_extract_pkg.g_period_start_date := ADD_MONTHS(p_start_date,-5);
129         ELSIF g_lc_granularity_level = 'Half Year' THEN
130             bic_summary_extract_pkg.g_period_start_date := ADD_MONTHS(p_start_date,-11);
131         END IF;
132   ELSIF g_lc_comparison_type = 'YOY' THEN
133         IF g_lc_granularity_level = 'Month' THEN
134             bic_summary_extract_pkg.g_period_start_date := ADD_MONTHS(p_start_date,-12);
135         ELSIF g_lc_granularity_level = 'Quarter' THEN
136             bic_summary_extract_pkg.g_period_start_date := ADD_MONTHS(p_start_date,-14);
137         ELSIF g_lc_granularity_level = 'Half Year' THEN
138             bic_summary_extract_pkg.g_period_start_date := ADD_MONTHS(p_start_date,-17);
139         END IF;
140   END IF;
141   bic_summary_extract_pkg.extract_all_periods( bic_summary_extract_pkg.g_period_start_date,p_end_date);
142   IF g_measure_for_lc_stage = 'ORDER_NUM' OR g_measure_for_lc_stage = 'ORDER_QTY' THEN
143      bic_summary_extract_pkg.get_sql_sttmnt(g_measure_for_lc_stage ,x_sttmnt ,
144                                             x_operation_type,x_mult_factor);
145      bic_summary_extract_pkg.run_sql(x_sttmnt);
146   ELSIF g_measure_for_lc_stage = 'SALES' THEN
147      bic_summary_extract_pkg.extract_sales(bic_summary_extract_pkg.g_period_start_date,p_end_date,NULL,'Y');
148   END IF;
149   write_log('Before Inserting New Customers for Life Cycle ....',
150 			  'bic_lifecycle_extract_pkg.extract_lifecycle_data');
151   IF p_delete_flag = 'N' THEN
152     bic_summary_extract_pkg.extract_periods (
153   				add_months(p_start_date ,g_lc_new_cust_period*- 1),
154 				p_end_date,
155 				'LIFE_CYCLE',
156 				'N',
157 				p_delete_flag,
158 				p_org_id);
159   ELSE
160     bic_summary_extract_pkg.extract_all_periods(
161                 add_months(p_start_date ,g_lc_new_cust_period*- 1),
162 				p_end_date);
163   END IF;
164     x_c_select := Common_Select ;
165     -- write_log(' the lc **select ***query is ' || x_c_select , 'lifecycle' );
166     Insert_New_Cust ;
167     write_log('Before Inserting Insignificant Customers for Life Cycle ....',
168 			'bic_lifecycle_extract_pkg.extract_lifecycle_data');
169     insert_Insig_Cust(x_c_select) ;
170     write_log('Before Inserting Stable, Defected, Growing and Declining
171 			 Customers for Life Cycle ....',
172                'bic_lifecycle_extract_pkg.extract_lifecycle_data');
173     Insert_Others(x_c_select) ;
174     bic_consolidate_cust_data_pkg.populate_status_data(p_start_date, p_end_date, 'LIFE_CYCLE' );
175     bic_consolidate_cust_data_pkg.purge_party_summary_data;
176     bic_consolidate_cust_data_pkg.purge_customer_summary_data;
177     bic_summary_extract_pkg.debug(' exited extract_lifecycle_data - : ');
178     -- bic_summary_extract_pkg.g_period_start_date := p_start_date;
179     COMMIT;
180 EXCEPTION
181     WHEN NO_LC_SETUP_DATA THEN
182         write_log(' LIFECYCLE data is not extracted due to exception : '||SQLERRM,
183         'bic_lifecycle_extract_pkg.extract_lifecycle_data');
184         bic_summary_extract_pkg.generate_error(bic_summary_extract_pkg.g_measure_code,
185         'No records in BIC_LC_SETUP_ALL');
186         ROLLBACK;
187     WHEN NO_LC_PROFILE_DATA THEN
188         write_log(' LIFECYCLE data is not extracted due to exception : '||SQLERRM,
189         'bic_lifecycle_extract_pkg.extract_lifecycle_data');
190         bic_summary_extract_pkg.generate_error(bic_summary_extract_pkg.g_measure_code,
191         'No records in BIC_PROFILE_VALUES_ALL');
192         ROLLBACK;
193     WHEN NO_LC_MEASURE_ID THEN
194         write_log(' LIFECYCLE data is not extracted due to exception : '||SQLERRM,
195         'bic_lifecycle_extract_pkg.extract_lifecycle_data');
196         bic_summary_extract_pkg.generate_error(bic_summary_extract_pkg.g_measure_code,
197         'Measure_id not found for LIFE_CYCLE in the table BIC_MEASURES_ALL');
198         ROLLBACK;
199 	WHEN OTHERS THEN
200 	    write_log(' LIFECYCLE data is not extracted due to exception : '||SQLERRM,
201         'bic_lifecycle_extract_pkg.extract_lifecycle_data');
202         bic_summary_extract_pkg.generate_error(bic_summary_extract_pkg.g_measure_code,'LIFECYCLE data is not extracted : '||SQLERRM);
203         bic_summary_extract_pkg.g_period_start_date := p_start_date;
204         ROLLBACK;
205 END extract_lifecycle_data ;
206 ----------------------------
207 PROCEDURE Insert_New_Cust IS
208 
209   CURSOR party_cur IS
210     SELECT party_id, MIN(NVL(account_established_date,creation_date))
211 	 FROM hz_cust_accounts
212      GROUP BY party_id
213 	HAVING MIN(NVL(account_established_date,creation_date)) >=
214 		   ADD_MONTHS(g_lc_st_month,g_lc_new_cust_period*-1 +1 );
215   x_party_id                 hz_cust_accounts.party_id                 % TYPE;
216   x_account_established_date hz_cust_accounts.account_established_date % TYPE;
217 BEGIN
218     bic_summary_extract_pkg.debug(' entered Insert_New_Cust + : ');
219  OPEN party_cur;
220   LOOP
221     FETCH party_cur INTO x_party_id, x_account_established_date;
222     IF party_cur % NOTFOUND THEN
223 	  EXIT;
224     END IF;
225     INSERT INTO bic_party_summary (
226        measure_code
227       ,measure_id
228       ,party_id --,customer_id
229       ,period_start_date
230       ,VALUE
231       ,bucket_id
232       ,last_update_date
233       ,last_updated_by
234       ,creation_date
235       ,created_by
236       ,last_update_login
237       ,request_id
238       ,program_application_id
239       ,program_id
240       ,program_update_date
241       ,score)
242     SELECT
243 	 'LIFE_CYCLE'
244       ,g_lc_measure_id
245       ,x_party_id
246       ,bdt.act_period_start_date
247       ,1
248       ,NULL
249       ,SYSDATE
250       ,g_last_updated_by
251       ,SYSDATE
252       ,g_created_by
253       ,g_last_update_login
254       ,g_request_id
255       ,g_program_application_id
256       ,g_program_id
257       ,SYSDATE
258       ,NULL
259     FROM
260        bic_temp_periods          bdt
261     WHERE
262        bdt.start_date BETWEEN g_lc_st_month AND g_lc_end_month
263     AND x_account_established_date BETWEEN
264 		  ADD_MONTHS(bdt.act_period_end_date,g_lc_new_cust_period *-1)+1
265 	    AND bdt.act_period_end_date ;
266    END LOOP;
267 
268   CLOSE party_cur;
269 
270    bic_summary_extract_pkg.debug(' exited Insert_New_Cust + : ');
271 
272   /*
273  EXCEPTION
274     WHEN DUP_VAL_ON_INDEX THEN
275 	    -- most of the times, New customwers will be insignificant category.
276         write_log('dup value for ' || x_party_id , ' knk lc' );
277 	    null;
278 
279    WHEN OTHERS THEN
280 	   write_log('Error:' || sqlerrm, 'bic_lifecycle_extract_pkg.Insert_New_Cust') ; */
281 
282 END Insert_New_Cust ;
283 
284 ---------------------------------------------------------------------------------------
285 
286 FUNCTION Common_Select  RETURN VARCHAR2 IS
287  x_n1  NUMBER ;
288  x_n2  NUMBER ;
289  x_n3  NUMBER ;
290  x_s   VARCHAR2(1100) ;
291  x_s1  VARCHAR2(200) ;
292  x_s2  VARCHAR2(40) ;
293  x_s3  VARCHAR2(20) ;
294  x_s4  VARCHAR2(40) ;
295  x_s5  VARCHAR2(50) ;
296 
297  x_sc1  VARCHAR2(60) ;
298  x_sc2  VARCHAR2(600) ;
299  x_sc3  VARCHAR2(60) ;
300 
301  BEGIN
302 
303 
304    Month_Range ( g_lc_comparison_type, g_lc_granularity_level, x_n1, x_n2, x_n3) ;
305 
306    x_s1  := 'SELECT start_date, customer_id , sum(p1_value) value_p1, sum(p2_value) value_p2
307 FROM (' ;
308 
309    x_sc1 := 'SELECT start_date, customer_id , ' ;
310    x_s2  := 'sum(c.value) p1_value, 0 p2_value ' ;
311    x_sc2 := 'FROM
312              bic_customer_summary_all c, bic_measures_all m, bic_temp_periods d
313              WHERE c.measure_id = m.measure_id
314 			AND m.measure_code = ''' || g_measure_for_lc_stage || '''
315 			AND d.start_date BETWEEN ''' || g_lc_st_month || '''
316 			AND ''' || g_lc_end_month  || '''
317 			AND c.period_start_date BETWEEN add_months(d.start_date,' ;
318 
319    x_s3  :=  TO_CHAR(x_n1) || ') AND start_date ' ;
320    x_sc3 := '
321      GROUP BY start_date, customer_id' ;
322    x_s4  := ' 0 p1_value, sum(value) p2_value ' ;
323    x_s5  :=  TO_CHAR(x_n2) || ') AND ADD_MONTHS(start_date,' || TO_CHAR(x_n3) || ') ' ;
324 
325    x_s   := x_s1 || x_sc1 || x_s2 || x_sc2 || x_s3 || x_sc3 || ' UNION ' ||
326            x_sc1 || x_s4 || x_sc2 || x_s5 || x_sc3 || ')' || x_sc3 || ')
327    WHERE value_p1 ';
328 
329    RETURN x_s ;
330 
331 END Common_Select ;
332 -------------------------------------------------------
333 
334 PROCEDURE Month_Range ( p_lc_comp_type  VARCHAR2,
335                         p_lc_gran_level VARCHAR2,
336                         p_n1            OUT NOCOPY NUMBER,
337                         p_n2            OUT NOCOPY NUMBER,
338                         p_n3            OUT NOCOPY NUMBER ) IS
339  BEGIN
340 
341    IF p_lc_gran_level = 'Year' THEN
342       p_n1 := -11 ;
343       p_n2 := -23 ;
344       p_n3 := -12 ;
345    END IF ;
346 
347      IF p_lc_comp_type = 'POP' THEN
348        IF p_lc_gran_level = 'Month' THEN
349          p_n1 := 0 ;
350          p_n2 := -1 ;
351          p_n3 := -1 ;
352        ELSIF p_lc_gran_level = 'Quarter' THEN
353          p_n1  := -2 ;
354          p_n2 := -5 ;
355          p_n3 := -3 ;
356        ELSIF p_lc_gran_level = 'Half Year' THEN
357          p_n1 := -5 ;
358          p_n2 := -11 ;
359          p_n3 := -6 ;
360        END IF;
361      ELSE   --YOY
362        IF p_lc_gran_level = 'Month' THEN
363          p_n1 := 0 ;
364          p_n2 := -12 ;
365          p_n3 := -12 ;
366        ELSIF p_lc_gran_level = 'Quarter' THEN
367          p_n1  := -2 ;
368          p_n2 := -14 ;
369          p_n3 := -12 ;
370        ELSIF p_lc_gran_level = 'Half Year' THEN
371          p_n1  := -5 ;
372          p_n2 := -17 ;
373          p_n3 := -12 ;
374        END IF;
375      END IF;
376 END Month_Range ;
377 
378 --------------------------------------------------------
379 
380 PROCEDURE Insert_Insig_Cust(p_select VARCHAR2) IS
381 
382  x_s    VARCHAR2(40) ;
383  x_s1   VARCHAR2(60) ;
384 
385  x_cust_cur curTyp;
386  i NUMBER := 1;
387  TYPE t_start_date  IS TABLE OF DATE    INDEX BY BINARY_INTEGER ;
388  TYPE t_cust_id     IS TABLE OF NUMBER  INDEX BY BINARY_INTEGER ;
389  x_start_date         t_start_date ;
390  x_cust_id            t_cust_id    ;
391 
392  BEGIN
393 
394      bic_summary_extract_pkg.debug(' entered Insert_Insig_Cust + : ');
395   x_s1 := 'SELECT start_date, customer_id  FROM (' ;
396   x_s  := ' < ' || TO_CHAR(g_lc_insig_level) || ' AND value_p2 < '
397              || TO_CHAR(g_lc_insig_level) ;
398 
399   --insert into am_tmp values('Insig_Cust -' ,x_s1 || p_select || x_s) ;
400 
401   --write_log(x_s1||p_select||x_s,'insert_insig');
402 
403 
404   OPEN x_cust_cur FOR x_s1 || p_select || x_s  ;
405   i:=1;
406   LOOP
407     FETCH x_cust_cur INTO x_start_date(i), x_cust_id(i) ;
408     EXIT WHEN x_cust_cur%NOTFOUND ;
409     i:=i+1 ;
410   END LOOP ;
411 
412   CLOSE x_cust_cur;
413 
414   i := 1 ;
415 
416   FOR i IN 1..x_cust_id.count LOOP
417     Insert_Record (NULL, g_lc_measure_id, x_start_date(i), x_cust_id(i), 6) ;
418     ----value = 6 for insignificant customer
419   END LOOP ;
420 
421      bic_summary_extract_pkg.debug(' exited Insert_Insig_Cust + : ');
422 
423   /*
424   EXCEPTION
425     WHEN OTHERS THEN
426 	 write_log('Error:' || sqlerrm || 'for party ' || x_cust_id(i), 'bic_lifecycle_extract_pkg.Insert_Insig_Cust');
427      */
428 
429 
430 END Insert_Insig_Cust ;
431 
432 ------------------------------
433 
434 PROCEDURE Insert_Others(p_select      VARCHAR2) IS
435  x_s      VARCHAR2(40) ;
436  x_s1     VARCHAR2(80) ;
437  x_growth NUMBER ;
438  x_lcf    NUMBER ;
439  x_value  NUMBER ;
440  x_cur    curTyp;
441 
442  i NUMBER := 1;
443  TYPE t_start_date  IS TABLE OF DATE    INDEX BY BINARY_INTEGER ;
444  TYPE t_cust_id     IS TABLE OF NUMBER  INDEX BY BINARY_INTEGER ;
445  TYPE t_value_p1    IS TABLE OF NUMBER  INDEX BY BINARY_INTEGER ;
446  TYPE t_value_p2    IS TABLE OF NUMBER  INDEX BY BINARY_INTEGER ;
447 
448  x_start_date   t_start_date ;
449  x_cust_id      t_cust_id    ;
450  x_value_p1     t_value_p1 ;
451  x_value_p2     t_value_p2 ;
452  BEGIN
453      bic_summary_extract_pkg.debug(' entered Insert_Others + : ');
454 
455   x_s1 := 'SELECT start_date, customer_id, value_p1, value_p2  FROM (' ;
456   x_s  := ' > ' || TO_CHAR(g_lc_insig_level) || ' OR value_p2 > '
457              || TO_CHAR(g_lc_insig_level) ;
458   --insert into am_tmp values('Other_Cust -' ,x_s1 || p_select || x_s) ;
459 
460   i:=1;
461 
462 
463   --write_log(x_s1||p_select||x_s,'insert_others');
464 
465   OPEN x_cur FOR x_s1 || p_select || x_s ;
466 
467   LOOP
468     FETCH x_cur INTO x_start_date(i), x_cust_id(i), x_value_p1(i), x_value_p2(i) ;
469     EXIT WHEN x_cur%NOTFOUND ;
470 
471     IF x_value_p2(i) > 0 THEN
472       x_growth := (x_value_p1(i) - x_value_p2(i))*100 / x_value_p2(i) ;
473       x_lcf    := ABS(x_value_p1(i) - x_value_p2(i)) * x_growth / 100 ;
474       --dbms_output.put_line('LCF    :- ' || TO_CHAR(x_lcf)) ;
475       --dbms_output.put_line('GROWTH :- ' || TO_CHAR(x_growth)) ;
476 
477       IF Find_Stage(g_op_growing1, g_op_growing2, x_growth,
478                     x_lcf, g_growing_vlu1, g_growing_vlu2) = 1 THEN
479         x_value := 2 ;
480       ELSIF Find_Stage(g_op_declining1, g_op_declining2, x_growth,
481                     x_lcf, g_declining_vlu1, g_declining_vlu2) = 1 THEN
482         x_value := 4 ;
483       ELSIF Find_Stage(g_op_defected1, g_op_defected2, x_growth,
484                     x_lcf, g_defected_vlu1, g_defected_vlu2) = 1 THEN
485         x_value := 5 ;
486       ELSE
487         x_value := 3 ;
488       END IF ;
489 
490       Insert_Record (NULL, g_lc_measure_id, x_start_date(i), x_cust_id(i), x_value) ;
491     END IF ;
492     i:=i+1 ;
493 
494   END LOOP ;
495 
496      bic_summary_extract_pkg.debug(' exited Insert_Others + : ');
497 
498   CLOSE x_cur;
499 
500   /*
501    EXCEPTION
502      WHEN OTHERS THEN
503 	   write_log('Error:' || sqlerrm || ' for party ' || x_cust_id(i), 'bic_lifecycle_extract_pkg.Insert_Others'); */
504 
505 
506 END Insert_Others ;
507 
508 
509 --------------------------------------------------------------
510 PROCEDURE Insert_Record (p_org_id       NUMBER,
511                          p_measure_id   NUMBER,
512                          p_start_date   DATE,
513                          p_cust_id      NUMBER,
514                          p_value        NUMBER) IS
515  BEGIN
516 
517 
518      INSERT INTO bic_party_summary
519             (measure_code,   measure_id,             period_start_date,      VALUE,
520              party_id,       last_update_date,       last_updated_by,
521              creation_date,  created_by,             last_update_login,
522              request_id,     program_application_id, program_id,
523              program_update_date)
524      VALUES ('LIFE_CYCLE',  p_measure_id,   p_start_date,             p_value,
525              p_cust_id,     SYSDATE,        g_last_updated_by,
526              SYSDATE,       g_created_by,   g_last_update_login,
527              g_request_id,  g_program_application_id,   g_program_id,
528              SYSDATE) ;
529 
530   EXCEPTION
531     WHEN DUP_VAL_ON_INDEX THEN
532         write_log('LifeCycle Step-up resulted: Error inside insert_record :' || SQLERRM || ' for customer ' || p_cust_id ||
533         ' period ' || p_start_date, 'bic_lifecycle_extract_pkg.Insert_Record');
534   --     NULL;
535        -- if setup data is not right and some new customer may fall in
536 	  -- these categories too.
537 
538  --   WHEN OTHERS THEN
539 	--   write_log('Error:' || sqlerrm, 'bic_lifecycle_extract_pkg.Insert_Record');
540 
541 
542 END Insert_Record ;
543 
544 ----------------------------------------------------------------------
545 FUNCTION Find_Stage  (p_op1       VARCHAR2,
546                       p_op2       VARCHAR2,
547                       p_growth    NUMBER,
548                       p_lcf       NUMBER,
549                       p_vlu1      NUMBER,
550                       p_vlu2      NUMBER) RETURN NUMBER IS
551  x_stg1  NUMBER ;
552  x_stg2  NUMBER ;
553 
554  BEGIN
555 
556  x_stg1 := 0 ;
557  x_stg2 := 0 ;
558 
559   IF p_op1 = '>=' THEN
560     IF p_growth >= p_vlu1 THEN
561        x_stg1 := 1 ;
562     END IF ;
563   END IF ;
564   IF p_op1 = '<=' THEN
565     IF p_growth <= p_vlu1 THEN
566        x_stg1 := 1 ;
567     END IF ;
568   END IF ;
569 
570   IF p_op2 = '>=' THEN
571     IF p_lcf >= p_vlu2 THEN
572        x_stg2 := 1 ;
573     END IF ;
574   END IF ;
575   IF p_op2 = '<=' THEN
576     IF p_lcf <= p_vlu2 THEN
577        x_stg2 := 1 ;
578     END IF ;
579   END IF ;
580 
581   RETURN x_stg1 * x_stg2 ;
582 
583 END Find_Stage ;
584 
585 ----------------------------------------------
586 
587 PROCEDURE Initialize IS
588 
589 BEGIN
590 
591 
592   g_last_updated_by        := fnd_global.user_id        ;
593   g_created_by             := fnd_global.user_id        ;
594   g_last_update_login      := fnd_global.login_id       ;
595   g_request_id             := fnd_global.conc_request_id;
596   g_program_application_id := fnd_global.prog_appl_id   ;
597   g_program_id             := fnd_global.conc_program_id;
598 --bic_core_pkg.rp_report_id   := 'BICCSUMM'; 4911126
599 
600    SELECT  measure_value1, measure_value2, measure_value1_op, measure_value2_op
601    INTO    g_growing_vlu1, g_growing_vlu2, g_op_growing1, g_op_growing2
602    FROM    bic_lc_setup_all
603    WHERE   stage_code = 'GROWING';
604 
605 
606 
607    SELECT  measure_value1, measure_value2, measure_value1_op, measure_value2_op
608    INTO    g_defected_vlu1, g_defected_vlu2, g_op_defected1, g_op_defected2
609    FROM    bic_lc_setup_all
610    WHERE   stage_code = 'DEFECTED';
611 
612 
613 
614 /*
615    dbms_output.put_line('g_defected_vlu1 :- ' || TO_CHAR(g_defected_vlu1)) ;
616    dbms_output.put_line('g_defected_vlu2 :- ' || TO_CHAR(g_defected_vlu2)) ;
617    dbms_output.put_line('g_op_defected1  :- ' || g_op_defected1) ;
618    dbms_output.put_line('g_op_defected2  :- ' || g_op_defected2) ;
619 */
620    SELECT  measure_value1, measure_value2, measure_value1_op, measure_value2_op
621    INTO    g_declining_vlu1, g_declining_vlu2, g_op_declining1, g_op_declining2
622    FROM    bic_lc_setup_all
623    WHERE   stage_code = 'DECLINING';
624 
625 
626 
627 
628    SELECT  lc_comparison_type,    lc_measure_code,
629            lc_granularity_level,  lc_starting_period,
630            lc_new_cust_period,    lc_insig_level
631    INTO     g_lc_comparison_type,  g_measure_for_lc_stage,
632             g_lc_granularity_level,g_lc_starting_period,
633             g_lc_new_cust_period,  g_lc_insig_level
634    FROM   bic_profile_values_all
635    WHERE  org_id IS NULL ;
636 
637 
638 
639    SELECT measure_id INTO g_lc_measure_id
640    FROM   bic_measures_all
641    WHERE  measure_code = 'LIFE_CYCLE' AND org_id IS NULL ;
642 
643 
644 
645    EXCEPTION
646 	 WHEN OTHERS THEN
647 	   write_log('Error:' || SQLERRM, 'bic_lifecycle_extract_pkg.Initialize');
648        IF  g_growing_vlu1 IS NULL OR g_growing_vlu2 IS NULL OR
649         g_op_growing1 IS NULL OR g_op_growing2 IS NULL THEN
650         RAISE NO_LC_SETUP_DATA ;
651         END IF;
652 
653        IF  g_declining_vlu1 IS NULL OR g_declining_vlu2 IS NULL OR
654         g_op_declining1 IS NULL OR g_op_declining2 IS NULL THEN
655         RAISE NO_LC_SETUP_DATA ;
656         END IF;
657 
658         IF  g_defected_vlu1 IS NULL OR g_defected_vlu2 IS NULL OR
659         g_op_defected1 IS NULL OR g_op_defected2 IS NULL THEN
660         RAISE NO_LC_SETUP_DATA ;
661         END IF;
662 
663           IF  g_lc_comparison_type IS NULL OR g_measure_for_lc_stage IS NULL OR
664         g_lc_granularity_level IS NULL OR g_lc_starting_period IS NULL OR
665         g_lc_new_cust_period IS NULL OR  g_lc_insig_level IS NULL THEN
666         RAISE NO_LC_PROFILE_DATA ;
667         END IF;
668 
669           IF  g_lc_measure_id IS NULL THEN
670             RAISE  NO_LC_MEASURE_ID;
671           END IF;
672 
673 
674 
675 END Initialize ;
676 
677 
678 PROCEDURE write_log (p_msg VARCHAR2, p_proc_name VARCHAR2) IS
679 BEGIN
680 
681    FND_FILE.PUT_LINE(fnd_file.log,SUBSTR('Life Cycle Log - ' || p_msg ||
682 				 ': ' || p_proc_name,1,2500));
683    -- bic_core_pkg.debug(p_msg);
684 
685 END write_log;
686 
687 
688 END bic_lifecycle_extract_pkg ;