DBA Data[Home] [Help]

PACKAGE BODY: APPS.WIP_JSI_DEFAULTER

Source


1 package body wip_jsi_defaulter as
2 /* $Header: wipjsidb.pls 120.2.12000000.2 2007/05/03 22:40:34 vjambhek ship $ */
3 
4 /* private variables */
5   wjsi_row wip_job_schedule_interface%ROWTYPE;
6 
7 /* forward declarations */
8 
9 /* This package defaults all the column values in the wip mass load process. */
10 --  procedure row_by_row ;
11   procedure created_by_name;
12   procedure last_updated_by_name;
13   procedure organization; --should be first after standard who columns
14   procedure job_name;
15   procedure wip_entity_id;
16   procedure repetitive_schedule_id;
17   procedure kanban_card_id; --may default job properties based on kanban id
18   procedure schedule_group;
19   procedure line_code;
20   procedure project_number;
21   procedure task_number;--10
22   procedure firm_planned_flag;
23   procedure description;
24   procedure status_type;
25   procedure wip_supply_type;
26   procedure class_code;
27   procedure primary_item;
28   procedure start_quantity;
29   procedure net_quantity;
30   procedure overcompletion;
31   procedure asset_number;--20
32   procedure asset_group;
33   procedure parent_job_name;
34   procedure parent_wip_entity_id;
35   procedure rebuild_item;
36   procedure rebuild_serial_number;
37   procedure manual_rebuild_flag;
38   procedure first_unit_start_date;
39 	/* Uncommented to fix bug #5912951-FP of 5891243 */
40 --  procedure last_unit_start_date;
41 --  procedure first_unit_completion_date;
42 --  procedure last_unit_completion_date;
43   procedure due_date;
44   procedure date_released;
45   procedure requested_start_date;
46   procedure processing_work_days;--30
47   procedure daily_production_rate;
48   procedure header_id;
49   procedure demand_class;
50   procedure build_sequence;
51   procedure routing_reference;
52   procedure bom_reference;
53   procedure alternate_routing_designator;
54   procedure alternate_bom_designator;
55   procedure bom_revision;
56   procedure routing_revision;--40
57   procedure bom_revision_date;
58   procedure routing_revision_date;
59   procedure lot_number;
60   procedure source_code;
61   procedure source_line_id;
62   procedure scheduling_method;
63   procedure completion_subinventory;
64   procedure completion_locator;
65   procedure priority;
66   procedure allow_explosion;
67   procedure end_item_unit_number; --must be after primary_item_id  procedure
68   procedure owning_department;
69   procedure notification_required;--50
70   procedure shutdown_type;
71   procedure work_order_type;
72   procedure tagout_required;
73   procedure plan_maintenance;
74   procedure activity_type;
75   procedure activity_cause;--56
76   procedure material_issue_by_mo;
77   procedure serialization_start_op;
78   procedure maintenance_object_type;
79   procedure maintenance_object_id;
80   procedure maintenance_object_source;
81   procedure activity_source;
82   procedure pm_schedule_id;
83 
84 /* public procedures */
85   procedure default_values(p_wjsi_row in out nocopy wip_job_schedule_interface%ROWTYPE) IS
86     BEGIN
87       wjsi_row := p_wjsi_row;
88       created_by_name;
89       last_updated_by_name;
90       organization;
91       job_name;
92       wip_entity_id;
93       repetitive_schedule_id;
94       kanban_card_id;
95       schedule_group;
96       line_code;
97       project_number;
98       task_number;--10
99       firm_planned_flag;
100       description;
101       status_type;
102       wip_supply_type;
103 --added for EAM
104       asset_group;--20
105       asset_number;
106       rebuild_item;
107       maintenance_object_type;
108       maintenance_object_source;
109       rebuild_serial_number;
110       maintenance_object_id;
111       pm_schedule_id;
112       parent_job_name;
113       parent_wip_entity_id;
114 --
115       class_code;
116       primary_item;
117       start_quantity;
118       net_quantity;
119       overcompletion;
120       first_unit_start_date;/* Uncommented to fix bug #5912951-FP of 5891243 */
121 --      last_unit_start_date;
122 --      first_unit_completion_date;
123 --      last_unit_completion_date;
124       due_date;
125       date_released;
126       requested_start_date;
127       processing_work_days;--30
128       daily_production_rate;
129       header_id;
130       demand_class;
131       build_sequence;
132       routing_reference;
133       bom_reference;
134       alternate_routing_designator;
135       alternate_bom_designator;
136       bom_revision;
137       routing_revision;--40
138       bom_revision_date;
139       routing_revision_date;
140       lot_number;
141       source_code;
142       source_line_id;
143       allow_explosion;
144       scheduling_method;
145       completion_subinventory;
146       completion_locator;
147       priority;
148       end_item_unit_number; --must be after primary_item_id
149 --added for EAM
150       owning_department;
151       activity_cause;--56
152       activity_source;
153       plan_maintenance;
154       notification_required;--50
155       work_order_type;
156       manual_rebuild_flag;
157       tagout_required;
158       shutdown_type;
159       activity_type;
160 --
161       material_issue_by_mo;
162       serialization_start_op;
163       p_wjsi_row := wjsi_row;
164   end default_values;
165 
166   procedure default_serialization_op(p_rtgVal IN NUMBER) is
167     l_minOp NUMBER;
168     l_loadType NUMBER;
169     l_default NUMBER;
170     l_startOp NUMBER;
171     l_wipID NUMBER;
172     l_primaryItem NUMBER;
173     l_orgID NUMBER;
174   begin
175     select wp.default_serialization_start_op,
176            wjsi.load_type,
177            wjsi.serialization_start_op,
178            wjsi.wip_entity_id,
179            wjsi.primary_item_id,
180            wjsi.organization_id
181       into l_default,
182            l_loadType,
183            l_startOp,
184            l_wipID,
185            l_primaryItem,
186            l_orgID
187       from wip_parameters wp, wip_job_schedule_interface wjsi
188      where wjsi.rowid = wip_jsi_utils.current_rowid
189        and wjsi.organization_id = wp.organization_id;
190 
191     if(l_startOp is not null OR
192        l_primaryItem is null) then
193       return;
194     end if;
195     --warnings are populated in default values as to provide messages to the
196     --user asap
197     if(l_loadType in (wip_constants.create_job, wip_constants.create_ns_job)) then
198       if(p_rtgVal is not null) then
199        update wip_discrete_jobs
200           set serialization_start_op = p_rtgVal
201         where wip_entity_id = l_wipID
202           and exists (select 1
203                          from mtl_system_items
204                         where inventory_item_id = l_primaryItem
205                           and organization_id = l_orgID
206                           and serial_number_control_code = wip_constants.full_sn);
207 
208       elsif(l_default = wip_constants.yes) then
209         update wip_discrete_jobs
210           set serialization_start_op = (select nvl(min(operation_seq_num), 1)
211                                         from wip_operations
212                                         where wip_entity_id = l_wipID)
213          where wip_entity_id = l_wipID
214            and exists (select 1
215                          from mtl_system_items
216                         where inventory_item_id = l_primaryItem
217                           and organization_id = l_orgID
218                           and serial_number_control_code = wip_constants.full_sn);
219       end if;
220     end if;
221   end default_serialization_op;
222 
223 
224 /* private procedures */
225   procedure organization is
226     l_dummy NUMBER;
227     l_def_error boolean := true;
228     l_operating_unit NUMBER;
229   begin
230     --org_id defaulting
231     if(wjsi_row.organization_code is not null) then
232       if(wjsi_row.organization_id is null) then
233         select organization_id
234           into wjsi_row.organization_id
235           from mtl_parameters
236           where organization_code = wjsi_row.organization_code;
237       else
238         WIP_JSI_Utils.record_ignored_column_warning('ORGANIZATION_CODE');
239       end if;
240     end if;
241     l_def_error := false; --after this point exceptions are from validations
242 
243     select to_number(org_information3) into l_operating_unit
244       from hr_organization_information
245      where organization_id = wjsi_row.organization_id
246        and org_information_context = 'Accounting Information' ;
247 
248     --set the org context so future pjm validations succeed (their views are striped).
249     fnd_client_info.set_org_context(to_char(l_operating_unit));
250   exception
251     when others then
252       if(l_def_error) then
253         wip_jsi_utils.record_invalid_column_error('ORGANIZATION_CODE');
254       else
255         wip_jsi_utils.record_error('WIP_ML_ORGANIZATION_ID');
256       end if;
257       wip_jsi_utils.abort_request;
258   end organization;
259 
260   procedure job_name is begin
261     --wip_entity_name defaulting
262 
263     --if rescheduling job default name, warn if both name and id provided
264     if(wjsi_row.load_type in (wip_constants.resched_job, wip_constants.resched_eam_job)) then
265       if(wjsi_row.wip_entity_id is null) then
266         select wip_entity_id
267           into wjsi_row.wip_entity_id
268           from wip_entities
269          where wip_entity_name = wjsi_row.job_name
270            and organization_id = wjsi_row.organization_id;
271       elsif(wjsi_row.job_name is not null) then
272         WIP_JSI_Utils.record_ignored_column_warning('JOB_NAME');
273       end if;
274     --if rep sched, name is ignored
275     elsif(wjsi_row.load_type = wip_constants.create_sched) then
276       if(wjsi_row.job_name is not null) then
277         WIP_JSI_Utils.record_ignored_column_warning('JOB_NAME');
278       end if;
279     --when creating a job, if name isn't provided, create one
280     elsif(wjsi_row.job_name is null) then
281       /* Fix for Bug#2994658 */
282       if (wjsi_row.load_type = wip_constants.create_eam_job) then
283          select WORK_ORDER_PREFIX || wip_job_number_s.nextval
284          into   wjsi_row.job_name
285          from   wip_eam_parameters
286          where  organization_id = wjsi_row.organization_id ;
287       else
288         select fnd_profile.value('WIP_JOB_PREFIX') || wip_job_number_s.nextval
289         into wjsi_row.job_name
290         from dual;
291       end if ;
292     end if;
293   exception
294     when others then
295       wip_jsi_utils.record_invalid_column_error('JOB_NAME');
296       wip_jsi_utils.abort_request;
297   end job_name;
298 
299   procedure wip_entity_id is
300     l_dummy NUMBER;
301   begin
302     if(wjsi_row.load_type = wip_constants.create_sched) then
303       if(wjsi_row.wip_entity_id is not null) then
304         wip_jsi_utils.record_ignored_column_warning('WIP_ENTITY_ID');
305       end if;
306     --if create job request, then ignore interface wip_entity and default from sequence
307     elsif(wjsi_row.load_type in (wip_constants.create_job,
308                                  wip_constants.create_ns_job,
309                                  wip_constants.create_eam_job)) then
310       if(wjsi_row.wip_entity_id is not null) then
311         wip_jsi_utils.record_ignored_column_warning('WIP_ENTITY_ID');
312       end if;
313       select wip_entities_s.nextval
314         into wjsi_row.wip_entity_id
315         from dual;
316     else --do minimal validation of wip_entity_id so future defaulting doesn't error
317       select 1
318         into l_dummy
319         from wip_entities
320        where wip_entity_id = wjsi_row.wip_entity_id
321          and organization_id = wjsi_row.organization_id;
322     end if;
323   exception
324     when others then
325       wip_jsi_utils.record_invalid_column_error('WIP_ENTITY_ID');
326       wip_jsi_utils.abort_request;
327   end wip_entity_id;
328 
329   procedure schedule_group is begin
330     --schedule group defaulting
331     if(wjsi_row.load_type in (wip_constants.create_sched, wip_constants.create_eam_job, wip_constants.resched_eam_job)) then
332       if(wjsi_row.schedule_group_id is not null) then
333         wip_jsi_utils.record_ignored_column_warning('SCHEDULE_GROUP_ID');
334       end if;
335       if(wjsi_row.schedule_group_name is not null) then
336         wip_jsi_utils.record_ignored_column_warning('SCHEDULE_GROUP_NAME');
337       end if;
338       return;
339     end if;
340 
341     if(wjsi_row.schedule_group_id is null) then
342       if(wjsi_row.schedule_group_name is not null) then
343         select schedule_group_id
344           into wjsi_row.schedule_group_id
345           from wip_schedule_groups_val_v
346          where schedule_group_name = wjsi_row.schedule_group_name
347            and organization_id = wjsi_row.organization_id;
348       end if;
349     else
350       wip_jsi_utils.record_ignored_column_warning('SCHEDULE_GROUP_NAME');
351     end if;
352       --if still null, default from job
353     if(wjsi_row.load_type = wip_constants.resched_job and
354        wjsi_row.schedule_group_id is null) then
355       begin
356         select schedule_group_id
357           into wjsi_row.schedule_group_id
358           from wip_discrete_jobs
359           where wip_entity_id = wjsi_row.wip_entity_id
360           and organization_id = wjsi_row.organization_id;
361       exception
362         when others then null;
363       end;
364     end if;
365     -- if still null and loading from CTO, insert new group
366     if(wjsi_row.schedule_group_id is null and
367        wjsi_row.source_code = 'WICDOL' and
368        wjsi_row.delivery_id is not null) then
369         begin
370           select schedule_group_id
371             into wjsi_row.schedule_group_id
372             from wip_schedule_groups wsg,
373                  wsh_new_deliveries wds
374            where wds.delivery_id = wjsi_row.delivery_id
375              and wsg.schedule_group_name = wds.name
376              and wsg.organization_id = wjsi_row.organization_id;
377         exception
378           when no_data_found then
379           --having problems using dml returning...
380             select wip_schedule_groups_s.nextval
381               into wjsi_row.schedule_group_id
382               from dual;
383 
384             insert into wip_schedule_groups (
385             schedule_group_id,
386             schedule_group_name,
387             organization_id,
388             description,
389             created_by,
390             last_updated_by,
391             creation_date,
392             last_update_date)
393             select wjsi_row.schedule_group_id,
394                    wds.name,
395                    wjsi_row.organization_id,
396                    to_char(sysdate),
397                    fnd_global.user_id,
398                    fnd_global.user_id,
399                    sysdate,
400                    sysdate
401               from wsh_new_deliveries wds
402              where wds.delivery_id = wjsi_row.delivery_id;
403         end;
404     end if;
405   exception
406     when others then
407       wip_jsi_utils.record_invalid_column_error('SCHEDULE_GROUP_NAME');
408       wip_jsi_utils.abort_request;
409   end schedule_group;
410 
411   --line code defaulting
412   procedure line_code is begin
413     if(wjsi_row.line_id is null and wjsi_row.line_code is not null) then
414        select line_id
415          into wjsi_row.line_id
416          from wip_lines_val_v
417         where line_code = wjsi_row.line_code
418           and organization_id = wjsi_row.organization_id;
419     elsif(wjsi_row.line_id is not null and wjsi_row.line_code is not null) then
420       WIP_JSI_Utils.record_ignored_column_warning('LINE_CODE');
421     end if;
422   exception
423     when others then
424       wip_jsi_utils.record_invalid_column_error('LINE_CODE');
425       wip_jsi_utils.abort_request;
426   end line_code;
427 
428   procedure project_number is begin
429     if(wjsi_row.load_type = wip_constants.create_sched) then
430       if(wjsi_row.project_number is not null) then
431         WIP_JSI_Utils.record_ignored_column_warning('PROJECT_NUMBER');
432       end if;
433       if(wjsi_row.project_id is not null) then
434         WIP_JSI_Utils.record_ignored_column_warning('PROJECT_ID');
435       end if;
436     elsif(wjsi_row.project_number is not null and wjsi_row.project_id is null) then
437       -- fix MOAC, set id so project view works
438       fnd_profile.put('MFG_ORGANIZATION_ID',wjsi_row.organization_id);
439       select pjm_project.val_proj_numtoid(wjsi_row.project_number, wjsi_row.organization_id)
440         into wjsi_row.project_id
441         from dual;
442     elsif(wjsi_row.load_type not in (wip_constants.resched_job, wip_constants.resched_eam_job) and
443           wjsi_row.task_number is not null
444           and wjsi_row.task_id is not null) then
445       raise fnd_api.g_exc_unexpected_error;
446     end if;
447   exception
448     when others then
449       wip_jsi_utils.record_invalid_column_error('PROJECT_NUMBER');
450       wip_jsi_utils.abort_request;
451   end project_number;
452 
453   procedure task_number is begin
454     if(wjsi_row.load_type = wip_constants.create_sched) then
455       if(wjsi_row.task_number is not null) then
456         WIP_JSI_Utils.record_ignored_column_warning('TASK_NUMBER');
457       end if;
458       if(wjsi_row.task_id is not null) then
459         WIP_JSI_Utils.record_ignored_column_warning('TASK_ID');
460       end if;
461     elsif(wjsi_row.task_number is not null and wjsi_row.task_id is null) then
462       if(wjsi_row.load_type = wip_constants.resched_job) then
463         select pa.task_id
464           into wjsi_row.task_id
465           from pa_tasks_expend_v pa, wip_discrete_jobs wdj
466          where wdj.wip_entity_id = wjsi_row.wip_entity_id
467            and pa.project_id = nvl(wjsi_row.project_id, wdj.project_id)
468            and pa.task_number = wjsi_row.task_number;
469       else
470         select task_id
471           into wjsi_row.task_id
472           from pa_tasks_expend_v
473          where project_id = wjsi_row.project_id
474            and task_number = wjsi_row.task_number;
475       end if;
476     elsif(wjsi_row.task_number is not null and wjsi_row.task_id is not null) then
477       wip_jsi_utils.record_ignored_column_warning('TASK_NUMBER');
478     end if;
479   exception
480     when others then
481       wip_jsi_utils.record_invalid_column_error('TASK_NUMBER');
482       wip_jsi_utils.abort_request;
483   end task_number;
484 
485   procedure firm_planned_flag is begin
486     if(wjsi_row.firm_planned_flag is null and
487        wjsi_row.load_type in (wip_constants.create_job, wip_constants.create_sched,
488                               wip_constants.create_ns_job, wip_constants.create_eam_job)) then
489       wjsi_row.firm_planned_flag := wip_constants.no;
490     end if;
491   end firm_planned_flag;
492 
493   procedure demand_class is begin
494     if(wjsi_row.load_type in (wip_constants.resched_job, wip_constants.resched_eam_job) and
495        wjsi_row.demand_class is not null) then
496       wip_jsi_utils.record_ignored_column_warning('DEMAND_CLASS');
497     end if;
498   end demand_class;
499 
500   procedure description is begin
501     if(wjsi_row.description is null) then
502       if(wjsi_row.load_type in (wip_constants.create_job, wip_constants.create_ns_job)) then
503         fnd_message.set_name('WIP','WIP_MLD_DESC');
504         fnd_message.set_token('LOAD_DATE', fnd_date.date_to_charDT(sysdate), false);
505         wjsi_row.description := fnd_message.get;
506       elsif(wjsi_row.load_type = wip_constants.create_sched) then
507         fnd_message.set_name('WIP','WIP_MLR_DESC');
508         fnd_message.set_token('LOAD_DATE', fnd_date.date_to_charDT(sysdate), false);
509         wjsi_row.description := fnd_message.get;
510       end if;
511     end if;
512   end description;
513 
514   procedure build_sequence is begin
515     if(wjsi_row.load_type = wip_constants.create_sched and
516        wjsi_row.build_sequence is not null) then
517       wip_jsi_utils.record_ignored_column_warning('BUILD_SEQUENCE');
518     end if;
519   end build_sequence;
520 
521   procedure status_type is begin
522     if(wjsi_row.load_type = wip_constants.create_sched and wjsi_row.status_type is not null) then
523       wip_jsi_utils.record_ignored_column_warning('STATUS_TYPE');
524     elsif(wjsi_row.status_type is null and wjsi_row.load_type in (wip_constants.create_job,
525                                   wip_constants.create_ns_job, wip_constants.create_eam_job)) then
526       wjsi_row.status_type := wip_constants.unreleased;
527     elsif (wjsi_row.load_type in (wip_constants.resched_job, wip_constants.resched_eam_job) and
528            wjsi_row.status_type is null) then
529         select wdj.status_type
530           into wjsi_row.status_type
531         from wip_discrete_jobs wdj
532         where wdj.wip_entity_id = wjsi_row.wip_entity_id
533            and wdj.organization_id = wjsi_row.organization_id;
534     end if;
535   end status_type;
536 
537   procedure processing_work_days is begin
538     if(wjsi_row.load_type <> wip_constants.create_sched and
539        wjsi_row.processing_work_days is not null) then
540       wip_jsi_utils.record_ignored_column_warning('PROCESSING_WORK_DAYS');
541     end if;
542   end processing_work_days;
543 
544   procedure daily_production_rate is begin
545     if(wjsi_row.load_type <> wip_constants.create_sched and
546        wjsi_row.daily_production_rate is not null) then
547       wip_jsi_utils.record_ignored_column_warning('DAILY_PRODUCTION_RATE');
548     end if;
549   end daily_production_rate;
550 
551   procedure repetitive_schedule_id is begin
552     if(wjsi_row.load_type = wip_constants.create_sched) then
553       if(wjsi_row.repetitive_schedule_id is null) then
554         select wip_repetitive_schedules_s.nextval
555           into wjsi_row.repetitive_schedule_id
556           from dual;
557       end if;
558     elsif(wjsi_row.repetitive_schedule_id is not null) then
559       wip_jsi_utils.record_ignored_column_warning('REPETITIVE_SCHEDULE_ID');
560     end if;
561   end repetitive_schedule_id;
562 
563   procedure kanban_card_id is
564     l_raw_job WIP_Work_Order_Pub.DiscreteJob_Rec_Type ;
565     l_defaulted_job WIP_Work_Order_Pub.DiscreteJob_Rec_Type ;
566     l_raw_sched WIP_Work_Order_Pub.RepSchedule_Rec_Type ;
567     l_defaulted_sched WIP_Work_Order_Pub.RepSchedule_Rec_Type ;
568   begin
569     if(wjsi_row.kanban_card_id is null or wip_jsi_utils.validation_level <> wip_constants.inv) then
570       return;
571     end if;
572 
573 
574     if(wjsi_row.load_type = wip_constants.create_job) then
575       l_raw_job := WIP_Work_Order_Pub.G_MISS_DISCRETEJOB_REC ;
576 
577       l_raw_job.organization_id := wjsi_row.organization_id ;
578       l_raw_job.kanban_card_id := wjsi_row.kanban_card_id ;
579       l_raw_job.primary_item_id := nvl(wjsi_row.primary_item_id, l_raw_job.primary_item_id) ;
580       l_raw_job.completion_subinventory := nvl(wjsi_row.completion_subinventory, l_raw_job.completion_subinventory) ;
581       l_raw_job.completion_locator_id := nvl(wjsi_row.completion_locator_id, l_raw_job.completion_locator_id) ;
582       l_raw_job.start_quantity := nvl(wjsi_row.start_quantity, l_raw_job.start_quantity) ;
583 
584       l_raw_job.action := WIP_Globals.G_OPR_DEFAULT_USING_KANBAN ;
585 
586       WIP_Default_DiscreteJob.attributes(p_discreteJob_rec => l_raw_job,
587                                          x_discreteJob_rec => l_defaulted_job,
588                                          p_redefault       => false);
589 
590       l_defaulted_job := WIP_DiscreteJob_Util.convert_miss_to_null(l_defaulted_job) ;
591       wjsi_row.primary_item_id := l_defaulted_job.primary_item_id;
592       wjsi_row.completion_subinventory := l_defaulted_job.completion_subinventory;
593       wjsi_row.completion_locator_id := l_defaulted_job.completion_locator_id;
594       wjsi_row.start_quantity := l_defaulted_job.start_quantity;
595     elsif(wjsi_row.load_type = wip_constants.create_sched) then
596       l_raw_sched := WIP_Work_Order_Pub.G_MISS_REPSCHEDULE_REC ;
597 
598       l_raw_sched.organization_id := wjsi_row.organization_id ;
599       l_raw_sched.kanban_card_id := wjsi_row.kanban_card_id ;
600       l_raw_sched.line_id := nvl(wjsi_row.line_id, l_raw_sched.line_id) ;
601       l_raw_sched.processing_work_days := nvl(wjsi_row.processing_work_days, l_raw_sched.processing_work_days) ;
602       l_raw_sched.first_unit_cpl_date := nvl(wjsi_row.first_unit_completion_date, l_raw_sched.first_unit_cpl_date) ;
603       l_raw_sched.daily_production_rate := nvl(wjsi_row.daily_production_rate, l_raw_sched.daily_production_rate) ;
604       l_raw_sched.action := WIP_Globals.G_OPR_DEFAULT_USING_KANBAN;
605 
606       WIP_Default_RepSchedule.attributes(p_RepSchedule_rec => l_raw_sched,
607                                          x_RepSchedule_rec => l_defaulted_sched,
608                                          p_redefault => false);
609 
610       l_defaulted_sched := WIP_RepSchedule_Util.convert_miss_to_null(l_defaulted_sched) ;
611       wjsi_row.line_id := l_defaulted_sched.line_id;
612       wjsi_row.processing_work_days := l_defaulted_sched.processing_work_days;
613       wjsi_row.first_unit_completion_date := l_defaulted_sched.first_unit_cpl_date;
614       wjsi_row.daily_production_rate := l_defaulted_sched.daily_production_rate;
615     else
616       -- A kanban reference makes sense only on a standard job or schedule
617       -- creation request.
618       raise fnd_api.g_exc_unexpected_error;
619     end if ;
620     exception when others then
621       wip_jsi_utils.record_error('WIP_ML_BAD_KB_LOAD') ;
622       wip_jsi_utils.abort_request ;
623   end kanban_card_id ;
624 
625   procedure primary_item is begin
626     if(wjsi_row.load_type in (wip_constants.resched_job, wip_constants.resched_eam_job)) then
627       if(wjsi_row.primary_item_segments is not null) then
628         wip_jsi_utils.record_ignored_column_warning('PRIMARY_ITEM_SEGMENTS');
629       end if;
630       if(wjsi_row.primary_item_id is not null) then
631         wip_jsi_utils.record_ignored_column_warning('PRIMARY_ITEM_ID');
632       end if;
633     elsif(wjsi_row.primary_item_segments is not null) then
634       if(wjsi_row.primary_item_id is null) then
635         select inventory_item_id
636           into wjsi_row.primary_item_id
637           from mtl_system_items_kfv
638          where concatenated_segments = wjsi_row.primary_item_segments
639            and organization_id = wjsi_row.organization_id;
640       else
641         wip_jsi_utils.record_ignored_column_warning('PRIMARY_ITEM_SEGMENTS');
642       end if;
643     end if;
644   exception
645     when others then
646       wip_jsi_utils.record_invalid_column_error('PRIMARY_ITEM_SEGMENTS');
647       wip_jsi_utils.abort_request;
648   end primary_item;
649 
650   procedure start_quantity is begin
651     if(wjsi_row.load_type in (wip_constants.create_eam_job, wip_constants.resched_eam_job)) then
652       if(wjsi_row.start_quantity is not null) then
653         wip_jsi_utils.record_ignored_column_warning('START_QUANTITY');
654       end if;
655       wjsi_row.start_quantity := 1;
656     elsif(wjsi_row.load_type = wip_constants.create_sched and
657           wjsi_row.start_quantity is not null) then
658       wip_jsi_utils.record_ignored_column_warning('START_QUANTITY');
659     end if;
660   end start_quantity;
661 
662   procedure net_quantity is begin
663     if(wjsi_row.net_quantity is null) then
664       if(wjsi_row.load_type in (wip_constants.create_job, wip_constants.create_eam_job)) then
665         wjsi_row.net_quantity := wjsi_row.start_quantity;
666       elsif(wjsi_row.load_type in (wip_constants.resched_job, wip_constants.resched_eam_job)) then
667         select decode(wdj.net_quantity,
668                       wdj.start_quantity, wjsi_row.start_quantity,
669                       least(wdj.net_quantity, nvl(wjsi_row.start_quantity, wdj.net_quantity)))
670           into wjsi_row.net_quantity
671           from wip_discrete_jobs wdj
672          where wdj.wip_entity_id = wjsi_row.wip_entity_id
673            and wdj.organization_id = wjsi_row.organization_id;
674       elsif(wjsi_row.load_type = wip_constants.create_ns_job) then
675         wjsi_row.net_quantity := 0;
676       end if;
677     else
678       if(wjsi_row.load_type = wip_constants.create_sched) then
679         wip_jsi_utils.record_ignored_column_warning('NET_QUANTITY');
680       end if;
681     end if;
682   exception
683     when others then
684       wip_jsi_utils.record_invalid_column_error('NET_QUANTITY');
685       wip_jsi_utils.abort_request;
686   end net_quantity;
687 
688   procedure overcompletion is
689     l_tolType NUMBER;
690     l_tolValue NUMBER;
691     l_primaryItemId NUMBER;
692     begin
693     if(wjsi_row.load_type in (wip_constants.create_eam_job, wip_constants.resched_eam_job, wip_constants.create_sched)) then
694       if(wjsi_row.overcompletion_tolerance_type is not null) then
695         wip_jsi_utils.record_ignored_column_warning ('OVERCOMPLETION_TOLERANCE_TYPE');
696       end if;
697       if(wjsi_row.overcompletion_tolerance_value is not null) then
698         wip_jsi_utils.record_ignored_column_warning ('OVERCOMPLETION_TOLERANCE_VALUE');
699       end if;
700     elsif(wjsi_row.load_type = wip_constants.create_ns_job and
701           wjsi_row.primary_item_id is null) then
702       if(wjsi_row.overcompletion_tolerance_type is not null) then
703         wip_jsi_utils.record_ignored_column_warning ('OVERCOMPLETION_TOLERANCE_TYPE');
704       end if;
705       if(wjsi_row.overcompletion_tolerance_value is not null) then
706         wip_jsi_utils.record_ignored_column_warning ('OVERCOMPLETION_TOLERANCE_VALUE');
707       end if;
708     else
709       if(wjsi_row.load_type = wip_constants.resched_job) then
710         select overcompletion_tolerance_type, overcompletion_tolerance_value, primary_item_id
711           into l_tolType, l_tolValue, l_primaryItemId
712           from wip_discrete_jobs
713          where wip_entity_id = wjsi_row.wip_entity_id;
714         if(wjsi_row.overcompletion_tolerance_type is not null) then
715           wjsi_row.overcompletion_tolerance_type := l_tolType;
716         end if;
717         if(wjsi_row.overcompletion_tolerance_value is not null) then
718           wjsi_row.overcompletion_tolerance_value := l_tolValue;
719         end if;
720       else --job creation
721         l_primaryItemId := wjsi_row.primary_item_id;
722       end if;
723       if(wjsi_row.overcompletion_tolerance_type is null and
724          wjsi_row.overcompletion_tolerance_value is null and
725          l_primaryItemId is not null) then
726         --the only way this procedure error is if it can't find the item...thus
727         --the invalid assembly error below
728         WIP_Overcompletion.get_tolerance_default (p_primary_item_id  => l_primaryItemId,
729                                                   p_org_id           => wjsi_row.organization_id,
730                                                   p_tolerance_type   => wjsi_row.overcompletion_tolerance_type,
731                                                   p_tolerance_value  => wjsi_row.overcompletion_tolerance_value);
732       end if;
733     end if;
734   exception
735     when others then
736       wip_jsi_utils.record_error('WIP_ML_PRIMARY_ITEM_ID');
737       wip_jsi_utils.abort_request;
738   end overcompletion;
739 
740   procedure wip_supply_type is begin
741     if(wjsi_row.load_type in (wip_constants.create_job, wip_constants.create_ns_job, wip_constants.create_eam_job)) then
742       if(wjsi_row.wip_supply_type is null) then
743         wjsi_row.wip_supply_type := wip_constants.based_on_bom;
744       end if;
745     elsif(wjsi_row.wip_supply_type is not null) then
746       wip_jsi_utils.record_ignored_column_warning ('WIP_SUPPLY_TYPE');
747     end if;
748   end wip_supply_type;
749 
750   procedure class_code is
751     l_entityType NUMBER;
752     l_errMsg1 VARCHAR2(30);
753     l_errMsg2 VARCHAR2(30);
754     l_errClass1 VARCHAR2(30);
755     l_errClass2 VARCHAR2(30);
756     l_returnMsg VARCHAR2(200);
757     l_asset_number VARCHAR2(30);
758     l_asset_group_id NUMBER;
759     l_job_type NUMBER;
760   begin
761     l_errMsg1 := null;
762     l_errMsg2 := null;
763 
764     if(wjsi_row.class_code is not null) then
765       return;
766     end if;
767 
768     if(wjsi_row.load_type in (wip_constants.create_job, wip_constants.create_eam_job)) then
769       if(wjsi_row.load_type = wip_constants.create_job) then
770         l_entityType := wip_constants.discrete;
771         wjsi_row.class_code := wip_common.default_acc_class(x_org_id      => wjsi_row.organization_id,
772                                                           x_item_id     => wjsi_row.primary_item_id,
773                                                           x_entity_type => l_entityType,
774                                                           x_project_id  => wjsi_row.project_id,
775                                                           x_err_mesg_1  => l_errMsg1,
776                                                           x_err_mesg_2  => l_errMsg2,
777                                                           x_err_class_1 => l_errClass1,
778                                                           x_err_class_2 => l_errClass2);
779       else
780         l_entityType := wip_constants.eam;
781 
782         if (wjsi_row.rebuild_item_id is null) then
783              l_job_type := 1; -- maintenance WO
784              l_asset_number := wjsi_row.asset_number;
785              l_asset_group_id := wjsi_row.asset_group_id;
786         else
787              l_job_type := 2; -- rebuild WO
788              l_asset_number := wjsi_row.rebuild_serial_number;
789              l_asset_group_id := wjsi_row.rebuild_item_id;
790         end if;
791 
792         wip_eam_utils.default_acc_class( p_org_id          => wjsi_row.organization_id,
793                                          p_job_type        => l_job_type,
794                                          p_serial_number   => l_asset_number,
795                                          p_asset_group_id  => l_asset_group_id,
796                                          p_parent_wo_id    => wjsi_row.parent_wip_entity_id,
797                                          p_asset_activity_id  => wjsi_row.primary_item_id, -- Asset Activity
798                                          p_project_id      => wjsi_row.project_id,
799                                          p_task_id         => wjsi_row.task_id,
800                                          x_class_code      => wjsi_row.class_code, -- WAC (return value)
801                                          x_return_status   => l_returnMsg, -- Return Status
802                                          x_msg_data        => l_errMsg1);  -- Error messages
803       end if;
804       if (l_errMsg1 is not null) then
805         fnd_message.set_name('WIP', l_errMsg1);
806         fnd_message.set_token('class_code', l_errClass1, false);
807         wip_jsi_utils.record_current_error ;
808       end if ;
809       if (l_errMsg2 is not null) then
810         fnd_message.set_name('WIP', l_errMsg2);
811         fnd_message.set_token('class_code', l_errClass2, false);
812         wip_jsi_utils.record_current_error ;
813       end if ;
814     elsif(wjsi_row.load_type in (wip_constants.resched_job,
815                                  wip_constants.resched_eam_job,
816                                  wip_constants.create_sched)) then
817           if (wjsi_row.class_code is not null) then
818              wip_jsi_utils.record_ignored_column_warning ('CLASS_CODE');
819              return;
820           end if;
821 
822       if (wjsi_row.load_type in (wip_constants.resched_job, wip_constants.resched_eam_job) and
823           wjsi_row.class_code is NULL) then
824          select class_code
825          into   wjsi_row.class_code
826          from wip_discrete_jobs
827          where wip_entity_id = wjsi_row.wip_entity_id
828          and organization_id = wjsi_row.organization_id;
829       end if;
830     end if;
831   end class_code;
832 
833   procedure routing_reference is begin
834     if(wjsi_row.load_type in (wip_constants.create_job, wip_constants.create_sched, wip_constants.resched_job,
835                               wip_constants.create_eam_job, wip_constants.resched_eam_job)) then
836       if(wjsi_row.routing_reference_segments is not null) then
837         wip_jsi_utils.record_ignored_column_warning ('ROUTING_REFERENCE_SEGMENTS');
838       end if;
839       if(wjsi_row.routing_reference_id is not null) then
840         wip_jsi_utils.record_ignored_column_warning ('ROUTING_REFERENCE_ID');
841       end if;
842     elsif(wjsi_row.routing_reference_segments is not null) then
843       if(wjsi_row.routing_reference_id is null) then
844         select inventory_item_id
845           into wjsi_row.routing_reference_id
846           from mtl_system_items_kfv
847          where concatenated_segments = wjsi_row.routing_reference_segments
848            and organization_id = wjsi_row.organization_id;
849       else
850         wip_jsi_utils.record_ignored_column_warning('ROUTING_REFERENCE_SEGMENTS');
851       end if;
852     end if;
853     exception
854     when others then
855       wip_jsi_utils.record_invalid_column_error('ROUTING_REFERENCE_SEGMENTS');
856       wip_jsi_utils.abort_request;
857   end routing_reference;
858 
859   procedure bom_reference is begin
860     if(wjsi_row.load_type in (wip_constants.create_job, wip_constants.create_sched, wip_constants.resched_job,
861                               wip_constants.create_eam_job, wip_constants.resched_eam_job)) then
862       if(wjsi_row.bom_reference_segments is not null) then
863         wip_jsi_utils.record_ignored_column_warning ('BOM_REFERENCE_SEGMENTS');
864       end if;
865       if(wjsi_row.bom_reference_id is not null) then
866         wip_jsi_utils.record_ignored_column_warning ('BOM_REFERENCE_ID');
867       end if;
868     elsif(wjsi_row.bom_reference_segments is not null) then
869       if(wjsi_row.bom_reference_id is null) then
870         select inventory_item_id
871           into wjsi_row.bom_reference_id
872           from mtl_system_items_kfv
873          where concatenated_segments = wjsi_row.bom_reference_segments
874            and organization_id = wjsi_row.organization_id;
875       else
876         wip_jsi_utils.record_ignored_column_warning('BOM_REFERENCE_SEGMENTS');
877       end if;
878     end if;
879     exception
880     when others then
881       wip_jsi_utils.record_invalid_column_error('BOM_REFERENCE_SEGMENTS');
882       wip_jsi_utils.abort_request;
883   end bom_reference;
884 
885   procedure alternate_routing_designator is begin
886     if(wjsi_row.load_type in (wip_constants.create_sched, wip_constants.resched_job, wip_constants.resched_eam_job) and
887        wjsi_row.alternate_routing_designator is not null) then
888         wip_jsi_utils.record_ignored_column_warning ('ALTERNATE_ROUTING_DESIGNATOR');
889     end if;
890   end alternate_routing_designator;
891 
892   procedure alternate_bom_designator is begin
893     if(wjsi_row.load_type in (wip_constants.create_sched, wip_constants.resched_job, wip_constants.resched_eam_job) and
894        wjsi_row.alternate_bom_designator is not null) then
895         wip_jsi_utils.record_ignored_column_warning ('ALTERNATE_BOM_DESIGNATOR');
896     end if;
897   end alternate_bom_designator;
898 
899   procedure bom_revision is begin
900     if(wjsi_row.load_type in (wip_constants.resched_job, wip_constants.resched_eam_job) and
901        wjsi_row.bom_revision is not null) then
902       wip_jsi_utils.record_ignored_column_warning('BOM_REVISION');
903     elsif(wjsi_row.load_type not in (wip_constants.create_job, wip_constants.create_ns_job, wip_constants.create_eam_job)) then
904       if(wjsi_row.bom_revision_date is not null and wjsi_row.bom_revision is not null) then
905         wip_jsi_utils.record_ignored_column_warning('BOM_REVISION');
906       end if;
907     end if;
908   end bom_revision;
909 
910   procedure bom_revision_date is begin
911     if(wjsi_row.load_type in (wip_constants.resched_job, wip_constants.resched_eam_job) and
912        wjsi_row.bom_revision_date is not null) then
913       wip_jsi_utils.record_ignored_column_warning('BOM_REVISION_DATE');
914     end if;
915   end bom_revision_date;
916 
917   procedure routing_revision is begin
918     if(wjsi_row.load_type in (wip_constants.resched_job, wip_constants.resched_eam_job) and
919        wjsi_row.routing_revision is not null) then
920       wip_jsi_utils.record_ignored_column_warning('ROUTING_REVISION');
921     elsif(wjsi_row.load_type not in (wip_constants.create_job, wip_constants.create_ns_job, wip_constants.create_eam_job)) then
922       if(wjsi_row.routing_revision_date is not null and wjsi_row.routing_revision is not null) then
923         wip_jsi_utils.record_ignored_column_warning('ROUTING_REVISION');
924       end if;
925     end if;
926   end routing_revision;
927 
928   procedure routing_revision_date is begin
929     if(wjsi_row.load_type in (wip_constants.resched_job, wip_constants.resched_eam_job) and
930        wjsi_row.routing_revision_date is not null) then
931       wip_jsi_utils.record_ignored_column_warning('ROUTING_REVISION_DATE');
932     end if;
933   end routing_revision_date;
934 
935   procedure lot_number is
936     l_primary_item_id NUMBER;
937     l_wip_name VARCHAR2(240);
938   begin
939     if(wjsi_row.load_type = wip_constants.create_sched and
940        wjsi_row.lot_number is not null) then
941       wip_jsi_utils.record_ignored_column_warning('LOT_NUMBER');
942     elsif(wjsi_row.load_type in (wip_constants.resched_job, wip_constants.resched_eam_job)) then
943       select primary_item_id, wip_entity_name
944         into l_primary_item_id, l_wip_name
945         from wip_entities
946        where wip_entity_id = wjsi_row.wip_entity_id;
947 
948       wjsi_row.lot_number := wip_lot_number_default.lot_number(p_item_id => l_primary_item_id,
949                                                                p_organization_id => wjsi_row.organization_id,
950                                                                p_lot_number => wjsi_row.lot_number,
951                                                                p_job_name => l_wip_name,
952                                                                p_default_flag => 0);
953     else --job creation
954       wjsi_row.lot_number := wip_lot_number_default.lot_number(p_item_id => wjsi_row.primary_item_id,
955                                                                p_organization_id => wjsi_row.organization_id,
956                                                                p_lot_number => wjsi_row.lot_number,
957                                                                p_job_name => wjsi_row.job_name,
958                                                                p_default_flag => 1);
959 
960     end if;
961   exception
962     when others then
963       wip_jsi_utils.record_invalid_column_error('LOT_NUMBER');
964       wip_jsi_utils.abort_request;
965   end lot_number;
966 
967   procedure source_code is begin
968     if(wjsi_row.load_type = wip_constants.create_sched and
969        wjsi_row.source_code is not null) then
970       WIP_JSI_Utils.Record_Ignored_Column_Warning ('SOURCE_CODE');
971     end if;
972   end source_code;
973 
974   procedure source_line_id is begin
975     if(wjsi_row.load_type = wip_constants.create_sched and
976        wjsi_row.source_line_id is not null) then
977       WIP_JSI_Utils.Record_Ignored_Column_Warning ('SOURCE_LINE_ID');
978     end if;
979   end source_line_id;
980 
981   procedure first_unit_start_date is begin
982 
983   /* Fix for Bug#5912951-FP of 5891243. Following if condition needs to be
984      commented out as this will happen in scheduling_dates in wipjsivb.pls
985 
986     if(wjsi_row.first_unit_start_date is null and
987        wjsi_row.load_type = wip_constants.create_sched) then
988       --if no routing used work days and last unit comp date to determine fusd
989       select calendar_date
990          into wjsi_row.first_unit_start_date
991          from bom_calendar_dates bcd, mtl_parameters mp
992          where mp.organization_id = wjsi_row.organization_id
993            and bcd.exception_set_id = mp.calendar_exception_set_id
994            and bcd.calendar_code = mp.calendar_code
995            and seq_num = (select prior_seq_num - ceil(wjsi_row.processing_work_days)+1
996                             from bom_calendar_dates b2
997                            where b2.calendar_date = trunc(wjsi_row.last_unit_start_date)
998                              and b2.calendar_code = mp.calendar_code
999                              and b2.exception_set_id = bcd.exception_set_id)
1000            and (exists (select 1
1001                           from wip_lines wl
1002                          where wl.line_id = wjsi_row.line_id
1003                            and wl.line_schedule_type = 2))
1004            and (not exists (select 1
1005                               from bom_operational_routings bor,
1006                                    wip_repetitive_items wri
1007                              where wri.line_id = wjsi_row.line_id
1008                                and nvl(bor.cfm_routing_flag,2) = 2
1009                                and wri.primary_item_id = wjsi_row.primary_item_id
1010                                and wri.organization_id = wjsi_row.organization_id
1011                                and nvl(bor.alternate_routing_designator,'@@') =
1012                                       nvl(wri.alternate_routing_designator,'@@')
1013                                and bor.organization_id = wri.organization_id
1014                                and bor.assembly_item_id = wri.primary_item_id));
1015     end if;
1016     */
1017 
1018     /* Bug 5912951-FP of 5891243:
1019        Populate original job start date as fusd. This will ensure that completed operation
1020        dates are updated as original job start date in update_routing procedure in wipschdb.pls .
1021     */
1022     if (wjsi_row.source_code = 'MSC' and
1023        wjsi_row.load_type = wip_constants.resched_job and
1024        wjsi_row.scheduling_method = wip_constants.ml_manual) then
1025         select wdj.scheduled_start_date
1026          into wjsi_row.first_unit_start_date
1027          from wip_discrete_jobs wdj
1028          where wdj.wip_entity_id = wjsi_row.wip_entity_id
1029            and wdj.organization_id = wjsi_row.organization_id
1030            and exists ( select operation_seq_num
1031                         from wip_operations wo
1032                         where wo.wip_entity_id = wdj.wip_entity_id and
1033                         wo.organization_id = wdj.organization_id
1034                         minus
1035                         select  operation_seq_num
1036                         from    wip_job_dtls_interface
1037                         where   group_id = wjsi_row.group_id
1038                         and     parent_header_id = wjsi_row.header_id
1039                         and     load_type = WIP_JOB_DETAILS.WIP_OPERATION
1040                       ) ;
1041 
1042     end if;
1043 
1044   exception
1045     when no_data_found then
1046       null;
1047     when others then
1048       wip_jsi_utils.record_invalid_column_error('FIRST_UNIT_START_DATE');
1049       wip_jsi_utils.abort_request;
1050   end first_unit_start_date;
1051 
1052   procedure last_unit_start_date is begin
1053     if(wjsi_row.last_unit_start_date is null and
1054        wjsi_row.load_type = wip_constants.create_sched) then
1055       --if no routing used work days and first unit comp date to determine fusd
1056       select calendar_date
1057          into wjsi_row.last_unit_start_date
1058          from bom_calendar_dates bcd, mtl_parameters mp
1059          where mp.organization_id = wjsi_row.organization_id
1060            and bcd.exception_set_id = mp.calendar_exception_set_id
1061            and bcd.calendar_code = mp.calendar_code
1062            and seq_num = (select next_seq_num + ceil(wjsi_row.processing_work_days)-1
1063                             from bom_calendar_dates b2
1064                            where b2.calendar_date = trunc(wjsi_row.first_unit_start_date)
1065                              and b2.calendar_code = mp.calendar_code
1066                              and b2.exception_set_id = bcd.exception_set_id)
1067            and (exists (select 1
1068                           from wip_lines wl
1069                          where wl.line_id = wjsi_row.line_id
1070                            and wl.line_schedule_type = 2))
1071            and (not exists (select 1
1072                               from bom_operational_routings bor,
1073                                    wip_repetitive_items wri
1074                              where wri.line_id = wjsi_row.line_id
1075                                and nvl(bor.cfm_routing_flag,2) = 2
1076                                and wri.primary_item_id = wjsi_row.primary_item_id
1077                                and wri.organization_id = wjsi_row.organization_id
1078                                and nvl(bor.alternate_routing_designator,'@@') =
1079                                       nvl(wri.alternate_routing_designator,'@@')
1080                                and bor.organization_id = wri.organization_id
1081                                and bor.assembly_item_id = wri.primary_item_id));
1082     end if;
1083   exception
1084     when no_data_found then
1085          wip_jsi_utils.record_ignored_column_warning('LAST_UNIT_START_DATE');
1086       null;
1087     when others then
1088       wip_jsi_utils.record_invalid_column_error('LAST_UNIT_START_DATE');
1089       wip_jsi_utils.abort_request;
1090   end last_unit_start_date;
1091 
1092   procedure first_unit_completion_date is begin
1093     if(wjsi_row.first_unit_completion_date is null and
1094        wjsi_row.load_type = wip_constants.create_sched) then
1095       select calendar_date
1096          into wjsi_row.first_unit_completion_date
1097          from bom_calendar_dates bcd, mtl_parameters mp
1098          where mp.organization_id = wjsi_row.organization_id
1099            and bcd.exception_set_id = mp.calendar_exception_set_id
1100            and bcd.calendar_code = mp.calendar_code
1101            and seq_num = (select prior_seq_num - ceil(wjsi_row.processing_work_days)+1
1102                             from bom_calendar_dates b2
1103                            where b2.calendar_date = trunc(wjsi_row.last_unit_completion_date)
1104                              and b2.calendar_code = mp.calendar_code
1105                              and b2.exception_set_id = bcd.exception_set_id)
1106            and (exists (select 1
1107                           from wip_lines wl
1108                          where wl.line_id = wjsi_row.line_id
1109                            and wl.line_schedule_type = 2))
1110            and (not exists (select 1
1111                               from bom_operational_routings bor,
1112                                    wip_repetitive_items wri
1113                              where wri.line_id = wjsi_row.line_id
1114                                and nvl(bor.cfm_routing_flag,2) = 2
1115                                and wri.primary_item_id = wjsi_row.primary_item_id
1116                                and wri.organization_id = wjsi_row.organization_id
1117                                and nvl(bor.alternate_routing_designator,'@@') =
1118                                       nvl(wri.alternate_routing_designator,'@@')
1119                                and bor.organization_id = wri.organization_id
1120                                and bor.assembly_item_id = wri.primary_item_id));
1121     end if;
1122   exception
1123     when no_data_found then
1124       null;
1125     when others then
1126       wip_jsi_utils.record_invalid_column_error('FIRST_UNIT_COMPLETION_DATE');
1127       wip_jsi_utils.abort_request;
1128   end first_unit_completion_date;
1129 
1130   procedure last_unit_completion_date is begin
1131     if(wjsi_row.last_unit_completion_date is null and
1132        wjsi_row.load_type = wip_constants.create_sched) then
1133       select calendar_date
1134          into wjsi_row.last_unit_completion_date
1135          from bom_calendar_dates bcd, mtl_parameters mp
1136          where mp.organization_id = wjsi_row.organization_id
1137            and bcd.exception_set_id = mp.calendar_exception_set_id
1138            and bcd.calendar_code = mp.calendar_code
1139            and seq_num = (select next_seq_num + ceil(wjsi_row.processing_work_days)-1
1140                             from bom_calendar_dates b2
1141                            where b2.calendar_date = trunc(wjsi_row.first_unit_completion_date)
1142                              and b2.calendar_code = mp.calendar_code
1143                              and b2.exception_set_id = bcd.exception_set_id)
1144            and (exists (select 1
1145                           from wip_lines wl
1146                          where wl.line_id = wjsi_row.line_id
1147                            and wl.line_schedule_type = 2))
1148            and (not exists (select 1
1149                               from bom_operational_routings bor,
1150                                    wip_repetitive_items wri
1151                              where wri.line_id = wjsi_row.line_id
1152                                and nvl(bor.cfm_routing_flag,2) = 2
1153                                and wri.primary_item_id = wjsi_row.primary_item_id
1154                                and wri.organization_id = wjsi_row.organization_id
1155                                and nvl(bor.alternate_routing_designator,'@@') =
1156                                       nvl(wri.alternate_routing_designator,'@@')
1157                                and bor.organization_id = wri.organization_id
1158                                and bor.assembly_item_id = wri.primary_item_id));
1159     end if;
1160   exception
1161     when no_data_found then
1162       null;
1163     when others then
1164       wip_jsi_utils.record_invalid_column_error('LAST_UNIT_COMPLETION_DATE');
1165       wip_jsi_utils.abort_request;
1166   end last_unit_completion_date;
1167 
1168   --if routing based line and item w/no routing is used, default the other values. conditions are necessary
1169   --b/c it is an error to provide the combination of dates listed in the if stmt.
1170   procedure schedule_dates is begin
1171     first_unit_start_date;
1172     first_unit_completion_date;
1173     last_unit_start_date;
1174     last_unit_completion_date;
1175   end schedule_dates;
1176 
1177   procedure allow_explosion is begin
1178     if(wjsi_row.load_type = wip_constants.create_sched and
1179        wjsi_row.allow_explosion is not null) then
1180       wip_jsi_utils.record_ignored_column_warning('ALLOW_EXPLOSION');
1181     end if;
1182   end allow_explosion;
1183 
1184   procedure scheduling_method is begin
1185     if(wjsi_row.load_type = wip_constants.create_sched and
1186        wjsi_row.scheduling_method is not null) then
1187       wip_jsi_utils.record_ignored_column_warning('SCHEDULING_METHOD');
1188     elsif(wjsi_row.scheduling_method is null) then
1189       if(wjsi_row.allow_explosion is null or
1190          upper(wjsi_row.allow_explosion) <> 'N') then
1191         wjsi_row.scheduling_method := wip_constants.routing;
1192       else
1193         wjsi_row.scheduling_method := wip_constants.ml_manual;
1194       end if;
1195     end if;
1196   end scheduling_method;
1197 
1198   procedure completion_subinventory is begin
1199     if(wjsi_row.completion_subinventory is null) then
1200       if((wjsi_row.load_type = wip_constants.create_job) or
1201          (wjsi_row.load_type = wip_constants.create_eam_job and --for eam, comp sub in valid for rebuild jobs only
1202           (wjsi_row.rebuild_item_id is not null or wjsi_row.rebuild_item_segments is not null))) then
1203         select bor.completion_subinventory
1204           into wjsi_row.completion_subinventory
1205           from bom_operational_routings bor
1206          where bor.organization_id = wjsi_row.organization_id
1207            and nvl(bor.cfm_routing_flag,2) = 2
1208            and bor.assembly_item_id = wjsi_row.primary_item_id
1209            and nvl(bor.alternate_routing_designator,'@@@') =
1210                      nvl(wjsi_row.alternate_routing_designator,'@@@');
1211       end if;
1212     elsif(wjsi_row.load_type in (wip_constants.create_sched,
1213                                  wip_constants.resched_job,
1214                                  wip_constants.resched_eam_job)) then
1215       wip_jsi_utils.record_ignored_column_warning('COMPLETION_SUBINVENTORY');
1216     end if;
1217   exception
1218     when no_data_found then
1219       null; -- no routing
1220     when others then
1221       wip_jsi_utils.record_invalid_column_error('COMPLETION_SUBINVENTORY');
1222       wip_jsi_utils.abort_request;
1223   end completion_subinventory;
1224 
1225   procedure completion_locator is begin
1226     --note deriving locator id from segments is
1227     -- done in validation package as a part of the wip_locator pkg
1228     if(wjsi_row.completion_locator_id is null and
1229        wjsi_row.completion_locator_segments is null) then
1230       if((wjsi_row.load_type = wip_constants.create_job) or
1231          (wjsi_row.load_type = wip_constants.create_eam_job and --for eam, comp sub in valid for rebuild jobs only
1232           (wjsi_row.rebuild_item_id is not null or wjsi_row.rebuild_item_segments is not null))) then
1233         select bor.completion_locator_id
1234           into wjsi_row.completion_locator_id
1235           from bom_operational_routings bor
1236          where bor.organization_id = wjsi_row.organization_id
1237            and nvl(bor.cfm_routing_flag,2) = 2
1238            and bor.assembly_item_id = wjsi_row.primary_item_id
1239            and nvl(bor.alternate_routing_designator,'@@@') =
1240                nvl(wjsi_row.alternate_routing_designator,'@@@')
1241  /* Fixed for bug#3060266
1242   While defaulting the value for completion locator,completion sub inventory mus
1243 t be checked.Completion locator would be defaulted from
1244 table BOM_OPERATIONAL_ROUTINGS only if the completion sub inventory in
1245 BOM_OPERATIONAL_ROUTINGS is same as completion sub inventory given in
1246 table WIP_JOB_SCHEDULE_INTERFACE otherwise leave it null.
1247  */
1248       and bor.COMPLETION_SUBINVENTORY=wjsi_row.COMPLETION_SUBINVENTORY;
1249       end if;
1250     else
1251       if(wjsi_row.load_type in (wip_constants.create_job,
1252                                 wip_constants.create_ns_job,
1253                                 wip_constants.create_eam_job)) then
1254         if(wjsi_row.completion_locator_id is not null and
1255            wjsi_row.completion_locator_segments is not null) then
1256           wip_jsi_utils.record_ignored_column_warning('COMPLETION_LOCATOR_SEGMENTS');
1257         end if;
1258       else
1259         wip_jsi_utils.record_ignored_column_warning('COMPLETION_LOCATOR_ID');
1260       end if;
1261     end if;
1262   exception
1263     when no_data_found then
1264       null;
1265     when others then
1266       wip_jsi_utils.record_invalid_column_error('COMPLETION_LOCATOR');
1267       wip_jsi_utils.abort_request;
1268   end completion_locator;
1269 
1270   procedure last_updated_by_name is begin
1271     if(wjsi_row.last_updated_by is null) then
1272       select user_id
1273         into wjsi_row.last_updated_by
1274         from fnd_user
1275        where user_name = wjsi_row.last_updated_by_name;
1276     elsif(wjsi_row.last_updated_by_name is not null) then --both name + id columns are populated
1277       WIP_JSI_Utils.record_ignored_column_warning('LAST_UPDATED_BY_NAME');
1278     end if;
1279   exception
1280     when others then
1281       wip_jsi_utils.record_invalid_column_error('LAST_UPDATED_BY_NAME');
1282       wip_jsi_utils.abort_request;
1283   end last_updated_by_name;
1284 
1285   procedure created_by_name is begin
1286     if(wjsi_row.created_by is null) then
1287       select user_id
1288         into wjsi_row.created_by
1289         from fnd_user
1290        where user_name = wjsi_row.created_by_name;
1291     elsif(wjsi_row.created_by_name is not null) then --both name + id columns are populated
1292       WIP_JSI_Utils.record_ignored_column_warning('CREATED_BY_NAME');
1293     end if;
1294   exception
1295     when others then
1296       wip_jsi_utils.record_invalid_column_error('CREATED_BY_NAME');
1297       wip_jsi_utils.abort_request;
1298   end created_by_name;
1299 
1300   procedure priority is begin
1301     if(wjsi_row.load_type = wip_constants.create_sched and
1302        wjsi_row.priority is not null) then
1303       wip_jsi_utils.record_ignored_column_warning('PRIORITY');
1304     end if;
1305   end priority;
1306 
1307   --due_date/requested_start_date logic is:
1308   --if both are null and doing a job creation then first try to default due_date.
1309   --if both are still null then try to default requested_start_date
1310   procedure due_date is begin
1311     if(wjsi_row.due_date is null) then
1312       if(wjsi_row.requested_start_date is null and
1313          (wjsi_row.load_type in (wip_constants.create_job, wip_constants.create_ns_job) OR
1314           (wjsi_row.load_type = wip_constants.create_eam_job and wjsi_row.pm_schedule_id is not null))) then
1315         wjsi_row.due_date := wjsi_row.last_unit_completion_date;
1316       end if;
1317     elsif(wjsi_row.load_type = wip_constants.create_sched) then
1318       wip_jsi_utils.record_ignored_column_warning('DUE_DATE');
1319     end if;
1320   end due_date;
1321 
1322   procedure date_released is begin
1323     if(wjsi_row.status_type = wip_constants.unreleased and
1324        wjsi_row.date_released is not null) then
1325       wip_jsi_utils.record_ignored_column_warning('DATE_RELEASED');
1326     end if;
1327   end date_released;
1328 
1329   procedure requested_start_date is begin
1330     if(wjsi_row.requested_start_date is null) then
1331       if(wjsi_row.due_date is null and
1332          (wjsi_row.load_type in (wip_constants.create_job, wip_constants.create_ns_job) OR
1333           (wjsi_row.load_type = wip_constants.create_eam_job and wjsi_row.pm_schedule_id is not null))) then
1334         wjsi_row.requested_start_date := wjsi_row.first_unit_start_date;
1335       end if;
1336     elsif(wjsi_row.load_type = wip_constants.create_sched) then
1337       wip_jsi_utils.record_ignored_column_warning('REQUESTED_START_DATE');
1338     end if;
1339   end requested_start_date;
1340 
1341   procedure header_id is begin
1342     if(wjsi_row.load_type = wip_constants.create_sched and
1343        wjsi_row.header_id is not null) then
1344       wip_jsi_utils.record_ignored_column_warning('HEADER_ID');
1345     end if;
1346   end header_id;
1347 
1348   procedure end_item_unit_number is begin
1349     if ((wjsi_row.load_type in (wip_constants.create_sched, wip_constants.resched_job,
1350                                 wip_constants.resched_eam_job)) and
1351         (wjsi_row.end_item_unit_number is not null)) then
1352       wip_jsi_utils.record_ignored_column_warning('END_ITEM_UNIT_NUMBER');
1353     end if;
1354   end end_item_unit_number;
1355 
1356   procedure asset_number is begin
1357     if(wjsi_row.load_type in (wip_constants.create_job, wip_constants.create_sched,
1358                               wip_constants.resched_job, wip_constants.resched_eam_job,
1359                               wip_constants.create_ns_job) and
1360        wjsi_row.asset_number is not null) then
1361        wip_jsi_utils.record_ignored_column_warning('ASSET_NUMBER');
1362     end if;
1363   end asset_number;
1364 
1365   procedure asset_group is begin
1366     if(wjsi_row.asset_group_id is not null and
1367        wjsi_row.load_type <> wip_constants.create_eam_job) then
1368       wip_jsi_utils.record_ignored_column_warning('ASSET_GROUP_ID');
1369     end if;
1370 
1371     if(wjsi_row.asset_group_segments is not null and
1372        wjsi_row.load_type <> wip_constants.create_eam_job) then
1373       wip_jsi_utils.record_ignored_column_warning('ASSET_GROUP_SEGMENTS');
1374     elsif(wjsi_row.asset_group_segments is not null) then
1375       if(wjsi_row.asset_group_id is null) then
1376         select inventory_item_id
1377           into wjsi_row.asset_group_id
1378           from mtl_system_items_kfv
1379          where concatenated_segments = wjsi_row.asset_group_segments
1380            and organization_id = wjsi_row.organization_id;
1381       else
1382         wip_jsi_utils.record_ignored_column_warning('ASSET_GROUP_SEGMENTS');
1383       end if;
1384     end if;
1385   exception
1386     when others then
1387       wip_jsi_utils.record_invalid_column_error('ASSET_GROUP_SEGMENTS');
1388       wip_jsi_utils.abort_request;
1389   end asset_group;
1390 
1391   procedure parent_job_name is begin
1392     if(wjsi_row.load_type <>  wip_constants.create_eam_job and
1393        wjsi_row.parent_job_name is not null) then
1394       wip_jsi_utils.record_ignored_column_warning('PARENT_JOB_NAME');
1395     elsif(wjsi_row.parent_job_name is not null) then
1396       if(wjsi_row.parent_wip_entity_id is null) then
1397         select wip_entity_id
1398           into wjsi_row.parent_wip_entity_id
1399           from wip_entities
1400          where wip_entity_name = wjsi_row.parent_job_name
1401            and organization_id = wjsi_row.organization_id;
1402       else
1403         wip_jsi_utils.record_ignored_column_warning('PARENT_JOB_NAME');
1404       end if;
1405     end if;
1406   exception
1407     when others then
1408       wip_jsi_utils.record_invalid_column_error('PARENT_JOB_NAME');
1409       wip_jsi_utils.abort_request;
1410   end parent_job_name;
1411 
1412   procedure parent_wip_entity_id is begin
1413     if(wjsi_row.load_type <> wip_constants.create_eam_job and
1414        wjsi_row.parent_wip_entity_id is not null) then
1415       wip_jsi_utils.record_ignored_column_warning('PARENT_WIP_ENTITY_ID');
1416     end if;
1417   end parent_wip_entity_id;
1418 
1419   procedure rebuild_item is begin
1420   if(wjsi_row.load_type <> wip_constants.create_eam_job) then
1421     if(wjsi_row.rebuild_item_segments is not null) then
1422       wip_jsi_utils.record_ignored_column_warning('REBUILD_ITEM_SEGMENTS');
1423     end if;
1424     if(wjsi_row.rebuild_item_id is not null) then
1425       wip_jsi_utils.record_ignored_column_warning('REBUILD_ITEM_ID');
1426     end if;
1427 
1428   elsif(wjsi_row.rebuild_item_segments is not null) then
1429     if(wjsi_row.rebuild_item_id is null) then
1430       select inventory_item_id
1431         into wjsi_row.rebuild_item_id
1432         from mtl_system_items_kfv
1433         where concatenated_segments = wjsi_row.rebuild_item_segments
1434          and organization_id = wjsi_row.organization_id;
1435     else
1436       wip_jsi_utils.record_ignored_column_warning('REBUILD_ITEM_SEGMENTS');
1437     end if;
1438   end if;
1439   exception
1440     when others then
1441       wip_jsi_utils.record_invalid_column_error('REBUILD_ITEM_SEGMENTS');
1442       wip_jsi_utils.abort_request;
1443   end rebuild_item;
1444 
1445   procedure rebuild_serial_number is begin
1446     if(wjsi_row.load_type <> wip_constants.create_eam_job and
1447        wjsi_row.rebuild_serial_number is not null) then
1448       wip_jsi_utils.record_ignored_column_warning('REBUILD_SERIAL_NUMBER');
1449     end if;
1450   end rebuild_serial_number;
1451 
1452   procedure manual_rebuild_flag is begin
1453     if(wjsi_row.load_type <> wip_constants.create_eam_job and
1454        wjsi_row.manual_rebuild_flag is not null) then
1455       wip_jsi_utils.record_ignored_column_warning('MANUAL_REBUILD_FLAG');
1456     end if;
1457   end manual_rebuild_flag;
1458 
1459   procedure owning_department is
1460     l_returnMsg VARCHAR2(200);
1461     l_msgCount NUMBER;
1462     l_errMsg VARCHAR2(30);
1463   begin
1464     if(wjsi_row.load_type not in (wip_constants.create_eam_job, wip_constants.resched_eam_job)) then
1465       if(wjsi_row.owning_department_code is not null) then
1466         wip_jsi_utils.record_ignored_column_warning('OWNING_DEPARTMENT_CODE');
1467       end if;
1468       if(wjsi_row.owning_department is not null) then
1469         wip_jsi_utils.record_ignored_column_warning('OWNING_DEPARTMENT');
1470       end if;
1471     else
1472       if(wjsi_row.owning_department is null and wjsi_row.owning_department_code is not null) then
1473         select department_id
1474           into wjsi_row.owning_department
1475           from bom_departments
1476          where department_code = wjsi_row.owning_department_code
1477            and organization_id = wjsi_row.organization_id;
1478       elsif(wjsi_row.owning_department is null and wjsi_row.owning_department_code is null) then
1479         wip_eamworkorder_pvt.get_eam_owning_dept_default(p_api_version             => 1.0,
1480                                                          p_init_msg_list           => null,
1481                                                          p_commit                  => null,
1482                                                          p_validation_level        => null,
1483                                                          p_primary_item_id         => wjsi_row.primary_item_id,
1484                                                          p_organization_id         => wjsi_row.organization_id,
1485                                                          p_maintenance_object_type => wjsi_row.maintenance_object_type,
1486                                                          p_maintenance_object_id   => wjsi_row.maintenance_object_id,
1487                                                          p_rebuild_item_id         => wjsi_row.rebuild_item_id,
1488                                                          x_owning_department_id    => wjsi_row.owning_department,
1489                                                          x_return_status           => l_returnMsg,
1490                                                          x_msg_count               => l_msgCount,
1491                                                          x_msg_data                => l_errMsg);
1492         if (l_errMsg is not null) then
1493           fnd_message.set_name('WIP', 'OWNING_DEPARTMENT');
1494           fnd_message.set_token('owning_department', wjsi_row.owning_department, false);
1495           wip_jsi_utils.record_current_error;
1496         end if ;
1497       elsif(wjsi_row.owning_department_code is not null) then
1498         WIP_JSI_Utils.record_ignored_column_warning('OWNING_DEPARTMENT_CODE');
1499       end if;
1500     end if;
1501   exception
1502     when others then
1503       wip_jsi_utils.record_invalid_column_error('OWNING_DEPARTMENT_CODE');
1504       wip_jsi_utils.abort_request;
1505   end owning_department;
1506 
1507   procedure notification_required is
1508     l_returnMsg VARCHAR2(200);
1509     l_msgCount NUMBER;
1510     l_errMsg VARCHAR2(30);
1511   begin
1512     if(wjsi_row.load_type not in (wip_constants.create_eam_job, wip_constants.resched_eam_job) and
1513        wjsi_row.notification_required is not null) then
1514       wip_jsi_utils.record_ignored_column_warning('NOTIFICATION_REQUIRED');
1515     elsif(wjsi_row.load_type in (wip_constants.create_eam_job, wip_constants.resched_eam_job) and
1516           wjsi_row.notification_required is null) then
1517       wip_eamworkorder_pvt.get_eam_notification_default(p_api_version             => 1.0,
1518                                                         p_init_msg_list           => null,
1519                                                         p_commit                  => null,
1520                                                         p_validation_level        => null,
1521                                                         p_primary_item_id         => wjsi_row.primary_item_id,
1522                                                         p_organization_id         => wjsi_row.organization_id,
1523                                                         p_maintenance_object_type => wjsi_row.maintenance_object_type,
1524                                                         p_maintenance_object_id   => wjsi_row.maintenance_object_id,
1525                                                         p_rebuild_item_id         => wjsi_row.rebuild_item_id,
1526                                                         x_notification_flag       => wjsi_row.notification_required,
1527                                                         x_return_status           => l_returnMsg,
1528                                                         x_msg_count               => l_msgCount,
1529                                                         x_msg_data                => l_errMsg);
1530       if (l_errMsg is not null) then
1531         fnd_message.set_name('WIP', 'NOTIFICATION_REQUIRED');
1532         fnd_message.set_token('notification_required', wjsi_row.notification_required, false);
1533         wip_jsi_utils.record_current_error;
1534       end if ;
1535     end if;
1536 
1537   exception
1538     when others then
1539       wip_jsi_utils.record_invalid_column_error('NOTIFICATION_REQUIRED');
1540       wip_jsi_utils.abort_request;
1541   end notification_required;
1542 
1543   procedure shutdown_type is
1544     l_returnMsg VARCHAR2(200);
1545     l_msgCount NUMBER;
1546     l_errMsg VARCHAR2(30);
1547   begin
1548     if(wjsi_row.load_type not in (wip_constants.create_eam_job, wip_constants.resched_eam_job) and
1549        wjsi_row.shutdown_type is not null) then
1550       wip_jsi_utils.record_ignored_column_warning('SHUTDOWN_TYPE');
1551     elsif(wjsi_row.load_type in (wip_constants.create_eam_job, wip_constants.resched_eam_job) and
1552           wjsi_row.shutdown_type is null) then
1553       wip_eamworkorder_pvt.get_eam_shutdown_default(p_api_version             => 1.0,
1554                                                     p_init_msg_list           => null,
1555                                                     p_commit                  => null,
1556                                                     p_validation_level        => null,
1557                                                     p_primary_item_id         => wjsi_row.primary_item_id,
1558                                                     p_organization_id         => wjsi_row.organization_id,
1559                                                     p_maintenance_object_type => wjsi_row.maintenance_object_type,
1560                                                     p_maintenance_object_id   => wjsi_row.maintenance_object_id,
1561                                                     p_rebuild_item_id         => wjsi_row.rebuild_item_id,
1562                                                     x_shutdown_type_code      => wjsi_row.shutdown_type,
1563                                                     x_return_status           => l_returnMsg,
1564                                                     x_msg_count               => l_msgCount,
1565                                                     x_msg_data                => l_errMsg);
1566       if (l_errMsg is not null) then
1567         fnd_message.set_name('WIP', 'SHUTDOWN_TYPE');
1568         fnd_message.set_token('shutdown_type', wjsi_row.shutdown_type, false);
1569         wip_jsi_utils.record_current_error;
1570       end if ;
1571     end if;
1572 
1573   exception
1574     when others then
1575       wip_jsi_utils.record_invalid_column_error('SHUTDOWN_TYPE');
1576       wip_jsi_utils.abort_request;
1577   end shutdown_type;
1578 
1579   procedure work_order_type is begin
1580     if(wjsi_row.load_type not in (wip_constants.create_eam_job, wip_constants.resched_eam_job) and
1581        wjsi_row.work_order_type is not null) then
1582       wip_jsi_utils.record_ignored_column_warning('WORK_ORDER_TYPE');
1583     end if;
1584   end work_order_type;
1585 
1586   procedure tagout_required is
1587     l_returnMsg VARCHAR2(200);
1588     l_msgCount NUMBER;
1589     l_errMsg VARCHAR2(30);
1590   begin
1591     if(wjsi_row.load_type not in (wip_constants.create_eam_job, wip_constants.resched_eam_job) and
1592        wjsi_row.tagout_required is not null) then
1593       wip_jsi_utils.record_ignored_column_warning('TAGOUT_REQUIRED');
1594     elsif(wjsi_row.load_type in (wip_constants.create_eam_job, wip_constants.resched_eam_job) and
1595           wjsi_row.tagout_required is null) then
1596       wip_eamworkorder_pvt.get_eam_tagout_default(p_api_version             => 1.0,
1597                                                   p_init_msg_list           => null,
1598                                                   p_commit                  => null,
1599                                                   p_validation_level        => null,
1600                                                   p_primary_item_id         => wjsi_row.primary_item_id,
1601                                                   p_organization_id         => wjsi_row.organization_id,
1602                                                   p_maintenance_object_type => wjsi_row.maintenance_object_type,
1603                                                   p_maintenance_object_id   => wjsi_row.maintenance_object_id,
1604                                                   p_rebuild_item_id         => wjsi_row.rebuild_item_id,
1605                                                   x_tagout_required         => wjsi_row.tagout_required,
1606                                                   x_return_status           => l_returnMsg,
1607                                                   x_msg_count               => l_msgCount,
1608                                                   x_msg_data                => l_errMsg);
1609       if (l_errMsg is not null) then
1610         fnd_message.set_name('WIP', 'TAGOUT_REQUIRED');
1611         fnd_message.set_token('tagout_required', wjsi_row.tagout_required, false);
1612         wip_jsi_utils.record_current_error;
1613       end if ;
1614     end if;
1615 
1616   exception
1617     when others then
1618       wip_jsi_utils.record_invalid_column_error('TAGOUT_REQUIRED');
1619       wip_jsi_utils.abort_request;
1620   end tagout_required;
1621 
1622   procedure plan_maintenance is begin
1623     if(wjsi_row.load_type not in (wip_constants.create_eam_job, wip_constants.resched_eam_job) and
1624        wjsi_row.plan_maintenance is not null) then
1625       wip_jsi_utils.record_ignored_column_warning('PLAN_MAINTENANCE');
1626     elsif(wjsi_row.pm_schedule_id is not null) then
1627       wjsi_row.plan_maintenance := 'Y';
1628     end if;
1629   end plan_maintenance;
1630 
1631   procedure activity_type is
1632     l_returnMsg VARCHAR2(200);
1633     l_msgCount NUMBER;
1634     l_errMsg VARCHAR2(30);
1635   begin
1636     if(wjsi_row.load_type not in (wip_constants.create_eam_job, wip_constants.resched_eam_job) and
1637        wjsi_row.activity_type is not null) then
1638       wip_jsi_utils.record_ignored_column_warning('ACTIVITY_TYPE');
1639     elsif(wjsi_row.load_type in (wip_constants.create_eam_job, wip_constants.resched_eam_job) and
1640           wjsi_row.activity_type is null) then
1641       wip_eamworkorder_pvt.get_eam_act_type_default(p_api_version             => 1.0,
1642                                                     p_init_msg_list           => null,
1643                                                     p_commit                  => null,
1644                                                     p_validation_level        => null,
1645                                                     p_primary_item_id         => wjsi_row.primary_item_id,
1646                                                     p_organization_id         => wjsi_row.organization_id,
1647                                                     p_maintenance_object_type => wjsi_row.maintenance_object_type,
1648                                                     p_maintenance_object_id   => wjsi_row.maintenance_object_id,
1649                                                     p_rebuild_item_id         => wjsi_row.rebuild_item_id,
1650                                                     x_activity_type_code      => wjsi_row.activity_type,
1651                                                     x_return_status           => l_returnMsg,
1652                                                     x_msg_count               => l_msgCount,
1653                                                     x_msg_data                => l_errMsg);
1654       if (l_errMsg is not null) then
1655         fnd_message.set_name('WIP', 'ACTIVITY_TYPE');
1656         fnd_message.set_token('activity_type', wjsi_row.activity_type, false);
1657         wip_jsi_utils.record_current_error;
1658       end if;
1659     end if;
1660 
1661   exception
1662     when others then
1663       wip_jsi_utils.record_invalid_column_error('ACTIVITY_TYPE');
1664       wip_jsi_utils.abort_request;
1665   end activity_type;
1666 
1667   procedure activity_cause is
1668     l_returnMsg VARCHAR2(200);
1669     l_msgCount NUMBER;
1670     l_errMsg VARCHAR2(30);
1671   begin
1672     if(wjsi_row.load_type not in (wip_constants.create_eam_job, wip_constants.resched_eam_job) and
1673        wjsi_row.activity_cause is not null) then
1674       wip_jsi_utils.record_ignored_column_warning('ACTIVITY_CAUSE');
1675     elsif(wjsi_row.load_type in (wip_constants.create_eam_job, wip_constants.resched_eam_job) and
1676           wjsi_row.activity_cause is null) then
1677       wip_eamworkorder_pvt.get_eam_act_cause_default(p_api_version             => 1.0,
1678                                                      p_init_msg_list           => null,
1679                                                      p_commit                  => null,
1680                                                      p_validation_level        => null,
1681                                                      p_primary_item_id         => wjsi_row.primary_item_id,
1682                                                      p_organization_id         => wjsi_row.organization_id,
1683                                                      p_maintenance_object_type => wjsi_row.maintenance_object_type,
1684                                                      p_maintenance_object_id   => wjsi_row.maintenance_object_id,
1685                                                      p_rebuild_item_id         => wjsi_row.rebuild_item_id,
1686                                                      x_activity_cause_code     => wjsi_row.activity_cause,
1687                                                      x_return_status           => l_returnMsg,
1688                                                      x_msg_count               => l_msgCount,
1689                                                      x_msg_data                => l_errMsg);
1690       if (l_errMsg is not null) then
1691         fnd_message.set_name('WIP', 'ACTIVITY_CAUSE');
1692         fnd_message.set_token('activity_cause', wjsi_row.activity_cause, false);
1693         wip_jsi_utils.record_current_error;
1694       end if;
1695     end if;
1696 
1697   exception
1698     when others then
1699       wip_jsi_utils.record_invalid_column_error('ACTIVITY_CAUSE');
1700       wip_jsi_utils.abort_request;
1701   end activity_cause;
1702 
1703   procedure serialization_start_op is
1704   begin
1705     if(wjsi_row.load_type not in (wip_constants.create_job, wip_constants.create_ns_job, wip_constants.resched_job) and
1706        wjsi_row.serialization_start_op is not null) then
1707       wip_jsi_utils.record_ignored_column_warning('SERIALIZATION_START_OP');
1708     end if;
1709   end serialization_start_op;
1710 
1711   procedure material_issue_by_mo is
1712   l_wms_enabled_flag VARCHAR(1);
1713   begin
1714     if (wjsi_row.load_type <> wip_constants.create_eam_job and
1715       (wjsi_row.load_type <> wip_constants.resched_eam_job or wjsi_row.status_type <> wip_constants.draft)
1716       and wjsi_row.material_issue_by_mo is not null) then
1717 
1718          wip_jsi_utils.record_ignored_column_warning('MATERIAL_ISSUE_BY_MO');
1719 
1720          select material_issue_by_mo
1721            into   wjsi_row.material_issue_by_mo
1722          from wip_discrete_jobs
1723          where wip_entity_id = wjsi_row.wip_entity_id
1724            and organization_id = wjsi_row.organization_id;
1725 
1726     elsif (wjsi_row.load_type in (wip_constants.create_eam_job, wip_constants.resched_eam_job)) then
1727           select wms_enabled_flag
1728                 into l_wms_enabled_flag
1729           from mtl_parameters
1730           where organization_id = wjsi_row.organization_id;
1731 
1732           if (upper(l_wms_enabled_flag) = 'Y') then
1733               wjsi_row.material_issue_by_mo := 'N';
1734           elsif (wjsi_row.material_issue_by_mo is null) then
1735             select material_issue_by_mo
1736               into wjsi_row.material_issue_by_mo
1737             from WIP_EAM_PARAMETERS
1738             where organization_id = wjsi_row.organization_id;
1739           end if;
1740 
1741     end if;
1742   end material_issue_by_mo;
1743 
1744   procedure maintenance_object_type is
1745   l_serial_number_control_code NUMBER;
1746   begin
1747     if(wjsi_row.load_type not in (wip_constants.create_eam_job, wip_constants.resched_eam_job) and
1748        wjsi_row.maintenance_object_type is not null) then
1749       wip_jsi_utils.record_ignored_column_warning('MAINTENANCE_OBJECT_TYPE');
1750     elsif(wjsi_row.load_type in (wip_constants.create_eam_job, wip_constants.resched_eam_job) and
1751           wjsi_row.maintenance_object_type is null) then
1752       if(wjsi_row.rebuild_item_id is null) then
1753         wjsi_row.maintenance_object_type := 1; --MSN
1754       else
1755         select serial_number_control_code
1756           into l_serial_number_control_code
1757           from mtl_system_items
1758          where organization_id = wjsi_row.organization_id
1759            and inventory_item_id = wjsi_row.rebuild_item_id;
1760 
1761         if(l_serial_number_control_code in (2, 5, 6)) then
1762           wjsi_row.maintenance_object_type := 1; --MSN
1763         else
1764           wjsi_row.maintenance_object_type := 2; --MSI
1765         end if;
1766 
1767       end if;
1768     end if;
1769 
1770   exception
1771     when no_data_found then
1772       wip_jsi_utils.record_invalid_column_error('MAINTENANCE_OBJECT_TYPE');
1773       wip_jsi_utils.abort_request;
1774     when others then
1775       wip_jsi_utils.record_invalid_column_error('MAINTENANCE_OBJECT_TYPE');
1776       wip_jsi_utils.abort_request;
1777   end maintenance_object_type;
1778 
1779   procedure maintenance_object_id is
1780   begin
1781     if(wjsi_row.load_type not in (wip_constants.create_eam_job, wip_constants.resched_eam_job) and
1782        wjsi_row.maintenance_object_id is not null) then
1783       wip_jsi_utils.record_ignored_column_warning('MAINTENANCE_OBJECT_ID');
1784     elsif(wjsi_row.load_type in (wip_constants.create_eam_job, wip_constants.resched_eam_job) and
1785           wjsi_row.maintenance_object_id is null) then
1786       if(wjsi_row.maintenance_object_type = 1) then
1787         if(wjsi_row.rebuild_item_id is null) then
1788           select gen_object_id
1789             into wjsi_row.maintenance_object_id
1790             from mtl_serial_numbers
1791            where current_organization_id = wjsi_row.organization_id
1792              and inventory_item_id = wjsi_row.asset_group_id
1793              and serial_number = wjsi_row.asset_number;
1794         elsif(wjsi_row.rebuild_serial_number is not null) then
1795           select gen_object_id
1796             into wjsi_row.maintenance_object_id
1797             from mtl_serial_numbers
1798            where current_organization_id = wjsi_row.organization_id
1799              and inventory_item_id = wjsi_row.rebuild_item_id
1800              and serial_number = wjsi_row.rebuild_serial_number;
1801         end if;
1802       elsif(wjsi_row.maintenance_object_type = 2) then
1803         wjsi_row.maintenance_object_id := wjsi_row.rebuild_item_id;
1804       end if;
1805     end if;
1806 
1807   exception
1808     when no_data_found then
1809       wip_jsi_utils.record_invalid_column_error('MAINTENANCE_OBJECT_ID');
1810       wip_jsi_utils.abort_request;
1811     when others then
1812       wip_jsi_utils.record_invalid_column_error('MAINTENANCE_OBJECT_ID');
1813       wip_jsi_utils.abort_request;
1814   end maintenance_object_id;
1815 
1816   procedure maintenance_object_source is begin
1817     if(wjsi_row.load_type not in (wip_constants.create_eam_job, wip_constants.resched_eam_job) and
1818        wjsi_row.maintenance_object_source is not null) then
1819       wip_jsi_utils.record_ignored_column_warning('MAITENANCE_OBJECT_SOURCE');
1820     elsif(wjsi_row.load_type in (wip_constants.create_eam_job, wip_constants.resched_eam_job) and
1821           wjsi_row.maintenance_object_source is null) then
1822       wjsi_row.maintenance_object_source := 1; --EAM
1823     end if;
1824 
1825   exception
1826     when others then
1827       wip_jsi_utils.record_invalid_column_error('MAITENANCE_OBJECT_SOURCE');
1828       wip_jsi_utils.abort_request;
1829   end maintenance_object_source;
1830 
1831   procedure activity_source is
1832     l_returnMsg VARCHAR2(200);
1833     l_msgCount NUMBER;
1834     l_errMsg VARCHAR2(30);
1835   begin
1836     if(wjsi_row.load_type not in (wip_constants.create_eam_job, wip_constants.resched_eam_job) and
1837        wjsi_row.activity_source is not null) then
1838       wip_jsi_utils.record_ignored_column_warning('ACTIVITY_SOURCE');
1839     elsif(wjsi_row.load_type in (wip_constants.create_eam_job, wip_constants.resched_eam_job) and
1840           wjsi_row.activity_source is null) then
1841       wip_eamworkorder_pvt.get_eam_act_source_default(p_api_version             => 1.0,
1842                                                       p_init_msg_list           => null,
1843                                                       p_commit                  => null,
1844                                                       p_validation_level        => null,
1845                                                       p_primary_item_id         => wjsi_row.primary_item_id,
1846                                                       p_organization_id         => wjsi_row.organization_id,
1847                                                       p_maintenance_object_type => wjsi_row.maintenance_object_type,
1848                                                       p_maintenance_object_id   => wjsi_row.maintenance_object_id,
1849                                                       p_rebuild_item_id         => wjsi_row.rebuild_item_id,
1850                                                       x_activity_source_code    => wjsi_row.activity_source,
1851                                                       x_return_status           => l_returnMsg,
1852                                                       x_msg_count               => l_msgCount,
1853                                                       x_msg_data                => l_errMsg);
1854       if (l_errMsg is not null) then
1855         fnd_message.set_name('WIP', 'ACTIVITY_SOURCE');
1856         fnd_message.set_token('activity_source', wjsi_row.activity_source, false);
1857         wip_jsi_utils.record_current_error;
1858       end if;
1859     end if;
1860 
1861   exception
1862     when others then
1863       wip_jsi_utils.record_invalid_column_error('ACTIVITY_SOURCE');
1864       wip_jsi_utils.abort_request;
1865   end activity_source;
1866 
1867   procedure pm_schedule_id is begin
1868     if(wjsi_row.load_type not in (wip_constants.create_eam_job, wip_constants.resched_eam_job) and
1869        wjsi_row.pm_schedule_id is not null) then
1870       wip_jsi_utils.record_ignored_column_warning('PM_SCHEDULE_ID');
1871     end if;
1872   end pm_schedule_id;
1873 
1874 end wip_jsi_defaulter;