DBA Data[Home] [Help]

PACKAGE BODY: APPS.AS_OPP_CONTACT_PVT

Source


1 PACKAGE BODY AS_OPP_CONTACT_PVT as
2 /* $Header: asxvlcnb.pls 120.4 2006/08/10 11:29:18 mohali noship $ */
3 -- Start of Comments
4 -- Package name     : AS_OPP_CONTACT_PVT
5 -- Purpose          :
6 -- History          :
7 -- NOTE             :
8 -- End of Comments
9 
10 
11 G_PKG_NAME CONSTANT VARCHAR2(30):= 'AS_OPP_CONTACT_PVT';
12 G_FILE_NAME CONSTANT VARCHAR2(12) := 'asxvop3b.pls';
13 
14 -- Hint: Primary key needs to be returned.
15 PROCEDURE Create_opp_contacts(
16     P_Api_Version_Number         IN   NUMBER,
17     P_Init_Msg_List              IN   VARCHAR2    := FND_API.G_FALSE,
18     P_Commit                     IN   VARCHAR2    := FND_API.G_FALSE,
19     p_validation_level           IN   NUMBER      := FND_API.G_VALID_LEVEL_FULL,
20     P_Check_Access_Flag          IN   VARCHAR2    := FND_API.G_FALSE,
21     P_Admin_Flag                 IN   VARCHAR2    := FND_API.G_FALSE,
22     P_Admin_Group_Id             IN   NUMBER,
23     P_Identity_Salesforce_Id     IN   VARCHAR2    := FND_API.G_FALSE,
24     P_profile_tbl                IN   AS_UTILITY_PUB.PROFILE_TBL_TYPE,
25     P_Partner_Cont_Party_id      IN   NUMBER      := FND_API.G_MISS_NUM,
26     P_Contact_Tbl                IN   AS_OPPORTUNITY_PUB.Contact_Tbl_Type  :=
27                                         AS_OPPORTUNITY_PUB.G_MISS_Contact_Tbl,
28     X_contact_out_tbl            OUT NOCOPY  AS_OPPORTUNITY_PUB.contact_out_tbl_type,
29     X_Return_Status              OUT NOCOPY  VARCHAR2,
30     X_Msg_Count                  OUT NOCOPY  NUMBER,
31     X_Msg_Data                   OUT NOCOPY  VARCHAR2
32     )
33 
34  IS
35 l_api_name                  CONSTANT VARCHAR2(30) := 'Create_opp_contacts';
36 l_api_version_number        CONSTANT NUMBER   := 2.0;
37 l_return_status_full        VARCHAR2(1);
38 l_identity_sales_member_rec AS_SALES_MEMBER_PUB.Sales_member_rec_Type;
39 l_CONTACT_Rec               AS_OPPORTUNITY_PUB.CONTACT_Rec_Type;
40 l_LEAD_CONTACT_ID           NUMBER;
41 l_line_count                CONSTANT NUMBER := P_CONTACT_Tbl.count;
42 l_update_access_flag         VARCHAR2(1);
43 l_access_profile_rec         AS_ACCESS_PUB.Access_Profile_Rec_Type;
44 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
45 l_module CONSTANT VARCHAR2(255) := 'as.plsql.lcnpv.Create_opp_contacts';
46 
47     Cursor  C_Get_Primary_Contact ( c_LEAD_ID NUMBER ) IS
48        SELECT   lead_contact_id
49        FROM     as_lead_contacts
50        WHERE    lead_id = c_LEAD_ID
51         --and	enabled_flag = 'Y' fix for 5285071
52         and	primary_contact_flag = 'Y';
53 
54  BEGIN
55       -- Standard Start of API savepoint
56       SAVEPOINT CREATE_OPP_CONTACTS_PVT;
57 
58       -- Standard call to check for call compatibility.
59       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
60                                          p_api_version_number,
61                                            l_api_name,
62                                            G_PKG_NAME)
63       THEN
64           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
65       END IF;
66 
67 
68       -- Initialize message list if p_init_msg_list is set to TRUE.
69       IF FND_API.to_Boolean( p_init_msg_list )
70       THEN
71           FND_MSG_PUB.initialize;
72       END IF;
73 
74 
75       -- Debug Message
76       IF l_debug THEN
77       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
78                                    'Private API: ' || l_api_name || ' start');
79       END IF;
80 
81       -- Initialize API return status to SUCCESS
82       x_return_status := FND_API.G_RET_STS_SUCCESS;
83 
84       --
85       -- API body
86       --
87 
88       -- Un-comment the following statements when AS_CALLOUT_PKG is ready.
89       /*
90       -- if profile AS_PRE_CUSTOM_ENABLED is set to 'Y', callout procedure is
91       -- invoked for customization purpose
92       IF(FND_PROFILE.VALUE('AS_PRE_CUSTOM_ENABLED')='Y')
93       THEN
94           AS_CALLOUT_PKG.Create_opp_contacts_BC(
95                   p_api_version_number   =>  2.0,
96                   p_init_msg_list        =>  FND_API.G_FALSE,
97                   p_commit               =>  FND_API.G_FALSE,
98                   p_validation_level     =>  p_validation_level,
99                   P_Contact_Rec      =>  P_Contact_Rec,
100           -- Hint: Add detail tables as parameter lists if it's master-detail
101           --       relationship.
102                   x_return_status        =>  x_return_status,
103                   x_msg_count            =>  x_msg_count,
104                   x_msg_data             =>  x_msg_data);
105       END IF;
106       */
107 
108 
109       -- ******************************************************************
110       -- Validate Environment
111       -- ******************************************************************
112       IF FND_GLOBAL.User_Id IS NULL
113       THEN
114           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
115           THEN
116               FND_MESSAGE.Set_Name(' + appShortName +',
117                                    'UT_CANNOT_GET_PROFILE_VALUE');
118               FND_MESSAGE.Set_Token('PROFILE', 'USER_ID', FALSE);
119               FND_MSG_PUB.ADD;
120           END IF;
121           RAISE FND_API.G_EXC_ERROR;
122       END IF;
123 
124       IF(P_Check_Access_Flag = 'Y') THEN
125     AS_SALES_ORG_MANAGER_PVT.Get_CurrentUser(
126                 p_api_version_number    => 2.0
127                 ,p_init_msg_list        => p_init_msg_list
128                 ,p_salesforce_id    => p_identity_salesforce_id
129                 ,p_admin_group_id   => p_admin_group_id
130                 ,x_return_status    => x_return_status
131                 ,x_msg_count        => x_msg_count
132                 ,x_msg_data         => x_msg_data
133                 ,x_sales_member_rec     => l_identity_sales_member_rec);
134 
135         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
136             IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
137             IF l_debug THEN
138                AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
139             'Private API: Get_CurrentUser fail');
140         END IF;
141             END IF;
142             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
143         END IF;
144 
145 
146         -- Call Get_Access_Profiles to get access_profile_rec
147         AS_OPPORTUNITY_PUB.Get_Access_Profiles(
148             p_profile_tbl         => p_profile_tbl,
149             x_access_profile_rec  => l_access_profile_rec);
150 
151         AS_ACCESS_PUB.has_updateOpportunityAccess
152          (   p_api_version_number   => 2.0
153         ,p_init_msg_list        => p_init_msg_list
154         ,p_validation_level     => p_validation_level
155         ,p_access_profile_rec   => l_access_profile_rec
156         ,p_admin_flag           => p_admin_flag
157         ,p_admin_group_id   => p_admin_group_id
158         ,p_person_id        => l_identity_sales_member_rec.employee_person_id
159         ,p_opportunity_id   => p_contact_tbl(1).LEAD_ID
160         ,p_check_access_flag    => p_check_access_flag
161         ,p_identity_salesforce_id => p_identity_salesforce_id
162         ,p_partner_cont_party_id  => p_partner_cont_party_id
163         ,x_return_status    => x_return_status
164         ,x_msg_count        => x_msg_count
165         ,x_msg_data     => x_msg_data
166         ,x_update_access_flag   => l_update_access_flag );
167 
168         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
169             IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
170             IF l_debug THEN
171                 AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
172             'has_updateOpportunityAccess fail');
173         END IF;
174             END IF;
175             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
176         END IF;
177 
178         IF (l_update_access_flag <> 'Y') THEN
179             IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
180             FND_MESSAGE.Set_Name('AS', 'API_NO_UPDATE_PRIVILEGE');
181             FND_MESSAGE.Set_Token('INFO', 'CUSTOMER_ID,OPPORTUNITY_ID,SALESFORCE_ID', FALSE);
182             FND_MSG_PUB.ADD;
183             END IF;
184             RAISE FND_API.G_EXC_ERROR;
185     END IF;
186       END IF;
187 
188       FOR l_curr_row IN 1..l_line_count LOOP
189          X_Contact_out_tbl(l_curr_row).return_status:=FND_API.G_RET_STS_SUCCESS;
190 
191          -- Progress Message
192          --
193          IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS)
194          THEN
195              FND_MESSAGE.Set_Name ('AS', 'API_PROCESSING_ROW');
196              FND_MESSAGE.Set_Token ('ROW', 'AS_LEAD_CONTACT', TRUE);
197              FND_MESSAGE.Set_Token ('RECORD_NUM', to_char(l_curr_row), FALSE);
198              FND_MSG_PUB.Add;
199          END IF;
200 
201          l_Contact_rec := P_Contact_Tbl(l_curr_row);
202 
203          -- Bug 3571569
204          -- Initialize flag to 'N' if null
205          IF(l_Contact_rec.PRIMARY_CONTACT_FLAG is NULL OR
206             l_Contact_rec.PRIMARY_CONTACT_FLAG = FND_API.G_MISS_CHAR )
207          THEN
208             l_Contact_rec.PRIMARY_CONTACT_FLAG := 'N';
209          END IF;
210 
211          -- Debug message
212          IF l_debug THEN
213          AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
214                                           'Private API: Validate_opp_contact');
215          END IF;
216 
217          -- Invoke validation procedures
218          Validate_opp_contact(
219                  p_init_msg_list    => FND_API.G_FALSE,
220                  p_validation_level => p_validation_level,
221                  p_validation_mode  => AS_UTILITY_PVT.G_CREATE,
222                  P_Contact_Rec  =>  l_Contact_Rec,
223                  x_return_status    => x_return_status,
224                  x_msg_count        => x_msg_count,
225                  x_msg_data         => x_msg_data);
226 
227 
228          IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
229              -- Debug message
230              IF l_debug THEN
231              AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
232                               'Private API: Validate_opp_Contact fail');
233          END IF;
234              RAISE FND_API.G_EXC_ERROR;
235          END IF;
236 
237 
238          -- Debug Message
239          IF l_debug THEN
240          AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
241                                    'Private API: Calling create table handler');
242          END IF;
243 	 -- the following condition and updation added for Bug#4641320
244         IF l_Contact_rec.PRIMARY_CONTACT_FLAG = 'Y'
245         THEN
246             OPEN C_Get_Primary_Contact(l_Contact_rec.LEAD_ID);
247             FETCH C_Get_Primary_Contact into l_lead_contact_id;
248 
249             IF C_Get_Primary_Contact%FOUND THEN
250                 UPDATE AS_LEAD_CONTACTS
251                 SET primary_contact_flag = 'N'
252                 WHERE lead_contact_id = l_lead_contact_id;
253             END IF;
254             CLOSE C_Get_Primary_Contact;
255         END IF;
256 
257          l_LEAD_CONTACT_ID :=  l_Contact_rec.LEAD_CONTACT_ID;
258 
259          -- Invoke table handler(AS_LEAD_CONTACTS_PKG.Insert_Row)
260          AS_LEAD_CONTACTS_PKG.Insert_Row(
261              px_LEAD_CONTACT_ID  => l_LEAD_CONTACT_ID,
262              p_LEAD_ID  => l_Contact_rec.LEAD_ID,
263              p_CONTACT_ID  => l_Contact_rec.CONTACT_ID,
264              p_LAST_UPDATE_DATE  => SYSDATE,
265              p_LAST_UPDATED_BY  => FND_GLOBAL.USER_ID,
266              p_CREATION_DATE  => SYSDATE,
267              p_CREATED_BY  => FND_GLOBAL.USER_ID,
268              p_LAST_UPDATE_LOGIN  => FND_GLOBAL.CONC_LOGIN_ID,
269              p_REQUEST_ID  => l_Contact_rec.REQUEST_ID,
270              p_PROGRAM_APPLICATION_ID  => l_Contact_rec.PROGRAM_APPLICATION_ID,
271              p_PROGRAM_ID  => l_Contact_rec.PROGRAM_ID,
272              p_PROGRAM_UPDATE_DATE  => l_Contact_rec.PROGRAM_UPDATE_DATE,
273              p_ENABLED_FLAG  => l_Contact_rec.ENABLED_FLAG,
274              p_CUSTOMER_ID  => l_Contact_rec.CUSTOMER_ID,
275              p_ADDRESS_ID  => l_Contact_rec.ADDRESS_ID,
276              p_RANK  => l_Contact_rec.RANK,
277              p_PHONE_ID  => l_Contact_rec.PHONE_ID,
278              p_ATTRIBUTE_CATEGORY  => l_Contact_rec.ATTRIBUTE_CATEGORY,
279              p_ATTRIBUTE1  => l_Contact_rec.ATTRIBUTE1,
280              p_ATTRIBUTE2  => l_Contact_rec.ATTRIBUTE2,
281              p_ATTRIBUTE3  => l_Contact_rec.ATTRIBUTE3,
282              p_ATTRIBUTE4  => l_Contact_rec.ATTRIBUTE4,
283              p_ATTRIBUTE5  => l_Contact_rec.ATTRIBUTE5,
284              p_ATTRIBUTE6  => l_Contact_rec.ATTRIBUTE6,
285              p_ATTRIBUTE7  => l_Contact_rec.ATTRIBUTE7,
286              p_ATTRIBUTE8  => l_Contact_rec.ATTRIBUTE8,
287              p_ATTRIBUTE9  => l_Contact_rec.ATTRIBUTE9,
288              p_ATTRIBUTE10  => l_Contact_rec.ATTRIBUTE10,
289              p_ATTRIBUTE11  => l_Contact_rec.ATTRIBUTE11,
290              p_ATTRIBUTE12  => l_Contact_rec.ATTRIBUTE12,
291              p_ATTRIBUTE13  => l_Contact_rec.ATTRIBUTE13,
292              p_ATTRIBUTE14  => l_Contact_rec.ATTRIBUTE14,
293              p_ATTRIBUTE15  => l_Contact_rec.ATTRIBUTE15,
294              p_ORG_ID  => l_Contact_rec.ORG_ID,
295              p_PRIMARY_CONTACT_FLAG  => l_Contact_rec.PRIMARY_CONTACT_FLAG,
296              p_ROLE  => l_Contact_rec.ROLE,
297              p_CONTACT_PARTY_ID  => l_Contact_rec.CONTACT_PARTY_ID);
298 
299          X_Contact_out_tbl(l_curr_row).LEAD_CONTACT_ID := l_LEAD_CONTACT_ID;
300          X_Contact_out_tbl(l_curr_row).return_status := x_return_status;
301 
302          IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
303              RAISE FND_API.G_EXC_ERROR;
304          END IF;
305 
306     IF l_debug THEN
307          AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
308                 'Private API: Created lead_contact_id = ' || l_LEAD_CONTACT_ID);
309         END IF;
310 
311       END LOOP;
312       --
313       -- End of API body
314       --
315 
316       -- Standard check for p_commit
317       IF FND_API.to_Boolean( p_commit )
318       THEN
319           COMMIT WORK;
320       END IF;
321 
322 
323       -- Debug Message
324       IF l_debug THEN
325       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
326                                    'Private API: ' || l_api_name || ' end');
327 
328       END IF;
329       -- Standard call to get message count and if count is 1, get message info.
330       FND_MSG_PUB.Count_And_Get
331       (  p_count          =>   x_msg_count,
332          p_data           =>   x_msg_data
333       );
334 
335       -- Un-comment the following statements when AS_CALLOUT_PKG is ready.
336       /*
337       -- if profile AS_POST_CUSTOM_ENABLED is set to 'Y', callout procedure is
338       -- invoked for customization purpose
339       IF(FND_PROFILE.VALUE('AS_POST_CUSTOM_ENABLED')='Y')
340       THEN
341           AS_CALLOUT_PKG.Create_opp_contacts_AC(
342                   p_api_version_number   =>  2.0,
343                   p_init_msg_list        =>  FND_API.G_FALSE,
344                   p_commit               =>  FND_API.G_FALSE,
345                   p_validation_level     =>  p_validation_level,
346                   P_Contact_Rec      =>  P_Contact_Rec,
347           -- Hint: Add detail tables as parameter lists if it's master-detail
348           --       relationship.
349                   x_return_status        =>  x_return_status,
350                   x_msg_count            =>  x_msg_count,
351                   x_msg_data             =>  x_msg_data);
352       END IF;
353       */
354 
355       EXCEPTION
356           WHEN FND_API.G_EXC_ERROR THEN
357               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
358                    P_MODULE => l_module
359                   ,P_API_NAME => L_API_NAME
360                   ,P_PKG_NAME => G_PKG_NAME
361                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR
362                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
363                   ,X_MSG_COUNT => X_MSG_COUNT
364                   ,X_MSG_DATA => X_MSG_DATA
365                   ,X_RETURN_STATUS => X_RETURN_STATUS);
366 
367           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
368               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
369                    P_MODULE => l_module
370                   ,P_API_NAME => L_API_NAME
371                   ,P_PKG_NAME => G_PKG_NAME
372                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
373                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
374                   ,X_MSG_COUNT => X_MSG_COUNT
375                   ,X_MSG_DATA => X_MSG_DATA
376                   ,X_RETURN_STATUS => X_RETURN_STATUS);
377 
378           WHEN OTHERS THEN
379               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
380                    P_MODULE => l_module
381                   ,P_API_NAME => L_API_NAME
382                   ,P_PKG_NAME => G_PKG_NAME
383                   ,P_EXCEPTION_LEVEL => AS_UTILITY_PVT.G_EXC_OTHERS
384                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
385                   ,X_MSG_COUNT => X_MSG_COUNT
386                   ,X_MSG_DATA => X_MSG_DATA
387                   ,X_RETURN_STATUS => X_RETURN_STATUS);
388 End Create_opp_contacts;
389 
390 
391 -- Hint: Add corresponding update detail table procedures if it's master-detail
392 -- relationship.
393 PROCEDURE Update_opp_contacts(
394     P_Api_Version_Number         IN   NUMBER,
395     P_Init_Msg_List              IN   VARCHAR2    := FND_API.G_FALSE,
396     P_Commit                     IN   VARCHAR2    := FND_API.G_FALSE,
397     p_validation_level           IN   NUMBER      := FND_API.G_VALID_LEVEL_FULL,
398     P_Check_Access_Flag          IN   VARCHAR2    := FND_API.G_FALSE,
399     P_Admin_Flag                 IN   VARCHAR2    := FND_API.G_FALSE,
400     P_Admin_Group_Id             IN   NUMBER,
401     P_Identity_Salesforce_Id     IN   NUMBER,
402     P_profile_tbl                IN   AS_UTILITY_PUB.PROFILE_TBL_TYPE,
403     P_Partner_Cont_Party_id      IN   NUMBER      := FND_API.G_MISS_NUM,
404     P_Contact_Tbl                IN   AS_OPPORTUNITY_PUB.Contact_Tbl_Type,
405     X_contact_out_tbl            OUT NOCOPY  AS_OPPORTUNITY_PUB.contact_out_tbl_type,
406     X_Return_Status              OUT NOCOPY  VARCHAR2,
407     X_Msg_Count                  OUT NOCOPY  NUMBER,
408     X_Msg_Data                   OUT NOCOPY  VARCHAR2
409     )
410 
411  IS
412 Cursor C_Get_opp_contact(c_LEAD_CONTACT_ID Number) IS
413     Select LAST_UPDATE_DATE
414     From  AS_LEAD_CONTACTS
415     WHERE LEAD_CONTACT_ID = c_LEAD_CONTACT_ID
416     For Update NOWAIT;
417 l_api_name                    CONSTANT VARCHAR2(30) := 'Update_opp_contacts';
418 l_api_version_number          CONSTANT NUMBER   := 2.0;
419 -- Local Variables
420 l_identity_sales_member_rec   AS_SALES_MEMBER_PUB.Sales_member_rec_Type;
421 --l_ref_Contact_rec             AS_OPPORTUNITY_PUB.Contact_Rec_Type;
422 l_rowid                       ROWID;
423 l_Contact_Rec                 AS_OPPORTUNITY_PUB.Contact_Rec_Type;
424 l_line_count                  CONSTANT NUMBER := P_Contact_Tbl.count;
425 l_last_update_date      DATE;
426 l_update_access_flag         VARCHAR2(1);
427 l_access_profile_rec         AS_ACCESS_PUB.Access_Profile_Rec_Type;
428 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
429 l_module CONSTANT VARCHAR2(255) := 'as.plsql.lcnpv.Update_opp_contacts';
430 
431  BEGIN
432       -- Standard Start of API savepoint
433       SAVEPOINT UPDATE_OPP_CONTACTS_PVT;
434 
435       -- Standard call to check for call compatibility.
436       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
437                                          p_api_version_number,
438                                            l_api_name,
439                                            G_PKG_NAME)
440       THEN
441           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
442       END IF;
443 
444 
445       -- Initialize message list if p_init_msg_list is set to TRUE.
446       IF FND_API.to_Boolean( p_init_msg_list )
447       THEN
448           FND_MSG_PUB.initialize;
449       END IF;
450 
451 
452       -- Debug Message
453       IF l_debug THEN
454       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
455                                    'Private API: ' || l_api_name || ' start');
456       END IF;
457 
458 
459       -- Initialize API return status to SUCCESS
460       x_return_status := FND_API.G_RET_STS_SUCCESS;
461 
462       --
463       -- Api body
464       --
465       -- Un-comment the following statements when AS_CALLOUT_PKG is ready.
466       /*
467       -- if profile AS_PRE_CUSTOM_ENABLED is set to 'Y', callout procedure is
468       -- invoked for customization purpose
469       IF(FND_PROFILE.VALUE('AS_PRE_CUSTOM_ENABLED')='Y')
470       THEN
471           AS_CALLOUT_PKG.Update_opp_contacts_BU(
472                   p_api_version_number   =>  2.0,
473                   p_init_msg_list        =>  FND_API.G_FALSE,
474                   p_commit               =>  FND_API.G_FALSE,
475                   p_validation_level     =>  p_validation_level,
476                   p_identity_salesforce_id => p_identity_salesforce_id,
477                   P_Contact_Rec      =>  P_Contact_Rec,
478           -- Hint: Add detail tables as parameter lists if it's master-detail
479           --       relationship.
480                   x_return_status        =>  x_return_status,
481                   x_msg_count            =>  x_msg_count,
482                   x_msg_data             =>  x_msg_data);
483       END IF;
484       */
485 
486       IF(P_Check_Access_Flag = 'Y') THEN
487     AS_SALES_ORG_MANAGER_PVT.Get_CurrentUser(
488                 p_api_version_number    => 2.0
489                 ,p_init_msg_list        => p_init_msg_list
490                 ,p_salesforce_id    => p_identity_salesforce_id
491                 ,p_admin_group_id   => p_admin_group_id
492                 ,x_return_status    => x_return_status
493                 ,x_msg_count        => x_msg_count
494                 ,x_msg_data         => x_msg_data
495                 ,x_sales_member_rec     => l_identity_sales_member_rec);
496 
497         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
498             IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
499             IF l_debug THEN
500                AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
501             'Private API: Get_CurrentUser fail');
502             END IF;
503             END IF;
504             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
505         END IF;
506 
507 
508         -- Call Get_Access_Profiles to get access_profile_rec
509         AS_OPPORTUNITY_PUB.Get_Access_Profiles(
510             p_profile_tbl         => p_profile_tbl,
511             x_access_profile_rec  => l_access_profile_rec);
512 
513         AS_ACCESS_PUB.has_updateOpportunityAccess
514          (   p_api_version_number   => 2.0
515         ,p_init_msg_list        => p_init_msg_list
516         ,p_validation_level     => p_validation_level
517         ,p_access_profile_rec   => l_access_profile_rec
518         ,p_admin_flag           => p_admin_flag
519         ,p_admin_group_id   => p_admin_group_id
520         ,p_person_id        => l_identity_sales_member_rec.employee_person_id
521         ,p_opportunity_id   => p_contact_tbl(1).LEAD_ID
522         ,p_check_access_flag    => p_check_access_flag
523         ,p_identity_salesforce_id => p_identity_salesforce_id
524         ,p_partner_cont_party_id  => p_partner_cont_party_id
525         ,x_return_status    => x_return_status
526         ,x_msg_count        => x_msg_count
527         ,x_msg_data     => x_msg_data
528         ,x_update_access_flag   => l_update_access_flag );
529 
530         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
531             IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
532             IF l_debug THEN
533                 AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
534             'has_updateOpportunityAccess fail');
535             END IF;
536             END IF;
537             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
538         END IF;
539 
540         IF (l_update_access_flag <> 'Y') THEN
541             IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
542             FND_MESSAGE.Set_Name('AS', 'API_NO_UPDATE_PRIVILEGE');
543             FND_MESSAGE.Set_Token('INFO', 'CUSTOMER_ID,OPPORTUNITY_ID,SALESFORCE_ID', FALSE);
544             FND_MSG_PUB.ADD;
545             END IF;
546             RAISE FND_API.G_EXC_ERROR;
547     END IF;
548       END IF;
549 
550 
551       FOR l_curr_row IN 1..l_line_count LOOP
552          X_Contact_out_tbl(l_curr_row).return_status:=FND_API.G_RET_STS_SUCCESS;
553 
554          -- Progress Message
555          --
556          IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS)
557          THEN
558              FND_MESSAGE.Set_Name ('AS', 'API_PROCESSING_ROW');
559              FND_MESSAGE.Set_Token ('ROW', 'AS_LEAD_CONTACT', TRUE);
560              FND_MESSAGE.Set_Token ('RECORD_NUM', to_char(l_curr_row), FALSE);
561              FND_MSG_PUB.Add;
562          END IF;
563 
564          l_Contact_rec := P_Contact_Tbl(l_curr_row);
565 
566          -- Bug 3571569
567          -- Initialize flag to 'N' if null
568          IF(l_Contact_rec.PRIMARY_CONTACT_FLAG is NULL OR
569             l_Contact_rec.PRIMARY_CONTACT_FLAG = FND_API.G_MISS_CHAR )
570          THEN
571             l_Contact_rec.PRIMARY_CONTACT_FLAG := 'N';
572          END IF;
573 
574          -- Debug Message
575          IF l_debug THEN
576          AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
577                                       'Private API: - Open Cursor to Select');
578 
579          END IF;
580 
581          Open C_Get_opp_contact( l_Contact_rec.LEAD_CONTACT_ID);
582 
583          Fetch C_Get_opp_contact into l_last_update_date;
584 
585          If ( C_Get_opp_contact%NOTFOUND) Then
586              IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
587              THEN
588                  FND_MESSAGE.Set_Name('AS', 'API_MISSING_UPDATE_TARGET');
589                  FND_MESSAGE.Set_Token ('INFO', 'opp_contact', FALSE);
590                  FND_MSG_PUB.Add;
591              END IF;
592              raise FND_API.G_EXC_ERROR;
593          END IF;
594 
595          -- Debug Message
596          IF l_debug THEN
597          AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
598                                       'Private API: - Close Cursor');
599          END IF;
600 
601          Close     C_Get_opp_contact;
602 
603          If (l_Contact_rec.last_update_date is NULL or
604              l_Contact_rec.last_update_date = FND_API.G_MISS_Date ) Then
605              IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
606              THEN
607                  FND_MESSAGE.Set_Name('AS', 'API_MISSING_ID');
608                  FND_MESSAGE.Set_Token('COLUMN', 'Last_Update_Date', FALSE);
609                  FND_MSG_PUB.ADD;
610              END IF;
611              raise FND_API.G_EXC_ERROR;
612          End if;
613          -- Check Whether record has been changed by someone else
614          If (l_Contact_rec.last_update_date <> l_last_update_date) Then
615              IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
616              THEN
617                  FND_MESSAGE.Set_Name('AS', 'API_RECORD_CHANGED');
618                  FND_MESSAGE.Set_Token('INFO', 'opp_contact', FALSE);
619                  FND_MSG_PUB.ADD;
620              END IF;
621              raise FND_API.G_EXC_ERROR;
622          End if;
623 
624          -- Debug message
625          IF l_debug THEN
626          AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
627                       'Private API: Validate_opp_contact');
628 
629          END IF;
630          -- Invoke validation procedures
631          Validate_opp_contact(
632                  p_init_msg_list    => FND_API.G_FALSE,
633                  p_validation_level => p_validation_level,
634                  p_validation_mode  => AS_UTILITY_PVT.G_UPDATE,
635                  P_Contact_Rec  =>  l_Contact_Rec,
636                  x_return_status    => x_return_status,
637                  x_msg_count        => x_msg_count,
638                  x_msg_data         => x_msg_data);
639 
640          IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
641              -- Debug message
642              IF l_debug THEN
643              AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
644                               'Private API: Validate_opp_Contact fail');
645              END IF;
646              RAISE FND_API.G_EXC_ERROR;
647          END IF;
648 
649          -- Debug Message
650          IF l_debug THEN
651          AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
652                        'Private API: Calling update table handler');
653 
654          END IF;
655          -- Invoke table handler(AS_LEAD_CONTACTS_PKG.Update_Row)
656          AS_LEAD_CONTACTS_PKG.Update_Row(
657              p_LEAD_CONTACT_ID  => l_Contact_rec.LEAD_CONTACT_ID,
658              p_LEAD_ID  => l_Contact_rec.LEAD_ID,
659              p_CONTACT_ID  => l_Contact_rec.CONTACT_ID,
660              p_LAST_UPDATE_DATE  => SYSDATE,
661              p_LAST_UPDATED_BY  => FND_GLOBAL.USER_ID,
662              p_CREATION_DATE  => SYSDATE,
663              p_CREATED_BY  => FND_GLOBAL.USER_ID,
664              p_LAST_UPDATE_LOGIN  => FND_GLOBAL.CONC_LOGIN_ID,
665              p_REQUEST_ID  => l_Contact_rec.REQUEST_ID,
666              p_PROGRAM_APPLICATION_ID  => l_Contact_rec.PROGRAM_APPLICATION_ID,
667              p_PROGRAM_ID  => l_Contact_rec.PROGRAM_ID,
668              p_PROGRAM_UPDATE_DATE  => l_Contact_rec.PROGRAM_UPDATE_DATE,
669              p_ENABLED_FLAG  => l_Contact_rec.ENABLED_FLAG,
670              p_CUSTOMER_ID  => l_Contact_rec.CUSTOMER_ID,
671              p_ADDRESS_ID  => l_Contact_rec.ADDRESS_ID,
672              p_RANK  => l_Contact_rec.RANK,
673              p_PHONE_ID  => l_Contact_rec.PHONE_ID,
674              p_ATTRIBUTE_CATEGORY  => l_Contact_rec.ATTRIBUTE_CATEGORY,
675              p_ATTRIBUTE1  => l_Contact_rec.ATTRIBUTE1,
676              p_ATTRIBUTE2  => l_Contact_rec.ATTRIBUTE2,
677              p_ATTRIBUTE3  => l_Contact_rec.ATTRIBUTE3,
678              p_ATTRIBUTE4  => l_Contact_rec.ATTRIBUTE4,
679              p_ATTRIBUTE5  => l_Contact_rec.ATTRIBUTE5,
680              p_ATTRIBUTE6  => l_Contact_rec.ATTRIBUTE6,
681              p_ATTRIBUTE7  => l_Contact_rec.ATTRIBUTE7,
682              p_ATTRIBUTE8  => l_Contact_rec.ATTRIBUTE8,
683              p_ATTRIBUTE9  => l_Contact_rec.ATTRIBUTE9,
684              p_ATTRIBUTE10  => l_Contact_rec.ATTRIBUTE10,
685              p_ATTRIBUTE11  => l_Contact_rec.ATTRIBUTE11,
686              p_ATTRIBUTE12  => l_Contact_rec.ATTRIBUTE12,
687              p_ATTRIBUTE13  => l_Contact_rec.ATTRIBUTE13,
688              p_ATTRIBUTE14  => l_Contact_rec.ATTRIBUTE14,
689              p_ATTRIBUTE15  => l_Contact_rec.ATTRIBUTE15,
690              p_ORG_ID  => l_Contact_rec.ORG_ID,
691              p_PRIMARY_CONTACT_FLAG  => l_Contact_rec.PRIMARY_CONTACT_FLAG,
692              p_ROLE  => l_Contact_rec.ROLE,
693              p_CONTACT_PARTY_ID  => l_Contact_rec.CONTACT_PARTY_ID);
694 
695          X_Contact_out_tbl(l_curr_row).LEAD_CONTACT_ID :=
696                                               l_Contact_rec.LEAD_CONTACT_ID;
697          X_Contact_out_tbl(l_curr_row).return_status := x_return_status;
698 
699          IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
700              RAISE FND_API.G_EXC_ERROR;
701          END IF;
702 
703          IF l_debug THEN
704          AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
705               'Private API: Updated lead_contact_id = ' ||l_Contact_rec.LEAD_CONTACT_ID );
706      END IF;
707       END LOOP;
708 
709       --
710       -- End of API body.
711       --
712 
713       -- Standard check for p_commit
714       IF FND_API.to_Boolean( p_commit )
715       THEN
716           COMMIT WORK;
717       END IF;
718 
719 
720       -- Debug Message
721       IF l_debug THEN
722       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
723                                    'Private API: ' || l_api_name || ' end');
724       END IF;
725 
726 
727       -- Standard call to get message count and if count is 1, get message info.
728       FND_MSG_PUB.Count_And_Get
729       (  p_count          =>   x_msg_count,
730          p_data           =>   x_msg_data
731       );
732 
733       -- Un-comment the following statements when AS_CALLOUT_PKG is ready.
734       /*
735       -- if profile AS_POST_CUSTOM_ENABLED is set to 'Y', callout procedure is
736       -- invoked for customization purpose
737       IF(FND_PROFILE.VALUE('AS_POST_CUSTOM_ENABLED')='Y')
738       THEN
739           AS_CALLOUT_PKG.Update_opp_contacts_AU(
740                   p_api_version_number   =>  2.0,
741                   p_init_msg_list        =>  FND_API.G_FALSE,
742                   p_commit               =>  FND_API.G_FALSE,
743                   p_validation_level     =>  p_validation_level,
744                   p_identity_salesforce_id => p_identity_salesforce_id,
745                   P_Contact_Rec      =>  P_Contact_Rec,
746           -- Hint: Add detail tables as parameter lists if it's master-detail
747           --       relationship.
748                   x_return_status        =>  x_return_status,
749                   x_msg_count            =>  x_msg_count,
750                   x_msg_data             =>  x_msg_data);
751       END IF;
752       */
753       EXCEPTION
754           WHEN FND_API.G_EXC_ERROR THEN
755               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
756                    P_MODULE => l_module
757                   ,P_API_NAME => L_API_NAME
758                   ,P_PKG_NAME => G_PKG_NAME
759                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR
760                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
761                   ,X_MSG_COUNT => X_MSG_COUNT
762                   ,X_MSG_DATA => X_MSG_DATA
763                   ,X_RETURN_STATUS => X_RETURN_STATUS);
764 
765           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
766               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
767                    P_MODULE => l_module
768                   ,P_API_NAME => L_API_NAME
769                   ,P_PKG_NAME => G_PKG_NAME
770                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
771                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
772                   ,X_MSG_COUNT => X_MSG_COUNT
773                   ,X_MSG_DATA => X_MSG_DATA
774                   ,X_RETURN_STATUS => X_RETURN_STATUS);
775 
776           WHEN OTHERS THEN
777               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
778                    P_MODULE => l_module
779                   ,P_API_NAME => L_API_NAME
780                   ,P_PKG_NAME => G_PKG_NAME
781                   ,P_EXCEPTION_LEVEL => AS_UTILITY_PVT.G_EXC_OTHERS
782                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
783                   ,X_MSG_COUNT => X_MSG_COUNT
784                   ,X_MSG_DATA => X_MSG_DATA
785                   ,X_RETURN_STATUS => X_RETURN_STATUS);
786 End Update_opp_contacts;
787 
788 
789 PROCEDURE Delete_opp_contacts(
790     P_Api_Version_Number         IN   NUMBER,
791     P_Init_Msg_List              IN   VARCHAR2    := FND_API.G_FALSE,
792     P_Commit                     IN   VARCHAR2    := FND_API.G_FALSE,
793     p_validation_level           IN   NUMBER      := FND_API.G_VALID_LEVEL_FULL,
794     P_Check_Access_Flag          IN   VARCHAR2    := FND_API.G_FALSE,
795     P_Admin_Flag                 IN   VARCHAR2    := FND_API.G_FALSE,
796     P_Admin_Group_Id             IN   NUMBER,
797     P_identity_salesforce_id     IN   NUMBER      := NULL,
798     P_profile_tbl                IN   AS_UTILITY_PUB.PROFILE_TBL_TYPE,
799     P_Partner_Cont_Party_id      IN   NUMBER      := FND_API.G_MISS_NUM,
800     P_Contact_Tbl                IN   AS_OPPORTUNITY_PUB.Contact_Tbl_Type,
801     X_contact_out_tbl            OUT NOCOPY  AS_OPPORTUNITY_PUB.contact_out_tbl_type,
802     X_Return_Status              OUT NOCOPY  VARCHAR2,
803     X_Msg_Count                  OUT NOCOPY  NUMBER,
804     X_Msg_Data                   OUT NOCOPY  VARCHAR2
805     )
806 
807  IS
808 l_api_name                CONSTANT VARCHAR2(30) := 'Delete_opp_contacts';
809 l_api_version_number      CONSTANT NUMBER   := 2.0;
810 l_identity_sales_member_rec  AS_SALES_MEMBER_PUB.Sales_member_rec_Type;
811 l_Contact_Rec                 AS_OPPORTUNITY_PUB.Contact_Rec_Type;
812 l_line_count                  CONSTANT NUMBER := P_Contact_Tbl.count;
813 l_update_access_flag         VARCHAR2(1);
814 l_access_profile_rec         AS_ACCESS_PUB.Access_Profile_Rec_Type;
815 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
816 l_module CONSTANT VARCHAR2(255) := 'as.plsql.lcnpv.Delete_opp_contacts';
817  BEGIN
818       -- Standard Start of API savepoint
819       SAVEPOINT DELETE_OPP_CONTACTS_PVT;
820 
821       -- Standard call to check for call compatibility.
822       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
823                                          p_api_version_number,
824                                            l_api_name,
825                                            G_PKG_NAME)
826       THEN
827           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
828       END IF;
829 
830 
831       -- Initialize message list if p_init_msg_list is set to TRUE.
832       IF FND_API.to_Boolean( p_init_msg_list )
833       THEN
834           FND_MSG_PUB.initialize;
835       END IF;
836 
837 
838       -- Debug Message
839       IF l_debug THEN
840       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
841                                    'Private API: ' || l_api_name || ' start');
842       END IF;
843 
844 
845       -- Initialize API return status to SUCCESS
846       x_return_status := FND_API.G_RET_STS_SUCCESS;
847 
848       --
849       -- Api body
850       --
851       -- Un-comment the following statements when AS_CALLOUT_PKG is ready.
852       /*
853       -- if profile AS_PRE_CUSTOM_ENABLED is set to 'Y', callout procedure is
854       -- invoked for customization purpose
855       IF(FND_PROFILE.VALUE('AS_PRE_CUSTOM_ENABLED')='Y')
856       THEN
857           AS_CALLOUT_PKG.Delete_opp_contacts_BD(
858                   p_api_version_number   =>  2.0,
859                   p_init_msg_list        =>  FND_API.G_FALSE,
860                   p_commit               =>  FND_API.G_FALSE,
861                   p_validation_level     =>  p_validation_level,
862                   p_identity_salesforce_id => p_identity_salesforce_id,
863                   P_Contact_Rec      =>  P_Contact_Rec,
864           -- Hint: Add detail tables as parameter lists if it's master-detail
865           --       relationship.
866                   x_return_status        =>  x_return_status,
867                   x_msg_count            =>  x_msg_count,
868                   x_msg_data             =>  x_msg_data);
869       END IF;
870       */
871 
872       IF(P_Check_Access_Flag = 'Y') THEN
873     AS_SALES_ORG_MANAGER_PVT.Get_CurrentUser(
874                 p_api_version_number    => 2.0
875                 ,p_init_msg_list        => p_init_msg_list
876                 ,p_salesforce_id    => p_identity_salesforce_id
877                 ,p_admin_group_id   => p_admin_group_id
878                 ,x_return_status    => x_return_status
879                 ,x_msg_count        => x_msg_count
880                 ,x_msg_data         => x_msg_data
881                 ,x_sales_member_rec     => l_identity_sales_member_rec);
882 
883         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
884             IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
885                IF l_debug THEN
886                AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
887             'Private API: Get_CurrentUser fail');
888            END IF;
889             END IF;
890             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
891         END IF;
892 
893 
894         -- Call Get_Access_Profiles to get access_profile_rec
895         AS_OPPORTUNITY_PUB.Get_Access_Profiles(
896             p_profile_tbl         => p_profile_tbl,
897             x_access_profile_rec  => l_access_profile_rec);
898 
899         AS_ACCESS_PUB.has_updateOpportunityAccess
900          (   p_api_version_number   => 2.0
901         ,p_init_msg_list        => p_init_msg_list
902         ,p_validation_level     => p_validation_level
903         ,p_access_profile_rec   => l_access_profile_rec
904         ,p_admin_flag           => p_admin_flag
905         ,p_admin_group_id   => p_admin_group_id
906         ,p_person_id        => l_identity_sales_member_rec.employee_person_id
907         ,p_opportunity_id   => p_contact_tbl(1).LEAD_ID
908         ,p_check_access_flag    => p_check_access_flag
909         ,p_identity_salesforce_id => p_identity_salesforce_id
910         ,p_partner_cont_party_id  => p_partner_cont_party_id
911         ,x_return_status    => x_return_status
912         ,x_msg_count        => x_msg_count
913         ,x_msg_data     => x_msg_data
914         ,x_update_access_flag   => l_update_access_flag );
915 
916         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
917             IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
918                 IF l_debug THEN
919                 AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
920             'has_updateOpportunityAccess fail');
921         END IF;
922             END IF;
923             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
924         END IF;
925 
926         IF (l_update_access_flag <> 'Y') THEN
927             IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
928             FND_MESSAGE.Set_Name('AS', 'API_NO_UPDATE_PRIVILEGE');
929             FND_MESSAGE.Set_Token('INFO', 'CUSTOMER_ID,OPPORTUNITY_ID,SALESFORCE_ID', FALSE);
930             FND_MSG_PUB.ADD;
931             END IF;
932             RAISE FND_API.G_EXC_ERROR;
933     END IF;
934       END IF;
935 
936 
937       FOR l_curr_row IN 1..l_line_count LOOP
938          X_Contact_out_tbl(l_curr_row).return_status:=FND_API.G_RET_STS_SUCCESS;
939 
940          -- Progress Message
941          --
942          IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS)
943          THEN
944              FND_MESSAGE.Set_Name ('AS', 'API_PROCESSING_ROW');
945              FND_MESSAGE.Set_Token ('ROW', 'AS_LEAD_CONTACT', TRUE);
946              FND_MESSAGE.Set_Token ('RECORD_NUM', to_char(l_curr_row), FALSE);
947              FND_MSG_PUB.Add;
948          END IF;
949 
950          l_Contact_rec := P_Contact_Tbl(l_curr_row);
951 
952 
953          -- Debug Message
954          IF l_debug THEN
955          AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
956                         'Private API: Calling delete table handler');
957 
958          END IF;
959          -- Invoke table handler(AS_LEAD_CONTACTS_PKG.Delete_Row)
960          AS_LEAD_CONTACTS_PKG.Delete_Row(
961              p_LEAD_CONTACT_ID  => l_Contact_rec.LEAD_CONTACT_ID);
962 
963          X_Contact_out_tbl(l_curr_row).LEAD_CONTACT_ID :=
964                                               l_Contact_rec.LEAD_CONTACT_ID;
965          X_Contact_out_tbl(l_curr_row).return_status := x_return_status;
966 
967          IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
968              RAISE FND_API.G_EXC_ERROR;
969          END IF;
970 
971       END LOOP;
972 
973       --
974       -- End of API body
975       --
976 
977       -- Standard check for p_commit
978       IF FND_API.to_Boolean( p_commit )
979       THEN
980           COMMIT WORK;
981       END IF;
982 
983 
984       -- Debug Message
985       IF l_debug THEN
986       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
987                                    'Private API: ' || l_api_name || ' end');
988       END IF;
989 
990       -- Standard call to get message count and if count is 1, get message info.
991       FND_MSG_PUB.Count_And_Get
992       (  p_count          =>   x_msg_count,
993          p_data           =>   x_msg_data
994       );
995 
996       -- Un-comment the following statements when AS_CALLOUT_PKG is ready.
997       /*
998       -- if profile AS_POST_CUSTOM_ENABLED is set to 'Y', callout procedure is
999       -- invoked for customization purpose
1000       IF(FND_PROFILE.VALUE('AS_POST_CUSTOM_ENABLED')='Y')
1001       THEN
1002           AS_CALLOUT_PKG.Delete_opp_contacts_AD(
1003                   p_api_version_number   =>  2.0,
1004                   p_init_msg_list        =>  FND_API.G_FALSE,
1005                   p_commit               =>  FND_API.G_FALSE,
1006                   p_validation_level     =>  p_validation_level,
1007                   p_identity_salesforce_id => p_identity_salesforce_id,
1008                   P_Contact_Rec      =>  P_Contact_Rec,
1009           -- Hint: Add detail tables as parameter lists if it's master-detail
1010           --       relationship.
1011                   x_return_status        =>  x_return_status,
1012                   x_msg_count            =>  x_msg_count,
1013                   x_msg_data             =>  x_msg_data);
1014       END IF;
1015       */
1016       EXCEPTION
1017           WHEN FND_API.G_EXC_ERROR THEN
1018               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
1019                    P_MODULE => l_module
1020                   ,P_API_NAME => L_API_NAME
1021                   ,P_PKG_NAME => G_PKG_NAME
1022                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR
1023                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
1024                   ,X_MSG_COUNT => X_MSG_COUNT
1025                   ,X_MSG_DATA => X_MSG_DATA
1026                   ,X_RETURN_STATUS => X_RETURN_STATUS);
1027 
1028           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1029               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
1030                    P_MODULE => l_module
1031                   ,P_API_NAME => L_API_NAME
1032                   ,P_PKG_NAME => G_PKG_NAME
1033                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
1034                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
1035                   ,X_MSG_COUNT => X_MSG_COUNT
1036                   ,X_MSG_DATA => X_MSG_DATA
1037                   ,X_RETURN_STATUS => X_RETURN_STATUS);
1038 
1039           WHEN OTHERS THEN
1040               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
1041                    P_MODULE => l_module
1042                   ,P_API_NAME => L_API_NAME
1043                   ,P_PKG_NAME => G_PKG_NAME
1044                   ,P_EXCEPTION_LEVEL => AS_UTILITY_PVT.G_EXC_OTHERS
1045                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
1046                   ,X_MSG_COUNT => X_MSG_COUNT
1047                   ,X_MSG_DATA => X_MSG_DATA
1048                   ,X_RETURN_STATUS => X_RETURN_STATUS);
1049 End Delete_opp_contacts;
1050 
1051 
1052 
1053 -- Item-level validation procedures
1054 PROCEDURE Validate_LEAD_CONTACT_ID (
1055     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1056     P_Validation_mode            IN   VARCHAR2,
1057     P_LEAD_CONTACT_ID            IN   NUMBER,
1058     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
1059     X_Return_Status              OUT NOCOPY  VARCHAR2,
1060     X_Msg_Count                  OUT NOCOPY  NUMBER,
1061     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1062     )
1063 IS
1064 
1065 
1066 CURSOR  C_Lead_Contact_Id_Exists (c_Lead_Contact_Id NUMBER) IS
1067         SELECT 'X'
1068         FROM  as_lead_contacts
1069         WHERE lead_contact_id = c_Lead_Contact_Id;
1070 
1071 l_val   VARCHAR2(1);
1072 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
1073 l_module CONSTANT VARCHAR2(255) := 'as.plsql.lcnpv.Validate_LEAD_CONTACT_ID';
1074 
1075 BEGIN
1076 
1077       -- Initialize message list if p_init_msg_list is set to TRUE.
1078       IF FND_API.to_Boolean( p_init_msg_list )
1079       THEN
1080           FND_MSG_PUB.initialize;
1081       END IF;
1082 
1083 
1084       -- Initialize API return status to SUCCESS
1085       x_return_status := FND_API.G_RET_STS_SUCCESS;
1086 
1087 
1088       -- Calling from Create API
1089       IF(p_validation_mode = AS_UTILITY_PVT.G_CREATE)
1090       THEN
1091           IF (p_LEAD_CONTACT_ID is NOT NULL) and (p_LEAD_CONTACT_ID <> FND_API.G_MISS_NUM)
1092           THEN
1093               OPEN  C_Lead_Contact_Id_Exists (p_Lead_Contact_Id);
1094               FETCH C_Lead_Contact_Id_Exists into l_val;
1095               IF C_Lead_Contact_Id_Exists%FOUND THEN
1096                   IF l_debug THEN
1097                   AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
1098                                                'Private API: LEAD_CONTACT_ID exist');
1099                   END IF;
1100 
1101                   AS_UTILITY_PVT.Set_Message(
1102 		  	      	p_module        => l_module,
1103 		  	      	p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1104 		  	      	p_msg_name      => 'AS_INVALID_ID',
1105 		  	      	p_token1        => 'FIELD_ID',
1106               	  		p_token1_value  =>  'LEAD_CONTACT_ID');
1107 
1108                   x_return_status := FND_API.G_RET_STS_ERROR;
1109               END IF;
1110               CLOSE C_Lead_Contact_Id_Exists;
1111           END IF;
1112 
1113       -- Calling from Update API
1114       ELSIF(p_validation_mode = AS_UTILITY_PVT.G_UPDATE)
1115       THEN
1116           -- validate NOT NULL column
1117           IF (p_LEAD_CONTACT_ID is NULL) or (p_LEAD_CONTACT_ID = FND_API.G_MISS_NUM)
1118           THEN
1119               IF l_debug THEN
1120               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
1121                           'Private API: Violate NOT NULL constraint(LEAD_CONTACT_ID)');
1122               END IF;
1123 
1124 	      AS_UTILITY_PVT.Set_Message(
1125 		  	      	p_module        => l_module,
1126 		  	      	p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1127 		  	      	p_msg_name      => 'AS_INVALID_ID',
1128 		  	      	p_token1        => 'FIELD_ID',
1129               	  		p_token1_value  =>  'LEAD_CONTACT_ID');
1130 
1131               x_return_status := FND_API.G_RET_STS_ERROR;
1132           ELSE
1133               OPEN  C_Lead_Contact_Id_Exists (p_Lead_Contact_Id);
1134               FETCH C_Lead_Contact_Id_Exists into l_val;
1135               IF C_Lead_Contact_Id_Exists%NOTFOUND
1136               THEN
1137                   IF l_debug THEN
1138                   AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
1139                                          'Private API: LEAD_CONTACT_ID is not valid');
1140                   END IF;
1141 
1142 		  AS_UTILITY_PVT.Set_Message(
1143 		  	      	p_module        => l_module,
1144 		  	      	p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1145 		  	      	p_msg_name      => 'AS_INVALID_ID',
1146 		  	      	p_token1        => 'FIELD_ID',
1147               	  		p_token1_value  =>  'LEAD_CONTACT_ID');
1148 
1149                   x_return_status := FND_API.G_RET_STS_ERROR;
1150               END IF;
1151               CLOSE C_Lead_Contact_Id_Exists;
1152           END IF;
1153 
1154       END IF;
1155 
1156       -- Standard call to get message count and if count is 1, get message info.
1157       FND_MSG_PUB.Count_And_Get
1158       (  p_count          =>   x_msg_count,
1159          p_data           =>   x_msg_data
1160       );
1161 
1162 END Validate_LEAD_CONTACT_ID;
1163 
1164 
1165 PROCEDURE Validate_LEAD_ID (
1166     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1167     P_Validation_mode            IN   VARCHAR2,
1168     P_LEAD_ID                    IN   NUMBER,
1169     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
1170     X_Return_Status              OUT NOCOPY  VARCHAR2,
1171     X_Msg_Count                  OUT NOCOPY  NUMBER,
1172     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1173     )
1174 IS
1175 CURSOR  C_Lead_Id_Exists (c_Lead_Id NUMBER) IS
1176         SELECT 'X'
1177         FROM  as_leads
1178         WHERE lead_id = c_Lead_Id
1179     AND   nvl(DELETED_FLAG, 'N') <> 'Y';
1180 
1181 l_val   VARCHAR2(1);
1182 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
1183 l_module CONSTANT VARCHAR2(255) := 'as.plsql.lcnpv.Validate_LEAD_ID';
1184 BEGIN
1185 
1186       -- Initialize message list if p_init_msg_list is set to TRUE.
1187       IF FND_API.to_Boolean( p_init_msg_list )
1188       THEN
1189           FND_MSG_PUB.initialize;
1190       END IF;
1191 
1192 
1193       -- Initialize API return status to SUCCESS
1194       x_return_status := FND_API.G_RET_STS_SUCCESS;
1195 
1196 
1197       IF (p_LEAD_ID is NULL) or (p_LEAD_ID = FND_API.G_MISS_NUM)
1198       THEN
1199           IF l_debug THEN
1200           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
1201                       'Private API: Violate NOT NULL constraint(LEAD_ID)');
1202           END IF;
1203 
1204 	  AS_UTILITY_PVT.Set_Message(
1205 	  	      		 p_module        => l_module,
1206 	  	      		 p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1207 	  	      		 p_msg_name      => 'AS_INVALID_ID',
1208 	  	      		 p_token1        => 'FIELD_ID',
1209               	  		 p_token1_value  =>  'LEAD_ID');
1210 
1211           x_return_status := FND_API.G_RET_STS_ERROR;
1212       ELSE
1213           OPEN  C_Lead_Id_Exists (p_Lead_Id);
1214           FETCH C_Lead_Id_Exists into l_val;
1215           IF C_Lead_Id_Exists%NOTFOUND
1216           THEN
1217               IF l_debug THEN
1218               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
1219                                  'Private API: LEAD_ID is not valid');
1220               END IF;
1221 
1222 	      AS_UTILITY_PVT.Set_Message(
1223 	      		  	 p_module        => l_module,
1224 	      		  	 p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1225 	      		  	 p_msg_name      => 'AS_INVALID_ID',
1226 	      		  	 p_token1        => 'FIELD_ID',
1227               	  		 p_token1_value  =>  'LEAD_ID');
1228 
1229               x_return_status := FND_API.G_RET_STS_ERROR;
1230           END IF;
1231           CLOSE C_Lead_Id_Exists;
1232       END IF;
1233 
1234       -- Standard call to get message count and if count is 1, get message info.
1235       FND_MSG_PUB.Count_And_Get
1236       (  p_count          =>   x_msg_count,
1237          p_data           =>   x_msg_data
1238       );
1239 
1240 END Validate_LEAD_ID;
1241 
1242 
1243 PROCEDURE Validate_CONTACT_ID (
1244     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1245     P_Validation_mode            IN   VARCHAR2,
1246     P_CUSTOMER_ID        IN   NUMBER,
1247     P_CONTACT_ID                 IN   NUMBER,
1248     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
1249     X_Return_Status              OUT NOCOPY  VARCHAR2,
1250     X_Msg_Count                  OUT NOCOPY  NUMBER,
1251     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1252     )
1253 IS
1254 
1255 CURSOR  C_CONTACT_ID_Exists(c_contact_id NUMBER) IS
1256     SELECT 'X'
1257     FROM    AS_PARTY_ORG_CONTACTS_V
1258     WHERE   contact_id = c_contact_id
1259     AND customer_id = P_CUSTOMER_ID;
1260 
1261 l_val   VARCHAR2(1);
1262 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
1263 l_module CONSTANT VARCHAR2(255) := 'as.plsql.lcnpv.Validate_CONTACT_ID';
1264 BEGIN
1265 
1266       -- Initialize message list if p_init_msg_list is set to TRUE.
1267       IF FND_API.to_Boolean( p_init_msg_list )
1268       THEN
1269           FND_MSG_PUB.initialize;
1270       END IF;
1271 
1272 
1273       -- Initialize API return status to SUCCESS
1274       x_return_status := FND_API.G_RET_STS_SUCCESS;
1275 
1276       IF (p_CONTACT_ID is NOT NULL) and
1277          (p_CONTACT_ID <> FND_API.G_MISS_NUM)
1278       THEN
1279           OPEN  C_CONTACT_ID_Exists (p_CONTACT_ID);
1280           FETCH C_CONTACT_ID_Exists into l_val;
1281           IF C_CONTACT_ID_Exists%NOTFOUND THEN
1282               IF l_debug THEN
1283               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
1284                                      'Private API: CONTACT_ID is invalid');
1285               END IF;
1286 
1287               AS_UTILITY_PVT.Set_Message(
1288 	      	      		  	 p_module        => l_module,
1289 	      	      		  	 p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1290 	      	      		  	 p_msg_name      => 'AS_INVALID_ID',
1291 	      	      		  	 p_token1        => 'FIELD_ID',
1292               	  		 	 p_token1_value  =>  'CONTACT_ID');
1293 
1294               x_return_status := FND_API.G_RET_STS_ERROR;
1295           END IF;
1296           CLOSE C_CONTACT_ID_Exists;
1297       END IF;
1298 
1299       -- Standard call to get message count and if count is 1, get message info.
1300       FND_MSG_PUB.Count_And_Get
1301       (  p_count          =>   x_msg_count,
1302          p_data           =>   x_msg_data
1303       );
1304 
1305 END Validate_CONTACT_ID;
1306 
1307 
1308 PROCEDURE Validate_ENABLED_FLAG (
1309     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1310     P_Validation_mode            IN   VARCHAR2,
1311     P_ENABLED_FLAG               IN   VARCHAR2,
1312     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
1313     X_Return_Status              OUT NOCOPY  VARCHAR2,
1314     X_Msg_Count                  OUT NOCOPY  NUMBER,
1315     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1316     )
1317 IS
1318 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
1319 l_module CONSTANT VARCHAR2(255) := 'as.plsql.lcnpv.Validate_ENABLED_FLAG';
1320 BEGIN
1321 
1322       -- Initialize message list if p_init_msg_list is set to TRUE.
1323       IF FND_API.to_Boolean( p_init_msg_list )
1324       THEN
1325           FND_MSG_PUB.initialize;
1326       END IF;
1327 
1328 
1329       -- Initialize API return status to SUCCESS
1330       x_return_status := FND_API.G_RET_STS_SUCCESS;
1331 
1332       -- validate NOT NULL column
1333       IF(p_ENABLED_FLAG is NULL OR
1334          p_ENABLED_FLAG = FND_API.G_MISS_CHAR )
1335       THEN
1336         --The following code commented by SUBABU for Bug#3537692(ASN)
1337       /*IF l_debug THEN
1338           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
1339                       'Private API: Violate NOT NULL constraint(ENABLED_FLAG)');
1340           END IF;
1341           x_return_status := FND_API.G_RET_STS_ERROR;*/
1342       NULL;
1343       ELSE
1344           IF (UPPER(p_ENABLED_FLAG) <> 'Y') and
1345              (UPPER(p_ENABLED_FLAG) <> 'N')
1346           THEN
1347               IF l_debug THEN
1348               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
1349                                'Private API: ENABLED_FLAG is invalid');
1350 
1351               END IF;
1352 
1353               AS_UTILITY_PVT.Set_Message(
1354 	      	      	      		 p_module        => l_module,
1355                                  p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1356 	      	      	      		 p_msg_name      => 'AS_INVALID_ID',
1357 	      	      	      		 p_token1        => 'FIELD_ID',
1358               	  		 	 p_token1_value  =>  'ENABLED_FLAG');
1359 
1360               x_return_status := FND_API.G_RET_STS_ERROR;
1361           END IF;
1362       END IF;
1363 
1364       -- Standard call to get message count and if count is 1, get message info.
1365       FND_MSG_PUB.Count_And_Get
1366       (  p_count          =>   x_msg_count,
1367          p_data           =>   x_msg_data
1368       );
1369 
1370 END Validate_ENABLED_FLAG;
1371 
1372 
1373 PROCEDURE Validate_CUSTOMER_ID (
1374     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1375     P_Validation_mode            IN   VARCHAR2,
1376     P_CUSTOMER_ID                IN   NUMBER,
1377     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
1378     X_Return_Status              OUT NOCOPY  VARCHAR2,
1379     X_Msg_Count                  OUT NOCOPY  NUMBER,
1380     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1381     )
1382 IS
1383 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
1384 CURSOR  C_Customer_Id_Exists (c_Customer_Id NUMBER) IS
1385         SELECT 'X'
1386         FROM  AS_PARTY_CUSTOMERS_V
1387         WHERE customer_id = c_Customer_Id;
1388 
1389 l_val   VARCHAR2(1);
1390 l_module CONSTANT VARCHAR2(255) := 'as.plsql.lcnpv.Validate_CUSTOMER_ID';
1391 
1392 BEGIN
1393 
1394       -- Initialize message list if p_init_msg_list is set to TRUE.
1395       IF FND_API.to_Boolean( p_init_msg_list )
1396       THEN
1397           FND_MSG_PUB.initialize;
1398       END IF;
1399 
1400 
1401       -- Initialize API return status to SUCCESS
1402       x_return_status := FND_API.G_RET_STS_SUCCESS;
1403 
1404 
1405       IF (p_CUSTOMER_ID is NULL) or (p_CUSTOMER_ID = FND_API.G_MISS_NUM)
1406       THEN
1407           IF l_debug THEN
1408           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
1409                       'Private API: Violate NOT NULL constraint(CUSTOMER_ID)');
1410           END IF;
1411 
1412 	  AS_UTILITY_PVT.Set_Message(p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1413 	      	      	      	     p_module        => l_module,
1414 	      	      	      	     p_msg_name      => 'AS_INVALID_ID',
1415 	  	      	      	     p_token1        => 'FIELD_ID',
1416               	  		     p_token1_value  =>  'CUSTOMER_ID');
1417 
1418           x_return_status := FND_API.G_RET_STS_ERROR;
1419       ELSE
1420           OPEN  C_Customer_Id_Exists (p_Customer_Id);
1421           FETCH C_Customer_Id_Exists into l_val;
1422           IF C_Customer_Id_Exists%NOTFOUND
1423           THEN
1424               IF l_debug THEN
1425               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
1426                                  'Private API: CUSTOMER_ID is not valid');
1427               END IF;
1428 
1429 	      AS_UTILITY_PVT.Set_Message(p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1430 	      	      	      	      	 p_module        => l_module,
1431 	      	      	      	      	 p_msg_name      => 'AS_INVALID_ID',
1432 	      	      	      	      	 p_token1        => 'FIELD_ID',
1433               	  		 	 p_token1_value  => 'CUSTOMER_ID');
1434 
1435               x_return_status := FND_API.G_RET_STS_ERROR;
1436           END IF;
1437           CLOSE C_Customer_Id_Exists;
1438       END IF;
1439 
1440       -- Standard call to get message count and if count is 1, get message info.
1441       FND_MSG_PUB.Count_And_Get
1442       (  p_count          =>   x_msg_count,
1443          p_data           =>   x_msg_data
1444       );
1445 
1446 END Validate_CUSTOMER_ID;
1447 
1448 
1449 PROCEDURE Validate_ADDRESS_ID (
1450     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1451     P_Validation_mode            IN   VARCHAR2,
1452     P_CUSTOMER_ID        IN   NUMBER,
1453     P_ADDRESS_ID                 IN   NUMBER,
1454     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
1455     X_Return_Status              OUT NOCOPY  VARCHAR2,
1456     X_Msg_Count                  OUT NOCOPY  NUMBER,
1457     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1458     )
1459 IS
1460 
1461 CURSOR  C_ADDRESS_ID_Exists(c_address_id NUMBER) IS
1462     SELECT 'X'
1463     FROM    AS_PARTY_ADDRESSES_V
1464     WHERE   address_id = c_address_id
1465     AND customer_id = P_CUSTOMER_ID;
1466 
1467 l_val   VARCHAR2(1);
1468 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
1469 l_module CONSTANT VARCHAR2(255) := 'as.plsql.lcnpv.Validate_ADDRESS_ID';
1470 BEGIN
1471 
1472       -- Initialize message list if p_init_msg_list is set to TRUE.
1473       IF FND_API.to_Boolean( p_init_msg_list )
1474       THEN
1475           FND_MSG_PUB.initialize;
1476       END IF;
1477 
1478 
1479       -- Initialize API return status to SUCCESS
1480       x_return_status := FND_API.G_RET_STS_SUCCESS;
1481 
1482       IF (p_ADDRESS_ID is NOT NULL) and
1483          (p_ADDRESS_ID <> FND_API.G_MISS_NUM)
1484       THEN
1485           OPEN  C_ADDRESS_ID_Exists (p_ADDRESS_ID);
1486           FETCH C_ADDRESS_ID_Exists into l_val;
1487           IF C_ADDRESS_ID_Exists%NOTFOUND THEN
1488               IF l_debug THEN
1489               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
1490                                      'Private API: ADDRESS_ID is invalid');
1491               END IF;
1492 
1493 	      AS_UTILITY_PVT.Set_Message(p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1494 	      				 p_module        => l_module,
1495 	      				 p_msg_name      => 'AS_INVALID_ID',
1496 	      				 p_token1        => 'FIELD_ID',
1497               	  		 	 p_token1_value  =>  'ADDRESS_ID');
1498 
1499               x_return_status := FND_API.G_RET_STS_ERROR;
1500           END IF;
1501           CLOSE C_ADDRESS_ID_Exists;
1502       END IF;
1503 
1504       -- Standard call to get message count and if count is 1, get message info.
1505       FND_MSG_PUB.Count_And_Get
1506       (  p_count          =>   x_msg_count,
1507          p_data           =>   x_msg_data
1508       );
1509 
1510 END Validate_ADDRESS_ID;
1511 
1512 
1513 PROCEDURE Validate_RANK (
1514     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1515     P_Validation_mode            IN   VARCHAR2,
1516     P_RANK                       IN   VARCHAR2,
1517     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
1518     X_Return_Status              OUT NOCOPY  VARCHAR2,
1519     X_Msg_Count                  OUT NOCOPY  NUMBER,
1520     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1521     )
1522 IS
1523 
1524 CURSOR C_RANK_Exists (c_RANK VARCHAR2) IS
1525         SELECT  'X'
1526         FROM  as_lookups
1527         WHERE lookup_type = 'CONTACT_RANK_ON_OPPORTUNITY'
1528           and lookup_code = c_RANK
1529           and enabled_flag = 'Y';
1530 
1531 l_val VARCHAR2(1);
1532 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
1533 l_module CONSTANT VARCHAR2(255) := 'as.plsql.lcnpv.Validate_RANK';
1534 BEGIN
1535 
1536       -- Initialize message list if p_init_msg_list is set to TRUE.
1537       IF FND_API.to_Boolean( p_init_msg_list )
1538       THEN
1539           FND_MSG_PUB.initialize;
1540       END IF;
1541 
1542 
1543       -- Initialize API return status to SUCCESS
1544       x_return_status := FND_API.G_RET_STS_SUCCESS;
1545 
1546       IF (p_RANK is NOT NULL) and
1547          (p_RANK <> FND_API.G_MISS_CHAR)
1548       THEN
1549           -- RANK should exist in as_lookups
1550           OPEN  C_RANK_Exists ( p_RANK);
1551           FETCH C_RANK_Exists into l_val;
1552           IF C_RANK_Exists%NOTFOUND THEN
1553               IF l_debug THEN
1554               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
1555                                   'Private API: RANK is invalid');
1556               END IF;
1557 
1558 	      AS_UTILITY_PVT.Set_Message(p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1559 	      	      			 p_module        => l_module,
1560 	      	      			 p_msg_name      => 'AS_INVALID_ID',
1561 	      	      			 p_token1        => 'FIELD_ID',
1562               	  		 	 p_token1_value  =>  'RANK');
1563 
1564               x_return_status := FND_API.G_RET_STS_ERROR;
1565           END IF;
1566           CLOSE C_RANK_Exists;
1567       END IF;
1568 
1569       -- Standard call to get message count and if count is 1, get message info.
1570       FND_MSG_PUB.Count_And_Get
1571       (  p_count          =>   x_msg_count,
1572          p_data           =>   x_msg_data
1573       );
1574 
1575 END Validate_RANK;
1576 
1577 
1578 PROCEDURE Validate_PHONE_ID (
1579     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1580     P_Validation_mode            IN   VARCHAR2,
1581     P_CONTACT_ID         IN   NUMBER,
1582     P_CONTACT_PARTY_ID       IN   NUMBER,
1583     P_PHONE_ID                   IN   NUMBER,
1584     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
1585     X_Return_Status              OUT NOCOPY  VARCHAR2,
1586     X_Msg_Count                  OUT NOCOPY  NUMBER,
1587     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1588     )
1589 IS
1590 
1591 CURSOR  C_PHONE_ID_Exists(c_phone_id NUMBER) IS
1592     SELECT 'X'
1593     FROM    AS_PARTY_PHONES_V
1594     WHERE   phone_id = c_phone_id
1595     AND     owner_table_name = 'HZ_PARTIES'
1596     AND owner_table_id = P_CONTACT_PARTY_ID;
1597 
1598 l_val   VARCHAR2(1);
1599 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
1600 l_module CONSTANT VARCHAR2(255) := 'as.plsql.lcnpv.Validate_PHONE_ID';
1601 BEGIN
1602 
1603       -- Initialize message list if p_init_msg_list is set to TRUE.
1604       IF FND_API.to_Boolean( p_init_msg_list )
1605       THEN
1606           FND_MSG_PUB.initialize;
1607       END IF;
1608 
1609 
1610       -- Initialize API return status to SUCCESS
1611       x_return_status := FND_API.G_RET_STS_SUCCESS;
1612 
1613       IF (p_PHONE_ID is NOT NULL) and
1614          (p_PHONE_ID <> FND_API.G_MISS_NUM)
1615       THEN
1616           OPEN  C_PHONE_ID_Exists (p_PHONE_ID);
1617           FETCH C_PHONE_ID_Exists into l_val;
1618           IF C_PHONE_ID_Exists%NOTFOUND THEN
1619               IF l_debug THEN
1620               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
1621                                      'Private API: PHONE_ID is invalid');
1622               END IF;
1623 
1624               AS_UTILITY_PVT.Set_Message(p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1625 	      				 p_module        => l_module,
1626 	      				 p_msg_name      => 'AS_INVALID_ID',
1627 	      				 p_token1        => 'FIELD_ID',
1628               	  		 	 p_token1_value  =>  'PHONE_ID');
1629 
1630               x_return_status := FND_API.G_RET_STS_ERROR;
1631           END IF;
1632           CLOSE C_PHONE_ID_Exists;
1633       END IF;
1634 
1635       -- Standard call to get message count and if count is 1, get message info.
1636       FND_MSG_PUB.Count_And_Get
1637       (  p_count          =>   x_msg_count,
1638          p_data           =>   x_msg_data
1639       );
1640 
1641 END Validate_PHONE_ID;
1642 
1643 
1644 PROCEDURE Validate_PRIMARY_CONTACT_FLAG (
1645     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1646     P_Validation_mode            IN   VARCHAR2,
1647     P_PRIMARY_CONTACT_FLAG                IN   VARCHAR2,
1648     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
1649     X_Return_Status              OUT NOCOPY  VARCHAR2,
1650     X_Msg_Count                  OUT NOCOPY  NUMBER,
1651     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1652     )
1653 IS
1654 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
1655 l_module CONSTANT VARCHAR2(255) := 'as.plsql.lcnpv.Validate_PRIMARY_CONTACT_FLAG';
1656 BEGIN
1657       -- Initialize message list if p_init_msg_list is set to TRUE.
1658       IF FND_API.to_Boolean( p_init_msg_list )
1659       THEN
1660           FND_MSG_PUB.initialize;
1661       END IF;
1662 
1663 
1664       -- Initialize API return status to SUCCESS
1665       x_return_status := FND_API.G_RET_STS_SUCCESS;
1666 
1667       -- validate NOT NULL column
1668       IF(p_PRIMARY_CONTACT_FLAG is NULL OR
1669          p_PRIMARY_CONTACT_FLAG = FND_API.G_MISS_CHAR )
1670       THEN
1671       NULL;
1672       /* Not required item
1673           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
1674                       'Private API: Violate NOT NULL constraint(PRIMARY_CONTACT_FLAG)');
1675           x_return_status := FND_API.G_RET_STS_ERROR;
1676       */
1677       ELSE
1678           IF (UPPER(p_PRIMARY_CONTACT_FLAG) <> 'Y') and
1679              (UPPER(p_PRIMARY_CONTACT_FLAG) <> 'N')
1680           THEN
1681               IF l_debug THEN
1682               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
1683                                'Private API: PRIMARY_CONTACT_FLAG is invalid');
1684 
1685               END IF;
1686 
1687               AS_UTILITY_PVT.Set_Message(p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1688 	      				 p_module        => l_module,
1689 	      				 p_msg_name      => 'AS_INVALID_ID',
1690 	      				 p_token1        => 'FIELD_ID',
1691               	  		 	 p_token1_value  =>  'PRIMARY_CONTACT_FLAG');
1692 
1693               x_return_status := FND_API.G_RET_STS_ERROR;
1694           END IF;
1695       END IF;
1696 
1697       -- Standard call to get message count and if count is 1, get message info.
1698       FND_MSG_PUB.Count_And_Get
1699       (  p_count          =>   x_msg_count,
1700          p_data           =>   x_msg_data
1701       );
1702 
1703 END Validate_PRIMARY_CONTACT_FLAG;
1704 
1705 
1706 PROCEDURE Validate_CONTACT_PARTY_ID (
1707     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1708     P_Validation_mode            IN   VARCHAR2,
1709     P_CUSTOMER_ID                IN   NUMBER,
1710     p_LEAD_ID                    IN   NUMBER,  -- change for 5285071
1711     P_CONTACT_PARTY_ID           IN   NUMBER,
1712     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
1713     X_Return_Status              OUT NOCOPY  VARCHAR2,
1714     X_Msg_Count                  OUT NOCOPY  NUMBER,
1715     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1716     )
1717 IS
1718 CURSOR  C_CONTACT_PARTY_ID_Exists (c_CONTACT_PARTY_ID NUMBER) IS
1719         SELECT 'X'
1720         FROM  HZ_RELATIONSHIPS
1721         WHERE object_id = P_CUSTOMER_ID
1722     AND   party_id = c_CONTACT_PARTY_ID
1723         AND OBJECT_TABLE_NAME = 'HZ_PARTIES'
1724     AND SUBJECT_TABLE_NAME = 'HZ_PARTIES'
1725     AND STATUS in ('A', 'I');
1726 
1727 -- Cursor to check for duplicate contacts , bug 5285071
1728 CURSOR C_Contact_party_id_dup( c_lead_id NUMBER, c_contact_party_id NUMBER) IS
1729         SELECT contact_party_id
1730         from as_lead_contacts
1731         where lead_id = c_lead_id
1732         and contact_party_id = c_contact_party_id;
1733 
1734 
1735 
1736 
1737 l_dup NUMBER;
1738 l_val   VARCHAR2(1);
1739 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
1740 l_module CONSTANT VARCHAR2(255) := 'as.plsql.lcnpv.Validate_CONTACT_PARTY_ID';
1741 BEGIN
1742 
1743       -- Initialize message list if p_init_msg_list is set to TRUE.
1744       IF FND_API.to_Boolean( p_init_msg_list )
1745       THEN
1746           FND_MSG_PUB.initialize;
1747       END IF;
1748 
1749 
1750       -- Initialize API return status to SUCCESS
1751       x_return_status := FND_API.G_RET_STS_SUCCESS;
1752 
1753       IF (p_CONTACT_PARTY_ID is NULL) OR (p_CONTACT_PARTY_ID = FND_API.G_MISS_NUM)
1754       THEN
1755           IF l_debug THEN
1756           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
1757                       'Private API: Violate NOT NULL CONTACT_PARTY_ID');
1758           END IF;
1759 
1760 	  AS_UTILITY_PVT.Set_Message(p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1761 	  	      		     p_module        => l_module,
1762 	  	      		     p_msg_name      => 'AS_INVALID_ID',
1763 	  	      		     p_token1        => 'FIELD_ID',
1764               	  		     p_token1_value  =>  'CONTACT_PARTY_ID');
1765 
1766           x_return_status := FND_API.G_RET_STS_ERROR;
1767       END IF;
1768 
1769       IF (p_CONTACT_PARTY_ID is not NULL) and (p_CONTACT_PARTY_ID <> FND_API.G_MISS_NUM)
1770       THEN
1771           OPEN  C_CONTACT_PARTY_ID_Exists (p_CONTACT_PARTY_ID);
1772           FETCH C_CONTACT_PARTY_ID_Exists into l_val;
1773           IF C_CONTACT_PARTY_ID_Exists%NOTFOUND
1774           THEN
1775               IF l_debug THEN
1776               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
1777                                  'Private API: CONTACT_PARTY_ID is not valid');
1778               END IF;
1779 
1780 	      AS_UTILITY_PVT.Set_Message(p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1781 	      	  	      		 p_module        => l_module,
1782 	      	  	      		 p_msg_name      => 'AS_INVALID_ID',
1783 	      	  	      		 p_token1        => 'FIELD_ID',
1784               	  		         p_token1_value  =>  'CONTACT_PARTY_ID');
1785 
1786               x_return_status := FND_API.G_RET_STS_ERROR;
1787           END IF;
1788           CLOSE C_CONTACT_PARTY_ID_Exists;
1789 
1790         -- mohali changes for bug 5285071
1791          OPEN C_contact_party_id_dup(p_lead_id, p_contact_party_id);
1792             FETCH C_contact_party_id_dup into l_dup;
1793               IF C_contact_party_id_dup%FOUND and P_Validation_mode = AS_UTILITY_PVT.G_CREATE THEN
1794                  IF l_debug THEN
1795                     AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
1796                                  'Private API: CONTACT_PARTY_ID is Duplicate');
1797                  END IF;
1798 
1799 	         AS_UTILITY_PVT.Set_Message(p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1800 	      	  	      		 p_module        => l_module,
1801 	      	  	      		 p_msg_name      => 'API_POSSIBLE_DUP_CONTACT',
1802 	      	  	      		 p_token1        => 'CONTACT_ID',
1803               	  		         p_token1_value  =>  p_CONTACT_PARTY_ID,
1804                                          p_token2        => 'CONTACT_NAME',
1805               	  		         p_token2_value  =>  '');
1806 
1807                   x_return_status := FND_API.G_RET_STS_ERROR;
1808               END IF;
1809             CLOSE C_contact_party_id_dup;
1810          -- end of changes for 5285071
1811 
1812       END IF;
1813 
1814       -- Standard call to get message count and if count is 1, get message info.
1815       FND_MSG_PUB.Count_And_Get
1816       (  p_count          =>   x_msg_count,
1817          p_data           =>   x_msg_data
1818       );
1819 
1820 END Validate_CONTACT_PARTY_ID;
1821 
1822 
1823 -- Hint: inter-field level validation can be added here.
1824 -- Hint: If p_validation_mode = AS_UTILITY_PVT.G_VALIDATE_UPDATE, we should use
1825 --       cursor to get old values for all fields used in inter-field validation
1826 --       and set all G_MISS_XXX fields to original value stored in database
1827 --       table.
1828 PROCEDURE Validate_Contact_rec(
1829     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1830     P_Validation_mode            IN   VARCHAR2,
1831     P_Contact_Rec     IN    AS_OPPORTUNITY_PUB.Contact_Rec_Type,
1832     X_Return_Status              OUT NOCOPY  VARCHAR2,
1833     X_Msg_Count                  OUT NOCOPY  NUMBER,
1834     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1835     )
1836 IS
1837     l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
1838     l_module CONSTANT VARCHAR2(255) := 'as.plsql.lcnpv.Validate_Contact_rec';
1839 BEGIN
1840 
1841       -- Initialize message list if p_init_msg_list is set to TRUE.
1842       IF FND_API.to_Boolean( p_init_msg_list )
1843       THEN
1844           FND_MSG_PUB.initialize;
1845       END IF;
1846 
1847 
1848       -- Initialize API return status to SUCCESS
1849       x_return_status := FND_API.G_RET_STS_SUCCESS;
1850 
1851        -- Hint: Validate data
1852       -- If data not valid
1853       -- THEN
1854       -- x_return_status := FND_API.G_RET_STS_ERROR;
1855 
1856       -- Debug Message
1857       IF l_debug THEN
1858       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1859                                    'Private API: Validated Record');
1860       END IF;
1861       -- Standard call to get message count and if count is 1, get message info.
1862       FND_MSG_PUB.Count_And_Get
1863       (  p_count          =>   x_msg_count,
1864          p_data           =>   x_msg_data
1865       );
1866 
1867 END Validate_Contact_Rec;
1868 
1869 PROCEDURE Validate_opp_contact(
1870     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1871     P_Validation_level           IN   NUMBER := FND_API.G_VALID_LEVEL_FULL,
1872     P_Validation_mode            IN   VARCHAR2,
1873     P_Contact_Rec                IN   AS_OPPORTUNITY_PUB.Contact_Rec_Type,
1874     X_Return_Status              OUT NOCOPY  VARCHAR2,
1875     X_Msg_Count                  OUT NOCOPY  NUMBER,
1876     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1877     )
1878 IS
1879 l_api_name          CONSTANT VARCHAR2(30) := 'Validate_opp_contact';
1880 X_Item_Property_Rec     AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE;
1881 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
1882 l_module CONSTANT VARCHAR2(255) := 'as.plsql.lcnpv.Validate_opp_contact';
1883  BEGIN
1884 
1885       -- Debug Message
1886       IF l_debug THEN
1887       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1888                                    'Private API: ' || l_api_name || ' start');
1889       END IF;
1890 
1891       -- Initialize API return status to SUCCESS
1892       x_return_status := FND_API.G_RET_STS_SUCCESS;
1893 
1894       IF (p_validation_level >= AS_UTILITY_PUB.G_VALID_LEVEL_ITEM) THEN
1895           -- Hint: We provide validation procedure for every column. Developer
1896           --       should delete unnecessary validation procedures.
1897           IF l_debug THEN
1898           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1899                     'Private API: Validate items start');
1900 
1901           END IF;
1902 
1903           Validate_LEAD_CONTACT_ID(
1904               p_init_msg_list          => FND_API.G_FALSE,
1905               p_validation_mode        => p_validation_mode,
1906               p_LEAD_CONTACT_ID        => P_Contact_Rec.LEAD_CONTACT_ID,
1907               x_item_property_rec      => x_item_property_rec,
1908               x_return_status          => x_return_status,
1909               x_msg_count              => x_msg_count,
1910               x_msg_data               => x_msg_data);
1911           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1912               raise FND_API.G_EXC_ERROR;
1913           END IF;
1914           IF l_debug THEN
1915           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1916                     'Private API: Validated LEAD_CONTACT_ID ');
1917 
1918           END IF;
1919 
1920           Validate_LEAD_ID(
1921               p_init_msg_list          => FND_API.G_FALSE,
1922               p_validation_mode        => p_validation_mode,
1923               p_LEAD_ID                => P_Contact_Rec.LEAD_ID,
1924               x_item_property_rec      => x_item_property_rec,
1925               x_return_status          => x_return_status,
1926               x_msg_count              => x_msg_count,
1927               x_msg_data               => x_msg_data);
1928           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1929               raise FND_API.G_EXC_ERROR;
1930           END IF;
1931           IF l_debug THEN
1932           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1933                     'Private API: Validated LEAD_ID ');
1934 
1935           END IF;
1936 
1937           Validate_CUSTOMER_ID(
1938               p_init_msg_list          => FND_API.G_FALSE,
1939               p_validation_mode        => p_validation_mode,
1940               p_CUSTOMER_ID            => P_Contact_Rec.CUSTOMER_ID,
1941               x_item_property_rec      => x_item_property_rec,
1942               x_return_status          => x_return_status,
1943               x_msg_count              => x_msg_count,
1944               x_msg_data               => x_msg_data);
1945           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1946               raise FND_API.G_EXC_ERROR;
1947           END IF;
1948           IF l_debug THEN
1949           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1950                     'Private API: Validated CUSTOMER_ID ');
1951           END IF;
1952 
1953 
1954           Validate_ADDRESS_ID(
1955               p_init_msg_list          => FND_API.G_FALSE,
1956               p_validation_mode        => p_validation_mode,
1957               p_CUSTOMER_ID            => P_Contact_Rec.CUSTOMER_ID,
1958               p_ADDRESS_ID             => P_Contact_Rec.ADDRESS_ID,
1959               x_item_property_rec      => x_item_property_rec,
1960               x_return_status          => x_return_status,
1961               x_msg_count              => x_msg_count,
1962               x_msg_data               => x_msg_data);
1963           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1964               raise FND_API.G_EXC_ERROR;
1965           END IF;
1966           IF l_debug THEN
1967           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1968                     'Private API: Validated ADDRESS_ID ');
1969           END IF;
1970 
1971           Validate_CONTACT_PARTY_ID(
1972               p_init_msg_list          => FND_API.G_FALSE,
1973               p_validation_mode        => p_validation_mode,
1974           p_CUSTOMER_ID        => P_Contact_Rec.CUSTOMER_ID,
1975 	      p_LEAD_ID           =>    P_Contact_Rec.Lead_ID,
1976               p_CONTACT_PARTY_ID       => P_Contact_Rec.CONTACT_PARTY_ID,
1977               x_item_property_rec      => x_item_property_rec,
1978               x_return_status          => x_return_status,
1979               x_msg_count              => x_msg_count,
1980               x_msg_data               => x_msg_data);
1981           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1982               raise FND_API.G_EXC_ERROR;
1983           END IF;
1984           IF l_debug THEN
1985           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1986                     'Private API: Validated CONTACT_PARTY_ID');
1987 
1988           END IF;
1989 
1990           Validate_CONTACT_ID(
1991               p_init_msg_list          => FND_API.G_FALSE,
1992               p_validation_mode        => p_validation_mode,
1993           p_CUSTOMER_ID        => P_Contact_Rec.CUSTOMER_ID,
1994               p_CONTACT_ID             => P_Contact_Rec.CONTACT_ID,
1995               x_item_property_rec      => x_item_property_rec,
1996               x_return_status          => x_return_status,
1997               x_msg_count              => x_msg_count,
1998               x_msg_data               => x_msg_data);
1999           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2000               raise FND_API.G_EXC_ERROR;
2001           END IF;
2002           IF l_debug THEN
2003           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2004                     'Private API: Validated CONTACT_ID ');
2005 
2006           END IF;
2007 
2008           Validate_PHONE_ID(
2009               p_init_msg_list          => FND_API.G_FALSE,
2010               p_validation_mode        => p_validation_mode,
2011               p_CONTACT_ID             => P_Contact_Rec.CONTACT_ID,
2012               p_CONTACT_PARTY_ID       => P_Contact_Rec.CONTACT_PARTY_ID,
2013               p_PHONE_ID               => P_Contact_Rec.PHONE_ID,
2014               x_item_property_rec      => x_item_property_rec,
2015               x_return_status          => x_return_status,
2016               x_msg_count              => x_msg_count,
2017               x_msg_data               => x_msg_data);
2018           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2019               raise FND_API.G_EXC_ERROR;
2020           END IF;
2021           IF l_debug THEN
2022           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2023                     'Private API: Validated PHONE_ID ');
2024 
2025           END IF;
2026 
2027           Validate_RANK(
2028               p_init_msg_list          => FND_API.G_FALSE,
2029               p_validation_mode        => p_validation_mode,
2030               p_RANK                   => P_Contact_Rec.RANK_CODE,
2031               x_item_property_rec      => x_item_property_rec,
2032               x_return_status          => x_return_status,
2033               x_msg_count              => x_msg_count,
2034               x_msg_data               => x_msg_data);
2035           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2036               raise FND_API.G_EXC_ERROR;
2037           END IF;
2038           IF l_debug THEN
2039           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2040                     'Private API: Validated RANK ');
2041 
2042           END IF;
2043 
2044           Validate_ENABLED_FLAG(
2045               p_init_msg_list          => FND_API.G_FALSE,
2046               p_validation_mode        => p_validation_mode,
2047               p_ENABLED_FLAG           => P_Contact_Rec.ENABLED_FLAG,
2048               x_item_property_rec      => x_item_property_rec,
2049               x_return_status          => x_return_status,
2050               x_msg_count              => x_msg_count,
2051               x_msg_data               => x_msg_data);
2052           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2053               raise FND_API.G_EXC_ERROR;
2054           END IF;
2055           IF l_debug THEN
2056           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2057                     'Private API: Validated ENABLED_FLAG ');
2058 
2059           END IF;
2060 
2061           Validate_PRIMARY_CONTACT_FLAG(
2062               p_init_msg_list          => FND_API.G_FALSE,
2063               p_validation_mode        => p_validation_mode,
2064               p_PRIMARY_CONTACT_FLAG   => P_Contact_Rec.PRIMARY_CONTACT_FLAG,
2065               x_item_property_rec      => x_item_property_rec,
2066               x_return_status          => x_return_status,
2067               x_msg_count              => x_msg_count,
2068               x_msg_data               => x_msg_data);
2069           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2070               raise FND_API.G_EXC_ERROR;
2071           END IF;
2072           IF l_debug THEN
2073           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2074                     'Private API: Validated PRIMARY_CONTACT_FLAG ');
2075 
2076           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2077                     'Private API: Validate items end');
2078       END IF;
2079 
2080       END IF;
2081 
2082       IF (p_validation_level >= AS_UTILITY_PUB.G_VALID_LEVEL_RECORD) THEN
2083           -- Hint: Inter-field level validation can be added here
2084           -- invoke record level validation procedures
2085           Validate_Contact_Rec(
2086               p_init_msg_list          => FND_API.G_FALSE,
2087               p_validation_mode        => p_validation_mode,
2088               P_Contact_Rec     =>    P_Contact_Rec,
2089               x_return_status          => x_return_status,
2090               x_msg_count              => x_msg_count,
2091               x_msg_data               => x_msg_data);
2092 
2093           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2094               raise FND_API.G_EXC_ERROR;
2095           END IF;
2096       END IF;
2097 
2098       IF (p_validation_level >= AS_UTILITY_PUB.G_VALID_LEVEL_INTER_RECORD) THEN
2099           -- invoke inter-record level validation procedures
2100           NULL;
2101       END IF;
2102 
2103       IF (p_validation_level >= AS_UTILITY_PUB.G_VALID_LEVEL_INTER_ENTITY) THEN
2104           -- invoke inter-entity level validation procedures
2105           NULL;
2106       END IF;
2107 
2108 
2109       -- Debug Message
2110       IF l_debug THEN
2111       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2112                                    'Private API: ' || l_api_name || ' end');
2113       END IF;
2114 END Validate_opp_contact;
2115 
2116 
2117 End AS_OPP_CONTACT_PVT;