DBA Data[Home] [Help]

PACKAGE BODY: APPS.AS_LEAD_ROUTING_WF_CUHK

Source


1 PACKAGE BODY AS_LEAD_ROUTING_WF_CUHK AS
2 /* $Header: asxcldob.pls 115.7 2003/01/22 03:12:05 solin ship $ */
3 
4 -- Start of Comments
5 -- Package Name     : AS_LEAD_ROUTING_WF_CUHK
6 -- Purpose          : This file is customizable for Oracle customers to
7 --                    add logic to get owner of the lead.
8 -- NOTE             :
9 -- History          :
10 --       12/06/2001   SOLIN   Created
11 --                    This is sample package body. This file should be
12 --                    provided by Oracle's customer.
13 --       12/08/2001   SOLIN, bug 2137318.
14 --                    Customize for Oracle internal.
15 --       11/19/2002   SOLIN, Bug 2629604.
16 --                    The resource from territory API will have higher
17 --                    precedence to be lead owner
18 --       12/23/2002   SOLIN  Bug 2724757
19 --                    Incorrect lead owner due to extra resources
20 --                    by build_lead_sales_team and rebuild_lead_sales_team.
21 -- End of Comments
22 
23 /*-------------------------------------------------------------------------*
24  |
25  |                             PRIVATE CONSTANTS
26  |
27  *-------------------------------------------------------------------------*/
28 G_PKG_NAME  CONSTANT VARCHAR2(30):= 'AS_LEAD_ROUTING_WF_CUHK';
29 G_FILE_NAME CONSTANT VARCHAR2(12) := 'asxcldob.pls';
30 
31 /*-------------------------------------------------------------------------*
32  |
33  |                             PRIVATE DATATYPES
34  |
35  *-------------------------------------------------------------------------*/
36 
37 /*-------------------------------------------------------------------------*
38  |
39  |                             PRIVATE VARIABLES
40  |
41  *-------------------------------------------------------------------------*/
42 
43 /*-------------------------------------------------------------------------*
44  |
45  |                             PRIVATE ROUTINES
46  |
47  *-------------------------------------------------------------------------*/
48 
49 -- Start of Comments
50 --
51 --   API name   : Get_Owner_Pre
52 --   Parameters :
53 --   IN         :
54 --       p_api_version_number:
55 --       p_init_msg_list     :
56 --       p_validation_level  :
57 --       p_commit            :
58 --                             The above four parameters are standard input.
59 --       p_resource_id_tbl   :
60 --       p_group_id_tbl      :
61 --       p_person_id_tbl     :
62 --                             The above three parameters store the available
63 --                             resources for this customized package to decide
64 --                             owner of the sales lead. Their datatype is
65 --                             TABLE of NUMBERs.
66 --       p_resource_flag_tbl :
67 --                             This parameter specify the source of the
68 --                             resource.
69 --                             'D': This is default resource, comes from the
70 --                                  profile AS_DEFAULT_RESOURCE_ID, "OS:
71 --                                  Default Resource ID used for Sales Lead
72 --                                  Assignment"
73 --                             'L': This is login user.
74 --                             'T': This resource comes from territory
75 --                                  definition.
76 --       p_sales_lead_rec    :
77 --                             This is the whole definition of the sales lead.
78 --                             This record is provided to help Oracle customer
79 --                             decide sales lead owner.
80 --   OUT        :
81 --       x_resource_id       :
82 --       x_group_id          :
83 --       x_person_id         :
84 --                             The above three parameters store the result
85 --                             of this user hook. It will be set as sales
86 --                             lead owner. If x_resource_id is NULL, owner
87 --                             will be decided based upon Oracle's logic.
88 --       x_return_status     :
89 --       x_msg_count         :
90 --       x_msg_data          :
91 --                             The above three parameters are standard output.
92 --
93 PROCEDURE Get_Owner_Pre(
94     p_api_version_number    IN  NUMBER,
95     p_init_msg_list         IN  VARCHAR2 := FND_API.G_FALSE,
96     p_validation_level      IN  VARCHAR2 := FND_API.G_VALID_LEVEL_FULL,
97     p_commit                IN  VARCHAR2 := FND_API.G_FALSE,
98     p_resource_id_tbl       IN  AS_LEAD_ROUTING_WF.NUMBER_TABLE,
99     p_group_id_tbl          IN  AS_LEAD_ROUTING_WF.NUMBER_TABLE,
100     p_person_id_tbl         IN  AS_LEAD_ROUTING_WF.NUMBER_TABLE,
101     p_resource_flag_tbl     IN  AS_LEAD_ROUTING_WF.FLAG_TABLE,
102     p_sales_lead_rec        IN  AS_SALES_LEADS_PUB.SALES_LEAD_Rec_Type,
103     x_resource_id           OUT NOCOPY NUMBER,
104     x_group_id              OUT NOCOPY NUMBER,
105     x_person_id             OUT NOCOPY NUMBER,
106     x_return_status         OUT NOCOPY VARCHAR2,
107     x_msg_count             OUT NOCOPY NUMBER,
108     x_msg_data              OUT NOCOPY VARCHAR2
109     )
110  IS
111     CURSOR c_get_terr_resource1(c_sales_lead_id NUMBER, c_party_id NUMBER,
112                                 c_party_site_id NUMBER, c_lead VARCHAR2,
113                                 c_account VARCHAR2) IS
114       SELECT acc.salesforce_id, acc.sales_group_id
115       FROM as_accesses_all acc, as_territory_accesses terracc,
116            jtf_terr_rsc_all terrrsc
117       WHERE acc.sales_lead_id = c_sales_lead_id
118       AND acc.created_by_tap_flag = 'Y'
119       AND acc.access_id = terracc.access_id
120       AND terracc.territory_id = terrrsc.terr_id
121       AND terrrsc.resource_id = acc.salesforce_id
122       AND terrrsc.role = 'TELESALES_AGENT'
123       ORDER BY acc.access_id;
124 
125     CURSOR c_get_terr_resource2(c_sales_lead_id NUMBER, c_party_id NUMBER,
126                                 c_party_site_id NUMBER, c_lead VARCHAR2,
127                                 c_account VARCHAR2) IS
128       SELECT acc.salesforce_id, acc.sales_group_id
129       FROM as_accesses_all acc
130       WHERE acc.sales_lead_id = c_sales_lead_id
131       AND acc.created_by_tap_flag = 'Y'
132       ORDER BY acc.access_id;
133 
134     -- A resource may not be in any group. Besides, jtf_rs_group_members
135     -- may not have person_id for all resources. Therefore, get person_id
136     -- is this cursor.
137     CURSOR c_get_person_id(c_resource_id NUMBER) IS
138       SELECT res.source_id
139       FROM jtf_rs_resource_extns res
140       WHERE res.resource_id = c_resource_id;
141 
142     CURSOR C_Get_Lead_Info(C_Sales_Lead_Id NUMBER) IS
143       SELECT SL.CUSTOMER_ID, SL.ADDRESS_ID
144       FROM AS_SALES_LEADS SL
145       WHERE SL.SALES_LEAD_ID = C_Sales_Lead_Id;
146 
147     l_api_name                  CONSTANT VARCHAR2(30)
148                                 := 'Get_Owner_Pre';
149     l_api_version_number        CONSTANT NUMBER   := 2.0;
150     l_resource_id               NUMBER := NULL;
151     l_group_id                  NUMBER;
152     l_person_id                 NUMBER;
153     l_customer_id               NUMBER;
154     l_address_id                NUMBER;
155 BEGIN
156       -- Standard Start of API savepoint
157       SAVEPOINT GET_OWNER_PRE_PVT;
158 
159       -- Standard call to check for call compatibility.
160       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
161                                            p_api_version_number,
162                                            l_api_name,
163                                            G_PKG_NAME)
164       THEN
165           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
166       END IF;
167 
168       -- Initialize message list IF p_init_msg_list is set to TRUE.
169       IF FND_API.to_Boolean( p_init_msg_list )
170       THEN
171           FND_MSG_PUB.initialize;
172       END IF;
173 
174       -- Debug Message
175       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
176                                    'PVT:' || l_api_name || ' Start');
177 
178       -- Initialize API return status to SUCCESS
179       x_return_status := FND_API.G_RET_STS_SUCCESS;
180 
181       --
182       -- Api body
183       --
184       -- ******************************************************************
185       -- Validate Environment
186       -- ******************************************************************
187 
188       IF FND_GLOBAL.User_Id IS NULL
189       THEN
190           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
191           THEN
192               AS_UTILITY_PVT.Set_Message(
193                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
194                   p_msg_name      => 'UT_CANNOT_GET_PROFILE_VALUE',
195                   p_token1        => 'PROFILE',
196                   p_token1_value  => 'USER_ID');
197           END IF;
198           RAISE FND_API.G_EXC_ERROR;
199       END IF;
200 
201       -- For Oracle internal use, p_resource_id_tbl, p_person_id_tbl,
202       -- p_group_id_tbl, p_resource_flag_tbl are all NULL. p_sales_lead_rec
203       -- has sales_lead_id populated only, other columns are all g_miss.
204 
205       OPEN C_Get_Lead_Info(p_sales_lead_rec.sales_lead_id);
206       FETCH C_Get_Lead_Info INTO l_customer_id, l_address_id;
207       CLOSE C_Get_Lead_Info;
208 
209       -- Get the first resource with TELESALES_AGENT role
210       OPEN c_get_terr_resource1(p_sales_lead_rec.sales_lead_id,
211                                 l_customer_id, l_address_id, 'LEAD',
212                                 'ACCOUNT');
213       FETCH c_get_terr_resource1 INTO l_resource_id, l_group_id;
214       CLOSE c_get_terr_resource1;
215 
216       IF l_resource_id IS NULL
217       THEN
218 
219           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
220                                    'There''s no Telesales Agent');
221           OPEN c_get_terr_resource2(p_sales_lead_rec.sales_lead_id,
222                                     l_customer_id, l_address_id, 'LEAD',
223                                     'ACCOUNT');
224           FETCH c_get_terr_resource2 INTO l_resource_id, l_group_id;
225           CLOSE c_get_terr_resource2;
226       END IF;
227 
228       IF l_resource_id IS NOT NULL
229       THEN
230           OPEN c_get_person_id(l_resource_id);
231           FETCH c_get_person_id INTO l_person_id;
232           CLOSE c_get_person_id;
233 
234           x_resource_id := l_resource_id;
235           x_group_id := l_group_id;
236           x_person_id := l_person_id;
237       ELSE
238           -- There's no resource found, return NULL.
239           -- Sales lead assignment API will pick owner from profile,
240           -- or current user.
241           x_resource_id := NULL;
242       END IF;
243 
244       --
245       -- END of API body
246       --
247 
248       -- Standard check for p_commit
249       IF FND_API.to_Boolean( p_commit )
250       THEN
251           COMMIT WORK;
252       END IF;
253 
254       -- Debug Message
255       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
256                                    'PVT: ' || l_api_name || ' End');
257 
258       -- Standard call to get message count and IF count is 1, get message info.
259       FND_MSG_PUB.Count_And_Get
260       (  p_count          =>   x_msg_count,
261          p_data           =>   x_msg_data );
262 
263       EXCEPTION
264           WHEN FND_API.G_EXC_ERROR THEN
265               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
266                    P_API_NAME => L_API_NAME
267                   ,P_PKG_NAME => G_PKG_NAME
268                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR
269                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
270                   ,X_MSG_COUNT => X_MSG_COUNT
271                   ,X_MSG_DATA => X_MSG_DATA
272                   ,X_RETURN_STATUS => X_RETURN_STATUS);
273 
274           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
275               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
276                    P_API_NAME => L_API_NAME
277                   ,P_PKG_NAME => G_PKG_NAME
278                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
279                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
280                   ,X_MSG_COUNT => X_MSG_COUNT
281                   ,X_MSG_DATA => X_MSG_DATA
282                   ,X_RETURN_STATUS => X_RETURN_STATUS);
283 
284           WHEN OTHERS THEN
285               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
286                    P_API_NAME => L_API_NAME
287                   ,P_PKG_NAME => G_PKG_NAME
288                   ,P_EXCEPTION_LEVEL => AS_UTILITY_PVT.G_EXC_OTHERS
289                   ,P_SQLCODE => SQLCODE
290                   ,P_SQLERRM => SQLERRM
291                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
292                   ,X_MSG_COUNT => X_MSG_COUNT
293                   ,X_MSG_DATA => X_MSG_DATA
294                   ,X_RETURN_STATUS => X_RETURN_STATUS);
295 END Get_Owner_Pre;
296 
297 
298 END AS_LEAD_ROUTING_WF_CUHK;
299