DBA Data[Home] [Help]

PACKAGE BODY: APPS.WIP_DEFAULT_SHOPFLOORMOVE

Source


1 PACKAGE BODY WIP_Default_Shopfloormove AS
2 /* $Header: WIPDSFMB.pls 120.14.12020000.2 2013/04/13 00:57:49 ankohli ship $ */
3 
4 --  Global constant holding the package name
5 
6 G_PKG_NAME                    CONSTANT VARCHAR2(30) := 'WIP_Default_Shopfloormove';
7 
8 --  Package global used within the package.
9 
10 g_ShopFloorMove_rec           WIP_Transaction_PUB.Shopfloormove_Rec_Type;
11 g_OSP_rec                     WIP_Transaction_PUB.Res_Rec_Type;
12 g_Wip_Entities_rec            WIP_Work_Order_PUB.Wip_Entities_Rec_Type;
13 g_osp_mov_details             WIP_Transaction_PUB.OSP_Move_Details_Type;
14 
15 --  Get functions.
16 
17 PROCEDURE get_we_attr
18 IS
19      l_Wip_Entities_rec WIP_Work_Order_PUB.Wip_Entities_Rec_Type :=
20                         WIP_Work_Order_PUB.G_MISS_WIP_ENTITIES_REC;
21 BEGIN
22 
23    IF g_ShopFloorMove_rec.wip_entity_id IS NOT NULL THEN
24 
25       l_Wip_Entities_rec := WIP_Wip_Entities_Util.Query_Row(g_ShopFloorMove_rec.wip_entity_id);
26       IF g_ShopFloorMove_rec.wip_entity_name IS NULL THEN
27          g_Wip_Entities_rec.wip_entity_name := l_Wip_Entities_rec.wip_entity_name;
28       END IF;
29       IF g_ShopFloorMove_rec.primary_item_id IS NULL THEN
30          g_Wip_Entities_rec.primary_item_id := l_Wip_Entities_rec.primary_item_id;
31       END IF;
32       IF g_ShopFloorMove_rec.entity_type IS NULL THEN
33          g_Wip_Entities_rec.entity_type := l_Wip_Entities_rec.entity_type;
34       END IF;
35 
36    END IF;
37 
38 EXCEPTION
39    WHEN OTHERS THEN
40      fnd_msg_pub.add_exc_msg('WIP_Default_Shopfloormove','get_we_attr');
41 END get_we_attr;
42 
43 PROCEDURE validate_default_sub_loc (p_wip_entity_id     IN      NUMBER,
44                                 p_org_id                IN      NUMBER,
45                                 p_line_id               IN      NUMBER,
46                                 x_valid_ez_complete     OUT NOCOPY     NUMBER) IS
47 BEGIN
48 
49         /*  you must have a default completion subinventory/locator
50             for move-completions and return-moves
51         */
52 
53         select count(*) into x_valid_ez_complete
54         from WIP_ENTITIES WE
55         where we.wip_entity_id = p_wip_entity_id
56         and we.organization_id = p_org_id
57         and (((we.entity_type = WIP_CONSTANTS.DISCRETE)
58                 and not exists (select 'X'
59                             from WIP_DISCRETE_JOBS DJ
60                             where DJ.WIP_ENTITY_ID = p_wip_entity_id
61                             and DJ.ORGANIZATION_ID = p_org_id
62                             and DJ.COMPLETION_SUBINVENTORY IS NOT NULL))
63                 or (we.entity_type = WIP_CONSTANTS.REPETITIVE)
64                     and not exists (select 'X' from WIP_REPETITIVE_ITEMS WRI
65                                     where WRI.WIP_ENTITY_ID = p_wip_entity_id
66                                     and WRI.ORGANIZATION_ID = p_org_id
67                                     and WRI.LINE_ID = p_line_id
68                                     and WRI.COMPLETION_SUBINVENTORY IS NOT NULL));
69 
70         exception
71         when others then
72                 fnd_msg_pub.add_exc_msg('WIP_Default_Shopfloormove','validate_default_sub_loc');
73 
74 END validate_default_sub_loc;
75 
76 PROCEDURE validate_lot_control (p_wip_entity_id         IN      NUMBER,
77                                 p_org_id                IN      NUMBER,
78                                 p_line_id               IN      NUMBER,
79                                 x_valid_ez_complete     OUT NOCOPY     NUMBER) IS
80 BEGIN
81 
82 
83         -- If it's discrete, and does not have a default lot then can't move_complete/return
84         -- if it's repetitive then can't move_complete/return_move
85 
86         select count(*) into x_valid_ez_complete
87         from wip_entities we, mtl_system_items msi
88         where we.wip_entity_id = p_wip_entity_id
89         and we.organization_id = p_org_id
90         and msi.inventory_item_id = we.primary_item_id
91         and msi.organization_id = we.organization_id
92         and msi.lot_control_code = WIP_CONSTANTS.LOT
93         and (  ( we.entity_type = WIP_CONSTANTS.DISCRETE
94                  and exists (select 'X'
95                             from wip_discrete_jobs wdj
96                             where wdj.wip_entity_id = we.wip_entity_id
97                             and wdj.organization_id = we.organization_id
98                             and wdj.lot_number is null))
99             or (we.entity_type = WIP_CONSTANTS.REPETITIVE)  );
100 
101         exception
102         when others then
103                 fnd_msg_pub.add_exc_msg('WIP_Default_Shopfloormove','validate_lot_control');
104 END validate_lot_control;
105 
106 PROCEDURE validate_serial_control(p_wip_entity_id       IN      NUMBER,
107                                 p_org_id                IN      NUMBER,
108                                 x_valid_ez_complete     OUT NOCOPY     NUMBER) IS
109 BEGIN
110 
111         select count(*) into x_valid_ez_complete
112         from MTL_SYSTEM_ITEMS msi, WIP_ENTITIES we
113         where we.organization_id = p_org_id
114         and we.wip_entity_id = p_wip_entity_id
115         and msi.inventory_item_id = we.primary_item_id
116         and msi.organization_id = we.organization_id
117         and msi.serial_number_control_code in (2,5);
118 
119         exception
120         when others then
121              fnd_msg_pub.add_exc_msg('WIP_Default_Shopfloormove','validate_serial_control');
122 END validate_serial_control;
123 
124 PROCEDURE validate_shop_floor_status (p_wip_entity_id   IN      NUMBER,
125                                 p_org_id                IN      NUMBER,
126                                 p_line_id               IN      NUMBER,
127                                 p_rep_sched_id          IN      NUMBER,
128                                 x_valid_ez_complete     OUT NOCOPY     NUMBER) IS
129 BEGIN
130 
131 
132         select count(*) into x_valid_ez_complete
133         from WIP_SHOP_FLOOR_STATUSES wsfs, WIP_OPERATIONS wo,
134                 WIP_SHOP_FLOOR_STATUS_CODES wsfsc
135         where wsfs.wip_entity_id = p_wip_entity_id
136         and wsfs.organization_id = p_org_id
137         and nvl (wsfs.line_id, -1) = nvl (p_line_id, -1)
138         and wo.wip_entity_id = wsfs.wip_entity_id
139         and nvl (wo.repetitive_schedule_id, -1) = nvl (p_rep_sched_id, -1)
140         and wo.organization_id = wsfs.organization_id
141         and wo.next_operation_seq_num is null
142         and wo.operation_seq_num = wsfs.operation_seq_num
143         and wsfs.intraoperation_step_type=WIP_CONSTANTS.TOMOVE
144         and wsfsc.shop_floor_status_code = wsfs.shop_floor_status_code
145         and wsfsc.organization_id = wsfs.organization_id
146         and wsfsc.status_move_flag = 2
147         and nvl(wsfsc.disable_date, sysdate + 1) > sysdate;
148 
149         exception
150         when others then
151                 fnd_msg_pub.add_exc_msg('WIP_Default_Shopfloormove','validate_shop_floor_status');
152 END validate_shop_floor_status;
153 
154 PROCEDURE validate_item_revision (p_wip_entity_id       IN      NUMBER,
155                                 p_org_id                IN      NUMBER,
156                                 p_line_id               IN      NUMBER,
157                                 p_rep_sched_id          IN      NUMBER,
158                                 x_valid_ez_complete     OUT NOCOPY     NUMBER) IS
159 BEGIN
160 
161         /*item revision must exist as a BOM revision */
162         /* Fix for bug 4095809: Need to do the comparison only if a bill
163            is referenced in the job ie., common_bill_sequence_id IS NOT NULL */
164         select count(*) into x_valid_ez_complete
165         from wip_entities we
166         where we.wip_entity_id = p_wip_entity_id
167         and we.organization_id = p_org_id
168         and exists (
169                 select 'X'
170                 from MTL_SYSTEM_ITEMS msi
171                 where msi.organization_id = p_org_id
172                 and msi.inventory_item_id = we.primary_item_id
173                 and msi.revision_qty_control_code=2)
174         and ( ( we.entity_type = WIP_CONSTANTS.DISCRETE
175                 and not exists (
176                         select 'X'
177                         from WIP_DISCRETE_JOBS wdj, MTL_ITEM_REVISIONS MIR
178                         where wdj.organization_id = we.organization_id
179                         and wdj.wip_entity_id = we.wip_entity_id
180                         and mir.organization_id = wdj.organization_id
181                         and mir.inventory_item_id = we.primary_item_id
182                         and ( wdj.common_bom_sequence_id is null
183                               or ( wdj.common_bom_sequence_id is not null
184                                    and mir.revision = wdj.bom_revision
185                                   )
186                             )
187                         ))
188             or (we.entity_type = WIP_CONSTANTS.REPETITIVE
189                 and not exists (
190                         select 'X'
191                         from WIP_REPETITIVE_SCHEDULES WRS, MTL_ITEM_REVISIONS MIR
192                         where wrs.organization_id = we.organization_id
193                         and wrs.repetitive_schedule_id = p_rep_sched_id
194                         and mir.inventory_item_id = we.primary_item_id
195                         and mir.organization_id = we.organization_id
196                         and mir.inventory_item_id = we.primary_item_id
197                         and ( wrs.common_bom_sequence_id is null
198                               or ( wrs.common_bom_sequence_id is not null
199                                    and mir.revision = wrs.bom_revision
200                                   )
201                             )
202                         )) );
203 
204         exception
205         when others then
206                 fnd_msg_pub.add_exc_msg('WIP_Default_Shopfloormove','validate_item_revision');
207 END validate_item_revision;
208 
209 PROCEDURE validate_last_op (p_wip_entity_id     IN      NUMBER,
210                                 p_org_id        IN      NUMBER,
211                                 p_line_id       IN      NUMBER,
212                                 p_rep_sched_id  IN      NUMBER,
213                                 x_valid_ez_complete     OUT NOCOPY     NUMBER) IS
214 begin
215 
216         validate_default_sub_loc (p_wip_entity_id, p_org_id, p_line_id,
217                                 x_valid_ez_complete);
218         if (x_valid_ez_complete <> VALID) then
219                 return ;
220         end if;
221 
222         validate_lot_control (p_wip_entity_id, p_org_id, p_line_id,
223                                 x_valid_ez_complete);
224         if (x_valid_ez_complete <> VALID) then
225                 return ;
226         end if;
227 
228         validate_serial_control (p_wip_entity_id, p_org_id,
229                                 x_valid_ez_complete);
230         if (x_valid_ez_complete <> VALID) then
231                 return ;
232         end if;
233 
234         validate_shop_floor_status (p_wip_entity_id, p_org_id, p_line_id,
235                                 p_rep_sched_id, x_valid_ez_complete);
236         if (x_valid_ez_complete <> VALID) then
237                 return ;
238         end if;
239 
240         validate_item_revision (p_wip_entity_id, p_org_id, p_line_id,
241                                 p_rep_sched_id, x_valid_ez_complete);
242 
243 END validate_last_op;
244 
245 PROCEDURE get_actual_move_ops(p_correction_type  IN     NUMBER,
246                          p_org_id       IN      NUMBER,
247                          p_wip_entity_id        IN      NUMBER,
248                          p_operation_seq_num    IN      NUMBER,
249                          p_rep_sched_id IN      NUMBER,
250                          p_line_id      IN      NUMBER,
251                          p_next_op      IN OUT NOCOPY  NUMBER,
252                          p_current_op   IN OUT NOCOPY  NUMBER,
253                          p_next_dept_id IN OUT NOCOPY  NUMBER,
254                          p_current_dept_id  IN OUT NOCOPY      NUMBER,
255                          x_next_step    OUT NOCOPY     NUMBER,
256                          x_current_step OUT NOCOPY     NUMBER,
257                          x_txn_type     OUT NOCOPY     NUMBER) IS
258 
259                          x_temp         NUMBER;
260                          x_valid_ez_complete    NUMBER;
261                          l_ncp_after_current_op NUMBER;		/*Added for bug 6146597*/
262                          l_lot_control_code NUMBER;		/*Added for bug 8826087*/
263                          l_shelf_life_code NUMBER;		/*Added for bug 8826087*/
264 
265 BEGIN
266         x_txn_type := WIP_CONSTANTS.MOVE_TXN;
267         if (p_correction_type = MOVE_FORWARD) then
268 
269                 if (p_next_op > p_current_op) then
270                         x_current_step := WIP_CONSTANTS.QUEUE;
271                         x_next_step := WIP_CONSTANTS.QUEUE;
272                 else
273 	                        validate_last_op(p_wip_entity_id, p_org_id, p_line_id,
274                                         p_rep_sched_id, x_valid_ez_complete);
275 
276 							 /*Bug 6146597: Added the following query to check if there any non count point operations
277 						 	   after the OSP operation. The code reaches this point beacuse OSP operation
278 						 	   is the last count point operation */
279  	                          select count(*)
280  	                             into l_ncp_after_current_op
281  	                            from wip_operations
282  	                           where operation_seq_num > p_current_op
283  	                             and count_point_type = 2
284  	                             and wip_entity_id = p_wip_entity_id ;
285 
286                /*Added for bug 8826087, check that if assembly is set to lot control and lot expiration is set to USER_DEFINED,
287                  Do move transaction instead of easy completion to aviod error WIP_USER_DEF_EXP_NOT_ALLOW*/
288 
289                                begin
290                                  select msi.lot_control_code, msi.shelf_life_code
291                                   into l_lot_control_code, l_shelf_life_code
292                                   from mtl_system_items msi, wip_entities we
293                                   where we.wip_entity_id = p_wip_entity_id
294                                   and we.organization_id = p_org_id
295                                   and msi.organization_id = we.organization_id
296                                   and INVENTORY_ITEM_ID = we.primary_item_id;
297                               exception
298                                   when others then
299                                   fnd_msg_pub.add_exc_msg('WIP_Default_Shopfloormove','get_actual_move_ops: select from MSI,WE');
300                                end;
301 
302 
303 
304                /*Fix for bug 8826087*/
305                              if (l_ncp_after_current_op > 0 or (l_lot_control_code = WIP_CONSTANTS.LOT and l_shelf_life_code = WIP_CONSTANTS.USER_DEFINED_EXP))  then
306 								 	 /*To make the completion invalid because there are Non count point operation
307 								 	    after this operation*/
308 	 	                             x_valid_ez_complete := -999 ;
309  	                            end if ;
310 
311 
312 		                        if (x_valid_ez_complete = VALID) then
313 		                                x_txn_type := WIP_CONSTANTS.COMP_TXN;
314 								end if;
315 
316 								p_next_op := p_current_op;
317                                 p_next_dept_id := p_current_dept_id;
318                                 x_current_step := WIP_CONSTANTS.QUEUE;
319                                 x_next_step := WIP_CONSTANTS.TOMOVE;
320 
321                 end if;
322         else
323                 if (p_next_op > p_current_op) then
324                         x_temp := p_current_op;
325                         p_current_op := p_next_op;
326                         p_next_op := x_temp;
327                         x_temp := p_current_dept_id;
328                         p_current_dept_id := p_next_dept_id;
329                         p_next_dept_id := x_temp;
330                         x_current_step := WIP_CONSTANTS.QUEUE;
331                         x_next_step := WIP_CONSTANTS.QUEUE;
332                 else
333                         validate_last_op(p_wip_entity_id, p_org_id, p_line_id,
334                                         p_rep_sched_id, x_valid_ez_complete);
335                         if (x_valid_ez_complete = VALID) then
336                                 x_txn_type := WIP_CONSTANTS.RET_TXN;
337                         end if;
338                         p_next_op := p_current_op;
339                         p_next_dept_id := p_current_dept_id;
340                         x_current_step := WIP_CONSTANTS.TOMOVE;
341                         x_next_step := WIP_CONSTANTS.QUEUE;
342                 end if;
343         end if;
344 
345         exception
346         when others then
347                 fnd_msg_pub.add_exc_msg('WIP_Default_Shopfloormove','get_actual_move_ops');
348 END get_actual_move_ops;
349 
350 PROCEDURE get_osp_move_details
351   IS
352      l_transaction_type         NUMBER := FND_API.G_MISS_NUM;
353      l_transaction_quantity     NUMBER := FND_API.G_MISS_NUM;
354      l_primary_quantity         NUMBER := FND_API.G_MISS_NUM;
355      l_fm_operation_seq_num     NUMBER := FND_API.G_MISS_NUM;
356      l_fm_intraop_step_type     NUMBER := FND_API.G_MISS_NUM;
357      l_fm_department_id         NUMBER := FND_API.G_MISS_NUM;
358      l_to_operation_seq_num     NUMBER := FND_API.G_MISS_NUM;
359      l_to_intraop_step_type     NUMBER := FND_API.G_MISS_NUM;
360      l_to_department_id         NUMBER := FND_API.G_MISS_NUM;
361      l_correction_type          NUMBER;
362      l_wip_entity_id            NUMBER := FND_API.G_MISS_NUM;
363      l_organization_id          NUMBER := FND_API.G_MISS_NUM;
364      l_osp_op_seq               NUMBER := FND_API.G_MISS_NUM;
365      l_line_id                  NUMBER := FND_API.G_MISS_NUM;
366      l_rep_sch_id               NUMBER := FND_API.G_MISS_NUM;
367      l_cur_op_seq               NUMBER := FND_API.G_MISS_NUM;
368      l_cur_qty_in_queue         NUMBER := FND_API.G_MISS_NUM;
369      l_cur_qty_to_move          NUMBER := FND_API.G_MISS_NUM;
370      l_next_op_seq              NUMBER := FND_API.G_MISS_NUM;
371      l_next_qty_in_queue        NUMBER := FND_API.G_MISS_NUM;
372      l_next_qty_to_move         NUMBER := FND_API.G_MISS_NUM;
373      l_basis_type               NUMBER := FND_API.G_MISS_NUM;
374      l_neg_qty_indicator        boolean;
375 BEGIN
376 
377    l_wip_entity_id    := g_OSP_rec.wip_entity_id;
378    l_organization_id  := g_OSP_rec.organization_id;
379    l_osp_op_seq       := g_OSP_rec.operation_seq_num;
380    l_line_id          := g_OSP_rec.line_id;
381    l_rep_sch_id       := g_OSP_rec.repetitive_schedule_id;
382    l_basis_type       := g_OSP_rec.basis_type;
383 
384    SELECT Decode(msi.outside_operation_uom_type,
385           'ASSEMBLY' , rti.primary_quantity,
386           Decode(Nvl(g_OSP_rec.usage_rate_or_amount,0) ,
387                      0 , 0,
388                      (rti.primary_quantity/g_OSP_rec.usage_rate_or_amount)))
389    INTO
390           l_primary_quantity
391    FROM
392           mtl_system_items msi,
393           rcv_transactions_interface rti
394    WHERE rti.interface_transaction_id = g_OSP_rec.source_line_id
395       AND msi.inventory_item_id = rti.item_id
396       AND msi.organization_id = g_OSP_rec.organization_id;
397 
398    if(l_primary_quantity < 0) then
399      l_neg_qty_indicator := true;
400      l_primary_quantity := l_primary_quantity * -1;
401    else
402      l_neg_qty_indicator := false;
403    end if;
404    --at this point, l_primary_quantity is always positive
405    l_transaction_quantity := l_primary_quantity;
406 
407    IF g_osp_mov_details.transaction_quantity IS NULL THEN
408       g_osp_mov_details.transaction_quantity := l_transaction_quantity;
409    END IF;
410 
411    IF g_OSP_rec.action = WIP_Transaction_PUB.G_ACT_OSP_RET_TO_RCV
412      OR g_OSP_rec.action = WIP_Transaction_PUB.G_ACT_OSP_RET_TO_VEND
413      THEN
414       l_correction_type := MOVE_BACKWARD;
415     ELSIF g_OSP_rec.action = WIP_Transaction_PUB.G_ACT_OSP_CORRECT_TO_RCV
416       THEN
417       IF l_neg_qty_indicator
418         THEN
419          l_correction_type := MOVE_FORWARD;
420        ELSE
421          l_correction_type := MOVE_BACKWARD;
422       END IF;
423     ELSE
424       IF l_neg_qty_indicator
425         THEN
426          l_correction_type := MOVE_BACKWARD;
427        ELSE
428          l_correction_type := MOVE_FORWARD;
429       END IF;
430    END IF;
431 
432         BEGIN
433            SELECT       wop.operation_seq_num,
434                         wop.department_id,
435                         nvl(nwop.operation_seq_num, -1),
436                         nvl(nwop.department_id, -1),
437                         wop.operation_seq_num,
438                         wop.quantity_in_queue,
439                         decode(wop.quantity_waiting_to_move, 0,
440                                wop.quantity_completed,
441                                wop.quantity_waiting_to_move),
442                         nvl(nwop.operation_seq_num, -1),
443                         nwop.quantity_in_queue,
444                         decode(nwop.quantity_waiting_to_move, 0,
445                                nwop.quantity_completed,
446                                nwop.quantity_waiting_to_move)
447                 INTO    l_fm_operation_seq_num,
448                         l_fm_department_id,
449                         l_to_operation_seq_num,
450                         l_to_department_id,
451                         l_cur_op_seq,
452                         l_cur_qty_in_queue,
453                         l_cur_qty_to_move,
454                         l_next_op_seq,
455                         l_next_qty_in_queue,
456                         l_next_qty_to_move
457                 /*Bug 6146597 Start*/
458                 FROM    (select  wip_entity_id,
459                                   organization_id,
460                                   operation_seq_num,
461                                   department_id,
462                                   quantity_in_queue,
463                                   quantity_waiting_to_move,
464                                   quantity_completed,
465                                   repetitive_schedule_id
466                              from wip_operations
467                              where wip_entity_id= l_wip_entity_id
468                                and nvl (repetitive_schedule_id, -1) = nvl (l_rep_sch_id, -1)
469                                and organization_id= l_organization_id
470                                and operation_seq_num > l_osp_op_seq
471                                and count_point_type = 1
472                                and ROWNUM=1
473                              ORDER BY operation_seq_num)  nwop,
474 		/*Bug 6146597 End*/
475                         wip_operations wop
476                 WHERE   wop.organization_id     = l_organization_id
477                     and wop.wip_entity_id       = l_wip_entity_id
478                     and wop.operation_seq_num   = l_osp_op_seq
479                     and nvl (wop.repetitive_schedule_id, -1) =
480                         nvl (l_rep_sch_id, -1)
481                     and wop.organization_id        = nwop.organization_id(+)
482                     and wop.wip_entity_id          = nwop.wip_entity_id(+)
483                  /*Bug 6146597   and wop.next_operation_seq_num = nwop.operation_seq_num(+)*/
484                     and nvl(wop.repetitive_schedule_id, -1) =
485                               nvl(nwop.repetitive_schedule_id(+), -1);
486 
487         exception
488            when others then
489                 fnd_msg_pub.add_exc_msg('WIP_Default_Shopfloormove','get_osp_move_details');
490         end ;
491 
492         get_actual_move_ops(
493                             p_correction_type   =>l_correction_type,
494                             p_org_id            =>l_organization_id,
495                             p_wip_entity_id     =>l_wip_entity_id,
496                             p_operation_seq_num =>l_osp_op_seq,
497                             p_rep_sched_id      =>l_rep_sch_id,
498                             p_line_id           =>l_line_id,
499                             p_next_op           =>l_to_operation_seq_num,
500                             p_current_op        =>l_fm_operation_seq_num,
501                             p_next_dept_id      =>l_to_department_id,
502                             p_current_dept_id   =>l_fm_department_id,
503                             x_next_step         =>l_to_intraop_step_type,
504                             x_current_step      =>l_fm_intraop_step_type,
505                             x_txn_type          =>l_transaction_type);
506 
507    -- set the primary quantity to job qty if basis type is LOT based
508    -- fix bug 1832111
509    if (l_basis_type = 2) then -- lot based resource
510      if (l_fm_operation_seq_num = l_cur_op_seq) then
511        if (l_fm_intraop_step_type = WIP_CONSTANTS.QUEUE) then
512          l_primary_quantity := l_cur_qty_in_queue;
513        elsif (l_fm_intraop_step_type = WIP_CONSTANTS.TOMOVE) then
514          l_primary_quantity := l_cur_qty_to_move;
515        end if;
516      elsif (l_fm_operation_seq_num = l_next_op_seq) then
517        if (l_fm_intraop_step_type = WIP_CONSTANTS.QUEUE) then
518          l_primary_quantity := l_next_qty_in_queue;
519        elsif (l_fm_intraop_step_type = WIP_CONSTANTS.TOMOVE) then
520          l_primary_quantity := l_next_qty_to_move;
521        end if;
522      end if;
523      -- need to also change the transaction_quantity
524      g_osp_mov_details.transaction_quantity := l_primary_quantity;
525    end if;  -- end of basis_type = 2 (lot based resource)
526 
527    -- Default all the local variables.
528 
529    IF g_osp_mov_details.move_direction IS NULL THEN
530       g_osp_mov_details.move_direction := l_correction_type;
531    END IF;
532 
533    IF g_osp_mov_details.transaction_type IS NULL THEN
534       g_osp_mov_details.transaction_type := l_transaction_type;
535    END IF;
536 
537    IF g_osp_mov_details.primary_quantity IS NULL THEN
538       g_osp_mov_details.primary_quantity := l_primary_quantity;
539    END IF;
540 
541    IF g_osp_mov_details.fm_operation_seq_num IS NULL THEN
542       g_osp_mov_details.fm_operation_seq_num := l_fm_operation_seq_num;
543    END IF;
544 
545    IF g_osp_mov_details.fm_intraop_step_type IS NULL THEN
546       g_osp_mov_details.fm_intraop_step_type := l_fm_intraop_step_type;
547    END IF;
548 
549    IF g_osp_mov_details.fm_department_id IS NULL THEN
550       g_osp_mov_details.fm_department_id := l_fm_department_id;
551    END IF;
552 
553    IF g_osp_mov_details.to_operation_seq_num IS NULL THEN
554       g_osp_mov_details.to_operation_seq_num := l_to_operation_seq_num;
555    END IF;
556 
557    IF g_osp_mov_details.to_intraop_step_type IS NULL THEN
558       g_osp_mov_details.to_intraop_step_type := l_to_intraop_step_type;
559    END IF;
560 
561    IF g_osp_mov_details.to_department_id IS NULL THEN
562       g_osp_mov_details.to_department_id := l_to_department_id;
563    END IF;
564 
565 
566 EXCEPTION
567    WHEN OTHERS THEN
568      fnd_msg_pub.add_exc_msg('WIP_Default_Shopfloormove','get_osp_move_details');
569 END get_osp_move_details;
570 
571 
572 FUNCTION Get_Acct_Period
573 RETURN NUMBER
574 IS
575 BEGIN
576 
577    IF g_ShopFloorMove_rec.acct_period_id IS NOT NULL THEN
578       RETURN g_ShopFloorMove_rec.acct_period_id;
579    END IF;
580 
581    IF g_OSP_rec.acct_period_id IS NOT NULL THEN
582       RETURN g_OSP_rec.acct_period_id;
583    END IF;
584 
585 
586    RETURN NULL;
587 
588 EXCEPTION
589    WHEN OTHERS THEN
590       RETURN FND_API.G_MISS_NUM;
591 
592 END Get_Acct_Period;
593 
594 FUNCTION Get_Created_By_Name
595 RETURN VARCHAR2
596 IS
597 BEGIN
598 
599     IF g_ShopFloorMove_rec.created_by_name IS NOT NULL THEN
600       RETURN g_ShopFloorMove_rec.created_by_name;
601    END IF;
602 
603    IF g_OSP_rec.created_by_name IS NOT NULL THEN
604       RETURN g_OSP_rec.created_by_name;
605    END IF;
606 
607 
608    RETURN NULL;
609 
610 EXCEPTION
611    WHEN OTHERS THEN
612       RETURN FND_API.G_MISS_CHAR;
613 
614 END Get_Created_By_Name;
615 
616 FUNCTION Get_Created_By
617 RETURN VARCHAR2
618 IS
619 BEGIN
620 
621   IF g_ShopFloorMove_rec.created_by IS NOT NULL THEN
622       RETURN g_ShopFloorMove_rec.created_by;
623    END IF;
624 
625    IF g_OSP_rec.created_by IS NOT NULL THEN
626       RETURN g_OSP_rec.created_by;
627    END IF;
628 
629    RETURN NULL;
630 
631 EXCEPTION
632    WHEN OTHERS THEN
633       RETURN FND_API.G_MISS_CHAR;
634 
635 END Get_Created_By;
636 
637 FUNCTION Get_Entity_Type
638 RETURN NUMBER
639 IS
640 BEGIN
641 
642    IF g_ShopFloorMove_rec.entity_type IS NOT NULL THEN
643       RETURN g_ShopFloorMove_rec.entity_type;
644    END IF;
645 
646    IF g_OSP_rec.entity_type IS NOT NULL THEN
647       RETURN g_OSP_rec.entity_type;
648    END IF;
649 
650    IF g_Wip_Entities_rec.entity_type IS NOT NULL THEN
651       RETURN g_Wip_Entities_rec.entity_type;
652    END IF;
653 
654    IF g_ShopFloorMove_rec.wip_entity_id IS NOT NULL THEN
655       get_we_attr();
656       RETURN g_ShopFloorMove_rec.entity_type;
657    END IF;
658 
659    RETURN NULL;
660 
661 EXCEPTION
662    WHEN OTHERS THEN
663       RETURN FND_API.G_MISS_NUM;
664 
665 END Get_Entity_Type;
666 
667 FUNCTION Get_Fm_Department_Code
668 RETURN VARCHAR2
669 IS
670 BEGIN
671 
672   IF g_ShopFloorMove_rec.fm_department_code IS NOT NULL THEN
673       RETURN g_ShopFloorMove_rec.fm_department_code;
674    END IF;
675 
676    IF g_ShopFloorMove_rec.fm_department_id IS NOT NULL then
677 
678          SELECT department_code
679            INTO g_ShopFloorMove_rec.fm_department_code
680            FROM bom_departments
681            WHERE department_id = g_ShopFloorMove_rec.fm_department_id;
682 
683            RETURN g_ShopFloorMove_rec.fm_department_code;
684    END IF;
685 
686    RETURN NULL;
687 
688 EXCEPTION
689    WHEN OTHERS THEN
690       RETURN FND_API.G_MISS_CHAR;
691 
692 END Get_Fm_Department_Code;
693 
694 FUNCTION Get_Fm_Department_Id
695 RETURN NUMBER
696 IS
697 BEGIN
698 
699    IF g_ShopFloorMove_rec.fm_department_id IS NOT NULL THEN
700       RETURN g_ShopFloorMove_rec.fm_department_id;
701    END IF;
702 
703    IF g_ShopFloorMove_rec.source_code = 'RCV' THEN
704       IF g_osp_mov_details.fm_department_id IS NOT NULL THEN
705          RETURN g_osp_mov_details.fm_department_id;
706       ELSE
707          get_osp_move_details();
708          RETURN g_osp_mov_details.fm_department_id;
709       END IF;
710    END IF;
711 
712    IF g_ShopFloorMove_rec.wip_entity_id IS NOT NULL
713      AND g_ShopFloorMove_rec.fm_operation_seq_num IS NOT NULL
714      AND g_ShopFloorMove_rec.organization_id IS NOT NULL THEN
715 
716       SELECT department_id
717         INTO g_ShopFloorMove_rec.fm_department_id
718         FROM wip_operations
719         WHERE wip_entity_id = g_ShopFloorMove_rec.wip_entity_id
720         AND   organization_id = g_ShopFloorMove_rec.organization_id
721         AND   operation_seq_num = g_ShopFloorMove_rec.fm_operation_seq_num
722         AND   (repetitive_schedule_id IS NULL
723                OR repetitive_schedule_id = g_ShopFloorMove_rec.repetitive_schedule_id);
724 
725         RETURN g_ShopFloorMove_rec.fm_department_id;
726    END IF;
727 
728    RETURN NULL;
729 
730 EXCEPTION
731    WHEN OTHERS THEN
732       RETURN FND_API.G_MISS_NUM;
733 
734 END Get_Fm_Department_Id;
735 
736 FUNCTION Get_Fm_Intraop_Step_Type
737 RETURN NUMBER
738 IS
739 BEGIN
740 
741    IF g_ShopFloorMove_rec.fm_intraop_step_type IS NOT NULL THEN
742       RETURN g_ShopFloorMove_rec.fm_intraop_step_type;
743    END IF;
744 
745    IF g_ShopFloorMove_rec.source_code = 'RCV' THEN
746       IF g_osp_mov_details.fm_intraop_step_type IS NOT NULL THEN
747          RETURN g_osp_mov_details.fm_intraop_step_type;
748       ELSE
749          get_osp_move_details();
750          RETURN g_osp_mov_details.fm_intraop_step_type;
751       END IF;
752    END IF;
753 
754    RETURN NULL;
755 
756 EXCEPTION
757    WHEN OTHERS THEN
758       RETURN FND_API.G_MISS_NUM;
759 
760 END Get_Fm_Intraop_Step_Type;
761 
762 FUNCTION Get_Fm_Operation
763 RETURN VARCHAR2
764 IS
765 BEGIN
766 
767  IF g_ShopFloorMove_rec.fm_operation_code IS NOT NULL THEN
768       RETURN g_ShopFloorMove_rec.fm_operation_code;
769    END IF;
770 
771    RETURN NULL;
772 
773 EXCEPTION
774    WHEN OTHERS THEN
775       RETURN FND_API.G_MISS_CHAR;
776 
777 END Get_Fm_Operation;
778 
779 FUNCTION Get_Fm_Operation_Seq_Num
780 RETURN NUMBER
781 IS
782 BEGIN
783 
784 
785    IF g_ShopFloorMove_rec.fm_operation_seq_num IS NOT NULL THEN
786       RETURN g_ShopFloorMove_rec.fm_operation_seq_num;
787    END IF;
788 
789    IF g_ShopFloorMove_rec.source_code = 'RCV' THEN
790       IF g_osp_mov_details.fm_operation_seq_num IS NOT NULL THEN
791          RETURN g_osp_mov_details.fm_operation_seq_num;
792       ELSE
793          get_osp_move_details();
794          RETURN g_osp_mov_details.fm_operation_seq_num;
795       END IF;
796    END IF;
797 
798    RETURN NULL;
799 
800 EXCEPTION
801    WHEN OTHERS THEN
802       RETURN FND_API.G_MISS_NUM;
803 
804 END Get_Fm_Operation_Seq_Num;
805 
806 FUNCTION Get_Group
807 RETURN NUMBER
808 IS
809 BEGIN
810 
811    IF g_ShopFloorMove_rec.group_id IS NOT NULL THEN
812       RETURN g_ShopFloorMove_rec.group_id;
813    END IF;
814 
815    RETURN NULL;
816 
817 EXCEPTION
818    WHEN OTHERS THEN
819       RETURN FND_API.G_MISS_NUM;
820 
821 END Get_Group;
822 
823 FUNCTION Get_Kanban_Card
824 RETURN NUMBER
825 IS
826 BEGIN
827 
828    IF g_ShopFloorMove_rec.kanban_card_id IS NOT NULL THEN
829       RETURN g_ShopFloorMove_rec.kanban_card_id;
830    END IF;
831 
832    IF g_ShopFloorMove_rec.wip_entity_id IS NOT NULL
833 --     AND g_ShopFloorMove_rec.transaction_type = --easy complete
834      AND g_ShopFloorMove_rec.entity_type = 1 THEN
835 --      get_wdj_attr();
836       RETURN g_ShopFloorMove_rec.kanban_card_id;
837    END IF;
838 
839    RETURN NULL;
840 
841 EXCEPTION
842    WHEN OTHERS THEN
843       RETURN FND_API.G_MISS_NUM;
844 
845 END Get_Kanban_Card;
846 
847 FUNCTION Get_Last_Updated_By_Name
848 RETURN VARCHAR2
849 IS
850 BEGIN
851 
852    IF g_ShopFloorMove_rec.last_updated_by_name IS NOT NULL THEN
853       RETURN g_ShopFloorMove_rec.last_updated_by_name;
854    END IF;
855 
856    IF g_OSP_rec.last_updated_by_name IS NOT NULL THEN
857       RETURN g_OSP_rec.last_updated_by_name;
858    END IF;
859 
860    RETURN NULL;
861 
862 EXCEPTION
863    WHEN OTHERS THEN
864       RETURN FND_API.G_MISS_CHAR;
865 
866 END Get_Last_Updated_By_Name;
867 
868 FUNCTION Get_Last_Update_Login
869 RETURN VARCHAR2
870 IS
871 BEGIN
872 
873    IF g_ShopFloorMove_rec.last_update_login IS NOT NULL THEN
874       RETURN g_ShopFloorMove_rec.last_update_login;
875    END IF;
876 
877    IF g_OSP_rec.last_update_login IS NOT NULL THEN
878       RETURN g_OSP_rec.last_update_login;
879    END IF;
880 
881    RETURN NULL;
882 
883 EXCEPTION
884    WHEN OTHERS THEN
885       RETURN FND_API.G_MISS_CHAR;
886 
887 END Get_Last_Update_Login;
888 
889 FUNCTION Get_Request_Id
890 RETURN VARCHAR2
891 IS
892 BEGIN
893 
894     IF g_ShopFloorMove_rec.request_id IS NOT NULL THEN
895       RETURN g_ShopFloorMove_rec.request_id;
896    END IF;
897 
898    IF g_OSP_rec.request_id IS NOT NULL THEN
899       RETURN g_OSP_rec.request_id;
900    END IF;
901 
902    RETURN NULL;
903 
904 EXCEPTION
905    WHEN OTHERS THEN
906       RETURN FND_API.G_MISS_CHAR;
907 
908 END Get_Request_Id;
909 
910 FUNCTION Get_Program_Id
911 RETURN VARCHAR2
912 IS
913 BEGIN
914 
915     IF g_ShopFloorMove_rec.program_id IS NOT NULL THEN
916       RETURN g_ShopFloorMove_rec.program_id;
917    END IF;
918 
919    IF g_OSP_rec.program_id IS NOT NULL THEN
920       RETURN g_OSP_rec.program_id;
921    END IF;
922 
923    RETURN NULL;
924 
925 EXCEPTION
926    WHEN OTHERS THEN
927       RETURN FND_API.G_MISS_CHAR;
928 
929 END Get_Program_Id;
930 
931 FUNCTION Get_Program_Application_Id
932 RETURN VARCHAR2
933 IS
934 BEGIN
935 
936    IF g_ShopFloorMove_rec.program_application_id IS NOT NULL THEN
937       RETURN g_ShopFloorMove_rec.program_application_id;
938    END IF;
939 
940    IF g_OSP_rec.program_application_id IS NOT NULL THEN
941       RETURN g_OSP_rec.program_application_id;
942    END IF;
943 
944    RETURN NULL;
945 
946 EXCEPTION
947    WHEN OTHERS THEN
948       RETURN FND_API.G_MISS_CHAR;
949 
950 END Get_Program_Application_Id;
951 
952 FUNCTION Get_Program_Update_Date
953 RETURN DATE
954 IS
955 BEGIN
956 
957    IF g_ShopFloorMove_rec.program_update_date IS NOT NULL THEN
958       RETURN g_ShopFloorMove_rec.program_update_date;
959    END IF;
960 
961    IF g_OSP_rec.program_update_date IS NOT NULL THEN
962       RETURN g_OSP_rec.program_update_date;
963    END IF;
964 
965    RETURN NULL;
966 
967 EXCEPTION
968    WHEN OTHERS THEN
969       RETURN FND_API.G_MISS_DATE;
970 
971 END Get_Program_Update_Date;
972 
973 FUNCTION Get_Last_Updated_By
974 RETURN VARCHAR2
975 IS
976 BEGIN
977 
978    IF g_ShopFloorMove_rec.last_updated_by IS NOT NULL THEN
979       RETURN g_ShopFloorMove_rec.last_updated_by;
980    END IF;
981 
982    IF g_OSP_rec.last_updated_by IS NOT NULL THEN
983       RETURN g_OSP_rec.last_updated_by;
984    END IF;
985 
986    RETURN NULL;
987 
988 EXCEPTION
989    WHEN OTHERS THEN
990       RETURN FND_API.G_MISS_CHAR;
991 
992 END Get_Last_Updated_By;
993 
994 FUNCTION Get_Line_Code
995 RETURN VARCHAR2
996 IS
997 l_line_code     VARCHAR2(10);
998 BEGIN
999 
1000  IF g_ShopFloorMove_rec.line_code IS NOT NULL THEN
1001       RETURN g_ShopFloorMove_rec.line_code;
1002    END IF;
1003 
1004    IF g_ShopFloorMove_rec.line_id IS NOT NULL
1005    AND g_ShopFloorMove_rec.organization_id IS NOT NULL THEN
1006       SELECT line_code
1007         INTO l_line_code
1008         FROM wip_lines
1009         WHERE line_id = g_ShopFloorMove_rec.line_id
1010         AND   organization_id = g_ShopFloorMove_rec.organization_id;
1011 
1012       RETURN l_line_code;
1013    END IF;
1014 
1015    RETURN NULL;
1016 
1017 EXCEPTION
1018    WHEN OTHERS THEN
1019       RETURN FND_API.G_MISS_CHAR;
1020 
1021 END Get_Line_Code;
1022 
1023 FUNCTION Get_Line_Id
1024 RETURN NUMBER
1025 IS
1026 BEGIN
1027 
1028    IF g_ShopFloorMove_rec.line_id IS NOT NULL THEN
1029       RETURN g_ShopFloorMove_rec.line_id;
1030    END IF;
1031 
1032    IF g_OSP_rec.line_id IS NOT NULL THEN
1033       RETURN g_OSP_rec.line_id;
1034    END IF;
1035 
1036    RETURN NULL;
1037 
1038 EXCEPTION
1039    WHEN OTHERS THEN
1040       RETURN FND_API.G_MISS_NUM;
1041 
1042 END Get_Line_Id;
1043 
1044 FUNCTION Get_Organization_Code
1045 RETURN VARCHAR2
1046 IS
1047 BEGIN
1048 
1049    IF g_ShopFloorMove_rec.organization_code IS NOT NULL THEN
1050       RETURN g_ShopFloorMove_rec.organization_code;
1051    END IF;
1052 
1053    IF g_ShopFloorMove_rec.organization_id IS NOT NULL THEN
1054       SELECT organization_code
1055         INTO g_ShopFloorMove_rec.organization_code
1056         FROM mtl_parameters
1057         WHERE organization_id = g_ShopFloorMove_rec.organization_id;
1058 
1059       RETURN g_ShopFloorMove_rec.organization_code;
1060    END IF;
1061 
1062    RETURN NULL;
1063 
1064 EXCEPTION
1065    WHEN OTHERS THEN
1066       RETURN FND_API.G_MISS_CHAR;
1067 
1068 END Get_Organization_Code;
1069 
1070 FUNCTION Get_Organization_Id
1071 RETURN NUMBER
1072 IS
1073 BEGIN
1074 
1075    IF g_ShopFloorMove_rec.organization_id IS NOT NULL THEN
1076       RETURN g_ShopFloorMove_rec.organization_id;
1077    END IF;
1078 
1079    IF g_OSP_rec.organization_id IS NOT NULL THEN
1080       RETURN g_OSP_rec.organization_id;
1081    END IF;
1082 
1083    RETURN NULL;
1084 
1085 EXCEPTION
1086    WHEN OTHERS THEN
1087       RETURN FND_API.G_MISS_NUM;
1088 
1089 END Get_Organization_Id;
1090 
1091 FUNCTION Get_Overcpl_Primary_Qty
1092 RETURN NUMBER
1093 IS
1094 l_overcpl_primary_qty NUMBER;
1095 
1096 l_total_po_qty_delivered        NUMBER := 0;--assigned for bug 9889616
1097 l_total_pri_qty_delivered       NUMBER;
1098 l_total_prev_qty_delivered      NUMBER;
1099 l_curr_qty_delivered            NUMBER;
1100 l_quantity_in_queue             NUMBER;
1101 l_scheduled_quantity            NUMBER;
1102 l_usage_rate_or_amount          NUMBER;
1103 l_po_uom_code                   mtl_units_of_measure.uom_code%type;
1104 l_interface_txn_id              NUMBER;
1105 l_osp_item_id                   NUMBER;
1106 l_remaining_qty                 NUMBER;
1107 
1108 /* Added for bug 6649174 */
1109 l_logLevel         NUMBER := fnd_log.g_current_runtime_level;
1110 l_returnStatus                  VARCHAR2(1);
1111 l_quantity_completed            NUMBER;
1112 l_quantity_running              NUMBER;
1113 l_total_qty                     NUMBER;
1114 
1115 BEGIN
1116 
1117    IF g_ShopFloorMove_rec.overcpl_primary_qty IS NOT NULL THEN
1118       RETURN g_ShopFloorMove_rec.overcpl_primary_qty;
1119    END IF;
1120 
1121     IF g_ShopFloorMove_rec.source_code = 'RCV' THEN
1122       IF  g_ShopFloorMove_rec.wip_entity_id IS NOT NULL
1123       AND nvl(g_ShopFloorMove_rec.repetitive_schedule_id, -1) IS NOT NULL
1124       AND g_ShopFloorMove_rec.organization_id IS NOT NULL
1125       AND g_ShopFloorMove_rec.fm_operation_seq_num IS NOT NULL
1126       AND g_ShopFloorMove_rec.primary_quantity IS NOT NULL
1127       AND g_osp_mov_details.move_direction = MOVE_FORWARD THEN
1128 
1129        /* Added wip_resource_seq_num and transaction_type condition for Bug#3248542 */
1130        /* Modified for bug 6649174. commented condition on wip_repetitive_schedule_id
1131           and added condition on wip_line_id */
1132 
1133        /*Changed this SQL for performance bug 9888616. */
1134         IF g_ShopFloorMove_rec.repetitive_schedule_id IS NULL THEN
1135           SELECT sum(quantity_delivered)
1136           INTO  l_total_po_qty_delivered
1137           FROM po_distributions_all pda
1138           WHERE pda.wip_entity_id = g_ShopFloorMove_rec.wip_entity_id
1139           AND  pda.destination_organization_id = g_ShopFloorMove_rec.organization_id
1140           AND  pda.wip_operation_seq_num = g_ShopFloorMove_rec.fm_operation_seq_num
1141           AND  pda.wip_resource_seq_num = g_OSP_rec.resource_seq_num
1142           AND  pda.quantity_delivered IS NOT NULL;
1143         ELSE
1144           SELECT sum(quantity_delivered)
1145           INTO l_total_po_qty_delivered
1146           FROM po_distributions_all pda
1147           WHERE pda.wip_entity_id = g_ShopFloorMove_rec.wip_entity_id
1148           AND  pda.wip_line_id = g_osp_rec.line_id
1149           AND  pda.destination_organization_id = g_ShopFloorMove_rec.organization_id
1150           AND  pda.wip_operation_seq_num = g_ShopFloorMove_rec.fm_operation_seq_num
1151           AND  pda.wip_resource_seq_num = g_OSP_rec.resource_seq_num
1152           AND  pda.quantity_delivered IS NOT NULL;
1153         END IF;
1154         /*Changes done SQL for performance bug 9888616. */
1155 
1156         IF (l_logLevel <= wip_constants.full_logging) THEN
1157                wip_logger.log('Get_Overcpl_Primary_Qty: l_total_po_qty_delivered: '||l_total_po_qty_delivered,l_returnStatus);
1158         END IF ;
1159 
1160         begin
1161           SELECT wor.usage_rate_or_amount
1162           INTO l_usage_rate_or_amount
1163           FROM wip_operation_resources wor
1164           WHERE wor.wip_entity_id = g_ShopFloorMove_rec.wip_entity_id
1165           and NVL(wor.repetitive_schedule_id, -1) = NVL(g_ShopFloorMove_rec.repetitive_schedule_id, -1)
1166           and wor.operation_seq_num = g_ShopFloorMove_rec.fm_operation_seq_num
1167           and wor.organization_id = g_ShopFloorMove_rec.organization_id
1168           and wor.resource_seq_num = g_osp_rec.Resource_Seq_Num;
1169         exception
1170            when others then
1171                 fnd_msg_pub.add_exc_msg('WIP_Default_Shopfloormove','get_overcpl_primary_qty: select from WOR');
1172         end;
1173 
1174         /* Modified sql for performance bug 9552415 (FP 9398894) */
1175         begin
1176           select uom.uom_code
1177           into   l_po_uom_code
1178           from mtl_units_of_measure_vl uom
1179           where uom.unit_of_measure =
1180                 ( select  PL.unit_meas_lookup_code
1181                   from    po_lines_all Pl
1182                   where   (pl.po_header_id,pl.po_line_id) =
1183                                  ( select pd.po_header_id, pd.po_line_id
1184                                    from   po_distributions_all pd
1185                                    where  pd.po_distribution_id =
1186                                           ( select rt.po_distribution_id
1187                                             from rcv_transactions rt
1188                                             where rt.wip_entity_id = g_ShopFloorMove_rec.wip_entity_id
1189                                             and  nvl(rt.wip_repetitive_schedule_id, -1)
1190                                                   = nvl(g_ShopFloorMove_rec.repetitive_schedule_id, -1)
1191                                             and  rt.organization_id = g_ShopFloorMove_rec.organization_id
1192                                             and  rt.wip_operation_seq_num = g_ShopFloorMove_rec.fm_operation_seq_num
1193                                             and rt.po_distribution_id is not null
1194                                             and rownum = 1 -- Fix bug 9552415 (FP 9398894)
1195                                            )
1196                                     and   rownum = 1
1197                                   )
1198                );
1199         exception
1200            when others then
1201                 fnd_msg_pub.add_exc_msg('WIP_Default_Shopfloormove','get_overcpl_primary_qty: select from UOM');
1202         end;
1203 
1204 
1205 
1206         begin
1207           SELECT interface_transaction_id
1208           INTO l_interface_txn_id
1209           FROM rcv_transactions
1210           WHERE transaction_id = g_osp_rec.rcv_transaction_id;
1211         exception
1212            when others then
1213                 fnd_msg_pub.add_exc_msg('WIP_Default_Shopfloormove','get_overcpl_primary_qty: select from RT');
1214         end;
1215 
1216        IF (l_interface_txn_id IS NULL) THEN
1217            RAISE fnd_api.g_exc_error;
1218        END IF;
1219 
1220         begin
1221           SELECT item_id
1222           INTO l_osp_item_id
1223           FROM rcv_transactions_interface
1224           WHERE interface_transaction_id = l_interface_txn_id;
1225         exception
1226            when others then
1227                 fnd_msg_pub.add_exc_msg('WIP_Default_Shopfloormove','get_overcpl_primary_qty: select from RTI');
1228         end;
1229 
1230         begin
1231           select decode (msi.outside_operation_uom_type,
1232                   'ASSEMBLY',
1233                    inv_convert.inv_um_convert(
1234                         l_osp_item_id,    -- item_id
1235                         NULL,         -- precision
1236                         l_total_po_qty_delivered,   -- from_quantity
1237                         l_po_uom_code,        -- from_unit
1238                         g_ShopFloorMove_rec.primary_uom,              -- to_unit
1239                         NULL,   -- from_name
1240                         NULL -- to_name
1241                         ),
1242                   decode (nvl(l_usage_rate_or_amount, 0) ,
1243                           0, 0,
1244                           l_total_po_qty_delivered/l_usage_rate_or_amount))
1245           into l_total_pri_qty_delivered
1246           from mtl_system_items msi
1247           where msi.inventory_item_id = l_osp_item_id
1248           and msi.organization_id = g_ShopFloorMove_rec.organization_id;
1249         exception
1250            when others then
1251                 fnd_msg_pub.add_exc_msg('WIP_Default_Shopfloormove','get_overcpl_primary_qty: select from MSI');
1252         end;
1253 
1254         IF (l_logLevel <= wip_constants.full_logging) THEN
1255              wip_logger.log('Get_Overcpl_Primary_Qty: l_total_pri_qty_delivered: '||l_total_pri_qty_delivered,l_returnStatus);
1256         END IF;
1257 
1258         begin
1259 
1260           /* Modified for bug 6649174 */
1261 
1262           select quantity_in_queue,
1263                  quantity_running,
1264                  quantity_completed,
1265 				 SCHEDULED_QUANTITY
1266           into   l_quantity_in_queue,
1267                  l_quantity_running,
1268                  l_quantity_completed,
1269 				 l_scheduled_quantity
1270           from wip_operations wo
1271           where wo.wip_entity_id = g_ShopFloorMove_rec.wip_entity_id
1272           and  nvl(wo.repetitive_schedule_id, -1)  = nvl(g_ShopFloorMove_rec.repetitive_schedule_id, -1)
1273           and  wo.organization_id = g_ShopFloorMove_rec.organization_id
1274           and  wo.operation_seq_num = g_ShopFloorMove_rec.fm_operation_seq_num;
1275 
1276           /* Fix for Bug#5912963. Sum quantity in queue for repetitive schedule of same item
1277              on the same line
1278           */
1279 
1280           if g_ShopFloorMove_rec.repetitive_schedule_id is not null then
1281 
1282              /* Modified for bug 6649174 */
1283 
1284              select sum(quantity_in_queue) ,
1285                     sum(wo.quantity_running) ,
1286                     sum(wo.quantity_completed)
1287              into   l_quantity_in_queue,
1288                     l_quantity_running,
1289                     l_quantity_completed
1290              from   wip_operations wo,
1291                     wip_repetitive_schedules wrs
1292              where  wo.wip_entity_id = g_ShopFloorMove_rec.wip_entity_id
1293              and    wrs.wip_entity_id = wo.wip_entity_id
1294              and    wo.organization_id = wrs.organization_id
1295              and    wo.repetitive_schedule_id = wrs.repetitive_schedule_id
1296              and    wrs.line_id = g_osp_rec.line_id
1297              and    wrs.status_type = WIP_CONSTANTS.RELEASED
1298              and    wo.organization_id = g_ShopFloorMove_rec.organization_id
1299              and    wo.operation_seq_num = g_ShopFloorMove_rec.fm_operation_seq_num;
1300 
1301           end if ;
1302 
1303           l_total_qty := l_quantity_in_queue + l_quantity_running + l_quantity_completed ;
1304 
1305           IF (l_logLevel <= wip_constants.full_logging) THEN
1306             wip_logger.log('Get_Overcpl_Primary_Qty: l_total_qty: '||l_total_qty,l_returnStatus);
1307             wip_logger.log('Get_Overcpl_Primary_Qty: l_quantity_in_queue: '||l_quantity_in_queue,l_returnStatus);
1308             wip_logger.log('Get_Overcpl_Primary_Qty: l_quantity_running: '||l_quantity_running,l_returnStatus);
1309             wip_logger.log('Get_Overcpl_Primary_Qty: l_quantity_completed: '||l_quantity_completed,l_returnStatus);
1310           END IF;
1311 
1312 		  --Bug 16099295 (FP 13526041): Noticed that if there are consecutive OSP operations and they are
1313  	      --received at the same time, then total_qty for the second one will be 0, and hence it will show
1314  	      --the quantity being received as OverCompletion, when it is NOT. This condition will cause it to
1315  	      --avoid that.
1316  	      if (l_total_qty = 0) then
1317 			l_total_qty := l_scheduled_quantity;
1318  	        IF (l_logLevel <= wip_constants.full_logging) THEN
1319 				wip_logger.log('Get_Overcpl_Primary_Qty: l_total_qty 2: '||l_total_qty,l_returnStatus);
1320  	        END IF;
1321  	      end if;
1322 
1323         exception
1324            when others then
1325                 fnd_msg_pub.add_exc_msg('WIP_Default_Shopfloormove','get_overcpl_primary_qty: select from WO');
1326         end;
1327 
1328 
1329         l_curr_qty_delivered := nvl(g_ShopFloorMove_rec.primary_quantity,0);
1330         l_total_prev_qty_delivered  := l_total_pri_qty_delivered - l_curr_qty_delivered;
1331 
1332         IF (l_logLevel <= wip_constants.full_logging) THEN
1333           wip_logger.log('Get_Overcpl_Primary_Qty: l_curr_qty_delivered: '||l_curr_qty_delivered,l_returnStatus);
1334           wip_logger.log('Get_Overcpl_Primary_Qty: l_total_prev_qty_delivered: '||l_total_prev_qty_delivered,l_returnStatus);
1335         END IF;
1336 
1337        /* Fix for Bug#5020591. OverCompletion quantity should be completed only when Current delivered Qty
1338            is more than remaining quantity to be completed on Operation. Greatest condition is added
1339            to take care of test case mentioned in #4232649. This fix actually same as fix made in 11.5.9
1340            11.5.9 code has flaw when half quantity is delivered . This case is also fixed with new if
1341            condition.
1342 
1343            Reverted changes done in bug 4686257; FP 4769587
1344         */
1345 
1346         /* Modified for bug 6649174 */
1347         --l_remaining_qty := greatest(l_scheduled_quantity, l_quantity_in_queue)  - l_total_prev_qty_delivered ; -- Open Qty
1348         l_remaining_qty :=  l_total_qty  - l_total_prev_qty_delivered ; -- Open Qty
1349 
1350         IF (l_logLevel <= wip_constants.full_logging) THEN
1351          wip_logger.log('Get_Overcpl_Primary_Qty: l_remaining_qty: '||l_remaining_qty,l_returnStatus);
1352         END IF;
1353 
1354         /* Modified calculation logic for bug 6649174 */
1355         if  l_curr_qty_delivered > l_remaining_qty then -- Current Qty is going to overcomplete an Op.
1356 
1357          If  ( l_total_prev_qty_delivered >= l_total_qty ) then -- You delivered more quantity last time
1358             l_overcpl_primary_qty :=  l_curr_qty_delivered;
1359             IF (l_logLevel <= wip_constants.full_logging) THEN
1360               wip_logger.log('Get_Overcpl_Primary_Qty: l_overcpl_primary_qty1: '||l_overcpl_primary_qty,l_returnStatus);
1361             END IF;
1362          elsif (l_total_pri_qty_delivered > l_total_qty) then  -- You are over receiving this time
1363             l_overcpl_primary_qty := l_total_pri_qty_delivered - l_total_qty;
1364             IF (l_logLevel <= wip_constants.full_logging) THEN
1365               wip_logger.log('Get_Overcpl_Primary_Qty: l_overcpl_primary_qty2: '||l_overcpl_primary_qty,l_returnStatus);
1366             END IF;
1367          end if;
1368 
1369         end if ;
1370 
1371 
1372     END IF;
1373  END IF;
1374 
1375  IF (l_logLevel <= wip_constants.full_logging) THEN
1376   wip_logger.log('Get_Overcpl_Primary_Qty: l_overcpl_primary_qty3: '||l_overcpl_primary_qty,l_returnStatus);
1377  END IF;
1378 
1379    RETURN l_overcpl_primary_qty;
1380 
1381 EXCEPTION
1382    WHEN OTHERS THEN
1383       RETURN FND_API.G_MISS_NUM;
1384 END Get_Overcpl_Primary_Qty;
1385 
1386 FUNCTION Get_Overcpl_Transaction
1387 RETURN NUMBER
1388 IS
1389 BEGIN
1390 
1391    IF g_ShopFloorMove_rec.overcpl_transaction_id IS NOT NULL THEN
1392       RETURN g_ShopFloorMove_rec.overcpl_transaction_id;
1393    END IF;
1394 
1395    RETURN NULL;
1396 
1397 EXCEPTION
1398    WHEN OTHERS THEN
1399       RETURN FND_API.G_MISS_NUM;
1400 
1401 END Get_Overcpl_Transaction;
1402 
1403 FUNCTION Get_Overcpl_Transaction_Qty
1404 RETURN NUMBER
1405 IS
1406 l_overcpl_transaction_qty NUMBER;
1407 BEGIN
1408 
1409    IF g_ShopFloorMove_rec.overcpl_transaction_qty IS NOT NULL THEN
1410       RETURN g_ShopFloorMove_rec.overcpl_transaction_qty;
1411    END IF;
1412 
1413     IF g_ShopFloorMove_rec.overcpl_primary_qty IS NOT NULL
1414    AND g_ShopFloorMove_rec.primary_uom IS NOT NULL
1415    AND g_ShopFloorMove_rec.transaction_uom IS NOT NULL
1416    AND g_ShopFloorMove_rec.primary_item_id IS NOT NULL THEN
1417 
1418      l_overcpl_transaction_qty := inv_convert.inv_um_convert (
1419                 g_ShopFloorMove_rec.primary_item_id,     -- item_id
1420                 NULL,                                   -- precision
1421                 g_ShopFloorMove_rec.overcpl_primary_qty,-- from_quantity
1422                 g_ShopFloorMove_rec.primary_uom,        -- from_unit
1423                 g_ShopFloorMove_rec.transaction_uom,    -- to_unit
1424                 NULL,                                   -- from_name
1425                 NULL                                    -- to_name
1426      );
1427 
1428      return l_overcpl_transaction_qty;
1429 
1430    END IF;
1431 
1432    RETURN NULL;
1433 
1434 EXCEPTION
1435    WHEN OTHERS THEN
1436       RETURN FND_API.G_MISS_NUM;
1437 
1438 END Get_Overcpl_Transaction_Qty;
1439 
1440 FUNCTION Get_Primary_Item
1441 RETURN NUMBER
1442 IS
1443 BEGIN
1444 
1445    IF g_ShopFloorMove_rec.primary_item_id IS NOT NULL THEN
1446       RETURN g_ShopFloorMove_rec.primary_item_id;
1447    END IF;
1448 
1449    IF g_OSP_rec.primary_item_id IS NOT NULL THEN
1450       RETURN g_OSP_rec.primary_item_id;
1451    END IF;
1452 
1453    IF g_Wip_Entities_rec.primary_item_id IS NOT NULL THEN
1454       RETURN g_Wip_Entities_rec.primary_item_id;
1455    END IF;
1456 
1457    IF g_ShopFloorMove_rec.wip_entity_id IS NOT NULL THEN
1458       get_we_attr();
1459       RETURN g_ShopFloorMove_rec.primary_item_id;
1460    END IF;
1461 
1462    RETURN NULL;
1463 
1464 EXCEPTION
1465    WHEN OTHERS THEN
1466       RETURN FND_API.G_MISS_NUM;
1467 
1468 END Get_Primary_Item;
1469 
1470 FUNCTION Get_Primary_Quantity
1471 RETURN NUMBER
1472 IS
1473 BEGIN
1474 
1475     IF g_ShopFloorMove_rec.primary_quantity IS NOT NULL THEN
1476       RETURN g_ShopFloorMove_rec.primary_quantity;
1477    END IF;
1478 
1479    IF g_ShopFloorMove_rec.source_code = 'RCV' THEN
1480       IF g_osp_mov_details.primary_quantity IS NOT NULL THEN
1481          RETURN g_osp_mov_details.primary_quantity;
1482       ELSE
1483          get_osp_move_details();
1484          RETURN g_osp_mov_details.primary_quantity;
1485       END IF;
1486    END IF;
1487 
1488    RETURN NULL;
1489 
1490 EXCEPTION
1491    WHEN OTHERS THEN
1492       RETURN FND_API.G_MISS_NUM;
1493 
1494 END Get_Primary_Quantity;
1495 
1496 FUNCTION Get_Primary_Uom
1497 RETURN VARCHAR2
1498 IS
1499    l_primary_uom        VARCHAR2(3);
1500 BEGIN
1501 
1502     IF g_ShopFloorMove_rec.primary_uom IS NOT NULL THEN
1503       RETURN g_ShopFloorMove_rec.primary_uom;
1504    END IF;
1505 
1506    IF g_ShopFloorMove_rec.primary_item_id IS NOT NULL
1507      AND g_ShopFloorMove_rec.organization_id IS NOT NULL THEN
1508 
1509       SELECT primary_uom_code
1510         INTO l_primary_uom
1511         FROM mtl_system_items
1512         WHERE inventory_item_id = g_ShopFloorMove_rec.primary_item_id
1513         AND   organization_id   = g_ShopFloorMove_rec.organization_id;
1514 
1515         RETURN l_primary_uom;
1516    END IF;
1517 
1518    RETURN NULL;
1519 
1520 EXCEPTION
1521    WHEN OTHERS THEN
1522       RETURN FND_API.G_MISS_CHAR;
1523 
1524 END Get_Primary_Uom;
1525 
1526 FUNCTION Get_Process_Phase
1527 RETURN NUMBER
1528 IS
1529 BEGIN
1530 
1531    IF g_ShopFloorMove_rec.process_phase IS NOT NULL THEN
1532       RETURN g_ShopFloorMove_rec.process_phase;
1533    END IF;
1534 
1535    IF g_ShopFloorMove_rec.source_code = 'RCV' THEN
1536       RETURN WIP_CONSTANTS.MOVE_VAL;
1537    END IF;
1538 
1539    RETURN NULL;
1540 
1541 EXCEPTION
1542    WHEN OTHERS THEN
1543       RETURN FND_API.G_MISS_NUM;
1544 
1545 END Get_Process_Phase;
1546 
1547 FUNCTION Get_Process_Status
1548 RETURN NUMBER
1549 IS
1550 BEGIN
1551 
1552   IF g_ShopFloorMove_rec.process_status IS NOT NULL THEN
1553       RETURN g_ShopFloorMove_rec.process_status;
1554    END IF;
1555 
1556    IF g_ShopFloorMove_rec.source_code = 'RCV' THEN
1557       RETURN WIP_CONSTANTS.PENDING;
1558    END IF;
1559 
1560    RETURN NULL;
1561 
1562 EXCEPTION
1563    WHEN OTHERS THEN
1564       RETURN FND_API.G_MISS_NUM;
1565 
1566 END Get_Process_Status;
1567 
1568 FUNCTION Get_Qa_Collection
1569 RETURN NUMBER
1570 IS
1571 BEGIN
1572 
1573    IF g_ShopFloorMove_rec.qa_collection_id IS NOT NULL THEN
1574       RETURN g_ShopFloorMove_rec.qa_collection_id;
1575    END IF;
1576 
1577    RETURN NULL;
1578 
1579 EXCEPTION
1580    WHEN OTHERS THEN
1581       RETURN FND_API.G_MISS_NUM;
1582 
1583 END Get_Qa_Collection;
1584 
1585 FUNCTION Get_Reason
1586 RETURN NUMBER
1587 IS
1588 BEGIN
1589 
1590    IF g_ShopFloorMove_rec.reason_id IS NOT NULL THEN
1591       RETURN g_ShopFloorMove_rec.reason_id;
1592    END IF;
1593 
1594    IF g_OSP_rec.reason_id IS NOT NULL THEN
1595       RETURN g_OSP_rec.reason_id;
1596    END IF;
1597 
1598    RETURN NULL;
1599 
1600 EXCEPTION
1601    WHEN OTHERS THEN
1602       RETURN FND_API.G_MISS_NUM;
1603 
1604 END Get_Reason;
1605 
1606 FUNCTION Get_Reason_Name
1607 RETURN VARCHAR2
1608 IS
1609 BEGIN
1610 
1611     IF g_ShopFloorMove_rec.reason_name IS NOT NULL THEN
1612       RETURN g_ShopFloorMove_rec.reason_name;
1613    END IF;
1614 
1615    IF g_OSP_rec.reason_name IS NOT NULL THEN
1616       RETURN g_OSP_rec.reason_name;
1617    END IF;
1618 
1619    RETURN NULL;
1620 
1621 EXCEPTION
1622    WHEN OTHERS THEN
1623       RETURN FND_API.G_MISS_CHAR;
1624 
1625 END Get_Reason_Name;
1626 
1627 FUNCTION Get_Reference
1628 RETURN VARCHAR2
1629 IS
1630 BEGIN
1631 
1632    IF g_ShopFloorMove_rec.reference IS NOT NULL THEN
1633       RETURN g_ShopFloorMove_rec.reference;
1634    END IF;
1635 
1636    IF g_OSP_rec.reference IS NOT NULL THEN
1637       RETURN g_OSP_rec.reference;
1638    END IF;
1639 
1640    RETURN NULL;
1641 
1642 EXCEPTION
1643    WHEN OTHERS THEN
1644       RETURN FND_API.G_MISS_NUM;
1645 
1646 END Get_Reference;
1647 
1648 FUNCTION Get_Repetitive_Schedule
1649 RETURN NUMBER
1650 IS
1651 BEGIN
1652 
1653   IF g_ShopFloorMove_rec.repetitive_schedule_id IS NOT NULL THEN
1654       RETURN g_ShopFloorMove_rec.repetitive_schedule_id;
1655    END IF;
1656 
1657    IF g_OSP_rec.repetitive_schedule_id IS NOT NULL THEN
1658       RETURN g_OSP_rec.repetitive_schedule_id;
1659    END IF;
1660 
1661    RETURN NULL;
1662 
1663 EXCEPTION
1664    WHEN OTHERS THEN
1665       RETURN FND_API.G_MISS_NUM;
1666 
1667 END Get_Repetitive_Schedule;
1668 
1669 FUNCTION Get_Scrap_Account
1670 RETURN NUMBER
1671 IS
1672 BEGIN
1673 
1674   IF g_ShopFloorMove_rec.scrap_account_id IS NOT NULL THEN
1675       RETURN g_ShopFloorMove_rec.scrap_account_id;
1676    END IF;
1677 
1678    RETURN NULL;
1679 
1680 EXCEPTION
1681    WHEN OTHERS THEN
1682       RETURN FND_API.G_MISS_NUM;
1683 
1684 END Get_Scrap_Account;
1685 
1686 FUNCTION Get_Source
1687 RETURN VARCHAR2
1688 IS
1689 BEGIN
1690 
1691    IF g_ShopFloorMove_rec.source_code IS NOT NULL THEN
1692       RETURN g_ShopFloorMove_rec.source_code;
1693    END IF;
1694 
1695    IF g_OSP_rec.source_code IS NOT NULL THEN
1696       RETURN g_OSP_rec.source_code;
1697    END IF;
1698 
1699    RETURN NULL;
1700 
1701 EXCEPTION
1702    WHEN OTHERS THEN
1703       RETURN FND_API.G_MISS_CHAR;
1704 
1705 END Get_Source;
1706 
1707 FUNCTION Get_Source_Line
1708 RETURN NUMBER
1709 IS
1710 BEGIN
1711 
1712   IF g_ShopFloorMove_rec.source_line_id IS NOT NULL THEN
1713       RETURN g_ShopFloorMove_rec.source_line_id;
1714    END IF;
1715 
1716    IF g_OSP_rec.source_line_id IS NOT NULL THEN
1717       RETURN g_OSP_rec.source_line_id;
1718    END IF;
1719 
1720    RETURN NULL;
1721 
1722 EXCEPTION
1723    WHEN OTHERS THEN
1724       RETURN FND_API.G_MISS_NUM;
1725 
1726 END Get_Source_Line;
1727 
1728 FUNCTION Get_To_Department_Code
1729 RETURN VARCHAR2
1730 IS
1731 BEGIN
1732 
1733    IF g_ShopFloorMove_rec.to_department_code IS NOT NULL THEN
1734       RETURN g_ShopFloorMove_rec.to_department_code;
1735    END IF;
1736 
1737 /* IF g_OSP_rec.department_code IS NOT NULL THEN
1738       RETURN g_OSP_rec.department_code;
1739    END IF;
1740 */
1741 
1742    IF g_ShopFloorMove_rec.to_department_id IS NOT NULL then
1743 
1744          SELECT department_code
1745            INTO g_ShopFloorMove_rec.to_department_code
1746            FROM bom_departments
1747            WHERE department_id = g_ShopFloorMove_rec.to_department_id;
1748 
1749            RETURN g_ShopFloorMove_rec.to_department_code;
1750    END IF;
1751 
1752    RETURN NULL;
1753 
1754 EXCEPTION
1755    WHEN OTHERS THEN
1756       RETURN FND_API.G_MISS_CHAR;
1757 
1758 END Get_To_Department_Code;
1759 
1760 FUNCTION Get_To_Department_Id
1761 RETURN NUMBER
1762 IS
1763 BEGIN
1764 
1765   IF g_ShopFloorMove_rec.to_department_id IS NOT NULL THEN
1766       RETURN g_ShopFloorMove_rec.to_department_id;
1767    END IF;
1768 
1769    IF g_ShopFloorMove_rec.source_code = 'RCV' THEN
1770       IF g_osp_mov_details.to_department_id IS NOT NULL THEN
1771          RETURN g_osp_mov_details.to_department_id;
1772       ELSE
1773          get_osp_move_details();
1774          RETURN g_osp_mov_details.to_department_id;
1775       END IF;
1776    END IF;
1777 
1778    IF g_ShopFloorMove_rec.wip_entity_id IS NOT NULL
1779      AND g_ShopFloorMove_rec.to_operation_seq_num IS NOT NULL
1780      AND g_ShopFloorMove_rec.organization_id IS NOT NULL THEN
1781 
1782       SELECT department_id
1783         INTO g_ShopFloorMove_rec.to_department_id
1784         FROM wip_operations
1785         WHERE wip_entity_id = g_ShopFloorMove_rec.wip_entity_id
1786         AND   operation_seq_num = g_ShopFloorMove_rec.to_operation_seq_num
1787         AND   organization_id = g_ShopFloorMove_rec.organization_id
1788         AND   (repetitive_schedule_id IS NULL
1789                OR repetitive_schedule_id = g_ShopFloorMove_rec.repetitive_schedule_id);
1790 
1791         RETURN g_ShopFloorMove_rec.to_department_id;
1792    END IF;
1793 
1794    RETURN NULL;
1795 
1796 EXCEPTION
1797    WHEN OTHERS THEN
1798       RETURN FND_API.G_MISS_NUM;
1799 
1800 END Get_To_Department_Id;
1801 
1802 FUNCTION Get_To_Intraop_Step_Type
1803 RETURN NUMBER
1804 IS
1805 BEGIN
1806 
1807    IF g_ShopFloorMove_rec.to_intraop_step_type IS NOT NULL THEN
1808       RETURN g_ShopFloorMove_rec.to_intraop_step_type;
1809    END IF;
1810 
1811    IF g_ShopFloorMove_rec.source_code = 'RCV' THEN
1812       IF g_osp_mov_details.to_intraop_step_type IS NOT NULL THEN
1813          RETURN g_osp_mov_details.to_intraop_step_type;
1814       ELSE
1815          get_osp_move_details();
1816          RETURN g_osp_mov_details.to_intraop_step_type;
1817       END IF;
1818    END IF;
1819 
1820    RETURN NULL;
1821 
1822 EXCEPTION
1823    WHEN OTHERS THEN
1824       RETURN FND_API.G_MISS_NUM;
1825 
1826 END Get_To_Intraop_Step_Type;
1827 
1828 FUNCTION Get_To_Operation
1829 RETURN VARCHAR2
1830 IS
1831 BEGIN
1832 
1833    IF g_ShopFloorMove_rec.to_operation_code IS NOT NULL THEN
1834       RETURN g_ShopFloorMove_rec.to_operation_code;
1835    END IF;
1836 
1837    RETURN NULL;
1838 
1839 EXCEPTION
1840    WHEN OTHERS THEN
1841       RETURN FND_API.G_MISS_CHAR;
1842 
1843 END Get_To_Operation;
1844 
1845 FUNCTION Get_To_Operation_Seq_Num
1846 RETURN NUMBER
1847 IS
1848 BEGIN
1849 
1850    IF g_ShopFloorMove_rec.to_operation_seq_num IS NOT NULL THEN
1851       RETURN g_ShopFloorMove_rec.to_operation_seq_num;
1852    END IF;
1853 
1854    IF g_ShopFloorMove_rec.source_code = 'RCV' THEN
1855       IF g_osp_mov_details.to_operation_seq_num IS NOT NULL THEN
1856          RETURN g_osp_mov_details.to_operation_seq_num;
1857       ELSE
1858          get_osp_move_details();
1859          RETURN g_osp_mov_details.to_operation_seq_num;
1860       END IF;
1861    END IF;
1862 
1863    RETURN NULL;
1864 
1865 EXCEPTION
1866    WHEN OTHERS THEN
1867       RETURN FND_API.G_MISS_NUM;
1868 
1869 END Get_To_Operation_Seq_Num;
1870 
1871 FUNCTION Get_Transaction_Date
1872 RETURN DATE
1873 IS
1874 BEGIN
1875 
1876     IF g_ShopFloorMove_rec.transaction_date IS NOT NULL THEN
1877       RETURN g_ShopFloorMove_rec.transaction_date;
1878    END IF;
1879 
1880    IF g_OSP_rec.transaction_date IS NOT NULL THEN
1881       RETURN g_OSP_rec.transaction_date;
1882    END IF;
1883 
1884    RETURN NULL;
1885 
1886 EXCEPTION
1887    WHEN OTHERS THEN
1888       RETURN FND_API.G_MISS_DATE;
1889 
1890 END Get_Transaction_Date;
1891 
1892 FUNCTION Get_Transaction
1893 RETURN NUMBER
1894 IS
1895 BEGIN
1896 
1897    IF g_ShopFloorMove_rec.transaction_id IS NOT NULL THEN
1898       RETURN g_ShopFloorMove_rec.transaction_id;
1899    END IF;
1900 
1901    RETURN NULL;
1902 
1903 EXCEPTION
1904    WHEN OTHERS THEN
1905       RETURN FND_API.G_MISS_NUM;
1906 
1907 END Get_Transaction;
1908 
1909 FUNCTION Get_Transaction_Quantity
1910 RETURN NUMBER
1911 IS
1912 BEGIN
1913 
1914    IF g_ShopFloorMove_rec.transaction_quantity IS NOT NULL THEN
1915       RETURN g_ShopFloorMove_rec.transaction_quantity;
1916    END IF;
1917 
1918    IF g_ShopFloorMove_rec.source_code = 'RCV' THEN
1919       IF g_osp_mov_details.transaction_quantity IS NOT NULL THEN
1920          RETURN g_osp_mov_details.transaction_quantity;
1921       ELSE
1922          get_osp_move_details();
1923          RETURN g_osp_mov_details.transaction_quantity;
1924       END IF;
1925    END IF;
1926 
1927    RETURN NULL;
1928 
1929 EXCEPTION
1930    WHEN OTHERS THEN
1931       RETURN FND_API.G_MISS_NUM;
1932 
1933 END Get_Transaction_Quantity;
1934 
1935 FUNCTION Get_Transaction_Type
1936 RETURN NUMBER
1937 IS
1938 BEGIN
1939 
1940    IF g_ShopFloorMove_rec.transaction_type IS NOT NULL THEN
1941       RETURN g_ShopFloorMove_rec.transaction_type;
1942    END IF;
1943 
1944    IF g_ShopFloorMove_rec.source_code = 'RCV' THEN
1945       IF g_osp_mov_details.transaction_type IS NOT NULL THEN
1946          RETURN g_osp_mov_details.transaction_type;
1947       ELSE
1948          get_osp_move_details();
1949          RETURN g_osp_mov_details.transaction_type;
1950       END IF;
1951    END IF;
1952 
1953    RETURN NULL;
1954 
1955 EXCEPTION
1956    WHEN OTHERS THEN
1957       RETURN FND_API.G_MISS_NUM;
1958 
1959 END Get_Transaction_Type;
1960 
1961 FUNCTION Get_Transaction_Uom
1962 RETURN VARCHAR2
1963 IS
1964 BEGIN
1965 
1966    IF g_ShopFloorMove_rec.transaction_uom IS NOT NULL THEN
1967       RETURN g_ShopFloorMove_rec.transaction_uom;
1968    END IF;
1969 
1970    IF g_ShopFloorMove_rec.source_code = 'RCV' THEN
1971       RETURN g_ShopFloorMove_rec.primary_uom;
1972    END IF;
1973 
1974    RETURN NULL;
1975 
1976 EXCEPTION
1977    WHEN OTHERS THEN
1978       RETURN FND_API.G_MISS_NUM;
1979 
1980 END Get_Transaction_Uom;
1981 
1982 FUNCTION Get_Wip_Entity
1983 RETURN NUMBER
1984 IS
1985 BEGIN
1986 
1987    IF g_ShopFloorMove_rec.wip_entity_id IS NOT NULL THEN
1988       RETURN g_ShopFloorMove_rec.wip_entity_id;
1989    END IF;
1990 
1991    IF g_OSP_rec.wip_entity_id IS NOT NULL THEN
1992       RETURN g_OSP_rec.wip_entity_id;
1993    END IF;
1994 
1995    RETURN NULL;
1996 
1997 EXCEPTION
1998    WHEN OTHERS THEN
1999       RETURN FND_API.G_MISS_NUM;
2000 
2001 END Get_Wip_Entity;
2002 
2003 FUNCTION Get_Wip_Entity_Name
2004 RETURN VARCHAR2
2005 IS
2006 BEGIN
2007 
2008      IF g_ShopFloorMove_rec.wip_entity_name IS NOT NULL THEN
2009       RETURN g_ShopFloorMove_rec.wip_entity_name;
2010    END IF;
2011 
2012    IF g_OSP_rec.wip_entity_name IS NOT NULL THEN
2013       RETURN g_OSP_rec.wip_entity_name;
2014    END IF;
2015 
2016    IF g_Wip_Entities_rec.wip_entity_name IS NOT NULL THEN
2017       RETURN g_Wip_Entities_rec.wip_entity_name;
2018    END IF;
2019 
2020    IF g_ShopFloorMove_rec.wip_entity_id IS NOT NULL THEN
2021       get_we_attr();
2022       RETURN g_ShopFloorMove_rec.wip_entity_name;
2023    END IF;
2024 
2025    RETURN NULL;
2026 
2027 EXCEPTION
2028    WHEN OTHERS THEN
2029       RETURN FND_API.G_MISS_CHAR;
2030 
2031 END Get_Wip_Entity_Name;
2032 
2033 PROCEDURE Get_Flex_Shopfloormove
2034 IS
2035 BEGIN
2036 
2037     --  In the future call Flex APIs for defaults
2038 
2039     IF g_ShopFloorMove_rec.attribute1 = FND_API.G_MISS_CHAR THEN
2040         g_ShopFloorMove_rec.attribute1 := NULL;
2041     END IF;
2042 
2043     IF g_ShopFloorMove_rec.attribute10 = FND_API.G_MISS_CHAR THEN
2044         g_ShopFloorMove_rec.attribute10 := NULL;
2045     END IF;
2046 
2047     IF g_ShopFloorMove_rec.attribute11 = FND_API.G_MISS_CHAR THEN
2048         g_ShopFloorMove_rec.attribute11 := NULL;
2049     END IF;
2050 
2051     IF g_ShopFloorMove_rec.attribute12 = FND_API.G_MISS_CHAR THEN
2052         g_ShopFloorMove_rec.attribute12 := NULL;
2053     END IF;
2054 
2055     IF g_ShopFloorMove_rec.attribute13 = FND_API.G_MISS_CHAR THEN
2056         g_ShopFloorMove_rec.attribute13 := NULL;
2057     END IF;
2058 
2059     IF g_ShopFloorMove_rec.attribute14 = FND_API.G_MISS_CHAR THEN
2060         g_ShopFloorMove_rec.attribute14 := NULL;
2061     END IF;
2062 
2063     IF g_ShopFloorMove_rec.attribute15 = FND_API.G_MISS_CHAR THEN
2064         g_ShopFloorMove_rec.attribute15 := NULL;
2065     END IF;
2066 
2067     IF g_ShopFloorMove_rec.attribute2 = FND_API.G_MISS_CHAR THEN
2068         g_ShopFloorMove_rec.attribute2 := NULL;
2069     END IF;
2070 
2071     IF g_ShopFloorMove_rec.attribute3 = FND_API.G_MISS_CHAR THEN
2072         g_ShopFloorMove_rec.attribute3 := NULL;
2073     END IF;
2074 
2075     IF g_ShopFloorMove_rec.attribute4 = FND_API.G_MISS_CHAR THEN
2076         g_ShopFloorMove_rec.attribute4 := NULL;
2077     END IF;
2078 
2079     IF g_ShopFloorMove_rec.attribute5 = FND_API.G_MISS_CHAR THEN
2080         g_ShopFloorMove_rec.attribute5 := NULL;
2081     END IF;
2082 
2083     IF g_ShopFloorMove_rec.attribute6 = FND_API.G_MISS_CHAR THEN
2084         g_ShopFloorMove_rec.attribute6 := NULL;
2085     END IF;
2086 
2087     IF g_ShopFloorMove_rec.attribute7 = FND_API.G_MISS_CHAR THEN
2088         g_ShopFloorMove_rec.attribute7 := NULL;
2089     END IF;
2090 
2091     IF g_ShopFloorMove_rec.attribute8 = FND_API.G_MISS_CHAR THEN
2092         g_ShopFloorMove_rec.attribute8 := NULL;
2093     END IF;
2094 
2095     IF g_ShopFloorMove_rec.attribute9 = FND_API.G_MISS_CHAR THEN
2096         g_ShopFloorMove_rec.attribute9 := NULL;
2097     END IF;
2098 
2099     IF g_ShopFloorMove_rec.attribute_category = FND_API.G_MISS_CHAR THEN
2100         g_ShopFloorMove_rec.attribute_category := NULL;
2101     END IF;
2102 
2103 END Get_Flex_Shopfloormove;
2104 
2105 --  Procedure Attributes
2106 PROCEDURE Attributes
2107 (   p_ShopFloorMove_rec             IN  WIP_Transaction_PUB.Shopfloormove_Rec_Type
2108 ,   p_iteration                     IN  NUMBER := NULL
2109 ,   x_ShopFloorMove_rec            IN OUT NOCOPY WIP_Transaction_PUB.Shopfloormove_Rec_Type
2110 ,   p_OSP_rec                       IN  WIP_Transaction_PUB.Res_Rec_Type
2111 )
2112 IS
2113 BEGIN
2114 
2115     --  Check number of iterations.
2116 
2117     IF nvl(p_iteration,1) > WIP_GLOBALS.G_MAX_DEF_ITERATIONS THEN
2118 
2119         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2120         THEN
2121 
2122             FND_MESSAGE.SET_NAME('WIP','WIP_DEF_MAX_ITERATION');
2123             FND_MSG_PUB.Add;
2124 
2125         END IF;
2126 
2127         RAISE FND_API.G_EXC_ERROR;
2128 
2129     END IF;
2130 
2131     --  Initialize global variables
2132 
2133     g_ShopFloorMove_rec := WIP_Transaction_PUB.G_MISS_SHOPFLOORMOVE_REC;
2134     g_OSP_rec := WIP_Transaction_PUB.G_MISS_RES_REC;
2135     g_Wip_Entities_rec := WIP_Work_Order_PUB.G_MISS_WIP_ENTITIES_REC;
2136     g_osp_mov_details := WIP_Transaction_PUB.G_MISS_OSP_MOVE_DET_REC;
2137 
2138     g_ShopFloorMove_rec := p_ShopFloorMove_rec;
2139     g_OSP_rec := p_OSP_rec;
2140 
2141     --  Default missing attributes.
2142     g_ShopFloorMove_rec.source_code := Get_Source;
2143     g_ShopFloorMove_rec.source_line_id := Get_Source_Line;
2144     g_ShopFloorMove_rec.acct_period_id := Get_Acct_Period;
2145     g_ShopFloorMove_rec.created_by_name := Get_Created_By_Name;
2146     g_ShopFloorMove_rec.created_by := Get_Created_By;
2147     g_ShopFloorMove_rec.last_updated_by_name := Get_Last_Updated_By_Name;
2148     g_ShopFloorMove_rec.last_updated_by := Get_Last_Updated_By;
2149     g_ShopFloorMove_rec.last_update_login := Get_Last_Update_Login;
2150     g_ShopFloorMove_rec.request_id := Get_Request_Id;
2151     g_ShopFloorMove_rec.program_id := Get_Program_Id;
2152     g_ShopFloorMove_rec.program_application_id := Get_Program_Application_Id;
2153     g_ShopFloorMove_rec.program_update_date := Get_Program_Update_Date;
2154     g_ShopFloorMove_rec.organization_id := Get_Organization_Id;
2155     g_ShopFloorMove_rec.organization_code := Get_Organization_Code;
2156     g_ShopFloorMove_rec.primary_item_id := Get_Primary_Item;
2157     g_ShopFloorMove_rec.primary_uom := Get_Primary_Uom;
2158     g_ShopFloorMove_rec.transaction_uom := Get_Transaction_Uom;
2159     g_ShopFloorMove_rec.reason_id := Get_Reason;
2160     g_ShopFloorMove_rec.reference := Get_Reference;
2161     g_ShopFloorMove_rec.repetitive_schedule_id := Get_Repetitive_Schedule;
2162     g_ShopFloorMove_rec.line_id := Get_Line_Id;
2163     g_ShopFloorMove_rec.transaction_date := Get_Transaction_Date;
2164     g_ShopFloorMove_rec.wip_entity_id := Get_Wip_Entity;
2165     g_ShopFloorMove_rec.wip_entity_name := Get_Wip_Entity_Name;
2166     g_ShopFloorMove_rec.entity_type := Get_Entity_Type;
2167     g_ShopFloorMove_rec.fm_department_id := Get_Fm_Department_Id;
2168     g_ShopFloorMove_rec.fm_department_code := Get_Fm_Department_Code;
2169     g_ShopFloorMove_rec.fm_intraop_step_type := Get_Fm_Intraop_Step_Type;
2170     g_ShopFloorMove_rec.fm_operation_seq_num := Get_Fm_Operation_Seq_Num;
2171     g_ShopFloorMove_rec.fm_operation_code := Get_Fm_Operation;
2172     g_ShopFloorMove_rec.to_department_id := Get_To_Department_Id;
2173     g_ShopFloorMove_rec.to_department_code := Get_To_Department_Code;
2174     g_ShopFloorMove_rec.to_intraop_step_type := Get_To_Intraop_Step_Type;
2175     g_ShopFloorMove_rec.to_operation_seq_num := Get_To_Operation_Seq_Num;
2176     g_ShopFloorMove_rec.to_operation_code := Get_To_Operation;
2177     g_ShopFloorMove_rec.primary_quantity := Get_Primary_Quantity;
2178     g_ShopFloorMove_rec.transaction_quantity := Get_Transaction_Quantity;
2179     g_ShopFloorMove_rec.transaction_type := Get_Transaction_Type;
2180     g_ShopFloorMove_rec.group_id := Get_Group;
2181     g_ShopFloorMove_rec.kanban_card_id := Get_Kanban_Card;
2182     g_ShopFloorMove_rec.line_code := Get_Line_Code;
2183     g_ShopFloorMove_rec.overcpl_primary_qty := Get_Overcpl_Primary_Qty;
2184     g_ShopFloorMove_rec.overcpl_transaction_id := Get_Overcpl_Transaction;
2185     g_ShopFloorMove_rec.overcpl_transaction_qty := Get_Overcpl_Transaction_Qty;
2186     g_ShopFloorMove_rec.process_phase := Get_Process_Phase;
2187     g_ShopFloorMove_rec.process_status := Get_Process_Status;
2188     g_ShopFloorMove_rec.qa_collection_id := Get_Qa_Collection;
2189     g_ShopFloorMove_rec.reason_name := Get_Reason_Name;
2190     g_ShopFloorMove_rec.scrap_account_id := Get_Scrap_Account;
2191     g_ShopFloorMove_rec.transaction_id := Get_Transaction;
2192 
2193     IF g_ShopFloorMove_rec.creation_date IS NULL THEN
2194         g_ShopFloorMove_rec.creation_date := Sysdate;
2195     END IF;
2196 
2197     IF g_ShopFloorMove_rec.last_update_date IS NULL THEN
2198         g_ShopFloorMove_rec.last_update_date := Sysdate;
2199     END IF;
2200 
2201         x_ShopFloorMove_rec := g_ShopFloorMove_rec;
2202 
2203 END Attributes;
2204 
2205 END WIP_Default_Shopfloormove;