DBA Data[Home] [Help]

PACKAGE BODY: APPS.OZF_TRACING_ORDER_PVT

Source


4 -- PACKAGE:
1 PACKAGE BODY OZF_TRACING_ORDER_PVT AS
2 /* $Header: ozfvotrb.pls 120.12.12020000.2 2012/07/20 09:35:14 nepanda ship $ */
3 -------------------------------------------------------------------------------
5 -- OZF_TRACING_ORDER_PVT
6 --
7 -- PURPOSE:
8 -- Private API for Tracing batch.
9 --
10 -- HISTORY:
11 -- 15-Apr-2009  ateotia   Bug# 8414563 fixed.
12 -- 06-May-2009  ateotia   Bug# 8489216 fixed.
13 --                        Moved the logic of End Customer/Bill_To/Ship_To
14 --                        Party creation to Common Resale API.
15 -------------------------------------------------------------------------------
16 
17 G_PKG_NAME  CONSTANT VARCHAR2(30) := 'OZF_TRACING_ORDER_PVT';
18 G_FILE_NAME CONSTANT VARCHAR2(30) := 'ozfvoctrb.pls';
19 
20 OZF_DEBUG_HIGH_ON BOOLEAN := FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_debug_high);
21 OZF_DEBUG_LOW_ON BOOLEAN  := FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_debug_low);
22 
23 ---------------------------------------------------------------------
24 -- PROCEDURE
25 --    Initiate_payment
26 --
27 -- PURPOSE
28 --    Initiate payment for a batch.
29 --
30 -- PARAMETERS
31 --
32 -- NOTES
33 --
34 ---------------------------------------------------------------------
35 PROCEDURE Initiate_payment (
36     p_api_version            IN    NUMBER
37    ,p_init_msg_list          IN    VARCHAR2 := FND_API.G_FALSE
38    ,p_commit                 IN    VARCHAR2 := FND_API.G_FALSE
39    ,p_validation_level       IN    NUMBER   := FND_API.G_VALID_LEVEL_FULL
40    ,p_resale_batch_id        IN    NUMBER
41    ,x_return_status          OUT NOCOPY   VARCHAR2
42    ,x_msg_data               OUT NOCOPY   VARCHAR2
43    ,x_msg_count              OUT NOCOPY   NUMBER
44 )
45 IS
46 l_api_name          CONSTANT VARCHAR2(30) := 'Initiate_payment';
47 l_api_version       CONSTANT NUMBER := 1.0;
48 l_full_name         CONSTANT VARCHAR2(60) := G_PKG_NAME ||'.'|| l_api_name;
49 --
50 l_return_status     VARCHAR2(30);
51 l_msg_data          VARCHAR2(2000);
52 l_msg_count         NUMBER;
53 l_direct_order_flag VARCHAR2(1) := 'N';
54 l_org_id			 NUMBER;
55 
56 CURSOR batch_info_csr (p_id in NUMBER) IS
57 SELECT status_code,
58        batch_type,
59        partner_cust_account_id,
60        partner_party_id,
61        report_start_date,
62        report_end_date,
63        batch_number,
64        last_updated_by,
65        NVL(direct_order_flag,'N'),  --For Bug#9447673 SSD IDSM
66        org_id
67   FROM ozf_resale_batches_all
68  WHERE resale_batch_id = p_id;
69 l_batch_status VARCHAR2(30);
70 l_batch_type   VARCHAR2(30);
71 l_partner_cust_account_id NUMBER;
72 l_partner_party_id NUMBER;
73 l_report_start_date date;
74 l_report_end_date date;
75 l_batch_NUMBER VARCHAR2(240);
76 l_last_updated_by NUMBER(15);
77 
78 
79 CURSOR OPEN_line_count_csr (p_id in NUMBER) IS
80 SELECT count(1)
81 From ozf_resale_lines_int
82 WHERE resale_batch_id = p_id
83 AND status_code = OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_OPEN;
84 l_count NUMBER;
85 
86 TYPE id_type IS RECORD (
87 id NUMBER
88 );
89 
90 TYPE id_tbl_type is TABLE OF id_type INDEX BY binary_integer;
91 
92 l_line_int_rec OZF_RESALE_COMMON_PVT.g_interface_rec_csr%rowtype;
93 
94 CURSOR valid_line_id_csr(p_id in NUMBER,
95                          p_order_number in VARCHAR2,
96                          p_cust_id in NUMBER,
97                          p_date in DATE)
98 IS
99 SELECT resale_line_int_id
100   FROM ozf_resale_lines_int
101  WHERE resale_batch_id = p_id
102    AND order_number = p_order_number
103    AND sold_from_cust_account_id = p_cust_id
104    AND date_ordered = p_date
105    AND status_code = 'PROCESSED';
106    --AND status_code in (OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_DUPLICATED, OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_PROCESSED);
110 l_valid_line_id_tbl id_tbl_type;
107    --AND duplicated_adjustment_id <> -1;
108 
109 
111 
112 i NUMBER;
113 
114 l_create_order_header boolean := false;
115 
116 CURSOR dup_header_id_csr( p_id IN NUMBER
117                         , p_order_number IN VARCHAR2
118                         , p_cust_id IN NUMBER
119                         , p_date IN DATE
120                         ) IS
121    SELECT a.resale_header_id
122    FROM ozf_resale_headers a
123       , ozf_resale_lines_int b
124       , ozf_resale_lines c
125    WHERE b.resale_batch_id = p_id
126    AND b.order_number = p_order_number
127    AND b.sold_from_cust_account_id = p_cust_id
128    AND b.date_ordered = p_date
129    AND b.status_code IN ('DUPLICATED', 'PROCESSED')
130    AND b.duplicated_line_id = c.resale_line_id
131    AND c.resale_header_id = a.resale_header_id;
132 
133 l_dup_header_id_tbl OZF_RESALE_COMMON_PVT.number_tbl_type;
134 
135 l_header_id NUMBER;
136 l_line_id   NUMBER;
137 
138 CURSOR batch_order_num_csr(p_id in NUMBER)is
139 SELECT DISTINCT order_number,
140        sold_from_cust_account_id,
141        date_ordered
142 FROM ozf_resale_lines_int
143 WHERE resale_batch_id = p_id
144 AND status_code in(OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_DUPLICATED, OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_PROCESSED)
145 --AND duplicated_adjustment_id <> -1
146 ORDER BY date_ordered;
147 
148 TYPE order_num_tbl_type is TABLE OF batch_order_num_csr%rowtype INDEX BY binary_integer;
149 l_order_num_tbl order_num_tbl_type;
150 
151 l_inventory_tracking VARCHAR2(1);
152 
153 l_sales_transaction_rec OZF_SALES_TRANSACTIONS_PVT.SALES_TRANSACTION_REC_TYPE;
154 
155 l_inventory_level_valid boolean;
156 l_sales_transaction_id NUMBER;
157 
158 CURSOR end_cust_relation_flag_csr IS
159   SELECT end_cust_relation_flag
160   -- BUG 4992408 (+)
161   -- FROM ozf_sys_parameters_all;
162   FROM ozf_sys_parameters;
163   -- BUG 4992408 (-)
164 
165 l_end_cust_relation_flag varchar2(30);
166 
167 --Bug# 8489216 fixed by ateotia(+)
168 /*
169 l_new_party_rec   OZF_RESALE_COMMON_PVT.party_rec_type;
170 
171 CURSOR csr_orig_billto_cust(cv_resale_batch_id IN NUMBER) IS
172    SELECT DISTINCT bill_to_party_name
173         , bill_to_address
174         , bill_to_city
175         , bill_to_state
176         , bill_to_postal_code
177         , bill_to_country
178    FROM ozf_resale_lines_int_all
179    WHERE resale_batch_id = cv_resale_batch_id
180    AND status_code = 'PROCESSED'
181    AND ( duplicated_line_id IS NULL
182       OR ( duplicated_line_id IS NOT NULL AND duplicated_adjustment_id = -1))
183    AND bill_to_party_id IS NULL
184    AND bill_to_cust_account_id IS NULL
185    AND bill_to_party_name IS NOT NULL;
186 
187 TYPE orig_billto_cust_tbl_type IS TABLE of csr_orig_billto_cust%ROWTYPE
188 INDEX BY BINARY_INTEGER;
189 l_orig_billto_cust_tbl       orig_billto_cust_tbl_type;
190 
191 CURSOR csr_orig_end_cust(cv_resale_batch_id IN NUMBER) IS
192    SELECT DISTINCT end_cust_party_name
193         , end_cust_address
194         , end_cust_city
195         , end_cust_state
196         , end_cust_postal_code
197         , end_cust_country
198         , end_cust_site_use_code
199    FROM ozf_resale_lines_int_all
200    WHERE resale_batch_id = cv_resale_batch_id
201    AND status_code = 'PROCESSED'
202    AND ( duplicated_line_id IS NULL
203       OR ( duplicated_line_id IS NOT NULL AND duplicated_adjustment_id = -1))
204    AND end_cust_party_id IS NULL
205    AND end_cust_party_name IS NOT NULL;
206 
207 TYPE orig_end_cust_tbl_type IS TABLE of csr_orig_end_cust%ROWTYPE
208 INDEX BY BINARY_INTEGER;
209 l_orig_end_cust_tbl       orig_end_cust_tbl_type;
210 */
211 --Bug# 8489216 fixed by ateotia(-)
212 
213 BEGIN
214    -- Standard begin of API savepoint
215    SAVEPOINT TRAC_INITIATE_PAYMENT;
216    -- Standard call to check for call compatibility.
217    IF NOT FND_API.Compatible_API_Call (
218      l_api_version,
219      p_api_version,
220      l_api_name,
221      G_PKG_NAME)
222    THEN
223      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
224    END IF;
225 
226    --Initialize message list if p_init_msg_list is TRUE.
227    IF FND_API.To_Boolean (p_init_msg_list) THEN
228      FND_MSG_PUB.initialize;
229    END IF;
230 
231    -- Debug Message
232    IF OZF_DEBUG_HIGH_ON THEN
233     OZF_UTILITY_PVT.debug_message(p_message_text => l_full_name||': Start');
234    END IF;
235 
236 
237    -- Initialize API return status to sucess
238    x_return_status := FND_API.G_RET_STS_SUCCESS;
239 
240    OPEN Batch_info_csr(p_resale_batch_id);
241    FETCH batch_info_csr INTO l_batch_status,
242                            l_batch_type,
243                            l_partner_cust_account_id,
244                            l_partner_party_id,
245                            l_report_start_date,
246                            l_report_end_date,
247                            l_batch_NUMBER,
248                            l_last_updated_by,
249 			   l_direct_order_flag,
250 			   l_org_id;
251    CLOSE batch_info_csr;
252 
253    -- Fix for bug # 12716192 : commented extra set context
254    -- MO_GLOBAL.set_policy_context( p_access_mode => 'S', p_org_id => l_org_id);
255 
256    IF l_batch_status = OZF_RESALE_COMMON_PVT.G_BATCH_PENDING_PAYMENT THEN
257 
258       OPEN OPEN_line_count_csr(p_resale_batch_id);
259       FETCH OPEN_line_count_csr INTO l_count;
260       CLOSE OPEN_line_count_csr;
261 
262       IF l_count <> 0 THEN
263          --Can not pay if there is an OPEN line
264          ozf_utility_pvt.error_message('OZF_RESALE_OPEN_LINE_EXIST');
265          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
266       ELSE
267          -- Check whether there is a need to do inventory_verification
268          OPEN OZF_RESALE_COMMON_PVT.g_inventory_tracking_csr;
269          FETCH OZF_RESALE_COMMON_PVT.g_inventory_tracking_csr INTO l_inventory_tracking;
270          CLOSE OZF_RESALE_COMMON_PVT.g_inventory_tracking_csr;
271 
272          IF l_inventory_tracking = 'T'
273 	 AND ( l_direct_order_flag <> 'Y') THEN -- Indirect order Check
274 
275             OZF_SALES_TRANSACTIONS_PVT.Initiate_Inventory_tmp (
276               p_api_version            => 1.0
277              ,p_init_msg_list          => FND_API.G_FALSE
278              ,p_validation_level       => FND_API.G_VALID_LEVEL_FULL
279              ,p_resale_batch_id        => p_resale_batch_id
280              ,p_start_date             => l_report_start_date
281              ,p_end_date               => l_report_end_date
282              ,x_return_status          => l_return_status
283              ,x_msg_count              => l_msg_count
284              ,x_msg_data               => l_msg_data
285             );
286             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
287                OZF_UTILITY_PVT.error_message('OZF_RESALE_INIT_INV_TMP_ERR');
288                RAISE FND_API.G_EXC_ERROR;
289             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
290                OZF_UTILITY_PVT.error_message('OZF_RESALE_INIT_INV_TMP_ERR');
291                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
292             END IF;
293          END IF;
294 
295          OPEN end_cust_relation_flag_csr;
296          FETCH end_cust_relation_flag_csr INTO l_end_cust_relation_flag;
297          CLOSE end_cust_relation_flag_csr;
298 
299          IF l_end_cust_relation_flag = 'T' THEN
300             --Bug# 8489216 fixed by ateotia(+)
301             --Moved the logic of End Customer/Bill_To/Ship_To Party creation to Common Resale API.
302             OZF_RESALE_COMMON_PVT.Derive_Orig_Parties
303             (  p_api_version      => 1.0
304               ,p_init_msg_list    => FND_API.G_FALSE
305               ,p_commit           => FND_API.G_FALSE
306               ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
307               ,p_resale_batch_id  => p_resale_batch_id
308               ,p_partner_party_id => l_partner_party_id
309               ,x_return_status    => l_return_status
310               ,x_msg_data         => l_msg_data
311               ,x_msg_count        => l_msg_count
312             );
313             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
314                RAISE FND_API.G_EXC_ERROR;
315             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
316                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
317             END IF;
318             /*
319             -- check bill_to customer
320             OPEN csr_orig_billto_cust(p_resale_batch_id);
321             FETCH csr_orig_billto_cust BULK COLLECT INTO l_orig_billto_cust_tbl;
322             CLOSE csr_orig_billto_cust;
323 
324             IF l_orig_billto_cust_tbl.COUNT > 0 THEN
325                FOR i IN 1..l_orig_billto_cust_tbl.COUNT LOOP
326                   l_new_party_rec := NULL;
327                   -- Bug 4737415 (+)
328                   l_new_party_rec.partner_party_id := l_partner_party_id;
329                   -- Bug 4737415 (-)
330                   l_new_party_rec.name    := l_orig_billto_cust_tbl(i).bill_to_party_name;
331                   l_new_party_rec.address := l_orig_billto_cust_tbl(i).bill_to_address;
332                   l_new_party_rec.city    := l_orig_billto_cust_tbl(i).bill_to_city;
333                   l_new_party_rec.state   := l_orig_billto_cust_tbl(i).bill_to_state;
334                   l_new_party_rec.postal_Code := l_orig_billto_cust_tbl(i).bill_to_postal_code;
335                   l_new_party_rec.country     := l_orig_billto_cust_tbl(i).bill_to_country;
336                   l_new_party_rec.site_Use_Code := 'BILL_TO';
337 
338                   OZF_RESALE_COMMON_PVT.Create_Party(
339                      p_api_version     => 1.0
340                     ,p_init_msg_list   => FND_API.G_FALSE
341                     ,p_commit          => FND_API.G_FALSE
342                     ,p_validation_level=> FND_API.G_VALID_LEVEL_FULL
343                     ,px_party_rec      => l_new_party_rec
344                     ,x_return_status   => l_return_status
345                     ,x_msg_data        => l_msg_data
346                     ,x_msg_count       => l_msg_count
347                   );
348                   IF l_return_status = FND_API.G_RET_STS_ERROR THEN
349                      RAISE FND_API.G_EXC_ERROR;
350                   ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
351                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
352                   END IF;
353 
354                   UPDATE ozf_resale_lines_int_all
355                   SET bill_to_party_id = l_new_party_rec.party_id
356                     , bill_to_party_site_id = l_new_party_rec.party_site_id
357                   WHERE resale_batch_id = p_resale_batch_id
358                   AND bill_to_party_id IS NULL
359                   AND bill_to_cust_account_id IS NULL
360                   AND bill_to_party_name = l_orig_billto_cust_tbl(i).bill_to_party_name
361                   AND bill_to_address = l_orig_billto_cust_tbl(i).bill_to_address
362                   AND bill_to_city = l_orig_billto_cust_tbl(i).bill_to_city
363                   AND bill_to_state = l_orig_billto_cust_tbl(i).bill_to_state
364                   AND bill_to_postal_code = l_orig_billto_cust_tbl(i).bill_to_postal_code
365                   AND bill_to_country = l_orig_billto_cust_tbl(i).bill_to_country;
366 
367                END LOOP;
368             END IF;
369 
370             -- check end_customer
371             OPEN csr_orig_end_cust(p_resale_batch_id);
372             FETCH csr_orig_end_cust BULK COLLECT INTO l_orig_end_cust_tbl;
373             CLOSE csr_orig_end_cust;
374 
375             IF l_orig_end_cust_tbl.COUNT > 0 THEN
376                FOR i IN 1..l_orig_end_cust_tbl.COUNT LOOP
377                   l_new_party_rec := NULL;
378                   -- Bug 4737415 (+)
379                   l_new_party_rec.partner_party_id := l_partner_party_id;
380                   -- Bug 4737415 (-)
381                   -- reset values:
382                   l_new_party_rec.party_id      := NULL;
383                   l_new_party_rec.party_site_id := NULL;
384                   l_new_party_rec.party_site_use_id := NULL;
385                   l_new_party_rec.name    := l_orig_end_cust_tbl(i).end_cust_party_name;
386                   l_new_party_rec.address := l_orig_end_cust_tbl(i).end_cust_address;
387                   l_new_party_rec.city    := l_orig_end_cust_tbl(i).end_cust_city;
388                   l_new_party_rec.state   := l_orig_end_cust_tbl(i).end_cust_state;
389                   l_new_party_rec.postal_code   := l_orig_end_cust_tbl(i).end_cust_postal_code;
390                   l_new_party_rec.country       := l_orig_end_cust_tbl(i).end_cust_country;
391                   l_new_party_rec.site_use_code := l_orig_end_cust_tbl(i).end_cust_site_use_code;
392 
393                   OZF_RESALE_COMMON_PVT.Create_Party
394                   (  p_api_version     => 1.0
395                     ,p_init_msg_list   => FND_API.G_FALSE
396                     ,p_commit          => FND_API.G_FALSE
397                     ,p_validation_level=> FND_API.G_VALID_LEVEL_FULL
398                     ,px_party_rec      => l_new_party_rec
399                     ,x_return_status   => l_return_status
400                     ,x_msg_data        => l_msg_data
401                     ,x_msg_count       => l_msg_count
402                   );
403                   IF l_return_status = FND_API.G_RET_STS_ERROR THEN
404                      RAISE FND_API.G_EXC_ERROR;
405                   ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
406                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
407                   END IF;
408 
409                   UPDATE ozf_resale_lines_int_all
410                   SET end_cust_party_id = l_new_party_rec.party_id
411                     , end_cust_party_site_id = l_new_party_rec.party_site_id
412                   WHERE resale_batch_id = p_resale_batch_id
413                   AND end_cust_party_id IS NULL
414                   AND end_cust_party_name = l_orig_end_cust_tbl(i).end_cust_party_name
415                   AND end_cust_address = l_orig_end_cust_tbl(i).end_cust_address
416                   AND end_cust_city = l_orig_end_cust_tbl(i).end_cust_city
417                   AND end_cust_state = l_orig_end_cust_tbl(i).end_cust_state
418                   AND end_cust_postal_code = l_orig_end_cust_tbl(i).end_cust_postal_code
419                   AND end_cust_country = l_orig_end_cust_tbl(i).end_cust_country
420                   AND end_cust_site_use_code = l_orig_end_cust_tbl(i).end_cust_site_use_code;
421                END LOOP;
422             END IF;
423             */
424             --Bug# 8489216 fixed by ateotia(-)
425          END IF;
426 
427          --i:=1;
428          IF l_order_num_tbl.EXISTS(1) THEN
429             l_order_num_tbl.DELETE;
430          END IF;
431          OPEN batch_order_num_csr(p_resale_batch_id);
432          FETCH batch_order_num_csr BULK COLLECT INTO l_order_num_tbl;
433          --LOOP
434          --   EXIT WHEN batch_order_num_csr%NOTFOUND;
435          --   FETCH batch_order_num_csr INTO l_order_num_tbl(i);
436          --   i:= i+1;
437          --END LOOP;
438          CLOSE batch_order_num_csr;
439 
440          IF l_order_num_tbl.EXISTS(1) THEN -- IF B
441             FOR k in 1..l_order_num_tbl.LAST LOOP -- FOR C
442 
443                IF OZF_DEBUG_LOW_ON THEN
444                   ozf_utility_PVT.debug_message('PROCESS ORDER: ');
445                   ozf_utility_PVT.debug_message('ORDER NUMBER: '||l_order_num_tbl(k).order_number);
446                   ozf_utility_PVT.debug_message('SOLD_FROM_ACCT: '||l_order_num_tbl(k).sold_from_cust_account_id);
447                   ozf_utility_PVT.debug_message('DATE ORDERED: '||l_order_num_tbl(k).date_ordered);
448                END IF;
449 
450                -- beginjxwu header_fix
451                -- Here, I assume if a line is the duplicate of another line, then they share
452                -- the same order header. Hence all order with this duplicated line share the
453                -- the same order with the oringinal lines.
454                IF l_dup_header_id_tbl.EXISTS(1) THEN
455                   l_dup_header_id_tbl.DELETE;
456                END IF;
457                OPEN dup_header_id_csr(p_resale_batch_id,
458                                   l_order_num_tbl(k).order_number,
459                                   l_order_num_tbl(k).sold_from_cust_account_id,
460                                   l_order_num_tbl(k).date_ordered
461                                   );
462                FETCH dup_header_id_csr BULK COLLECT INTO l_dup_header_id_tbl;
463                CLOSE dup_header_id_csr;
464 
465                IF l_dup_header_id_tbl.EXISTS(1) THEN
466                   IF l_dup_header_id_tbl.EXISTS(2) THEN
467 
468                      -- There is something wrong with this order. dispute all the orders
469                      -- and move to the next one.
470                      -- JXWU move update to common pvt
471                      UPDATE ozf_resale_lines_int_all
472                      SET status_code = OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_DISPUTED,
473                          dispute_code = 'OZF_RESALE_MULTI_HEADER',
474                          followup_action_code = NVL2(followup_action_code,followup_action_code,'C'),
475                          response_type = 'CA',
476                          response_code = 'N'
477                      WHERE resale_batch_id = p_resale_batch_id
478                      AND   order_number = l_order_num_tbl(k).order_number
479                      AND   sold_from_cust_account_id = l_order_num_tbl(k).sold_from_cust_account_id
480                      AND   date_ordered = l_order_num_tbl(k).date_ordered
481                      AND   status_code in (OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_DUPLICATED, OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_PROCESSED);
482                      --AND   duplicated_adjustment_id <> -1;
483 
484 
485                      GOTO END_ORDER_HEADER;
486                   ELSE
487                      l_create_order_header := false;
488                      l_header_id := l_dup_header_id_tbl(1);
489                   END IF;
490                ELSE
491                   l_create_order_header := true;
492                END IF;
493 
494                --End jxuw header_fix
495 
496 
497                -- Here only duplicated and processed lines are considered. DISPUTED lines will not
498                -- be moved to resale order table.
499                --i:=1;
500                IF l_valid_line_id_tbl.EXISTS(1) THEN
501                   l_valid_line_id_tbl.DELETE;
502                END IF;
503                OPEN valid_line_id_csr(p_resale_batch_id,
504                                       l_order_num_tbl(k).order_number,
505                                       l_order_num_tbl(k).sold_from_cust_account_id,
506                                       l_order_num_tbl(k).date_ordered);
507                FETCH valid_line_id_csr BULK COLLECT INTO l_valid_line_id_tbl;
508                --LOOP
509                --   EXIT WHEN valid_line_id_csr%NOTFOUND;
510                --   FETCH valid_line_id_csr INTO l_valid_line_id_tbl(i);
511                --   i := i+1;
512                --END LOOP;
513                CLOSE valid_line_id_csr;
514 
515                -- Again, we need to check whether if any line IS a duplicate or NOT.
516                IF l_valid_line_id_tbl.EXISTS(1) THEN -- IF D
517                   -- I then try to create resale data.
518                   FOR j in 1..l_valid_line_id_tbl.last  -- FOR E
519                   LOOP
520                      IF OZF_DEBUG_LOW_ON THEN
521                         OZF_UTILITY_PVT.debug_message('Current line_int_id:' || l_valid_line_id_tbl(j).id);
522                      END IF;
523                      OPEN OZF_RESALE_COMMON_PVT.g_interface_rec_csr(l_valid_line_id_tbl(j).id);
524                      FETCH OZF_RESALE_COMMON_PVT.g_interface_rec_csr INTO l_line_int_rec;
525                      CLOSE OZF_RESALE_COMMON_PVT.g_interface_rec_csr;
526 
527 
528                      /*
529 		     For Bug#9447673 SSD IDSM ER - Restricting the
530 		     Validate inventory flow for Direct order only
531 		     */
532                      -- Need to check against inventory
533                      IF l_line_int_rec.status_code = OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_PROCESSED
534 		     AND l_inventory_tracking = 'T'
535 		     AND (l_direct_order_flag <> 'Y') THEN
536                         -- Check inventory level first
537                         OZF_SALES_TRANSACTIONS_PVT.Validate_Inventory_level (
538                             p_api_version      => 1.0
539                            ,p_init_msg_list    => FND_API.G_FALSE
540                            ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
541                            ,p_line_int_rec     => l_line_int_rec
542                            ,x_valid            => l_inventory_level_valid
543                            ,x_return_status    => l_return_status
544                            ,x_msg_count        => l_msg_count
545                            ,x_msg_data         => l_msg_data
546                         );
547                         IF NOT l_inventory_level_valid THEN
548                            IF OZF_DEBUG_LOW_ON THEN
549                               OZF_UTILITY_PVT.debug_message('Did NOT pass inventory checking');
550                            END IF;
551                            -- Here turn thIS line to DISPUTED AND create a dISput code FOR it.
552                            UPDATE ozf_resale_lines_int
553                               SET status_code = OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_DISPUTED,
554                                   dispute_code = 'OZF_LT_INVT',
555                                   followup_action_code = NVL2(followup_action_code,followup_action_code,'C'),
556                                   response_type = 'CA',
557                                   response_code = 'N'
558                             WHERE resale_line_int_id = l_line_int_rec.resale_line_int_id;
559 
560                            -- SET Batch as DISPUTED
561                            UPDATE ozf_resale_batches
562                               SET status_code = OZF_RESALE_COMMON_PVT.G_BATCH_DISPUTED
563                             WHERE resale_batch_id = l_line_int_rec.resale_batch_id;
564 
565                            GOTO END_ORDER_LINE;
566                         END IF;
567                         -- Check WAC
568                      END IF;
569 
570                      -- First, check whether there is need to create a header for this order
571                      -- SLKRISHN Add logic to derive or insert header
572                      -- see jxwu header_fix.
573                      IF j = 1 THEN
574                         -- Determin header id
575                         IF l_create_order_header THEN
576                            OZF_RESALE_COMMON_PVT.Insert_Resale_Header(
577                                p_api_version       => 1
578                               ,p_init_msg_list     => FND_API.G_FALSE
579                               ,p_commit            => FND_API.G_FALSE
580                               ,p_validation_level  => FND_API.G_VALID_LEVEL_FULL
581                               ,p_line_int_rec      => l_line_int_rec
582                               ,x_header_id         => l_header_id
583                               ,x_return_status     => l_return_status
584                               ,x_msg_data          => l_msg_data
585                               ,x_msg_count         => l_msg_count
586                            );
587                            IF l_return_status = FND_API.G_RET_STS_ERROR THEN
588                               RAISE FND_API.G_EXC_ERROR;
589                            ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
590                               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
591                            END IF;
592                            --
593                         ELSE
594                            NULL;
595                            -- We should have the l_header_id FROM at the order level
596                         END IF;
597                      END IF;
598 
599                      IF OZF_DEBUG_LOW_ON THEN
600                         OZF_UTILITY_PVT.debug_message('header_id is '|| l_header_id);
601                      END IF;
602 
603                      IF l_line_int_rec.status_code = OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_PROCESSED THEN
604                         IF l_line_int_rec.duplicated_line_id IS NULL THEN
605 
606                                                       -- We need to create party id for bill_to and end customer if
607                            -- users wants us to do it.
608 
609                            -- No problem so far. Insert INTO batch_lines TABLE
610                            OZF_RESALE_COMMON_PVT.Insert_Resale_Line(
611                               p_api_version       => 1
612                              ,p_init_msg_list     => FND_API.G_FALSE
613                              ,p_commit            => FND_API.G_FALSE
614                              ,p_validation_level  => FND_API.G_VALID_LEVEL_FULL
615                              ,p_line_int_rec      => l_line_int_rec
616                              ,p_header_id         => l_header_id
617                              ,x_line_id           => l_line_id
618                              ,x_return_status     => l_return_status
619                              ,x_msg_data          => l_msg_data
620                              ,x_msg_count         => l_msg_count
621                            );
622                            IF l_return_status = FND_API.G_RET_STS_ERROR THEN
623                               RAISE FND_API.G_EXC_ERROR;
624                            ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
625                               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
626                            END IF;
627                            --
628 
629                            -- FOR processed order line, I need to create a transaction FOR it.
630                            OZF_RESALE_COMMON_PVT.Create_Sales_Transaction (
631                                p_api_version       => 1.0
632                               ,p_init_msg_list     => FND_API.G_FALSE
633                               ,p_commit            => FND_API.G_FALSE
634                               ,p_validation_level  => FND_API.G_VALID_LEVEL_FULL
635                               ,p_line_int_rec      => l_line_int_rec
636                               ,p_header_id         => l_header_id
637                               ,p_line_id           => l_line_id
638                               ,x_sales_transaction_id => l_sales_transaction_id
639                               ,x_return_status     => l_return_status
640                               ,x_msg_data          => l_msg_data
641                               ,x_msg_count         => l_msg_count
642                            );
643                            IF l_return_status = FND_API.G_RET_STS_ERROR THEN
644                               RAISE FND_API.G_EXC_ERROR;
645                            ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
646                               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
647                            END IF;
648                            --
649 
650                            /*
651 			   For Bug#9447673 SSD IDSM ER - Restricting the
652 			   update inventory flow for Direct order only
653 		           */
654                            IF l_inventory_tracking = 'T'
655 			   AND (l_direct_order_flag <> 'Y') THEN
656                               OZF_SALES_TRANSACTIONS_PVT.Update_Inventory_Tmp (
657                                  p_api_version      => 1.0
658                                 ,p_init_msg_list    => FND_API.G_FALSE
659                                 ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
660                                 ,p_sales_transaction_id => l_sales_transaction_id
661                                 ,x_return_status    => l_return_status
662                                 ,x_msg_data         => l_msg_data
663                                 ,x_msg_count        => l_msg_count
664                               );
665                               IF l_return_status = FND_API.G_RET_STS_ERROR THEN
666                                  RAISE FND_API.G_EXC_ERROR;
667                               ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
668                                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
669                               END IF;
670                               --
671                            END IF;
672                         ELSE
673                            l_line_id := l_line_int_rec.duplicated_line_id;
674                         END IF;
675                      ELSIF l_line_int_rec.status_code = OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_DUPLICATED THEN
676                         l_line_id := l_line_int_rec.duplicated_line_id;
677                      END IF;
678 
679                      IF OZF_DEBUG_LOW_ON THEN
680                         OZF_UTILITY_PVT.debug_message('line_id is '|| l_line_id);
681                      END IF;
682 
683                      IF l_line_int_rec.status_code = OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_PROCESSED OR
684                         l_line_int_rec.status_code = OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_DUPLICATED
685                      THEN
686                         -- only create mapping FOR the lines that are processed or
687                         -- duplicated, yet the adjustment IS new then
688                         OZF_RESALE_COMMON_PVT.Insert_Resale_Line_Mapping(
689                             p_api_version            => 1
690                            ,p_init_msg_list          => FND_API.G_FALSE
691                            ,p_commit                 => FND_API.G_FALSE
692                            ,p_validation_level       => FND_API.G_VALID_LEVEL_FULL
693                            ,p_resale_batch_id        => p_resale_batch_id
694                            ,p_line_id                => l_line_id
695                            ,x_return_status          => l_return_status
696                            ,x_msg_data               => l_msg_data
700                            RAISE FND_API.G_EXC_ERROR;
697                            ,x_msg_count              => l_msg_count
698                         );
699                         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
701                         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
702                            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
703                         END IF;
704                      END IF;
705 
706                      << END_ORDER_LINE >>
707                      NULL;
708                   END LOOP; -- END LOOP FOR this order -- FOR E
709                END IF; -- if valid line id EXISTS -- IF D
710                << END_ORDER_HEADER>>
711                NULL;
712             END LOOP; -- END LOOP FOR the batch FOR C
713          END IF;  -- END order_num EXISTS  IF B
714 
715 
716 --          END IF; -- END if not rejected
717        END IF; -- END l_count = 0
718 
719 
720        -- UPDATE batch line status to CLOSEd for each OPEN and duplicated lines.
721 
722         BEGIN
723             UPDATE ozf_resale_lines_int_all
724             SET status_code = OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_CLOSED
725             WHERE resale_batch_id = p_resale_batch_id
726             --Bug# 8414563 fixed by ateotia(+)
727             --AND status_code in(OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_DUPLICATED, OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_PROCESSED);
728             AND status_code = OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_PROCESSED;
729             --Bug# 8414563 fixed by ateotia(-)
730             --AND duplicated_adjustment_id <> -1;
731 
732             -- UPDATE batch status to CLOSEd -- might change later.
733             UPDATE ozf_resale_batches_all
734             SET status_code = OZF_RESALE_COMMON_PVT.G_BATCH_CLOSED
735             WHERE resale_batch_id = p_resale_batch_id;
736         EXCEPTION
737             WHEN OTHERS THEN
738                ozf_utility_pvt.error_message('OZF_UPD_RESALE_WRG','TEXT',l_full_name||': END');
739                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
740         END;
741 
742    ELSE
743     -- Only disputed and processed batch can be paid.
744       ozf_utility_pvt.error_message('OZF_RESALE_WRONG_STAUS_TO_PAY');
745       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
746    END IF;
747 
748    -- Debug Message
749    IF OZF_DEBUG_HIGH_ON THEN
750       OZF_UTILITY_PVT.debug_message(p_message_text => l_full_name||': End');
751    END IF;
752    --Standard call to get message count and if count=1, get the message
753    FND_MSG_PUB.Count_And_Get (
754       p_encoded => FND_API.G_FALSE,
755       p_count => x_msg_count,
756       p_data  => x_msg_data
757    );
758    x_return_status := l_return_status;
759 EXCEPTION
760    WHEN FND_API.G_EXC_ERROR THEN
761       x_return_status := FND_API.G_RET_STS_ERROR;
762       -- Standard call to get message count and if count=1, get the message
763       FND_MSG_PUB.Count_And_Get (
764          p_encoded => FND_API.G_FALSE,
765          p_count => x_msg_count,
766          p_data  => x_msg_data
767       );
768    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
769       ROLLBACK TO TRAC_INITIATE_PAYMENT;
770       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
771 
772       -- Standard call to get message count and if count=1, get the message
773       FND_MSG_PUB.Count_And_Get (
774          p_encoded => FND_API.G_FALSE,
775          p_count => x_msg_count,
776          p_data  => x_msg_data
777       );
778    WHEN OTHERS THEN
779       ROLLBACK TO TRAC_INITIATE_PAYMENT;
780       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
781 
782       -- Standard call to get message count and if count=1, get the message
783       FND_MSG_PUB.Count_And_Get (
784          p_encoded => FND_API.G_FALSE,
785          p_count => x_msg_count,
786          p_data  => x_msg_data
787       );
788 END Initiate_payment;
789 
790 ---------------------------------------------------------------------
791 -- PROCEDURE
792 --    Validate_Order_Record
793 --
794 -- PURPOSE
795 --    This procedure validates the order information
796 --    These are validation specific to chargeback process
797 --
798 -- PARAMETERS
799 --
800 --
801 -- NOTES
802 ---------------------------------------------------------------------
803 PROCEDURE  Validate_Order_Record(
804     p_api_version            IN    NUMBER
805    ,p_init_msg_list          IN    VARCHAR2 := FND_API.G_FALSE
806    ,p_commit                 IN    VARCHAR2 := FND_API.G_FALSE
807    ,p_validation_level       IN    NUMBER   := FND_API.G_VALID_LEVEL_FULL
808    ,p_resale_batch_id        IN    NUMBER
809    ,x_return_status          OUT NOCOPY   VARCHAR2
810    ,x_msg_data               OUT NOCOPY   VARCHAR2
811    ,x_msg_count              OUT NOCOPY   NUMBER
812 )IS
813 l_api_name          CONSTANT VARCHAR2(30) := 'Validate_Order_Record';
814 l_api_version       CONSTANT NUMBER := 1.0;
815 l_full_name         CONSTANT VARCHAR2(60) := G_PKG_NAME ||'.'|| l_api_name;
816 --
817 l_return_status     VARCHAR2(30);
818 l_msg_data          VARCHAR2(2000);
819 l_msg_count         NUMBER;
820 
821 CURSOR non_tracing_count_csr(p_id IN NUMBER) IS
822   SELECT COUNT(1)
823   FROM ozf_resale_lines_int
824   WHERE resale_batch_id = p_id
825   AND tracing_flag = 'F';
826 
827 l_non_tracing_count NUMBER;
828 
829 BEGIN
830    -- Standard begin of API savepoint
834       p_api_version,
831    -- Standard call to check for call compatibility.
832    IF NOT FND_API.Compatible_API_Call (
833       l_api_version,
835       l_api_name,
836       G_PKG_NAME)
837    THEN
838       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
839    END IF;
840 
841    -- Debug Message
842    IF OZF_DEBUG_HIGH_ON THEN
843       OZF_UTILITY_PVT.debug_message(p_message_text => l_full_name||': Start');
844    END IF;
845 
846    --Initialize message list if p_init_msg_list is TRUE.
847    IF FND_API.To_Boolean (p_init_msg_list) THEN
848       FND_MSG_PUB.initialize;
849    END IF;
850 
851    -- Initialize API return status to sucess
852    x_return_status := FND_API.G_RET_STS_SUCCESS;
853 
854    OPEN non_tracing_count_csr (p_resale_batch_id);
855    FETCH non_tracing_count_csr INTO l_non_tracing_count;
856    CLOSE non_tracing_count_csr;
857 
858    IF l_non_tracing_count > 0 THEN
859       BEGIN
860          INSERT INTO ozf_resale_logs_all(
861             RESALE_LOG_ID,
862             RESALE_ID,
863             RESALE_ID_TYPE,
864             ERROR_CODE,
865             ERROR_MESSAGE,
866             COLUMN_NAME,
867             COLUMN_VALUE,
868             ORG_ID
869          ) SELECT
870             ozf_resale_logs_all_s.nextval,
871             resale_line_int_id,
872             'IFACE',
873             'OZF_RESALE_NON_TRC',
874             FND_MESSAGE.get_string('OZF','OZF_RESALE_NON_TRC'),
875             'TRACING_FLAG',
876             tracing_flag,
877             org_id
878          FROM ozf_resale_lines_int_all b
879          WHERE b.status_code = 'OPEN'
880          AND b.tracing_flag = 'F'
881          AND b.resale_batch_id = p_resale_batch_id
882          AND NOT EXISTS(SELECT 1
883             FROM ozf_resale_logs_all a
884             WHERE a.resale_id = b.resale_line_int_id
885             AND a.RESALE_ID_TYPE = 'IFACE'
886             AND a.error_code ='OZF_RESALE_NON_TRC'
887          );
888       EXCEPTION
889          WHEN OTHERS THEN
890             OZF_UTILITY_PVT.error_message(
891                p_message_name => 'OZF_INS_RESALE_LOG_WRG',
892                p_token_name   => 'TEXT',
893                p_token_value  => l_full_name||': END');
894             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
895       END;
896 
897       UPDATE ozf_resale_lines_int_all
898       SET status_code = 'DISPUTED',
899           dispute_code = 'OZF_RESALE_NON_TRC',
900           followup_action_code = NVL2(followup_action_code,followup_action_code,'C'),
901           response_type = 'CA',
902           response_code = 'N'
903       WHERE resale_batch_id = p_resale_batch_id
904       AND tracing_flag = 'F';
905    END IF;
906 
907    -- Debug Message
908    IF OZF_DEBUG_HIGH_ON THEN
909       OZF_UTILITY_PVT.debug_message(p_message_text => l_full_name||': End');
910    END IF;
911    --Standard call to get message count and if count=1, get the message
912    FND_MSG_PUB.Count_And_Get (
913       p_encoded => FND_API.G_FALSE,
914       p_count => x_msg_count,
915       p_data  => x_msg_data
916    );
917 EXCEPTION
918    WHEN FND_API.G_EXC_ERROR THEN
919      x_return_status := FND_API.G_RET_STS_ERROR;
920      -- Standard call to get message count and if count=1, get the message
921      FND_MSG_PUB.Count_And_Get (
922          p_encoded => FND_API.G_FALSE,
923          p_count => x_msg_count,
924          p_data  => x_msg_data
925      );
926    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
927      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
928    -- Standard call to get message count and if count=1, get the message
929      FND_MSG_PUB.Count_And_Get (
930          p_encoded => FND_API.G_FALSE,
931          p_count => x_msg_count,
932          p_data  => x_msg_data
933      );
934    WHEN OTHERS THEN
935      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
936 
937      -- Standard call to get message count and if count=1, get the message
938      FND_MSG_PUB.Count_And_Get (
939          p_encoded => FND_API.G_FALSE,
940          p_count => x_msg_count,
941          p_data  => x_msg_data
942      );
943 END Validate_Order_Record;
944 
945 
946 ---------------------------------------------------------------------
947 -- PROCEDURE
948 --    Process_Order
949 --
950 -- PURPOSE
951 --    Process order information for tracing data. No simulation is needed.
952 --
953 -- PARAMETERS
954 --
955 -- NOTES
956 --
957 ---------------------------------------------------------------------
958 PROCEDURE Process_Order
959 (
960     p_api_version            IN    NUMBER
961    ,p_init_msg_list          IN    VARCHAR2 := FND_API.G_FALSE
962    ,p_commit                 IN    VARCHAR2 := FND_API.G_FALSE
963    ,p_validation_level       IN    NUMBER   := FND_API.G_VALID_LEVEL_FULL
964    ,p_resale_batch_id             IN    NUMBER
965    ,x_return_status          OUT NOCOPY   VARCHAR2
966    ,x_msg_data               OUT NOCOPY   VARCHAR2
967    ,x_msg_count              OUT NOCOPY   NUMBER
968 )IS
969 l_api_name          CONSTANT VARCHAR2(30) := 'Process_Order';
970 l_api_version       CONSTANT NUMBER := 1.0;
971 l_full_name         CONSTANT VARCHAR2(60) := G_PKG_NAME ||'.'|| l_api_name;
972 --
973 l_return_status     VARCHAR2(30);
974 l_msg_data          VARCHAR2(2000);
975 l_msg_count         NUMBER;
976 l_direct_order_flag VARCHAR2(1) := 'N';
977 
978 CURSOR order_num_csr IS
979 SELECT DISTINCT order_number,
980        sold_from_cust_account_id,
981        date_ordered
985    AND duplicated_adjustment_id IS NULL
982   FROM ozf_resale_lines_int
983  WHERE status_code = 'OPEN'
984        -- status_code in(OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_OPEN, OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_DUPLICATED)
986    AND resale_batch_id = p_resale_batch_id
987 ORDER BY date_ordered;
988 
989 l_cust_account_id_tbl   OZF_RESALE_COMMON_PVT.number_tbl_type;
990 l_order_num_tbl         OZF_RESALE_COMMON_PVT.varchar_tbl_type;
991 l_order_date_tbl        OZF_RESALE_COMMON_PVT.date_tbl_type;
992 
993 CURSOR order_set_csr(p_order_NUMBER in VARCHAR2,
994                      p_cust_account_id in NUMBER,
995                      p_date in date) IS
996 SELECT *
997 FROM ozf_resale_lines_int
998 WHERE order_NUMBER = p_order_NUMBER
999 AND date_ordered = p_date
1000 AND sold_from_cust_account_id = p_cust_account_id
1001 AND status_code = 'OPEN'
1002 --AND status_code in(OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_OPEN, OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_DUPLICATED)
1003 AND duplicated_adjustment_id is NULL
1004 AND resale_batch_id = p_resale_batch_id;
1005 
1006 TYPE resale_lines_tbl_type IS  TABLE OF order_set_csr%rowtype INDEX BY binary_integer;
1007 l_order_set_tbl resale_lines_tbl_type;
1008 
1009 CURSOR invalid_line_count_csr (p_id NUMBER) IS
1010 SELECT COUNT(1)
1011 FROM ozf_resale_lines_int
1012 WHERE status_code = OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_DISPUTED
1013 AND dispute_code = OZF_RESALE_COMMON_PVT.G_INVALD_DISPUTE_CODE
1014 AND resale_batch_id = p_id;
1015 
1016 CURSOR Batch_info_csr (p_id in NUMBER) IS
1017 SELECT partner_party_id,
1018        report_start_date,
1019        report_end_date,
1020        NVL(direct_order_flag,'N')  -- For Bug#9447673 SSD IDSM
1021 FROM ozf_resale_batches
1022 WHERE resale_batch_id = p_id;
1023 
1024 l_status_code           VARCHAR2(30);
1025 l_inventory_level_valid boolean;
1026 l_inventory_tracking    VARCHAR2(3);
1027 l_partner_party_id      NUMBER;
1028 l_report_start_date     DATE;
1029 l_report_end_date       DATE;
1030 l_lines_disputed        NUMBER;
1031 l_lines_invalid         NUMBER;
1032 l_lines_duplicated      NUMBER; --Bug# 8414563 fixed by ateotia
1033 
1034 BEGIN
1035    -- Standard begin of API savepoint
1036    SAVEPOINT  PROCESS_TRAC_ORDER;
1037    -- Standard call to check for call compatibility.
1038    IF NOT FND_API.Compatible_API_Call (
1039      l_api_version,
1040      p_api_version,
1041      l_api_name,
1042      G_PKG_NAME)
1043    THEN
1044      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1045    END IF;
1046 
1047    -- Debug Message
1048    IF OZF_DEBUG_HIGH_ON THEN
1049       OZF_UTILITY_PVT.debug_message(p_message_text => l_full_name||': Start');
1050    END IF;
1051 
1052    --Initialize message list if p_init_msg_list is TRUE.
1053    IF FND_API.To_Boolean (p_init_msg_list) THEN
1054       FND_MSG_PUB.initialize;
1055    END IF;
1056 
1057    -- Initialize API return status to sucess
1058    x_return_status := FND_API.G_RET_STS_SUCCESS;
1059 
1060 
1061    /*
1062       OZF_RESALE_COMMON_PVT.Delete_Log(
1063        p_api_version      => 1.0
1064       ,p_init_msg_list    => FND_API.G_FALSE
1065       ,p_commit           => FND_API.G_FALSE
1066       ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
1067       ,p_resale_batch_id  => p_resale_batch_id
1068       ,x_return_status          => l_return_status
1069       ,x_msg_count              => l_msg_count
1070       ,x_msg_data               => l_msg_data
1071    );
1072    IF l_return_status = FND_API.g_ret_sts_error THEN
1073       RAISE FND_API.g_exc_error;
1074    ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
1075       RAISE FND_API.g_exc_unexpected_error;
1076    END IF;
1077    */
1078 
1079    -- fetch all orders into a cursor.
1080    IF l_order_num_tbl.EXISTS(1) THEN
1081       l_order_num_tbl.DELETE;
1082       l_cust_account_id_tbl.DELETE;
1083       l_order_date_tbl.DELETE;
1084    END IF;
1085    OPEN order_num_csr;
1086    FETCH order_num_csr BULK COLLECT INTO l_order_num_tbl,l_cust_account_id_tbl,  l_order_date_tbl;
1087    CLOSE order_num_csr;
1088 
1089    IF l_order_num_tbl.EXISTS(1) THEN
1090 
1091       OPEN OZF_RESALE_COMMON_PVT.g_inventory_tracking_csr;
1092       FETCH OZF_RESALE_COMMON_PVT.g_inventory_tracking_csr INTO l_inventory_tracking;
1093       CLOSE OZF_RESALE_COMMON_PVT.g_inventory_tracking_csr;
1094 
1095       IF l_inventory_tracking = 'T' THEN
1096          OPEN Batch_info_csr(p_resale_batch_id);
1097          FETCH batch_info_csr INTO l_partner_party_id,
1098                                    l_report_start_date,
1099                                    l_report_end_date,
1100 				   l_direct_order_flag;
1101          CLOSE batch_info_csr;
1102 
1103 
1104         /*
1105 	For Bug#9447673 SSD IDSM ER - Restricting the
1106 	Initiate inventory flow for Direct order only
1107 	*/
1108 	IF (l_direct_order_flag <> 'Y') THEN
1109          -- Bug 4380203 Fixing (+)
1110          OZF_SALES_TRANSACTIONS_PVT.Initiate_Inventory_tmp (
1111            p_api_version            => 1.0
1112           ,p_init_msg_list          => FND_API.G_FALSE
1113           ,p_validation_level       => FND_API.G_VALID_LEVEL_FULL
1114           ,p_resale_batch_id        => p_resale_batch_id
1115           ,p_start_date             => l_report_start_date
1116           ,p_end_date               => l_report_end_date
1117           ,x_return_status          => l_return_status
1118           ,x_msg_count              => l_msg_count
1119           ,x_msg_data               => l_msg_data
1120          );
1121          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1122             OZF_UTILITY_PVT.error_message('OZF_RESALE_INIT_INV_TMP_ERR');
1126             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1123             RAISE FND_API.G_EXC_ERROR;
1124          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1125             OZF_UTILITY_PVT.error_message('OZF_RESALE_INIT_INV_TMP_ERR');
1127          END IF;
1128 
1129          /*
1130          OZF_SALES_TRANSACTIONS_PVT.Initiate_Inventory_tmp (
1131             p_api_version            => 1.0
1132             ,p_init_msg_list          => FND_API.G_FALSE
1133             ,p_validation_level       => FND_API.G_VALID_LEVEL_FULL
1134             ,p_party_id               => l_partner_party_id
1135             ,p_start_date             => l_report_start_date
1136             ,x_return_status          => l_return_status
1137             ,x_msg_count              => l_msg_count
1138             ,x_msg_data               => l_msg_data
1139          );
1140          */
1141          -- Bug 4380203 Fixing (-)
1142         END IF; -- End of l_direct_order_flag
1143       END IF;
1144 
1145        For i in 1..l_order_num_tbl.LAST
1146        LOOP
1147 
1148          IF l_order_num_tbl(i) is not NULL AND
1149             l_cust_account_id_tbl(i) is not NULL AND
1150             l_order_date_tbl(i) is not NULL THEN
1151 
1152             IF OZF_DEBUG_LOW_ON THEN
1153                ozf_utility_PVT.debug_message('/*--- Processing order for order NUMBER:'||l_order_num_tbl(i)||'---*/');
1154             END IF;
1155             -- Before start process, clean up the data structures if necessary.
1156 
1157             --k:=1;
1158             IF l_order_set_tbl.EXISTS(1) THEN
1159                l_order_set_tbl.DELETE;
1160             END IF;
1161             OPEN order_set_csr(l_order_num_tbl(i),
1162                                l_cust_account_id_tbl(i),
1163                                l_order_date_tbl(i));
1164             FETCH order_set_csr BULK COLLECT INTO l_order_set_tbl;
1165             --LOOP
1166             --   FETCH order_set_csr INTO l_order_set_tbl(k);
1167             --   EXIT WHEN order_set_csr%notfound;
1168             --   k:=k+1;
1169             --END LOOP;
1170             CLOSE order_set_csr;
1171 
1172             IF OZF_DEBUG_LOW_ON THEN
1173                ozf_utility_PVT.debug_message('after order set'||l_order_set_tbl.LAST);
1174             END IF;
1175 
1176             For J in 1..l_order_set_tbl.LAST LOOP
1177                --  Purge the any error message that might be there.
1178                BEGIN
1179                   DELETE FROM ozf_resale_logs
1180                   WHERE resale_id = l_order_set_tbl(J).resale_line_int_id
1181                   AND resale_id_type = OZF_RESALE_COMMON_PVT.G_ID_TYPE_IFACE;
1182                EXCEPTION
1183                   WHEN OTHERS THEN
1184                      ozf_utility_pvt.error_message('OZF_DEL_RESALE_LOG_WRG');
1185                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1186                END;
1187 
1188                /*
1189 	       For Bug#9447673 SSD IDSM ER - Restricting the
1190 	       Validate inventory flow for Direct order only
1191 	       */
1192                IF l_inventory_tracking = 'T'
1193 	       AND ( l_direct_order_flag <> 'Y') THEN
1194 
1195                   -- Only need to Check inventory level
1196                   OZF_SALES_TRANSACTIONS_PVT.Validate_Inventory_level (
1197                               p_api_version      => 1.0
1198                              ,p_init_msg_list    => FND_API.G_FALSE
1199                              ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
1200                              ,p_line_int_rec     => l_order_set_tbl(J)
1201                              ,x_valid            => l_inventory_level_valid
1202                              ,x_return_status    => l_return_status
1203                              ,x_msg_count        => l_msg_count
1204                              ,x_msg_data         => l_msg_data
1205                   );
1206 
1207                   IF NOT l_inventory_level_valid THEN
1208 
1209                      IF OZF_DEBUG_LOW_ON THEN
1210                         ozf_utility_PVT.debug_message('Did not pass inventory checking');
1211                      END IF;
1212                      -- Here turn this line to disputed and create a disput code for it.
1213                      UPDATE ozf_resale_lines_int
1214                      SET status_code = OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_DISPUTED,
1215                         dispute_code = 'OZF_LT_INVT',
1216                         followup_action_code = NVL2(followup_action_code,followup_action_code,'C'),
1217                         response_type = 'CA',
1218                         response_code = 'N'
1219                      WHERE resale_line_int_id = l_order_set_tbl(J).resale_line_int_id;
1220 
1221                      -- SET Batch as DISPUTED
1222                      UPDATE ozf_resale_batches
1223                      SET status_code = OZF_RESALE_COMMON_PVT.G_BATCH_DISPUTED
1224                      WHERE resale_batch_id = p_resale_batch_id;
1225 
1226                      GOTO END_ORDER_LINE;
1227                   ELSE
1228                      -- This is a valid tracing line
1229                      UPDATE ozf_resale_lines_int
1230                      SET status_code = OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_PROCESSED
1231                      WHERE resale_line_int_id = l_order_set_tbl(J).resale_line_int_id;
1232                   END IF;
1233                ELSE
1234                   -- Set line status to Processed if not tracking inventory
1235                   UPDATE ozf_resale_lines_int
1236                   SET status_code = OZF_RESALE_COMMON_PVT.G_BATCH_ADJ_PROCESSED
1237                   WHERE resale_line_int_Id = l_order_set_tbl(j).resale_line_int_id;
1238                END IF;
1239                << END_ORDER_LINE >>
1240                NULL;
1241             END LOOP; -- END LOOP for l_order_set_tbl
1242             IF OZF_DEBUG_LOW_ON THEN
1243                ozf_utility_PVT.debug_message('/*--- Success: Processing order for order NUMBER:'||l_order_num_tbl(i)||'---*/');
1244             END IF;
1245          END IF; -- END if for order_NUMBER, date_ordered not NULL
1246          << END_LOOP >>
1247          NULL;
1248        END LOOP; -- END LOOP for l_order_num_tbl
1249     ELSE
1250       IF OZF_DEBUG_LOW_ON THEN
1251          ozf_utility_PVT.debug_message('/*--- No order to process ---*/');
1252       END IF;
1253     END IF;
1254 
1255     -- get data regard this process
1256     OPEN  OZF_RESALE_COMMON_PVT.g_disputed_line_count_csr (p_resale_batch_id);
1257     FETCH OZF_RESALE_COMMON_PVT.g_disputed_line_count_csr INTO l_lines_disputed;
1258     CLOSE OZF_RESALE_COMMON_PVT.g_disputed_line_count_csr;
1259 
1260     OPEN invalid_line_count_csr(p_resale_batch_id);
1261     FETCH invalid_line_count_csr INTO l_lines_invalid;
1262     CLOSE invalid_line_count_csr;
1263 
1264     --Bug# 8414563 fixed by ateotia(+)
1265     OPEN  OZF_RESALE_COMMON_PVT.g_duplicated_line_count_csr (p_resale_batch_id);
1266     FETCH OZF_RESALE_COMMON_PVT.g_duplicated_line_count_csr INTO l_lines_duplicated;
1267     CLOSE OZF_RESALE_COMMON_PVT.g_duplicated_line_count_csr;
1268 
1269     --IF l_lines_disputed = 0 THEN
1270     IF (l_lines_disputed = 0 AND l_lines_duplicated = 0) THEN
1271     --Bug# 8414563 fixed by ateotia(-)
1272        l_status_code := OZF_RESALE_COMMON_PVT.G_BATCH_PROCESSED;
1273     ELSE
1274        -- batch is in dispute
1275        l_status_code := OZF_RESALE_COMMON_PVT.G_BATCH_DISPUTED;
1276     END IF;
1277 
1278     -- Lastly, I will UPDATE the batch
1279     BEGIN
1280        UPDATE ozf_resale_batches_all
1281        SET status_code = l_status_code,
1282           --Bug# 8414563 fixed by ateotia(+)
1283           --lines_disputed = l_lines_disputed,
1284           lines_disputed = l_lines_disputed + l_lines_duplicated,
1285           --Bug# 8414563 fixed by ateotia(-)
1286           lines_invalid = l_lines_invalid
1287        WHERE resale_batch_id = p_resale_batch_id;
1288     EXCEPTION
1289        WHEN OTHERS THEN
1290           ozf_utility_pvt.error_message('OZF_UPD_RESALE_BATCH_WRG');
1291           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1292     END;
1293 
1294 
1295     -- Debug Message
1296     IF OZF_DEBUG_HIGH_ON THEN
1297        OZF_UTILITY_PVT.debug_message(p_message_text => l_full_name||': End');
1298     END IF;
1299     --Standard call to get message count and if count=1, get the message
1300     FND_MSG_PUB.Count_And_Get (
1301         p_encoded => FND_API.G_FALSE,
1302         p_count => x_msg_count,
1303         p_data  => x_msg_data
1304     );
1305 
1306 EXCEPTION
1307     WHEN FND_API.G_EXC_ERROR THEN
1308         ROLLBACK TO PROCESS_TRAC_ORDER;
1309         x_return_status := FND_API.G_RET_STS_ERROR;
1310         -- Standard call to get message count and if count=1, get the message
1311         FND_MSG_PUB.Count_And_Get (
1312             p_encoded => FND_API.G_FALSE,
1313             p_count => x_msg_count,
1314             p_data  => x_msg_data
1315         );
1316     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1317         ROLLBACK TO PROCESS_TRAC_ORDER;
1318         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1319 
1320         -- Standard call to get message count and if count=1, get the message
1321         FND_MSG_PUB.Count_And_Get (
1322             p_encoded => FND_API.G_FALSE,
1323             p_count => x_msg_count,
1324             p_data  => x_msg_data
1325         );
1326     WHEN OTHERS THEN
1327         ROLLBACK TO PROCESS_TRAC_ORDER;
1328         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1329 
1330         -- Standard call to get message count and if count=1, get the message
1331         FND_MSG_PUB.Count_And_Get (
1332             p_encoded => FND_API.G_FALSE,
1333             p_count => x_msg_count,
1334             p_data  => x_msg_data
1335         );
1336 END Process_Order;
1337 
1338 END OZF_TRACING_ORDER_PVT;