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