DBA Data[Home] [Help]

PACKAGE BODY: APPS.PJM_INTEGRATION_PROJ_MFG

Source


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