DBA Data[Home] [Help]

PACKAGE BODY: APPS.PN_SPACE_ASSIGN_EMP_PKG

Source


1 PACKAGE BODY pn_space_assign_emp_pkg AS
2 /* $Header: PNSPEMPB.pls 120.7 2005/12/01 03:32:06 appldev ship $ */
3 
4 -------------------------------------------------------------------------------
5 -- PROCDURE     : Insert_Row
6 -- DESCRIPTION  : inserts a row in pn_space_assign_emp_all
7 -- SCOPE        : PUBLIC
8 -- INVOKED FROM :
9 -- RETURNS      : NONE
10 -- HISTORY      :
11 -- 14-DEC-04 STripath  o Modified for Portfolio Status Enh BUG# 4030816.
12 --                       Added code to check loc is contigious assignable
13 --                       betn assign start and end dates.
14 -- 28-APR-05 piagrawa  o Bug 4284035 - Replaced pn_space_assign_emp with _ALL
15 -- 28-NOV-05 pikhar    o fetched org_id using cursor
16 -------------------------------------------------------------------------------
17 PROCEDURE Insert_Row (
18           x_rowid                         IN OUT NOCOPY VARCHAR2,
19           x_emp_space_assign_id           IN OUT NOCOPY NUMBER,
20           x_attribute1                    IN     VARCHAR2,
21           x_attribute2                    IN     VARCHAR2,
22           x_attribute3                    IN     VARCHAR2,
23           x_attribute4                    IN     VARCHAR2,
24           x_attribute5                    IN     VARCHAR2,
25           x_attribute6                    IN     VARCHAR2,
26           x_attribute7                    IN     VARCHAR2,
27           x_attribute8                    IN     VARCHAR2,
28           x_attribute9                    IN     VARCHAR2,
29           x_attribute10                   IN     VARCHAR2,
30           x_attribute11                   IN     VARCHAR2,
31           x_attribute12                   IN     VARCHAR2,
32           x_attribute13                   IN     VARCHAR2,
33           x_attribute14                   IN     VARCHAR2,
34           x_attribute15                   IN     VARCHAR2,
35           x_location_id                   IN     NUMBER,
36           x_person_id                     IN     NUMBER,
37           x_project_id                    IN     NUMBER,
38           x_task_id                       IN     NUMBER,
39           x_emp_assign_start_date         IN     DATE,
40           x_emp_assign_end_date           IN     DATE,
41           x_cost_center_code              IN     VARCHAR2,
42           x_allocated_area_pct            IN     NUMBER,
43           x_allocated_area                IN     NUMBER,
44           x_utilized_area                 IN     NUMBER,
45           x_emp_space_comments            IN     VARCHAR2,
46           x_attribute_category            IN     VARCHAR2,
47           x_creation_date                 IN     DATE,
48           x_created_by                    IN     NUMBER,
49           x_last_update_date              IN     DATE,
50           x_last_updated_by               IN     NUMBER,
51           x_last_update_login             IN     NUMBER,
52           x_org_id                        IN     NUMBER,
53           x_source                        IN     VARCHAR2
54         )
55 IS
56 
57    CURSOR c IS
58       SELECT ROWID
59       FROM pn_space_assign_emp_all
60       WHERE emp_space_assign_id = x_emp_space_assign_id;
61 
62    l_err_msg    VARCHAR2(30);
63    l_asgn_mode  VARCHAR2(30);
64 
65    CURSOR org_cur IS
66      SELECT org_id
67      FROM   pn_locations_all
68      WHERE  location_id = x_location_id;
69 
70    l_org_id NUMBER;
71 
72 BEGIN
73 
74    pnp_debug_pkg.debug ('PN_SPACE_ASSIGN_EMP_PKG.INSERT_ROW (+) SpcAsgnId: '
75                         ||x_emp_space_assign_id||', LocId: '||x_location_id
76                         ||', StrDt: '||TO_CHAR(x_emp_assign_start_date,'MM/DD/YYYY')
77                         ||', EndDt: '||TO_CHAR(x_emp_assign_end_date, 'MM/DD/YYYY')
78                         ||', CC: '||x_cost_center_code||', PerId: '||x_person_id);
79 
80    -- Check if location is contigious Employee/CC Assignable betn assign start and end dates.
81    IF x_person_id IS NOT NULL THEN
82       l_asgn_mode := 'EMP';
83    ELSE
84       l_asgn_mode := 'CC';
85    END IF;
86    pnt_locations_pkg.Check_Location_Gaps(
87                           p_loc_id     => x_location_id
88                          ,p_str_dt     => x_emp_assign_start_date
89                          ,p_end_dt     => NVL(x_emp_assign_end_date, TO_DATE('12/31/4712','MM/DD/YYYY'))
90                          ,p_asgn_mode  => l_asgn_mode
91                          ,p_err_msg    => l_err_msg
92                           );
93 
94    IF l_err_msg IS NOT NULL THEN
95       fnd_message.set_name('PN', 'PN_INVALID_SPACE_ASSGN_DATE');
96       app_exception.raise_exception;
97    END IF;
98 
99    pn_space_assign_emp_pkg.check_dupemp_assign(p_person_id      => x_person_id,
100                                                p_cost_cntr_code => x_cost_center_code,
101                                                p_loc_id         => x_location_id,
102                                                p_assgn_str_dt   => x_emp_assign_start_date);
103 
104    -------------------------------------------------------
105    -- Select the nextval for emp space assign id
106    -------------------------------------------------------
107 
108    IF x_org_id IS NULL THEN
109     FOR rec IN org_cur LOOP
110       l_org_id := rec.org_id;
111     END LOOP;
112    ELSE
113     l_org_id := x_org_id;
114    END IF;
115 
116    IF (x_emp_space_assign_id IS NULL) THEN
117 
118       SELECT  pn_space_assign_emp_s.NEXTVAL
119       INTO    x_emp_space_assign_id
120       FROM    DUAL;
121    END IF;
122 
123    INSERT INTO pn_space_assign_emp_all
124    (
125                attribute1,
126                attribute2,
127                attribute3,
128                attribute4,
129                attribute5,
130                attribute6,
131                attribute7,
132                attribute8,
133                attribute9,
134                attribute10,
135                attribute11,
136                attribute12,
137                attribute13,
138                attribute14,
139                attribute15,
140                emp_space_assign_id,
141                location_id,
142                person_id,
143                project_id,
144                task_id,
145                emp_assign_start_date,
146                emp_assign_end_date,
147                cost_center_code,
148                allocated_area_pct,
149                allocated_area,
150                utilized_area,
151                emp_space_comments,
152                last_update_date,
153                last_updated_by,
154                creation_date,
155                created_by,
156                last_update_login,
157                attribute_category,
158                org_id,
159                source
160    )
161    VALUES
162    (
163                x_attribute1,
164                x_attribute2,
165                x_attribute3,
166                x_attribute4,
167                x_attribute5,
168                x_attribute6,
169                x_attribute7,
170                x_attribute8,
171                x_attribute9,
172                x_attribute10,
173                x_attribute11,
174                x_attribute12,
175                x_attribute13,
176                x_attribute14,
177                x_attribute15,
178                x_emp_space_assign_id,
179                x_location_id,
180                x_person_id,
181                x_project_id,
182                x_task_id,
183                x_emp_assign_start_date,
184                x_emp_assign_end_date,
185                x_cost_center_code,
186                x_allocated_area_pct,
187                x_allocated_area,
188                x_utilized_area,
189                x_emp_space_comments,
190                x_last_update_date,
191                x_last_updated_by,
192                x_creation_date,
193                x_created_by,
194                x_last_update_login,
195                x_attribute_category,
196                l_org_id,
197                x_source
198    );
199 
200    OPEN c;
201       FETCH c INTO x_rowid;
202       IF (c%NOTFOUND) THEN
203          CLOSE c;
204          RAISE NO_DATA_FOUND;
205       END IF;
206    CLOSE C;
207 
208    pnp_debug_pkg.debug ('PN_SPACE_ASSIGN_EMP_PKG.INSERT_ROW (-) SpcAsgnId: '
209                         ||x_emp_space_assign_id||', LocId: '||x_location_id
210                         ||', StrDt: '||TO_CHAR(x_emp_assign_start_date,'MM/DD/YYYY')
211                         ||', EndDt: '||TO_CHAR(x_emp_assign_end_date, 'MM/DD/YYYY')
212                         ||', CC: '||x_cost_center_code||', PerId: '||x_person_id);
213 
214 END Insert_Row;
215 
216 -----------------------------------------------------------------------
217 -- PROCDURE : Lock_Row
218 -----------------------------------------------------------------------
219 
220 PROCEDURE Lock_Row (
221           x_emp_space_assign_id           IN     NUMBER,
222           x_attribute1                    IN     VARCHAR2,
223           x_attribute2                    IN     VARCHAR2,
224           x_attribute3                    IN     VARCHAR2,
225           x_attribute4                    IN     VARCHAR2,
226           x_attribute5                    IN     VARCHAR2,
227           x_attribute6                    IN     VARCHAR2,
228           x_attribute7                    IN     VARCHAR2,
229           x_attribute8                    IN     VARCHAR2,
230           x_attribute9                    IN     VARCHAR2,
231           x_attribute10                   IN     VARCHAR2,
232           x_attribute11                   IN     VARCHAR2,
233           x_attribute12                   IN     VARCHAR2,
234           x_attribute13                   IN     VARCHAR2,
235           x_attribute14                   IN     VARCHAR2,
236           x_attribute15                   IN     VARCHAR2,
237           x_location_id                   IN     NUMBER,
238           x_person_id                     IN     NUMBER,
239           x_project_id                    IN     NUMBER,
240           x_task_id                       IN     NUMBER,
241           x_emp_assign_start_date         IN     DATE,
242           x_emp_assign_end_date           IN     DATE,
243           x_cost_center_code              IN     VARCHAR2,
244           x_allocated_area_pct            IN     NUMBER,
245           x_allocated_area                IN     NUMBER,
246           x_utilized_area                 IN     NUMBER,
247           x_emp_space_comments            IN     VARCHAR2,
248           x_attribute_category            IN     VARCHAR2)
249 IS
250 
251    CURSOR c1 IS
252       SELECT *
253       FROM   pn_space_assign_emp_all
254       WHERE  emp_space_assign_id = x_emp_space_assign_id
255       FOR UPDATE OF emp_space_assign_id NOWAIT;
256 
257 BEGIN
258 
259    pnp_debug_pkg.debug ('PN_SPACE_ASSIGN_EMP_PKG.LOCK_ROW (+) SpcAsgnId: '
260                         ||x_emp_space_assign_id);
261 
262    OPEN c1;
263       FETCH c1 INTO tlempinfo;
264       IF (c1%NOTFOUND) THEN
265          CLOSE c1;
266          RETURN;
267       END IF;
268    CLOSE c1;
269 
270    IF NOT (tlempinfo.EMP_SPACE_ASSIGN_ID = X_EMP_SPACE_ASSIGN_ID) THEN
271       pn_var_rent_pkg.lock_row_exception('EMP_SPACE_ASSIGN_ID',tlempinfo.EMP_SPACE_ASSIGN_ID);
272    END IF;
273 
274    IF NOT ((tlempinfo.location_id = x_location_id)
275        OR ((tlempinfo.location_id IS NULL) AND (x_location_id IS NULL))) THEN
276       pn_var_rent_pkg.lock_row_exception('LOCATION_ID',tlempinfo.location_id);
277    END IF;
278 
279    IF NOT ((TLEMPINFO.person_id = x_person_id)
280        OR ((tlempinfo.person_id IS NULL) AND (x_person_id IS NULL))) THEN
281       pn_var_rent_pkg.lock_row_exception('PERSON_ID',tlempinfo.person_id);
282    END IF;
283 
284    IF NOT ((tlempinfo.project_id = x_project_id)
285        OR ((tlempinfo.project_id IS NULL) AND (x_project_id IS NULL))) THEN
286       pn_var_rent_pkg.lock_row_exception('PROJECT_ID',tlempinfo.project_id);
287    END IF;
288 
289    IF NOT ((tlempinfo.task_id = x_task_id)
290        OR ((tlempinfo.task_id IS NULL) AND (x_task_id IS NULL))) THEN
291       pn_var_rent_pkg.lock_row_exception('TASK_ID',tlempinfo.task_id);
292    END IF;
293 
294    IF NOT ((trunc(tlempinfo.emp_assign_end_date) = TRUNC(x_emp_assign_end_date))
295        OR ((tlempinfo.emp_assign_end_date IS NULL) AND (x_emp_assign_end_date IS NULL))) THEN
296       pn_var_rent_pkg.lock_row_exception('EMP_ASSIGN_END_DATE',tlempinfo.emp_assign_end_date);
297    END IF;
298 
299    IF NOT ((tlempinfo.cost_center_code = x_cost_center_code)
300        OR ((tlempinfo.cost_center_code IS NULL) AND (x_cost_center_code IS NULL))) THEN
301       pn_var_rent_pkg.lock_row_exception('COST_CENTER_CODE',tlempinfo.cost_center_code);
302    END IF;
303 
304    IF NOT ((tlempinfo.allocated_area_pct = x_allocated_area_pct)
305        OR ((tlempinfo.allocated_area_pct IS NULL) AND (x_allocated_area_pct IS NULL))) THEN
306       pn_var_rent_pkg.lock_row_exception('ALLOCATED_AREA_PCT',tlempinfo.allocated_area_pct);
307    END IF;
308 
309    IF NOT ((tlempinfo.allocated_area = x_allocated_area)
310        OR ((tlempinfo.allocated_area IS NULL) AND (x_allocated_area IS NULL))) THEN
314    IF NOT ((tlempinfo.utilized_area = x_utilized_area)
311       pn_var_rent_pkg.lock_row_exception('ALLOCATED_AREA',tlempinfo.allocated_area);
312    END IF;
313 
315        OR ((tlempinfo.utilized_area IS NULL) AND (x_utilized_area IS NULL))) THEN
316       pn_var_rent_pkg.lock_row_exception('UTILIZED_AREA',tlempinfo.utilized_area);
317    END IF;
318 
319    IF NOT ((tlempinfo.emp_space_comments = x_emp_space_comments)
320        OR ((tlempinfo.emp_space_comments IS NULL) AND (x_emp_space_comments IS NULL))) THEN
321       pn_var_rent_pkg.lock_row_exception('EMP_SPACE_COMMENTS',tlempinfo.emp_space_comments);
322    END IF;
323 
324    IF NOT ((tlempinfo.attribute_category = x_attribute_category)
325        OR ((tlempinfo.attribute_category IS NULL) AND (x_attribute_category IS NULL))) THEN
326       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE_CATEGORY',tlempinfo.attribute_category);
327    END IF;
328 
329    IF NOT ((tlempinfo.attribute1 = x_attribute1)
330        OR ((tlempinfo.attribute1 IS NULL) AND (x_attribute1 IS NULL))) THEN
331       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE1',tlempinfo.attribute1);
332    END IF;
333 
334    IF NOT ((tlempinfo.attribute2 = x_attribute2)
335        OR ((tlempinfo.attribute2 IS NULL) AND (x_attribute2 IS NULL))) THEN
336       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE2',tlempinfo.attribute2);
337    END IF;
338 
339    IF NOT ((tlempinfo.attribute3 = x_attribute3)
340        OR ((tlempinfo.attribute3 IS NULL) AND (x_attribute3 IS NULL))) THEN
341       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE3',tlempinfo.attribute3);
342    END IF;
343 
344    IF NOT ((tlempinfo.attribute4 = x_attribute4)
345        OR ((tlempinfo.attribute4 IS NULL) AND (x_attribute4 IS NULL))) THEN
346       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE4',tlempinfo.attribute4);
347    END IF;
348 
349    IF NOT ((tlempinfo.attribute5 = x_attribute5)
350        OR ((tlempinfo.attribute5 IS NULL) AND (x_attribute5 IS NULL))) THEN
351       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE5',tlempinfo.attribute5);
352    END IF;
353 
354    IF NOT ((tlempinfo.attribute6 = x_attribute6)
355        OR ((tlempinfo.attribute6 IS NULL) AND (x_attribute6 IS NULL))) THEN
356       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE6',tlempinfo.attribute6);
357    END IF;
358 
359    IF NOT ((tlempinfo.attribute7 = x_attribute7)
360        OR ((tlempinfo.attribute7 IS NULL) AND (x_attribute7 IS NULL))) THEN
361       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE7',tlempinfo.attribute7);
362    END IF;
363 
364    IF NOT ((tlempinfo.attribute8 = x_attribute8)
365        OR ((tlempinfo.attribute8 IS NULL) AND (x_attribute8 IS NULL))) THEN
366       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE8',tlempinfo.attribute8);
367    END IF;
368 
369    IF NOT ((tlempinfo.attribute9 = x_attribute9)
370        OR ((tlempinfo.attribute9 IS NULL) AND (x_attribute9 IS NULL))) THEN
371       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE9',tlempinfo.attribute9);
372    END IF;
373 
374    IF NOT ((tlempinfo.attribute10 = x_attribute10)
375        OR ((tlempinfo.attribute10 IS NULL) AND (x_attribute10 IS NULL))) THEN
376       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE10',tlempinfo.attribute10);
377    END IF;
378 
379    IF NOT ((tlempinfo.attribute11 = x_attribute11)
380        OR ((tlempinfo.attribute11 IS NULL) AND (x_attribute11 IS NULL))) THEN
381       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE11',tlempinfo.attribute11);
382    END IF;
383 
384    IF NOT ((tlempinfo.attribute12 = x_attribute12)
385        OR ((tlempinfo.attribute12 IS NULL) AND (x_attribute12 IS NULL))) THEN
386       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE12',tlempinfo.attribute12);
387    END IF;
388 
389    IF NOT ((tlempinfo.attribute13 = x_attribute13)
390        OR ((tlempinfo.attribute13 IS NULL) AND (x_attribute13 IS NULL))) THEN
391       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE13',tlempinfo.attribute13);
392    END IF;
393 
394    IF NOT ((tlempinfo.attribute14 = x_attribute14)
395        OR ((tlempinfo.attribute14 IS NULL) AND (x_attribute14 IS NULL))) THEN
396       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE14',tlempinfo.attribute14);
397    END IF;
398 
399    IF NOT ((tlempinfo.attribute15 = x_attribute15)
400        OR ((tlempinfo.attribute15 IS NULL) AND (x_attribute15 IS NULL))) THEN
401       pn_var_rent_pkg.lock_row_exception('ATTRIBUTE15',tlempinfo.attribute15);
402    END IF;
403 
404    pnp_debug_pkg.debug ('PN_SPACE_ASSIGN_EMP_PKG.LOCK_ROW (-) SpcAsgnId: '
405                         ||x_emp_space_assign_id);
406 
407 END Lock_Row;
408 
409 -------------------------------------------------------------------------------
410 -- PROCDURE     : Update_Row
411 -- DESCRIPTION  : updates a row in pn_space_assign_emp_all
412 -- SCOPE        : PUBLIC
413 -- INVOKED FROM :
414 -- RETURNS      : NONE
415 -- HISTORY      :
416 -- 14-DEC-04 STripath  o Modified for Portfolio Status Enh BUG# 4030816.
417 --                       Added code to check loc is contigious assignable
418 --                       betn assign start and end dates.
419 -- 01-JUL-05 hrodda    o Bug 4284035 - Replaced pn_space_assign_emp
420 --                       with _ALL table.
421 -- 08-SEP-05 Hareesha  o Modified insert statement to include org_id.
422 -------------------------------------------------------------------------------
423 PROCEDURE Update_Row (
424           x_emp_space_assign_id           IN     NUMBER,
425           x_attribute1                    IN     VARCHAR2,
429           x_attribute5                    IN     VARCHAR2,
426           x_attribute2                    IN     VARCHAR2,
427           x_attribute3                    IN     VARCHAR2,
428           x_attribute4                    IN     VARCHAR2,
430           x_attribute6                    IN     VARCHAR2,
431           x_attribute7                    IN     VARCHAR2,
432           x_attribute8                    IN     VARCHAR2,
433           x_attribute9                    IN     VARCHAR2,
434           x_attribute10                   IN     VARCHAR2,
435           x_attribute11                   IN     VARCHAR2,
436           x_attribute12                   IN     VARCHAR2,
437           x_attribute13                   IN     VARCHAR2,
438           x_attribute14                   IN     VARCHAR2,
439           x_attribute15                   IN     VARCHAR2,
440           x_location_id                   IN     NUMBER,
441           x_person_id                     IN     NUMBER,
442           x_project_id                    IN     NUMBER,
443           x_task_id                       IN     NUMBER,
444           x_emp_assign_start_date         IN     DATE,
445           x_emp_assign_end_date           IN     DATE,
446           x_cost_center_code              IN     VARCHAR2,
447           x_allocated_area_pct            IN     NUMBER,
448           x_allocated_area                IN     NUMBER,
449           x_utilized_area                 IN     NUMBER,
450           x_emp_space_comments            IN     VARCHAR2,
451           x_attribute_category            IN     VARCHAR2,
452           x_last_update_date              IN     DATE,
453           x_last_updated_by               IN     NUMBER,
454           x_last_update_login             IN     NUMBER,
455           x_update_correct_option         IN     VARCHAR2,
456           x_changed_start_date            OUT NOCOPY DATE,
457           x_source                        IN     VARCHAR2
458           )
459 IS
460 
461    l_emp_space_assign_id           NUMBER;
462    l_err_msg                       VARCHAR2(30);
463    l_asgn_mode                     VARCHAR2(30);
464 
465    BEGIN
466 
467    pnp_debug_pkg.debug ('PN_SPACE_ASSIGN_EMP_PKG.UPDATE_ROW (+) SpcAsgnId: '
468                         ||x_emp_space_assign_id||', Mode: '||x_update_correct_option||', LocId: '||x_location_id
469                         ||', StrDt: '||TO_CHAR(x_emp_assign_start_date,'MM/DD/YYYY')
470                         ||', EndDt: '||TO_CHAR(x_emp_assign_end_date, 'MM/DD/YYYY')
471                         ||', CC: '||x_cost_center_code||', PerId: '||x_person_id);
472 
473    -- Check if location is contigious Employee/CC Assignable betn assign start and end dates.
474    IF (x_location_id <> tlempinfo.location_id) OR
475       (x_emp_assign_start_date <> tlempinfo.emp_assign_start_date) OR
476       (NVL(x_emp_assign_end_date, TO_DATE('12/31/4712','MM/DD/YYYY')) <>
477        NVL(tlempinfo.emp_assign_end_date, TO_DATE('12/31/4712','MM/DD/YYYY')))
478    THEN
479       IF x_person_id IS NOT NULL THEN
480          l_asgn_mode := 'EMP';
481       ELSE
482          l_asgn_mode := 'CC';
483       END IF;
484       pnt_locations_pkg.Check_Location_Gaps(
485                           p_loc_id     => x_location_id
486                          ,p_str_dt     => x_emp_assign_start_date
487                          ,p_end_dt     => NVL(x_emp_assign_end_date, TO_DATE('12/31/4712','MM/DD/YYYY'))
488                          ,p_asgn_mode  => l_asgn_mode
489                          ,p_err_msg    => l_err_msg
490                           );
491 
492       IF l_err_msg IS NOT NULL THEN
493          fnd_message.set_name('PN', 'PN_INVALID_SPACE_ASSGN_DATE');
494          app_exception.raise_exception;
495       END IF;
496    END IF;
497 
498    IF ((x_person_id IS NULL AND
499         x_cost_center_code <> tlempinfo.cost_center_code) OR
500        (x_person_id IS NOT NULL AND
501         x_person_id <> tlempinfo.person_id)) THEN
502 
503        pn_space_assign_emp_pkg.check_dupemp_assign(p_person_id      => x_person_id,
504                                                    p_cost_cntr_code => x_cost_center_code,
505                                                    p_loc_id         => x_location_id,
506                                                    p_assgn_str_dt   => x_emp_assign_start_date);
507    END IF;
508 
509    IF x_update_correct_option = 'UPDATE' THEN
510 
511 
512       SELECT  pn_space_assign_emp_s.NEXTVAL
513       INTO    l_emp_space_assign_id
514       FROM    DUAL;
515 
516       INSERT INTO pn_space_assign_emp_all
517       (
518              emp_space_assign_id,
519              location_id,
520              person_id,
521              project_id,
522              task_id,
523              emp_assign_start_date,
524              emp_assign_end_date,
525              cost_center_code,
526              allocated_area_pct,
527              allocated_area,
528              utilized_area,
529              emp_space_comments,
530              last_update_date,
531              last_updated_by,
532              creation_date,
533              created_by,
534              last_update_login,
535              attribute_category,
536              attribute1,
537              attribute2,
538              attribute3,
539              attribute4,
540              attribute5,
541              attribute6,
542              attribute7,
546              attribute11,
543              attribute8,
544              attribute9,
545              attribute10,
547              attribute12,
548              attribute13,
549              attribute14,
550              attribute15,
551              source,
552              org_id
553       )
554       VALUES
555       (
556              l_emp_space_assign_id,
557              tlempinfo.location_id,
558              tlempinfo.person_id,
559              tlempinfo.project_id,
560              tlempinfo.task_id,
561              tlempinfo.emp_assign_start_date,
562              (x_emp_assign_start_date - 1),
563              tlempinfo.cost_center_code,
564              tlempinfo.allocated_area_pct,
565              tlempinfo.allocated_area,
566              tlempinfo.utilized_area,
567              tlempinfo.emp_space_comments,
568              tlempinfo.last_update_date,
569              tlempinfo.last_updated_by,
570              tlempinfo.creation_date,
571              tlempinfo.created_by,
572              tlempinfo.last_update_login,
573              tlempinfo.attribute_category,
574              tlempinfo.attribute1,
575              tlempinfo.attribute2,
576              tlempinfo.attribute3,
577              tlempinfo.attribute4,
578              tlempinfo.attribute5,
579              tlempinfo.attribute6,
580              tlempinfo.attribute7,
581              tlempinfo.attribute8,
582              tlempinfo.attribute9,
583              tlempinfo.attribute10,
584              tlempinfo.attribute11,
585              tlempinfo.attribute12,
586              tlempinfo.attribute13,
587              tlempinfo.attribute14,
588              tlempinfo.attribute15,
589              tlempinfo.source,
590              tlempinfo.org_id
591       );
592 
593    END IF;
594 
595    UPDATE pn_space_assign_emp_all
596    SET    attribute1                      = x_attribute1,
597           attribute2                      = x_attribute2,
598           attribute3                      = x_attribute3,
599           attribute4                      = x_attribute4,
600           attribute5                      = x_attribute5,
601           attribute6                      = x_attribute6,
602           attribute7                      = x_attribute7,
603           attribute8                      = x_attribute8,
604           attribute9                      = x_attribute9,
605           attribute10                     = x_attribute10,
606           attribute11                     = x_attribute11,
607           attribute12                     = x_attribute12,
608           attribute13                     = x_attribute13,
609           attribute14                     = x_attribute14,
610           attribute15                     = x_attribute15,
611           location_id                     = x_location_id,
612           person_id                       = x_person_id,
613           project_id                      = x_project_id,
614           task_id                         = x_task_id,
615           emp_assign_start_date           = x_emp_assign_start_date,
616           emp_assign_end_date             = x_emp_assign_end_date,
617           cost_center_code                = x_cost_center_code,
618           allocated_area_pct              = x_allocated_area_pct,
619           allocated_area                  = x_allocated_area,
620           utilized_area                   = x_utilized_area,
624           last_update_date                = x_last_update_date,
621           emp_space_comments              = x_emp_space_comments,
622           attribute_category              = x_attribute_category,
623           emp_space_assign_id             = x_emp_space_assign_id,
625           last_updated_by                 = x_last_updated_by,
626           last_update_login               = x_last_update_login,
627           source                          = x_source
628    WHERE  emp_space_assign_id             = x_emp_space_assign_id;
629 
630    x_changed_start_date := x_emp_assign_start_date ;
631 
632    IF (SQL%NOTFOUND) THEN
633       RAISE NO_DATA_FOUND;
634    END IF;
635 
636    EXCEPTION
637       WHEN OTHERS THEN
638       app_exception.raise_exception;
639 
640    pnp_debug_pkg.debug ('PN_SPACE_ASSIGN_EMP_PKG.UPDATE_ROW (-) SpcAsgnId: '
641                         ||x_emp_space_assign_id||', Mode: '||x_update_correct_option||', LocId: '||x_location_id
642                         ||', StrDt: '||TO_CHAR(x_emp_assign_start_date,'MM/DD/YYYY')
643                         ||', EndDt: '||TO_CHAR(x_emp_assign_end_date, 'MM/DD/YYYY')
644                         ||', CC: '||x_cost_center_code||', PerId: '||x_person_id);
645 
646 END Update_Row;
647 
648 -------------------------------------------------------------------------------
649 -- PROCDURE     : Delete_Row
650 -- DESCRIPTION  : deletes a row from pn_space_assign_emp_all
651 -- SCOPE        : PUBLIC
652 -- INVOKED FROM :
653 -- RETURNS      : NONE
654 -- HISTORY      :
655 -- 01-JUL-05 hareesha    o Bug 4284035 - Replaced pn_space_assign_emp
656 --                          with _ALL table.
657 -- 25-Aug-05 hareesha    o Bug 4551258 - Addeed cursor emp_space_assign_id_exists
658 --                         Only if a record exists with the given
659 --                         emp_space_assign_id does the delete is called.
660 -- 30-AUG-05 Hareesha    o Bug 4551258 - Removed the cursor emp_space_assign_id_exists
661 --                         which was added previously inorder to fix the
662 --                         no_data_found error coming up.
663 -------------------------------------------------------------------------------
664 PROCEDURE delete_row(x_emp_space_assign_id IN NUMBER) IS
665 
666 BEGIN
667 
668    pnp_debug_pkg.debug ('PN_SPACE_ASSIGN_EMP_PKG.DELETE_ROW (+) SpcAsgnId: '
669                         ||x_emp_space_assign_id);
670 
671    DELETE FROM pn_space_assign_emp_all
672    WHERE emp_space_assign_id = x_emp_space_assign_id;
673 
674 
675    IF (SQL%NOTFOUND) THEN
676       RAISE NO_DATA_FOUND;
677    END IF;
678 
679    pnp_debug_pkg.debug ('PN_SPACE_ASSIGN_EMP_PKG.DELETE_ROW (-) SpcAsgnId: '
680                         ||x_emp_space_assign_id);
681 
682 END delete_row;
683 
684 -------------------------------------------------------------------------------
685 -- PROCEDURE : check_office_assign_gaps
686 -- PURPOSE   : This procedure is being called from INSERT_ROW, UPDATE_ROW
687 --             of employee_fdr_blk, customer_fdr_blk of PNTSPACE form.
688 --             It checks for the gaps between office definition and stops
689 --             the user from assinging an office during that gap interval.
690 -- IN PARAM  : Location Id, Actice_start_date, Active_end_date.
691 -- History   :
692 -- 27-DEC-02   Mrinal Misra   o Mrinal Misra
693 -- 10-JAN-03   Mrinal Misra   o Modified to run FOR LOOP one lesser
694 --                              count by 1..loctn_tab.count-1.
695 -- 01-JUL-05   hrodda         o Bug 4284035 - Replaced pn_locations
696 --                              with _ALL table.
697 -------------------------------------------------------------------------------
698 PROCEDURE check_office_assign_gaps(p_loc_id IN NUMBER,
699                                    p_str_dt IN DATE,
700                                    p_end_dt IN DATE) IS
701 
702    TYPE loctn_rec IS RECORD(
703       location_id          pn_locations.location_id%TYPE,
704       active_start_date    DATE,
705       active_end_date      DATE);
706 
707    TYPE loc_type IS
708       TABLE OF loctn_rec
709       INDEX BY BINARY_INTEGER;
710 
711    loctn_tab                 loc_type;
712    l_rec_num                 NUMBER;
713    l_diff                    NUMBER;
714    l_date                    DATE;
715    l_err_flag                VARCHAR2(1);
716 
717    CURSOR get_loctn_dates IS
718       SELECT location_id,
719              active_start_date,
720              active_end_date
721       FROM   pn_locations_all
722       WHERE  active_end_date   >= p_str_dt
723       AND    active_start_date <= p_end_dt
724       AND    location_id        = p_loc_id
725       ORDER BY active_start_date;
726 
727    CURSOR check_loctn_gap(l_date IN DATE) IS
728       SELECT 'Y'
729       FROM   DUAL
730       WHERE NOT EXISTS (SELECT NULL
731                     FROM   pn_locations_all
732                     WHERE  l_date BETWEEN active_start_date AND active_end_date
733                     AND    location_id =  p_loc_id);
734 
735 BEGIN
736 
737    pnp_debug_pkg.debug ('PN_SPACE_ASSIGN_EMP_PKG.check_office_assign_gaps(+)');
738 
739    loctn_tab.delete;
740    l_rec_num := 0;
741    l_err_flag := 'N';
742 
743    IF p_str_dt IS NOT NULL THEN
744       OPEN check_loctn_gap(p_str_dt);
745       FETCH check_loctn_gap INTO l_err_flag;
746       CLOSE check_loctn_gap;
747 
748       IF l_err_flag = 'Y' THEN
749          fnd_message.set_name('PN', 'PN_ASGN_LOCN_NOT_EFFC_MSG');
750          app_exception.raise_exception;
751       END IF;
752    END IF;
753 
754    IF p_end_dt IS NOT NULL THEN
755       OPEN check_loctn_gap(p_end_dt);
756       FETCH check_loctn_gap INTO l_err_flag;
757       CLOSE check_loctn_gap;
758 
759       IF l_err_flag = 'Y' THEN
760          fnd_message.set_name('PN', 'PN_ASGN_LOCN_NOT_EFFC_MSG');
761          app_exception.raise_exception;
762       END IF;
763    END IF;
764 
765    IF p_end_dt IS NOT NULL AND p_str_dt IS NOT NULL THEN
766       FOR loc_rec IN get_loctn_dates LOOP
767          l_rec_num :=  NVL(loctn_tab.COUNT,0) + 1;
768          loctn_tab(l_rec_num) := loc_rec;
769       END LOOP;
770 
771       IF NVL(l_rec_num,0) > 1 THEN
772          FOR i in 1..loctn_tab.COUNT-1 LOOP
773 
774             SELECT loctn_tab(i+1).active_start_date -
775                    loctn_tab(i).active_end_date
776             INTO   l_diff
777             FROM   DUAL;
778 
779             IF l_diff > 1 THEN
780                l_err_flag := 'Y';
781                EXIT;
782             END IF;
783          END LOOP;
784 
785       ELSIF NVL(l_rec_num,0) = 0 THEN
786          l_err_flag := 'Y';
787       END IF;
788 
789       IF l_err_flag = 'Y' THEN
790          fnd_message.set_name('PN', 'PN_ASGN_LOCN_NOT_EFFC_MSG');
791          app_exception.raise_exception;
792       END IF;
793    END IF;
794 
795    pnp_debug_pkg.debug ('PN_SPACE_ASSIGN_EMP_PKG.check_office_assign_gaps(-)');
796 
797 END check_office_assign_gaps;
798 
799 -------------------------------------------------------------------------------
800 -- PROCEDURE : check_dupemp_assign
801 -- PURPOSE   : The procedure checks to see if there exists another assignment
802 --             record for person id/cost center code, for the same date range.
803 --             If there exists one then it stops user from doing the assignment.
804 -- IN PARAM  : Person Id, Cost Center Code, Location Id,
805 --             Employee Assignment Start Date.
806 -- History   :
807 -- 16-JAN-03  Mrinal    o Created.
808 -- 22-JAN-03  Mrinal    o Modified WHERE clause of check_emp_assignment,
809 --                        check_ccd_assignment cursor to check for
810 --                        exisitng assignment.
811 -- 22-FEB-05  ftanudja  o Removed check for duplicate cost center code.#4116762
812 -------------------------------------------------------------------------------
813 PROCEDURE check_dupemp_assign(p_person_id      IN NUMBER,
814                               p_cost_cntr_code IN VARCHAR2,
815                               p_loc_id         IN NUMBER,
816                               p_assgn_str_dt   IN DATE) IS
817 
818   l_err_flag       VARCHAR2(1) := 'N';
819 
820   CURSOR check_emp_assignment IS
821      SELECT 'Y'
822      FROM   DUAL
823      WHERE  EXISTS (SELECT NULL
824                     FROM   pn_space_assign_emp_all
825                     WHERE  person_id = p_person_id
826                     AND    location_id = p_loc_id
827                     AND    cost_center_code = p_cost_cntr_code
828                     AND    emp_assign_start_date <= p_assgn_str_dt
829                     AND    NVL(emp_assign_end_date, TO_DATE('12/31/4712', 'MM/DD/YYYY'))
830                            >= p_assgn_str_dt);
831 
832   CURSOR check_ccd_assignment IS
833      SELECT 'Y'
834      FROM   DUAL
835      WHERE  EXISTS (SELECT NULL
836                     FROM   pn_space_assign_emp_all
837                     WHERE  cost_center_code = p_cost_cntr_code
838                     AND    location_id = p_loc_id
839                     AND    emp_assign_start_date <= p_assgn_str_dt
840                     AND    person_id is null
841                     AND    NVL(emp_assign_end_date, TO_DATE('12/31/4712', 'MM/DD/YYYY'))
842                            >= p_assgn_str_dt);
843 BEGIN
847    FETCH check_emp_assignment INTO l_err_flag;
844    l_err_flag := 'N';
845 
846    OPEN check_emp_assignment;
848    CLOSE check_emp_assignment;
849 
850    IF NVL(l_err_flag,'N') = 'Y' THEN
851       fnd_message.set_name('PN', 'PN_SPASGN_EMPLOYEE_OVRLAP_MSG');
852       app_exception.raise_exception;
853    END IF;
854 
855 END check_dupemp_assign;
856 
857 -------------------------------------------------------------------------------
858 -- PROCDURE     : get_Least_st_date_assignment
859 -- PURPOSE      : Returns the emp_space_assign_id having the least_st_date to
860 --                diff between the original-assignment and
861 --                system-generated assignment
862 -- HISTORY      :
863 -- 20-JUL-05  hareesha o created bug #4116645
864 -------------------------------------------------------------------------------
865 FUNCTION get_least_st_date_assignment
866 (p_loc_id  IN NUMBER,
867  p_emp_id  IN NUMBER,
868  p_cc_code IN VARCHAR2)
869 RETURN NUMBER IS
870 
871    l_emp_space_assign_id  NUMBER := -1;
872 
873    CURSOR get_person_assign_id( p_loc    IN NUMBER
874                                ,p_person IN NUMBER) IS
875       SELECT emp_space_assign_id
876       FROM   pn_space_assign_emp_all
877       WHERE  location_id = p_loc
878       AND    person_id   = p_person
879       AND    emp_assign_start_date =
880              (SELECT MIN(emp_assign_start_date)
881               FROM pn_space_assign_emp_all
882               WHERE location_id = p_loc
883               AND   person_id   = p_person);
884 
885     CURSOR get_cc_assign_id( p_loc IN NUMBER
886                             ,p_cc  IN VARCHAR2) IS
887        SELECT emp_space_assign_id
888        FROM   pn_space_assign_emp_all
889        WHERE  location_id = p_loc
890        AND    cost_center_code = p_cc
891        AND    emp_assign_start_date =
892               (SELECT MIN(emp_assign_start_date)
893                FROM pn_space_assign_emp_all
894                WHERE location_id = p_loc
895                AND   cost_center_code = p_cc);
896 
897 BEGIN
898    pnp_debug_pkg.debug ('PN_SPACE_ASSIGN_EMP_PKG.GET_LEAST_ST_DATE_ASSIGNMENT(+)');
899 
900    IF p_emp_id IS NOT NULL THEN
901       FOR emp IN get_person_assign_id(p_loc_id, p_emp_id) LOOP
902          l_emp_space_assign_id := emp.emp_space_assign_id;
903       END LOOP;
904    ELSIF p_cc_code IS NOT NULL THEN
905       FOR emp IN get_cc_assign_id(p_loc_id, p_cc_code) LOOP
906          l_emp_space_assign_id := emp.emp_space_assign_id;
907       END LOOP;
908    END IF;
909 
910    pnp_debug_pkg.debug ('PN_SPACE_ASSIGN_EMP_PKG.GET_LEAST_ST_DATE_ASSIGNMENT(-)');
911 
912    RETURN l_emp_space_assign_id;
913 
914 END get_Least_st_date_assignment;
915 
916 END pn_space_assign_emp_pkg;