DBA Data[Home] [Help]

PACKAGE BODY: APPS.AHL_VWP_TASKS_PUB

Source


1 PACKAGE BODY AHL_VWP_TASKS_PUB AS
2 /* $Header: AHLPTSKB.pls 120.0 2008/04/03 06:00:28 jaramana noship $ */
3 
4 G_PKG_NAME        CONSTANT VARCHAR2(30) := 'AHL_VWP_TASKS_PUB';
5 
6 -- Declare local functions and procedures
7 PROCEDURE Validate_And_Prepare_Params(
8     p_visit_id         IN            NUMBER,
9     p_visit_number     IN            NUMBER,
10     p_department_id    IN            NUMBER,
11     p_department_code  IN            VARCHAR2,
12     p_x_tasks_tbl      IN OUT NOCOPY AHL_VWP_RULES_PVT.Task_Tbl_Type);
13 
14 
15 -------------------------------------------------------------------------------------------
16 -- Start of Comments
17 --  Procedure name    : Create_Planned_Tasks
18 --  Type              : Public
19 --  Function          : Creates planned tasks and adds them to an existing visit.
20 --  Pre-reqs          :
21 --  Parameters        :
22 --
23 --  Create_Planned_Tasks Parameters:
24 --       p_visit_id         IN            NUMBER   := null Not needed if p_visit_number is given
25 --       p_visit_number     IN            NUMBER   := null Ignored if p_visit_id is given
26 --       p_department_id    IN            NUMBER   := null Not needed if p_department_code is given
27 --       p_department_code  IN            VARCHAR2 := null Ignored if p_department_id is given
28 --       p_x_tasks_tbl      IN OUT NOCOPY AHL_VWP_RULES_PVT.Task_Tbl_Type
29 --                          UNIT_EFFECTIVITY_ID is Mandatory
30 --                          ATTRIBUTE_CATEGORY  is Optional
31 --                          ATTRIBUTE1..ATTRIBUTE15 are Optional
32 --                          All others input attributes are ignored
33 --                          VISIT_TASK_ID has the return value: Id of the task created for the UE.
34 --
35 --  End of Comments
36 -------------------------------------------------------------------------------------------
37 PROCEDURE Create_Planned_Tasks (
38     p_api_version      IN            NUMBER,
39     p_init_msg_list    IN            VARCHAR2 := FND_API.G_FALSE,
40     p_commit           IN            VARCHAR2 := FND_API.G_FALSE,
41     p_validation_level IN            NUMBER   := FND_API.G_VALID_LEVEL_FULL,
42     p_visit_id         IN            NUMBER   := null, -- Not needed if p_visit_number is given
43     p_visit_number     IN            NUMBER   := null, -- Ignored if p_visit_id is given
44     p_department_id    IN            NUMBER   := null, -- Not needed if p_department_code is given
45     p_department_code  IN            VARCHAR2 := null, -- Ignored if p_department_id is given
46     p_x_tasks_tbl      IN OUT NOCOPY AHL_VWP_RULES_PVT.Task_Tbl_Type,
47     x_return_status    OUT NOCOPY    VARCHAR2,
48     x_msg_count        OUT NOCOPY    NUMBER,
49     x_msg_data         OUT NOCOPY    VARCHAR2
50 ) IS
51 
52 --
53 l_api_version  CONSTANT NUMBER       := 1.0;
54 l_api_name     CONSTANT VARCHAR2(30) := 'Create_Planned_Tasks';
55 l_full_name    CONSTANT VARCHAR2(60) := 'ahl.plsql.'||G_PKG_NAME||'.'||l_api_name;
56 
57 --
58 
59 BEGIN
60     IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
61         FND_LOG.string(FND_LOG.level_procedure, l_full_name || '.begin', 'At the start of the API.' ||
62                        ' p_visit_id = ' || p_visit_id ||
63                        ', p_visit_number = ' || p_visit_number ||
64                        ', p_department_id = ' || p_department_id ||
65                        ', p_department_code = ' || p_department_code ||
66                        ', p_x_tasks_tbl.COUNT = ' || p_x_tasks_tbl.COUNT);
67     END IF;
68 
69     -- Standard start of API savepoint
70     SAVEPOINT Create_Planned_Tasks_Pub;
71 
72     -- Initialize Procedure return status to success
73     x_return_status := FND_API.G_RET_STS_SUCCESS;
74 
75     -- Standard call to check for call compatibility
76     IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version,
77                                        l_api_name, G_PKG_NAME) THEN
78         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
79     END IF;
80 
81     -- Initialize message list if p_init_msg_list is set to TRUE
82     IF FND_API.To_Boolean(p_init_msg_list) THEN
83         FND_MSG_PUB.Initialize;
84     END IF;
85 
86     -- Validate the input and prepare for subsequent calls
87     -- If there are errors, an exception is raised.
88     Validate_And_Prepare_Params(p_visit_id        => p_visit_id,
89                                 p_visit_number    => p_visit_number,
90                                 p_department_id   => p_department_id,
91                                 p_department_code => p_department_code,
92                                 p_x_tasks_tbl     => p_x_tasks_tbl);
93 
94     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
95       FND_LOG.string(FND_LOG.level_statement, l_full_name, 'About to call AHL_VWP_TASKS_PVT.Create_PUP_Tasks.');
96     END IF;
97 
98     AHL_VWP_TASKS_PVT.Create_PUP_Tasks(p_api_version => 1.0,
99                                        p_init_msg_list => Fnd_Api.g_false,
100                                        p_commit => Fnd_Api.g_false,
101                                        p_validation_level => Fnd_Api.g_valid_level_full,
102                                        p_module_type => 'API',
103                                        p_x_task_tbl => p_x_tasks_tbl,
104                                        x_return_status => x_return_status,
105                                        x_msg_count => x_msg_count,
106                                        x_msg_data => x_msg_data);
107 
108     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
109       FND_LOG.string(FND_LOG.level_statement, l_full_name, 'Returned from AHL_VWP_TASKS_PVT.Create_PUP_Tasks. x_return_status = ' || x_return_status);
110     END IF;
111 
112     IF(x_return_status = FND_API.G_RET_STS_ERROR) THEN
113       RAISE FND_API.G_EXC_ERROR;
114     ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
115       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
116     END IF;
117 
118     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
119       FND_LOG.string(FND_LOG.level_statement, l_full_name, 'For index ' || p_x_tasks_tbl.FIRST ||
120                      ' with unit effectivity id ' || p_x_tasks_tbl(p_x_tasks_tbl.FIRST).UNIT_EFFECTIVITY_ID ||
121                      ', Visit Task Id = ' || p_x_tasks_tbl(p_x_tasks_tbl.FIRST).VISIT_TASK_ID);
122     END IF;
123 
124     -- Standard check of p_commit
125     IF FND_API.TO_BOOLEAN(p_commit) THEN
126         COMMIT WORK;
127     END IF;
128 
129     -- Standard call to get message count and if count is 1, get message info
130     FND_MSG_PUB.Count_And_Get
131     ( p_count   => x_msg_count,
132       p_data    => x_msg_data,
133       p_encoded => FND_API.G_FALSE
134     );
135 
136     IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
137         FND_LOG.string(FND_LOG.level_procedure, l_full_name || '.end', 'End of the API');
138     END IF;
139 
140 EXCEPTION
141     WHEN FND_API.G_EXC_ERROR THEN
142         Rollback to Create_Planned_Tasks_Pub;
143         x_return_status := FND_API.G_RET_STS_ERROR;
144         FND_MSG_PUB.Count_And_Get( p_count   => x_msg_count,
145                                    p_data    => x_msg_data,
146                                    p_encoded => fnd_api.g_false);
147 
148     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
149         Rollback to Create_Planned_Tasks_Pub;
150         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
151         FND_MSG_PUB.Count_And_Get( p_count   => x_msg_count,
152                                    p_data    => x_msg_data,
153                                    p_encoded => fnd_api.g_false);
154 
155     WHEN OTHERS THEN
156         Rollback to Create_Planned_Tasks_Pub;
157         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
158         FND_MSG_PUB.Add_Exc_Msg( p_pkg_name       => G_PKG_NAME,
159                                  p_procedure_name => l_api_name,
160                                  p_error_text     => SQLERRM);
161         FND_MSG_PUB.Count_And_Get( p_count   => x_msg_count,
162                                    p_data    => x_msg_data,
163                                    p_encoded => FND_API.G_FALSE);
164 
165 END Create_Planned_Tasks;
166 
167 -- This API validates the input params and raises an exception in case any are invalid
168 -- It also resets unwanted attributes so that only the attributes needed for creating
169 -- Planned tasks are retained.
170 
171 PROCEDURE Validate_And_Prepare_Params(
172     p_visit_id         IN            NUMBER,
173     p_visit_number     IN            NUMBER,
174     p_department_id    IN            NUMBER,
175     p_department_code  IN            VARCHAR2,
176     p_x_tasks_tbl      IN OUT NOCOPY AHL_VWP_RULES_PVT.Task_Tbl_Type
177 ) IS
178 
179 l_api_name     CONSTANT VARCHAR2(30) := 'Validate_And_Prepare_Params';
180 l_full_name    CONSTANT VARCHAR2(60) := 'ahl.plsql.'||G_PKG_NAME||'.'||l_api_name;
181 l_visit_id     NUMBER;
182 l_dept_id      NUMBER;
183 l_org_id       NUMBER := NULL;
184 l_valid_flag   BOOLEAN := true;
185 l_source_rec   AHL_VWP_RULES_PVT.Task_Rec_Type;
186 l_dest_rec     AHL_VWP_RULES_PVT.Task_Rec_Type;
187 l_index        NUMBER;
188 l_temp_num     NUMBER;
189 
190 CURSOR validate_visit_id_csr(c_visit_id IN NUMBER) IS
191  SELECT organization_id FROM ahl_visits_b
192  WHERE visit_id = c_visit_id
193    AND status_code in ('RELEASED', 'PLANNING', 'PARTIALLY RELEASED');
194 
195 CURSOR validate_visit_number_csr(c_visit_number IN NUMBER) IS
196  SELECT visit_id, organization_id FROM ahl_visits_b
197  WHERE visit_number = c_visit_number
198    AND status_code in ('RELEASED', 'PLANNING', 'PARTIALLY RELEASED');
199 
200 CURSOR validate_dept_id_csr(c_dept_id IN NUMBER, c_org_id IN NUMBER) IS
201  SELECT department_id FROM bom_departments
202  WHERE department_id = c_dept_id
203    AND organization_id = c_org_id;
204 
205 CURSOR validate_dept_code_csr(c_dept_code IN VARCHAR2, c_org_id IN NUMBER) IS
206  SELECT department_id FROM bom_departments
207  WHERE department_code = c_dept_code
208    AND organization_id = c_org_id;
209 
210 CURSOR check_group_mr_csr(c_ue_id IN NUMBER) IS
211   SELECT 1 from AHL_UE_RELATIONSHIPS
212   WHERE RELATED_UE_ID = c_ue_id;
213 
214 BEGIN
215   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
216     FND_LOG.string(FND_LOG.level_procedure, l_full_name || '.begin', 'At the start of the API');
217   END IF;
218   IF (p_visit_id IS NULL and p_visit_number IS NULL) THEN
219     FND_MESSAGE.Set_Name('AHL', 'AHL_LTP_INVALID_VISIT_NUMBER');
220     FND_MSG_PUB.ADD;
221     l_valid_flag := false;
222   ELSE
223     IF (p_visit_id IS NOT NULL) THEN
224       -- Validate the visit_id and set l_visit_id
225       OPEN validate_visit_id_csr(p_visit_id);
226       FETCH validate_visit_id_csr INTO l_org_id;
227       IF(validate_visit_id_csr%NOTFOUND) THEN
228         FND_MESSAGE.Set_Name('AHL', 'AHL_VISIT_ID_INVALID');  --@@@@@
229         FND_MESSAGE.Set_Token('VISIT_ID', p_visit_id);
230         FND_MSG_PUB.ADD;
231         l_valid_flag := false;
232       ELSE
233         l_visit_id := p_visit_id;
234       END IF;
235       CLOSE validate_visit_id_csr;
236     ELSE
237       -- Derive the visit_id from the visit_number
238       OPEN validate_visit_number_csr(p_visit_number);
239       FETCH validate_visit_number_csr INTO l_visit_id, l_org_id;
240       IF(validate_visit_number_csr%NOTFOUND) THEN
241         FND_MESSAGE.Set_Name('AHL', 'AHL_LTP_INVALID_VISIT_NUMBER');
242         FND_MSG_PUB.ADD;
243         l_valid_flag := false;
244       END IF;
245       CLOSE validate_visit_number_csr;
246     END IF;
247   END IF;
248   IF(NOT l_valid_flag) THEN
249     RAISE FND_API.G_EXC_ERROR;
250   END IF;
251 
252   IF (p_department_id IS NOT NULL) THEN
253     IF (l_org_id IS NULL) THEN
254       -- Cannot add task since the visit does not have an org
255       FND_MESSAGE.Set_Name('AHL', 'AHL_VWP_VISIT_ORG_NOT_SET');  -- @@@@@
256       FND_MSG_PUB.ADD;
257       l_valid_flag := false;
258     ELSE
259       -- Validate the department_id and set l_dept_id
260       OPEN validate_dept_id_csr(p_department_id, l_org_id);
261       FETCH validate_dept_id_csr INTO l_dept_id;
262       IF(validate_dept_id_csr%NOTFOUND) THEN
263         FND_MESSAGE.Set_Name('AHL', 'AHL_LTP_DEPT_ID_NOT_EXIST');
264         FND_MSG_PUB.ADD;
265         l_valid_flag := false;
266       END IF;
267       CLOSE validate_dept_id_csr;
268     END IF;
269   ELSIF (p_department_code IS NOT NULL) THEN
270     -- Derive the department_id from the dept_code
271     OPEN validate_dept_code_csr(p_department_code, l_org_id);
272     FETCH validate_dept_code_csr INTO l_dept_id;
273     IF(validate_dept_code_csr%NOTFOUND) THEN
274       FND_MESSAGE.Set_Name('AHL', 'AHL_VWP_DEPT_CODE_INVALID');  --@@@@@
275       FND_MESSAGE.Set_Token('DEPT_CODE', p_department_code);
276       FND_MSG_PUB.ADD;
277       l_valid_flag := false;
278     END IF;
279     CLOSE validate_dept_code_csr;
280   END IF;
281   IF(NOT l_valid_flag) THEN
282     RAISE FND_API.G_EXC_ERROR;
283   END IF;
284 
285   -- Validate and pre-process the tasks table
286   IF (p_x_tasks_tbl.COUNT < 1) THEN
287     -- input is NULL
288     FND_MESSAGE.Set_Name('AHL', 'AHL_TASKS_TBL_EMPTY');  --@@@@@
289     FND_MSG_PUB.ADD;
290     RAISE FND_API.G_EXC_ERROR;
291   END IF;
292 
293   l_index := p_x_tasks_tbl.FIRST;
294   WHILE (l_index <= p_x_tasks_tbl.LAST) LOOP
295     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
296       FND_LOG.string(FND_LOG.level_statement, l_full_name, 'l_index = ' || l_index ||
297                      ', p_x_tasks_tbl(l_index).UNIT_EFFECTIVITY_ID = ' || p_x_tasks_tbl(l_index).UNIT_EFFECTIVITY_ID ||
298                      ', p_x_tasks_tbl(l_index).DEPARTMENT_ID = ' || p_x_tasks_tbl(l_index).DEPARTMENT_ID ||
299                      ', p_x_tasks_tbl(l_index).DEPT_NAME = ' || p_x_tasks_tbl(l_index).DEPT_NAME);
300     END IF;
301     -- Validate and copy only relevant fields to l_dest_rec
302     IF (p_x_tasks_tbl(l_index).UNIT_EFFECTIVITY_ID IS NULL) THEN
303       Fnd_Message.SET_NAME('AHL', 'AHL_VWP_NO_UNIT_EFFECTIVITY');
304       Fnd_Msg_Pub.ADD;
305       RAISE  FND_API.G_EXC_ERROR;
306     ELSE
307       OPEN check_group_mr_csr(p_x_tasks_tbl(l_index).UNIT_EFFECTIVITY_ID);
308       FETCH check_group_mr_csr INTO l_temp_num;
309       IF(check_group_mr_csr%FOUND) THEN
310         FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_NO_CHILD_ASSOC_VISIT');
311         FND_MSG_PUB.ADD;
312         CLOSE check_group_mr_csr;
313         RAISE  FND_API.G_EXC_ERROR;
314       END IF;
315       CLOSE check_group_mr_csr;
316 
317       -- Remaining validations of this UE happen at AHL_VWP_PLAN_TASKS_PVT.Create_Planned_Task
318       l_dest_rec.UNIT_EFFECTIVITY_ID := p_x_tasks_tbl(l_index).UNIT_EFFECTIVITY_ID;
319     END IF;
320     IF (p_x_tasks_tbl(l_index).DEPARTMENT_ID IS NULL AND p_x_tasks_tbl(l_index).DEPT_NAME IS NULL) THEN
321       l_dest_rec.DEPARTMENT_ID := l_dept_id;
322     ELSE
323       l_dest_rec.DEPARTMENT_ID := p_x_tasks_tbl(l_index).DEPARTMENT_ID;
324       l_dest_rec.DEPT_NAME := p_x_tasks_tbl(l_index).DEPT_NAME;
325     END IF;
326     l_dest_rec.VISIT_ID           := l_visit_id;
327     l_dest_rec.task_type_code     := 'PLANNED';
328     l_dest_rec.ATTRIBUTE_CATEGORY := p_x_tasks_tbl(l_index).ATTRIBUTE_CATEGORY;
329     l_dest_rec.ATTRIBUTE1         := p_x_tasks_tbl(l_index).ATTRIBUTE1;
330     l_dest_rec.ATTRIBUTE2         := p_x_tasks_tbl(l_index).ATTRIBUTE2;
331     l_dest_rec.ATTRIBUTE3         := p_x_tasks_tbl(l_index).ATTRIBUTE3;
332     l_dest_rec.ATTRIBUTE4         := p_x_tasks_tbl(l_index).ATTRIBUTE4;
333     l_dest_rec.ATTRIBUTE5         := p_x_tasks_tbl(l_index).ATTRIBUTE5;
334     l_dest_rec.ATTRIBUTE6         := p_x_tasks_tbl(l_index).ATTRIBUTE6;
335     l_dest_rec.ATTRIBUTE7         := p_x_tasks_tbl(l_index).ATTRIBUTE7;
336     l_dest_rec.ATTRIBUTE8         := p_x_tasks_tbl(l_index).ATTRIBUTE8;
337     l_dest_rec.ATTRIBUTE9         := p_x_tasks_tbl(l_index).ATTRIBUTE9;
338     l_dest_rec.ATTRIBUTE10        := p_x_tasks_tbl(l_index).ATTRIBUTE10;
339     l_dest_rec.ATTRIBUTE11        := p_x_tasks_tbl(l_index).ATTRIBUTE11;
340     l_dest_rec.ATTRIBUTE12        := p_x_tasks_tbl(l_index).ATTRIBUTE12;
341     l_dest_rec.ATTRIBUTE13        := p_x_tasks_tbl(l_index).ATTRIBUTE13;
342     l_dest_rec.ATTRIBUTE14        := p_x_tasks_tbl(l_index).ATTRIBUTE14;
343     l_dest_rec.ATTRIBUTE15        := p_x_tasks_tbl(l_index).ATTRIBUTE15;
344     p_x_tasks_tbl(l_index) := l_dest_rec;
345     l_index := l_index + 1;
346   END LOOP;
347 
348   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
349     FND_LOG.string(FND_LOG.level_procedure, l_full_name || '.end', 'Exiting API - Params validated.');
350   END IF;
351 END Validate_And_Prepare_Params;
352 
353 End AHL_VWP_TASKS_PUB;