DBA Data[Home] [Help]

PACKAGE BODY: APPS.PV_PRGM_PMT_MODE_PVT

Source


1 PACKAGE BODY PV_PRGM_PMT_MODE_PVT as
2 /* $Header: pvxvppmb.pls 120.2 2006/08/14 18:28:48 speddu ship $ */
3 -- ===============================================================
4 -- Start of Comments
5 -- Package name
6 --          PV_PRGM_PMT_MODE_PVT
7 -- Purpose
8 --
9 -- History
10 --         26-APR-2002    Peter.Nixon         Created
11 --         30-APR-2002    Peter.Nixon         Modified
12 --  03/03/03  sveeerave bug fix#2830585 in Get_Pmnt_Mode_Desc
13 --  25/07/03  ktsao     Added Copy_Prgm_Pmt_Mode for program copy functionality
14 --  14/10/03  ktsao     Took out Copy_Prgm_Pmt_Mode.
15 --  29/08/05  ktsao     Fixed for bug 4572286.
16 --
17 -- NOTE
18 --
19 -- Copyright (c) 2002 Oracle Corporation Redwood Shores, California, USA
20 --                          All rights reserved.
21 --
22 -- End of Comments
23 -- ===============================================================
24 
25 
26 G_PKG_NAME CONSTANT VARCHAR2(30):= 'PV_PRGM_PMT_MODE_PVT';
27 G_FILE_NAME CONSTANT VARCHAR2(12) := 'pvxvppmb.pls';
28 l_pmt_mode_desc      VARCHAR2(35) := null;
29 
30 
31 -- Following procedure gives the description for the Payment Method Code passed
32 
33 PV_DEBUG_HIGH_ON CONSTANT boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_HIGH);
34 PV_DEBUG_LOW_ON CONSTANT boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
35 PV_DEBUG_MEDIUM_ON CONSTANT boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_MEDIUM);
36 
37 PROCEDURE Get_Pmnt_Mode_Desc(
38    p_program_payment_mode IN  VARCHAR2
39   ,p_program_id   IN  NUMBER
40   ,p_geo_hierarchy_id IN  NUMBER
41   ,x_pmt_mode_desc OUT NOCOPY VARCHAR2
42   )
43 IS
44 
45 l_api_name                  CONSTANT  VARCHAR2(30)            := 'Get_Pmnt_Mode_Desc';
46 
47 -- corrected the queries, logic for bug fix#2830585. -- sveerave,03/03/03
48 CURSOR c_get_oe_prgm_pmt_mode(cv_program_payment_mode  VARCHAR2, cv_program_id NUMBER, cv_program_geo_hierarchy_id NUMBER) IS
49   SELECT  lkp.MEANING
50   FROM  oe_lookups lkp,
51     PV_PROGRAM_PAYMENT_MODE pay_mode
52   WHERE lkp.LOOKUP_CODE = cv_program_payment_mode
53     AND pay_mode.PROGRAM_ID = cv_program_id
54     AND pay_mode.GEO_HIERARCHY_ID = cv_program_geo_hierarchy_id
55     AND lkp.lookup_type = 'PAYMENT TYPE';
56 
57 CURSOR c_get_pv_prgm_pmt_mode(cv_program_payment_mode  VARCHAR2, cv_program_id NUMBER, cv_program_geo_hierarchy_id NUMBER) IS
58   SELECT  lkp.MEANING
59   FROM  pv_lookups lkp,
60     PV_PROGRAM_PAYMENT_MODE pay_mode
61   WHERE lkp.LOOKUP_CODE = cv_program_payment_mode
62     AND pay_mode.PROGRAM_ID = cv_program_id
63     AND pay_mode.GEO_HIERARCHY_ID = cv_program_geo_hierarchy_id
64     AND lkp.lookup_type = 'PV_PAYMENT_TYPE';
65 
66 BEGIN
67       -- Initialize API return status to SUCCESS
68       ---------------Initialize --------------------
69       -- Standard Start of API savepoint
70       SAVEPOINT Get_Pmnt_Mode_Desc;
71       OPEN c_get_oe_prgm_pmt_mode(p_program_payment_mode , p_program_id, p_geo_hierarchy_id);
72       FETCH c_get_oe_prgm_pmt_mode INTO x_pmt_mode_desc  ;
73       IF c_get_oe_prgm_pmt_mode%NOTFOUND THEN
74         CLOSE c_get_oe_prgm_pmt_mode;
75         OPEN c_get_pv_prgm_pmt_mode(p_program_payment_mode , p_program_id, p_geo_hierarchy_id);
76         FETCH c_get_pv_prgm_pmt_mode INTO x_pmt_mode_desc  ;
77         IF c_get_pv_prgm_pmt_mode%NOTFOUND THEN
78           CLOSE c_get_pv_prgm_pmt_mode;
79           FND_MESSAGE.set_name('PV', 'PV_API_MISSING_ENTITY');
80           FND_MESSAGE.set_token('MODE','find');
81           FND_MESSAGE.set_token('ENTITY','Payment Method Meaning');
82           FND_MESSAGE.set_token('ID','Payment Method: '||p_program_payment_mode
83                                      ||' Program Id: '||p_program_id
84                                      ||' Geo Hierarchy Id: '|| p_geo_hierarchy_id);
85           FND_MSG_PUB.add;
86           IF (PV_DEBUG_HIGH_ON) THEN
87             PVX_UTILITY_PVT.debug_message('No Data found for the payment method description in Get_Pmnt_Mode_Desc');
88           END IF;
89           RAISE FND_API.G_EXC_ERROR;
90         END IF;
91         CLOSE c_get_pv_prgm_pmt_mode;
92       END IF;
93       CLOSE c_get_oe_prgm_pmt_mode;
94 End Get_Pmnt_Mode_Desc;
95 
96 -- The following procedure get the Geo_Area_Name and the Location Type
97 
98 PROCEDURE Get_Pmnt_Geo_Hierarhy(
99    p_program_payment_mode IN  VARCHAR2
100   ,p_program_id     IN  NUMBER
101   ,p_geo_hierarchy_id   IN  NUMBER
102   ,x_geo_area_name    OUT NOCOPY VARCHAR2
103   ,x_location_type_name OUT NOCOPY VARCHAR2
104   )
105 IS
106 
107 
108 
109 CURSOR c_get_geo_hierarchy(cv_program_payment_mode  VARCHAR2, cv_program_id NUMBER, cv_program_geo_hierarchy_id NUMBER) IS
110   SELECT DECODE(LH.LOCATION_TYPE_CODE, 'AREA1', LH.AREA1_NAME, 'AREA2',LH.AREA2_NAME, 'COUNTRY',
111                       LH.COUNTRY_NAME, 'CREGION',LH.COUNTRY_REGION_NAME, 'STATE', LH.STATE_NAME, 'SREGION',
112                       LH.STATE_REGION_NAME, 'CITY', LH.CITY_NAME,'POSTAL_CODE',
113                       LH.POSTAL_CODE_START||'-'||LH.POSTAL_CODE_END) GEO_AREA_NAME,
114           LH.LOCATION_TYPE_NAME LOCATION_TYPE_NAME
115   FROM  PV_PROGRAM_PAYMENT_MODE PPPMNT,
116       JTF_LOC_HIERARCHIES_VL LH
117   WHERE   PPPMNT.PROGRAM_ID = cv_program_id
118   AND   PPPMNT.GEO_HIERARCHY_ID = cv_program_geo_hierarchy_id
119   AND   PPPMNT.MODE_OF_PAYMENT = cv_program_payment_mode
120   AND   LH.LOCATION_HIERARCHY_ID = PPPMNT.GEO_HIERARCHY_ID
121   AND   PPPMNT.mode_type = 'PAYMENT';
122 
123 BEGIN
124       -- Initialize API return status to SUCCESS
125 
126 
127       ---------------Initialize --------------------
128       -- Standard Start of API savepoint
129       SAVEPOINT GET_pmnt_method_PVT;
130 
131 
132       OPEN c_get_geo_hierarchy(p_program_payment_mode , p_program_id, p_geo_hierarchy_id);
133       FETCH c_get_geo_hierarchy INTO x_geo_area_name, x_location_type_name  ;
134        IF c_get_geo_hierarchy%NOTFOUND THEN
135       FND_MESSAGE.set_name('PV', 'PV_API_MISSING_ENTITY');
136       FND_MESSAGE.set_token('MODE','');
137       FND_MESSAGE.set_token('ENTITY','GET_pmnt_method_PVT');
138       FND_MESSAGE.set_token('ID','No Data found in c_get_geo_hierarchy');
139           FND_MSG_PUB.add;
140         IF (PV_DEBUG_HIGH_ON) THEN
141 
142         PVX_UTILITY_PVT.debug_message('No Data found for the payment method description');
143         END IF;
144       RAISE FND_API.G_EXC_ERROR;
145      END IF;
146     CLOSE c_get_geo_hierarchy;
147 
148 
149 End Get_Pmnt_Geo_Hierarhy;
150 
151 
152 
153 
154 
155 
156 
157 
158 
159 
160 
161 PROCEDURE Create_Prgm_Pmt_Mode(
162      p_api_version_number         IN   NUMBER
163     ,p_init_msg_list              IN   VARCHAR2     := FND_API.G_FALSE
164     ,p_commit                     IN   VARCHAR2     := FND_API.G_FALSE
165     ,p_validation_level           IN   NUMBER       := FND_API.G_VALID_LEVEL_FULL
166 
167     ,x_return_status              OUT NOCOPY  VARCHAR2
168     ,x_msg_count                  OUT NOCOPY  NUMBER
169     ,x_msg_data                   OUT NOCOPY  VARCHAR2
170 
171     ,p_prgm_pmt_mode_rec          IN   prgm_pmt_mode_rec_type  := g_miss_prgm_pmt_mode_rec
172     ,x_program_payment_mode_id    OUT NOCOPY  NUMBER
173     )
174 
175  IS
176    l_api_version_number        CONSTANT  NUMBER                  := 1.0;
177    l_api_name                  CONSTANT  VARCHAR2(30)            := 'Create_Prgm_Pmt_Mode';
178    l_full_name                 CONSTANT  VARCHAR2(60)            := g_pkg_name ||'.'|| l_api_name;
179 
180 
181    l_prgm_pmt_mode_rec                   prgm_pmt_mode_rec_type  := p_prgm_pmt_mode_rec;
182 
183    l_object_version_number               NUMBER                  := 1;
184    l_uniqueness_check                    VARCHAR2(1);
185    l_create                              BOOLEAN;
186 
187    -- Cursor to get the sequence for pv_program_payment_mode_id
188    CURSOR c_prgm_pmt_mode_id_seq IS
189       SELECT PV_PROGRAM_PAYMENT_MODE_S.NEXTVAL
190       FROM dual;
191 
192 
193    -- Cursor to validate the uniqueness
194    CURSOR c_prgm_pmt_mode_id_seq_exists (l_id IN NUMBER) IS
195       SELECT  'X'
196       FROM PV_PROGRAM_PAYMENT_MODE
197       WHERE program_payment_mode_id = l_id;
198 
199 
200    CURSOR c_prgm_pmt_mode_id (l_id IN NUMBER) IS
201       select PROGRAM_PAYMENT_MODE_ID, object_version_number, MODE_OF_PAYMENT
202       from PV_PROGRAM_PAYMENT_MODE
203       where GEO_HIERARCHY_ID = l_id
204       AND MODE_OF_PAYMENT in ('PO_NUM_DISABLED', 'PO_NUM_ENABLED');
205 
206 BEGIN
207       ---------------Initialize --------------------
208       -- Standard Start of API savepoint
209       SAVEPOINT Create_Prgm_Pmt_Mode_PVT;
210 
211       -- Initialize message list if p_init_msg_list is set to TRUE.
212       IF FND_API.to_Boolean( p_init_msg_list )
213       THEN
214          FND_MSG_PUB.initialize;
215       END IF;
216 
217       -- Standard call to check for call compatibility.
218       IF NOT FND_API.Compatible_API_Call (
219             l_api_version_number
220            ,p_api_version_number
221            ,l_api_name
222            ,G_PKG_NAME
223            )
224       THEN
225           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
226       END IF;
227 
228       -- Debug Message
229       IF (PV_DEBUG_HIGH_ON) THEN
230 
231       PVX_UTILITY_PVT.debug_message('Private API: '||l_full_name||' - start');
232       END IF;
233 
234 
235       -- Initialize API return status to SUCCESS
236       x_return_status := FND_API.G_RET_STS_SUCCESS;
237 
238        --------------- validate -------------------------
239 
240       IF (PV_DEBUG_HIGH_ON) THEN
241 
242 
243 
244       PVX_Utility_PVT.debug_message(l_full_name ||': validate');
245 
246       END IF;
247 
248       IF FND_GLOBAL.User_Id IS NULL THEN
249           FND_MESSAGE.set_name('PV', 'PV_API_USER_PROFILE_MISSING');
250           FND_MSG_PUB.add;
251           RAISE FND_API.G_EXC_ERROR;
252       END IF;
253 
254       l_create := true;
255       IF l_prgm_pmt_mode_rec.mode_of_payment = 'PO_NUM_DISABLED' or l_prgm_pmt_mode_rec.mode_of_payment = 'PO_NUM_ENABLED' THEN
256          FOR x in c_prgm_pmt_mode_id (l_prgm_pmt_mode_rec.geo_hierarchy_id) LOOP
257          IF (PV_DEBUG_HIGH_ON) THEN
258             PVX_Utility_PVT.debug_message(l_prgm_pmt_mode_rec.geo_hierarchy_id ||'l_prgm_pmt_mode_rec.geo_hierarchy_id');
259             PVX_Utility_PVT.debug_message(x.program_payment_mode_id ||'x.program_payment_mode_id');
260             PVX_Utility_PVT.debug_message(x.object_version_number ||'x.object_version_number');
261          END IF;
262          l_create := false;
263 
264 	    if(x.MODE_OF_PAYMENT <> l_prgm_pmt_mode_rec.mode_of_payment) then
265 
266              l_prgm_pmt_mode_rec.program_payment_mode_id := x.program_payment_mode_id;
267              l_prgm_pmt_mode_rec.object_version_number := x.object_version_number;
268 
269              Update_Prgm_Pmt_Mode(
270                l_api_version_number,
271                p_init_msg_list,
272                p_commit,
273                p_validation_level,
274                x_return_status,
275                x_msg_count,
276                x_msg_data,
277                l_prgm_pmt_mode_rec);
278                x_program_payment_mode_id := l_prgm_pmt_mode_rec.program_payment_mode_id;
279 
280 	     END IF;
281          END LOOP;
282       END IF;
283 
284       IF l_create THEN
285          IF l_prgm_pmt_mode_rec.program_payment_mode_id IS NULL OR
286            l_prgm_pmt_mode_rec.program_payment_mode_id = FND_API.g_miss_num THEN
287            LOOP
288               -- Get the identifier
289              OPEN c_prgm_pmt_mode_id_seq;
290              FETCH c_prgm_pmt_mode_id_seq INTO l_prgm_pmt_mode_rec.program_payment_mode_id;
291              CLOSE c_prgm_pmt_mode_id_seq;
292 
293               -- Check the uniqueness of the identifier
294              OPEN c_prgm_pmt_mode_id_seq_exists(l_prgm_pmt_mode_rec.program_payment_mode_id);
295              FETCH c_prgm_pmt_mode_id_seq_exists INTO l_uniqueness_check;
296              -- Exit when the identifier uniqueness is established
297              EXIT WHEN c_prgm_pmt_mode_id_seq_exists%ROWCOUNT = 0;
298              CLOSE c_prgm_pmt_mode_id_seq_exists;
299            END LOOP;
300          END IF;
301 
302          -- Debug message
303          IF (PV_DEBUG_HIGH_ON) THEN
304 
305          PVX_UTILITY_PVT.debug_message('Private API: ' || l_full_name || ' - program_payment_mode_id = '|| l_prgm_pmt_mode_rec.program_payment_mode_id);
306          END IF;
307 
308          IF ( P_validation_level >= FND_API.G_VALID_LEVEL_FULL) THEN
309              -- Debug message
310              IF (PV_DEBUG_HIGH_ON) THEN
311 
312              PVX_UTILITY_PVT.debug_message('Private API: ' || l_full_name || ' - Validate_Prgm_Pmt_Mode');
313              END IF;
314 
315               -- Populate the default required items
316               l_prgm_pmt_mode_rec.last_update_date        := SYSDATE;
317               l_prgm_pmt_mode_rec.last_updated_by         := FND_GLOBAL.user_id;
318               l_prgm_pmt_mode_rec.creation_date           := SYSDATE;
319               l_prgm_pmt_mode_rec.created_by              := FND_GLOBAL.user_id;
320               l_prgm_pmt_mode_rec.last_update_login       := FND_GLOBAL.conc_login_id;
321               l_prgm_pmt_mode_rec.object_version_number   := l_object_version_number;
322 
323              -- Invoke validation procedures
324              Validate_Prgm_Pmt_Mode(
325                 p_api_version_number     => 1.0
326                ,p_init_msg_list          => FND_API.G_FALSE
327                ,p_validation_level       => p_validation_level
328                ,p_validation_mode        => JTF_PLSQL_API.g_create
329                ,p_prgm_pmt_mode_rec      => l_prgm_pmt_mode_rec
330                ,x_return_status          => x_return_status
331                ,x_msg_count              => x_msg_count
332                ,x_msg_data               => x_msg_data
333                );
334              -- Debug message
335              IF (PV_DEBUG_HIGH_ON) THEN
336 
337              PVX_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' -  Validate_Prgm_Pmt_Mode return_status = ' || x_return_status );
338              END IF;
339          END IF;
340 
341          IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
342              RAISE FND_API.G_EXC_ERROR;
343          END IF;
344 
345          IF x_return_status = FND_API.g_ret_sts_error THEN
346             RAISE FND_API.g_exc_error;
347          ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
348             RAISE FND_API.g_exc_unexpected_error;
349          END IF;
350 
351          -- Debug Message
352          IF (PV_DEBUG_HIGH_ON) THEN
353 
354          PVX_UTILITY_PVT.debug_message( 'Private API:' || l_full_name || ' -  Calling create table handler');
355          END IF;
356 
357          -- Invoke table handler(PV_PRGM_PMT_MODE_PKG.Insert_Row)
358          PV_PRGM_PMT_MODE_PKG.Insert_Row(
359               px_program_payment_mode_id  => l_prgm_pmt_mode_rec.program_payment_mode_id
360              ,p_program_id                => l_prgm_pmt_mode_rec.program_id
361              ,p_geo_hierarchy_id          => l_prgm_pmt_mode_rec.geo_hierarchy_id
362              ,p_mode_of_payment           => l_prgm_pmt_mode_rec.mode_of_payment
363              ,p_last_update_date          => l_prgm_pmt_mode_rec.last_update_date
364              ,p_last_updated_by           => l_prgm_pmt_mode_rec.last_updated_by
365              ,p_creation_date             => l_prgm_pmt_mode_rec.creation_date
366              ,p_created_by                => l_prgm_pmt_mode_rec.created_by
367              ,p_last_update_login         => l_prgm_pmt_mode_rec.last_update_login
368              ,p_object_version_number     => l_object_version_number
369              ,p_mode_type           => l_prgm_pmt_mode_rec.mode_type
370              );
371 
372          x_program_payment_mode_id := l_prgm_pmt_mode_rec.program_payment_mode_id;
373       END IF;
374 
375       IF x_return_status = FND_API.g_ret_sts_error THEN
376          RAISE FND_API.g_exc_error;
377       ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
378          RAISE FND_API.g_exc_unexpected_error;
379       END IF;
380 
381      FND_MSG_PUB.count_and_get(
382         p_encoded => FND_API.g_false
383        ,p_count   => x_msg_count
384        ,p_data    => x_msg_data
385        );
386 
387      -- Debug Message
388      IF (PV_DEBUG_HIGH_ON) THEN
389 
390      PVX_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' - end');
391      END IF;
392 
393      -- Standard check for p_commit
394      IF FND_API.to_Boolean( p_commit ) THEN
395          COMMIT WORK;
396      END IF;
397 
398 EXCEPTION
399    WHEN FND_API.G_EXC_ERROR THEN
400      ROLLBACK TO Create_Prgm_Pmt_Mode_PVT;
401      x_return_status := FND_API.G_RET_STS_ERROR;
402      -- Standard call to get message count and if count=1, get the message
403      FND_MSG_PUB.Count_And_Get (
404             p_encoded => FND_API.G_FALSE
405            ,p_count   => x_msg_count
406            ,p_data    => x_msg_data
407            );
408 
409    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
410      ROLLBACK TO Create_Prgm_Pmt_Mode_PVT;
411      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
412      -- Standard call to get message count and if count=1, get the message
413      FND_MSG_PUB.Count_And_Get (
414             p_encoded => FND_API.G_FALSE
415            ,p_count   => x_msg_count
416            ,p_data    => x_msg_data
417            );
418 
419    WHEN OTHERS THEN
420      ROLLBACK TO Create_Prgm_Pmt_Mode_PVT;
421      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
422      IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
423      THEN
424         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
425      END IF;
426      -- Standard call to get message count and if count=1, get the message
427      FND_MSG_PUB.Count_And_Get (
428             p_encoded => FND_API.G_FALSE
429            ,p_count   => x_msg_count
430            ,p_data    => x_msg_data
431            );
432 
433 End Create_Prgm_Pmt_Mode;
434 
435 
436 PROCEDURE Update_Prgm_Pmt_Mode(
437      p_api_version_number         IN   NUMBER
438     ,p_init_msg_list              IN   VARCHAR2     := FND_API.G_FALSE
439     ,p_commit                     IN   VARCHAR2     := FND_API.G_FALSE
440     ,p_validation_level           IN   NUMBER       := FND_API.G_VALID_LEVEL_FULL
441 
442     ,x_return_status              OUT NOCOPY  VARCHAR2
443     ,x_msg_count                  OUT NOCOPY  NUMBER
444     ,x_msg_data                   OUT NOCOPY  VARCHAR2
445 
446     ,p_prgm_pmt_mode_rec          IN   prgm_pmt_mode_rec_type
447     )
448 
449 IS
450 
451  CURSOR c_get_prgm_pmt_mode(cv_program_payment_mode_id NUMBER) IS
452     SELECT *
453     FROM  PV_PROGRAM_PAYMENT_MODE
454     WHERE PROGRAM_PAYMENT_MODE_ID = cv_program_payment_mode_id;
455 
456   l_api_name                  CONSTANT VARCHAR2(30) := 'Update_Prgm_Pmt_Mode';
457   l_full_name                 CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
458   l_api_version_number        CONSTANT NUMBER       := 1.0;
459 
460   -- Local Variables
461   l_ref_prgm_pmt_mode_rec              c_get_prgm_pmt_mode%ROWTYPE ;
462   l_tar_prgm_pmt_mode_rec              PV_PRGM_PMT_MODE_PVT.prgm_pmt_mode_rec_type := p_prgm_pmt_mode_rec;
463   l_rowid                              ROWID;
464   l_update                             BOOLEAN := true;
465 
466   CURSOR c_prgm_pmt_mode_id (l_id IN NUMBER) IS
467       select GEO_HIERARCHY_ID, MODE_OF_PAYMENT
468       from PV_PROGRAM_PAYMENT_MODE
469       where PROGRAM_PAYMENT_MODE_ID = l_id
470       and MODE_OF_PAYMENT in ('PO_NUM_DISABLED', 'PO_NUM_ENABLED');
471 
472   CURSOR c_prgm_duplicate_pmt_mode (l_id IN NUMBER) IS
473       select GEO_HIERARCHY_ID, MODE_OF_PAYMENT, PROGRAM_PAYMENT_MODE_ID, object_version_number
474       from PV_PROGRAM_PAYMENT_MODE
475       where GEO_HIERARCHY_ID = l_id
476       and MODE_OF_PAYMENT in ('PO_NUM_DISABLED', 'PO_NUM_ENABLED');
477 
478  BEGIN
479 
480 
481 
482 
483      ---------Initialize ------------------
484 
485       -- Standard Start of API savepoint
486       SAVEPOINT Update_Prgm_Pmt_Mode_PVT;
487 
488       -- Standard call to check for call compatibility.
489       IF NOT FND_API.Compatible_API_Call (l_api_version_number
490                                          ,p_api_version_number
491                                          ,l_api_name
492                                          ,G_PKG_NAME
493                                          )
494       THEN
495           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
496       END IF;
497 
498       -- Initialize message list if p_init_msg_list is set to TRUE.
499       IF FND_API.to_Boolean( p_init_msg_list )
500       THEN
501          FND_MSG_PUB.initialize;
502       END IF;
503 
504       -- Initialize API return status to SUCCESS
505       x_return_status := FND_API.G_RET_STS_SUCCESS;
506 
507       OPEN c_get_prgm_pmt_mode( l_tar_prgm_pmt_mode_rec.program_payment_mode_id);
508       FETCH c_get_prgm_pmt_mode INTO l_ref_prgm_pmt_mode_rec  ;
509 
510        IF ( c_get_prgm_pmt_mode%NOTFOUND) THEN
511          FND_MESSAGE.set_name('PV', 'PV_API_MISSING_ENTITY');
512          FND_MESSAGE.set_token('MODE','Update');
513          FND_MESSAGE.set_token('ENTITY','prgm_pmt_mode');
514          FND_MESSAGE.set_token('ID',TO_CHAR(l_tar_prgm_pmt_mode_rec.program_payment_mode_id));
515          FND_MSG_PUB.add;
516          RAISE FND_API.G_EXC_ERROR;
517        END IF;
518 
519        -- Debug Message
520          IF (PV_DEBUG_HIGH_ON) THEN
521 
522          PVX_Utility_PVT.debug_message('Private API: '||l_full_name||' - Close Cursor');
523          END IF;
524        CLOSE  c_get_prgm_pmt_mode;
525 
526       If (l_tar_prgm_pmt_mode_rec.object_version_number is NULL or
527           l_tar_prgm_pmt_mode_rec.object_version_number = FND_API.G_MISS_NUM ) THEN
528 
529            FND_MESSAGE.set_name('PV', 'PV_API_VERSION_MISSING');
530            FND_MESSAGE.set_token('COLUMN','object_version_number');
531            FND_MSG_PUB.add;
532            RAISE FND_API.G_EXC_ERROR;
533       END IF;
534 
535 
536 
537       -- Check Whether record has been changed by someone else
538       IF (l_tar_prgm_pmt_mode_rec.object_version_number <> l_ref_prgm_pmt_mode_rec.object_version_number) THEN
539            FND_MESSAGE.set_name('PV', 'PV_API_RECORD_CHANGED');
540            FND_MESSAGE.set_token('VALUE','prgm_pmt_mode');
541            FND_MSG_PUB.add;
542            RAISE FND_API.G_EXC_ERROR;
543       END IF;
544 
545 
546 
547        IF p_prgm_pmt_mode_rec.mode_of_payment = 'PO_NUM_DISABLED' or p_prgm_pmt_mode_rec.mode_of_payment = 'PO_NUM_ENABLED' THEN
548          FOR x in c_prgm_pmt_mode_id (p_prgm_pmt_mode_rec.program_payment_mode_id) LOOP
549             if(x.geo_hierarchy_id <>  p_prgm_pmt_mode_rec.geo_hierarchy_id) then
550 	      FOR y in c_prgm_duplicate_pmt_mode(p_prgm_pmt_mode_rec.geo_hierarchy_id) LOOP
551                   Delete_Prgm_Pmt_Mode(
552                       p_api_version_number        => l_api_version_number
553                      ,p_init_msg_list             => FND_API.G_FALSE
554                      ,p_commit                    => FND_API.G_FALSE
555                      ,p_validation_level          => FND_API.G_VALID_LEVEL_FULL
556                      ,x_return_status             => x_return_status
557                      ,x_msg_count                 => x_msg_count
558                      ,x_msg_data                  => x_msg_data
559                      ,p_program_payment_mode_id   => y.program_payment_mode_id
560                      ,p_object_version_number     => y.object_version_number
561                    );
562 
563 	           IF (PV_DEBUG_HIGH_ON) THEN
564                      PVX_UTILITY_PVT.debug_message('X_return_status from delete api to delete the duplicate record ' || x_return_status);
565                      PVX_UTILITY_PVT.debug_message('x_msg_count from delete api to delete the duplicate record  ' || x_msg_count);
566                      PVX_UTILITY_PVT.debug_message('x_msg_data from delete api to delete the duplicate record  ' || x_msg_data);
567                    END IF;
568 
569                    IF x_return_status = FND_API.g_ret_sts_error THEN
570                        RAISE FND_API.g_exc_error;
571                    ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
572                        RAISE FND_API.g_exc_unexpected_error;
573                    END IF;
574 	      END LOOP;
575 
576 	   elsif (x.mode_of_payment =  p_prgm_pmt_mode_rec.mode_of_payment) then
577                 l_update := false;
578 	   END IF;
579          END LOOP;
580          END IF;
581 
582 
583      if(l_update) then
584 
585 
586 
587       IF ( p_validation_level >= FND_API.G_VALID_LEVEL_FULL) THEN
588           -- Debug message
589            IF (PV_DEBUG_HIGH_ON) THEN
590 
591            PVX_Utility_PVT.debug_message('Private API: '||l_full_name||' - Validate_Prgm_Pmt_Mode');
592            END IF;
593 
594           -- Invoke validation procedures
595           Validate_Prgm_Pmt_Mode(
596              p_api_version_number  => 1.0
597             ,p_init_msg_list       => FND_API.G_FALSE
598             ,p_validation_level    => p_validation_level
599             ,p_validation_mode     => JTF_PLSQL_API.g_update
600             ,p_prgm_pmt_mode_rec   => p_prgm_pmt_mode_rec
601             ,x_return_status       => x_return_status
602             ,x_msg_count           => x_msg_count
603             ,x_msg_data            => x_msg_data
604             );
605       END IF;
606 
607      IF x_return_status = FND_API.g_ret_sts_error THEN
608         RAISE FND_API.g_exc_error;
609      ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
610         RAISE FND_API.g_exc_unexpected_error;
611      END IF;
612 
613      -- replace g_miss_char/num/date with current column values
614      Complete_Rec(
615               p_prgm_pmt_mode_rec => p_prgm_pmt_mode_rec
616              ,x_complete_rec      => l_tar_prgm_pmt_mode_rec
617              );
618 
619       -- Debug Message
620        IF (PV_DEBUG_HIGH_ON) THEN
621 
622        PVX_Utility_PVT.debug_message('Private API: '||l_full_name||' - Calling update table handler');
623        END IF;
624 
625       -- Invoke table handler(PV_PRGM_PMT_MODE_PKG.Update_Row)
626       PV_PRGM_PMT_MODE_PKG.Update_Row(
627            p_program_payment_mode_id  => l_tar_prgm_pmt_mode_rec.program_payment_mode_id
628           ,p_program_id               => l_tar_prgm_pmt_mode_rec.program_id
629           ,p_geo_hierarchy_id         => l_tar_prgm_pmt_mode_rec.geo_hierarchy_id
630           ,p_mode_of_payment          => l_tar_prgm_pmt_mode_rec.mode_of_payment
631           ,p_last_update_date         => SYSDATE
632           ,p_last_updated_by          => FND_GLOBAL.user_id
633           ,p_last_update_login        => FND_GLOBAL.conc_login_id
634           ,p_object_version_number    => l_tar_prgm_pmt_mode_rec.object_version_number
635 	  ,p_mode_type          => l_tar_prgm_pmt_mode_rec.mode_type
636           );
637 
638      End if;
639 
640      -- Check for commit
641      IF FND_API.to_boolean(p_commit) THEN
642         COMMIT;
643      END IF;
644 
645     FND_MSG_PUB.count_and_get(
646        p_encoded => FND_API.g_false
647       ,p_count   => x_msg_count
648       ,p_data    => x_msg_data
649       );
650 
651       -- Debug Message
652       IF (PV_DEBUG_HIGH_ON) THEN
653 
654       PVX_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' - end');
655       END IF;
656 
657 EXCEPTION
658    WHEN FND_API.G_EXC_ERROR THEN
659      ROLLBACK TO Update_Prgm_Pmt_Mode_PVT;
660      x_return_status := FND_API.G_RET_STS_ERROR;
661      -- Standard call to get message count and if count=1, get the message
662      FND_MSG_PUB.Count_And_Get (
663             p_encoded => FND_API.G_FALSE
664            ,p_count   => x_msg_count
665            ,p_data    => x_msg_data
666            );
667 
668    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
669      ROLLBACK TO Update_Prgm_Pmt_Mode_PVT;
670      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
671      -- Standard call to get message count and if count=1, get the message
672      FND_MSG_PUB.Count_And_Get (
673             p_encoded => FND_API.G_FALSE
674            ,p_count   => x_msg_count
675            ,p_data    => x_msg_data
676            );
677 
678    WHEN OTHERS THEN
679      ROLLBACK TO Update_Prgm_Pmt_Mode_PVT;
680      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
681      IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
682      THEN
683         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
684      END IF;
685      -- Standard call to get message count and if count=1, get the message
686      FND_MSG_PUB.Count_And_Get (
687             p_encoded => FND_API.G_FALSE
688            ,p_count   => x_msg_count
689            ,p_data    => x_msg_data
690            );
691 End Update_Prgm_Pmt_Mode;
692 
693 
694 
695 PROCEDURE Delete_Prgm_Pmt_Mode(
696      p_api_version_number         IN   NUMBER
697     ,p_init_msg_list              IN   VARCHAR2     := FND_API.G_FALSE
698     ,p_commit                     IN   VARCHAR2     := FND_API.G_FALSE
699     ,p_validation_level           IN   NUMBER       := FND_API.G_VALID_LEVEL_FULL
700     ,x_return_status              OUT NOCOPY  VARCHAR2
701     ,x_msg_count                  OUT NOCOPY  NUMBER
702     ,x_msg_data                   OUT NOCOPY  VARCHAR2
703     ,p_program_payment_mode_id    IN   NUMBER
704     ,p_object_version_number      IN   NUMBER
705     )
706 
707  IS
708 l_api_name                  CONSTANT VARCHAR2(30) := 'Delete_Prgm_Pmt_Mode';
709 l_full_name                 CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
710 l_api_version_number        CONSTANT NUMBER       := 1.0;
711 l_object_version_number              NUMBER;
712 
713 BEGIN
714 
715      ---- Initialize----------------
716 
717       -- Standard Start of API savepoint
718       SAVEPOINT Delete_Prgm_Pmt_Mode_PVT;
719 
720       -- Debug Message
721       IF (PV_DEBUG_HIGH_ON) THEN
722 
723       PVX_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' - start');
724       END IF;
725 
726       -- Standard call to check for call compatibility.
727       IF NOT FND_API.Compatible_API_Call (l_api_version_number
728                                          ,p_api_version_number
729                                          ,l_api_name
730                                          ,G_PKG_NAME
731                                          )
732       THEN
733           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
734       END IF;
735 
736       -- Initialize message list if p_init_msg_list is set to TRUE.
737       IF FND_API.to_Boolean( p_init_msg_list )
738       THEN
739          FND_MSG_PUB.initialize;
740       END IF;
741 
742       -- Initialize API return status to SUCCESS
743       x_return_status := FND_API.G_RET_STS_SUCCESS;
744 
745       -- Debug Message
746       IF (PV_DEBUG_HIGH_ON) THEN
747 
748       PVX_UTILITY_PVT.debug_message( 'Private API: Calling delete table handler');
749       END IF;
750 
751       -- Invoke table handler(PV_PRGM_PMT_MODE_PKG.Delete_Row)
752       PV_PRGM_PMT_MODE_PKG.Delete_Row(
753            p_program_payment_mode_id  => p_program_payment_mode_id
754           ,p_object_version_number    => p_object_version_number
755           );
756 
757      -- Check for commit
758      IF FND_API.to_boolean(p_commit) THEN
759         COMMIT;
760      END IF;
761 
762     FND_MSG_PUB.count_and_get(
763        p_encoded => FND_API.g_false
764       ,p_count   => x_msg_count
765       ,p_data    => x_msg_data
766       );
767 
768       -- Debug Message
769       IF (PV_DEBUG_HIGH_ON) THEN
770 
771       PVX_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' - end');
772       END IF;
773 
774 EXCEPTION
775    WHEN FND_API.G_EXC_ERROR THEN
776      ROLLBACK TO Delete_Prgm_Pmt_Mode_PVT;
777      x_return_status := FND_API.G_RET_STS_ERROR;
778      -- Standard call to get message count and if count=1, get the message
779      FND_MSG_PUB.Count_And_Get (
780             p_encoded => FND_API.G_FALSE
781            ,p_count   => x_msg_count
782            ,p_data    => x_msg_data
783            );
784 
785    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
786      ROLLBACK TO Delete_Prgm_Pmt_Mode_PVT;
787      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
788      -- Standard call to get message count and if count=1, get the message
789      FND_MSG_PUB.Count_And_Get (
790             p_encoded => FND_API.G_FALSE
791            ,p_count   => x_msg_count
792            ,p_data    => x_msg_data
793            );
794 
795    WHEN OTHERS THEN
796      ROLLBACK TO Delete_Prgm_Pmt_Mode_PVT;
797      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
798      IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
799      THEN
800         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
801      END IF;
802      -- Standard call to get message count and if count=1, get the message
803      FND_MSG_PUB.Count_And_Get (
804             p_encoded => FND_API.G_FALSE
805            ,p_count   => x_msg_count
806            ,p_data    => x_msg_data
807            );
808 
809 End Delete_Prgm_Pmt_Mode;
810 
811 
812 
813 PROCEDURE Lock_Prgm_Pmt_Mode(
814      p_api_version_number         IN   NUMBER
815     ,p_init_msg_list              IN   VARCHAR2     := FND_API.G_FALSE
816 
817     ,x_return_status              OUT NOCOPY  VARCHAR2
818     ,x_msg_count                  OUT NOCOPY  NUMBER
819     ,x_msg_data                   OUT NOCOPY  VARCHAR2
820 
821     ,p_program_payment_mode_id    IN   NUMBER
822     ,p_object_version             IN   NUMBER
823     )
824 
825  IS
826  l_api_name                  CONSTANT VARCHAR2(30) := 'Lock_Prgm_Pmt_Mode';
827  l_api_version_number        CONSTANT NUMBER       := 1.0;
828  l_full_name                 CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
829  l_program_payment_mode_id            NUMBER;
830 
831 CURSOR c_prgm_pmt_mode IS
832    SELECT program_payment_mode_id
833    FROM PV_PROGRAM_PAYMENT_MODE
834    WHERE program_payment_mode_id = p_program_payment_mode_id
835    AND object_version_number = p_object_version
836    FOR UPDATE NOWAIT;
837 
838 BEGIN
839 
840       -- Debug Message
841       IF (PV_DEBUG_HIGH_ON) THEN
842 
843       PVX_UTILITY_PVT.debug_message('Private API: '||l_full_name||' - start');
844       END IF;
845 
846       -- Initialize message list if p_init_msg_list is set to TRUE.
847       IF FND_API.to_Boolean( p_init_msg_list )
848       THEN
849          FND_MSG_PUB.initialize;
850       END IF;
851 
852       -- Standard call to check for call compatibility.
853       IF NOT FND_API.Compatible_API_Call (
854               l_api_version_number
855              ,p_api_version_number
856              ,l_api_name
857              ,G_PKG_NAME
858              )
859       THEN
860           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
861       END IF;
862 
863 
864       -- Initialize API return status to SUCCESS
865       x_return_status := FND_API.G_RET_STS_SUCCESS;
866 
867 
868 ------------------------ lock -------------------------
869 
870   IF (PV_DEBUG_HIGH_ON) THEN
871 
872 
873 
874   PVX_UTILITY_PVT.debug_message(l_full_name||': start');
875 
876   END IF;
877   OPEN c_prgm_pmt_mode;
878 
879   FETCH c_prgm_pmt_mode INTO l_program_payment_mode_id;
880 
881   IF (c_prgm_pmt_mode%NOTFOUND) THEN
882     CLOSE c_prgm_pmt_mode;
883     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
884        FND_MESSAGE.set_name('AMS', 'AMS_API_RECORD_NOT_FOUND');
885        FND_MSG_PUB.add;
886     END IF;
887     RAISE FND_API.g_exc_error;
888   END IF;
889 
890   CLOSE c_prgm_pmt_mode;
891 
892  -------------------- finish --------------------------
893   FND_MSG_PUB.count_and_get(
894      p_encoded => FND_API.g_false
895     ,p_count   => x_msg_count
896     ,p_data    => x_msg_data
897     );
898 
899       -- Debug Message
900       IF (PV_DEBUG_HIGH_ON) THEN
901 
902       PVX_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' - end');
903       END IF;
904 
905 EXCEPTION
906 /*
907    WHEN PVX_UTILITY_PVT.resource_locked THEN
908      x_return_status := FND_API.g_ret_sts_error;
909   PVX_Utility_PVT.Error_Message(p_message_name => 'PV_API_RESOURCE_LOCKED');
910 */
911    WHEN FND_API.G_EXC_ERROR THEN
912      ROLLBACK TO Lock_Prgm_Pmt_Mode_PVT;
913      x_return_status := FND_API.G_RET_STS_ERROR;
914      -- Standard call to get message count and if count=1, get the message
915      FND_MSG_PUB.Count_And_Get (
916             p_encoded => FND_API.G_FALSE
917            ,p_count   => x_msg_count
918            ,p_data    => x_msg_data
919            );
920 
921    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
922      ROLLBACK TO Lock_Prgm_Pmt_Mode_PVT;
923      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
924      -- Standard call to get message count and if count=1, get the message
925      FND_MSG_PUB.Count_And_Get (
926             p_encoded => FND_API.G_FALSE
927            ,p_count   => x_msg_count
928            ,p_data    => x_msg_data
929            );
930 
931 
932    WHEN OTHERS THEN
933      ROLLBACK TO Lock_Prgm_Pmt_Mode_PVT;
934      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
935      IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
936      THEN
937         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
938      END IF;
939      -- Standard call to get message count and if count=1, get the message
940      FND_MSG_PUB.Count_And_Get (
941             p_encoded => FND_API.G_FALSE
942            ,p_count   => x_msg_count
943            ,p_data    => x_msg_data
944            );
945 
946 End Lock_Prgm_Pmt_Mode;
947 
948 
949 
950 PROCEDURE Check_UK_Items(
951      p_prgm_pmt_mode_rec         IN  prgm_pmt_mode_rec_type
952     ,p_validation_mode           IN  VARCHAR2 := JTF_PLSQL_API.g_create
953     ,x_return_status             OUT NOCOPY VARCHAR2
954     )
955 
956 IS
957 
958 l_valid_flag  VARCHAR2(1);
959 l_geo_area_name VARCHAR2(20) ;
960 l_location_type_name VARCHAR2(20);
961 l_mode_of_payment VARCHAR2(20) ;
962 
963    -- Cursor to get the geoAreaName of the given location hierarchy id
964    CURSOR c_geo_area_name (l_loc_hie_id IN NUMBER) IS
965       select DECODE(LH.LOCATION_TYPE_CODE, 'AREA1', LH.AREA1_NAME, 'AREA2',LH.AREA2_NAME,
966                     'COUNTRY', LH.COUNTRY_NAME, 'CREGION', LH.COUNTRY_REGION_NAME,
967                     'STATE', LH.STATE_NAME, 'SREGION', LH.STATE_REGION_NAME, 'CITY', LH.CITY_NAME,
968                     'POSTAL_CODE', LH.POSTAL_CODE_START||'-'||LH.POSTAL_CODE_END, to_char(LOCATION_HIERARCHY_ID)),
969                     LH.LOCATION_TYPE_NAME LOCATION_TYPE_NAME
970       from JTF_LOC_HIERARCHIES_VL LH
971       where LOCATION_HIERARCHY_ID = l_loc_hie_id;
972 
973    -- Cursor to get the meaning of paymentCode
974    CURSOR c_payment_code (l_payment_code IN VARCHAR2) IS
975       select meaning from pv_lookups
976       where lookup_type = 'PV_PAYMENT_TYPE'
977       and lookup_code = l_payment_code;
978 
979 
980 BEGIN
981 
982       x_return_status := FND_API.g_ret_sts_success;
983       IF p_validation_mode = JTF_PLSQL_API.g_create THEN
984 
985          l_valid_flag := PVX_UTILITY_PVT.check_uniqueness(
986          'PV_PROGRAM_PAYMENT_MODE',
987          'program_payment_mode_id = ''' || p_prgm_pmt_mode_rec.program_payment_mode_id ||''''
988          );
989 
990         IF l_valid_flag = FND_API.g_false THEN
991           FND_MESSAGE.set_name('PV', 'PV_API_DUPLICATE_ENTITY');
992           FND_MESSAGE.set_token('ID',to_char(p_prgm_pmt_mode_rec.program_payment_mode_id) );
993           FND_MESSAGE.set_token('ENTITY','PRGM_PMT_MODE');
994           FND_MSG_PUB.add;
995           x_return_status := FND_API.g_ret_sts_error;
996           RETURN;
997         END IF;
998 
999       END IF;
1000 
1001         -- Debug message
1002         IF (PV_DEBUG_HIGH_ON) THEN
1003 
1004         PVX_UTILITY_PVT.debug_message('- In Check_UK_Items API' );
1005         END IF;
1006 
1007          l_valid_flag := PVX_UTILITY_PVT.check_uniqueness(
1008          'PV_PROGRAM_PAYMENT_MODE',
1009          'mode_type = '''||
1010 	 p_prgm_pmt_mode_rec.mode_type ||
1011 	 ''' and mode_of_payment = '''||
1012 	 p_prgm_pmt_mode_rec.mode_of_payment||
1013 	 ''' AND GEO_HIERARCHY_ID = ''' ||
1014 	 p_prgm_pmt_mode_rec.GEO_HIERARCHY_ID||'''  '
1015          );
1016 
1017    IF l_valid_flag = FND_API.g_false THEN
1018         FND_MESSAGE.set_name('PV', 'PV_PMNT_MODE_DUPLICATE_ENTITY');
1019         OPEN c_payment_code(p_prgm_pmt_mode_rec.mode_of_payment);
1020         FETCH c_payment_code into l_mode_of_payment;
1021         FND_MESSAGE.set_token('ENTITY1', l_mode_of_payment);
1022         CLOSE c_payment_code;
1023 
1024         -- Get the get_area_name
1025         OPEN c_geo_area_name(p_prgm_pmt_mode_rec.GEO_HIERARCHY_ID);
1026         FETCH c_geo_area_name into l_geo_area_name, l_location_type_name;
1027         FND_MESSAGE.set_token('ENTITY2', l_location_type_name);
1028         FND_MESSAGE.set_token('ENTITY3', l_geo_area_name);
1029         CLOSE c_geo_area_name;
1030 
1031         FND_MSG_PUB.ADD;
1032         x_return_status := Fnd_Api.g_ret_sts_error;
1033         RETURN;
1034 
1035     /*
1036         Get_Pmnt_Mode_Desc ( p_prgm_pmt_mode_rec.mode_of_payment
1037                , p_prgm_pmt_mode_rec.program_id
1038                , p_prgm_pmt_mode_rec.GEO_HIERARCHY_ID
1039                  , x_pmt_mode_desc
1040        );
1041 
1042 
1043        Get_Pmnt_Geo_Hierarhy( p_prgm_pmt_mode_rec.mode_of_payment
1044                   , p_prgm_pmt_mode_rec.program_id
1045                   , p_prgm_pmt_mode_rec.GEO_HIERARCHY_ID
1046                 , x_geo_area_name
1047                 , x_location_type_name
1048       );
1049 
1050 
1051            FND_MESSAGE.set_name('PV', 'PV_PMNT_MODE_DUPLICATE_ENTITY');
1052            FND_MESSAGE.set_token('ENTITY1',x_pmt_mode_desc);
1053        FND_MESSAGE.set_token('ENTITY2',x_location_type_name);
1054          FND_MESSAGE.set_token('ENTITY3',x_geo_area_name);
1055            FND_MSG_PUB.add;
1056 
1057           x_return_status := FND_API.g_ret_sts_error;
1058           RETURN;
1059      */
1060         END IF;
1061 
1062 
1063 END Check_UK_Items;
1064 
1065 
1066 
1067 PROCEDURE Check_Req_Items(
1068      p_prgm_pmt_mode_rec    IN  prgm_pmt_mode_rec_type
1069     ,p_validation_mode      IN  VARCHAR2 := JTF_PLSQL_API.g_create
1070     ,x_return_status      OUT NOCOPY VARCHAR2
1071     )
1072 
1073 IS
1074 
1075 BEGIN
1076 
1077    x_return_status := FND_API.g_ret_sts_success;
1078 
1079    IF p_validation_mode = JTF_PLSQL_API.g_create THEN
1080 
1081       IF p_prgm_pmt_mode_rec.program_payment_mode_id = FND_API.g_miss_num
1082         OR p_prgm_pmt_mode_rec.program_payment_mode_id IS NULL THEN
1083          FND_MESSAGE.set_name('PV','PV_API_MISSING_REQ_COLUMN');
1084          FND_MESSAGE.set_token('COLUMN','PROGRAM_PAYMENT_MODE_ID');
1085          FND_MSG_PUB.add;
1086          x_return_status := FND_API.g_ret_sts_error;
1087          RETURN;
1088       END IF;
1089 
1090 /**
1091       IF p_prgm_pmt_mode_rec.program_id = FND_API.g_miss_num OR
1092          p_prgm_pmt_mode_rec.program_id IS NULL THEN
1093          FND_MESSAGE.set_name('PV','PV_API_MISSING_REQ_COLUMN');
1094          FND_MESSAGE.set_token('COLUMN','PROGRAM_ID');
1095          FND_MSG_PUB.add;
1096          x_return_status := FND_API.g_ret_sts_error;
1097          RETURN;
1098       END IF;
1099 
1100 */
1101       IF p_prgm_pmt_mode_rec.geo_hierarchy_id = FND_API.g_miss_num OR
1102          p_prgm_pmt_mode_rec.geo_hierarchy_id IS NULL THEN
1103          FND_MESSAGE.set_name('PV','PV_API_MISSING_REQ_COLUMN');
1104          FND_MESSAGE.set_token('COLUMN','geo_hierarchy_id');
1105          FND_MSG_PUB.add;
1106          x_return_status := FND_API.g_ret_sts_error;
1107          RETURN;
1108       END IF;
1109 
1110 
1111       IF p_prgm_pmt_mode_rec.mode_of_payment = FND_API.g_miss_char OR
1112          p_prgm_pmt_mode_rec.mode_of_payment IS NULL THEN
1113          FND_MESSAGE.set_name('PV','PV_API_MISSING_REQ_COLUMN');
1114          FND_MESSAGE.set_token('COLUMN','MODE_OF_PAYMENT');
1115          FND_MSG_PUB.add;
1116          x_return_status := FND_API.g_ret_sts_error;
1117          RETURN;
1118       END IF;
1119 
1120       IF p_prgm_pmt_mode_rec.mode_type = FND_API.g_miss_char OR
1121          p_prgm_pmt_mode_rec.mode_type IS NULL THEN
1122          FND_MESSAGE.set_name('PV','PV_API_MISSING_REQ_COLUMN');
1123          FND_MESSAGE.set_token('COLUMN','mode_type');
1124          FND_MSG_PUB.add;
1125          x_return_status := FND_API.g_ret_sts_error;
1126          RETURN;
1127       END IF;
1128 
1129       IF p_prgm_pmt_mode_rec.last_update_date = FND_API.g_miss_date OR
1130          p_prgm_pmt_mode_rec.last_update_date IS NULL THEN
1131          FND_MESSAGE.set_name('PV','PV_API_MISSING_REQ_COLUMN');
1132          FND_MESSAGE.set_token('COLUMN','LAST_UPDATE_DATE');
1133          FND_MSG_PUB.add;
1134          x_return_status := FND_API.g_ret_sts_error;
1135          RETURN;
1136       END IF;
1137 
1138 
1139       IF p_prgm_pmt_mode_rec.last_updated_by = FND_API.g_miss_num OR
1140          p_prgm_pmt_mode_rec.last_updated_by IS NULL THEN
1141          FND_MESSAGE.set_name('PV','PV_API_MISSING_REQ_COLUMN');
1142          FND_MESSAGE.set_token('COLUMN','LAST_UPDATED_BY');
1143          FND_MSG_PUB.add;
1144          x_return_status := FND_API.g_ret_sts_error;
1145          RETURN;
1146       END IF;
1147 
1148 
1149       IF p_prgm_pmt_mode_rec.creation_date = FND_API.g_miss_date OR
1150          p_prgm_pmt_mode_rec.creation_date IS NULL THEN
1151          FND_MESSAGE.set_name('PV','PV_API_MISSING_REQ_COLUMN');
1152          FND_MESSAGE.set_token('COLUMN','CREATION_DATE');
1153          FND_MSG_PUB.add;
1154          x_return_status := FND_API.g_ret_sts_error;
1155          RETURN;
1156       END IF;
1157 
1158       -- Debug message
1159       IF (PV_DEBUG_HIGH_ON) THEN
1160 
1161       PVX_UTILITY_PVT.debug_message('- In Check_Req_Items API Before Created_by Check' );
1162       END IF;
1163 
1164       IF p_prgm_pmt_mode_rec.created_by = FND_API.g_miss_num OR
1165          p_prgm_pmt_mode_rec.created_by IS NULL THEN
1166          FND_MESSAGE.set_name('PV','PV_API_MISSING_REQ_COLUMN');
1167          FND_MESSAGE.set_token('COLUMN','CREATED_BY');
1168          FND_MSG_PUB.add;
1169          x_return_status := FND_API.g_ret_sts_error;
1170          RETURN;
1171       END IF;
1172 
1173 
1174       IF p_prgm_pmt_mode_rec.last_update_login = FND_API.g_miss_num OR
1175          p_prgm_pmt_mode_rec.last_update_login IS NULL THEN
1176          FND_MESSAGE.set_name('PV','PV_API_MISSING_REQ_COLUMN');
1177          FND_MESSAGE.set_token('COLUMN','LAST_UPDATE_LOGIN');
1178          FND_MSG_PUB.add;
1179          x_return_status := FND_API.g_ret_sts_error;
1180          RETURN;
1181       END IF;
1182 
1183 
1184       IF p_prgm_pmt_mode_rec.object_version_number = FND_API.g_miss_num OR
1185          p_prgm_pmt_mode_rec.object_version_number IS NULL THEN
1186          FND_MESSAGE.set_name('PV','PV_API_MISSING_REQ_COLUMN');
1187          FND_MESSAGE.set_token('COLUMN','OBJECT_VERSION_NUMBER');
1188          FND_MSG_PUB.add;
1189          x_return_status := FND_API.g_ret_sts_error;
1190          RETURN;
1191       END IF;
1192    ELSE
1193 
1194       IF p_prgm_pmt_mode_rec.program_payment_mode_id IS NULL THEN
1195          FND_MESSAGE.set_name('PV', 'PV_API_MISSING_REQ_COLUMN');
1196          FND_MESSAGE.set_token('COLUMN','PROGRAM_PAYMENT_MODE_ID');
1197          FND_MSG_PUB.add;
1198          x_return_status := FND_API.g_ret_sts_error;
1199          RETURN;
1200       END IF;
1201 
1202       IF p_prgm_pmt_mode_rec.object_version_number IS NULL THEN
1203           FND_MESSAGE.set_name('PV', 'PV_API_MISSING_REQ_COLUMN');
1204           FND_MESSAGE.set_token('COLUMN','OBJECT_VERSION_NUMBER');
1205          FND_MSG_PUB.add;
1206          x_return_status := FND_API.g_ret_sts_error;
1207          RETURN;
1208       END IF;
1209    END IF;
1210 
1211 END Check_Req_Items;
1212 
1213 
1214 
1215 PROCEDURE Check_FK_Items(
1216      p_prgm_pmt_mode_rec  IN  prgm_pmt_mode_rec_type
1217     ,x_return_status      OUT NOCOPY VARCHAR2
1218     )
1219 
1220 IS
1221 
1222 BEGIN
1223 
1224    x_return_status := FND_API.g_ret_sts_success;
1225 
1226  ----------------------- PROGRAM_ID ------------------------
1227  IF (p_prgm_pmt_mode_rec.PROGRAM_ID <> FND_API.g_miss_num
1228        AND p_prgm_pmt_mode_rec.PROGRAM_ID IS NOT NULL ) THEN
1229 
1230  -- Debug message
1231  IF (PV_DEBUG_HIGH_ON) THEN
1232 
1233  PVX_UTILITY_PVT.debug_message('In Check_FK_Items : Before PROGRAM_ID fk check : PROGRAM_ID ' || p_prgm_pmt_mode_rec.PROGRAM_ID);
1234  END IF;
1235 
1236    IF PVX_Utility_PVT.check_fk_exists(
1237          'PV_PARTNER_PROGRAM_B',                     -- Parent schema object having the primary key
1238          'PROGRAM_ID',                               -- Column name in the parent object that maps to the fk value
1239          p_prgm_pmt_mode_rec.PROGRAM_ID,             -- Value of fk to be validated against the parent object's pk column
1240          PVX_utility_PVT.g_number,                   -- datatype of fk
1241          NULL
1242    ) = FND_API.g_false
1243    THEN
1244       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1245       THEN
1246          FND_MESSAGE.set_name('PV', 'PV_NOT_A_VALID_PARTNER_PROGRAM');
1247          FND_MSG_PUB.add;
1248       END IF;
1249 
1250       x_return_status := FND_API.g_ret_sts_error;
1251       RETURN;
1252    END IF;
1253  END IF;
1254 
1255  IF (PV_DEBUG_HIGH_ON) THEN
1256 
1257 
1258 
1259  PVX_UTILITY_PVT.debug_message('In Check_FK_Items : After program_id fk check ');
1260 
1261  END IF;
1262 
1263  ----------------------- GEO_HIERARCHY_ID ------------------------
1264  IF (p_prgm_pmt_mode_rec.GEO_HIERARCHY_ID <> FND_API.g_miss_num
1265        AND p_prgm_pmt_mode_rec.GEO_HIERARCHY_ID IS NOT NULL ) THEN
1266 
1267  -- Debug message
1268  IF (PV_DEBUG_HIGH_ON) THEN
1269 
1270  PVX_UTILITY_PVT.debug_message('- In Check_FK_Items : Before GEO_HIERARCHY_ID fk check : GEO_HIERARCHY_ID ' || p_prgm_pmt_mode_rec.GEO_HIERARCHY_ID);
1271  END IF;
1272 
1273    IF PVX_Utility_PVT.check_fk_exists(
1274          'JTF_LOC_HIERARCHIES_VL',                   -- Parent schema object having the primary key
1275          'LOCATION_HIERARCHY_ID',                    -- Column name in the parent object that maps to the fk value
1276          p_prgm_pmt_mode_rec.GEO_HIERARCHY_ID,      -- Value of fk to be validated against the parent object's pk column
1277          PVX_UTILITY_PVT.g_number,                   -- datatype of fk
1278          NULL
1279    ) = FND_API.g_false
1280    THEN
1281       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1282       THEN
1283          FND_MESSAGE.set_name('PV', 'PV_NOT_A_GEO_HIERARCHY');
1284          FND_MSG_PUB.add;
1285       END IF;
1286 
1287       x_return_status := FND_API.g_ret_sts_error;
1288       RETURN;
1289    END IF;
1290  END IF;
1291 
1292 END Check_FK_Items;
1293 
1294 
1295 
1296 PROCEDURE Check_Lookup_Items(
1297      p_prgm_pmt_mode_rec  IN  prgm_pmt_mode_rec_type
1298     ,x_return_status      OUT NOCOPY VARCHAR2
1299     )
1300 IS
1301 BEGIN
1302    x_return_status := FND_API.g_ret_sts_success;
1303 
1304    IF p_prgm_pmt_mode_rec.mode_type <> FND_API.g_miss_char  THEN
1305 
1306       IF PVX_Utility_PVT.check_lookup_exists(
1307             'PV_LOOKUPS',      -- Look up Table Name
1308             'PV_MODE_TYPE',    -- Lookup Type
1309             p_prgm_pmt_mode_rec.mode_type       -- Lookup Code
1310          ) = FND_API.g_false
1311       THEN
1312          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1313          THEN
1314             FND_MESSAGE.set_name('PV', 'PV_NOT_A_VALID_MODE_TYPE');
1315             FND_MSG_PUB.add;
1316          END IF;
1317          x_return_status := FND_API.g_ret_sts_error;
1318          RETURN;
1319 
1320       END IF;
1321    END IF;
1322    -- Debug message
1323    IF (PV_DEBUG_HIGH_ON) THEN
1324 
1325    PVX_UTILITY_PVT.debug_message('- In Check_Lookup_Items : After lookup check. x_return_status = '||x_return_status);
1326    END IF;
1327 
1328 END Check_Lookup_Items;
1329 
1330 
1331 
1332 
1333 PROCEDURE Check_Items (
1334      p_prgm_pmt_mode_rec      IN    prgm_pmt_mode_rec_type
1335     ,p_validation_mode        IN    VARCHAR2
1336     ,x_return_status          OUT NOCOPY   VARCHAR2
1337     )
1338 
1339 IS
1340 
1341   l_api_name    CONSTANT VARCHAR2(30) := 'Check_Items';
1342   l_full_name   CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
1343 
1344 BEGIN
1345 
1346    -- Debug message
1347    IF (PV_DEBUG_HIGH_ON) THEN
1348 
1349    PVX_UTILITY_PVT.debug_message('- Check_Items API prior to Check_Req_Items call');
1350    END IF;
1351 
1352    -- Check Items Required/NOT NULL API calls
1353    Check_Req_Items(
1354        p_prgm_pmt_mode_rec  => p_prgm_pmt_mode_rec
1355       ,p_validation_mode    => p_validation_mode
1356       ,x_return_status      => x_return_status
1357       );
1358 
1359    -- Debug message
1360    IF (PV_DEBUG_HIGH_ON) THEN
1361 
1362    PVX_UTILITY_PVT.debug_message('- After Check_Req_Items. return status = ' || x_return_status);
1363    END IF;
1364 
1365    IF x_return_status <> FND_API.g_ret_sts_success THEN
1366       RETURN;
1367    END IF;
1368 
1369    -- Debug message
1370    IF (PV_DEBUG_HIGH_ON) THEN
1371 
1372    PVX_UTILITY_PVT.debug_message('- Check_Items API prior to Check_UK_Items call');
1373    END IF;
1374 
1375     -- Check Items Uniqueness API calls
1376    Check_UK_Items(
1377        p_prgm_pmt_mode_rec  => p_prgm_pmt_mode_rec
1378       ,p_validation_mode    => p_validation_mode
1379       ,x_return_status      => x_return_status
1380       );
1381 
1382    -- Debug message
1383    IF (PV_DEBUG_HIGH_ON) THEN
1384 
1385    PVX_UTILITY_PVT.debug_message('- After Check_UK_Items. return status = ' || x_return_status);
1386    END IF;
1387 
1388    IF x_return_status <> FND_API.g_ret_sts_success THEN
1389       RETURN;
1390    END IF;
1391 
1392    -- Debug message
1393    IF (PV_DEBUG_HIGH_ON) THEN
1394 
1395    PVX_UTILITY_PVT.debug_message('- Check_Items API prior to Check_FK_Items call');
1396    END IF;
1397 
1398    -- Check Items Foreign Keys API calls
1399    Check_FK_Items(
1400        p_prgm_pmt_mode_rec  => p_prgm_pmt_mode_rec
1401       ,x_return_status      => x_return_status
1402       );
1403 
1404    -- Debug message
1405    IF (PV_DEBUG_HIGH_ON) THEN
1406 
1407    PVX_UTILITY_PVT.debug_message('- After Check_FK_Items. return status = ' || x_return_status);
1408    END IF;
1409 
1410    IF x_return_status <> FND_API.g_ret_sts_success THEN
1411       RETURN;
1412    END IF;
1413 
1414    -- Debug message
1415    IF (PV_DEBUG_HIGH_ON) THEN
1416 
1417    PVX_UTILITY_PVT.debug_message('- Check_Items API prior to Check_Lookup_Items call');
1418    END IF;
1419 
1420    -- Check Items Lookups
1421    Check_Lookup_Items(
1422        p_prgm_pmt_mode_rec  => p_prgm_pmt_mode_rec
1423       ,x_return_status      => x_return_status
1424       );
1425 
1426    -- Debug message
1427    IF (PV_DEBUG_HIGH_ON) THEN
1428 
1429    PVX_UTILITY_PVT.debug_message('- After Check_Lookup_Items. return status = ' || x_return_status);
1430    END IF;
1431 
1432    IF x_return_status <> FND_API.g_ret_sts_success THEN
1433       RETURN;
1434    END IF;
1435 
1436 END Check_Items;
1437 
1438 
1439 
1440 PROCEDURE Complete_Rec (
1441     p_prgm_pmt_mode_rec  IN  prgm_pmt_mode_rec_type
1442    ,x_complete_rec       OUT NOCOPY prgm_pmt_mode_rec_type
1443    )
1444 
1445 IS
1446 
1447    CURSOR c_complete IS
1448       SELECT *
1449       FROM PV_PROGRAM_PAYMENT_MODE
1450       WHERE program_payment_mode_id = p_prgm_pmt_mode_rec.program_payment_mode_id;
1451 
1452    l_prgm_pmt_mode_rec c_complete%ROWTYPE;
1453 
1454 BEGIN
1455 
1456    x_complete_rec := p_prgm_pmt_mode_rec;
1457 
1458 
1459    OPEN c_complete;
1460    FETCH c_complete INTO l_prgm_pmt_mode_rec;
1461    CLOSE c_complete;
1462 
1463    -- Debug message
1464    IF (PV_DEBUG_HIGH_ON) THEN
1465 
1466    PVX_UTILITY_PVT.debug_message('- In Complete_Rec API prior to assigning program_id');
1467    END IF;
1468 
1469    -- program_payment_mode_id
1470 
1471    -- IF p_prgm_pmt_mode_rec.program_payment_mode_id = FND_API.g_miss_num THEN
1472 
1473    IF p_prgm_pmt_mode_rec.program_payment_mode_id IS NULL THEN
1474       x_complete_rec.program_payment_mode_id := l_prgm_pmt_mode_rec.program_payment_mode_id;
1475    END IF;
1476 
1477    -- program_id
1478    -- IF p_prgm_pmt_mode_rec.program_id = FND_API.g_miss_num THEN
1479 
1480    IF p_prgm_pmt_mode_rec.program_id IS NULL THEN
1481       x_complete_rec.program_id := l_prgm_pmt_mode_rec.program_id;
1482    END IF;
1483 
1484    -- geo_hierarchy_id
1485    -- IF p_prgm_pmt_mode_rec.geo_hierarchy_id = FND_API.g_miss_num THEN
1486 
1487    IF p_prgm_pmt_mode_rec.geo_hierarchy_id IS NULL THEN
1488       x_complete_rec.geo_hierarchy_id := l_prgm_pmt_mode_rec.geo_hierarchy_id;
1489    END IF;
1490 
1491    -- mode_of_payment
1492    -- IF p_prgm_pmt_mode_rec.mode_of_payment = FND_API.g_miss_char THEN
1493 
1494    IF p_prgm_pmt_mode_rec.mode_of_payment IS NULL THEN
1495       x_complete_rec.mode_of_payment := l_prgm_pmt_mode_rec.mode_of_payment;
1496    END IF;
1497 
1498    -- mode_type
1499    -- IF p_prgm_pmt_mode_rec.mode_type = FND_API.g_miss_char THEN
1500 
1501    IF p_prgm_pmt_mode_rec.mode_type IS NULL THEN
1502       x_complete_rec.mode_type := l_prgm_pmt_mode_rec.mode_type;
1503    END IF;
1504 
1505    -- last_update_date
1506    -- IF p_prgm_pmt_mode_rec.last_update_date = FND_API.g_miss_date THEN
1507 
1508    IF p_prgm_pmt_mode_rec.last_update_date IS NULL THEN
1509       x_complete_rec.last_update_date := l_prgm_pmt_mode_rec.last_update_date;
1510    END IF;
1511 
1512    -- last_updated_by
1513    -- IF p_prgm_pmt_mode_rec.last_updated_by = FND_API.g_miss_num THEN
1514 
1515    IF p_prgm_pmt_mode_rec.last_updated_by IS NULL THEN
1516       x_complete_rec.last_updated_by := l_prgm_pmt_mode_rec.last_updated_by;
1517    END IF;
1518 
1519    -- creation_date
1520    -- IF p_prgm_pmt_mode_rec.creation_date = FND_API.g_miss_date THEN
1521 
1522    IF p_prgm_pmt_mode_rec.creation_date IS NULL THEN
1523       x_complete_rec.creation_date := l_prgm_pmt_mode_rec.creation_date;
1524    END IF;
1525 
1526    -- created_by
1527    -- IF p_prgm_pmt_mode_rec.created_by = FND_API.g_miss_num THEN
1528 
1529    IF p_prgm_pmt_mode_rec.created_by IS NULL THEN
1530       x_complete_rec.created_by := l_prgm_pmt_mode_rec.created_by;
1531    END IF;
1532 
1533    -- last_update_login
1534    -- IF p_prgm_pmt_mode_rec.last_update_login = FND_API.g_miss_num THEN
1535 
1536    IF p_prgm_pmt_mode_rec.last_update_login IS NULL THEN
1537       x_complete_rec.last_update_login := l_prgm_pmt_mode_rec.last_update_login;
1538    END IF;
1539 
1540    -- object_version_number
1541    -- IF p_prgm_pmt_mode_rec.object_version_number = FND_API.g_miss_num THEN
1542 
1543    IF p_prgm_pmt_mode_rec.object_version_number IS NULL THEN
1544       x_complete_rec.object_version_number := l_prgm_pmt_mode_rec.object_version_number;
1545    END IF;
1546 
1547 END Complete_Rec;
1548 
1549 
1550 
1551 PROCEDURE Validate_Prgm_Pmt_Mode(
1552      p_api_version_number         IN   NUMBER
1553     ,p_init_msg_list              IN   VARCHAR2         := FND_API.G_FALSE
1554     ,p_validation_level           IN   NUMBER           := FND_API.G_VALID_LEVEL_FULL
1555     ,p_prgm_pmt_mode_rec          IN   prgm_pmt_mode_rec_type
1556     ,p_validation_mode            IN   VARCHAR2       := JTF_PLSQL_API.G_UPDATE
1557     ,x_return_status              OUT NOCOPY  VARCHAR2
1558     ,x_msg_count                  OUT NOCOPY  NUMBER
1559     ,x_msg_data                   OUT NOCOPY  VARCHAR2
1560     )
1561 
1562 IS
1563 
1564 l_api_name                  CONSTANT VARCHAR2(30) := 'Validate_Prgm_Pmt_Mode';
1565 l_full_name                 CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
1566 l_api_version_number        CONSTANT NUMBER       := 1.0;
1567 l_object_version_number              NUMBER;
1568 l_prgm_pmt_mode_rec                  PV_PRGM_PMT_MODE_PVT.prgm_pmt_mode_rec_type;
1569 
1570 BEGIN
1571 
1572       -- Standard Start of API savepoint
1573       SAVEPOINT Validate_Prgm_Pmt_Mode_;
1574 
1575       -- Initialize API return status to SUCCESS
1576       x_return_status := FND_API.G_RET_STS_SUCCESS;
1577 
1578       -- Standard call to check for call compatibility.
1579       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
1580                                            p_api_version_number,
1581                                            l_api_name,
1582                                            G_PKG_NAME)
1583       THEN
1584           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1585       END IF;
1586 
1587       -- Initialize message list if p_init_msg_list is set to TRUE.
1588       IF FND_API.to_Boolean( p_init_msg_list ) THEN
1589          FND_MSG_PUB.initialize;
1590       END IF;
1591 
1592        -- Debug Message
1593       IF (PV_DEBUG_HIGH_ON) THEN
1594 
1595       PVX_UTILITY_PVT.debug_message('  Private API: ' || l_full_name || ' - start');
1596       END IF;
1597 
1598      IF p_validation_level >= JTF_PLSQL_API.g_valid_level_item THEN
1599      -- Debug message
1600      IF (PV_DEBUG_HIGH_ON) THEN
1601 
1602      PVX_UTILITY_PVT.debug_message('  Private API: ' || l_full_name || ' - prior to Check_Items call');
1603      END IF;
1604 
1605               Check_Items(
1606                   p_prgm_pmt_mode_rec         => p_prgm_pmt_mode_rec
1607                  ,p_validation_mode           => p_validation_mode
1608                  ,x_return_status             => x_return_status
1609                  );
1610 
1611               -- Debug message
1612               IF (PV_DEBUG_HIGH_ON) THEN
1613 
1614               PVX_UTILITY_PVT.debug_message('  Private API: ' || l_full_name || ' - return status after Check_Items call ' || x_return_status);
1615               END IF;
1616 
1617               IF x_return_status = FND_API.G_RET_STS_ERROR THEN
1618                   RAISE FND_API.G_EXC_ERROR;
1619               ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1620                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1621               END IF;
1622       END IF;
1623 
1624       IF p_validation_level >= JTF_PLSQL_API.g_valid_level_item THEN
1625          Validate_Rec(
1626             p_api_version_number     => 1.0
1627            ,p_init_msg_list          => FND_API.G_FALSE
1628            ,x_return_status          => x_return_status
1629            ,x_msg_count              => x_msg_count
1630            ,x_msg_data               => x_msg_data
1631            ,p_prgm_pmt_mode_rec      => l_prgm_pmt_mode_rec
1632            );
1633 
1634               IF x_return_status = FND_API.G_RET_STS_ERROR THEN
1635                  RAISE FND_API.G_EXC_ERROR;
1636               ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1637                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1638               END IF;
1639       END IF;
1640 
1641 
1642       -- Debug Message
1643       IF (PV_DEBUG_HIGH_ON) THEN
1644 
1645       PVX_UTILITY_PVT.debug_message('Private API: ' || l_full_name || ' - end');
1646       END IF;
1647 
1648       -- Standard call to get message count and if count is 1, get message info.
1649       FND_MSG_PUB.Count_And_Get
1650         ( p_encoded => FND_API.G_FALSE,
1651          p_count          =>   x_msg_count,
1652          p_data           =>   x_msg_data
1653       );
1654 
1655 EXCEPTION
1656    WHEN FND_API.G_EXC_ERROR THEN
1657      ROLLBACK TO Validate_Prgm_Pmt_Mode_;
1658      x_return_status := FND_API.G_RET_STS_ERROR;
1659      -- Standard call to get message count and if count=1, get the message
1660      FND_MSG_PUB.Count_And_Get (
1661             p_encoded => FND_API.G_FALSE
1662            ,p_count   => x_msg_count
1663            ,p_data    => x_msg_data
1664            );
1665 
1666    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1667      ROLLBACK TO Validate_Prgm_Pmt_Mode_;
1668      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1669      -- Standard call to get message count and if count=1, get the message
1670      FND_MSG_PUB.Count_And_Get (
1671             p_encoded => FND_API.G_FALSE
1672            ,p_count   => x_msg_count
1673            ,p_data    => x_msg_data
1674            );
1675 
1676    WHEN OTHERS THEN
1677      ROLLBACK TO Validate_Prgm_Pmt_Mode_;
1678      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1679      IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1680      THEN
1681         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1682      END IF;
1683      -- Standard call to get message count and if count=1, get the message
1684      FND_MSG_PUB.Count_And_Get (
1685             p_encoded => FND_API.G_FALSE
1686            ,p_count   => x_msg_count
1687            ,p_data    => x_msg_data
1688            );
1689 
1690 End Validate_Prgm_Pmt_Mode;
1691 
1692 
1693 
1694 PROCEDURE Validate_Rec(
1695      p_api_version_number         IN   NUMBER
1696     ,p_init_msg_list              IN   VARCHAR2     := FND_API.G_FALSE
1697     ,x_return_status              OUT NOCOPY  VARCHAR2
1698     ,x_msg_count                  OUT NOCOPY  NUMBER
1699     ,x_msg_data                   OUT NOCOPY  VARCHAR2
1700     ,p_prgm_pmt_mode_rec          IN   prgm_pmt_mode_rec_type
1701     ,p_validation_mode            IN   VARCHAR2
1702     )
1703 IS
1704 BEGIN
1705       -- Initialize message list if p_init_msg_list is set to TRUE.
1706       IF FND_API.to_Boolean( p_init_msg_list )
1707       THEN
1708          FND_MSG_PUB.initialize;
1709       END IF;
1710 
1711       -- Initialize API return status to SUCCESS
1712       x_return_status := FND_API.G_RET_STS_SUCCESS;
1713 
1714       -- Hint: Validate data
1715       -- If data not valid
1716       -- THEN
1717       -- x_return_status := FND_API.G_RET_STS_ERROR;
1718 
1719       -- Debug Message
1720       IF (PV_DEBUG_HIGH_ON) THEN
1721 
1722       PVX_UTILITY_PVT.debug_message('Private API: Validate_dm_model_rec');
1723       END IF;
1724 
1725       -- Standard call to get message count and if count is 1, get message info.
1726       FND_MSG_PUB.Count_And_Get (
1727           p_count          =>   x_msg_count
1728          ,p_data           =>   x_msg_data
1729          );
1730 
1731 END Validate_Rec;
1732 
1733 END PV_PRGM_PMT_MODE_PVT;