DBA Data[Home] [Help]

PACKAGE BODY: APPS.PO_STORE_TIMECARD_PKG_GRP

Source


1 PACKAGE BODY PO_STORE_TIMECARD_PKG_GRP AS
2 /* $Header: POXGSTCB.pls 120.2 2007/12/26 11:39:36 adbharga ship $ */
3 
4 --  *** PRIVATE PROCEDURES  **
5 
6 /*  8i compatibility issue.  Commenting out
7 function  add_error (
8         p_rtrvd_tcs PO_RTRVD_TCS_REC
9     ) return PO_RTRVD_TCS_ERR_REC
10     IS
11       tc_id           po_tbl_number;
12       tc_day_id       po_tbl_number;
13       tc_detail_id    po_tbl_number;
14       po_number       po_tbl_varchar20;
15       line_number     po_tbl_number;
16       original_index   po_tbl_number;
17       msg_data        po_tbl_varchar2000;
18       msg_cnt number;
19       errors  NUMBER;
20       err_index  number;
21     begin
22 
23     errors := SQL%BULK_EXCEPTIONS.COUNT;
24 
25        --dbms_output.put_line('Number of errors is ' || errors);
26        FOR i IN 1..errors LOOP
27                err_index := SQL%BULK_EXCEPTIONS(i).ERROR_INDEX;
28                tc_id.extend;
29 	       tc_day_id.extend;
30 	       tc_detail_id.extend;
31 	       po_number.extend;
32 	       line_number.extend;
33 	       original_index.extend;
34 	       msg_data.extend;
35 
36 	       msg_cnt := msg_data.count;
37 
38 	       tc_id(msg_cnt) := p_rtrvd_tcs.tc_id(err_index);
39 	       tc_day_id(msg_cnt) := p_rtrvd_tcs.tc_day_id(err_index);
40 	       tc_detail_id(msg_cnt) := p_rtrvd_tcs.tc_detail_id(err_index);
41 	       po_number(msg_cnt) := p_rtrvd_tcs.po_number(err_index);
42 	       line_number(msg_cnt) := p_rtrvd_tcs.po_line_number(err_index);
43 	       original_index(msg_cnt) := err_index;
44 	       msg_data(msg_cnt) := SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE);
45 
46 
47          / *  old comment
48           dbms_output.put_line('Error ' || i || ' occurred during '||
49              'iteration ' || SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
50           dbms_output.put_line('Oracle error is ' ||
51              SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE));
52          * /
53    END LOOP;
54 
55     return (PO_RTRVD_TCS_ERR_REC(tc_id  => tc_id,
56                                  tc_day_id  => tc_day_id,
57                                  tc_detail_id => tc_detail_id,
58                                  po_number  => po_number,
59                                  line_number => line_number,
60                                  original_index => original_index,
61                                  msg_data   => msg_data
62                                 ));
63 
64    end add_error;
65 
66 end of 8i compatibility issue
67 */
68 --  *** PUBLIC PROCEDURES  **
69 procedure initGlobals
70 is
71 begin
72   g_cur_po_header_id := null;
73   g_cur_po_line_id := null;
74 end initGlobals;
75 
76 function isFirstOccurance(p_po_header_id number, p_po_line_id number)
77     return number is
78     begin
79     if (p_po_header_id = g_cur_po_header_id and p_po_line_id = g_cur_po_line_id) then
80       return 1;
81     else
82       g_cur_po_header_id := p_po_header_id;
83       g_cur_po_line_id := p_po_line_id;
84       return 0;
85     end if;
86 end ;
87 
88 procedure store_timecard_details
89 	(
90 	p_api_version	number,
91 	x_return_status	out NOCOPY varchar2,
92 	x_msg_data      out NOCOPY varchar2,
93 	p_vendor_id	number,
94 	p_vendor_site_id	number,
95 	p_vendor_contact_id	number,
96 	p_po_num	varchar2,
97 	p_po_line_number	number,
98 	p_org_id	number,
99 	p_project_id	number,
100 	p_task_id	number,
101 	p_tc_id	number, --building_block_id for timecards
102 	p_tc_day_id	number,  --building_block_id for timecard days
103 	p_tc_detail_id	number,  -- building_block_id for details
104 	p_tc_uom	varchar2,  --mostly Hours
105 	p_tc_Start_date	date,   --Timecard start date
106 	p_tc_end_date	date,  --Timecard end date
107 	p_tc_entry_date	date, --date the worker worked
108 	p_tc_time_received	number, --number of hours worked
109 	p_tc_approval_status varchar2,
110 	p_tc_approval_date  date,
111 	p_tc_submission_date date,
112 	p_contingent_worker_id	number, --worker id
113 	p_tc_comment_text	varchar2, --tc comment
114 	p_line_rate_type	varchar2,  -- Regular, Overtime
115 	p_line_rate	number,
116 	p_action  VARCHAR2,
117 	p_interface_transaction_id number
118 	) is
119   l_po_header_id  number;
120   l_po_currency varchar2(15);
121   l_po_creation_date  date;
122   l_po_line_id number;
123   l_po_line_number number;
124   l_contractor_full_name varchar2(500);
125   l_contractor_first_name varchar2(240);
126   l_contractor_last_name varchar2(240);
127   l_project_name  varchar2(255);
128   l_task_number   varchar2(255);
129   l_line_rate	number;
130   l_stage  varchar2(2000);
131   l_vendor_id  number;
132   l_vendor_site_id number;
133   l_action  varchar2(2);
134   l_po_number varchar2(20);
135   l_org_id number;
136   l_tc_approved_date  date;
137   l_tc_uom  varchar2(30);
138   l_tc_start_date date;
139   l_tc_end_date date;
140   l_tc_entry_date date;
141   l_contingent_worker_id number;
142   l_line_rate_type varchar2(30);
143   l_tc_entry_seq  number;
144 
145   l_get_fresh varchar2(1) := 'N';
146   -- Bug6391432
147   -- To avoid the no data found for a zero amount time card correction
148   -- added up the logic to catch NO_DATA_FOUND exception and treat the
149   -- update action as insert action for timecards which had zero amount
150   -- when making a insert in ISP table and didnt went into ISP table.
151   begin
152 
153        if (upper(p_action) = 'UPDATE' OR upper(p_action) = 'DELETE') then
154            --Get the mandatory data to create a new row with the above action.
155            l_stage := 'Getting ready to UPDATE or DELETE';
156 	   Begin
157            select VENDOR_ID, VENDOR_SITE_ID, PO_HEADER_ID, PO_NUMBER, PO_LINE_ID, PO_LINE_NUMBER,
158                   ORG_ID, PO_CREATION_DATE,
159 	     	         PO_CONTRACTOR_FULL_NAME, TC_UOM, TC_APPROVED_DATE,
160 	     	         TC_START_DATE, TC_ENTRY_DATE, TC_END_DATE,
161 	     	         CONTINGENT_WORKER_ID, LINE_RATE_TYPE, LINE_RATE, LINE_RATE_CURRENCY
162 	     	    into l_vendor_id, l_vendor_site_id, l_po_header_id, l_po_number,
163 	     	         l_po_line_id, l_po_line_number,
164 	     	         l_org_id, l_po_creation_date,
165 	     	         l_contractor_full_name, l_tc_uom, l_tc_approved_date,
166 	     	         l_tc_start_date, l_tc_entry_date, l_tc_end_date,
167 	     	         l_contingent_worker_id, l_line_rate_type, l_line_rate, l_po_currency
168 	     	    from po_retrieved_timecards
169   	           where tc_detail_id = p_tc_detail_id and tc_day_id = p_tc_day_id and
170   	                 tc_id = p_tc_id and rownum = 1;  --all we need is mandatory data; so first row is sufficient.
171   	   EXCEPTION
172  	                  WHEN No_Data_Found THEN
173  	                     l_get_fresh := 'Y';
174  	   END;
175 	   l_stage := 'Got data for UPDATE or DELETE';
176   	   END IF;
177   	   IF ( (NOT (upper(p_action) = 'UPDATE' OR upper(p_action) = 'DELETE') ) OR
178  	          l_get_fresh = 'Y') THEN
179   	        l_action := 'I';
180   	        l_stage := 'Getting ready for INSERT';
181 
182   	       	 select po_header_id, currency_code, creation_date,
183 	   	            vendor_id, vendor_site_id
184 	           into l_po_header_id, l_po_currency, l_po_creation_date,
185 	   	            l_vendor_id, l_vendor_site_id
186 	           from po_headers_all
187   	          where segment1 = p_po_num and org_id = p_org_id;
188 
189               l_stage := 'Getting the line id';
190 	          SELECT po_line_id
191 	            INTO l_PO_LINE_ID
192 	            FROM  po_lines_all pla
193 	           WHERE pla.po_header_id = l_po_header_id
194                  AND pla.line_num = p_po_line_number;
195 
196 
197 
198               if (p_line_rate is null or p_line_rate = 0) then
199 
200                  l_stage := 'getting the line rate';
201   	             SELECT ptlv.rate_value
202 	               INTO l_line_rate
203 	               FROM po_temp_labor_rates_v ptlv, po_lines_all pla
204                   WHERE ptlv.po_line_id = pla.po_line_id
205                     AND ptlv.asg_rate_type = p_line_rate_type
206                     AND pla.po_header_id = l_po_header_id
207                     AND pla.line_num = p_po_line_number;
208              else
209                  l_line_rate := p_line_rate;
210              end if;
211 
212   	         if (p_contingent_worker_id is not null) then
213   	             l_stage := 'getting the contingent worker';
214 		     -- Bug6391432
215  	             -- Use per_all_people_f instead of per_people_f because of security settings
216  	             -- for this responsibility/user settings, some of the resource ids may not be
217  	             -- eligible for the per_people_f view criteria. which in turn will fail the query.
218   	             select first_name || last_name contractor_full_name,
219 	   	                first_name, last_name
220 	     	       into l_contractor_full_name,
221 	   	                l_contractor_first_name, l_contractor_last_name
222 	   	           from per_all_people_f
223   	              where person_id = p_contingent_worker_id and
224   	                    sysdate between effective_start_date and effective_end_date;
225   	          end if;
226 
227               if (p_project_id is not null) then
228   	             l_stage := 'getting the project id';
229   	             select SEGMENT1
230   	               into l_project_name
231   	               from PA_PROJECTS_ALL
232   	              where project_id = p_project_id;
233 
234   	              if (p_task_id is not null) then
235   	                 l_stage := 'getting the task id';
236   	                 select TASK_NUMBER
237   	                   into l_task_number
238   	                   from PA_TASKS
239   	                  where project_id = p_project_id and task_id = p_task_id;
240   	               end if;
241 
242               end if;
243           /* set the local vars right to get ready to insert */
244           l_stage := 'Getting some misc data before INSERT';
245           l_po_number := p_PO_NUM;
246           l_po_line_number := p_po_line_number;
247           l_ORG_ID := p_ORG_ID;
248           l_TC_UOM := p_TC_UOM;
249           l_TC_START_DATE := p_TC_START_DATE;
250 	      l_TC_END_DATE := p_TC_END_DATE;
251 	      l_TC_ENTRY_DATE := p_TC_ENTRY_DATE;
252 	      l_tc_approved_date := p_TC_APPROVAL_DATE;
253 	      l_CONTINGENT_WORKER_ID := p_CONTINGENT_WORKER_ID;
254 	      l_LINE_RATE_TYPE := p_LINE_RATE_TYPE;
255 
256 
257        end if;  --end of if insert
258 
259   	if (upper(p_action) = 'UPDATE') then
260   	  l_stage := 'updating';
261   	  /*
262   	  update PO_RETRIEVED_TIMECARDS
263   	  set tc_time_received = p_tc_time_received, tc_comment_text = p_tc_comment_text,
264   	      line_rate_type = p_line_rate_type, line_rate =  p_line_rate
265   	  where tc_detail_id = p_tc_detail_id and tc_day_id = p_tc_day_id and tc_id = p_tc_id;
266   	  */
267 
268 
269   	  l_action := 'U';
270   	elsif (upper(p_action) = 'DELETE') then
271   	  l_stage := 'deleting';
272   	  l_action := 'D';
273   	  /*
274   	  delete PO_RETRIEVED_TIMECARDS
275   	  where tc_detail_id = p_tc_detail_id and tc_day_id = p_tc_day_id and tc_id = p_tc_id;
276   	  */
277     end if;
278 
279     select po_timecards_entry_s.nextval into l_tc_entry_seq  from dual;
280     l_stage := 'inserting';
281 
282   	insert into PO_RETRIEVED_TIMECARDS
283   	(
284   	  PO_HEADER_ID,
285 	  PO_NUMBER,
286 	  PO_LINE_ID,
287 	  PO_LINE_NUMBER,
288 	  ORG_ID,
289 	  PO_CREATION_DATE,
290 	  PO_CONTRACTOR_FULL_NAME,
291 	  PROJECT_ID,
292 	  PROJECT_NAME,
293 	  TASK_ID,
294 	  TASK_NAME,
295 	  TC_ID,
296 	  TC_DAY_ID,
297 	  TC_DETAIL_ID,
298 	  TC_SCOPE,
299 	  TC_UOM,
300 	  TC_START_DATE,
301 	  TC_END_DATE,
302 	  TC_ENTRY_DATE,
303 	  TC_TIME_RECEIVED,
304 	  TC_SUBMISSION_DATE,
305 	  TC_APPROVED_DATE,
306 	  TC_APPROVAL_STATUS,
307 	  CONTINGENT_WORKER_ID,
308 	  TC_COMMENT_TEXT,
309 	  LINE_RATE_TYPE,
310 	  LINE_RATE,
311 	  LINE_RATE_CURRENCY,
312 	  VENDOR_ID,
313 	  VENDOR_SITE_ID,
314 	  VENDOR_CONTACT_ID,
315 	  PO_CONTRACTOR_FIRST_NAME,
316       PO_CONTRACTOR_LAST_NAME,
317       INTERFACE_TRANSACTION_ID,
318       ACTION_FLAG,
319       TC_ENTRY_SEQUENCE
320   	)
321   	values
322   	(
323   	 l_PO_HEADER_ID,
324 	 l_PO_NUMBER,
325 	 l_PO_LINE_ID,
326 	 l_PO_LINE_NUMBER,
327 	 l_ORG_ID,
328      l_po_creation_date,
329 	 l_CONTRACTOR_FULL_NAME,
330      p_PROJECT_ID,
331 	 l_PROJECT_NAME,
332 	 p_TASK_ID,
333 	 l_TASK_NUMBER,
334 	 p_TC_ID,
335 	 p_TC_DAY_ID,
336 	 p_TC_DETAIL_ID,
337      'DETAIL',
338 	 l_TC_UOM,
339 	 l_TC_START_DATE,
340 	 l_TC_END_DATE,
341 	 l_TC_ENTRY_DATE,
342 	 p_TC_TIME_RECEIVED,
343 	 p_TC_SUBMISSION_DATE,
344 	 l_tc_approved_date,
345 	 p_TC_APPROVAL_STATUS,
346 	 l_CONTINGENT_WORKER_ID,
347 	 p_TC_COMMENT_TEXT,
348 	 l_LINE_RATE_TYPE,
349 	 l_LINE_RATE,
350 	 l_PO_CURRENCY,
351 	 l_VENDOR_ID,
352 	 l_VENDOR_SITE_ID,
353 	 p_VENDOR_CONTACT_ID,
354 	 l_contractor_first_name,
355      l_contractor_last_name,
356      p_interface_transaction_id,
357      l_action,
358      l_tc_entry_seq
359   	);
360 
361   	x_return_status := FND_API.G_RET_STS_SUCCESS;
362 
363   	--Do not commit
364 
365   	exception
366   	when others then
367   	x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
368 	x_msg_data  := 'Action = ' || p_action || 'Stage = ' || l_stage ||  ' PO Number: ' || p_po_num ||
369 	               ' Line : ' || to_char(p_po_line_number) ||
370 	               ' TC_ID : ' || to_char (p_tc_id) ||
371 	               ' TC_DAY_ID : ' || to_char(p_tc_day_id) ||
372 	               ' TC_DETAIL_ID : ' || to_char(p_tc_detail_id) ||
373 	               ' Error : ' || SQLERRM
374 	               ;
375 	-- dbms_output.put_line(SQLERRM);
376 
377 end store_timecard_details;
378 
379 
380  procedure reconcile_actions (p_api_version number,
381                               x_return_status  out NOCOPY varchar2,
382                               x_msg_data       out NOCOPY varchar2
383                               )
384  is
385  cursor  reconcile_csr is
386    select /*+ PO_RETRIEVED_TIMECARDS_N6 */ tc_id, tc_day_id, tc_detail_id,
387           action_flag, tc_time_received,
388           tc_comment_text, interface_transaction_id
389      from po_retrieved_timecards
390      where action_flag in ('I', 'U', 'D')
391      order by TC_ENTRY_SEQUENCE;
392 
393  l_tc_id number;
394  l_tc_day_id number;
395  l_tc_detail_id number;
396  l_action_flag varchar2(2);
397  l_tc_time_received number;
398  l_tc_comment_text varchar2(2000);
399  l_transaction_id  number;
400 
401  begin
402 
403  --First cleanup all the failed transactions from the po_retrieved_timecards.
404  delete /*+ PO_RETRIEVED_TIMECARDS_N6 */po_retrieved_timecards prt
405     where action_flag in ('I', 'U', 'D') and
406           not exists (select interface_transaction_id from rcv_transactions
407                       where interface_transaction_id = prt.interface_transaction_id);
408 
409   --now we will reconcile the succsful transactions.
410   open reconcile_csr;
411   loop
412 
413     fetch reconcile_csr into
414        l_tc_id, l_tc_day_id, l_tc_detail_id,
415           l_action_flag, l_tc_time_received,
416           l_tc_comment_text, l_transaction_id;
417 
418     exit when reconcile_csr%NOTFOUND;
419 
420 
421     if (l_action_flag = 'I') then
422        update po_retrieved_timecards
423        set action_flag = 'P'
424        where tc_id = l_tc_id and
425              tc_day_id = l_tc_day_id and
426              tc_detail_id = l_tc_detail_id and
427              action_flag = 'I';
428 
429     elsif (l_action_flag = 'U') then
430          update po_retrieved_timecards
431             set tc_time_received = l_tc_time_received,
432                 tc_comment_text = l_tc_comment_text
433           where tc_id = l_tc_id and
434                 tc_day_id = l_tc_day_id and
435                 tc_detail_id = l_tc_detail_id and
436                 action_flag = 'P';
437     elsif (l_action_flag = 'D') then
438          update po_retrieved_timecards
439             set action_flag = 'DP'
440          where tc_id = l_tc_id and
441                tc_day_id = l_tc_day_id and
442                tc_detail_id = l_tc_detail_id and
443                action_flag = 'P';
444 
445     end if;
446 
447   end loop;
448 
449   close reconcile_csr;
450 
451  delete po_retrieved_timecards
452   where action_flag in ('U', 'D');
453 
454 
455    x_return_status := FND_API.G_RET_STS_SUCCESS;
456 
457   	--Do not commit
458 
459 
460  exception
461  when others then
462    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
463    x_msg_data := ' Error : ' || SQLERRM;
464  end;
465 
466 
467 
468  procedure store_timecard_details_rec (p_api_version number,
469                                    x_return_status	out NOCOPY varchar2,
470 	                           x_msg_data      out NOCOPY varchar2,
471 	                           p_rtrvd_tc  PO_RTRVD_TC_REC,
472                                    p_action	VARCHAR2
473                                   ) is
474  begin
475     store_timecard_details
476     	(
477     	 p_api_version           => p_api_version,
478          x_return_status         => x_return_status,
479     	 x_msg_data              =>x_msg_data,
480     	p_vendor_id              =>p_rtrvd_tc.VENDOR_ID,
481     	p_vendor_site_id         =>p_rtrvd_tc.VENDOR_SITE_ID,
482     	p_vendor_contact_id      =>p_rtrvd_tc.VENDOR_CONTACT_ID,
483     	p_po_num                 =>p_rtrvd_tc.PO_NUMBER,
484     	p_po_line_number         =>p_rtrvd_tc.PO_LINE_NUMBER,
485     	p_org_id                 =>p_rtrvd_tc.ORG_ID,
486     	p_project_id             =>p_rtrvd_tc.PROJECT_ID,
487     	p_task_id                =>p_rtrvd_tc.TASK_ID,
488     	p_tc_id                  =>p_rtrvd_tc.TC_ID,
489     	p_tc_day_id              =>p_rtrvd_tc.TC_DAY_ID,
490     	p_tc_detail_id           =>p_rtrvd_tc.TC_DETAIL_ID ,
491     	p_tc_uom                 =>p_rtrvd_tc.TC_UOM,
492     	p_tc_Start_date          =>p_rtrvd_tc.TC_START_DATE ,
493     	p_tc_end_date            =>p_rtrvd_tc.TC_END_DATE,
494     	p_tc_entry_date          =>p_rtrvd_tc.TC_ENTRY_DATE,
495     	p_tc_time_received       =>p_rtrvd_tc.TC_TIME_RECEIVED,
496     	p_tc_approval_status     =>p_rtrvd_tc.TC_APPROVAL_STATUS,
497     	p_tc_approval_date       =>p_rtrvd_tc.TC_APPROVED_DATE,
498     	p_tc_submission_date     =>p_rtrvd_tc.TC_SUBMISSION_DATE,
499     	p_contingent_worker_id   =>p_rtrvd_tc.CONTINGENT_WORKER_ID,
500     	p_tc_comment_text        =>p_rtrvd_tc.TC_COMMENT_TEXT,
501     	p_line_rate_type         =>p_rtrvd_tc.LINE_RATE_TYPE,
502     	p_line_rate              => p_rtrvd_tc.LINE_RATE,
503         p_action                 => p_action,
504         p_interface_transaction_id       => 0  --this api is not being used currently.
505     	);
506 
507   exception
508   when others then
509     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
510     x_msg_data := ' Error : ' || SQLERRM;
511  end store_timecard_details_rec;
512 
513 
514 /*  8i compatibility issue.  Commenting out.
515  procedure store_timecard_details_bulk (p_api_version number,
516                                        x_return_status	out NOCOPY varchar2,
517 	                                   x_msg_data      out NOCOPY varchar2,
518 	                                   p_rtrvd_tcs PO_RTRVD_TCS_REC,
519 	                                   p_action varchar2,
520 	                                   x_errs out NOCOPY PO_RTRVD_TCS_ERR_REC)
521 is
522 errors  NUMBER;
523 err_index  number;
524 dml_errors EXCEPTION;
525 PRAGMA exception_init(dml_errors, -24381);
526 begin
527 
528  if (upper(p_action) = 'UPDATE') then
529     forall i in p_rtrvd_tcs.po_number.first..p_rtrvd_tcs.po_number.last
530        SAVE EXCEPTIONS
531   	  update PO_RETRIEVED_TIMECARDS
532   	  set tc_time_received = p_rtrvd_tcs.tc_time_received(i),
533   	      tc_comment_text = p_rtrvd_tcs.tc_comment_text(i),
534   	      line_rate_type = p_rtrvd_tcs.line_rate_type(i),
535   	      line_rate =  p_rtrvd_tcs.line_rate(i)
536   	  where tc_detail_id = p_rtrvd_tcs.tc_detail_id(i) and
537   	        tc_day_id = p_rtrvd_tcs.tc_day_id(i) and
538   	        tc_id = p_rtrvd_tcs.tc_id(i);
539 
540  elsif (upper(p_action) = 'DELETE') then
541  forall i in p_rtrvd_tcs.po_number.first..p_rtrvd_tcs.po_number.last
542      SAVE EXCEPTIONS
543   	  delete PO_RETRIEVED_TIMECARDS
544   	  where tc_detail_id = p_rtrvd_tcs.tc_detail_id(i) and
545   	        tc_day_id = p_rtrvd_tcs.tc_day_id(i) and
546   	        tc_id = p_rtrvd_tcs.tc_id(i);
547 
548  else
549 
550   forall i in p_rtrvd_tcs.po_number.first..p_rtrvd_tcs.po_number.last
551      SAVE EXCEPTIONS
552     insert into PO_RETRIEVED_TIMECARDS
553   	(
554   	  PO_HEADER_ID,
555 	  PO_NUMBER,
556 	  PO_LINE_ID,
557 	  PO_LINE_NUMBER,
558 	  ORG_ID,
559 	  PO_APPROVED_DATE,
560 	  PO_CONTRACTOR_FULL_NAME,
561 	  PROJECT_ID,
562 	  PROJECT_NAME,
563 	  TASK_ID,
564 	  TASK_NAME,
565 	  TC_ID,
566 	  TC_DAY_ID,
567 	  TC_DETAIL_ID,
568 	  TC_SCOPE,
569 	  TC_UOM,
570 	  TC_START_DATE,
571 	  TC_END_DATE,
572 	  TC_ENTRY_DATE,
573 	  TC_TIME_RECEIVED,
574 	  TC_SUBMISSION_DATE,
575 	  TC_APPROVED_DATE,
576 	  TC_APPROVAL_STATUS,
577 	  CONTINGENT_WORKER_ID,
578 	  TC_COMMENT_TEXT,
579 	  LINE_RATE_TYPE,
580 	  LINE_RATE,
581 	  LINE_RATE_CURRENCY,
582 	  VENDOR_ID,
583 	  VENDOR_SITE_ID,
584 	  VENDOR_CONTACT_ID,
585 	  PO_CONTRACTOR_FIRST_NAME,
586       PO_CONTRACTOR_LAST_NAME
587   	)
588   	values
589   	(
590   	 p_rtrvd_tcs.PO_HEADER_ID(i),
591 	 p_rtrvd_tcs.PO_NUMBER(i),
592 	 p_rtrvd_tcs.PO_LINE_ID(i),
593 	 p_rtrvd_tcs.PO_LINE_NUMBER(i),
594 	 p_rtrvd_tcs.ORG_ID(i),
595      p_rtrvd_tcs.po_CREATION_DATE(i),
596 	 p_rtrvd_tcs.CONTRACTOR_FULL_NAME(i),
597      p_rtrvd_tcs.PROJECT_ID(i),
598 	 p_rtrvd_tcs.PROJECT_NAME(i),
599 	 p_rtrvd_tcs.TASK_ID(i),
600 	 p_rtrvd_tcs.TASK_NUMBER(i),
601 	 p_rtrvd_tcs.TC_ID(i),
602 	 p_rtrvd_tcs.TC_DAY_ID(i),
603 	 p_rtrvd_tcs.TC_DETAIL_ID(i),
604      'DETAIL',
605 	 p_rtrvd_tcs.TC_UOM(i),
606 	 p_rtrvd_tcs.TC_START_DATE(i),
607 	 p_rtrvd_tcs.TC_END_DATE(i),
608 	 p_rtrvd_tcs.TC_ENTRY_DATE(i),
609 	 p_rtrvd_tcs.TC_TIME_RECEIVED(i),
610 	 p_rtrvd_tcs.TC_SUBMISSION_DATE(i),
611 	 p_rtrvd_tcs.TC_APPROVAL_DATE(i),
612 	 p_rtrvd_tcs.TC_APPROVAL_STATUS(i),
613 	 p_rtrvd_tcs.CONTINGENT_WORKER_ID(i),
614 	 p_rtrvd_tcs.TC_COMMENT_TEXT(i),
615 	 p_rtrvd_tcs.LINE_RATE_TYPE(i),
616 	 p_rtrvd_tcs.LINE_RATE(i),
617 	 p_rtrvd_tcs.PO_CURRENCY(i),
618 	 p_rtrvd_tcs.VENDOR_ID(i),
619 	 p_rtrvd_tcs.VENDOR_SITE_ID(i),
620 	 p_rtrvd_tcs.VENDOR_CONTACT_ID(i),
621 	 p_rtrvd_tcs.contractor_first_name(i),
622      p_rtrvd_tcs.contractor_last_name(i)
623   	);
624  end if;
625 
626 exception
627   when dml_errors then
628   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
629   x_msg_data := '';
630 
631   x_errs := add_error (p_rtrvd_tcs);
632 
633   when others then
634     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
635     x_msg_data := ' Error : ' || SQLERRM;
636 
637 end store_timecard_details_bulk;
638 
639 End of 8i compatibility issue.
640 */
641 
642 
643 end PO_STORE_TIMECARD_PKG_GRP;