DBA Data[Home] [Help]

PACKAGE BODY: APPS.PJM_INTEGRATION_PROJ_MFG

Source


1 PACKAGE BODY PJM_INTEGRATION_PROJ_MFG as
2 /* $Header: PJMVLDTB.pls 115.8 2002/10/29 20:15:51 alaw ship $ */
3 
4 FUNCTION PJM_VALIDATE_DATE  (P_SCHEDULE_DATE     IN  DATE
5   		            ,P_TIME_POINT        IN  VARCHAR2
6  			    ,P_PROJECT_ID        IN  NUMBER
7  			    ,P_TASK_ID           IN  NUMBER
8  			    ,P_TOLERANCE_DAYS    IN  NUMBER
9                             ,P_ERROR_MSG         OUT NOCOPY VARCHAR2
10                             ) return number
11 IS
12    d_proj_start_date      date;
13    d_proj_end_date        date;
14    d_task_start_date      date;
15    d_task_end_date        date;
16    c_x                    varchar2(1);
17    n_valid                number :=1;
18    n_invalid              number :=0;
19 
20 BEGIN
21 
22   IF p_schedule_date IS NULL OR p_project_id IS NULL THEN
23      RETURN n_valid;
24   END IF;
25 
26   BEGIN
27      IF p_task_id IS NULL THEN
28         select ppa.start_date
29               ,ppa.completion_date
30           into d_proj_start_date
31               ,d_proj_end_date
32           from pa_projects_all                ppa
33          where ppa.project_id                =p_project_id
34            ;
35         d_task_start_date  :=Null;
36         d_task_end_date    :=Null;
37      ELSE
38         select ppa.start_date
39               ,ppa.completion_date
40               ,pt.start_date
41               ,pt.completion_date
42           into d_proj_start_date
43               ,d_proj_end_date
44               ,d_task_start_date
45               ,d_task_end_date
46           from pa_projects_all                ppa
47               ,pa_tasks                       pt
48          where ppa.project_id                =p_project_id
49            and pt.project_id                 =ppa.project_id
50            and pt.task_id                    =p_task_id
51            ;
52      END IF;
53   EXCEPTION
54      when no_data_found then
55         p_error_msg := sqlerrm;
56         RETURN n_invalid;
57      when too_many_rows then
58         p_error_msg := sqlerrm;
59         RETURN n_invalid;
60   END;
61 
62   IF p_time_point='BEFORE_START' then
63      IF p_schedule_date-p_tolerance_days > nvl(d_task_start_date,nvl(d_proj_start_date,p_schedule_date-p_tolerance_days+1)) THEN
64         FND_MESSAGE.SET_NAME('PJM','SCHED-DATE BEFORE');
65         FND_MESSAGE.SET_TOKEN('DATE', FND_DATE.DATE_TO_DISPLAYDATE(
66                           nvl(d_task_start_date,d_proj_start_date)));
67         p_error_msg := FND_MESSAGE.GET;
68         RETURN n_invalid;
69      END IF;
70   END IF;
71 
72   IF upper(p_time_point)='BEFORE_END' then
73      IF p_schedule_date-p_tolerance_days > nvl(d_task_end_date,nvl(d_proj_end_date,p_schedule_date-p_tolerance_days+1)) THEN
74         FND_MESSAGE.SET_NAME('PJM','SCHED-DATE BEFORE');
75         FND_MESSAGE.SET_TOKEN('DATE', FND_DATE.DATE_TO_DISPLAYDATE(
76                           nvl(d_task_end_date, d_proj_end_date)));
77         p_error_msg := FND_MESSAGE.GET;
78         RETURN n_invalid;
79      END IF;
80   END IF;
81 
82   IF upper(p_time_point)='AFTER_START' then
83      IF p_schedule_date+p_tolerance_days < nvl(d_task_start_date,nvl(d_proj_start_date,p_schedule_date+p_tolerance_days-1)) THEN
84         FND_MESSAGE.SET_NAME('PJM','SCHED-DATE AFTER');
85         FND_MESSAGE.SET_TOKEN('DATE', FND_DATE.DATE_TO_DISPLAYDATE(
86                           nvl(d_task_start_date,d_proj_start_date)));
87         p_error_msg := FND_MESSAGE.GET;
88         RETURN n_invalid;
89      END IF;
90   END IF;
91 
92   IF upper(p_time_point)='AFTER_END' then
93      IF p_schedule_date+p_tolerance_days < nvl(d_task_end_date,nvl(d_proj_end_date,p_schedule_date+p_tolerance_days-1)) THEN
94         FND_MESSAGE.SET_NAME('PJM','SCHED-DATE AFTER');
95         FND_MESSAGE.SET_TOKEN('DATE', FND_DATE.DATE_TO_DISPLAYDATE(
96                           nvl(d_task_end_date, d_proj_end_date)));
97         p_error_msg := FND_MESSAGE.GET;
98         RETURN n_invalid;
99      END IF;
100   END IF;
101 
102   IF upper(p_time_point)='BETWEEN' then
103      IF (p_schedule_date+p_tolerance_days < nvl(d_task_start_date,nvl(d_proj_start_date,p_schedule_date+p_tolerance_days-1)) OR
104          p_schedule_date-p_tolerance_days > nvl(d_task_end_date,nvl(d_proj_end_date,p_schedule_date-p_tolerance_days+1))) THEN
105         FND_MESSAGE.SET_NAME('PJM','SCHED-DATE BETWEEN');
106         FND_MESSAGE.SET_TOKEN('START_DATE', FND_DATE.DATE_TO_DISPLAYDATE(
107                           nvl(d_task_start_date,d_proj_start_date)));
108         FND_MESSAGE.SET_TOKEN('END_DATE', FND_DATE.DATE_TO_DISPLAYDATE(
109                           nvl(d_task_end_date, d_proj_end_date)));
110         p_error_msg := FND_MESSAGE.GET;
111         RETURN n_invalid;
112      END IF;
113   END IF;
114 
115   RETURN n_valid;
116 
117 END PJM_VALIDATE_DATE;
118 
119 
120 FUNCTION PJM_EXCEPTION_DAYS(pd_schedule_date        IN  date
121                        ,pc_time_point           IN  varchar2
122                        ,pn_tolerance_days       IN  number
123                        ,pd_project_start_date   IN  date
124                        ,pd_project_end_date     IN  date
125                        ,pd_task_start_date      IN  date
126                        ,pd_task_end_date        IN  date
127                        ) return number
128 IS
129    n_exception_days number:=0;
130 BEGIN
131    IF pd_schedule_date IS NULL THEN
132       RETURN n_exception_days;
133    END IF;
134 
135    IF pc_time_point='BEFORE_START' then
136       IF trunc(pd_schedule_date)-pn_tolerance_days > trunc(nvl(pd_task_start_date,nvl(pd_project_start_date,pd_schedule_date-pn_tolerance_days+1))) THEN
137          n_exception_days:=(trunc(pd_schedule_date)-pn_tolerance_days) - trunc(nvl(pd_task_start_date,pd_project_start_date));
138       END IF;
139    END IF;
140 
141    IF upper(pc_time_point)='BEFORE_END' then
142       IF trunc(pd_schedule_date)-pn_tolerance_days > trunc(nvl(pd_task_end_date,nvl(pd_project_end_date,pd_schedule_date-pn_tolerance_days+1))) THEN
143          n_exception_days:=(trunc(pd_schedule_date)-pn_tolerance_days) - trunc(nvl(pd_task_end_date,pd_project_end_date));
144       END IF;
145    END IF;
146 
147    IF upper(pc_time_point)='AFTER_START' then
148       IF trunc(pd_schedule_date)+pn_tolerance_days < trunc(nvl(pd_task_start_date,nvl(pd_project_start_date,pd_schedule_date+pn_tolerance_days-1))) THEN
149          n_exception_days:=trunc(nvl(pd_task_start_date,pd_project_start_date))-(trunc(pd_schedule_date)+pn_tolerance_days);
150       END IF;
151    END IF;
152 
153    IF upper(pc_time_point)='AFTER_END' then
154       IF trunc(pd_schedule_date)+pn_tolerance_days < trunc(nvl(pd_task_end_date,nvl(pd_project_end_date,pd_schedule_date+pn_tolerance_days-1))) THEN
155          n_exception_days:=trunc(nvl(pd_task_end_date,pd_project_end_date))-(trunc(pd_schedule_date)+pn_tolerance_days);
156       END IF;
157    END IF;
158 
159    IF upper(pc_time_point)='BETWEEN' then
160       -- positive --> too early
161       -- negative --> too late
162       IF trunc(pd_schedule_date)+pn_tolerance_days < trunc(nvl(pd_task_start_date,nvl(pd_project_start_date,pd_schedule_date+pn_tolerance_days-1))) THEN
163          n_exception_days:=trunc(nvl(pd_task_start_date,pd_project_start_date))-(trunc(pd_schedule_date)+pn_tolerance_days);
164       END IF;
165       IF trunc(pd_schedule_date)-pn_tolerance_days > trunc(nvl(pd_task_end_date,nvl(pd_project_end_date,pd_schedule_date-pn_tolerance_days+1))) THEN
166          n_exception_days:=trunc(nvl(pd_task_end_date,pd_project_end_date)) - (trunc(pd_schedule_date)-pn_tolerance_days);
167       END IF;
168    END IF;
169 
170    RETURN n_exception_days;
174 
171 
172 END PJM_EXCEPTION_DAYS;
173 
175 FUNCTION PJM_SELECT_PROJECT_MANAGER(pn_project_id IN  number
176                                  ) return varchar2
177 IS
178    c_project_manager varchar2(240):='';
179 
180    cursor cu_project_manager is
181       select fu.user_name              project_manager
182         from fnd_user                  fu
183             ,pa_project_players        ppp
184             ,pa_projects_all           ppa
185        where fu.employee_id            =ppp.person_id
186          and nvl(fu.end_date,sysdate)  >=sysdate
187          and ppp.project_role_type     = 'PROJECT MANAGER'
188          and ppp.project_id            = ppa.project_id
189          and nvl(ppp.end_date_active,sysdate) >= sysdate
190          and ppa.project_id            = pn_project_id
191        order by fu.user_name
192        ;
193 BEGIN
194    open cu_project_manager;
195       FETCH cu_project_manager INTO c_project_manager;
196    close cu_project_manager;
197 
198    return c_project_manager;
199 
200 END PJM_SELECT_PROJECT_MANAGER;
201 
202 FUNCTION PJM_SELECT_TASK_MANAGER(pn_task_id IN  number
203                               ) return varchar2
204 IS
205    c_task_manager varchar2(240):='';
206 
207    cursor cu_task_manager is
208       select fu.user_name              task_manager
209         from fnd_user                  fu
210             ,pa_tasks                  pt
211        where fu.employee_id            =pt.task_manager_person_id
212          and nvl(fu.end_date,sysdate)  >=sysdate
213          and pt.task_id                = pn_task_id
214        order by fu.user_name
215          ;
216 BEGIN
217    open cu_task_manager;
218       FETCH cu_task_manager INTO c_task_manager;
219    close cu_task_manager;
220 
221    return c_task_manager;
222 END PJM_SELECT_TASK_MANAGER;
223 
224 PROCEDURE  SELECT_DOCUMENT_TYPE(ITEMTYPE          IN  VARCHAR2
225                                ,ITEMKEY           IN  VARCHAR2
226                                ,ACTID             IN  NUMBER
227                                ,FUNCMODE          IN  VARCHAR2
228                                ,RESULTOUT         OUT NOCOPY VARCHAR2
229                                ) IS
230 BEGIN
231    if (funcmode='RUN') then
232       resultout:=wf_engine.getitemattrtext(itemtype => itemtype
233                                           ,itemkey  => itemkey
234                                           ,aname    => 'DOCUMENT_TYPE'
235                                           );
236       return;
237    end if;
238    if (funcmode='CANCEL') then
239       resultout:='COMPLETE:';
240       return;
241    end if;
242    if (funcmode='TIMEOUT') then
243       resultout:='COMPLETE:';
244       return;
245    end if;
246 END SELECT_DOCUMENT_TYPE;
247 
248 PROCEDURE PJM_WF_SEEK_PROJECT_MGR( itemtype  in varchar2,
249 		                   itemkey   in varchar2,
250 		                   actid     in number,
251 		                   funcmode  in varchar2,
252 		                   resultout out nocopy varchar2)
253 IS
254    xc_project_manager	  varchar2(80) :=
255    wf_engine.GetItemAttrText( itemtype => itemtype,
256 		              itemkey  => itemkey,
257 			      aname    => 'PROJECT_MANAGER');
258 
259 BEGIN
260    if (funcmode = 'RUN') then
261       if (xc_project_manager is not null) then
262          resultout := 'COMPLETE:FOUND';
263       else
264          resultout := 'COMPLETE:NOT_FOUND';
265       end if;
266       return;
267    end if;
268    if (funcmode = 'CANCEL') then
269       resultout := 'COMPLETE:';
270       return;
271    end if;
272    if (funcmode = 'TIMEOUT') then
273       resultout := 'COMPLETE:';
274       return;
275    end if;
276 EXCEPTION
277    when others then
278       wf_core.context('PJM_INTEGRATION_PROJ_MFG', 'PJM_WF_SEEK_PROJECT_MGR',itemtype, itemkey, actid,funcmode,resultout);
279       raise;
280 
281 END PJM_WF_SEEK_PROJECT_MGR;
282 
283 PROCEDURE PJM_WF_SEEK_TASK_MGR(  itemtype  in varchar2,
284 		                 itemkey   in varchar2,
285 		                 actid     in number,
286 		                 funcmode  in varchar2,
287 		                 resultout out nocopy varchar2)
288 IS
289    xc_task_manager   	  varchar2(80) :=
290     wf_engine.GetItemAttrText( itemtype => itemtype,
291 			       itemkey  => itemkey,
292 			       aname    => 'TASK_MANAGER');
293 
294 BEGIN
295    if (funcmode = 'RUN') then
296       if (xc_task_manager is not null) then
297          resultout := 'COMPLETE:FOUND';
298       else
299          resultout := 'COMPLETE:NOT_FOUND';
300       end if;
301       return;
302    end if;
303    if (funcmode = 'CANCEL') then
304       resultout := 'COMPLETE:';
305       return;
306    end if;
307    if (funcmode = 'TIMEOUT') then
308       resultout := 'COMPLETE:';
309       return;
310    end if;
311 EXCEPTION
312    when others then
313       wf_core.context('PJM_INTEGRATION_PROJ_MFG', 'PJM_WF_SEEK_TASK_MGR',itemtype, itemkey, actid,funcmode,resultout);
314       raise;
315 END PJM_WF_SEEK_TASK_MGR;
316 
317 
318 END PJM_INTEGRATION_PROJ_MFG;