DBA Data[Home] [Help]

PACKAGE BODY: APPS.PNT_PAYMENT_SCHEDULES_PKG

Source


1 PACKAGE BODY pnt_payment_schedules_pkg AS
2   -- $Header: PNTPYSCB.pls 120.3 2005/12/01 09:56:48 appldev ship $
3 
4 /*============================================================================+
5 --  NAME         : check_payment_schedule_date
6 --  DESCRIPTION  : Perform checks (mentioned below) on schedule_date of a
7 --                 Payment Schedule record FOR a given lease:
8 --                 o Disallow creation of a payment schedule record IF there
9 --                   exists a record in pn_payment_schedules FOR the same
10 --                   schedule_date
11 --                 o Disallow creation of a "DRAFT" payment schedule record IF
12 --                   a future payment schedule exists in status "APPROVED"
13 --                 o Disallow creation of an "APPROVED" payment schedule record
14 --                   IF a past payment schedule exists in status "DRAFT"
15 --  NOTES        : Used by PNTAUPMT form (Authorize Payments)
16 --  SCOPE        : PUBLIC
17 --  INVOKED FROM :
18 --  ARGUMENTS    : IN     : x_lease_id,x_schedule_date,x_rowid,
19 --                          x_payment_status_lookup_code.
20 --                 OUT    : NONE
21 --  RETURNS      :
22 --  REFERENCE    :
23 --  HISTORY      :
24 --  14-JUL-98  ntandon   o Created.
25 --  21-AUG-03  ftanudja  o Modified 'exists' logic to include day. 3089171.
26 --  07-NOV-03  ftanudja  o Bug #3240284 - Added 'day' constraint for csr
27 --                         later_notin_draft.
28 --  21-JUN-05  piagrawa  o Bug 4284035 - Replaced pn_payment_schedules
29 --                         with _ALL table.
30  +============================================================================*/
31 PROCEDURE check_payment_schedule_date (
32                        x_lease_id                      IN     NUMBER,
33                        x_schedule_date                 IN     DATE,
34                        x_payment_status_lookup_code    IN     VARCHAR2,
35                        x_rowid                         IN     VARCHAR2
36                      )
37 IS
38 
39    CURSOR later_notin_draft IS
40       SELECT 'x'
41       FROM   pn_payment_schedules_all
42       WHERE  lease_id = x_lease_id
43       AND    payment_status_lookup_code <> 'DRAFT'
44       AND    schedule_date > x_schedule_date
45       AND    to_char(schedule_date,'DD') = to_char(x_schedule_date,'DD');
46 
47    CURSOR prior_in_draft IS
48       SELECT 'x'
49       FROM   pn_payment_schedules_all
50       WHERE  lease_id = x_lease_id
51       AND    payment_status_lookup_code  = 'DRAFT'
52       AND    schedule_date < x_schedule_date;
53 
54    dummy NUMBER;
55 
56 BEGIN
57 
58    -----------------------------------------------------------------------------
59    -- Check IF a payment schedule already exists FOR a lease on the same date
60    -----------------------------------------------------------------------------
61 
62    -----------------------------------------------------------------------------
63    -- Bug Fix FOR the Bug ID#1210779.
64    -- WHEN creating a new schedule payment schedule the user should not be
65    -- allowed to create an additional payment schedule in the same GL period.
66    -----------------------------------------------------------------------------
67 
68    BEGIN
69 
70       SELECT 1
71       INTO   dummy
72       FROM   DUAL
73       WHERE  NOT EXISTS (SELECT 1
74                          FROM   pn_payment_schedules_all
75                          WHERE  lease_id = x_lease_id
76                          AND    TO_CHAR(schedule_date,'YYYY-MON-DD') = TO_CHAR(x_schedule_date,'YYYY-MON-DD')
77                          AND    (( x_rowid IS NULL ) or (rowid <> x_rowid))
78                        );
79    EXCEPTION
80       WHEN NO_DATA_FOUND THEN
81          fnd_message.set_name ('PN', 'PN_PMT_SCHEDULE_ALREADY_EXISTS');
82          app_exception.Raise_Exception;
83 
84    END;
85 
86    IF x_payment_status_lookup_code = 'DRAFT' THEN
87 
88       FOR i IN later_notin_draft
89       LOOP
90          fnd_message.set_name ('PN', 'PN_LATER_SCHED_DATE_NOT_DRAFT');
91          app_exception.Raise_Exception;
92          EXIT;
93       END LOOP;
94 
95    ELSE
96 
97       FOR i IN prior_in_draft
98       LOOP
99          fnd_message.set_name ('PN', 'PN_PRIOR_SCHED_DATE_IN_DRAFT');
100          app_exception.Raise_Exception;
101          EXIT;
102       END LOOP;
103 
104    END IF;
105 
106 END check_payment_schedule_date;
107 
108 /*============================================================================+
109 --  NAME         : check_payment_status
110 --  DESCRIPTION  : Determine IF there exists a payment_item of type 'CASH' in
111 --                 pn_payment_items with actual_amount = 0. IF 'YES' THEN the
112 --                 payment schedule cannot be APPROVED
113 --                 The PROCEDURE passes back the error_flag to the calling
114 --                 routine to decide whether to RAISE a fatal error or not.
115 --  NOTES        : Used by PNTAUPMT form (Authorize Payments)
116 --  SCOPE        : PUBLIC
117 --  INVOKED FROM :
118 --  ARGUMENTS    : IN     : x_payment_schedule_id,x_payment_status_lookup_code,
119 --                          x_error_flag.
120 --                 OUT    : x_error_flag
121 --  RETURNS      :
122 --  REFERENCE    :
123 --  HISTORY      :
124 --  14-JUL-98  Neeraj Tandon  o Created
125 --  21-JUN-05  piagrawa       o Bug 4284035 - Replaced pn_payment_items
126 --                              with _ALL table.
127  +===========================================================================*/
128 PROCEDURE check_payment_status (
129                        x_payment_schedule_id           IN     NUMBER,
130                        x_payment_status_lookup_code    IN     VARCHAR,
131                        x_error_flag                    IN OUT NOCOPY VARCHAR2
132                      ) IS
133 
134    CURSOR is_actual_amount_NULL IS
135       SELECT 'x'
136       FROM   pn_payment_items_all
137       WHERE  payment_item_type_lookup_code = 'CASH'
138       AND    payment_schedule_id = x_payment_schedule_id
139       AND    NVL(actual_amount,0) = 0;
140 
141 BEGIN
142 
143    RETURN;  /*-- Fixing bug 783419 by making this a do-nothing PROCEDURE --*/
144 
145    FOR i IN is_actual_amount_NULL
146    LOOP
147       fnd_message.set_name ('PN', 'PN_ACTUAL_ITEM_AMOUNT_IS_NULL');
148       x_error_flag := 'Y';
149       EXIT;
150    END LOOP;
151 
152 END check_payment_status;
153 
154 
155 /*=============================================================================+
156 --  NAME         : get_next_payment_schedule
157 --  DESCRIPTION  : FETCH the next 'DRAFT' payment schedule FOR a given lease to
158 --                 allow DEFER payment item functionality. i.e. A payment item
159 --                 can only be defered IF a future payment schedule exists in
160 --                 status 'DRAFT'.
161 --  NOTES        : Used by PNTAUPMT form (Authorize Payments)
162 --  SCOPE        : PUBLIC
163 --  INVOKED FROM :
164 --  ARGUMENTS    : IN     : x_lease_id,x_schedule_date,
165 --                          x_next_payment_schedule_id.
166 --                 OUT    : x_next_payment_schedule_id
167 --  RETURNS      :
168 --  REFERENCE    :
169 --  HISTORY      :
170 --  14-JUL-98  Neeraj Tandon  o Created
171 --  20-aug-01  achauhan       o Added a check in the cursor to get the next
172 --                              available schedule for the same schedule day.
173 --  15-JUN-04  Kiran          o Removed the previous check. We will now get
174 --                                the next available schedule. bug # 3644937
175 --  21-JUN-05  piagrawa       o Bug 4284035 - Replaced pn_payment_schedules
176 --                              with _ALL table.
177 +============================================================================*/
178 PROCEDURE get_next_payment_schedule (
179                        x_lease_id                      IN     NUMBER,
180                        x_schedule_date                 IN     DATE,
181                        x_next_payment_schedule_id      IN OUT NOCOPY NUMBER
182                      ) IS
183 
184    CURSOR next_schedule IS
185       SELECT payment_schedule_id
186       FROM   pn_payment_schedules_all
187       WHERE  lease_id = x_lease_id
188       AND    schedule_date > x_schedule_date
189       AND    payment_status_lookup_code = 'DRAFT'
190       ORDER  BY schedule_date;
191 
192 BEGIN
193 
194    FOR i IN next_schedule
195    LOOP
196       x_next_payment_schedule_id := i.payment_schedule_id;
197       EXIT;
198    END LOOP;
199 
200 END get_next_payment_schedule;
201 
202 
203 /*============================================================================+
204 --  NAME         : mark_pmt_items_exportable
205 --  DESCRIPTION  : UPDATE export_to_ap_flag in pn_payment_items(CASH items only)
206 --                 with 'Y' WHEN a payment schedule IS authorized (APPROVED).
207 --                 This will simplify the logic in Export to AP form which
208 --                 currently navigates to every row FOR marking (updating) the
209 --                 payment item FOR export.
210 --  NOTES        : Used by PNTAUPMT form (Authorize Payments) AND the
211 --                 Server  table handler (insert/update)
212 --  SCOPE        : PUBLIC
213 --  INVOKED FROM :
214 --  ARGUMENTS    : IN     : x_payment_schedule_id,x_payment_status_lookup_code,
215 --                          x_export_flag.
216 --                 OUT    : NONE
217 --  RETURNS      :
218 --  REFERENCE    :
219 --  HISTORY      :
220 --  14-JUL-98  Neeraj Tandon  o Created
221 --  25-MAR-99  Neeraj Tandon  o Added filter FOR 'CASH' items
222 --  21-JUN-05  piagrawa       o Bug 4284035 - Replaced pn_payment_items
223 --                              with _ALL table.
224 +============================================================================*/
225 PROCEDURE MARK_PMT_ITEMS_EXPORTABLE (
226                        x_payment_status_lookup_code    IN     VARCHAR2,
227                        x_payment_schedule_id           IN     NUMBER,
228                        x_export_flag                   IN     VARCHAR2
229                      )
230 
231 IS
232 
233 BEGIN
234 
235    UPDATE pn_payment_items_all
236    SET    export_to_ap_flag               = x_export_flag
237    WHERE  payment_schedule_id             =  x_payment_schedule_id
238    AND    payment_item_type_lookup_code   =  'CASH';
239 
240    IF (SQL%NOTFOUND) THEN
241       NULL;
242    END IF;
243 
244 END mark_pmt_items_exportable;
245 
246 
247 /*============================================================================+
248 --  NAME         : mark_billing_items_exportable
249 --  DESCRIPTION  : UPDATE export_to_ar_flag in pn_payment_items (CASH items only)
250 --                 with 'Y' WHEN a payment schedule IS authorized (APPROVED).
251 --                 This will simplify the logic in Export to AR form which currently
252 --                 navigates to every row for marking (updating) the payment item
253 --                 for export.
254 --  NOTES        : Used by PNTAUPMT form (Authorize Payments) AND the
255 --                 Server  table handler (insert/update)
256 --  SCOPE        : PUBLIC
257 --  INVOKED FROM :
258 --  ARGUMENTS    : IN     : x_payment_schedule_id,x_payment_status_lookup_code,
259 --                          x_export_flag.
260 --                 OUT    : NONE
261 --  RETURNS      :
262 --  REFERENCE    :
263 --  HISTORY      :
264 --  14-JUL-98  Neeraj Tandon  o Created
265 --  25-MAR-99  Neeraj Tandon  o Added filter FOR 'CASH' items
266 --  21-JUN-05  piagrawa       o Bug 4284035 - Replaced pn_payment_items
267 --                              with _ALL table.
268 +=============================================================================*/
269 PROCEDURE MARK_BILLING_ITEMS_EXPORTABLE (
270                        x_payment_status_lookup_code    IN     VARCHAR2,
271                        x_payment_schedule_id           IN     NUMBER,
272                        x_export_flag                   IN     VARCHAR2
273                      )
274 
275 IS
276 
277 BEGIN
278 
279    UPDATE pn_payment_items_all
280    SET    export_to_ar_flag               = x_export_flag
281    WHERE  payment_schedule_id             = x_payment_schedule_id
282    AND    payment_item_type_lookup_code   = 'CASH';
283 
284    IF (SQL%NOTFOUND) THEN
285       NULL;
286    END IF;
287 
288 END mark_billing_items_exportable;
289 
290 /*============================================================================+
291 --  NAME         : check_on_hold
292 --  DESCRIPTION  : Checks FOR any payment schedule On-Hold prior to the payment
293 --                 schedule, in question. if there is any, then the payment,
294 --                 schedule, in qustion, cannot be approved.
295 --  NOTES        : Used by PNTAUPMT form (Authorize Payments).
296 --  SCOPE        : PUBLIC
297 --  INVOKED FROM :
298 --  ARGUMENTS    : IN     : x_lease_id,x_schedule_date
299 --                 OUT    : NONE
300 --  RETURNS      :
301 --  REFERENCE    :
302 --  HISTORY      :
303 --  28-DEC-00  Mrinal Misra  o Created
304 --  21-JUN-05  piagrawa       o Bug 4284035 - Replaced pn_payment_schedules
305 --                              with _ALL table.
306 =============================================================================*/
307 PROCEDURE check_on_hold (
308                        x_lease_id                      IN     NUMBER,
309                        x_schedule_date                 IN     DATE
310                      ) IS
311 
312    l_check_cond          VARCHAR2(1) := NULL;
313 
314    CURSOR on_hold_cur IS
315       SELECT 'A'
316       FROM  DUAL
317       WHERE EXISTS (SELECT NULL
318                     FROM   pn_payment_schedules_all
319                     WHERE  lease_id = x_lease_id
320                     AND    schedule_date < x_schedule_date
321                     AND    on_hold = 'Y');
322 
323 BEGIN
324 
325    OPEN on_hold_cur;
326       FETCH on_hold_cur INTO l_check_cond;
327    CLOSE on_hold_cur;
328 
329    IF l_check_cond IS NOT NULL AND l_check_cond = 'A' THEN
330       fnd_message.set_name ('PN', 'PN_APPR_REJ_MSG');
331       app_exception.Raise_Exception;
332    END IF;
333 
334 END check_on_hold;
335 
336 
337 /*============================================================================+
338 --  NAME         : check_payment_items_acct_amt
339 --  DESCRIPTION  : checks to see IF any of the payment item under schedule_id
340 --                 has an accounted amount of NULL OR IF any of the payment item
341 --                 which has conversion type 'User' has a rate of NULL
342 --                 IF the former, THEN SET error flag to 'Y'
343 --                 IF the latter, THEN SET error flag to 'U'
344 --                 otherwise SET to 'N'.
345 --  NOTES        : Used by PNTAUPMT form (Authorize Payments).
346 --  SCOPE        : PUBLIC
347 --  INVOKED FROM :
348 --  ARGUMENTS    : IN     : l_payment_schedule_id,l_functional_currency
349 --                 OUT    : NOCOPY l_error_flag => look at description above
350 --  RETURNS      :
351 --  REFERENCE    :
352 --  HISTORY      :
353 --  25-APR-02  ftanudja  o Created
354 --  03-MAY-02  ftanudja  o check IF 'to_currency' type IS user
355 --                        (before it was checking 'from_currency')
356 --  06-MAY-02  ftanudja  o removed parameter p_def_conv_type
357 --  11-MAY-02  ftanudja  o cleaned up code
358 --  24-JUL-02  ftanudja  o added check for null conversion types
359 --  20-DEC-02  psidhu    o added check to set p_error_flag if conversion type is
360 --                         null and there exists atleast one item for schedule
361 --                         with currency_code <> functional currency. Added cursor
362 --                         chk_item_exists. Fix for bug#'s 2707128 and 2714333.
363 --  21-JUN-05  piagrawa  o Bug 4284035 - Replaced pn_payment_items
364 --                         with _ALL table.
365 --  01-DEC-05  pikhar    o passed org_id in pnp_util_func.check_conversion_type
366 =============================================================================*/
367 
368 PROCEDURE check_payment_items_acct_amt (
369                        p_payment_schedule_id           IN     NUMBER,
370                        p_functional_currency           IN     VARCHAR2,
371                        p_error_flag                       OUT NOCOPY VARCHAR2
372                      )
373 IS
374    l_dummy VARCHAR2(240);
375    l_date  DATE;
376    l_type  VARCHAR2(10);
377    l_item_exists VARCHAR2(1):='N';
378 
379    CURSOR payment_cursor IS
380       SELECT actual_amount, currency_code, rate, due_date
381       FROM pn_payment_items_all
382       WHERE payment_schedule_id = p_payment_schedule_id
383       AND   payment_item_type_lookup_code = 'CASH';
384 
385   CURSOR chk_item_exists IS
386      SELECT 'Y'
387      FROM dual
388      WHERE EXISTS (SELECT null
389                    FROM pn_payment_items_all
390                    WHERE payment_schedule_id = p_payment_schedule_id
391                    AND payment_item_type_lookup_code = 'CASH'
392                    AND currency_code <> p_functional_currency);
393 
394   CURSOR org_cur IS
395     SELECT org_id
396     FROM pn_payment_schedules_all
397     WHERE payment_schedule_id = p_payment_schedule_id;
398 
399    l_org_id NUMBER;
400 
401 BEGIN
402 
403    FOR rec IN org_cur LOOP
404      l_org_id := rec.org_id;
405    END LOOP;
406 
407    l_type := pnp_util_func.check_conversion_type(p_functional_currency,l_org_id );
408    p_error_flag := 'N';
409 
410    IF l_type IS NULL THEN
411 
412       -- fix for bug# 2707128
413       OPEN chk_item_exists;
414       FETCH chk_item_exists into l_item_exists;
415       CLOSE chk_item_exists;
416 
417       IF nvl(l_item_exists,'N') = 'Y' THEN
418          p_error_flag := 'Y';
419          RETURN;
420       END IF;
421 
422       --
423    END IF;
424 
425    FOR payment_record IN payment_cursor LOOP
426 
427       IF payment_record.due_date > SYSDATE THEN
428          l_date := SYSDATE;
429       ELSE
430          l_date := payment_record.due_date;
431       END IF;
432 
433       IF  UPPER(l_type) = 'USER' AND payment_record.rate IS NULL AND
434          (payment_record.currency_code <> p_functional_currency) THEN
435           p_error_flag := 'Y';
436           EXIT;
437       ELSIF UPPER(l_type) <> 'USER' THEN
438 
439          l_dummy := pnp_util_func.export_curr_amount(
440                       currency_code        => payment_record.currency_code,
441                       export_currency_code => p_functional_currency,
442                       export_date          => l_date,
443                       conversion_type      => l_type,
444                       actual_amount        => payment_record.actual_amount,
445                       p_called_from        => 'PNTAUPMT'
446                            );
447          IF l_dummy IS NULL THEN
448             p_error_flag := 'Y';
449             EXIT;
450          END IF;
451       END IF;
452    END LOOP;
453 
454 END check_payment_items_acct_amt;
455 
456 -------------------------------------------------------------------------------
457 -- PROCEDURE    : Insert_Row
458 -- INVOKED FROM : insert_row procedure
459 -- PURPOSE      : inserts the row
460 -- HISTORY      :
461 -- 21-JUN-05  piagrawa  o Bug 4284035 - Replaced pn_payment_schedules
462 --                        with _ALL table.
463 -------------------------------------------------------------------------------
464 PROCEDURE Insert_Row (
465                        X_CONTEXT                    IN VARCHAR2,
466                        X_ROWID                      IN OUT NOCOPY VARCHAR2,
467                        X_PAYMENT_SCHEDULE_ID        IN OUT NOCOPY NUMBER,
468                        X_SCHEDULE_DATE              IN DATE,
469                        X_LEASE_CHANGE_ID            IN NUMBER,
470                        X_LEASE_ID                   IN NUMBER,
471                        X_APPROVED_BY_USER_ID        IN NUMBER,
472                        X_TRANSFERRED_BY_USER_ID     IN NUMBER,
473                        X_PAYMENT_STATUS_LOOKUP_CODE IN VARCHAR2,
474                        X_APPROVAL_DATE              IN DATE,
475                        X_TRANSFER_DATE              IN DATE,
476                        X_PERIOD_NAME                IN VARCHAR2,
477                        X_ATTRIBUTE_CATEGORY         IN VARCHAR2,
478                        X_ATTRIBUTE1                 IN VARCHAR2,
479                        X_ATTRIBUTE2                 IN VARCHAR2,
480                        X_ATTRIBUTE3                 IN VARCHAR2,
481                        X_ATTRIBUTE4                 IN VARCHAR2,
482                        X_ATTRIBUTE5                 IN VARCHAR2,
483                        X_ATTRIBUTE6                 IN VARCHAR2,
484                        X_ATTRIBUTE7                 IN VARCHAR2,
485                        X_ATTRIBUTE8                 IN VARCHAR2,
486                        X_ATTRIBUTE9                 IN VARCHAR2,
487                        X_ATTRIBUTE10                IN VARCHAR2,
488                        X_ATTRIBUTE11                IN VARCHAR2,
489                        X_ATTRIBUTE12                IN VARCHAR2,
490                        X_ATTRIBUTE13                IN VARCHAR2,
491                        X_ATTRIBUTE14                IN VARCHAR2,
492                        X_ATTRIBUTE15                IN VARCHAR2,
493                        X_CREATION_DATE              IN DATE,
494                        X_CREATED_BY                 IN NUMBER,
495                        X_LAST_UPDATE_DATE           IN DATE,
496                        X_LAST_UPDATED_BY            IN NUMBER,
497                        X_LAST_UPDATE_LOGIN          IN NUMBER,
498                        x_org_id                     IN NUMBER
499                      ) IS
500    CURSOR c IS
501       SELECT ROWID
502       FROM   pn_payment_schedules_all
503       WHERE  payment_schedule_id = x_payment_schedule_id;
504 
505    CURSOR org_cur IS
506       SELECT org_id FROM pn_leases_all WHERE lease_id = x_lease_id;
507 
508    l_org_id NUMBER;
509 
510 BEGIN
511 
512    IF x_payment_schedule_id IS NULL THEN
513 
514       SELECT pn_payment_schedules_s.NEXTVAL
515       INTO   x_payment_schedule_id
516       FROM   DUAL;
517 
518    END IF;
519 
520    IF x_org_id IS NULL THEN
521       FOR rec IN org_cur LOOP
522          l_org_id := rec.org_id;
523       END LOOP;
524    ELSE
525       l_org_id := x_org_id;
526    END IF;
527 
528    INSERT INTO pn_payment_schedules_all
529    (
530       PAYMENT_SCHEDULE_ID,
531       LAST_UPDATE_DATE,
532       LAST_UPDATED_BY,
533       CREATION_DATE,
534       CREATED_BY,
535       LAST_UPDATE_LOGIN,
536       SCHEDULE_DATE,
537       LEASE_CHANGE_ID,
538       LEASE_ID,
539       APPROVED_BY_USER_ID,
540       TRANSFERRED_BY_USER_ID,
541       PAYMENT_STATUS_LOOKUP_CODE,
542       APPROVAL_DATE,
543       TRANSFER_DATE,
544       PERIOD_NAME,
545       ATTRIBUTE_CATEGORY,
546       ATTRIBUTE1,
547       ATTRIBUTE2,
548       ATTRIBUTE3,
549       ATTRIBUTE4,
550       ATTRIBUTE5,
551       ATTRIBUTE6,
552       ATTRIBUTE7,
553       ATTRIBUTE8,
554       ATTRIBUTE9,
555       ATTRIBUTE10,
556       ATTRIBUTE11,
557       ATTRIBUTE12,
558       ATTRIBUTE13,
559       ATTRIBUTE14,
560       ATTRIBUTE15,
561       ON_HOLD,
562       org_id)
563    VALUES (
564       X_PAYMENT_SCHEDULE_ID,
565       X_LAST_UPDATE_DATE,
566       X_LAST_UPDATED_BY,
567       X_CREATION_DATE,
568       X_CREATED_BY,
569       X_LAST_UPDATE_LOGIN,
570       X_SCHEDULE_DATE,
571       X_LEASE_CHANGE_ID,
572       X_LEASE_ID,
573       X_APPROVED_BY_USER_ID,
574       X_TRANSFERRED_BY_USER_ID,
575       X_PAYMENT_STATUS_LOOKUP_CODE,
576       X_APPROVAL_DATE,
577       X_TRANSFER_DATE,
578       X_PERIOD_NAME,
579       X_ATTRIBUTE_CATEGORY,
580       X_ATTRIBUTE1,
581       X_ATTRIBUTE2,
582       X_ATTRIBUTE3,
583       X_ATTRIBUTE4,
584       X_ATTRIBUTE5,
585       X_ATTRIBUTE6,
586       X_ATTRIBUTE7,
587       X_ATTRIBUTE8,
588       X_ATTRIBUTE9,
589       X_ATTRIBUTE10,
590       X_ATTRIBUTE11,
591       X_ATTRIBUTE12,
592       X_ATTRIBUTE13,
593       X_ATTRIBUTE14,
594       X_ATTRIBUTE15,
595       NULL,
596       l_org_id
597    );
598 
599    OPEN c;
600       FETCH c INTO X_ROWID;
601       IF (c%notfound) THEN
602          CLOSE c;
603          RAISE no_data_found;
604       END IF;
605    CLOSE c;
606 
607    IF X_PAYMENT_STATUS_LOOKUP_CODE = 'APPROVED' THEN
608 
609       IF (X_CONTEXT = 'PAY') THEN
610          mark_pmt_items_exportable ( x_payment_status_lookup_code,
611                                      x_payment_schedule_id,
612                                      'Y'
613                                    );
614       ELSE  -- REC
615          mark_billing_items_exportable ( x_payment_status_lookup_code,
616                                          x_payment_schedule_id,
617                                          'Y'
618                                       );
619       END IF;
620 
621    END IF;
622 
623 END Insert_Row;
624 
625 
626 -------------------------------------------------------------------------------
627 -- PROCEDURE    : Lock_Row
628 -- INVOKED FROM : lock_row procedure
629 -- PURPOSE      : locks the row
630 -- HISTORY      :
631 -- 21-JUN-05  piagrawa  o Bug 4284035 - Replaced pn_payment_schedules
632 --                        with _ALL table.
633 -------------------------------------------------------------------------------
634 PROCEDURE Lock_Row (
635                        X_PAYMENT_SCHEDULE_ID           IN     NUMBER,
636                        X_APPROVED_BY_USER_ID           IN     NUMBER,
637                        X_TRANSFERRED_BY_USER_ID        IN     NUMBER,
638                        X_PAYMENT_STATUS_LOOKUP_CODE    IN     VARCHAR2,
639                        X_APPROVAL_DATE                 IN     DATE,
640                        X_TRANSFER_DATE                 IN     DATE,
641                        X_PERIOD_NAME                   IN     VARCHAR2,
642                        X_ATTRIBUTE_CATEGORY            IN     VARCHAR2,
643                        X_ATTRIBUTE1                    IN     VARCHAR2,
644                        X_ATTRIBUTE2                    IN     VARCHAR2,
645                        X_ATTRIBUTE3                    IN     VARCHAR2,
646                        X_ATTRIBUTE4                    IN     VARCHAR2,
647                        X_ATTRIBUTE5                    IN     VARCHAR2,
648                        X_ATTRIBUTE6                    IN     VARCHAR2,
649                        X_ATTRIBUTE7                    IN     VARCHAR2,
650                        X_ATTRIBUTE8                    IN     VARCHAR2,
651                        X_ATTRIBUTE9                    IN     VARCHAR2,
652                        X_ATTRIBUTE10                   IN     VARCHAR2,
653                        X_ATTRIBUTE11                   IN     VARCHAR2,
654                        X_ATTRIBUTE12                   IN     VARCHAR2,
655                        X_ATTRIBUTE13                   IN     VARCHAR2,
656                        X_ATTRIBUTE14                   IN     VARCHAR2,
657                        X_ATTRIBUTE15                   IN     VARCHAR2
658                      )
659 IS
660 
661    CURSOR c1 IS
662       SELECT *
663       FROM   pn_payment_schedules_all
664       WHERE  payment_schedule_id = x_payment_schedule_id
665       FOR    UPDATE OF payment_schedule_id NOWAIT;
666 
667    tlinfo c1%rowtype;
668 
669 BEGIN
670 
671    OPEN c1;
672       FETCH c1 INTO tlinfo;
673       IF (c1%notfound) THEN
674          CLOSE c1;
675          RETURN;
676       END IF;
677    CLOSE c1;
678 
679    IF NOT (tlinfo.PAYMENT_SCHEDULE_ID = X_PAYMENT_SCHEDULE_ID) THEN
680       pn_var_rent_pkg.lock_row_exception('PAYMENT_SCHEDULE_ID',tlinfo.PAYMENT_SCHEDULE_ID);
681    END IF;
682 
683    IF NOT ((tlinfo.APPROVED_BY_USER_ID = X_APPROVED_BY_USER_ID)
684            OR ((tlinfo.APPROVED_BY_USER_ID IS NULL) AND (X_APPROVED_BY_USER_ID IS NULL))) THEN
685       pn_var_rent_pkg.lock_row_exception('APPROVED_BY_USER_ID',tlinfo.APPROVED_BY_USER_ID);
686    END IF;
687 
688    IF NOT ((tlinfo.TRANSFERRED_BY_USER_ID = X_TRANSFERRED_BY_USER_ID)
689            OR ((tlinfo.TRANSFERRED_BY_USER_ID IS NULL) AND (X_TRANSFERRED_BY_USER_ID IS NULL))) THEN
690       pn_var_rent_pkg.lock_row_exception('TRANSFERRED_BY_USER_ID',tlinfo.TRANSFERRED_BY_USER_ID);
691    END IF;
692 
693    IF NOT ((tlinfo.PAYMENT_STATUS_LOOKUP_CODE = X_PAYMENT_STATUS_LOOKUP_CODE)
694            OR ((tlinfo.PAYMENT_STATUS_LOOKUP_CODE IS NULL) AND (X_PAYMENT_STATUS_LOOKUP_CODE IS NULL))) THEN
695       pn_var_rent_pkg.lock_row_exception('PAYMENT_STATUS_LOOKUP_CODE',tlinfo.PAYMENT_STATUS_LOOKUP_CODE);
696    END IF;
697 
698    IF NOT ((trunc(tlinfo.APPROVAL_DATE) = trunc(X_APPROVAL_DATE))
699            OR ((trunc(tlinfo.APPROVAL_DATE) IS NULL) AND (trunc(X_APPROVAL_DATE) IS NULL))) THEN
700       pn_var_rent_pkg.lock_row_exception('APPROVAL_DATE',tlinfo.APPROVAL_DATE);
701    END IF;
702 
703    IF NOT ((trunc(tlinfo.TRANSFER_DATE) = trunc(X_TRANSFER_DATE))
704            OR ((tlinfo.TRANSFER_DATE IS NULL) AND (X_TRANSFER_DATE IS NULL))) THEN
705       pn_var_rent_pkg.lock_row_exception('TRANSFER_DATE',tlinfo.TRANSFER_DATE);
706    END IF;
707 
708    IF NOT ((tlinfo.PERIOD_NAME = X_PERIOD_NAME)
709            OR ((tlinfo.PERIOD_NAME IS NULL) AND (X_PERIOD_NAME IS NULL))) THEN
710       pn_var_rent_pkg.lock_row_exception('PERIOD_NAME',tlinfo.PERIOD_NAME);
711    END IF;
712 
713    IF NOT ((tlinfo.ATTRIBUTE_CATEGORY = X_ATTRIBUTE_CATEGORY)
714            OR ((tlinfo.ATTRIBUTE_CATEGORY IS NULL) AND (X_ATTRIBUTE_CATEGORY IS NULL))) THEN
715       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE_CATEGORY',tlinfo.ATTRIBUTE_CATEGORY);
716    END IF;
717 
718    IF NOT ((tlinfo.ATTRIBUTE1 = X_ATTRIBUTE1)
719            OR ((tlinfo.ATTRIBUTE1 IS NULL) AND (X_ATTRIBUTE1 IS NULL))) THEN
720       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE1',tlinfo.ATTRIBUTE1);
721    END IF;
722 
723    IF NOT ((tlinfo.ATTRIBUTE2 = X_ATTRIBUTE2)
724            OR ((tlinfo.ATTRIBUTE2 IS NULL) AND (X_ATTRIBUTE2 IS NULL))) THEN
725       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE2',tlinfo.ATTRIBUTE2);
726    END IF;
727 
728    IF NOT ((tlinfo.ATTRIBUTE3 = X_ATTRIBUTE3)
729            OR ((tlinfo.ATTRIBUTE3 IS NULL) AND (X_ATTRIBUTE3 IS NULL))) THEN
730       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE3',tlinfo.ATTRIBUTE3);
731    END IF;
732 
733    IF NOT ((tlinfo.ATTRIBUTE4 = X_ATTRIBUTE4)
734            OR ((tlinfo.ATTRIBUTE4 IS NULL) AND (X_ATTRIBUTE4 IS NULL))) THEN
735       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE4',tlinfo.ATTRIBUTE4);
736    END IF;
737 
738    IF NOT ((tlinfo.ATTRIBUTE5 = X_ATTRIBUTE5)
739            OR ((tlinfo.ATTRIBUTE5 IS NULL) AND (X_ATTRIBUTE5 IS NULL))) THEN
740       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE5',tlinfo.ATTRIBUTE5);
741    END IF;
742 
743    IF NOT ((tlinfo.ATTRIBUTE6 = X_ATTRIBUTE6)
744            OR ((tlinfo.ATTRIBUTE6 IS NULL) AND (X_ATTRIBUTE6 IS NULL))) THEN
745       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE6',tlinfo.ATTRIBUTE6);
746    END IF;
747 
748    IF NOT ((tlinfo.ATTRIBUTE7 = X_ATTRIBUTE7)
749            OR ((tlinfo.ATTRIBUTE7 IS NULL) AND (X_ATTRIBUTE7 IS NULL))) THEN
750       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE7',tlinfo.ATTRIBUTE7);
751    END IF;
752 
753    IF NOT ((tlinfo.ATTRIBUTE8 = X_ATTRIBUTE8)
754            OR ((tlinfo.ATTRIBUTE8 IS NULL) AND (X_ATTRIBUTE8 IS NULL))) THEN
755       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE8',tlinfo.ATTRIBUTE8);
756    END IF;
757 
758    IF NOT ((tlinfo.ATTRIBUTE9 = X_ATTRIBUTE9)
759            OR ((tlinfo.ATTRIBUTE9 IS NULL) AND (X_ATTRIBUTE9 IS NULL))) THEN
760       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE9',tlinfo.ATTRIBUTE9);
761    END IF;
762 
763    IF NOT ((tlinfo.ATTRIBUTE10 = X_ATTRIBUTE10)
764            OR ((tlinfo.ATTRIBUTE10 IS NULL) AND (X_ATTRIBUTE10 IS NULL))) THEN
765       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE10',tlinfo.ATTRIBUTE10);
766    END IF;
767 
768    IF NOT ((tlinfo.ATTRIBUTE11 = X_ATTRIBUTE11)
769            OR ((tlinfo.ATTRIBUTE11 IS NULL) AND (X_ATTRIBUTE11 IS NULL))) THEN
770       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE11',tlinfo.ATTRIBUTE11);
771    END IF;
772 
773    IF NOT ((tlinfo.ATTRIBUTE12 = X_ATTRIBUTE12)
774            OR ((tlinfo.ATTRIBUTE12 IS NULL) AND (X_ATTRIBUTE12 IS NULL))) THEN
775       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE12',tlinfo.ATTRIBUTE12);
776    END IF;
777 
778    IF NOT ((tlinfo.ATTRIBUTE13 = X_ATTRIBUTE13)
779            OR ((tlinfo.ATTRIBUTE13 IS NULL) AND (X_ATTRIBUTE13 IS NULL))) THEN
780       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE13',tlinfo.ATTRIBUTE13);
781    END IF;
782 
783    IF NOT ((tlinfo.ATTRIBUTE14 = X_ATTRIBUTE14)
784            OR ((tlinfo.ATTRIBUTE14 IS NULL) AND (X_ATTRIBUTE14 IS NULL))) THEN
785       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE14',tlinfo.ATTRIBUTE14);
786    END IF;
787 
788    IF NOT ((tlinfo.ATTRIBUTE15 = X_ATTRIBUTE15)
789            OR ((tlinfo.ATTRIBUTE15 IS NULL) AND (X_ATTRIBUTE15 IS NULL))) THEN
790       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE15',tlinfo.ATTRIBUTE15);
791    END IF;
792 
793    RETURN;
794 END Lock_Row;
795 
796 
797 -------------------------------------------------------------------------------
798 -- PROCEDURE    : Update_Row
799 -- INVOKED FROM : update_row procedure
800 -- PURPOSE      : Updates the row
801 -- HISTORY      :
802 -- 21-JUN-05  piagrawa  o Bug 4284035 - Replaced pn_payment_schedules
803 --                        with _ALL table.
804 -------------------------------------------------------------------------------
805 PROCEDURE Update_Row (
806                        X_CONTEXT                       IN     VARCHAR2,
807                        X_PAYMENT_SCHEDULE_ID           IN     NUMBER,
808                        X_SCHEDULE_DATE                 IN     DATE,
809                        X_APPROVED_BY_USER_ID           IN     NUMBER,
810                        X_TRANSFERRED_BY_USER_ID        IN     NUMBER,
811                        X_PAYMENT_STATUS_LOOKUP_CODE    IN     VARCHAR2,
812                        X_LEASE_FUNCTIONAL_CURRENCY     IN     VARCHAR2,
813                        X_APPROVAL_DATE                 IN     DATE,
814                        X_TRANSFER_DATE                 IN     DATE,
815                        X_PERIOD_NAME                   IN     VARCHAR2,
816                        X_ATTRIBUTE_CATEGORY            IN     VARCHAR2,
817                        X_ATTRIBUTE1                    IN     VARCHAR2,
818                        X_ATTRIBUTE2                    IN     VARCHAR2,
819                        X_ATTRIBUTE3                    IN     VARCHAR2,
820                        X_ATTRIBUTE4                    IN     VARCHAR2,
821                        X_ATTRIBUTE5                    IN     VARCHAR2,
822                        X_ATTRIBUTE6                    IN     VARCHAR2,
823                        X_ATTRIBUTE7                    IN     VARCHAR2,
824                        X_ATTRIBUTE8                    IN     VARCHAR2,
825                        X_ATTRIBUTE9                    IN     VARCHAR2,
826                        X_ATTRIBUTE10                   IN     VARCHAR2,
827                        X_ATTRIBUTE11                   IN     VARCHAR2,
828                        X_ATTRIBUTE12                   IN     VARCHAR2,
829                        X_ATTRIBUTE13                   IN     VARCHAR2,
830                        X_ATTRIBUTE14                   IN     VARCHAR2,
831                        X_ATTRIBUTE15                   IN     VARCHAR2,
832                        X_LAST_UPDATE_DATE              IN     DATE,
833                        X_LAST_UPDATED_BY               IN     NUMBER,
834                        X_LAST_UPDATE_LOGIN             IN     NUMBER
835                      )
836 IS
837 
838 BEGIN
839 
840    update_rate(p_pnt_sched_id               => x_payment_schedule_id,
841                p_payment_status_lookup_code => x_payment_status_lookup_code,
842                p_lease_functional_currency  => x_lease_functional_currency,
843                p_last_updated_by            => x_last_updated_by,
844                p_last_update_date           => x_last_update_date,
845                p_last_update_login          => x_last_update_login);
846 
847    update_accounted_amount (X_PAYMENT_SCHEDULE_ID,
848                             X_PAYMENT_STATUS_LOOKUP_CODE,
849                             X_LEASE_FUNCTIONAL_CURRENCY,
850                             X_LAST_UPDATED_BY,
851                             X_LAST_UPDATE_DATE,
852                             X_LAST_UPDATE_LOGIN );
853 
854    UPDATE PN_PAYMENT_SCHEDULES_ALL
855    SET    SCHEDULE_DATE              = X_SCHEDULE_DATE,
856           APPROVED_BY_USER_ID        = X_APPROVED_BY_USER_ID,
857           TRANSFERRED_BY_USER_ID     = X_TRANSFERRED_BY_USER_ID,
858           PAYMENT_STATUS_LOOKUP_CODE = X_PAYMENT_STATUS_LOOKUP_CODE,
859           APPROVAL_DATE              = X_APPROVAL_DATE,
860           TRANSFER_DATE              = X_TRANSFER_DATE,
861           PERIOD_NAME                = X_PERIOD_NAME,
862           ATTRIBUTE_CATEGORY         = X_ATTRIBUTE_CATEGORY,
863           ATTRIBUTE1                 = X_ATTRIBUTE1,
864           ATTRIBUTE2                 = X_ATTRIBUTE2,
865           ATTRIBUTE3                 = X_ATTRIBUTE3,
866           ATTRIBUTE4                 = X_ATTRIBUTE4,
867           ATTRIBUTE5                 = X_ATTRIBUTE5,
868           ATTRIBUTE6                 = X_ATTRIBUTE6,
869           ATTRIBUTE7                 = X_ATTRIBUTE7,
870           ATTRIBUTE8                 = X_ATTRIBUTE8,
871           ATTRIBUTE9                 = X_ATTRIBUTE9,
872           ATTRIBUTE10                = X_ATTRIBUTE10,
873           ATTRIBUTE11                = X_ATTRIBUTE11,
874           ATTRIBUTE12                = X_ATTRIBUTE12,
875           ATTRIBUTE13                = X_ATTRIBUTE13,
876           ATTRIBUTE14                = X_ATTRIBUTE14,
877           ATTRIBUTE15                = X_ATTRIBUTE15,
878           ON_HOLD                    = NULL,
879           LAST_UPDATE_DATE           = X_LAST_UPDATE_DATE,
880           LAST_UPDATED_BY            = X_LAST_UPDATED_BY,
881           LAST_UPDATE_LOGIN          = X_LAST_UPDATE_LOGIN
882    WHERE  PAYMENT_SCHEDULE_ID        = X_PAYMENT_SCHEDULE_ID;
883 
884    IF (SQL%NOTFOUND) THEN
885       RAISE NO_DATA_FOUND;
886    END IF;
887 
888    IF X_PAYMENT_STATUS_LOOKUP_CODE = 'APPROVED' THEN
889 
890       IF (X_CONTEXT = 'PAY') THEN
891          mark_pmt_items_exportable ( x_payment_status_lookup_code,
892                                      x_payment_schedule_id,
893                                      'Y'
894                                    );
895       ELSE  -- REC
896          mark_billing_items_exportable ( x_payment_status_lookup_code,
897                                          x_payment_schedule_id,
898                                          'Y'
899                                        );
900       END IF;
901 
902    ELSIF X_PAYMENT_STATUS_LOOKUP_CODE = 'DRAFT' THEN
903 
904       IF (X_CONTEXT = 'PAY') THEN
905          mark_pmt_items_exportable ( x_payment_status_lookup_code,
906                                      x_payment_schedule_id,
907                                      NULL
908                                    );
909       ELSE  -- REC
910            mark_billing_items_exportable ( x_payment_status_lookup_code,
911                                            x_payment_schedule_id,
912                                            NULL
913                                          );
914       END IF;
915 
916    END IF;
917 
918 END Update_Row;
919 
920 
921 -------------------------------------------------------------------------------
922 -- PROCEDURE    : Delete_Row
923 -- INVOKED FROM : delete_row procedure
924 -- PURPOSE      : Deletes the row for a schedule id
925 -- HISTORY      :
926 -- 21-JUN-05  piagrawa  o Bug 4284035 - Replaced pn_payment_schedules
927 --                        with _ALL table.
928 -------------------------------------------------------------------------------
929 PROCEDURE Delete_Row ( X_PAYMENT_SCHEDULE_ID           IN     NUMBER) IS
930 BEGIN
931 
932    DELETE FROM pn_payment_schedules_all
933    WHERE  payment_schedule_id = x_payment_schedule_id;
934 
935    IF (SQL%NOTFOUND) THEN
936       RAISE NO_DATA_FOUND;
937    END IF;
938 
939 END Delete_Row;
940 
941 
942 -------------------------------------------------------------------------------
943 -- PROCEDURE    : update_accounted_amount
944 -- INVOKED FROM : update_row procedure
945 -- PURPOSE      : UPDATE the accounted amount field
946 -- REFERENCE    : BUG ID 2137179
947 -- HISTORY      :
948 -- 11-MAR-02  ftanudja   o Created
949 -- 25-APR-02  ftanudja   o taken into account acct date.
950 -- 03-MAY-02  ftanudja   o FOR conv. type 'User', use 'rate'
951 -- 11-MAY-02  ftanudja   o cleaned up code
952 -- 07-OCT-02  Ashish     o BUG#2590872 update the normalized items
953 --                         along with the cash items.
954 -- 21-JUN-05  piagrawa   o Bug 4284035 - Replaced pn_payment_items
955 --                         with _ALL table.
956 -- 01-DEC-05  pikhar     o passed org_id in pnp_util_func.check_conversion_type
957 -------------------------------------------------------------------------------
958 
959 PROCEDURE update_accounted_amount (
960                        p_pnt_sched_id                  IN     NUMBER,
961                        p_payment_status_lookup_code    IN     VARCHAR2,
962                        p_lease_functional_currency     IN     VARCHAR2,
963                        p_last_updated_by               IN     NUMBER,
964                        p_last_update_date              IN     DATE,
965                        p_last_update_login             IN     NUMBER
966                      )
967 IS
968    l_temp NUMBER;
969    l_date DATE;
970    l_type VARCHAR2(10);
971    l_temp1 NUMBER;      --BUG#2590872
972 
973     V_PAYMENT_ITEM_ID    NUMBER ;
974     V_ACCOUNTED_AMOUNT   NUMBER ;
975     V_ACTUAL_AMOUNT    NUMBER   ;
976 
977    CURSOR payment_cursor IS
978       SELECT  payment_item_id
979             , accounted_amount
980             , actual_amount
981             , currency_code
982             , due_date
983             , rate
984             , payment_term_id
985       FROM   pn_payment_items_all
986       WHERE  payment_schedule_id = p_pnt_sched_id
987       AND    payment_item_type_lookup_code = 'CASH';
988 
989    --Added for BUG#2590872
990    CURSOR norm_cursor(l_term_id NUMBER, l_item_id number) IS
991       SELECT pi.payment_item_id
992            , pi.accounted_amount
993            , pi.actual_amount
994       FROM   pn_payment_items_all pi,
995              pn_payment_items_all pi1
996       WHERE  pi.payment_schedule_id            = p_pnt_sched_id
997       AND    pi.payment_TERM_id                = l_term_id
998       AND    pi.payment_item_type_lookup_code  = 'NORMALIZED'
999       AND    pi1.payment_schedule_id           = pi.payment_schedule_id
1000       AND    pi1.payment_term_id               = pi.payment_term_id
1001       AND    pi1.payment_item_type_lookup_code = 'CASH'
1002       AND    pi1.payment_item_id               = l_item_id ;
1003 
1004    CURSOR org_cur IS
1005     SELECT org_id
1006     FROM pn_payment_schedules_all
1007     WHERE payment_schedule_id = p_pnt_sched_id;
1008 
1009    l_org_id NUMBER;
1010 
1011 
1012 BEGIN
1013 
1014    FOR rec IN org_cur LOOP
1015      l_org_id := rec.org_id;
1016    END LOOP;
1017 
1018    l_type := pnp_util_func.check_conversion_type(p_lease_functional_currency,l_org_id);
1019 
1020    FOR payment_item_rec IN payment_cursor LOOP
1021 
1022        /*---------ADDED FOR BUG#2590872---------*/
1023        OPEN NORM_cursor(payment_item_rec.payment_term_id,payment_item_rec.payment_item_id );
1024        FETCH NORM_CURSOR INTO  V_PAYMENT_ITEM_ID,V_ACCOUNTED_AMOUNT,V_ACTUAL_AMOUNT;
1025        IF NORM_CURSOR%NOTFOUND THEN
1026              NULL;
1027        END IF;
1028        CLOSE NORM_CURSOR;
1029 
1030 
1031       IF payment_item_rec.due_date > SYSDATE THEN
1032          l_date := SYSDATE;
1033       ELSE
1034          l_date := payment_item_rec.due_date;
1035       END IF;
1036       IF p_payment_status_lookup_code = 'APPROVED' THEN
1037 
1038          IF UPPER(l_type) = 'USER' THEN
1039 
1040             l_temp := NVL(payment_item_rec.actual_amount,0) * NVL(payment_item_rec.rate,0);
1041             l_temp1 := NVL(V_actual_amount,0) * NVL(PAYMENT_item_rec.rate,0);     --ADDED FOR BUG#2590872
1042 
1043          ELSE
1044             l_temp := pnp_util_func.export_curr_amount(
1045                           currency_code        => payment_item_rec.currency_code,
1046                           export_currency_code => p_lease_functional_currency,
1047                           export_date          => l_date,
1048                           conversion_type      => l_type,
1049                           actual_amount        => NVL(payment_item_rec.actual_amount,0),
1050                           p_called_from        => 'NOTPNTAUPMT'
1051                        );
1052             --ADDED FOR BUG#2590872
1053             l_temp1 := pnp_util_func.export_curr_amount(
1054                           currency_code        => payment_item_rec.currency_code,
1055                           export_currency_code => p_lease_functional_currency,
1056                           export_date          => l_date,
1057                           conversion_type      => l_type,
1058                           actual_amount        => NVL(V_actual_amount,0),
1059                           p_called_from        => 'NOTPNTAUPMT'
1060                        );
1061 
1062          END IF;
1063 
1064       ELSIF p_payment_status_lookup_code = 'DRAFT' THEN
1065          l_temp := NULL;
1066          l_temp1 := null;        --ADDED FOR BUG#2590872
1067          l_date := NULL;
1068       END IF;
1069 
1070      --ADDED FOR BUG#2590872
1071       IF (NVL(v_accounted_amount,0) <> NVL(l_temp1,0)) THEN
1072          UPDATE pn_payment_items_all
1073          SET    accounted_amount                = l_temp1,
1074                 accounted_date                  = l_date,
1075                 RATE                            = payment_item_rec.RATE,
1076                 CURRENCY_CODE                   = payment_item_rec.currency_code,
1077                 last_updated_by                 = p_last_updated_by,
1078                 last_update_date                = p_last_update_date,
1079                 last_update_login               = p_last_update_login
1080          WHERE  payment_item_id                 = v_PAYMENT_item_id;
1081 
1082             IF SQL%NOTFOUND THEN
1083                 NULL;
1084             END IF;
1085       END IF;
1086       IF (NVL(payment_item_rec.accounted_amount,0) <> NVL(l_temp,0)) THEN
1087          UPDATE pn_payment_items_all
1088          SET    accounted_amount                = l_temp,
1089                 accounted_date                  = l_date,
1090                 last_updated_by                 = p_last_updated_by,
1091                 last_update_date                = p_last_update_date,
1092                 last_update_login               = p_last_update_login
1093          WHERE  payment_item_id                 = payment_item_rec.payment_item_id;
1094       END IF;
1095    END LOOP;
1096 
1097 EXCEPTION
1098    WHEN OTHERS THEN
1099       RAISE;
1100 END update_accounted_amount;
1101 
1102 
1103 -------------------------------------------------------------------------------
1104 -- PROCEDURE    : update_rate
1105 -- INVOKED FROM : update_row procedure
1106 -- PURPOSE      : UPDATE the rate field
1107 -- REFERENCE    : BUG ID 2730034
1108 -- HISTORY      :
1109 -- 07-JAN-03  psidhu    o Created
1110 -- 21-JUN-05  piagrawa  o Bug 4284035 - Replaced pn_payment_items
1111 --                         with _ALL table.
1112 -- 01-DEC-05  pikhar    o passed org_id in pnp_util_func.check_conversion_type
1113 -------------------------------------------------------------------------------
1114 PROCEDURE update_rate (
1115                        p_pnt_sched_id                  IN     NUMBER,
1116                        p_payment_status_lookup_code    IN     VARCHAR2,
1117                        p_lease_functional_currency     IN     VARCHAR2,
1118                        p_last_updated_by               IN     NUMBER,
1119                        p_last_update_date              IN     DATE,
1120                        p_last_update_login             IN     NUMBER
1121                      )
1122 IS
1123 l_rate NUMBER;
1124 l_date DATE;
1125 l_type VARCHAR2(30);
1126 
1127 CURSOR payment_cursor IS
1128 SELECT payment_item_id, currency_code, due_date, rate
1129 FROM   pn_payment_items_all
1130 WHERE  payment_schedule_id = p_pnt_sched_id
1131 AND    payment_item_type_lookup_code = 'CASH';
1132 
1133 CURSOR org_cur IS
1134   SELECT org_id
1135   FROM pn_payment_schedules_all
1136   WHERE payment_schedule_id = p_pnt_sched_id;
1137 
1138 l_org_id NUMBER;
1139 
1140 BEGIN
1141 
1142    FOR rec IN org_cur LOOP
1143      l_org_id := rec.org_id;
1144    END LOOP;
1145 
1146    l_type := pnp_util_func.check_conversion_type(p_lease_functional_currency,l_org_id);
1147 
1148    FOR payment_item_rec IN payment_cursor LOOP
1149 
1150       IF payment_item_rec.due_date > SYSDATE THEN
1151          l_date := SYSDATE;
1152       ELSE
1153          l_date := payment_item_rec.due_date;
1154       END IF;
1155 
1156       IF UPPER(l_type) = 'USER' AND
1157          payment_item_rec.currency_code <> p_lease_functional_currency  THEN
1158 
1159          l_rate := payment_item_rec.rate;
1160 
1161       ELSIF p_payment_status_lookup_code = 'APPROVED' THEN
1162          l_rate := gl_currency_api.get_rate_sql(
1163                         x_from_currency    =>  payment_item_rec.currency_code,
1164                         x_to_currency      =>  p_lease_functional_currency,
1165                         x_conversion_date  =>  l_date,
1166                         x_conversion_type  =>  l_type);
1167 
1168          /* gl_currency_api.get_rate_sql returns a -1 is no rate is found
1169             or -2 if the currency is invalid.*/
1170           if l_rate in (-1,-2) then
1171              l_rate := null;
1172           end if;
1173       ELSIF p_payment_status_lookup_code = 'DRAFT' THEN
1174          l_rate := NULL;
1175       END IF;
1176 
1177       IF (NVL(payment_item_rec.rate,0) <> NVL(l_rate,0)) THEN
1178          UPDATE pn_payment_items_all
1179          SET    rate                            = l_rate,
1180                 last_updated_by                 = p_last_updated_by,
1181                 last_update_date                = p_last_update_date,
1182                 last_update_login               = p_last_update_login
1183          WHERE  payment_item_id                 = payment_item_rec.payment_item_id;
1184       END IF;
1185    END LOOP;
1186 
1187 EXCEPTION
1188    WHEN OTHERS THEN
1189       RAISE;
1190 END update_rate;
1191 
1192 
1193 END pnt_payment_schedules_pkg;