DBA Data[Home] [Help]

PACKAGE BODY: APPS.HXC_TIMECARD_VALIDATION

Source


1 package body hxc_timecard_validation as
2 /* $Header: hxctimevalid.pkb 120.2 2005/07/06 12:08:29 gpaytonm noship $ */
3 
4 type retrieval_ref_cursor IS ref cursor;
5 
6    Function get_otm_app_attributes
7               (p_attributes in            hxc_attribute_table_type,
8                p_messages   in out nocopy hxc_message_table_type)
9       return hxc_self_service_time_deposit.app_attributes_info is
10 
11       cursor c_deposit_process is
12         select deposit_process_id
13           from hxc_deposit_processes
14          where name = 'OTL Deposit Process';
15 
16       l_deposit_process_id hxc_deposit_processes.deposit_process_id%type;
17       l_app_attributes     hxc_self_service_time_deposit.app_attributes_info;
18 
19    begin
20 
21       open c_deposit_process;
22       fetch c_deposit_process into l_deposit_process_id;
23       if(c_deposit_process%notfound) then
24          close c_deposit_process;
25          hxc_timecard_message_helper.addErrorToCollection
26             (p_messages,
27              'HXC_NO_OTL_DEPOSIT_PROC',
28              hxc_timecard.c_error,
29              null,
30              null,
31              hxc_timecard.c_hxc,
32              null,
33              null,
34              null,
35              null
36              );
37 
38       else
39          close c_deposit_process;
40 
41          l_app_attributes :=
42             hxc_app_attribute_utils.create_app_attributes
43               (p_attributes           => p_attributes,
44                p_retrieval_process_id => null,
45                p_deposit_process_id   => l_deposit_process_id
46                );
47       end if;
48 
49       return l_app_attributes;
50 
51    end get_otm_app_attributes;
52 
53    Function find_retrieval_process_id
54               (p_time_recipient_id
55                   in hxc_time_recipients.time_recipient_id%type,
56                p_retrieval_function
57                   in hxc_time_recipients.application_retrieval_function%type)
58       Return number is
59 
60       c_ret_pro              retrieval_ref_cursor;
61       l_sql                  VARCHAR2(32000);
62       l_retrieval_process_id hxc_retrieval_processes.retrieval_process_id%type;
63 
64    Begin
65 
66       l_sql := 'select retrieval_process_id
67                   from hxc_retrieval_processes
68                   where time_recipient_id = '|| p_time_recipient_id
69              ||' and name = '||p_retrieval_function;
70 
71       open c_ret_pro for l_sql;
72       fetch c_ret_pro into l_retrieval_process_id;
73 
74       if c_ret_pro%notfound then
75          close c_ret_pro;
76          fnd_message.set_name('hxc','hxc_xxxxx_no_app_ret_proc_name');
77          fnd_msg_pub.add;
78       else
79          close c_ret_pro;
80       end if;
81 
82       return l_retrieval_process_id;
83 
84    End find_retrieval_process_id;
85 
86    Function recipients
87               (p_application_set_id in number)
88       Return recipient_application_table is
89 
90       cursor csr_time_recipients(p_application_set_id in number) is
91         select tr.time_recipient_id,
92                tr.name,
93                tr.application_retrieval_function,
94                tr.application_update_process,
95                tr.appl_validation_process
96           from hxc_time_recipients tr,
97                hxc_application_set_comps_v asc1
98          where p_application_set_id = asc1.application_set_id
99            and asc1.time_recipient_id = tr.time_recipient_id
100            and tr.application_retrieval_function is not null;
101 
102       l_appl_recipients recipient_application_table;
103       l_index           pls_integer;
104 
105    Begin
106 
107       l_index := 0;
108       for recip_rec in csr_time_recipients(p_application_set_id) loop
109          l_index := l_index +1;
110          l_appl_recipients(l_index).time_recipient_id
111             := recip_rec.time_recipient_id;
112          l_appl_recipients(l_index).name := recip_rec.name;
113          l_appl_recipients(l_index).application_retrieval_function
114             := recip_rec.application_retrieval_function;
115          l_appl_recipients(l_index).application_update_process
116             := recip_rec.application_update_process;
117          l_appl_recipients(l_index).appl_validation_process
118             := recip_rec.appl_validation_process;
119          l_appl_recipients(l_index).appl_retrieval_process_id
120             := find_retrieval_process_id
121                  (recip_rec.time_recipient_id,
122                   recip_rec.application_retrieval_function);
123       end loop;
124 
125       return l_appl_recipients;
126 
127    End recipients;
128 
129    Procedure update_attributes
130                (p_attributes in out nocopy hxc_attribute_table_type) is
131 
132       l_app_attributes hxc_self_service_time_deposit.app_attributes_info;
133 
134    Begin
135 
136       l_app_attributes := hxc_self_service_time_deposit.get_app_attributes;
137 
138       hxc_app_attribute_utils.update_attributes
139          (p_attributes => p_attributes,
140           p_app_attributes => l_app_attributes
141           );
142 
143    End update_attributes;
144 
145    Procedure set_attributes
146                (p_blocks               in hxc_block_table_type,
147                 p_attributes           in hxc_attribute_table_type,
148                 p_old_style_attrs      in hxc_self_service_time_deposit.building_block_attribute_info,
149                 p_retrieval_process_id in number,
150                 p_recipients           in recipient_application_table,
151                 p_elp_enabled          in boolean
152                 ) is
153 
154       l_app_attributes hxc_self_service_time_deposit.app_attributes_info;
155       l_messages       hxc_self_service_time_deposit.message_table;
156 
157    Begin
158 
159       if(p_elp_enabled) then
160 
161          l_app_attributes
162             := hxc_app_attribute_utils.create_app_attributes
163                  (p_blocks => p_blocks,
164                   p_attributes => p_attributes,
165                   p_deposit_process_id => null,
166                   p_retrieval_process_id => p_retrieval_process_id,
167                   p_recipients => p_recipients
168                   );
169 
170       else
171 
172          l_app_attributes
173             := hxc_app_attribute_utils.create_app_attributes
174                  (p_attributes => p_attributes,
175                   p_deposit_process_id => null,
176                   p_retrieval_process_id => p_retrieval_process_id
177                   );
178       end if;
179 
180       hxc_self_service_time_deposit.initialize_globals;
181       hxc_self_service_time_deposit.set_update_phase(true);
182 
183 
184       hxc_self_service_time_deposit.set_app_hook_params
185          (p_building_blocks
186             => hxc_timecard_block_utils.convert_to_dpwr_blocks(p_blocks),
187           p_app_attributes  => l_app_attributes,
188           p_messages        => l_messages
189           );
190 
191 
192       hxc_self_service_time_deposit.set_g_attributes
193          (p_attributes => p_old_style_attrs );
194 
195 
196    End set_attributes;
197 
198    Procedure update_messages
199                (p_messages             in out nocopy hxc_message_table_type,
200                 p_retrieval_process_id in            number) is
201 
202       l_messages hxc_self_service_time_deposit.message_table;
203    Begin
204 
205       l_messages := hxc_self_service_time_deposit.get_messages;
206       hxc_timecard_message_utils.append_old_messages
207          (p_messages             => p_messages,
208           p_old_messages         => l_messages,
209           p_retrieval_process_id => p_retrieval_process_id
210          );
211 
212    End update_messages;
213 
214    procedure update_phase
215                (p_recipients       in            recipient_application_table,
216                 p_blocks           in            hxc_block_table_type,
217                 p_attributes       in out nocopy hxc_attribute_table_type,
218                 p_old_style_attrs  in hxc_self_service_time_deposit.building_block_attribute_info,
219                 p_messages         in out nocopy hxc_message_table_type,
220                 p_deposit_mode     in            varchar2,
221                 p_projects_tr_id   in            number,
222                 p_validate_on_save in            varchar2
223                 ) is
224 
225       l_elp_blocks hxc_block_table_type;
226       l_index      pls_integer;
227       l_upd_sql    varchar2(2000);
228 
229    Begin
230       l_elp_blocks := hxc_block_table_type();
231       l_index := p_recipients.first;
232       Loop
233          Exit when not p_recipients.exists(l_index);
234          if((p_recipients(l_index).application_update_process is not null)
235             AND
236             (p_recipients(l_index).appl_retrieval_process_id is not null)) then
237 
238             if((p_deposit_mode <> hxc_timecard.c_save)
239                OR(
240                   (p_deposit_mode = hxc_timecard.c_save)
241                   AND
242                      (p_recipients(l_index).time_recipient_id = p_projects_tr_id)
243                   )
244                OR(
245                   (p_deposit_mode = hxc_timecard.c_save)
246                   AND
247                      (p_validate_on_save = hxc_timecard.c_yes)
248                   )) then
249 
250                set_attributes
251                   (p_blocks,
252                    p_attributes,
253                    p_old_style_attrs,
254                    p_recipients(l_index).appl_retrieval_process_id,
255                    p_recipients,
256                    false
257                    );
258 
259                l_upd_sql := 'BEGIN '||fnd_global.newline
260                   ||p_recipients(l_index).application_update_process ||fnd_global.newline
261                   ||'(p_operation => :1);'||fnd_global.newline
262                   ||'END;';
263 
264                EXECUTE IMMEDIATE l_upd_sql using IN p_deposit_mode;
265 
266                update_attributes(p_attributes);
267 
268                update_messages
269                   (p_messages,
270                    p_recipients(l_index).appl_retrieval_process_id
271                    );
272 
273             end if;
274 
275          end if;
276          l_index := p_recipients.next(l_index);
277       End loop;
278 
279    End update_phase;
280 
281    Procedure validate_phase
282                (p_recipients       in            recipient_application_table,
283                 p_blocks           in            hxc_block_table_type,
284                 p_attributes       in out nocopy hxc_attribute_table_type,
285                 p_old_style_attrs  in hxc_self_service_time_deposit.building_block_attribute_info,
286                 p_messages         in out nocopy hxc_message_table_type,
287                 p_deposit_mode     in            varchar2,
288                 p_elp_terg_id      in            number,
289                 p_projects_tr_id   in            number,
290                 p_validate_on_save in            varchar2
291                 ) is
292 
293       l_elp_blocks  hxc_block_table_type;
294       l_index       pls_integer;
295       l_val_sql     varchar2(2000);
296       l_elp_enabled boolean := false;
297 
298    Begin
299 
300       l_index := p_recipients.first;
301       Loop
302          Exit when not p_recipients.exists(l_index);
303 
304          if((p_recipients(l_index).appl_validation_process is not null)
305             AND
306             (p_recipients(l_index).appl_retrieval_process_id is not null))then
307 
308             if((p_deposit_mode <> hxc_timecard.c_save)
309                OR(
310                   (p_deposit_mode = hxc_timecard.c_save)
311                   AND
312                   (p_recipients(l_index).time_recipient_id = p_projects_tr_id)
313                  )
314                OR((p_deposit_mode = hxc_timecard.c_save)
315                   AND
316                   (p_validate_on_save = hxc_timecard.c_yes)
317                  )) then
318 
319                if(p_elp_terg_id is not null) then
320                   l_elp_blocks := hxc_elp_utils.build_elp_objects
321                                     (p_elp_time_building_blocks =>  p_blocks,
322                                      p_elp_time_attributes => p_attributes,
323                                      p_time_recipient_id    =>  p_recipients(l_index).time_recipient_id
324                                      );
325                   l_elp_enabled := true;
326                else
327                   l_elp_blocks := p_blocks;
328                end if;
329 
330                set_attributes
331                   (l_elp_blocks,
332                    p_attributes,
333                    p_old_style_attrs,
334                    p_recipients(l_index).appl_retrieval_process_id,
335                    p_recipients,
336                    l_elp_enabled
337                    );
338 
339                l_val_sql := 'BEGIN '||fnd_global.newline
340                   ||p_recipients(l_index).appl_validation_process ||fnd_global.newline
341                   ||'(p_operation => :1);'||fnd_global.newline
342                   ||'END;';
343 
344                EXECUTE IMMEDIATE l_val_sql using IN p_deposit_mode;
345 
346                update_messages
347                   (p_messages,
348                    p_recipients(l_index).appl_retrieval_process_id
349                    );
350 
351             end if; -- is this save and PA? or non-save?
352 
353          end if;
354          l_index := p_recipients.next(l_index);
355       End loop;
356 
357    End validate_phase;
358 
359    Function template_name_exists
360               (p_resource_id in number,
361                p_name_to_check in varchar2,
362                p_time_building_block_id in number,
363                p_template_type in varchar2,
364                p_business_group_id in varchar2
365                )
366       Return boolean is
367 
368       cursor c_is_dynamic_template
369                (p_name_to_check in varchar2) is
370         select 'Y'
371           from hr_lookups
372          where lookup_type = 'HXC_DYNAMIC_TEMPLATES'
373            and meaning = p_name_to_check;
374 
375       cursor c_is_private_template
376                (p_name_to_check in varchar2,
377                 p_resoure_id in number,
378                 p_time_building_block_id in number
379                 ) is
380         select 'Y'
381           from hxc_template_summary
382          where template_type = 'PRIVATE'
383            and template_id <> p_time_building_block_id
384            and template_name = p_name_to_check
385            and resource_id = p_resource_id;
386 
387       cursor c_is_public_template
388                (p_name_to_check in varchar2,
389                 p_time_building_block_id in number,
390                 p_business_group_id in varchar2) is
391         select 'Y'
392           from hxc_template_summary
393          where template_type = 'PUBLIC'
394            and template_id <> p_time_building_block_id
395            and template_name = p_name_to_check
396            and business_group_id =p_business_group_id ;
397 
398       l_dummy varchar2(2);
399       value boolean := false;
400 
401    Begin
402 
403       open c_is_dynamic_template(p_name_to_check);
404       fetch c_is_dynamic_template into l_dummy;
405       if c_is_dynamic_template%NOTFOUND then
406          close c_is_dynamic_template;
407          if(p_template_type = 'PRIVATE') THEN
408             open c_is_private_template(p_name_to_check,p_resource_id,p_time_building_block_id);
409             fetch c_is_private_template into l_dummy;
410             if c_is_private_template%NOTFOUND then
411                close c_is_private_template;
412             else
413                close c_is_private_template;
414                value:=true;
415             end if;
416          elsif(p_template_type = 'PUBLIC') THEN
417             open c_is_public_template(p_name_to_check,p_time_building_block_id,p_business_group_id);
418             fetch c_is_public_template into l_dummy;
419             if c_is_public_template%NOTFOUND then
420                close c_is_public_template;
421             else
422                close c_is_public_template;
423                value:=true;
424             end if;
425          end if;
426       else
427          close c_is_dynamic_template;
428          value := true;
429       end if;
430 
431       return value;
432 
433    end template_name_exists;
434 
435    Procedure template_validation
436                (p_blocks     in out nocopy hxc_block_table_type,
437                 p_attributes in out nocopy hxc_attribute_table_type,
438                 p_messages   in out nocopy hxc_message_table_type,
439                 p_can_deposit   out nocopy boolean
440                 ) is
441 
442       l_template_index number;
443       l_template_name  hxc_time_attributes.attribute1%type;
444       l_security_index number;
445       l_business_group_id  hxc_time_attributes.attribute1%type;
446 
447    Begin
448 
449       p_can_deposit := true;
450       l_template_index := hxc_timecard_attribute_utils.get_attribute_index
451                             (p_attributes,
452                              hxc_timecard.c_template_attribute,
453                              null
454                              );
455       l_security_index := hxc_timecard_attribute_utils.get_attribute_index
456                             (p_attributes,
457                              hxc_timecard.c_security_attribute,
458                              null
459                              );
460 
461       l_template_name := p_attributes(l_template_index).attribute1;
462       l_business_group_id := p_attributes(l_security_index).attribute2;
463 
464       if(template_name_exists
465            (p_blocks(1).resource_id
466             ,l_template_name
467             ,p_attributes(l_template_index).building_block_id
468             ,p_attributes(l_template_index).attribute2,
469             l_business_group_id)) then
470 
471          p_can_deposit := false;
472 
473          hxc_timecard_message_helper.addErrorToCollection
474             (p_messages,
475              'HXC_366204_TEMPLATE_NAME',
476              hxc_timecard.c_error,
477              null,
478              'TEMPLATE_NAME&'||l_template_name,
479              hxc_timecard.c_hxc,
480              null,
481              null,
482              null,
483              null
484              );
485 
486       End if;
487 
488    End template_validation;
489 
490    Procedure change_late_audit_validation
491       (p_old_style_blks   in            hxc_self_service_time_deposit.timecard_info,
492        p_old_style_attrs in            hxc_self_service_time_deposit.building_block_attribute_info,
493        p_props           in            hxc_timecard_prop_table_type,
494        p_eval_start_date in            date,
495        p_eval_end_date   in            date,
496        p_messages        in out nocopy hxc_message_table_type
497        ) is
498 
499       l_cla_terg_id  number;
500       l_old_messages hxc_self_service_time_deposit.message_table;
501 
502    Begin
503 
504       l_cla_terg_id := to_number(
505                          hxc_timecard_properties.find_property_value
506                             (p_props,
507                              'TsPerAuditRequirementsAuditRequirements',
508                              null,
509                              null,
510                              p_eval_start_date,
511                              p_eval_end_date
512                              ));
513 
514       if(l_cla_terg_id is not null) then
515          hxc_time_entry_rules_utils_pkg.execute_cla_time_entry_rules
516             (p_time_building_blocks        =>  p_old_style_blks,
517              p_time_attributes             =>  p_old_style_attrs,
518              p_messages                    =>  l_old_messages,
519              p_time_entry_rule_group_id    =>  l_cla_terg_id
520              );
521 
522          hxc_timecard_message_utils.append_old_messages
523             (p_messages             => p_messages,
524              p_old_messages         => l_old_messages,
525              p_retrieval_process_id => null
526              );
527       end if;
528 
529    End change_late_audit_validation;
530 
531    Procedure recipients_update_validation
532       (p_blocks          in out nocopy hxc_block_table_type,
533        p_attributes      in out nocopy hxc_attribute_table_type,
534        p_old_style_blks  in            hxc_self_service_time_deposit.timecard_info,
535        p_old_style_attrs in            hxc_self_service_time_deposit.building_block_attribute_info,
536        p_props           in            hxc_timecard_prop_table_type,
537        p_eval_date       in            date,
538        p_deposit_mode    in            varchar2,
539        p_resubmit        in            varchar2,
540        p_messages        in out nocopy hxc_message_table_type
541        ) is
542 
543       cursor c_pa_tr_id is
544         select time_recipient_id
545           from hxc_time_recipients
546          where upper(name) = 'PROJECTS';
547 
548       l_application_set_id  number;
549       l_elp_terg_id         number;
550       l_eval_date           date;
551       l_appl_recipients     recipient_application_table;
552       l_old_messages        hxc_self_service_time_deposit.message_table;
553       l_otm_attributes      hxc_self_service_time_deposit.app_attributes_info;
554       l_timecard_start_time date;
555       l_timecard_stop_time  date;
556       l_projects_tr_id      number;
557       l_validate_on_save    hxc_pref_hierarchies.attribute1%type;
558       l_app_attributes hxc_self_service_time_deposit.app_attributes_info;
559       l_messages       hxc_self_service_time_deposit.message_table;
560 
561    Begin
562 
563       open c_pa_tr_id;
564       fetch c_pa_tr_id into l_projects_tr_id;
565       close c_pa_tr_id;
566 
567       l_timecard_start_time :=
568          hxc_timecard_block_utils.date_value
569            (p_blocks(hxc_timecard_block_utils.find_active_timecard_index(p_blocks)).start_time);
570       l_timecard_stop_time:=
571          hxc_timecard_block_utils.date_value
572            (p_blocks(hxc_timecard_block_utils.find_active_timecard_index(p_blocks)).stop_time);
573 
574 
575       l_application_set_id := to_number
576          (hxc_timecard_properties.find_property_value
577             (p_props,
578              'TsPerApplicationSetTsApplicationSet',
579              null,
580              null,
581              l_timecard_start_time,
582              l_timecard_stop_time
583              ));
584 
585       l_validate_on_save :=
586          hxc_timecard_properties.find_property_value
587            (p_props,
588             'TsPerValidateOnSaveValidateOnSave',
589             null,
590             null,
591             l_timecard_start_time,
592             l_timecard_stop_time
593             );
594 
595       if(l_validate_on_save is null) then
596          l_validate_on_save := hxc_timecard.c_no;
597       end if;
598 
599       l_appl_recipients := recipients(l_application_set_id);
600 
601       if(l_appl_recipients.count>0) then
602 
603          hxc_app_attribute_utils.cache_mappings;
604 
605          update_phase
606             (l_appl_recipients,
607              p_blocks,
608              p_attributes,
609              p_old_style_attrs,
610              p_messages,
611              p_deposit_mode,
612              l_projects_tr_id,
613              l_validate_on_save
614              );
615 
616          l_elp_terg_id := to_number
617             (hxc_timecard_properties.find_property_value
618                 (p_props,
619                  'TsPerElpRulesElpTimeEntryRuleGroup',
620                  null,
621                  null,
622                  l_timecard_start_time,
623                  l_timecard_stop_time
624                  ));
625 
626          hxc_time_category_utils_pkg.push_timecard
627             (p_blocks,
628              p_attributes);
629 
630          if(l_elp_terg_id is not null) then
631             hxc_time_entry_rules_utils_pkg.execute_elp_time_entry_rules
632                (p_time_building_blocks        =>  p_blocks,
633                 p_time_attributes             =>  p_attributes,
634                 p_messages                    =>  l_old_messages,
635                 p_time_entry_rule_group_id    =>  l_elp_terg_id
636                 );
637          end if;
638 
639          hxc_elp_utils.set_time_bb_appl_set_id
640             (p_time_building_blocks        =>  p_blocks,
641              p_time_attributes             =>  p_attributes,
642              p_messages                    =>  l_old_messages,
643              p_pte_terg_id                 =>  l_elp_terg_id,
644              p_application_set_id          =>  l_application_set_id
645              );
646 
647          hxc_timecard_message_utils.append_old_messages
648             (p_messages             => p_messages,
649              p_old_messages         => l_old_messages,
650              p_retrieval_process_id => null
651              );
652 
653          validate_phase
654             (l_appl_recipients,
655              p_blocks,
656              p_attributes,
657              p_old_style_attrs,
658              p_messages,
659              p_deposit_mode,
660              l_elp_terg_id,
661              l_projects_tr_id,
662              l_validate_on_save
663              );
664 
665       end if;
666 
667       l_old_messages.delete;
668 
669       -- GPM v115.12 WWB 3470294
670       -- set the bld blks and app attribute structures to show the non
671       -- non filtered ELP structures
672       -- ARR 115.25 Now use this l_app_attributes structure of the otm
673       -- validation as well, since TERs do not change the values in here
674       --
675 
676       l_app_attributes := get_otm_app_attributes
677          (p_attributes,
678           p_messages);
679 
680       -- GPM v115.12 WWB 3470294
681 
682 
683   -- GPM v115.26 start
684   -- added calls to set_update_phase and set_g_attributes
685   -- otherwise g_attributes and g_timecard are not available to
686   -- TER when no recipient validation is called
687 
688   hxc_self_service_time_deposit.set_update_phase(true);
689 
690   hxc_self_service_time_deposit.set_app_hook_params
691     (p_building_blocks => p_old_style_blks
692     ,p_app_attributes  => l_app_attributes
693     ,p_messages        => l_messages );
694 
695   hxc_self_service_time_deposit.set_update_phase(false);
696 
697   hxc_self_service_time_deposit.set_g_attributes
698      ( p_attributes     =>  p_old_style_attrs );
699 
700   -- GPM v115.26 end
701 
702       hxc_time_entry_rules_utils_pkg.execute_time_entry_rules
703          (p_operation => p_deposit_mode,
704           p_time_building_blocks =>  p_old_style_blks,
705           p_time_attributes => p_old_style_attrs,
706           p_messages => l_old_messages,
707           p_resubmit => p_resubmit,
708           p_blocks => p_blocks,
709           p_attributes => p_attributes
710           );
711 
712       hxc_timecard_message_utils.append_old_messages
713          (p_messages             => p_messages,
714           p_old_messages         => l_old_messages,
715           p_retrieval_process_id => null
716           );
717 
718       --
719       -- Now include the OTM validation, which was included in the set up
720       -- validation called previously.
721       --
722       l_old_messages.delete;
723 
724       hxt_hxc_retrieval_process.otlr_validation_required
725          (p_operation            => p_deposit_mode,
726           p_otm_explosion        => hxc_timecard_properties.find_property_value
727              (p_props,
728               'TcWRulesEvaluationRulesEvaluation',
729               null,
730               null,
731               p_eval_date
732               ),
733           p_otm_rtr_id           => hxc_timecard_properties.find_property_value
734              (p_props,
735               'TcWRulesEvaluationAppRulesEvaluation',
736               null,
737               null,
738               p_eval_date
739               ),
740           p_app_set_id           => l_application_set_id,
741           p_timecard_id          => p_blocks(hxc_timecard_block_utils.find_active_timecard_index(p_blocks)).time_building_block_id,
742           p_timecard_ovn         => p_blocks(hxc_timecard_block_utils.find_active_timecard_index(p_blocks)).object_version_number,
743           p_time_building_blocks => p_old_style_blks,
744           p_time_att_info        => l_app_attributes,
745           p_messages             => l_old_messages
746           );
747 
748       hxc_timecard_message_utils.append_old_messages
749          (p_messages             => p_messages,
750           p_old_messages         => l_old_messages,
751           p_retrieval_process_id => null
752           );
753 
754    End recipients_update_validation;
755 
756    Procedure recipients_update_validation
757       (p_blocks       in out nocopy hxc_block_table_type,
758        p_attributes   in out nocopy hxc_attribute_table_type,
759        p_messages     in out nocopy hxc_message_table_type,
760        p_props        in            hxc_timecard_prop_table_type,
761        p_deposit_mode in            varchar2,
762        p_resubmit     in            varchar2
763        ) is
764 
765       l_eval_date       date;
766       l_old_style_blks  HXC_SELF_SERVICE_TIME_DEPOSIT.timecard_info;
767       l_old_style_attrs hxc_self_service_time_deposit.building_block_attribute_info;
768 
769    Begin
770       l_old_style_blks := HXC_TIMECARD_BLOCK_UTILS.convert_to_dpwr_blocks(p_blocks);
771       l_old_style_attrs := HXC_TIMECARD_ATTRIBUTE_UTILS.convert_to_dpwr_attributes(p_attributes);
772       l_eval_date := fnd_date.canonical_to_date(p_blocks(hxc_timecard_block_utils.find_active_timecard_index(p_blocks)).start_time);
773 
774       recipients_update_validation
775          (p_blocks          => p_blocks,
776           p_attributes      => p_attributes,
777           p_old_style_blks  => l_old_style_blks,
778           p_old_style_attrs => l_old_style_attrs,
779           p_props           => p_props,
780           p_eval_date       => l_eval_date,
781           p_deposit_mode    => p_deposit_mode,
782           p_resubmit        => p_resubmit,
783           p_messages        => p_messages
784           );
785 
786    End recipients_update_validation;
787 
788    Procedure  data_set_validation
789       (p_blocks        in out nocopy hxc_block_table_type,
790        p_messages      in out nocopy hxc_message_table_type
791        ) is
792 
793       cursor c_data_set( p_stop_time date) is
794         select 1
795           from hxc_data_sets  d
796          where p_stop_time between d.start_date and d.end_date
797            and status in ('OFF_LINE','BACKUP_IN_PROGRESS','RESTORE_IN_PROGRESS');
798 
799       l_timecard_start_time date;
800       l_timecard_stop_time  date;
801       l_dummy               number;
802 
803    Begin
804 
805       l_timecard_start_time := hxc_timecard_block_utils.date_value
806          (p_blocks(hxc_timecard_block_utils.find_active_timecard_index(p_blocks)).start_time);
807 
808       l_timecard_stop_time := hxc_timecard_block_utils.date_value
809          (p_blocks(hxc_timecard_block_utils.find_active_timecard_index(p_blocks)).stop_time);
810 
811       open c_data_set(l_timecard_stop_time);
812       fetch c_data_set into l_dummy;
813       if c_data_set%found then
814          close c_data_set;
815          hxc_timecard_message_helper.addErrorToCollection
816             (p_messages,
817              'HXC_TC_OFFLINE_PERIOD_CONFLICT',
818              hxc_timecard.c_error,
819              null,
820              null,
821              hxc_timecard.c_hxc,
822              p_blocks(hxc_timecard_block_utils.find_active_timecard_index(p_blocks)).time_building_block_id,
823              p_blocks(hxc_timecard_block_utils.find_active_timecard_index(p_blocks)).object_version_number,
824              null,
825              null
826              );
827       else
828          close c_data_set;
829       end if;
830    End data_set_validation;
831 
832    Procedure timecard_validation
833       (p_blocks       in out nocopy hxc_block_table_type,
834        p_attributes   in out nocopy hxc_attribute_table_type,
835        p_messages     in out nocopy hxc_message_table_type,
836        p_props        in            hxc_timecard_prop_table_type,
837        p_deposit_mode in            varchar2,
838        p_resubmit     in            varchar2
839        ) is
840 
841       l_tc_start_date      date;
842       l_tc_end_date        date;
843       l_old_style_blks     HXC_SELF_SERVICE_TIME_DEPOSIT.timecard_info;
844       l_old_style_attrs    hxc_self_service_time_deposit.building_block_attribute_info;
845 
846    Begin
847       l_old_style_blks := HXC_TIMECARD_BLOCK_UTILS.convert_to_dpwr_blocks
848          (p_blocks);
849 
850       l_old_style_attrs := HXC_TIMECARD_ATTRIBUTE_UTILS.convert_to_dpwr_attributes
851          (p_attributes);
852 
853       l_tc_start_date:= fnd_date.canonical_to_date
854          (p_blocks(hxc_timecard_block_utils.find_active_timecard_index(p_blocks)).start_time);
855       l_tc_end_date  := fnd_date.canonical_to_date
856          (p_blocks(hxc_timecard_block_utils.find_active_timecard_index(p_blocks)).stop_time);
857 
858       recipients_update_validation
859          (p_blocks          => p_blocks,
860           p_attributes      => p_attributes,
861           p_old_style_blks  => l_old_style_blks,
862           p_old_style_attrs => l_old_style_attrs,
863           p_props           => p_props,
864           p_eval_date       => l_tc_start_date,
865           p_deposit_mode    => p_deposit_mode,
866           p_resubmit        => p_resubmit,
867           p_messages        => p_messages
868          );
869 
870       change_late_audit_validation
871          (p_old_style_blks  => l_old_style_blks,
872           p_old_style_attrs => l_old_style_attrs,
873           p_props           => p_props,
874           p_eval_start_date => l_tc_start_date,
875           p_eval_end_date   => l_tc_end_date,
876           p_messages        => p_messages
877          );
878 
879       data_set_validation
880          (p_blocks       => p_blocks,
881           p_messages     => p_messages
882           );
883 
884    End timecard_validation;
885 
886    procedure deposit_validation
887       (p_blocks       in out nocopy hxc_block_table_type,
888        p_attributes   in out nocopy hxc_attribute_table_type,
889        p_messages     in out nocopy hxc_message_table_type,
890        p_props        in            hxc_timecard_prop_table_type,
891        p_deposit_mode in            varchar2,
892        p_template     in            varchar2,
893        p_resubmit     in            varchar2,
894        p_can_deposit     out nocopy boolean
895       ) is
896 
897    Begin
898 
899       if(p_template = 'Y') then
900          if(p_deposit_mode <> hxc_timecard.c_delete) then
901             template_validation
902                (p_blocks     => p_blocks,
903                 p_attributes => p_attributes,
904                 p_messages   => p_messages,
905                 p_can_deposit=> p_can_deposit
906                 );
907          end if;
908       else
909          timecard_validation
910             (p_blocks       => p_blocks,
911              p_attributes   => p_attributes,
912              p_messages     => p_messages,
913              p_props        => p_props,
914              p_deposit_mode => p_deposit_mode,
915              p_resubmit     => p_resubmit
916              );
917       end if;
918 
919    End deposit_validation;
920 
921 end hxc_timecard_validation;