DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_TASK_APPROVAL_PKG

Source


1 PACKAGE BODY PA_TASK_APPROVAL_PKG AS
2 /* $Header: PATSKPKB.pls 120.3.12010000.2 2009/08/19 12:46:13 anuragar noship $ */
3 
4   p_debug_mode    VARCHAR2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N');
5 
6   PROCEDURE log_message (p_log_msg IN VARCHAR2, debug_level IN NUMBER) IS
7   BEGIN
8     IF P_DEBUG_MODE = 'Y' THEN
9        pa_debug.write('log_message: ' || 'PA PWP Notification: ', 'log: ' || p_log_msg, debug_level);
10     END IF;
11   END log_message;
12 
13   -- To verify the task is a child task or not
14   FUNCTION Is_Child_Task (p_project_id       IN NUMBER
15                          ,p_proj_element     IN NUMBER
16                          ,p_parent_struc_ver IN NUMBER
17                          ,p_msg_count        OUT NOCOPY NUMBER
18                          ,p_msg_data         OUT NOCOPY VARCHAR2
19                          ,p_return_status    OUT NOCOPY VARCHAR2
20 						 ) RETURN BOOLEAN IS
21 
22   -- Cursor to identify if the given task has a parent task or not.
23   CURSOR C1 IS
24     SELECT  'Y'
25       FROM  PA_PROJ_ELEMENT_VERSIONS
26       WHERE proj_element_id = p_proj_element
27       AND   parent_structure_version_id = p_parent_struc_ver
28       AND   financial_task_flag = 'Y'
29       AND   EXISTS (SELECT 1
30                     FROM   PA_OBJECT_RELATIONSHIPS
31                     WHERE  object_type_from = 'PA_TASKS'
32                     AND    object_id_to1 = element_version_id
33                     AND    object_type_to = 'PA_TASKS'
34                     AND    relationship_type = 'S');
35 
36     l_is_child_task VARCHAR2(1) :='N';
37   BEGIN
38      log_message('Inside PA_TASK_APPROVAL_PKG.Is_Child_Task',3);
39      p_return_status := 'S';
40      OPEN C1;
41      FETCH C1 INTO l_is_child_task;
42      CLOSE C1;
43      --b6694902_debug.debug('is_child_task '||l_is_child_task);
44      log_message('Result of Is_Child_Task '||l_is_child_task,3);
45 
46      IF  l_is_child_task = 'Y' THEN
47          log_message('Task '||p_proj_element||' has a parent task',3);
48          RETURN TRUE;
49      ELSE
50          log_message('Task '||p_proj_element||' is a top/root task',3);
51          RETURN FALSE;
52      END IF;
53   EXCEPTION
54      WHEN OTHERS THEN
55         p_return_status := 'E';
56   END Is_Child_Task;
57 
58   -- This procedure is to return true/false based on the parent_task's approval status
59   -- of a given task. If Parent task is not approved, we cannot raise notification for
60   -- the given task.
61 
62   FUNCTION Is_Parent_Task_Approved
63                          (p_project_id       IN NUMBER
64                          ,p_parent_task_id  IN NUMBER
65                          ,p_task_id         IN NUMBER
66                          ,p_parent_struc_ver IN NUMBER
67                          ,p_msg_count       OUT NOCOPY NUMBER
68                          ,p_msg_data        OUT NOCOPY VARCHAR2
69                          ,p_return_status   OUT NOCOPY VARCHAR2) RETURN BOOLEAN IS
70 
71     -- Cursor is to identify if the p_parent_task_id exists in PA_TASKs or not.
72     CURSOR C1 IS
73       SELECT 'Y'
74         FROM  PA_TASKS
75         WHERE project_id = p_project_id
76         AND   task_id = p_parent_task_id
77         AND   EXISTS (
78                        SELECT 1
79                        FROM   PA_PROJ_ELEMENTS
80                        WHERE  proj_element_id = p_parent_task_id
81                        AND    link_task_flag = 'N');
82 
83     -- Cursor to find out if p_parent_task_id is root/top task
84     CURSOR C2 IS
85       SELECT  'Y'
86       FROM  PA_PROJ_ELEMENT_VERSIONS
87       WHERE proj_element_id = p_parent_task_id
88       AND   parent_structure_version_id = p_parent_struc_ver
89       AND   financial_task_flag = 'Y'
90       AND   EXISTS (SELECT 1
91                     FROM   PA_OBJECT_RELATIONSHIPS
92                     WHERE  object_type_from = 'PA_STRUCTURES'
93                     AND    object_id_to1 = element_version_id
94                     AND    object_type_to = 'PA_TASKS'
95                     AND    relationship_type = 'S');
96 
97     l_is_parent_tsk_aprvd VARCHAR2(1) := 'N';
98   BEGIN
99     log_message('Inside PA_TASK_APPROVAL_PKG.Is_Parent_Task_Approved',3);
100     p_return_status := 'S';
101     OPEN C1;
102     FETCH C1 INTO l_is_parent_tsk_aprvd;
103     CLOSE C1;
104 
105     IF l_is_parent_tsk_aprvd = 'N' THEN
106       -- If the task and parent task are one and the same, which means-> task is a root/top task.
107       -- In this case we need to check cursor C2. If cursor c2 returns a record, we return
108       -- that parent task is approved.
109       IF p_task_id  = p_parent_task_id THEN
110          OPEN C2;
111          FETCH C2 INTO l_is_parent_tsk_aprvd;
112          CLOSE C2;
113       END IF;
114     END IF;
115 
116     --b6694902_debug.debug('is_parent_task_aprv '||l_is_parent_tsk_aprvd);
117     log_message('Result of Is_Parent_Task_Approved '||l_is_parent_tsk_aprvd,3);
118 
119     IF l_is_parent_tsk_aprvd = 'Y' THEN
120        RETURN TRUE;
121     ELSE
122        RETURN FALSE;
123     END IF;
124   EXCEPTION
125     WHEN OTHERS THEN
126        p_return_status := 'E';
127   END Is_Parent_Task_Approved;
128 
129   PROCEDURE Submit_Task
130                         (p_project_id           IN NUMBER
131                         ,p_task_id              IN NUMBER
132                         ,p_ref_task_id          IN NUMBER
133                         ,p_parent_struc_ver     IN NUMBER
134                         ,p_approver_user_id     IN NUMBER
135                         ,p_ci_id                IN NUMBER
136                         ,p_msg_count            OUT NOCOPY NUMBER
137                         ,p_msg_data             OUT NOCOPY VARCHAR2
138                         ,p_return_status        OUT NOCOPY VARCHAR2) IS
139 
140       x_err_stack VARCHAR2(2000);
141       x_err_stage VARCHAR2(100);
142       x_err_code  NUMBER;
143   BEGIN
144        log_message('Inside PA_TASK_APPROVAL_PKG.Submit_Task',3);
145        p_return_status := 'S';
146 
147        --b6694902_debug.debug('Before calling Start_Task_Aprv_Wf ');
148        --b6694902_debug.debug('Before calling Start_Task_Aprv_Wf for task '||p_task_id);
149        --b6694902_debug.debug('Before calling Start_Task_Aprv_Wf for task '||p_parent_struc_ver);
150 
151        log_message('Before calling Start_Task_Aprv_Wf for task',3);
152        log_message('Task Id ['||p_task_id||'], '||
153                    'Parent Task Structure version id ['||p_parent_struc_ver||'], '||
154                    'Approver User Id ['||p_approver_user_id||']'
155                  ,3);
156 
157 update pa_proj_elements
158 set task_approver_id = p_approver_user_id
159 where proj_element_id = p_task_id;
160 
161        PA_TASK_WORKFLOW_PKG.Start_Task_Aprv_Wf (
162                                 'PATASKWF'
163                                ,'PA_TASK_APPROVAL_WF'
164                                ,p_project_id
165                                ,p_task_id
166                                ,p_parent_struc_ver
167                                ,p_approver_user_id
168                                ,p_ci_id
169                                ,x_err_stack
170                                ,x_err_stage
171                                ,x_err_code
172                               );
173        --b6694902_debug.debug('x_err_code '||x_err_code);
174        IF x_err_code > 0 THEN
175           p_return_status :='E';
176        END IF;
177        commit;
178   END Submit_Task;
179 
180   -- This procedure is being called from Change Order workflow
181   -- to see if all the used tasks are approved or not.
182   PROCEDURE Check_UsedTask_Status
183                           (p_ci_id         IN NUMBER
184                           ,p_msg_count     OUT NOCOPY NUMBER
185                           ,p_msg_data      OUT NOCOPY VARCHAR2
186                           ,p_return_status OUT NOCOPY VARCHAR2) IS
187 
188    CURSOR C1 IS
189    Select count(distinct task_id) from
190         pa_resource_assignments pra where
191           budget_version_id in (
192            select budget_version_id from pa_budget_versions where ci_id = p_ci_id )
193         and exists (select 1
194                   from pa_proj_elements ppe,
195                        pa_proj_element_versions ppev,
196                        pa_object_relationships por
197                   where ppe.proj_element_id = pra.task_id
198                   and ppe.project_id = pra.project_id
199                   and ppe.link_task_flag = 'Y'
200                   and ppe.type_id = 1
201                   and ppev.proj_element_id = ppe.proj_element_id
202                   and por.object_id_to1 = ppev.element_version_id
203                   and por.object_type_to = 'PA_TASKS'
204                   and por.relationship_type = 'S'
205                   and ppev.financial_task_flag = 'Y')
206         and not exists (select 1 from pa_tasks where task_id = pra.task_id and project_id = pra.project_id);
207 
208     l_unapproved_task_cnt NUMBER;
209   BEGIN
210       log_message('Inside PA_TASK_APPROVAL_PKG.Check_UsedTask_Status',3);
211       p_return_status := 'S';
212       OPEN C1;
213       FETCH C1 INTO l_unapproved_task_cnt;
214       CLOSE C1;
215 
216       IF l_unapproved_task_cnt > 0 THEN
217          log_message('There are unapproved tasks for this change document.',3);
218          p_return_status := 'E';
219       END IF;
220   END;
221 
222   -- This procedure is to put the Change Order status to 'CI_SUBMITTED'.
223   -- These are eligible to be picked up by the Task Workflow process.
224   PROCEDURE Mark_CO_Status(p_ci_id         IN NUMBER
225                           ,p_msg_count     OUT NOCOPY NUMBER
226                           ,p_msg_data      OUT NOCOPY VARCHAR2
227                           ,p_return_status OUT NOCOPY VARCHAR2) IS
228   BEGIN
229        log_message('Inside PA_TASK_APPROVAL_PKG.Mark_CO_Status',3);
230        p_return_status := 'S';
231        UPDATE pa_control_items SET status_code = 'CI_SUBMITTED' WHERE ci_id = p_ci_id;
232   EXCEPTION
233        WHEN OTHERS THEN
234         log_message('Inside WHEBN OTHERS exception of PA_TASK_APPROVAL_PKG.Mark_CO_Status',3);
235          p_return_status := 'E';
236          p_msg_data := SQLERRM;
237   END;
238 
239 END PA_TASK_APPROVAL_PKG;