DBA Data[Home] [Help]

PACKAGE BODY: APPS.HXC_TIMEKEEPER

Source


1 PACKAGE body hxc_timekeeper AS
2 /* $Header: hxctimekeeper.pkb 120.21.12020000.2 2013/02/14 11:43:55 asrajago ship $ */
3 
4 g_package            varchar2(50) := 'HXC_TIMEKEEPER';
5 ---
6 ----
7 ----
8 Procedure remove_blank_attribute_rows
9             (p_attributes in out nocopy hxc_attribute_table_type) is
10 
11 l_index number;
12 
13 Begin
14 
15 l_index := p_attributes.first;
16 
17 Loop
18   Exit when not p_attributes.exists(l_index);
19 
20 if(
21    (    p_attributes(l_index).attribute_category not like 'COST%'
22     and p_attributes(l_index).attribute_category not like 'GRP%'
23     and p_attributes(l_index).attribute_category not like 'ELEMENT%'
24     and p_attributes(l_index).attribute_category not like 'PAEXPITDFF%'
25     and p_attributes(l_index).attribute_category not like 'POS%'
26     and p_attributes(l_index).attribute_category not like 'JOB%'
27     )
28   AND
29    (p_attributes(l_index).attribute1 is null)
30   AND
31    (p_attributes(l_index).attribute2 is null)
32   AND
33    (p_attributes(l_index).attribute3 is null)
34   AND
35    (p_attributes(l_index).attribute4 is null)
36   AND
37    (p_attributes(l_index).attribute5 is null)
38   AND
39    (p_attributes(l_index).attribute6 is null)
40   AND
41    (p_attributes(l_index).attribute7 is null)
42   AND
43    (p_attributes(l_index).attribute8 is null)
44   AND
45    (p_attributes(l_index).attribute9 is null)
46   AND
47    (p_attributes(l_index).attribute10 is null)
48   AND
49    (p_attributes(l_index).attribute11 is null)
50   AND
51    (p_attributes(l_index).attribute12 is null)
52   AND
53    (p_attributes(l_index).attribute13 is null)
54   AND
55    (p_attributes(l_index).attribute14 is null)
56   AND
57    (p_attributes(l_index).attribute15 is null)
58   AND
59    (p_attributes(l_index).attribute16 is null)
60   AND
61    (p_attributes(l_index).attribute17 is null)
62   AND
63    (p_attributes(l_index).attribute18 is null)
64   AND
65    (p_attributes(l_index).attribute19 is null)
66   AND
67    (p_attributes(l_index).attribute20 is null)
68   AND
69    (p_attributes(l_index).attribute21 is null)
70   AND
71    (p_attributes(l_index).attribute22 is null)
72   AND
73    (p_attributes(l_index).attribute23 is null)
74   AND
75    (p_attributes(l_index).attribute24 is null)
76   AND
77    (p_attributes(l_index).attribute25 is null)
78   AND
79    (p_attributes(l_index).attribute26 is null)
80   AND
81    (p_attributes(l_index).attribute27 is null)
82   AND
83    (p_attributes(l_index).attribute28 is null)
84   AND
85    (p_attributes(l_index).attribute29 is null)
86   AND
87    (p_attributes(l_index).attribute30 is null)
88   ) then
89 
90     p_attributes.delete(l_index);
91   end if;
92 
93   l_index := p_attributes.next(l_index);
94 
95 End Loop;
96 
97 End remove_blank_attribute_rows;
98 
99 --Procedure Added as part of Bug 13524669 --
100 Procedure end_date_app_period
101             (p_timecard_id  in  hxc_time_building_blocks.time_building_block_id%type
102             ) is
103 
104 TYPE numtab IS TABLE OF NUMBER;
105 app_period_tab numtab;
106 
107 cursor c_get_appl_period_id(p_timecard_id in number)
108 is
109   select
110   ap1.application_period_id
111 from
112   hxc_tc_ap_links ap1
113 where ap1.timecard_id = p_timecard_id
114  and not exists (
115            select
116                'x'
117              from
118                hxc_tc_ap_links ap2
119              where ap2.application_period_id = ap1.application_period_id
120              and ap2.timecard_id <> p_timecard_id );
121 
122 Begin
123  --Code to enddate application periods when timecard is getting deleted.
124 	open c_get_appl_period_id(p_timecard_id);
125 		fetch c_get_appl_period_id bulk collect
126 		into app_period_tab;
127 	close c_get_appl_period_id;
128 
129 	if g_debug then
130 		hr_utility.trace('timecard_id: '||p_timecard_id||' has '||app_period_tab.COUNT||' Application Periods attached');
131 	end if;
132 
133 	if (app_period_tab.COUNT > 0) then
134 		for i in app_period_tab.first..app_period_tab.last
135   	loop
136     	    hr_utility.trace('End dating application period in hxc_time_building_blocks and deleting from hxc_app_period_summary'||app_period_tab(i));
137       	  update hxc_time_building_blocks
138   	 			set date_to = sysdate
139 	    		where time_building_block_id = app_period_tab(i)
140   		 		and date_to = hr_general.end_of_time;
141 
142     	    delete from hxc_app_period_summary where APPLICATION_PERIOD_ID = app_period_tab(i);
143   	end loop;
144 	end if;
145 End end_date_app_period;
146 
147 
148 ----------------------------------------------------------------------------
149 -- Save Timecard Procedure
150 -- This procedure....
151 ----------------------------------------------------------------------------
152 Procedure save_timecard
153            (p_blocks          in out nocopy HXC_BLOCK_TABLE_TYPE
154            ,p_attributes      in out nocopy HXC_ATTRIBUTE_TABLE_TYPE
155            ,p_messages        in out nocopy HXC_MESSAGE_TABLE_TYPE
156            ,p_timecard_id        out nocopy hxc_time_building_blocks.time_building_block_id%type
157            ,p_timecard_ovn       out nocopy hxc_time_building_blocks.object_version_number%type
158 	   ,p_timekeeper_id   in hxc_time_building_blocks.resource_id%type DEFAULT NULL
159 	   ,p_tk_audit_enabled in VARCHAR2 DEFAULT NULL
160  	   ,p_tk_notify_to    in VARCHAR2  DEFAULT NULL
161 	   ,p_tk_notify_type  in VARCHAR2  DEFAULT NULL
162            ) is
163 
164 
165 cursor c_previous_timecard(
166 			      p_timecard_id in hxc_timecard_summary.timecard_id%type) is
167   select tk_audit_item_key,tk_audit_item_type
168     from hxc_timecard_summary
169    where timecard_id = p_timecard_id;
170 
171 l_timecard_blocks  hxc_timecard.block_list;
172 l_day_blocks       hxc_timecard.block_list;
173 l_detail_blocks    hxc_timecard.block_list;
174 l_transaction_info hxc_timecard.transaction_info;
175 l_timecard_props   hxc_timecard_prop_table_type;
176 l_proc             varchar2(50) := g_package||'.SAVE_CONTROLLER';
177 l_timecard_index   number;
178 
179 l_old_style_blks   hxc_self_service_time_deposit.timecard_info;
180 l_old_style_attrs  hxc_self_service_time_deposit.building_block_attribute_info;
181 l_old_messages     hxc_self_service_time_deposit.message_table;
182 
183 l_resubmit         varchar2(10) := hxc_timecard_deposit_common.c_no;
184 
185 l_rollback	   BOOLEAN := FALSE;
186 l_status_error	   BOOLEAN := FALSE;
187 e_timekeeper_check EXCEPTION;
188 
189 l_item_key         WF_ITEMS.ITEM_KEY%TYPE :=NULL;
190 
191 l_previous_tk_item_key   hxc_timecard_summary.tk_audit_item_key%type;
192 l_previous_tk_item_type  hxc_timecard_summary.tk_audit_item_type%type;
193 
194 tk_audit_item_type    WF_ITEMS.ITEM_TYPE%TYPE :=NULL;
195 tk_audit_process_name  VARCHAR2(50) :=NULL;
196 
197 n number;
198 l_index	NUMBER;
199 
200 
201 l_resource_id      NUMBER;
202 l_tc_start         DATE;
203 l_tc_stop          DATE;
204 l_approval_status  VARCHAR2(20);
205 
206 l_abs_ret_messages	HXC_MESSAGE_TABLE_TYPE;
207 
208 Begin
209 
210 --
211 -- Fnd initialization
212 --
213   fnd_msg_pub.initialize;
214 /*
215   IF g_debug THEN
216     hxc_debug_timecard.writeTimecard(p_blocks,p_attributes,'HXC_TIMEKEEPER',10);
217   END IF;
218 */
219 
220 g_debug := hr_utility.debug_enabled;
221 ----------------------------------------------------------------------------
222 --  Timecard Preparation
223 ----------------------------------------------------------------------------
224   hxc_timecard_message_helper.initializeerrors;
225 
226   p_messages := hxc_message_table_type ();
227 
228   -- create savepoint
229   savepoint TK_SAVE_SAVEPOINT;
230 
231   hxc_timecard_block_utils.initialize_timecard_index;
232 
233 --
234 --  Check input parameters
235 --
236   hxc_deposit_checks.check_inputs
237     (p_blocks       => p_blocks
238     ,p_attributes   => p_attributes
239     ,p_deposit_mode => hxc_timecard_deposit_common.c_save
240     ,p_template     => hxc_timecard_deposit_common.c_no
241     ,p_messages     => p_messages
242     );
243 /*
244   -- debug
245   IF g_debug THEN
246     hxc_debug_timecard.writeMessages(p_messages,'HXC_TIMEKEEPER',20);
247   END IF;
248 */
249   hxc_timecard_message_helper.processerrors
250     (p_messages => p_messages);
251 
252 --
253 --   First we are getting the preference
254 --   for the resource of the timecard
255 --
256 
257   l_timecard_index := hxc_timecard_block_utils.find_active_timecard_index(p_blocks);
258 
259   -- this procedure has the otl setup validation
260   hxc_timecard_properties.get_preference_properties
261     (p_validate             => hxc_timecard_deposit_common.c_yes
262     ,p_resource_id          => p_blocks(l_timecard_index).resource_id
263     ,p_timecard_start_time  => fnd_date.canonical_to_date(p_blocks(l_timecard_index).start_time)
264     ,p_timecard_stop_time   => fnd_date.canonical_to_date(p_blocks(l_timecard_index).stop_time)
265     ,p_for_timecard         => false
266     ,p_messages             => p_messages
267     ,p_property_table       => l_timecard_props
268     );
269 /*
270   -- debug
271   IF g_debug THEN
272     hxc_debug_timecard.writeMessages(p_messages,'HXC_TIMEKEEPER',30);
273   END IF;
274 */
275   hxc_timecard_message_helper.processerrors
276     (p_messages => p_messages);
277 
278 --
279 --  Sort blocks
280 --
281   hxc_timecard_block_utils.sort_blocks
282    (p_blocks          => p_blocks
283    ,p_timecard_blocks => l_timecard_blocks
284    ,p_day_blocks      => l_day_blocks
285    ,p_detail_blocks   => l_detail_blocks
286    );
287 
288 ----------------------------------------------------------------------------
289 --  Timecard Prepre-Validation
290 ----------------------------------------------------------------------------
291 --
292 --  Perform basic checks
293 --
294   hxc_deposit_checks.perform_checks
295     (p_blocks         => p_blocks
296     ,p_attributes     => p_attributes
297     ,p_timecard_props => l_timecard_props
298     ,p_days           => l_day_blocks
299     ,p_details        => l_detail_blocks
300     ,p_messages       => p_messages
301     );
302 /*
303   -- debug
304   IF g_debug THEN
305     hxc_debug_timecard.writeMessages(p_messages,'HXC_TIMEKEEPER',40);
306   END IF;
307 */
308   hxc_timecard_message_helper.processerrors
309     (p_messages => p_messages);
310 
311 ----------------------------------------------------------------------------
312 --  Timecard Preparation
313 ----------------------------------------------------------------------------
314 
315 --
316 --  Add the security attributes
317 --  ARR: 115.28 change, added p_messages
318 --
319   hxc_security.add_security_attribute
320     (p_blocks         => p_blocks
321     ,p_attributes     => p_attributes
322     ,p_timecard_props => l_timecard_props
323     ,p_messages       => p_messages
324     );
325 
326   hxc_timecard_message_helper.processerrors
327     (p_messages => p_messages);
328 --
329 --  Translate any aliases
330 --
331   hxc_timecard_deposit_common.alias_translation
332    (p_blocks => p_blocks
333    ,p_attributes => p_attributes
334    ,p_messages => p_messages
335    );
336 /*
337   -- debug
338   IF g_debug THEN
339     hxc_debug_timecard.writeMessages(p_messages,'HXC_TIMEKEEPER',50);
340   END IF;
341 */
342   hxc_timecard_message_helper.processerrors
343     (p_messages => p_messages);
344 
345 --
346 --  Set the block and attribute update process flags
347 --  Based on the data sent and in the db
348 --
349   hxc_block_attribute_update.set_process_flags
350     (p_blocks     => p_blocks
351     ,p_attributes => p_attributes
352     );
353 
354 --
355 --  Removed any deleted attributes
356 --
357 
358   hxc_timecard_attribute_utils.remove_deleted_attributes
359     (p_attributes => p_attributes);
360 
361   remove_blank_attribute_rows (p_attributes => p_attributes);
362 
363 ----------------------------------------------------------------------------
364 --  Timecard Pre-Validation
365 ----------------------------------------------------------------------------
366 --
367 --  Validate the set up for the user
368 --
369 /*
370   hxc_timecard_deposit_common.validate_setup
371      (p_deposit_mode => hxc_timecard.c_save
372      ,p_blocks       => p_blocks
373      ,p_attributes   => p_attributes
374      ,p_messages     => p_messages
375      );
376 
377   -- debug
378   IF g_debug THEN
379     hxc_debug_timecard.writeMessages(p_messages,'HXC_TIMEKEEPER',60);
380   END IF;
381 
382   hxc_timecard_message_helper.processerrors
383     (p_messages => p_messages);
384 */
385 /*
386   Call time entry rules for save
387 */
388 
389 /*
390    l_old_style_blks := HXC_TIMECARD_BLOCK_UTILS.convert_to_dpwr_blocks
391                        (p_blocks);
392 
393    l_old_style_attrs := HXC_TIMECARD_ATTRIBUTE_UTILS.convert_to_dpwr_attributes
394                          (p_attributes);
395 
396    HXC_TIME_ENTRY_RULES_UTILS_PKG.EXECUTE_TIME_ENTRY_RULES
397    (P_OPERATION            => hxc_timecard_deposit_common.c_save
398    ,P_TIME_BUILDING_BLOCKS => l_old_style_blks
399    ,P_TIME_ATTRIBUTES      => l_old_style_attrs
400    ,P_MESSAGES             => l_old_messages
401    ,P_RESUBMIT             => hxc_timecard_deposit_common.c_no
402    );
403 
404   hxc_timecard_message_utils.append_old_messages
405    (p_messages             => p_messages
406    ,p_old_messages         => l_old_messages
407    ,p_retrieval_process_id => null
408    );
409 
410   hxc_timecard_message_helper.processerrors
411     (p_messages => p_messages);
412 */
413 
414   --
415   -- call the application validation
416   --
417   hxc_timecard_validation.recipients_update_validation
418     (p_blocks        => p_blocks
419     ,p_attributes    => p_attributes
420     ,p_messages      => p_messages
421     ,p_props         => l_timecard_props
422     ,p_deposit_mode  => hxc_timecard_deposit_common.c_save
423     ,p_resubmit      => l_resubmit);
424 
425 /* Added for bug 8775740 HR Absence Integration
426 
427 This pkg call is used to validate absence entries against the
428 Absences Pref setting for the particular resource_id
429 
430 */
431 -- Change start
432 
433 if g_debug then
434 
435  hr_utility.trace('Just before verify_view_only_absences in hxctksave');
436  if (p_blocks.count>0) then
437 
438 
439     hr_utility.trace('  P_BLOCK TABLE START ');
440     hr_utility.trace(' *****************');
441 
442     l_index := p_blocks.FIRST;
443 
444      LOOP
445        EXIT WHEN NOT p_blocks.EXISTS (l_index);
446 
447 
448       hr_utility.trace(' TIME_BUILDING_BLOCK_ID      =   '|| p_blocks(l_index).TIME_BUILDING_BLOCK_ID     );
449       hr_utility.trace(' TYPE =   '|| p_blocks(l_index).TYPE )    ;
450       hr_utility.trace(' MEASURE =   '|| p_blocks(l_index).MEASURE)    ;
451       hr_utility.trace(' UNIT_OF_MEASURE     =       '|| p_blocks(l_index).UNIT_OF_MEASURE        )    ;
452       hr_utility.trace(' START_TIME     =       '|| p_blocks(l_index).START_TIME        )    ;
453       hr_utility.trace(' STOP_TIME      =       '|| p_blocks(l_index).STOP_TIME        )    ;
454       hr_utility.trace(' PARENT_BUILDING_BLOCK_ID  =       '|| p_blocks(l_index).PARENT_BUILDING_BLOCK_ID        )    ;
455       hr_utility.trace(' PARENT_IS_NEW     =       '|| p_blocks(l_index).PARENT_IS_NEW        )    ;
456       hr_utility.trace(' SCOPE     =       '|| p_blocks(l_index).SCOPE        )    ;
457       hr_utility.trace(' OBJECT_VERSION_NUMBER     =       '|| p_blocks(l_index).OBJECT_VERSION_NUMBER        )    ;
458       hr_utility.trace(' APPROVAL_STATUS     =       '|| p_blocks(l_index).APPROVAL_STATUS        )    ;
459       hr_utility.trace(' RESOURCE_ID     =       '|| p_blocks(l_index).RESOURCE_ID        )    ;
460       hr_utility.trace(' RESOURCE_TYPE    =       '|| p_blocks(l_index).RESOURCE_TYPE       )    ;
461       hr_utility.trace(' APPROVAL_STYLE_ID    =       '|| p_blocks(l_index).APPROVAL_STYLE_ID       )    ;
462       hr_utility.trace(' DATE_FROM    =       '|| p_blocks(l_index).DATE_FROM       )    ;
463       hr_utility.trace(' DATE_TO    =       '|| p_blocks(l_index).DATE_TO       )    ;
464       hr_utility.trace(' COMMENT_TEXT    =       '|| p_blocks(l_index).COMMENT_TEXT       )    ;
465       hr_utility.trace(' PARENT_BUILDING_BLOCK_OVN     =       '|| p_blocks(l_index).PARENT_BUILDING_BLOCK_OVN        )    ;
466       hr_utility.trace(' NEW    =       '|| p_blocks(l_index).NEW       )    ;
467       hr_utility.trace(' CHANGED    =       '|| p_blocks(l_index).CHANGED       )    ;
468       hr_utility.trace(' PROCESS    =       '|| p_blocks(l_index).PROCESS       )    ;
469       hr_utility.trace(' APPLICATION_SET_ID    =       '|| p_blocks(l_index).APPLICATION_SET_ID       )    ;
470       hr_utility.trace(' TRANSLATION_DISPLAY_KEY    =       '|| p_blocks(l_index).TRANSLATION_DISPLAY_KEY       )    ;
471       hr_utility.trace('------------------------------------------------------');
472 
473       l_index := p_blocks.NEXT (l_index);
474 
475       END LOOP;
476 
477         hr_utility.trace('  p_blocks TABLE END ');
478         hr_utility.trace(' *****************');
479 
480           end if;
481 
482      if (p_messages.count>0) then
483 
484 
485          hr_utility.trace('  P_MESSAGES TABLE START ');
486          hr_utility.trace(' *****************');
487 
488          l_index := p_messages.FIRST;
489 
490           LOOP
491             EXIT WHEN NOT p_messages.EXISTS (l_index);
492 
493 
494            hr_utility.trace(' MESSAGE_NAME        =   '|| p_messages(l_index).MESSAGE_NAME     );
495            hr_utility.trace(' MESSAGE_LEVEL =   '|| p_messages(l_index).MESSAGE_LEVEL )    ;
496            hr_utility.trace(' MESSAGE_FIELD =   '|| p_messages(l_index).MESSAGE_FIELD)    ;
497            hr_utility.trace(' MESSAGE_TOKENS     =       '|| p_messages(l_index).MESSAGE_TOKENS        )    ;
498            hr_utility.trace(' APPLICATION_SHORT_NAME     =       '|| p_messages(l_index).APPLICATION_SHORT_NAME        )    ;
499            hr_utility.trace(' TIME_BUILDING_BLOCK_ID      =       '|| p_messages(l_index).TIME_BUILDING_BLOCK_ID        )    ;
500            hr_utility.trace(' TIME_BUILDING_BLOCK_OVN  =       '|| p_messages(l_index).TIME_BUILDING_BLOCK_OVN        )    ;
501            hr_utility.trace(' TIME_ATTRIBUTE_ID     =       '|| p_messages(l_index).TIME_ATTRIBUTE_ID        )    ;
502            hr_utility.trace(' TIME_ATTRIBUTE_OVN     =       '|| p_messages(l_index).TIME_ATTRIBUTE_OVN        )    ;
503            hr_utility.trace(' MESSAGE_EXTENT     =       '|| p_messages(l_index).MESSAGE_EXTENT        )    ;
504 
505            l_index := p_messages.NEXT (l_index);
506 
507            END LOOP;
508 
509              hr_utility.trace('  p_messages TABLE END ');
510              hr_utility.trace(' *****************');
511 
512   end if;
513 
514      if (p_attributes.count>0) then
515 
516 
517     hr_utility.trace('  ATTRIBUTES TABLE START ');
518     hr_utility.trace(' *****************');
519 
520     l_index := p_attributes.FIRST;
521 
522      LOOP
523        EXIT WHEN NOT p_attributes.EXISTS (l_index);
524 
525 
526       hr_utility.trace(' TIME_ATTRIBUTE_ID =   '|| p_attributes(l_index).TIME_ATTRIBUTE_ID);
527       hr_utility.trace(' BUILDING_BLOCK_ID =   '|| p_attributes(l_index).BUILDING_BLOCK_ID )    ;
528       hr_utility.trace(' ATTRIBUTE_CATEGORY =   '|| p_attributes(l_index).ATTRIBUTE_CATEGORY)    ;
529       hr_utility.trace(' ATTRIBUTE1     =       '|| p_attributes(l_index).ATTRIBUTE1        )    ;
530       hr_utility.trace(' ATTRIBUTE2  (p_alias_definition_id)   =       '|| p_attributes(l_index).ATTRIBUTE2        )    ;
531       hr_utility.trace(' ATTRIBUTE3  (l_alias_value_id)    =       '|| p_attributes(l_index).ATTRIBUTE3        )    ;
532       hr_utility.trace(' ATTRIBUTE4  (p_alias_type)   =       '|| p_attributes(l_index).ATTRIBUTE4        )    ;
533       hr_utility.trace(' ATTRIBUTE5     =       '|| p_attributes(l_index).ATTRIBUTE5        )    ;
534       hr_utility.trace(' ATTRIBUTE6     =       '|| p_attributes(l_index).ATTRIBUTE6        )    ;
535       hr_utility.trace(' ATTRIBUTE7     =       '|| p_attributes(l_index).ATTRIBUTE7        )    ;
536       hr_utility.trace(' ATTRIBUTE8     =       '|| p_attributes(l_index).ATTRIBUTE8        )    ;
537       hr_utility.trace(' ATTRIBUTE9     =       '|| p_attributes(l_index).ATTRIBUTE9        )    ;
538       hr_utility.trace(' ATTRIBUTE10    =       '|| p_attributes(l_index).ATTRIBUTE10       )    ;
539       hr_utility.trace(' ATTRIBUTE11    =       '|| p_attributes(l_index).ATTRIBUTE11       )    ;
540       hr_utility.trace(' ATTRIBUTE12    =       '|| p_attributes(l_index).ATTRIBUTE12       )    ;
541       hr_utility.trace(' ATTRIBUTE13    =       '|| p_attributes(l_index).ATTRIBUTE13       )    ;
542       hr_utility.trace(' ATTRIBUTE14    =       '|| p_attributes(l_index).ATTRIBUTE14       )    ;
543       hr_utility.trace(' ATTRIBUTE15    =       '|| p_attributes(l_index).ATTRIBUTE15       )    ;
544       hr_utility.trace(' ATTRIBUTE16    =       '|| p_attributes(l_index).ATTRIBUTE16       )    ;
545       hr_utility.trace(' ATTRIBUTE17    =       '|| p_attributes(l_index).ATTRIBUTE17       )    ;
546       hr_utility.trace(' ATTRIBUTE18    =       '|| p_attributes(l_index).ATTRIBUTE18       )    ;
547       hr_utility.trace(' ATTRIBUTE19    =       '|| p_attributes(l_index).ATTRIBUTE19       )    ;
548       hr_utility.trace(' ATTRIBUTE20    =       '|| p_attributes(l_index).ATTRIBUTE20       )    ;
549       hr_utility.trace(' ATTRIBUTE21    =       '|| p_attributes(l_index).ATTRIBUTE21       )    ;
550       hr_utility.trace(' ATTRIBUTE22    =       '|| p_attributes(l_index).ATTRIBUTE22       )    ;
551       hr_utility.trace(' ATTRIBUTE23    =       '|| p_attributes(l_index).ATTRIBUTE23       )    ;
552       hr_utility.trace(' ATTRIBUTE24    =       '|| p_attributes(l_index).ATTRIBUTE24       )    ;
553       hr_utility.trace(' ATTRIBUTE25    =       '|| p_attributes(l_index).ATTRIBUTE25       )    ;
554       hr_utility.trace(' ATTRIBUTE26    =       '|| p_attributes(l_index).ATTRIBUTE26       )    ;
555       hr_utility.trace(' ATTRIBUTE27    =       '|| p_attributes(l_index).ATTRIBUTE27       )    ;
556       hr_utility.trace(' ATTRIBUTE28    =       '|| p_attributes(l_index).ATTRIBUTE28       )    ;
557       hr_utility.trace(' ATTRIBUTE29  (p_alias_ref_object)  =       '|| p_attributes(l_index).ATTRIBUTE29       )    ;
558       hr_utility.trace(' ATTRIBUTE30  (p_alias_value_name)  =       '|| p_attributes(l_index).ATTRIBUTE30       )    ;
559       hr_utility.trace(' BLD_BLK_INFO_TYPE_ID = '|| p_attributes(l_index).BLD_BLK_INFO_TYPE_ID  );
560       hr_utility.trace(' OBJECT_VERSION_NUMBER = '|| p_attributes(l_index).OBJECT_VERSION_NUMBER );
561       hr_utility.trace(' NEW             =       '|| p_attributes(l_index).NEW                   );
562       hr_utility.trace(' CHANGED              =  '|| p_attributes(l_index).CHANGED               );
563       hr_utility.trace(' BLD_BLK_INFO_TYPE    =  '|| p_attributes(l_index).BLD_BLK_INFO_TYPE     );
564       hr_utility.trace(' PROCESS              =  '|| p_attributes(l_index).PROCESS               );
565       hr_utility.trace(' BUILDING_BLOCK_OVN   =  '|| p_attributes(l_index).BUILDING_BLOCK_OVN    );
566       hr_utility.trace('------------------------------------------------------');
567 
568       l_index := p_attributes.NEXT (l_index);
569 
570       END LOOP;
571 
572         hr_utility.trace('  ATTRIBUTES TABLE END ');
573         hr_utility.trace(' *****************');
574 
575           end if;
576 
577 
578 
579 end if;
580 
581 
582 
583 hxc_timecard_message_helper.processerrors
584     (p_messages => p_messages);
585 
586 
587   HXC_RETRIEVE_ABSENCES.verify_view_only_absences
588                   ( p_blocks => p_blocks,
589                     p_attributes => p_attributes,
590                     p_lock_rowid => HXC_RETRIEVE_ABSENCES.g_lock_row_id,
591                     p_messages => p_messages
592                  );
593 
594 
595 -- change end
596 
597 
598 
599 
600 if g_debug then
601 
602  hr_utility.trace('Just after verify_view_only_absences in hxctksave');
603  if (p_blocks.count>0) then
604 
605 
606     hr_utility.trace('  P_BLOCK TABLE START ');
607     hr_utility.trace(' *****************');
608 
609     l_index := p_blocks.FIRST;
610 
611      LOOP
612        EXIT WHEN NOT p_blocks.EXISTS (l_index);
613 
614 
615       hr_utility.trace(' TIME_BUILDING_BLOCK_ID      =   '|| p_blocks(l_index).TIME_BUILDING_BLOCK_ID     );
616       hr_utility.trace(' TYPE =   '|| p_blocks(l_index).TYPE )    ;
617       hr_utility.trace(' MEASURE =   '|| p_blocks(l_index).MEASURE)    ;
618       hr_utility.trace(' UNIT_OF_MEASURE     =       '|| p_blocks(l_index).UNIT_OF_MEASURE        )    ;
619       hr_utility.trace(' START_TIME     =       '|| p_blocks(l_index).START_TIME        )    ;
620       hr_utility.trace(' STOP_TIME      =       '|| p_blocks(l_index).STOP_TIME        )    ;
621       hr_utility.trace(' PARENT_BUILDING_BLOCK_ID  =       '|| p_blocks(l_index).PARENT_BUILDING_BLOCK_ID        )    ;
622       hr_utility.trace(' PARENT_IS_NEW     =       '|| p_blocks(l_index).PARENT_IS_NEW        )    ;
623       hr_utility.trace(' SCOPE     =       '|| p_blocks(l_index).SCOPE        )    ;
624       hr_utility.trace(' OBJECT_VERSION_NUMBER     =       '|| p_blocks(l_index).OBJECT_VERSION_NUMBER        )    ;
625       hr_utility.trace(' APPROVAL_STATUS     =       '|| p_blocks(l_index).APPROVAL_STATUS        )    ;
626       hr_utility.trace(' RESOURCE_ID     =       '|| p_blocks(l_index).RESOURCE_ID        )    ;
627       hr_utility.trace(' RESOURCE_TYPE    =       '|| p_blocks(l_index).RESOURCE_TYPE       )    ;
628       hr_utility.trace(' APPROVAL_STYLE_ID    =       '|| p_blocks(l_index).APPROVAL_STYLE_ID       )    ;
629       hr_utility.trace(' DATE_FROM    =       '|| p_blocks(l_index).DATE_FROM       )    ;
630       hr_utility.trace(' DATE_TO    =       '|| p_blocks(l_index).DATE_TO       )    ;
631       hr_utility.trace(' COMMENT_TEXT    =       '|| p_blocks(l_index).COMMENT_TEXT       )    ;
632       hr_utility.trace(' PARENT_BUILDING_BLOCK_OVN     =       '|| p_blocks(l_index).PARENT_BUILDING_BLOCK_OVN        )    ;
633       hr_utility.trace(' NEW    =       '|| p_blocks(l_index).NEW       )    ;
634       hr_utility.trace(' CHANGED    =       '|| p_blocks(l_index).CHANGED       )    ;
635       hr_utility.trace(' PROCESS    =       '|| p_blocks(l_index).PROCESS       )    ;
636       hr_utility.trace(' APPLICATION_SET_ID    =       '|| p_blocks(l_index).APPLICATION_SET_ID       )    ;
637       hr_utility.trace(' TRANSLATION_DISPLAY_KEY    =       '|| p_blocks(l_index).TRANSLATION_DISPLAY_KEY       )    ;
638       hr_utility.trace('------------------------------------------------------');
639 
640       l_index := p_blocks.NEXT (l_index);
641 
642       END LOOP;
643 
644         hr_utility.trace('  p_blocks TABLE END ');
645         hr_utility.trace(' *****************');
646 
647     end if;
648 
649 
650   if (p_messages.count>0) then
651 
652 
653     hr_utility.trace('  P_MESSAGES TABLE START ');
654     hr_utility.trace(' *****************');
655 
656     l_index := p_messages.FIRST;
657 
658      LOOP
659        EXIT WHEN NOT p_messages.EXISTS (l_index);
660 
661 
662       hr_utility.trace(' MESSAGE_NAME        =   '|| p_messages(l_index).MESSAGE_NAME     );
663       hr_utility.trace(' MESSAGE_LEVEL =   '|| p_messages(l_index).MESSAGE_LEVEL )    ;
664       hr_utility.trace(' MESSAGE_FIELD =   '|| p_messages(l_index).MESSAGE_FIELD)    ;
665       hr_utility.trace(' MESSAGE_TOKENS     =       '|| p_messages(l_index).MESSAGE_TOKENS        )    ;
666       hr_utility.trace(' APPLICATION_SHORT_NAME     =       '|| p_messages(l_index).APPLICATION_SHORT_NAME        )    ;
667       hr_utility.trace(' TIME_BUILDING_BLOCK_ID      =       '|| p_messages(l_index).TIME_BUILDING_BLOCK_ID        )    ;
668       hr_utility.trace(' TIME_BUILDING_BLOCK_OVN  =       '|| p_messages(l_index).TIME_BUILDING_BLOCK_OVN        )    ;
669       hr_utility.trace(' TIME_ATTRIBUTE_ID     =       '|| p_messages(l_index).TIME_ATTRIBUTE_ID        )    ;
670       hr_utility.trace(' TIME_ATTRIBUTE_OVN     =       '|| p_messages(l_index).TIME_ATTRIBUTE_OVN        )    ;
671       hr_utility.trace(' MESSAGE_EXTENT     =       '|| p_messages(l_index).MESSAGE_EXTENT        )    ;
672 
673       l_index := p_messages.NEXT (l_index);
674 
675       END LOOP;
676 
677         hr_utility.trace('  p_messages TABLE END ');
678         hr_utility.trace(' *****************');
679 
680   end if;
681 
682 
683      if (p_attributes.count>0) then
684 
685 
686     hr_utility.trace('  ATTRIBUTES TABLE START ');
687     hr_utility.trace(' *****************');
688 
689     l_index := p_attributes.FIRST;
690 
691      LOOP
692        EXIT WHEN NOT p_attributes.EXISTS (l_index);
693 
694 
695       hr_utility.trace(' TIME_ATTRIBUTE_ID =   '|| p_attributes(l_index).TIME_ATTRIBUTE_ID);
696       hr_utility.trace(' BUILDING_BLOCK_ID =   '|| p_attributes(l_index).BUILDING_BLOCK_ID )    ;
697       hr_utility.trace(' ATTRIBUTE_CATEGORY =   '|| p_attributes(l_index).ATTRIBUTE_CATEGORY)    ;
698       hr_utility.trace(' ATTRIBUTE1     =       '|| p_attributes(l_index).ATTRIBUTE1        )    ;
699       hr_utility.trace(' ATTRIBUTE2  (p_alias_definition_id)   =       '|| p_attributes(l_index).ATTRIBUTE2        )    ;
700       hr_utility.trace(' ATTRIBUTE3  (l_alias_value_id)    =       '|| p_attributes(l_index).ATTRIBUTE3        )    ;
701       hr_utility.trace(' ATTRIBUTE4  (p_alias_type)   =       '|| p_attributes(l_index).ATTRIBUTE4        )    ;
702       hr_utility.trace(' ATTRIBUTE5     =       '|| p_attributes(l_index).ATTRIBUTE5        )    ;
703       hr_utility.trace(' ATTRIBUTE6     =       '|| p_attributes(l_index).ATTRIBUTE6        )    ;
704       hr_utility.trace(' ATTRIBUTE7     =       '|| p_attributes(l_index).ATTRIBUTE7        )    ;
705       hr_utility.trace(' ATTRIBUTE8     =       '|| p_attributes(l_index).ATTRIBUTE8        )    ;
706       hr_utility.trace(' ATTRIBUTE9     =       '|| p_attributes(l_index).ATTRIBUTE9        )    ;
707       hr_utility.trace(' ATTRIBUTE10    =       '|| p_attributes(l_index).ATTRIBUTE10       )    ;
708       hr_utility.trace(' ATTRIBUTE11    =       '|| p_attributes(l_index).ATTRIBUTE11       )    ;
709       hr_utility.trace(' ATTRIBUTE12    =       '|| p_attributes(l_index).ATTRIBUTE12       )    ;
710       hr_utility.trace(' ATTRIBUTE13    =       '|| p_attributes(l_index).ATTRIBUTE13       )    ;
711       hr_utility.trace(' ATTRIBUTE14    =       '|| p_attributes(l_index).ATTRIBUTE14       )    ;
712       hr_utility.trace(' ATTRIBUTE15    =       '|| p_attributes(l_index).ATTRIBUTE15       )    ;
713       hr_utility.trace(' ATTRIBUTE16    =       '|| p_attributes(l_index).ATTRIBUTE16       )    ;
714       hr_utility.trace(' ATTRIBUTE17    =       '|| p_attributes(l_index).ATTRIBUTE17       )    ;
715       hr_utility.trace(' ATTRIBUTE18    =       '|| p_attributes(l_index).ATTRIBUTE18       )    ;
716       hr_utility.trace(' ATTRIBUTE19    =       '|| p_attributes(l_index).ATTRIBUTE19       )    ;
717       hr_utility.trace(' ATTRIBUTE20    =       '|| p_attributes(l_index).ATTRIBUTE20       )    ;
718       hr_utility.trace(' ATTRIBUTE21    =       '|| p_attributes(l_index).ATTRIBUTE21       )    ;
719       hr_utility.trace(' ATTRIBUTE22    =       '|| p_attributes(l_index).ATTRIBUTE22       )    ;
720       hr_utility.trace(' ATTRIBUTE23    =       '|| p_attributes(l_index).ATTRIBUTE23       )    ;
721       hr_utility.trace(' ATTRIBUTE24    =       '|| p_attributes(l_index).ATTRIBUTE24       )    ;
722       hr_utility.trace(' ATTRIBUTE25    =       '|| p_attributes(l_index).ATTRIBUTE25       )    ;
723       hr_utility.trace(' ATTRIBUTE26    =       '|| p_attributes(l_index).ATTRIBUTE26       )    ;
724       hr_utility.trace(' ATTRIBUTE27    =       '|| p_attributes(l_index).ATTRIBUTE27       )    ;
725       hr_utility.trace(' ATTRIBUTE28    =       '|| p_attributes(l_index).ATTRIBUTE28       )    ;
726       hr_utility.trace(' ATTRIBUTE29  (p_alias_ref_object)  =       '|| p_attributes(l_index).ATTRIBUTE29       )    ;
727       hr_utility.trace(' ATTRIBUTE30  (p_alias_value_name)  =       '|| p_attributes(l_index).ATTRIBUTE30       )    ;
728       hr_utility.trace(' BLD_BLK_INFO_TYPE_ID = '|| p_attributes(l_index).BLD_BLK_INFO_TYPE_ID  );
729       hr_utility.trace(' OBJECT_VERSION_NUMBER = '|| p_attributes(l_index).OBJECT_VERSION_NUMBER );
730       hr_utility.trace(' NEW             =       '|| p_attributes(l_index).NEW                   );
731       hr_utility.trace(' CHANGED              =  '|| p_attributes(l_index).CHANGED               );
732       hr_utility.trace(' BLD_BLK_INFO_TYPE    =  '|| p_attributes(l_index).BLD_BLK_INFO_TYPE     );
733       hr_utility.trace(' PROCESS              =  '|| p_attributes(l_index).PROCESS               );
734       hr_utility.trace(' BUILDING_BLOCK_OVN   =  '|| p_attributes(l_index).BUILDING_BLOCK_OVN    );
735       hr_utility.trace('------------------------------------------------------');
736 
737       l_index := p_attributes.NEXT (l_index);
738 
739       END LOOP;
740 
741         hr_utility.trace('  ATTRIBUTES TABLE END ');
742         hr_utility.trace(' *****************');
743 
744           end if;
745 
746 
747 
748 end if;
749 
750 
751 -- Added for Bug 10326049
752 -- OTL - Projects Payroll Integration
753 
754 if g_debug then
755 
756  hr_utility.trace('Just before hxc_proj_pay_dep_validation.verify_proj_pay_setup in hxctksave');
757  if (p_blocks.count>0) then
758 
759 
760     hr_utility.trace('  P_BLOCK TABLE START ');
761     hr_utility.trace(' *****************');
762 
763     l_index := p_blocks.FIRST;
764 
765      LOOP
766        EXIT WHEN NOT p_blocks.EXISTS (l_index);
767 
768 
769       hr_utility.trace(' TIME_BUILDING_BLOCK_ID      =   '|| p_blocks(l_index).TIME_BUILDING_BLOCK_ID     );
770       hr_utility.trace(' TYPE =   '|| p_blocks(l_index).TYPE )    ;
771       hr_utility.trace(' MEASURE =   '|| p_blocks(l_index).MEASURE)    ;
772       hr_utility.trace(' UNIT_OF_MEASURE     =       '|| p_blocks(l_index).UNIT_OF_MEASURE        )    ;
773       hr_utility.trace(' START_TIME     =       '|| p_blocks(l_index).START_TIME        )    ;
774       hr_utility.trace(' STOP_TIME      =       '|| p_blocks(l_index).STOP_TIME        )    ;
775       hr_utility.trace(' PARENT_BUILDING_BLOCK_ID  =       '|| p_blocks(l_index).PARENT_BUILDING_BLOCK_ID        )    ;
776       hr_utility.trace(' PARENT_IS_NEW     =       '|| p_blocks(l_index).PARENT_IS_NEW        )    ;
777       hr_utility.trace(' SCOPE     =       '|| p_blocks(l_index).SCOPE        )    ;
778       hr_utility.trace(' OBJECT_VERSION_NUMBER     =       '|| p_blocks(l_index).OBJECT_VERSION_NUMBER        )    ;
779       hr_utility.trace(' APPROVAL_STATUS     =       '|| p_blocks(l_index).APPROVAL_STATUS        )    ;
780       hr_utility.trace(' RESOURCE_ID     =       '|| p_blocks(l_index).RESOURCE_ID        )    ;
781       hr_utility.trace(' RESOURCE_TYPE    =       '|| p_blocks(l_index).RESOURCE_TYPE       )    ;
782       hr_utility.trace(' APPROVAL_STYLE_ID    =       '|| p_blocks(l_index).APPROVAL_STYLE_ID       )    ;
783       hr_utility.trace(' DATE_FROM    =       '|| p_blocks(l_index).DATE_FROM       )    ;
784       hr_utility.trace(' DATE_TO    =       '|| p_blocks(l_index).DATE_TO       )    ;
785       hr_utility.trace(' COMMENT_TEXT    =       '|| p_blocks(l_index).COMMENT_TEXT       )    ;
786       hr_utility.trace(' PARENT_BUILDING_BLOCK_OVN     =       '|| p_blocks(l_index).PARENT_BUILDING_BLOCK_OVN        )    ;
787       hr_utility.trace(' NEW    =       '|| p_blocks(l_index).NEW       )    ;
788       hr_utility.trace(' CHANGED    =       '|| p_blocks(l_index).CHANGED       )    ;
789       hr_utility.trace(' PROCESS    =       '|| p_blocks(l_index).PROCESS       )    ;
790       hr_utility.trace(' APPLICATION_SET_ID    =       '|| p_blocks(l_index).APPLICATION_SET_ID       )    ;
791       hr_utility.trace(' TRANSLATION_DISPLAY_KEY    =       '|| p_blocks(l_index).TRANSLATION_DISPLAY_KEY       )    ;
792       hr_utility.trace('------------------------------------------------------');
793 
794       l_index := p_blocks.NEXT (l_index);
795 
796       END LOOP;
797 
798         hr_utility.trace('  p_blocks TABLE END ');
799         hr_utility.trace(' *****************');
800 
801           end if;
802 
803      if (p_messages.count>0) then
804 
805 
806          hr_utility.trace('  P_MESSAGES TABLE START ');
807          hr_utility.trace(' *****************');
808 
809          l_index := p_messages.FIRST;
810 
811           LOOP
812             EXIT WHEN NOT p_messages.EXISTS (l_index);
813 
814 
815            hr_utility.trace(' MESSAGE_NAME        =   '|| p_messages(l_index).MESSAGE_NAME     );
816            hr_utility.trace(' MESSAGE_LEVEL =   '|| p_messages(l_index).MESSAGE_LEVEL )    ;
817            hr_utility.trace(' MESSAGE_FIELD =   '|| p_messages(l_index).MESSAGE_FIELD)    ;
818            hr_utility.trace(' MESSAGE_TOKENS     =       '|| p_messages(l_index).MESSAGE_TOKENS        )    ;
819            hr_utility.trace(' APPLICATION_SHORT_NAME     =       '|| p_messages(l_index).APPLICATION_SHORT_NAME        )    ;
820            hr_utility.trace(' TIME_BUILDING_BLOCK_ID      =       '|| p_messages(l_index).TIME_BUILDING_BLOCK_ID        )    ;
821            hr_utility.trace(' TIME_BUILDING_BLOCK_OVN  =       '|| p_messages(l_index).TIME_BUILDING_BLOCK_OVN        )    ;
822            hr_utility.trace(' TIME_ATTRIBUTE_ID     =       '|| p_messages(l_index).TIME_ATTRIBUTE_ID        )    ;
823            hr_utility.trace(' TIME_ATTRIBUTE_OVN     =       '|| p_messages(l_index).TIME_ATTRIBUTE_OVN        )    ;
824            hr_utility.trace(' MESSAGE_EXTENT     =       '|| p_messages(l_index).MESSAGE_EXTENT        )    ;
825 
826            l_index := p_messages.NEXT (l_index);
827 
828            END LOOP;
829 
830              hr_utility.trace('  p_messages TABLE END ');
831              hr_utility.trace(' *****************');
832 
833   end if;
834 
835      if (p_attributes.count>0) then
836 
837 
838     hr_utility.trace('  ATTRIBUTES TABLE START ');
839     hr_utility.trace(' *****************');
840 
841     l_index := p_attributes.FIRST;
842 
843      LOOP
844        EXIT WHEN NOT p_attributes.EXISTS (l_index);
845 
846 
847       hr_utility.trace(' TIME_ATTRIBUTE_ID =   '|| p_attributes(l_index).TIME_ATTRIBUTE_ID);
848       hr_utility.trace(' BUILDING_BLOCK_ID =   '|| p_attributes(l_index).BUILDING_BLOCK_ID )    ;
849       hr_utility.trace(' ATTRIBUTE_CATEGORY =   '|| p_attributes(l_index).ATTRIBUTE_CATEGORY)    ;
850       hr_utility.trace(' ATTRIBUTE1     =       '|| p_attributes(l_index).ATTRIBUTE1        )    ;
851       hr_utility.trace(' ATTRIBUTE2  (p_alias_definition_id)   =       '|| p_attributes(l_index).ATTRIBUTE2        )    ;
852       hr_utility.trace(' ATTRIBUTE3  (l_alias_value_id)    =       '|| p_attributes(l_index).ATTRIBUTE3        )    ;
853       hr_utility.trace(' ATTRIBUTE4  (p_alias_type)   =       '|| p_attributes(l_index).ATTRIBUTE4        )    ;
854       hr_utility.trace(' ATTRIBUTE5     =       '|| p_attributes(l_index).ATTRIBUTE5        )    ;
855       hr_utility.trace(' ATTRIBUTE6     =       '|| p_attributes(l_index).ATTRIBUTE6        )    ;
856       hr_utility.trace(' ATTRIBUTE7     =       '|| p_attributes(l_index).ATTRIBUTE7        )    ;
857       hr_utility.trace(' ATTRIBUTE8     =       '|| p_attributes(l_index).ATTRIBUTE8        )    ;
858       hr_utility.trace(' ATTRIBUTE9     =       '|| p_attributes(l_index).ATTRIBUTE9        )    ;
859       hr_utility.trace(' ATTRIBUTE10    =       '|| p_attributes(l_index).ATTRIBUTE10       )    ;
860       hr_utility.trace(' ATTRIBUTE11    =       '|| p_attributes(l_index).ATTRIBUTE11       )    ;
861       hr_utility.trace(' ATTRIBUTE12    =       '|| p_attributes(l_index).ATTRIBUTE12       )    ;
862       hr_utility.trace(' ATTRIBUTE13    =       '|| p_attributes(l_index).ATTRIBUTE13       )    ;
863       hr_utility.trace(' ATTRIBUTE14    =       '|| p_attributes(l_index).ATTRIBUTE14       )    ;
864       hr_utility.trace(' ATTRIBUTE15    =       '|| p_attributes(l_index).ATTRIBUTE15       )    ;
865       hr_utility.trace(' ATTRIBUTE16    =       '|| p_attributes(l_index).ATTRIBUTE16       )    ;
866       hr_utility.trace(' ATTRIBUTE17    =       '|| p_attributes(l_index).ATTRIBUTE17       )    ;
867       hr_utility.trace(' ATTRIBUTE18    =       '|| p_attributes(l_index).ATTRIBUTE18       )    ;
868       hr_utility.trace(' ATTRIBUTE19    =       '|| p_attributes(l_index).ATTRIBUTE19       )    ;
869       hr_utility.trace(' ATTRIBUTE20    =       '|| p_attributes(l_index).ATTRIBUTE20       )    ;
870       hr_utility.trace(' ATTRIBUTE21    =       '|| p_attributes(l_index).ATTRIBUTE21       )    ;
871       hr_utility.trace(' ATTRIBUTE22    =       '|| p_attributes(l_index).ATTRIBUTE22       )    ;
872       hr_utility.trace(' ATTRIBUTE23    =       '|| p_attributes(l_index).ATTRIBUTE23       )    ;
873       hr_utility.trace(' ATTRIBUTE24    =       '|| p_attributes(l_index).ATTRIBUTE24       )    ;
874       hr_utility.trace(' ATTRIBUTE25    =       '|| p_attributes(l_index).ATTRIBUTE25       )    ;
875       hr_utility.trace(' ATTRIBUTE26    =       '|| p_attributes(l_index).ATTRIBUTE26       )    ;
876       hr_utility.trace(' ATTRIBUTE27    =       '|| p_attributes(l_index).ATTRIBUTE27       )    ;
877       hr_utility.trace(' ATTRIBUTE28    =       '|| p_attributes(l_index).ATTRIBUTE28       )    ;
878       hr_utility.trace(' ATTRIBUTE29  (p_alias_ref_object)  =       '|| p_attributes(l_index).ATTRIBUTE29       )    ;
879       hr_utility.trace(' ATTRIBUTE30  (p_alias_value_name)  =       '|| p_attributes(l_index).ATTRIBUTE30       )    ;
880       hr_utility.trace(' BLD_BLK_INFO_TYPE_ID = '|| p_attributes(l_index).BLD_BLK_INFO_TYPE_ID  );
881       hr_utility.trace(' OBJECT_VERSION_NUMBER = '|| p_attributes(l_index).OBJECT_VERSION_NUMBER );
882       hr_utility.trace(' NEW             =       '|| p_attributes(l_index).NEW                   );
883       hr_utility.trace(' CHANGED              =  '|| p_attributes(l_index).CHANGED               );
884       hr_utility.trace(' BLD_BLK_INFO_TYPE    =  '|| p_attributes(l_index).BLD_BLK_INFO_TYPE     );
885       hr_utility.trace(' PROCESS              =  '|| p_attributes(l_index).PROCESS               );
886       hr_utility.trace(' BUILDING_BLOCK_OVN   =  '|| p_attributes(l_index).BUILDING_BLOCK_OVN    );
887       hr_utility.trace('------------------------------------------------------');
888 
889       l_index := p_attributes.NEXT (l_index);
890 
891       END LOOP;
892 
893         hr_utility.trace('  ATTRIBUTES TABLE END ');
894         hr_utility.trace(' *****************');
895 
896           end if;
897 
898 
899 
900 end if;
901 
902 
903 
904 hxc_timecard_message_helper.processerrors
905     (p_messages => p_messages);
906 
907 
908 IF g_debug THEN
909   hr_utility.trace('PA-PAY> In hxc_timekeeper.save_timecard');
910   hr_utility.trace('PA-PAY> calling hxc_proj_pay_dep_validation.verify_proj_pay_setup');
911 END IF;
912 
913 hxc_proj_pay_dep_validation.verify_proj_pay_setup
914 			   (p_blocks => p_blocks,
915 			    p_attributes => p_attributes,
916 			    p_messages => p_messages);
917 
918 
919 if g_debug then
920 
921  hr_utility.trace('Just after hxc_proj_pay_dep_validation.verify_proj_pay_setup in hxctksave');
922  if (p_blocks.count>0) then
923 
924 
925     hr_utility.trace('  P_BLOCK TABLE START ');
926     hr_utility.trace(' *****************');
927 
928     l_index := p_blocks.FIRST;
929 
930      LOOP
931        EXIT WHEN NOT p_blocks.EXISTS (l_index);
932 
933 
934       hr_utility.trace(' TIME_BUILDING_BLOCK_ID      =   '|| p_blocks(l_index).TIME_BUILDING_BLOCK_ID     );
935       hr_utility.trace(' TYPE =   '|| p_blocks(l_index).TYPE )    ;
936       hr_utility.trace(' MEASURE =   '|| p_blocks(l_index).MEASURE)    ;
937       hr_utility.trace(' UNIT_OF_MEASURE     =       '|| p_blocks(l_index).UNIT_OF_MEASURE        )    ;
938       hr_utility.trace(' START_TIME     =       '|| p_blocks(l_index).START_TIME        )    ;
939       hr_utility.trace(' STOP_TIME      =       '|| p_blocks(l_index).STOP_TIME        )    ;
940       hr_utility.trace(' PARENT_BUILDING_BLOCK_ID  =       '|| p_blocks(l_index).PARENT_BUILDING_BLOCK_ID        )    ;
941       hr_utility.trace(' PARENT_IS_NEW     =       '|| p_blocks(l_index).PARENT_IS_NEW        )    ;
942       hr_utility.trace(' SCOPE     =       '|| p_blocks(l_index).SCOPE        )    ;
943       hr_utility.trace(' OBJECT_VERSION_NUMBER     =       '|| p_blocks(l_index).OBJECT_VERSION_NUMBER        )    ;
944       hr_utility.trace(' APPROVAL_STATUS     =       '|| p_blocks(l_index).APPROVAL_STATUS        )    ;
945       hr_utility.trace(' RESOURCE_ID     =       '|| p_blocks(l_index).RESOURCE_ID        )    ;
946       hr_utility.trace(' RESOURCE_TYPE    =       '|| p_blocks(l_index).RESOURCE_TYPE       )    ;
947       hr_utility.trace(' APPROVAL_STYLE_ID    =       '|| p_blocks(l_index).APPROVAL_STYLE_ID       )    ;
948       hr_utility.trace(' DATE_FROM    =       '|| p_blocks(l_index).DATE_FROM       )    ;
949       hr_utility.trace(' DATE_TO    =       '|| p_blocks(l_index).DATE_TO       )    ;
950       hr_utility.trace(' COMMENT_TEXT    =       '|| p_blocks(l_index).COMMENT_TEXT       )    ;
951       hr_utility.trace(' PARENT_BUILDING_BLOCK_OVN     =       '|| p_blocks(l_index).PARENT_BUILDING_BLOCK_OVN        )    ;
952       hr_utility.trace(' NEW    =       '|| p_blocks(l_index).NEW       )    ;
953       hr_utility.trace(' CHANGED    =       '|| p_blocks(l_index).CHANGED       )    ;
954       hr_utility.trace(' PROCESS    =       '|| p_blocks(l_index).PROCESS       )    ;
955       hr_utility.trace(' APPLICATION_SET_ID    =       '|| p_blocks(l_index).APPLICATION_SET_ID       )    ;
956       hr_utility.trace(' TRANSLATION_DISPLAY_KEY    =       '|| p_blocks(l_index).TRANSLATION_DISPLAY_KEY       )    ;
957       hr_utility.trace('------------------------------------------------------');
958 
959       l_index := p_blocks.NEXT (l_index);
960 
961       END LOOP;
962 
963         hr_utility.trace('  p_blocks TABLE END ');
964         hr_utility.trace(' *****************');
965 
966     end if;
967 
968 
969   if (p_messages.count>0) then
970 
971 
972     hr_utility.trace('  P_MESSAGES TABLE START ');
973     hr_utility.trace(' *****************');
974 
975     l_index := p_messages.FIRST;
976 
977      LOOP
978        EXIT WHEN NOT p_messages.EXISTS (l_index);
979 
980 
981       hr_utility.trace(' MESSAGE_NAME        =   '|| p_messages(l_index).MESSAGE_NAME     );
982       hr_utility.trace(' MESSAGE_LEVEL =   '|| p_messages(l_index).MESSAGE_LEVEL )    ;
983       hr_utility.trace(' MESSAGE_FIELD =   '|| p_messages(l_index).MESSAGE_FIELD)    ;
984       hr_utility.trace(' MESSAGE_TOKENS     =       '|| p_messages(l_index).MESSAGE_TOKENS        )    ;
985       hr_utility.trace(' APPLICATION_SHORT_NAME     =       '|| p_messages(l_index).APPLICATION_SHORT_NAME        )    ;
986       hr_utility.trace(' TIME_BUILDING_BLOCK_ID      =       '|| p_messages(l_index).TIME_BUILDING_BLOCK_ID        )    ;
987       hr_utility.trace(' TIME_BUILDING_BLOCK_OVN  =       '|| p_messages(l_index).TIME_BUILDING_BLOCK_OVN        )    ;
988       hr_utility.trace(' TIME_ATTRIBUTE_ID     =       '|| p_messages(l_index).TIME_ATTRIBUTE_ID        )    ;
989       hr_utility.trace(' TIME_ATTRIBUTE_OVN     =       '|| p_messages(l_index).TIME_ATTRIBUTE_OVN        )    ;
990       hr_utility.trace(' MESSAGE_EXTENT     =       '|| p_messages(l_index).MESSAGE_EXTENT        )    ;
991 
992       l_index := p_messages.NEXT (l_index);
993 
994       END LOOP;
995 
996         hr_utility.trace('  p_messages TABLE END ');
997         hr_utility.trace(' *****************');
998 
999   end if;
1000 
1001 
1002      if (p_attributes.count>0) then
1003 
1004 
1005     hr_utility.trace('  ATTRIBUTES TABLE START ');
1006     hr_utility.trace(' *****************');
1007 
1008     l_index := p_attributes.FIRST;
1009 
1010      LOOP
1011        EXIT WHEN NOT p_attributes.EXISTS (l_index);
1012 
1013 
1014       hr_utility.trace(' TIME_ATTRIBUTE_ID =   '|| p_attributes(l_index).TIME_ATTRIBUTE_ID);
1015       hr_utility.trace(' BUILDING_BLOCK_ID =   '|| p_attributes(l_index).BUILDING_BLOCK_ID )    ;
1016       hr_utility.trace(' ATTRIBUTE_CATEGORY =   '|| p_attributes(l_index).ATTRIBUTE_CATEGORY)    ;
1017       hr_utility.trace(' ATTRIBUTE1     =       '|| p_attributes(l_index).ATTRIBUTE1        )    ;
1018       hr_utility.trace(' ATTRIBUTE2  (p_alias_definition_id)   =       '|| p_attributes(l_index).ATTRIBUTE2        )    ;
1019       hr_utility.trace(' ATTRIBUTE3  (l_alias_value_id)    =       '|| p_attributes(l_index).ATTRIBUTE3        )    ;
1020       hr_utility.trace(' ATTRIBUTE4  (p_alias_type)   =       '|| p_attributes(l_index).ATTRIBUTE4        )    ;
1021       hr_utility.trace(' ATTRIBUTE5     =       '|| p_attributes(l_index).ATTRIBUTE5        )    ;
1022       hr_utility.trace(' ATTRIBUTE6     =       '|| p_attributes(l_index).ATTRIBUTE6        )    ;
1023       hr_utility.trace(' ATTRIBUTE7     =       '|| p_attributes(l_index).ATTRIBUTE7        )    ;
1024       hr_utility.trace(' ATTRIBUTE8     =       '|| p_attributes(l_index).ATTRIBUTE8        )    ;
1025       hr_utility.trace(' ATTRIBUTE9     =       '|| p_attributes(l_index).ATTRIBUTE9        )    ;
1026       hr_utility.trace(' ATTRIBUTE10    =       '|| p_attributes(l_index).ATTRIBUTE10       )    ;
1027       hr_utility.trace(' ATTRIBUTE11    =       '|| p_attributes(l_index).ATTRIBUTE11       )    ;
1028       hr_utility.trace(' ATTRIBUTE12    =       '|| p_attributes(l_index).ATTRIBUTE12       )    ;
1029       hr_utility.trace(' ATTRIBUTE13    =       '|| p_attributes(l_index).ATTRIBUTE13       )    ;
1030       hr_utility.trace(' ATTRIBUTE14    =       '|| p_attributes(l_index).ATTRIBUTE14       )    ;
1031       hr_utility.trace(' ATTRIBUTE15    =       '|| p_attributes(l_index).ATTRIBUTE15       )    ;
1032       hr_utility.trace(' ATTRIBUTE16    =       '|| p_attributes(l_index).ATTRIBUTE16       )    ;
1033       hr_utility.trace(' ATTRIBUTE17    =       '|| p_attributes(l_index).ATTRIBUTE17       )    ;
1034       hr_utility.trace(' ATTRIBUTE18    =       '|| p_attributes(l_index).ATTRIBUTE18       )    ;
1035       hr_utility.trace(' ATTRIBUTE19    =       '|| p_attributes(l_index).ATTRIBUTE19       )    ;
1036       hr_utility.trace(' ATTRIBUTE20    =       '|| p_attributes(l_index).ATTRIBUTE20       )    ;
1037       hr_utility.trace(' ATTRIBUTE21    =       '|| p_attributes(l_index).ATTRIBUTE21       )    ;
1038       hr_utility.trace(' ATTRIBUTE22    =       '|| p_attributes(l_index).ATTRIBUTE22       )    ;
1039       hr_utility.trace(' ATTRIBUTE23    =       '|| p_attributes(l_index).ATTRIBUTE23       )    ;
1040       hr_utility.trace(' ATTRIBUTE24    =       '|| p_attributes(l_index).ATTRIBUTE24       )    ;
1041       hr_utility.trace(' ATTRIBUTE25    =       '|| p_attributes(l_index).ATTRIBUTE25       )    ;
1042       hr_utility.trace(' ATTRIBUTE26    =       '|| p_attributes(l_index).ATTRIBUTE26       )    ;
1043       hr_utility.trace(' ATTRIBUTE27    =       '|| p_attributes(l_index).ATTRIBUTE27       )    ;
1044       hr_utility.trace(' ATTRIBUTE28    =       '|| p_attributes(l_index).ATTRIBUTE28       )    ;
1045       hr_utility.trace(' ATTRIBUTE29  (p_alias_ref_object)  =       '|| p_attributes(l_index).ATTRIBUTE29       )    ;
1046       hr_utility.trace(' ATTRIBUTE30  (p_alias_value_name)  =       '|| p_attributes(l_index).ATTRIBUTE30       )    ;
1047       hr_utility.trace(' BLD_BLK_INFO_TYPE_ID = '|| p_attributes(l_index).BLD_BLK_INFO_TYPE_ID  );
1048       hr_utility.trace(' OBJECT_VERSION_NUMBER = '|| p_attributes(l_index).OBJECT_VERSION_NUMBER );
1049       hr_utility.trace(' NEW             =       '|| p_attributes(l_index).NEW                   );
1050       hr_utility.trace(' CHANGED              =  '|| p_attributes(l_index).CHANGED               );
1051       hr_utility.trace(' BLD_BLK_INFO_TYPE    =  '|| p_attributes(l_index).BLD_BLK_INFO_TYPE     );
1052       hr_utility.trace(' PROCESS              =  '|| p_attributes(l_index).PROCESS               );
1053       hr_utility.trace(' BUILDING_BLOCK_OVN   =  '|| p_attributes(l_index).BUILDING_BLOCK_OVN    );
1054       hr_utility.trace('------------------------------------------------------');
1055 
1056       l_index := p_attributes.NEXT (l_index);
1057 
1058       END LOOP;
1059 
1060         hr_utility.trace('  ATTRIBUTES TABLE END ');
1061         hr_utility.trace(' *****************');
1062 
1063           end if;
1064 
1065 
1066 
1067 end if;
1068 
1069 
1070 /* fix for bug 6130457 */
1071 
1072  l_timecard_blocks.delete;
1073  l_day_blocks.delete;
1074  l_detail_blocks.delete;
1075 
1076  /* end of fix for bug 6130457 */
1077 
1078 /* fix by senthil for bug 5099360*/
1079   hxc_timecard_block_utils.sort_blocks
1080    (p_blocks          => p_blocks
1081    ,p_timecard_blocks => l_timecard_blocks
1082    ,p_day_blocks      => l_day_blocks
1083    ,p_detail_blocks   => l_detail_blocks
1084    );
1085 /* end of fix for bug 5099360*/
1086 
1087   hxc_timecard_message_helper.processerrors
1088     (p_messages => p_messages);
1089 
1090   hxc_timecard_validation.data_set_validation
1091    (p_blocks       => p_blocks
1092    ,p_messages     => p_messages
1093    );
1094 
1095   hxc_timecard_message_helper.processerrors
1096     (p_messages => p_messages);
1097 
1098 --
1099 --  At this point of the process
1100 --  we know if the timecard needs to be in error.
1101 --
1102   -- get all the errors
1103   p_messages := hxc_timecard_message_helper.getMessages;
1104 
1105 --svg start Bug 9181950
1106   if NOT hxc_timecard_message_helper.noErrors then
1107   	--HXC_SVG_LOG.record_log('Reached here:svg');
1108    if g_debug then
1109   	hr_utility.trace('SVG: Rollingback to savepoint TK_SAVE_SAVEPOINT for any Projects related updates');
1110    end if;
1111    rollback to TK_SAVE_SAVEPOINT;
1112   end if;
1113   -- svg end
1114 
1115 
1116 
1117 
1118 
1119 /*
1120   -- debug
1121   IF g_debug THEN
1122     hxc_debug_timecard.writeMessages(p_messages,'HXC_TIMEKEEPER',70);
1123   END IF;
1124 */
1125   hxc_timekeeper_errors.rollback_tc_or_set_err_status
1126      (p_message_table	=> p_messages
1127      ,p_blocks          => p_blocks
1128      ,p_attributes	=> p_attributes
1129      ,p_rollback	=> l_rollback
1130      ,p_status_error	=> l_status_error);
1131 
1132   --p_messages.delete;
1133 --
1134 -- if the rollback is set then we need to execute it
1135 --
1136   IF l_rollback THEN
1137     -- we are setting the error to be
1138     -- send
1139     raise e_timekeeper_check;
1140 
1141   ELSE
1142    -- p_messages.delete;
1143   --
1144   --  Store blocks and attributes
1145   --
1146 
1147     -- get all the errors before the deposit
1148     -- in order to main the -ve ids
1149     -- at this point p_messages is not delete
1150     -- so we still have the full message structures
1151 
1152     hxc_timecard_deposit.execute
1153     (p_blocks           => p_blocks
1154     ,p_attributes       => p_attributes
1155     ,p_timecard_blocks  => l_timecard_blocks
1156     ,p_day_blocks       => l_day_blocks
1157     ,p_detail_blocks    => l_detail_blocks
1158     ,p_messages 	=> p_messages
1159     ,p_transaction_info => l_transaction_info
1160     );
1161 
1162     p_timecard_id :=
1163        p_blocks(hxc_timecard_block_utils.find_active_timecard_index(p_blocks)).time_building_block_id;
1164     p_timecard_ovn:=
1165        p_blocks(hxc_timecard_block_utils.find_active_timecard_index(p_blocks)).object_version_number;
1166 
1167   hxc_timecard_audit.maintain_latest_details
1168   (p_blocks        => p_blocks );
1169 
1170   /* Bug 8888904 */
1171 
1172   hxc_timecard_audit.maintain_rdb_snapshot
1173   (p_blocks => p_blocks,
1174    p_attributes => p_attributes);
1175 
1176 
1177  IF p_timekeeper_id IS NOT NULL and
1178     p_tk_audit_enabled = 'Y'    and
1179     p_tk_notify_to <> 'NONE' THEN
1180 
1181     open c_previous_timecard(p_timecard_id);
1182     fetch c_previous_timecard into l_previous_tk_item_key,l_previous_tk_item_type;
1183     if (c_previous_timecard%found)  then
1184 
1185    --Cancel notifications for TK Audit
1186 
1187 	hxc_timekeeper_wf_pkg.cancel_previous_notifications
1188 	( p_tk_audit_item_type => l_previous_tk_item_type
1189 	 ,p_tk_audit_item_key =>  l_previous_tk_item_key
1190 	);
1191 
1192     end if;
1193     close c_previous_timecard;
1194 
1195     l_item_key :=
1196 	  hxc_timekeeper_wf_pkg.begin_audit_process
1197 	  (p_timecard_id    =>  p_timecard_id
1198 	  ,p_timecard_ovn   =>  p_timecard_ovn
1199 	  ,p_resource_id    =>  p_blocks(hxc_timecard_block_utils.find_active_timecard_index(p_blocks)).resource_id
1200 	  ,p_timekeeper_id  =>  p_timekeeper_id
1201 	  ,p_tk_audit_enabled => p_tk_audit_enabled
1202 	  ,p_tk_notify_to   =>  p_tk_notify_to
1203 	  ,p_tk_notify_type =>  p_tk_notify_type
1204           ,p_property_table => l_timecard_props
1205            );
1206  END IF;
1207 
1208  IF l_item_key IS NOT NULL THEN
1209     tk_audit_process_name := 'HXC_TK_AUDIT_PROCESS';
1210     tk_audit_item_type    := 'HXCTKWF';
1211  END IF;
1212 
1213     --hxc_timecard_message_helper.processerrors
1214     --(p_messages => p_messages);
1215 
1216     --
1217     -- Maintain summary table
1218     --
1219 
1220    hxc_timecard_summary_api.timecard_deposit
1221       (p_blocks => p_blocks
1222       ,p_approval_item_type     => NULL
1223       ,p_approval_process_name  => NULL
1224       ,p_approval_item_key      => NULL
1225       ,p_tk_audit_item_type     => tk_audit_item_type
1226       ,p_tk_audit_process_name  => tk_audit_process_name
1227       ,p_tk_audit_item_key      => l_item_key
1228        );
1229 
1230   hxc_timecard_audit.audit_deposit
1231     (p_transaction_info => l_transaction_info
1232     ,p_messages => p_messages
1233     );
1234 
1235 
1236     hr_utility.trace('Calling maintain_errors');
1237 
1238         hxc_timekeeper_errors.maintain_errors
1239       	(p_messages 	=> p_messages
1240       	,p_timecard_id  => p_timecard_id
1241   	,p_timecard_ovn => p_timecard_ovn);
1242 
1243     --
1244     -- store error
1245     --
1246     -- get all the errors
1247 --    p_messages := hxc_timecard_message_helper.getMessages;
1248 
1249     -- OTL-Absences Integration (Bug 8779478)
1250     -- Modified code to rollback in case on online retrieval errors (Bug 8888138)
1251     IF (nvl(fnd_profile.value('HR_ABS_OTL_INTEGRATION'), 'N') = 'Y') THEN
1252       IF  (p_timecard_id > 0 and hxc_timecard_message_helper.noerrors) THEN
1253 
1254        IF g_debug THEN
1255          hr_utility.trace('ABS:Initiated Online Retrieval from HXC_TIMEKEEPER.SAVE_TIMECARD');
1256        END IF;
1257 
1258        l_abs_ret_messages:= HXC_MESSAGE_TABLE_TYPE();
1259 
1260        l_resource_id     := p_blocks(l_timecard_index).resource_id;
1261        l_tc_start        := fnd_date.canonical_to_date(p_blocks(l_timecard_index).start_time);
1262        l_tc_stop         := fnd_date.canonical_to_date(p_blocks(l_timecard_index).stop_time);
1263        l_approval_status := p_blocks(l_timecard_index).approval_status;
1264 
1265 
1266        HXC_ABS_RETRIEVAL_PKG.POST_ABSENCES (l_resource_id,
1267   	  			            l_tc_start,
1268   					    l_tc_stop,
1269   					    l_approval_status,
1270   					    l_abs_ret_messages);
1271 
1272        IF g_debug THEN
1273   	hr_utility.trace('ABS:p_messages.COUNT = '||l_abs_ret_messages.COUNT);
1274        END IF;
1275 
1276        IF l_abs_ret_messages.COUNT > 0 THEN
1277 	    IF g_debug THEN
1278 	      hr_utility.trace('ABS: Online Retrieval failed - Rollback changes');
1279 	    END IF;
1280 
1281 	    rollback to TK_SAVE_SAVEPOINT;
1282 
1283 	    hxc_timekeeper_errors.maintain_errors
1284 	    	          	(p_messages 	=> l_abs_ret_messages
1285 	    	          	,p_timecard_id  => p_timecard_id
1286   	                	,p_timecard_ovn => p_timecard_ovn);
1287 
1288        END IF;
1289 
1290       END IF;
1291     END IF;
1292 
1293 
1294 
1295   END IF;
1296 
1297 --dbms_profiler.stop_profiler;
1298 
1299 EXCEPTION
1300   WHEN e_timekeeper_check then
1301     hxc_timecard_message_helper.prepareErrors;
1302     rollback;
1303 
1304 End save_timecard;
1305 
1306 
1307 ----------------------------------------------------------------------------
1308 -- Submit Timecard Procedure
1309 -- This procedure....
1310 ----------------------------------------------------------------------------
1311 
1312 Procedure submit_timecard
1313             (p_blocks           in out nocopy HXC_BLOCK_TABLE_TYPE
1314             ,p_attributes       in out nocopy HXC_ATTRIBUTE_TABLE_TYPE
1315             ,p_messages         in out nocopy HXC_MESSAGE_TABLE_TYPE
1316             ,p_timecard_id        out nocopy hxc_time_building_blocks.time_building_block_id%type
1317             ,p_timecard_ovn       out nocopy hxc_time_building_blocks.object_version_number%type
1318 	    ,p_timekeeper_id    in hxc_time_building_blocks.resource_id%type DEFAULT NULL
1319 	    ,p_tk_audit_enabled	in VARCHAR2 DEFAULT NULL
1320  	    ,p_tk_notify_to     in VARCHAR2 DEFAULT NULL
1321 	    ,p_tk_notify_type   in VARCHAR2 DEFAULT NULL
1322             ) IS
1323 
1324 cursor c_previous_timecard(
1325 			      p_timecard_id in hxc_timecard_summary.timecard_id%type) is
1326   select tk_audit_item_key,tk_audit_item_type
1327     from hxc_timecard_summary
1328    where timecard_id = p_timecard_id;
1329 
1330 
1331 l_timecard_blocks  hxc_timecard.block_list;
1332 l_day_blocks       hxc_timecard.block_list;
1333 l_detail_blocks    hxc_timecard.block_list;
1334 l_transaction_info hxc_timecard.transaction_info;
1335 l_timecard_props   hxc_timecard_prop_table_type;
1336 
1337 l_proc             varchar2(50) := g_package||'.SUBMIT_TIMECARD';
1338 l_can_deposit      boolean := true;
1339 l_resubmit         varchar2(10) := hxc_timecard_deposit_common.c_no;
1340 l_timecard_index   number;
1341 
1342 l_rollback	   BOOLEAN := FALSE;
1343 
1344 l_status_error	   BOOLEAN := FALSE;
1345 
1346 l_item_key            WF_ITEMS.ITEM_KEY%TYPE :=NULL;
1347 tk_item_key	      WF_ITEMS.ITEM_KEY%TYPE :=NULL;
1348 tk_audit_item_type    WF_ITEMS.ITEM_TYPE%TYPE :=NULL;
1349 tk_audit_process_name  VARCHAR2(50) :=NULL;
1350 
1351 l_previous_tk_item_key   hxc_timecard_summary.tk_audit_item_key%type;
1352 l_previous_tk_item_type  hxc_timecard_summary.tk_audit_item_type%type;
1353 
1354 l_index	NUMBER;
1355 
1356 l_resource_id      NUMBER;
1357 l_tc_start         DATE;
1358 l_tc_stop          DATE;
1359 l_approval_status  VARCHAR2(20);
1360 
1361 l_abs_ret_messages	HXC_MESSAGE_TABLE_TYPE;
1362 
1363 BEGIN
1364 
1365 --
1366 -- Fnd initialization
1367 --
1368   fnd_msg_pub.initialize;
1369 
1370 g_debug:= hr_utility.debug_enabled;
1371 
1372 ----------------------------------------------------------------------------
1373 --  Timecard Preparation
1374 ----------------------------------------------------------------------------
1375 
1376   hxc_timecard_block_utils.initialize_timecard_index;
1377 
1378   hxc_timecard_message_helper.initializeerrors;
1379 
1380   p_messages := hxc_message_table_type ();
1381 
1382   -- set savepoint
1383   savepoint TK_SUB_SAVEPOINT;
1384 --
1385 --  Check input parameters
1386 --
1387 
1388   hxc_deposit_checks.check_inputs
1389     (p_blocks 	    => p_blocks
1390     ,p_attributes   => p_attributes
1391     ,p_deposit_mode => hxc_timecard_deposit_common.c_submit
1392     ,p_template     => hxc_timecard_deposit_common.c_no
1393     ,p_messages     => p_messages
1394     );
1395 
1396   hxc_timecard_message_helper.processerrors
1397     (p_messages => p_messages);
1398 
1399 --
1400 --  Determine if this is a resubmitted timecard
1401 --
1402   l_timecard_index := hxc_timecard_block_utils.find_active_timecard_index(p_blocks);
1403 
1404   if(hxc_timecard_block_utils.date_value(p_blocks(l_timecard_index).date_to)
1405                = hr_general.end_of_time)
1406   then
1407     l_resubmit := hxc_timecard_approval.is_timecard_resubmitted
1408                    (p_blocks(l_timecard_index).time_building_block_id
1409                    ,p_blocks(l_timecard_index).object_version_number
1410                    ,p_blocks(l_timecard_index).resource_id
1411                    ,hxc_timecard_block_utils.date_value(p_blocks(l_timecard_index).start_time)
1412                    ,hxc_timecard_block_utils.date_value(p_blocks(l_timecard_index).stop_time)
1413                    );
1414   else
1415     l_resubmit := hxc_timecard_deposit_common.c_delete;
1416   end if;
1417 
1418 --
1419 --  Obtain the timecard properties
1420 --  This might be changed to send
1421 --  this information in from the
1422 --  middle tier, to avoid another
1423 --  pref evaluation
1424 --
1425 
1426   hxc_timecard_properties.get_preference_properties
1427     (p_validate             => hxc_timecard_deposit_common.c_yes
1428     ,p_resource_id          => p_blocks(l_timecard_index).resource_id
1429     ,p_timecard_start_time  => fnd_date.canonical_to_date(p_blocks(l_timecard_index).start_time)
1430     ,p_timecard_stop_time   => fnd_date.canonical_to_date(p_blocks(l_timecard_index).stop_time)
1431     ,p_for_timecard         => false
1432     ,p_messages             => p_messages
1433     ,p_property_table       => l_timecard_props
1434     );
1435 
1436   hxc_timecard_message_helper.processerrors
1437     (p_messages => p_messages);
1438 
1439 --
1440 --  Sort the blocks - needed for deposit
1441 --  and all sorts of short cuts!
1442 --
1443 
1444   hxc_timecard_block_utils.sort_blocks
1445    (p_blocks          => p_blocks
1446    ,p_timecard_blocks => l_timecard_blocks
1447    ,p_day_blocks      => l_day_blocks
1448    ,p_detail_blocks   => l_detail_blocks
1449    );
1450 
1451 --
1452 --  Main deposit controls
1453 --  ^^^^^^^^^^^^^^^^^^^^^
1454 --  Reform time data, if required
1455 --  e.g Denormalize time data
1456 --
1457 
1458   hxc_block_attribute_update.denormalize_time
1459    (p_blocks => p_blocks
1460    ,p_mode => 'ADD'
1461    );
1462 
1463 --
1464 --  Perform basic checks, e.g.
1465 --  Are there any other timecards for this period?
1466 --
1467 
1468   hxc_deposit_checks.perform_checks
1469       (p_blocks         => p_blocks
1470       ,p_attributes     => p_attributes
1471       ,p_timecard_props => l_timecard_props
1472       ,p_days           => l_day_blocks
1473       ,p_details        => l_detail_blocks
1474       ,p_messages       => p_messages
1475       );
1476 
1477   hxc_timecard_message_helper.processerrors
1478       (p_messages => p_messages);
1479 
1480 --
1481 --  Add the security attributes
1482 --  ARR: 115.28 change, added p_messages
1483 --
1484   hxc_security.add_security_attribute
1485       (p_blocks         => p_blocks,
1486        p_attributes     => p_attributes,
1487        p_timecard_props => l_timecard_props,
1488        p_messages       => p_messages
1489       );
1490 
1491   hxc_timecard_message_helper.processerrors
1492       (p_messages => p_messages);
1493 --
1494 --  Translate any aliases
1495 --
1496   hxc_timecard_deposit_common.alias_translation
1497    (p_blocks     => p_blocks
1498    ,p_attributes => p_attributes
1499    ,p_messages   => p_messages
1500    );
1501 
1502   hxc_timecard_message_helper.processerrors
1503     (p_messages => p_messages);
1504 
1505 --
1506 --  Set the block and attribute update process flags
1507 --  Based on the data sent and in the db
1508 --
1509   hxc_block_attribute_update.set_process_flags
1510     (p_blocks     => p_blocks
1511     ,p_attributes => p_attributes
1512     );
1513 
1514 --
1515 --  Removed any deleted attributes
1516 --
1517 
1518   hxc_timecard_attribute_utils.remove_deleted_attributes
1519     (p_attributes => p_attributes);
1520 
1521 
1522 --
1523 --  Perform process checks
1524 --
1525   hxc_deposit_checks.perform_process_checks
1526     (p_blocks         => p_blocks
1527     ,p_attributes     => p_attributes
1528     ,p_timecard_props => l_timecard_props
1529     ,p_days           => l_day_blocks
1530     ,p_details        => l_detail_blocks
1531     ,p_template       => hxc_timecard_deposit_common.c_no
1532     ,p_deposit_mode   => hxc_timecard_deposit_common.c_submit
1533     ,p_messages       => p_messages
1534     );
1535 
1536   --in case of rejected TC again resubmit so remove the error raised
1537   --for SS as TK dosn't work in same way .
1538   --set process/changed flag to 'Y'.
1539 
1540   IF p_messages.count > 0 THEN
1541 
1542     hxc_timekeeper_utilities.check_msg_set_process_flag
1543 			  (  p_blocks	   => p_blocks
1544 			    ,p_attributes  => p_attributes
1545 			    ,p_messages    => p_messages
1546 			   );
1547   END IF;
1548 
1549 
1550   hxc_timecard_message_helper.processerrors
1551     (p_messages => p_messages);
1552 --
1553 --  Validate blocks, attributes
1554 --
1555 /*
1556   hxc_timecard_validation.deposit_validation
1557     (p_blocks        => p_blocks
1558     ,p_attributes    => p_attributes
1559     ,p_messages      => p_messages
1560     ,p_props         => l_timecard_props
1561     ,p_deposit_mode  => hxc_timecard_deposit_common.c_submit
1562     ,p_template      => hxc_timecard_deposit_common.c_no
1563     ,p_resubmit      => l_resubmit
1564     ,p_can_deposit   => l_can_deposit
1565     );
1566 */
1567 
1568 
1569 
1570   hxc_timecard_validation.recipients_update_validation
1571     (p_blocks        => p_blocks
1572     ,p_attributes    => p_attributes
1573     ,p_messages      => p_messages
1574     ,p_props         => l_timecard_props
1575     ,p_deposit_mode  => hxc_timecard_deposit_common.c_submit
1576     ,p_resubmit      => l_resubmit);
1577 
1578   hxc_timecard_message_helper.processerrors
1579     (p_messages => p_messages);
1580 
1581 
1582   hxc_timecard_validation.data_set_validation
1583    (p_blocks       => p_blocks
1584    ,p_messages     => p_messages
1585    );
1586 
1587   hxc_timecard_message_helper.processerrors
1588     (p_messages => p_messages);
1589 
1590 
1591 --
1592 -- Validate the set up for the user
1593 -- Do this only for timecards, and not
1594 -- for templates.
1595 --
1596 /*
1597   hxc_timecard_deposit_common.validate_setup
1598        (p_deposit_mode => hxc_timecard_deposit_common.c_submit
1599        ,p_blocks       => p_blocks
1600        ,p_attributes   => p_attributes
1601        ,p_messages     => p_messages
1602        );
1603 
1604   hxc_timecard_message_helper.processerrors
1605     (p_messages => p_messages);
1606 */
1607 --
1608 --  Reform time data, if required
1609 --  e.g Denormalize time data
1610 --
1611   hxc_block_attribute_update.denormalize_time
1612    (p_blocks => p_blocks
1613    ,p_mode   => 'REMOVE'
1614    );
1615 
1616 --
1617 --  At this point of the process
1618 --  we know if the timecard needs to be in error.
1619 --
1620 
1621 
1622 /*
1623   -- debug
1624   IF g_debug THEN
1625     hxc_debug_timecard.writeMessages(p_messages,'HXC_TIMEKEEPER',70);
1626   END IF;
1627 */
1628 
1629 
1630  /* Added for bug 8775740 HR Absence Integration
1631 
1632   This pkg call is used to validate absence entries against the
1633   Absences Pref setting for the particular resource_id
1634 
1635   */
1636  -- Change start
1637 
1638    if g_debug then
1639 
1640       hr_utility.trace('Just before verify_view_only_absences in hxctksubmit');
1641       if (p_blocks.count>0) then
1642 
1643 
1644          hr_utility.trace('  P_BLOCK TABLE START ');
1645          hr_utility.trace(' *****************');
1646 
1647          l_index := p_blocks.FIRST;
1648 
1649           LOOP
1650             EXIT WHEN NOT p_blocks.EXISTS (l_index);
1651 
1652 
1653            hr_utility.trace(' TIME_BUILDING_BLOCK_ID      =   '|| p_blocks(l_index).TIME_BUILDING_BLOCK_ID     );
1654            hr_utility.trace(' TYPE =   '|| p_blocks(l_index).TYPE )    ;
1655            hr_utility.trace(' MEASURE =   '|| p_blocks(l_index).MEASURE)    ;
1656            hr_utility.trace(' UNIT_OF_MEASURE     =       '|| p_blocks(l_index).UNIT_OF_MEASURE        )    ;
1657            hr_utility.trace(' START_TIME     =       '|| p_blocks(l_index).START_TIME        )    ;
1658            hr_utility.trace(' STOP_TIME      =       '|| p_blocks(l_index).STOP_TIME        )    ;
1659            hr_utility.trace(' PARENT_BUILDING_BLOCK_ID  =       '|| p_blocks(l_index).PARENT_BUILDING_BLOCK_ID        )    ;
1660            hr_utility.trace(' PARENT_IS_NEW     =       '|| p_blocks(l_index).PARENT_IS_NEW        )    ;
1661            hr_utility.trace(' SCOPE     =       '|| p_blocks(l_index).SCOPE        )    ;
1662            hr_utility.trace(' OBJECT_VERSION_NUMBER     =       '|| p_blocks(l_index).OBJECT_VERSION_NUMBER        )    ;
1663            hr_utility.trace(' APPROVAL_STATUS     =       '|| p_blocks(l_index).APPROVAL_STATUS        )    ;
1664            hr_utility.trace(' RESOURCE_ID     =       '|| p_blocks(l_index).RESOURCE_ID        )    ;
1665            hr_utility.trace(' RESOURCE_TYPE    =       '|| p_blocks(l_index).RESOURCE_TYPE       )    ;
1666            hr_utility.trace(' APPROVAL_STYLE_ID    =       '|| p_blocks(l_index).APPROVAL_STYLE_ID       )    ;
1667            hr_utility.trace(' DATE_FROM    =       '|| p_blocks(l_index).DATE_FROM       )    ;
1668            hr_utility.trace(' DATE_TO    =       '|| p_blocks(l_index).DATE_TO       )    ;
1669            hr_utility.trace(' COMMENT_TEXT    =       '|| p_blocks(l_index).COMMENT_TEXT       )    ;
1670            hr_utility.trace(' PARENT_BUILDING_BLOCK_OVN     =       '|| p_blocks(l_index).PARENT_BUILDING_BLOCK_OVN        )    ;
1671            hr_utility.trace(' NEW    =       '|| p_blocks(l_index).NEW       )    ;
1672            hr_utility.trace(' CHANGED    =       '|| p_blocks(l_index).CHANGED       )    ;
1673            hr_utility.trace(' PROCESS    =       '|| p_blocks(l_index).PROCESS       )    ;
1674            hr_utility.trace(' APPLICATION_SET_ID    =       '|| p_blocks(l_index).APPLICATION_SET_ID       )    ;
1675            hr_utility.trace(' TRANSLATION_DISPLAY_KEY    =       '|| p_blocks(l_index).TRANSLATION_DISPLAY_KEY       )    ;
1676            hr_utility.trace('------------------------------------------------------');
1677 
1678            l_index := p_blocks.NEXT (l_index);
1679 
1680            END LOOP;
1681 
1682              hr_utility.trace('  p_blocks TABLE END ');
1683              hr_utility.trace(' *****************');
1684 
1685                end if;
1686 
1687 
1688           if (p_messages.count>0) then
1689 
1690 
1691 	      hr_utility.trace('  P_MESSAGES TABLE START ');
1692 	      hr_utility.trace(' *****************');
1693 
1694 	      l_index := p_messages.FIRST;
1695 
1696 	       LOOP
1697 	         EXIT WHEN NOT p_messages.EXISTS (l_index);
1698 
1699 
1700 	        hr_utility.trace(' MESSAGE_NAME        =   '|| p_messages(l_index).MESSAGE_NAME     );
1701 	        hr_utility.trace(' MESSAGE_LEVEL =   '|| p_messages(l_index).MESSAGE_LEVEL )    ;
1702 	        hr_utility.trace(' MESSAGE_FIELD =   '|| p_messages(l_index).MESSAGE_FIELD)    ;
1703 	        hr_utility.trace(' MESSAGE_TOKENS     =       '|| p_messages(l_index).MESSAGE_TOKENS        )    ;
1704 	        hr_utility.trace(' APPLICATION_SHORT_NAME     =       '|| p_messages(l_index).APPLICATION_SHORT_NAME        )    ;
1705 	        hr_utility.trace(' TIME_BUILDING_BLOCK_ID      =       '|| p_messages(l_index).TIME_BUILDING_BLOCK_ID        )    ;
1706 	        hr_utility.trace(' TIME_BUILDING_BLOCK_OVN  =       '|| p_messages(l_index).TIME_BUILDING_BLOCK_OVN        )    ;
1707 	        hr_utility.trace(' TIME_ATTRIBUTE_ID     =       '|| p_messages(l_index).TIME_ATTRIBUTE_ID        )    ;
1708 	        hr_utility.trace(' TIME_ATTRIBUTE_OVN     =       '|| p_messages(l_index).TIME_ATTRIBUTE_OVN        )    ;
1709 	        hr_utility.trace(' MESSAGE_EXTENT     =       '|| p_messages(l_index).MESSAGE_EXTENT        )    ;
1710 
1711 	        l_index := p_messages.NEXT (l_index);
1712 
1713 	        END LOOP;
1714 
1715 	          hr_utility.trace('  p_messages TABLE END ');
1716 	          hr_utility.trace(' *****************');
1717 
1718           end if;
1719 
1720 
1721 
1722           if (p_attributes.count>0) then
1723 
1724 
1725          hr_utility.trace('  ATTRIBUTES TABLE START ');
1726          hr_utility.trace(' *****************');
1727 
1728          l_index := p_attributes.FIRST;
1729 
1730           LOOP
1731             EXIT WHEN NOT p_attributes.EXISTS (l_index);
1732 
1733 
1734            hr_utility.trace(' TIME_ATTRIBUTE_ID =   '|| p_attributes(l_index).TIME_ATTRIBUTE_ID);
1735            hr_utility.trace(' BUILDING_BLOCK_ID =   '|| p_attributes(l_index).BUILDING_BLOCK_ID )    ;
1736            hr_utility.trace(' ATTRIBUTE_CATEGORY =   '|| p_attributes(l_index).ATTRIBUTE_CATEGORY)    ;
1737            hr_utility.trace(' ATTRIBUTE1     =       '|| p_attributes(l_index).ATTRIBUTE1        )    ;
1738            hr_utility.trace(' ATTRIBUTE2  (p_alias_definition_id)   =       '|| p_attributes(l_index).ATTRIBUTE2        )    ;
1739            hr_utility.trace(' ATTRIBUTE3  (l_alias_value_id)    =       '|| p_attributes(l_index).ATTRIBUTE3        )    ;
1740            hr_utility.trace(' ATTRIBUTE4  (p_alias_type)   =       '|| p_attributes(l_index).ATTRIBUTE4        )    ;
1741            hr_utility.trace(' ATTRIBUTE5     =       '|| p_attributes(l_index).ATTRIBUTE5        )    ;
1742            hr_utility.trace(' ATTRIBUTE6     =       '|| p_attributes(l_index).ATTRIBUTE6        )    ;
1743            hr_utility.trace(' ATTRIBUTE7     =       '|| p_attributes(l_index).ATTRIBUTE7        )    ;
1744            hr_utility.trace(' ATTRIBUTE8     =       '|| p_attributes(l_index).ATTRIBUTE8        )    ;
1745            hr_utility.trace(' ATTRIBUTE9     =       '|| p_attributes(l_index).ATTRIBUTE9        )    ;
1746            hr_utility.trace(' ATTRIBUTE10    =       '|| p_attributes(l_index).ATTRIBUTE10       )    ;
1747            hr_utility.trace(' ATTRIBUTE11    =       '|| p_attributes(l_index).ATTRIBUTE11       )    ;
1748            hr_utility.trace(' ATTRIBUTE12    =       '|| p_attributes(l_index).ATTRIBUTE12       )    ;
1749            hr_utility.trace(' ATTRIBUTE13    =       '|| p_attributes(l_index).ATTRIBUTE13       )    ;
1750            hr_utility.trace(' ATTRIBUTE14    =       '|| p_attributes(l_index).ATTRIBUTE14       )    ;
1751            hr_utility.trace(' ATTRIBUTE15    =       '|| p_attributes(l_index).ATTRIBUTE15       )    ;
1752            hr_utility.trace(' ATTRIBUTE16    =       '|| p_attributes(l_index).ATTRIBUTE16       )    ;
1753            hr_utility.trace(' ATTRIBUTE17    =       '|| p_attributes(l_index).ATTRIBUTE17       )    ;
1754            hr_utility.trace(' ATTRIBUTE18    =       '|| p_attributes(l_index).ATTRIBUTE18       )    ;
1755            hr_utility.trace(' ATTRIBUTE19    =       '|| p_attributes(l_index).ATTRIBUTE19       )    ;
1756            hr_utility.trace(' ATTRIBUTE20    =       '|| p_attributes(l_index).ATTRIBUTE20       )    ;
1757            hr_utility.trace(' ATTRIBUTE21    =       '|| p_attributes(l_index).ATTRIBUTE21       )    ;
1758            hr_utility.trace(' ATTRIBUTE22    =       '|| p_attributes(l_index).ATTRIBUTE22       )    ;
1759            hr_utility.trace(' ATTRIBUTE23    =       '|| p_attributes(l_index).ATTRIBUTE23       )    ;
1760            hr_utility.trace(' ATTRIBUTE24    =       '|| p_attributes(l_index).ATTRIBUTE24       )    ;
1761            hr_utility.trace(' ATTRIBUTE25    =       '|| p_attributes(l_index).ATTRIBUTE25       )    ;
1762            hr_utility.trace(' ATTRIBUTE26    =       '|| p_attributes(l_index).ATTRIBUTE26       )    ;
1763            hr_utility.trace(' ATTRIBUTE27    =       '|| p_attributes(l_index).ATTRIBUTE27       )    ;
1764            hr_utility.trace(' ATTRIBUTE28    =       '|| p_attributes(l_index).ATTRIBUTE28       )    ;
1765            hr_utility.trace(' ATTRIBUTE29  (p_alias_ref_object)  =       '|| p_attributes(l_index).ATTRIBUTE29       )    ;
1766            hr_utility.trace(' ATTRIBUTE30  (p_alias_value_name)  =       '|| p_attributes(l_index).ATTRIBUTE30       )    ;
1767            hr_utility.trace(' BLD_BLK_INFO_TYPE_ID = '|| p_attributes(l_index).BLD_BLK_INFO_TYPE_ID  );
1768            hr_utility.trace(' OBJECT_VERSION_NUMBER = '|| p_attributes(l_index).OBJECT_VERSION_NUMBER );
1769            hr_utility.trace(' NEW             =       '|| p_attributes(l_index).NEW                   );
1770            hr_utility.trace(' CHANGED              =  '|| p_attributes(l_index).CHANGED               );
1771            hr_utility.trace(' BLD_BLK_INFO_TYPE    =  '|| p_attributes(l_index).BLD_BLK_INFO_TYPE     );
1772            hr_utility.trace(' PROCESS              =  '|| p_attributes(l_index).PROCESS               );
1773            hr_utility.trace(' BUILDING_BLOCK_OVN   =  '|| p_attributes(l_index).BUILDING_BLOCK_OVN    );
1774            hr_utility.trace('------------------------------------------------------');
1775 
1776            l_index := p_attributes.NEXT (l_index);
1777 
1778            END LOOP;
1779 
1780              hr_utility.trace('  ATTRIBUTES TABLE END ');
1781              hr_utility.trace(' *****************');
1782 
1783                end if;
1784 
1785 
1786 
1787      end if;
1788 
1789 
1790    HXC_RETRIEVE_ABSENCES.verify_view_only_absences
1791                    ( p_blocks => p_blocks,
1792                      p_attributes => p_attributes,
1793                      p_lock_rowid => HXC_RETRIEVE_ABSENCES.g_lock_row_id,
1794                      p_messages => p_messages
1795                   );
1796 
1797    if g_debug then
1798 
1799          hr_utility.trace('Just after verify_view_only_absences in hxctksubmit');
1800          if (p_blocks.count>0) then
1801 
1802 
1803             hr_utility.trace('  P_BLOCK TABLE START ');
1804             hr_utility.trace(' *****************');
1805 
1806             l_index := p_blocks.FIRST;
1807 
1808              LOOP
1809                EXIT WHEN NOT p_blocks.EXISTS (l_index);
1810 
1811 
1812               hr_utility.trace(' TIME_BUILDING_BLOCK_ID      =   '|| p_blocks(l_index).TIME_BUILDING_BLOCK_ID     );
1813               hr_utility.trace(' TYPE =   '|| p_blocks(l_index).TYPE )    ;
1814               hr_utility.trace(' MEASURE =   '|| p_blocks(l_index).MEASURE)    ;
1815               hr_utility.trace(' UNIT_OF_MEASURE     =       '|| p_blocks(l_index).UNIT_OF_MEASURE        )    ;
1816               hr_utility.trace(' START_TIME     =       '|| p_blocks(l_index).START_TIME        )    ;
1817               hr_utility.trace(' STOP_TIME      =       '|| p_blocks(l_index).STOP_TIME        )    ;
1818               hr_utility.trace(' PARENT_BUILDING_BLOCK_ID  =       '|| p_blocks(l_index).PARENT_BUILDING_BLOCK_ID        )    ;
1819               hr_utility.trace(' PARENT_IS_NEW     =       '|| p_blocks(l_index).PARENT_IS_NEW        )    ;
1820               hr_utility.trace(' SCOPE     =       '|| p_blocks(l_index).SCOPE        )    ;
1821               hr_utility.trace(' OBJECT_VERSION_NUMBER     =       '|| p_blocks(l_index).OBJECT_VERSION_NUMBER        )    ;
1822               hr_utility.trace(' APPROVAL_STATUS     =       '|| p_blocks(l_index).APPROVAL_STATUS        )    ;
1823               hr_utility.trace(' RESOURCE_ID     =       '|| p_blocks(l_index).RESOURCE_ID        )    ;
1824               hr_utility.trace(' RESOURCE_TYPE    =       '|| p_blocks(l_index).RESOURCE_TYPE       )    ;
1825               hr_utility.trace(' APPROVAL_STYLE_ID    =       '|| p_blocks(l_index).APPROVAL_STYLE_ID       )    ;
1826               hr_utility.trace(' DATE_FROM    =       '|| p_blocks(l_index).DATE_FROM       )    ;
1827               hr_utility.trace(' DATE_TO    =       '|| p_blocks(l_index).DATE_TO       )    ;
1828               hr_utility.trace(' COMMENT_TEXT    =       '|| p_blocks(l_index).COMMENT_TEXT       )    ;
1829               hr_utility.trace(' PARENT_BUILDING_BLOCK_OVN     =       '|| p_blocks(l_index).PARENT_BUILDING_BLOCK_OVN        )    ;
1830               hr_utility.trace(' NEW    =       '|| p_blocks(l_index).NEW       )    ;
1831               hr_utility.trace(' CHANGED    =       '|| p_blocks(l_index).CHANGED       )    ;
1832               hr_utility.trace(' PROCESS    =       '|| p_blocks(l_index).PROCESS       )    ;
1833               hr_utility.trace(' APPLICATION_SET_ID    =       '|| p_blocks(l_index).APPLICATION_SET_ID       )    ;
1834               hr_utility.trace(' TRANSLATION_DISPLAY_KEY    =       '|| p_blocks(l_index).TRANSLATION_DISPLAY_KEY       )    ;
1835               hr_utility.trace('------------------------------------------------------');
1836 
1837               l_index := p_blocks.NEXT (l_index);
1838 
1839               END LOOP;
1840 
1841                 hr_utility.trace('  p_blocks TABLE END ');
1842                 hr_utility.trace(' *****************');
1843 
1844                   end if;
1845 
1846 
1847              if (p_messages.count>0) then
1848 
1849 
1850 	         hr_utility.trace('  P_MESSAGES TABLE START ');
1851 	         hr_utility.trace(' *****************');
1852 
1853 	         l_index := p_messages.FIRST;
1854 
1855 	          LOOP
1856 	            EXIT WHEN NOT p_messages.EXISTS (l_index);
1857 
1858 
1859 	           hr_utility.trace(' MESSAGE_NAME        =   '|| p_messages(l_index).MESSAGE_NAME     );
1860 	           hr_utility.trace(' MESSAGE_LEVEL =   '|| p_messages(l_index).MESSAGE_LEVEL )    ;
1861 	           hr_utility.trace(' MESSAGE_FIELD =   '|| p_messages(l_index).MESSAGE_FIELD)    ;
1862 	           hr_utility.trace(' MESSAGE_TOKENS     =       '|| p_messages(l_index).MESSAGE_TOKENS        )    ;
1863 	           hr_utility.trace(' APPLICATION_SHORT_NAME     =       '|| p_messages(l_index).APPLICATION_SHORT_NAME        )    ;
1864 	           hr_utility.trace(' TIME_BUILDING_BLOCK_ID      =       '|| p_messages(l_index).TIME_BUILDING_BLOCK_ID        )    ;
1865 	           hr_utility.trace(' TIME_BUILDING_BLOCK_OVN  =       '|| p_messages(l_index).TIME_BUILDING_BLOCK_OVN        )    ;
1866 	           hr_utility.trace(' TIME_ATTRIBUTE_ID     =       '|| p_messages(l_index).TIME_ATTRIBUTE_ID        )    ;
1867 	           hr_utility.trace(' TIME_ATTRIBUTE_OVN     =       '|| p_messages(l_index).TIME_ATTRIBUTE_OVN        )    ;
1868 	           hr_utility.trace(' MESSAGE_EXTENT     =       '|| p_messages(l_index).MESSAGE_EXTENT        )    ;
1869 
1870 	           l_index := p_messages.NEXT (l_index);
1871 
1872 	           END LOOP;
1873 
1874 	             hr_utility.trace('  p_messages TABLE END ');
1875 	             hr_utility.trace(' *****************');
1876 
1877              end if;
1878 
1879 
1880              if (p_attributes.count>0) then
1881 
1882 
1883             hr_utility.trace('  ATTRIBUTES TABLE START ');
1884             hr_utility.trace(' *****************');
1885 
1886             l_index := p_attributes.FIRST;
1887 
1888              LOOP
1889                EXIT WHEN NOT p_attributes.EXISTS (l_index);
1890 
1891 
1892               hr_utility.trace(' TIME_ATTRIBUTE_ID =   '|| p_attributes(l_index).TIME_ATTRIBUTE_ID);
1893               hr_utility.trace(' BUILDING_BLOCK_ID =   '|| p_attributes(l_index).BUILDING_BLOCK_ID )    ;
1894               hr_utility.trace(' ATTRIBUTE_CATEGORY =   '|| p_attributes(l_index).ATTRIBUTE_CATEGORY)    ;
1895               hr_utility.trace(' ATTRIBUTE1     =       '|| p_attributes(l_index).ATTRIBUTE1        )    ;
1896               hr_utility.trace(' ATTRIBUTE2  (p_alias_definition_id)   =       '|| p_attributes(l_index).ATTRIBUTE2        )    ;
1897               hr_utility.trace(' ATTRIBUTE3  (l_alias_value_id)    =       '|| p_attributes(l_index).ATTRIBUTE3        )    ;
1898               hr_utility.trace(' ATTRIBUTE4  (p_alias_type)   =       '|| p_attributes(l_index).ATTRIBUTE4        )    ;
1899               hr_utility.trace(' ATTRIBUTE5     =       '|| p_attributes(l_index).ATTRIBUTE5        )    ;
1900               hr_utility.trace(' ATTRIBUTE6     =       '|| p_attributes(l_index).ATTRIBUTE6        )    ;
1901               hr_utility.trace(' ATTRIBUTE7     =       '|| p_attributes(l_index).ATTRIBUTE7        )    ;
1902               hr_utility.trace(' ATTRIBUTE8     =       '|| p_attributes(l_index).ATTRIBUTE8        )    ;
1903               hr_utility.trace(' ATTRIBUTE9     =       '|| p_attributes(l_index).ATTRIBUTE9        )    ;
1904               hr_utility.trace(' ATTRIBUTE10    =       '|| p_attributes(l_index).ATTRIBUTE10       )    ;
1905               hr_utility.trace(' ATTRIBUTE11    =       '|| p_attributes(l_index).ATTRIBUTE11       )    ;
1906               hr_utility.trace(' ATTRIBUTE12    =       '|| p_attributes(l_index).ATTRIBUTE12       )    ;
1907               hr_utility.trace(' ATTRIBUTE13    =       '|| p_attributes(l_index).ATTRIBUTE13       )    ;
1908               hr_utility.trace(' ATTRIBUTE14    =       '|| p_attributes(l_index).ATTRIBUTE14       )    ;
1909               hr_utility.trace(' ATTRIBUTE15    =       '|| p_attributes(l_index).ATTRIBUTE15       )    ;
1910               hr_utility.trace(' ATTRIBUTE16    =       '|| p_attributes(l_index).ATTRIBUTE16       )    ;
1911               hr_utility.trace(' ATTRIBUTE17    =       '|| p_attributes(l_index).ATTRIBUTE17       )    ;
1912               hr_utility.trace(' ATTRIBUTE18    =       '|| p_attributes(l_index).ATTRIBUTE18       )    ;
1913               hr_utility.trace(' ATTRIBUTE19    =       '|| p_attributes(l_index).ATTRIBUTE19       )    ;
1914               hr_utility.trace(' ATTRIBUTE20    =       '|| p_attributes(l_index).ATTRIBUTE20       )    ;
1915               hr_utility.trace(' ATTRIBUTE21    =       '|| p_attributes(l_index).ATTRIBUTE21       )    ;
1916               hr_utility.trace(' ATTRIBUTE22    =       '|| p_attributes(l_index).ATTRIBUTE22       )    ;
1917               hr_utility.trace(' ATTRIBUTE23    =       '|| p_attributes(l_index).ATTRIBUTE23       )    ;
1918               hr_utility.trace(' ATTRIBUTE24    =       '|| p_attributes(l_index).ATTRIBUTE24       )    ;
1919               hr_utility.trace(' ATTRIBUTE25    =       '|| p_attributes(l_index).ATTRIBUTE25       )    ;
1920               hr_utility.trace(' ATTRIBUTE26    =       '|| p_attributes(l_index).ATTRIBUTE26       )    ;
1921               hr_utility.trace(' ATTRIBUTE27    =       '|| p_attributes(l_index).ATTRIBUTE27       )    ;
1922               hr_utility.trace(' ATTRIBUTE28    =       '|| p_attributes(l_index).ATTRIBUTE28       )    ;
1923               hr_utility.trace(' ATTRIBUTE29  (p_alias_ref_object)  =       '|| p_attributes(l_index).ATTRIBUTE29       )    ;
1924               hr_utility.trace(' ATTRIBUTE30  (p_alias_value_name)  =       '|| p_attributes(l_index).ATTRIBUTE30       )    ;
1925               hr_utility.trace(' BLD_BLK_INFO_TYPE_ID = '|| p_attributes(l_index).BLD_BLK_INFO_TYPE_ID  );
1926               hr_utility.trace(' OBJECT_VERSION_NUMBER = '|| p_attributes(l_index).OBJECT_VERSION_NUMBER );
1927               hr_utility.trace(' NEW             =       '|| p_attributes(l_index).NEW                   );
1928               hr_utility.trace(' CHANGED              =  '|| p_attributes(l_index).CHANGED               );
1929               hr_utility.trace(' BLD_BLK_INFO_TYPE    =  '|| p_attributes(l_index).BLD_BLK_INFO_TYPE     );
1930               hr_utility.trace(' PROCESS              =  '|| p_attributes(l_index).PROCESS               );
1931               hr_utility.trace(' BUILDING_BLOCK_OVN   =  '|| p_attributes(l_index).BUILDING_BLOCK_OVN    );
1932               hr_utility.trace('------------------------------------------------------');
1933 
1934               l_index := p_attributes.NEXT (l_index);
1935 
1936               END LOOP;
1937 
1938                 hr_utility.trace('  ATTRIBUTES TABLE END ');
1939                 hr_utility.trace(' *****************');
1940 
1941                   end if;
1942 
1943 
1944 
1945         end if;
1946 
1947 
1948  -- Added for Bug 10326049
1949  -- OTL - Projects Payroll Integration
1950 
1951  if g_debug then
1952 
1953   hr_utility.trace('Just before hxc_proj_pay_dep_validation.verify_proj_pay_setup in hxctksubmit');
1954   if (p_blocks.count>0) then
1955 
1956 
1957      hr_utility.trace('  P_BLOCK TABLE START ');
1958      hr_utility.trace(' *****************');
1959 
1960      l_index := p_blocks.FIRST;
1961 
1962       LOOP
1963         EXIT WHEN NOT p_blocks.EXISTS (l_index);
1964 
1965 
1966        hr_utility.trace(' TIME_BUILDING_BLOCK_ID      =   '|| p_blocks(l_index).TIME_BUILDING_BLOCK_ID     );
1967        hr_utility.trace(' TYPE =   '|| p_blocks(l_index).TYPE )    ;
1968        hr_utility.trace(' MEASURE =   '|| p_blocks(l_index).MEASURE)    ;
1969        hr_utility.trace(' UNIT_OF_MEASURE     =       '|| p_blocks(l_index).UNIT_OF_MEASURE        )    ;
1970        hr_utility.trace(' START_TIME     =       '|| p_blocks(l_index).START_TIME        )    ;
1971        hr_utility.trace(' STOP_TIME      =       '|| p_blocks(l_index).STOP_TIME        )    ;
1972        hr_utility.trace(' PARENT_BUILDING_BLOCK_ID  =       '|| p_blocks(l_index).PARENT_BUILDING_BLOCK_ID        )    ;
1973        hr_utility.trace(' PARENT_IS_NEW     =       '|| p_blocks(l_index).PARENT_IS_NEW        )    ;
1974        hr_utility.trace(' SCOPE     =       '|| p_blocks(l_index).SCOPE        )    ;
1975        hr_utility.trace(' OBJECT_VERSION_NUMBER     =       '|| p_blocks(l_index).OBJECT_VERSION_NUMBER        )    ;
1976        hr_utility.trace(' APPROVAL_STATUS     =       '|| p_blocks(l_index).APPROVAL_STATUS        )    ;
1977        hr_utility.trace(' RESOURCE_ID     =       '|| p_blocks(l_index).RESOURCE_ID        )    ;
1978        hr_utility.trace(' RESOURCE_TYPE    =       '|| p_blocks(l_index).RESOURCE_TYPE       )    ;
1979        hr_utility.trace(' APPROVAL_STYLE_ID    =       '|| p_blocks(l_index).APPROVAL_STYLE_ID       )    ;
1980        hr_utility.trace(' DATE_FROM    =       '|| p_blocks(l_index).DATE_FROM       )    ;
1981        hr_utility.trace(' DATE_TO    =       '|| p_blocks(l_index).DATE_TO       )    ;
1982        hr_utility.trace(' COMMENT_TEXT    =       '|| p_blocks(l_index).COMMENT_TEXT       )    ;
1983        hr_utility.trace(' PARENT_BUILDING_BLOCK_OVN     =       '|| p_blocks(l_index).PARENT_BUILDING_BLOCK_OVN        )    ;
1984        hr_utility.trace(' NEW    =       '|| p_blocks(l_index).NEW       )    ;
1985        hr_utility.trace(' CHANGED    =       '|| p_blocks(l_index).CHANGED       )    ;
1986        hr_utility.trace(' PROCESS    =       '|| p_blocks(l_index).PROCESS       )    ;
1987        hr_utility.trace(' APPLICATION_SET_ID    =       '|| p_blocks(l_index).APPLICATION_SET_ID       )    ;
1988        hr_utility.trace(' TRANSLATION_DISPLAY_KEY    =       '|| p_blocks(l_index).TRANSLATION_DISPLAY_KEY       )    ;
1989        hr_utility.trace('------------------------------------------------------');
1990 
1991        l_index := p_blocks.NEXT (l_index);
1992 
1993        END LOOP;
1994 
1995          hr_utility.trace('  p_blocks TABLE END ');
1996          hr_utility.trace(' *****************');
1997 
1998            end if;
1999 
2000       if (p_messages.count>0) then
2001 
2002 
2003           hr_utility.trace('  P_MESSAGES TABLE START ');
2004           hr_utility.trace(' *****************');
2005 
2006           l_index := p_messages.FIRST;
2007 
2008            LOOP
2009              EXIT WHEN NOT p_messages.EXISTS (l_index);
2010 
2011 
2012             hr_utility.trace(' MESSAGE_NAME        =   '|| p_messages(l_index).MESSAGE_NAME     );
2013             hr_utility.trace(' MESSAGE_LEVEL =   '|| p_messages(l_index).MESSAGE_LEVEL )    ;
2014             hr_utility.trace(' MESSAGE_FIELD =   '|| p_messages(l_index).MESSAGE_FIELD)    ;
2015             hr_utility.trace(' MESSAGE_TOKENS     =       '|| p_messages(l_index).MESSAGE_TOKENS        )    ;
2016             hr_utility.trace(' APPLICATION_SHORT_NAME     =       '|| p_messages(l_index).APPLICATION_SHORT_NAME        )    ;
2017             hr_utility.trace(' TIME_BUILDING_BLOCK_ID      =       '|| p_messages(l_index).TIME_BUILDING_BLOCK_ID        )    ;
2018             hr_utility.trace(' TIME_BUILDING_BLOCK_OVN  =       '|| p_messages(l_index).TIME_BUILDING_BLOCK_OVN        )    ;
2019             hr_utility.trace(' TIME_ATTRIBUTE_ID     =       '|| p_messages(l_index).TIME_ATTRIBUTE_ID        )    ;
2020             hr_utility.trace(' TIME_ATTRIBUTE_OVN     =       '|| p_messages(l_index).TIME_ATTRIBUTE_OVN        )    ;
2021             hr_utility.trace(' MESSAGE_EXTENT     =       '|| p_messages(l_index).MESSAGE_EXTENT        )    ;
2022 
2023             l_index := p_messages.NEXT (l_index);
2024 
2025             END LOOP;
2026 
2027               hr_utility.trace('  p_messages TABLE END ');
2028               hr_utility.trace(' *****************');
2029 
2030    end if;
2031 
2032       if (p_attributes.count>0) then
2033 
2034 
2035      hr_utility.trace('  ATTRIBUTES TABLE START ');
2036      hr_utility.trace(' *****************');
2037 
2038      l_index := p_attributes.FIRST;
2039 
2040       LOOP
2041         EXIT WHEN NOT p_attributes.EXISTS (l_index);
2042 
2043 
2044        hr_utility.trace(' TIME_ATTRIBUTE_ID =   '|| p_attributes(l_index).TIME_ATTRIBUTE_ID);
2045        hr_utility.trace(' BUILDING_BLOCK_ID =   '|| p_attributes(l_index).BUILDING_BLOCK_ID )    ;
2046        hr_utility.trace(' ATTRIBUTE_CATEGORY =   '|| p_attributes(l_index).ATTRIBUTE_CATEGORY)    ;
2047        hr_utility.trace(' ATTRIBUTE1     =       '|| p_attributes(l_index).ATTRIBUTE1        )    ;
2048        hr_utility.trace(' ATTRIBUTE2  (p_alias_definition_id)   =       '|| p_attributes(l_index).ATTRIBUTE2        )    ;
2049        hr_utility.trace(' ATTRIBUTE3  (l_alias_value_id)    =       '|| p_attributes(l_index).ATTRIBUTE3        )    ;
2050        hr_utility.trace(' ATTRIBUTE4  (p_alias_type)   =       '|| p_attributes(l_index).ATTRIBUTE4        )    ;
2051        hr_utility.trace(' ATTRIBUTE5     =       '|| p_attributes(l_index).ATTRIBUTE5        )    ;
2052        hr_utility.trace(' ATTRIBUTE6     =       '|| p_attributes(l_index).ATTRIBUTE6        )    ;
2053        hr_utility.trace(' ATTRIBUTE7     =       '|| p_attributes(l_index).ATTRIBUTE7        )    ;
2054        hr_utility.trace(' ATTRIBUTE8     =       '|| p_attributes(l_index).ATTRIBUTE8        )    ;
2055        hr_utility.trace(' ATTRIBUTE9     =       '|| p_attributes(l_index).ATTRIBUTE9        )    ;
2056        hr_utility.trace(' ATTRIBUTE10    =       '|| p_attributes(l_index).ATTRIBUTE10       )    ;
2057        hr_utility.trace(' ATTRIBUTE11    =       '|| p_attributes(l_index).ATTRIBUTE11       )    ;
2058        hr_utility.trace(' ATTRIBUTE12    =       '|| p_attributes(l_index).ATTRIBUTE12       )    ;
2059        hr_utility.trace(' ATTRIBUTE13    =       '|| p_attributes(l_index).ATTRIBUTE13       )    ;
2060        hr_utility.trace(' ATTRIBUTE14    =       '|| p_attributes(l_index).ATTRIBUTE14       )    ;
2061        hr_utility.trace(' ATTRIBUTE15    =       '|| p_attributes(l_index).ATTRIBUTE15       )    ;
2062        hr_utility.trace(' ATTRIBUTE16    =       '|| p_attributes(l_index).ATTRIBUTE16       )    ;
2063        hr_utility.trace(' ATTRIBUTE17    =       '|| p_attributes(l_index).ATTRIBUTE17       )    ;
2064        hr_utility.trace(' ATTRIBUTE18    =       '|| p_attributes(l_index).ATTRIBUTE18       )    ;
2065        hr_utility.trace(' ATTRIBUTE19    =       '|| p_attributes(l_index).ATTRIBUTE19       )    ;
2066        hr_utility.trace(' ATTRIBUTE20    =       '|| p_attributes(l_index).ATTRIBUTE20       )    ;
2067        hr_utility.trace(' ATTRIBUTE21    =       '|| p_attributes(l_index).ATTRIBUTE21       )    ;
2068        hr_utility.trace(' ATTRIBUTE22    =       '|| p_attributes(l_index).ATTRIBUTE22       )    ;
2069        hr_utility.trace(' ATTRIBUTE23    =       '|| p_attributes(l_index).ATTRIBUTE23       )    ;
2070        hr_utility.trace(' ATTRIBUTE24    =       '|| p_attributes(l_index).ATTRIBUTE24       )    ;
2071        hr_utility.trace(' ATTRIBUTE25    =       '|| p_attributes(l_index).ATTRIBUTE25       )    ;
2072        hr_utility.trace(' ATTRIBUTE26    =       '|| p_attributes(l_index).ATTRIBUTE26       )    ;
2073        hr_utility.trace(' ATTRIBUTE27    =       '|| p_attributes(l_index).ATTRIBUTE27       )    ;
2074        hr_utility.trace(' ATTRIBUTE28    =       '|| p_attributes(l_index).ATTRIBUTE28       )    ;
2075        hr_utility.trace(' ATTRIBUTE29  (p_alias_ref_object)  =       '|| p_attributes(l_index).ATTRIBUTE29       )    ;
2076        hr_utility.trace(' ATTRIBUTE30  (p_alias_value_name)  =       '|| p_attributes(l_index).ATTRIBUTE30       )    ;
2077        hr_utility.trace(' BLD_BLK_INFO_TYPE_ID = '|| p_attributes(l_index).BLD_BLK_INFO_TYPE_ID  );
2078        hr_utility.trace(' OBJECT_VERSION_NUMBER = '|| p_attributes(l_index).OBJECT_VERSION_NUMBER );
2079        hr_utility.trace(' NEW             =       '|| p_attributes(l_index).NEW                   );
2080        hr_utility.trace(' CHANGED              =  '|| p_attributes(l_index).CHANGED               );
2081        hr_utility.trace(' BLD_BLK_INFO_TYPE    =  '|| p_attributes(l_index).BLD_BLK_INFO_TYPE     );
2082        hr_utility.trace(' PROCESS              =  '|| p_attributes(l_index).PROCESS               );
2083        hr_utility.trace(' BUILDING_BLOCK_OVN   =  '|| p_attributes(l_index).BUILDING_BLOCK_OVN    );
2084        hr_utility.trace('------------------------------------------------------');
2085 
2086        l_index := p_attributes.NEXT (l_index);
2087 
2088        END LOOP;
2089 
2090          hr_utility.trace('  ATTRIBUTES TABLE END ');
2091          hr_utility.trace(' *****************');
2092 
2093            end if;
2094 
2095 
2096 
2097  end if;
2098 
2099 
2100 
2101  hxc_timecard_message_helper.processerrors
2102      (p_messages => p_messages);
2103 
2104 
2105  IF g_debug THEN
2106    hr_utility.trace('PA-PAY> In hxc_timekeeper.save_timecard');
2107    hr_utility.trace('PA-PAY> calling hxc_proj_pay_dep_validation.verify_proj_pay_setup');
2108  END IF;
2109 
2110  hxc_proj_pay_dep_validation.verify_proj_pay_setup
2111  			   (p_blocks => p_blocks,
2112  			    p_attributes => p_attributes,
2113  			    p_messages => p_messages);
2114 
2115 
2116  if g_debug then
2117 
2118   hr_utility.trace('Just after hxc_proj_pay_dep_validation.verify_proj_pay_setup in hxctksubmit');
2119   if (p_blocks.count>0) then
2120 
2121 
2122      hr_utility.trace('  P_BLOCK TABLE START ');
2123      hr_utility.trace(' *****************');
2124 
2125      l_index := p_blocks.FIRST;
2126 
2127       LOOP
2128         EXIT WHEN NOT p_blocks.EXISTS (l_index);
2129 
2130 
2131        hr_utility.trace(' TIME_BUILDING_BLOCK_ID      =   '|| p_blocks(l_index).TIME_BUILDING_BLOCK_ID     );
2132        hr_utility.trace(' TYPE =   '|| p_blocks(l_index).TYPE )    ;
2133        hr_utility.trace(' MEASURE =   '|| p_blocks(l_index).MEASURE)    ;
2134        hr_utility.trace(' UNIT_OF_MEASURE     =       '|| p_blocks(l_index).UNIT_OF_MEASURE        )    ;
2135        hr_utility.trace(' START_TIME     =       '|| p_blocks(l_index).START_TIME        )    ;
2136        hr_utility.trace(' STOP_TIME      =       '|| p_blocks(l_index).STOP_TIME        )    ;
2137        hr_utility.trace(' PARENT_BUILDING_BLOCK_ID  =       '|| p_blocks(l_index).PARENT_BUILDING_BLOCK_ID        )    ;
2138        hr_utility.trace(' PARENT_IS_NEW     =       '|| p_blocks(l_index).PARENT_IS_NEW        )    ;
2139        hr_utility.trace(' SCOPE     =       '|| p_blocks(l_index).SCOPE        )    ;
2140        hr_utility.trace(' OBJECT_VERSION_NUMBER     =       '|| p_blocks(l_index).OBJECT_VERSION_NUMBER        )    ;
2141        hr_utility.trace(' APPROVAL_STATUS     =       '|| p_blocks(l_index).APPROVAL_STATUS        )    ;
2142        hr_utility.trace(' RESOURCE_ID     =       '|| p_blocks(l_index).RESOURCE_ID        )    ;
2143        hr_utility.trace(' RESOURCE_TYPE    =       '|| p_blocks(l_index).RESOURCE_TYPE       )    ;
2144        hr_utility.trace(' APPROVAL_STYLE_ID    =       '|| p_blocks(l_index).APPROVAL_STYLE_ID       )    ;
2145        hr_utility.trace(' DATE_FROM    =       '|| p_blocks(l_index).DATE_FROM       )    ;
2146        hr_utility.trace(' DATE_TO    =       '|| p_blocks(l_index).DATE_TO       )    ;
2147        hr_utility.trace(' COMMENT_TEXT    =       '|| p_blocks(l_index).COMMENT_TEXT       )    ;
2148        hr_utility.trace(' PARENT_BUILDING_BLOCK_OVN     =       '|| p_blocks(l_index).PARENT_BUILDING_BLOCK_OVN        )    ;
2149        hr_utility.trace(' NEW    =       '|| p_blocks(l_index).NEW       )    ;
2150        hr_utility.trace(' CHANGED    =       '|| p_blocks(l_index).CHANGED       )    ;
2151        hr_utility.trace(' PROCESS    =       '|| p_blocks(l_index).PROCESS       )    ;
2152        hr_utility.trace(' APPLICATION_SET_ID    =       '|| p_blocks(l_index).APPLICATION_SET_ID       )    ;
2153        hr_utility.trace(' TRANSLATION_DISPLAY_KEY    =       '|| p_blocks(l_index).TRANSLATION_DISPLAY_KEY       )    ;
2154        hr_utility.trace('------------------------------------------------------');
2155 
2156        l_index := p_blocks.NEXT (l_index);
2157 
2158        END LOOP;
2159 
2160          hr_utility.trace('  p_blocks TABLE END ');
2161          hr_utility.trace(' *****************');
2162 
2163      end if;
2164 
2165 
2166    if (p_messages.count>0) then
2167 
2168 
2169      hr_utility.trace('  P_MESSAGES TABLE START ');
2170      hr_utility.trace(' *****************');
2171 
2172      l_index := p_messages.FIRST;
2173 
2174       LOOP
2175         EXIT WHEN NOT p_messages.EXISTS (l_index);
2176 
2177 
2178        hr_utility.trace(' MESSAGE_NAME        =   '|| p_messages(l_index).MESSAGE_NAME     );
2179        hr_utility.trace(' MESSAGE_LEVEL =   '|| p_messages(l_index).MESSAGE_LEVEL )    ;
2180        hr_utility.trace(' MESSAGE_FIELD =   '|| p_messages(l_index).MESSAGE_FIELD)    ;
2181        hr_utility.trace(' MESSAGE_TOKENS     =       '|| p_messages(l_index).MESSAGE_TOKENS        )    ;
2182        hr_utility.trace(' APPLICATION_SHORT_NAME     =       '|| p_messages(l_index).APPLICATION_SHORT_NAME        )    ;
2183        hr_utility.trace(' TIME_BUILDING_BLOCK_ID      =       '|| p_messages(l_index).TIME_BUILDING_BLOCK_ID        )    ;
2184        hr_utility.trace(' TIME_BUILDING_BLOCK_OVN  =       '|| p_messages(l_index).TIME_BUILDING_BLOCK_OVN        )    ;
2185        hr_utility.trace(' TIME_ATTRIBUTE_ID     =       '|| p_messages(l_index).TIME_ATTRIBUTE_ID        )    ;
2186        hr_utility.trace(' TIME_ATTRIBUTE_OVN     =       '|| p_messages(l_index).TIME_ATTRIBUTE_OVN        )    ;
2187        hr_utility.trace(' MESSAGE_EXTENT     =       '|| p_messages(l_index).MESSAGE_EXTENT        )    ;
2188 
2189        l_index := p_messages.NEXT (l_index);
2190 
2191        END LOOP;
2192 
2193          hr_utility.trace('  p_messages TABLE END ');
2194          hr_utility.trace(' *****************');
2195 
2196    end if;
2197 
2198 
2199       if (p_attributes.count>0) then
2200 
2201 
2202      hr_utility.trace('  ATTRIBUTES TABLE START ');
2203      hr_utility.trace(' *****************');
2204 
2205      l_index := p_attributes.FIRST;
2206 
2207       LOOP
2208         EXIT WHEN NOT p_attributes.EXISTS (l_index);
2209 
2210 
2211        hr_utility.trace(' TIME_ATTRIBUTE_ID =   '|| p_attributes(l_index).TIME_ATTRIBUTE_ID);
2212        hr_utility.trace(' BUILDING_BLOCK_ID =   '|| p_attributes(l_index).BUILDING_BLOCK_ID )    ;
2213        hr_utility.trace(' ATTRIBUTE_CATEGORY =   '|| p_attributes(l_index).ATTRIBUTE_CATEGORY)    ;
2214        hr_utility.trace(' ATTRIBUTE1     =       '|| p_attributes(l_index).ATTRIBUTE1        )    ;
2215        hr_utility.trace(' ATTRIBUTE2  (p_alias_definition_id)   =       '|| p_attributes(l_index).ATTRIBUTE2        )    ;
2216        hr_utility.trace(' ATTRIBUTE3  (l_alias_value_id)    =       '|| p_attributes(l_index).ATTRIBUTE3        )    ;
2217        hr_utility.trace(' ATTRIBUTE4  (p_alias_type)   =       '|| p_attributes(l_index).ATTRIBUTE4        )    ;
2218        hr_utility.trace(' ATTRIBUTE5     =       '|| p_attributes(l_index).ATTRIBUTE5        )    ;
2219        hr_utility.trace(' ATTRIBUTE6     =       '|| p_attributes(l_index).ATTRIBUTE6        )    ;
2220        hr_utility.trace(' ATTRIBUTE7     =       '|| p_attributes(l_index).ATTRIBUTE7        )    ;
2221        hr_utility.trace(' ATTRIBUTE8     =       '|| p_attributes(l_index).ATTRIBUTE8        )    ;
2222        hr_utility.trace(' ATTRIBUTE9     =       '|| p_attributes(l_index).ATTRIBUTE9        )    ;
2223        hr_utility.trace(' ATTRIBUTE10    =       '|| p_attributes(l_index).ATTRIBUTE10       )    ;
2224        hr_utility.trace(' ATTRIBUTE11    =       '|| p_attributes(l_index).ATTRIBUTE11       )    ;
2225        hr_utility.trace(' ATTRIBUTE12    =       '|| p_attributes(l_index).ATTRIBUTE12       )    ;
2226        hr_utility.trace(' ATTRIBUTE13    =       '|| p_attributes(l_index).ATTRIBUTE13       )    ;
2227        hr_utility.trace(' ATTRIBUTE14    =       '|| p_attributes(l_index).ATTRIBUTE14       )    ;
2228        hr_utility.trace(' ATTRIBUTE15    =       '|| p_attributes(l_index).ATTRIBUTE15       )    ;
2229        hr_utility.trace(' ATTRIBUTE16    =       '|| p_attributes(l_index).ATTRIBUTE16       )    ;
2230        hr_utility.trace(' ATTRIBUTE17    =       '|| p_attributes(l_index).ATTRIBUTE17       )    ;
2231        hr_utility.trace(' ATTRIBUTE18    =       '|| p_attributes(l_index).ATTRIBUTE18       )    ;
2232        hr_utility.trace(' ATTRIBUTE19    =       '|| p_attributes(l_index).ATTRIBUTE19       )    ;
2233        hr_utility.trace(' ATTRIBUTE20    =       '|| p_attributes(l_index).ATTRIBUTE20       )    ;
2234        hr_utility.trace(' ATTRIBUTE21    =       '|| p_attributes(l_index).ATTRIBUTE21       )    ;
2235        hr_utility.trace(' ATTRIBUTE22    =       '|| p_attributes(l_index).ATTRIBUTE22       )    ;
2236        hr_utility.trace(' ATTRIBUTE23    =       '|| p_attributes(l_index).ATTRIBUTE23       )    ;
2237        hr_utility.trace(' ATTRIBUTE24    =       '|| p_attributes(l_index).ATTRIBUTE24       )    ;
2238        hr_utility.trace(' ATTRIBUTE25    =       '|| p_attributes(l_index).ATTRIBUTE25       )    ;
2239        hr_utility.trace(' ATTRIBUTE26    =       '|| p_attributes(l_index).ATTRIBUTE26       )    ;
2240        hr_utility.trace(' ATTRIBUTE27    =       '|| p_attributes(l_index).ATTRIBUTE27       )    ;
2241        hr_utility.trace(' ATTRIBUTE28    =       '|| p_attributes(l_index).ATTRIBUTE28       )    ;
2242        hr_utility.trace(' ATTRIBUTE29  (p_alias_ref_object)  =       '|| p_attributes(l_index).ATTRIBUTE29       )    ;
2243        hr_utility.trace(' ATTRIBUTE30  (p_alias_value_name)  =       '|| p_attributes(l_index).ATTRIBUTE30       )    ;
2244        hr_utility.trace(' BLD_BLK_INFO_TYPE_ID = '|| p_attributes(l_index).BLD_BLK_INFO_TYPE_ID  );
2245        hr_utility.trace(' OBJECT_VERSION_NUMBER = '|| p_attributes(l_index).OBJECT_VERSION_NUMBER );
2246        hr_utility.trace(' NEW             =       '|| p_attributes(l_index).NEW                   );
2247        hr_utility.trace(' CHANGED              =  '|| p_attributes(l_index).CHANGED               );
2248        hr_utility.trace(' BLD_BLK_INFO_TYPE    =  '|| p_attributes(l_index).BLD_BLK_INFO_TYPE     );
2249        hr_utility.trace(' PROCESS              =  '|| p_attributes(l_index).PROCESS               );
2250        hr_utility.trace(' BUILDING_BLOCK_OVN   =  '|| p_attributes(l_index).BUILDING_BLOCK_OVN    );
2251        hr_utility.trace('------------------------------------------------------');
2252 
2253        l_index := p_attributes.NEXT (l_index);
2254 
2255        END LOOP;
2256 
2257          hr_utility.trace('  ATTRIBUTES TABLE END ');
2258          hr_utility.trace(' *****************');
2259 
2260            end if;
2261 
2262 
2263 
2264 end if;
2265 
2266 
2267      hxc_timecard_message_helper.processerrors
2268      (p_messages => p_messages);
2269 
2270   -- change end
2271   -- Bug 8888138
2272   --  Get_Messages should be used after verify_view_only
2273   -- get all the errors
2274   p_messages := hxc_timecard_message_helper.getMessages;
2275 
2276   --svg start Bug 9181950
2277     if NOT hxc_timecard_message_helper.noErrors then
2278     	--HXC_SVG_LOG.record_log('Reached here:svg');
2279      if g_debug then
2280     	hr_utility.trace('SVG: Rollingback to savepoint TK_SUB_SAVEPOINT for any Projects related updates');
2281      end if;
2282      rollback to TK_SUB_SAVEPOINT;
2283     end if;
2284   -- svg end
2285 
2286 
2287 
2288   hxc_timekeeper_errors.rollback_tc_or_set_err_status
2289      (p_message_table	=> p_messages
2290      ,p_blocks          => p_blocks
2291      ,p_attributes	=> p_attributes
2292      ,p_rollback	=> l_rollback
2293      ,p_status_error	=> l_status_error);
2294 
2295   --p_messages.delete;
2296   -- at this point we have the full message structure
2297   -- so we can pass it to deposit to main the -ve ids
2298   -- in the error table.
2299 
2300 --
2301 --  Store blocks and attributes
2302 --
2303   hxc_timecard_deposit.execute
2304    (p_blocks          => p_blocks
2305    ,p_attributes      => p_attributes
2306    ,p_timecard_blocks => l_timecard_blocks
2307    ,p_day_blocks      => l_day_blocks
2308    ,p_detail_blocks   => l_detail_blocks
2309    ,p_messages        => p_messages
2310    ,p_transaction_info=> l_transaction_info
2311    );
2312 
2313 
2314   p_timecard_id :=
2315        p_blocks(hxc_timecard_block_utils.find_active_timecard_index(p_blocks)).time_building_block_id;
2316   p_timecard_ovn:=
2317        p_blocks(hxc_timecard_block_utils.find_active_timecard_index(p_blocks)).object_version_number;
2318 
2319   --hxc_timecard_message_helper.processerrors
2320   --  (p_messages => p_messages);
2321 
2322   hxc_timecard_audit.maintain_latest_details
2323   (p_blocks        => p_blocks );
2324 
2325   /* Bug  8888904 */
2326 
2327   hxc_timecard_audit.maintain_rdb_snapshot
2328       (p_blocks => p_blocks,
2329      p_attributes => p_attributes);
2330 
2331 
2332  IF p_timekeeper_id IS NOT NULL and
2333     p_tk_audit_enabled = 'Y'    and
2334     p_tk_notify_to <> 'NONE' THEN
2335 
2336     open c_previous_timecard(p_timecard_id);
2337     fetch c_previous_timecard into l_previous_tk_item_key,l_previous_tk_item_type;
2338     if (c_previous_timecard%found)  then
2339 
2340    --Cancel notifications for TK Audit
2341 
2342 	hxc_timekeeper_wf_pkg.cancel_previous_notifications
2343 	( p_tk_audit_item_type => l_previous_tk_item_type
2344 	 ,p_tk_audit_item_key =>  l_previous_tk_item_key
2345 	);
2346 
2347     end if;
2348     close c_previous_timecard;
2349 
2350     tk_item_key :=
2351 	  hxc_timekeeper_wf_pkg.begin_audit_process
2352 	  (p_timecard_id   =>  p_timecard_id
2353 	  ,p_timecard_ovn  =>  p_timecard_ovn
2354 	  ,p_resource_id   =>  p_blocks(hxc_timecard_block_utils.find_active_timecard_index(p_blocks)).resource_id
2355 	  ,p_timekeeper_id => p_timekeeper_id
2356 	  ,p_tk_audit_enabled => p_tk_audit_enabled
2357 	  ,p_tk_notify_to   =>  p_tk_notify_to
2358 	  ,p_tk_notify_type =>  p_tk_notify_type
2359 	  ,p_property_table       => l_timecard_props
2360            );
2361 
2362 END IF;
2363 
2364  IF TK_ITEM_KEY IS NOT NULL THEN
2365     tk_audit_process_name := 'HXC_TK_AUDIT_PROCESS';
2366     tk_audit_item_type    := 'HXCTKWF';
2367  END IF;
2368   --
2369   -- Maintain summary table
2370   --
2371   hxc_timecard_summary_api.timecard_deposit
2372     (p_blocks => p_blocks
2373     ,p_approval_item_type    => NULL
2374     ,p_approval_process_name => NULL
2375     ,p_approval_item_key     => NULL
2376     ,p_tk_audit_item_type     => tk_audit_item_type
2377     ,p_tk_audit_process_name  => tk_audit_process_name
2378     ,p_tk_audit_item_key      => tk_item_key
2379     );
2380 
2381 --
2382 -- Starting Approval
2383 --
2384 IF not(l_status_error) THEN
2385 
2386 l_item_key :=
2387    hxc_timecard_approval.begin_approval
2388      (p_blocks         => p_blocks
2389      ,p_item_type      => hxc_timecard_deposit_common.c_hxcempitemtype
2390      ,p_process_name   => hxc_timecard_deposit_common.c_hxcapprovalprocess
2391      ,p_resubmitted    => l_resubmit
2392      ,p_timecard_props => l_timecard_props
2393      ,p_messages       => p_messages
2394      );
2395 
2396 END IF;
2397 
2398   -- start the approval only if the timecard has
2399   -- a different status than 'Error'
2400 --
2401 --  Audit this transaction
2402 --
2403   --p_messages.delete;
2404 
2405   hxc_timecard_audit.audit_deposit
2406     (p_transaction_info => l_transaction_info
2407     ,p_messages => p_messages
2408     );
2409 
2410 
2411 
2412   --hxc_timecard_message_helper.processerrors
2413   --  (p_messages => p_messages);
2414 
2415   -- get all the errors
2416   --p_messages := hxc_timecard_message_helper.getMessages;
2417 
2418 
2419   -- set the out parameters --
2420 
2421   hxc_timecard_summary_pkg.update_summary_row
2422     (p_timecard_id => p_timecard_id
2423     ,p_approval_item_type    => hxc_timecard_deposit_common.c_hxcempitemtype
2424     ,p_approval_process_name => hxc_timecard_deposit_common.c_hxcapprovalprocess
2425     ,p_approval_item_key     => l_item_key
2426     );
2427 
2428   hr_utility.trace('Calling maintain_errors');
2429 
2430   hxc_timekeeper_errors.maintain_errors
2431   	(p_messages 	=> p_messages
2432   	,p_timecard_id  => p_timecard_id
2433   	,p_timecard_ovn => p_timecard_ovn);
2434 
2435 /*
2436   if g_debug THEN
2437    hxc_debug_timecard.writeMessages(p_messages,'HXC_TIMEKEEPER',80);
2438   end if;
2439 */
2440 
2441    -- OTL-Absences Integration (Bug 8779478)
2442   -- Modified code to rollback in case on online retrieval errors (Bug 8888138)
2443   IF (nvl(fnd_profile.value('HR_ABS_OTL_INTEGRATION'), 'N') = 'Y') THEN
2444     IF  (p_timecard_id > 0 and hxc_timecard_message_helper.noerrors ) THEN
2445 
2446 	l_abs_ret_messages:= HXC_MESSAGE_TABLE_TYPE();
2447 
2448 	IF g_debug THEN
2449 	  hr_utility.trace('ABS:Initiated Online Retrieval from HXC_TIMEKEEPER.SUBMIT_TIMECARD');
2450 	END IF;
2451 
2452         l_resource_id     := p_blocks(l_timecard_index).resource_id;
2453         l_tc_start        := fnd_date.canonical_to_date(p_blocks(l_timecard_index).start_time);
2454         l_tc_stop         := fnd_date.canonical_to_date(p_blocks(l_timecard_index).stop_time);
2455         l_approval_status := p_blocks(l_timecard_index).approval_status;
2456 
2457 
2458         HXC_ABS_RETRIEVAL_PKG.POST_ABSENCES (l_resource_id,
2459   	  			            l_tc_start,
2460   					    l_tc_stop,
2461   					    l_approval_status,
2462   					    l_abs_ret_messages);
2463 
2464   	IF g_debug THEN
2465   	  hr_utility.trace('ABS:p_messages.COUNT = '||l_abs_ret_messages.COUNT);
2466   	END IF;
2467 
2468 	IF l_abs_ret_messages.COUNT > 0 THEN
2469 	    IF g_debug THEN
2470 	      hr_utility.trace('ABS: Online Retrieval failed - Rollback changes');
2471 	    END IF;
2472 
2473 	    rollback to TK_SUB_SAVEPOINT;
2474 
2475 	    hxc_timekeeper_errors.maintain_errors
2476 	    	    	          	(p_messages 	=> l_abs_ret_messages
2477 	    	    	          	,p_timecard_id  => p_timecard_id
2478   	                	        ,p_timecard_ovn => p_timecard_ovn);
2479 
2480 
2481 	END IF;
2482 
2483     END IF;
2484   END IF;
2485 
2486 
2487 
2488 END submit_timecard;
2489 
2490 ----------------------------------------------------------------------------
2491 -- Delete Timecard Procedure
2492 -- This procedure....
2493 ----------------------------------------------------------------------------
2494 Procedure delete_timecard
2495            (p_timecard_id  in out nocopy hxc_time_building_blocks.time_building_block_id%type
2496            ,p_messages        in out nocopy HXC_MESSAGE_TABLE_TYPE
2497            ) is
2498 
2499 /*
2500   hxc_timecard_deposit_common.delete_timecard
2501            (p_mode         => 'DELETE'
2502            ,p_template     => 'N'
2503            ,p_timecard_id  => p_timecard_id
2504            );
2505 */
2506 
2507 cursor c_previous_timecard(
2508 			      p_timecard_id in hxc_timecard_summary.timecard_id%type) is
2509   select tk_audit_item_key,tk_audit_item_type,timecard_ovn
2510     from hxc_timecard_summary
2511    where timecard_id = p_timecard_id;
2512 
2513 /*
2514 cursor c_timecard_ovn
2515         (p_timecard_id in hxc_time_building_blocks.time_building_block_id%type) is
2516   select tbb.object_version_number
2517     from hxc_time_building_blocks tbb
2518    where tbb.time_building_block_id = p_timecard_id
2519      and tbb.date_to = hr_general.end_of_time;
2520 */
2521 
2522 CURSOR  csr_chk_transfer (p_timecard_id hxc_time_building_blocks.time_building_block_id%type) IS
2523 SELECT  1
2524 FROM	dual
2525 WHERE EXISTS (
2526 	SELECT	1
2527 	FROM	hxc_transactions t
2528 	,	hxc_transaction_details td
2529 	WHERE	td.time_building_block_id	= p_timecard_id
2530 	AND	t.transaction_id	= td.transaction_id
2531 	AND	t.type			= 'RETRIEVAL'
2532 	AND	t.status		= 'SUCCESS' );
2533 
2534 l_blocks     hxc_block_table_type     := hxc_block_table_type();
2535 l_attributes hxc_attribute_table_type := hxc_attribute_table_type();
2536 l_messages   hxc_message_table_type   := hxc_message_table_type();
2537 
2538 l_timecard_blocks  hxc_timecard.block_list;
2539 l_day_blocks       hxc_timecard.block_list;
2540 l_detail_blocks    hxc_timecard.block_list;
2541 
2542 l_transaction_info hxc_timecard.transaction_info;
2543 l_timecard_props   hxc_timecard_prop_table_type;
2544 
2545 l_dummy boolean := true;
2546 
2547 l_timecard_ovn     hxc_time_building_blocks.object_version_number%type;
2548 l_timecard_index   number;
2549 
2550 l_status_error	   BOOLEAN := FALSE;
2551 
2552 l_rollback	   BOOLEAN := FALSE;
2553 e_timekeeper_check EXCEPTION;
2554 
2555 l_previous_tk_item_key   hxc_timecard_summary.tk_audit_item_key%type;
2556 l_previous_tk_item_type  hxc_timecard_summary.tk_audit_item_type%type;
2557 
2558 l_dummy_num		NUMBER(1);
2559 
2560 l_resource_id      NUMBER;
2561 l_tc_start         DATE;
2562 l_tc_stop          DATE;
2563 l_approval_status  VARCHAR2(20);
2564 
2565 l_abs_ret_messages	HXC_MESSAGE_TABLE_TYPE;
2566 
2567 Begin
2568 
2569 g_debug:= hr_utility.debug_enabled;
2570 
2571 -- set savepoint
2572 savepoint TK_DEL_SAVEPOINT;
2573 
2574 --
2575 -- Find the corresponding ovn of the timecard
2576 --
2577 
2578 open c_previous_timecard(p_timecard_id);
2579 fetch c_previous_timecard into l_previous_tk_item_key,l_previous_tk_item_type,l_timecard_ovn;
2580 if(c_previous_timecard%notfound) then
2581   close c_previous_timecard;
2582   fnd_message.set_name('HXC','HXC_NO_ACTIVE_TIMECARD');
2583   fnd_message.raise_error;
2584 else
2585 
2586   --Cancel notifications for TK Audit
2587   hxc_timekeeper_wf_pkg.cancel_previous_notifications
2588    ( p_tk_audit_item_type => l_previous_tk_item_type
2589     ,p_tk_audit_item_key =>  l_previous_tk_item_key
2590    );
2591 close c_previous_timecard;
2592 
2593 end if;
2594 
2595 --
2596 -- Initialize the message stack
2597 --
2598 
2599   fnd_msg_pub.initialize;
2600   hxc_timecard_message_helper.initializeErrors;
2601 --
2602 -- Get the timecard or timecard template blocks and attributes
2603 --
2604 
2605   l_blocks := hxc_timecard_deposit_common.load_blocks(p_timecard_id, l_timecard_ovn);
2606   l_attributes := hxc_timecard_deposit_common.load_attributes(l_blocks);
2607 
2608 --
2609 -- Main delete processing
2610 --
2611 
2612   l_timecard_index := hxc_timecard_block_utils.find_active_timecard_index(l_blocks);
2613 
2614 -- we need to check if the timecard is in error and
2615 -- if it has been retrieved.
2616   IF (l_blocks(l_timecard_index).approval_status = 'ERROR')
2617   THEN
2618     OPEN  csr_chk_transfer(p_timecard_id);
2619     FETCH csr_chk_transfer INTO l_dummy_num;
2620 
2621     IF csr_chk_transfer%FOUND
2622     THEN
2623       close csr_chk_transfer;
2624 
2625       -- add the message in the message table
2626       hxc_timecard_message_helper.addErrorToCollection
2627             (p_messages,
2628              'HXC_DEL_ERROR_RET',
2629              hxc_timecard.c_error,
2630              null,
2631              null,
2632              hxc_timecard.c_hxc,
2633              null,
2634              null,
2635              null,
2636              null
2637              );
2638 
2639       raise e_timekeeper_check;
2640     END IF;
2641 
2642     close csr_chk_transfer;
2643   END IF;
2644 
2645   hxc_timecard_properties.get_preference_properties
2646     (p_validate             => hxc_timecard.c_yes
2647     ,p_resource_id          => l_blocks(l_timecard_index).resource_id
2648     ,p_timecard_start_time  => fnd_date.canonical_to_date(l_blocks(l_timecard_index).start_time)
2649     ,p_timecard_stop_time   => fnd_date.canonical_to_date(l_blocks(l_timecard_index).stop_time)
2650     ,p_for_timecard         => false
2651     ,p_messages             => l_messages
2652     ,p_property_table       => l_timecard_props
2653     );
2654 
2655   hxc_timecard_message_helper.processerrors
2656     (p_messages => l_messages);
2657 
2658 
2659   hxc_timecard_block_utils.sort_blocks
2660    (p_blocks          => l_blocks
2661    ,p_timecard_blocks => l_timecard_blocks
2662    ,p_day_blocks      => l_day_blocks
2663    ,p_detail_blocks   => l_detail_blocks
2664    );
2665 
2666   hxc_block_attribute_update.set_process_flags
2667     (p_blocks => l_blocks
2668     ,p_attributes => l_attributes
2669     );
2670 
2671   hxc_timecard_validation.deposit_validation
2672     (p_blocks        => l_blocks
2673     ,p_attributes    => l_attributes
2674     ,p_messages      => l_messages
2675     ,p_props         => l_timecard_props
2676     ,p_deposit_mode  => hxc_timecard.c_submit
2677     ,p_template      => 'N'
2678     ,p_resubmit      => hxc_timecard_deposit_common.c_delete
2679     ,p_can_deposit   => l_dummy
2680     );
2681 
2682   hxc_timecard_message_helper.processerrors
2683     (p_messages => l_messages);
2684 
2685 
2686   -- get all the errors
2687   l_messages := hxc_timecard_message_helper.getMessages;
2688 /*
2689   -- debug
2690   IF g_debug THEN
2691     hxc_debug_timecard.writeMessages(p_messages,'HXC_TIMEKEEPER',70);
2692   END IF;
2693 */
2694 
2695    --svg start Bug 9181950
2696     if NOT hxc_timecard_message_helper.noErrors then
2697     	--HXC_SVG_LOG.record_log('Reached here:svg');
2698      if g_debug then
2699     	hr_utility.trace('SVG: Rollingback to savepoint TK_DEL_SAVEPOINT for any Projects related updates');
2700      end if;
2701      rollback to TK_DEL_SAVEPOINT;
2702     end if;
2703   -- svg end
2704 
2705 
2706 
2707   hxc_timekeeper_errors.rollback_tc_or_set_err_status
2708      (p_message_table	=> l_messages
2709      ,p_blocks          => l_blocks
2710      ,p_attributes	=> l_attributes
2711      ,p_rollback	=> l_rollback
2712      ,p_status_error	=> l_status_error);
2713 
2714 --  l_messages.delete;
2715 --
2716 -- if the rollback is set then we need to execute it
2717 --
2718   IF l_rollback THEN
2719     -- we are setting the error to be
2720     -- send
2721     p_messages := l_messages;
2722     l_messages.delete;
2723     raise e_timekeeper_check;
2724 
2725   ELSE
2726 
2727     --l_messages.delete;
2728     hxc_timecard_deposit.execute
2729     (p_blocks 		=> l_blocks
2730     ,p_attributes 	=> l_attributes
2731     ,p_timecard_blocks 	=> l_timecard_blocks
2732     ,p_day_blocks 	=> l_day_blocks
2733     ,p_detail_blocks 	=> l_detail_blocks
2734     ,p_messages 	=> l_messages
2735     ,p_transaction_info => l_transaction_info
2736     );
2737 
2738     --hxc_timecard_message_helper.processerrors
2739     --(p_messages => l_messages);
2740 
2741     end_date_app_period(p_timecard_id);
2742 
2743     hxc_timecard_summary_api.delete_timecard
2744       (p_blocks => l_blocks
2745       ,p_timecard_id => p_timecard_id
2746       );
2747 
2748     --l_messages.delete;
2749     hxc_timecard_audit.audit_deposit
2750     (p_transaction_info => l_transaction_info
2751     ,p_messages => l_messages
2752     );
2753    -- hxc_timecard_message_helper.processerrors
2754    -- (p_messages => l_messages);
2755 
2756   hxc_timecard_audit.maintain_latest_details
2757   (p_blocks        => l_blocks );
2758 
2759   /* Bug 8888904 */
2760   hxc_timecard_audit.maintain_rdb_snapshot
2761       (p_blocks => l_blocks,
2762        p_attributes => l_attributes);
2763 
2764   hr_utility.trace('Calling maintain_errors');
2765 
2766     hxc_timecard_message_helper.prepareErrors;
2767 
2768     hxc_timekeeper_errors.maintain_errors
2769   	(p_messages 	=> l_messages
2770   	,p_timecard_id  => p_timecard_id
2771   	,p_timecard_ovn => l_timecard_ovn);
2772 
2773 
2774 
2775     -- get all the errors
2776     --l_messages := hxc_timecard_message_helper.getMessages;
2777 /*
2778     if g_debug THEN
2779      hxc_debug_timecard.writeMessages(p_messages,'HXC_TIMEKEEPER',80);
2780     end if;
2781 */
2782 
2783     -- OTL-Absences Integration (Bug 8779478)
2784     -- Modified code to rollback in case on online retrieval errors (Bug 8888138)
2785     IF (nvl(fnd_profile.value('HR_ABS_OTL_INTEGRATION'), 'N') = 'Y') THEN
2786       IF  (p_timecard_id > 0 and hxc_timecard_message_helper.noerrors) THEN
2787 
2788 	IF g_debug THEN
2789 	  hr_utility.trace('ABS:Initiated Online Retrieval from HXC_TIMEKEEPER.DELETE_TIMECARD');
2790 	END IF;
2791 
2792 	l_abs_ret_messages:= HXC_MESSAGE_TABLE_TYPE();
2793 
2794         l_resource_id     := l_blocks(l_timecard_index).resource_id;
2795         l_tc_start        := fnd_date.canonical_to_date(l_blocks(l_timecard_index).start_time);
2796         l_tc_stop         := fnd_date.canonical_to_date(l_blocks(l_timecard_index).stop_time);
2797         l_approval_status := l_blocks(l_timecard_index).approval_status;
2798 
2799 
2800         HXC_ABS_RETRIEVAL_PKG.POST_ABSENCES (l_resource_id,
2801   	  			             l_tc_start,
2802   					     l_tc_stop,
2803   					     'DELETED',
2804   					     l_abs_ret_messages);
2805 
2806   	IF g_debug THEN
2807   	  hr_utility.trace('ABS:l_messages.COUNT = '||l_abs_ret_messages.COUNT);
2808   	END IF;
2809 
2810 	IF l_abs_ret_messages.COUNT > 0 THEN
2811 	    IF g_debug THEN
2812 	      hr_utility.trace('ABS: Online Retrieval failed - Rollback changes');
2813 	    END IF;
2814 
2815 	    rollback to TK_DEL_SAVEPOINT;
2816 
2817 	    hxc_timekeeper_errors.maintain_errors
2818 	      	(p_messages 	=> l_abs_ret_messages
2819 	      	,p_timecard_id  => p_timecard_id
2820   	        ,p_timecard_ovn => l_timecard_ovn);
2821 
2822 
2823 	END IF;
2824 
2825       END IF;
2826     END IF;
2827 
2828 
2829 
2830   end if;
2831 
2832 
2833 EXCEPTION
2834   WHEN e_timekeeper_check then
2835     hxc_timecard_message_helper.prepareErrors;
2836     rollback;
2837 
2838 End delete_timecard;
2839 
2840 
2841 
2842 END hxc_timekeeper;