DBA Data[Home] [Help]

PACKAGE BODY: APPS.OE_DBI_UTIL

Source


1 Package body OE_DBI_UTIL As
2 /* $Header: OEXUDBIB.pls 120.3.12010000.3 2009/04/15 13:26:43 ckasera ship $ */
3 
4 
5 Procedure Update_DBI_Log
6 ( x_return_status OUT NOCOPY VARCHAR2
7 
8 ) IS
9 
10 l_header_id               NUMBER;
11 l_line_id                 NUMBER;
12 I                         BINARY_INTEGER;
13 j                         BINARY_INTEGER;
14 l_exists                  VARCHAR2(1) :='N';
15 l_set_of_books_rec        oe_order_cache.Set_Of_Books_Rec_Type;
16 l_set_of_books_id         NUMBER;
17 l_currency_code           VARCHAR2(15);
18 l_last_update_date        DATE;
19 l_last_update_date_old    DATE;
20 l_header_last_update_date DATE;
21 
22 CURSOR get_lines(p_header_id number)
23 IS
24 select line_id, header_id, l_header_last_update_date, 'N'
25 from oe_order_lines_all
26 where header_id = p_header_id;
27 
28 --
29 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
30 --
31 TYPE line_index_tbl IS TABLE OF VARCHAR2(1)
32   INDEX BY VARCHAR2(40);
33 l_line_index_tbl line_index_tbl;
34 
35 TYPE T_NUM IS TABLE OF NUMBER;
36 TYPE T_DATE IS TABLE OF DATE;
37 TYPE T_V1 IS TABLE OF VARCHAR2(1);
38 
39 TYPE DBI_REC IS RECORD
40 (
41   header_id        T_NUM := T_NUM(),
42   line_id          T_NUM := T_NUM(),
43   last_update_date T_DATE := T_DATE(),
44   rec_exists_flag  T_V1 := T_V1()
45 );
46 
47 l_dbi_rec DBI_REC;
48 l_dbi_create_rec DBI_REC;
49 
50 BEGIN
51 
52    IF l_debug_level  > 0 THEN
53        oe_debug_pub.add(  'ENTERING UPDATE_DBI API' , 1 ) ;
54    END IF;
55    x_return_status      := FND_API.G_RET_STS_SUCCESS;
56 
57    l_set_of_books_rec := OE_ORDER_CACHE.LOAD_SET_OF_BOOKS;
58    l_set_of_books_id := l_set_of_books_rec.set_of_books_id;
59    l_currency_code := l_set_of_books_rec.currency_code;
60 
61    IF (l_set_of_books_id IS NULL) OR (l_currency_code IS NULL) THEN
62         oe_debug_pub.add(  'SET_OF_BOOKS_ID= '|| L_SET_OF_BOOKS_ID , 1 ) ;
63         oe_debug_pub.add(  'CURRENCY_CODE= '|| L_CURRENCY_CODE , 1 ) ;
64         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
65    END IF;
66 
67 
68    IF (oe_order_util.g_header_rec.header_id is NOT NULL AND
69        oe_order_util.g_header_rec.header_id <> FND_API.G_MISS_NUM AND
70        oe_order_util.g_line_tbl.COUNT = 0 AND
71        oe_order_util.g_line_scredit_tbl.COUNT = 0 AND
72        oe_order_util. g_line_adj_tbl.COUNT = 0)
73    THEN
74 
75        /* Some field in the header is changed and no line level changes */
76        IF l_debug_level  > 0 THEN
77            oe_debug_pub.add(  'SOMETHING IN THE HEADER CHANGED' ) ;
78        END IF;
79        l_header_id := oe_order_util.g_header_rec.header_id;
80        IF l_debug_level  > 0 THEN
81            oe_debug_pub.add(  'JPN: HEADER ID' || L_HEADER_ID ) ;
82        END IF;
83        l_header_last_update_date := oe_order_util.g_header_rec.last_update_date;
84 
85    ELSIF (oe_order_util.g_header_scredit_tbl.count > 0 AND
86           oe_order_util.g_line_tbl.COUNT = 0 AND
87           oe_order_util.g_line_scredit_tbl.COUNT = 0) THEN
88 
89        -- Some field in the header sales credit changed and no line level
90        -- changes
91 
92        IF l_debug_level  > 0 THEN
93            oe_debug_pub.add(  'SOMETHING IN THE HEADER sales credit CHANGED' ) ;
94        END IF;
95        I := oe_order_util.g_old_header_scredit_tbl.FIRST;
96        l_header_id := oe_order_util.g_old_header_scredit_tbl(I).header_id;
97        IF l_debug_level  > 0 THEN
98            oe_debug_pub.add(  'JPN: HEADER ID' || L_HEADER_ID ) ;
99        END IF;
100 
101        IF  oe_order_util.g_header_scredit_tbl(I).last_update_date IS NULL THEN
102            l_header_last_update_date :=
103                    oe_order_util.g_old_header_scredit_tbl(I).last_update_date;
104        ELSE
105            l_header_last_update_date :=
106                    oe_order_util.g_header_scredit_tbl(I).last_update_date;
107        END IF;
108        IF l_debug_level  > 0 THEN
109            oe_debug_pub.add(  'LAST UPDATE DATE OLD=' || l_header_last_update_date ) ;
110        END IF;
111 
112    ELSIF  (oe_order_util.g_header_adj_tbl.count > 0 ) THEN
113 
114        IF l_debug_level  > 0 THEN
115            oe_debug_pub.add(  'SOMETHING IN THE HEADER ADJUSTMENTS CHANGED' ) ;
116        END IF;
117        I := oe_order_util.g_header_adj_tbl.FIRST;
118        l_header_id := oe_order_util.g_header_adj_tbl(I).header_id;
119 
120        IF l_debug_level  > 0 THEN
121            oe_debug_pub.add(  'JPN: HEADER ID' || L_HEADER_ID ) ;
122        END IF;
123 
124        l_header_last_update_date := oe_order_util.g_header_adj_tbl(I).last_update_date;
125 
126         IF l_debug_level  > 0 THEN
127            oe_debug_pub.add(  'LAST UPDATE DATE OLD=' || l_header_last_update_date ) ;
128        END IF;
129 
130    END IF;
131 
132    IF l_header_id IS NOT NULL THEN
133 
134        BEGIN
135            IF l_debug_level  > 0 THEN
136               oe_debug_pub.add( 'Opening  get_lines' ) ;
137            END IF;
138            OPEN get_lines(l_header_id);
139            FETCH get_lines BULK COLLECT INTO
140                l_dbi_rec.line_id,
141                l_dbi_rec.header_id,
142                l_dbi_rec.last_update_date,
143                l_dbi_rec.rec_exists_flag;
144            IF get_lines%ROWCOUNT = 0 THEN
145                raise NO_DATA_FOUND;
146            END IF;
147            CLOSE get_lines;
148 
149        EXCEPTION
150            WHEN NO_DATA_FOUND THEN
151            IF l_debug_level  > 0 THEN
152               oe_debug_pub.add( 'There are no lines in this order' ) ;
153            END IF;
154            -- Header has no lines.
155            RETURN;
156        END;
157        GOTO HANDLE_DBI_REC;
158 
159    END IF;
160 
161    j := 1;
162 
163    -- Check if there are changed lines
164    IF oe_order_util.g_line_tbl.COUNT > 0 THEN
165 
166         l_dbi_rec.line_id.EXTEND(oe_order_util.g_line_tbl.COUNT);
167         l_dbi_rec.last_update_date.EXTEND(oe_order_util.g_line_tbl.COUNT);
168         l_dbi_rec.rec_exists_flag.EXTEND(oe_order_util.g_line_tbl.COUNT);
169         l_dbi_rec.header_id.EXTEND(oe_order_util.g_line_tbl.COUNT); ---bug 7319732,7347663
170         I := oe_order_util.g_line_tbl.FIRST;
171         l_header_id := oe_order_util.g_old_line_tbl(I).header_id;
172 
173         IF l_debug_level  > 0 THEN
174            oe_debug_pub.add(  'IN LINE HEADER_ID= '||L_HEADER_ID, 1 ) ;
175         END IF;
176         WHILE I IS NOT NULL LOOP
177             IF l_debug_level  > 0 THEN
178             oe_debug_pub.add(  'LOOP INDEX='|| I , 1 ) ;
179             END IF;
180 
181             l_dbi_rec.line_id(j) :=oe_order_util.g_old_line_tbl(I).line_id;
182             l_dbi_rec.rec_exists_flag(j) := 'N';
183             l_dbi_rec.header_id(j) :=oe_order_util.g_old_line_tbl(I).Header_id ;--bug 7319732,7347663
184             -- Set the value for line_index table to Y to indicate that record
185             -- already captured in l_dbi_rec.line_id for the given line_id.
186             l_line_index_tbl(l_dbi_rec.line_id(j)) := 'Y';
187 
188             IF oe_order_util.g_line_tbl(I).last_update_date IS NULL THEN
189                 l_dbi_rec.last_update_date(j) :=
190                           oe_order_util.g_old_line_tbl(I).last_update_date;
191             ELSE
192                 l_dbi_rec.last_update_date(j) :=
193                           oe_order_util.g_line_tbl(I).last_update_date;
194             END IF;
195 
196             IF l_debug_level  > 0 THEN
197               oe_debug_pub.add(  'LINE_ID= '||l_dbi_rec.line_id(j) ) ;
198               oe_debug_pub.add(  'LAST UPDATE DATE=' || l_dbi_rec.last_update_date(j) ) ;
199               oe_debug_pub.add(  'LINE TBL HEADER ID=' || L_HEADER_ID ) ;
200               oe_debug_pub.add( 'LINE TBL HEADER ID=' ||l_dbi_rec.header_id(j)); --bug 7319732,7347663
201             END IF;
202             I := oe_order_util.g_line_tbl.NEXT(I);
203             j := j + 1;
204         END LOOP;
205    END IF;
206 
207    IF l_dbi_rec.line_id.COUNT > 0 THEN
208        j := l_dbi_rec.line_id.COUNT + 1;
209    ELSE
210        j := 1;
211    END IF;
212 
213    IF oe_order_util.g_line_scredit_tbl.COUNT > 0 THEN
214 
215        I := oe_order_util.g_line_scredit_tbl.FIRST;
216        l_header_id := oe_order_util.g_old_line_scredit_tbl(I).header_id;
217        IF l_debug_level  > 0 THEN
218         oe_debug_pub.add(  'IN LINE SC HEADER_ID= '|| l_header_id, 1 ) ;
219        END IF;
220 
221        WHILE I IS NOT NULL LOOP
222           IF l_debug_level  > 0 THEN
223             oe_debug_pub.add(  'LOOP INDEX='|| I , 1 ) ;
224           END IF;
225 
226           l_line_id :=oe_order_util.g_old_line_scredit_tbl(I).line_id;
227           IF NOT l_line_index_tbl.EXISTS(to_char(l_line_id)) THEN
228 
229               l_dbi_rec.line_id.EXTEND;
230               l_dbi_rec.last_update_date.EXTEND;
231               l_dbi_rec.rec_exists_flag.EXTEND;
232               l_dbi_rec.Header_id.EXTEND ; ---bug 7319732 ,7347663
233               l_dbi_rec.Header_id(j) :=oe_order_util.g_old_line_scredit_tbl(I).header_id; --bug 7319732,7347663
234               l_dbi_rec.line_id(j) := oe_order_util.g_old_line_scredit_tbl(I).line_id;
235               l_dbi_rec.rec_exists_flag(j) := 'N';
236               -- Set the value for line_index table to Y to indicate that record
237               -- already captured in l_dbi_rec.line_id for the given line_id.
238               l_line_index_tbl(l_dbi_rec.line_id(j)) := 'Y';
239 
240               IF oe_order_util.g_line_scredit_tbl(I).last_update_date IS NULL
241               THEN
242                   l_dbi_rec.last_update_date(j) :=
243                        oe_order_util.g_old_line_scredit_tbl(I).last_update_date;
244               ELSE
245                   l_dbi_rec.last_update_date(j) :=
246                        oe_order_util.g_line_scredit_tbl(I).last_update_date;
247 
248               END IF;
249               IF l_debug_level  > 0 THEN
250                 oe_debug_pub.add(  'LINE_ID= '||l_dbi_rec.line_id(j) ) ;
251                 oe_debug_pub.add(  'LAST UPDATE DATE=' || l_dbi_rec.last_update_date(J) ) ;
252               END IF;
253               j := j + 1;
254 
255           END IF;
256           I := oe_order_util.g_line_scredit_tbl.NEXT(I);
257        END LOOP;
258 
259    END IF;
260 
261    IF l_dbi_rec.line_id.COUNT > 0 THEN
262        j := l_dbi_rec.line_id.COUNT + 1;
263    ELSE
264        j := 1;
265    END IF;
266 
267    IF oe_order_util.g_line_adj_tbl.COUNT >0 THEN
268 
269        I := oe_order_util.g_line_adj_tbl.FIRST;
270        l_header_id := oe_order_util.g_old_line_adj_tbl(I).header_id;
271 
272        IF l_debug_level  > 0 THEN
273           oe_debug_pub.add(  'IN LINE PRICE ADJUSTMENTS HEADER_ID= '|| l_header_id, 1 ) ;
274        END IF;
275 
276         WHILE I IS NOT NULL LOOP
277           IF l_debug_level  > 0 THEN
278               oe_debug_pub.add(  'PA  LOOP INDEX='|| I , 1 ) ;
279           END IF;
280           l_line_id :=oe_order_util.g_old_line_adj_tbl(I).line_id;
281 
282           IF NOT l_line_index_tbl.EXISTS(to_char(l_line_id)) THEN
283 
284               l_dbi_rec.line_id.EXTEND;
285               l_dbi_rec.last_update_date.EXTEND;
286               l_dbi_rec.rec_exists_flag.EXTEND;
287               l_dbi_rec.Header_id.EXTEND ; ---bug 7319732 ,7347663
288               l_dbi_rec.Header_id(j) :=oe_order_util.g_old_line_adj_tbl(I).header_id; --bug 7319732 ,7347663
289               l_dbi_rec.line_id(j) := oe_order_util.g_old_line_adj_tbl(I).line_id;
290               l_dbi_rec.rec_exists_flag(j) := 'N';
291               -- Set the value for line_index table to Y to indicate that record
292               -- already captured in l_dbi_rec.line_id for the given line_id.
293               l_line_index_tbl(l_dbi_rec.line_id(j)) := 'Y';
294 
295               IF oe_order_util.g_line_adj_tbl(I).last_update_date IS NULL
296               THEN
297                   l_dbi_rec.last_update_date(J) :=
298                        oe_order_util.g_old_line_adj_tbl(I).last_update_date;
299               ELSE
300                   l_dbi_rec.last_update_date(J) :=
301                        oe_order_util.g_line_adj_tbl(I).last_update_date;
302 
303               END IF;
304               IF l_debug_level  > 0 THEN
305                 oe_debug_pub.add(  'LINE_ID= '||l_dbi_rec.line_id(j) ) ;
306                 oe_debug_pub.add(  'LAST UPDATE DATE=' || l_dbi_rec.last_update_date(J) ) ;
307               END IF;
308               j := j + 1;
309 
310           END IF;
311           I := oe_order_util.g_line_adj_tbl.NEXT(I);
312 
313         END LOOP;
314 
315    END IF;
316 
317    <<HANDLE_DBI_REC>>
318 
319    j:= 0;
320 
321   IF (l_dbi_rec.line_id.count > 0 ) THEN -- Bug # 5022517
322 
323    FOR i IN l_dbi_rec.line_id.FIRST..l_dbi_rec.line_id.LAST LOOP
324 
325        BEGIN
326            IF l_debug_level > 0 THEN
327                oe_debug_pub.add(' Trying to lock the ONT_DBI_CHANGE_LOG');
328            END IF;
329 
330            -- Check if the record exists in ONT_DBI_CHANGE_LOG.
331            -- If yes then first take a lock on that record.
332 
333            SELECT 'Y'
334            INTO l_dbi_rec.rec_exists_flag(i)
335            FROM ONT_DBI_CHANGE_LOG
336            ---  WHERE header_id = l_header_id  bug 7319732 ,7347663
337            WHERE header_id=l_dbi_rec.header_id(i) ---bug 7319732 ,7347663
338            AND line_id = l_dbi_rec.line_id(i)
339            AND set_of_books_id = l_set_of_books_id
340            AND currency_code   = l_currency_code
341            FOR UPDATE;
342 
343        EXCEPTION
344               WHEN NO_DATA_FOUND THEN
345                IF l_debug_level > 0 THEN
346                  oe_debug_pub.add(' Record does not exist');
347                END IF;
348                null;
349               WHEN TOO_MANY_ROWS THEN
350                IF l_debug_level > 0 THEN
351                  oe_debug_pub.add(' Multiple records exists');
352                END IF;
353                l_dbi_rec.rec_exists_flag(i) := 'Y';
354        END;
355 
356        -- If record doesn't exists then mark it for CREATE
357        IF l_dbi_rec.rec_exists_flag(i) = 'N' THEN
358            j := j + 1;
359            l_dbi_create_rec.header_id.EXTEND ; ---bug 7319732 ,7347663
360            l_dbi_create_rec.line_id.EXTEND;
361            l_dbi_create_rec.last_update_date.EXTEND;
362            l_dbi_create_rec.line_id(j) := l_dbi_rec.line_id(i);
363            l_dbi_create_rec.last_update_date(j) := l_dbi_rec.last_update_date(i);
364            l_dbi_create_rec.header_id(j):=l_dbi_rec.header_id(i) ; ---bug 7319732,7347663
365            IF l_debug_level > 0 THEN
366                oe_debug_pub.add(' Creating new record ' || j);
367                oe_debug_pub.add(' Line_Id is ' || l_dbi_create_rec.line_id(j));
368            END IF;
369        END IF;
370 
371    END LOOP;
372 
373   END IF; --  Bug # 5022517
374 
375    IF l_dbi_create_rec.line_id.EXISTS(1) THEN
376    -- Create records in ONT_DBI_CHANGE_LOG
377      ---changed l_header_id to l_dbi_create_rec.header_id(j) --bug 7319732,7347663
378       IF l_debug_level > 0 THEN
379           oe_debug_pub.add('Inserting new records ' || l_dbi_create_rec.line_id.COUNT );
380       END IF;
381       FORALL i IN 1..l_dbi_create_rec.line_id.COUNT
382           INSERT INTO  ONT_DBI_CHANGE_LOG
383           (HEADER_ID
384           ,LINE_ID
385           ,SET_OF_BOOKS_ID
386           ,CURRENCY_CODE
387           ,LAST_UPDATE_DATE
388           )
389           VALUES
390          (l_dbi_create_rec.header_id(i)
391          ,l_dbi_create_rec.line_id(i)
392          ,l_set_of_books_id
393          ,l_currency_code
394          ,l_dbi_create_rec.last_update_date(i)
395          );
396    END IF;
397   --removed l_dbi_create_rec.header_id(j) in above update bug 7647650,7562662
398    -- If all records are new then no need to execute UPDATE.
399    IF j <> l_dbi_rec.line_id.COUNT THEN
400       IF l_debug_level > 0 THEN
401           oe_debug_pub.add('Updating existing records '|| l_dbi_rec.line_id.COUNT );
402       END IF;
403 
404        FORALL i in 1..l_dbi_rec.line_id.COUNT
405        UPDATE ONT_DBI_CHANGE_LOG
406        SET LAST_UPDATE_DATE = SYSDATE
407        --WHERE HEADER_ID       = l_header_id
408        WHERE HEADER_ID = l_dbi_rec.header_id(i) --bug 7319732,7347663
409        AND   LINE_ID         = l_dbi_rec.line_id(i)
410        AND   SET_OF_BOOKS_ID = l_set_of_books_id
411        AND   CURRENCY_CODE   = l_currency_code
412        AND  l_dbi_rec.rec_exists_flag(i) = 'Y';
413 
414    END IF;
415 
416 EXCEPTION
417    WHEN NO_DATA_FOUND THEN
418         IF l_debug_level  > 0 THEN
419             oe_debug_pub.add(  'NO DATA FOUND' , 1 ) ;
420         END IF;
421         x_return_status := FND_API.G_RET_STS_ERROR;
422         RAISE FND_API.G_EXC_ERROR;
423    WHEN OTHERS THEN
424         IF l_debug_level  > 0 THEN
425             oe_debug_pub.add(  'In Others of Update_DBI_Log' , 1 ) ;
426             oe_debug_pub.add(  SUBSTR ( SQLERRM , 1 , 240 ) ) ;
427         END IF;
428         IF OE_MSG_PUB.Check_MSg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
429         THEN
430         OE_MSG_PUB.Add_Exc_Msg
431            (G_PKG_NAME
432             ,'Update_DBI_log');
433         END IF;
434         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
435         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
436 
437 END Update_DBI_Log;
438 
439 END OE_DBI_UTIL;