DBA Data[Home] [Help]

PACKAGE BODY: APPS.WIP_DEFAULT_SHOPFLOORMOVE

Source


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