DBA Data[Home] [Help]

PACKAGE BODY: APPS.POA_SAVINGS_MAIN

Source


1 PACKAGE BODY poa_savings_main AS
2 /* $Header: poasvp1b.pls 120.0 2005/06/01 12:47:24 appldev noship $ */
3 
4   /*
5     NAME
6       populate_savings -
7     DESCRIPTION
8      main function for populating poa_savings fact table
9      for Oracle Purchasing
10   */
11   --
12   PROCEDURE populate_savings(p_start_date IN DATE, p_end_date IN DATE,
13                              p_populate_inc IN BOOLEAN := TRUE)
14   IS
15 
16   TYPE T_FLEXREF IS REF CURSOR;
17 
18   v_num_rows            NUMBER := 0;
19   v_start_time          DATE;
20 
21   v_account_cursor      T_FLEXREF;
22   v_ccid                NUMBER := 0;
23   v_cost_center_id      VARCHAR2(2000) := NULL;
24   v_account_id          VARCHAR2(2000) := NULL;
25   v_company_id          VARCHAR2(2000) := NULL;
26   v_set_of_books_id     NUMBER := 0;
27 
28   v_buf                 VARCHAR2(240) := NULL;
29   x_progress            VARCHAR2(3) := NULL;
30 
31   --
32   l_poa_schema          VARCHAR2(30);
33   l_stmt  		VARCHAR2(120);
34   l_status		VARCHAR2(30);
35   l_industry		VARCHAR2(30);
36   l_batch_size          NUMBER := fnd_profile.value('POA_COLLECTION_BATCH_SIZE');
37   l_no_batch            NUMBER;
38   cursor v_changed_rows(p_start_date date,p_end_date date,p_batch_size number) is
39         SELECT PO_DISTRIBUTION_ID, 1,ceil(rownum/p_batch_size)
40          FROM (SELECT  pod.PO_DISTRIBUTION_ID,pol.item_id,pod.creation_date
41         FROM    po_lines_all                    pol,
42                 po_line_locations_all           pll,
43                 po_headers_all                  poh,
44                 po_distributions_all            pod
45         WHERE   pod.line_location_id            = pll.line_location_id
46         and     pod.po_line_id                  = pol.po_line_id
47         and     pod.po_header_id                = poh.po_header_id
48         and     pll.shipment_type               = 'STANDARD'
49         and     pll.approved_flag               = 'Y'
50         and     nvl(pod.distribution_type,'-99') <> 'AGREEMENT'
51         and     greatest(pol.last_update_date, pll.last_update_date,
52                          poh.last_update_date, pod.last_update_date, nvl(pod.program_update_date, pod.last_update_date))
53                 between  p_start_date and p_end_date
54         UNION ALL
55         SELECT  pod.PO_DISTRIBUTION_ID,pol.item_id,pod.creation_date
56         FROM    po_lines_all                    pol,
57                 po_line_locations_all           pll,
58                 po_headers_all                  poh,
59                 po_releases_all                 por,
60                 po_distributions_all            pod
61         WHERE   pod.line_location_id            = pll.line_location_id
62         and     pod.po_release_id               = por.po_release_id
63         and     pod.po_line_id                  = pol.po_line_id
64         and     pod.po_header_id                = poh.po_header_id
65         and     pll.shipment_type               in ('BLANKET', 'SCHEDULED')
66         and     pll.approved_flag               = 'Y'
67         and     nvl(pod.distribution_type,'-99') <> 'AGREEMENT'
68         and     greatest(pol.last_update_date,pll.last_update_date,
69                    poh.last_update_date,por.last_update_date,pod.last_update_date, nvl(pod.program_update_date, pod.last_update_date))
70                 between  p_start_date and p_end_date)
71        order by item_id,creation_date;
72 
73     TYPE plsqltable IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
74     l_primary_key plsqltable;
75     l_seq_id      plsqltable;
76     l_batch_id    plsqltable;
77     l_count NUMBER;
78     l_start_time date;
79     l_end_time date;
80   BEGIN
81     select sysdate into l_start_time from dual;
82     POA_LOG.debug_line('Populate_savings: entered');
83     POA_LOG.debug_line(' ');
84 
85     -- check if we need to populate the INC table poa_edw_po_dist_inc.
86     -- For EDW, we don't need to, since that is taken care in Push program.
87     -- For OLTP, we should.
88 
89      if p_populate_inc then
90 
91         IF (FND_INSTALLATION.GET_APP_INFO('POA',l_status,l_industry,l_poa_schema)) THEN
92           l_stmt := 'TRUNCATE TABLE ' || l_poa_schema ||'.POA_EDW_PO_DIST_INC';
93           EXECUTE IMMEDIATE l_stmt;
94         END IF;
95         open v_changed_rows(p_start_date,p_end_date,l_batch_size);
96         loop
97         /* l_primary_key.delete; l_seq_id.delete; l_batch_id.delete; */
98           fetch v_changed_rows bulk collect into
99                 l_primary_key,l_seq_id,l_batch_id limit l_batch_size;
100           l_count := l_primary_key.count;
101           forall i in 1..l_count
102 	    INSERT INTO poa_edw_po_dist_inc (primary_key, seq_id,batch_id) values(l_primary_key(i),l_seq_id(i),l_batch_id(i));
103           EXIT WHEN l_count < l_batch_size;
104         end loop;
105         close v_changed_rows;
106         select sysdate into l_end_time from dual;
107         poa_log.put_line('time to populate incremental table: '|| poa_log.duration(l_end_time-l_start_time) || ', start time: ' || to_char(l_start_time, 'MM/DD/YYYY HH24:MI:SS') || ', end time: ' || to_char(l_end_time, 'MM/DD/YYYY HH24:MI:SS'));
108      end if;
109     -----------------------------------------------------------------------
110 
111 
112     -- Temporary table is used for running the report.
113     -- Delete from the temporary table where the entries
114     -- are more than 2 days old.
115 
116     x_progress := '015';
117     delete from poa_bis_savings_rpt
118     where  last_update_date <= sysdate - 2;
119 
120     -- Get the current timestamp. All entries inserted into
121     -- the fact table will use this timestamp as the last updated
122     -- date and date of creation.
123 
124     x_progress := '020';
125 
126     select max(batch_id) into l_no_batch from poa_edw_po_dist_inc;
127 
128     SELECT sysdate INTO v_start_time from sys.dual;
129 
130     if (l_no_batch is NOT NULL) then
131       FOR v_batch_no IN 0..l_no_batch LOOP
132         poa_savings_np.populate_npcontract(p_start_date, p_end_date,
133                                            v_start_time, v_batch_no);
134         poa_savings_con.populate_contract(p_start_date, p_end_date,
135                                           v_start_time, v_batch_no);
136         commit;
137       END LOOP;
138     end if;
139 
140     select sysdate into l_end_time from dual;
141     poa_log.put_line('total time taken for bis savings : '||poa_log.duration(l_end_time-l_start_time));
142 
143     /* Loop through to get the account information for each
144      * distribution
145      */
146 
147     /* The account information is currently not used by any reports.
148      * Scoping this out for now.
149      */
150 
151 /*
152     POA_LOG.debug_line('Opening cursor v_account_cursor');
153     POA_LOG.debug_line(' ');
154 
155     OPEN v_account_cursor FOR
156     SELECT distinct pod.code_combination_id
157     ,      pod.set_of_books_id
158     FROM   po_distributions_all pod
159     where  pod.po_distribution_id IN
160       (SELECT distinct poa.distribution_transaction_id
161       FROM poa_bis_savings poa);
162 
163 
164     LOOP
165       FETCH v_account_cursor INTO
166       v_ccid,
167       v_set_of_books_id;
168       EXIT WHEN v_account_cursor%NOTFOUND;
169 
170       poa_savings_acct.get_cac_info(v_ccid, v_set_of_books_id,
171                                     v_cost_center_id,
172                                     v_account_id,
173                                     v_company_id);
174 
175       x_progress := '030';
176       UPDATE poa_bis_savings poa
177       set cost_center_id = v_cost_center_id,
178           account_id     = v_account_id,
179           company_id     = v_company_id
180       WHERE poa.distribution_transaction_id IN
181         (SELECT pod.po_distribution_id
182         FROM po_distributions_all pod
183         WHERE pod.code_combination_id = v_ccid
184         and   pod.set_of_books_id = v_set_of_books_id);
185 
186     END LOOP;
187     CLOSE v_account_cursor;
188 
189     POA_LOG.debug_line('Closed cursor v_account_cursor');
190     POA_LOG.debug_line(' ');
191 
192     POA_LOG.debug_line('Populate_savings: Updating account complete ');
193     POA_LOG.debug_line(' ');
194 */
195     POA_LOG.debug_line('Populate_savings: exit');
196     POA_LOG.debug_line(' ');
197 
198   EXCEPTION
199     WHEN others THEN
200       v_buf := 'Main function: ' || sqlcode || ': ' || sqlerrm || ': ' || x_progress;
201       ROLLBACK;
202 
203       POA_LOG.put_line(v_buf);
204       POA_LOG.put_line(' ');
205       RAISE;
206   END populate_savings;
207   --
208 
209 END poa_savings_main;
210 --