DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_CI_DIR_COST_PVT

Source


1 PACKAGE BODY PA_CI_DIR_COST_PVT AS
2 /* $Header: PARCDCDB.pls 120.1 2010/10/07 21:29:27 rmunjulu noship $*/
3   ---------------------------------------------------------------------------
4   -- PROCEDURE load_error_tbl
5   ---------------------------------------------------------------------------
6   PROCEDURE load_error_tbl (
7     px_error_rec                   IN OUT NOCOPY PA_API.ERROR_REC_TYPE,
8     px_error_tbl                   IN OUT NOCOPY PA_API.ERROR_TBL_TYPE) IS
9 
10     j                              INTEGER := NVL(px_error_tbl.LAST, 0) + 1;
11     last_msg_idx                   INTEGER := FND_MSG_PUB.COUNT_MSG;
12     l_msg_idx                      INTEGER := FND_MSG_PUB.G_NEXT;
13   BEGIN
14     -- FND_MSG_PUB has a small error in it.  If we call FND_MSG_PUB.COUNT_AND_GET before
15     -- we call FND_MSG_PUB.GET, the variable FND_MSG_PUB uses to control the index of the
16     -- message stack gets set to 1.  This makes sense until we call FND_MSG_PUB.GET which
17     -- automatically increments the index by 1, (making it 2), however, when the GET function
18     -- attempts to pull message 2, we get a NO_DATA_FOUND exception because there isn't any
19     -- message 2.  To circumvent this problem, check the amount of messages and compensate.
20     -- Again, this error only occurs when 1 message is on the stack because COUNT_AND_GET
21     -- will only update the index variable when 1 and only 1 message is on the stack.
22     IF (last_msg_idx = 1) THEN
23       l_msg_idx := FND_MSG_PUB.G_FIRST;
24     END IF;
25     LOOP
26       fnd_msg_pub.get(
27             p_msg_index     => l_msg_idx,
28             p_encoded       => fnd_api.g_false,
29             p_data          => px_error_rec.msg_data,
30             p_msg_index_out => px_error_rec.msg_count);
31       px_error_tbl(j) := px_error_rec;
32       j := j + 1;
33     EXIT WHEN (px_error_rec.msg_count = last_msg_idx);
34     END LOOP;
35   END load_error_tbl;
36   ---------------------------------------------------------------------------
37   -- FUNCTION find_highest_exception
38   ---------------------------------------------------------------------------
39   -- Finds the highest exception (G_RET_STS_UNEXP_ERROR)
40   -- in a PA_API.ERROR_TBL_TYPE, and returns it.
41   FUNCTION find_highest_exception(
42     p_error_tbl                    IN PA_API.ERROR_TBL_TYPE
43   ) RETURN VARCHAR2 IS
44     l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
45     i                              INTEGER := 1;
46   BEGIN
47     IF (p_error_tbl.COUNT > 0) THEN
48       i := p_error_tbl.FIRST;
49       LOOP
50         IF (p_error_tbl(i).error_type <> PA_API.G_RET_STS_SUCCESS) THEN
51           IF (l_return_status <> PA_API.G_RET_STS_UNEXP_ERROR) THEN
52             l_return_status := p_error_tbl(i).error_type;
53           END IF;
54         END IF;
55         EXIT WHEN (i = p_error_tbl.LAST);
56         i := p_error_tbl.NEXT(i);
57       END LOOP;
58     END IF;
59     RETURN(l_return_status);
60   END find_highest_exception;
61 
62   ---------------------------------------------------------------------------
63   -- PROCEDURE qc
64   ---------------------------------------------------------------------------
65   PROCEDURE qc IS
66   BEGIN
67     null;
68   END qc;
69 
70   ---------------------------------------------------------------------------
71   -- PROCEDURE change_version
72   ---------------------------------------------------------------------------
73   PROCEDURE change_version IS
74   BEGIN
75     null;
76   END change_version;
77 
78   ---------------------------------------------------------------------------
79   -- PROCEDURE api_copy
80   ---------------------------------------------------------------------------
81   PROCEDURE api_copy IS
82   BEGIN
83     null;
84   END api_copy;
85 
86   ---------------------------------------------------------------------------
87   -- FUNCTION get_rec for: PA_CI_DIRECT_COST_DETAILS
88   ---------------------------------------------------------------------------
89   FUNCTION get_rec (
90     p_pa_ci_direct_cost1           IN PaCiDirectCostDetailsRecType,
91     x_no_data_found                OUT NOCOPY BOOLEAN
92   ) RETURN PaCiDirectCostDetailsRecType IS
93     CURSOR pa_ci_direct_cost_d6 (p_dc_line_id IN NUMBER) IS
94     SELECT
95             DC_LINE_ID,
96             CI_ID,
97             PROJECT_ID,
98             TASK_ID,
99             EXPENDITURE_TYPE,
100             RESOURCE_LIST_MEMBER_ID,
101             UNIT_OF_MEASURE,
102             CURRENCY_CODE,
103             QUANTITY,
104             PLANNING_RESOURCE_RATE,
105             RAW_COST,
106             BURDENED_COST,
107             RAW_COST_RATE,
108             BURDEN_COST_RATE,
109             RESOURCE_ASSIGNMENT_ID,
110             EFFECTIVE_FROM,
111             EFFECTIVE_TO,
112             CHANGE_REASON_CODE,
113             CHANGE_DESCRIPTION,
114             CREATED_BY,
115             CREATION_DATE,
116             LAST_UPDATE_BY,
117             LAST_UPDATE_DATE,
118             LAST_UPDATE_LOGIN
119       FROM Pa_Ci_Direct_Cost_Details
120      WHERE pa_ci_direct_cost_details.dc_line_id = p_dc_line_id;
121     l_pa_ci_direct_cost_details_pk pa_ci_direct_cost_d6%ROWTYPE;
122     l_pa_ci_direct_cost8           PaCiDirectCostDetailsRecType;
123   BEGIN
124     x_no_data_found := TRUE;
125 
126     -- Get current database values
127     OPEN pa_ci_direct_cost_d6 (p_pa_ci_direct_cost1.dc_line_id);
128     FETCH pa_ci_direct_cost_d6 INTO
129               l_pa_ci_direct_cost8.dc_line_id,
130               l_pa_ci_direct_cost8.ci_id,
131               l_pa_ci_direct_cost8.project_id,
132               l_pa_ci_direct_cost8.task_id,
133               l_pa_ci_direct_cost8.expenditure_type,
134               l_pa_ci_direct_cost8.resource_list_member_id,
135               l_pa_ci_direct_cost8.unit_of_measure,
136               l_pa_ci_direct_cost8.currency_code,
137               l_pa_ci_direct_cost8.quantity,
138               l_pa_ci_direct_cost8.planning_resource_rate,
139               l_pa_ci_direct_cost8.raw_cost,
140               l_pa_ci_direct_cost8.burdened_cost,
141               l_pa_ci_direct_cost8.raw_cost_rate,
142               l_pa_ci_direct_cost8.burden_cost_rate,
143               l_pa_ci_direct_cost8.resource_assignment_id,
144               l_pa_ci_direct_cost8.effective_from,
145               l_pa_ci_direct_cost8.effective_to,
146               l_pa_ci_direct_cost8.change_reason_code,
147               l_pa_ci_direct_cost8.change_description,
148               l_pa_ci_direct_cost8.created_by,
149               l_pa_ci_direct_cost8.creation_date,
150               l_pa_ci_direct_cost8.last_update_by,
151               l_pa_ci_direct_cost8.last_update_date,
152               l_pa_ci_direct_cost8.last_update_login;
153     x_no_data_found := pa_ci_direct_cost_d6%NOTFOUND;
154 
155     CLOSE pa_ci_direct_cost_d6;
156 
157     RETURN(l_pa_ci_direct_cost8);
158   END get_rec;
159 
160   ------------------------------------------------------------------
161   -- This version of get_rec sets error messages if no data found --
162   ------------------------------------------------------------------
163   FUNCTION get_rec (
164     p_pa_ci_direct_cost1           IN PaCiDirectCostDetailsRecType,
165     x_return_status                OUT NOCOPY VARCHAR2
166   ) RETURN PaCiDirectCostDetailsRecType IS
167     l_pa_ci_direct_cost8           PaCiDirectCostDetailsRecType;
168     l_row_notfound                 BOOLEAN := TRUE;
169   BEGIN
170     x_return_status := PA_API.G_RET_STS_SUCCESS;
171     l_pa_ci_direct_cost8 := get_rec(p_pa_ci_direct_cost1, l_row_notfound);
172     IF (l_row_notfound) THEN
173       PA_API.set_message(G_APP_NAME,G_INVALID_VALUE,G_COL_NAME_TOKEN,'DC_LINE_ID');
174       x_return_status := PA_API.G_RET_STS_ERROR;
175     END IF;
176     RETURN(l_pa_ci_direct_cost8);
177   END get_rec;
178   -----------------------------------------------------------
179   -- So we don't have to pass an "l_row_notfound" variable --
180   -----------------------------------------------------------
181   FUNCTION get_rec (
182     p_pa_ci_direct_cost1           IN PaCiDirectCostDetailsRecType
183   ) RETURN PaCiDirectCostDetailsRecType IS
184     l_row_not_found                BOOLEAN := TRUE;
185   BEGIN
186     RETURN(get_rec(p_pa_ci_direct_cost1, l_row_not_found));
187   END get_rec;
188   ---------------------------------------------------------------------------
189   -- FUNCTION null_out_defaults for: PA_CI_DIRECT_COST_DETAILS
190   ---------------------------------------------------------------------------
191   FUNCTION null_out_defaults (
192     p_pa_ci_direct_cost1   IN PaCiDirectCostDetailsRecType
193   ) RETURN PaCiDirectCostDetailsRecType IS
194     l_pa_ci_direct_cost8           PaCiDirectCostDetailsRecType := p_pa_ci_direct_cost1;
195   BEGIN
196     IF (l_pa_ci_direct_cost8.dc_line_id = PA_API.G_MISS_NUM ) THEN
197       l_pa_ci_direct_cost8.dc_line_id := NULL;
198     END IF;
199     IF (l_pa_ci_direct_cost8.ci_id = PA_API.G_MISS_NUM ) THEN
200       l_pa_ci_direct_cost8.ci_id := NULL;
201     END IF;
202     IF (l_pa_ci_direct_cost8.project_id = PA_API.G_MISS_NUM ) THEN
203       l_pa_ci_direct_cost8.project_id := NULL;
204     END IF;
205     IF (l_pa_ci_direct_cost8.task_id = PA_API.G_MISS_NUM ) THEN
206       l_pa_ci_direct_cost8.task_id := NULL;
207     END IF;
208     IF (l_pa_ci_direct_cost8.expenditure_type = PA_API.G_MISS_CHAR ) THEN
209       l_pa_ci_direct_cost8.expenditure_type := NULL;
210     END IF;
211     IF (l_pa_ci_direct_cost8.resource_list_member_id = PA_API.G_MISS_NUM ) THEN
212       l_pa_ci_direct_cost8.resource_list_member_id := NULL;
213     END IF;
214     IF (l_pa_ci_direct_cost8.unit_of_measure = PA_API.G_MISS_CHAR ) THEN
215       l_pa_ci_direct_cost8.unit_of_measure := NULL;
216     END IF;
217     IF (l_pa_ci_direct_cost8.currency_code = PA_API.G_MISS_CHAR ) THEN
218       l_pa_ci_direct_cost8.currency_code := NULL;
219     END IF;
220     IF (l_pa_ci_direct_cost8.quantity = PA_API.G_MISS_NUM ) THEN
221       l_pa_ci_direct_cost8.quantity := NULL;
222     END IF;
223     IF (l_pa_ci_direct_cost8.planning_resource_rate = PA_API.G_MISS_NUM ) THEN
224       l_pa_ci_direct_cost8.planning_resource_rate := NULL;
225     END IF;
226     IF (l_pa_ci_direct_cost8.raw_cost = PA_API.G_MISS_NUM ) THEN
227       l_pa_ci_direct_cost8.raw_cost := NULL;
228     END IF;
229     IF (l_pa_ci_direct_cost8.burdened_cost = PA_API.G_MISS_NUM ) THEN
230       l_pa_ci_direct_cost8.burdened_cost := NULL;
231     END IF;
232     IF (l_pa_ci_direct_cost8.raw_cost_rate = PA_API.G_MISS_NUM ) THEN
233       l_pa_ci_direct_cost8.raw_cost_rate := NULL;
234     END IF;
235     IF (l_pa_ci_direct_cost8.burden_cost_rate = PA_API.G_MISS_NUM ) THEN
236       l_pa_ci_direct_cost8.burden_cost_rate := NULL;
237     END IF;
238     IF (l_pa_ci_direct_cost8.resource_assignment_id = PA_API.G_MISS_NUM ) THEN
239       l_pa_ci_direct_cost8.resource_assignment_id := NULL;
240     END IF;
241     IF (l_pa_ci_direct_cost8.effective_from = PA_API.G_MISS_DATE ) THEN
242       l_pa_ci_direct_cost8.effective_from := NULL;
243     END IF;
244     IF (l_pa_ci_direct_cost8.effective_to = PA_API.G_MISS_DATE ) THEN
245       l_pa_ci_direct_cost8.effective_to := NULL;
246     END IF;
247     IF (l_pa_ci_direct_cost8.change_reason_code = PA_API.G_MISS_CHAR ) THEN
248       l_pa_ci_direct_cost8.change_reason_code := NULL;
249     END IF;
250     IF (l_pa_ci_direct_cost8.change_description = PA_API.G_MISS_CHAR ) THEN
251       l_pa_ci_direct_cost8.change_description := NULL;
252     END IF;
253     IF (l_pa_ci_direct_cost8.created_by = PA_API.G_MISS_NUM ) THEN
254       l_pa_ci_direct_cost8.created_by := NULL;
255     END IF;
256     IF (l_pa_ci_direct_cost8.creation_date = PA_API.G_MISS_DATE ) THEN
257       l_pa_ci_direct_cost8.creation_date := NULL;
258     END IF;
259     IF (l_pa_ci_direct_cost8.last_update_by = PA_API.G_MISS_NUM ) THEN
260       l_pa_ci_direct_cost8.last_update_by := NULL;
261     END IF;
262     IF (l_pa_ci_direct_cost8.last_update_date = PA_API.G_MISS_DATE ) THEN
263       l_pa_ci_direct_cost8.last_update_date := NULL;
264     END IF;
265     IF (l_pa_ci_direct_cost8.last_update_login = PA_API.G_MISS_NUM ) THEN
266       l_pa_ci_direct_cost8.last_update_login := NULL;
267     END IF;
268     RETURN(l_pa_ci_direct_cost8);
269   END null_out_defaults;
270   -----------------------------------------
271   -- Validate_Attributes for: DC_LINE_ID --
272   -----------------------------------------
273   PROCEDURE validate_dc_line_id(
274     x_return_status                OUT NOCOPY VARCHAR2,
275     p_dc_line_id                   IN NUMBER) IS
276   BEGIN
277     x_return_status := PA_API.G_RET_STS_SUCCESS;
278     IF (p_dc_line_id = PA_API.G_MISS_NUM OR
279         p_dc_line_id IS NULL)
280     THEN
281       PA_API.set_message(G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'dc_line_id');
282       x_return_status := PA_API.G_RET_STS_ERROR;
283       RAISE G_EXCEPTION_HALT_VALIDATION;
284     END IF;
285   EXCEPTION
286     WHEN G_EXCEPTION_HALT_VALIDATION THEN
287       null;
288     WHEN OTHERS THEN
289       PA_API.SET_MESSAGE( p_app_name     => G_APP_NAME
290                           ,p_msg_name     => G_UNEXPECTED_ERROR
291                           ,p_token1       => G_SQLCODE_TOKEN
292                           ,p_token1_value => SQLCODE
293                           ,p_token2       => G_SQLERRM_TOKEN
294                           ,p_token2_value => SQLERRM);
295       x_return_status := PA_API.G_RET_STS_UNEXP_ERROR;
296   END validate_dc_line_id;
297   ------------------------------------
298   -- Validate_Attributes for: CI_ID --
299   ------------------------------------
300   PROCEDURE validate_ci_id(
301     x_return_status                OUT NOCOPY VARCHAR2,
302     p_ci_id                        IN NUMBER) IS
303   BEGIN
304     x_return_status := PA_API.G_RET_STS_SUCCESS;
305     IF (p_ci_id = PA_API.G_MISS_NUM OR
306         p_ci_id IS NULL)
307     THEN
308       PA_API.set_message(G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'ci_id');
309       x_return_status := PA_API.G_RET_STS_ERROR;
310       RAISE G_EXCEPTION_HALT_VALIDATION;
311     END IF;
312   EXCEPTION
313     WHEN G_EXCEPTION_HALT_VALIDATION THEN
314       null;
315     WHEN OTHERS THEN
316       PA_API.SET_MESSAGE( p_app_name     => G_APP_NAME
317                           ,p_msg_name     => G_UNEXPECTED_ERROR
318                           ,p_token1       => G_SQLCODE_TOKEN
319                           ,p_token1_value => SQLCODE
320                           ,p_token2       => G_SQLERRM_TOKEN
321                           ,p_token2_value => SQLERRM);
322       x_return_status := PA_API.G_RET_STS_UNEXP_ERROR;
323   END validate_ci_id;
324   -----------------------------------------
325   -- Validate_Attributes for: PROJECT_ID --
326   -----------------------------------------
327   PROCEDURE validate_project_id(
328     x_return_status                OUT NOCOPY VARCHAR2,
329     p_project_id                   IN NUMBER) IS
330   BEGIN
331     x_return_status := PA_API.G_RET_STS_SUCCESS;
332     IF (p_project_id = PA_API.G_MISS_NUM OR
333         p_project_id IS NULL)
334     THEN
335       PA_API.set_message(G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'project_id');
336       x_return_status := PA_API.G_RET_STS_ERROR;
337       RAISE G_EXCEPTION_HALT_VALIDATION;
338     END IF;
339   EXCEPTION
340     WHEN G_EXCEPTION_HALT_VALIDATION THEN
341       null;
342     WHEN OTHERS THEN
343       PA_API.SET_MESSAGE( p_app_name     => G_APP_NAME
344                           ,p_msg_name     => G_UNEXPECTED_ERROR
345                           ,p_token1       => G_SQLCODE_TOKEN
346                           ,p_token1_value => SQLCODE
347                           ,p_token2       => G_SQLERRM_TOKEN
348                           ,p_token2_value => SQLERRM);
349       x_return_status := PA_API.G_RET_STS_UNEXP_ERROR;
350   END validate_project_id;
351   --------------------------------------
352   -- Validate_Attributes for: TASK_ID --
353   --------------------------------------
354   PROCEDURE validate_task_id(
355     x_return_status                OUT NOCOPY VARCHAR2,
356     p_task_id                      IN NUMBER) IS
357   BEGIN
358     x_return_status := PA_API.G_RET_STS_SUCCESS;
359     IF (p_task_id = PA_API.G_MISS_NUM OR
360         p_task_id IS NULL)
361     THEN
362       PA_API.set_message(G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'task_id');
363       x_return_status := PA_API.G_RET_STS_ERROR;
364       RAISE G_EXCEPTION_HALT_VALIDATION;
365     END IF;
366   EXCEPTION
367     WHEN G_EXCEPTION_HALT_VALIDATION THEN
368       null;
369     WHEN OTHERS THEN
370       PA_API.SET_MESSAGE( p_app_name     => G_APP_NAME
371                           ,p_msg_name     => G_UNEXPECTED_ERROR
372                           ,p_token1       => G_SQLCODE_TOKEN
373                           ,p_token1_value => SQLCODE
374                           ,p_token2       => G_SQLERRM_TOKEN
375                           ,p_token2_value => SQLERRM);
379   -- Validate_Attributes for: EXPENDITURE_TYPE --
376       x_return_status := PA_API.G_RET_STS_UNEXP_ERROR;
377   END validate_task_id;
378   -----------------------------------------------
380   -----------------------------------------------
381   PROCEDURE validate_expenditure_type(
382     x_return_status                OUT NOCOPY VARCHAR2,
383     p_expenditure_type             IN VARCHAR2) IS
384   BEGIN
385     x_return_status := PA_API.G_RET_STS_SUCCESS;
386     IF (p_expenditure_type = PA_API.G_MISS_CHAR OR
387         p_expenditure_type IS NULL)
388     THEN
389       PA_API.set_message(G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'expenditure_type');
390       x_return_status := PA_API.G_RET_STS_ERROR;
391       RAISE G_EXCEPTION_HALT_VALIDATION;
392     END IF;
393   EXCEPTION
394     WHEN G_EXCEPTION_HALT_VALIDATION THEN
395       null;
396     WHEN OTHERS THEN
397       PA_API.SET_MESSAGE( p_app_name     => G_APP_NAME
398                           ,p_msg_name     => G_UNEXPECTED_ERROR
399                           ,p_token1       => G_SQLCODE_TOKEN
400                           ,p_token1_value => SQLCODE
401                           ,p_token2       => G_SQLERRM_TOKEN
402                           ,p_token2_value => SQLERRM);
403       x_return_status := PA_API.G_RET_STS_UNEXP_ERROR;
404   END validate_expenditure_type;
405   ------------------------------------------------------
406   -- Validate_Attributes for: RESOURCE_LIST_MEMBER_ID --
407   ------------------------------------------------------
408   PROCEDURE validate_resource_l94(
409     x_return_status                OUT NOCOPY VARCHAR2,
410     p_resource_list_member_id      IN NUMBER) IS
411   BEGIN
412     x_return_status := PA_API.G_RET_STS_SUCCESS;
413     IF (p_resource_list_member_id = PA_API.G_MISS_NUM OR
414         p_resource_list_member_id IS NULL)
415     THEN
416       PA_API.set_message(G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'resource_list_member_id');
417       x_return_status := PA_API.G_RET_STS_ERROR;
418       RAISE G_EXCEPTION_HALT_VALIDATION;
419     END IF;
420   EXCEPTION
421     WHEN G_EXCEPTION_HALT_VALIDATION THEN
422       null;
423     WHEN OTHERS THEN
424       PA_API.SET_MESSAGE( p_app_name     => G_APP_NAME
425                           ,p_msg_name     => G_UNEXPECTED_ERROR
426                           ,p_token1       => G_SQLCODE_TOKEN
427                           ,p_token1_value => SQLCODE
428                           ,p_token2       => G_SQLERRM_TOKEN
429                           ,p_token2_value => SQLERRM);
430       x_return_status := PA_API.G_RET_STS_UNEXP_ERROR;
431   END validate_resource_l94;
432   ---------------------------------------------
433   -- Validate_Attributes for: LAST_UPDATE_BY --
434   ---------------------------------------------
435   PROCEDURE validate_last_update_by(
436     x_return_status                OUT NOCOPY VARCHAR2,
437     p_last_update_by               IN NUMBER) IS
438   BEGIN
439     x_return_status := PA_API.G_RET_STS_SUCCESS;
440     IF (p_last_update_by = PA_API.G_MISS_NUM OR
441         p_last_update_by IS NULL)
442     THEN
443       PA_API.set_message(G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'last_update_by');
444       x_return_status := PA_API.G_RET_STS_ERROR;
445       RAISE G_EXCEPTION_HALT_VALIDATION;
446     END IF;
447   EXCEPTION
448     WHEN G_EXCEPTION_HALT_VALIDATION THEN
449       null;
450     WHEN OTHERS THEN
451       PA_API.SET_MESSAGE( p_app_name     => G_APP_NAME
452                           ,p_msg_name     => G_UNEXPECTED_ERROR
453                           ,p_token1       => G_SQLCODE_TOKEN
454                           ,p_token1_value => SQLCODE
455                           ,p_token2       => G_SQLERRM_TOKEN
456                           ,p_token2_value => SQLERRM);
457       x_return_status := PA_API.G_RET_STS_UNEXP_ERROR;
458   END validate_last_update_by;
459   ---------------------------------------------------------------------------
460   -- FUNCTION Validate_Attributes
461   ---------------------------------------------------------------------------
462   -------------------------------------------------------
463   -- Validate_Attributes for:PA_CI_DIRECT_COST_DETAILS --
464   -------------------------------------------------------
465   FUNCTION Validate_Attributes (
466     p_pa_ci_direct_cost1           IN PaCiDirectCostDetailsRecType
467   ) RETURN VARCHAR2 IS
468     l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
469     x_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
470   BEGIN
471     -----------------------------
472     -- Column Level Validation --
473     -----------------------------
474     -- ***
475     -- dc_line_id
476     -- ***
477     validate_dc_line_id(x_return_status, p_pa_ci_direct_cost1.dc_line_id);
478     IF (x_return_status <> PA_API.G_RET_STS_SUCCESS) THEN
479       l_return_status := x_return_status;
480       RAISE G_EXCEPTION_HALT_VALIDATION;
481     END IF;
482 
483     -- ***
484     -- ci_id
485     -- ***
486     validate_ci_id(x_return_status, p_pa_ci_direct_cost1.ci_id);
487     IF (x_return_status <> PA_API.G_RET_STS_SUCCESS) THEN
488       l_return_status := x_return_status;
489       RAISE G_EXCEPTION_HALT_VALIDATION;
490     END IF;
491 
492     -- ***
493     -- project_id
494     -- ***
495     validate_project_id(x_return_status, p_pa_ci_direct_cost1.project_id);
496     IF (x_return_status <> PA_API.G_RET_STS_SUCCESS) THEN
497       l_return_status := x_return_status;
498       RAISE G_EXCEPTION_HALT_VALIDATION;
499     END IF;
500 
501     -- ***
502     -- task_id
503     -- ***
504     validate_task_id(x_return_status, p_pa_ci_direct_cost1.task_id);
505     IF (x_return_status <> PA_API.G_RET_STS_SUCCESS) THEN
509 
506       l_return_status := x_return_status;
507       RAISE G_EXCEPTION_HALT_VALIDATION;
508     END IF;
510     -- ***
511     -- expenditure_type
512     -- ***
513     validate_expenditure_type(x_return_status, p_pa_ci_direct_cost1.expenditure_type);
514     IF (x_return_status <> PA_API.G_RET_STS_SUCCESS) THEN
515       l_return_status := x_return_status;
516       RAISE G_EXCEPTION_HALT_VALIDATION;
517     END IF;
518 
519     -- ***
520     -- resource_list_member_id
521     -- ***
522     validate_resource_l94(x_return_status, p_pa_ci_direct_cost1.resource_list_member_id);
523     IF (x_return_status <> PA_API.G_RET_STS_SUCCESS) THEN
524       l_return_status := x_return_status;
525       RAISE G_EXCEPTION_HALT_VALIDATION;
526     END IF;
527 
528     -- ***
529     -- last_update_by
530     -- ***
531     validate_last_update_by(x_return_status, p_pa_ci_direct_cost1.last_update_by);
532     IF (x_return_status <> PA_API.G_RET_STS_SUCCESS) THEN
533       l_return_status := x_return_status;
534       RAISE G_EXCEPTION_HALT_VALIDATION;
535     END IF;
536 
537     RETURN(l_return_status);
538   EXCEPTION
539     WHEN G_EXCEPTION_HALT_VALIDATION THEN
540       RETURN(l_return_status);
541     WHEN OTHERS THEN
542       PA_API.SET_MESSAGE( p_app_name     => G_APP_NAME
543                           ,p_msg_name     => G_UNEXPECTED_ERROR
544                           ,p_token1       => G_SQLCODE_TOKEN
545                           ,p_token1_value => SQLCODE
546                           ,p_token2       => G_SQLERRM_TOKEN
547                           ,p_token2_value => SQLERRM);
548       l_return_status := PA_API.G_RET_STS_UNEXP_ERROR;
549       RETURN(l_return_status);
550   END Validate_Attributes;
551   ---------------------------------------------------------------------------
552   -- PROCEDURE Validate_Record
553   ---------------------------------------------------------------------------
554   ---------------------------------------------------
555   -- Validate Record for:PA_CI_DIRECT_COST_DETAILS --
556   ---------------------------------------------------
557   FUNCTION Validate_Record (
558     p_pa_ci_direct_cost1 IN PaCiDirectCostDetailsRecType,
559     p_db_pa_ci_direct_cos106 IN PaCiDirectCostDetailsRecType
560   ) RETURN VARCHAR2 IS
561     l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
562   BEGIN
563     RETURN (l_return_status);
564   END Validate_Record;
565   FUNCTION Validate_Record (
566     p_pa_ci_direct_cost1 IN PaCiDirectCostDetailsRecType
567   ) RETURN VARCHAR2 IS
568     l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
569     l_db_pa_ci_direct_cos106       PaCiDirectCostDetailsRecType := get_rec(p_pa_ci_direct_cost1);
570   BEGIN
571     l_return_status := Validate_Record(p_pa_ci_direct_cost1 => p_pa_ci_direct_cost1,
572                                        p_db_pa_ci_direct_cos106 => l_db_pa_ci_direct_cos106);
573     RETURN (l_return_status);
574   END Validate_Record;
575 
576   ---------------------------------------------------------------------------
577   -- PROCEDURE Migrate
578   ---------------------------------------------------------------------------
579   PROCEDURE migrate (
580     p_from IN PaCiDirectCostDetailsRecType,
581     p_to   IN OUT NOCOPY PaCiDirectCostDetailsRecType
582   ) IS
583   BEGIN
584     p_to.dc_line_id := p_from.dc_line_id;
585     p_to.ci_id := p_from.ci_id;
586     p_to.project_id := p_from.project_id;
587     p_to.task_id := p_from.task_id;
588     p_to.expenditure_type := p_from.expenditure_type;
589     p_to.resource_list_member_id := p_from.resource_list_member_id;
590     p_to.unit_of_measure := p_from.unit_of_measure;
591     p_to.currency_code := p_from.currency_code;
592     p_to.quantity := p_from.quantity;
593     p_to.planning_resource_rate := p_from.planning_resource_rate;
594     p_to.raw_cost := p_from.raw_cost;
595     p_to.burdened_cost := p_from.burdened_cost;
596     p_to.raw_cost_rate := p_from.raw_cost_rate;
597     p_to.burden_cost_rate := p_from.burden_cost_rate;
598     p_to.resource_assignment_id := p_from.resource_assignment_id;
599     p_to.effective_from := p_from.effective_from;
600     p_to.effective_to := p_from.effective_to;
601     p_to.change_reason_code := p_from.change_reason_code;
602     p_to.change_description := p_from.change_description;
603     p_to.created_by := p_from.created_by;
604     p_to.creation_date := p_from.creation_date;
605     p_to.last_update_by := p_from.last_update_by;
606     p_to.last_update_date := p_from.last_update_date;
607     p_to.last_update_login := p_from.last_update_login;
608   END migrate;
609 
610   ---------------------------------------------------------------------------
611   -- PROCEDURE validate_row
612   ---------------------------------------------------------------------------
613   ------------------------------------------------
614   -- validate_row for:PA_CI_DIRECT_COST_DETAILS --
615   ------------------------------------------------
616   PROCEDURE validate_row(
617     p_api_version                  IN NUMBER,
618     p_init_msg_list                IN VARCHAR2 DEFAULT PA_API.G_FALSE,
619     x_return_status                OUT NOCOPY VARCHAR2,
620     x_msg_count                    OUT NOCOPY NUMBER,
621     x_msg_data                     OUT NOCOPY VARCHAR2,
622     p_pa_ci_direct_cost1           IN PaCiDirectCostDetailsRecType) IS
623 
624     l_api_version                  CONSTANT NUMBER := 1;
625     l_api_name                     CONSTANT VARCHAR2(30) := 'V_validate_row';
626     l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
627     l_pa_ci_direct_cost8           PaCiDirectCostDetailsRecType := p_pa_ci_direct_cost1;
628   BEGIN
629     l_return_status := PA_API.START_ACTIVITY(l_api_name,
630                                               G_PKG_NAME,
634                                               '_PVT',
631                                               p_init_msg_list,
632                                               l_api_version,
633                                               p_api_version,
635                                               x_return_status);
636     IF (l_return_status = PA_API.G_RET_STS_UNEXP_ERROR) THEN
637       RAISE PA_API.G_EXCEPTION_UNEXPECTED_ERROR;
638     ELSIF (l_return_status = PA_API.G_RET_STS_ERROR) THEN
639       RAISE PA_API.G_EXCEPTION_ERROR;
640     END IF;
641     --- Validate all non-missing attributes (Item Level Validation)
642     l_return_status := Validate_Attributes(l_pa_ci_direct_cost8);
643     --- If any errors happen abort API
644     IF (l_return_status = PA_API.G_RET_STS_UNEXP_ERROR) THEN
645       RAISE PA_API.G_EXCEPTION_UNEXPECTED_ERROR;
646     ELSIF (l_return_status = PA_API.G_RET_STS_ERROR) THEN
647       RAISE PA_API.G_EXCEPTION_ERROR;
648     END IF;
649     l_return_status := Validate_Record(l_pa_ci_direct_cost8);
650     IF (l_return_status = PA_API.G_RET_STS_UNEXP_ERROR) THEN
651       RAISE PA_API.G_EXCEPTION_UNEXPECTED_ERROR;
652     ELSIF (l_return_status = PA_API.G_RET_STS_ERROR) THEN
653       RAISE PA_API.G_EXCEPTION_ERROR;
654     END IF;
655     x_return_status := l_return_status;
656   EXCEPTION
657     WHEN PA_API.G_EXCEPTION_ERROR THEN
658       x_return_status := PA_API.HANDLE_EXCEPTIONS
659       (
660         l_api_name,
661         G_PKG_NAME,
662         'PA_API.G_RET_STS_ERROR',
663         x_msg_count,
664         x_msg_data,
665         '_PVT'
666       );
667     WHEN PA_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
668       x_return_status := PA_API.HANDLE_EXCEPTIONS
669       (
670         l_api_name,
671         G_PKG_NAME,
672         'PA_API.G_RET_STS_UNEXP_ERROR',
673         x_msg_count,
674         x_msg_data,
675         '_PVT'
676       );
677     WHEN OTHERS THEN
678       x_return_status := PA_API.HANDLE_EXCEPTIONS
679       (
680         l_api_name,
681         G_PKG_NAME,
682         'OTHERS',
683         x_msg_count,
684         x_msg_data,
685         '_PVT'
686       );
687   END validate_row;
688   -----------------------------------------------------------
689   -- PL/SQL TBL validate_row for:PA_CI_DIRECT_COST_DETAILS --
690   -----------------------------------------------------------
691   PROCEDURE validate_row(
692     p_api_version                  IN NUMBER,
693     p_init_msg_list                IN VARCHAR2 DEFAULT PA_API.G_FALSE,
694     x_return_status                OUT NOCOPY VARCHAR2,
695     x_msg_count                    OUT NOCOPY NUMBER,
696     x_msg_data                     OUT NOCOPY VARCHAR2,
697     PPaCiDirectCostDetailsTbl      IN PaCiDirectCostDetailsTblType,
698     px_error_tbl                   IN OUT NOCOPY PA_API.ERROR_TBL_TYPE) IS
699 
700     l_api_version                  CONSTANT NUMBER := 1;
701     l_api_name                     CONSTANT VARCHAR2(30) := 'V_error_tbl_validate_row';
702     i                              NUMBER := 0;
703   BEGIN
704     PA_API.init_msg_list(p_init_msg_list);
705     -- Make sure PL/SQL table has records in it before passing
706     IF (PPaCiDirectCostDetailsTbl.COUNT > 0) THEN
707       i := PPaCiDirectCostDetailsTbl.FIRST;
708       LOOP
709         DECLARE
710           l_error_rec         PA_API.ERROR_REC_TYPE;
711         BEGIN
712           l_error_rec.api_name := l_api_name;
713           l_error_rec.api_package := G_PKG_NAME;
714           l_error_rec.idx := i;
715           validate_row (
716             p_api_version                  => p_api_version,
717             p_init_msg_list                => PA_API.G_FALSE,
718             x_return_status                => l_error_rec.error_type,
719             x_msg_count                    => l_error_rec.msg_count,
720             x_msg_data                     => l_error_rec.msg_data,
721             p_pa_ci_direct_cost1           => PPaCiDirectCostDetailsTbl(i));
722           IF (l_error_rec.error_type <> PA_API.G_RET_STS_SUCCESS) THEN
723             l_error_rec.sqlcode := SQLCODE;
724             load_error_tbl(l_error_rec, px_error_tbl);
725           ELSE
726             x_msg_count := l_error_rec.msg_count;
727             x_msg_data := l_error_rec.msg_data;
728           END IF;
729         EXCEPTION
730           WHEN PA_API.G_EXCEPTION_ERROR THEN
731             l_error_rec.error_type := PA_API.G_RET_STS_ERROR;
732             l_error_rec.sqlcode := SQLCODE;
733             load_error_tbl(l_error_rec, px_error_tbl);
734           WHEN PA_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
735             l_error_rec.error_type := PA_API.G_RET_STS_UNEXP_ERROR;
736             l_error_rec.sqlcode := SQLCODE;
737             load_error_tbl(l_error_rec, px_error_tbl);
738           WHEN OTHERS THEN
739             l_error_rec.error_type := 'OTHERS';
740             l_error_rec.sqlcode := SQLCODE;
741             load_error_tbl(l_error_rec, px_error_tbl);
742         END;
743         EXIT WHEN (i = PPaCiDirectCostDetailsTbl.LAST);
744         i := PPaCiDirectCostDetailsTbl.NEXT(i);
745       END LOOP;
746     END IF;
747     -- Loop through the error_tbl to find the error with the highest severity
748     -- and return it.
749     x_return_status := find_highest_exception(px_error_tbl);
750     PA_API.END_ACTIVITY(x_msg_count, x_msg_data);
751   EXCEPTION
752     WHEN PA_API.G_EXCEPTION_ERROR THEN
753       x_return_status := PA_API.HANDLE_EXCEPTIONS
754       (
755         l_api_name,
756         G_PKG_NAME,
757         'PA_API.G_RET_STS_ERROR',
758         x_msg_count,
759         x_msg_data,
760         '_PVT'
761       );
762     WHEN PA_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
763       x_return_status := PA_API.HANDLE_EXCEPTIONS
764       (
768         x_msg_count,
765         l_api_name,
766         G_PKG_NAME,
767         'PA_API.G_RET_STS_UNEXP_ERROR',
769         x_msg_data,
770         '_PVT'
771       );
772     WHEN OTHERS THEN
773       x_return_status := PA_API.HANDLE_EXCEPTIONS
774       (
775         l_api_name,
776         G_PKG_NAME,
777         'OTHERS',
778         x_msg_count,
779         x_msg_data,
780         '_PVT'
781       );
782   END validate_row;
783 
784   -----------------------------------------------------------
785   -- PL/SQL TBL validate_row for:PA_CI_DIRECT_COST_DETAILS --
786   -----------------------------------------------------------
787   PROCEDURE validate_row(
788     p_api_version                  IN NUMBER,
789     p_init_msg_list                IN VARCHAR2 DEFAULT PA_API.G_FALSE,
790     x_return_status                OUT NOCOPY VARCHAR2,
791     x_msg_count                    OUT NOCOPY NUMBER,
792     x_msg_data                     OUT NOCOPY VARCHAR2,
793     PPaCiDirectCostDetailsTbl      IN PaCiDirectCostDetailsTblType) IS
794 
795     l_api_version                  CONSTANT NUMBER := 1;
796     l_api_name                     CONSTANT VARCHAR2(30) := 'V_tbl_validate_row';
797     l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
798     l_error_tbl                    PA_API.ERROR_TBL_TYPE;
799   BEGIN
800     PA_API.init_msg_list(p_init_msg_list);
801     -- Make sure PL/SQL table has records in it before passing
802     IF (PPaCiDirectCostDetailsTbl.COUNT > 0) THEN
803       validate_row (
804         p_api_version                  => p_api_version,
805         p_init_msg_list                => PA_API.G_FALSE,
806         x_return_status                => x_return_status,
807         x_msg_count                    => x_msg_count,
808         x_msg_data                     => x_msg_data,
809         PPaCiDirectCostDetailsTbl      => PPaCiDirectCostDetailsTbl,
810         px_error_tbl                   => l_error_tbl);
811     END IF;
812     PA_API.END_ACTIVITY(x_msg_count, x_msg_data);
813   EXCEPTION
814     WHEN PA_API.G_EXCEPTION_ERROR THEN
815       x_return_status := PA_API.HANDLE_EXCEPTIONS
816       (
817         l_api_name,
818         G_PKG_NAME,
819         'PA_API.G_RET_STS_ERROR',
820         x_msg_count,
821         x_msg_data,
822         '_PVT'
823       );
824     WHEN PA_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
825       x_return_status := PA_API.HANDLE_EXCEPTIONS
826       (
827         l_api_name,
828         G_PKG_NAME,
829         'PA_API.G_RET_STS_UNEXP_ERROR',
830         x_msg_count,
831         x_msg_data,
832         '_PVT'
833       );
834     WHEN OTHERS THEN
835       x_return_status := PA_API.HANDLE_EXCEPTIONS
836       (
837         l_api_name,
838         G_PKG_NAME,
839         'OTHERS',
840         x_msg_count,
841         x_msg_data,
842         '_PVT'
843       );
844   END validate_row;
845 
846   ---------------------------------------------------------------------------
847   -- PROCEDURE check_dup_recs
848   ---------------------------------------------------------------------------
849   PROCEDURE check_dup_recs(p_DirectCostDetailsTbl PaCiDirectCostDetailsTblType) IS
850   dup_record_exception EXCEPTION;
851   BEGIN
852     FOR i IN p_DirectCostDetailsTbl.FIRST..p_DirectCostDetailsTbl.LAST LOOP
853       if i = p_DirectCostDetailsTbl.last then
854         exit;
855       end if;
856       FOR j IN p_DirectCostDetailsTbl.NEXT(i)..p_DirectCostDetailsTbl.LAST LOOP
857         IF p_DirectCostDetailsTbl(i).task_id = p_DirectCostDetailsTbl(j).task_id AND
858            p_DirectCostDetailsTbl(i).expenditure_type = p_DirectCostDetailsTbl(j).expenditure_type AND
859            p_DirectCostDetailsTbl(i).resource_list_member_id = p_DirectCostDetailsTbl(j).resource_list_member_id AND
860            p_DirectCostDetailsTbl(i).currency_code = p_DirectCostDetailsTbl(j).currency_code THEN
861              RAISE dup_record_exception;
862         END IF;
863       END LOOP;
864     END LOOP;
865   EXCEPTION
866     WHEN dup_record_exception THEN
867          RAISE DUP_VAL_ON_INDEX;
868 
869   END check_dup_recs;
870 
871   ---------------------------------------------------------------------------
872   -- PROCEDURE insert_row
873   ---------------------------------------------------------------------------
874   ----------------------------------------------
875   -- insert_row for:PA_CI_DIRECT_COST_DETAILS --
876   ----------------------------------------------
877   PROCEDURE insert_row(
878     p_api_version                  IN NUMBER,
879     p_init_msg_list                IN VARCHAR2 DEFAULT PA_API.G_FALSE,
880     x_return_status                OUT NOCOPY VARCHAR2,
881     x_msg_count                    OUT NOCOPY NUMBER,
882     x_msg_data                     OUT NOCOPY VARCHAR2,
883     p_pa_ci_direct_cost1           IN PaCiDirectCostDetailsRecType,
884     XPaCiDirectCostDetailsRec      OUT NOCOPY PaCiDirectCostDetailsRecType) IS
885 
886     l_api_version                  CONSTANT NUMBER := 1;
887     l_api_name                     CONSTANT VARCHAR2(30) := 'B_insert_row';
888     l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
889     l_pa_ci_direct_cost8           PaCiDirectCostDetailsRecType := p_pa_ci_direct_cost1;
890     LDefPaCiDirectCostDetailsRec   PaCiDirectCostDetailsRecType;
891     --------------------------------------------------
892     -- Set_Attributes for:PA_CI_DIRECT_COST_DETAILS --
893     --------------------------------------------------
894     FUNCTION Set_Attributes (
895       p_pa_ci_direct_cost1 IN PaCiDirectCostDetailsRecType,
896       XPaCiDirectCostDetailsRec OUT NOCOPY PaCiDirectCostDetailsRecType
897     ) RETURN VARCHAR2 IS
901       RETURN(l_return_status);
898       l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
899     BEGIN
900       XPaCiDirectCostDetailsRec := p_pa_ci_direct_cost1;
902     END Set_Attributes;
903   BEGIN
904     l_return_status := PA_API.START_ACTIVITY(l_api_name,
905                                               p_init_msg_list,
906                                               '_PVT',
907                                               x_return_status);
908     IF (l_return_status = PA_API.G_RET_STS_UNEXP_ERROR) THEN
909       RAISE PA_API.G_EXCEPTION_UNEXPECTED_ERROR;
910     ELSIF (l_return_status = PA_API.G_RET_STS_ERROR) THEN
911       RAISE PA_API.G_EXCEPTION_ERROR;
912     END IF;
913     --- Setting item atributes
914     l_return_status := Set_Attributes(
915       p_pa_ci_direct_cost1,              -- IN
916       l_pa_ci_direct_cost8);             -- OUT
917     --- If any errors happen abort API
918     IF (l_return_status = PA_API.G_RET_STS_UNEXP_ERROR) THEN
919       RAISE PA_API.G_EXCEPTION_UNEXPECTED_ERROR;
920     ELSIF (l_return_status = PA_API.G_RET_STS_ERROR) THEN
921       RAISE PA_API.G_EXCEPTION_ERROR;
922     END IF;
923     INSERT INTO PA_CI_DIRECT_COST_DETAILS(
924       dc_line_id,
925       ci_id,
926       project_id,
927       task_id,
928       expenditure_type,
929       resource_list_member_id,
930       unit_of_measure,
931       currency_code,
932       quantity,
933       planning_resource_rate,
934       raw_cost,
935       burdened_cost,
936       raw_cost_rate,
937       burden_cost_rate,
938       resource_assignment_id,
939       effective_from,
940       effective_to,
941       change_reason_code,
942       change_description,
943       created_by,
944       creation_date,
945       last_update_by,
946       last_update_date,
947       last_update_login)
948     VALUES (
949       l_pa_ci_direct_cost8.dc_line_id,
950       l_pa_ci_direct_cost8.ci_id,
951       l_pa_ci_direct_cost8.project_id,
952       l_pa_ci_direct_cost8.task_id,
953       l_pa_ci_direct_cost8.expenditure_type,
954       l_pa_ci_direct_cost8.resource_list_member_id,
955       l_pa_ci_direct_cost8.unit_of_measure,
956       l_pa_ci_direct_cost8.currency_code,
957       l_pa_ci_direct_cost8.quantity,
958       l_pa_ci_direct_cost8.planning_resource_rate,
959       l_pa_ci_direct_cost8.raw_cost,
960       l_pa_ci_direct_cost8.burdened_cost,
961       l_pa_ci_direct_cost8.raw_cost_rate,
962       l_pa_ci_direct_cost8.burden_cost_rate,
963       l_pa_ci_direct_cost8.resource_assignment_id,
964       l_pa_ci_direct_cost8.effective_from,
965       l_pa_ci_direct_cost8.effective_to,
966       l_pa_ci_direct_cost8.change_reason_code,
967       l_pa_ci_direct_cost8.change_description,
968       l_pa_ci_direct_cost8.created_by,
969       l_pa_ci_direct_cost8.creation_date,
970       l_pa_ci_direct_cost8.last_update_by,
971       l_pa_ci_direct_cost8.last_update_date,
972       l_pa_ci_direct_cost8.last_update_login);
973     -- Set OUT values
974     XPaCiDirectCostDetailsRec := l_pa_ci_direct_cost8;
975     x_return_status := l_return_status;
976     PA_API.END_ACTIVITY(x_msg_count, x_msg_data);
977   EXCEPTION
978     WHEN PA_API.G_EXCEPTION_ERROR THEN
979       x_return_status := PA_API.HANDLE_EXCEPTIONS
980       (
981         l_api_name,
982         G_PKG_NAME,
983         'PA_API.G_RET_STS_ERROR',
984         x_msg_count,
985         x_msg_data,
986         '_PVT'
987       );
988     WHEN PA_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
989       x_return_status := PA_API.HANDLE_EXCEPTIONS
990       (
991         l_api_name,
992         G_PKG_NAME,
993         'PA_API.G_RET_STS_UNEXP_ERROR',
994         x_msg_count,
995         x_msg_data,
996         '_PVT'
997       );
998     WHEN OTHERS THEN
999       x_return_status := PA_API.HANDLE_EXCEPTIONS
1000       (
1001         l_api_name,
1002         G_PKG_NAME,
1003         'OTHERS',
1004         x_msg_count,
1005         x_msg_data,
1006         '_PVT'
1007       );
1008   END insert_row;
1009 
1010   ---------------------------------------------------------------------------
1011   -- PROCEDURE insert_row
1012   ---------------------------------------------------------------------------
1013   ----------------------------------------------
1014   -- insert_row for:PA_CI_DIRECT_COST_DETAILS --
1015   ----------------------------------------------
1016     PROCEDURE insert_row(
1017     p_api_version                  IN NUMBER,
1018     p_init_msg_list                IN VARCHAR2 DEFAULT PA_API.G_FALSE,
1019     x_return_status                OUT NOCOPY VARCHAR2,
1020     x_msg_count                    OUT NOCOPY NUMBER,
1021     x_msg_data                     OUT NOCOPY VARCHAR2,
1022     PPaCiDirectCostDetailsTbl      IN PaCiDirectCostDetailsTblType,
1023     XPaCiDirectCostDetailsTbl      OUT NOCOPY PaCiDirectCostDetailsTblType) IS
1024 
1025     l_api_version                  CONSTANT NUMBER := 1;
1026     l_api_name                     CONSTANT VARCHAR2(30) := 'V_tbl_insert_row';
1027     l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
1028     i                              NUMBER := 0;
1029   BEGIN
1030     PA_API.init_msg_list(p_init_msg_list);
1031     -- Make sure PL/SQL table has records in it before passing
1032 
1033     IF (PPaCiDirectCostDetailsTbl.COUNT > 0) THEN
1034 
1035       -- check if there are duplicate records entered by the user.
1036       -- the check happens on the input table parameter
1037 
1038       check_dup_recs(PPaCiDirectCostDetailsTbl);
1039 
1040       i := PPaCiDirectCostDetailsTbl.FIRST;
1041       LOOP
1042         insert_row (
1046           x_msg_count                    => x_msg_count,
1043           p_api_version                  => p_api_version,
1044           p_init_msg_list                => PA_API.G_FALSE,
1045           x_return_status                => x_return_status,
1047           x_msg_data                     => x_msg_data,
1048           p_pa_ci_direct_cost1           => PPaCiDirectCostDetailsTbl(i),
1049           XPaCiDirectCostDetailsRec      => XPaCiDirectCostDetailsTbl(i));
1050 
1051         EXIT WHEN (i = PPaCiDirectCostDetailsTbl.LAST);
1052         i := PPaCiDirectCostDetailsTbl.NEXT(i);
1053       END LOOP;
1054     END IF;
1055   EXCEPTION
1056     WHEN PA_API.G_EXCEPTION_ERROR THEN
1057       x_return_status := PA_API.HANDLE_EXCEPTIONS
1058       (
1059         l_api_name,
1060         G_PKG_NAME,
1061         'PA_API.G_RET_STS_ERROR',
1062         x_msg_count,
1063         x_msg_data,
1064         '_PVT'
1065       );
1066     WHEN PA_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1067       x_return_status :=PA_API.HANDLE_EXCEPTIONS
1068       (
1069         l_api_name,
1070         G_PKG_NAME,
1071         'PA_API.G_RET_STS_UNEXP_ERROR',
1072         x_msg_count,
1073         x_msg_data,
1074         '_PVT'
1075       );
1076 
1077     WHEN DUP_VAL_ON_INDEX THEN
1078        PA_Api.set_message(p_app_name     => g_app_name,
1079                           p_msg_name     => 'PA_FIN_SAME_PLANNING_ELEMENT');
1080 
1081       x_return_status := PA_API.G_RET_STS_ERROR;
1082 
1083     WHEN OTHERS THEN
1084       x_return_status :=PA_API.HANDLE_EXCEPTIONS
1085       (
1086         l_api_name,
1087         G_PKG_NAME,
1088         'OTHERS',
1089         x_msg_count,
1090         x_msg_data,
1091         '_PVT'
1092       );
1093   END insert_row;
1094 
1095   ---------------------------------------------------------------------------
1096   -- PROCEDURE lock_row
1097   ---------------------------------------------------------------------------
1098   --------------------------------------------
1099   -- lock_row for:PA_CI_DIRECT_COST_DETAILS --
1100   --------------------------------------------
1101   PROCEDURE lock_row(
1102     p_init_msg_list                IN VARCHAR2 DEFAULT PA_API.G_FALSE,
1103     x_return_status                OUT NOCOPY VARCHAR2,
1104     x_msg_count                    OUT NOCOPY NUMBER,
1105     x_msg_data                     OUT NOCOPY VARCHAR2,
1106     p_pa_ci_direct_cost1           IN PaCiDirectCostDetailsRecType) IS
1107 
1108     E_Resource_Busy                EXCEPTION;
1109     PRAGMA EXCEPTION_INIT(E_Resource_Busy, -00054);
1110     CURSOR lock_csr (p_pa_ci_direct_cost1 IN PaCiDirectCostDetailsRecType) IS
1111     SELECT *
1112       FROM PA_CI_DIRECT_COST_DETAILS
1113      WHERE DC_LINE_ID = p_pa_ci_direct_cost1.dc_line_id
1114     FOR UPDATE NOWAIT;
1115 
1116     l_api_version                  CONSTANT NUMBER := 1;
1117     l_api_name                     CONSTANT VARCHAR2(30) := 'B_lock_row';
1118     l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
1119     l_lock_var                     lock_csr%ROWTYPE;
1120     l_row_notfound                 BOOLEAN := FALSE;
1121     lc_row_notfound                BOOLEAN := FALSE;
1122   BEGIN
1123     l_return_status := PA_API.START_ACTIVITY(l_api_name,
1124                                               p_init_msg_list,
1125                                               '_PVT',
1126                                               x_return_status);
1127     IF (l_return_status = PA_API.G_RET_STS_UNEXP_ERROR) THEN
1128       RAISE PA_API.G_EXCEPTION_UNEXPECTED_ERROR;
1129     ELSIF (l_return_status = PA_API.G_RET_STS_ERROR) THEN
1130       RAISE PA_API.G_EXCEPTION_ERROR;
1131     END IF;
1132     BEGIN
1133       OPEN lock_csr(p_pa_ci_direct_cost1);
1134       FETCH lock_csr INTO l_lock_var;
1135       l_row_notfound := lock_csr%NOTFOUND;
1136       CLOSE lock_csr;
1137     EXCEPTION
1138       WHEN E_Resource_Busy THEN
1139         IF (lock_csr%ISOPEN) THEN
1140           CLOSE lock_csr;
1141         END IF;
1142         PA_API.set_message(G_FND_APP,G_FORM_UNABLE_TO_RESERVE_REC);
1143         RAISE APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION;
1144     END;
1145 
1146     IF ( l_row_notfound ) THEN
1147       PA_API.set_message(G_FND_APP,G_FORM_RECORD_DELETED);
1148       RAISE PA_API.G_EXCEPTION_ERROR;
1149     ELSE
1150 
1151       IF (l_lock_var.dc_line_id <> p_pa_ci_direct_cost1.dc_line_id) THEN
1152         PA_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
1153         RAISE PA_API.G_EXCEPTION_ERROR;
1154       END IF;
1155 
1156       IF (l_lock_var.ci_id <> p_pa_ci_direct_cost1.ci_id) THEN
1157         PA_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
1158         RAISE PA_API.G_EXCEPTION_ERROR;
1159       END IF;
1160       IF (l_lock_var.project_id <> p_pa_ci_direct_cost1.project_id) THEN
1161         PA_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
1162         RAISE PA_API.G_EXCEPTION_ERROR;
1163       END IF;
1164       IF (l_lock_var.task_id <> p_pa_ci_direct_cost1.task_id) THEN
1165         PA_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
1166         RAISE PA_API.G_EXCEPTION_ERROR;
1167       END IF;
1168       IF (l_lock_var.expenditure_type <> p_pa_ci_direct_cost1.expenditure_type) THEN
1169         PA_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
1170         RAISE PA_API.G_EXCEPTION_ERROR;
1171       END IF;
1172       IF (l_lock_var.resource_list_member_id <> p_pa_ci_direct_cost1.resource_list_member_id) THEN
1173         PA_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
1174         RAISE PA_API.G_EXCEPTION_ERROR;
1175       END IF;
1176 
1177     END IF;
1178     x_return_status := l_return_status;
1179     PA_API.END_ACTIVITY(x_msg_count, x_msg_data);
1180   EXCEPTION
1181     WHEN PA_API.G_EXCEPTION_ERROR THEN
1185         G_PKG_NAME,
1182       x_return_status := PA_API.HANDLE_EXCEPTIONS
1183       (
1184         l_api_name,
1186         'PA_API.G_RET_STS_ERROR',
1187         x_msg_count,
1188         x_msg_data,
1189         '_PVT'
1190       );
1191     WHEN PA_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1192       x_return_status := PA_API.HANDLE_EXCEPTIONS
1193       (
1194         l_api_name,
1195         G_PKG_NAME,
1196         'PA_API.G_RET_STS_UNEXP_ERROR',
1197         x_msg_count,
1198         x_msg_data,
1199         '_PVT'
1200       );
1201     WHEN OTHERS THEN
1202       x_return_status := PA_API.HANDLE_EXCEPTIONS
1203       (
1204         l_api_name,
1205         G_PKG_NAME,
1206         'OTHERS',
1207         x_msg_count,
1208         x_msg_data,
1209         '_PVT'
1210       );
1211   END lock_row;
1212   ---------------------------------------------
1213   -- lock_row for: PA_CI_DIRECT_COST_DETAILS --
1214   ---------------------------------------------
1215   PROCEDURE lock_row(
1216     p_api_version                  IN NUMBER,
1217     p_init_msg_list                IN VARCHAR2 DEFAULT PA_API.G_FALSE,
1218     x_return_status                OUT NOCOPY VARCHAR2,
1219     x_msg_count                    OUT NOCOPY NUMBER,
1220     x_msg_data                     OUT NOCOPY VARCHAR2,
1221     p_pa_ci_direct_cost1           IN PaCiDirectCostDetailsRecType) IS
1222 
1223     l_api_version                  CONSTANT NUMBER := 1;
1224     l_api_name                     CONSTANT VARCHAR2(30) := 'V_lock_row';
1225     l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
1226     l_pa_ci_direct_cost8           PaCiDirectCostDetailsRecType;
1227   BEGIN
1228     l_return_status := PA_API.START_ACTIVITY(l_api_name,
1229                                               G_PKG_NAME,
1230                                               p_init_msg_list,
1231                                               l_api_version,
1232                                               p_api_version,
1233                                               '_PVT',
1234                                               x_return_status);
1235     IF (l_return_status = PA_API.G_RET_STS_UNEXP_ERROR) THEN
1236       RAISE PA_API.G_EXCEPTION_UNEXPECTED_ERROR;
1237     ELSIF (l_return_status = PA_API.G_RET_STS_ERROR) THEN
1238       RAISE PA_API.G_EXCEPTION_ERROR;
1239     END IF;
1240     -----------------------------------------
1241     -- Move VIEW record to "Child" records --
1242     -----------------------------------------
1243     migrate(p_pa_ci_direct_cost1, l_pa_ci_direct_cost8);
1244     ---------------------------------------------
1245     -- Call the LOCK_ROW for each child record --
1246     ---------------------------------------------
1247     lock_row(
1248       p_init_msg_list,
1249       l_return_status,
1250       x_msg_count,
1251       x_msg_data,
1252       l_pa_ci_direct_cost8
1253     );
1254     IF (l_return_status = PA_API.G_RET_STS_UNEXP_ERROR) THEN
1255       RAISE PA_API.G_EXCEPTION_UNEXPECTED_ERROR;
1256     ELSIF (l_return_status = PA_API.G_RET_STS_ERROR) THEN
1257       RAISE PA_API.G_EXCEPTION_ERROR;
1258     END IF;
1259     x_return_status := l_return_status;
1260     PA_API.END_ACTIVITY(x_msg_count, x_msg_data);
1261   EXCEPTION
1262     WHEN PA_API.G_EXCEPTION_ERROR THEN
1263       x_return_status := PA_API.HANDLE_EXCEPTIONS
1264       (
1265         l_api_name,
1266         G_PKG_NAME,
1267         'PA_API.G_RET_STS_ERROR',
1268         x_msg_count,
1269         x_msg_data,
1270         '_PVT'
1271       );
1272     WHEN PA_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1273       x_return_status := PA_API.HANDLE_EXCEPTIONS
1274       (
1275         l_api_name,
1276         G_PKG_NAME,
1277         'PA_API.G_RET_STS_UNEXP_ERROR',
1278         x_msg_count,
1279         x_msg_data,
1280         '_PVT'
1281       );
1282     WHEN OTHERS THEN
1283       x_return_status := PA_API.HANDLE_EXCEPTIONS
1284       (
1285         l_api_name,
1286         G_PKG_NAME,
1287         'OTHERS',
1288         x_msg_count,
1289         x_msg_data,
1290         '_PVT'
1291       );
1292   END lock_row;
1293   -----------------------------------------------------------
1294   -- PL/SQL TBL lock_row for:PA_CI_DIRECT_COST_DETAILS_TBL --
1295   -----------------------------------------------------------
1296   PROCEDURE lock_row(
1297     p_api_version                  IN NUMBER,
1298     p_init_msg_list                IN VARCHAR2 DEFAULT PA_API.G_FALSE,
1299     x_return_status                OUT NOCOPY VARCHAR2,
1300     x_msg_count                    OUT NOCOPY NUMBER,
1301     x_msg_data                     OUT NOCOPY VARCHAR2,
1302     PPaCiDirectCostDetailsTbl      IN PaCiDirectCostDetailsTblType,
1303     px_error_tbl                   IN OUT NOCOPY PA_API.ERROR_TBL_TYPE) IS
1304 
1305     l_api_version                  CONSTANT NUMBER := 1;
1306     l_api_name                     CONSTANT VARCHAR2(30) := 'V_error_tbl_lock_row';
1307     i                              NUMBER := 0;
1308   BEGIN
1309     PA_API.init_msg_list(p_init_msg_list);
1310     -- Make sure PL/SQL table has recrods in it before passing
1311     IF (PPaCiDirectCostDetailsTbl.COUNT > 0) THEN
1312       i := PPaCiDirectCostDetailsTbl.FIRST;
1313       LOOP
1314         DECLARE
1315           l_error_rec         PA_API.ERROR_REC_TYPE;
1316         BEGIN
1317           l_error_rec.api_name := l_api_name;
1318           l_error_rec.api_package := G_PKG_NAME;
1319           l_error_rec.idx := i;
1320           lock_row(
1321             p_api_version                  => p_api_version,
1322             p_init_msg_list                => PA_API.G_FALSE,
1323             x_return_status                => l_error_rec.error_type,
1324             x_msg_count                    => l_error_rec.msg_count,
1328             l_error_rec.sqlcode := SQLCODE;
1325             x_msg_data                     => l_error_rec.msg_data,
1326             p_pa_ci_direct_cost1           => PPaCiDirectCostDetailsTbl(i));
1327           IF (l_error_rec.error_type <> PA_API.G_RET_STS_SUCCESS) THEN
1329             load_error_tbl(l_error_rec, px_error_tbl);
1330           ELSE
1331             x_msg_count := l_error_rec.msg_count;
1332             x_msg_data := l_error_rec.msg_data;
1333           END IF;
1334         EXCEPTION
1335           WHEN PA_API.G_EXCEPTION_ERROR THEN
1336             l_error_rec.error_type := PA_API.G_RET_STS_ERROR;
1337             l_error_rec.sqlcode := SQLCODE;
1338             load_error_tbl(l_error_rec, px_error_tbl);
1339           WHEN PA_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1340             l_error_rec.error_type := PA_API.G_RET_STS_UNEXP_ERROR;
1341             l_error_rec.sqlcode := SQLCODE;
1342             load_error_tbl(l_error_rec, px_error_tbl);
1343           WHEN OTHERS THEN
1344             l_error_rec.error_type := 'OTHERS';
1345             l_error_rec.sqlcode := SQLCODE;
1346             load_error_tbl(l_error_rec, px_error_tbl);
1347         END;
1348         EXIT WHEN (i = PPaCiDirectCostDetailsTbl.LAST);
1349         i := PPaCiDirectCostDetailsTbl.NEXT(i);
1350       END LOOP;
1351     END IF;
1352     -- Loop through the error_tbl to find the error with the highest severity
1353     -- and return it.
1354     x_return_status := find_highest_exception(px_error_tbl);
1355     PA_API.END_ACTIVITY(x_msg_count, x_msg_data);
1356   EXCEPTION
1357     WHEN PA_API.G_EXCEPTION_ERROR THEN
1358       x_return_status := PA_API.HANDLE_EXCEPTIONS
1359       (
1360         l_api_name,
1361         G_PKG_NAME,
1362         'PA_API.G_RET_STS_ERROR',
1363         x_msg_count,
1364         x_msg_data,
1365         '_PVT'
1366       );
1367     WHEN PA_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1368       x_return_status := PA_API.HANDLE_EXCEPTIONS
1369       (
1370         l_api_name,
1371         G_PKG_NAME,
1372         'PA_API.G_RET_STS_UNEXP_ERROR',
1373         x_msg_count,
1374         x_msg_data,
1375         '_PVT'
1376       );
1377     WHEN OTHERS THEN
1378       x_return_status := PA_API.HANDLE_EXCEPTIONS
1379       (
1380         l_api_name,
1381         G_PKG_NAME,
1382         'OTHERS',
1383         x_msg_count,
1384         x_msg_data,
1385         '_PVT'
1386       );
1387   END lock_row;
1388   -----------------------------------------------------------
1389   -- PL/SQL TBL lock_row for:PA_CI_DIRECT_COST_DETAILS_TBL --
1390   -----------------------------------------------------------
1391   PROCEDURE lock_row(
1392     p_api_version                  IN NUMBER,
1393     p_init_msg_list                IN VARCHAR2 DEFAULT PA_API.G_FALSE,
1394     x_return_status                OUT NOCOPY VARCHAR2,
1395     x_msg_count                    OUT NOCOPY NUMBER,
1396     x_msg_data                     OUT NOCOPY VARCHAR2,
1397     PPaCiDirectCostDetailsTbl      IN PaCiDirectCostDetailsTblType) IS
1398 
1399     l_api_version                  CONSTANT NUMBER := 1;
1400     l_api_name                     CONSTANT VARCHAR2(30) := 'V_tbl_lock_row';
1401     l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
1402     l_error_tbl                    PA_API.ERROR_TBL_TYPE;
1403   BEGIN
1404     PA_API.init_msg_list(p_init_msg_list);
1405     -- Make sure PL/SQL table has recrods in it before passing
1406     IF (PPaCiDirectCostDetailsTbl.COUNT > 0) THEN
1407       lock_row(
1408         p_api_version                  => p_api_version,
1409         p_init_msg_list                => PA_API.G_FALSE,
1410         x_return_status                => x_return_status,
1411         x_msg_count                    => x_msg_count,
1412         x_msg_data                     => x_msg_data,
1413         PPaCiDirectCostDetailsTbl      => PPaCiDirectCostDetailsTbl,
1414         px_error_tbl                   => l_error_tbl);
1415     END IF;
1416     PA_API.END_ACTIVITY(x_msg_count, x_msg_data);
1417   EXCEPTION
1418     WHEN PA_API.G_EXCEPTION_ERROR THEN
1419       x_return_status := PA_API.HANDLE_EXCEPTIONS
1420       (
1421         l_api_name,
1422         G_PKG_NAME,
1423         'PA_API.G_RET_STS_ERROR',
1424         x_msg_count,
1425         x_msg_data,
1426         '_PVT'
1427       );
1428     WHEN PA_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1429       x_return_status := PA_API.HANDLE_EXCEPTIONS
1430       (
1431         l_api_name,
1432         G_PKG_NAME,
1433         'PA_API.G_RET_STS_UNEXP_ERROR',
1434         x_msg_count,
1435         x_msg_data,
1436         '_PVT'
1437       );
1438     WHEN OTHERS THEN
1439       x_return_status := PA_API.HANDLE_EXCEPTIONS
1440       (
1441         l_api_name,
1442         G_PKG_NAME,
1443         'OTHERS',
1444         x_msg_count,
1445         x_msg_data,
1446         '_PVT'
1447       );
1448   END lock_row;
1449   ---------------------------------------------------------------------------
1450   -- PROCEDURE update_row
1451   ---------------------------------------------------------------------------
1452   ----------------------------------------------
1453   -- update_row for:PA_CI_DIRECT_COST_DETAILS --
1454   ----------------------------------------------
1455 
1456   PROCEDURE update_row(
1457     p_init_msg_list                IN VARCHAR2 DEFAULT PA_API.G_FALSE,
1458     x_return_status                OUT NOCOPY VARCHAR2,
1459     x_msg_count                    OUT NOCOPY NUMBER,
1460     x_msg_data                     OUT NOCOPY VARCHAR2,
1461     p_pa_ci_direct_cost1           IN PaCiDirectCostDetailsRecType,
1462     XPaCiDirectCostDetailsRec      OUT NOCOPY PaCiDirectCostDetailsRecType) IS
1463 
1464     l_api_version                  CONSTANT NUMBER := 1;
1468     LDefPaCiDirectCostDetailsRec   PaCiDirectCostDetailsRecType;
1465     l_api_name                     CONSTANT VARCHAR2(30) := 'B_update_row';
1466     l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
1467     l_pa_ci_direct_cost8           PaCiDirectCostDetailsRecType := p_pa_ci_direct_cost1;
1469     l_row_notfound                 BOOLEAN := TRUE;
1470     ----------------------------------
1471     -- FUNCTION populate_new_record --
1472     ----------------------------------
1473     FUNCTION populate_new_record (
1474       p_pa_ci_direct_cost1 IN PaCiDirectCostDetailsRecType,
1475       XPaCiDirectCostDetailsRec OUT NOCOPY PaCiDirectCostDetailsRecType
1476     ) RETURN VARCHAR2 IS
1477       l_pa_ci_direct_cost8           PaCiDirectCostDetailsRecType;
1478       l_row_notfound                 BOOLEAN := TRUE;
1479       l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
1480     BEGIN
1481       XPaCiDirectCostDetailsRec := p_pa_ci_direct_cost1;
1482       -- Get current database values
1483       l_pa_ci_direct_cost8 := get_rec(p_pa_ci_direct_cost1, l_return_status);
1484       IF (l_return_status = PA_API.G_RET_STS_SUCCESS) THEN
1485         IF (XPaCiDirectCostDetailsRec.dc_line_id = PA_API.G_MISS_NUM)
1486         THEN
1487           XPaCiDirectCostDetailsRec.dc_line_id := l_pa_ci_direct_cost8.dc_line_id;
1488         END IF;
1489         IF (XPaCiDirectCostDetailsRec.ci_id = PA_API.G_MISS_NUM)
1490         THEN
1491           XPaCiDirectCostDetailsRec.ci_id := l_pa_ci_direct_cost8.ci_id;
1492         END IF;
1493         IF (XPaCiDirectCostDetailsRec.project_id = PA_API.G_MISS_NUM)
1494         THEN
1495           XPaCiDirectCostDetailsRec.project_id := l_pa_ci_direct_cost8.project_id;
1496         END IF;
1497         IF (XPaCiDirectCostDetailsRec.task_id = PA_API.G_MISS_NUM)
1498         THEN
1499           XPaCiDirectCostDetailsRec.task_id := l_pa_ci_direct_cost8.task_id;
1500         END IF;
1501         IF (XPaCiDirectCostDetailsRec.expenditure_type = PA_API.G_MISS_CHAR)
1502         THEN
1503           XPaCiDirectCostDetailsRec.expenditure_type := l_pa_ci_direct_cost8.expenditure_type;
1504         END IF;
1505         IF (XPaCiDirectCostDetailsRec.resource_list_member_id = PA_API.G_MISS_NUM)
1506         THEN
1507           XPaCiDirectCostDetailsRec.resource_list_member_id := l_pa_ci_direct_cost8.resource_list_member_id;
1508         END IF;
1509         IF (XPaCiDirectCostDetailsRec.unit_of_measure = PA_API.G_MISS_CHAR)
1510         THEN
1511           XPaCiDirectCostDetailsRec.unit_of_measure := l_pa_ci_direct_cost8.unit_of_measure;
1512         END IF;
1513         IF (XPaCiDirectCostDetailsRec.currency_code = PA_API.G_MISS_CHAR)
1514         THEN
1515           XPaCiDirectCostDetailsRec.currency_code := l_pa_ci_direct_cost8.currency_code;
1516         END IF;
1517         IF (XPaCiDirectCostDetailsRec.quantity = PA_API.G_MISS_NUM)
1518         THEN
1519           XPaCiDirectCostDetailsRec.quantity := l_pa_ci_direct_cost8.quantity;
1520         END IF;
1521         IF (XPaCiDirectCostDetailsRec.planning_resource_rate = PA_API.G_MISS_NUM)
1522         THEN
1523           XPaCiDirectCostDetailsRec.planning_resource_rate := l_pa_ci_direct_cost8.planning_resource_rate;
1524         END IF;
1525         IF (XPaCiDirectCostDetailsRec.raw_cost = PA_API.G_MISS_NUM)
1526         THEN
1527           XPaCiDirectCostDetailsRec.raw_cost := l_pa_ci_direct_cost8.raw_cost;
1528         END IF;
1529         IF (XPaCiDirectCostDetailsRec.burdened_cost = PA_API.G_MISS_NUM)
1530         THEN
1531           XPaCiDirectCostDetailsRec.burdened_cost := l_pa_ci_direct_cost8.burdened_cost;
1532         END IF;
1533         IF (XPaCiDirectCostDetailsRec.raw_cost_rate = PA_API.G_MISS_NUM)
1534         THEN
1535           XPaCiDirectCostDetailsRec.raw_cost_rate := l_pa_ci_direct_cost8.raw_cost_rate;
1536         END IF;
1537         IF (XPaCiDirectCostDetailsRec.burden_cost_rate = PA_API.G_MISS_NUM)
1538         THEN
1539           XPaCiDirectCostDetailsRec.burden_cost_rate := l_pa_ci_direct_cost8.burden_cost_rate;
1540         END IF;
1541         IF (XPaCiDirectCostDetailsRec.resource_assignment_id = PA_API.G_MISS_NUM)
1542         THEN
1543           XPaCiDirectCostDetailsRec.resource_assignment_id := l_pa_ci_direct_cost8.resource_assignment_id;
1544         END IF;
1545         IF (XPaCiDirectCostDetailsRec.effective_from = PA_API.G_MISS_DATE)
1546         THEN
1547           XPaCiDirectCostDetailsRec.effective_from := l_pa_ci_direct_cost8.effective_from;
1548         END IF;
1549         IF (XPaCiDirectCostDetailsRec.effective_to = PA_API.G_MISS_DATE)
1550         THEN
1551           XPaCiDirectCostDetailsRec.effective_to := l_pa_ci_direct_cost8.effective_to;
1552         END IF;
1553         IF (XPaCiDirectCostDetailsRec.change_reason_code = PA_API.G_MISS_CHAR)
1554         THEN
1555           XPaCiDirectCostDetailsRec.change_reason_code := l_pa_ci_direct_cost8.change_reason_code;
1556         END IF;
1557         IF (XPaCiDirectCostDetailsRec.change_description = PA_API.G_MISS_CHAR)
1558         THEN
1559           XPaCiDirectCostDetailsRec.change_description := l_pa_ci_direct_cost8.change_description;
1560         END IF;
1561         IF (XPaCiDirectCostDetailsRec.created_by = PA_API.G_MISS_NUM)
1562         THEN
1563           XPaCiDirectCostDetailsRec.created_by := l_pa_ci_direct_cost8.created_by;
1564         END IF;
1565         IF (XPaCiDirectCostDetailsRec.creation_date = PA_API.G_MISS_DATE)
1566         THEN
1567           XPaCiDirectCostDetailsRec.creation_date := l_pa_ci_direct_cost8.creation_date;
1568         END IF;
1569         IF (XPaCiDirectCostDetailsRec.last_update_by = PA_API.G_MISS_NUM)
1570         THEN
1571           XPaCiDirectCostDetailsRec.last_update_by := l_pa_ci_direct_cost8.last_update_by;
1572         END IF;
1573         IF (XPaCiDirectCostDetailsRec.last_update_date = PA_API.G_MISS_DATE)
1574         THEN
1575           XPaCiDirectCostDetailsRec.last_update_date := l_pa_ci_direct_cost8.last_update_date;
1576         END IF;
1580         END IF;
1577         IF (XPaCiDirectCostDetailsRec.last_update_login = PA_API.G_MISS_NUM)
1578         THEN
1579           XPaCiDirectCostDetailsRec.last_update_login := l_pa_ci_direct_cost8.last_update_login;
1581       END IF;
1582       RETURN(l_return_status);
1583     END populate_new_record;
1584     --------------------------------------------------
1585     -- Set_Attributes for:PA_CI_DIRECT_COST_DETAILS --
1586     --------------------------------------------------
1587     FUNCTION Set_Attributes (
1588       p_pa_ci_direct_cost1 IN PaCiDirectCostDetailsRecType,
1589       XPaCiDirectCostDetailsRec OUT NOCOPY PaCiDirectCostDetailsRecType
1590     ) RETURN VARCHAR2 IS
1591       l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
1592     BEGIN
1593       XPaCiDirectCostDetailsRec := p_pa_ci_direct_cost1;
1594       RETURN(l_return_status);
1595     END Set_Attributes;
1596   BEGIN
1597 
1598     l_return_status := PA_API.START_ACTIVITY(l_api_name,
1599                                               p_init_msg_list,
1600                                               '_PVT',
1601                                               x_return_status);
1602     IF (l_return_status = PA_API.G_RET_STS_UNEXP_ERROR) THEN
1603       RAISE PA_API.G_EXCEPTION_UNEXPECTED_ERROR;
1604     ELSIF (l_return_status = PA_API.G_RET_STS_ERROR) THEN
1605       RAISE PA_API.G_EXCEPTION_ERROR;
1606     END IF;
1607     --- Setting item attributes
1608     l_return_status := Set_Attributes(
1609       p_pa_ci_direct_cost1,              -- IN
1610       l_pa_ci_direct_cost8);             -- OUT
1611     --- If any errors happen abort API
1612     IF (l_return_status = PA_API.G_RET_STS_UNEXP_ERROR) THEN
1613       RAISE PA_API.G_EXCEPTION_UNEXPECTED_ERROR;
1614     ELSIF (l_return_status = PA_API.G_RET_STS_ERROR) THEN
1615       RAISE PA_API.G_EXCEPTION_ERROR;
1616     END IF;
1617     l_return_status := populate_new_record(l_pa_ci_direct_cost8, LDefPaCiDirectCostDetailsRec);
1618     IF (l_return_status = PA_API.G_RET_STS_UNEXP_ERROR) THEN
1619       RAISE PA_API.G_EXCEPTION_UNEXPECTED_ERROR;
1620     ELSIF (l_return_status = PA_API.G_RET_STS_ERROR) THEN
1621       RAISE PA_API.G_EXCEPTION_ERROR;
1622     END IF;
1623 
1624     UPDATE PA_CI_DIRECT_COST_DETAILS
1625     SET CI_ID = LDefPaCiDirectCostDetailsRec.ci_id,
1626         PROJECT_ID = LDefPaCiDirectCostDetailsRec.project_id,
1627         TASK_ID = LDefPaCiDirectCostDetailsRec.task_id,
1628         EXPENDITURE_TYPE = LDefPaCiDirectCostDetailsRec.expenditure_type,
1629         RESOURCE_LIST_MEMBER_ID = LDefPaCiDirectCostDetailsRec.resource_list_member_id,
1630         UNIT_OF_MEASURE = LDefPaCiDirectCostDetailsRec.unit_of_measure,
1631         CURRENCY_CODE = LDefPaCiDirectCostDetailsRec.currency_code,
1632         QUANTITY = LDefPaCiDirectCostDetailsRec.quantity,
1633         PLANNING_RESOURCE_RATE = LDefPaCiDirectCostDetailsRec.planning_resource_rate,
1634         RAW_COST = LDefPaCiDirectCostDetailsRec.raw_cost,
1635         BURDENED_COST = LDefPaCiDirectCostDetailsRec.burdened_cost,
1636         RAW_COST_RATE = LDefPaCiDirectCostDetailsRec.raw_cost_rate,
1637         BURDEN_COST_RATE = LDefPaCiDirectCostDetailsRec.burden_cost_rate,
1638         RESOURCE_ASSIGNMENT_ID = LDefPaCiDirectCostDetailsRec.resource_assignment_id,
1639         EFFECTIVE_FROM = LDefPaCiDirectCostDetailsRec.effective_from,
1640         EFFECTIVE_TO = LDefPaCiDirectCostDetailsRec.effective_to,
1641         CHANGE_REASON_CODE = LDefPaCiDirectCostDetailsRec.change_reason_code,
1642         CHANGE_DESCRIPTION = LDefPaCiDirectCostDetailsRec.change_description,
1643         CREATED_BY = LDefPaCiDirectCostDetailsRec.created_by,
1644         CREATION_DATE = LDefPaCiDirectCostDetailsRec.creation_date,
1645         LAST_UPDATE_BY = LDefPaCiDirectCostDetailsRec.last_update_by,
1646         LAST_UPDATE_DATE = LDefPaCiDirectCostDetailsRec.last_update_date,
1647         LAST_UPDATE_LOGIN = LDefPaCiDirectCostDetailsRec.last_update_login
1648     WHERE DC_LINE_ID = LDefPaCiDirectCostDetailsRec.dc_line_id;
1649 
1650     XPaCiDirectCostDetailsRec := l_pa_ci_direct_cost8;
1651     x_return_status := l_return_status;
1652     PA_API.END_ACTIVITY(x_msg_count, x_msg_data);
1653   EXCEPTION
1654     WHEN PA_API.G_EXCEPTION_ERROR THEN
1655       x_return_status := PA_API.HANDLE_EXCEPTIONS
1656       (
1657         l_api_name,
1658         G_PKG_NAME,
1659         'PA_API.G_RET_STS_ERROR',
1660         x_msg_count,
1661         x_msg_data,
1662         '_PVT'
1663       );
1664     WHEN PA_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1665       x_return_status := PA_API.HANDLE_EXCEPTIONS
1666       (
1667         l_api_name,
1668         G_PKG_NAME,
1669         'PA_API.G_RET_STS_UNEXP_ERROR',
1670         x_msg_count,
1671         x_msg_data,
1672         '_PVT'
1673       );
1674     WHEN OTHERS THEN
1675       x_return_status := PA_API.HANDLE_EXCEPTIONS
1676       (
1677         l_api_name,
1678         G_PKG_NAME,
1679         'OTHERS',
1680         x_msg_count,
1681         x_msg_data,
1682         '_PVT'
1683       );
1684   END update_row;
1685 
1686   ----------------------------------------------
1687   -- update_row for:PA_CI_DIRECT_COST_DETAILS --
1688   ----------------------------------------------
1689   PROCEDURE update_row(
1690     p_api_version                  IN NUMBER,
1691     p_init_msg_list                IN VARCHAR2 DEFAULT PA_API.G_FALSE,
1692     x_return_status                OUT NOCOPY VARCHAR2,
1693     x_msg_count                    OUT NOCOPY NUMBER,
1694     x_msg_data                     OUT NOCOPY VARCHAR2,
1695     p_pa_ci_direct_cost1           IN PaCiDirectCostDetailsRecType,
1696     XPaCiDirectCostDetailsRec      OUT NOCOPY PaCiDirectCostDetailsRecType) IS
1697 
1698     l_api_version                  CONSTANT NUMBER := 1;
1699     l_api_name                     CONSTANT VARCHAR2(30) := 'V_update_row';
1700     l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
1704     LxPaCiDirectCostDetailsRec     PaCiDirectCostDetailsRecType;
1701     l_pa_ci_direct_cost8           PaCiDirectCostDetailsRecType := p_pa_ci_direct_cost1;
1702     LDefPaCiDirectCostDetailsRec   PaCiDirectCostDetailsRecType;
1703     l_db_pa_ci_direct_cos106       PaCiDirectCostDetailsRecType;
1705     -------------------------------
1706     -- FUNCTION fill_who_columns --
1707     -------------------------------
1708     FUNCTION fill_who_columns (
1709       p_pa_ci_direct_cost1 IN PaCiDirectCostDetailsRecType
1710     ) RETURN PaCiDirectCostDetailsRecType IS
1711       l_pa_ci_direct_cost8 PaCiDirectCostDetailsRecType := p_pa_ci_direct_cost1;
1712     BEGIN
1713       l_pa_ci_direct_cost8.CREATED_BY := FND_GLOBAL.USER_ID;
1714       l_pa_ci_direct_cost8.CREATION_DATE := SYSDATE;
1715       l_pa_ci_direct_cost8.LAST_UPDATE_DATE := SYSDATE;
1716       l_pa_ci_direct_cost8.LAST_UPDATE_BY := FND_GLOBAL.USER_ID;
1717       l_pa_ci_direct_cost8.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID;
1718       RETURN(l_pa_ci_direct_cost8);
1719     END fill_who_columns;
1720     ----------------------------------
1721     -- FUNCTION populate_new_record --
1722     ----------------------------------
1723     FUNCTION populate_new_record (
1724       p_pa_ci_direct_cost1 IN PaCiDirectCostDetailsRecType,
1725       XPaCiDirectCostDetailsRec OUT NOCOPY PaCiDirectCostDetailsRecType
1726     ) RETURN VARCHAR2 IS
1727       l_row_notfound                 BOOLEAN := TRUE;
1728       l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
1729     BEGIN
1730       XPaCiDirectCostDetailsRec := p_pa_ci_direct_cost1;
1731       -- Get current database values
1732       -- NOTE: Never assign the OBJECT_VERSION_NUMBER.  Force the user to pass it
1733       --       so it may be verified through LOCK_ROW.
1734       l_db_pa_ci_direct_cos106 := get_rec(p_pa_ci_direct_cost1, l_return_status);
1735       IF (l_return_status = PA_API.G_RET_STS_SUCCESS) THEN
1736         IF (XPaCiDirectCostDetailsRec.dc_line_id = PA_API.G_MISS_NUM)
1737         THEN
1738           XPaCiDirectCostDetailsRec.dc_line_id := l_db_pa_ci_direct_cos106.dc_line_id;
1739         END IF;
1740         IF (XPaCiDirectCostDetailsRec.ci_id = PA_API.G_MISS_NUM)
1741         THEN
1742           XPaCiDirectCostDetailsRec.ci_id := l_db_pa_ci_direct_cos106.ci_id;
1743         END IF;
1744         IF (XPaCiDirectCostDetailsRec.project_id = PA_API.G_MISS_NUM)
1745         THEN
1746           XPaCiDirectCostDetailsRec.project_id := l_db_pa_ci_direct_cos106.project_id;
1747         END IF;
1748         IF (XPaCiDirectCostDetailsRec.task_id = PA_API.G_MISS_NUM)
1749         THEN
1750           XPaCiDirectCostDetailsRec.task_id := l_db_pa_ci_direct_cos106.task_id;
1751         END IF;
1752         IF (XPaCiDirectCostDetailsRec.expenditure_type = PA_API.G_MISS_CHAR)
1753         THEN
1754           XPaCiDirectCostDetailsRec.expenditure_type := l_db_pa_ci_direct_cos106.expenditure_type;
1755         END IF;
1756         IF (XPaCiDirectCostDetailsRec.resource_list_member_id = PA_API.G_MISS_NUM)
1757         THEN
1758           XPaCiDirectCostDetailsRec.resource_list_member_id := l_db_pa_ci_direct_cos106.resource_list_member_id;
1759         END IF;
1760         IF (XPaCiDirectCostDetailsRec.unit_of_measure = PA_API.G_MISS_CHAR)
1761         THEN
1762           XPaCiDirectCostDetailsRec.unit_of_measure := l_db_pa_ci_direct_cos106.unit_of_measure;
1763         END IF;
1764         IF (XPaCiDirectCostDetailsRec.currency_code = PA_API.G_MISS_CHAR)
1765         THEN
1766           XPaCiDirectCostDetailsRec.currency_code := l_db_pa_ci_direct_cos106.currency_code;
1767         END IF;
1768         IF (XPaCiDirectCostDetailsRec.quantity = PA_API.G_MISS_NUM)
1769         THEN
1770           XPaCiDirectCostDetailsRec.quantity := l_db_pa_ci_direct_cos106.quantity;
1771         END IF;
1772         IF (XPaCiDirectCostDetailsRec.planning_resource_rate = PA_API.G_MISS_NUM)
1773         THEN
1774           XPaCiDirectCostDetailsRec.planning_resource_rate := l_db_pa_ci_direct_cos106.planning_resource_rate;
1775         END IF;
1776         IF (XPaCiDirectCostDetailsRec.raw_cost = PA_API.G_MISS_NUM)
1777         THEN
1778           XPaCiDirectCostDetailsRec.raw_cost := l_db_pa_ci_direct_cos106.raw_cost;
1779         END IF;
1780         IF (XPaCiDirectCostDetailsRec.burdened_cost = PA_API.G_MISS_NUM)
1781         THEN
1782           XPaCiDirectCostDetailsRec.burdened_cost := l_db_pa_ci_direct_cos106.burdened_cost;
1783         END IF;
1784         IF (XPaCiDirectCostDetailsRec.raw_cost_rate = PA_API.G_MISS_NUM)
1785         THEN
1786           XPaCiDirectCostDetailsRec.raw_cost_rate := l_db_pa_ci_direct_cos106.raw_cost_rate;
1787         END IF;
1788         IF (XPaCiDirectCostDetailsRec.burden_cost_rate = PA_API.G_MISS_NUM)
1789         THEN
1790           XPaCiDirectCostDetailsRec.burden_cost_rate := l_db_pa_ci_direct_cos106.burden_cost_rate;
1791         END IF;
1792         IF (XPaCiDirectCostDetailsRec.resource_assignment_id = PA_API.G_MISS_NUM)
1793         THEN
1794           XPaCiDirectCostDetailsRec.resource_assignment_id := l_db_pa_ci_direct_cos106.resource_assignment_id;
1795         END IF;
1796         IF (XPaCiDirectCostDetailsRec.effective_from = PA_API.G_MISS_DATE)
1797         THEN
1798           XPaCiDirectCostDetailsRec.effective_from := l_db_pa_ci_direct_cos106.effective_from;
1799         END IF;
1800         IF (XPaCiDirectCostDetailsRec.effective_to = PA_API.G_MISS_DATE)
1801         THEN
1802           XPaCiDirectCostDetailsRec.effective_to := l_db_pa_ci_direct_cos106.effective_to;
1803         END IF;
1804         IF (XPaCiDirectCostDetailsRec.change_reason_code = PA_API.G_MISS_CHAR)
1805         THEN
1806           XPaCiDirectCostDetailsRec.change_reason_code := l_db_pa_ci_direct_cos106.change_reason_code;
1807         END IF;
1808         IF (XPaCiDirectCostDetailsRec.change_description = PA_API.G_MISS_CHAR)
1809         THEN
1810           XPaCiDirectCostDetailsRec.change_description := l_db_pa_ci_direct_cos106.change_description;
1811         END IF;
1815         END IF;
1812         IF (XPaCiDirectCostDetailsRec.created_by = PA_API.G_MISS_NUM)
1813         THEN
1814           XPaCiDirectCostDetailsRec.created_by := l_db_pa_ci_direct_cos106.created_by;
1816         IF (XPaCiDirectCostDetailsRec.creation_date = PA_API.G_MISS_DATE)
1817         THEN
1818           XPaCiDirectCostDetailsRec.creation_date := l_db_pa_ci_direct_cos106.creation_date;
1819         END IF;
1820         IF (XPaCiDirectCostDetailsRec.last_update_by = PA_API.G_MISS_NUM)
1821         THEN
1822           XPaCiDirectCostDetailsRec.last_update_by := l_db_pa_ci_direct_cos106.last_update_by;
1823         END IF;
1824         IF (XPaCiDirectCostDetailsRec.last_update_date = PA_API.G_MISS_DATE)
1825         THEN
1826           XPaCiDirectCostDetailsRec.last_update_date := l_db_pa_ci_direct_cos106.last_update_date;
1827         END IF;
1828         IF (XPaCiDirectCostDetailsRec.last_update_login = PA_API.G_MISS_NUM)
1829         THEN
1830           XPaCiDirectCostDetailsRec.last_update_login := l_db_pa_ci_direct_cos106.last_update_login;
1831         END IF;
1832       END IF;
1833       RETURN(l_return_status);
1834     END populate_new_record;
1835     --------------------------------------------------
1836     -- Set_Attributes for:PA_CI_DIRECT_COST_DETAILS --
1837     --------------------------------------------------
1838     FUNCTION Set_Attributes (
1839       p_pa_ci_direct_cost1 IN PaCiDirectCostDetailsRecType,
1840       XPaCiDirectCostDetailsRec OUT NOCOPY PaCiDirectCostDetailsRecType
1841     ) RETURN VARCHAR2 IS
1842       l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
1843     BEGIN
1844       XPaCiDirectCostDetailsRec := p_pa_ci_direct_cost1;
1845       RETURN(l_return_status);
1846     END Set_Attributes;
1847   BEGIN
1848 
1849     l_return_status := PA_API.START_ACTIVITY(l_api_name,
1850                                               G_PKG_NAME,
1851                                               p_init_msg_list,
1852                                               l_api_version,
1853                                               p_api_version,
1854                                               '_PVT',
1855                                               x_return_status);
1856     IF (l_return_status = PA_API.G_RET_STS_UNEXP_ERROR) THEN
1857       RAISE PA_API.G_EXCEPTION_UNEXPECTED_ERROR;
1858     ELSIF (l_return_status = PA_API.G_RET_STS_ERROR) THEN
1859       RAISE PA_API.G_EXCEPTION_ERROR;
1860     END IF;
1861 
1862     --- Setting item attributes
1863     l_return_status := Set_Attributes(
1864       p_pa_ci_direct_cost1,              -- IN
1865       XPaCiDirectCostDetailsRec);        -- OUT
1866     --- If any errors happen abort API
1867     IF (l_return_status = PA_API.G_RET_STS_UNEXP_ERROR) THEN
1868       RAISE PA_API.G_EXCEPTION_UNEXPECTED_ERROR;
1869     ELSIF (l_return_status = PA_API.G_RET_STS_ERROR) THEN
1870       RAISE PA_API.G_EXCEPTION_ERROR;
1871     END IF;
1872 
1873     l_return_status := populate_new_record(l_pa_ci_direct_cost8, LDefPaCiDirectCostDetailsRec);
1874     IF (l_return_status = PA_API.G_RET_STS_UNEXP_ERROR) THEN
1875       RAISE PA_API.G_EXCEPTION_UNEXPECTED_ERROR;
1876     ELSIF (l_return_status = PA_API.G_RET_STS_ERROR) THEN
1877       RAISE PA_API.G_EXCEPTION_ERROR;
1878     END IF;
1879     LDefPaCiDirectCostDetailsRec := fill_who_columns(LDefPaCiDirectCostDetailsRec);
1880 
1881     --- Validate all non-missing attributes (Item Level Validation)
1882     l_return_status := Validate_Attributes(LDefPaCiDirectCostDetailsRec);
1883     --- If any errors happen abort API
1884     IF (l_return_status = PA_API.G_RET_STS_UNEXP_ERROR) THEN
1885       RAISE PA_API.G_EXCEPTION_UNEXPECTED_ERROR;
1886     ELSIF (l_return_status = PA_API.G_RET_STS_ERROR) THEN
1887       RAISE PA_API.G_EXCEPTION_ERROR;
1888     END IF;
1889 
1890     l_return_status := Validate_Record(LDefPaCiDirectCostDetailsRec, l_db_pa_ci_direct_cos106);
1891     IF (l_return_status = PA_API.G_RET_STS_UNEXP_ERROR) THEN
1892       RAISE PA_API.G_EXCEPTION_UNEXPECTED_ERROR;
1893     ELSIF (l_return_status = PA_API.G_RET_STS_ERROR) THEN
1894       RAISE PA_API.G_EXCEPTION_ERROR;
1895     END IF;
1896 
1897     -- Lock the Record
1898     lock_row(
1899       p_api_version                  => p_api_version,
1900       p_init_msg_list                => p_init_msg_list,
1901       x_return_status                => l_return_status,
1902       x_msg_count                    => x_msg_count,
1903       x_msg_data                     => x_msg_data,
1904       p_pa_ci_direct_cost1           => p_pa_ci_direct_cost1);
1905     IF (l_return_status = PA_API.G_RET_STS_UNEXP_ERROR) THEN
1906       RAISE PA_API.G_EXCEPTION_UNEXPECTED_ERROR;
1907     ELSIF (l_return_status = PA_API.G_RET_STS_ERROR) THEN
1908       RAISE PA_API.G_EXCEPTION_ERROR;
1909     END IF;
1910 
1911     -----------------------------------------
1912     -- Move VIEW record to "Child" records --
1913     -----------------------------------------
1914     migrate(LDefPaCiDirectCostDetailsRec, l_pa_ci_direct_cost8);
1915     -----------------------------------------------
1916     -- Call the UPDATE_ROW for each child record --
1917     -----------------------------------------------
1918 
1919     update_row(
1920       p_init_msg_list,
1921       l_return_status,
1922       x_msg_count,
1923       x_msg_data,
1924       l_pa_ci_direct_cost8,
1925       LxPaCiDirectCostDetailsRec
1926     );
1927     IF (l_return_status = PA_API.G_RET_STS_UNEXP_ERROR) THEN
1928       RAISE PA_API.G_EXCEPTION_UNEXPECTED_ERROR;
1929     ELSIF (l_return_status = PA_API.G_RET_STS_ERROR) THEN
1930       RAISE PA_API.G_EXCEPTION_ERROR;
1931     END IF;
1932     migrate(LxPaCiDirectCostDetailsRec, LDefPaCiDirectCostDetailsRec);
1933     XPaCiDirectCostDetailsRec := LDefPaCiDirectCostDetailsRec;
1934     x_return_status := l_return_status;
1935     PA_API.END_ACTIVITY(x_msg_count, x_msg_data);
1936   EXCEPTION
1940         l_api_name,
1937     WHEN PA_API.G_EXCEPTION_ERROR THEN
1938       x_return_status := PA_API.HANDLE_EXCEPTIONS
1939       (
1941         G_PKG_NAME,
1942         'PA_API.G_RET_STS_ERROR',
1943         x_msg_count,
1944         x_msg_data,
1945         '_PVT'
1946       );
1947     WHEN PA_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1948       x_return_status := PA_API.HANDLE_EXCEPTIONS
1949       (
1950         l_api_name,
1951         G_PKG_NAME,
1952         'PA_API.G_RET_STS_UNEXP_ERROR',
1953         x_msg_count,
1954         x_msg_data,
1955         '_PVT'
1956       );
1957     WHEN OTHERS THEN
1958       x_return_status := PA_API.HANDLE_EXCEPTIONS
1959       (
1960         l_api_name,
1961         G_PKG_NAME,
1962         'OTHERS',
1963         x_msg_count,
1964         x_msg_data,
1965         '_PVT'
1966       );
1967   END update_row;
1968   -------------------------------------------------------------
1969   -- PL/SQL TBL update_row for:pa_ci_direct_cost_details_tbl --
1970   -------------------------------------------------------------
1971   PROCEDURE update_row(
1972     p_api_version                  IN NUMBER,
1973     p_init_msg_list                IN VARCHAR2 DEFAULT PA_API.G_FALSE,
1974     x_return_status                OUT NOCOPY VARCHAR2,
1975     x_msg_count                    OUT NOCOPY NUMBER,
1976     x_msg_data                     OUT NOCOPY VARCHAR2,
1977     PPaCiDirectCostDetailsTbl      IN PaCiDirectCostDetailsTblType,
1978     XPaCiDirectCostDetailsTbl      OUT NOCOPY PaCiDirectCostDetailsTblType,
1979     px_error_tbl                   IN OUT NOCOPY PA_API.ERROR_TBL_TYPE) IS
1980 
1981     l_api_version                  CONSTANT NUMBER := 1;
1982     l_api_name                     CONSTANT VARCHAR2(30) := 'V_error_tbl_update_row';
1983     i                              NUMBER := 0;
1984   BEGIN
1985     PA_API.init_msg_list(p_init_msg_list);
1986     -- Make sure PL/SQL table has records in it before passing
1987     IF (PPaCiDirectCostDetailsTbl.COUNT > 0) THEN
1988       i := PPaCiDirectCostDetailsTbl.FIRST;
1989       LOOP
1990         DECLARE
1991           l_error_rec         PA_API.ERROR_REC_TYPE;
1992         BEGIN
1993           l_error_rec.api_name := l_api_name;
1994           l_error_rec.api_package := G_PKG_NAME;
1995           l_error_rec.idx := i;
1996           update_row (
1997             p_api_version                  => p_api_version,
1998             p_init_msg_list                => PA_API.G_FALSE,
1999             x_return_status                => l_error_rec.error_type,
2000             x_msg_count                    => l_error_rec.msg_count,
2001             x_msg_data                     => l_error_rec.msg_data,
2002             p_pa_ci_direct_cost1           => PPaCiDirectCostDetailsTbl(i),
2003             XPaCiDirectCostDetailsRec      => XPaCiDirectCostDetailsTbl(i));
2004           IF (l_error_rec.error_type <> PA_API.G_RET_STS_SUCCESS) THEN
2005             l_error_rec.sqlcode := SQLCODE;
2006             load_error_tbl(l_error_rec, px_error_tbl);
2007           ELSE
2008             x_msg_count := l_error_rec.msg_count;
2009             x_msg_data := l_error_rec.msg_data;
2010           END IF;
2011         EXCEPTION
2012           WHEN PA_API.G_EXCEPTION_ERROR THEN
2013             l_error_rec.error_type := PA_API.G_RET_STS_ERROR;
2014             l_error_rec.sqlcode := SQLCODE;
2015             load_error_tbl(l_error_rec, px_error_tbl);
2016           WHEN PA_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2017             l_error_rec.error_type := PA_API.G_RET_STS_UNEXP_ERROR;
2018             l_error_rec.sqlcode := SQLCODE;
2019             load_error_tbl(l_error_rec, px_error_tbl);
2020           WHEN OTHERS THEN
2021             l_error_rec.error_type := 'OTHERS';
2022             l_error_rec.sqlcode := SQLCODE;
2023             load_error_tbl(l_error_rec, px_error_tbl);
2024         END;
2025         EXIT WHEN (i = PPaCiDirectCostDetailsTbl.LAST);
2026         i := PPaCiDirectCostDetailsTbl.NEXT(i);
2027       END LOOP;
2028     END IF;
2029     -- Loop through the error_tbl to find the error with the highest severity
2030     -- and return it.
2031     x_return_status := find_highest_exception(px_error_tbl);
2032     PA_API.END_ACTIVITY(x_msg_count, x_msg_data);
2033   EXCEPTION
2034     WHEN PA_API.G_EXCEPTION_ERROR THEN
2035       x_return_status := PA_API.HANDLE_EXCEPTIONS
2036       (
2037         l_api_name,
2038         G_PKG_NAME,
2039         'PA_API.G_RET_STS_ERROR',
2040         x_msg_count,
2041         x_msg_data,
2042         '_PVT'
2043       );
2044     WHEN PA_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2045       x_return_status := PA_API.HANDLE_EXCEPTIONS
2046       (
2047         l_api_name,
2048         G_PKG_NAME,
2049         'PA_API.G_RET_STS_UNEXP_ERROR',
2050         x_msg_count,
2051         x_msg_data,
2052         '_PVT'
2053       );
2054     WHEN OTHERS THEN
2055       x_return_status := PA_API.HANDLE_EXCEPTIONS
2056       (
2057         l_api_name,
2058         G_PKG_NAME,
2059         'OTHERS',
2060         x_msg_count,
2061         x_msg_data,
2062         '_PVT'
2063       );
2064   END update_row;
2065 
2066   -------------------------------------------------------------
2067   -- PL/SQL TBL update_row for:PA_CI_DIRECT_COST_DETAILS_TBL --
2068   -------------------------------------------------------------
2069   PROCEDURE update_row(
2070     p_api_version                  IN NUMBER,
2071     p_init_msg_list                IN VARCHAR2 DEFAULT PA_API.G_FALSE,
2072     x_return_status                OUT NOCOPY VARCHAR2,
2073     x_msg_count                    OUT NOCOPY NUMBER,
2074     x_msg_data                     OUT NOCOPY VARCHAR2,
2075     PPaCiDirectCostDetailsTbl      IN PaCiDirectCostDetailsTblType,
2079     l_api_name                     CONSTANT VARCHAR2(30) := 'V_tbl_update_row';
2076     XPaCiDirectCostDetailsTbl      OUT NOCOPY PaCiDirectCostDetailsTblType) IS
2077 
2078     l_api_version                  CONSTANT NUMBER := 1;
2080     l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
2081     l_error_tbl                    PA_API.ERROR_TBL_TYPE;
2082   BEGIN
2083     PA_API.init_msg_list(p_init_msg_list);
2084     -- Make sure PL/SQL table has records in it before passing
2085     IF (PPaCiDirectCostDetailsTbl.COUNT > 0) THEN
2086       update_row (
2087         p_api_version                  => p_api_version,
2088         p_init_msg_list                => PA_API.G_FALSE,
2089         x_return_status                => x_return_status,
2090         x_msg_count                    => x_msg_count,
2091         x_msg_data                     => x_msg_data,
2092         PPaCiDirectCostDetailsTbl      => PPaCiDirectCostDetailsTbl,
2093         XPaCiDirectCostDetailsTbl      => XPaCiDirectCostDetailsTbl,
2094         px_error_tbl                   => l_error_tbl);
2095     END IF;
2096     PA_API.END_ACTIVITY(x_msg_count, x_msg_data);
2097   EXCEPTION
2098     WHEN PA_API.G_EXCEPTION_ERROR THEN
2099       x_return_status := PA_API.HANDLE_EXCEPTIONS
2100       (
2101         l_api_name,
2102         G_PKG_NAME,
2103         'PA_API.G_RET_STS_ERROR',
2104         x_msg_count,
2105         x_msg_data,
2106         '_PVT'
2107       );
2108     WHEN PA_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2109       x_return_status := PA_API.HANDLE_EXCEPTIONS
2110       (
2111         l_api_name,
2112         G_PKG_NAME,
2113         'PA_API.G_RET_STS_UNEXP_ERROR',
2114         x_msg_count,
2115         x_msg_data,
2116         '_PVT'
2117       );
2118     WHEN OTHERS THEN
2119       x_return_status := PA_API.HANDLE_EXCEPTIONS
2120       (
2121         l_api_name,
2122         G_PKG_NAME,
2123         'OTHERS',
2124         x_msg_count,
2125         x_msg_data,
2126         '_PVT'
2127       );
2128   END update_row;
2129 
2130   ---------------------------------------------------------------------------
2131   -- PROCEDURE delete_row
2132   ---------------------------------------------------------------------------
2133   ----------------------------------------------
2134   -- delete_row for:PA_CI_DIRECT_COST_DETAILS --
2135   ----------------------------------------------
2136   PROCEDURE delete_row(
2137     p_init_msg_list                IN VARCHAR2 DEFAULT PA_API.G_FALSE,
2138     x_return_status                OUT NOCOPY VARCHAR2,
2139     x_msg_count                    OUT NOCOPY NUMBER,
2140     x_msg_data                     OUT NOCOPY VARCHAR2,
2141     p_pa_ci_direct_cost1           IN PaCiDirectCostDetailsRecType) IS
2142 
2143     l_api_version                  CONSTANT NUMBER := 1;
2144     l_api_name                     CONSTANT VARCHAR2(30) := 'B_delete_row';
2145     l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
2146     l_pa_ci_direct_cost8           PaCiDirectCostDetailsRecType := p_pa_ci_direct_cost1;
2147     l_row_notfound                 BOOLEAN := TRUE;
2148   BEGIN
2149     l_return_status := PA_API.START_ACTIVITY(l_api_name,
2150                                               p_init_msg_list,
2151                                               '_PVT',
2152                                               x_return_status);
2153     IF (l_return_status = PA_API.G_RET_STS_UNEXP_ERROR) THEN
2154       RAISE PA_API.G_EXCEPTION_UNEXPECTED_ERROR;
2155     ELSIF (l_return_status = PA_API.G_RET_STS_ERROR) THEN
2156       RAISE PA_API.G_EXCEPTION_ERROR;
2157     END IF;
2158 
2159     DELETE FROM PA_CI_DIRECT_COST_DETAILS
2160      WHERE DC_LINE_ID = p_pa_ci_direct_cost1.dc_line_id;
2161 
2162     x_return_status := l_return_status;
2163     PA_API.END_ACTIVITY(x_msg_count, x_msg_data);
2164   EXCEPTION
2165     WHEN PA_API.G_EXCEPTION_ERROR THEN
2166       x_return_status := PA_API.HANDLE_EXCEPTIONS
2167       (
2168         l_api_name,
2169         G_PKG_NAME,
2170         'PA_API.G_RET_STS_ERROR',
2171         x_msg_count,
2172         x_msg_data,
2173         '_PVT'
2174       );
2175     WHEN PA_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2176       x_return_status := PA_API.HANDLE_EXCEPTIONS
2177       (
2178         l_api_name,
2179         G_PKG_NAME,
2180         'PA_API.G_RET_STS_UNEXP_ERROR',
2181         x_msg_count,
2182         x_msg_data,
2183         '_PVT'
2184       );
2185     WHEN OTHERS THEN
2186       x_return_status := PA_API.HANDLE_EXCEPTIONS
2187       (
2188         l_api_name,
2189         G_PKG_NAME,
2190         'OTHERS',
2191         x_msg_count,
2192         x_msg_data,
2193         '_PVT'
2194       );
2195   END delete_row;
2196   ----------------------------------------------
2197   -- delete_row for:PA_CI_DIRECT_COST_DETAILS --
2198   ----------------------------------------------
2199   PROCEDURE delete_row(
2200     p_api_version                  IN NUMBER,
2201     p_init_msg_list                IN VARCHAR2 DEFAULT PA_API.G_FALSE,
2202     x_return_status                OUT NOCOPY VARCHAR2,
2203     x_msg_count                    OUT NOCOPY NUMBER,
2204     x_msg_data                     OUT NOCOPY VARCHAR2,
2205     p_pa_ci_direct_cost1           IN PaCiDirectCostDetailsRecType) IS
2206 
2207     l_api_version                  CONSTANT NUMBER := 1;
2208     l_api_name                     CONSTANT VARCHAR2(30) := 'V_delete_row';
2209     l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
2210     l_pa_ci_direct_cost8           PaCiDirectCostDetailsRecType := p_pa_ci_direct_cost1;
2211   BEGIN
2212     l_return_status := PA_API.START_ACTIVITY(l_api_name,
2213                                               G_PKG_NAME,
2214                                               p_init_msg_list,
2218                                               x_return_status);
2215                                               l_api_version,
2216                                               p_api_version,
2217                                               '_PVT',
2219     IF (l_return_status = PA_API.G_RET_STS_UNEXP_ERROR) THEN
2220       RAISE PA_API.G_EXCEPTION_UNEXPECTED_ERROR;
2221     ELSIF (l_return_status = PA_API.G_RET_STS_ERROR) THEN
2222       RAISE PA_API.G_EXCEPTION_ERROR;
2223     END IF;
2224     -----------------------------------------
2225     -- Move VIEW record to "Child" records --
2226     -----------------------------------------
2227     migrate(l_pa_ci_direct_cost8, l_pa_ci_direct_cost8);
2228     -----------------------------------------------
2229     -- Call the DELETE_ROW for each child record --
2230     -----------------------------------------------
2231     delete_row(
2232       p_init_msg_list,
2233       l_return_status,
2234       x_msg_count,
2235       x_msg_data,
2236       l_pa_ci_direct_cost8
2237     );
2238     IF (l_return_status = PA_API.G_RET_STS_UNEXP_ERROR) THEN
2239       RAISE PA_API.G_EXCEPTION_UNEXPECTED_ERROR;
2240     ELSIF (l_return_status = PA_API.G_RET_STS_ERROR) THEN
2241       RAISE PA_API.G_EXCEPTION_ERROR;
2242     END IF;
2243     x_return_status := l_return_status;
2244     PA_API.END_ACTIVITY(x_msg_count, x_msg_data);
2245   EXCEPTION
2246     WHEN PA_API.G_EXCEPTION_ERROR THEN
2247       x_return_status := PA_API.HANDLE_EXCEPTIONS
2248       (
2249         l_api_name,
2250         G_PKG_NAME,
2251         'PA_API.G_RET_STS_ERROR',
2252         x_msg_count,
2253         x_msg_data,
2254         '_PVT'
2255       );
2256     WHEN PA_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2257       x_return_status := PA_API.HANDLE_EXCEPTIONS
2258       (
2259         l_api_name,
2260         G_PKG_NAME,
2261         'PA_API.G_RET_STS_UNEXP_ERROR',
2262         x_msg_count,
2263         x_msg_data,
2264         '_PVT'
2265       );
2266     WHEN OTHERS THEN
2267       x_return_status := PA_API.HANDLE_EXCEPTIONS
2268       (
2269         l_api_name,
2270         G_PKG_NAME,
2271         'OTHERS',
2272         x_msg_count,
2273         x_msg_data,
2274         '_PVT'
2275       );
2276   END delete_row;
2277   ---------------------------------------------------------
2278   -- PL/SQL TBL delete_row for:PA_CI_DIRECT_COST_DETAILS --
2279   ---------------------------------------------------------
2280   PROCEDURE delete_row(
2281     p_api_version                  IN NUMBER,
2282     p_init_msg_list                IN VARCHAR2 DEFAULT PA_API.G_FALSE,
2283     x_return_status                OUT NOCOPY VARCHAR2,
2284     x_msg_count                    OUT NOCOPY NUMBER,
2285     x_msg_data                     OUT NOCOPY VARCHAR2,
2286     PPaCiDirectCostDetailsTbl      IN PaCiDirectCostDetailsTblType,
2287     px_error_tbl                   IN OUT NOCOPY PA_API.ERROR_TBL_TYPE) IS
2288 
2289     l_api_version                  CONSTANT NUMBER := 1;
2290     l_api_name                     CONSTANT VARCHAR2(30) := 'V_error_tbl_delete_row';
2291     i                              NUMBER := 0;
2292   BEGIN
2293     PA_API.init_msg_list(p_init_msg_list);
2294     -- Make sure PL/SQL table has records in it before passing
2295     IF (PPaCiDirectCostDetailsTbl.COUNT > 0) THEN
2296       i := PPaCiDirectCostDetailsTbl.FIRST;
2297       LOOP
2298         DECLARE
2299           l_error_rec         PA_API.ERROR_REC_TYPE;
2300         BEGIN
2301           l_error_rec.api_name := l_api_name;
2302           l_error_rec.api_package := G_PKG_NAME;
2303           l_error_rec.idx := i;
2304           delete_row (
2305             p_api_version                  => p_api_version,
2306             p_init_msg_list                => PA_API.G_FALSE,
2307             x_return_status                => l_error_rec.error_type,
2308             x_msg_count                    => l_error_rec.msg_count,
2309             x_msg_data                     => l_error_rec.msg_data,
2310             p_pa_ci_direct_cost1           => PPaCiDirectCostDetailsTbl(i));
2311           IF (l_error_rec.error_type <> PA_API.G_RET_STS_SUCCESS) THEN
2312             l_error_rec.sqlcode := SQLCODE;
2313             load_error_tbl(l_error_rec, px_error_tbl);
2314           ELSE
2315             x_msg_count := l_error_rec.msg_count;
2316             x_msg_data := l_error_rec.msg_data;
2317           END IF;
2318         EXCEPTION
2319           WHEN PA_API.G_EXCEPTION_ERROR THEN
2320             l_error_rec.error_type := PA_API.G_RET_STS_ERROR;
2321             l_error_rec.sqlcode := SQLCODE;
2322             load_error_tbl(l_error_rec, px_error_tbl);
2323           WHEN PA_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2324             l_error_rec.error_type := PA_API.G_RET_STS_UNEXP_ERROR;
2325             l_error_rec.sqlcode := SQLCODE;
2326             load_error_tbl(l_error_rec, px_error_tbl);
2327           WHEN OTHERS THEN
2328             l_error_rec.error_type := 'OTHERS';
2329             l_error_rec.sqlcode := SQLCODE;
2330             load_error_tbl(l_error_rec, px_error_tbl);
2331         END;
2332         EXIT WHEN (i = PPaCiDirectCostDetailsTbl.LAST);
2333         i := PPaCiDirectCostDetailsTbl.NEXT(i);
2334       END LOOP;
2335     END IF;
2336     -- Loop through the error_tbl to find the error with the highest severity
2337     -- and return it.
2338     x_return_status := find_highest_exception(px_error_tbl);
2339     PA_API.END_ACTIVITY(x_msg_count, x_msg_data);
2340   EXCEPTION
2341     WHEN PA_API.G_EXCEPTION_ERROR THEN
2342       x_return_status := PA_API.HANDLE_EXCEPTIONS
2343       (
2344         l_api_name,
2345         G_PKG_NAME,
2346         'PA_API.G_RET_STS_ERROR',
2347         x_msg_count,
2348         x_msg_data,
2349         '_PVT'
2350       );
2351     WHEN PA_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2355         G_PKG_NAME,
2352       x_return_status := PA_API.HANDLE_EXCEPTIONS
2353       (
2354         l_api_name,
2356         'PA_API.G_RET_STS_UNEXP_ERROR',
2357         x_msg_count,
2358         x_msg_data,
2359         '_PVT'
2360       );
2361     WHEN OTHERS THEN
2362       x_return_status := PA_API.HANDLE_EXCEPTIONS
2363       (
2364         l_api_name,
2365         G_PKG_NAME,
2366         'OTHERS',
2367         x_msg_count,
2368         x_msg_data,
2369         '_PVT'
2370       );
2371   END delete_row;
2372 
2373   ---------------------------------------------------------
2374   -- PL/SQL TBL delete_row for:PA_CI_DIRECT_COST_DETAILS --
2375   ---------------------------------------------------------
2376   PROCEDURE delete_row(
2377     p_api_version                  IN NUMBER,
2378     p_init_msg_list                IN VARCHAR2 DEFAULT PA_API.G_FALSE,
2379     x_return_status                OUT NOCOPY VARCHAR2,
2380     x_msg_count                    OUT NOCOPY NUMBER,
2381     x_msg_data                     OUT NOCOPY VARCHAR2,
2382     PPaCiDirectCostDetailsTbl      IN PaCiDirectCostDetailsTblType) IS
2383 
2384     l_api_version                  CONSTANT NUMBER := 1;
2385     l_api_name                     CONSTANT VARCHAR2(30) := 'V_tbl_delete_row';
2386     l_return_status                VARCHAR2(1) := PA_API.G_RET_STS_SUCCESS;
2387     l_error_tbl                    PA_API.ERROR_TBL_TYPE;
2388   BEGIN
2389     PA_API.init_msg_list(p_init_msg_list);
2390     -- Make sure PL/SQL table has records in it before passing
2391     IF (PPaCiDirectCostDetailsTbl.COUNT > 0) THEN
2392       delete_row (
2393         p_api_version                  => p_api_version,
2394         p_init_msg_list                => PA_API.G_FALSE,
2395         x_return_status                => x_return_status,
2396         x_msg_count                    => x_msg_count,
2397         x_msg_data                     => x_msg_data,
2398         PPaCiDirectCostDetailsTbl      => PPaCiDirectCostDetailsTbl,
2399         px_error_tbl                   => l_error_tbl);
2400     END IF;
2401     PA_API.END_ACTIVITY(x_msg_count, x_msg_data);
2402   EXCEPTION
2403     WHEN PA_API.G_EXCEPTION_ERROR THEN
2404       x_return_status := PA_API.HANDLE_EXCEPTIONS
2405       (
2406         l_api_name,
2407         G_PKG_NAME,
2408         'PA_API.G_RET_STS_ERROR',
2409         x_msg_count,
2410         x_msg_data,
2411         '_PVT'
2412       );
2413     WHEN PA_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2414       x_return_status := PA_API.HANDLE_EXCEPTIONS
2415       (
2416         l_api_name,
2417         G_PKG_NAME,
2418         'PA_API.G_RET_STS_UNEXP_ERROR',
2419         x_msg_count,
2420         x_msg_data,
2421         '_PVT'
2422       );
2423     WHEN OTHERS THEN
2424       x_return_status := PA_API.HANDLE_EXCEPTIONS
2425       (
2426         l_api_name,
2427         G_PKG_NAME,
2428         'OTHERS',
2429         x_msg_count,
2430         x_msg_data,
2431         '_PVT'
2432       );
2433   END delete_row;
2434 
2435 END PA_CI_DIR_COST_PVT;