7: g_oit_migration CONSTANT VARCHAR2 (30) := 'OIT_MIGRATION';
8: g_debug BOOLEAN := hr_utility.debug_enabled;
9:
10: FUNCTION perform_audit (
11: p_props IN hxc_timecard_prop_table_type,
12: p_blocks IN hxc_block_table_type
13: )
14: RETURN BOOLEAN
15: AS
17: l_audit BOOLEAN;
18: BEGIN
19: l_cla_terg_id :=
20: TO_NUMBER
21: (hxc_timecard_properties.find_property_value
22: (p_props,
23: 'TsPerAuditRequirementsAuditRequirements',
24: NULL,
25: NULL,
24: NULL,
25: NULL,
26: p_start_date => fnd_date.canonical_to_date
27: (p_blocks
28: (hxc_timecard_block_utils.find_active_timecard_index
29: (p_blocks)
30: ).start_time
31: ),
32: p_stop_date => fnd_date.canonical_to_date
30: ).start_time
31: ),
32: p_stop_date => fnd_date.canonical_to_date
33: (p_blocks
34: (hxc_timecard_block_utils.find_active_timecard_index
35: (p_blocks)
36: ).stop_time
37: )
38: )
178: p_blocks IN hxc_block_table_type
179: )
180: IS
181: l_proc VARCHAR2 (72);
182: l_resubmit VARCHAR2 (10) := hxc_timecard.c_no;
183: l_item_key wf_items.item_key%TYPE := NULL;
184: l_messages hxc_message_table_type := hxc_message_table_type();
185: l_timecard_props hxc_timecard_prop_table_type := hxc_timecard_prop_table_type();
186: l_timecard_index number;
181: l_proc VARCHAR2 (72);
182: l_resubmit VARCHAR2 (10) := hxc_timecard.c_no;
183: l_item_key wf_items.item_key%TYPE := NULL;
184: l_messages hxc_message_table_type := hxc_message_table_type();
185: l_timecard_props hxc_timecard_prop_table_type := hxc_timecard_prop_table_type();
186: l_timecard_index number;
187: BEGIN
188: g_debug := hr_utility.debug_enabled;
189:
192: l_proc := g_package || 'begin_approval';
193: hr_utility.set_location ('Entering:' || l_proc, 10);
194: END IF;
195:
196: l_timecard_index := hxc_timecard_block_utils.find_active_timecard_index(p_blocks);
197:
198: hxc_timecard_properties.get_preference_properties
199: (p_validate => hxc_timecard.c_no,
200: p_resource_id => p_blocks(l_timecard_index).resource_id,
194: END IF;
195:
196: l_timecard_index := hxc_timecard_block_utils.find_active_timecard_index(p_blocks);
197:
198: hxc_timecard_properties.get_preference_properties
199: (p_validate => hxc_timecard.c_no,
200: p_resource_id => p_blocks(l_timecard_index).resource_id,
201: p_timecard_start_time => hxc_timecard_block_utils.date_value(p_blocks(l_timecard_index).start_time),
202: p_timecard_stop_time => hxc_timecard_block_utils.date_value(p_blocks(l_timecard_index).stop_time),
195:
196: l_timecard_index := hxc_timecard_block_utils.find_active_timecard_index(p_blocks);
197:
198: hxc_timecard_properties.get_preference_properties
199: (p_validate => hxc_timecard.c_no,
200: p_resource_id => p_blocks(l_timecard_index).resource_id,
201: p_timecard_start_time => hxc_timecard_block_utils.date_value(p_blocks(l_timecard_index).start_time),
202: p_timecard_stop_time => hxc_timecard_block_utils.date_value(p_blocks(l_timecard_index).stop_time),
203: p_for_timecard => false,
197:
198: hxc_timecard_properties.get_preference_properties
199: (p_validate => hxc_timecard.c_no,
200: p_resource_id => p_blocks(l_timecard_index).resource_id,
201: p_timecard_start_time => hxc_timecard_block_utils.date_value(p_blocks(l_timecard_index).start_time),
202: p_timecard_stop_time => hxc_timecard_block_utils.date_value(p_blocks(l_timecard_index).stop_time),
203: p_for_timecard => false,
204: p_timecard_bb_id => p_timecard_id,
205: p_timecard_bb_ovn => p_blocks(l_timecard_index).object_version_number,
198: hxc_timecard_properties.get_preference_properties
199: (p_validate => hxc_timecard.c_no,
200: p_resource_id => p_blocks(l_timecard_index).resource_id,
201: p_timecard_start_time => hxc_timecard_block_utils.date_value(p_blocks(l_timecard_index).start_time),
202: p_timecard_stop_time => hxc_timecard_block_utils.date_value(p_blocks(l_timecard_index).stop_time),
203: p_for_timecard => false,
204: p_timecard_bb_id => p_timecard_id,
205: p_timecard_bb_ovn => p_blocks(l_timecard_index).object_version_number,
206: p_messages => l_messages,
206: p_messages => l_messages,
207: p_property_table => l_timecard_props
208: );
209:
210: hxc_timecard_message_helper.processerrors
211: (p_messages => l_messages);
212:
213: -- Determine if this is a resubmitted timecard
214: l_timecard_index :=
211: (p_messages => l_messages);
212:
213: -- Determine if this is a resubmitted timecard
214: l_timecard_index :=
215: hxc_timecard_block_utils.find_active_timecard_index (p_blocks);
216:
217: IF (hxc_timecard_block_utils.date_value
218: (p_blocks (l_timecard_index).date_to
219: ) = hr_general.end_of_time
213: -- Determine if this is a resubmitted timecard
214: l_timecard_index :=
215: hxc_timecard_block_utils.find_active_timecard_index (p_blocks);
216:
217: IF (hxc_timecard_block_utils.date_value
218: (p_blocks (l_timecard_index).date_to
219: ) = hr_general.end_of_time
220: )
221: THEN
219: ) = hr_general.end_of_time
220: )
221: THEN
222: l_resubmit :=
223: hxc_timecard_approval.is_timecard_resubmitted
224: (p_blocks (l_timecard_index).time_building_block_id,
225: p_blocks (l_timecard_index).object_version_number,
226: p_blocks (l_timecard_index).resource_id,
227: fnd_date.canonical_to_date
231: (p_blocks (l_timecard_index).stop_time
232: )
233: );
234: ELSE
235: l_resubmit := hxc_timecard.c_delete;
236: END IF;
237:
238: l_item_key :=
239: hxc_timecard_approval.begin_approval
235: l_resubmit := hxc_timecard.c_delete;
236: END IF;
237:
238: l_item_key :=
239: hxc_timecard_approval.begin_approval
240: (p_blocks => p_blocks,
241: p_item_type => 'HXCEMP',
242: p_process_name => 'HXC_APPROVAL',
243: p_resubmitted => l_resubmit,
244: p_timecard_props => l_timecard_props,
245: p_messages => l_messages
246: );
247:
248: hxc_timecard_message_helper.processerrors
249: (p_messages => l_messages);
250:
251: hxc_timecard_summary_pkg.update_summary_row
252: (p_timecard_id => p_timecard_id,
247:
248: hxc_timecard_message_helper.processerrors
249: (p_messages => l_messages);
250:
251: hxc_timecard_summary_pkg.update_summary_row
252: (p_timecard_id => p_timecard_id,
253: p_approval_item_type => 'HXCEMP',
254: p_approval_process_name => 'HXC_APPROVAL',
255: p_approval_item_key => l_item_key
273: --
274: -- Description: Private Procedure that can will be used to Save the timecard
275: -- (as oppose to Submit it). This will store the Timecard in the
276: -- DB with a status of WORKING. This whole procedure is mimicking
277: -- the Save as it happens in the deposit wrapper HXC_TIMECARD.
278: -----------------------------------------------------------------------------
279: PROCEDURE save_timecard (
280: p_blocks IN OUT NOCOPY hxc_block_table_type,
281: p_attributes IN OUT NOCOPY hxc_attribute_table_type,
283: p_timecard_id OUT NOCOPY hxc_time_building_blocks.time_building_block_id%TYPE,
284: p_timecard_ovn OUT NOCOPY hxc_time_building_blocks.object_version_number%TYPE
285: )
286: IS
287: l_timecard_blocks hxc_timecard.block_list;
288: l_day_blocks hxc_timecard.block_list;
289: l_detail_blocks hxc_timecard.block_list;
290: l_transaction_info hxc_timecard.transaction_info;
291: l_timecard_props hxc_timecard_prop_table_type;
284: p_timecard_ovn OUT NOCOPY hxc_time_building_blocks.object_version_number%TYPE
285: )
286: IS
287: l_timecard_blocks hxc_timecard.block_list;
288: l_day_blocks hxc_timecard.block_list;
289: l_detail_blocks hxc_timecard.block_list;
290: l_transaction_info hxc_timecard.transaction_info;
291: l_timecard_props hxc_timecard_prop_table_type;
292: l_proc VARCHAR2 (50) := g_package || 'save_timecard';
285: )
286: IS
287: l_timecard_blocks hxc_timecard.block_list;
288: l_day_blocks hxc_timecard.block_list;
289: l_detail_blocks hxc_timecard.block_list;
290: l_transaction_info hxc_timecard.transaction_info;
291: l_timecard_props hxc_timecard_prop_table_type;
292: l_proc VARCHAR2 (50) := g_package || 'save_timecard';
293: l_timecard_index NUMBER;
286: IS
287: l_timecard_blocks hxc_timecard.block_list;
288: l_day_blocks hxc_timecard.block_list;
289: l_detail_blocks hxc_timecard.block_list;
290: l_transaction_info hxc_timecard.transaction_info;
291: l_timecard_props hxc_timecard_prop_table_type;
292: l_proc VARCHAR2 (50) := g_package || 'save_timecard';
293: l_timecard_index NUMBER;
294: l_old_style_blks hxc_self_service_time_deposit.timecard_info;
287: l_timecard_blocks hxc_timecard.block_list;
288: l_day_blocks hxc_timecard.block_list;
289: l_detail_blocks hxc_timecard.block_list;
290: l_transaction_info hxc_timecard.transaction_info;
291: l_timecard_props hxc_timecard_prop_table_type;
292: l_proc VARCHAR2 (50) := g_package || 'save_timecard';
293: l_timecard_index NUMBER;
294: l_old_style_blks hxc_self_service_time_deposit.timecard_info;
295: l_old_style_attrs hxc_self_service_time_deposit.building_block_attribute_info;
295: l_old_style_attrs hxc_self_service_time_deposit.building_block_attribute_info;
296: l_old_messages hxc_self_service_time_deposit.message_table;
297: BEGIN
298: fnd_msg_pub.initialize;
299: hxc_timecard_message_helper.initializeerrors;
300: hxc_time_category_utils_pkg.push_timecard (p_blocks, p_attributes);
301: p_messages := hxc_message_table_type ();
302: hxc_timecard_block_utils.initialize_timecard_index;
303: -- Check input parameters
298: fnd_msg_pub.initialize;
299: hxc_timecard_message_helper.initializeerrors;
300: hxc_time_category_utils_pkg.push_timecard (p_blocks, p_attributes);
301: p_messages := hxc_message_table_type ();
302: hxc_timecard_block_utils.initialize_timecard_index;
303: -- Check input parameters
304: hxc_deposit_checks.check_inputs (p_blocks => p_blocks,
305: p_attributes => p_attributes,
306: p_deposit_mode => hxc_timecard.c_save,
302: hxc_timecard_block_utils.initialize_timecard_index;
303: -- Check input parameters
304: hxc_deposit_checks.check_inputs (p_blocks => p_blocks,
305: p_attributes => p_attributes,
306: p_deposit_mode => hxc_timecard.c_save,
307: p_template => hxc_timecard.c_no,
308: p_messages => p_messages
309: );
310: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
303: -- Check input parameters
304: hxc_deposit_checks.check_inputs (p_blocks => p_blocks,
305: p_attributes => p_attributes,
306: p_deposit_mode => hxc_timecard.c_save,
307: p_template => hxc_timecard.c_no,
308: p_messages => p_messages
309: );
310: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
311: -- First we are getting the preferences
306: p_deposit_mode => hxc_timecard.c_save,
307: p_template => hxc_timecard.c_no,
308: p_messages => p_messages
309: );
310: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
311: -- First we are getting the preferences
312: l_timecard_index :=
313: hxc_timecard_block_utils.find_active_timecard_index (p_blocks);
314: hxc_timecard_properties.get_preference_properties
309: );
310: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
311: -- First we are getting the preferences
312: l_timecard_index :=
313: hxc_timecard_block_utils.find_active_timecard_index (p_blocks);
314: hxc_timecard_properties.get_preference_properties
315: (p_validate => hxc_timecard.c_yes,
316: p_resource_id => p_blocks (l_timecard_index).resource_id,
317: p_timecard_start_time => fnd_date.canonical_to_date
310: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
311: -- First we are getting the preferences
312: l_timecard_index :=
313: hxc_timecard_block_utils.find_active_timecard_index (p_blocks);
314: hxc_timecard_properties.get_preference_properties
315: (p_validate => hxc_timecard.c_yes,
316: p_resource_id => p_blocks (l_timecard_index).resource_id,
317: p_timecard_start_time => fnd_date.canonical_to_date
318: (p_blocks (l_timecard_index).start_time
311: -- First we are getting the preferences
312: l_timecard_index :=
313: hxc_timecard_block_utils.find_active_timecard_index (p_blocks);
314: hxc_timecard_properties.get_preference_properties
315: (p_validate => hxc_timecard.c_yes,
316: p_resource_id => p_blocks (l_timecard_index).resource_id,
317: p_timecard_start_time => fnd_date.canonical_to_date
318: (p_blocks (l_timecard_index).start_time
319: ),
323: p_for_timecard => FALSE,
324: p_messages => p_messages,
325: p_property_table => l_timecard_props
326: );
327: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
328: -- p_messages.DELETE;
329: -- Sort blocks
330: hxc_timecard_block_utils.sort_blocks
331: (p_blocks => p_blocks,
326: );
327: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
328: -- p_messages.DELETE;
329: -- Sort blocks
330: hxc_timecard_block_utils.sort_blocks
331: (p_blocks => p_blocks,
332: p_timecard_blocks => l_timecard_blocks,
333: p_day_blocks => l_day_blocks,
334: p_detail_blocks => l_detail_blocks
340: p_days => l_day_blocks,
341: p_details => l_detail_blocks,
342: p_messages => p_messages
343: );
344: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
345: -- Add the security attributes
346: -- ARR: 115.26 Add message structure
347: hxc_security.add_security_attribute
348: (p_blocks => p_blocks,
349: p_attributes => p_attributes,
350: p_timecard_props => l_timecard_props,
351: p_messages => p_messages
352: );
353: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
354: -- Translate any aliases
355: hxc_timecard_deposit_common.alias_translation
356: (p_blocks => p_blocks,
357: p_attributes => p_attributes,
351: p_messages => p_messages
352: );
353: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
354: -- Translate any aliases
355: hxc_timecard_deposit_common.alias_translation
356: (p_blocks => p_blocks,
357: p_attributes => p_attributes,
358: p_messages => p_messages
359: );
356: (p_blocks => p_blocks,
357: p_attributes => p_attributes,
358: p_messages => p_messages
359: );
360: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
361: -- Set the block and attribute update process flags Based on the data sent
362: -- and in the db
363: hxc_block_attribute_update.set_process_flags
364: (p_blocks => p_blocks,
363: hxc_block_attribute_update.set_process_flags
364: (p_blocks => p_blocks,
365: p_attributes => p_attributes
366: );
367: hxc_timecard_attribute_utils.remove_deleted_attributes
368: (p_attributes => p_attributes);
369: /*
370: Validate the set up for the user
371:
369: /*
370: Validate the set up for the user
371:
372: validate_setup
373: (p_deposit_mode => hxc_timecard.c_save
374: ,p_blocks => p_blocks
375: ,p_attributes => p_attributes
376: ,p_messages => p_messages
377: );
375: ,p_attributes => p_attributes
376: ,p_messages => p_messages
377: );
378:
379: hxc_timecard_message_helper.processerrors
380: (p_messages => p_messages);
381: */ -- Call time entry rules for save
382:
383: l_old_style_blks :=
380: (p_messages => p_messages);
381: */ -- Call time entry rules for save
382:
383: l_old_style_blks :=
384: hxc_timecard_block_utils.convert_to_dpwr_blocks (p_blocks);
385: l_old_style_attrs :=
386: hxc_timecard_attribute_utils.convert_to_dpwr_attributes (p_attributes);
387:
388: hxc_time_entry_rules_utils_pkg.execute_time_entry_rules
382:
383: l_old_style_blks :=
384: hxc_timecard_block_utils.convert_to_dpwr_blocks (p_blocks);
385: l_old_style_attrs :=
386: hxc_timecard_attribute_utils.convert_to_dpwr_attributes (p_attributes);
387:
388: hxc_time_entry_rules_utils_pkg.execute_time_entry_rules
389: (p_operation => hxc_timecard.c_save,
390: p_time_building_blocks => l_old_style_blks,
385: l_old_style_attrs :=
386: hxc_timecard_attribute_utils.convert_to_dpwr_attributes (p_attributes);
387:
388: hxc_time_entry_rules_utils_pkg.execute_time_entry_rules
389: (p_operation => hxc_timecard.c_save,
390: p_time_building_blocks => l_old_style_blks,
391: p_time_attributes => l_old_style_attrs,
392: p_messages => l_old_messages,
393: p_resubmit => hxc_timecard.c_no,
389: (p_operation => hxc_timecard.c_save,
390: p_time_building_blocks => l_old_style_blks,
391: p_time_attributes => l_old_style_attrs,
392: p_messages => l_old_messages,
393: p_resubmit => hxc_timecard.c_no,
394: p_blocks => p_blocks,
395: p_attributes => p_attributes
396: );
397: hxc_timecard_message_utils.append_old_messages
393: p_resubmit => hxc_timecard.c_no,
394: p_blocks => p_blocks,
395: p_attributes => p_attributes
396: );
397: hxc_timecard_message_utils.append_old_messages
398: (p_messages => p_messages,
399: p_old_messages => l_old_messages,
400: p_retrieval_process_id => NULL
401: );
398: (p_messages => p_messages,
399: p_old_messages => l_old_messages,
400: p_retrieval_process_id => NULL
401: );
402: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
403:
404: -- Store blocks and attributes
405: IF hxc_timecard_message_helper.noerrors
406: THEN
401: );
402: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
403:
404: -- Store blocks and attributes
405: IF hxc_timecard_message_helper.noerrors
406: THEN
407: hxc_timecard_deposit.EXECUTE
408: (p_blocks => p_blocks,
409: p_attributes => p_attributes,
403:
404: -- Store blocks and attributes
405: IF hxc_timecard_message_helper.noerrors
406: THEN
407: hxc_timecard_deposit.EXECUTE
408: (p_blocks => p_blocks,
409: p_attributes => p_attributes,
410: p_timecard_blocks => l_timecard_blocks,
411: p_day_blocks => l_day_blocks,
412: p_detail_blocks => l_detail_blocks,
413: p_messages => p_messages,
414: p_transaction_info => l_transaction_info
415: );
416: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
417: --
418: -- Maintain summary table
419: --
420: hxc_timecard_summary_api.timecard_deposit
416: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
417: --
418: -- Maintain summary table
419: --
420: hxc_timecard_summary_api.timecard_deposit
421: (p_blocks => p_blocks,
422: p_approval_item_type => NULL,
423: p_approval_process_name => NULL,
424: p_approval_item_key => NULL,
425: p_tk_audit_item_type => NULL,
426: p_tk_audit_process_name => NULL,
427: p_tk_audit_item_key => NULL
428: );
429: hxc_timecard_audit.maintain_latest_details (p_blocks => p_blocks);
430: END IF;
431:
432: -- get all the errors
433: p_messages := hxc_timecard_message_helper.getmessages;
429: hxc_timecard_audit.maintain_latest_details (p_blocks => p_blocks);
430: END IF;
431:
432: -- get all the errors
433: p_messages := hxc_timecard_message_helper.getmessages;
434: p_timecard_id :=
435: p_blocks
436: (hxc_timecard_block_utils.find_active_timecard_index (p_blocks)
437: ).time_building_block_id;
432: -- get all the errors
433: p_messages := hxc_timecard_message_helper.getmessages;
434: p_timecard_id :=
435: p_blocks
436: (hxc_timecard_block_utils.find_active_timecard_index (p_blocks)
437: ).time_building_block_id;
438: p_timecard_ovn :=
439: p_blocks
440: (hxc_timecard_block_utils.find_active_timecard_index (p_blocks)
436: (hxc_timecard_block_utils.find_active_timecard_index (p_blocks)
437: ).time_building_block_id;
438: p_timecard_ovn :=
439: p_blocks
440: (hxc_timecard_block_utils.find_active_timecard_index (p_blocks)
441: ).object_version_number;
442: END save_timecard;
443:
444: -----------------------------------------------------------------------------
459: --
460: -- Description: Private Procedure that can will be used to Submit the timecard
461: -- This will store the Timecard in the DB with a status of
462: -- SUBMITTED. This whole procedure is mimicking
463: -- the Submit as it happens in the deposit wrapper HXC_TIMECARD.
464: -----------------------------------------------------------------------------
465: PROCEDURE submit_timecard (
466: p_item_type IN wf_items.item_type%TYPE,
467: p_approval_prc IN wf_process_activities.process_name%TYPE,
474: p_timecard_id OUT NOCOPY hxc_time_building_blocks.time_building_block_id%TYPE,
475: p_timecard_ovn OUT NOCOPY hxc_time_building_blocks.object_version_number%TYPE
476: )
477: IS
478: l_timecard_blocks hxc_timecard.block_list;
479: l_day_blocks hxc_timecard.block_list;
480: l_detail_blocks hxc_timecard.block_list;
481: l_transaction_info hxc_timecard.transaction_info;
482: l_old_transaction_info hxc_deposit_wrapper_utilities.t_transaction;
475: p_timecard_ovn OUT NOCOPY hxc_time_building_blocks.object_version_number%TYPE
476: )
477: IS
478: l_timecard_blocks hxc_timecard.block_list;
479: l_day_blocks hxc_timecard.block_list;
480: l_detail_blocks hxc_timecard.block_list;
481: l_transaction_info hxc_timecard.transaction_info;
482: l_old_transaction_info hxc_deposit_wrapper_utilities.t_transaction;
483: l_timecard_props hxc_timecard_prop_table_type;
476: )
477: IS
478: l_timecard_blocks hxc_timecard.block_list;
479: l_day_blocks hxc_timecard.block_list;
480: l_detail_blocks hxc_timecard.block_list;
481: l_transaction_info hxc_timecard.transaction_info;
482: l_old_transaction_info hxc_deposit_wrapper_utilities.t_transaction;
483: l_timecard_props hxc_timecard_prop_table_type;
484: l_proc VARCHAR2 (50)
477: IS
478: l_timecard_blocks hxc_timecard.block_list;
479: l_day_blocks hxc_timecard.block_list;
480: l_detail_blocks hxc_timecard.block_list;
481: l_transaction_info hxc_timecard.transaction_info;
482: l_old_transaction_info hxc_deposit_wrapper_utilities.t_transaction;
483: l_timecard_props hxc_timecard_prop_table_type;
484: l_proc VARCHAR2 (50)
485: := g_package || 'submit_timecard';
479: l_day_blocks hxc_timecard.block_list;
480: l_detail_blocks hxc_timecard.block_list;
481: l_transaction_info hxc_timecard.transaction_info;
482: l_old_transaction_info hxc_deposit_wrapper_utilities.t_transaction;
483: l_timecard_props hxc_timecard_prop_table_type;
484: l_proc VARCHAR2 (50)
485: := g_package || 'submit_timecard';
486: l_can_deposit BOOLEAN := TRUE;
487: l_resubmit VARCHAR2 (10) := hxc_timecard.c_no;
483: l_timecard_props hxc_timecard_prop_table_type;
484: l_proc VARCHAR2 (50)
485: := g_package || 'submit_timecard';
486: l_can_deposit BOOLEAN := TRUE;
487: l_resubmit VARCHAR2 (10) := hxc_timecard.c_no;
488: l_timecard_index NUMBER;
489: l_rollback BOOLEAN := FALSE;
490: l_item_key wf_items.item_key%TYPE := NULL;
491: l_mode VARCHAR2 (30);
490: l_item_key wf_items.item_key%TYPE := NULL;
491: l_mode VARCHAR2 (30);
492: BEGIN
493: fnd_msg_pub.initialize;
494: hxc_timecard_message_helper.initializeerrors;
495: p_messages := hxc_message_table_type ();
496: hxc_timecard_block_utils.initialize_timecard_index;
497: -- Check input parameters
498: hxc_deposit_checks.check_inputs
492: BEGIN
493: fnd_msg_pub.initialize;
494: hxc_timecard_message_helper.initializeerrors;
495: p_messages := hxc_message_table_type ();
496: hxc_timecard_block_utils.initialize_timecard_index;
497: -- Check input parameters
498: hxc_deposit_checks.check_inputs
499: (p_blocks => p_blocks,
500: p_attributes => p_attributes,
497: -- Check input parameters
498: hxc_deposit_checks.check_inputs
499: (p_blocks => p_blocks,
500: p_attributes => p_attributes,
501: p_deposit_mode => hxc_timecard.c_submit,
502: p_template => hxc_timecard.c_no,
503: p_messages => p_messages
504: );
505: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
498: hxc_deposit_checks.check_inputs
499: (p_blocks => p_blocks,
500: p_attributes => p_attributes,
501: p_deposit_mode => hxc_timecard.c_submit,
502: p_template => hxc_timecard.c_no,
503: p_messages => p_messages
504: );
505: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
506: -- Determine if this is a resubmitted timecard
501: p_deposit_mode => hxc_timecard.c_submit,
502: p_template => hxc_timecard.c_no,
503: p_messages => p_messages
504: );
505: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
506: -- Determine if this is a resubmitted timecard
507: l_timecard_index :=
508: hxc_timecard_block_utils.find_active_timecard_index (p_blocks);
509:
504: );
505: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
506: -- Determine if this is a resubmitted timecard
507: l_timecard_index :=
508: hxc_timecard_block_utils.find_active_timecard_index (p_blocks);
509:
510: IF (hxc_timecard_block_utils.date_value
511: (p_blocks (l_timecard_index).date_to
512: ) = hr_general.end_of_time
506: -- Determine if this is a resubmitted timecard
507: l_timecard_index :=
508: hxc_timecard_block_utils.find_active_timecard_index (p_blocks);
509:
510: IF (hxc_timecard_block_utils.date_value
511: (p_blocks (l_timecard_index).date_to
512: ) = hr_general.end_of_time
513: )
514: THEN
512: ) = hr_general.end_of_time
513: )
514: THEN
515: l_resubmit :=
516: hxc_timecard_approval.is_timecard_resubmitted
517: (p_blocks (l_timecard_index).time_building_block_id,
518: p_blocks (l_timecard_index).object_version_number,
519: p_blocks (l_timecard_index).resource_id,
520: fnd_date.canonical_to_date
524: (p_blocks (l_timecard_index).stop_time
525: )
526: );
527: ELSE
528: l_resubmit := hxc_timecard.c_delete;
529: END IF;
530:
531: -- Obtain the timecard properties
532: hxc_timecard_properties.get_preference_properties
528: l_resubmit := hxc_timecard.c_delete;
529: END IF;
530:
531: -- Obtain the timecard properties
532: hxc_timecard_properties.get_preference_properties
533: (p_validate => hxc_timecard.c_yes,
534: p_resource_id => p_blocks (l_timecard_index).resource_id,
535: p_timecard_start_time => fnd_date.canonical_to_date
536: (p_blocks (l_timecard_index).start_time
529: END IF;
530:
531: -- Obtain the timecard properties
532: hxc_timecard_properties.get_preference_properties
533: (p_validate => hxc_timecard.c_yes,
534: p_resource_id => p_blocks (l_timecard_index).resource_id,
535: p_timecard_start_time => fnd_date.canonical_to_date
536: (p_blocks (l_timecard_index).start_time
537: ),
541: p_for_timecard => FALSE,
542: p_messages => p_messages,
543: p_property_table => l_timecard_props
544: );
545: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
546: -- Sort the blocks - needed for deposit and all sorts of short cuts!
547: hxc_timecard_block_utils.sort_blocks
548: (p_blocks => p_blocks,
549: p_timecard_blocks => l_timecard_blocks,
543: p_property_table => l_timecard_props
544: );
545: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
546: -- Sort the blocks - needed for deposit and all sorts of short cuts!
547: hxc_timecard_block_utils.sort_blocks
548: (p_blocks => p_blocks,
549: p_timecard_blocks => l_timecard_blocks,
550: p_day_blocks => l_day_blocks,
551: p_detail_blocks => l_detail_blocks
563: --
564: -- Perform basic checks, e.g.
565: -- Are there any other timecards for this period?
566: --
567: IF (p_template = hxc_timecard.c_no)
568: THEN
569: hxc_deposit_checks.perform_checks
570: (p_blocks => p_blocks,
571: p_attributes => p_attributes,
573: p_days => l_day_blocks,
574: p_details => l_detail_blocks,
575: p_messages => p_messages
576: );
577: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
578: END IF;
579:
580: -- Add the security attributes
581: -- ARR: 115.26 Add message structure
584: p_attributes => p_attributes,
585: p_timecard_props => l_timecard_props,
586: p_messages => p_messages
587: );
588: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
589: -- Translate any aliases
590: hxc_timecard_deposit_common.alias_translation
591: (p_blocks => p_blocks,
592: p_attributes => p_attributes,
586: p_messages => p_messages
587: );
588: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
589: -- Translate any aliases
590: hxc_timecard_deposit_common.alias_translation
591: (p_blocks => p_blocks,
592: p_attributes => p_attributes,
593: p_messages => p_messages
594: );
591: (p_blocks => p_blocks,
592: p_attributes => p_attributes,
593: p_messages => p_messages
594: );
595: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
596: -- Set the block and attribute update process flags based on the data sent
597: -- and in the db
598: hxc_block_attribute_update.set_process_flags
599: (p_blocks => p_blocks,
598: hxc_block_attribute_update.set_process_flags
599: (p_blocks => p_blocks,
600: p_attributes => p_attributes
601: );
602: hxc_timecard_attribute_utils.remove_deleted_attributes
603: (p_attributes => p_attributes);
604: -- Perform process checks
605: hxc_deposit_checks.perform_process_checks
606: (p_blocks => p_blocks,
607: p_attributes => p_attributes,
608: p_timecard_props => l_timecard_props,
609: p_days => l_day_blocks,
610: p_details => l_detail_blocks,
611: p_template => hxc_timecard.c_no,
612: p_deposit_mode => hxc_timecard.c_submit,
613: p_messages => p_messages
614: );
615: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
608: p_timecard_props => l_timecard_props,
609: p_days => l_day_blocks,
610: p_details => l_detail_blocks,
611: p_template => hxc_timecard.c_no,
612: p_deposit_mode => hxc_timecard.c_submit,
613: p_messages => p_messages
614: );
615: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
616:
611: p_template => hxc_timecard.c_no,
612: p_deposit_mode => hxc_timecard.c_submit,
613: p_messages => p_messages
614: );
615: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
616:
617: -- Validate blocks, attributes
618: IF (p_mode <> hxc_timestore_deposit.c_migration)
619: THEN
616:
617: -- Validate blocks, attributes
618: IF (p_mode <> hxc_timestore_deposit.c_migration)
619: THEN
620: hxc_timecard_validation.deposit_validation
621: (p_blocks => p_blocks,
622: p_attributes => p_attributes,
623: p_messages => p_messages,
624: p_props => l_timecard_props,
622: p_attributes => p_attributes,
623: p_messages => p_messages,
624: p_props => l_timecard_props,
625: p_deposit_mode => p_mode,
626: p_template => hxc_timecard.c_no,
627: p_resubmit => l_resubmit,
628: p_can_deposit => l_can_deposit
629: );
630: ELSE -- minimal validation for migration
627: p_resubmit => l_resubmit,
628: p_can_deposit => l_can_deposit
629: );
630: ELSE -- minimal validation for migration
631: hxc_timecard_validation.data_set_validation
632: (p_blocks => p_blocks,
633: p_messages => p_messages
634: );
635: END IF;
633: p_messages => p_messages
634: );
635: END IF;
636:
637: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
638: -- Validate the set up for the user Do this only for timecards, and not
639: -- for templates.
640: /*
641: hxc_timecard_deposit_common.validate_setup
637: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
638: -- Validate the set up for the user Do this only for timecards, and not
639: -- for templates.
640: /*
641: hxc_timecard_deposit_common.validate_setup
642: (p_deposit_mode => hxc_timecard.c_submit
643: ,p_blocks => p_blocks
644: ,p_attributes => p_attributes
645: ,p_messages => p_messages
638: -- Validate the set up for the user Do this only for timecards, and not
639: -- for templates.
640: /*
641: hxc_timecard_deposit_common.validate_setup
642: (p_deposit_mode => hxc_timecard.c_submit
643: ,p_blocks => p_blocks
644: ,p_attributes => p_attributes
645: ,p_messages => p_messages
646: );
644: ,p_attributes => p_attributes
645: ,p_messages => p_messages
646: );
647:
648: hxc_timecard_message_helper.processerrors
649: (p_messages => p_messages);
650: */
651: -- Reform time data, if required e.g Denormalize time data
652: hxc_block_attribute_update.denormalize_time (p_blocks => p_blocks,
655:
656: IF perform_audit (p_props => l_timecard_props, p_blocks => p_blocks)
657: THEN
658: -- Get the messages to perform the audit check
659: p_messages := hxc_timecard_message_helper.getmessages;
660: -- Perform Audit Checks
661: -- Mental Note on how this works:)
662: -- hxc_timecard_validation.deposit_validation called above, raises
663: -- proper errors if something is really wrong, e.g. during the
658: -- Get the messages to perform the audit check
659: p_messages := hxc_timecard_message_helper.getmessages;
660: -- Perform Audit Checks
661: -- Mental Note on how this works:)
662: -- hxc_timecard_validation.deposit_validation called above, raises
663: -- proper errors if something is really wrong, e.g. during the
664: -- project or payroll validation. However for Change and Late Audit
665: -- (CLA), it stores special messages in message table p_messages.
666: -- These messages have a message_level of REASON, are not considered
664: -- project or payroll validation. However for Change and Late Audit
665: -- (CLA), it stores special messages in message table p_messages.
666: -- These messages have a message_level of REASON, are not considered
667: -- errors and will not be recognized by
668: -- hxc_timecard_message_helper.noerrors as errors.
669: -- hxc_deposit_checks.audit_checks transforms these REASON errors
670: -- into proper errors that will be caught by
671: -- hxc_timecard_message_helper.noerrors.
672: -- So effectively what we are doing here is converting the audit
667: -- errors and will not be recognized by
668: -- hxc_timecard_message_helper.noerrors as errors.
669: -- hxc_deposit_checks.audit_checks transforms these REASON errors
670: -- into proper errors that will be caught by
671: -- hxc_timecard_message_helper.noerrors.
672: -- So effectively what we are doing here is converting the audit
673: -- message into errors when the user calls the API and AUDIT is
674: -- switched on in the preferences of the employee/resource.
675: -- If the user calls the API and AUDIT is not set, we completely
677: hxc_deposit_checks.audit_checks (p_blocks => p_blocks,
678: p_attributes => p_attributes,
679: p_messages => p_messages
680: );
681: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
682: END IF;
683:
684: -- Store blocks and attributes
685: IF hxc_timecard_message_helper.noerrors
681: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
682: END IF;
683:
684: -- Store blocks and attributes
685: IF hxc_timecard_message_helper.noerrors
686: THEN
687: hxc_timecard_deposit.EXECUTE
688: (p_blocks => p_blocks,
689: p_attributes => p_attributes,
683:
684: -- Store blocks and attributes
685: IF hxc_timecard_message_helper.noerrors
686: THEN
687: hxc_timecard_deposit.EXECUTE
688: (p_blocks => p_blocks,
689: p_attributes => p_attributes,
690: p_timecard_blocks => l_timecard_blocks,
691: p_day_blocks => l_day_blocks,
692: p_detail_blocks => l_detail_blocks,
693: p_messages => p_messages,
694: p_transaction_info => l_transaction_info
695: );
696: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
697: -- set the out parameters
698: p_timecard_id :=
699: p_blocks
700: (hxc_timecard_block_utils.find_active_timecard_index (p_blocks)
696: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
697: -- set the out parameters
698: p_timecard_id :=
699: p_blocks
700: (hxc_timecard_block_utils.find_active_timecard_index (p_blocks)
701: ).time_building_block_id;
702: p_timecard_ovn :=
703: p_blocks
704: (hxc_timecard_block_utils.find_active_timecard_index (p_blocks)
700: (hxc_timecard_block_utils.find_active_timecard_index (p_blocks)
701: ).time_building_block_id;
702: p_timecard_ovn :=
703: p_blocks
704: (hxc_timecard_block_utils.find_active_timecard_index (p_blocks)
705: ).object_version_number;
706:
707: IF ( (p_template <> hxc_timecard.c_yes)
708: AND (hxc_timecard_message_helper.noerrors)
703: p_blocks
704: (hxc_timecard_block_utils.find_active_timecard_index (p_blocks)
705: ).object_version_number;
706:
707: IF ( (p_template <> hxc_timecard.c_yes)
708: AND (hxc_timecard_message_helper.noerrors)
709: )
710: THEN
711: --
704: (hxc_timecard_block_utils.find_active_timecard_index (p_blocks)
705: ).object_version_number;
706:
707: IF ( (p_template <> hxc_timecard.c_yes)
708: AND (hxc_timecard_message_helper.noerrors)
709: )
710: THEN
711: --
712: -- Maintain summary table
714: IF (p_mode = hxc_timestore_deposit.c_migration)
715: THEN
716: l_mode := g_oit_migration;
717: ELSE
718: l_mode := hxc_timecard_summary_pkg.c_normal_mode;
719: END IF;
720:
721: hxc_timecard_summary_api.timecard_deposit
722: (p_blocks => p_blocks,
717: ELSE
718: l_mode := hxc_timecard_summary_pkg.c_normal_mode;
719: END IF;
720:
721: hxc_timecard_summary_api.timecard_deposit
722: (p_blocks => p_blocks,
723: p_mode => l_mode,
724: p_approval_item_type => NULL,
725: p_approval_process_name => NULL,
727: p_tk_audit_item_type => NULL,
728: p_tk_audit_process_name => NULL,
729: p_tk_audit_item_key => NULL
730: );
731: hxc_timecard_audit.maintain_latest_details (p_blocks => p_blocks);
732: hxc_timecard_message_helper.processerrors
733: (p_messages => p_messages);
734:
735: IF (p_mode <> hxc_timestore_deposit.c_migration)
728: p_tk_audit_process_name => NULL,
729: p_tk_audit_item_key => NULL
730: );
731: hxc_timecard_audit.maintain_latest_details (p_blocks => p_blocks);
732: hxc_timecard_message_helper.processerrors
733: (p_messages => p_messages);
734:
735: IF (p_mode <> hxc_timestore_deposit.c_migration)
736: THEN
734:
735: IF (p_mode <> hxc_timestore_deposit.c_migration)
736: THEN
737: l_item_key :=
738: hxc_timecard_approval.begin_approval
739: (p_blocks => p_blocks,
740: p_item_type => p_item_type,
741: p_process_name => p_approval_prc,
742: p_resubmitted => l_resubmit,
743: p_timecard_props => l_timecard_props,
744: p_messages => p_messages
745: );
746:
747: hxc_timecard_message_helper.processerrors
748: (p_messages => p_messages);
749:
750: hxc_timecard_summary_pkg.update_summary_row
751: (p_timecard_id => p_timecard_id,
746:
747: hxc_timecard_message_helper.processerrors
748: (p_messages => p_messages);
749:
750: hxc_timecard_summary_pkg.update_summary_row
751: (p_timecard_id => p_timecard_id,
752: p_approval_item_type => p_item_type,
753: p_approval_process_name => p_approval_prc,
754: p_approval_item_key => l_item_key
753: p_approval_process_name => p_approval_prc,
754: p_approval_item_key => l_item_key
755: );
756: END IF;
757: ELSIF ( (p_template = hxc_timecard.c_yes)
758: AND (hxc_timecard_message_helper.noerrors)
759: )
760: THEN
761: hxc_template_summary_api.template_deposit
754: p_approval_item_key => l_item_key
755: );
756: END IF;
757: ELSIF ( (p_template = hxc_timecard.c_yes)
758: AND (hxc_timecard_message_helper.noerrors)
759: )
760: THEN
761: hxc_template_summary_api.template_deposit
762: (p_blocks => p_blocks,
766: END IF;
767: END IF;
768:
769: -- Audit this transaction
770: hxc_timecard_audit.audit_deposit
771: (p_transaction_info => l_transaction_info,
772: p_messages => p_messages
773: );
774: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
770: hxc_timecard_audit.audit_deposit
771: (p_transaction_info => l_transaction_info,
772: p_messages => p_messages
773: );
774: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
775:
776: IF ( (p_mode = hxc_timestore_deposit.c_migration)
777: AND (hxc_timecard_message_helper.noerrors)
778: )
773: );
774: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
775:
776: IF ( (p_mode = hxc_timestore_deposit.c_migration)
777: AND (hxc_timecard_message_helper.noerrors)
778: )
779: THEN
780: l_old_transaction_info :=
781: convert_new_trans_info_to_old
788: ),
789: p_overall_status => 'SUCCESS',
790: p_transaction_tab => l_old_transaction_info
791: );
792: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
793: END IF;
794:
795: -- get all the errors
796: p_messages := hxc_timecard_message_helper.getmessages;
792: hxc_timecard_message_helper.processerrors (p_messages => p_messages);
793: END IF;
794:
795: -- get all the errors
796: p_messages := hxc_timecard_message_helper.getmessages;
797: END submit_timecard;
798:
799: -----------------------------------------------------------------------------
800: -- Type: Function
805: --
806: -- Description: Private Function that will convert the old PL/SQL Timecard
807: -- structure to the new TYPE that is then returned
808: -- FYI: This is the reverse function of convert_to_dpwr_blocks
809: -- that can be found in hxc_timecard_block_utils. It is not
810: -- defined in that procedure as it is only needed for this API
811: -- hence we define it here as a provate function
812: -----------------------------------------------------------------------------
813: FUNCTION convert_tbb_to_type (
885: -- Description: Public Function that will convert the new PL/SQL Transaction
886: -- PL/SQL table to the old PL/SQL Table that is then returned
887: -----------------------------------------------------------------------------
888: FUNCTION convert_new_trans_info_to_old (
889: p_transaction_info IN hxc_timecard.transaction_info
890: )
891: RETURN hxc_deposit_wrapper_utilities.t_transaction
892: IS
893: l_proc VARCHAR2 (72);
1138: THEN
1139: p_attribute.attribute_category := p_value;
1140: END IF;
1141:
1142: IF (p_changed = hxc_timecard.c_yes)
1143: THEN
1144: p_attribute.changed := hxc_timecard.c_yes;
1145: p_attribute.process := hxc_timecard.c_yes;
1146: END IF;
1140: END IF;
1141:
1142: IF (p_changed = hxc_timecard.c_yes)
1143: THEN
1144: p_attribute.changed := hxc_timecard.c_yes;
1145: p_attribute.process := hxc_timecard.c_yes;
1146: END IF;
1147: END set_new_attribute_value;
1148:
1141:
1142: IF (p_changed = hxc_timecard.c_yes)
1143: THEN
1144: p_attribute.changed := hxc_timecard.c_yes;
1145: p_attribute.process := hxc_timecard.c_yes;
1146: END IF;
1147: END set_new_attribute_value;
1148:
1149: PROCEDURE create_new_attribute (
1169: END IF;
1170:
1171: IF (p_app_attributes (p_app_index).attribute_index IS NULL)
1172: THEN
1173: l_new := hxc_timecard.c_yes;
1174: ELSE
1175: l_new := hxc_timecard.c_no;
1176: END IF;
1177:
1171: IF (p_app_attributes (p_app_index).attribute_index IS NULL)
1172: THEN
1173: l_new := hxc_timecard.c_yes;
1174: ELSE
1175: l_new := hxc_timecard.c_no;
1176: END IF;
1177:
1178: l_new_attribute :=
1179: hxc_attribute_type
1209: NULL,
1210: NULL,
1211: NULL,
1212: NULL,
1213: hxc_timecard_attribute_utils.get_bld_blk_info_type_id
1214: (p_app_attributes (p_app_index).bld_blk_info_type
1215: ),
1216: 1,
1217: l_new,
1214: (p_app_attributes (p_app_index).bld_blk_info_type
1215: ),
1216: 1,
1217: l_new,
1218: hxc_timecard.c_no,
1219: -- Changed: We will decide later if this is a changed Attribute
1220: p_app_attributes (p_app_index).bld_blk_info_type,
1221: hxc_timecard.c_no,
1222: -- Process: We will decide later if this Attribute needs to get processed
1217: l_new,
1218: hxc_timecard.c_no,
1219: -- Changed: We will decide later if this is a changed Attribute
1220: p_app_attributes (p_app_index).bld_blk_info_type,
1221: hxc_timecard.c_no,
1222: -- Process: We will decide later if this Attribute needs to get processed
1223: NULL
1224: );
1225: l_index := p_app_attributes.FIRST;
1429: l_proc := g_package || 'get_approval_status';
1430: hr_utility.set_location ('Entering:' || l_proc, 10);
1431: END IF;
1432:
1433: IF p_mode = hxc_timecard.c_save
1434: THEN
1435: l_appr_stat := hxc_timecard.c_working_status;
1436: ELSIF p_mode = hxc_timecard.c_submit
1437: THEN
1431: END IF;
1432:
1433: IF p_mode = hxc_timecard.c_save
1434: THEN
1435: l_appr_stat := hxc_timecard.c_working_status;
1436: ELSIF p_mode = hxc_timecard.c_submit
1437: THEN
1438: l_appr_stat := hxc_timecard.c_submitted_status;
1439: ELSIF p_mode = hxc_timestore_deposit.c_tk_save
1432:
1433: IF p_mode = hxc_timecard.c_save
1434: THEN
1435: l_appr_stat := hxc_timecard.c_working_status;
1436: ELSIF p_mode = hxc_timecard.c_submit
1437: THEN
1438: l_appr_stat := hxc_timecard.c_submitted_status;
1439: ELSIF p_mode = hxc_timestore_deposit.c_tk_save
1440: THEN
1434: THEN
1435: l_appr_stat := hxc_timecard.c_working_status;
1436: ELSIF p_mode = hxc_timecard.c_submit
1437: THEN
1438: l_appr_stat := hxc_timecard.c_submitted_status;
1439: ELSIF p_mode = hxc_timestore_deposit.c_tk_save
1440: THEN
1441: l_appr_stat := hxc_timecard.c_working_status;
1442: ELSIF p_mode = hxc_timestore_deposit.c_tk_submit
1437: THEN
1438: l_appr_stat := hxc_timecard.c_submitted_status;
1439: ELSIF p_mode = hxc_timestore_deposit.c_tk_save
1440: THEN
1441: l_appr_stat := hxc_timecard.c_working_status;
1442: ELSIF p_mode = hxc_timestore_deposit.c_tk_submit
1443: THEN
1444: l_appr_stat := hxc_timecard.c_submitted_status;
1445: ELSIF p_mode = hxc_timecard.c_audit
1440: THEN
1441: l_appr_stat := hxc_timecard.c_working_status;
1442: ELSIF p_mode = hxc_timestore_deposit.c_tk_submit
1443: THEN
1444: l_appr_stat := hxc_timecard.c_submitted_status;
1445: ELSIF p_mode = hxc_timecard.c_audit
1446: THEN
1447: l_appr_stat := hxc_timecard.c_submitted_status;
1448: ELSIF p_mode = hxc_timestore_deposit.c_migration
1441: l_appr_stat := hxc_timecard.c_working_status;
1442: ELSIF p_mode = hxc_timestore_deposit.c_tk_submit
1443: THEN
1444: l_appr_stat := hxc_timecard.c_submitted_status;
1445: ELSIF p_mode = hxc_timecard.c_audit
1446: THEN
1447: l_appr_stat := hxc_timecard.c_submitted_status;
1448: ELSIF p_mode = hxc_timestore_deposit.c_migration
1449: THEN
1443: THEN
1444: l_appr_stat := hxc_timecard.c_submitted_status;
1445: ELSIF p_mode = hxc_timecard.c_audit
1446: THEN
1447: l_appr_stat := hxc_timecard.c_submitted_status;
1448: ELSIF p_mode = hxc_timestore_deposit.c_migration
1449: THEN
1450: l_appr_stat := hxc_timecard.c_submitted_status;
1451: ELSE -- if no mode was supplied (or the wrong one), try working
1446: THEN
1447: l_appr_stat := hxc_timecard.c_submitted_status;
1448: ELSIF p_mode = hxc_timestore_deposit.c_migration
1449: THEN
1450: l_appr_stat := hxc_timecard.c_submitted_status;
1451: ELSE -- if no mode was supplied (or the wrong one), try working
1452: l_appr_stat := hxc_timecard.c_working_status;
1453: END IF;
1454:
1448: ELSIF p_mode = hxc_timestore_deposit.c_migration
1449: THEN
1450: l_appr_stat := hxc_timecard.c_submitted_status;
1451: ELSE -- if no mode was supplied (or the wrong one), try working
1452: l_appr_stat := hxc_timecard.c_working_status;
1453: END IF;
1454:
1455: IF g_debug
1456: THEN
1526: AND tbb.date_to = hr_general.end_of_time
1527: AND parent_tbb.time_building_block_id = tbb.parent_building_block_id
1528: AND parent_tbb.object_version_number = tbb.parent_building_block_ovn
1529: AND parent_tbb.date_to = hr_general.end_of_time
1530: AND parent_tbb.SCOPE <> hxc_timecard.c_template_scope
1531: GROUP BY tbb.time_building_block_id;
1532:
1533: l_building_block_count PLS_INTEGER;
1534: l_index PLS_INTEGER;
1902: p_timecard_bb_id => p_timecard_bb_id,
1903: p_timecard_ovn => p_timecard_ovn
1904: );
1905:
1906: /* hxc_timecard.convert_to_type
1907: (p_attributes => in HXC_SELF_SERVICE_TIME_DEPOSIT.building_block_attribute_info)
1908: return HXC_ATTRIBUTE_TABLE_TYPE is
1909:
1910: l_attributes HXC_ATTRIBUTE_TABLE_TYPE;
1949: )
1950: IS
1951: SELECT time_building_block_id, MAX (object_version_number)
1952: FROM hxc_time_building_blocks
1953: WHERE SCOPE = hxc_timecard.c_timecard_scope
1954: AND date_to = hr_general.end_of_time
1955: CONNECT BY PRIOR parent_building_block_id = time_building_block_id
1956: AND PRIOR parent_building_block_ovn = object_version_number
1957: START WITH time_building_block_id = v_tc_id
2300:
2301: -- Then get the complete TC
2302: -- First get all the TBBs ...
2303: p_app_blocks :=
2304: hxc_timecard.load_blocks (p_timecard_id => l_timecard_bb_id,
2305: p_timecard_ovn => l_object_version_number
2306: );
2307: -- ... then all the attributes and store them in the Type structures
2308: l_attributes := hxc_timecard.load_attributes (p_blocks => p_app_blocks);
2304: hxc_timecard.load_blocks (p_timecard_id => l_timecard_bb_id,
2305: p_timecard_ovn => l_object_version_number
2306: );
2307: -- ... then all the attributes and store them in the Type structures
2308: l_attributes := hxc_timecard.load_attributes (p_blocks => p_app_blocks);
2309: -- Finally convert the attributes to app_attributes.
2310: p_app_attributes :=
2311: hxc_app_attribute_utils.create_app_attributes
2312: (p_attributes => l_attributes,
2365: p_app_blocks => l_blocks,
2366: p_app_attributes => p_app_attributes
2367: );
2368: p_app_blocks :=
2369: hxc_timecard_block_utils.convert_to_dpwr_blocks (p_blocks => l_blocks);
2370:
2371: IF g_debug
2372: THEN
2373: hr_utility.set_location ('Leaving:' || l_proc, 20);
2583: hr_utility.set_location ('Entering:' || l_proc, 10);
2584: END IF;
2585:
2586: l_tc_index :=
2587: hxc_timecard_block_utils.find_active_timecard_index (p_app_blocks);
2588:
2589: IF (hxc_timecard_block_utils.is_new_block (p_app_blocks (l_tc_index)))
2590: THEN
2591: hxc_lock_api.request_lock
2585:
2586: l_tc_index :=
2587: hxc_timecard_block_utils.find_active_timecard_index (p_app_blocks);
2588:
2589: IF (hxc_timecard_block_utils.is_new_block (p_app_blocks (l_tc_index)))
2590: THEN
2591: hxc_lock_api.request_lock
2592: (p_process_locker_type => hxc_lock_util.c_plsql_deposit_action,
2593: p_resource_id => p_app_blocks (l_tc_index).resource_id,
2654: hr_utility.set_location ('Entering:' || l_proc, 10);
2655: END IF;
2656:
2657: l_tc_index :=
2658: hxc_timecard_block_utils.find_active_timecard_index (p_app_blocks);
2659:
2660: IF (hxc_timecard_block_utils.is_new_block (p_app_blocks (l_tc_index)))
2661: THEN
2662: hxc_lock_api.release_lock
2656:
2657: l_tc_index :=
2658: hxc_timecard_block_utils.find_active_timecard_index (p_app_blocks);
2659:
2660: IF (hxc_timecard_block_utils.is_new_block (p_app_blocks (l_tc_index)))
2661: THEN
2662: hxc_lock_api.release_lock
2663: (p_row_lock_id => p_row_lock_id,
2664: p_process_locker_type => hxc_lock_util.c_plsql_deposit_action,
3057: l_proc := g_package || 'log_messages (Overloaded)';
3058: hr_utility.set_location ('Entering:' || l_proc, 10);
3059: END IF;
3060:
3061: hxc_timecard_message_utils.append_old_messages
3062: (p_messages => l_messages,
3063: p_old_messages => p_messages,
3064: p_retrieval_process_id => NULL
3065: );
3181: p_stop_time OUT NOCOPY DATE
3182: )
3183: IS
3184: l_proc VARCHAR2 (72);
3185: l_periods hxc_timecard_utilities.periods;
3186: l_period_idx PLS_INTEGER;
3187: l_period_found BOOLEAN DEFAULT FALSE;
3188: BEGIN
3189: IF g_debug
3191: l_proc := g_package || 'find_current_period';
3192: hr_utility.set_location ('Entering:' || l_proc, 10);
3193: END IF;
3194:
3195: hxc_timecard_utilities.init_globals (p_resource_id => p_resource_id);
3196: l_periods :=
3197: hxc_timecard_utilities.get_periods
3198: (p_resource_id => p_resource_id,
3199: p_resource_type => p_resource_type,
3193: END IF;
3194:
3195: hxc_timecard_utilities.init_globals (p_resource_id => p_resource_id);
3196: l_periods :=
3197: hxc_timecard_utilities.get_periods
3198: (p_resource_id => p_resource_id,
3199: p_resource_type => p_resource_type,
3200: p_current_date => p_day,
3201: p_show_existing_timecard => 'Y'