[Home] [Help]
PACKAGE BODY: APPS.HXC_TIMECARD_ATTRIBUTE_UTILS
Source
1 PACKAGE BODY hxc_timecard_attribute_utils AS
2 /* $Header: hxctcatut.pkb 115.4 2004/01/02 16:32:48 arundell noship $ */
3
4 type attribute_index is table of hxc_time_attributes.time_attribute_id%type index by binary_integer;
5 type bld_blk_info_type_ids is table of hxc_bld_blk_info_types.bld_blk_info_type%type index by binary_integer;
6
7 g_bld_blk_info_type_ids bld_blk_info_type_ids;
8
9 g_package varchar2(30) := 'hxc_timecard_attribute_utils';
10
11 e_no_existing_attribute exception;
12
13 Function next_time_attribute_id
14 (p_attributes in hxc_attribute_table_type)
15 return number is
16
17 l_next_id number;
18 l_index number;
19
20 Begin
21
22 if ((p_attributes is null) OR (p_attributes.count = 0)) then
23 l_next_id := 1;
24 else
25 l_index := p_attributes.first;
26 l_next_id := p_attributes(l_index).time_attribute_id;
27
28 Loop
29 Exit when not p_attributes.exists(l_index);
30 if(l_next_id > p_attributes(l_index).time_attribute_id) then
31 l_next_id := p_attributes(l_index).time_attribute_id;
32 end if;
33 l_index := p_attributes.next(l_index);
34 End Loop;
35 end if;
36
37 if (l_next_id > 0) then
38 return -100;
39 else
40 return (l_next_id-100);
41 end if;
42
43 End next_time_attribute_id;
44
45 FUNCTION get_bld_blk_info_type
46 (p_info_type_id in NUMBER)
47 return varchar2 is
48
49 cursor get_info_type(p_info_type_id in number) is
50 select bld_blk_info_type
51 from hxc_bld_blk_info_types
52 where bld_blk_info_type_id = p_info_type_id;
53
54 l_info_type HXC_BLD_BLK_INFO_TYPES.BLD_BLK_INFO_TYPE%TYPE;
55
56 Begin
57
58 --
59 -- See if we already have the id
60 --
61 if(g_bld_blk_info_type_ids.exists(p_info_type_id)) then
62 return g_bld_blk_info_type_ids(p_info_type_id);
63 else
64 open get_info_type(p_info_type_id);
65 fetch get_info_type into l_info_type;
66 if(get_info_type%NOTFOUND) then
67 close get_info_type;
68 FND_MESSAGE.SET_NAME('HXC','HXC_XXXXXX_NO_INFO_TYPE');
69 FND_MESSAGE.RAISE_ERROR;
70 else
71 close get_info_type;
72 g_bld_blk_info_type_ids(p_info_type_id) := l_info_type;
73 return l_info_type;
74 end if;
75 end if;
76
77 End get_bld_blk_info_type;
78
79 FUNCTION get_bld_blk_info_type_id
80 (p_info_type in varchar2)
81 RETURN number is
82
83 cursor csr_get_bld_blk_info_type_id IS
84 select bld_blk_info_type_id
85 from hxc_bld_blk_info_types
86 where bld_blk_info_type = p_info_type;
87
88 l_index NUMBER;
89 l_info_type_id hxc_bld_blk_info_types.bld_blk_info_type_id%type := NULL;
90
91 BEGIN
92 --
93 -- Check to see if we've cache the bld blk info type already
94 --
95
96 l_index := g_bld_blk_info_type_ids.first;
97
98 LOOP
99 EXIT when ((NOT g_bld_blk_info_type_ids.exists(l_index)) OR (l_info_type_id is NOT NULL));
100
101 if (g_bld_blk_info_type_ids(l_index)=p_info_type) then
102
103 l_info_type_id := l_index;
104
105 end if;
106
107 l_index := g_bld_blk_info_type_ids.next(l_index);
108 END LOOP;
109
110 if(l_info_type_id is NULL) then
111
112 open csr_get_bld_blk_info_type_id;
113 fetch csr_get_bld_blk_info_type_id into l_info_type_id;
114
115 if(csr_get_bld_blk_info_type_id%NOTFOUND) then
116 close csr_get_bld_blk_info_type_id;
117 FND_MESSAGE.SET_NAME('HXC','HXC_NO_BLD_BLK_INFO_TYPE');
118 FND_MESSAGE.SET_TOKEN('TYPE',p_info_type);
119 FND_MESSAGE.raise_error;
120 else
121 close csr_get_bld_blk_info_type_id;
122 end if;
123 --
124 -- Add this info type to the cached bunch
125 -- use the id as the index in the table
126 --
127 g_bld_blk_info_type_ids(l_info_type_id) := p_info_type;
128
129 end if;
130
131 return l_info_type_id;
132
133 END get_bld_blk_info_type_id;
134
135 Function convert_to_dpwr_attributes
136 (p_attributes in HXC_ATTRIBUTE_TABLE_TYPE)
137 return HXC_SELF_SERVICE_TIME_DEPOSIT.building_block_attribute_info IS
138
139 l_attributes HXC_SELF_SERVICE_TIME_DEPOSIT.building_block_attribute_info;
140 l_index NUMBER;
141 l_proc varchar2(72) := g_package||'convert_to_dpwr_attributes';
142
143 BEGIN
144
145 l_index := p_attributes.first;
146
147 LOOP
148 EXIT WHEN NOT p_attributes.exists(l_index);
149
150 l_attributes(l_index).TIME_ATTRIBUTE_ID := p_attributes(l_index).TIME_ATTRIBUTE_ID;
151 l_attributes(l_index).BUILDING_BLOCK_ID := p_attributes(l_index).BUILDING_BLOCK_ID;
152 l_attributes(l_index).ATTRIBUTE_CATEGORY := p_attributes(l_index).ATTRIBUTE_CATEGORY;
153 l_attributes(l_index).ATTRIBUTE1 := p_attributes(l_index).ATTRIBUTE1;
154 l_attributes(l_index).ATTRIBUTE2 := p_attributes(l_index).ATTRIBUTE2;
155 l_attributes(l_index).ATTRIBUTE3 := p_attributes(l_index).ATTRIBUTE3;
156 l_attributes(l_index).ATTRIBUTE4 := p_attributes(l_index).ATTRIBUTE4;
157 l_attributes(l_index).ATTRIBUTE5 := p_attributes(l_index).ATTRIBUTE5;
158 l_attributes(l_index).ATTRIBUTE6 := p_attributes(l_index).ATTRIBUTE6;
159 l_attributes(l_index).ATTRIBUTE7 := p_attributes(l_index).ATTRIBUTE7;
160 l_attributes(l_index).ATTRIBUTE8 := p_attributes(l_index).ATTRIBUTE8;
161 l_attributes(l_index).ATTRIBUTE9 := p_attributes(l_index).ATTRIBUTE9;
162 l_attributes(l_index).ATTRIBUTE10 := p_attributes(l_index).ATTRIBUTE10;
163 l_attributes(l_index).ATTRIBUTE11 := p_attributes(l_index).ATTRIBUTE11;
164 l_attributes(l_index).ATTRIBUTE12 := p_attributes(l_index).ATTRIBUTE12;
165 l_attributes(l_index).ATTRIBUTE13 := p_attributes(l_index).ATTRIBUTE13;
166 l_attributes(l_index).ATTRIBUTE14 := p_attributes(l_index).ATTRIBUTE14;
167 l_attributes(l_index).ATTRIBUTE15 := p_attributes(l_index).ATTRIBUTE15;
168 l_attributes(l_index).ATTRIBUTE16 := p_attributes(l_index).ATTRIBUTE16;
169 l_attributes(l_index).ATTRIBUTE17 := p_attributes(l_index).ATTRIBUTE17;
170 l_attributes(l_index).ATTRIBUTE18 := p_attributes(l_index).ATTRIBUTE18;
171 l_attributes(l_index).ATTRIBUTE19 := p_attributes(l_index).ATTRIBUTE19;
172 l_attributes(l_index).ATTRIBUTE20 := p_attributes(l_index).ATTRIBUTE20;
173 l_attributes(l_index).ATTRIBUTE21 := p_attributes(l_index).ATTRIBUTE21;
174 l_attributes(l_index).ATTRIBUTE22 := p_attributes(l_index).ATTRIBUTE22;
175 l_attributes(l_index).ATTRIBUTE23 := p_attributes(l_index).ATTRIBUTE23;
176 l_attributes(l_index).ATTRIBUTE24 := p_attributes(l_index).ATTRIBUTE24;
177 l_attributes(l_index).ATTRIBUTE25 := p_attributes(l_index).ATTRIBUTE25;
178 l_attributes(l_index).ATTRIBUTE26 := p_attributes(l_index).ATTRIBUTE26;
179 l_attributes(l_index).ATTRIBUTE27 := p_attributes(l_index).ATTRIBUTE27;
180 l_attributes(l_index).ATTRIBUTE28 := p_attributes(l_index).ATTRIBUTE28;
181 l_attributes(l_index).ATTRIBUTE29 := p_attributes(l_index).ATTRIBUTE29;
182 l_attributes(l_index).ATTRIBUTE30 := p_attributes(l_index).ATTRIBUTE30;
183 l_attributes(l_index).BLD_BLK_INFO_TYPE_ID := p_attributes(l_index).BLD_BLK_INFO_TYPE_ID;
184 l_attributes(l_index).OBJECT_VERSION_NUMBER := p_attributes(l_index).OBJECT_VERSION_NUMBER;
185 l_attributes(l_index).NEW := p_attributes(l_index).NEW;
186 l_attributes(l_index).CHANGED := p_attributes(l_index).CHANGED;
187 l_attributes(l_index).BLD_BLK_INFO_TYPE := p_attributes(l_index).BLD_BLK_INFO_TYPE;
188
189 l_index := p_attributes.next(l_index);
190
191 END LOOP;
192
193 return l_attributes;
194
195 End convert_to_dpwr_attributes;
196
197 Function convert_to_type
198 (p_attributes in HXC_SELF_SERVICE_TIME_DEPOSIT.building_block_attribute_info)
199 return HXC_ATTRIBUTE_TABLE_TYPE is
200
201 l_attributes HXC_ATTRIBUTE_TABLE_TYPE;
202 l_index NUMBER;
203
204 Begin
205
206 -- Initialize the collection
207
208 l_attributes := HXC_ATTRIBUTE_TABLE_TYPE();
209
210 l_index := p_attributes.first;
211
212 LOOP
213
214 EXIT WHEN NOT p_attributes.exists(l_index);
215
216 l_attributes.extend;
217
218 l_attributes(l_attributes.last) :=
219 HXC_ATTRIBUTE_TYPE
220 (p_attributes(l_index).TIME_ATTRIBUTE_ID
221 ,p_attributes(l_index).BUILDING_BLOCK_ID
222 ,p_attributes(l_index).ATTRIBUTE_CATEGORY
223 ,p_attributes(l_index).ATTRIBUTE1
224 ,p_attributes(l_index).ATTRIBUTE2
225 ,p_attributes(l_index).ATTRIBUTE3
226 ,p_attributes(l_index).ATTRIBUTE4
227 ,p_attributes(l_index).ATTRIBUTE5
228 ,p_attributes(l_index).ATTRIBUTE6
229 ,p_attributes(l_index).ATTRIBUTE7
230 ,p_attributes(l_index).ATTRIBUTE8
231 ,p_attributes(l_index).ATTRIBUTE9
232 ,p_attributes(l_index).ATTRIBUTE10
233 ,p_attributes(l_index).ATTRIBUTE11
234 ,p_attributes(l_index).ATTRIBUTE12
235 ,p_attributes(l_index).ATTRIBUTE13
236 ,p_attributes(l_index).ATTRIBUTE14
237 ,p_attributes(l_index).ATTRIBUTE15
238 ,p_attributes(l_index).ATTRIBUTE16
239 ,p_attributes(l_index).ATTRIBUTE17
240 ,p_attributes(l_index).ATTRIBUTE18
241 ,p_attributes(l_index).ATTRIBUTE19
242 ,p_attributes(l_index).ATTRIBUTE20
243 ,p_attributes(l_index).ATTRIBUTE21
244 ,p_attributes(l_index).ATTRIBUTE22
245 ,p_attributes(l_index).ATTRIBUTE23
246 ,p_attributes(l_index).ATTRIBUTE24
247 ,p_attributes(l_index).ATTRIBUTE25
248 ,p_attributes(l_index).ATTRIBUTE26
249 ,p_attributes(l_index).ATTRIBUTE27
250 ,p_attributes(l_index).ATTRIBUTE28
251 ,p_attributes(l_index).ATTRIBUTE29
252 ,p_attributes(l_index).ATTRIBUTE30
253 ,p_attributes(l_index).BLD_BLK_INFO_TYPE_ID
254 ,p_attributes(l_index).OBJECT_VERSION_NUMBER
255 ,p_attributes(l_index).NEW
256 ,p_attributes(l_index).CHANGED
257 ,p_attributes(l_index).BLD_BLK_INFO_TYPE
258 ,'N' -- New process flag
259 ,null -- building block ovn
260 );
261
262 l_index := p_attributes.next(l_index);
263
264 END LOOP;
265
266 return l_attributes;
267
268 End convert_to_type;
269
270 Function is_new_attribute
271 (p_attribute in HXC_ATTRIBUTE_TYPE)
272 return BOOLEAN is
273
274 Begin
275
276 if(p_attribute.new='Y') then
277 return true;
278 else
279 return false;
280 end if;
281
282 End is_new_Attribute;
283
284 Function is_new_attribute2
285 (p_attribute in HXC_ATTRIBUTE_TYPE)
286 return BOOLEAN is
287
288 Begin
289
290 if(p_attribute.new='Y') then
291 return true;
292 else
293 return false;
294 end if;
295
296 End is_new_Attribute2;
297
298 Function is_corresponding_block
299 (p_attribute in HXC_ATTRIBUTE_TYPE
300 ,p_block_id in HXC_TIME_BUILDING_BLOCKS.TIME_BUILDING_BLOCK_ID%TYPE
301 ) RETURN BOOLEAN is
302
303 Begin
304
305 if(p_attribute.building_block_id = p_block_id) then
306 return true;
307 else
308 return false;
309 end if;
310
311 End is_corresponding_block;
312
313 Function is_corresponding_block
314 (p_attribute in HXC_ATTRIBUTE_TYPE
315 ,p_block in HXC_BLOCK_TYPE
316 ) RETURN BOOLEAN is
317
318 Begin
319
320 if(p_attribute.building_block_id = p_block.time_building_block_id) then
321 return true;
322 else
323 return false;
324 end if;
325
326 End is_corresponding_block;
327
328
329 Function is_system_context
330 (p_attribute in HXC_ATTRIBUTE_TYPE)
331 RETURN BOOLEAN is
332
333 Begin
334
335 --
336 -- These should be ordered so the most likely attribute
337 -- is first
338 --
339
340 if(p_attribute.attribute_category = hxc_timecard.c_security_attribute) then
341 return true;
342 elsif(p_attribute.attribute_category = hxc_timecard.c_reason_attribute) then
343 return true;
344 elsif(p_attribute.attribute_category = hxc_timecard.c_layout_attribute) then
345 return true;
346 else
347 return false;
348 end if;
349
350 End is_system_context;
351
352 Function process_attribute
353 (p_attribute in hxc_attribute_type
354 ) return BOOLEAN is
355
356 Begin
357
358 if(p_attribute.process = hxc_timecard.c_process) then
359 return true;
360 else
361 return false;
362 end if;
363
364 End process_attribute;
365
366 Function build_attribute
367 (p_time_attribute_id in HXC_TIME_ATTRIBUTES.TIME_ATTRIBUTE_ID%TYPE
368 ,p_object_version_number in HXC_TIME_ATTRIBUTES.OBJECT_VERSION_NUMBER%TYPE
369 ,p_time_building_block_id in HXC_TIME_BUILDING_BLOCKS.TIME_BUILDING_BLOCK_ID%TYPE
370 ,p_time_building_block_ovn in hxc_time_building_blocks.object_version_number%type
371 ) return HXC_ATTRIBUTE_TYPE is
372
373 cursor c_attribute
374 (p_time_attribute_id in HXC_TIME_ATTRIBUTES.TIME_ATTRIBUTE_ID%TYPE
375 ,p_object_version_number in HXC_TIME_ATTRIBUTES.OBJECT_VERSION_NUMBER%TYPE
376 ) is
377 select *
378 from hxc_time_attributes
379 where time_attribute_id = p_time_attribute_id
380 and object_version_number = p_object_version_number;
381
382 l_new_attribute HXC_ATTRIBUTE_TYPE;
383 l_attribute_row c_attribute%ROWTYPE;
384
385 Begin
386
387 open c_attribute
388 (p_time_attribute_id
389 ,p_object_version_number
390 );
391 fetch c_attribute into l_attribute_row;
392
393 if(c_attribute%FOUND) then
394 close c_attribute;
395 l_new_attribute :=
396 HXC_ATTRIBUTE_TYPE
397 (l_attribute_row.TIME_ATTRIBUTE_ID
398 ,p_time_building_block_id
399 ,l_attribute_row.ATTRIBUTE_CATEGORY
400 ,l_attribute_row.ATTRIBUTE1
401 ,l_attribute_row.ATTRIBUTE2
402 ,l_attribute_row.ATTRIBUTE3
403 ,l_attribute_row.ATTRIBUTE4
404 ,l_attribute_row.ATTRIBUTE5
405 ,l_attribute_row.ATTRIBUTE6
406 ,l_attribute_row.ATTRIBUTE7
407 ,l_attribute_row.ATTRIBUTE8
408 ,l_attribute_row.ATTRIBUTE9
409 ,l_attribute_row.ATTRIBUTE10
410 ,l_attribute_row.ATTRIBUTE11
411 ,l_attribute_row.ATTRIBUTE12
412 ,l_attribute_row.ATTRIBUTE13
413 ,l_attribute_row.ATTRIBUTE14
414 ,l_attribute_row.ATTRIBUTE15
415 ,l_attribute_row.ATTRIBUTE16
416 ,l_attribute_row.ATTRIBUTE17
417 ,l_attribute_row.ATTRIBUTE18
418 ,l_attribute_row.ATTRIBUTE19
419 ,l_attribute_row.ATTRIBUTE20
420 ,l_attribute_row.ATTRIBUTE21
421 ,l_attribute_row.ATTRIBUTE22
422 ,l_attribute_row.ATTRIBUTE23
423 ,l_attribute_row.ATTRIBUTE24
424 ,l_attribute_row.ATTRIBUTE25
425 ,l_attribute_row.ATTRIBUTE26
426 ,l_attribute_row.ATTRIBUTE27
427 ,l_attribute_row.ATTRIBUTE28
428 ,l_attribute_row.ATTRIBUTE29
429 ,l_attribute_row.ATTRIBUTE30
430 ,l_attribute_row.BLD_BLK_INFO_TYPE_ID
431 ,l_attribute_row.OBJECT_VERSION_NUMBER
432 ,'N'
433 ,'N'
434 ,get_bld_blk_info_type(l_attribute_row.BLD_BLK_INFO_TYPE_ID)
435 ,'N'
436 ,p_time_building_block_ovn
437 );
438
439 else
440 close c_attribute;
441 raise e_no_existing_attribute;
442 end if;
443
444 return l_new_attribute;
445
446 End Build_Attribute;
447
448 Function attributes_are_different
449 (p_attribute1 in HXC_ATTRIBUTE_TYPE
450 ,p_attribute2 in HXC_ATTRIBUTE_TYPE
451 ) return BOOLEAN is
452
453 Begin
454
455 if(nvl(p_attribute1.attribute_category,'NULL') <> nvl(p_attribute2.attribute_category,'NULL')) then
456 return true;
457 end if;
458
459 if(nvl(p_attribute1.attribute1,'NULL') <> nvl(p_attribute2.attribute1,'NULL')) then
460 return true;
461 end if;
462
463 if(nvl(p_attribute1.attribute2,'NULL') <> nvl(p_attribute2.attribute2,'NULL')) then
464 return true;
465 end if;
466
467 if(nvl(p_attribute1.attribute3,'NULL') <> nvl(p_attribute2.attribute3,'NULL')) then
468 return true;
469 end if;
470
471 if(nvl(p_attribute1.attribute4,'NULL') <> nvl(p_attribute2.attribute4,'NULL')) then
472 return true;
473 end if;
474
475 if(nvl(p_attribute1.attribute5,'NULL') <> nvl(p_attribute2.attribute5,'NULL')) then
476 return true;
477 end if;
478
479 if(nvl(p_attribute1.attribute6,'NULL') <> nvl(p_attribute2.attribute6,'NULL')) then
480 return true;
481 end if;
482
483 if(nvl(p_attribute1.attribute7,'NULL') <> nvl(p_attribute2.attribute7,'NULL')) then
484 return true;
485 end if;
486
487 if(nvl(p_attribute1.attribute8,'NULL') <> nvl(p_attribute2.attribute8,'NULL')) then
488 return true;
489 end if;
490
491 if(nvl(p_attribute1.attribute9,'NULL') <> nvl(p_attribute2.attribute9,'NULL')) then
492 return true;
493 end if;
494
495 if(nvl(p_attribute1.attribute10,'NULL') <> nvl(p_attribute2.attribute10,'NULL')) then
496 return true;
497 end if;
498
499 if(nvl(p_attribute1.attribute11,'NULL') <> nvl(p_attribute2.attribute11,'NULL')) then
500 return true;
501 end if;
502
503 if(nvl(p_attribute1.attribute12,'NULL') <> nvl(p_attribute2.attribute12,'NULL')) then
504 return true;
505 end if;
506
507 if(nvl(p_attribute1.attribute13,'NULL') <> nvl(p_attribute2.attribute13,'NULL')) then
508 return true;
509 end if;
510
511 if(nvl(p_attribute1.attribute14,'NULL') <> nvl(p_attribute2.attribute14,'NULL')) then
512 return true;
513 end if;
514
515 if(nvl(p_attribute1.attribute15,'NULL') <> nvl(p_attribute2.attribute15,'NULL')) then
516 return true;
517 end if;
518
519 if(nvl(p_attribute1.attribute16,'NULL') <> nvl(p_attribute2.attribute16,'NULL')) then
520 return true;
521 end if;
522
523 if(nvl(p_attribute1.attribute17,'NULL') <> nvl(p_attribute2.attribute17,'NULL')) then
524 return true;
525 end if;
526
527 if(nvl(p_attribute1.attribute18,'NULL') <> nvl(p_attribute2.attribute18,'NULL')) then
528 return true;
529 end if;
530
531 if(nvl(p_attribute1.attribute19,'NULL') <> nvl(p_attribute2.attribute19,'NULL')) then
532 return true;
533 end if;
534
535 if(nvl(p_attribute1.attribute20,'NULL') <> nvl(p_attribute2.attribute20,'NULL')) then
536 return true;
537 end if;
538
539 if(nvl(p_attribute1.attribute21,'NULL') <> nvl(p_attribute2.attribute21,'NULL')) then
540 return true;
541 end if;
542
543 if(nvl(p_attribute1.attribute22,'NULL') <> nvl(p_attribute2.attribute22,'NULL')) then
544 return true;
545 end if;
546
547 if(nvl(p_attribute1.attribute23,'NULL') <> nvl(p_attribute2.attribute23,'NULL')) then
548 return true;
549 end if;
550
551 if(nvl(p_attribute1.attribute24,'NULL') <> nvl(p_attribute2.attribute24,'NULL')) then
552 return true;
553 end if;
554
555 if(nvl(p_attribute1.attribute25,'NULL') <> nvl(p_attribute2.attribute25,'NULL')) then
556 return true;
557 end if;
558
559 if(nvl(p_attribute1.attribute26,'NULL') <> nvl(p_attribute2.attribute26,'NULL')) then
560 return true;
561 end if;
562
563 if(nvl(p_attribute1.attribute27,'NULL') <> nvl(p_attribute2.attribute27,'NULL')) then
564 return true;
565 end if;
566
567 if(nvl(p_attribute1.attribute28,'NULL') <> nvl(p_attribute2.attribute28,'NULL')) then
568 return true;
569 end if;
570
571 if(nvl(p_attribute1.attribute29,'NULL') <> nvl(p_attribute2.attribute29,'NULL')) then
572 return true;
573 end if;
574
575 if(nvl(p_attribute1.attribute30,'NULL') <> nvl(p_attribute2.attribute30,'NULL')) then
576 return true;
577 end if;
578 --
579 -- If we get here, everything (that the user can change) is the same
580 -- so, don't process.
581 --
582 return false;
583
584 End attributes_are_different;
585
586 Function get_attribute_index
587 (p_attributes in hxc_attribute_table_type
588 ,p_context in hxc_time_attributes.attribute_category%type
589 ,p_building_block_id in hxc_time_building_blocks.time_building_block_id%type default null
590 ) return NUMBER is
591
592 l_index number;
593 l_found boolean := false;
594 l_attribute number;
595
596 Begin
597
598 l_index := p_attributes.first;
599
600 Loop
601 Exit when ((not p_attributes.exists(l_index)) or (l_found));
602
603 if(p_attributes(l_index).attribute_category = p_context) then
604 if(p_building_block_id is not null) then
605 if(p_building_block_id = p_attributes(l_index).building_block_id) then
606 l_found := true;
607 l_attribute := l_index;
608 end if;
609 else
610 l_found := true;
611 l_attribute := l_index;
612 end if;
613 end if;
614 l_index := p_attributes.next(l_index);
615 End Loop;
616
617 return l_attribute;
618
619 End get_attribute_index;
620
621 Procedure set_bld_blk_info_type_id
622 (p_attributes in out nocopy hxc_attribute_table_type) is
623
624 l_index number;
625
626 Begin
627
628 l_index := p_attributes.first;
629
630 Loop
631 Exit when not p_attributes.exists(l_index);
632 if(((p_attributes(l_index).bld_blk_info_type_id is null)
633 OR
634 (p_attributes(l_index).bld_blk_info_type_id = -1))
635 AND
636 (instr(p_attributes(l_index).bld_blk_info_type,hxc_timecard.c_alias_context_prefix) <1)
637 )then
638
639 p_attributes(l_index).bld_blk_info_type_id := get_bld_blk_info_type_id(p_attributes(l_index).bld_blk_info_type);
640 end if;
641
642 l_index := p_attributes.next(l_index);
643
644 End Loop;
645
646 End set_bld_blk_info_type_id;
647
648 Function index_deposit_attributes(p_deposit_attributes in hxc_attribute_table_type)
649 return attribute_index is
650
651 l_index number;
652 l_attribute_index attribute_index;
653
654 Begin
655
656 l_index := p_deposit_attributes.first;
657 Loop
658 Exit when not p_deposit_attributes.exists(l_index);
659 l_attribute_index(p_deposit_attributes(l_index).time_attribute_id) := l_index;
660 l_index := p_deposit_attributes.next(l_index);
661 End Loop;
662
663 return l_attribute_index;
664
665 End index_deposit_attributes;
666
667 Function attribute_present
668 (p_attribute_id in number
669 ,p_attribute_index in attribute_index
670 ) return boolean is
671
672 Begin
673
674 if(p_attribute_index.exists(p_attribute_id)) then
675 return true;
676 else
677 return false;
678 end if;
679
680 End attribute_present;
681
682 Procedure append_additional_reasons
683 (p_deposit_attributes in out nocopy hxc_attribute_table_type
684 ,p_attributes in hxc_attribute_table_type) is
685
686 l_attribute_index attribute_index;
687 l_index NUMBER;
688
689 l_to_delete BOOLEAN;
690 l_index_to_delete NUMBER;
691
692 Begin
693
694 --First we need to remove the reason attributes which were added
695 --and not saved in the database.This happens when users first time
696 --enters the reaosns and then click on back and removes the reasons
697
698 l_index:=p_deposit_attributes.first;
699 LOOP
700 EXIT WHEN NOT p_deposit_attributes.exists(l_index);
701
702 l_to_delete := FALSE;
703
704 if p_deposit_attributes(l_index).attribute_category='REASON' AND
705 p_deposit_attributes(l_index).time_attribute_id < 0 then
706
707 l_to_delete := TRUE;
708 l_index_to_delete :=l_index;
709 end if;
710 l_index:=p_deposit_attributes.next(l_index);
711
712 IF l_to_delete = TRUE then
713 p_deposit_attributes.delete(l_index_to_delete);
714 END IF;
715 END LOOP;
716
717 --now we can add the new reasons
718
719 l_attribute_index := index_deposit_attributes(p_deposit_attributes);
720
721 l_index := p_attributes.first;
722 Loop
723 Exit when not p_attributes.exists(l_index);
724 if(p_attributes(l_index).attribute_category = hxc_timecard.c_reason_attribute) then
725 if(NOT attribute_present(p_attributes(l_index).time_attribute_id,l_attribute_index)) then
726 if(is_new_attribute(p_attributes(l_index))) then
727 p_deposit_attributes.extend;
728 p_deposit_attributes(p_deposit_attributes.last) := p_attributes(l_index);
729 p_deposit_attributes(p_deposit_attributes.last).process := hxc_timecard.c_yes;
730 end if;
731 end if;
732 end if;
733 l_index := p_attributes.next(l_index);
734 End Loop;
735
736 End append_additional_reasons;
737
738 Function effectively_deleted_attribute
739 (p_attribute in hxc_attribute_type)
740 return boolean is
741 Begin
742
743 if(
744 (p_attribute.attribute_category is null)
745 AND
746 (p_attribute.attribute1 is null)
747 AND
748 (p_attribute.attribute2 is null)
749 AND
750 (p_attribute.attribute3 is null)
751 AND
752 (p_attribute.attribute4 is null)
753 AND
754 (p_attribute.attribute5 is null)
755 AND
756 (p_attribute.attribute6 is null)
757 AND
758 (p_attribute.attribute7 is null)
759 AND
760 (p_attribute.attribute8 is null)
761 AND
762 (p_attribute.attribute9 is null)
763 AND
764 (p_attribute.attribute10 is null)
765 AND
766 (p_attribute.attribute11 is null)
767 AND
768 (p_attribute.attribute12 is null)
769 AND
770 (p_attribute.attribute13 is null)
771 AND
772 (p_attribute.attribute14 is null)
773 AND
774 (p_attribute.attribute15 is null)
775 AND
776 (p_attribute.attribute16 is null)
777 AND
778 (p_attribute.attribute17 is null)
779 AND
780 (p_attribute.attribute18 is null)
781 AND
782 (p_attribute.attribute19 is null)
783 AND
784 (p_attribute.attribute20 is null)
785 AND
786 (p_attribute.attribute21 is null)
787 AND
788 (p_attribute.attribute22 is null)
789 AND
790 (p_attribute.attribute23 is null)
791 AND
792 (p_attribute.attribute24 is null)
793 AND
794 (p_attribute.attribute25 is null)
795 AND
796 (p_attribute.attribute26 is null)
797 AND
798 (p_attribute.attribute27 is null)
799 AND
800 (p_attribute.attribute28 is null)
801 AND
802 (p_attribute.attribute29 is null)
803 AND
804 (p_attribute.attribute30 is null)
805 ) then
806 return true;
807 else
808 return false;
809 end if;
810
811 End effectively_deleted_attribute;
812
813 Procedure remove_deleted_attributes
814 (p_attributes in out nocopy hxc_attribute_table_type) is
815
816 l_index number;
817
818 Begin
819
820 l_index := p_attributes.first;
821
822 Loop
823 Exit when not p_attributes.exists(l_index);
824
825 if(effectively_deleted_attribute(p_attributes(l_index))) then
826 p_attributes.delete(l_index);
827 end if;
828
829 l_index := p_attributes.next(l_index);
830
831 End Loop;
832
833 End remove_deleted_attributes;
834
835 END hxc_timecard_attribute_utils;