DBA Data[Home] [Help]

PACKAGE BODY: APPS.OZF_AUTOPAY_PVT

Source


1 PACKAGE BODY OZF_AUTOPAY_PVT AS
2 /* $Header: ozfvatob.pls 120.9 2008/01/25 08:53:51 nirprasa ship $ */
3 -- Start of Comments
4 -- Package name     : OZF_AUTOPAY_PVT
5 -- Purpose          :
6 -- History          :
7 -- NOTE             :
8 -- End of Comments
9 
10 G_PKG_NAME              CONSTANT VARCHAR2(30) := 'OZF_AUTOPAY_PVT';
11 G_UPDATE_EVENT          CONSTANT VARCHAR2(30) := 'UPDATE';
12 G_DAILY                 CONSTANT VARCHAR2(30) := 'DAYS';
13 G_WEEKLY                CONSTANT VARCHAR2(30) := 'WEEKS';
14 G_MONTHLY               CONSTANT VARCHAR2(30) := 'MONTHS';
15 G_QUARTERLY             CONSTANT VARCHAR2(30) := 'QUARTERS';
16 G_ANNUAL                CONSTANT VARCHAR2(30) := 'YEAR';
17 G_OFFER_TYPE            CONSTANT VARCHAR2(30) := 'OFFR';
18 G_CAMPAIGN_TYPE         CONSTANT VARCHAR2(30) := 'CAMP';
19 G_AUTOPAY_FLAG_OFF      CONSTANT VARCHAR2(40) := 'Autopay flag is not turned on.';
20 G_AUTOPAY_PERIOD_MISS   CONSTANT VARCHAR2(40) := 'Autopay period information missing.';
21 G_AUTOPAY_PLAN_TYPE_ERR CONSTANT VARCHAR2(40) := 'Can not hanlde this plan type.';
22 G_CLAIM_SETUP_ID        CONSTANT NUMBER       := 2001;
23 G_CLAIM_STATUS          CONSTANT VARCHAR2(30) := 'OZF_CLAIM_STATUS';
24 G_OPEN_STATUS           CONSTANT VARCHAR2(30) := 'OPEN';
25 G_CLOSED_STATUS         CONSTANT VARCHAR2(30) := 'CLOSED';
26 
27 OZF_DEBUG_HIGH_ON BOOLEAN := FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_debug_high);
28 OZF_DEBUG_LOW_ON BOOLEAN := FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_debug_low);
29 
30 ---------------------------------------------------------------------
31 -- Definitions of some packagewise cursors.
32 ---------------------------------------------------------------------
33 CURSOR g_site_info_csr(p_id in number) IS
34   SELECT trade_profile_id,
35          cust_account_id,
36          site_use_id,
37          payment_method,
38          vendor_id,
39          vendor_site_id,
40          last_paid_date,
41          autopay_periodicity,
42          autopay_periodicity_type,
43          autopay_flag,
44          claim_threshold,
45          claim_currency,
46          org_id
47   FROM ozf_cust_trd_prfls_all
48   WHERE site_use_id = p_id;
49 
50 CURSOR g_customer_info_csr(p_id in number) IS
51   SELECT trade_profile_id,
52          cust_account_id,
53          site_use_id,
54          payment_method,
55          vendor_id,
56          vendor_site_id,
57          last_paid_date,
58          autopay_periodicity,
59          autopay_periodicity_type,
60          autopay_flag,
61          claim_threshold,
62          claim_currency,
63          org_id
64   FROM ozf_cust_trd_prfls
65   WHERE cust_account_id = p_id
66   AND site_use_id IS NULL;
67 
68 CURSOR g_party_trade_info_csr(p_id in number) IS
69   SELECT trade_profile_id,
70          cust_account_id,
71          site_use_id,
72          payment_method,
73          vendor_id,
74          vendor_site_id,
75          last_paid_date,
76          autopay_periodicity,
77          autopay_periodicity_type,
78          autopay_flag,
79          claim_threshold,
80          claim_currency,
81          org_id
82   FROM ozf_cust_trd_prfls
83   WHERE party_id = p_id
84   AND cust_account_id IS NULL;
85 
86 
87 ---------------------------------------------------------------------
88 -- PROCEDURE
89 --    validate_customer_info
90 --
91 -- PURPOSE
92 --    This procedure validates customer info
93 --
94 -- PARAMETERS
95 --    p_cust_account : custome account id
96 --    x_days_due     : days due
97 --
98 -- NOTES
99 ---------------------------------------------------------------------
100 PROCEDURE validate_customer_info (
101      p_customer_info   in  g_customer_info_csr%rowtype,
102      x_return_status   OUT NOCOPY varchar2
103 )
104 IS
105 CURSOR csr_cust_name(cv_cust_account_id IN NUMBER) IS
106   SELECT CONCAT(CONCAT(party.party_name, ' ('), CONCAT(ca.account_number, ') '))
107   FROM hz_cust_accounts ca
108   ,    hz_parties party
109   WHERE ca.party_id = party.party_id
110   AND ca.cust_account_id = cv_cust_account_id;
111 
112 l_cust_account_id  number := p_customer_info.cust_account_id;
113 l_cust_name_num    VARCHAR2(70);
114 
115 BEGIN
116    -- Initialize API return status to sucess
117    x_return_status := FND_API.G_RET_STS_SUCCESS;
118 
119    IF p_customer_info.claim_currency is null THEN
120       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
121          OPEN csr_cust_name(l_cust_account_id);
122          FETCH csr_cust_name INTO l_cust_name_num;
123          CLOSE csr_cust_name;
124 
125          FND_MESSAGE.Set_Name('OZF', 'OZF_CLAIM_ATPY_CURRENCY_MISS');
126          FND_MESSAGE.Set_Token('ID',l_cust_name_num);
127          FND_MSG_PUB.ADD;
128       END IF;
129       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
130    END IF;
131 
132    IF p_customer_info.payment_method is null THEN
133       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
134          OPEN csr_cust_name(l_cust_account_id);
135          FETCH csr_cust_name INTO l_cust_name_num;
136          CLOSE csr_cust_name;
137 
138          FND_MESSAGE.Set_Name('OZF', 'OZF_CLAIM_ATPY_PYMTHD_MISS');
139          FND_MESSAGE.Set_Token('ID',l_cust_name_num);
140          FND_MSG_PUB.ADD;
141       END IF;
142       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
143    END IF;
144 
145    IF p_customer_info.payment_method = 'CHECK' THEN
146       IF p_customer_info.vendor_id is NULL OR
147          p_customer_info.vendor_site_id is NULL  THEN
148          IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
149             OPEN csr_cust_name(l_cust_account_id);
150             FETCH csr_cust_name INTO l_cust_name_num;
151             CLOSE csr_cust_name;
152 
153             FND_MESSAGE.Set_Name('OZF', 'OZF_CLAIM_ATPY_VENDOR_MISS');
154             FND_MESSAGE.Set_Token('ID',l_cust_name_num);
155             FND_MSG_PUB.ADD;
156          END IF;
157          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
158       END IF;
159    ELSIF p_customer_info.payment_method = 'CREDIT_MEMO' THEN
160       IF p_customer_info.site_use_id is NULL THEN
161          IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
162             OPEN csr_cust_name(l_cust_account_id);
163             FETCH csr_cust_name INTO l_cust_name_num;
164             CLOSE csr_cust_name;
165 
166             FND_MESSAGE.Set_Name('OZF', 'OZF_CLAIM_ATPY_SITEID_MISS');
167             FND_MESSAGE.Set_Token('ID',l_cust_name_num);
168             FND_MSG_PUB.ADD;
169          END IF;
170          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
171       END IF;
172    END IF;
173 
174    /*
175    IF p_customer_info.org_id is null THEN
176       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
177          OPEN csr_cust_name(l_cust_account_id);
178          FETCH csr_cust_name INTO l_cust_name_num;
179          CLOSE csr_cust_name;
180 
181          FND_MESSAGE.Set_Name('OZF', 'OZF_CLAIM_ATPY_ORG_ID_MISS');
182          FND_MESSAGE.Set_Token('ID',l_cust_name_num);
183          FND_MSG_PUB.add;
184       END IF;FND_MSG_PUB.ADD;
185       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
186    END IF;
187    */
188 
189 EXCEPTION
190    WHEN OTHERS THEN
191      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
192      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
193         FND_MESSAGE.set_name('OZF', 'OZF_CLAIM_ATPY_CUSTOMER_ERR');
194         FND_MSG_PUB.add;
195      END IF;
196 END validate_customer_info;
197 
198 
199 
200 ---------------------------------------------------------------------
201 -- PROCEDURE
202 --    get_pay_date
203 --
204 -- PURPOSE
205 --    This procedure computes the date a payment has to be made based on last_paid_date and periodicity.
206 --
207 -- PARAMETERS
208 --    p_type: type of peroidicity
209 --    p_period: how many period
210 --    p_last_date: last date a payment is made
211 --    x_pay_date:  date a payment should be made based on the last_paid_date and periodicity
212 --    x_return_status
213 --
214 -- NOTES
215 ---------------------------------------------------------------------
216 PROCEDURE get_pay_date(p_type      IN VARCHAR2,
217                        p_period    IN NUMBER,
218                        p_last_date IN DATE,
219                        x_pay_date  OUT NOCOPY DATE,
220                        x_return_status OUT NOCOPY VARCHAR2
221 )
222 IS
223 l_return_date date;
224 BEGIN
225   -- Initialize API return status to sucess
226   x_return_status := FND_API.G_RET_STS_SUCCESS;
227 
228   IF p_type = G_DAILY THEN
229      l_return_date := p_last_date + p_period;
230   ELSIF p_type = G_WEEKLY THEN
231      l_return_date := p_last_date + p_period*7;
232   ELSIF p_type = G_MONTHLY THEN
233      l_return_date := add_months(p_last_date, p_period);
234   ELSIF p_type = G_QUARTERLY THEN
235      l_return_date := add_months(p_last_date, p_period*3);
236 --  ELSIF p_type = G_SEMI_ANNUAL THEN
237 --     l_return_date := add_months(p_last_date, p_period*6);
238   ELSIF p_type = G_ANNUAL THEN
239      l_return_date := add_months(p_last_date, p_period*12);
240   ELSE
241      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
242         FND_MESSAGE.set_name('OZF', 'OZF_CLAIM_ATPY_AUPD_MISS');
243         FND_MSG_PUB.add;
244      END IF;
245      RAISE FND_API.G_EXC_ERROR;
246   END IF;
247   x_pay_date := l_return_date;
248 EXCEPTION
249   WHEN FND_API.G_EXC_ERROR THEN
250       x_return_status := FND_API.G_RET_STS_ERROR;
251 END get_pay_date;
252 
253 ---------------------------------------------------------------------
254 -- PROCEDURE
255 --    create_claim_for_cust
256 --
257 -- PURPOSE
258 --    This procedure creates a claim and its lines for a customer based on the utilization table.
259 --    It will then settle it based on different payment method.
260 --
261 -- PARAMETERS
262 --    p_customer_info IN g_customer_info_csr%rowtype
263 --    p_amount IN number,
264 --    p_mode IN varchar2
265 --    p_auto_reason_code_id IN number
266 --    p_auto_claim_type_id  IN number
267 --    p_autopay_periodicity IN number
268 --    p_autopay_periodicity_type IN VARCHAR2
269 --    p_offer_payment_method IN VARCHAR2
270 --    p_funds_util_flt      IN OZF_Claim_Accrual_PVT.funds_util_flt_type
271 --    x_return_status       OUT VARCHAR2
272 --
273 -- NOTES
274 ---------------------------------------------------------------------
275 PROCEDURE create_claim_for_cust(
276     p_customer_info            IN g_customer_info_csr%rowtype,
277     p_amount                   IN number,
278     p_mode                     IN varchar2,
279     p_auto_reason_code_id      IN number,
280     p_auto_claim_type_id       IN number,
281     p_autopay_periodicity      IN number,
282     p_autopay_periodicity_type IN VARCHAR2,
283     p_offer_payment_method     IN VARCHAR2,
284     p_funds_util_flt           IN OZF_Claim_Accrual_PVT.funds_util_flt_type,
285     x_return_status            OUT NOCOPY VARCHAR2
286 )
287 IS
288 l_amount                   number  := p_amount;
289 l_cust_account_id          number;
290 l_last_pay_date            date;
291 l_claim_id                 number;
292 l_claim_rec                OZF_CLAIM_PVT.claim_rec_type;
293 l_claim_settle_rec         OZF_CLAIM_PVT.claim_rec_type;
294 l_funds_util_flt           OZF_Claim_Accrual_PVT.funds_util_flt_type := p_funds_util_flt;
295 l_plan_type                VARCHAR2(30);
296 
297 CURSOR csr_cust_name(cv_cust_account_id IN NUMBER) IS
298   SELECT CONCAT(CONCAT(party.party_name, ' ('), CONCAT(ca.account_number, ') '))
299   FROM hz_cust_accounts ca
300   ,    hz_parties party
301   WHERE ca.party_id = party.party_id
302   AND ca.cust_account_id = cv_cust_account_id;
303 
304 l_cust_name_num    VARCHAR2(70);
305 
306 CURSOR claim_info_csr(p_claim_id in number) IS
307   select object_version_number, sales_rep_id
308   from ozf_claims_all
309   where claim_id = p_claim_id;
310 
311 l_object_version_number    number;
312 l_return_status            varchar2(1);
313 l_msg_data                 varchar2(2000);
314 l_msg_count                number;
315 
316 l_autopay_periodicity      number;
317 l_autopay_periodicity_type VARCHAR2(30);
318 
319 CURSOR csr_ar_system_options IS
320   SELECT salesrep_required_flag
321   FROM ar_system_parameters;
322 l_salesrep_req_flag        VARCHAR2(1);
323 l_sales_rep_id             NUMBER;
324 
325 CURSOR csr_claim_num(cv_claim_id IN NUMBER) IS
326   SELECT claim_number, amount, cust_billto_acct_site_id
327   FROM ozf_claims
328   WHERE claim_id = cv_claim_id;
329 l_claim_num              varchar2(30);
330 l_claim_amt              number;
331 l_cust_billto_acct_site_id              number;
332 
333 l_eligible_flag          varchar2(1);
334 
335 BEGIN
336    -- Initialize API return status to sucess
337    x_return_status := FND_API.G_RET_STS_SUCCESS;
338 
339    -- For this customer: check whether there is a need to create a claim
340    -- check sum of acctd_amount from utiliztion only create claims with positvit amount
341    IF l_amount is NOT NULL AND l_amount > 0 THEN
342       IF p_mode = 'B' THEN
343          -- IF the mode is 'Backdated'
344          l_eligible_flag := FND_API.g_true;
345       ELSE
346          IF p_customer_info.autopay_flag = FND_API.G_TRUE THEN
347             -- create a claim for this customer
348             IF (p_customer_info.claim_threshold is NOT NULL AND
349                 l_amount > p_customer_info.claim_threshold) THEN
350                -- create a claim record based on l_cust_id_tbl(i).amount > l_cust_id_tbl(i).claim_threshold
351                l_eligible_flag := FND_API.g_true;
352             ELSE
353                -- create a claim based on frequency.
354                -- Need to get last pay date
355                IF p_customer_info.LAST_PAID_DATE is NULL THEN
356                   --  Will pay it now
357                   l_last_pay_date := sysdate;
358                ELSE
359                   -- assign p_autopay_periodicity and p_autopay_periodicity_type
360                   IF p_customer_info.autopay_periodicity_type is NULL OR
361                      p_customer_info.autopay_periodicity is NULL THEN
362                      IF p_autopay_periodicity is NULL OR
363                         p_autopay_periodicity_type is NULL THEN
364                         -- write to a log file
365                         -- skip this customer
366                         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
367                            OPEN csr_cust_name(p_customer_info.cust_account_id);
368                            FETCH csr_cust_name INTO l_cust_name_num;
369                            CLOSE csr_cust_name;
370 
371                            FND_MESSAGE.Set_Name('OZF', 'OZF_CLAIM_ATPY_PERIOD_MISS');
372                            FND_MESSAGE.Set_Token('ID', l_cust_name_num);
373                            FND_MSG_PUB.ADD;
374                         END IF;
375                         RAISE FND_API.g_exc_unexpected_error;
376                         --goto end_loop;
377                      END IF;
378                      l_autopay_periodicity := p_autopay_periodicity;
379                      l_autopay_periodicity_type := p_autopay_periodicity_type;
380                   ELSE
381                      l_autopay_periodicity := p_customer_info.autopay_periodicity;
382                      l_autopay_periodicity_type := p_customer_info.autopay_periodicity_type;
383                   END IF;
384                END IF;
385 
386                IF l_last_pay_date is NULL THEN
387                   -- get last pay date
388                   get_pay_date(
389                       p_type          => l_autopay_periodicity_type,
390                       p_period        => l_autopay_periodicity,
391                       p_last_date     => p_customer_info.last_paid_date,
392                       x_pay_date      => l_last_pay_date,
393                       x_return_status => l_return_status
394                   );
395                   IF l_return_status = FND_API.G_RET_STS_ERROR THEN
396                      IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
397                         OPEN csr_cust_name(p_customer_info.cust_account_id);
398                         FETCH csr_cust_name INTO l_cust_name_num;
399                         CLOSE csr_cust_name;
400 
401                         FND_MESSAGE.Set_Name('OZF', 'OZF_CLAIM_ATPY_PAY_DATE_MISS');
402                         FND_MESSAGE.Set_Token('ID', l_cust_name_num);
403                         FND_MSG_PUB.ADD;
404                      END IF;
405                      RAISE FND_API.g_exc_unexpected_error;
406                   END IF;
407                END IF;
408 
409                -- pay customer is last_pay_date has passed.
410                IF l_last_pay_date <= sysdate THEN
411                   -- create a claim record based on frequency
412                   -- NOTE: There is not exchange info here since the functional
413                   --       currency is the default claim currency.
414                   l_eligible_flag := FND_API.g_true;
415                END IF;
416             END IF;
417          END IF; -- end of if p_customer_info.autopay_flag checking
418       END IF; -- end of if p_mode checking
419 
420       IF l_eligible_flag = FND_API.g_true THEN
421          l_claim_rec.claim_class         := 'CLAIM';
422          l_claim_rec.claim_type_id       := p_auto_claim_type_id;
423          l_claim_rec.reason_code_id      := p_auto_reason_code_id;
424          -- Modified for FXGL Enhancement
425          -- The claim currency will be the accrual currency and not the customer
426          -- currency. As no cross currency associtaion is supported
427          -- For a particular accrual in X currerncy to be associated
428          -- claim must also be in X currency
429          l_claim_rec.currency_code       := l_funds_util_flt.utiz_currency_code;
430          l_claim_rec.cust_account_id     := p_customer_info.cust_account_id;
431          l_claim_rec.cust_billto_acct_site_id := p_customer_info.site_use_id;
432          l_claim_rec.vendor_id           := p_customer_info.vendor_id;
433          l_claim_rec.vendor_site_id      := p_customer_info.vendor_site_id;
434          -- offer's payment method overrides trade profile
435          IF p_offer_payment_method IS NOT NULL THEN
436             l_claim_rec.payment_method   := p_offer_payment_method;
437          ELSE
438             l_claim_rec.payment_method   := p_customer_info.payment_method;
439          END IF;
440          l_claim_rec.created_from        := 'AUTOPAY';
441 
442          l_funds_util_flt.cust_account_id := p_customer_info.cust_account_id;
443          IF p_offer_payment_method IS NOT NULL THEN
444             l_funds_util_flt.offer_payment_method := p_offer_payment_method;
445          ELSE
446             l_funds_util_flt.offer_payment_method := 'NULL';
447          END IF;
448 
449          OZF_CLAIM_ACCRUAL_PVT.Create_Claim_For_Accruals(
450             p_api_version         => 1.0
451            ,p_init_msg_list       => FND_API.g_false
452            ,p_commit              => FND_API.g_false
453            ,p_validation_level    => FND_API.G_VALID_LEVEL_FULL
454            ,x_return_status       => l_return_status
455            ,x_msg_count           => l_msg_count
456            ,x_msg_data            => l_msg_data
457            ,p_claim_rec           => l_claim_rec
458            ,p_funds_util_flt      => l_funds_util_flt
459            ,x_claim_id            => l_claim_id
460          );
461          IF l_return_status <> FND_API.g_ret_sts_success THEN
462            x_return_status := FND_API.G_RET_STS_ERROR;
463            RETURN;
464          END IF;
465 
466          IF l_claim_id is not NULL THEN
467             -- update to settle the claim
468             OPEN claim_info_csr(l_claim_id);
469             FETCH claim_info_csr into l_object_version_number, l_sales_rep_id;
470             CLOSE claim_info_csr;
471 
472             l_claim_settle_rec.claim_id              := l_claim_id;
473             l_claim_settle_rec.object_version_number := l_object_version_number;
474             l_claim_settle_rec.USER_STATUS_ID        := to_number( ozf_utility_pvt.GET_DEFAULT_USER_STATUS(
475                                                               P_STATUS_TYPE=> G_CLAIM_STATUS,
476                                                               P_STATUS_CODE=> G_CLOSED_STATUS
477                                                           ));
478 
479             ------------------------------------------------------
480             -- Sales Credit
481             --   Bug 2950241 fixing: default Sales Rep in Claims
482             --   if "Requires Salesperson" in AR system options.
483             ------------------------------------------------------
484             IF l_sales_rep_id IS NULL THEN
485                OPEN csr_ar_system_options;
486                FETCH csr_ar_system_options INTO l_salesrep_req_flag;
487                CLOSE csr_ar_system_options;
488 
489                IF l_salesrep_req_flag = 'Y' THEN
490                   l_claim_settle_rec.sales_rep_id := -3;  -- No Sales Credit
491                END IF;
492             END IF;
493 
494             OZF_claim_PVT.Update_claim(
495                P_Api_Version                => 1.0,
496                P_Init_Msg_List              => FND_API.G_FALSE,
497                P_Commit                     => FND_API.G_FALSE,
498                P_Validation_Level           => FND_API.G_VALID_LEVEL_FULL,
499                X_Return_Status              => l_return_status,
500                X_Msg_Count                  => l_msg_count,
501                X_Msg_Data                   => l_msg_data,
502                P_claim                      => l_claim_settle_Rec,
503                p_event                      => 'UPDATE',
504                p_mode                       => OZF_claim_Utility_pvt.G_AUTO_MODE,
505                X_Object_Version_Number      => l_object_version_number
506             );
507             IF l_return_status <> FND_API.g_ret_sts_success THEN
508                 x_return_status := FND_API.G_RET_STS_ERROR;
509                 RETURN;
510             END IF;
511          END IF;
512 
513       ELSE
514          IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
515             OPEN csr_cust_name(p_customer_info.cust_account_id);
516             FETCH csr_cust_name INTO l_cust_name_num;
517             CLOSE csr_cust_name;
518 
519             FND_MESSAGE.Set_Name('OZF', 'OZF_CLAIM_ATPY_CUST_INELIG');
520             FND_MESSAGE.Set_Token('ID', l_cust_name_num);
521             FND_MSG_PUB.ADD;
522          END IF;
523          RAISE FND_API.g_exc_unexpected_error;
524       END IF;
525    ELSE
526       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
527          OPEN csr_cust_name(p_customer_info.cust_account_id);
528          FETCH csr_cust_name INTO l_cust_name_num;
529          CLOSE csr_cust_name;
530 
531          FND_MESSAGE.Set_Name('OZF', 'OZF_CLAIM_ATPY_AMT_SMALL');
532          FND_MESSAGE.Set_Token('ID', l_cust_name_num);
533          FND_MSG_PUB.ADD;
534       END IF;
535       RAISE FND_API.g_exc_unexpected_error;
536    END IF;
537 
538    OPEN csr_claim_num(l_claim_id);
539    FETCH csr_claim_num INTO l_claim_num, l_claim_amt,l_cust_billto_acct_site_id;
540    CLOSE csr_claim_num;
541 
542 
543    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Claim Number: '||l_claim_num);
544    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Claim Amount: '||l_claim_amt);
545 
546    IF l_cust_billto_acct_site_id IS NOT NULL
547    OR l_cust_billto_acct_site_id<>0 THEN
548 
549    FND_FILE.PUT_LINE(FND_FILE.LOG, 'The claim is created for bill_to site: '||l_cust_billto_acct_site_id);
550    FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'The claim is created for bill_to site: '|| l_cust_billto_acct_site_id );
551 
552    END IF;
553 
554    FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Claim Number               : '||l_claim_num );
555    FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Claim Amount               : '||l_claim_amt );
556 
557 EXCEPTION
558    WHEN OTHERS THEN
559       x_return_status := FND_API.G_RET_STS_ERROR;
560 END create_claim_for_cust;
561 
562 
563 ---------------------------------------------------------------------
564 -- PROCEDURE
565 --    Create_Claim_for_BD_Offer
566 --
567 -- PURPOSE
568 --    Create a claim for a backdated offer.
569 --
570 -- PARAMETERS
571 --    p_offer_tbl : list of offers info that a claim will be created on.
572 --
573 ---------------------------------------------------------------------
574 PROCEDURE  Create_Claim_for_BD_Offer(
575     p_api_version            IN    NUMBER
576    ,p_init_msg_list          IN    VARCHAR2 := FND_API.G_FALSE
577    ,p_commit                 IN    VARCHAR2 := FND_API.G_FALSE
578    ,p_validation_level       IN    NUMBER   := FND_API.G_VALID_LEVEL_FULL
579    ,x_return_status          OUT NOCOPY   VARCHAR2
580    ,x_msg_data               OUT NOCOPY   VARCHAR2
581    ,x_msg_count              OUT NOCOPY   NUMBER
582    ,p_offer_tbl              IN    offer_tbl_type
583 )
584 IS
585 l_return_status           varchar2(1);
586 l_msg_data                varchar2(2000);
587 l_msg_count               number;
588 
589 l_api_name       CONSTANT VARCHAR2(30) := 'Create_Claim_for_BD_Offer';
590 l_api_version    CONSTANT NUMBER := 1.0;
591 l_full_name      CONSTANT VARCHAR2(60) := G_PKG_NAME ||'.'|| l_api_name;
592 
593 CURSOR sys_parameter_info_csr IS
594 SELECT autopay_flag
595 ,      autopay_reason_code_id
596 ,      autopay_claim_type_id
597 ,      autopay_periodicity
598 ,      autopay_periodicity_type
599 FROM ozf_sys_parameters;
600 
601 l_autopay_flag             varchar2(1);
602 l_auto_reason_code_id      number;
603 l_auto_claim_type_id       number;
604 l_autopay_periodicity      number;
605 l_autopay_periodicity_type VARCHAR2(30);
606 l_cust_account_id          number;
607 l_amount                   number;
608 
609 CURSOR settlement_method_CSR(p_id in number) is
610   select settlement_code
611   from ozf_offer_adjustments_b
612   where list_header_id = p_id;
613 
614 l_customer_info g_customer_info_csr%rowtype;
615 l_funds_util_flt           OZF_CLAIM_ACCRUAL_PVT.funds_util_flt_type   := NULL;
616 
617 BEGIN
618 
619 SAVEPOINT BDOffer;
620 
621 -- Debug Message
622 IF OZF_DEBUG_LOW_ON THEN
623    FND_MESSAGE.Set_Name('OZF','OZF_API_DEBUG_MESSAGE');
624    FND_MESSAGE.Set_Token('TEXT',l_full_name||': Start');
625    FND_MSG_PUB.Add;
626 END IF;
627 
628 -- get autopay_flag, reason_code_id
629 OPEN sys_parameter_info_csr;
630 FETCH sys_parameter_info_csr INTO l_autopay_flag
631                                 , l_auto_reason_code_id
632                                 , l_auto_claim_type_id
633                                 , l_autopay_periodicity
634                                 , l_autopay_periodicity_type;
635 CLOSE sys_parameter_info_csr;
636 
637 -- check reason_code and claim_type from sys_parameters.
638 IF l_auto_reason_code_id is NULL THEN
639    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
640       FND_MESSAGE.set_name('OZF', 'OZF_CLAIM_REASON_CD_MISSING');
641       FND_MSG_PUB.add;
642    END IF;
643    RAISE FND_API.g_exc_unexpected_error;
644 END IF;
645 
646 IF l_auto_claim_type_id is NULL THEN
647    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
648       FND_MESSAGE.set_name('OZF', 'OZF_CLAIM_CLAIM_TYPE_MISSING');
649       FND_MSG_PUB.add;
650    END IF;
651    RAISE FND_API.g_exc_unexpected_error;
652 END IF;
653 
654 -- Loop through p_offer table
655 For i in p_offer_tbl.FIRST..p_offer_tbl.COUNT LOOP
656    IF l_cust_account_id is not null THEN
657       -- Get customer information
658       OPEN g_customer_info_csr(l_cust_account_id);
659       FETCH g_customer_info_csr into l_customer_info;
660       CLOSE g_customer_info_csr;
661 
662       validate_customer_info (
663               p_customer_info => l_customer_info,
664               x_return_status => l_return_status
665       );
666       -- skip this customer if we can not get all the info.
667       IF l_return_status = FND_API.g_ret_sts_error or
668          l_return_status = FND_API.g_ret_sts_unexp_error THEN
669          RAISE FND_API.g_exc_unexpected_error;
670          --goto end_loop;
671       END IF;
672 
673       -- But, we need to overwrite the payment method for the customer;
674       OPEN settlement_method_CSR(p_offer_tbl(i).offer_id);
675       FETCH settlement_method_CSR into l_customer_info.payment_method;
676       CLOSE settlement_method_CSR;
677 
678       l_funds_util_flt := null;
679       l_funds_util_flt.activity_id := p_offer_tbl(i).offer_id;
680       l_funds_util_flt.activity_type := G_OFFER_TYPE;
681       l_funds_util_flt.adjustment_type_id := p_offer_tbl(i).adjustment_type_id;
682 
683       create_claim_for_cust(p_customer_info       => l_customer_info,
684                             p_amount              => p_offer_tbl(i).amount,
685                             p_mode                => 'B',
686                             p_auto_reason_code_id => l_auto_reason_code_id,
687                             p_auto_claim_type_id  => l_auto_claim_type_id,
688                             p_autopay_periodicity => l_autopay_periodicity,
689                             p_autopay_periodicity_type => l_autopay_periodicity_type,
690                             p_offer_payment_method=> null,
691                             p_funds_util_flt       => l_funds_util_flt,
692                             x_return_status       => l_return_status
693                            );
694       IF l_return_status = FND_API.g_ret_sts_error THEN
695          RAISE FND_API.g_exc_error;
696       ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
697          RAISE FND_API.g_exc_unexpected_error;
698       END IF;
699    END IF;
700 END LOOP;
701 
702 -- Debug Message
703 IF OZF_DEBUG_LOW_ON THEN
704    FND_MESSAGE.Set_Name('OZF','OZF_API_DEBUG_MESSAGE');
705    FND_MESSAGE.Set_Token('TEXT',l_full_name||': End');
706    FND_MSG_PUB.Add;
707 END IF;
708 
709 EXCEPTION
710   WHEN FND_API.g_exc_error THEN
711     ROLLBACK TO BDOffer;
712     FND_MSG_PUB.count_and_get (
713          p_encoded => FND_API.g_false
714         ,p_count   => l_msg_count
715         ,p_data    => l_msg_data
716     );
717   WHEN FND_API.g_exc_unexpected_error THEN
718     ROLLBACK TO BDOffer;
719     FND_MSG_PUB.count_and_get (
720          p_encoded => FND_API.g_false
721         ,p_count   => l_msg_count
722         ,p_data    => l_msg_data
723     );
724   WHEN OTHERS THEN
725     ROLLBACK TO BDOffer;
726     FND_MSG_PUB.count_and_get (
727          p_encoded => FND_API.g_false
728         ,p_count   => l_msg_count
729         ,p_data    => l_msg_data
730     );
731 END Create_claim_for_bd_offer;
732 
733 
734 --------------------------------------------------------------------------------
735 --    API name   : Start_Autopay
736 --    Type       : Public
737 --    Pre-reqs   : None
738 --    Function   :
739 --    Parameters :
740 --
741 --    IN         : p_run_mode                       IN VARCHAR2  Optional
742 --               : p_customer_id                    IN NUMBER    Optional
743 --               : p_relationship_type              IN VARCHAR2   Optional
744 --               : p_related_cust_account_id        IN NUMBER     Optional
745 --               : p_buy_group_party_id             IN NUMBER     Optional
746 --               : p_select_cust_children_flag      IN VARCHAR2   Optional
747 --               : p_pay_to_customer                IN VARCHAR2   Optional
748 --               : p_fund_id                        IN NUMBER    Optional
749 --               : p_plan_type                      IN NUMBER    Optional
750 --               : p_offer_type                     IN VARCHAR2  Optional
751 --               : p_plan_id                        IN NUMBER    Optional
752 --               : p_product_category_id            IN NUMBER    Optional
753 --               : p_product_id                     IN NUMBER    Optional
754 --               : p_end_date                       IN VARCHAR2  Optional
755 --               : p_org_id                         IN NUMBER    Optional
756 --
757 --    Version    : Current version     1.0
758 --
759 --   Note: This program automatically creates a claim for a set of customers
760 --   The customer set is selected based on the input paramter. Also, we will pay a cusomter:
761 --       if a customer utiliztion amount summation is greater than his threshold_amount
762 --   or if the current date passes last_paid_date + threshold period.
763 --   End of Comments
764 --------------------------------------------------------------------------------
765 PROCEDURE Start_Autopay (
766     ERRBUF                          OUT NOCOPY VARCHAR2,
767     RETCODE                         OUT NOCOPY NUMBER,
768     p_org_id                        IN NUMBER  DEFAULT NULL,
769     p_run_mode                      IN VARCHAR2 := NULL,
770     p_customer_id                   IN NUMBER   := NULL,
771     p_relationship_type             IN VARCHAR2 := NULL,
772     p_related_cust_account_id       IN NUMBER   := NULL,
773     p_buy_group_party_id            IN NUMBER   := NULL,
774     p_select_cust_children_flag     IN VARCHAR2  := 'N',
775     p_pay_to_customer               IN VARCHAR2 := NULL,
776     p_fund_id                       IN NUMBER   := NULL,
777     p_plan_type                     IN VARCHAR2 := NULL,
778     p_offer_type                    IN VARCHAR2 := NULL,
779     p_plan_id                       IN NUMBER   := NULL,
780     p_product_category_id           IN NUMBER   := NULL,
781     p_product_id                    IN NUMBER   := NULL,
782     p_end_date                      IN VARCHAR2,
783     p_group_by_offer                IN VARCHAR2
784 )
785 IS
786 l_return_status          varchar2(1);
787 l_msg_data               varchar2(2000);
788 l_msg_count              number;
789 
790 l_api_name      CONSTANT VARCHAR2(30) := 'Start_Autopay';
791 l_api_version   CONSTANT NUMBER := 1.0;
792 l_full_name     CONSTANT VARCHAR2(60) := G_PKG_NAME ||'.'|| l_api_name;
793 
794 CURSOR sys_parameter_info_csr IS
795 SELECT autopay_flag
796 ,      autopay_reason_code_id
797 ,      autopay_claim_type_id
798 ,      autopay_periodicity
799 ,      autopay_periodicity_type
800 FROM ozf_sys_parameters;
801 l_autopay_flag             varchar2(1);
802 l_auto_reason_code_id      number;
803 l_auto_claim_type_id       number;
804 l_autopay_periodicity      number;
805 l_autopay_periodicity_type VARCHAR2(30);
806 l_run_mode                  VARCHAR2(80);
807 l_pay_to                  VARCHAR2(80);
808 l_rel_cust_name             VARCHAR2(70);
809 l_cust_name             VARCHAR2(70);
810 l_rlship                   VARCHAR2(80);
811 l_fund_name                VARCHAR2(240);
812 l_plan_type_name           VARCHAR2(240);
813 l_plan_name                VARCHAR2(240);
814 l_prod_cat_name                VARCHAR2(240);
815 l_prod_name                VARCHAR2(240);
816 l_buy_gp_name             VARCHAR2(70);
817 l_members_flag                  VARCHAR2(80);
818 l_offer_type_name               VARCHAR2(80);
819 
820 l_bill_to_site_use_id      NUMBER;
821 l_prev_site_use_id         NUMBER;
822 
823 CURSOR csr_meaning(lkup_type IN VARCHAR2, lkup_code IN VARCHAR2) IS
824 SELECT MEANING
825 FROM OZF_LOOKUPS
826 WHERE lookup_type = lkup_type
827 AND LOOKUP_CODE = lkup_code;
828 
829 CURSOR csr_rlship(lkup_code IN VARCHAR2) IS
830 SELECT ar.MEANING
831 FROM ar_lookups ar
832 WHERE ar.lookup_type = 'RELATIONSHIP_TYPE'
833 AND ar.lookup_code = lkup_code;
834 
835 CURSOR csr_members(lkup_type IN VARCHAR2, lkup_code IN VARCHAR2) IS
836 SELECT MEANING
837 FROM FND_LOOKUPS
838 WHERE lookup_type = lkup_type
839 AND LOOKUP_CODE = lkup_code;
840 
841 CURSOR csr_fund_name(p_fund_id IN NUMBER) IS
842 SELECT f.SHORT_NAME
843 FROM OZF_FUNDS_VL f
844 WHERE f.FUND_ID = p_fund_id;
845 
846 CURSOR csr_offer_name(off_id IN NUMBER) IS
847 SELECT QP.DESCRIPTION
848 FROM QP_LIST_HEADERS_VL qp
849 WHERE qp.list_header_id = off_id;
850 
851 CURSOR csr_prod_cat_name(prod_cat_id IN NUMBER) IS
852 SELECT  MCT.DESCRIPTION
853 FROM MTL_CATEGORIES_TL MCT
854 WHERE  MCT.CATEGORY_ID = prod_cat_id;
855 
856 CURSOR csr_prod_name(p_product_id IN NUMBER) IS
857 SELECT DESCRIPTION
858 FROM MTL_SYSTEM_ITEMS_KFV
859 WHERE INVENTORY_ITEM_ID = p_product_id
860 AND organization_id = FND_PROFILE.VALUE('AMS_ITEM_ORGANIZATION_ID');
861 
862 CURSOR csr_cust_name(cv_cust_account_id IN NUMBER) IS
863   SELECT CONCAT(CONCAT(party.party_name, ' ('), CONCAT(ca.account_number, ') '))
864   FROM hz_cust_accounts ca
865   ,    hz_parties party
866   WHERE ca.party_id = party.party_id
867   AND ca.cust_account_id = cv_cust_account_id;
868 
869 CURSOR csr_get_party_id(cv_cust_account_id IN NUMBER) IS
870   SELECT party_id
871   FROM hz_cust_accounts
872   WHERE cust_account_id = cv_cust_account_id;
873 
874 CURSOR csr_party_name(cv_party_id IN NUMBER) IS
875   SELECT party_name
876   FROM hz_parties
877   WHERE party_id = cv_party_id;
878 
879 CURSOR csr_offer_pay_name(cv_payment_method IN VARCHAR2) IS
880   SELECT meaning
881   FROM ozf_lookups
882   WHERE lookup_type = 'OZF_AUTOPAY_METHOD'
883   AND lookup_code = cv_payment_method;
884 
885 --Multiorg Changes
886 CURSOR operating_unit_csr IS
887     SELECT ou.organization_id   org_id
888     FROM hr_operating_units ou
889     WHERE mo_global.check_access(ou.organization_id) = 'Y';
890 
891 TYPE EmpCurType IS REF CURSOR;
892 l_emp_csr                  NUMBER; --EmpCurType;
893 
894 l_stmt                     VARCHAR2(3000);
895 l_funds_util_flt           OZF_CLAIM_ACCRUAL_PVT.funds_util_flt_type   := NULL;
896 
897 l_cust_account_id          number;
898 l_amount                   number;
899 l_customer_info            g_customer_info_csr%rowtype;
900 l_cust_name_num            VARCHAR2(70);
901 l_offer_pay_method         VARCHAR2(30);
902 l_offer_pay_name           VARCHAR2(80);
903 l_party_id                 NUMBER;
904 l_trade_prf_exist          BOOLEAN   := FALSE;
905 l_ignore                   NUMBER;
906 
907 l_cust_info_invalid        BOOLEAN   := FALSE;
908 l_prev_cust_account_id     NUMBER;
909 l_utiz_currency            VARCHAR2(15);
910 
911 TYPE  trd_prf_tbl_type IS TABLE OF NUMBER
912    INDEX BY BINARY_INTEGER;
913 l_trd_prof_tbl  trd_prf_tbl_type;
914 i                BINARY_INTEGER := 1;
915 
916 l_plan_id                  NUMBER;
917 
918 --Multiorg Changes
919 m NUMBER := 0;
920 l_org_id     OZF_UTILITY_PVT.operating_units_tbl;
921 
922 BEGIN
923 
924 SAVEPOINT AutoPay;
925 
926 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '*------------------------------ Claims Autopay Execution Report ------------------------------*');
927 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Execution Starts On: ' || to_char(sysdate,'MM-DD-YYYY HH24:MI:SS'));
928 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '*---------------------------------------------------------------------------------------------*');
929 
930 -- Debug Message
931 IF OZF_DEBUG_LOW_ON THEN
932    FND_MESSAGE.Set_Name('OZF','OZF_API_DEBUG_MESSAGE');
933    FND_MESSAGE.Set_Token('TEXT',l_full_name||': Start');
934    FND_MSG_PUB.Add;
935 END IF;
936 
937 --Multiorg Changes
938 MO_GLOBAL.init('OZF');
939 
940 IF p_org_id IS NULL THEN
941         MO_GLOBAL.set_policy_context('M',null);
942     OPEN operating_unit_csr;
943     LOOP
944        FETCH operating_unit_csr into l_org_id(m);
945        m := m + 1;
946        EXIT WHEN operating_unit_csr%NOTFOUND;
947     END LOOP;
948     CLOSE operating_unit_csr;
949 ELSE
950     l_org_id(m) := p_org_id;
951 END IF;
952 
953 --Multiorg Changes
954 IF (l_org_id.COUNT > 0) THEN
955     FOR m IN l_org_id.FIRST..l_org_id.LAST LOOP
956       BEGIN
957         MO_GLOBAL.set_policy_context('S',l_org_id(m));
958             -- Write OU info to OUT file
959             FND_FILE.PUT_LINE(FND_FILE.OUTPUT,  'Operating Unit: ' || MO_GLOBAL.get_ou_name(l_org_id(m)));
960             FND_FILE.PUT_LINE(FND_FILE.OUTPUT,  '-----------------------------------------------------');
961             -- Write OU info to LOG file
962             FND_FILE.PUT_LINE(FND_FILE.LOG,  'Operating Unit: ' || MO_GLOBAL.get_ou_name(l_org_id(m)));
963             FND_FILE.PUT_LINE(FND_FILE.LOG,  '-----------------------------------------------------');
964 
965                 IF p_run_mode IS NOT NULL THEN
966                    OPEN csr_meaning('OZF_CLAIM_AUTOPAY_RUNMODE', p_run_mode);
967                    FETCH csr_meaning INTO l_run_mode;
968                    CLOSE csr_meaning;
969                 END IF;
970 
971                 IF p_customer_id IS NOT NULL THEN
972                    OPEN csr_cust_name(p_customer_id);
973                    FETCH csr_cust_name INTO l_cust_name;
974                    CLOSE csr_cust_name;
975 
976                    IF p_relationship_type IS NOT NULL THEN
977                           OPEN csr_rlship(p_relationship_type);
978                           FETCH csr_rlship INTO l_rlship;
979                           CLOSE csr_rlship;
980 
981                           IF p_related_cust_account_id IS NOT NULL THEN
982                          OPEN csr_cust_name(p_related_cust_account_id);
983                          FETCH csr_cust_name INTO l_rel_cust_name;
984                          CLOSE csr_cust_name;
985 
986                          IF p_pay_to_customer IS NOT NULL THEN
987                                 OPEN csr_meaning('OZF_CLAIM_PAYTO_TYPE', p_pay_to_customer);
988                                 FETCH csr_meaning INTO l_pay_to;
989                                 CLOSE csr_meaning;
990                          END IF;
991 
992                           END IF;
993 
994                    END IF;
995 
996                    IF p_buy_group_party_id IS NOT NULL THEN
997                           OPEN csr_party_name(p_buy_group_party_id);
998                           FETCH csr_party_name INTO l_buy_gp_name;
999                           CLOSE csr_party_name;
1000                    END IF;
1001 
1002                    IF p_select_cust_children_flag IS NOT NULL THEN
1003                           OPEN csr_members('YES_NO', p_select_cust_children_flag);
1004                           FETCH csr_members INTO l_members_flag;
1005                           CLOSE csr_members;
1006                    END IF;
1007 
1008                 END IF;
1009 
1010                 IF p_fund_id IS NOT NULL THEN
1011                    OPEN csr_fund_name(p_fund_id);
1012                    FETCH csr_fund_name INTO l_fund_name;
1013                    CLOSE csr_fund_name;
1014                 END IF;
1015 
1016                 IF p_plan_type IS NOT NULL THEN
1017                    OPEN csr_meaning('OZF_CLAIM_ASSO_ACT_TYPE', p_plan_type);
1018                    FETCH csr_meaning INTO l_plan_type_name;
1019                    CLOSE csr_meaning;
1020 
1021                    IF p_plan_id IS NOT NULL THEN
1022                           OPEN csr_offer_name(p_plan_id);
1023                           FETCH csr_offer_name INTO l_plan_name;
1024                           CLOSE csr_offer_name;
1025                    END IF;
1026                 END IF;
1027 
1028                 IF p_offer_type IS NOT NULL THEN
1029                    OPEN csr_meaning('OZF_OFFER_TYPE', p_offer_type);
1030                    FETCH csr_meaning INTO l_offer_type_name;
1031                    CLOSE csr_meaning;
1032                 END IF;
1033 
1034                 IF p_product_category_id IS NOT NULL THEN
1035                    OPEN csr_prod_cat_name(p_product_category_id);
1036                    FETCH csr_prod_cat_name INTO l_prod_cat_name;
1037                    CLOSE csr_prod_cat_name;
1038                 END IF;
1039 
1040                 IF p_product_id IS NOT NULL THEN
1041                    OPEN csr_prod_name(p_product_id);
1042                    FETCH csr_prod_name INTO l_prod_name;
1043                    CLOSE csr_prod_name;
1044                 END IF;
1045 
1046                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rpad('Run Mode', 40, ' ') || ': ' || l_run_mode);
1047                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rpad('Customer Name', 40, ' ') || ': '|| l_cust_name);
1048                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rpad('Relationship', 40, ' ') || ': ' || l_rlship);
1049                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rpad('Related Customer', 40, ' ') || ': ' || l_rel_cust_name);
1050                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rpad('Buying Group and Members', 40, ' ') || ': ' || l_buy_gp_name);
1051                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rpad('Include All Member Earnings', 40, ' ') || ': ' || l_members_flag);
1052                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rpad('Pay To', 40, ' ') || ': ' || l_pay_to);
1053                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rpad('Fund Name', 40, ' ') || ': ' || l_fund_name);
1054                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rpad('Activity Type', 40, ' ') || ': ' || l_plan_type_name);
1055                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rpad('Offer Type', 40, ' ') || ': ' || l_offer_type_name);
1056                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rpad('Activity Name', 40, ' ') || ': ' || l_plan_name);
1057                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rpad('Product Category', 40, ' ') || ': ' || l_prod_cat_name);
1058                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rpad('Product', 40, ' ') || ': ' || l_prod_name);
1059                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rpad('End Date', 40, ' ') || ': ' || p_end_date);
1060                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rpad('Group By Offer', 40, ' ') || ': ' || p_group_by_offer);
1061                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '*---------------------------------------------------------------------------------------------*');
1062 
1063                    /*------------ Autopay starts ---------------*/
1064 
1065                    -- get autopay_flag, reason_code_id
1066                    OPEN sys_parameter_info_csr;
1067                    FETCH sys_parameter_info_csr INTO l_autopay_flag
1068                                                    , l_auto_reason_code_id
1069                                                    , l_auto_claim_type_id
1070                                                    , l_autopay_periodicity
1071                                                    , l_autopay_periodicity_type;
1072                    CLOSE sys_parameter_info_csr;
1073 
1074                    -- check reason_code and claim_type from sys_parameters.
1075                    IF l_auto_reason_code_id is NULL THEN
1076                           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
1077                          FND_MESSAGE.set_name('OZF', 'OZF_CLAIM_REASON_CD_MISSING');
1078                          FND_MSG_PUB.add;
1079                           END IF;
1080                           RAISE FND_API.g_exc_unexpected_error;
1081                    END IF;
1082 
1083                    IF l_auto_claim_type_id is NULL THEN
1084                           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
1085                          FND_MESSAGE.set_name('OZF', 'OZF_CLAIM_CLAIM_TYPE_MISSING');
1086                          FND_MSG_PUB.add;
1087                           END IF;
1088                           RAISE FND_API.g_exc_unexpected_error;
1089                    END IF;
1090 
1091                    -- construct the following sql based on the inputs
1092                    l_funds_util_flt.run_mode := p_run_mode;
1093                    l_funds_util_flt.utilization_type := null;
1094                    l_funds_util_flt.offer_type := p_offer_type;
1095                    l_funds_util_flt.activity_type := p_plan_type;
1096                    l_funds_util_flt.activity_id := p_plan_id;
1097                    l_funds_util_flt.fund_id := p_fund_id;
1098                    l_funds_util_flt.adjustment_type_id := null;
1099                    IF p_product_id IS NOT NULL THEN
1100                           l_funds_util_flt.product_level_type := 'PRODUCT';
1101                           l_funds_util_flt.product_id := p_product_id;
1102                    ELSIF p_product_category_id IS NOT NULL THEN
1103                           l_funds_util_flt.product_level_type := 'FAMILY';
1104                           l_funds_util_flt.product_id := p_product_category_id;
1105                    END IF;
1106 
1107                    -- additional filter conditions
1108                    l_funds_util_flt.cust_account_id := p_customer_id;
1109                    l_funds_util_flt.relationship_type := p_relationship_type;
1110                    l_funds_util_flt.related_cust_account_id := p_related_cust_account_id;
1111                    l_funds_util_flt.buy_group_party_id := p_buy_group_party_id;
1112                    l_funds_util_flt.select_cust_children_flag := p_select_cust_children_flag;
1113                    l_funds_util_flt.pay_to_customer := p_pay_to_customer;
1114                    l_funds_util_flt.end_date := FND_DATE.CANONICAL_TO_DATE(p_end_date);
1115                    l_funds_util_flt.group_by_offer := NVL(p_group_by_offer,'N'); --R12
1116 
1117                    -- Changes for FXGL Enhancement
1118            -- l_funds_util_flt.utiz_currency_code is null here
1119                    -- and all currency records are retrieved but they are
1120                    -- grouped by currency_code
1121                    -- The amount_remaining is in utiz_curency and not in functional currency
1122 
1123                    OZF_Claim_Accrual_Pvt.Get_Utiz_Sql_Stmt(
1124                           p_api_version         => 1.0
1125                          ,p_init_msg_list       => FND_API.g_false
1126                          ,p_commit              => FND_API.g_false
1127                          ,p_validation_level    => FND_API.g_valid_level_full
1128                          ,x_return_status       => l_return_status
1129                          ,x_msg_count           => l_msg_count
1130                          ,x_msg_data            => l_msg_data
1131                          ,p_summary_view        => 'AUTOPAY'
1132                          ,p_funds_util_flt      => l_funds_util_flt
1133                          ,p_cust_account_id     => p_customer_id
1134                          ,x_utiz_sql_stmt       => l_stmt
1135                    );
1136 
1137                    IF l_return_status <> FND_API.g_ret_sts_success THEN
1138                           RAISE FND_API.g_exc_error;
1139                    END IF;
1140 
1141                    -- log query for debugging
1142                    IF OZF_DEBUG_LOW_ON THEN
1143                           OZF_UTILITY_PVT.write_conc_log;
1144                    END IF;
1145 
1146                    l_emp_csr := DBMS_SQL.open_cursor;
1147                    FND_DSQL.set_cursor(l_emp_csr);
1148                    DBMS_SQL.parse(l_emp_csr, l_stmt, DBMS_SQL.native);
1149                    DBMS_SQL.define_column(l_emp_csr, 1, l_offer_pay_method, 30);
1150                    DBMS_SQL.define_column(l_emp_csr, 2, l_amount);
1151                    DBMS_SQL.define_column(l_emp_csr, 3, l_utiz_currency, 15 );
1152 
1153 
1154                          --R12.1 enhancement add l_bill_to_site_use_id and fetch its value
1155                          -- This will be used to group the customer earnings.
1156                    DBMS_SQL.define_column(l_emp_csr, 4, l_bill_to_site_use_id );
1157 
1158 
1159                    IF p_customer_id IS NULL THEN
1160                           DBMS_SQL.define_column(l_emp_csr, 5, l_cust_account_id);
1161                    END IF;
1162 
1163                    IF NVL(p_group_by_offer,'N') = 'Y'  AND p_customer_id IS NULL THEN
1164                           DBMS_SQL.define_column(l_emp_csr, 6, l_plan_id);
1165                    ELSIF NVL(p_group_by_offer,'N') = 'Y' AND p_customer_id IS NOT NULL THEN
1166                          DBMS_SQL.define_column(l_emp_csr, 5, l_plan_id);
1167                    END IF;
1168 
1169                    FND_DSQL.do_binds;
1170 
1171                    l_ignore := DBMS_SQL.execute(l_emp_csr);
1172                    LOOP
1173                           FND_MSG_PUB.initialize;
1174 
1175                           IF DBMS_SQL.fetch_rows(l_emp_csr) > 0 THEN
1176                          DBMS_SQL.column_value(l_emp_csr, 1, l_offer_pay_method);
1177                          DBMS_SQL.column_value(l_emp_csr, 2, l_amount);
1178                          DBMS_SQL.column_value(l_emp_csr, 3, l_utiz_currency);
1179                          DBMS_SQL.column_value(l_emp_csr, 4, l_bill_to_site_use_id); --R12.1 enhancement nirprasa
1180 
1181                          IF p_customer_id IS NULL THEN
1182                                 DBMS_SQL.column_value(l_emp_csr, 5, l_cust_account_id);
1183                          ELSE
1184                                 l_cust_account_id := p_customer_id;
1185                          END IF;
1186 
1187                          IF NVL(p_group_by_offer,'N') = 'Y'  AND p_customer_id IS NULL THEN
1188                                 DBMS_SQL.column_value(l_emp_csr, 6, l_plan_id);
1189                                 l_funds_util_flt.activity_id := l_plan_id;
1190                          ELSIF NVL(p_group_by_offer,'N') = 'Y' AND p_customer_id IS NOT NULL THEN
1191                                 DBMS_SQL.column_value(l_emp_csr, 5, l_plan_id);
1192                                 l_funds_util_flt.activity_id := l_plan_id;
1193                          ELSE
1194                                 l_funds_util_flt.activity_id := NULL;
1195                          END IF;
1196 
1197             -- FXGL Enhancement : Add utiz_currency_code to l_funds_util_flt
1198             -- This is a required filter
1199             -- This will ensure assoc happens for each currency line
1200 
1201             l_funds_util_flt.utiz_currency_code := l_utiz_currency;
1202 
1203 
1204                          -- In case of buying group/related customer accruals,
1205                          -- the amount can be paid either to buying group/related customer or
1206                          -- to claiming customer based on p_pay_to_customer.
1207                          IF p_pay_to_customer = 'RELATED'
1208                          THEN
1209                                 IF p_related_cust_account_id IS NOT NULL THEN
1210                                    l_cust_account_id := p_related_cust_account_id;
1211                                 END IF;
1212                          END IF;
1213 
1214                          BEGIN
1215                          SAVEPOINT AUTOPAY_CUST;
1216 
1217                          IF l_cust_account_id is not null THEN
1218 
1219                          --R12.1 enhancement the call should once per site instead of onec per account.
1220 
1221 
1222 
1223                           /*IF  l_prev_cust_account_id IS NULL OR
1224                                            l_cust_account_id <> l_prev_cust_account_id THEN*/
1225 
1226                            IF  l_prev_site_use_id IS NULL OR
1227                                      l_bill_to_site_use_id <> l_prev_site_use_id THEN
1228 
1229                                  l_cust_name_num := NULL;
1230                                  l_customer_info := NULL;
1231                                  l_party_id := NULL;
1232 
1233                                 -- Get customer information for log message purpose
1234                                 OPEN csr_cust_name(l_cust_account_id);
1235                                 FETCH csr_cust_name INTO l_cust_name_num;
1236                                 CLOSE csr_cust_name;
1237 
1238 
1239                                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rpad('l_bill_to_site_use_id', 40, ' ') || ': ' || l_bill_to_site_use_id);
1240 
1241                                 -- 1. get trade profile by site_use_id
1242                                 OPEN g_site_info_csr(l_bill_to_site_use_id);
1243                                 FETCH g_site_info_csr into l_customer_info;
1244                                 IF g_site_info_csr%NOTFOUND THEN
1245                                    l_trade_prf_exist := FALSE;
1246                                 ELSE
1247                                    l_trade_prf_exist := TRUE;
1248                                 END IF;
1249                                 CLOSE g_site_info_csr;
1250 
1251                                 -- 2. if trade profile is not there for site,
1252                                 --    then get trade profile by account level
1253                                 IF NOT l_trade_prf_exist THEN
1254 
1255 
1256 
1257 
1258                                 OPEN g_customer_info_csr(l_cust_account_id);
1259                                 FETCH g_customer_info_csr into l_customer_info;
1260                                 IF g_customer_info_csr%NOTFOUND THEN
1261                                    l_trade_prf_exist := FALSE;
1262                                 ELSE
1263                                    l_trade_prf_exist := TRUE;
1264                                 END IF;
1265                                 CLOSE g_customer_info_csr;
1266 
1267                                 END IF;
1268 
1269                                 -- 3. if trade profile is not there for customer,
1270                                 --    then get trade profile by party_id level
1271                                 IF NOT l_trade_prf_exist THEN
1272                                    OPEN csr_get_party_id(l_cust_account_id);
1273                                    FETCH csr_get_party_id INTO l_party_id;
1274                                    CLOSE csr_get_party_id;
1275 
1276                                    IF l_party_id IS NOT NULL THEN
1277                                           OPEN g_party_trade_info_csr(l_party_id);
1278                                           FETCH g_party_trade_info_csr INTO l_customer_info;
1279                                           IF g_party_trade_info_csr%NOTFOUND THEN
1280                                          l_trade_prf_exist := FALSE;
1281                                           ELSE
1282                                          l_trade_prf_exist := TRUE;
1283                                           END IF;
1284                                           CLOSE g_party_trade_info_csr;
1285                                    END IF;
1286                                 END IF;
1287 
1288                                 l_customer_info.cust_account_id := l_cust_account_id;
1289                                 validate_customer_info (
1290                                           p_customer_info => l_customer_info,
1291                                           x_return_status => l_return_status
1292                                   );
1293                                  -- skip this customer if we can not get all the info.
1294                                 IF l_return_status = FND_API.g_ret_sts_error or
1295                                          l_return_status = FND_API.g_ret_sts_unexp_error THEN
1296                                         l_cust_info_invalid := true;
1297                                 ELSE
1298                                         l_cust_info_invalid := FALSE;
1299                                 END IF;
1300 
1301                                 END IF;
1302                                 l_prev_site_use_id := l_bill_to_site_use_id;
1303 
1304                                 IF p_customer_id IS NULL THEN
1305                                    FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Customer Name : '||l_cust_name_num );
1306                                 END IF;
1307                                 IF l_offer_pay_method IS NOT NULL THEN
1308                                    OPEN csr_offer_pay_name(l_offer_pay_method);
1309                                    FETCH csr_offer_pay_name INTO l_offer_pay_name;
1310                                    CLOSE csr_offer_pay_name;
1311                                    FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Offer Payment Method: '||l_offer_pay_name);
1312                                 END IF;
1313 
1314                                 IF l_cust_info_invalid THEN
1315                                    RAISE FND_API.g_exc_unexpected_error;
1316                                 END IF;
1317 
1318                                 IF l_trade_prf_exist THEN
1319 
1320                                    IF l_customer_info.autopay_flag = FND_API.g_true THEN
1321                                    l_funds_util_flt.bill_to_site_use_id := l_bill_to_site_use_id; --R12.1 enhancements
1322 
1323                                   FND_FILE.PUT_LINE(FND_FILE.LOG, '/*--- Start AUTOPAY for customer '||l_cust_name_num||' ---*/');
1324                                   create_claim_for_cust(p_customer_info            => l_customer_info,
1325                                                         p_amount                   => l_amount,
1326                                                         p_mode                     => 'N',
1327                                                         p_auto_reason_code_id      => l_auto_reason_code_id,
1328                                                         p_auto_claim_type_id       => l_auto_claim_type_id,
1329                                                         p_autopay_periodicity      => l_autopay_periodicity,
1330                                                         p_autopay_periodicity_type => l_autopay_periodicity_type,
1331                                                         p_offer_payment_method     => l_offer_pay_method,
1332                                                         p_funds_util_flt           => l_funds_util_flt,
1333                                                         x_return_status            => l_return_status
1334                                   );
1335                                   IF l_return_status = FND_API.g_ret_sts_error THEN
1336                                   RAISE FND_API.g_exc_error;
1337                           ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
1338                                   RAISE FND_API.g_exc_unexpected_error;
1339                           END IF;
1340 
1341                                   -- Store Trade Profile for later updation
1342                                   IF  l_trade_prf_exist THEN
1343                                            l_trd_prof_tbl(i) := l_customer_info.trade_profile_id;
1344                                   END IF;
1345 
1346                                   --FND_FILE.PUT_LINE(FND_FILE.LOG, 'Claim Amount = '||l_amount);
1347                                   FND_FILE.PUT_LINE(FND_FILE.LOG, '===> Success.');
1348                                   FND_FILE.PUT_LINE(FND_FILE.LOG, '/*--- End ---*/');
1349                                   FND_FILE.PUT_LINE(FND_FILE.LOG, ' ');
1350                                   --FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Claim Amount               : '||l_amount );
1351                                   FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Status : Auto Pay Success. ');
1352                                   FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
1353                                   OZF_UTILITY_PVT.write_conc_log;
1354                                    ELSE
1355                                   FND_FILE.PUT_LINE(FND_FILE.LOG, '/*--- Start AUTOPAY for customer '||l_cust_name_num||' ---*/');
1356                                   FND_FILE.PUT_LINE(FND_FILE.LOG, 'Autopay flag is not turned on in Trade Profile for customer '||l_cust_name_num);
1357                                   FND_FILE.PUT_LINE(FND_FILE.LOG, '/*--- End ---*/');
1358                                   FND_FILE.PUT_LINE(FND_FILE.LOG, ' ');
1359                                   FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Status : Auto Pay Failed. ');
1360                                   FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Autopay flag is not turned on in Trade Profile for this customer. ');
1361                                   FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
1362                                    END IF; -- end of if autopay flag is turning on
1363                                 ELSE
1364                                    FND_FILE.PUT_LINE(FND_FILE.LOG, '/*--- Start AUTOPAY for customer '||l_cust_name_num||' ---*/');
1365                                    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Trade Profile is not existing for customer '||l_cust_name_num);
1366                                    FND_FILE.PUT_LINE(FND_FILE.LOG, '/*--- End ---*/');
1367                                    FND_FILE.PUT_LINE(FND_FILE.LOG, ' ');
1368                                    FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Status : Auto Pay Failed. ');
1369                                    FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Trade Profile is not existing for this customer.');
1370                                    FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
1371                                 END IF; -- end of if l_trade_prf_exist
1372                          END IF; -- end of if l_cust_account_id is not null
1373 
1374                          EXCEPTION
1375                          WHEN FND_API.G_EXC_ERROR THEN
1376                                 ROLLBACK TO AUTOPAY_CUST;
1377                                 FND_FILE.PUT_LINE(FND_FILE.LOG, '===> Failed.');
1378                                 OZF_UTILITY_PVT.write_conc_log;
1379                                 FND_FILE.PUT_LINE(FND_FILE.LOG, '/*--- End ---*/');
1380                                 FND_FILE.PUT_LINE(FND_FILE.LOG, ' ');
1381                                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Status : Auto Pay Failed. ');
1382                                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Error : ' || FND_MSG_PUB.get(FND_MSG_PUB.count_msg, FND_API.g_false));
1383                                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
1384                          WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1385                                 ROLLBACK TO AUTOPAY_CUST;
1386                                 FND_FILE.PUT_LINE(FND_FILE.LOG, '===> Failed.');
1387                                 OZF_UTILITY_PVT.write_conc_log;
1388                                 FND_FILE.PUT_LINE(FND_FILE.LOG, '/*--- End ---*/');
1389                                 FND_FILE.PUT_LINE(FND_FILE.LOG, ' ');
1390                                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Status : Auto Pay Failed. ');
1391                                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Error : ' || FND_MSG_PUB.get(FND_MSG_PUB.count_msg, FND_API.g_false));
1392                                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
1393 
1394                          WHEN OTHERS THEN
1395                                 ROLLBACK TO AUTOPAY_CUST;
1396                                 FND_FILE.PUT_LINE(FND_FILE.LOG, '===> Failed.');
1397                                 IF OZF_DEBUG_LOW_ON THEN
1398                                    FND_MESSAGE.Set_Name('OZF','OZF_API_DEBUG_MESSAGE');
1399                                    FND_MESSAGE.Set_Token('TEXT',sqlerrm);
1400                                    FND_MSG_PUB.Add;
1401                                 END IF;
1402                                 OZF_UTILITY_PVT.write_conc_log;
1403                                 FND_FILE.PUT_LINE(FND_FILE.LOG, '/*--- End ---*/');
1404                                 FND_FILE.PUT_LINE(FND_FILE.LOG, ' ');
1405                                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Status : Auto Pay Failed. ');
1406                                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Error : ' || SQLCODE||SQLERRM);
1407                                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
1408                          END;
1409 
1410                           ELSE
1411                          EXIT;
1412                           END IF;
1413                    END LOOP;
1414                    --CLOSE l_emp_csr;
1415                    DBMS_SQL.close_cursor(l_emp_csr);
1416 
1417                    -- update the trade_profiles together
1418                    FORALL i IN 1..l_trd_prof_tbl.COUNT
1419                         UPDATE OZF_CUST_TRD_PRFLS_ALL
1420                            SET last_paid_date   = SYSDATE
1421                          WHERE trade_profile_id = l_trd_prof_tbl(i) ;
1422 
1423 
1424                 -- Debug Message
1425                 IF OZF_DEBUG_LOW_ON THEN
1426                    FND_MESSAGE.Set_Name('OZF','OZF_API_DEBUG_MESSAGE');
1427                    FND_MESSAGE.Set_Token('TEXT',l_full_name||': End');
1428                    FND_MSG_PUB.Add;
1429                 END IF;
1430 
1431                 -- Write all messages to a log
1432                 OZF_UTILITY_PVT.Write_Conc_Log;
1433 
1434                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '*---------------------------------------------------------------------------------------------*');
1435                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Execution Status: Successful' );
1436                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Execution Ends On: ' || to_char(sysdate,'MM-DD-YYYY HH24:MI:SS'));
1437                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '*---------------------------------------------------------------------------------------------*');
1438 
1439      EXCEPTION
1440       WHEN FND_API.g_exc_error THEN
1441       ROLLBACK TO AutoPay;
1442 
1443       OZF_UTILITY_PVT.Write_Conc_Log;
1444       ERRBUF  := l_msg_data;
1445       RETCODE := 2;
1446       FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Execution Status: Failure (Error:' || FND_MSG_PUB.get(1, FND_API.g_false)||')');
1447       FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Execution Ends On: ' || to_char(sysdate,'MM-DD-YYYY HH24:MI:SS'));
1448       FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '*---------------------------------------------------------------------------------------------*');
1449 
1450       WHEN FND_API.g_exc_unexpected_error THEN
1451       ROLLBACK TO AutoPay;
1452 
1453       OZF_UTILITY_PVT.Write_Conc_Log;
1454       ERRBUF  := l_msg_data;
1455       RETCODE := 1; -- show status as warning if claim type/reason is missing,  Fix for 5158782
1456       FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Execution Status: ( Warning:' || FND_MSG_PUB.get(1, FND_API.g_false)||')');
1457       FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Execution Ends On: ' || to_char(sysdate,'MM-DD-YYYY HH24:MI:SS'));
1458       FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '*---------------------------------------------------------------------------------------------*');
1459 
1460       WHEN OTHERS THEN
1461       ROLLBACK TO AutoPay;
1462 
1463       OZF_UTILITY_PVT.Write_Conc_Log;
1464       ERRBUF  := l_msg_data;
1465       RETCODE := 2;
1466       FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Execution Status: Failure (Error:' ||SQLCODE||SQLERRM || ')');
1467       FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Execution Ends On: ' || to_char(sysdate,'MM-DD-YYYY HH24:MI:SS'));
1468       FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '*---------------------------------------------------------------------------------------------*');
1469 
1470      END;
1471    END LOOP;
1472  END IF;
1473 END Start_Autopay;
1474 
1475 END OZF_AUTOPAY_PVT;