[Home] [Help]
PACKAGE BODY: APPS.MRP_FLOW_SCHEDULE_UTIL
Source
1 PACKAGE BODY MRP_Flow_Schedule_Util AS
2 /* $Header: MRPUSCNB.pls 120.9.12000000.2 2007/07/26 01:44:43 ksuleman ship $ */
3
4 -- Global constant holding the package name
5
6 G_PKG_NAME CONSTANT VARCHAR2(30) := 'MRP_Flow_Schedule_Util';
7
8 --
9 -- Local Types
10 --
11 TYPE t_line_rec IS RECORD (
12 line_id NUMBER,
13 order_quantity NUMBER,
14 fs_quantity NUMBER,
15 needed_quantity NUMBER,
16 distributed_quantity NUMBER,
17 parent_line_id NUMBER,
18 first_child NUMBER,
19 last_child NUMBER,
20 previous_brother NUMBER, /** Bug 2536351 **/
21 next_brother NUMBER);
22
23 TYPE t_line_tbl IS TABLE OF t_line_rec
24 INDEX BY BINARY_INTEGER;
25
26 l_lines t_line_tbl;
27
28 -- Procedure Clear_Dependent_Attr
29
30 PROCEDURE Clear_Dependent_Attr
31 ( p_attr_id IN NUMBER DEFAULT NULL
32 , p_flow_schedule_rec IN MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
33 , p_old_flow_schedule_rec IN MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
34 , x_flow_schedule_rec IN OUT NOCOPY MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
35 )
36 IS
37 BEGIN
38
39 -- Load out record
40
41 x_flow_schedule_rec := p_flow_schedule_rec;
42
43 -- If attr_id is missing compare old and new records and for
44 -- every changed attribute clear its dependent fields.
45
46 -- Commenting for pl-sql coding standards and instead check if p_attr_id is null
47 -- IF p_attr_id = FND_API.G_MISS_NUM THEN
48 IF p_attr_id IS NULL THEN
49
50 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.alternate_bom_designator,p_old_flow_schedule_rec.alternate_bom_designator)
51 THEN
52 x_flow_schedule_rec.bom_revision := FND_API.G_MISS_CHAR;
53 x_flow_schedule_rec.bom_revision_date := FND_API.G_MISS_DATE;
54 END IF;
55
56 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.alternate_routing_desig,p_old_flow_schedule_rec.alternate_routing_desig)
57 THEN
58 x_flow_schedule_rec.routing_revision := FND_API.G_MISS_CHAR;
59 x_flow_schedule_rec.routing_revision_date := FND_API.G_MISS_DATE;
60 x_flow_schedule_rec.completion_subinventory := FND_API.G_MISS_CHAR;
61 x_flow_schedule_rec.completion_locator_id := FND_API.G_MISS_NUM;
62 END IF;
63
64 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.bom_revision,p_old_flow_schedule_rec.bom_revision)
65 THEN
66 x_flow_schedule_rec.bom_revision_date := FND_API.G_MISS_DATE;
67 END IF;
68
69 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.bom_revision_date,p_old_flow_schedule_rec.bom_revision_date)
70 THEN
71 NULL;
72 END IF;
73
74 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.build_sequence,p_old_flow_schedule_rec.build_sequence)
75 THEN
76 NULL;
77 END IF;
78
79 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.class_code,p_old_flow_schedule_rec.class_code)
80 THEN
81 x_flow_schedule_rec.material_account := FND_API.G_MISS_NUM;
82 x_flow_schedule_rec.material_overhead_account := FND_API.G_MISS_NUM;
83 x_flow_schedule_rec.resource_account := FND_API.G_MISS_NUM;
84 x_flow_schedule_rec.outside_processing_acct := FND_API.G_MISS_NUM;
85 x_flow_schedule_rec.material_variance_account := FND_API.G_MISS_NUM;
86 x_flow_schedule_rec.resource_variance_account := FND_API.G_MISS_NUM;
87 x_flow_schedule_rec.outside_proc_var_acct := FND_API.G_MISS_NUM;
88 x_flow_schedule_rec.std_cost_adjustment_acct := FND_API.G_MISS_NUM;
89 x_flow_schedule_rec.overhead_account := FND_API.G_MISS_NUM;
90 x_flow_schedule_rec.overhead_variance_account := FND_API.G_MISS_NUM;
91 END IF;
92
93 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.completion_locator_id,p_old_flow_schedule_rec.completion_locator_id)
94 THEN
95 NULL;
96 END IF;
97
98 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.completion_subinventory,p_old_flow_schedule_rec.completion_subinventory)
99 THEN
100 x_flow_schedule_rec.completion_locator_id := FND_API.G_MISS_NUM;
101 END IF;
102
103 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.created_by,p_old_flow_schedule_rec.created_by)
104 THEN
105 NULL;
106 END IF;
107
108 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.creation_date,p_old_flow_schedule_rec.creation_date)
109 THEN
110 NULL;
111 END IF;
112
113 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.date_closed,p_old_flow_schedule_rec.date_closed)
114 THEN
115 NULL;
116 END IF;
117
118 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.demand_class,p_old_flow_schedule_rec.demand_class)
119 THEN
120 NULL;
121 END IF;
122
123 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.demand_source_delivery,p_old_flow_schedule_rec.demand_source_delivery)
124 THEN
125 NULL;
126 END IF;
127
128 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.demand_source_header_id,p_old_flow_schedule_rec.demand_source_header_id)
129 THEN
130 x_flow_schedule_rec.demand_source_line := FND_API.G_MISS_CHAR;
131 x_flow_schedule_rec.demand_source_delivery := FND_API.G_MISS_CHAR;
132 END IF;
133
134 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.demand_source_line,p_old_flow_schedule_rec.demand_source_line)
135 THEN
136 NULL;
137 END IF;
138
139 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.demand_source_type,p_old_flow_schedule_rec.demand_source_type)
140 THEN
141 NULL;
142 END IF;
143
144 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.last_updated_by,p_old_flow_schedule_rec.last_updated_by)
145 THEN
146 NULL;
147 END IF;
148
149 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.last_update_date,p_old_flow_schedule_rec.last_update_date)
150 THEN
151 NULL;
152 END IF;
153
154 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.last_update_login,p_old_flow_schedule_rec.last_update_login)
155 THEN
156 NULL;
157 END IF;
158
159 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.line_id,p_old_flow_schedule_rec.line_id)
160 THEN
161 x_flow_schedule_rec.alternate_routing_desig := FND_API.G_MISS_CHAR;
162 END IF;
163
164 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.material_account,p_old_flow_schedule_rec.material_account)
165 THEN
166 NULL;
167 END IF;
168
169 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.material_overhead_account,p_old_flow_schedule_rec.material_overhead_account)
170 THEN
171 NULL;
172 END IF;
173
174 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.material_variance_account,p_old_flow_schedule_rec.material_variance_account)
175 THEN
176 NULL;
177 END IF;
178
179 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.mps_net_quantity,p_old_flow_schedule_rec.mps_net_quantity)
180 THEN
181 NULL;
182 END IF;
183
184 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.mps_scheduled_comp_date,p_old_flow_schedule_rec.mps_scheduled_comp_date)
185 THEN
186 NULL;
187 END IF;
188
189 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.organization_id,p_old_flow_schedule_rec.organization_id)
190 THEN
191 x_flow_schedule_rec.primary_item_id := FND_API.G_MISS_NUM;
192 x_flow_schedule_rec.completion_subinventory := FND_API.G_MISS_CHAR;
193 x_flow_schedule_rec.completion_locator_id := FND_API.G_MISS_NUM;
194 x_flow_schedule_rec.demand_source_header_id := FND_API.G_MISS_NUM;
195 x_flow_schedule_rec.demand_source_type := FND_API.G_MISS_NUM;
196 x_flow_schedule_rec.demand_source_line := FND_API.G_MISS_CHAR;
197 x_flow_schedule_rec.demand_source_delivery := FND_API.G_MISS_CHAR;
198 x_flow_schedule_rec.alternate_bom_designator := FND_API.G_MISS_CHAR;
199 x_flow_schedule_rec.bom_revision := FND_API.G_MISS_CHAR;
200 x_flow_schedule_rec.bom_revision_date := FND_API.G_MISS_DATE;
201 x_flow_schedule_rec.alternate_routing_desig := FND_API.G_MISS_CHAR;
202 x_flow_schedule_rec.routing_revision := FND_API.G_MISS_CHAR;
203 x_flow_schedule_rec.routing_revision_date := FND_API.G_MISS_DATE;
204 x_flow_schedule_rec.line_id := FND_API.G_MISS_NUM;
205 x_flow_schedule_rec.class_code := FND_API.G_MISS_CHAR;
206 x_flow_schedule_rec.schedule_group_id := FND_API.G_MISS_NUM;
207 x_flow_schedule_rec.material_account := FND_API.G_MISS_NUM;
208 x_flow_schedule_rec.material_overhead_account := FND_API.G_MISS_NUM;
209 x_flow_schedule_rec.resource_account := FND_API.G_MISS_NUM;
210 x_flow_schedule_rec.outside_processing_acct := FND_API.G_MISS_NUM;
211 x_flow_schedule_rec.material_variance_account := FND_API.G_MISS_NUM;
212 x_flow_schedule_rec.resource_variance_account := FND_API.G_MISS_NUM;
213 x_flow_schedule_rec.outside_proc_var_acct := FND_API.G_MISS_NUM;
214 x_flow_schedule_rec.std_cost_adjustment_acct := FND_API.G_MISS_NUM;
215 x_flow_schedule_rec.overhead_account := FND_API.G_MISS_NUM;
216 x_flow_schedule_rec.overhead_variance_account := FND_API.G_MISS_NUM;
217 END IF;
218
219 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.outside_processing_acct,p_old_flow_schedule_rec.outside_processing_acct)
220 THEN
221 NULL;
222 END IF;
223
224 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.outside_proc_var_acct,p_old_flow_schedule_rec.outside_proc_var_acct)
225 THEN
226 NULL;
227 END IF;
228
229 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.overhead_account,p_old_flow_schedule_rec.overhead_account)
230 THEN
231 NULL;
232 END IF;
233
234 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.overhead_variance_account,p_old_flow_schedule_rec.overhead_variance_account)
235 THEN
236 NULL;
237 END IF;
238
239 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.planned_quantity,p_old_flow_schedule_rec.planned_quantity)
240 THEN
241 x_flow_schedule_rec.scheduled_start_date := FND_API.G_MISS_DATE;
242 END IF;
243
244 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.primary_item_id,p_old_flow_schedule_rec.primary_item_id)
245 THEN
246 x_flow_schedule_rec.completion_subinventory := FND_API.G_MISS_CHAR;
247 x_flow_schedule_rec.completion_locator_id := FND_API.G_MISS_NUM;
248 x_flow_schedule_rec.demand_source_header_id := FND_API.G_MISS_NUM;
249 x_flow_schedule_rec.demand_source_type := FND_API.G_MISS_NUM;
250 x_flow_schedule_rec.demand_source_line := FND_API.G_MISS_CHAR;
251 x_flow_schedule_rec.demand_source_delivery := FND_API.G_MISS_CHAR;
252 x_flow_schedule_rec.alternate_bom_designator := FND_API.G_MISS_CHAR;
253 x_flow_schedule_rec.bom_revision := FND_API.G_MISS_CHAR;
254 x_flow_schedule_rec.bom_revision_date := FND_API.G_MISS_DATE;
255 x_flow_schedule_rec.alternate_routing_desig := FND_API.G_MISS_CHAR;
256 x_flow_schedule_rec.routing_revision := FND_API.G_MISS_CHAR;
257 x_flow_schedule_rec.routing_revision_date := FND_API.G_MISS_DATE;
258 x_flow_schedule_rec.class_code := FND_API.G_MISS_CHAR;
259 x_flow_schedule_rec.scheduled_start_date := FND_API.G_MISS_DATE;
260 x_flow_schedule_rec.material_account := FND_API.G_MISS_NUM;
261 x_flow_schedule_rec.material_overhead_account := FND_API.G_MISS_NUM;
262 x_flow_schedule_rec.resource_account := FND_API.G_MISS_NUM;
263 x_flow_schedule_rec.outside_processing_acct := FND_API.G_MISS_NUM;
264 x_flow_schedule_rec.material_variance_account := FND_API.G_MISS_NUM;
265 x_flow_schedule_rec.resource_variance_account := FND_API.G_MISS_NUM;
266 x_flow_schedule_rec.outside_proc_var_acct := FND_API.G_MISS_NUM;
267 x_flow_schedule_rec.std_cost_adjustment_acct := FND_API.G_MISS_NUM;
268 x_flow_schedule_rec.overhead_account := FND_API.G_MISS_NUM;
269 x_flow_schedule_rec.overhead_variance_account := FND_API.G_MISS_NUM;
270 END IF;
271
272 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.program_application_id,p_old_flow_schedule_rec.program_application_id)
273 THEN
274 NULL;
275 END IF;
276
277 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.program_id,p_old_flow_schedule_rec.program_id)
278 THEN
279 NULL;
280 END IF;
281
282 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.program_update_date,p_old_flow_schedule_rec.program_update_date)
283 THEN
284 NULL;
285 END IF;
286
287 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.project_id,p_old_flow_schedule_rec.project_id)
288 THEN
289 x_flow_schedule_rec.task_id := FND_API.G_MISS_NUM;
290 x_flow_schedule_rec.class_code := FND_API.G_MISS_CHAR;
291 x_flow_schedule_rec.material_account := FND_API.G_MISS_NUM;
292 x_flow_schedule_rec.material_overhead_account := FND_API.G_MISS_NUM;
293 x_flow_schedule_rec.resource_account := FND_API.G_MISS_NUM;
294 x_flow_schedule_rec.outside_processing_acct := FND_API.G_MISS_NUM;
295 x_flow_schedule_rec.material_variance_account := FND_API.G_MISS_NUM;
296 x_flow_schedule_rec.resource_variance_account := FND_API.G_MISS_NUM;
297 x_flow_schedule_rec.outside_proc_var_acct := FND_API.G_MISS_NUM;
298 x_flow_schedule_rec.std_cost_adjustment_acct := FND_API.G_MISS_NUM;
299 x_flow_schedule_rec.overhead_account := FND_API.G_MISS_NUM;
300 x_flow_schedule_rec.overhead_variance_account := FND_API.G_MISS_NUM;
301 END IF;
302
303 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.quantity_completed,p_old_flow_schedule_rec.quantity_completed)
304 THEN
305 NULL;
306 END IF;
307
308 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.request_id,p_old_flow_schedule_rec.request_id)
309 THEN
310 NULL;
311 END IF;
312
313 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.resource_account,p_old_flow_schedule_rec.resource_account)
314 THEN
315 NULL;
316 END IF;
317
318 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.resource_variance_account,p_old_flow_schedule_rec.resource_variance_account)
319 THEN
320 NULL;
321 END IF;
322
323 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.routing_revision,p_old_flow_schedule_rec.routing_revision)
324 THEN
325 x_flow_schedule_rec.routing_revision_date := FND_API.G_MISS_DATE;
326 END IF;
327
328 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.routing_revision_date,p_old_flow_schedule_rec.routing_revision_date)
329 THEN
330 NULL;
331 END IF;
332
333 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.scheduled_completion_date,p_old_flow_schedule_rec.scheduled_completion_date)
334 THEN
335 x_flow_schedule_rec.scheduled_start_date := FND_API.G_MISS_DATE;
336 x_flow_schedule_rec.bom_revision := FND_API.G_MISS_CHAR;
337 x_flow_schedule_rec.bom_revision_date := FND_API.G_MISS_DATE;
338 x_flow_schedule_rec.routing_revision := FND_API.G_MISS_CHAR;
339 x_flow_schedule_rec.routing_revision_date := FND_API.G_MISS_DATE;
340 END IF;
341
342 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.scheduled_flag,p_old_flow_schedule_rec.scheduled_flag)
343 THEN
344 NULL;
345 END IF;
346
347 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.scheduled_start_date,p_old_flow_schedule_rec.scheduled_start_date)
348 THEN
349 NULL;
350 END IF;
351
352 -- Comment it out to fix bug 1198493. We don't want the build_sequence set to null
353 -- when schedule group is changed
354 /*
355 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.schedule_group_id,p_old_flow_schedule_rec.schedule_group_id)
356 THEN
357 x_flow_schedule_rec.build_sequence := FND_API.G_MISS_NUM;
358 END IF;
359 */
360
361 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.schedule_number,p_old_flow_schedule_rec.schedule_number)
362 THEN
363 NULL;
364 END IF;
365
366 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.status,p_old_flow_schedule_rec.status)
367 THEN
368 NULL;
369 END IF;
370
371 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.std_cost_adjustment_acct,p_old_flow_schedule_rec.std_cost_adjustment_acct)
372 THEN
373 NULL;
374 END IF;
375
376 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.task_id,p_old_flow_schedule_rec.task_id)
377 THEN
378 NULL;
379 END IF;
380
381 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.wip_entity_id,p_old_flow_schedule_rec.wip_entity_id)
382 THEN
383 NULL;
384 END IF;
385
386 ELSIF p_attr_id = G_ALTERNATE_BOM_DESIGNATOR THEN
387 x_flow_schedule_rec.bom_revision := FND_API.G_MISS_CHAR;
388 x_flow_schedule_rec.bom_revision_date := FND_API.G_MISS_DATE;
389 ELSIF p_attr_id = G_ALTERNATE_ROUTING_DESIG THEN
390 x_flow_schedule_rec.routing_revision := FND_API.G_MISS_CHAR;
391 x_flow_schedule_rec.routing_revision_date := FND_API.G_MISS_DATE;
392 x_flow_schedule_rec.completion_subinventory := FND_API.G_MISS_CHAR;
393 x_flow_schedule_rec.completion_locator_id := FND_API.G_MISS_NUM;
394 ELSIF p_attr_id = G_BOM_REVISION THEN
395 x_flow_schedule_rec.bom_revision_date := FND_API.G_MISS_DATE;
396 ELSIF p_attr_id = G_BOM_REVISION_DATE THEN
397 NULL;
398 ELSIF p_attr_id = G_BUILD_SEQUENCE THEN
399 NULL;
400 ELSIF p_attr_id = G_CLASS THEN
401 x_flow_schedule_rec.material_account := FND_API.G_MISS_NUM;
402 x_flow_schedule_rec.material_overhead_account := FND_API.G_MISS_NUM;
403 x_flow_schedule_rec.resource_account := FND_API.G_MISS_NUM;
404 x_flow_schedule_rec.outside_processing_acct := FND_API.G_MISS_NUM;
405 x_flow_schedule_rec.material_variance_account := FND_API.G_MISS_NUM;
406 x_flow_schedule_rec.resource_variance_account := FND_API.G_MISS_NUM;
407 x_flow_schedule_rec.outside_proc_var_acct := FND_API.G_MISS_NUM;
408 x_flow_schedule_rec.std_cost_adjustment_acct := FND_API.G_MISS_NUM;
409 x_flow_schedule_rec.overhead_account := FND_API.G_MISS_NUM;
410 x_flow_schedule_rec.overhead_variance_account := FND_API.G_MISS_NUM;
411 ELSIF p_attr_id = G_COMPLETION_LOCATOR THEN
412 NULL;
413 ELSIF p_attr_id = G_COMPLETION_SUBINVENTORY THEN
414 x_flow_schedule_rec.completion_locator_id := FND_API.G_MISS_NUM;
415 ELSIF p_attr_id = G_CREATED_BY THEN
416 NULL;
417 ELSIF p_attr_id = G_CREATION_DATE THEN
418 NULL;
419 ELSIF p_attr_id = G_DATE_CLOSED THEN
420 NULL;
421 ELSIF p_attr_id = G_DEMAND_CLASS THEN
422 NULL;
423 ELSIF p_attr_id = G_DEMAND_SOURCE_DELIVERY THEN
424 NULL;
425 ELSIF p_attr_id = G_DEMAND_SOURCE_HEADER THEN
426 x_flow_schedule_rec.demand_source_line := FND_API.G_MISS_CHAR;
427 x_flow_schedule_rec.demand_source_delivery := FND_API.G_MISS_CHAR;
428 ELSIF p_attr_id = G_DEMAND_SOURCE_LINE THEN
429 NULL;
430 ELSIF p_attr_id = G_DEMAND_SOURCE_TYPE THEN
431 NULL;
432 ELSIF p_attr_id = G_LAST_UPDATED_BY THEN
433 NULL;
434 ELSIF p_attr_id = G_LAST_UPDATE_DATE THEN
435 NULL;
436 ELSIF p_attr_id = G_LAST_UPDATE_LOGIN THEN
437 NULL;
438 ELSIF p_attr_id = G_LINE THEN
439 NULL;
440 ELSIF p_attr_id = G_MATERIAL_ACCOUNT THEN
441 NULL;
442 ELSIF p_attr_id = G_MATERIAL_OVERHEAD_ACCOUNT THEN
443 NULL;
444 ELSIF p_attr_id = G_MATERIAL_VARIANCE_ACCOUNT THEN
445 NULL;
446 ELSIF p_attr_id = G_MPS_NET_QUANTITY THEN
447 NULL;
448 ELSIF p_attr_id = G_MPS_SCHEDULED_COMP_DATE THEN
449 NULL;
450 ELSIF p_attr_id = G_ORGANIZATION THEN
451 x_flow_schedule_rec.primary_item_id := FND_API.G_MISS_NUM;
452 x_flow_schedule_rec.completion_subinventory := FND_API.G_MISS_CHAR;
453 x_flow_schedule_rec.completion_locator_id := FND_API.G_MISS_NUM;
454 x_flow_schedule_rec.demand_source_header_id := FND_API.G_MISS_NUM;
455 x_flow_schedule_rec.demand_source_type := FND_API.G_MISS_NUM;
456 x_flow_schedule_rec.demand_source_line := FND_API.G_MISS_CHAR;
457 x_flow_schedule_rec.demand_source_delivery := FND_API.G_MISS_CHAR;
458 x_flow_schedule_rec.alternate_bom_designator := FND_API.G_MISS_CHAR;
459 x_flow_schedule_rec.bom_revision := FND_API.G_MISS_CHAR;
460 x_flow_schedule_rec.bom_revision_date := FND_API.G_MISS_DATE;
461 x_flow_schedule_rec.alternate_routing_desig := FND_API.G_MISS_CHAR;
462 x_flow_schedule_rec.routing_revision := FND_API.G_MISS_CHAR;
463 x_flow_schedule_rec.routing_revision_date := FND_API.G_MISS_DATE;
464 x_flow_schedule_rec.line_id := FND_API.G_MISS_NUM;
465 x_flow_schedule_rec.class_code := FND_API.G_MISS_CHAR;
466 x_flow_schedule_rec.schedule_group_id := FND_API.G_MISS_NUM;
467 x_flow_schedule_rec.material_account := FND_API.G_MISS_NUM;
468 x_flow_schedule_rec.material_overhead_account := FND_API.G_MISS_NUM;
469 x_flow_schedule_rec.resource_account := FND_API.G_MISS_NUM;
470 x_flow_schedule_rec.outside_processing_acct := FND_API.G_MISS_NUM;
471 x_flow_schedule_rec.material_variance_account := FND_API.G_MISS_NUM;
472 x_flow_schedule_rec.resource_variance_account := FND_API.G_MISS_NUM;
473 x_flow_schedule_rec.outside_proc_var_acct := FND_API.G_MISS_NUM;
474 x_flow_schedule_rec.std_cost_adjustment_acct := FND_API.G_MISS_NUM;
475 x_flow_schedule_rec.overhead_account := FND_API.G_MISS_NUM;
476 x_flow_schedule_rec.overhead_variance_account := FND_API.G_MISS_NUM;
477 ELSIF p_attr_id = G_OUTSIDE_PROCESSING_ACCT THEN
478 NULL;
479 ELSIF p_attr_id = G_OUTSIDE_PROC_VAR_ACCT THEN
480 NULL;
481 ELSIF p_attr_id = G_OVERHEAD_ACCOUNT THEN
482 NULL;
483 ELSIF p_attr_id = G_OVERHEAD_VARIANCE_ACCOUNT THEN
484 NULL;
485 ELSIF p_attr_id = G_PLANNED_QUANTITY THEN
486 x_flow_schedule_rec.scheduled_start_date := FND_API.G_MISS_DATE;
487 ELSIF p_attr_id = G_PRIMARY_ITEM THEN
488 x_flow_schedule_rec.completion_subinventory := FND_API.G_MISS_CHAR;
489 x_flow_schedule_rec.completion_locator_id := FND_API.G_MISS_NUM;
490 x_flow_schedule_rec.demand_source_header_id := FND_API.G_MISS_NUM;
491 x_flow_schedule_rec.demand_source_type := FND_API.G_MISS_NUM;
492 x_flow_schedule_rec.demand_source_line := FND_API.G_MISS_CHAR;
493 x_flow_schedule_rec.demand_source_delivery := FND_API.G_MISS_CHAR;
494 x_flow_schedule_rec.alternate_bom_designator := FND_API.G_MISS_CHAR;
495 x_flow_schedule_rec.bom_revision := FND_API.G_MISS_CHAR;
496 x_flow_schedule_rec.bom_revision_date := FND_API.G_MISS_DATE;
497 x_flow_schedule_rec.alternate_routing_desig := FND_API.G_MISS_CHAR;
498 x_flow_schedule_rec.routing_revision := FND_API.G_MISS_CHAR;
499 x_flow_schedule_rec.routing_revision_date := FND_API.G_MISS_DATE;
500 x_flow_schedule_rec.class_code := FND_API.G_MISS_CHAR;
501 x_flow_schedule_rec.scheduled_start_date := FND_API.G_MISS_DATE;
502 x_flow_schedule_rec.material_account := FND_API.G_MISS_NUM;
503 x_flow_schedule_rec.material_overhead_account := FND_API.G_MISS_NUM;
504 x_flow_schedule_rec.resource_account := FND_API.G_MISS_NUM;
505 x_flow_schedule_rec.outside_processing_acct := FND_API.G_MISS_NUM;
506 x_flow_schedule_rec.material_variance_account := FND_API.G_MISS_NUM;
507 x_flow_schedule_rec.resource_variance_account := FND_API.G_MISS_NUM;
508 x_flow_schedule_rec.outside_proc_var_acct := FND_API.G_MISS_NUM;
509 x_flow_schedule_rec.std_cost_adjustment_acct := FND_API.G_MISS_NUM;
510 x_flow_schedule_rec.overhead_account := FND_API.G_MISS_NUM;
511 x_flow_schedule_rec.overhead_variance_account := FND_API.G_MISS_NUM;
512 ELSIF p_attr_id = G_PROGRAM_APPLICATION THEN
513 NULL;
514 ELSIF p_attr_id = G_PROGRAM THEN
515 NULL;
516 ELSIF p_attr_id = G_PROGRAM_UPDATE_DATE THEN
517 NULL;
518 ELSIF p_attr_id = G_PROJECT THEN
519 x_flow_schedule_rec.task_id := FND_API.G_MISS_NUM;
520 x_flow_schedule_rec.class_code := FND_API.G_MISS_CHAR;
521 x_flow_schedule_rec.material_account := FND_API.G_MISS_NUM;
522 x_flow_schedule_rec.material_overhead_account := FND_API.G_MISS_NUM;
523 x_flow_schedule_rec.resource_account := FND_API.G_MISS_NUM;
524 x_flow_schedule_rec.outside_processing_acct := FND_API.G_MISS_NUM;
525 x_flow_schedule_rec.material_variance_account := FND_API.G_MISS_NUM;
526 x_flow_schedule_rec.resource_variance_account := FND_API.G_MISS_NUM;
527 x_flow_schedule_rec.outside_proc_var_acct := FND_API.G_MISS_NUM;
528 x_flow_schedule_rec.std_cost_adjustment_acct := FND_API.G_MISS_NUM;
529 x_flow_schedule_rec.overhead_account := FND_API.G_MISS_NUM;
530 x_flow_schedule_rec.overhead_variance_account := FND_API.G_MISS_NUM;
531 ELSIF p_attr_id = G_QUANTITY_COMPLETED THEN
532 NULL;
533 ELSIF p_attr_id = G_REQUEST THEN
534 NULL;
535 ELSIF p_attr_id = G_RESOURCE_ACCOUNT THEN
536 NULL;
537 ELSIF p_attr_id = G_RESOURCE_VARIANCE_ACCOUNT THEN
538 NULL;
539 ELSIF p_attr_id = G_ROUTING_REVISION THEN
540 x_flow_schedule_rec.routing_revision_date := FND_API.G_MISS_DATE;
541 ELSIF p_attr_id = G_ROUTING_REVISION_DATE THEN
542 NULL;
543 ELSIF p_attr_id = G_SCHEDULED_COMPLETION_DATE THEN
544 x_flow_schedule_rec.scheduled_start_date := FND_API.G_MISS_DATE;
545 ELSIF p_attr_id = G_SCHEDULED THEN
546 NULL;
547 ELSIF p_attr_id = G_SCHEDULED_START_DATE THEN
548 NULL;
549 ELSIF p_attr_id = G_SCHEDULE_GROUP THEN
550 x_flow_schedule_rec.build_sequence := FND_API.G_MISS_NUM;
551 ELSIF p_attr_id = G_SCHEDULE_NUMBER THEN
552 NULL;
553 ELSIF p_attr_id = G_STATUS THEN
554 NULL;
555 ELSIF p_attr_id = G_STD_COST_ADJUSTMENT_ACCT THEN
556 NULL;
557 ELSIF p_attr_id = G_TASK THEN
558 NULL;
559 ELSIF p_attr_id = G_WIP_ENTITY THEN
560 NULL;
561 END IF;
562
563 END Clear_Dependent_Attr;
564
565 -- Procedure Apply_Attribute_Changes
566
567 PROCEDURE Apply_Attribute_Changes
568 ( p_flow_schedule_rec IN MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
569 , p_old_flow_schedule_rec IN MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
570 , x_flow_schedule_rec IN OUT NOCOPY MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
571 )
572 IS
573 l_bom_revision NUMBER := NULL;
574 l_revision NUMBER := NULL;
575 l_bom_date DATE := NULL;
576 l_routing_revision NUMBER := NULL;
577 l_routing_date DATE := NULL;
578 l_error_number NUMBER := 1;
579 BEGIN
580
581 -- Load out record
582
583 x_flow_schedule_rec := p_flow_schedule_rec;
584
585 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.alternate_bom_designator,p_old_flow_schedule_rec.alternate_bom_designator)
586 THEN
587 NULL;
588 END IF;
589
590 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.alternate_routing_desig,p_old_flow_schedule_rec.alternate_routing_desig)
591 THEN
592 NULL;
593 END IF;
594
595 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.bom_revision,p_old_flow_schedule_rec.bom_revision)
596 THEN
597 NULL;
598 END IF;
599
600 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.bom_revision_date,p_old_flow_schedule_rec.bom_revision_date)
601 THEN
602 NULL;
603 END IF;
604
605 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.build_sequence,p_old_flow_schedule_rec.build_sequence)
606 THEN
607 NULL;
608 END IF;
609
610 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.class_code,p_old_flow_schedule_rec.class_code)
611 THEN
612 NULL;
613 END IF;
614
615 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.completion_locator_id,p_old_flow_schedule_rec.completion_locator_id)
616 THEN
617 NULL;
618 END IF;
619
620 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.completion_subinventory,p_old_flow_schedule_rec.completion_subinventory)
621 THEN
622 NULL;
623 END IF;
624
625 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.created_by,p_old_flow_schedule_rec.created_by)
626 THEN
627 NULL;
628 END IF;
629
630 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.creation_date,p_old_flow_schedule_rec.creation_date)
631 THEN
632 NULL;
633 END IF;
634
635 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.date_closed,p_old_flow_schedule_rec.date_closed)
636 THEN
637 NULL;
638 END IF;
639
640 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.demand_class,p_old_flow_schedule_rec.demand_class)
641 THEN
642 NULL;
643 END IF;
644
645 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.demand_source_delivery,p_old_flow_schedule_rec.demand_source_delivery)
646 THEN
647 NULL;
648 END IF;
649
650 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.demand_source_header_id,p_old_flow_schedule_rec.demand_source_header_id)
651 THEN
652 NULL;
653 END IF;
654
655 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.demand_source_line,p_old_flow_schedule_rec.demand_source_line)
656 THEN
657 NULL;
658 END IF;
659
660 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.demand_source_type,p_old_flow_schedule_rec.demand_source_type)
661 THEN
662 NULL;
663 END IF;
664
665 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.last_updated_by,p_old_flow_schedule_rec.last_updated_by)
666 THEN
667 NULL;
668 END IF;
669
670 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.last_update_date,p_old_flow_schedule_rec.last_update_date)
671 THEN
672 NULL;
673 END IF;
674
675 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.last_update_login,p_old_flow_schedule_rec.last_update_login)
676 THEN
677 NULL;
678 END IF;
679
680 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.line_id,p_old_flow_schedule_rec.line_id)
681 THEN
682 NULL;
683 END IF;
684
685 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.material_account,p_old_flow_schedule_rec.material_account)
686 THEN
687 NULL;
688 END IF;
689
690 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.material_overhead_account,p_old_flow_schedule_rec.material_overhead_account)
691 THEN
692 NULL;
693 END IF;
694
695 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.material_variance_account,p_old_flow_schedule_rec.material_variance_account)
696 THEN
697 NULL;
698 END IF;
699
700 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.mps_net_quantity,p_old_flow_schedule_rec.mps_net_quantity)
701 THEN
702 NULL;
703 END IF;
704
705 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.mps_scheduled_comp_date,p_old_flow_schedule_rec.mps_scheduled_comp_date)
706 THEN
707 NULL;
708 END IF;
709
710 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.organization_id,p_old_flow_schedule_rec.organization_id)
711 THEN
712 NULL;
713 END IF;
714
715 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.outside_processing_acct,p_old_flow_schedule_rec.outside_processing_acct)
716 THEN
717 NULL;
718 END IF;
719
720 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.outside_proc_var_acct,p_old_flow_schedule_rec.outside_proc_var_acct)
721 THEN
722 NULL;
723 END IF;
724
725 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.overhead_account,p_old_flow_schedule_rec.overhead_account)
726 THEN
727 NULL;
728 END IF;
729
730 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.overhead_variance_account,p_old_flow_schedule_rec.overhead_variance_account)
731 THEN
732 NULL;
733 END IF;
734
735 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.planned_quantity,p_old_flow_schedule_rec.planned_quantity)
736 THEN
737 NULL;
738 END IF;
739
740 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.primary_item_id,p_old_flow_schedule_rec.primary_item_id)
741 THEN
742 /* Fix for bug 3661250. Added the following SQL to update primary_item_id in WIP_ENTITIES if it has been changed.
743 */
744 UPDATE WIP_ENTITIES
745 SET primary_item_id = p_flow_schedule_rec.primary_item_id
746 WHERE wip_entity_id = p_flow_schedule_rec.wip_entity_id
747 AND organization_id = p_flow_schedule_rec.organization_id;
748
749 /* End of fix for bug 3661250 */
750 END IF;
751
752 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.program_application_id,p_old_flow_schedule_rec.program_application_id)
753 THEN
754 NULL;
755 END IF;
756
757 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.program_id,p_old_flow_schedule_rec.program_id)
758 THEN
759 NULL;
760 END IF;
761
762 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.program_update_date,p_old_flow_schedule_rec.program_update_date)
763 THEN
764 NULL;
765 END IF;
766
767 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.project_id,p_old_flow_schedule_rec.project_id)
768 THEN
769 NULL;
770 END IF;
771
772 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.quantity_completed,p_old_flow_schedule_rec.quantity_completed)
773 THEN
774 NULL;
775 END IF;
776
777 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.request_id,p_old_flow_schedule_rec.request_id)
778 THEN
779 NULL;
780 END IF;
781
782 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.resource_account,p_old_flow_schedule_rec.resource_account)
783 THEN
784 NULL;
785 END IF;
786
787 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.resource_variance_account,p_old_flow_schedule_rec.resource_variance_account)
788 THEN
789 NULL;
790 END IF;
791
792 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.routing_revision,p_old_flow_schedule_rec.routing_revision)
793 THEN
794 NULL;
795 END IF;
796
797 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.routing_revision_date,p_old_flow_schedule_rec.routing_revision_date)
798 THEN
799 NULL;
800 END IF;
801
802 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.scheduled_completion_date,p_old_flow_schedule_rec.scheduled_completion_date)
803 THEN
804 NULL;
805 END IF;
806
807 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.scheduled_flag,p_old_flow_schedule_rec.scheduled_flag)
808 THEN
809 NULL;
810 END IF;
811
812 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.scheduled_start_date,p_old_flow_schedule_rec.scheduled_start_date)
813 THEN
814 NULL;
815 END IF;
816
817 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.schedule_group_id,p_old_flow_schedule_rec.schedule_group_id)
818 THEN
819 NULL;
820 END IF;
821
822 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.schedule_number,p_old_flow_schedule_rec.schedule_number)
823 THEN
824 UPDATE wip_entities
825 SET wip_entity_name = p_flow_schedule_rec.schedule_number
826 WHERE wip_entity_id = p_flow_schedule_rec.wip_entity_id;
827 END IF;
828
829 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.status,p_old_flow_schedule_rec.status)
830 THEN
831 NULL;
832 END IF;
833
834 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.std_cost_adjustment_acct,p_old_flow_schedule_rec.std_cost_adjustment_acct)
835 THEN
836 NULL;
837 END IF;
838
839 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.task_id,p_old_flow_schedule_rec.task_id)
840 THEN
841 NULL;
842 END IF;
843
844 IF NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.wip_entity_id,p_old_flow_schedule_rec.wip_entity_id)
845 THEN
846 NULL;
847 END IF;
848
849 END Apply_Attribute_Changes;
850
851 -- Function Complete_Record
852
853 FUNCTION Complete_Record
854 ( p_flow_schedule_rec IN MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
855 , p_old_flow_schedule_rec IN MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
856 ) RETURN MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
857 IS
858 l_flow_schedule_rec MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type := p_flow_schedule_rec;
859 BEGIN
860
861 IF l_flow_schedule_rec.alternate_bom_designator = FND_API.G_MISS_CHAR THEN
862 l_flow_schedule_rec.alternate_bom_designator := NULL ;
863 ELSIF l_flow_schedule_rec.alternate_bom_designator IS NULL THEN
864 l_flow_schedule_rec.alternate_bom_designator := p_old_flow_schedule_rec.alternate_bom_designator;
865 END IF;
866
867 IF l_flow_schedule_rec.alternate_routing_desig = FND_API.G_MISS_CHAR THEN
868 l_flow_schedule_rec.alternate_routing_desig := NULL ;
869 ELSIF l_flow_schedule_rec.alternate_routing_desig IS NULL THEN
870 l_flow_schedule_rec.alternate_routing_desig := p_old_flow_schedule_rec.alternate_routing_desig;
871 END IF;
872
873 IF l_flow_schedule_rec.attribute1 = FND_API.G_MISS_CHAR THEN
874 l_flow_schedule_rec.attribute1 := NULL ;
875 ELSIF l_flow_schedule_rec.attribute1 IS NULL THEN
876 l_flow_schedule_rec.attribute1 := p_old_flow_schedule_rec.attribute1;
877 END IF;
878
879 IF l_flow_schedule_rec.attribute10 = FND_API.G_MISS_CHAR THEN
880 l_flow_schedule_rec.attribute10 := NULL ;
881 ELSIF l_flow_schedule_rec.attribute10 IS NULL THEN
882 l_flow_schedule_rec.attribute10 := p_old_flow_schedule_rec.attribute10;
883 END IF;
884
885 IF l_flow_schedule_rec.attribute11 = FND_API.G_MISS_CHAR THEN
886 l_flow_schedule_rec.attribute11 := NULL ;
887 ELSIF l_flow_schedule_rec.attribute11 IS NULL THEN
888 l_flow_schedule_rec.attribute11 := p_old_flow_schedule_rec.attribute11;
889 END IF;
890
891 IF l_flow_schedule_rec.attribute12 = FND_API.G_MISS_CHAR THEN
892 l_flow_schedule_rec.attribute12 := NULL ;
893 ELSIF l_flow_schedule_rec.attribute12 IS NULL THEN
894 l_flow_schedule_rec.attribute12 := p_old_flow_schedule_rec.attribute12;
895 END IF;
896
897 IF l_flow_schedule_rec.attribute13 = FND_API.G_MISS_CHAR THEN
898 l_flow_schedule_rec.attribute13 := NULL ;
899 ELSIF l_flow_schedule_rec.attribute13 IS NULL THEN
900 l_flow_schedule_rec.attribute13 := p_old_flow_schedule_rec.attribute13;
901 END IF;
902
903 IF l_flow_schedule_rec.attribute14 = FND_API.G_MISS_CHAR THEN
904 l_flow_schedule_rec.attribute14 := NULL ;
905 ELSIF l_flow_schedule_rec.attribute14 IS NULL THEN
906 l_flow_schedule_rec.attribute14 := p_old_flow_schedule_rec.attribute14;
907 END IF;
908
909 IF l_flow_schedule_rec.attribute15 = FND_API.G_MISS_CHAR THEN
910 l_flow_schedule_rec.attribute15 := NULL ;
911 ELSIF l_flow_schedule_rec.attribute15 IS NULL THEN
912 l_flow_schedule_rec.attribute15 := p_old_flow_schedule_rec.attribute15;
913 END IF;
914
915 IF l_flow_schedule_rec.attribute2 = FND_API.G_MISS_CHAR THEN
916 l_flow_schedule_rec.attribute2 := NULL ;
917 ELSIF l_flow_schedule_rec.attribute2 IS NULL THEN
918 l_flow_schedule_rec.attribute2 := p_old_flow_schedule_rec.attribute2;
919 END IF;
920
921 IF l_flow_schedule_rec.attribute3 = FND_API.G_MISS_CHAR THEN
922 l_flow_schedule_rec.attribute3 := NULL ;
923 ELSIF l_flow_schedule_rec.attribute3 IS NULL THEN
924 l_flow_schedule_rec.attribute3 := p_old_flow_schedule_rec.attribute3;
925 END IF;
926
927 IF l_flow_schedule_rec.attribute4 = FND_API.G_MISS_CHAR THEN
928 l_flow_schedule_rec.attribute4 := NULL ;
929 ELSIF l_flow_schedule_rec.attribute4 IS NULL THEN
930 l_flow_schedule_rec.attribute4 := p_old_flow_schedule_rec.attribute4;
931 END IF;
932
933 IF l_flow_schedule_rec.attribute5 = FND_API.G_MISS_CHAR THEN
934 l_flow_schedule_rec.attribute5 := NULL ;
935 ELSIF l_flow_schedule_rec.attribute5 IS NULL THEN
936 l_flow_schedule_rec.attribute5 := p_old_flow_schedule_rec.attribute5;
937 END IF;
938
939 IF l_flow_schedule_rec.attribute6 = FND_API.G_MISS_CHAR THEN
940 l_flow_schedule_rec.attribute6 := NULL ;
941 ELSIF l_flow_schedule_rec.attribute6 IS NULL THEN
942 l_flow_schedule_rec.attribute6 := p_old_flow_schedule_rec.attribute6;
943 END IF;
944
945 IF l_flow_schedule_rec.attribute7 = FND_API.G_MISS_CHAR THEN
946 l_flow_schedule_rec.attribute7 := NULL ;
947 ELSIF l_flow_schedule_rec.attribute7 IS NULL THEN
948 l_flow_schedule_rec.attribute7 := p_old_flow_schedule_rec.attribute7;
949 END IF;
950
951 IF l_flow_schedule_rec.attribute8 = FND_API.G_MISS_CHAR THEN
952 l_flow_schedule_rec.attribute8 := NULL ;
953 ELSIF l_flow_schedule_rec.attribute8 IS NULL THEN
954 l_flow_schedule_rec.attribute8 := p_old_flow_schedule_rec.attribute8;
955 END IF;
956
957 IF l_flow_schedule_rec.attribute9 = FND_API.G_MISS_CHAR THEN
958 l_flow_schedule_rec.attribute9 := NULL ;
959 ELSIF l_flow_schedule_rec.attribute9 IS NULL THEN
960 l_flow_schedule_rec.attribute9 := p_old_flow_schedule_rec.attribute9;
961 END IF;
962
963 IF l_flow_schedule_rec.attribute_category = FND_API.G_MISS_CHAR THEN
964 l_flow_schedule_rec.attribute_category := NULL ;
965 ELSIF l_flow_schedule_rec.attribute_category IS NULL THEN
966 l_flow_schedule_rec.attribute_category := p_old_flow_schedule_rec.attribute_category;
967 END IF;
968
969 IF l_flow_schedule_rec.bom_revision = FND_API.G_MISS_CHAR THEN
970 l_flow_schedule_rec.bom_revision := NULL ;
971 ELSIF l_flow_schedule_rec.bom_revision IS NULL THEN
972 l_flow_schedule_rec.bom_revision := p_old_flow_schedule_rec.bom_revision;
973 END IF;
974
975 IF l_flow_schedule_rec.bom_revision_date = FND_API.G_MISS_DATE THEN
976 l_flow_schedule_rec.bom_revision_date := NULL ;
977 ELSIF l_flow_schedule_rec.bom_revision_date IS NULL THEN
978 l_flow_schedule_rec.bom_revision_date := p_old_flow_schedule_rec.bom_revision_date;
979 END IF;
980
981 IF l_flow_schedule_rec.build_sequence = FND_API.G_MISS_NUM THEN
982 l_flow_schedule_rec.build_sequence := NULL ;
983 ELSIF l_flow_schedule_rec.build_sequence IS NULL THEN
984 l_flow_schedule_rec.build_sequence := p_old_flow_schedule_rec.build_sequence;
985 END IF;
986
987 IF l_flow_schedule_rec.class_code = FND_API.G_MISS_CHAR THEN
988 l_flow_schedule_rec.class_code := NULL ;
989 ELSIF l_flow_schedule_rec.class_code IS NULL THEN
990 l_flow_schedule_rec.class_code := p_old_flow_schedule_rec.class_code;
991 END IF;
992
993 IF l_flow_schedule_rec.completion_locator_id = FND_API.G_MISS_NUM THEN
994 l_flow_schedule_rec.completion_locator_id := NULL ;
995 ELSIF l_flow_schedule_rec.completion_locator_id IS NULL THEN
996 l_flow_schedule_rec.completion_locator_id := p_old_flow_schedule_rec.completion_locator_id;
997 END IF;
998
999 IF l_flow_schedule_rec.completion_subinventory = FND_API.G_MISS_CHAR THEN
1000 l_flow_schedule_rec.completion_subinventory := NULL ;
1001 ELSIF l_flow_schedule_rec.completion_subinventory IS NULL THEN
1002 l_flow_schedule_rec.completion_subinventory := p_old_flow_schedule_rec.completion_subinventory;
1003 END IF;
1004
1005 IF l_flow_schedule_rec.created_by = FND_API.G_MISS_NUM THEN
1006 l_flow_schedule_rec.created_by := NULL ;
1007 ELSIF l_flow_schedule_rec.created_by IS NULL THEN
1008 l_flow_schedule_rec.created_by := p_old_flow_schedule_rec.created_by;
1009 END IF;
1010
1011 IF l_flow_schedule_rec.creation_date = FND_API.G_MISS_DATE THEN
1012 l_flow_schedule_rec.creation_date := NULL ;
1013 ELSIF l_flow_schedule_rec.creation_date IS NULL THEN
1014 l_flow_schedule_rec.creation_date := p_old_flow_schedule_rec.creation_date;
1015 END IF;
1016
1017 IF l_flow_schedule_rec.date_closed = FND_API.G_MISS_DATE THEN
1018 l_flow_schedule_rec.date_closed := NULL ;
1019 ELSIF l_flow_schedule_rec.date_closed IS NULL THEN
1020 l_flow_schedule_rec.date_closed := p_old_flow_schedule_rec.date_closed;
1021 END IF;
1022
1023 IF l_flow_schedule_rec.demand_class = FND_API.G_MISS_CHAR THEN
1024 l_flow_schedule_rec.demand_class := NULL ;
1025 ELSIF l_flow_schedule_rec.demand_class IS NULL THEN
1026 l_flow_schedule_rec.demand_class := p_old_flow_schedule_rec.demand_class;
1027 END IF;
1028
1029 IF l_flow_schedule_rec.demand_source_delivery = FND_API.G_MISS_CHAR THEN
1030 l_flow_schedule_rec.demand_source_delivery := NULL ;
1031 ELSIF l_flow_schedule_rec.demand_source_delivery IS NULL THEN
1032 l_flow_schedule_rec.demand_source_delivery := p_old_flow_schedule_rec.demand_source_delivery;
1033 END IF;
1034
1035 IF l_flow_schedule_rec.demand_source_header_id = FND_API.G_MISS_NUM THEN
1036 l_flow_schedule_rec.demand_source_header_id := NULL ;
1037 ELSIF l_flow_schedule_rec.demand_source_header_id IS NULL THEN
1038 l_flow_schedule_rec.demand_source_header_id := p_old_flow_schedule_rec.demand_source_header_id;
1039 END IF;
1040
1041 IF l_flow_schedule_rec.demand_source_line = FND_API.G_MISS_CHAR THEN
1042 l_flow_schedule_rec.demand_source_line := NULL ;
1043 ELSIF l_flow_schedule_rec.demand_source_line IS NULL THEN
1044 l_flow_schedule_rec.demand_source_line := p_old_flow_schedule_rec.demand_source_line;
1045 END IF;
1046
1047 IF l_flow_schedule_rec.demand_source_type = FND_API.G_MISS_NUM THEN
1048 l_flow_schedule_rec.demand_source_type := NULL ;
1049 ELSIF l_flow_schedule_rec.demand_source_type IS NULL THEN
1050 l_flow_schedule_rec.demand_source_type := p_old_flow_schedule_rec.demand_source_type;
1051 END IF;
1052
1053 IF l_flow_schedule_rec.last_updated_by = FND_API.G_MISS_NUM THEN
1054 l_flow_schedule_rec.last_updated_by := NULL ;
1055 ELSIF l_flow_schedule_rec.last_updated_by IS NULL THEN
1056 l_flow_schedule_rec.last_updated_by := p_old_flow_schedule_rec.last_updated_by;
1057 END IF;
1058
1059 IF l_flow_schedule_rec.last_update_date = FND_API.G_MISS_DATE THEN
1060 l_flow_schedule_rec.last_update_date := NULL ;
1061 ELSIF l_flow_schedule_rec.last_update_date IS NULL THEN
1062 l_flow_schedule_rec.last_update_date := p_old_flow_schedule_rec.last_update_date;
1063 END IF;
1064
1065 IF l_flow_schedule_rec.last_update_login = FND_API.G_MISS_NUM THEN
1066 l_flow_schedule_rec.last_update_login := NULL ;
1067 ELSIF l_flow_schedule_rec.last_update_login IS NULL THEN
1068 l_flow_schedule_rec.last_update_login := p_old_flow_schedule_rec.last_update_login;
1069 END IF;
1070
1071 IF l_flow_schedule_rec.line_id = FND_API.G_MISS_NUM THEN
1072 l_flow_schedule_rec.line_id := NULL ;
1073 ELSIF l_flow_schedule_rec.line_id IS NULL THEN
1074 l_flow_schedule_rec.line_id := p_old_flow_schedule_rec.line_id;
1075 END IF;
1076
1077 IF l_flow_schedule_rec.material_account = FND_API.G_MISS_NUM THEN
1078 l_flow_schedule_rec.material_account := NULL ;
1079 ELSIF l_flow_schedule_rec.material_account IS NULL THEN
1080 l_flow_schedule_rec.material_account := p_old_flow_schedule_rec.material_account;
1081 END IF;
1082
1083 IF l_flow_schedule_rec.material_overhead_account = FND_API.G_MISS_NUM THEN
1084 l_flow_schedule_rec.material_overhead_account := NULL ;
1085 ELSIF l_flow_schedule_rec.material_overhead_account IS NULL THEN
1086 l_flow_schedule_rec.material_overhead_account := p_old_flow_schedule_rec.material_overhead_account;
1087 END IF;
1088
1089 IF l_flow_schedule_rec.material_variance_account = FND_API.G_MISS_NUM THEN
1090 l_flow_schedule_rec.material_variance_account := NULL ;
1091 ELSIF l_flow_schedule_rec.material_variance_account IS NULL THEN
1092 l_flow_schedule_rec.material_variance_account := p_old_flow_schedule_rec.material_variance_account;
1093 END IF;
1094
1095 IF l_flow_schedule_rec.mps_net_quantity = FND_API.G_MISS_NUM THEN
1096 l_flow_schedule_rec.mps_net_quantity := NULL ;
1097 ELSIF l_flow_schedule_rec.mps_net_quantity IS NULL THEN
1098 l_flow_schedule_rec.mps_net_quantity := p_old_flow_schedule_rec.mps_net_quantity;
1099 END IF;
1100
1101 IF l_flow_schedule_rec.mps_scheduled_comp_date = FND_API.G_MISS_DATE THEN
1102 l_flow_schedule_rec.mps_scheduled_comp_date := NULL ;
1103 ELSIF l_flow_schedule_rec.mps_scheduled_comp_date IS NULL THEN
1104 l_flow_schedule_rec.mps_scheduled_comp_date := p_old_flow_schedule_rec.mps_scheduled_comp_date;
1105 END IF;
1106
1107 IF l_flow_schedule_rec.organization_id = FND_API.G_MISS_NUM THEN
1108 l_flow_schedule_rec.organization_id := NULL ;
1109 ELSIF l_flow_schedule_rec.organization_id IS NULL THEN
1110 l_flow_schedule_rec.organization_id := p_old_flow_schedule_rec.organization_id;
1111 END IF;
1112
1113 IF l_flow_schedule_rec.outside_processing_acct = FND_API.G_MISS_NUM THEN
1114 l_flow_schedule_rec.outside_processing_acct := NULL ;
1115 ELSIF l_flow_schedule_rec.outside_processing_acct IS NULL THEN
1116 l_flow_schedule_rec.outside_processing_acct := p_old_flow_schedule_rec.outside_processing_acct;
1117 END IF;
1118
1119 IF l_flow_schedule_rec.outside_proc_var_acct = FND_API.G_MISS_NUM THEN
1120 l_flow_schedule_rec.outside_proc_var_acct := NULL ;
1121 ELSIF l_flow_schedule_rec.outside_proc_var_acct IS NULL THEN
1122 l_flow_schedule_rec.outside_proc_var_acct := p_old_flow_schedule_rec.outside_proc_var_acct;
1123 END IF;
1124
1125 IF l_flow_schedule_rec.overhead_account = FND_API.G_MISS_NUM THEN
1126 l_flow_schedule_rec.overhead_account := NULL ;
1127 ELSIF l_flow_schedule_rec.overhead_account IS NULL THEN
1128 l_flow_schedule_rec.overhead_account := p_old_flow_schedule_rec.overhead_account;
1129 END IF;
1130
1131 IF l_flow_schedule_rec.overhead_variance_account = FND_API.G_MISS_NUM THEN
1132 l_flow_schedule_rec.overhead_variance_account := NULL ;
1133 ELSIF l_flow_schedule_rec.overhead_variance_account IS NULL THEN
1134 l_flow_schedule_rec.overhead_variance_account := p_old_flow_schedule_rec.overhead_variance_account;
1135 END IF;
1136
1137 IF l_flow_schedule_rec.planned_quantity = FND_API.G_MISS_NUM THEN
1138 l_flow_schedule_rec.planned_quantity := NULL ;
1139 ELSIF l_flow_schedule_rec.overhead_variance_account IS NULL THEN
1140 l_flow_schedule_rec.planned_quantity := p_old_flow_schedule_rec.planned_quantity;
1141 END IF;
1142
1143 IF l_flow_schedule_rec.primary_item_id = FND_API.G_MISS_NUM THEN
1144 l_flow_schedule_rec.primary_item_id := NULL ;
1145 ELSIF l_flow_schedule_rec.primary_item_id IS NULL THEN
1146 l_flow_schedule_rec.primary_item_id := p_old_flow_schedule_rec.primary_item_id;
1147 END IF;
1148
1149 IF l_flow_schedule_rec.program_application_id = FND_API.G_MISS_NUM THEN
1150 l_flow_schedule_rec.program_application_id := NULL ;
1151 ELSIF l_flow_schedule_rec.program_application_id IS NULL THEN
1152 l_flow_schedule_rec.program_application_id := p_old_flow_schedule_rec.program_application_id;
1153 END IF;
1154
1155 IF l_flow_schedule_rec.program_id = FND_API.G_MISS_NUM THEN
1156 l_flow_schedule_rec.program_id := NULL ;
1157 ELSIF l_flow_schedule_rec.program_id IS NULL THEN
1158 l_flow_schedule_rec.program_id := p_old_flow_schedule_rec.program_id;
1159 END IF;
1160
1161 IF l_flow_schedule_rec.program_update_date = FND_API.G_MISS_DATE THEN
1162 l_flow_schedule_rec.program_update_date := NULL ;
1163 ELSIF l_flow_schedule_rec.program_update_date IS NULL THEN
1164 l_flow_schedule_rec.program_update_date := p_old_flow_schedule_rec.program_update_date;
1165 END IF;
1166
1167 IF l_flow_schedule_rec.project_id = FND_API.G_MISS_NUM THEN
1168 l_flow_schedule_rec.project_id := NULL ;
1169 ELSIF l_flow_schedule_rec.project_id IS NULL THEN
1170 l_flow_schedule_rec.project_id := p_old_flow_schedule_rec.project_id;
1171 END IF;
1172
1173 IF l_flow_schedule_rec.quantity_completed = FND_API.G_MISS_NUM THEN
1174 l_flow_schedule_rec.quantity_completed := NULL ;
1175 ELSIF l_flow_schedule_rec.quantity_completed IS NULL THEN
1176 l_flow_schedule_rec.quantity_completed := p_old_flow_schedule_rec.quantity_completed;
1177 END IF;
1178
1179 IF l_flow_schedule_rec.request_id = FND_API.G_MISS_NUM THEN
1180 l_flow_schedule_rec.request_id := NULL ;
1181 ELSIF l_flow_schedule_rec.request_id IS NULL THEN
1182 l_flow_schedule_rec.request_id := p_old_flow_schedule_rec.request_id;
1183 END IF;
1184
1185 IF l_flow_schedule_rec.resource_account = FND_API.G_MISS_NUM THEN
1186 l_flow_schedule_rec.resource_account := NULL ;
1187 ELSIF l_flow_schedule_rec.resource_account IS NULL THEN
1188 l_flow_schedule_rec.resource_account := p_old_flow_schedule_rec.resource_account;
1189 END IF;
1190
1191 IF l_flow_schedule_rec.resource_variance_account = FND_API.G_MISS_NUM THEN
1192 l_flow_schedule_rec.resource_variance_account := NULL ;
1193 ELSIF l_flow_schedule_rec.resource_variance_account IS NULL THEN
1194 l_flow_schedule_rec.resource_variance_account := p_old_flow_schedule_rec.resource_variance_account;
1195 END IF;
1196
1197 IF l_flow_schedule_rec.routing_revision = FND_API.G_MISS_CHAR THEN
1198 l_flow_schedule_rec.routing_revision := NULL ;
1199 ELSIF l_flow_schedule_rec.routing_revision IS NULL THEN
1200 l_flow_schedule_rec.routing_revision := p_old_flow_schedule_rec.routing_revision;
1201 END IF;
1202
1203 IF l_flow_schedule_rec.routing_revision_date = FND_API.G_MISS_DATE THEN
1204 l_flow_schedule_rec.routing_revision_date := NULL ;
1205 ELSIF l_flow_schedule_rec.routing_revision_date IS NULL THEN
1206 l_flow_schedule_rec.routing_revision_date := p_old_flow_schedule_rec.routing_revision_date;
1207 END IF;
1208
1209 IF l_flow_schedule_rec.scheduled_completion_date = FND_API.G_MISS_DATE THEN
1210 l_flow_schedule_rec.scheduled_completion_date := NULL ;
1211 ELSIF l_flow_schedule_rec.scheduled_completion_date IS NULL THEN
1212 l_flow_schedule_rec.scheduled_completion_date := p_old_flow_schedule_rec.scheduled_completion_date;
1213 END IF;
1214
1215 IF l_flow_schedule_rec.scheduled_flag = FND_API.G_MISS_NUM THEN
1216 l_flow_schedule_rec.scheduled_flag := NULL ;
1217 ELSIF l_flow_schedule_rec.scheduled_flag IS NULL THEN
1218 l_flow_schedule_rec.scheduled_flag := p_old_flow_schedule_rec.scheduled_flag;
1219 END IF;
1220
1221 IF l_flow_schedule_rec.scheduled_start_date = FND_API.G_MISS_DATE THEN
1222 l_flow_schedule_rec.scheduled_start_date := NULL ;
1223 ELSIF l_flow_schedule_rec.scheduled_start_date IS NULL THEN
1224 l_flow_schedule_rec.scheduled_start_date := p_old_flow_schedule_rec.scheduled_start_date;
1225 END IF;
1226
1227 IF l_flow_schedule_rec.schedule_group_id = FND_API.G_MISS_NUM THEN
1228 l_flow_schedule_rec.schedule_group_id := NULL ;
1229 ELSIF l_flow_schedule_rec.schedule_group_id IS NULL THEN
1230 l_flow_schedule_rec.schedule_group_id := p_old_flow_schedule_rec.schedule_group_id;
1231 END IF;
1232
1233 IF l_flow_schedule_rec.schedule_number = FND_API.G_MISS_CHAR THEN
1234 l_flow_schedule_rec.schedule_number := NULL ;
1235 ELSIF l_flow_schedule_rec.schedule_number IS NULL THEN
1236 l_flow_schedule_rec.schedule_number := p_old_flow_schedule_rec.schedule_number;
1237 END IF;
1238
1239 IF l_flow_schedule_rec.status = FND_API.G_MISS_NUM THEN
1240 l_flow_schedule_rec.status := NULL ;
1241 ELSIF l_flow_schedule_rec.status IS NULL THEN
1242 l_flow_schedule_rec.status := p_old_flow_schedule_rec.status;
1243 END IF;
1244
1245 IF l_flow_schedule_rec.std_cost_adjustment_acct = FND_API.G_MISS_NUM THEN
1246 l_flow_schedule_rec.std_cost_adjustment_acct := NULL ;
1247 ELSIF l_flow_schedule_rec.std_cost_adjustment_acct IS NULL THEN
1248 l_flow_schedule_rec.std_cost_adjustment_acct := p_old_flow_schedule_rec.std_cost_adjustment_acct;
1249 END IF;
1250
1251 IF l_flow_schedule_rec.task_id = FND_API.G_MISS_NUM THEN
1252 l_flow_schedule_rec.task_id := NULL ;
1253 ELSIF l_flow_schedule_rec.task_id IS NULL THEN
1254 l_flow_schedule_rec.task_id := p_old_flow_schedule_rec.task_id;
1255 END IF;
1256
1257 IF l_flow_schedule_rec.wip_entity_id = FND_API.G_MISS_NUM THEN
1258 l_flow_schedule_rec.wip_entity_id := NULL ;
1259 ELSIF l_flow_schedule_rec.wip_entity_id IS NULL THEN
1260 l_flow_schedule_rec.wip_entity_id := p_old_flow_schedule_rec.wip_entity_id;
1261 END IF;
1262
1263 IF l_flow_schedule_rec.end_item_unit_number = FND_API.G_MISS_CHAR THEN
1264 l_flow_schedule_rec.end_item_unit_number := NULL ;
1265 ELSIF l_flow_schedule_rec.end_item_unit_number IS NULL THEN
1266 l_flow_schedule_rec.end_item_unit_number := p_old_flow_schedule_rec.end_item_unit_number;
1267 END IF;
1268
1269
1270 IF l_flow_schedule_rec.quantity_scrapped = FND_API.G_MISS_NUM THEN
1271 l_flow_schedule_rec.quantity_scrapped := NULL ;
1272 ELSIF l_flow_schedule_rec.quantity_scrapped IS NULL THEN
1273 l_flow_schedule_rec.quantity_scrapped := p_old_flow_schedule_rec.quantity_scrapped;
1274 END IF;
1275
1276 RETURN l_flow_schedule_rec;
1277
1278 END Complete_Record;
1279
1280 -- Function Convert_Miss_To_Null
1281
1282 FUNCTION Convert_Miss_To_Null
1283 ( p_flow_schedule_rec IN MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
1284 ) RETURN MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
1285 IS
1286 l_flow_schedule_rec MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type:= p_flow_schedule_rec;
1287 BEGIN
1288
1289 IF l_flow_schedule_rec.alternate_bom_designator = FND_API.G_MISS_CHAR THEN
1290 l_flow_schedule_rec.alternate_bom_designator := NULL;
1291 END IF;
1292
1293 IF l_flow_schedule_rec.alternate_routing_desig = FND_API.G_MISS_CHAR THEN
1294 l_flow_schedule_rec.alternate_routing_desig := NULL;
1295 END IF;
1296
1297 IF l_flow_schedule_rec.attribute1 = FND_API.G_MISS_CHAR THEN
1298 l_flow_schedule_rec.attribute1 := NULL;
1299 END IF;
1300
1301 IF l_flow_schedule_rec.attribute10 = FND_API.G_MISS_CHAR THEN
1302 l_flow_schedule_rec.attribute10 := NULL;
1303 END IF;
1304
1305 IF l_flow_schedule_rec.attribute11 = FND_API.G_MISS_CHAR THEN
1306 l_flow_schedule_rec.attribute11 := NULL;
1307 END IF;
1308
1309 IF l_flow_schedule_rec.attribute12 = FND_API.G_MISS_CHAR THEN
1310 l_flow_schedule_rec.attribute12 := NULL;
1311 END IF;
1312
1313 IF l_flow_schedule_rec.attribute13 = FND_API.G_MISS_CHAR THEN
1314 l_flow_schedule_rec.attribute13 := NULL;
1315 END IF;
1316
1317 IF l_flow_schedule_rec.attribute14 = FND_API.G_MISS_CHAR THEN
1318 l_flow_schedule_rec.attribute14 := NULL;
1319 END IF;
1320
1321 IF l_flow_schedule_rec.attribute15 = FND_API.G_MISS_CHAR THEN
1322 l_flow_schedule_rec.attribute15 := NULL;
1323 END IF;
1324
1325 IF l_flow_schedule_rec.attribute2 = FND_API.G_MISS_CHAR THEN
1326 l_flow_schedule_rec.attribute2 := NULL;
1327 END IF;
1328
1329 IF l_flow_schedule_rec.attribute3 = FND_API.G_MISS_CHAR THEN
1330 l_flow_schedule_rec.attribute3 := NULL;
1331 END IF;
1332
1333 IF l_flow_schedule_rec.attribute4 = FND_API.G_MISS_CHAR THEN
1334 l_flow_schedule_rec.attribute4 := NULL;
1335 END IF;
1336
1337 IF l_flow_schedule_rec.attribute5 = FND_API.G_MISS_CHAR THEN
1338 l_flow_schedule_rec.attribute5 := NULL;
1339 END IF;
1340
1341 IF l_flow_schedule_rec.attribute6 = FND_API.G_MISS_CHAR THEN
1342 l_flow_schedule_rec.attribute6 := NULL;
1343 END IF;
1344
1345 IF l_flow_schedule_rec.attribute7 = FND_API.G_MISS_CHAR THEN
1346 l_flow_schedule_rec.attribute7 := NULL;
1347 END IF;
1348
1349 IF l_flow_schedule_rec.attribute8 = FND_API.G_MISS_CHAR THEN
1350 l_flow_schedule_rec.attribute8 := NULL;
1351 END IF;
1352
1353 IF l_flow_schedule_rec.attribute9 = FND_API.G_MISS_CHAR THEN
1354 l_flow_schedule_rec.attribute9 := NULL;
1355 END IF;
1356
1357 IF l_flow_schedule_rec.attribute_category = FND_API.G_MISS_CHAR THEN
1358 l_flow_schedule_rec.attribute_category := NULL;
1359 END IF;
1360
1361 IF l_flow_schedule_rec.bom_revision = FND_API.G_MISS_CHAR THEN
1362 l_flow_schedule_rec.bom_revision := NULL;
1363 END IF;
1364
1365 IF l_flow_schedule_rec.bom_revision_date = FND_API.G_MISS_DATE THEN
1366 l_flow_schedule_rec.bom_revision_date := NULL;
1367 END IF;
1368
1369 IF l_flow_schedule_rec.build_sequence = FND_API.G_MISS_NUM THEN
1370 l_flow_schedule_rec.build_sequence := NULL;
1371 END IF;
1372
1373 IF l_flow_schedule_rec.class_code = FND_API.G_MISS_CHAR THEN
1374 l_flow_schedule_rec.class_code := NULL;
1375 END IF;
1376
1377 IF l_flow_schedule_rec.completion_locator_id = FND_API.G_MISS_NUM THEN
1378 l_flow_schedule_rec.completion_locator_id := NULL;
1379 END IF;
1380
1381 IF l_flow_schedule_rec.completion_subinventory = FND_API.G_MISS_CHAR THEN
1382 l_flow_schedule_rec.completion_subinventory := NULL;
1383 END IF;
1384
1385 IF l_flow_schedule_rec.created_by = FND_API.G_MISS_NUM THEN
1386 l_flow_schedule_rec.created_by := NULL;
1387 END IF;
1388
1389 IF l_flow_schedule_rec.creation_date = FND_API.G_MISS_DATE THEN
1390 l_flow_schedule_rec.creation_date := NULL;
1391 END IF;
1392
1393 IF l_flow_schedule_rec.date_closed = FND_API.G_MISS_DATE THEN
1394 l_flow_schedule_rec.date_closed := NULL;
1395 END IF;
1396
1397 IF l_flow_schedule_rec.demand_class = FND_API.G_MISS_CHAR THEN
1398 l_flow_schedule_rec.demand_class := NULL;
1399 END IF;
1400
1401 IF l_flow_schedule_rec.demand_source_delivery = FND_API.G_MISS_CHAR THEN
1402 l_flow_schedule_rec.demand_source_delivery := NULL;
1403 END IF;
1404
1405 IF l_flow_schedule_rec.demand_source_header_id = FND_API.G_MISS_NUM THEN
1406 l_flow_schedule_rec.demand_source_header_id := NULL;
1407 END IF;
1408
1409 IF l_flow_schedule_rec.demand_source_line = FND_API.G_MISS_CHAR THEN
1410 l_flow_schedule_rec.demand_source_line := NULL;
1411 END IF;
1412
1413 IF l_flow_schedule_rec.demand_source_type = FND_API.G_MISS_NUM THEN
1414 l_flow_schedule_rec.demand_source_type := NULL;
1415 END IF;
1416
1417 IF l_flow_schedule_rec.last_updated_by = FND_API.G_MISS_NUM THEN
1418 l_flow_schedule_rec.last_updated_by := NULL;
1419 END IF;
1420
1421 IF l_flow_schedule_rec.last_update_date = FND_API.G_MISS_DATE THEN
1422 l_flow_schedule_rec.last_update_date := NULL;
1423 END IF;
1424
1425 IF l_flow_schedule_rec.last_update_login = FND_API.G_MISS_NUM THEN
1426 l_flow_schedule_rec.last_update_login := NULL;
1427 END IF;
1428
1429 IF l_flow_schedule_rec.line_id = FND_API.G_MISS_NUM THEN
1430 l_flow_schedule_rec.line_id := NULL;
1431 END IF;
1432
1433 IF l_flow_schedule_rec.material_account = FND_API.G_MISS_NUM THEN
1434 l_flow_schedule_rec.material_account := NULL;
1435 END IF;
1436
1437 IF l_flow_schedule_rec.material_overhead_account = FND_API.G_MISS_NUM THEN
1438 l_flow_schedule_rec.material_overhead_account := NULL;
1439 END IF;
1440
1441 IF l_flow_schedule_rec.material_variance_account = FND_API.G_MISS_NUM THEN
1442 l_flow_schedule_rec.material_variance_account := NULL;
1443 END IF;
1444
1445 IF l_flow_schedule_rec.mps_net_quantity = FND_API.G_MISS_NUM THEN
1446 l_flow_schedule_rec.mps_net_quantity := NULL;
1447 END IF;
1448
1449 IF l_flow_schedule_rec.mps_scheduled_comp_date = FND_API.G_MISS_DATE THEN
1450 l_flow_schedule_rec.mps_scheduled_comp_date := NULL;
1451 END IF;
1452
1453 IF l_flow_schedule_rec.organization_id = FND_API.G_MISS_NUM THEN
1454 l_flow_schedule_rec.organization_id := NULL;
1455 END IF;
1456
1457 IF l_flow_schedule_rec.outside_processing_acct = FND_API.G_MISS_NUM THEN
1458 l_flow_schedule_rec.outside_processing_acct := NULL;
1459 END IF;
1460
1461 IF l_flow_schedule_rec.outside_proc_var_acct = FND_API.G_MISS_NUM THEN
1462 l_flow_schedule_rec.outside_proc_var_acct := NULL;
1463 END IF;
1464
1465 IF l_flow_schedule_rec.overhead_account = FND_API.G_MISS_NUM THEN
1466 l_flow_schedule_rec.overhead_account := NULL;
1467 END IF;
1468
1469 IF l_flow_schedule_rec.overhead_variance_account = FND_API.G_MISS_NUM THEN
1470 l_flow_schedule_rec.overhead_variance_account := NULL;
1471 END IF;
1472
1473 IF l_flow_schedule_rec.planned_quantity = FND_API.G_MISS_NUM THEN
1474 l_flow_schedule_rec.planned_quantity := NULL;
1475 END IF;
1476
1477 IF l_flow_schedule_rec.primary_item_id = FND_API.G_MISS_NUM THEN
1478 l_flow_schedule_rec.primary_item_id := NULL;
1479 END IF;
1480
1481 IF l_flow_schedule_rec.program_application_id = FND_API.G_MISS_NUM THEN
1482 l_flow_schedule_rec.program_application_id := NULL;
1483 END IF;
1484
1485 IF l_flow_schedule_rec.program_id = FND_API.G_MISS_NUM THEN
1486 l_flow_schedule_rec.program_id := NULL;
1487 END IF;
1488
1489 IF l_flow_schedule_rec.program_update_date = FND_API.G_MISS_DATE THEN
1490 l_flow_schedule_rec.program_update_date := NULL;
1491 END IF;
1492
1493 IF l_flow_schedule_rec.project_id = FND_API.G_MISS_NUM THEN
1494 l_flow_schedule_rec.project_id := NULL;
1495 END IF;
1496
1497 IF l_flow_schedule_rec.quantity_completed = FND_API.G_MISS_NUM THEN
1498 l_flow_schedule_rec.quantity_completed := NULL;
1499 END IF;
1500
1501 IF l_flow_schedule_rec.request_id = FND_API.G_MISS_NUM THEN
1502 l_flow_schedule_rec.request_id := NULL;
1503 END IF;
1504
1505 IF l_flow_schedule_rec.resource_account = FND_API.G_MISS_NUM THEN
1506 l_flow_schedule_rec.resource_account := NULL;
1507 END IF;
1508
1509 IF l_flow_schedule_rec.resource_variance_account = FND_API.G_MISS_NUM THEN
1510 l_flow_schedule_rec.resource_variance_account := NULL;
1511 END IF;
1512
1513 IF l_flow_schedule_rec.routing_revision = FND_API.G_MISS_CHAR THEN
1514 l_flow_schedule_rec.routing_revision := NULL;
1515 END IF;
1516
1517 IF l_flow_schedule_rec.routing_revision_date = FND_API.G_MISS_DATE THEN
1518 l_flow_schedule_rec.routing_revision_date := NULL;
1519 END IF;
1520
1521 IF l_flow_schedule_rec.scheduled_completion_date = FND_API.G_MISS_DATE THEN
1522 l_flow_schedule_rec.scheduled_completion_date := NULL;
1523 END IF;
1524
1525 IF l_flow_schedule_rec.scheduled_flag = FND_API.G_MISS_NUM THEN
1526 l_flow_schedule_rec.scheduled_flag := NULL;
1527 END IF;
1528
1529 IF l_flow_schedule_rec.scheduled_start_date = FND_API.G_MISS_DATE THEN
1530 l_flow_schedule_rec.scheduled_start_date := NULL;
1531 END IF;
1532
1533 IF l_flow_schedule_rec.schedule_group_id = FND_API.G_MISS_NUM THEN
1534 l_flow_schedule_rec.schedule_group_id := NULL;
1535 END IF;
1536
1537 IF l_flow_schedule_rec.schedule_number = FND_API.G_MISS_CHAR THEN
1538 l_flow_schedule_rec.schedule_number := NULL;
1539 END IF;
1540
1541 IF l_flow_schedule_rec.status = FND_API.G_MISS_NUM THEN
1542 l_flow_schedule_rec.status := NULL;
1543 END IF;
1544
1545 IF l_flow_schedule_rec.std_cost_adjustment_acct = FND_API.G_MISS_NUM THEN
1546 l_flow_schedule_rec.std_cost_adjustment_acct := NULL;
1547 END IF;
1548
1549 IF l_flow_schedule_rec.task_id = FND_API.G_MISS_NUM THEN
1550 l_flow_schedule_rec.task_id := NULL;
1551 END IF;
1552
1553 IF l_flow_schedule_rec.wip_entity_id = FND_API.G_MISS_NUM THEN
1554 l_flow_schedule_rec.wip_entity_id := NULL;
1555 END IF;
1556
1557 IF l_flow_schedule_rec.end_item_unit_number = FND_API.G_MISS_CHAR THEN
1558 l_flow_schedule_rec.end_item_unit_number := NULL;
1559 END IF;
1560
1561 IF l_flow_schedule_rec.quantity_scrapped = FND_API.G_MISS_NUM THEN
1562 l_flow_schedule_rec.quantity_scrapped := NULL;
1563 END IF;
1564
1565 IF l_flow_schedule_rec.kanban_card_id = FND_API.G_MISS_NUM THEN
1566 l_flow_schedule_rec.kanban_card_id := NULL;
1567 END IF;
1568
1569 IF l_flow_schedule_rec.synch_schedule_num = FND_API.G_MISS_CHAR THEN
1570 l_flow_schedule_rec.synch_schedule_num := NULL;
1571 END IF;
1572
1573 IF l_flow_schedule_rec.synch_operation_seq_num = FND_API.G_MISS_NUM THEN
1574 l_flow_schedule_rec.synch_operation_seq_num := NULL;
1575 END IF;
1576
1577 IF l_flow_schedule_rec.roll_forwarded_flag = FND_API.G_MISS_NUM THEN
1578 l_flow_schedule_rec.roll_forwarded_flag := NULL;
1579 END IF;
1580
1581 IF l_flow_schedule_rec.current_line_operation = FND_API.G_MISS_NUM THEN
1582 l_flow_schedule_rec.current_line_operation := NULL;
1583 END IF;
1584
1585 RETURN l_flow_schedule_rec;
1586
1587 END Convert_Miss_To_Null;
1588
1589 -- Procedure Update_Row
1590
1591 PROCEDURE Update_Row
1592 ( p_flow_schedule_rec IN MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
1593 )
1594 IS
1595 --bug 3906891: also changed the p_flow_schedules_rec.XXX to l_flow_schedule_rec.XXX
1596 --in the UPDATE statement below
1597 l_flow_schedule_rec MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type := Convert_Miss_To_Null (p_flow_schedule_rec);
1598 BEGIN
1599
1600 UPDATE WIP_FLOW_SCHEDULES
1601 SET ALTERNATE_BOM_DESIGNATOR = l_flow_schedule_rec.alternate_bom_designator
1602 , ALTERNATE_ROUTING_DESIGNATOR = l_flow_schedule_rec.alternate_routing_desig
1603 , ATTRIBUTE1 = l_flow_schedule_rec.attribute1
1604 , ATTRIBUTE10 = l_flow_schedule_rec.attribute10
1605 , ATTRIBUTE11 = l_flow_schedule_rec.attribute11
1606 , ATTRIBUTE12 = l_flow_schedule_rec.attribute12
1607 , ATTRIBUTE13 = l_flow_schedule_rec.attribute13
1608 , ATTRIBUTE14 = l_flow_schedule_rec.attribute14
1609 , ATTRIBUTE15 = l_flow_schedule_rec.attribute15
1610 , ATTRIBUTE2 = l_flow_schedule_rec.attribute2
1611 , ATTRIBUTE3 = l_flow_schedule_rec.attribute3
1612 , ATTRIBUTE4 = l_flow_schedule_rec.attribute4
1613 , ATTRIBUTE5 = l_flow_schedule_rec.attribute5
1614 , ATTRIBUTE6 = l_flow_schedule_rec.attribute6
1615 , ATTRIBUTE7 = l_flow_schedule_rec.attribute7
1616 , ATTRIBUTE8 = l_flow_schedule_rec.attribute8
1617 , ATTRIBUTE9 = l_flow_schedule_rec.attribute9
1618 , ATTRIBUTE_CATEGORY = l_flow_schedule_rec.attribute_category
1619 , BOM_REVISION = l_flow_schedule_rec.bom_revision
1620 , BOM_REVISION_DATE = l_flow_schedule_rec.bom_revision_date
1621 , BUILD_SEQUENCE = l_flow_schedule_rec.build_sequence
1622 , CLASS_CODE = l_flow_schedule_rec.class_code
1623 , COMPLETION_LOCATOR_ID = l_flow_schedule_rec.completion_locator_id
1624 , COMPLETION_SUBINVENTORY = l_flow_schedule_rec.completion_subinventory
1625 , CREATED_BY = l_flow_schedule_rec.created_by
1626 , CREATION_DATE = l_flow_schedule_rec.creation_date
1627 , DATE_CLOSED = l_flow_schedule_rec.date_closed
1628 , DEMAND_CLASS = l_flow_schedule_rec.demand_class
1629 , DEMAND_SOURCE_DELIVERY = l_flow_schedule_rec.demand_source_delivery
1630 , DEMAND_SOURCE_HEADER_ID = l_flow_schedule_rec.demand_source_header_id
1631 , DEMAND_SOURCE_LINE = l_flow_schedule_rec.demand_source_line
1632 , DEMAND_SOURCE_TYPE = l_flow_schedule_rec.demand_source_type
1633 , LAST_UPDATED_BY = l_flow_schedule_rec.last_updated_by
1634 , LAST_UPDATE_DATE = l_flow_schedule_rec.last_update_date
1635 , LAST_UPDATE_LOGIN = l_flow_schedule_rec.last_update_login
1636 , LINE_ID = l_flow_schedule_rec.line_id
1637 , MATERIAL_ACCOUNT = l_flow_schedule_rec.material_account
1638 , MATERIAL_OVERHEAD_ACCOUNT = l_flow_schedule_rec.material_overhead_account
1639 , MATERIAL_VARIANCE_ACCOUNT = l_flow_schedule_rec.material_variance_account
1640 , MPS_NET_QUANTITY = l_flow_schedule_rec.mps_net_quantity
1641 , MPS_SCHEDULED_COMPLETION_DATE = l_flow_schedule_rec.mps_scheduled_comp_date
1642 , ORGANIZATION_ID = l_flow_schedule_rec.organization_id
1643 , OUTSIDE_PROCESSING_ACCOUNT = l_flow_schedule_rec.outside_processing_acct
1644 , OUTSIDE_PROC_VARIANCE_ACCOUNT = l_flow_schedule_rec.outside_proc_var_acct
1645 , OVERHEAD_ACCOUNT = l_flow_schedule_rec.overhead_account
1646 , OVERHEAD_VARIANCE_ACCOUNT = l_flow_schedule_rec.overhead_variance_account
1647 , PLANNED_QUANTITY = l_flow_schedule_rec.planned_quantity
1648 , PRIMARY_ITEM_ID = l_flow_schedule_rec.primary_item_id
1649 , PROGRAM_APPLICATION_ID = l_flow_schedule_rec.program_application_id
1650 , PROGRAM_ID = l_flow_schedule_rec.program_id
1651 , PROGRAM_UPDATE_DATE = l_flow_schedule_rec.program_update_date
1652 , PROJECT_ID = l_flow_schedule_rec.project_id
1653 , QUANTITY_COMPLETED = l_flow_schedule_rec.quantity_completed
1654 , REQUEST_ID = l_flow_schedule_rec.request_id
1655 , RESOURCE_ACCOUNT = l_flow_schedule_rec.resource_account
1656 , RESOURCE_VARIANCE_ACCOUNT = l_flow_schedule_rec.resource_variance_account
1657 , ROUTING_REVISION = l_flow_schedule_rec.routing_revision
1658 , ROUTING_REVISION_DATE = l_flow_schedule_rec.routing_revision_date
1659 , SCHEDULED_COMPLETION_DATE = l_flow_schedule_rec.scheduled_completion_date
1660 , SCHEDULED_FLAG = l_flow_schedule_rec.scheduled_flag
1661 , SCHEDULED_START_DATE = l_flow_schedule_rec.scheduled_start_date
1662 , SCHEDULE_GROUP_ID = l_flow_schedule_rec.schedule_group_id
1663 , SCHEDULE_NUMBER = l_flow_schedule_rec.schedule_number
1664 , STATUS = l_flow_schedule_rec.status
1665 , STD_COST_ADJUSTMENT_ACCOUNT = l_flow_schedule_rec.std_cost_adjustment_acct
1666 , TASK_ID = l_flow_schedule_rec.task_id
1667 , END_ITEM_UNIT_NUMBER = l_flow_schedule_rec.end_item_unit_number
1668 , QUANTITY_SCRAPPED = l_flow_schedule_rec.quantity_scrapped
1669 , WIP_ENTITY_ID = l_flow_schedule_rec.wip_entity_id
1670 WHERE ORGANIZATION_ID = l_flow_schedule_rec.organization_id
1671 AND WIP_ENTITY_ID = l_flow_schedule_rec.wip_entity_id
1672 ;
1673
1674 EXCEPTION
1675
1676 WHEN OTHERS THEN
1677
1678 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1679 THEN
1680 FND_MSG_PUB.Add_Exc_Msg
1681 ( G_PKG_NAME
1682 , 'Update_Row'
1683 );
1684 END IF;
1685
1686 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1687
1688 END Update_Row;
1689
1690 -- Procedure Insert_Row
1691
1692 PROCEDURE Insert_Row
1693 ( p_flow_schedule_rec IN MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
1694 )
1695 IS
1696 --bug 3906891: also changed the p_flow_schedules_rec.XXX to l_flow_schedule_rec.XXX
1697 --in the INSERT statement below
1698 l_flow_schedule_rec MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type := Convert_Miss_To_Null (p_flow_schedule_rec);
1699 BEGIN
1700
1701 INSERT INTO WIP_FLOW_SCHEDULES
1702 ( ALTERNATE_BOM_DESIGNATOR
1703 , ALTERNATE_ROUTING_DESIGNATOR
1704 , ATTRIBUTE1
1705 , ATTRIBUTE10
1706 , ATTRIBUTE11
1707 , ATTRIBUTE12
1708 , ATTRIBUTE13
1709 , ATTRIBUTE14
1710 , ATTRIBUTE15
1711 , ATTRIBUTE2
1712 , ATTRIBUTE3
1713 , ATTRIBUTE4
1714 , ATTRIBUTE5
1715 , ATTRIBUTE6
1716 , ATTRIBUTE7
1717 , ATTRIBUTE8
1718 , ATTRIBUTE9
1719 , ATTRIBUTE_CATEGORY
1720 , BOM_REVISION
1721 , BOM_REVISION_DATE
1722 , BUILD_SEQUENCE
1723 , CLASS_CODE
1724 , COMPLETION_LOCATOR_ID
1725 , COMPLETION_SUBINVENTORY
1726 , CREATED_BY
1727 , CREATION_DATE
1728 , DATE_CLOSED
1729 , DEMAND_CLASS
1730 , DEMAND_SOURCE_DELIVERY
1731 , DEMAND_SOURCE_HEADER_ID
1732 , DEMAND_SOURCE_LINE
1733 , DEMAND_SOURCE_TYPE
1734 , LAST_UPDATED_BY
1735 , LAST_UPDATE_DATE
1736 , LAST_UPDATE_LOGIN
1737 , LINE_ID
1738 , MATERIAL_ACCOUNT
1739 , MATERIAL_OVERHEAD_ACCOUNT
1740 , MATERIAL_VARIANCE_ACCOUNT
1741 , MPS_NET_QUANTITY
1742 , MPS_SCHEDULED_COMPLETION_DATE
1743 , ORGANIZATION_ID
1744 , OUTSIDE_PROCESSING_ACCOUNT
1745 , OUTSIDE_PROC_VARIANCE_ACCOUNT
1746 , OVERHEAD_ACCOUNT
1747 , OVERHEAD_VARIANCE_ACCOUNT
1748 , PLANNED_QUANTITY
1749 , PRIMARY_ITEM_ID
1750 , PROGRAM_APPLICATION_ID
1751 , PROGRAM_ID
1752 , PROGRAM_UPDATE_DATE
1753 , PROJECT_ID
1754 , QUANTITY_COMPLETED
1755 , REQUEST_ID
1756 , RESOURCE_ACCOUNT
1757 , RESOURCE_VARIANCE_ACCOUNT
1758 , ROUTING_REVISION
1759 , ROUTING_REVISION_DATE
1760 , SCHEDULED_COMPLETION_DATE
1761 , SCHEDULED_FLAG
1762 , SCHEDULED_START_DATE
1763 , SCHEDULE_GROUP_ID
1764 , SCHEDULE_NUMBER
1765 , STATUS
1766 , STD_COST_ADJUSTMENT_ACCOUNT
1767 , TASK_ID
1768 , END_ITEM_UNIT_NUMBER
1769 , QUANTITY_SCRAPPED
1770 , WIP_ENTITY_ID
1771 , KANBAN_CARD_ID
1772 , SYNCH_SCHEDULE_NUM
1773 , SYNCH_OPERATION_SEQ_NUM
1774 , ROLL_FORWARDED_FLAG
1775 , CURRENT_LINE_OPERATION
1776 )
1777 VALUES
1778 ( l_flow_schedule_rec.alternate_bom_designator
1779 , l_flow_schedule_rec.alternate_routing_desig
1780 , l_flow_schedule_rec.attribute1
1781 , l_flow_schedule_rec.attribute10
1782 , l_flow_schedule_rec.attribute11
1783 , l_flow_schedule_rec.attribute12
1784 , l_flow_schedule_rec.attribute13
1785 , l_flow_schedule_rec.attribute14
1786 , l_flow_schedule_rec.attribute15
1787 , l_flow_schedule_rec.attribute2
1788 , l_flow_schedule_rec.attribute3
1789 , l_flow_schedule_rec.attribute4
1790 , l_flow_schedule_rec.attribute5
1791 , l_flow_schedule_rec.attribute6
1792 , l_flow_schedule_rec.attribute7
1793 , l_flow_schedule_rec.attribute8
1794 , l_flow_schedule_rec.attribute9
1795 , l_flow_schedule_rec.attribute_category
1796 , l_flow_schedule_rec.bom_revision
1797 , l_flow_schedule_rec.bom_revision_date
1798 , l_flow_schedule_rec.build_sequence
1799 , l_flow_schedule_rec.class_code
1800 , l_flow_schedule_rec.completion_locator_id
1801 , l_flow_schedule_rec.completion_subinventory
1802 , l_flow_schedule_rec.created_by
1803 , l_flow_schedule_rec.creation_date
1804 , l_flow_schedule_rec.date_closed
1805 , l_flow_schedule_rec.demand_class
1806 , l_flow_schedule_rec.demand_source_delivery
1807 , l_flow_schedule_rec.demand_source_header_id
1808 , l_flow_schedule_rec.demand_source_line
1809 , l_flow_schedule_rec.demand_source_type
1810 , l_flow_schedule_rec.last_updated_by
1811 , l_flow_schedule_rec.last_update_date
1812 , l_flow_schedule_rec.last_update_login
1813 , l_flow_schedule_rec.line_id
1814 , l_flow_schedule_rec.material_account
1815 , l_flow_schedule_rec.material_overhead_account
1816 , l_flow_schedule_rec.material_variance_account
1817 , l_flow_schedule_rec.mps_net_quantity
1818 , l_flow_schedule_rec.mps_scheduled_comp_date
1819 , l_flow_schedule_rec.organization_id
1820 , l_flow_schedule_rec.outside_processing_acct
1821 , l_flow_schedule_rec.outside_proc_var_acct
1822 , l_flow_schedule_rec.overhead_account
1823 , l_flow_schedule_rec.overhead_variance_account
1824 , l_flow_schedule_rec.planned_quantity
1825 , l_flow_schedule_rec.primary_item_id
1826 , l_flow_schedule_rec.program_application_id
1827 , l_flow_schedule_rec.program_id
1828 , l_flow_schedule_rec.program_update_date
1829 , l_flow_schedule_rec.project_id
1830 , l_flow_schedule_rec.quantity_completed
1831 , l_flow_schedule_rec.request_id
1832 , l_flow_schedule_rec.resource_account
1833 , l_flow_schedule_rec.resource_variance_account
1834 , l_flow_schedule_rec.routing_revision
1835 , l_flow_schedule_rec.routing_revision_date
1836 , l_flow_schedule_rec.scheduled_completion_date
1837 , l_flow_schedule_rec.scheduled_flag
1838 , l_flow_schedule_rec.scheduled_start_date
1839 , l_flow_schedule_rec.schedule_group_id
1840 , l_flow_schedule_rec.schedule_number
1841 , l_flow_schedule_rec.status
1842 , l_flow_schedule_rec.std_cost_adjustment_acct
1843 , l_flow_schedule_rec.task_id
1844 , l_flow_schedule_rec.end_item_unit_number
1845 , l_flow_schedule_rec.quantity_scrapped
1846 , l_flow_schedule_rec.wip_entity_id
1847 , l_flow_schedule_rec.kanban_card_id
1848 , l_flow_schedule_rec.synch_schedule_num
1849 , l_flow_schedule_rec.synch_operation_seq_num
1850 , l_flow_schedule_rec.roll_forwarded_flag
1851 , l_flow_schedule_rec.current_line_operation
1852 );
1853
1854 EXCEPTION
1855
1856 WHEN OTHERS THEN
1857
1858 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1859 THEN
1860 FND_MSG_PUB.Add_Exc_Msg
1861 ( G_PKG_NAME
1862 , 'Insert_Row'
1863 );
1864 END IF;
1865
1866 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1867
1868 END Insert_Row;
1869
1870 -- Procedure Delete_Row
1871
1872 PROCEDURE Delete_Row
1873 ( p_wip_entity_id IN NUMBER
1874 )
1875 IS
1876 BEGIN
1877
1878 DELETE FROM WIP_FLOW_SCHEDULES
1879 WHERE WIP_ENTITY_ID = p_wip_entity_id
1880 ;
1881
1882 EXCEPTION
1883
1884 WHEN OTHERS THEN
1885
1886 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1887 THEN
1888 FND_MSG_PUB.Add_Exc_Msg
1889 ( G_PKG_NAME
1890 , 'Delete_Row'
1891 );
1892 END IF;
1893
1894 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1895
1896 END Delete_Row;
1897
1898 -- Function Query_Row
1899
1900 FUNCTION Query_Row
1901 ( p_wip_entity_id IN NUMBER
1902 ) RETURN MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
1903 IS
1904 l_flow_schedule_rec MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type;
1905 BEGIN
1906
1907 SELECT ALTERNATE_BOM_DESIGNATOR
1908 , ALTERNATE_ROUTING_DESIGNATOR
1909 , ATTRIBUTE1
1910 , ATTRIBUTE10
1911 , ATTRIBUTE11
1912 , ATTRIBUTE12
1913 , ATTRIBUTE13
1914 , ATTRIBUTE14
1915 , ATTRIBUTE15
1916 , ATTRIBUTE2
1917 , ATTRIBUTE3
1918 , ATTRIBUTE4
1919 , ATTRIBUTE5
1920 , ATTRIBUTE6
1921 , ATTRIBUTE7
1922 , ATTRIBUTE8
1923 , ATTRIBUTE9
1924 , ATTRIBUTE_CATEGORY
1925 , BOM_REVISION
1926 , BOM_REVISION_DATE
1927 , BUILD_SEQUENCE
1928 , CLASS_CODE
1929 , COMPLETION_LOCATOR_ID
1930 , COMPLETION_SUBINVENTORY
1931 , CREATED_BY
1932 , CREATION_DATE
1933 , DATE_CLOSED
1934 , DEMAND_CLASS
1935 , DEMAND_SOURCE_DELIVERY
1936 , DEMAND_SOURCE_HEADER_ID
1937 , DEMAND_SOURCE_LINE
1938 , DEMAND_SOURCE_TYPE
1939 , LAST_UPDATED_BY
1940 , LAST_UPDATE_DATE
1941 , LAST_UPDATE_LOGIN
1942 , LINE_ID
1943 , MATERIAL_ACCOUNT
1944 , MATERIAL_OVERHEAD_ACCOUNT
1945 , MATERIAL_VARIANCE_ACCOUNT
1946 , MPS_NET_QUANTITY
1947 , MPS_SCHEDULED_COMPLETION_DATE
1948 , ORGANIZATION_ID
1949 , OUTSIDE_PROCESSING_ACCOUNT
1950 , OUTSIDE_PROC_VARIANCE_ACCOUNT
1951 , OVERHEAD_ACCOUNT
1952 , OVERHEAD_VARIANCE_ACCOUNT
1953 , PLANNED_QUANTITY
1954 , PRIMARY_ITEM_ID
1955 , PROGRAM_APPLICATION_ID
1956 , PROGRAM_ID
1957 , PROGRAM_UPDATE_DATE
1958 , PROJECT_ID
1959 , QUANTITY_COMPLETED
1960 , REQUEST_ID
1961 , RESOURCE_ACCOUNT
1962 , RESOURCE_VARIANCE_ACCOUNT
1963 , ROUTING_REVISION
1964 , ROUTING_REVISION_DATE
1965 , SCHEDULED_COMPLETION_DATE
1966 , SCHEDULED_FLAG
1967 , SCHEDULED_START_DATE
1968 , SCHEDULE_GROUP_ID
1969 , SCHEDULE_NUMBER
1970 , STATUS
1971 , STD_COST_ADJUSTMENT_ACCOUNT
1972 , TASK_ID
1973 , WIP_ENTITY_ID
1974 , END_ITEM_UNIT_NUMBER
1975 , QUANTITY_SCRAPPED
1976 INTO l_flow_schedule_rec.alternate_bom_designator
1977 , l_flow_schedule_rec.alternate_routing_desig
1978 , l_flow_schedule_rec.attribute1
1979 , l_flow_schedule_rec.attribute10
1980 , l_flow_schedule_rec.attribute11
1981 , l_flow_schedule_rec.attribute12
1982 , l_flow_schedule_rec.attribute13
1983 , l_flow_schedule_rec.attribute14
1984 , l_flow_schedule_rec.attribute15
1985 , l_flow_schedule_rec.attribute2
1986 , l_flow_schedule_rec.attribute3
1987 , l_flow_schedule_rec.attribute4
1988 , l_flow_schedule_rec.attribute5
1989 , l_flow_schedule_rec.attribute6
1990 , l_flow_schedule_rec.attribute7
1991 , l_flow_schedule_rec.attribute8
1992 , l_flow_schedule_rec.attribute9
1993 , l_flow_schedule_rec.attribute_category
1994 , l_flow_schedule_rec.bom_revision
1995 , l_flow_schedule_rec.bom_revision_date
1996 , l_flow_schedule_rec.build_sequence
1997 , l_flow_schedule_rec.class_code
1998 , l_flow_schedule_rec.completion_locator_id
1999 , l_flow_schedule_rec.completion_subinventory
2000 , l_flow_schedule_rec.created_by
2001 , l_flow_schedule_rec.creation_date
2002 , l_flow_schedule_rec.date_closed
2003 , l_flow_schedule_rec.demand_class
2004 , l_flow_schedule_rec.demand_source_delivery
2005 , l_flow_schedule_rec.demand_source_header_id
2006 , l_flow_schedule_rec.demand_source_line
2007 , l_flow_schedule_rec.demand_source_type
2008 , l_flow_schedule_rec.last_updated_by
2009 , l_flow_schedule_rec.last_update_date
2010 , l_flow_schedule_rec.last_update_login
2011 , l_flow_schedule_rec.line_id
2012 , l_flow_schedule_rec.material_account
2013 , l_flow_schedule_rec.material_overhead_account
2014 , l_flow_schedule_rec.material_variance_account
2015 , l_flow_schedule_rec.mps_net_quantity
2016 , l_flow_schedule_rec.mps_scheduled_comp_date
2017 , l_flow_schedule_rec.organization_id
2018 , l_flow_schedule_rec.outside_processing_acct
2019 , l_flow_schedule_rec.outside_proc_var_acct
2020 , l_flow_schedule_rec.overhead_account
2021 , l_flow_schedule_rec.overhead_variance_account
2022 , l_flow_schedule_rec.planned_quantity
2023 , l_flow_schedule_rec.primary_item_id
2024 , l_flow_schedule_rec.program_application_id
2025 , l_flow_schedule_rec.program_id
2026 , l_flow_schedule_rec.program_update_date
2027 , l_flow_schedule_rec.project_id
2028 , l_flow_schedule_rec.quantity_completed
2029 , l_flow_schedule_rec.request_id
2030 , l_flow_schedule_rec.resource_account
2031 , l_flow_schedule_rec.resource_variance_account
2032 , l_flow_schedule_rec.routing_revision
2033 , l_flow_schedule_rec.routing_revision_date
2034 , l_flow_schedule_rec.scheduled_completion_date
2035 , l_flow_schedule_rec.scheduled_flag
2036 , l_flow_schedule_rec.scheduled_start_date
2037 , l_flow_schedule_rec.schedule_group_id
2038 , l_flow_schedule_rec.schedule_number
2039 , l_flow_schedule_rec.status
2040 , l_flow_schedule_rec.std_cost_adjustment_acct
2041 , l_flow_schedule_rec.task_id
2042 , l_flow_schedule_rec.wip_entity_id
2043 , l_flow_schedule_rec.end_item_unit_number
2044 , l_flow_schedule_rec.quantity_scrapped
2045 FROM WIP_FLOW_SCHEDULES
2046 WHERE WIP_ENTITY_ID = p_wip_entity_id
2047 ;
2048
2049 RETURN l_flow_schedule_rec;
2050
2051 EXCEPTION
2052
2053 WHEN OTHERS THEN
2054
2055 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2056 THEN
2057 FND_MSG_PUB.Add_Exc_Msg
2058 ( G_PKG_NAME
2059 , 'Query_Row'
2060 );
2061 END IF;
2062
2063 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2064
2065 END Query_Row;
2066
2067 -- Procedure lock_Row
2068 --
2069
2070 PROCEDURE Lock_Row
2071 ( x_return_status OUT NOCOPY VARCHAR2
2072 , p_flow_schedule_rec IN MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
2073 , x_flow_schedule_rec IN OUT NOCOPY MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
2074 )
2075 IS
2076 l_flow_schedule_rec MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type;
2077 temp VARCHAR2(240);
2078 BEGIN
2079
2080 SELECT ALTERNATE_BOM_DESIGNATOR
2081 , ALTERNATE_ROUTING_DESIGNATOR
2082 , ATTRIBUTE1
2083 , ATTRIBUTE10
2084 , ATTRIBUTE11
2085 , ATTRIBUTE12
2086 , ATTRIBUTE13
2087 , ATTRIBUTE14
2088 , ATTRIBUTE15
2089 , ATTRIBUTE2
2090 , ATTRIBUTE3
2091 , ATTRIBUTE4
2092 , ATTRIBUTE5
2093 , ATTRIBUTE6
2094 , ATTRIBUTE7
2095 , ATTRIBUTE8
2096 , ATTRIBUTE9
2097 , ATTRIBUTE_CATEGORY
2098 , BOM_REVISION
2099 , BOM_REVISION_DATE
2100 , BUILD_SEQUENCE
2101 , CLASS_CODE
2102 , COMPLETION_LOCATOR_ID
2103 , COMPLETION_SUBINVENTORY
2104 , CREATED_BY
2105 , CREATION_DATE
2106 , DATE_CLOSED
2107 , DEMAND_CLASS
2108 , DEMAND_SOURCE_DELIVERY
2109 , DEMAND_SOURCE_HEADER_ID
2110 , DEMAND_SOURCE_LINE
2111 , DEMAND_SOURCE_TYPE
2112 , LAST_UPDATED_BY
2113 , LAST_UPDATE_DATE
2114 , LAST_UPDATE_LOGIN
2115 , LINE_ID
2116 , MATERIAL_ACCOUNT
2117 , MATERIAL_OVERHEAD_ACCOUNT
2118 , MATERIAL_VARIANCE_ACCOUNT
2119 , MPS_NET_QUANTITY
2120 , MPS_SCHEDULED_COMPLETION_DATE
2121 , ORGANIZATION_ID
2122 , OUTSIDE_PROCESSING_ACCOUNT
2123 , OUTSIDE_PROC_VARIANCE_ACCOUNT
2124 , OVERHEAD_ACCOUNT
2125 , OVERHEAD_VARIANCE_ACCOUNT
2126 , PLANNED_QUANTITY
2127 , PRIMARY_ITEM_ID
2128 , PROGRAM_APPLICATION_ID
2129 , PROGRAM_ID
2130 , PROGRAM_UPDATE_DATE
2131 , PROJECT_ID
2132 , QUANTITY_COMPLETED
2133 , REQUEST_ID
2134 , RESOURCE_ACCOUNT
2135 , RESOURCE_VARIANCE_ACCOUNT
2136 , ROUTING_REVISION
2137 , ROUTING_REVISION_DATE
2138 , SCHEDULED_COMPLETION_DATE
2139 , SCHEDULED_FLAG
2140 , SCHEDULED_START_DATE
2141 , SCHEDULE_GROUP_ID
2142 , SCHEDULE_NUMBER
2143 , STATUS
2144 , STD_COST_ADJUSTMENT_ACCOUNT
2145 , TASK_ID
2146 , WIP_ENTITY_ID
2147 , END_ITEM_UNIT_NUMBER
2148 , QUANTITY_SCRAPPED
2149 INTO l_flow_schedule_rec.alternate_bom_designator
2150 , l_flow_schedule_rec.alternate_routing_desig
2151 , l_flow_schedule_rec.attribute1
2152 , l_flow_schedule_rec.attribute10
2153 , l_flow_schedule_rec.attribute11
2154 , l_flow_schedule_rec.attribute12
2155 , l_flow_schedule_rec.attribute13
2156 , l_flow_schedule_rec.attribute14
2157 , l_flow_schedule_rec.attribute15
2158 , l_flow_schedule_rec.attribute2
2159 , l_flow_schedule_rec.attribute3
2160 , l_flow_schedule_rec.attribute4
2161 , l_flow_schedule_rec.attribute5
2162 , l_flow_schedule_rec.attribute6
2163 , l_flow_schedule_rec.attribute7
2164 , l_flow_schedule_rec.attribute8
2165 , l_flow_schedule_rec.attribute9
2166 , l_flow_schedule_rec.attribute_category
2167 , l_flow_schedule_rec.bom_revision
2168 , l_flow_schedule_rec.bom_revision_date
2169 , l_flow_schedule_rec.build_sequence
2170 , l_flow_schedule_rec.class_code
2171 , l_flow_schedule_rec.completion_locator_id
2172 , l_flow_schedule_rec.completion_subinventory
2173 , l_flow_schedule_rec.created_by
2174 , l_flow_schedule_rec.creation_date
2175 , l_flow_schedule_rec.date_closed
2176 , l_flow_schedule_rec.demand_class
2177 , l_flow_schedule_rec.demand_source_delivery
2178 , l_flow_schedule_rec.demand_source_header_id
2179 , l_flow_schedule_rec.demand_source_line
2180 , l_flow_schedule_rec.demand_source_type
2181 , l_flow_schedule_rec.last_updated_by
2182 , l_flow_schedule_rec.last_update_date
2183 , l_flow_schedule_rec.last_update_login
2184 , l_flow_schedule_rec.line_id
2185 , l_flow_schedule_rec.material_account
2186 , l_flow_schedule_rec.material_overhead_account
2187 , l_flow_schedule_rec.material_variance_account
2188 , l_flow_schedule_rec.mps_net_quantity
2189 , l_flow_schedule_rec.mps_scheduled_comp_date
2190 , l_flow_schedule_rec.organization_id
2191 , l_flow_schedule_rec.outside_processing_acct
2192 , l_flow_schedule_rec.outside_proc_var_acct
2193 , l_flow_schedule_rec.overhead_account
2194 , l_flow_schedule_rec.overhead_variance_account
2195 , l_flow_schedule_rec.planned_quantity
2196 , l_flow_schedule_rec.primary_item_id
2197 , l_flow_schedule_rec.program_application_id
2198 , l_flow_schedule_rec.program_id
2199 , l_flow_schedule_rec.program_update_date
2200 , l_flow_schedule_rec.project_id
2201 , l_flow_schedule_rec.quantity_completed
2202 , l_flow_schedule_rec.request_id
2203 , l_flow_schedule_rec.resource_account
2204 , l_flow_schedule_rec.resource_variance_account
2205 , l_flow_schedule_rec.routing_revision
2206 , l_flow_schedule_rec.routing_revision_date
2207 , l_flow_schedule_rec.scheduled_completion_date
2208 , l_flow_schedule_rec.scheduled_flag
2209 , l_flow_schedule_rec.scheduled_start_date
2210 , l_flow_schedule_rec.schedule_group_id
2211 , l_flow_schedule_rec.schedule_number
2212 , l_flow_schedule_rec.status
2213 , l_flow_schedule_rec.std_cost_adjustment_acct
2214 , l_flow_schedule_rec.task_id
2215 , l_flow_schedule_rec.wip_entity_id
2216 , l_flow_schedule_rec.end_item_unit_number
2217 , l_flow_schedule_rec.quantity_scrapped
2218 FROM WIP_FLOW_SCHEDULES
2219 WHERE WIP_ENTITY_ID = p_flow_schedule_rec.wip_entity_id
2220 FOR UPDATE NOWAIT;
2221
2222 -- Row locked. Compare IN attributes to DB attributes.
2223
2224 IF ( (l_flow_schedule_rec.alternate_bom_designator =
2225 p_flow_schedule_rec.alternate_bom_designator) OR
2226 ((p_flow_schedule_rec.alternate_bom_designator = FND_API.G_MISS_CHAR) OR
2227 ( (l_flow_schedule_rec.alternate_bom_designator IS NULL) AND
2228 (p_flow_schedule_rec.alternate_bom_designator IS NULL))))
2229 AND ( (l_flow_schedule_rec.alternate_routing_desig =
2230 p_flow_schedule_rec.alternate_routing_desig) OR
2231 ((p_flow_schedule_rec.alternate_routing_desig = FND_API.G_MISS_CHAR) OR
2232 ( (l_flow_schedule_rec.alternate_routing_desig IS NULL) AND
2233 (p_flow_schedule_rec.alternate_routing_desig IS NULL))))
2234 AND ( (l_flow_schedule_rec.attribute1 =
2235 p_flow_schedule_rec.attribute1) OR
2236 ((p_flow_schedule_rec.attribute1 = FND_API.G_MISS_CHAR) OR
2237 ( (l_flow_schedule_rec.attribute1 IS NULL) AND
2238 (p_flow_schedule_rec.attribute1 IS NULL))))
2239 AND ( (l_flow_schedule_rec.attribute10 =
2240 p_flow_schedule_rec.attribute10) OR
2241 ((p_flow_schedule_rec.attribute10 = FND_API.G_MISS_CHAR) OR
2242 ( (l_flow_schedule_rec.attribute10 IS NULL) AND
2243 (p_flow_schedule_rec.attribute10 IS NULL))))
2244 AND ( (l_flow_schedule_rec.attribute11 =
2245 p_flow_schedule_rec.attribute11) OR
2246 ((p_flow_schedule_rec.attribute11 = FND_API.G_MISS_CHAR) OR
2247 ( (l_flow_schedule_rec.attribute11 IS NULL) AND
2248 (p_flow_schedule_rec.attribute11 IS NULL))))
2249 AND ( (l_flow_schedule_rec.attribute12 =
2250 p_flow_schedule_rec.attribute12) OR
2251 ((p_flow_schedule_rec.attribute12 = FND_API.G_MISS_CHAR) OR
2252 ( (l_flow_schedule_rec.attribute12 IS NULL) AND
2253 (p_flow_schedule_rec.attribute12 IS NULL))))
2254 AND ( (l_flow_schedule_rec.attribute13 =
2255 p_flow_schedule_rec.attribute13) OR
2256 ((p_flow_schedule_rec.attribute13 = FND_API.G_MISS_CHAR) OR
2257 ( (l_flow_schedule_rec.attribute13 IS NULL) AND
2258 (p_flow_schedule_rec.attribute13 IS NULL))))
2259 AND ( (l_flow_schedule_rec.attribute14 =
2260 p_flow_schedule_rec.attribute14) OR
2261 ((p_flow_schedule_rec.attribute14 = FND_API.G_MISS_CHAR) OR
2262 ( (l_flow_schedule_rec.attribute14 IS NULL) AND
2263 (p_flow_schedule_rec.attribute14 IS NULL))))
2264 AND ( (l_flow_schedule_rec.attribute15 =
2265 p_flow_schedule_rec.attribute15) OR
2266 ((p_flow_schedule_rec.attribute15 = FND_API.G_MISS_CHAR) OR
2267 ( (l_flow_schedule_rec.attribute15 IS NULL) AND
2268 (p_flow_schedule_rec.attribute15 IS NULL))))
2269 AND ( (l_flow_schedule_rec.attribute2 =
2270 p_flow_schedule_rec.attribute2) OR
2271 ((p_flow_schedule_rec.attribute2 = FND_API.G_MISS_CHAR) OR
2272 ( (l_flow_schedule_rec.attribute2 IS NULL) AND
2273 (p_flow_schedule_rec.attribute2 IS NULL))))
2274 AND ( (l_flow_schedule_rec.attribute3 =
2275 p_flow_schedule_rec.attribute3) OR
2276 ((p_flow_schedule_rec.attribute3 = FND_API.G_MISS_CHAR) OR
2277 ( (l_flow_schedule_rec.attribute3 IS NULL) AND
2278 (p_flow_schedule_rec.attribute3 IS NULL))))
2279 AND ( (l_flow_schedule_rec.attribute4 =
2280 p_flow_schedule_rec.attribute4) OR
2281 ((p_flow_schedule_rec.attribute4 = FND_API.G_MISS_CHAR) OR
2282 ( (l_flow_schedule_rec.attribute4 IS NULL) AND
2283 (p_flow_schedule_rec.attribute4 IS NULL))))
2284 AND ( (l_flow_schedule_rec.attribute5 =
2285 p_flow_schedule_rec.attribute5) OR
2286 ((p_flow_schedule_rec.attribute5 = FND_API.G_MISS_CHAR) OR
2287 ( (l_flow_schedule_rec.attribute5 IS NULL) AND
2288 (p_flow_schedule_rec.attribute5 IS NULL))))
2289 AND ( (l_flow_schedule_rec.attribute6 =
2290 p_flow_schedule_rec.attribute6) OR
2291 ((p_flow_schedule_rec.attribute6 = FND_API.G_MISS_CHAR) OR
2292 ( (l_flow_schedule_rec.attribute6 IS NULL) AND
2293 (p_flow_schedule_rec.attribute6 IS NULL))))
2294 AND ( (l_flow_schedule_rec.attribute7 =
2295 p_flow_schedule_rec.attribute7) OR
2296 ((p_flow_schedule_rec.attribute7 = FND_API.G_MISS_CHAR) OR
2297 ( (l_flow_schedule_rec.attribute7 IS NULL) AND
2298 (p_flow_schedule_rec.attribute7 IS NULL))))
2299 AND ( (l_flow_schedule_rec.attribute8 =
2300 p_flow_schedule_rec.attribute8) OR
2301 ((p_flow_schedule_rec.attribute8 = FND_API.G_MISS_CHAR) OR
2302 ( (l_flow_schedule_rec.attribute8 IS NULL) AND
2303 (p_flow_schedule_rec.attribute8 IS NULL))))
2304 AND ( (l_flow_schedule_rec.attribute9 =
2305 p_flow_schedule_rec.attribute9) OR
2306 ((p_flow_schedule_rec.attribute9 = FND_API.G_MISS_CHAR) OR
2307 ( (l_flow_schedule_rec.attribute9 IS NULL) AND
2308 (p_flow_schedule_rec.attribute9 IS NULL))))
2309 AND ( (l_flow_schedule_rec.attribute_category =
2310 p_flow_schedule_rec.attribute_category) OR
2311 ((p_flow_schedule_rec.attribute_category = FND_API.G_MISS_CHAR) OR
2312 ( (l_flow_schedule_rec.attribute_category IS NULL) AND
2313 (p_flow_schedule_rec.attribute_category IS NULL))))
2314 AND ( (l_flow_schedule_rec.bom_revision =
2315 p_flow_schedule_rec.bom_revision) OR
2316 ((p_flow_schedule_rec.bom_revision = FND_API.G_MISS_CHAR) OR
2317 ( (l_flow_schedule_rec.bom_revision IS NULL) AND
2318 (p_flow_schedule_rec.bom_revision IS NULL))))
2319 AND ( (l_flow_schedule_rec.bom_revision_date =
2320 p_flow_schedule_rec.bom_revision_date) OR
2321 ((p_flow_schedule_rec.bom_revision_date = FND_API.G_MISS_DATE) OR
2322 ( (l_flow_schedule_rec.bom_revision_date IS NULL) AND
2323 (p_flow_schedule_rec.bom_revision_date IS NULL))))
2324 AND ( (l_flow_schedule_rec.build_sequence =
2325 p_flow_schedule_rec.build_sequence) OR
2326 ((p_flow_schedule_rec.build_sequence = FND_API.G_MISS_NUM) OR
2327 ( (l_flow_schedule_rec.build_sequence IS NULL) AND
2328 (p_flow_schedule_rec.build_sequence IS NULL))))
2329 AND ( (l_flow_schedule_rec.class_code =
2330 p_flow_schedule_rec.class_code) OR
2331 ((p_flow_schedule_rec.class_code = FND_API.G_MISS_CHAR) OR
2332 ( (l_flow_schedule_rec.class_code IS NULL) AND
2333 (p_flow_schedule_rec.class_code IS NULL))))
2334 AND ( (l_flow_schedule_rec.completion_locator_id =
2335 p_flow_schedule_rec.completion_locator_id) OR
2336 ((p_flow_schedule_rec.completion_locator_id = FND_API.G_MISS_NUM) OR
2337 ( (l_flow_schedule_rec.completion_locator_id IS NULL) AND
2338 (p_flow_schedule_rec.completion_locator_id IS NULL))))
2339 AND ( (l_flow_schedule_rec.completion_subinventory =
2340 p_flow_schedule_rec.completion_subinventory) OR
2341 ((p_flow_schedule_rec.completion_subinventory = FND_API.G_MISS_CHAR) OR
2342 ( (l_flow_schedule_rec.completion_subinventory IS NULL) AND
2343 (p_flow_schedule_rec.completion_subinventory IS NULL))))
2344 /* AND ( (l_flow_schedule_rec.created_by =
2345 p_flow_schedule_rec.created_by) OR
2346 ((p_flow_schedule_rec.created_by = FND_API.G_MISS_NUM) OR
2347 ( (l_flow_schedule_rec.created_by IS NULL) AND
2348 (p_flow_schedule_rec.created_by IS NULL))))
2349 AND ( (l_flow_schedule_rec.creation_date =
2350 p_flow_schedule_rec.creation_date) OR
2351 ((p_flow_schedule_rec.creation_date = FND_API.G_MISS_DATE) OR
2352 ( (l_flow_schedule_rec.creation_date IS NULL) AND
2353 (p_flow_schedule_rec.creation_date IS NULL)))) */
2354 AND ( (l_flow_schedule_rec.date_closed =
2355 p_flow_schedule_rec.date_closed) OR
2356 ((p_flow_schedule_rec.date_closed = FND_API.G_MISS_DATE) OR
2357 ( (l_flow_schedule_rec.date_closed IS NULL) AND
2358 (p_flow_schedule_rec.date_closed IS NULL))))
2359 AND ( (l_flow_schedule_rec.demand_class =
2360 p_flow_schedule_rec.demand_class) OR
2361 ((p_flow_schedule_rec.demand_class = FND_API.G_MISS_CHAR) OR
2362 ( (l_flow_schedule_rec.demand_class IS NULL) AND
2363 (p_flow_schedule_rec.demand_class IS NULL))))
2364 AND ( (l_flow_schedule_rec.demand_source_delivery =
2365 p_flow_schedule_rec.demand_source_delivery) OR
2366 ((p_flow_schedule_rec.demand_source_delivery = FND_API.G_MISS_CHAR) OR
2367 ( (l_flow_schedule_rec.demand_source_delivery IS NULL) AND
2368 (p_flow_schedule_rec.demand_source_delivery IS NULL))))
2369 AND ( (l_flow_schedule_rec.demand_source_header_id =
2370 p_flow_schedule_rec.demand_source_header_id) OR
2371 ((p_flow_schedule_rec.demand_source_header_id = FND_API.G_MISS_NUM) OR
2372 ( (l_flow_schedule_rec.demand_source_header_id IS NULL) AND
2373 (p_flow_schedule_rec.demand_source_header_id IS NULL))))
2374 AND ( (l_flow_schedule_rec.demand_source_line =
2375 p_flow_schedule_rec.demand_source_line) OR
2376 ((p_flow_schedule_rec.demand_source_line = FND_API.G_MISS_CHAR) OR
2377 ( (l_flow_schedule_rec.demand_source_line IS NULL) AND
2378 (p_flow_schedule_rec.demand_source_line IS NULL))))
2379 AND ( (l_flow_schedule_rec.demand_source_type =
2380 p_flow_schedule_rec.demand_source_type) OR
2381 ((p_flow_schedule_rec.demand_source_type = FND_API.G_MISS_NUM) OR
2382 ( (l_flow_schedule_rec.demand_source_type IS NULL) AND
2383 (p_flow_schedule_rec.demand_source_type IS NULL))))
2384 /* AND ( (l_flow_schedule_rec.last_updated_by =
2385 p_flow_schedule_rec.last_updated_by) OR
2386 ((p_flow_schedule_rec.last_updated_by = FND_API.G_MISS_NUM) OR
2387 ( (l_flow_schedule_rec.last_updated_by IS NULL) AND
2388 (p_flow_schedule_rec.last_updated_by IS NULL))))
2389 AND ( (l_flow_schedule_rec.last_update_date =
2390 p_flow_schedule_rec.last_update_date) OR
2391 ((p_flow_schedule_rec.last_update_date = FND_API.G_MISS_DATE) OR
2392 ( (l_flow_schedule_rec.last_update_date IS NULL) AND
2393 (p_flow_schedule_rec.last_update_date IS NULL))))
2394 AND ( (l_flow_schedule_rec.last_update_login =
2395 p_flow_schedule_rec.last_update_login) OR
2396 ((p_flow_schedule_rec.last_update_login = FND_API.G_MISS_NUM) OR
2397 ( (l_flow_schedule_rec.last_update_login IS NULL) AND
2398 (p_flow_schedule_rec.last_update_login IS NULL)))) */
2399 AND ( (l_flow_schedule_rec.line_id =
2400 p_flow_schedule_rec.line_id) OR
2401 ((p_flow_schedule_rec.line_id = FND_API.G_MISS_NUM) OR
2402 ( (l_flow_schedule_rec.line_id IS NULL) AND
2403 (p_flow_schedule_rec.line_id IS NULL))))
2404 AND ( (l_flow_schedule_rec.material_account =
2405 p_flow_schedule_rec.material_account) OR
2406 ((p_flow_schedule_rec.material_account = FND_API.G_MISS_NUM) OR
2407 ( (l_flow_schedule_rec.material_account IS NULL) AND
2408 (p_flow_schedule_rec.material_account IS NULL))))
2409 AND ( (l_flow_schedule_rec.material_overhead_account =
2410 p_flow_schedule_rec.material_overhead_account) OR
2411 ((p_flow_schedule_rec.material_overhead_account = FND_API.G_MISS_NUM) OR
2412 ( (l_flow_schedule_rec.material_overhead_account IS NULL) AND
2413 (p_flow_schedule_rec.material_overhead_account IS NULL))))
2414 AND ( (l_flow_schedule_rec.material_variance_account =
2415 p_flow_schedule_rec.material_variance_account) OR
2416 ((p_flow_schedule_rec.material_variance_account = FND_API.G_MISS_NUM) OR
2417 ( (l_flow_schedule_rec.material_variance_account IS NULL) AND
2418 (p_flow_schedule_rec.material_variance_account IS NULL))))
2419 AND ( (l_flow_schedule_rec.mps_net_quantity =
2420 p_flow_schedule_rec.mps_net_quantity) OR
2421 ((p_flow_schedule_rec.mps_net_quantity = FND_API.G_MISS_NUM) OR
2422 ( (l_flow_schedule_rec.mps_net_quantity IS NULL) AND
2423 (p_flow_schedule_rec.mps_net_quantity IS NULL))))
2424 AND ( (l_flow_schedule_rec.mps_scheduled_comp_date =
2425 p_flow_schedule_rec.mps_scheduled_comp_date) OR
2426 ((p_flow_schedule_rec.mps_scheduled_comp_date = FND_API.G_MISS_DATE) OR
2427 ( (l_flow_schedule_rec.mps_scheduled_comp_date IS NULL) AND
2428 (p_flow_schedule_rec.mps_scheduled_comp_date IS NULL))))
2429 AND ( (l_flow_schedule_rec.organization_id =
2430 p_flow_schedule_rec.organization_id) OR
2431 ((p_flow_schedule_rec.organization_id = FND_API.G_MISS_NUM) OR
2432 ( (l_flow_schedule_rec.organization_id IS NULL) AND
2433 (p_flow_schedule_rec.organization_id IS NULL))))
2434 AND ( (l_flow_schedule_rec.outside_processing_acct =
2435 p_flow_schedule_rec.outside_processing_acct) OR
2436 ((p_flow_schedule_rec.outside_processing_acct = FND_API.G_MISS_NUM) OR
2437 ( (l_flow_schedule_rec.outside_processing_acct IS NULL) AND
2438 (p_flow_schedule_rec.outside_processing_acct IS NULL))))
2439 AND ( (l_flow_schedule_rec.outside_proc_var_acct =
2440 p_flow_schedule_rec.outside_proc_var_acct) OR
2441 ((p_flow_schedule_rec.outside_proc_var_acct = FND_API.G_MISS_NUM) OR
2442 ( (l_flow_schedule_rec.outside_proc_var_acct IS NULL) AND
2443 (p_flow_schedule_rec.outside_proc_var_acct IS NULL))))
2444 AND ( (l_flow_schedule_rec.overhead_account =
2445 p_flow_schedule_rec.overhead_account) OR
2446 ((p_flow_schedule_rec.overhead_account = FND_API.G_MISS_NUM) OR
2447 ( (l_flow_schedule_rec.overhead_account IS NULL) AND
2448 (p_flow_schedule_rec.overhead_account IS NULL))))
2449 AND ( (l_flow_schedule_rec.overhead_variance_account =
2450 p_flow_schedule_rec.overhead_variance_account) OR
2451 ((p_flow_schedule_rec.overhead_variance_account = FND_API.G_MISS_NUM) OR
2452 ( (l_flow_schedule_rec.overhead_variance_account IS NULL) AND
2453 (p_flow_schedule_rec.overhead_variance_account IS NULL))))
2454 AND ( (l_flow_schedule_rec.planned_quantity =
2455 p_flow_schedule_rec.planned_quantity) OR
2456 ((p_flow_schedule_rec.planned_quantity = FND_API.G_MISS_NUM) OR
2457 ( (l_flow_schedule_rec.planned_quantity IS NULL) AND
2458 (p_flow_schedule_rec.planned_quantity IS NULL))))
2459 AND ( (l_flow_schedule_rec.primary_item_id =
2460 p_flow_schedule_rec.primary_item_id) OR
2461 ((p_flow_schedule_rec.primary_item_id = FND_API.G_MISS_NUM) OR
2462 ( (l_flow_schedule_rec.primary_item_id IS NULL) AND
2463 (p_flow_schedule_rec.primary_item_id IS NULL))))
2464 AND ( (l_flow_schedule_rec.program_application_id =
2465 p_flow_schedule_rec.program_application_id) OR
2466 ((p_flow_schedule_rec.program_application_id = FND_API.G_MISS_NUM) OR
2467 ( (l_flow_schedule_rec.program_application_id IS NULL) AND
2468 (p_flow_schedule_rec.program_application_id IS NULL))))
2469 AND ( (l_flow_schedule_rec.program_id =
2470 p_flow_schedule_rec.program_id) OR
2471 ((p_flow_schedule_rec.program_id = FND_API.G_MISS_NUM) OR
2472 ( (l_flow_schedule_rec.program_id IS NULL) AND
2473 (p_flow_schedule_rec.program_id IS NULL))))
2474 AND ( (l_flow_schedule_rec.program_update_date =
2475 p_flow_schedule_rec.program_update_date) OR
2476 ((p_flow_schedule_rec.program_update_date = FND_API.G_MISS_DATE) OR
2477 ( (l_flow_schedule_rec.program_update_date IS NULL) AND
2478 (p_flow_schedule_rec.program_update_date IS NULL))))
2479 AND ( (l_flow_schedule_rec.project_id =
2480 p_flow_schedule_rec.project_id) OR
2481 ((p_flow_schedule_rec.project_id = FND_API.G_MISS_NUM) OR
2482 ( (l_flow_schedule_rec.project_id IS NULL) AND
2483 (p_flow_schedule_rec.project_id IS NULL))))
2484 AND ( (l_flow_schedule_rec.quantity_completed =
2485 p_flow_schedule_rec.quantity_completed) OR
2486 ((p_flow_schedule_rec.quantity_completed = FND_API.G_MISS_NUM) OR
2487 ( (l_flow_schedule_rec.quantity_completed IS NULL) AND
2488 (p_flow_schedule_rec.quantity_completed IS NULL))))
2489 AND ( (l_flow_schedule_rec.request_id =
2490 p_flow_schedule_rec.request_id) OR
2491 ((p_flow_schedule_rec.request_id = FND_API.G_MISS_NUM) OR
2492 ( (l_flow_schedule_rec.request_id IS NULL) AND
2493 (p_flow_schedule_rec.request_id IS NULL))))
2494 AND ( (l_flow_schedule_rec.resource_account =
2495 p_flow_schedule_rec.resource_account) OR
2496 ((p_flow_schedule_rec.resource_account = FND_API.G_MISS_NUM) OR
2497 ( (l_flow_schedule_rec.resource_account IS NULL) AND
2498 (p_flow_schedule_rec.resource_account IS NULL))))
2499 AND ( (l_flow_schedule_rec.resource_variance_account =
2500 p_flow_schedule_rec.resource_variance_account) OR
2501 ((p_flow_schedule_rec.resource_variance_account = FND_API.G_MISS_NUM) OR
2502 ( (l_flow_schedule_rec.resource_variance_account IS NULL) AND
2503 (p_flow_schedule_rec.resource_variance_account IS NULL))))
2504 AND ( (l_flow_schedule_rec.routing_revision =
2505 p_flow_schedule_rec.routing_revision) OR
2506 ((p_flow_schedule_rec.routing_revision = FND_API.G_MISS_CHAR) OR
2507 ( (l_flow_schedule_rec.routing_revision IS NULL) AND
2508 (p_flow_schedule_rec.routing_revision IS NULL))))
2509 AND ( (l_flow_schedule_rec.routing_revision_date =
2510 p_flow_schedule_rec.routing_revision_date) OR
2511 ((p_flow_schedule_rec.routing_revision_date = FND_API.G_MISS_DATE) OR
2512 ( (l_flow_schedule_rec.routing_revision_date IS NULL) AND
2513 (p_flow_schedule_rec.routing_revision_date IS NULL))))
2514 AND ( (l_flow_schedule_rec.scheduled_completion_date =
2515 p_flow_schedule_rec.scheduled_completion_date) OR
2516 ((p_flow_schedule_rec.scheduled_completion_date = FND_API.G_MISS_DATE) OR
2517 ( (l_flow_schedule_rec.scheduled_completion_date IS NULL) AND
2518 (p_flow_schedule_rec.scheduled_completion_date IS NULL))))
2519 AND ( (l_flow_schedule_rec.scheduled_flag =
2520 p_flow_schedule_rec.scheduled_flag) OR
2521 ((p_flow_schedule_rec.scheduled_flag = FND_API.G_MISS_NUM) OR
2522 ( (l_flow_schedule_rec.scheduled_flag IS NULL) AND
2523 (p_flow_schedule_rec.scheduled_flag IS NULL))))
2524 AND ( (l_flow_schedule_rec.scheduled_start_date =
2525 p_flow_schedule_rec.scheduled_start_date) OR
2526 ((p_flow_schedule_rec.scheduled_start_date = FND_API.G_MISS_DATE) OR
2527 ( (l_flow_schedule_rec.scheduled_start_date IS NULL) AND
2528 (p_flow_schedule_rec.scheduled_start_date IS NULL))))
2529 AND ( (l_flow_schedule_rec.schedule_group_id =
2530 p_flow_schedule_rec.schedule_group_id) OR
2531 ((p_flow_schedule_rec.schedule_group_id = FND_API.G_MISS_NUM) OR
2532 ( (l_flow_schedule_rec.schedule_group_id IS NULL) AND
2533 (p_flow_schedule_rec.schedule_group_id IS NULL))))
2534 AND ( (l_flow_schedule_rec.schedule_number =
2535 p_flow_schedule_rec.schedule_number) OR
2536 ((p_flow_schedule_rec.schedule_number = FND_API.G_MISS_CHAR) OR
2537 ( (l_flow_schedule_rec.schedule_number IS NULL) AND
2538 (p_flow_schedule_rec.schedule_number IS NULL))))
2539 AND ( (l_flow_schedule_rec.status =
2540 p_flow_schedule_rec.status) OR
2541 ((p_flow_schedule_rec.status = FND_API.G_MISS_NUM) OR
2542 ( (l_flow_schedule_rec.status IS NULL) AND
2543 (p_flow_schedule_rec.status IS NULL))))
2544 AND ( (l_flow_schedule_rec.std_cost_adjustment_acct =
2545 p_flow_schedule_rec.std_cost_adjustment_acct) OR
2546 ((p_flow_schedule_rec.std_cost_adjustment_acct = FND_API.G_MISS_NUM) OR
2547 ( (l_flow_schedule_rec.std_cost_adjustment_acct IS NULL) AND
2548 (p_flow_schedule_rec.std_cost_adjustment_acct IS NULL))))
2549 AND ( (l_flow_schedule_rec.task_id =
2550 p_flow_schedule_rec.task_id) OR
2551 ((p_flow_schedule_rec.task_id = FND_API.G_MISS_NUM) OR
2552 ( (l_flow_schedule_rec.task_id IS NULL) AND
2553 (p_flow_schedule_rec.task_id IS NULL))))
2554 AND ( (l_flow_schedule_rec.end_item_unit_number =
2555 p_flow_schedule_rec.end_item_unit_number) OR
2556 ((p_flow_schedule_rec.end_item_unit_number = FND_API.G_MISS_CHAR) OR
2557 ( (l_flow_schedule_rec.end_item_unit_number IS NULL) AND
2558 (p_flow_schedule_rec.end_item_unit_number IS NULL))))
2559 AND ( (l_flow_schedule_rec.quantity_scrapped =
2560 p_flow_schedule_rec.quantity_scrapped) OR
2561 ((p_flow_schedule_rec.quantity_scrapped = FND_API.G_MISS_NUM) OR
2562 ( (l_flow_schedule_rec.quantity_scrapped IS NULL) AND
2563 (p_flow_schedule_rec.quantity_scrapped IS NULL))))
2564 AND ( (l_flow_schedule_rec.wip_entity_id =
2565 p_flow_schedule_rec.wip_entity_id) OR
2566 ((p_flow_schedule_rec.wip_entity_id = FND_API.G_MISS_NUM) OR
2567 ( (l_flow_schedule_rec.wip_entity_id IS NULL) AND
2568 (p_flow_schedule_rec.wip_entity_id IS NULL))))
2569 THEN
2570
2571 -- Row has not changed. Set out parameter.
2572
2573 x_flow_schedule_rec := l_flow_schedule_rec;
2574
2575 -- Set return status
2576
2577 x_return_status := FND_API.G_RET_STS_SUCCESS;
2578 x_flow_schedule_rec.return_status := FND_API.G_RET_STS_SUCCESS;
2579
2580 ELSE
2581 -- Row has changed by another user.
2582
2583 x_return_status := FND_API.G_RET_STS_ERROR;
2584 x_flow_schedule_rec.return_status := FND_API.G_RET_STS_ERROR;
2585
2586 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2587 THEN
2588
2589 FND_MESSAGE.SET_NAME('MRP','MRP_LOCK_ROW_CHANGED');
2590 FND_MSG_PUB.Add;
2591
2592 END IF;
2593
2594 END IF;
2595
2596 EXCEPTION
2597
2598 WHEN NO_DATA_FOUND THEN
2599
2600 x_return_status := FND_API.G_RET_STS_ERROR;
2601 x_flow_schedule_rec.return_status := FND_API.G_RET_STS_ERROR;
2602
2603 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2604 THEN
2605
2606 FND_MESSAGE.SET_NAME('MRP','MRP_LOCK_ROW_DELETED');
2607 FND_MSG_PUB.Add;
2608
2609 END IF;
2610 WHEN APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION THEN
2611
2612 x_return_status := FND_API.G_RET_STS_ERROR;
2613 x_flow_schedule_rec.return_status := FND_API.G_RET_STS_ERROR;
2614
2615 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2616 THEN
2617
2618 FND_MESSAGE.SET_NAME('MRP','MRP_LOCK_ROW_ALREADY_LOCKED');
2619 FND_MSG_PUB.Add;
2620
2621 END IF;
2622 WHEN OTHERS THEN
2623
2624 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2625 x_flow_schedule_rec.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2626
2627 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2628 THEN
2629 FND_MSG_PUB.Add_Exc_Msg
2630 ( G_PKG_NAME
2631 , 'Lock_Row'
2632 );
2633 END IF;
2634
2635 END Lock_Row;
2636
2637 -- Function Get_Values
2638
2639 FUNCTION Get_Values
2640 ( p_flow_schedule_rec IN MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
2641 , p_old_flow_schedule_rec IN MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
2642 ) RETURN MRP_Flow_Schedule_PVT.Flow_Schedule_Val_PVT_Rec_Type
2643 IS
2644 l_flow_schedule_val_rec MRP_Flow_Schedule_PVT.Flow_Schedule_Val_PVT_Rec_Type ;
2645 BEGIN
2646
2647 IF p_flow_schedule_rec.completion_locator_id IS NOT NULL AND
2648 p_flow_schedule_rec.completion_locator_id <> FND_API.G_MISS_NUM AND
2649 NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.completion_locator_id,
2650 p_old_flow_schedule_rec.completion_locator_id)
2651 THEN
2652 l_flow_schedule_val_rec.completion_locator := MRP_Id_To_Value.Completion_Locator
2653 ( p_completion_locator_id => p_flow_schedule_rec.completion_locator_id
2654 );
2655 END IF;
2656
2657 IF p_flow_schedule_rec.line_id IS NOT NULL AND
2658 p_flow_schedule_rec.line_id <> FND_API.G_MISS_NUM AND
2659 NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.line_id,
2660 p_old_flow_schedule_rec.line_id)
2661 THEN
2662 l_flow_schedule_val_rec.line := MRP_Id_To_Value.Line
2663 ( p_line_id => p_flow_schedule_rec.line_id
2664 );
2665 END IF;
2666
2667 IF p_flow_schedule_rec.organization_id IS NOT NULL AND
2668 p_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM AND
2669 NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.organization_id,
2670 p_old_flow_schedule_rec.organization_id)
2671 THEN
2672 l_flow_schedule_val_rec.organization := MRP_Id_To_Value.Organization
2673 ( p_organization_id => p_flow_schedule_rec.organization_id
2674 );
2675 END IF;
2676
2677 IF p_flow_schedule_rec.primary_item_id IS NOT NULL AND
2678 p_flow_schedule_rec.primary_item_id <> FND_API.G_MISS_NUM AND
2679 NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.primary_item_id,
2680 p_old_flow_schedule_rec.primary_item_id)
2681 THEN
2682 l_flow_schedule_val_rec.primary_item := MRP_Id_To_Value.Primary_Item
2683 ( p_primary_item_id => p_flow_schedule_rec.primary_item_id
2684 );
2685 END IF;
2686
2687 IF p_flow_schedule_rec.project_id IS NOT NULL AND
2688 p_flow_schedule_rec.project_id <> FND_API.G_MISS_NUM AND
2689 NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.project_id,
2690 p_old_flow_schedule_rec.project_id)
2691 THEN
2692 l_flow_schedule_val_rec.project := MRP_Id_To_Value.Project
2693 ( p_project_id => p_flow_schedule_rec.project_id
2694 );
2695 END IF;
2696
2697 IF p_flow_schedule_rec.schedule_group_id IS NOT NULL AND
2698 p_flow_schedule_rec.schedule_group_id <> FND_API.G_MISS_NUM AND
2699 NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.schedule_group_id,
2700 p_old_flow_schedule_rec.schedule_group_id)
2701 THEN
2702 l_flow_schedule_val_rec.schedule_group := MRP_Id_To_Value.Schedule_Group
2703 ( p_schedule_group_id => p_flow_schedule_rec.schedule_group_id
2704 );
2705 END IF;
2706
2707 IF p_flow_schedule_rec.task_id IS NOT NULL AND
2708 p_flow_schedule_rec.task_id <> FND_API.G_MISS_NUM AND
2709 NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.task_id,
2710 p_old_flow_schedule_rec.task_id)
2711 THEN
2712 l_flow_schedule_val_rec.task := MRP_Id_To_Value.Task
2713 ( p_task_id => p_flow_schedule_rec.task_id
2714 );
2715 END IF;
2716
2717 IF p_flow_schedule_rec.wip_entity_id IS NOT NULL AND
2718 p_flow_schedule_rec.wip_entity_id <> FND_API.G_MISS_NUM AND
2719 NOT MRP_GLOBALS.Equal(p_flow_schedule_rec.wip_entity_id,
2720 p_old_flow_schedule_rec.wip_entity_id)
2721 THEN
2722 l_flow_schedule_val_rec.wip_entity := MRP_Id_To_Value.Wip_Entity
2723 ( p_wip_entity_id => p_flow_schedule_rec.wip_entity_id
2724 );
2725 END IF;
2726
2727 RETURN l_flow_schedule_val_rec;
2728
2729 END Get_Values;
2730
2731 -- Function Get_Ids
2732
2733 FUNCTION Get_Ids
2734 ( p_flow_schedule_rec IN MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
2735 , p_flow_schedule_val_rec IN MRP_Flow_Schedule_PVT.Flow_Schedule_Val_PVT_Rec_Type
2736 ) RETURN MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
2737 IS
2738 l_flow_schedule_rec MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type;
2739 BEGIN
2740
2741 -- initialize return_status.
2742
2743 l_flow_schedule_rec.return_status := FND_API.G_RET_STS_SUCCESS;
2744
2745 -- initialize l_flow_schedule_rec.
2746
2747 l_flow_schedule_rec := p_flow_schedule_rec;
2748
2749 IF p_flow_schedule_val_rec.completion_locator <> FND_API.G_MISS_CHAR
2750 THEN
2751
2752 IF p_flow_schedule_rec.completion_locator_id <> FND_API.G_MISS_NUM THEN
2753
2754 l_flow_schedule_rec.completion_locator_id := p_flow_schedule_rec.completion_locator_id;
2755
2756 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_SUCCESS)
2757 THEN
2758
2759 FND_MESSAGE.SET_NAME('MRP','MRP_BOTH_VAL_AND_ID_EXIST');
2760 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','completion_locator');
2761 FND_MSG_PUB.Add;
2762
2763 END IF;
2764
2765 ELSE
2766
2767 l_flow_schedule_rec.completion_locator_id := MRP_Value_To_Id.completion_locator
2768 ( p_completion_locator => p_flow_schedule_val_rec.completion_locator
2769 );
2770
2771 IF l_flow_schedule_rec.completion_locator_id = FND_API.G_MISS_NUM THEN
2772 l_flow_schedule_rec.return_status := FND_API.G_RET_STS_ERROR;
2773 END IF;
2774
2775 END IF;
2776
2777 END IF;
2778
2779 IF p_flow_schedule_val_rec.line <> FND_API.G_MISS_CHAR
2780 THEN
2781
2782 IF p_flow_schedule_rec.line_id <> FND_API.G_MISS_NUM THEN
2783
2784 l_flow_schedule_rec.line_id := p_flow_schedule_rec.line_id;
2785
2786 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_SUCCESS)
2787 THEN
2788
2789 FND_MESSAGE.SET_NAME('MRP','MRP_BOTH_VAL_AND_ID_EXIST');
2790 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','line');
2791 FND_MSG_PUB.Add;
2792
2793 END IF;
2794
2795 ELSE
2796
2797 l_flow_schedule_rec.line_id := MRP_Value_To_Id.line
2798 ( p_line => p_flow_schedule_val_rec.line
2799 );
2800
2801 IF l_flow_schedule_rec.line_id = FND_API.G_MISS_NUM THEN
2802 l_flow_schedule_rec.return_status := FND_API.G_RET_STS_ERROR;
2803 END IF;
2804
2805 END IF;
2806
2807 END IF;
2808
2809 IF p_flow_schedule_val_rec.organization <> FND_API.G_MISS_CHAR
2810 THEN
2811
2812 IF p_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM THEN
2813
2814 l_flow_schedule_rec.organization_id := p_flow_schedule_rec.organization_id;
2815
2816 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_SUCCESS)
2817 THEN
2818
2819 FND_MESSAGE.SET_NAME('MRP','MRP_BOTH_VAL_AND_ID_EXIST');
2820 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','organization');
2821 FND_MSG_PUB.Add;
2822
2823 END IF;
2824
2825 ELSE
2826
2827 l_flow_schedule_rec.organization_id := MRP_Value_To_Id.organization
2828 ( p_organization => p_flow_schedule_val_rec.organization
2829 );
2830
2831 IF l_flow_schedule_rec.organization_id = FND_API.G_MISS_NUM THEN
2832 l_flow_schedule_rec.return_status := FND_API.G_RET_STS_ERROR;
2833 END IF;
2834
2835 END IF;
2836
2837 END IF;
2838
2839 IF p_flow_schedule_val_rec.primary_item <> FND_API.G_MISS_CHAR
2840 THEN
2841
2842 IF p_flow_schedule_rec.primary_item_id <> FND_API.G_MISS_NUM THEN
2843
2844 l_flow_schedule_rec.primary_item_id := p_flow_schedule_rec.primary_item_id;
2845
2846 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_SUCCESS)
2847 THEN
2848
2849 FND_MESSAGE.SET_NAME('MRP','MRP_BOTH_VAL_AND_ID_EXIST');
2850 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','primary_item');
2851 FND_MSG_PUB.Add;
2852
2853 END IF;
2854
2855 ELSE
2856
2857 l_flow_schedule_rec.primary_item_id := MRP_Value_To_Id.primary_item
2858 ( p_primary_item => p_flow_schedule_val_rec.primary_item
2859 );
2860
2861 IF l_flow_schedule_rec.primary_item_id = FND_API.G_MISS_NUM THEN
2862 l_flow_schedule_rec.return_status := FND_API.G_RET_STS_ERROR;
2863 END IF;
2864
2865 END IF;
2866
2867 END IF;
2868
2869 IF p_flow_schedule_val_rec.project <> FND_API.G_MISS_CHAR
2870 THEN
2871
2872 IF p_flow_schedule_rec.project_id <> FND_API.G_MISS_NUM THEN
2873
2874 l_flow_schedule_rec.project_id := p_flow_schedule_rec.project_id;
2875
2876 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_SUCCESS)
2877 THEN
2878
2879 FND_MESSAGE.SET_NAME('MRP','MRP_BOTH_VAL_AND_ID_EXIST');
2880 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','project');
2881 FND_MSG_PUB.Add;
2882
2883 END IF;
2884
2885 ELSE
2886
2887 l_flow_schedule_rec.project_id := MRP_Value_To_Id.project
2888 ( p_project => p_flow_schedule_val_rec.project
2889 );
2890
2891 IF l_flow_schedule_rec.project_id = FND_API.G_MISS_NUM THEN
2892 l_flow_schedule_rec.return_status := FND_API.G_RET_STS_ERROR;
2893 END IF;
2894
2895 END IF;
2896
2897 END IF;
2898
2899 IF p_flow_schedule_val_rec.schedule_group <> FND_API.G_MISS_CHAR
2900 THEN
2901
2902 IF p_flow_schedule_rec.schedule_group_id <> FND_API.G_MISS_NUM THEN
2903
2904 l_flow_schedule_rec.schedule_group_id := p_flow_schedule_rec.schedule_group_id;
2905
2906 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_SUCCESS)
2907 THEN
2908
2909 FND_MESSAGE.SET_NAME('MRP','MRP_BOTH_VAL_AND_ID_EXIST');
2910 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','schedule_group');
2911 FND_MSG_PUB.Add;
2912
2913 END IF;
2914
2915 ELSE
2916
2917 l_flow_schedule_rec.schedule_group_id := MRP_Value_To_Id.schedule_group
2918 ( p_schedule_group => p_flow_schedule_val_rec.schedule_group
2919 );
2920
2921 IF l_flow_schedule_rec.schedule_group_id = FND_API.G_MISS_NUM THEN
2922 l_flow_schedule_rec.return_status := FND_API.G_RET_STS_ERROR;
2923 END IF;
2924
2925 END IF;
2926
2927 END IF;
2928
2929 IF p_flow_schedule_val_rec.task <> FND_API.G_MISS_CHAR
2930 THEN
2931
2932 IF p_flow_schedule_rec.task_id <> FND_API.G_MISS_NUM THEN
2933
2934 l_flow_schedule_rec.task_id := p_flow_schedule_rec.task_id;
2935
2936 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_SUCCESS)
2937 THEN
2938
2939 FND_MESSAGE.SET_NAME('MRP','MRP_BOTH_VAL_AND_ID_EXIST');
2940 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','task');
2941 FND_MSG_PUB.Add;
2942
2943 END IF;
2944
2945 ELSE
2946
2947 l_flow_schedule_rec.task_id := MRP_Value_To_Id.task
2948 ( p_task => p_flow_schedule_val_rec.task
2949 );
2950
2951 IF l_flow_schedule_rec.task_id = FND_API.G_MISS_NUM THEN
2952 l_flow_schedule_rec.return_status := FND_API.G_RET_STS_ERROR;
2953 END IF;
2954
2955 END IF;
2956
2957 END IF;
2958
2959 IF p_flow_schedule_val_rec.wip_entity <> FND_API.G_MISS_CHAR
2960 THEN
2961
2962 IF p_flow_schedule_rec.wip_entity_id <> FND_API.G_MISS_NUM THEN
2963
2964 l_flow_schedule_rec.wip_entity_id := p_flow_schedule_rec.wip_entity_id;
2965
2966 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_SUCCESS)
2967 THEN
2968
2969 FND_MESSAGE.SET_NAME('MRP','MRP_BOTH_VAL_AND_ID_EXIST');
2970 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','wip_entity');
2971 FND_MSG_PUB.Add;
2972
2973 END IF;
2974
2975 ELSE
2976
2977 l_flow_schedule_rec.wip_entity_id := MRP_Value_To_Id.wip_entity
2978 ( p_wip_entity => p_flow_schedule_val_rec.wip_entity
2979 );
2980
2981 IF l_flow_schedule_rec.wip_entity_id = FND_API.G_MISS_NUM THEN
2982 l_flow_schedule_rec.return_status := FND_API.G_RET_STS_ERROR;
2983 END IF;
2984
2985 END IF;
2986
2987 END IF;
2988
2989
2990 RETURN l_flow_schedule_rec;
2991
2992 END Get_Ids;
2993
2994 PROCEDURE Populate_Flow_Summary(
2995 x_return_status OUT NOCOPY VARCHAR2,
2996 p_line_id IN NUMBER,
2997 p_org_id IN NUMBER,
2998 p_first_bucket_date IN DATE, -- server timezone of client
2999 -- start date of week at 0:00:00
3000 p_query_id IN NUMBER
3001 )
3002 IS
3003
3004 CURSOR flow_schedule_info(l_query_id NUMBER, x NUMBER, start_date DATE,
3005 client_start_date DATE) IS --TZ BOM Calendar bug 3832684 --fix bug#3170105
3006 SELECT mls.primary_item_id,
3007 -- bucket_counter
3008 floor(mls.scheduled_completion_date-start_date)+1,
3009 -- bucket_date
3010 floor(mls.scheduled_completion_date-start_date)+client_start_date,--TZ BOM Calendar bug 3832684
3011 decode(x,1,sum(nvl(mls.planned_quantity,0)),
3012 2,sum(nvl(mls.quantity_completed,0)),
3013 sum((nvl(mls.planned_quantity,0)-nvl(mls.quantity_completed,0))))
3014 FROM mrp_line_sch_avail_v mls
3015 WHERE mls.line_id = p_line_id
3016 AND mls.organization_id = p_org_id
3017 AND mls.scheduled_completion_date
3018 BETWEEN start_date and start_date+(7-1/(24*60*60))
3019 GROUP BY mls.primary_item_id, floor(mls.scheduled_completion_date-start_date)
3020 order by mls.primary_item_id;
3021
3022 TYPE summary_rec IS RECORD
3023 ( item_id NUMBER,
3024 bucket_counter NUMBER,
3025 bucket_date DATE,
3026 quantity NUMBER );
3027
3028 flow_activity_rec summary_rec;
3029
3030 TYPE calendar_date IS TABLE OF DATE INDEX BY BINARY_INTEGER;
3031 TYPE column_number IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3032
3033 l_last_item_id NUMBER := -1;
3034 bucket_dates calendar_date;
3035 bucket_quantity column_number;
3036 l_query_id1 NUMBER;
3037
3038 l_first_bucket_client DATE; --fix bug#3170105
3039
3040 PROCEDURE flush_summary_rec (p_item_id NUMBER,
3041 p_query_id NUMBER,
3042 x NUMBER) IS
3043
3044 l_item_segments VARCHAR2(2000);
3045
3046 CURSOR ITEM_SEGMENTS IS
3047 SELECT concatenated_segments
3048 FROM mtl_system_items_kfv
3049 WHERE inventory_item_id = p_item_id
3050 AND organization_id = p_org_id;
3051
3052 BEGIN
3053
3054 OPEN ITEM_SEGMENTS;
3055 FETCH ITEM_SEGMENTS INTO l_item_segments;
3056 CLOSE ITEM_SEGMENTS;
3057
3058 INSERT INTO mrp_form_query(
3059 query_id,
3060 last_update_date,
3061 last_updated_by,
3062 creation_date,
3063 created_by,
3064 number15,
3065 char1,
3066 number14,
3067 date1,
3068 date2,
3069 date3,
3070 date4,
3071 date5,
3072 date6,
3073 date7,
3074 number1,
3075 number2,
3076 number3,
3077 number4,
3078 number5,
3079 number6,
3080 number7,
3081 number10 )
3082 VALUES (
3083 p_query_id,
3084 sysdate,
3085 1,
3086 sysdate,
3087 1,
3088 p_item_id,
3089 substr(l_item_segments,1,80),
3090 x,
3091 bucket_dates(1),
3092 bucket_dates(2),
3093 bucket_dates(3),
3094 bucket_dates(4),
3095 bucket_dates(5),
3096 bucket_dates(6),
3097 bucket_dates(7),
3098 bucket_quantity(1),
3099 bucket_quantity(2),
3100 bucket_quantity(3),
3101 bucket_quantity(4),
3102 bucket_quantity(5),
3103 bucket_quantity(6),
3104 bucket_quantity(7),
3105 bucket_quantity(1)+bucket_quantity(2)+bucket_quantity(3)+bucket_quantity(4)+bucket_quantity(5)+bucket_quantity(6)+bucket_quantity(7)
3106 );
3107
3108 END flush_summary_rec;
3109
3110 PROCEDURE Calculate_Totals(p_query_id NUMBER) IS
3111 BEGIN
3112
3113 INSERT INTO mrp_form_query(
3114 query_id,
3115 last_update_date,
3116 last_updated_by,
3117 creation_date,
3118 created_by,
3119 number14,
3120 number1,
3121 number2,
3122 number3,
3123 number4,
3124 number5,
3125 number6,
3126 number7,
3127 number10 )
3128 SELECT
3129 p_query_id,
3130 sysdate,
3131 1,
3132 sysdate,
3133 1,
3134 number14 + 10,
3135 sum(number1),
3136 sum(number2),
3137 sum(number3),
3138 sum(number4),
3139 sum(number5),
3140 sum(number6),
3141 sum(number7),
3142 sum(number1) + sum(number2) + sum(number3) + sum(number4) +
3143 sum(number5) + sum(number6) + sum(number7)
3144 FROM mrp_form_query
3145 WHERE query_id = p_query_id
3146 AND number14 in (1,2,3)
3147 GROUP BY number14;
3148
3149 END Calculate_Totals;
3150
3151 BEGIN
3152
3153 FND_MSG_PUB.Initialize;
3154
3155 --start bug 3783650: TZ BOM Calendar bug 3832684
3156 IF flm_timezone.g_enabled THEN
3157 --fix bug#3170105
3158 l_first_bucket_client := flm_timezone.server_to_client(p_first_bucket_date);
3159 l_first_bucket_client := trunc(l_first_bucket_client);
3160 --end of fix bug#3170105
3161 ELSE
3162 l_first_bucket_client := trunc(p_first_bucket_date);
3163 END IF;
3164 --end bug 3783650
3165
3166 SELECT mrp_form_query_s.nextval
3167 INTO l_query_id1
3168 FROM dual;
3169
3170 x_return_status := FND_API.G_RET_STS_SUCCESS;
3171
3172 FOR loop in 1..7 LOOP
3173 INSERT INTO mrp_form_query (
3174 query_id,
3175 last_update_date,
3176 last_updated_by,
3177 creation_date,
3178 created_by,
3179 number13,
3180 number14,
3181 number1,
3182 date1 )
3183 VALUES (
3184 l_query_id1,
3185 sysdate,
3186 1,
3187 sysdate,
3188 1,
3189 p_line_id,
3190 p_org_id,
3191 loop,
3192 l_first_bucket_client + (loop - 1) --fix bug#3170105
3193 );
3194 END LOOP;
3195
3196 FOR x in 1..3 LOOP
3197
3198 -- -----------------------------
3199 -- Initialize bucket values
3200 -- -----------------------------
3201 FOR loop in 1..7 LOOP
3202 bucket_dates(loop) := l_first_bucket_client + (loop - 1);
3203 bucket_quantity(loop) := 0;
3204 END LOOP;
3205
3206 l_last_item_id := -1;
3207
3208 --fix bug#3170105
3209 --TZ BOM Calendar bug 3832684
3210 OPEN flow_schedule_info(l_query_id1,x,p_first_bucket_date,l_first_bucket_client);
3211
3212 LOOP
3213 FETCH flow_schedule_info
3214 INTO flow_activity_rec;
3215
3216 -- ---------------------------------------
3217 -- Flush previous record to mrp_form_query
3218 -- ---------------------------------------
3219 IF ( (flow_schedule_info%NOTFOUND) OR
3220 (flow_activity_rec.item_id <> l_last_item_id))
3221 AND (l_last_item_id <> -1) THEN
3222 flush_summary_rec(l_last_item_id, p_query_id, x);
3223
3224 -- ---------------------------
3225 -- Reinitialize bucket values
3226 -- ---------------------------
3227 FOR loop in 1..7 LOOP
3228 bucket_dates(loop) := l_first_bucket_client + (loop - 1); --fix bug#3170105
3229 bucket_quantity(loop) := 0;
3230 END LOOP;
3231
3232 ELSIF ((flow_schedule_info%NOTFOUND) AND (l_last_item_id = -1)) THEN
3233
3234 FOR loop in 1..7 LOOP
3235 bucket_dates(loop) := l_first_bucket_client + (loop - 1); --fix bug#3170105
3236 bucket_quantity(loop) := NULL;
3237 END LOOP;
3238
3239 flush_summary_rec(NULL, p_query_id, x);
3240
3241 EXIT;
3242
3243 END IF;
3244
3245 -- ------------------------
3246 -- Set bucket values
3247 -- ------------------------
3248
3249 bucket_dates(flow_activity_rec.bucket_counter) :=
3250 flow_activity_rec.bucket_date;
3251 bucket_quantity(flow_activity_rec.bucket_counter) :=
3252 flow_activity_rec.quantity;
3253
3254 -- --------------------------
3255 -- Reinitialize last_item_id
3256 -- --------------------------
3257 l_last_item_id := flow_activity_rec.item_id;
3258
3259 EXIT WHEN flow_schedule_info%NOTFOUND;
3260 END LOOP;
3261 CLOSE flow_schedule_info;
3262
3263 END LOOP;
3264
3265 calculate_totals(p_query_id);
3266
3267 EXCEPTION
3268
3269 WHEN OTHERS THEN
3270
3271 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3272
3273 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3274
3275 FND_MSG_PUB.Add_Exc_Msg
3276 ( G_PKG_NAME
3277 , 'populate_flow_summary'
3278 );
3279 END IF;
3280
3281 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3282
3283 END Populate_Flow_Summary;
3284
3285 PROCEDURE Update_Quantity(
3286 x_return_status OUT NOCOPY VARCHAR2,
3287 x_msg_count OUT NOCOPY NUMBER,
3288 x_msg_data OUT NOCOPY VARCHAR2,
3289 p_wip_entity_id IN NUMBER,
3290 p_quantity IN NUMBER ) IS
3291
3292 BEGIN
3293
3294 FND_MSG_PUB.Initialize;
3295
3296 UPDATE wip_flow_schedules
3297 SET planned_quantity = planned_quantity + p_quantity
3298 WHERE wip_entity_id = p_wip_entity_id;
3299
3300 x_return_status := FND_API.G_RET_STS_SUCCESS;
3301
3302 -- Get message count and data
3303
3304 FND_MSG_PUB.Count_And_Get
3305 ( p_count => x_msg_count
3306 , p_data => x_msg_data
3307 );
3308
3309 EXCEPTION
3310
3311 WHEN OTHERS THEN
3312
3313 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3314
3315 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3316
3317 FND_MSG_PUB.Add_Exc_Msg
3318 ( G_PKG_NAME
3319 , 'update_quantity'
3320 );
3321 END IF;
3322
3323 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3324
3325 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3326
3327 -- Get message count and data
3328
3329 FND_MSG_PUB.Count_And_Get
3330 ( p_count => x_msg_count
3331 , p_data => x_msg_data
3332 );
3333
3334 END Update_Quantity;
3335
3336 PROCEDURE Update_Quantity(
3337 p_wip_entity_id IN NUMBER,
3338 p_quantity IN NUMBER ) IS
3339
3340 BEGIN
3341
3342 UPDATE wip_flow_schedules
3343 SET planned_quantity = planned_quantity + p_quantity
3344 WHERE wip_entity_id = p_wip_entity_id;
3345
3346 EXCEPTION
3347
3348 WHEN OTHERS THEN
3349
3350 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3351
3352 FND_MSG_PUB.Add_Exc_Msg
3353 ( G_PKG_NAME
3354 , 'update_quantity'
3355 );
3356 END IF;
3357
3358 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3359
3360 END Update_Quantity;
3361
3362 PROCEDURE Delete_Flow_Row
3363 ( x_return_status OUT NOCOPY VARCHAR2,
3364 x_msg_count OUT NOCOPY NUMBER,
3365 x_msg_data OUT NOCOPY VARCHAR2,
3366 p_wip_entity_id IN NUMBER
3367 )
3368 IS
3369 BEGIN
3370
3371 FND_MSG_PUB.Initialize;
3372
3373 DELETE FROM WIP_FLOW_SCHEDULES
3374 WHERE WIP_ENTITY_ID = p_wip_entity_id
3375 AND status = 1
3376 AND nvl(transacted_flag, 'N') = 'N'
3377 AND quantity_completed = 0
3378 AND quantity_scrapped = 0 ;
3379
3380 x_return_status := FND_API.G_RET_STS_SUCCESS;
3381
3382 -- Get message count and data
3383
3384 FND_MSG_PUB.Count_And_Get
3385 ( p_count => x_msg_count
3386 , p_data => x_msg_data
3387 );
3388 EXCEPTION
3389
3390 WHEN OTHERS THEN
3391
3392 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3393 THEN
3394 FND_MSG_PUB.Add_Exc_Msg
3395 ( G_PKG_NAME
3396 , 'Delete_Flow_Row'
3397 );
3398 END IF;
3399
3400 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3401
3402 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3403
3404 -- Get message count and data
3405
3406 FND_MSG_PUB.Count_And_Get
3407 ( p_count => x_msg_count
3408 , p_data => x_msg_data
3409 );
3410
3411 END Delete_Flow_Row;
3412
3413 PROCEDURE Delete_Flow_Schedules( ERRBUF OUT NOCOPY VARCHAR2,
3414 RETCODE OUT NOCOPY VARCHAR2,
3415 p_organization_id IN NUMBER,
3416 p_start_date IN VARCHAR2,
3417 p_end_date IN VARCHAR2,
3418 p_from_line IN VARCHAR2,
3419 p_to_line IN VARCHAR2,
3420 p_from_item IN VARCHAR2,
3421 p_to_item IN VARCHAR2,
3422 p_category_set_id IN NUMBER,
3423 p_category_structure_id IN NUMBER,
3424 p_from_category IN VARCHAR2,
3425 p_to_category IN VARCHAR2) IS
3426
3427 -- Local variables
3428 l_log_message VARCHAR2(2000);
3429 l_return BOOLEAN;
3430 l_err_buf VARCHAR2(2000);
3431 l_where_clause VARCHAR2(2000) := NULL;
3432 l_item_where_clause VARCHAR2(2000) := NULL;
3433 l_cat_where_clause VARCHAR2(2000) := NULL;
3434 l_rows_processed INTEGER := 0;
3435 l_dummy INTEGER;
3436 l_cursor INTEGER;
3437 l_sql_stmt VARCHAR2(2000) := NULL;
3438 l_demand_source_line VARCHAR2(30);
3439 l_replenish_to_order_flag VARCHAR2(1);
3440 l_build_in_wip_flag VARCHAR2(1);
3441 l_wip_entity_id NUMBER;
3442 l_return_status VARCHAR2(100);
3443 l_msg_count NUMBER;
3444 l_msg_data VARCHAR2(2000);
3445
3446 -- Exceptions
3447 expected_error EXCEPTION;
3448 unexpected_error EXCEPTION;
3449
3450 --fix bug#3170105
3451 l_start_date DATE;
3452 l_end_date DATE;
3453 --end of fix bug#3170105
3454
3455 BEGIN
3456
3457 --fix bug#3170105
3458 l_start_date := flm_timezone.client_to_server(
3459 fnd_date.canonical_to_date(p_start_date));
3460 l_end_date := flm_timezone.client_to_server(
3461 fnd_date.canonical_to_date(p_end_date));
3462 --end of fix bug#3170105
3463
3464 -- Print report parameters
3465 FND_MESSAGE.set_name('MRP','EC_REPORT_PARAMETERS');
3466 l_log_message := FND_MESSAGE.get;
3467 MRP_UTIL.MRP_LOG(l_log_message);
3468
3469 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
3470 FND_MESSAGE.set_token('NUMBER','1');
3471 FND_MESSAGE.set_token('TOKEN','(ORGANIZATION_ID)');
3472 FND_MESSAGE.set_token('VALUE',to_char(p_organization_id));
3473 l_log_message := FND_MESSAGE.get;
3474 MRP_UTIL.MRP_LOG(l_log_message);
3475
3476 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
3477 FND_MESSAGE.set_token('NUMBER','2');
3478 FND_MESSAGE.set_token('TOKEN','(START_DATE)');
3479 FND_MESSAGE.set_token('VALUE',to_char(l_start_date)); --fix bug#3170105
3480 l_log_message := FND_MESSAGE.get;
3481 MRP_UTIL.MRP_LOG(l_log_message);
3482
3483 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
3484 FND_MESSAGE.set_token('NUMBER','3');
3485 FND_MESSAGE.set_token('TOKEN','(END_DATE)');
3486 FND_MESSAGE.set_token('VALUE',to_char(l_end_date)); --fix bug#3170105
3487 l_log_message := FND_MESSAGE.get;
3488 MRP_UTIL.MRP_LOG(l_log_message);
3489
3490 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
3491 FND_MESSAGE.set_token('NUMBER','4');
3492 FND_MESSAGE.set_token('TOKEN','(FROM_LINE)');
3493 FND_MESSAGE.set_token('VALUE',p_from_line);
3494 l_log_message := FND_MESSAGE.get;
3495 MRP_UTIL.MRP_LOG(l_log_message);
3496
3497 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
3498 FND_MESSAGE.set_token('NUMBER','5');
3499 FND_MESSAGE.set_token('TOKEN','(TO_LINE)');
3500 FND_MESSAGE.set_token('VALUE',p_to_line);
3501 l_log_message := FND_MESSAGE.get;
3502 MRP_UTIL.MRP_LOG(l_log_message);
3503
3504 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
3505 FND_MESSAGE.set_token('NUMBER','6');
3506 FND_MESSAGE.set_token('TOKEN','(FROM_ITEM)');
3507 FND_MESSAGE.set_token('VALUE',p_from_item);
3508 l_log_message := FND_MESSAGE.get;
3509 MRP_UTIL.MRP_LOG(l_log_message);
3510
3511 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
3512 FND_MESSAGE.set_token('NUMBER','7');
3513 FND_MESSAGE.set_token('TOKEN','(TO_ITEM)');
3514 FND_MESSAGE.set_token('VALUE',p_to_item);
3515 l_log_message := FND_MESSAGE.get;
3516 MRP_UTIL.MRP_LOG(l_log_message);
3517
3518 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
3519 FND_MESSAGE.set_token('NUMBER','8');
3520 FND_MESSAGE.set_token('TOKEN','(CATEGORY_SET_ID)');
3521 FND_MESSAGE.set_token('VALUE',to_char(p_category_set_id));
3522 l_log_message := FND_MESSAGE.get;
3523 MRP_UTIL.MRP_LOG(l_log_message);
3524
3525 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
3526 FND_MESSAGE.set_token('NUMBER','9');
3527 FND_MESSAGE.set_token('TOKEN','(CATEGORY_STRUCTURE_ID)');
3528 FND_MESSAGE.set_token('VALUE',to_char(p_category_structure_id));
3529 l_log_message := FND_MESSAGE.get;
3530 MRP_UTIL.MRP_LOG(l_log_message);
3531
3532 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
3533 FND_MESSAGE.set_token('NUMBER','10');
3534 FND_MESSAGE.set_token('TOKEN','(FROM_CATEGORY)');
3535 FND_MESSAGE.set_token('VALUE',p_from_category);
3536 l_log_message := FND_MESSAGE.get;
3537 MRP_UTIL.MRP_LOG(l_log_message);
3538
3539 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
3540 FND_MESSAGE.set_token('NUMBER','11');
3541 FND_MESSAGE.set_token('TOKEN','(TO_CATEGORY)');
3542 FND_MESSAGE.set_token('VALUE',p_to_category);
3543 l_log_message := FND_MESSAGE.get;
3544 MRP_UTIL.MRP_LOG(l_log_message);
3545
3546 -- Check for mandatory parameters and issue an error message
3547 -- Check for mandatory parameters and issue an error message
3548 -- if NULL. If line, item or category are null, assume all.
3549 IF p_organization_id IS NULL THEN
3550 FND_MESSAGE.set_name('MRP','MRP_ORG_ID_REQUIRED');
3551 l_log_message := FND_MESSAGE.get;
3552 MRP_UTIL.MRP_LOG(l_log_message);
3553 RAISE expected_error;
3554 END IF;
3555 IF p_start_date IS NULL THEN
3556 FND_MESSAGE.set_name('MRP','MRP_START_DATE_REQUIRED');
3557 l_log_message := FND_MESSAGE.get;
3558 MRP_UTIL.MRP_LOG(l_log_message);
3559 RAISE expected_error;
3560 END IF;
3561 IF p_end_date IS NULL THEN
3562 FND_MESSAGE.set_name('MRP','MRP_END_DATE_REQUIRED');
3563 l_log_message := FND_MESSAGE.get;
3564 MRP_UTIL.MRP_LOG(l_log_message);
3565 RAISE expected_error;
3566 END IF;
3567
3568 -- begin new binds
3569 flm_util.init_bind;
3570
3571 -- Construct where clause
3572 IF p_from_line IS NOT NULL and p_to_line IS NOT NULL THEN
3573 l_where_clause := ' and wfs.line_id in (select line_id from wip_lines '||
3574 ' where line_code between :from_line and :to_line )';
3575 flm_util.add_bind(':from_line', p_from_line);
3576 flm_util.add_bind(':to_line', p_to_line);
3577 END IF;
3578
3579 IF p_from_item IS NOT NULL and p_to_item IS NOT NULL THEN
3580 -- Call procedure (from Kanban) to construct item_where_clause
3581 l_return := flm_util.Item_Where_Clause(
3582 p_from_item,
3583 p_to_item,
3584 'msi',
3585 l_item_where_clause,
3586 l_err_buf);
3587
3588 IF NOT l_return THEN
3589 -- English because unexpected error
3590 l_log_message := 'Problem constructing item_where_clause';
3591 MRP_UTIL.MRP_LOG(l_log_message);
3592 l_log_message := l_err_buf;
3593 MRP_UTIL.MRP_LOG(l_log_message);
3594 RAISE unexpected_error;
3595 END IF;
3596 l_item_where_clause := ' AND wfs.primary_item_id in ' ||
3597 '(select inventory_item_id from mtl_system_items msi ' ||
3598 ' where ' || l_item_where_clause || ')';
3599 END IF;
3600
3601 IF (p_from_category IS NOT NULL OR p_to_category IS NOT NULL)
3602 AND p_category_set_id IS NOT NULL THEN
3603 l_return := flm_util.Category_Where_Clause(
3604 p_from_category,
3605 p_to_category,
3606 'cat',
3607 p_category_structure_id,
3608 l_cat_where_clause,
3609 l_err_buf);
3610
3611 IF NOT l_return THEN
3612 -- English because unexpected error
3613 l_log_message := 'Problem constructing category_where_clause';
3614 MRP_UTIL.MRP_LOG(l_log_message);
3615 l_log_message := l_err_buf;
3616 MRP_UTIL.MRP_LOG(l_log_message);
3617 RAISE unexpected_error;
3618 END IF;
3619 l_cat_where_clause := ' AND wfs.primary_item_id in (select ' ||
3620 ' inventory_item_id from mtl_item_categories mic, '||
3621 ' mtl_categories cat where ' ||
3622 ' cat.category_id = mic.category_id ' ||
3623 ' and mic.organization_id = :cat_organization_id ' ||
3624 ' and mic.category_set_id = :cat_category_set_id ' ||
3625 ' and ' || l_cat_where_clause || ')';
3626 flm_util.add_bind(':cat_organization_id', p_organization_id);
3627 flm_util.add_bind(':cat_category_set_id', p_category_set_id);
3628 ELSIF p_category_set_id IS NOT NULL THEN
3629 l_cat_where_clause := ' AND wfs.primary_item_id in (select ' ||
3630 ' inventory_item_id from mtl_item_categories mic '||
3631 ' where mic.organization_id = :cat_organization_id '||
3632 ' and mic.category_set_id = :cat_category_set_id ) ';
3633 flm_util.add_bind(':cat_organization_id', p_organization_id);
3634 flm_util.add_bind(':cat_category_set_id', p_category_set_id);
3635 END IF;
3636
3637 l_where_clause := l_where_clause || l_item_where_clause ||
3638 l_cat_where_clause;
3639
3640 --fix bug#3170105
3641 /* Bug 3267578: Added not exists from MTL_TRANSACTIONS_INTERFACE */
3642 l_sql_stmt :=
3643 'SELECT wfs.wip_entity_id, wfs.demand_source_line, msi.replenish_to_order_flag, msi.build_in_wip_flag ' ||
3644 ' FROM wip_flow_schedules wfs, mtl_system_items msi ' ||
3645 ' WHERE wfs.primary_item_id = msi.inventory_item_id '||
3646 ' AND wfs.organization_id = msi.organization_id ' ||
3647 ' AND wfs.organization_id = to_char(:organization_id) ' ||
3648 l_where_clause ||
3649 ' AND wfs.status = 1 AND wfs.quantity_completed = 0 ' ||
3650 ' AND wfs.scheduled_completion_date between ' ||
3651 ' :start_date ' ||
3652 ' and :end_date '||
3653 ' and not exists ( select 1 from mtl_transactions_interface ' ||
3654 ' where transaction_source_id = wfs.wip_entity_id ' ||
3655 ' and organization_id = wfs.organization_id ' ||
3656 ' and transaction_source_type_id = 5 ' || -- perf bug 4911894
3657 ' and transaction_action_id in (1, 27, 30, 31, 32, 33, 34) ) ';
3658 flm_util.add_bind(':organization_id', p_organization_id);
3659 flm_util.add_bind(':start_date', l_start_date);
3660 flm_util.add_bind(':end_date', l_end_date+1-1/(24*60*60));
3661 --end of fix bug#3170105
3662 -- get the cursor
3663 l_cursor := dbms_sql.open_cursor;
3664
3665 -- parse the sql statement
3666 dbms_sql.parse(l_cursor, l_sql_stmt, dbms_sql.native);
3667 flm_util.do_binds(l_cursor);
3668
3669
3670 -- define column
3671 dbms_sql.define_column(l_cursor, 1, l_wip_entity_id);
3672 dbms_sql.define_column(l_cursor, 2, l_demand_source_line, 30);
3673 dbms_sql.define_column(l_cursor, 3, l_replenish_to_order_flag, 1);
3674 dbms_sql.define_column(l_cursor, 4, l_build_in_wip_flag, 1);
3675
3676 -- execute the sql statement
3677 l_dummy := dbms_sql.execute(l_cursor);
3678
3679 WHILE dbms_sql.fetch_rows(l_cursor) > 0 LOOP
3680 dbms_sql.column_value(l_cursor,1, l_wip_entity_id);
3681 dbms_sql.column_value(l_cursor,2, l_demand_source_line);
3682 dbms_sql.column_value(l_cursor,3, l_replenish_to_order_flag);
3683 dbms_sql.column_value(l_cursor,4, l_build_in_wip_flag);
3684
3685 -- Added to support component picking. It will cancel the move order when the flow
3686 -- schedule is to be deleted.
3687 wip_picking_pvt.cancel_allocations(l_wip_entity_id, 4, null, l_return_status, l_msg_data);
3688 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3689 MRP_UTIL.MRP_LOG(l_msg_data);
3690 ELSE
3691 DELETE FROM wip_flow_schedules
3692 WHERE wip_entity_id = l_wip_entity_id AND organization_id = p_organization_id;
3693
3694 l_rows_processed := l_rows_processed + 1;
3695
3696 IF (l_replenish_to_order_flag = 'Y' AND l_build_in_wip_flag = 'Y' AND l_demand_source_line IS NOT NULL) THEN
3697 CTO_WIP_WORKFLOW_API_PK.flow_deletion(to_number(l_demand_source_line), l_return_status,
3698 l_msg_count, l_msg_data);
3699 END IF;
3700
3701 -- Added for Flow Execution Workstation. Deleting from execution table
3702 delete from flm_exe_operations
3703 where organization_id = p_organization_id and wip_entity_id = l_wip_entity_id;
3704 delete from flm_exe_req_operations
3705 where organization_id = p_organization_id and wip_entity_id = l_wip_entity_id;
3706 delete from flm_exe_lot_numbers
3707 where organization_id = p_organization_id and wip_entity_id = l_wip_entity_id;
3708 delete from flm_exe_serial_numbers
3709 where organization_id = p_organization_id and wip_entity_id = l_wip_entity_id;
3710 END IF;
3711
3712 END LOOP;
3713
3714 -- close the cursor
3715 dbms_sql.close_cursor(l_cursor);
3716
3717 FND_MESSAGE.set_name('MRP','MRP_ROWS_DELETED');
3718 FND_MESSAGE.set_token('ROW_COUNT',l_rows_processed);
3719 ERRBUF := FND_MESSAGE.get;
3720 l_log_message := FND_MESSAGE.get;
3721 MRP_UTIL.MRP_LOG(l_log_message);
3722
3723 FND_MESSAGE.set_name('MRP','MRP_FLOW_DELETE');
3724 l_log_message := FND_MESSAGE.get;
3725 MRP_UTIL.MRP_LOG(l_log_message);
3726
3727 RETCODE := G_SUCCESS;
3728
3729 EXCEPTION
3730 WHEN NO_DATA_FOUND THEN
3731 ROLLBACK;
3732 RETCODE := G_WARNING;
3733 FND_MESSAGE.set_name('MRP','MRP_NO_FLOW_DELETED');
3734 l_log_message := FND_MESSAGE.get;
3735 MRP_UTIL.MRP_LOG(l_log_message);
3736
3737 WHEN expected_error THEN
3738 ROLLBACK;
3739 IF RETCODE <> 1 THEN
3740 RETCODE := G_ERROR;
3741 END IF;
3742 FND_MESSAGE.set_name('MRP','MRP_DELETE_FLOW_ERROR');
3743 ERRBUF := FND_MESSAGE.get;
3744 l_log_message := FND_MESSAGE.get;
3745 MRP_UTIL.MRP_LOG(l_log_message);
3746
3747 WHEN unexpected_error THEN
3748 ROLLBACK;
3749 RETCODE := G_ERROR;
3750 FND_MESSAGE.set_name('MRP','MRP_DELETE_FLOW_ERROR');
3751 ERRBUF := FND_MESSAGE.get;
3752 l_log_message := FND_MESSAGE.get;
3753 MRP_UTIL.MRP_LOG(l_log_message);
3754
3755 WHEN OTHERS THEN
3756 ROLLBACK;
3757 RETCODE := G_ERROR;
3758 FND_MESSAGE.set_name('MRP','MRP_DELETE_FLOW_ERROR');
3759 ERRBUF := FND_MESSAGE.get;
3760 l_log_message := FND_MESSAGE.get;
3761 MRP_UTIL.MRP_LOG(l_log_message);
3762 l_log_message := 'Unexpected SQL Error: '||sqlerrm;
3763 MRP_UTIL.MRP_LOG(l_log_message);
3764
3765 END Delete_Flow_Schedules;
3766
3767
3768 PROCEDURE Roll_Flow_Schedules( ERRBUF OUT NOCOPY VARCHAR2,
3769 RETCODE OUT NOCOPY VARCHAR2,
3770 p_organization_id IN NUMBER,
3771 p_spread_qty IN NUMBER,
3772 p_dummy IN NUMBER,
3773 p_dummy1 IN NUMBER,
3774 p_dummy2 IN NUMBER,
3775 p_dummy3 IN NUMBER,
3776 p_dummy4 IN NUMBER,
3777 p_output IN NUMBER,
3778 p_from_start_date IN VARCHAR2,
3779 p_from_end_date IN VARCHAR2,
3780 p_to_start_date IN VARCHAR2,
3781 p_to_end_date IN VARCHAR2,
3782 p_from_line IN VARCHAR2,
3783 p_to_line IN VARCHAR2,
3784 p_from_item IN VARCHAR2,
3785 p_to_item IN VARCHAR2,
3786 p_category_set_id IN NUMBER,
3787 p_category_structure_id IN NUMBER,
3788 p_from_category IN VARCHAR2,
3789 p_to_category IN VARCHAR2)
3790 IS
3791
3792 --b boolean;
3793 -- Local variables
3794 l_log_message VARCHAR2(2000);
3795 l_out_message VARCHAR2(2000);
3796 l_return BOOLEAN;
3797 l_err_buf VARCHAR2(2000);
3798
3799 l_cursor INTEGER := NULL;
3800 l_rows INTEGER := NULL;
3801
3802 l_temp_date DATE; --fix bug#3170105
3803 l_from_start_date DATE; --fix bug#3170105
3804 l_from_end_date DATE;
3805 l_to_end_date DATE;
3806 l_to_start_date DATE;
3807
3808 l_to_start_time NUMBER; --TZ BOM Calendar bug 3832684
3809 l_to_end_time NUMBER; --TZ BOM Calendar bug 3832684
3810
3811 l_variance NUMBER := 0;
3812 l_daily_variance NUMBER := 0;
3813 l_update_variance NUMBER := 0;
3814 l_unprocessed_var NUMBER := 0;
3815 l_remainder NUMBER := 0;
3816 l_row_count NUMBER := 0;
3817
3818 l_wip_entity_id NUMBER := FND_API.G_MISS_NUM;
3819 l_wip_entity_id2 NUMBER := FND_API.G_MISS_NUM;
3820 l_completion_date DATE := FND_API.G_MISS_DATE;
3821 l_old_completion_date DATE := FND_API.G_MISS_DATE;
3822 l_planned_quantity NUMBER := FND_API.G_MISS_NUM;
3823 l_quantity_completed NUMBER := FND_API.G_MISS_NUM;
3824
3825 l_report_query_id NUMBER;
3826
3827 fs_report_rec REPORT_REC_TYPE;
3828
3829 l_planned_total NUMBER;
3830 l_completed_total NUMBER;
3831 l_variance1_total NUMBER;
3832 l_scheduled_total NUMBER;
3833 l_adjusted_total NUMBER;
3834 l_variance2_total NUMBER;
3835
3836 l_old_line_id NUMBER := -1;
3837 l_old_line_code VARCHAR2(30);
3838 l_old_item_id NUMBER := -1;
3839 l_old_item VARCHAR2(240);
3840 l_old_sg_id NUMBER := -1;
3841
3842 l_trans_var1 VARCHAR2(30);
3843 l_trans_var2 VARCHAR2(30);
3844 l_trans_var3 VARCHAR2(30);
3845 l_trans_var4 VARCHAR2(30);
3846 l_trans_var5 VARCHAR2(30);
3847 l_trans_var6 VARCHAR2(30);
3848
3849 l_flow_schedule_rec MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type;
3850 l_x_flow_schedule_rec MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type;
3851 l_control_rec MRP_GLOBALS.Control_Rec_Type := MRP_GLOBALS.G_MISS_CONTROL_REC;
3852 l_old_flow_schedule_rec MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type ;
3853
3854
3855 l_return_status VARCHAR2(1);
3856 l_msg_count NUMBER;
3857 l_msg_data VARCHAR2(2000);
3858 i NUMBER;
3859 msg VARCHAR2(2000);
3860
3861 /* Added for Enhancement #2829204 */
3862 l_auto_replenish VARCHAR2(1);
3863 l_kanban_activity_id NUMBER;
3864
3865 CURSOR Kanban_Card_Activity_Csr(p_wip_entity_id IN NUMBER) IS
3866 SELECT Kanban_Activity_Id
3867 FROM mtl_kanban_card_activity
3868 WHERE source_wip_entity_id = p_wip_entity_id;
3869
3870 -- Bug 2213859
3871 TYPE build_seq_counter_rec_type is RECORD(
3872 current_build_seq NUMBER,
3873 base_number NUMBER);
3874
3875 TYPE l_build_seq_counter_type is TABLE of build_seq_counter_rec_type index by binary_integer;
3876 l_build_seq_counter l_build_seq_counter_type;
3877 l_temp_build_sequence NUMBER;
3878 l_base_number NUMBER;
3879 l_total_count NUMBER;
3880 l_index BINARY_INTEGER;
3881 -- Bug 2213859
3882
3883 -- Exceptions
3884 expected_error EXCEPTION;
3885 unexpected_error EXCEPTION;
3886
3887 -- Added for project 'Roll Flow Schedules: Maintain Schedule Number'
3888 -- To hold old/new schedule_number/wip_entity_id that will be used for swapping at the end of process
3889 oldFSSchNum FSSchNum;
3890 oldFSWipId FSWipId;
3891 newFSSchNum FSSchNum;
3892 newFSWipId FSWipId;
3893 l_loop_count NUMBER:=0;
3894
3895 CURSOR C1(p_line_id NUMBER, p_item_id NUMBER, p_schedule_group_id NUMBER,
3896 p_to_start_date DATE, p_to_end_date DATE) --fix bug#3170105
3897 IS
3898 SELECT nvl(sum(planned_quantity),0)
3899 FROM wip_flow_schedules
3900 WHERE organization_id = p_organization_id
3901 AND line_id = p_line_id
3902 AND primary_item_id = p_item_id
3903 AND nvl(schedule_group_id,-1) = nvl(p_schedule_group_id,-1)
3904 AND build_sequence IS NULL
3905 AND demand_source_header_id IS NULL
3906 AND scheduled_completion_date --fix bug#3170105
3907 BETWEEN p_to_start_date AND p_to_end_date+1-1/(24*60*60);
3908
3909 CURSOR C2(p_line_id NUMBER, p_item_id NUMBER, p_schedule_group_id NUMBER,
3910 p_to_start_date DATE, p_to_end_date DATE) --fix bug#3170105
3911 IS
3912 SELECT wip_entity_id,
3913 planned_quantity
3914 FROM wip_flow_schedules
3915 WHERE organization_id = p_organization_id
3916 AND line_id = p_line_id
3917 AND primary_item_id = p_item_id
3918 AND nvl(schedule_group_id,-1) = nvl(p_schedule_group_id,-1)
3919 AND build_sequence IS NULL
3920 AND demand_source_header_id IS NULL
3921 AND scheduled_completion_date --fix bug#3170105
3922 BETWEEN p_to_start_date AND p_to_end_date+1-1/(24*60*60);
3923
3924 CURSOR C3(p_line_id NUMBER, p_item_id NUMBER,
3925 p_to_start_date DATE, p_to_end_date DATE) --fix bug#3170105
3926 IS
3927 SELECT wip_entity_id,
3928 scheduled_completion_date,
3929 planned_quantity,
3930 quantity_completed
3931 FROM wip_flow_schedules
3932 WHERE organization_id = p_organization_id
3933 AND line_id = p_line_id
3934 AND primary_item_id = p_item_id
3935 AND demand_source_header_id IS NULL
3936 AND planned_quantity > quantity_completed
3937 AND scheduled_completion_date --fix bug#3170105
3938 BETWEEN p_to_start_date AND p_to_end_date+1-1/(24*60*60)
3939 UNION
3940 SELECT 0,
3941 flm_timezone.calendar_to_server(calendar_date), --TZ Bug 3832684
3942 0,
3943 0
3944 FROM mtl_parameters mp,
3945 bom_calendar_dates bom
3946 WHERE mp.organization_id = p_organization_id
3947 AND mp.calendar_exception_set_id = bom.exception_set_id
3948 AND mp.calendar_code = bom.calendar_code
3949 AND bom.seq_num IS NOT NULL
3950 AND bom.calendar_date between flm_timezone.server_to_calendar(p_to_start_date) --fix bug#3170105
3951 AND flm_timezone.server_to_calendar(p_to_end_date)
3952 AND bom.calendar_date NOT IN (select flm_timezone.server_to_calendar(scheduled_completion_date)
3953 FROM wip_flow_schedules
3954 WHERE organization_id = p_organization_id
3955 AND line_id = p_line_id
3956 AND primary_item_id = p_item_id
3957 AND demand_source_header_id IS NULL
3958 AND scheduled_completion_date --fix bug#3170105
3959 BETWEEN p_to_start_date AND p_to_end_date+1-1/(24*60*60))
3960 ORDER BY 2 desc;
3961
3962 CURSOR C4(p_line_id NUMBER, p_item_id NUMBER,
3963 p_to_start_date DATE, p_to_end_date DATE) --fix bug#3170105
3964 IS
3965 SELECT count(bom.calendar_date)
3966 FROM mtl_parameters mp,
3967 bom_calendar_dates bom
3968 WHERE mp.calendar_exception_set_id = bom.exception_set_id
3969 AND mp.calendar_code = bom.calendar_code
3970 AND mp.organization_id = p_organization_id
3971 AND bom.calendar_date BETWEEN flm_timezone.server_to_calendar(p_to_start_date) --fix bug#3170105
3972 AND flm_timezone.server_to_calendar(p_to_end_date)
3973 AND ((bom.seq_num IS NOT NULL) OR
3974 (bom.calendar_date IN (SELECT flm_timezone.server_to_calendar(scheduled_completion_date)
3975 FROM wip_flow_schedules
3976 WHERE organization_id = p_organization_id
3977 AND line_id = p_line_id
3978 AND primary_item_id = p_item_id
3979 AND scheduled_completion_date BETWEEN
3980 flm_timezone.calendar_to_server(bom.calendar_date)
3981 AND flm_timezone.calendar_to_server(bom.calendar_date)+1-1/(24*60*60)
3982 AND demand_source_header_id IS NULL)));
3983
3984 CURSOR C5(p_line_id NUMBER, p_item_id NUMBER,
3985 p_to_start_date DATE, p_to_end_date DATE) --fix bug#3170105
3986 IS
3987 SELECT wip_entity_id,
3988 scheduled_completion_date, --fix bug#3170105
3989 planned_quantity
3990 FROM wip_flow_schedules
3991 WHERE organization_id = p_organization_id
3992 AND line_id = p_line_id
3993 AND primary_item_id = p_item_id
3994 AND build_sequence IS NULL
3995 AND demand_source_header_id IS NULL
3996 AND scheduled_completion_date --fix bug#3170105
3997 BETWEEN p_to_start_date AND p_to_end_date+1-1/(24*60*60)
3998 ORDER BY scheduled_completion_date desc
3999 FOR UPDATE OF wip_entity_id NOWAIT;
4000
4001 CURSOR C6(p_line_id NUMBER, p_item_id NUMBER, p_schedule_group_id NUMBER,
4002 p_completion_date DATE,
4003 p_from_start_date DATE, p_from_end_date DATE,
4004 p_to_start_date DATE, p_to_end_date DATE) --fix bug#3170105
4005 IS
4006 SELECT wip_entity_id,
4007 scheduled_completion_date, --fix bug#3170105
4008 planned_quantity
4009 FROM wip_flow_schedules
4010 WHERE organization_id = p_organization_id
4011 AND line_id = p_line_id
4012 AND primary_item_id = p_item_id
4013 AND planned_quantity > 0
4014 AND nvl(schedule_group_id,-1) = nvl(p_schedule_group_id,-1)
4015 AND build_sequence IS NULL
4016 AND demand_source_header_id IS NULL
4017 AND scheduled_completion_date BETWEEN
4018 p_to_start_date + (p_completion_date - p_from_start_date)
4019 AND p_to_start_date + (p_completion_date - p_from_start_date) +1-1/(24*60*60)
4020 AND scheduled_completion_date --fix bug#3170105
4021 BETWEEN p_to_start_date AND p_to_end_date+1-1/(24*60*60)
4022 ORDER BY scheduled_completion_date desc
4023 FOR UPDATE OF wip_entity_id NOWAIT;
4024
4025 CURSOR REPORT_CURSOR(l_query_id NUMBER) IS
4026 SELECT rpad(substr(wl.line_code,1,10),10),
4027 number1,
4028 rpad(substr(kfv.concatenated_segments,1,14),14),
4029 number2,
4030 rpad(substr(nvl(sg.schedule_group_name,' '),1,8),8),
4031 number3,
4032 date1,
4033 number4,
4034 number5,
4035 number4 - number5,
4036 date2,
4037 nvl(number6,0),
4038 number7,
4039 number7 - nvl(number6,0)
4040 FROM wip_lines wl,
4041 mtl_system_items_kfv kfv,
4042 wip_schedule_groups sg,
4043 mrp_form_query
4044 WHERE wl.line_id = number1
4045 AND wl.organization_id = number10
4046 AND kfv.inventory_item_id = number2
4047 AND kfv.organization_id = number10
4048 AND sg.schedule_group_id(+) = number3
4049 AND sg.organization_id(+) = number10
4050 AND query_id = l_query_id
4051 ORDER BY wl.line_code, kfv.concatenated_segments,schedule_group_name,
4052 date1, date2, number4, number5, number6, number7;
4053
4054 CURSOR REPORT_TOTALS(l_query_id NUMBER, l_line_id NUMBER,
4055 l_item_id NUMBER, l_schedule_group_id NUMBER) IS
4056 SELECT sum(number4),
4057 sum(number5),
4058 sum(number4 - number5),
4059 sum(nvl(number6,0)),
4060 sum(number7),
4061 sum(number7 - nvl(number6,0))
4062 FROM mrp_form_query
4063 WHERE query_id = l_query_id
4064 AND number1 = l_line_id
4065 AND number2 = l_item_id
4066 AND nvl(number3,-1) = nvl(l_schedule_group_id,-1);
4067
4068 -- Bug 2213859
4069 FUNCTION Get_Base_Number(p_line_id NUMBER ,p_target_date DATE,
4070 p_from_start_date DATE, p_from_end_date DATE) --fix bug#3170105
4071 RETURN NUMBER IS
4072 CURSOR Get_Target_Max_Build_Seq(p_line_id NUMBER, p_target_date DATE)
4073 IS
4074 SELECT nvl(max(build_sequence),0)
4075 FROM wip_flow_schedules
4076 WHERE organization_id = p_organization_id
4077 AND line_id = p_line_id
4078 AND build_sequence is NOT NULL
4079 AND (ROLL_FORWARDED_FLAG <> G_INTERMEDIATE_ROLL_FORWARDED OR
4080 ROLL_FORWARDED_FLAG IS NULL) /*Bug 3019639*/
4081 /** Forward ported bug 3055939 */
4082 AND scheduled_completion_date >= flm_timezone.client00_in_server(p_target_date) --fix bug#3170105
4083 AND scheduled_completion_date < flm_timezone.client00_in_server(p_target_date+1); --fix bug#3170105
4084
4085 CURSOR Count_Orig_Schedules (p_line_id NUMBER,
4086 p_from_start_date DATE, p_from_end_date DATE) --fix bug#3170105)
4087 IS
4088 SELECT count(*)
4089 FROM wip_flow_schedules
4090 WHERE organization_id = p_organization_id
4091 AND line_id = p_line_id
4092 AND nvl(planned_quantity,0) > nvl(quantity_completed,0)
4093 /** Forward ported bug 3055939 */
4094 AND scheduled_completion_date >= p_from_start_date --fix bug#3170105
4095 AND scheduled_completion_date < p_from_end_date+1; --fix bug#3170105
4096
4097 l_max_build_seq NUMBER:=0;
4098 l_count_schedule NUMBER:=0;
4099 BEGIN
4100 OPEN Get_Target_Max_Build_Seq(p_line_id, p_target_date);
4101 FETCH Get_Target_Max_Build_Seq INTO l_max_build_seq;
4102 CLOSE Get_Target_Max_Build_Seq;
4103
4104 OPEN Count_Orig_Schedules(p_line_id,p_from_start_date,p_from_end_date);
4105 FETCH Count_Orig_Schedules INTO l_count_schedule;
4106 CLOSE Count_Orig_Schedules;
4107
4108 RETURN (l_max_build_seq + l_count_schedule + 1);
4109 END Get_Base_Number;
4110
4111 -- Bug 2213859
4112
4113 FUNCTION Time_Schedule(p_line_id NUMBER ,p_scheduled_completion_date DATE,
4114 p_quantity NUMBER)
4115 RETURN DATE IS
4116 CURSOR Check_Schedule_Roll_Types
4117 (p_line_id NUMBER ,p_scheduled_completion_date DATE)
4118 IS
4119 SELECT count(distinct(nvl(roll_forwarded_flag,-1)))
4120 FROM wip_flow_schedules
4121 WHERE organization_id = p_organization_id
4122 AND line_id = p_line_id
4123 /** Forward ported bug 3055939 */
4124 AND scheduled_completion_date >= flm_timezone.client00_in_server(p_scheduled_completion_date) --fix bug#3170105
4125 AND scheduled_completion_date < flm_timezone.client00_in_server(p_scheduled_completion_date+1); --fix bug#3170105
4126
4127 CURSOR Check_Schedule_Distinct_Type
4128 (p_line_id NUMBER ,p_scheduled_completion_date DATE)
4129 IS
4130 SELECT distinct(nvl(roll_forwarded_flag,-1))
4131 FROM wip_flow_schedules
4132 WHERE organization_id = p_organization_id
4133 AND line_id = p_line_id
4134 /** Forward ported bug 3055939 */
4135 AND scheduled_completion_date >= flm_timezone.client00_in_server(p_scheduled_completion_date) --fix bug#3170105
4136 AND scheduled_completion_date < flm_timezone.client00_in_server(p_scheduled_completion_date+1); --fix bug#3170105
4137
4138 CURSOR Line_Details(p_line_id NUMBER)
4139 IS SELECT START_TIME,MAXIMUM_RATE FROM wip_lines
4140 WHERE organization_id = p_organization_id
4141 AND LINE_ID = p_line_id;
4142
4143 CURSOR Check_Last_Schedule
4144 (p_line_id NUMBER ,p_scheduled_completion_date DATE)
4145 IS
4146 SELECT MAX(scheduled_completion_date)
4147 FROM wip_flow_schedules
4148 WHERE organization_id = p_organization_id
4149 AND line_id = p_line_id
4150 /** Forward ported bug 3055939 */
4151 AND scheduled_completion_date >= flm_timezone.client00_in_server(p_scheduled_completion_date) --fix bug#3170105
4152 AND scheduled_completion_date < flm_timezone.client00_in_server(p_scheduled_completion_date+1); --fix bug#3170105
4153
4154 l_type_count NUMBER:=0;
4155 l_distinct_type NUMBER:=0;
4156 l_start_time NUMBER:=0;
4157 l_time_flag NUMBER:=0;
4158 l_time NUMBER:=0;
4159 l_maximum_rate NUMBER:=0;
4160 l_schedule_date DATE;
4161 l_last_schedule_date DATE;
4162 BEGIN
4163 OPEN Check_Schedule_Roll_Types(p_line_id, p_scheduled_completion_date); --fix bug#3170105
4164 FETCH Check_Schedule_Roll_Types INTO l_type_count;
4165 IF l_type_count = 0 THEN
4166 l_time_flag := 2;--meaning no schedules
4167 ELSIF l_type_count =1 THEN
4168 OPEN Check_Schedule_Distinct_Type(
4169 p_line_id, p_scheduled_completion_date); --fix bug#3170105
4170 FETCH Check_Schedule_Distinct_Type INTO l_distinct_type;
4171 CLOSE Check_Schedule_Distinct_Type;
4172 IF l_distinct_type = 2 THEN
4173 l_time_flag := 1;
4174 /*meaning schedules are present but
4175 all are created in this session.*/
4176 ELSE
4177 l_time_flag := 0;
4178 /*meaning schedules are present and
4179 all are created previously.*/
4180 END IF;
4181 ELSIF l_type_count > 1 THEN
4182 l_time_flag := 0;
4183 /*meaning schedules are present and
4184 may be some are created previously.*/
4185 END IF;
4186
4187 IF l_time_flag <> 0 THEN
4188 OPEN Line_Details(p_line_id);
4189 FETCH Line_Details INTO l_start_time,l_maximum_rate;
4190
4191 --TZ 3832684: Calculate completion date in Client TZ.
4192 --l_schedule_date and p_completion_date should be in Client00 time.
4193 --If p_completion_date is not in Client00 time, which means that there are
4194 --FS in the date, then l_time_flag=0 and thus, will not get into this IF flow.
4195 if flm_timezone.g_enabled then
4196 l_start_time := flm_timezone.g_client_start_time;
4197 l_schedule_date := flm_timezone.server_to_client(p_scheduled_completion_date);
4198 else
4199 l_schedule_date := p_scheduled_completion_date; --fix bug#3170105
4200 end if;
4201
4202 IF l_time_flag = 1 THEN
4203 OPEN Check_Last_Schedule(p_line_id,p_scheduled_completion_date); --fix bug#3170105
4204 FETCH Check_Last_Schedule INTO l_last_schedule_date;
4205
4206 --TZ 3832684: calculate completion date in Client TZ
4207 if flm_timezone.g_enabled then
4208 l_last_schedule_date := flm_timezone.server_to_client(l_last_schedule_date);
4209 end if;
4210
4211 --TZ 3832684: better way to get the seconds in Client time
4212 l_start_time := to_char(l_last_schedule_date,'SSSSS');
4213
4214 CLOSE Check_Last_Schedule;
4215 END IF;
4216 l_time := l_start_time + 60*60*(p_quantity/l_maximum_rate);
4217
4218 --fix bug#3170105 not yet
4219 MRP_UTIL.MRP_LOG('the client date before :'||to_char(l_schedule_date,'DD-MON-YYYY HH24:MI:SS'));
4220
4221 --TZ 3832684: Will have to do the time addition in Client TZ doe to some corner cases
4222 --The p_completion_date is assumed to be in Client00_in_server
4223 l_schedule_date := l_schedule_date+(l_time/86400);
4224
4225 MRP_UTIL.MRP_LOG('the client date after :'||to_char(l_schedule_date,'DD-MON-YYYY HH24:MI:SS'));
4226 --end of fix bug#3170105
4227
4228 --TZ 3832684: conversion back to server to be passed back to caller
4229 if flm_timezone.g_enabled then
4230 l_schedule_date := flm_timezone.client_to_server(l_schedule_date);
4231 MRP_UTIL.MRP_LOG('the datetime after conv :'||to_char(l_schedule_date,'DD-MON-YY HH24:MI:SS'));
4232 end if;
4233
4234 CLOSE Line_Details;
4235 ELSE
4236 l_schedule_date := p_scheduled_completion_date; --fix bug#3170105
4237 END IF;
4238 CLOSE Check_Schedule_Roll_Types;
4239 return l_schedule_date;
4240 END;
4241
4242 FUNCTION Close_All_Past_Schedules
4243 RETURN INTEGER IS
4244 l_where_clause VARCHAR2(2000);
4245 l_item_where_clause VARCHAR2(2000);
4246 l_cat_where_clause VARCHAR2(2000);
4247 l_cat_sql VARCHAR2(2000);
4248 l_cat_table_sql VARCHAR2(2000);
4249 l_sql_stmt VARCHAR2(2000) := NULL;
4250 l_rows_processed NUMBER;
4251 l_cursor_name INTEGER := NULL;
4252
4253 l_log_message VARCHAR2(2000);
4254 l_return BOOLEAN;
4255 BEGIN
4256
4257 -- begin new binds
4258 flm_util.init_bind;
4259
4260 -- Construct where clause
4261 IF p_from_line IS NOT NULL and p_to_line IS NOT NULL THEN
4262 l_where_clause := ' and line.line_code between :from_line and :to_line ';
4263 flm_util.add_bind(':from_line', p_from_line);
4264 flm_util.add_bind(':to_line', p_to_line);
4265 END IF;
4266
4267 IF p_from_item IS NOT NULL and p_to_item IS NOT NULL THEN
4268 -- Call procedure to construct item_where_clause
4269 l_return := flm_util.Item_Where_Clause(
4270 p_from_item,
4271 p_to_item,
4272 'msi',
4273 l_item_where_clause,
4274 l_err_buf);
4275
4276 IF NOT l_return THEN
4277 -- English because unexpected error
4278 l_log_message := 'Problem constructing item_where_clause';
4279 MRP_UTIL.MRP_LOG(l_log_message);
4280 l_log_message := l_err_buf;
4281 MRP_UTIL.MRP_LOG(l_log_message);
4282 RAISE unexpected_error;
4283 END IF;
4284 l_item_where_clause := ' AND ' || l_item_where_clause;
4285 END IF;
4286
4287 IF (p_from_category IS NOT NULL OR p_to_category IS NOT NULL)
4288 AND p_category_set_id IS NOT NULL THEN
4289
4290 l_return := flm_util.Category_Where_Clause(
4291 p_from_category,
4292 p_to_category,
4293 'cat',
4294 p_category_structure_id,
4295 l_cat_where_clause,
4296 l_err_buf);
4297
4298 IF NOT l_return THEN
4299 -- English because unexpected error
4300 l_log_message := 'Problem constructing category_where_clause';
4301 MRP_UTIL.MRP_LOG(l_log_message);
4302 l_log_message := l_err_buf;
4303 MRP_UTIL.MRP_LOG(l_log_message);
4304 RAISE unexpected_error;
4305 END IF;
4306 l_cat_where_clause := ' AND fs.primary_item_id in (select ' ||
4307 ' inventory_item_id from mtl_item_categories mic, '||
4308 ' mtl_categories cat where ' ||
4309 ' cat.category_id = mic.category_id ' ||
4310 ' and mic.organization_id = :cat_organization_id ' ||
4311 ' and mic.category_set_id = :cat_category_set_id ' ||
4312 ' and ' || l_cat_where_clause || ')';
4313 flm_util.add_bind(':cat_organization_id', p_organization_id);
4314 flm_util.add_bind(':cat_category_set_id', p_category_set_id);
4315 END IF;
4316
4317 l_where_clause := l_where_clause || l_item_where_clause ||
4318 l_cat_where_clause;
4319
4320 IF p_category_set_id IS NOT NULL THEN
4321 l_cat_table_sql := ' mtl_item_categories mic, ';
4322 l_cat_sql :=
4323 ' and mic.inventory_item_id = fs.primary_item_id ' ||
4324 ' and mic.organization_id = fs.organization_id ' ||
4325 ' and mic.category_set_id = :cat2_category_set_id ';
4326 flm_util.add_bind(':cat2_category_set_id', p_category_set_id);
4327 ELSE
4328 l_cat_table_sql := ' ';
4329 l_cat_sql := ' ';
4330 END IF;
4331
4332 /* Bug 2998385: Added not exists from MTL_TRANSACTIONS_INTERFACE */
4333 -- Define the select statement
4334 --fix bug#3170105
4335 l_sql_stmt :=
4336 'SELECT fs.wip_entity_id ' ||
4337 ' FROM wip_lines line, '||
4338 l_cat_table_sql ||
4339 ' mtl_system_items_kfv msi, '||
4340 ' wip_flow_schedules fs ' ||
4341 ' WHERE fs.organization_id = to_char( :organization_id) ' ||
4342 l_where_clause ||
4343 ' AND fs.scheduled_completion_date < flm_timezone.sysdate00_in_server' ||
4344 ' and line.line_id = fs.line_id ' ||
4345 ' and line.organization_id = fs.organization_id '||
4346 ' and nvl(fs.status ,0) = 1 '||
4347 l_cat_sql ||
4348 ' and msi.inventory_item_id = fs.primary_item_id ' ||
4349 ' and msi.organization_id = fs.organization_id ' ||
4350 ' and not exists ( select 1 from mtl_transactions_interface ' ||
4351 ' where transaction_source_id = fs.wip_entity_id ' ||
4352 ' and organization_id = fs.organization_id ' ||
4353 ' and transaction_source_type_id = 5 ' || -- perf bug 4911894
4354 ' and transaction_action_id in (1, 27, 30, 31, 32, 33, 34) ) ';
4355
4356
4357 flm_util.add_bind(':organization_id', p_organization_id);
4358
4359 -- get the cursor
4360 l_cursor_name := dbms_sql.open_cursor;
4361
4362 -- parse the sql statement
4363 dbms_sql.parse(l_cursor_name, l_sql_stmt, dbms_sql.native);
4364 flm_util.do_binds(l_cursor_name);
4365
4366 dbms_sql.define_column(l_cursor_name, 1, l_flow_schedule_rec.wip_entity_id);
4367
4368
4369 -- execute the sql statement
4370 -- execute will return zero rows processed since this is just a select
4371 -- statement. Need a variable for the return value.
4372 l_rows_processed := dbms_sql.execute(l_cursor_name);
4373
4374 return(l_cursor_name);
4375 EXCEPTION
4376 WHEN NO_DATA_FOUND THEN
4377 RETCODE := G_ERROR;
4378 FND_MESSAGE.set_name('MRP','MRP_NO_ROLL_RECORDS');
4379 ERRBUF := FND_MESSAGE.get;
4380 l_log_message := FND_MESSAGE.get;
4381 MRP_UTIL.MRP_LOG(l_log_message);
4382 RETURN NULL;
4383
4384 WHEN OTHERS THEN
4385 -- English because unexpected error
4386 l_log_message := 'Problem Closing all past Schedules';
4387 MRP_UTIL.MRP_LOG(l_log_message);
4388 l_err_buf := 'Unexpected SQL Error: '||sqlerrm;
4389 l_log_message := l_err_buf;
4390 MRP_UTIL.MRP_LOG(l_log_message);
4391 RAISE unexpected_error;
4392 RETURN NULL;
4393 END Close_All_Past_Schedules;
4394
4395 FUNCTION Create_Cursor_WOD(p_from_start_date IN DATE, p_from_end_date IN DATE) --fix bug#3170105
4396 RETURN INTEGER IS
4397
4398 l_where_clause VARCHAR2(2000);
4399 l_item_where_clause VARCHAR2(2000);
4400 l_cat_where_clause VARCHAR2(2000);
4401 l_log_message VARCHAR2(2000);
4402 l_sql_stmt VARCHAR2(2000) := NULL;
4403 l_return BOOLEAN;
4404 l_rows_processed NUMBER;
4405 l_cursor_name INTEGER := NULL;
4406 fs_report_rec REPORT_REC_TYPE;
4407 l_cat_sql VARCHAR2(2000);
4408 l_cat_table_sql VARCHAR2(2000);
4409
4410 BEGIN
4411
4412 -- new binds
4413 flm_util.init_bind;
4414
4415 -- Construct where clause
4416 IF p_from_line IS NOT NULL and p_to_line IS NOT NULL THEN
4417 l_where_clause := ' and line.line_code between :from_line and :to_line ';
4418 flm_util.add_bind(':from_line', p_from_line);
4419 flm_util.add_bind(':to_line', p_to_line);
4420 END IF;
4421
4422 IF p_from_item IS NOT NULL and p_to_item IS NOT NULL THEN
4423 -- Call procedure to construct item_where_clause
4424 l_return := flm_util.Item_Where_Clause(
4425 p_from_item,
4426 p_to_item,
4427 'msi',
4428 l_item_where_clause,
4429 l_err_buf);
4430
4431 IF NOT l_return THEN
4432 -- English because unexpected error
4433 l_log_message := 'Problem constructing item_where_clause';
4434 MRP_UTIL.MRP_LOG(l_log_message);
4435 l_log_message := l_err_buf;
4436 MRP_UTIL.MRP_LOG(l_log_message);
4437 RAISE unexpected_error;
4438 END IF;
4439 l_item_where_clause := ' AND ' || l_item_where_clause;
4440 END IF;
4441
4442 IF (p_from_category IS NOT NULL OR p_to_category IS NOT NULL)
4443 AND p_category_set_id IS NOT NULL THEN
4444 l_return := flm_util.Category_Where_Clause(
4445 p_from_category,
4446 p_to_category,
4447 'cat',
4448 p_category_structure_id,
4449 l_cat_where_clause,
4450 l_err_buf);
4451
4452 IF NOT l_return THEN
4453 -- English because unexpected error
4454 l_log_message := 'Problem constructing category_where_clause';
4455 MRP_UTIL.MRP_LOG(l_log_message);
4456 l_log_message := l_err_buf;
4457 MRP_UTIL.MRP_LOG(l_log_message);
4458 RAISE unexpected_error;
4459 END IF;
4460 l_cat_where_clause := ' AND fs.primary_item_id in (select ' ||
4461 ' inventory_item_id from mtl_item_categories mic, '||
4462 ' mtl_categories cat where ' ||
4463 ' cat.category_id = mic.category_id ' ||
4464 ' and mic.organization_id = :cat_organization_id ' ||
4465 ' and mic.category_set_id = :cat_category_set_id ' ||
4466 ' and ' || l_cat_where_clause || ')';
4467 flm_util.add_bind(':cat_organization_id', p_organization_id);
4468 flm_util.add_bind(':cat_category_set_id', p_category_set_id);
4469 END IF;
4470
4471 l_where_clause := l_where_clause || l_item_where_clause ||
4472 l_cat_where_clause;
4473
4474 -- Define the select statement
4475 IF p_category_set_id IS NOT NULL THEN
4476 l_cat_table_sql := ' mtl_item_categories mic, ';
4477 l_cat_sql :=
4478 ' and mic.inventory_item_id = fs.primary_item_id ' ||
4479 ' and mic.organization_id = fs.organization_id ' ||
4480 ' and mic.category_set_id = :cat2_category_set_id ';
4481 flm_util.add_bind(':cat2_category_set_id', p_category_set_id);
4482 ELSE
4483 l_cat_table_sql := ' ';
4484 l_cat_sql := ' ';
4485 END IF;
4486
4487 /* Bug 2998385: Added not exists from MTL_TRANSACTIONS_INTERFACE */
4488 --fix bug#3170105
4489 l_sql_stmt :=
4490 ' SELECT fs.line_id, line.line_code, fs.primary_item_id, ' ||
4491 ' msi.concatenated_segments,null' ||
4492 ' ,sum(nvl(fs.planned_quantity,0)), ' ||
4493 ' sum(nvl(fs.quantity_completed,0)) ' ||
4494 ' FROM wip_lines line, '||
4495 l_cat_table_sql ||
4496 ' mtl_system_items_kfv msi, '||
4497 ' wip_flow_schedules fs ' ||
4498 ' WHERE fs.organization_id = to_char( :organization_id ) ' ||
4499 l_where_clause ||
4500 ' AND (nvl(fs.planned_quantity,0) - nvl(fs.quantity_completed,0)) <> 0 ' ||
4501 ' AND fs.scheduled_completion_date between ' ||
4502 ' :from_start_date ' ||
4503 ' and :from_end_date ' ||
4504 ' and line.line_id = fs.line_id ' ||
4505 ' and fs.demand_source_header_id IS NULL '||
4506 ' and line.organization_id = fs.organization_id '||
4507 -- ' and nvl(fs.status ,0) = 1 '||
4508 l_cat_sql ||
4509 ' and msi.inventory_item_id = fs.primary_item_id ' ||
4510 ' and msi.organization_id = fs.organization_id '||
4511 ' and not exists ( select 1 from mtl_transactions_interface ' ||
4512 ' where transaction_source_id = fs.wip_entity_id ' ||
4513 ' and organization_id = fs.organization_id '||
4514 ' and transaction_source_type_id = 5 ' || -- perf bug 4911894
4515 ' and transaction_action_id in (1, 27, 30, 31, 32, 33, 34) ) ' ||
4516 ' group by fs.line_id, line.line_code, fs.primary_item_id, ' ||
4517 ' msi.concatenated_segments ' ||
4518 ' order by line.line_code, msi.concatenated_segments ' ;
4519
4520 flm_util.add_bind(':organization_id', p_organization_id);
4521 flm_util.add_bind(':from_start_date', p_from_start_date);
4522 flm_util.add_bind(':from_end_date', p_from_end_date+1-1/(24*60*60));
4523 --end of fix bug#3170105
4524
4525 -- get the cursor
4526 l_cursor_name := dbms_sql.open_cursor;
4527
4528 -- parse the sql statement
4529 dbms_sql.parse(l_cursor_name, l_sql_stmt, dbms_sql.native);
4530 flm_util.do_binds(l_cursor_name);
4531
4532 -- define columns
4533 dbms_sql.define_column(l_cursor_name, 1, fs_report_rec.line_id);
4534 dbms_sql.define_column(l_cursor_name, 2, fs_report_rec.line_code, 10);
4535 dbms_sql.define_column(l_cursor_name, 3, fs_report_rec.primary_item_id);
4536 dbms_sql.define_column(l_cursor_name, 4, fs_report_rec.item, 2000);
4537 dbms_sql.define_column(l_cursor_name, 5, fs_report_rec.schedule_group_id);
4538 dbms_sql.define_column(l_cursor_name, 6, fs_report_rec.planned_quantity);
4539 dbms_sql.define_column(l_cursor_name, 7, fs_report_rec.quantity_completed);
4540
4541
4542 -- execute the sql statement
4543 -- execute will return zero rows processed since this is just a select
4544 -- statement. Need a variable for the return value.
4545 l_rows_processed := dbms_sql.execute(l_cursor_name);
4546
4547 -- return cursor name
4548 return(l_cursor_name);
4549
4550 EXCEPTION
4551
4552 WHEN NO_DATA_FOUND THEN
4553
4554 RETCODE := G_ERROR;
4555 FND_MESSAGE.set_name('MRP','MRP_NO_ROLL_RECORDS');
4556 ERRBUF := FND_MESSAGE.get;
4557 l_log_message := FND_MESSAGE.get;
4558 MRP_UTIL.MRP_LOG(l_log_message);
4559
4560 RETURN NULL;
4561
4562 WHEN OTHERS THEN
4563
4564 -- English because unexpected error
4565 l_log_message := 'Problem constructing cursor';
4566 MRP_UTIL.MRP_LOG(l_log_message);
4567 l_err_buf := 'Unexpected SQL Error: '||sqlerrm;
4568 l_log_message := l_err_buf;
4569 MRP_UTIL.MRP_LOG(l_log_message);
4570 RAISE unexpected_error;
4571
4572 RETURN NULL;
4573
4574 END Create_Cursor_WOD;
4575
4576 FUNCTION Create_Cursor_WD (p_from_start_date IN DATE, p_from_end_date IN DATE) --fix bug#3170105
4577 RETURN INTEGER IS
4578
4579 l_where_clause VARCHAR2(2000);
4580 l_item_where_clause VARCHAR2(2000);
4581 l_cat_where_clause VARCHAR2(2000);
4582 l_log_message VARCHAR2(2000);
4583 l_sql_stmt VARCHAR2(32000) := NULL;
4584 l_return BOOLEAN;
4585 l_rows_processed NUMBER;
4586 l_cursor_name INTEGER := NULL;
4587 fs_report_rec REPORT_REC_TYPE;
4588 l_select VARCHAR2(100);
4589 l_cat_sql VARCHAR2(2000);
4590 l_cat_table_sql VARCHAR2(2000);
4591
4592 BEGIN
4593
4594 -- new binds
4595 flm_util.init_bind;
4596
4597 -- Construct where clause
4598 IF p_from_line IS NOT NULL and p_to_line IS NOT NULL THEN
4599 l_where_clause := ' and line.line_code between :from_line and :to_line ';
4600 flm_util.add_bind(':from_line', p_from_line);
4601 flm_util.add_bind(':to_line', p_to_line);
4602 END IF;
4603
4604 IF p_from_item IS NOT NULL and p_to_item IS NOT NULL THEN
4605 -- Call procedure to construct item_where_clause
4606 l_return := flm_util.Item_Where_Clause(
4607 p_from_item,
4608 p_to_item,
4609 'msi',
4610 l_item_where_clause,
4611 l_err_buf);
4612
4613 IF NOT l_return THEN
4614 -- English because unexpected error
4615 l_log_message := 'Problem constructing item_where_clause';
4616 MRP_UTIL.MRP_LOG(l_log_message);
4617 l_log_message := l_err_buf;
4618 MRP_UTIL.MRP_LOG(l_log_message);
4619 RAISE unexpected_error;
4620 END IF;
4621 l_item_where_clause := ' AND ' || l_item_where_clause;
4622 END IF;
4623
4624 IF (p_from_category IS NOT NULL OR p_to_category IS NOT NULL)
4625 AND p_category_set_id IS NOT NULL THEN
4626
4627 l_return := flm_util.Category_Where_Clause(
4628 p_from_category,
4629 p_to_category,
4630 'cat',
4631 p_category_structure_id,
4632 l_cat_where_clause,
4633 l_err_buf);
4634
4635 IF NOT l_return THEN
4636 -- English because unexpected error
4637 l_log_message := 'Problem constructing category_where_clause';
4638 MRP_UTIL.MRP_LOG(l_log_message);
4639 l_log_message := l_err_buf;
4640 MRP_UTIL.MRP_LOG(l_log_message);
4641 RAISE unexpected_error;
4642 END IF;
4643 l_cat_where_clause := ' AND fs.primary_item_id in (select ' ||
4644 ' inventory_item_id from mtl_item_categories mic, '||
4645 ' mtl_categories cat where ' ||
4646 ' cat.category_id = mic.category_id ' ||
4647 ' and mic.organization_id = :cat_organization_id ' ||
4648 ' and mic.category_set_id = :cat_category_set_id ' ||
4649 ' and ' || l_cat_where_clause || ')';
4650 flm_util.add_bind(':cat_organization_id', p_organization_id);
4651 flm_util.add_bind(':cat_category_set_id', p_category_set_id);
4652 END IF;
4653
4654 l_where_clause := l_where_clause || l_item_where_clause ||
4655 l_cat_where_clause;
4656
4657 IF p_category_set_id IS NOT NULL THEN
4658 l_cat_table_sql := ' mtl_item_categories mic, ';
4659 l_cat_sql :=
4660 ' and mic.inventory_item_id = fs.primary_item_id ' ||
4661 ' and mic.organization_id = fs.organization_id ' ||
4662 ' and mic.category_set_id = :cat2_category_set_id ';
4663 flm_util.add_bind(':cat2_category_set_id', p_category_set_id);
4664 ELSE
4665 l_cat_table_sql := ' ';
4666 l_cat_sql := ' ';
4667 END IF;
4668
4669 /* Bug 2998385: Added not exists from MTL_TRANSACTIONS_INTERFACE */
4670 -- Define the select statement
4671 --fix bug#3170105
4672 l_sql_stmt :=
4673 ' SELECT fs.line_id, line.line_code, fs.primary_item_id, ' ||
4674 ' fs.schedule_group_id,fs.schedule_number,'||
4675 ' fs.build_sequence,fs.demand_source_header_id,fs.demand_source_line, ' ||
4676 ' fs.demand_source_delivery,fs.demand_source_type,fs.demand_class, ' ||
4677 ' msi.concatenated_segments ' ||
4678 ' ,nvl(fs.planned_quantity,0), ' ||
4679 ' nvl(fs.quantity_completed,0), ' ||
4680 ' fs.MPS_SCHEDULED_COMPLETION_DATE, nvl(fs.MPS_NET_QUANTITY,0), '||
4681 ' fs.BOM_REVISION, fs.ROUTING_REVISION,fs.BOM_REVISION_DATE, '||
4682 ' fs.ROUTING_REVISION_DATE, fs.ALTERNATE_BOM_DESIGNATOR, '||
4683 ' fs.ALTERNATE_ROUTING_DESIGNATOR, fs.COMPLETION_SUBINVENTORY, '||
4684 ' fs.COMPLETION_LOCATOR_ID, fs.MATERIAL_ACCOUNT, '||
4685 ' fs.MATERIAL_OVERHEAD_ACCOUNT, fs.RESOURCE_ACCOUNT, '||
4686 ' fs.OUTSIDE_PROCESSING_ACCOUNT, fs.MATERIAL_VARIANCE_ACCOUNT, '||
4687 ' fs.RESOURCE_VARIANCE_ACCOUNT, fs.OUTSIDE_PROC_VARIANCE_ACCOUNT, '||
4688 ' fs.STD_COST_ADJUSTMENT_ACCOUNT, fs.OVERHEAD_ACCOUNT, '||
4689 ' fs.OVERHEAD_VARIANCE_ACCOUNT, fs.PROJECT_ID,fs.TASK_ID, '||
4690 ' fs.ATTRIBUTE_CATEGORY, fs.ATTRIBUTE1,fs.ATTRIBUTE2, '||
4691 ' fs.ATTRIBUTE3, fs.ATTRIBUTE4,fs.ATTRIBUTE5, '||
4692 ' fs.ATTRIBUTE6, fs.ATTRIBUTE7,fs.ATTRIBUTE8, '||
4693 ' fs.ATTRIBUTE9, fs.ATTRIBUTE10,fs.ATTRIBUTE11, '||
4694 ' fs.ATTRIBUTE12, fs.ATTRIBUTE13,fs.ATTRIBUTE14, '||
4695 ' fs.ATTRIBUTE15, fs.KANBAN_CARD_ID,fs.END_ITEM_UNIT_NUMBER, '||
4696 ' fs.CURRENT_LINE_OPERATION, '||
4697 ' fs.WIP_ENTITY_ID '||
4698 ' FROM wip_lines line, '||
4699 l_cat_table_sql ||
4700 ' mtl_system_items_kfv msi, '||
4701 ' wip_flow_schedules fs ' ||
4702 ' WHERE fs.organization_id = to_char(:organization_id) '||
4703 l_where_clause ||
4704 ' AND (nvl(fs.planned_quantity,0) - nvl(fs.quantity_completed,0)) > 0 ' ||
4705 ' AND fs.scheduled_completion_date between ' ||
4706 ' :from_start_date ' ||
4707 ' and :from_end_date ' ||
4708 ' and line.line_id = fs.line_id ' ||
4709 ' and line.organization_id = fs.organization_id '||
4710 ' and nvl(fs.status,0) = 1 '||
4711 l_cat_sql ||
4712 ' and msi.inventory_item_id = fs.primary_item_id ' ||
4713 ' and msi.organization_id = fs.organization_id '||
4714 ' and not exists ( select 1 from mtl_transactions_interface ' ||
4715 ' where transaction_source_id = fs.wip_entity_id ' ||
4716 ' and organization_id = fs.organization_id ' ||
4717 ' and transaction_source_type_id = 5 ' || -- perf bug 4911894
4718 ' and transaction_action_id in (1, 27, 30, 31, 32, 33, 34) ) ' ||
4719 ' order by line.line_code, trunc(fs.scheduled_completion_date), fs.build_sequence ';
4720 flm_util.add_bind(':organization_id', p_organization_id);
4721 flm_util.add_bind(':from_start_date', p_from_start_date);
4722 flm_util.add_bind(':from_end_date', p_from_end_date+1-1/(24*60*60));
4723 --end of fix bug#3170105
4724 /*
4725 Bug 2213859 - Removed ' order by line.line_code, msi.concatenated_segments,fs.build_sequence '
4726 and added a new order by above
4727 */
4728 --MRP_UTIL.MRP_LOG(l_sql_stmt);
4729 -- get the cursor
4730 l_cursor_name := dbms_sql.open_cursor;
4731
4732 -- parse the sql statement
4733 dbms_sql.parse(l_cursor_name, l_sql_stmt, dbms_sql.native);
4734 flm_util.do_binds(l_cursor_name);
4735
4736
4737 -- define columns
4738 dbms_sql.define_column(l_cursor_name, 1, fs_report_rec.line_id);
4739 dbms_sql.define_column(l_cursor_name, 2, fs_report_rec.line_code, 10);
4740 dbms_sql.define_column(l_cursor_name, 3, fs_report_rec.primary_item_id);
4741 dbms_sql.define_column(l_cursor_name, 4, fs_report_rec.schedule_group_id);
4742 dbms_sql.define_column(l_cursor_name, 5, fs_report_rec.schedule_number,30);
4743 dbms_sql.define_column(l_cursor_name, 6, fs_report_rec.build_sequence);
4744 dbms_sql.define_column(l_cursor_name, 7,
4745 fs_report_rec.demand_source_header_id);
4746 dbms_sql.define_column(l_cursor_name, 8,
4747 fs_report_rec.demand_source_line,30);
4748 dbms_sql.define_column(l_cursor_name, 9,fs_report_rec.demand_source_delivery,
4749 30);
4750 dbms_sql.define_column(l_cursor_name, 10,fs_report_rec.demand_source_type);
4751 dbms_sql.define_column(l_cursor_name, 11,fs_report_rec.demand_class,30);
4752 dbms_sql.define_column(l_cursor_name, 12, fs_report_rec.item, 2000);
4753 dbms_sql.define_column(l_cursor_name, 13, fs_report_rec.planned_quantity);
4754 dbms_sql.define_column(l_cursor_name, 14, fs_report_rec.quantity_completed);
4755 -- execute the sql statement
4756 dbms_sql.define_column(l_cursor_name, 15,
4757 fs_report_rec.MPS_SCHEDULED_COMPLETION_DATE);
4758 dbms_sql.define_column(l_cursor_name, 16, fs_report_rec.MPS_NET_QUANTITY);
4759 dbms_sql.define_column(l_cursor_name, 17, fs_report_rec.BOM_REVISION,3);
4760 dbms_sql.define_column(l_cursor_name, 18, fs_report_rec.ROUTING_REVISION,3);
4761 dbms_sql.define_column(l_cursor_name, 19, fs_report_rec.BOM_REVISION_DATE);
4762 dbms_sql.define_column(l_cursor_name, 20,
4763 fs_report_rec.ROUTING_REVISION_DATE);
4764 dbms_sql.define_column(l_cursor_name, 21,
4765 fs_report_rec.ALTERNATE_BOM_DESIGNATOR,10);
4766 dbms_sql.define_column(l_cursor_name, 22,
4767 fs_report_rec.ALTERNATE_ROUTING_DESIGNATOR,10);
4768 dbms_sql.define_column(l_cursor_name, 23,
4769 fs_report_rec.COMPLETION_SUBINVENTORY,10);
4770 dbms_sql.define_column(l_cursor_name, 24,
4771 fs_report_rec.COMPLETION_LOCATOR_ID);
4772 dbms_sql.define_column(l_cursor_name, 25, fs_report_rec.MATERIAL_ACCOUNT);
4773 dbms_sql.define_column(l_cursor_name, 26,
4774 fs_report_rec.MATERIAL_OVERHEAD_ACCOUNT);
4775 dbms_sql.define_column(l_cursor_name, 27, fs_report_rec.RESOURCE_ACCOUNT);
4776 dbms_sql.define_column(l_cursor_name, 28,
4777 fs_report_rec.OUTSIDE_PROCESSING_ACCOUNT);
4778 dbms_sql.define_column(l_cursor_name, 29,
4779 fs_report_rec.MATERIAL_VARIANCE_ACCOUNT);
4780 dbms_sql.define_column(l_cursor_name, 30,
4781 fs_report_rec.RESOURCE_VARIANCE_ACCOUNT);
4782 dbms_sql.define_column(l_cursor_name, 31,
4783 fs_report_rec.OUTSIDE_PROC_VARIANCE_ACCOUNT);
4784 dbms_sql.define_column(l_cursor_name, 32,
4785 fs_report_rec.STD_COST_ADJUSTMENT_ACCOUNT);
4786 dbms_sql.define_column(l_cursor_name, 33, fs_report_rec.OVERHEAD_ACCOUNT);
4787 dbms_sql.define_column(l_cursor_name, 34,
4788 fs_report_rec.OVERHEAD_VARIANCE_ACCOUNT);
4789 dbms_sql.define_column(l_cursor_name, 35, fs_report_rec.PROJECT_ID);
4790 dbms_sql.define_column(l_cursor_name, 36, fs_report_rec.TASK_ID);
4791 dbms_sql.define_column(l_cursor_name, 37,
4792 fs_report_rec.ATTRIBUTE_CATEGORY,30);
4793 dbms_sql.define_column(l_cursor_name, 38, fs_report_rec.ATTRIBUTE1,30);
4794 dbms_sql.define_column(l_cursor_name, 39, fs_report_rec.ATTRIBUTE2,150);
4795 dbms_sql.define_column(l_cursor_name, 40, fs_report_rec.ATTRIBUTE3,150);
4796 dbms_sql.define_column(l_cursor_name, 41, fs_report_rec.ATTRIBUTE4,150);
4797 dbms_sql.define_column(l_cursor_name, 42, fs_report_rec.ATTRIBUTE5,150);
4798 dbms_sql.define_column(l_cursor_name, 43, fs_report_rec.ATTRIBUTE6,150);
4799 dbms_sql.define_column(l_cursor_name, 44, fs_report_rec.ATTRIBUTE7,150);
4800 dbms_sql.define_column(l_cursor_name, 45, fs_report_rec.ATTRIBUTE8,150);
4801 dbms_sql.define_column(l_cursor_name, 46, fs_report_rec.ATTRIBUTE9,150);
4802 dbms_sql.define_column(l_cursor_name, 47, fs_report_rec.ATTRIBUTE10,150);
4803 dbms_sql.define_column(l_cursor_name, 48, fs_report_rec.ATTRIBUTE11,150);
4804 dbms_sql.define_column(l_cursor_name, 49, fs_report_rec.ATTRIBUTE12,150);
4805 dbms_sql.define_column(l_cursor_name, 50, fs_report_rec.ATTRIBUTE13,150);
4806 dbms_sql.define_column(l_cursor_name, 51, fs_report_rec.ATTRIBUTE14,150);
4807 dbms_sql.define_column(l_cursor_name, 52, fs_report_rec.ATTRIBUTE15,150);
4808 dbms_sql.define_column(l_cursor_name, 53, fs_report_rec.KANBAN_CARD_ID);
4809 dbms_sql.define_column(l_cursor_name, 54, fs_report_rec.END_ITEM_UNIT_NUMBER,30);
4810 dbms_sql.define_column(l_cursor_name, 55, fs_report_rec.CURRENT_LINE_OPERATION);
4811 dbms_sql.define_column(l_cursor_name, 56, fs_report_rec.WIP_ENTITY_ID);
4812 -- execute will return zero rows processed since this is just a select
4813 -- statement. Need a variable for the return value.
4814 l_rows_processed := dbms_sql.execute(l_cursor_name);
4815
4816 -- return cursor name
4817 return(l_cursor_name);
4818
4819 EXCEPTION
4820
4821 WHEN NO_DATA_FOUND THEN
4822
4823 RETCODE := G_ERROR;
4824 FND_MESSAGE.set_name('MRP','MRP_NO_ROLL_RECORDS');
4825 ERRBUF := FND_MESSAGE.get;
4826 l_log_message := FND_MESSAGE.get;
4827 MRP_UTIL.MRP_LOG(l_log_message);
4828
4829 RETURN NULL;
4830
4831 WHEN OTHERS THEN
4832
4833 -- English because unexpected error
4834 l_log_message := 'Problem constructing cursor';
4835 MRP_UTIL.MRP_LOG(l_log_message);
4836 l_err_buf := 'Unexpected SQL Error: '||sqlerrm;
4837 l_log_message := l_err_buf;
4838 MRP_UTIL.MRP_LOG(l_log_message);
4839 RAISE unexpected_error;
4840
4841 RETURN NULL;
4842
4843 END Create_Cursor_WD;
4844
4845 FUNCTION Close_Single_Schedule_WithID ( p_wip_entity_id NUMBER,
4846 p_organization_id NUMBER) RETURN BOOLEAN IS
4847
4848 l_log_message VARCHAR2(2000);
4849 BEGIN
4850
4851 UPDATE WIP_FLOW_SCHEDULES SET
4852 status = 2 , date_closed = flm_timezone.sysdate00_in_server --fix bug#3170105
4853 WHERE wip_entity_id = p_wip_entity_id
4854 AND organization_id = p_organization_id;
4855
4856 return TRUE;
4857 EXCEPTION
4858
4859 WHEN NO_DATA_FOUND THEN
4860
4861 RETCODE := G_ERROR;
4862 FND_MESSAGE.set_name('MRP','MRP_NO_ROLL_RECORDS');
4863 ERRBUF := FND_MESSAGE.get;
4864 l_log_message := FND_MESSAGE.get;
4865 MRP_UTIL.MRP_LOG(l_log_message);
4866
4867 RETURN FALSE;
4868
4869 WHEN OTHERS THEN
4870
4871 -- English because unexpected error
4872 l_log_message := 'Problem Closing Schedule';
4873 MRP_UTIL.MRP_LOG(l_log_message);
4874 l_err_buf := 'Unexpected SQL Error: '||sqlerrm;
4875 l_log_message := l_err_buf;
4876 MRP_UTIL.MRP_LOG(l_log_message);
4877 RAISE unexpected_error;
4878
4879 RETURN FALSE;
4880
4881 END Close_Single_Schedule_WithId;
4882
4883 FUNCTION Close_Single_Schedule ( p_schedule_number VARCHAR2,
4884 p_organization_id NUMBER) RETURN BOOLEAN IS
4885
4886 l_log_message VARCHAR2(2000);
4887 l_sql_stmt VARCHAR2(2000) := NULL;
4888 l_return BOOLEAN;
4889 l_rows_processed NUMBER;
4890 l_cursor_name INTEGER := NULL;
4891 fs_report_rec REPORT_REC_TYPE;
4892 l_select VARCHAR2(100);
4893 BEGIN
4894
4895 UPDATE WIP_FLOW_SCHEDULES SET
4896 status = 2 , date_closed = flm_timezone.sysdate00_in_server --fix bug#3170105
4897 WHERE schedule_number = p_schedule_number
4898 AND organization_id = p_organization_id;
4899
4900 return TRUE;
4901 EXCEPTION
4902
4903 WHEN NO_DATA_FOUND THEN
4904
4905 RETCODE := G_ERROR;
4906 FND_MESSAGE.set_name('MRP','MRP_NO_ROLL_RECORDS');
4907 ERRBUF := FND_MESSAGE.get;
4908 l_log_message := FND_MESSAGE.get;
4909 MRP_UTIL.MRP_LOG(l_log_message);
4910
4911 RETURN FALSE;
4912
4913 WHEN OTHERS THEN
4914
4915 -- English because unexpected error
4916 l_log_message := 'Problem Closing Schedule';
4917 MRP_UTIL.MRP_LOG(l_log_message);
4918 l_err_buf := 'Unexpected SQL Error: '||sqlerrm;
4919 l_log_message := l_err_buf;
4920 MRP_UTIL.MRP_LOG(l_log_message);
4921 RAISE unexpected_error;
4922
4923 RETURN FALSE;
4924
4925 END Close_Single_Schedule;
4926
4927
4928 FUNCTION Create_Relieve_Cursor(p_from_start_date IN DATE, p_from_end_date IN DATE)
4929 RETURN INTEGER IS --fix bug#3170105
4930
4931 l_where_clause VARCHAR2(2000);
4932 l_item_where_clause VARCHAR2(2000);
4933 l_cat_where_clause VARCHAR2(2000);
4934 l_log_message VARCHAR2(2000);
4935 l_sql_stmt VARCHAR2(2000) := NULL;
4936 l_return BOOLEAN;
4937 l_rows_processed NUMBER;
4938 l_cursor_name INTEGER := NULL;
4939 l_wip_entity_id NUMBER;
4940 l_select VARCHAR2(2000);
4941 l_cat_sql VARCHAR2(2000);
4942 l_cat_table_sql VARCHAR2(2000);
4943
4944 BEGIN
4945
4946 -- new binds
4947 flm_util.init_bind;
4948
4949 -- Construct where clause
4950 IF p_from_line IS NOT NULL and p_to_line IS NOT NULL THEN
4951 l_where_clause := ' and line.line_code between :from_line and :to_line ';
4952 flm_util.add_bind(':from_line', p_from_line);
4953 flm_util.add_bind(':to_line', p_to_line);
4954 END IF;
4955
4956 IF p_from_item IS NOT NULL and p_to_item IS NOT NULL THEN
4957 -- Call procedure to construct item_where_clause
4958 l_return := flm_util.Item_Where_Clause(
4959 p_from_item,
4960 p_to_item,
4961 'msi',
4962 l_item_where_clause,
4963 l_err_buf);
4964
4965 IF NOT l_return THEN
4966 -- English because unexpected error
4967 l_log_message := 'Problem constructing item_where_clause';
4968 MRP_UTIL.MRP_LOG(l_log_message);
4969 l_log_message := l_err_buf;
4970 MRP_UTIL.MRP_LOG(l_log_message);
4971 RAISE unexpected_error;
4972 END IF;
4973 l_item_where_clause := ' AND ' || l_item_where_clause;
4974 END IF;
4975
4976 IF (p_from_category IS NOT NULL OR p_to_category IS NOT NULL)
4977 AND p_category_set_id IS NOT NULL THEN
4978
4979 l_return := flm_util.Category_Where_Clause(
4980 p_from_category,
4981 p_to_category,
4982 'cat',
4983 p_category_structure_id,
4984 l_cat_where_clause,
4985 l_err_buf);
4986
4987 IF NOT l_return THEN
4988 -- English because unexpected error
4989 l_log_message := 'Problem constructing category_where_clause';
4990 MRP_UTIL.MRP_LOG(l_log_message);
4991 l_log_message := l_err_buf;
4992 MRP_UTIL.MRP_LOG(l_log_message);
4993 RAISE unexpected_error;
4994 END IF;
4995 l_cat_where_clause := ' AND fs.primary_item_id in (select ' ||
4996 ' inventory_item_id from mtl_item_categories mic, '||
4997 ' mtl_categories cat where ' ||
4998 ' cat.category_id = mic.category_id ' ||
4999 ' and mic.organization_id = :cat_organization_id ' ||
5000 ' and mic.category_set_id = :cat_category_set_id ' ||
5001 ' and ' || l_cat_where_clause || ')';
5002 flm_util.add_bind(':cat_organization_id', p_organization_id);
5003 flm_util.add_bind(':cat_category_set_id', p_category_set_id);
5004 END IF;
5005
5006 l_where_clause := l_where_clause || l_item_where_clause ||
5007 l_cat_where_clause;
5008
5009 IF p_spread_qty = 2 THEN
5010 l_select := ' AND (nvl(fs.planned_quantity,0) - nvl(fs.quantity_completed,0)) > 0 AND nvl(fs.status,0) = 1 ';
5011 ELSIF p_spread_qty = 1 THEN
5012 l_select := ' AND (nvl(fs.planned_quantity,0) - nvl(fs.quantity_completed,0)) <> 0 AND fs.demand_source_header_id IS NULL ';
5013 END IF;
5014
5015 IF p_category_set_id IS NOT NULL THEN
5016 l_cat_table_sql := ' mtl_item_categories mic, ';
5017 l_cat_sql :=
5018 ' and mic.inventory_item_id = fs.primary_item_id ' ||
5019 ' and mic.organization_id = fs.organization_id ' ||
5020 ' and mic.category_set_id = :cat2_category_set_id ';
5021 flm_util.add_bind(':cat2_category_set_id', p_category_set_id);
5022 ELSE
5023 l_cat_table_sql := ' ';
5024 l_cat_sql := ' ';
5025 END IF;
5026
5027 /* Bug 2998385: Added not exists from MTL_TRANSACTIONS_INTERFACE */
5028 -- Define the select statement
5029 --fix bug#3170105
5030 l_sql_stmt :=
5031 ' SELECT fs.wip_entity_id ' ||
5032 ' FROM wip_lines line, '||
5033 l_cat_table_sql ||
5034 ' mtl_system_items_kfv msi, '||
5035 ' wip_flow_schedules fs ' ||
5036 ' WHERE fs.organization_id = to_char(:organization_id) ' ||
5037 l_where_clause ||
5038 l_select ||
5039 ' AND fs.scheduled_completion_date between ' ||
5040 ' :from_start_date ' ||
5041 ' and :from_end_date ' ||
5042 ' and line.line_id = fs.line_id ' ||
5043 ' and line.organization_id = fs.organization_id '||
5044 l_cat_sql ||
5045 ' and msi.inventory_item_id = fs.primary_item_id ' ||
5046 ' and msi.organization_id = fs.organization_id ' ||
5047 ' and not exists ( select 1 from mtl_transactions_interface ' ||
5048 ' where transaction_source_id = fs.wip_entity_id ' ||
5049 ' and organization_id = fs.organization_id ' ||
5050 ' and transaction_source_type_id = 5 ' || -- perf bug 4911894
5051 ' and transaction_action_id in (1, 27, 30, 31, 32, 33, 34) ) ';
5052
5053 flm_util.add_bind(':organization_id', p_organization_id);
5054 flm_util.add_bind(':from_start_date', p_from_start_date);
5055 flm_util.add_bind(':from_end_date', p_from_end_date+1-1/(24*60*60));
5056 --end of fix bug#3170105x
5057
5058 -- get the cursor
5059 l_cursor_name := dbms_sql.open_cursor;
5060
5061 -- parse the sql statement
5062 dbms_sql.parse(l_cursor_name, l_sql_stmt, dbms_sql.native);
5063 flm_util.do_binds(l_cursor_name);
5064
5065 -- define columns
5066 dbms_sql.define_column(l_cursor_name, 1, l_wip_entity_id);
5067
5068
5069 -- execute the sql statement
5070 -- execute will return zero rows processed since this is just a select
5071 -- statement. Need a variable for the return value.
5072 l_rows_processed := dbms_sql.execute(l_cursor_name);
5073
5074 -- return cursor name
5075 return(l_cursor_name);
5076
5077 EXCEPTION
5078
5079 WHEN NO_DATA_FOUND THEN
5080
5081 RETCODE := G_ERROR;
5082 FND_MESSAGE.set_name('MRP','MRP_NO_ROLL_RECORDS');
5083 ERRBUF := FND_MESSAGE.get;
5084 l_log_message := FND_MESSAGE.get;
5085 MRP_UTIL.MRP_LOG(l_log_message);
5086
5087 RETURN NULL;
5088
5089 WHEN OTHERS THEN
5090
5091 -- English because unexpected error
5092 l_log_message := 'Problem constructing Relieve cursor';
5093 MRP_UTIL.MRP_LOG(l_log_message);
5094 l_err_buf := 'Unexpected SQL Error: '||sqlerrm;
5095 l_log_message := l_err_buf;
5096 MRP_UTIL.MRP_LOG(l_log_message);
5097 RAISE unexpected_error;
5098
5099 RETURN NULL;
5100
5101 END Create_Relieve_Cursor;
5102
5103 PROCEDURE initialize_report_WOD(p_query_id OUT NOCOPY NUMBER
5104 ,p_from_start_date IN DATE, p_from_end_date IN DATE
5105 ,p_to_start_date IN DATE, p_to_end_date IN DATE) IS --fix bug#3170105
5106
5107 BEGIN
5108 SELECT mrp_form_query_s.nextval
5109 INTO p_query_id
5110 FROM DUAL;
5111
5112 IF (p_from_category IS NOT NULL OR p_to_category IS NOT NULL)
5113 AND p_category_set_id IS NOT NULL THEN
5114
5115 /* Bug 2998385: Added not exists from MTL_TRANSACTIONS_INTERFACE */
5116 INSERT INTO mrp_form_query
5117 (query_id,
5118 last_update_date,
5119 last_updated_by,
5120 creation_date,
5121 created_by,
5122 number1,
5123 number2,
5124 number3,
5125 date1,
5126 number4,
5127 number5,
5128 date2,
5129 number6,
5130 number7,
5131 number10)
5132 SELECT p_query_id,
5133 sysdate,
5134 1,
5135 sysdate,
5136 1,
5137 fs1.line_id,
5138 fs1.primary_item_id,
5139 null,
5140 --fs1.schedule_group_id,
5141 trunc(flm_timezone.server_to_client(fs1.scheduled_completion_date)), --fix bug#3170105
5142 sum(fs1.planned_quantity),
5143 sum(fs1.quantity_completed),
5144 trunc(flm_timezone.server_to_client(fs1.scheduled_completion_date)) --fix bug#3170105
5145 +floor(p_to_start_date-p_from_start_date),
5146 NULL,
5147 0,
5148 fs1.organization_id
5149 FROM wip_lines wl,
5150 mtl_system_items_kfv kfv,
5151 mtl_categories_kfv cat,
5152 mtl_item_categories mic,
5153 wip_flow_schedules fs1
5154 WHERE wl.line_id = fs1.line_id
5155 AND fs1.demand_source_header_id IS NULL
5156 -- AND nvl(fs1.closed,0) = 0
5157 AND wl.organization_id = fs1.organization_id
5158 AND wl.line_code
5159 BETWEEN NVL(p_from_line,wl.line_code) AND NVL(p_to_line,wl.line_code)
5160 AND kfv.inventory_item_id = fs1.primary_item_id
5161 AND kfv.organization_id = fs1.organization_id
5162 AND kfv.concatenated_segments
5163 BETWEEN NVL(p_from_item,kfv.concatenated_segments) AND
5164 NVL(p_to_item,kfv.concatenated_segments)
5165 AND mic.inventory_item_id = fs1.primary_item_id
5166 AND mic.organization_id = fs1.organization_id
5167 AND mic.category_set_id = p_category_set_id
5168 AND cat.category_id = mic.category_id
5169 AND cat.concatenated_segments BETWEEN
5170 NVL(p_from_category,cat.concatenated_segments)
5171 AND NVL(p_to_category,cat.concatenated_segments)
5172 AND fs1.scheduled_completion_date --fix bug#3170105
5173 BETWEEN p_from_start_date AND
5174 p_from_end_date+1-1/(24*60*60)
5175 AND fs1.organization_id = p_organization_id
5176 AND not exists ( select 1 from mtl_transactions_interface
5177 where transaction_source_id = fs1.wip_entity_id
5178 and organization_id = fs1.organization_id
5179 and transaction_source_type_id = 5 -- perf bug 4911894
5180 and transaction_action_id in (1, 27, 30, 31, 32, 33, 34) )
5181 GROUP BY fs1.line_id,
5182 fs1.primary_item_id,
5183 --fs1.schedule_group_id,
5184 trunc(flm_timezone.server_to_client(fs1.scheduled_completion_date)),--bug 3827600
5185 --floor(fs1.scheduled_completion_date-p_from_start_date), --fix bug#3170105
5186 fs1.organization_id;
5187
5188 ELSIF p_category_set_id IS NOT NULL THEN
5189
5190 /* Bug 2998385: Added not exists from MTL_TRANSACTIONS_INTERFACE */
5191 INSERT INTO mrp_form_query
5192 (query_id,
5193 last_update_date,
5194 last_updated_by,
5195 creation_date,
5196 created_by,
5197 number1,
5198 number2,
5199 number3,
5200 date1,
5201 number4,
5202 number5,
5203 date2,
5204 number6,
5205 number7,
5206 number10)
5207 SELECT p_query_id,
5208 sysdate,
5209 1,
5210 sysdate,
5211 1,
5212 fs1.line_id,
5213 fs1.primary_item_id,
5214 null,
5215 --fs1.schedule_group_id,
5216 trunc(flm_timezone.server_to_client(fs1.scheduled_completion_date)), --fix bug#3170105
5217 sum(fs1.planned_quantity),
5218 sum(fs1.quantity_completed),
5219 trunc(flm_timezone.server_to_client(fs1.scheduled_completion_date)) --fix bug#3170105
5220 +floor(p_to_start_date-p_from_start_date),
5221 NULL,
5222 0,
5223 fs1.organization_id
5224 FROM wip_lines wl,
5225 mtl_system_items_kfv kfv,
5226 mtl_item_categories mic,
5227 wip_flow_schedules fs1
5228 WHERE wl.line_id = fs1.line_id
5229 AND fs1.demand_source_header_id IS NULL
5230 -- AND nvl(fs1.closed,0) = 0
5231 AND wl.organization_id = fs1.organization_id
5232 AND wl.line_code
5233 BETWEEN NVL(p_from_line,wl.line_code) AND NVL(p_to_line,wl.line_code)
5234 AND kfv.inventory_item_id = fs1.primary_item_id
5235 AND kfv.organization_id = fs1.organization_id
5236 AND kfv.concatenated_segments
5237 BETWEEN NVL(p_from_item,kfv.concatenated_segments) AND
5238 NVL(p_to_item,kfv.concatenated_segments)
5239 AND mic.inventory_item_id = fs1.primary_item_id
5240 AND mic.organization_id = fs1.organization_id
5241 AND mic.category_set_id = p_category_set_id
5242 AND fs1.scheduled_completion_date --fix bug#3170105
5243 BETWEEN p_from_start_date AND
5244 p_from_end_date+1-1/(24*60*60)
5245 AND fs1.organization_id = p_organization_id
5246 AND not exists ( select 1 from mtl_transactions_interface
5247 where transaction_source_id = fs1.wip_entity_id
5248 and organization_id = fs1.organization_id
5249 and transaction_source_type_id = 5 -- perf bug 4911894
5250 and transaction_action_id in (1, 27, 30, 31, 32, 33, 34) )
5251 GROUP BY fs1.line_id,
5252 fs1.primary_item_id,
5253 --fs1.schedule_group_id,
5254 trunc(flm_timezone.server_to_client(fs1.scheduled_completion_date)),--bug 3827600
5255 --floor(fs1.scheduled_completion_date-p_from_start_date), --fix bug#3170105
5256 fs1.organization_id;
5257 ELSE
5258 /* Bug 2998385: Added not exists from MTL_TRANSACTIONS_INTERFACE */
5259 INSERT INTO mrp_form_query
5260 (query_id,
5261 last_update_date,
5262 last_updated_by,
5263 creation_date,
5264 created_by,
5265 number1,
5266 number2,
5267 number3,
5268 date1,
5269 number4,
5270 number5,
5271 date2,
5272 number6,
5273 number7,
5274 number10)
5275 SELECT p_query_id,
5276 sysdate,
5277 1,
5278 sysdate,
5279 1,
5280 fs1.line_id,
5281 fs1.primary_item_id,
5282 null,
5283 --fs1.schedule_group_id,
5284 trunc(flm_timezone.server_to_client(fs1.scheduled_completion_date)), --fix bug#3170105
5285 sum(fs1.planned_quantity),
5286 sum(fs1.quantity_completed),
5287 trunc(flm_timezone.server_to_client(fs1.scheduled_completion_date)) --fix bug#3170105
5288 +floor(p_to_start_date-p_from_start_date),
5289 NULL,
5290 0,
5291 fs1.organization_id
5292 FROM wip_lines wl,
5293 mtl_system_items_kfv kfv,
5294 wip_flow_schedules fs1
5295 WHERE wl.line_id = fs1.line_id
5296 AND fs1.demand_source_header_id IS NULL
5297 -- AND nvl(fs1.closed,0) = 0
5298 AND wl.organization_id = fs1.organization_id
5299 AND wl.line_code
5300 BETWEEN NVL(p_from_line,wl.line_code) AND NVL(p_to_line,wl.line_code)
5301 AND kfv.inventory_item_id = fs1.primary_item_id
5302 AND kfv.organization_id = fs1.organization_id
5303 AND kfv.concatenated_segments
5304 BETWEEN NVL(p_from_item,kfv.concatenated_segments) AND
5305 NVL(p_to_item,kfv.concatenated_segments)
5306 AND fs1.scheduled_completion_date --fix bug#3170105
5307 BETWEEN p_from_start_date AND
5308 p_from_end_date+1-1/(24*60*60)
5309 AND fs1.organization_id = p_organization_id
5310 AND not exists ( select 1 from mtl_transactions_interface
5311 where transaction_source_id = fs1.wip_entity_id
5312 and organization_id = fs1.organization_id
5313 and transaction_source_type_id = 5 -- perf bug 4911894
5314 and transaction_action_id in (1, 27, 30, 31, 32, 33, 34) )
5315 GROUP BY fs1.line_id,
5316 fs1.primary_item_id,
5317 --fs1.schedule_group_id,
5318 trunc(flm_timezone.server_to_client(fs1.scheduled_completion_date)),--bug 3827600
5319 --floor(fs1.scheduled_completion_date-p_from_start_date), --fix bug#3170105
5320 fs1.organization_id;
5321 END IF;
5322
5323 EXCEPTION
5324
5325 WHEN NO_DATA_FOUND THEN
5326
5327 NULL;
5328
5329 WHEN OTHERS THEN
5330 ROLLBACK;
5331 RETCODE := G_ERROR;
5332 FND_MESSAGE.set_name('MRP','MRP_ROLL_FLOW_ERROR');
5333 ERRBUF := FND_MESSAGE.get;
5334 l_log_message := FND_MESSAGE.get;
5335 MRP_UTIL.MRP_LOG(l_log_message);
5336 l_log_message := 'Problem with initialize_report procedure';
5337 MRP_UTIL.MRP_LOG(l_log_message);
5338 l_log_message := 'Unexpected SQL Error: '||sqlerrm;
5339
5340 END initialize_report_WOD;
5341
5342 PROCEDURE initialize_report_WD(p_query_id OUT NOCOPY NUMBER
5343 ,p_from_start_date IN DATE, p_from_end_date IN DATE
5344 ,p_to_start_date IN DATE, p_to_end_date IN DATE) IS --fix bug#3170105
5345
5346 BEGIN
5347
5348 SELECT mrp_form_query_s.nextval
5349 INTO p_query_id
5350 FROM DUAL;
5351
5352 IF (p_from_category IS NOT NULL OR p_to_category IS NOT NULL)
5353 AND p_category_set_id IS NOT NULL THEN
5354
5355 /* Bug 2998385: Added not exists from MTL_TRANSACTIONS_INTERFACE */
5356 INSERT INTO mrp_form_query
5357 (query_id,
5358 last_update_date,
5359 last_updated_by,
5360 creation_date,
5361 created_by,
5362 number1,
5363 number2,
5364 number3,
5365 date1,
5366 number4,
5367 number5,
5368 date2,
5369 number6,
5370 number7,
5371 number10,
5372 number11)
5373 SELECT p_query_id,
5374 sysdate,
5375 1,
5376 sysdate,
5377 1,
5378 fs1.line_id,
5379 fs1.primary_item_id,
5380 fs1.schedule_group_id,
5381 trunc(flm_timezone.server_to_client(fs1.scheduled_completion_date)), --fix bug#3170105
5382 fs1.planned_quantity,
5383 fs1.quantity_completed,
5384 flm_timezone.server_to_client(p_to_start_date), --fix bug#3170105
5385 NULL,
5386 0,
5387 fs1.organization_id,
5388 NVL(fs1.build_sequence,0)
5389 FROM wip_lines wl,
5390 mtl_system_items_kfv kfv,
5391 mtl_categories_kfv cat,
5392 mtl_item_categories mic,
5393 wip_flow_schedules fs1
5394 WHERE wl.line_id = fs1.line_id
5395 AND wl.organization_id = fs1.organization_id
5396 AND wl.line_code
5397 BETWEEN NVL(p_from_line,wl.line_code) AND NVL(p_to_line,wl.line_code)
5398 AND kfv.inventory_item_id = fs1.primary_item_id
5399 AND (nvl(fs1.planned_quantity,0) - nvl(fs1.quantity_completed,0)) > 0
5400 AND nvl(fs1.status,0) = 1
5401 AND kfv.organization_id = fs1.organization_id
5402 AND kfv.concatenated_segments
5403 BETWEEN NVL(p_from_item,kfv.concatenated_segments) AND
5404 NVL(p_to_item,kfv.concatenated_segments)
5405 AND mic.inventory_item_id = fs1.primary_item_id
5406 AND mic.organization_id = fs1.organization_id
5407 AND mic.category_set_id = p_category_set_id
5408 AND cat.category_id = mic.category_id
5409 AND cat.concatenated_segments BETWEEN
5410 NVL(p_from_category,cat.concatenated_segments)
5411 AND NVL(p_to_category,cat.concatenated_segments)
5412 AND fs1.scheduled_completion_date --fix bug#3170105
5413 BETWEEN p_from_start_date AND
5414 p_from_end_date+1-1/(24*60*60)
5415 AND fs1.organization_id = p_organization_id
5416 AND not exists ( select 1 from mtl_transactions_interface
5417 where transaction_source_id = fs1.wip_entity_id
5418 and organization_id = fs1.organization_id
5419 and transaction_source_type_id = 5 -- perf bug 4911894
5420 and transaction_action_id in (1, 27, 30, 31, 32, 33, 34) );
5421
5422 ELSIF p_category_set_id IS NOT NULL THEN
5423
5424 /* Bug 2998385: Added not exists from MTL_TRANSACTIONS_INTERFACE */
5425 INSERT INTO mrp_form_query
5426 (query_id,
5427 last_update_date,
5428 last_updated_by,
5429 creation_date,
5430 created_by,
5431 number1,
5432 number2,
5433 number3,
5434 date1,
5435 number4,
5436 number5,
5437 date2,
5438 number6,
5439 number7,
5440 number10,
5441 number11)
5442 SELECT p_query_id,
5443 sysdate,
5444 1,
5445 sysdate,
5446 1,
5447 fs1.line_id,
5448 fs1.primary_item_id,
5449 fs1.schedule_group_id,
5450 trunc(flm_timezone.server_to_client(fs1.scheduled_completion_date)), --fix bug#3170105
5451 fs1.planned_quantity,
5452 fs1.quantity_completed,
5453 flm_timezone.server_to_client(p_to_start_date), --fix bug#3170105
5454 NULL,
5455 0,
5456 fs1.organization_id,
5457 NVL(fs1.build_sequence,0)
5458 FROM wip_lines wl,
5459 mtl_system_items_kfv kfv,
5460 mtl_item_categories mic,
5461 wip_flow_schedules fs1
5462 WHERE wl.line_id = fs1.line_id
5463 AND wl.organization_id = fs1.organization_id
5464 AND wl.line_code
5465 BETWEEN NVL(p_from_line,wl.line_code) AND NVL(p_to_line,wl.line_code)
5466 AND kfv.inventory_item_id = fs1.primary_item_id
5467 AND (nvl(fs1.planned_quantity,0) - nvl(fs1.quantity_completed,0)) > 0
5468 AND nvl(fs1.status,0) = 1
5469 AND kfv.organization_id = fs1.organization_id
5470 AND kfv.concatenated_segments
5471 BETWEEN NVL(p_from_item,kfv.concatenated_segments) AND
5472 NVL(p_to_item,kfv.concatenated_segments)
5473 AND mic.inventory_item_id = fs1.primary_item_id
5474 AND mic.organization_id = fs1.organization_id
5475 AND mic.category_set_id = p_category_set_id
5476 AND fs1.scheduled_completion_date --fix bug#3170105
5477 BETWEEN p_from_start_date AND
5478 p_from_end_date+1-1/(24*60*60)
5479 AND fs1.organization_id = p_organization_id
5480 AND not exists ( select 1 from mtl_transactions_interface
5481 where transaction_source_id = fs1.wip_entity_id
5482 and organization_id = fs1.organization_id
5483 and transaction_source_type_id = 5
5484 and transaction_action_id in (1, 27, 30, 31, 32, 33, 34) );
5485
5486 ELSE
5487
5488 /* Bug 2998385: Added not exists from MTL_TRANSACTIONS_INTERFACE */
5489 INSERT INTO mrp_form_query
5490 (query_id,
5491 last_update_date,
5492 last_updated_by,
5493 creation_date,
5494 created_by,
5495 number1,
5496 number2,
5497 number3,
5498 date1,
5499 number4,
5500 number5,
5501 date2,
5502 number6,
5503 number7,
5504 number10,
5505 number11)
5506 SELECT p_query_id,
5507 sysdate,
5508 1,
5509 sysdate,
5510 1,
5511 fs1.line_id,
5512 fs1.primary_item_id,
5513 fs1.schedule_group_id,
5514 trunc(flm_timezone.server_to_client(fs1.scheduled_completion_date)), --fix bug#3170105
5515 fs1.planned_quantity,
5516 fs1.quantity_completed,
5517 flm_timezone.server_to_client(p_to_start_date), --fix bug#3170105
5518 NULL,
5519 0,
5520 fs1.organization_id,
5521 NVL(fs1.build_sequence,0)
5522 FROM wip_lines wl,
5523 mtl_system_items_kfv kfv,
5524 wip_flow_schedules fs1
5525 WHERE wl.line_id = fs1.line_id
5526 AND wl.organization_id = fs1.organization_id
5527 AND wl.line_code
5528 BETWEEN NVL(p_from_line,wl.line_code) AND NVL(p_to_line,wl.line_code)
5529 AND kfv.inventory_item_id = fs1.primary_item_id
5530 AND (nvl(fs1.planned_quantity,0) - nvl(fs1.quantity_completed,0)) > 0
5531 AND nvl(fs1.status,0) = 1
5532 AND kfv.organization_id = fs1.organization_id
5533 AND kfv.concatenated_segments
5534 BETWEEN NVL(p_from_item,kfv.concatenated_segments) AND
5535 NVL(p_to_item,kfv.concatenated_segments)
5536 AND fs1.scheduled_completion_date --fix bug#3170105
5537 BETWEEN p_from_start_date AND
5538 p_from_end_date+1-1/(24*60*60)
5539 AND fs1.organization_id = p_organization_id
5540 AND not exists ( select 1 from mtl_transactions_interface
5541 where transaction_source_id = fs1.wip_entity_id
5542 and organization_id = fs1.organization_id
5543 and transaction_source_type_id = 5
5544 and transaction_action_id in (1, 27, 30, 31, 32, 33,34) );
5545 END IF;
5546
5547 EXCEPTION
5548
5549 WHEN NO_DATA_FOUND THEN
5550
5551 NULL;
5552
5553 WHEN OTHERS THEN
5554 ROLLBACK;
5555 RETCODE := G_ERROR;
5556 FND_MESSAGE.set_name('MRP','MRP_ROLL_FLOW_ERROR');
5557 ERRBUF := FND_MESSAGE.get;
5558 l_log_message := FND_MESSAGE.get;
5559 MRP_UTIL.MRP_LOG(l_log_message);
5560 l_log_message := 'Problem with initialize_report procedure';
5561 MRP_UTIL.MRP_LOG(l_log_message);
5562 l_log_message := 'Unexpected SQL Error: '||sqlerrm;
5563
5564 END initialize_report_WD;
5565
5566 PROCEDURE report_update_WD(p_query_id IN NUMBER,
5567 p_line_id IN NUMBER,
5568 p_item_id IN NUMBER,
5569 p_schedule_group_id IN NUMBER,
5570 p_completion_date IN DATE,
5571 p_build_sequence IN NUMBER,
5572 p_quantity IN NUMBER,
5573 p_from_start_date IN DATE,
5574 p_from_end_date IN DATE,
5575 p_to_start_date IN DATE,
5576 p_to_end_date IN DATE) IS --fix bug#3170105
5577
5578 l_rowid VARCHAR2(80);
5579 l_to_upd_qty NUMBER := 0;
5580
5581 CURSOR C1 IS
5582 SELECT rowid
5583 FROM mrp_form_query
5584 WHERE query_id = p_query_id
5585 AND number1 = p_line_id
5586 AND number2 = p_item_id
5587 AND NVL(number3,-1) = NVL(p_schedule_group_id,-1)
5588 AND trunc(date2) = trunc(flm_timezone.server_to_client(p_completion_date)) --fix bug#3170105
5589 AND NVL(number11,0) = NVL(p_build_sequence,0);
5590 --mrp form query dates are in client timezone
5591
5592 CURSOR C2 IS
5593 SELECT planned_quantity
5594 FROM wip_flow_schedules
5595 WHERE line_id = p_line_id
5596 AND primary_item_id = p_item_id
5597 AND organization_id = p_organization_id
5598 AND nvl(schedule_group_id,-1) = nvl(p_schedule_group_id,-1)
5599 AND NVL(build_sequence,0) = NVL(p_build_sequence,0)
5600 AND scheduled_completion_date between flm_timezone.client00_in_server(p_completion_date)
5601 AND flm_timezone.client00_in_server(p_completion_date)+1-1/(24*60*60); --fix bug#3170105
5602
5603 BEGIN
5604
5605 OPEN C1;
5606 FETCH C1 INTO l_rowid;
5607
5608 IF C1%NOTFOUND THEN
5609
5610 /* Bug 2998385: Added not exists from MTL_TRANSACTIONS_INTERFACE */
5611 INSERT INTO mrp_form_query
5612 (query_id,
5613 last_update_date,
5614 last_updated_by,
5615 creation_date,
5616 created_by,
5617 number1,
5618 number2,
5619 number3,
5620 date1,
5621 number4,
5622 number5,
5623 date2,
5624 number6,
5625 number7,
5626 number10,
5627 number11)
5628 SELECT
5629 p_query_id,
5630 sysdate,
5631 1,
5632 sysdate,
5633 1,
5634 p_line_id,
5635 p_item_id,
5636 p_schedule_group_id,
5637 flm_timezone.server_to_client(p_completion_date)
5638 -floor(p_to_start_date-p_from_start_date), --fix bug#3170105
5639 0,
5640 0,
5641 flm_timezone.server_to_client(p_completion_date), --fix bug#3170105
5642 0,
5643 p_quantity,
5644 p_organization_id,
5645 NVL(p_build_sequence,0)
5646 FROM wip_flow_schedules fs
5647 WHERE fs.line_id = p_line_id
5648 AND fs.primary_item_id = p_item_id
5649 AND fs.organization_id = p_organization_id
5650 AND nvl(fs.schedule_group_id,-1) = nvl(p_schedule_group_id,-1)
5651 AND scheduled_completion_date
5652 BETWEEN flm_timezone.client00_in_server(p_completion_date)
5653 AND flm_timezone.client00_in_server(p_completion_date)+1-1/(24*60*60) --fix bug#3170105
5654 AND not exists ( select 1 from mtl_transactions_interface
5655 where transaction_source_id = fs.wip_entity_id
5656 and organization_id = fs.organization_id
5657 and transaction_source_type_id = 5
5658 and transaction_action_id in (1, 27, 30, 31, 32, 33, 34) );
5659
5660 ELSE
5661
5662 OPEN C2;
5663 FETCH C2 INTO l_to_upd_qty;
5664 CLOSE C2;
5665
5666 UPDATE mrp_form_query
5667 SET number6 = decode(number6,NULL,nvl(l_to_upd_qty,0),number6),
5668 number7 = decode(nvl(number7,0),0,nvl(l_to_upd_qty,0),number7) +
5669 p_quantity
5670 WHERE rowid = l_rowid;
5671
5672 END IF;
5673 CLOSE C1;
5674
5675 EXCEPTION
5676
5677 WHEN NO_DATA_FOUND THEN
5678 NULL;
5679 WHEN OTHERS THEN
5680 ROLLBACK;
5681 RETCODE := G_ERROR;
5682 FND_MESSAGE.set_name('MRP','MRP_ROLL_FLOW_ERROR');
5683 ERRBUF := FND_MESSAGE.get;
5684 l_log_message := FND_MESSAGE.get;
5685 MRP_UTIL.MRP_LOG(l_log_message);
5686 l_log_message := 'Problem in report_update_WD procedure';
5687 MRP_UTIL.MRP_LOG(l_log_message);
5688 l_log_message := 'Unexpected SQL Error: '||sqlerrm;
5689 MRP_UTIL.MRP_LOG(l_log_message);
5690 END report_update_WD;
5691
5692 PROCEDURE report_update_WOD(p_query_id IN NUMBER,
5693 p_line_id IN NUMBER,
5694 p_item_id IN NUMBER,
5695 p_schedule_group_id IN NUMBER,
5696 p_completion_date IN DATE,
5697 p_quantity IN NUMBER,
5698 p_from_start_date IN DATE,
5699 p_from_end_date IN DATE,
5700 p_to_start_date IN DATE,
5701 p_to_end_date IN DATE) IS --fix bug#3170105
5702
5703 l_rowid VARCHAR2(80);
5704 l_to_upd_qty NUMBER := 0;
5705
5706 CURSOR C1 IS
5707 SELECT rowid
5708 FROM mrp_form_query
5709 WHERE query_id = p_query_id
5710 AND number1 = p_line_id
5711 AND number2 = p_item_id
5712 --2 AND NVL(number3,-1) = NVL(p_schedule_group_id,-1)
5713 AND trunc(date2) = trunc(flm_timezone.server_to_client(p_completion_date)); --fix bug#3170105
5714
5715 CURSOR C2 IS
5716 SELECT sum(planned_quantity)
5717 FROM wip_flow_schedules
5718 WHERE line_id = p_line_id
5719 AND primary_item_id = p_item_id
5720 AND organization_id = p_organization_id
5721 --3 AND nvl(schedule_group_id,-1) = nvl(p_schedule_group_id,-1)
5722 AND scheduled_completion_date between flm_timezone.client00_in_server(p_completion_date)
5723 AND flm_timezone.client00_in_server(p_completion_date)+1-1/(24*60*60); --fix bug#3170105
5724
5725 BEGIN
5726
5727 OPEN C1;
5728 FETCH C1 INTO l_rowid;
5729
5730 IF C1%NOTFOUND THEN
5731
5732 /* Bug 2998385: Added not exists from MTL_TRANSACTIONS_INTERFACE */
5733 INSERT INTO mrp_form_query
5734 (query_id,
5735 last_update_date,
5736 last_updated_by,
5737 creation_date,
5738 created_by,
5739 number1,
5740 number2,
5741 number3,
5742 date1,
5743 number4,
5744 number5,
5745 date2,
5746 number6,
5747 number7,
5748 number10)
5749 SELECT
5750 p_query_id,
5751 sysdate,
5752 1,
5753 sysdate,
5754 1,
5755 p_line_id,
5756 p_item_id,
5757 null,
5758 --p_schedule_group_id,
5759 flm_timezone.server_to_client(p_completion_date)
5760 -floor(p_to_start_date-p_from_start_date), --fix bug#3170105
5761 0,
5762 0,
5763 flm_timezone.server_to_client(p_completion_date), --fix bug#3170105
5764 nvl(sum(planned_quantity),0),
5765 nvl(sum(planned_quantity),0) + p_quantity,
5766 p_organization_id
5767 FROM wip_flow_schedules fs
5768 WHERE fs.line_id = p_line_id
5769 AND fs.primary_item_id = p_item_id
5770 AND fs.organization_id = p_organization_id
5771 --4 AND nvl(fs.schedule_group_id,-1) = nvl(p_schedule_group_id,-1)
5772 AND scheduled_completion_date
5773 BETWEEN flm_timezone.client00_in_server(p_completion_date)
5774 AND flm_timezone.client00_in_server(p_completion_date)+1-1/(24*60*60) --fix bug#317010
5775 AND not exists ( select 1 from mtl_transactions_interface
5776 where transaction_source_id = fs.wip_entity_id
5777 and organization_id = fs.organization_id
5778 and transaction_source_type_id = 5
5779 and transaction_action_id in (1, 27, 30, 31, 32, 33, 34) );
5780
5781 ELSE
5782
5783 OPEN C2;
5784 FETCH C2 INTO l_to_upd_qty;
5785 CLOSE C2;
5786
5787 UPDATE mrp_form_query
5788 SET number6 = decode(number6,NULL,nvl(l_to_upd_qty,0),number6),
5789 number7 =
5790 decode(nvl(number7,0),0,nvl(l_to_upd_qty,0),number7) + p_quantity
5791 WHERE rowid = l_rowid;
5792
5793 END IF;
5794
5795 CLOSE C1;
5796
5797 EXCEPTION
5798
5799 WHEN NO_DATA_FOUND THEN
5800
5801 NULL;
5802
5803 WHEN OTHERS THEN
5804
5805 ROLLBACK;
5806 RETCODE := G_ERROR;
5807 FND_MESSAGE.set_name('MRP','MRP_ROLL_FLOW_ERROR');
5808 ERRBUF := FND_MESSAGE.get;
5809 l_log_message := FND_MESSAGE.get;
5810 MRP_UTIL.MRP_LOG(l_log_message);
5811 l_log_message := 'Problem in report_update_WOD procedure';
5812 MRP_UTIL.MRP_LOG(l_log_message);
5813 l_log_message := 'Unexpected SQL Error: '||sqlerrm;
5814 MRP_UTIL.MRP_LOG(l_log_message);
5815
5816 END report_update_WOD;
5817
5818 PROCEDURE relieve_rolled_schedules(p_wip_entity_id IN NUMBER) IS
5819 BEGIN
5820
5821 /*-------------------------------------------------------------------+
5822 | This procedure performs MPS relief to relieve flow schedules that |
5823 | were over-completed and rolled forward. |
5824 | |
5825 | This is done because when the flow schedule is rolled forward |
5826 | a new flow schedule quantity is created. In order not to double |
5827 | count the relief, we need to relieve the old quantity. |
5828 +-------------------------------------------------------------------*/
5829
5830 INSERT INTO mrp_relief_interface
5831 (inventory_item_id, -- NN
5832 organization_id, -- NN
5833 last_update_date, -- NN sysdate
5834 last_updated_by, -- NN :new.last_updated_by
5835 creation_date, -- NN sysdate
5836 created_by, -- NN :new.created_by
5837 last_update_login, -- N -1
5838 new_order_quantity, -- NN
5839 old_order_quantity, -- N
5840 new_order_date, -- NN
5841 old_order_date, -- N
5842 disposition_id, -- NN :new.wip_entity_id
5843 planned_order_id, -- N
5844 relief_type, -- NN 2
5845 disposition_type, -- NN 9
5846 demand_class, -- N
5847 old_demand_class, -- N
5848 line_num, -- N null
5849 request_id, -- N null
5850 program_application_id, -- N null
5851 program_id, -- N null
5852 program_update_date, -- N null
5853 process_status, -- NN 2
5854 source_code, -- N 'WIP'
5855 source_line_id, -- N null
5856 error_message, -- N null
5857 transaction_id, -- NN
5858 project_id,
5859 old_project_id,
5860 task_id,
5861 old_task_id
5862 )
5863 SELECT primary_item_id,
5864 organization_id,
5865 sysdate,
5866 1,
5867 sysdate,
5868 1,
5869 -1,
5870 greatest(planned_quantity, quantity_completed)
5871 - (planned_quantity - quantity_completed),
5872 greatest(planned_quantity, quantity_completed),
5873 scheduled_completion_date,
5874 scheduled_completion_date,
5875 wip_entity_id,
5876 DECODE(demand_source_type,100,
5877 to_number(demand_source_line), NULL),
5878 2,
5879 9,
5880 demand_class,
5881 demand_class,
5882 null,
5883 null,
5884 null,
5885 null,
5886 null,
5887 2,
5888 'WIP',
5889 null,
5890 null,
5891 mrp_relief_interface_s.nextval,
5892 project_id,
5893 project_id,
5894 task_id,
5895 task_id
5896 FROM wip_flow_schedules
5897 WHERE wip_entity_id = p_wip_entity_id
5898 AND planned_quantity > quantity_completed;
5899
5900 END relieve_rolled_schedules;
5901
5902 BEGIN --begin roll_flow_schedules
5903
5904 flm_timezone.init_timezone(p_organization_id);--3827600
5905
5906 -- Set the return code
5907 RETCODE := G_SUCCESS;
5908
5909 --fix bug#3170105
5910 l_from_start_date := flm_timezone.client_to_server(
5911 fnd_date.canonical_to_date(p_from_start_date));
5912 l_from_end_date := flm_timezone.client_to_server(
5913 fnd_date.canonical_to_date(p_from_end_date));
5914 l_to_start_date := flm_timezone.client_to_server(
5915 fnd_date.canonical_to_date(p_to_start_date));
5916 l_to_end_date := flm_timezone.client_to_server(
5917 fnd_date.canonical_to_date(p_to_end_date));
5918 --end of fix bug#3170105
5919
5920 --TZ BOM Calendar Bug 3832684
5921 l_to_start_time := to_char(l_to_start_date,'SSSSS');
5922 l_to_end_time := to_char(l_to_end_date,'SSSSS');
5923
5924 -- Print the parameters
5925 FND_MESSAGE.set_name('MRP','EC_REPORT_PARAMETERS');
5926 l_log_message := FND_MESSAGE.get;
5927 MRP_UTIL.MRP_LOG(l_log_message);
5928
5929 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
5930 FND_MESSAGE.set_token('NUMBER','1');
5931 FND_MESSAGE.set_token('TOKEN','(ORGANIZATION_ID)');
5932 FND_MESSAGE.set_token('VALUE',to_char(p_organization_id));
5933 l_log_message := FND_MESSAGE.get;
5934 MRP_UTIL.MRP_LOG(l_log_message);
5935
5936 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
5937 FND_MESSAGE.set_token('NUMBER','2');
5938 FND_MESSAGE.set_token('TOKEN','(OUTPUT)');
5939 FND_MESSAGE.set_token('VALUE',to_char(p_output));
5940 l_log_message := FND_MESSAGE.get;
5941 MRP_UTIL.MRP_LOG(l_log_message);
5942
5943 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
5944 FND_MESSAGE.set_token('NUMBER','3');
5945 FND_MESSAGE.set_token('TOKEN','(FROM_START_DATE)');
5946 FND_MESSAGE.set_token('VALUE',to_char(l_from_start_date)); --fix bug#3170105
5947 l_log_message := FND_MESSAGE.get;
5948 MRP_UTIL.MRP_LOG(l_log_message);
5949
5950 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
5951 FND_MESSAGE.set_token('NUMBER','4');
5952 FND_MESSAGE.set_token('TOKEN','(FROM_END_DATE)');
5953 FND_MESSAGE.set_token('VALUE',to_char(l_from_end_date)); --fix bug#3170105
5954 l_log_message := FND_MESSAGE.get;
5955 MRP_UTIL.MRP_LOG(l_log_message);
5956
5957 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
5958 FND_MESSAGE.set_token('NUMBER','5');
5959 FND_MESSAGE.set_token('TOKEN','(TO_START_DATE)');
5960 FND_MESSAGE.set_token('VALUE',to_char(l_to_start_date)); --fix bug#3170105
5961 l_log_message := FND_MESSAGE.get;
5962 MRP_UTIL.MRP_LOG(l_log_message);
5963
5964 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
5965 FND_MESSAGE.set_token('NUMBER','6');
5966 FND_MESSAGE.set_token('TOKEN','(TO_END_DATE)');
5967 FND_MESSAGE.set_token('VALUE',to_char(l_to_end_date)); --fix bug#3170105
5968 l_log_message := FND_MESSAGE.get;
5969 MRP_UTIL.MRP_LOG(l_log_message);
5970
5971 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
5972 FND_MESSAGE.set_token('NUMBER','7');
5973 FND_MESSAGE.set_token('TOKEN','(FROM_LINE)');
5974 FND_MESSAGE.set_token('VALUE',p_from_line);
5975 l_log_message := FND_MESSAGE.get;
5976 MRP_UTIL.MRP_LOG(l_log_message);
5977
5978 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
5979 FND_MESSAGE.set_token('NUMBER','8');
5980 FND_MESSAGE.set_token('TOKEN','(TO_LINE)');
5981 FND_MESSAGE.set_token('VALUE',p_to_line);
5982 l_log_message := FND_MESSAGE.get;
5983 MRP_UTIL.MRP_LOG(l_log_message);
5984
5985 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
5986 FND_MESSAGE.set_token('NUMBER','9');
5987 FND_MESSAGE.set_token('TOKEN','(FROM_ITEM)');
5988 FND_MESSAGE.set_token('VALUE',p_from_item);
5989 l_log_message := FND_MESSAGE.get;
5990 MRP_UTIL.MRP_LOG(l_log_message);
5991
5992 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
5993 FND_MESSAGE.set_token('NUMBER','10');
5994 FND_MESSAGE.set_token('TOKEN','(TO_ITEM)');
5995 FND_MESSAGE.set_token('VALUE',p_to_item);
5996 l_log_message := FND_MESSAGE.get;
5997 MRP_UTIL.MRP_LOG(l_log_message);
5998
5999 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
6000 FND_MESSAGE.set_token('NUMBER','11');
6001 FND_MESSAGE.set_token('TOKEN','(CATEGORY_SET_ID)');
6002 FND_MESSAGE.set_token('VALUE',to_char(p_category_set_id));
6003 l_log_message := FND_MESSAGE.get;
6004 MRP_UTIL.MRP_LOG(l_log_message);
6005
6006 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
6007 FND_MESSAGE.set_token('NUMBER','12');
6008 FND_MESSAGE.set_token('TOKEN','(CATEGORY_STRUCTURE_ID)');
6009 FND_MESSAGE.set_token('VALUE',to_char(p_category_structure_id));
6010 l_log_message := FND_MESSAGE.get;
6011 MRP_UTIL.MRP_LOG(l_log_message);
6012
6013 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
6014 FND_MESSAGE.set_token('NUMBER','13');
6015 FND_MESSAGE.set_token('TOKEN','(FROM_CATEGORY)');
6016 FND_MESSAGE.set_token('VALUE',p_from_category);
6017 l_log_message := FND_MESSAGE.get;
6018 MRP_UTIL.MRP_LOG(l_log_message);
6019
6020 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
6021 FND_MESSAGE.set_token('NUMBER','14');
6022 FND_MESSAGE.set_token('TOKEN','(TO_CATEGORY)');
6023 FND_MESSAGE.set_token('VALUE',p_to_category);
6024 l_log_message := FND_MESSAGE.get;
6025 MRP_UTIL.MRP_LOG(l_log_message);
6026
6027 FND_MESSAGE.set_name('MRP','MRCONC-ARGS INFO');
6028 FND_MESSAGE.set_token('NUMBER','15');
6029 FND_MESSAGE.set_token('TOKEN','(SPREAD_QTY)');
6030 FND_MESSAGE.set_token('VALUE',to_char(p_spread_qty));
6031 l_log_message := FND_MESSAGE.get;
6032 MRP_UTIL.MRP_LOG(l_log_message);
6033
6034 -- Check for mandatory parameters and issue an error message
6035 -- if NULL. If line, item or category are null, assume all.
6036 IF p_organization_id IS NULL THEN
6037 FND_MESSAGE.set_name('MRP','MRP_ORG_ID_REQUIRED');
6038 l_log_message := FND_MESSAGE.get;
6039 MRP_UTIL.MRP_LOG(l_log_message);
6040 RAISE expected_error;
6041 END IF;
6042 IF (p_from_start_date IS NULL OR p_to_start_date IS NULL) AND
6043 (p_spread_qty <> 3) THEN
6044 FND_MESSAGE.set_name('MRP','MRP_START_DATE_REQUIRED');
6045 l_log_message := FND_MESSAGE.get;
6046 MRP_UTIL.MRP_LOG(l_log_message);
6047 RAISE expected_error;
6048 END IF;
6049 IF p_from_end_date IS NULL AND (p_spread_qty <> 3) THEN
6050 FND_MESSAGE.set_name('MRP','MRP_END_DATE_REQUIRED');
6051 l_log_message := FND_MESSAGE.get;
6052 MRP_UTIL.MRP_LOG(l_log_message);
6053 RAISE expected_error;
6054 END IF;
6055
6056 IF p_to_end_date IS NULL AND (p_spread_qty = 1) THEN
6057 FND_MESSAGE.set_name('MRP','MRP_END_DATE_REQUIRED');
6058 l_log_message := FND_MESSAGE.get;
6059 MRP_UTIL.MRP_LOG(l_log_message);
6060 RAISE expected_error;
6061 END IF;
6062
6063 -- If either the from_end_date or the to_end_date are non-workdays
6064 -- then return the next work day and log a message.
6065
6066 IF p_spread_qty <> 3 THEN
6067 -- Bug 2213859 no work day conversion required for FROM DATE ranges
6068 --fix bug#3170105 l_from_end_date := to_date(p_from_end_date, 'YYYY/MM/DD');
6069 null;
6070 /************** Commented - Bug 2213859 *********************
6071 l_from_end_date := mrp_calendar.next_work_day(p_organization_id,
6072 1, to_date(p_from_end_date, 'YYYY/MM/DD'));
6073 IF to_date(p_from_end_date, 'YYYY/MM/DD') <> l_from_end_date THEN
6074 FND_MESSAGE.set_name('MRP','MRP_FROM_DATE_CHANGED');
6075 FND_MESSAGE.set_token('ORIG_DATE',p_from_end_date);
6076 FND_MESSAGE.set_token('NEW_DATE',l_from_end_date);
6077 l_log_message := FND_MESSAGE.get;
6078 MRP_UTIL.MRP_LOG(l_log_message);
6079 END IF;
6080 ******************** Comment ends ***********************/
6081 END IF;
6082
6083 --fix bug#3170105
6084 IF p_spread_qty <> 3 THEN
6085 l_temp_date := mrp_calendar.next_work_day(p_organization_id,
6086 1, flm_timezone.server_to_calendar(l_to_start_date));
6087 --TZ BOM Calendar bug 3832684
6088 l_temp_date := flm_timezone.calendar_to_server(l_temp_date,l_to_start_time);
6089
6090 /**
6091 Bug 2213859 - l_to_start_date is compared with to_date(p_to_start_date, 'YYYY/MM/DD')
6092 instead of l_to_end_date
6093 **/
6094 IF flm_timezone.server_to_calendar(l_temp_date) <> flm_timezone.server_to_calendar(l_to_start_date) AND
6095 (p_spread_qty = 2 ) THEN
6096 FND_MESSAGE.set_name('MRP','MRP_TO_DATE_CHANGED');
6097 FND_MESSAGE.set_token('ORIG_DATE',to_char(l_to_start_date));
6098 FND_MESSAGE.set_token('NEW_DATE',to_char(l_temp_date));
6099 l_log_message := FND_MESSAGE.get;
6100 MRP_UTIL.MRP_LOG(l_log_message);
6101 END IF;
6102
6103 --bug 3832684: need it also for Spread Evenly wo Details
6104 l_to_start_date := l_temp_date;
6105
6106 END IF;
6107 --end of fix bug#3170105
6108
6109 /*******************************************************************************
6110 Bug 2213859 - l_to_end_date is calculated for both p_spread_qty = 1 and 2
6111 If p_to_end_date is NULL (possible for p_spread_qty = 2),
6112 then default with l_to_start_date calculated above
6113 ********************************************************************************/
6114
6115 IF p_spread_qty <> 3 THEN
6116 IF p_to_end_date is NULL THEN
6117 l_to_end_date := l_to_start_date;
6118 ELSE
6119 --fix bug#3170105
6120 l_temp_date := mrp_calendar.next_work_day(p_organization_id,
6121 1, flm_timezone.server_to_calendar(l_to_end_date));
6122 --TZ BOM Calendar bug 3832684
6123 l_temp_date := flm_timezone.calendar_to_server(l_temp_date,l_to_end_time);
6124
6125 IF flm_timezone.server_to_calendar(l_temp_date) <> flm_timezone.server_to_calendar(l_to_end_date) THEN
6126 FND_MESSAGE.set_name('MRP','MRP_TO_DATE_CHANGED');
6127 FND_MESSAGE.set_token('ORIG_DATE',l_to_end_date);
6128 FND_MESSAGE.set_token('NEW_DATE',l_temp_date);
6129 l_log_message := FND_MESSAGE.get;
6130 l_to_end_date := l_temp_date;
6131 MRP_UTIL.MRP_LOG(l_log_message);
6132 END IF;
6133 --end of fix bug#3170105
6134
6135 --bug 3832684: need it also for Spread Evenly wo Details
6136 l_to_end_date := l_temp_date;
6137
6138 END IF;
6139 END IF;
6140
6141 /**** Bug 2213859 - Code is moved up before to_end_date validation
6142 IF p_spread_qty <> 3 THEN
6143 l_to_start_date := mrp_calendar.next_work_day(p_organization_id,
6144 1, to_date(p_to_start_date, 'YYYY/MM/DD'));
6145 IF to_date(p_to_start_date, 'YYYY/MM/DD') <> l_to_end_date AND
6146 (p_spread_qty = 2 ) THEN
6147 FND_MESSAGE.set_name('MRP','MRP_TO_DATE_CHANGED');
6148 FND_MESSAGE.set_token('ORIG_DATE',p_to_start_date);
6149 FND_MESSAGE.set_token('NEW_DATE',l_to_start_date);
6150 l_log_message := FND_MESSAGE.get;
6151 MRP_UTIL.MRP_LOG(l_log_message);
6152 END IF;
6153 END IF;
6154 ****************************************************************************/
6155
6156 FND_MESSAGE.set_name('MRP','EC_DATE');
6157 l_trans_var1 := FND_MESSAGE.get;
6158 SELECT to_char(sysdate)
6159 INTO l_trans_var2
6160 FROM dual;
6161 l_out_message := l_trans_var1 || ': ' || l_trans_var2;
6162 MRP_UTIL.MRP_OUT(l_out_message);
6163
6164 FND_MESSAGE.set_name('MRP','MRP_ROLL_FLOW_REPORT');
6165 l_out_message := FND_MESSAGE.get;
6166 MRP_UTIL.MRP_OUT(' '||l_out_message);
6167
6168 /*-----------------------------------------------------+
6169 | Do setup for report by inserting existing records |
6170 | into mrp_form_query |
6171 +-----------------------------------------------------*/
6172
6173 /* this part of code is moved from the buttom of the procedure to here,
6174 because after the schedules got rolled, there would be no flow schedules
6175 to be queried to insert into mrp_relief_interface */
6176 IF p_output = 2 THEN
6177 l_cursor := Create_Relieve_Cursor(l_from_start_date,l_from_end_date); --fix bug#317105
6178
6179 IF l_cursor IS NULL THEN
6180 RAISE unexpected_error;
6181 END IF;
6182
6183 LOOP
6184 l_rows := dbms_sql.fetch_rows(l_cursor);
6185 IF l_rows = 0 THEN
6186 EXIT;
6187 END IF;
6188 IF l_rows > 0 THEN
6189 dbms_sql.column_value(l_cursor, 1, l_wip_entity_id2);
6190 END IF;
6191 Relieve_Rolled_Schedules(l_wip_entity_id2);
6192 END LOOP;
6193 END IF;
6194
6195 /*-----------------------------------------------------+
6196 | If spread quantities then distribute evenly over to |
6197 | timeframe without details |
6198 +-----------------------------------------------------*/
6199 IF p_spread_qty = 1 THEN
6200 initialize_report_WOD(l_report_query_id,l_from_start_date,l_from_end_date,
6201 l_to_start_date,l_to_end_date); --fix bug#3170105
6202
6203 l_cursor := Create_Cursor_WOD(l_from_start_date,l_from_end_date); --fix bug#3170105
6204 IF l_cursor IS NULL THEN
6205 RAISE unexpected_error;
6206 END IF;
6207
6208 LOOP
6209 l_rows := dbms_sql.fetch_rows(l_cursor);
6210 IF l_rows = 0 THEN
6211 EXIT;
6212 END IF;
6213 IF l_rows > 0 THEN
6214 dbms_sql.column_value(l_cursor, 1, fs_report_rec.line_id);
6215 dbms_sql.column_value(l_cursor, 2, fs_report_rec.line_code);
6216 dbms_sql.column_value(l_cursor, 3, fs_report_rec.primary_item_id);
6217 dbms_sql.column_value(l_cursor, 4, fs_report_rec.item);
6218 dbms_sql.column_value(l_cursor, 5, fs_report_rec.schedule_group_id);
6219 dbms_sql.column_value(l_cursor, 6, fs_report_rec.planned_quantity);
6220 dbms_sql.column_value(l_cursor, 7, fs_report_rec.quantity_completed);
6221 END IF;
6222
6223 -- If there is a variance, then process record
6224 IF (fs_report_rec.planned_quantity
6225 - fs_report_rec.quantity_completed) <> 0
6226 THEN
6227
6228 l_variance := fs_report_rec.planned_quantity
6229 - fs_report_rec.quantity_completed;
6230
6231 OPEN C4(fs_report_rec.line_id, fs_report_rec.primary_item_id,
6232 l_to_start_date, l_to_end_date); --fix bug#3170105
6233
6234 -- Get the rowcount and remainder
6235 FETCH C4 INTO l_row_count;
6236 IF l_row_count = 0 THEN
6237 EXIT;
6238 END IF;
6239
6240 IF l_variance < 0 THEN
6241 l_daily_variance := ceil(l_variance/l_row_count);
6242 ELSE
6243 l_daily_variance := floor(l_variance/l_row_count);
6244 END IF;
6245 l_remainder := abs(mod(l_variance,l_row_count));
6246
6247 CLOSE C4;
6248
6249 l_old_completion_date := FND_API.G_MISS_DATE;
6250 OPEN C3(fs_report_rec.line_id, fs_report_rec.primary_item_id,
6251 l_to_start_date, l_to_end_date); --fix bug#3170105
6252
6253 LOOP
6254 FETCH C3 INTO l_wip_entity_id, l_completion_date, l_planned_quantity,
6255 l_quantity_completed;
6256 EXIT WHEN C3%NOTFOUND;
6257
6258 /*--------------------------------------------------------------+
6259 | We can have more than one schedule on a given date |
6260 | The cursor is sorted descending so we get the last schedule |
6261 | of the day. If the day was already processed, we don't |
6262 | enter the if unless the variance was negative and the |
6263 | first schedule didn't have enough quantity to handle it. |
6264 +--------------------------------------------------------------*/
6265 IF (l_completion_date <> l_old_completion_date) OR
6266 (l_update_variance <> 0) THEN
6267 /*-------------------------------------------------------+
6268 | Add one to each until there is no remainder left. |
6269 | l_update_variance will equal zero unless variance was |
6270 | negative and there is still some left after reducing |
6271 | the last schedule |
6272 | If the schedule is still on the same date, we want to |
6273 | carry over the variance that is left over from the |
6274 | previous schedules (which is still on the same day). |
6275 +-------------------------------------------------------*/
6276
6277
6278 IF l_completion_date <> l_old_completion_date THEN
6279 IF l_remainder > 0 THEN
6280 IF l_variance < 0 THEN
6281 l_update_variance := l_update_variance + l_daily_variance - 1;
6282 ELSE
6283 l_update_variance := l_update_variance + l_daily_variance + 1;
6284 END IF;
6285 l_remainder := l_remainder - 1;
6286 ELSE
6287 l_update_variance := l_update_variance + l_daily_variance;
6288 END IF;
6289 END IF;
6290
6291 /*-------------------------------------------------------+
6292 | If the variance is greater than zero, always create |
6293 | a new schedule (call private procedure) |
6294 +-------------------------------------------------------*/
6295
6296 IF l_update_variance > 0 THEN
6297 l_flow_schedule_rec.operation := MRP_GLOBALS.G_OPR_CREATE;
6298 l_flow_schedule_rec.organization_id
6299 := p_organization_id;
6300 l_flow_schedule_rec.schedule_group_id
6301 := fs_report_rec.schedule_group_id;
6302 l_flow_schedule_rec.primary_item_id
6303 := fs_report_rec.primary_item_id;
6304 l_flow_schedule_rec.line_id
6305 := fs_report_rec.line_id;
6306 l_flow_schedule_rec.planned_quantity := l_update_variance;
6307 l_flow_schedule_rec.scheduled_completion_date
6308 := Time_Schedule(fs_report_rec.line_id,
6309 l_completion_date,l_update_variance);
6310
6311 l_flow_schedule_rec.roll_forwarded_flag :=
6312 G_INTERMEDIATE_ROLL_FORWARDED;
6313 l_flow_schedule_rec.status := 1;
6314
6315
6316 -- Call procedure to update mrp_form_query for the report
6317 report_update_WOD(l_report_query_id,
6318 fs_report_rec.line_id,
6319 fs_report_rec.primary_item_id,
6320 fs_report_rec.schedule_group_id,
6321 l_completion_date,
6322 l_update_variance,
6323 l_from_start_date,
6324 l_from_end_date,
6325 l_to_start_date,
6326 l_to_end_date);
6327
6328 MRP_Flow_Schedule_PVT.Process_Flow_Schedule
6329 ( p_api_version_number => 1.0,
6330 x_return_status => l_return_status,
6331 x_msg_count => l_msg_count,
6332 x_msg_data => l_msg_data,
6333 p_control_rec => l_control_rec,
6334 p_old_flow_schedule_rec => l_old_flow_schedule_rec,
6335 p_flow_schedule_rec => l_flow_schedule_rec,
6336 x_flow_schedule_rec => l_x_flow_schedule_rec
6337 );
6338
6339 IF p_output = 2 THEN
6340 -- Write either error or success message to log
6341 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
6342 FND_MESSAGE.set_name('MRP','MRP_ROLL_CREATE');
6343 FND_MESSAGE.set_token('LINE',fs_report_rec.line_code);
6344 FND_MESSAGE.set_token('ITEM',fs_report_rec.item);
6345 FND_MESSAGE.set_token('COMP_DATE',l_x_flow_schedule_rec.scheduled_completion_date);
6346 FND_MESSAGE.set_token('QTY',l_x_flow_schedule_rec.planned_quantity);
6347 l_log_message := FND_MESSAGE.get;
6348 MRP_UTIL.MRP_LOG(l_log_message);
6349 ELSE
6350 IF l_msg_count > 0 THEN
6351 FOR i in 1..l_msg_count LOOP
6352 l_log_message := fnd_msg_pub.get(i,'F');
6353 MRP_UTIL.MRP_LOG(l_log_message);
6354 END LOOP;
6355 END IF;
6356 END IF;
6357 -- End if for p_output = 2 loop (report and update)
6358 END IF;
6359 l_update_variance := 0;
6360
6361 /*------------------------------------------------------------+
6362 | If the variance is less than zero, then there are 3 cases: |
6363 | - schedule planned quantity = 0 |
6364 | - carry variance to next schedule |
6365 | - schedule planned quantity > variance |
6366 | - reduce schedule by variance |
6367 | - schedule planned quantity < variance |
6368 | - delete schedule and carry remainder variance |
6369 | to next schedule |
6370 +------------------------------------------------------------*/
6371
6372 ELSIF l_update_variance < 0 THEN
6373 IF l_planned_quantity = 0 THEN
6374 /*---------------------------------------------+
6375 | Store variance to be handled the next day |
6376 | Just don't zero out l_update_variance, |
6377 | nothing else needs to be done |
6378 +---------------------------------------------*/
6379 NULL;
6380 ELSE
6381 IF -(l_update_variance) < (l_planned_quantity -
6382 l_quantity_completed) THEN
6383 -- Call procedure to update mrp_form_query for the report
6384 report_update_WOD(l_report_query_id,
6385 fs_report_rec.line_id,
6386 fs_report_rec.primary_item_id,
6387 fs_report_rec.schedule_group_id,
6388 l_completion_date,
6389 l_update_variance,
6390 l_from_start_date,
6391 l_from_end_date,
6392 l_to_start_date,
6393 l_to_end_date);
6394 /*-----------------------------+
6395 | Update existing schedule |
6396 +-----------------------------*/
6397 Update_Quantity(l_wip_entity_id,
6398 l_update_variance);
6399 IF p_output = 2 THEN
6400 FND_MESSAGE.set_name('MRP','MRP_ROLL_UPDATE');
6401 FND_MESSAGE.set_token('LINE',fs_report_rec.line_code);
6402 FND_MESSAGE.set_token('ITEM',fs_report_rec.item);
6403 FND_MESSAGE.set_token('COMP_DATE',l_completion_date);
6404 FND_MESSAGE.set_token('OLD_QTY',l_planned_quantity);
6405 FND_MESSAGE.set_token('NEW_QTY',
6406 (l_planned_quantity + l_update_variance));
6407 l_log_message := FND_MESSAGE.get;
6408 MRP_UTIL.MRP_LOG(l_log_message);
6409 END IF;
6410 l_update_variance := 0;
6411 ELSIF -(l_update_variance) >= (l_planned_quantity -
6412 l_quantity_completed) THEN
6413 -- Call procedure to update mrp_form_query for the report
6414 report_update_WOD(l_report_query_id,
6415 fs_report_rec.line_id,
6416 fs_report_rec.primary_item_id,
6417 fs_report_rec.schedule_group_id,
6418 l_completion_date,
6419 -(l_planned_quantity - l_quantity_completed),
6420 l_from_start_date,
6421 l_from_end_date,
6422 l_to_start_date,
6423 l_to_end_date);
6424 IF(l_planned_quantity = (l_planned_quantity -
6425 l_quantity_completed )) THEN
6426 /*------------------------------------------------------+
6427 | Delete existing schedule and save remaining update |
6428 | variance for next schedule |
6429 +------------------------------------------------------*/
6430 Delete_Row(l_wip_entity_id);
6431 ELSE
6432 /*-----------------------------+
6433 | Update existing schedule |
6434 +-----------------------------*/
6435 Update_Quantity(l_wip_entity_id,
6436 - (l_planned_quantity-l_quantity_completed));
6437 IF (NOT Close_Single_Schedule_WithID(l_wip_entity_id,
6438 p_organization_id)) THEN
6439 RAISE unexpected_error;
6440 END IF;
6441
6442 END IF;
6443 IF p_output = 2 THEN
6444 FND_MESSAGE.set_name('MRP','MRP_ROLL_DELETE');
6445 FND_MESSAGE.set_token('LINE',fs_report_rec.line_code);
6446 FND_MESSAGE.set_token('ITEM',fs_report_rec.item);
6447 FND_MESSAGE.set_token('COMP_DATE',l_completion_date);
6448 FND_MESSAGE.set_token('QTY',l_planned_quantity);
6449 l_log_message := FND_MESSAGE.get;
6450 MRP_UTIL.MRP_LOG(l_log_message);
6451 END IF;
6452 l_update_variance := l_update_variance +
6453 (l_planned_quantity-l_quantity_completed);
6454 END IF;
6455 END IF;
6456 END IF;
6457 END IF;
6458 l_old_completion_date := l_completion_date;
6459 END LOOP;
6460 CLOSE C3;
6461 /*---------------------------------------------------------+
6462 | After loop completes, check to see if we still have a |
6463 | quantity in l_update_variance (from a negative variance |
6464 | that didn't have enough quantities to delete on the |
6465 | right days). This is a corner case but it is possible |
6466 | that there will be other schedules in the timeframe |
6467 | that we can delete from so we loop again. |
6468 | e.g. Day 1 Qty = 5 |
6469 | Day 2 Qty = 5 |
6470 | Day 3 Qty = 2 |
6471 | If the daily update variance was -3, then after the |
6472 | first loop we have: |
6473 | Day 1 Qty = 2 |
6474 | Day 2 Qty = 2 |
6475 | Day 3 Qty = 0 |
6476 | and a remainder variance of -1. The second loop will |
6477 | reduce the Day 1 Qty to 1. |
6478 | If we still have a remainder qty after the second loop |
6479 | then generate an error message to the log |
6480 +---------------------------------------------------------*/
6481 IF l_update_variance < 0 THEN
6482 -- Log what's going on
6483 FND_MESSAGE.set_name('MRP','MRP_ROLL_SECOND_LOOP');
6484 l_log_message := FND_MESSAGE.get;
6485 MRP_UTIL.MRP_LOG(l_log_message);
6486
6487 OPEN C5(fs_report_rec.line_id, fs_report_rec.primary_item_id,
6488 l_to_start_date, l_to_end_date); --fix bug#3170105
6489 LOOP
6490 FETCH C5 INTO l_wip_entity_id, l_completion_date,
6491 l_planned_quantity;
6492 EXIT WHEN C5%NOTFOUND;
6493 IF -(l_update_variance) < (l_planned_quantity -
6494 l_quantity_completed) THEN
6495 -- Call procedure to update mrp_form_query for the report
6496 report_update_WOD(l_report_query_id,
6497 fs_report_rec.line_id,
6498 fs_report_rec.primary_item_id,
6499 fs_report_rec.schedule_group_id,
6500 l_completion_date,
6501 l_update_variance,
6502 l_from_start_date,
6503 l_from_end_date,
6504 l_to_start_date,
6505 l_to_end_date);
6506 /*-----------------------------+
6507 | Update existing schedule |
6508 +-----------------------------*/
6509 Update_Quantity(l_wip_entity_id,
6510 l_update_variance);
6511
6512 IF p_output = 2 THEN
6513 FND_MESSAGE.set_name('MRP','MRP_ROLL_UPDATE');
6514 FND_MESSAGE.set_token('LINE',fs_report_rec.line_code);
6515 FND_MESSAGE.set_token('ITEM',fs_report_rec.item);
6516 FND_MESSAGE.set_token('COMP_DATE',l_completion_date);
6517 FND_MESSAGE.set_token('OLD_QTY',l_planned_quantity);
6518 FND_MESSAGE.set_token('NEW_QTY',
6519 (l_planned_quantity + l_update_variance));
6520 l_log_message := FND_MESSAGE.get;
6521 END IF;
6522 l_update_variance := 0;
6523 ELSIF -(l_update_variance) >= (l_planned_quantity -
6524 l_quantity_completed) THEN
6525 -- Call procedure to update mrp_form_query for the report
6526 report_update_WOD(l_report_query_id,
6527 fs_report_rec.line_id,
6528 fs_report_rec.primary_item_id,
6529 fs_report_rec.schedule_group_id,
6530 l_completion_date,
6531 -(l_planned_quantity- l_quantity_completed),
6532 l_from_start_date,
6533 l_from_end_date,
6534 l_to_start_date,
6535 l_to_end_date);
6536
6537 IF(l_planned_quantity = (l_planned_quantity -
6538 l_quantity_completed )) THEN
6539 /*------------------------------------------------------+
6540 | Delete existing schedule and save remaining update |
6541 | variance for next schedule |
6542 +------------------------------------------------------*/
6543 Delete_Row(l_wip_entity_id);
6544 ELSE
6545 /*-----------------------------+
6546 | Update existing schedule |
6547 +-----------------------------*/
6548 Update_Quantity(l_wip_entity_id,
6549 - (l_planned_quantity-l_quantity_completed));
6550 IF (NOT Close_Single_Schedule_WithID(l_wip_entity_id,
6551 p_organization_id)) THEN
6552 RAISE unexpected_error;
6553 END IF;
6554 END IF;
6555
6556 IF p_output = 2 THEN
6557 FND_MESSAGE.set_name('MRP','MRP_ROLL_DELETE');
6558 FND_MESSAGE.set_token('LINE',fs_report_rec.line_code);
6559 FND_MESSAGE.set_token('ITEM',fs_report_rec.item);
6560 FND_MESSAGE.set_token('COMP_DATE',l_completion_date);
6561 FND_MESSAGE.set_token('QTY',l_planned_quantity);
6562 l_log_message := FND_MESSAGE.get;
6563 MRP_UTIL.MRP_LOG(l_log_message);
6564 END IF;
6565 l_update_variance := l_update_variance +
6566 (l_planned_quantity-l_quantity_completed);
6567 END IF;
6568 EXIT WHEN l_update_variance = 0;
6569 END LOOP;
6570 CLOSE C5;
6571 /*-------------------------------------------------------+
6572 | If l_update_variance is still less than zero, print a |
6573 | message to the log. |
6574 +-------------------------------------------------------*/
6575 IF l_update_variance < 0 THEN
6576 FND_MESSAGE.set_name('MRP','MRP_ROLL_QTY_REMAINDER');
6577 FND_MESSAGE.set_token('QTY',l_update_variance);
6578 l_log_message := FND_MESSAGE.get;
6579 MRP_UTIL.MRP_LOG(l_log_message);
6580 RETCODE := G_WARNING;
6581 l_update_variance := 0;
6582 END IF;
6583 END IF;
6584 END IF;
6585
6586 END LOOP;
6587 UPDATE wip_flow_schedules set roll_forwarded_flag =
6588 G_ROLL_FORWARDED
6589 where roll_forwarded_flag =
6590 G_INTERMEDIATE_ROLL_FORWARDED;
6591 ELSIF p_spread_qty = 2 THEN
6592
6593 initialize_report_WD(l_report_query_id,l_from_start_date,l_from_end_date,
6594 l_to_start_date,l_to_end_date); --fix bug#3170105
6595
6596 l_cursor := Create_Cursor_WD(l_from_start_date,l_from_end_date); --fix bug#3170105
6597
6598 IF l_cursor IS NULL THEN
6599 RAISE unexpected_error;
6600 END IF;
6601
6602 LOOP
6603 l_rows := dbms_sql.fetch_rows(l_cursor);
6604 IF l_rows > 0 THEN
6605 dbms_sql.column_value(l_cursor, 1, fs_report_rec.line_id);
6606 dbms_sql.column_value(l_cursor, 2, fs_report_rec.line_code);
6607 dbms_sql.column_value(l_cursor, 3, fs_report_rec.primary_item_id);
6608 dbms_sql.column_value(l_cursor, 4, fs_report_rec.schedule_group_id);
6609 dbms_sql.column_value(l_cursor, 5, fs_report_rec.schedule_number);
6610 dbms_sql.column_value(l_cursor, 6, fs_report_rec.build_sequence);
6611 dbms_sql.column_value(l_cursor, 7, fs_report_rec.
6612 demand_source_header_id);
6613 dbms_sql.column_value(l_cursor, 8, fs_report_rec.demand_source_line);
6614 dbms_sql.column_value(l_cursor, 9, fs_report_rec.
6615 demand_source_delivery);
6616 dbms_sql.column_value(l_cursor, 10, fs_report_rec.demand_source_type);
6617 dbms_sql.column_value(l_cursor, 11, fs_report_rec.demand_class);
6618 dbms_sql.column_value(l_cursor, 12, fs_report_rec.item);
6619 dbms_sql.column_value(l_cursor, 13, fs_report_rec.planned_quantity);
6620 dbms_sql.column_value(l_cursor, 14, fs_report_rec.quantity_completed);
6621
6622 dbms_sql.column_value(l_cursor, 15, fs_report_rec.MPS_SCHEDULED_COMPLETION_DATE);
6623 dbms_sql.column_value(l_cursor, 16, fs_report_rec.MPS_NET_QUANTITY);
6624 dbms_sql.column_value(l_cursor, 17, fs_report_rec.BOM_REVISION);
6625 dbms_sql.column_value(l_cursor, 18, fs_report_rec.ROUTING_REVISION);
6626 dbms_sql.column_value(l_cursor, 19, fs_report_rec.BOM_REVISION_DATE);
6627 dbms_sql.column_value(l_cursor, 20,
6628 fs_report_rec.ROUTING_REVISION_DATE);
6629 dbms_sql.column_value(l_cursor, 21,
6630 fs_report_rec.ALTERNATE_BOM_DESIGNATOR);
6631 dbms_sql.column_value(l_cursor, 22,
6632 fs_report_rec.ALTERNATE_ROUTING_DESIGNATOR);
6633 dbms_sql.column_value(l_cursor, 23,
6634 fs_report_rec.COMPLETION_SUBINVENTORY);
6635 dbms_sql.column_value(l_cursor, 24,
6636 fs_report_rec.COMPLETION_LOCATOR_ID);
6637 dbms_sql.column_value(l_cursor, 25, fs_report_rec.MATERIAL_ACCOUNT);
6638 dbms_sql.column_value(l_cursor, 26,
6639 fs_report_rec.MATERIAL_OVERHEAD_ACCOUNT);
6640 dbms_sql.column_value(l_cursor, 27, fs_report_rec.RESOURCE_ACCOUNT);
6641 dbms_sql.column_value(l_cursor, 28,
6642 fs_report_rec.OUTSIDE_PROCESSING_ACCOUNT);
6643 dbms_sql.column_value(l_cursor, 29,
6644 fs_report_rec.MATERIAL_VARIANCE_ACCOUNT);
6645 dbms_sql.column_value(l_cursor, 30,
6646 fs_report_rec.RESOURCE_VARIANCE_ACCOUNT);
6647 dbms_sql.column_value(l_cursor, 31,
6648 fs_report_rec.OUTSIDE_PROC_VARIANCE_ACCOUNT);
6649 dbms_sql.column_value(l_cursor, 32,
6650 fs_report_rec.STD_COST_ADJUSTMENT_ACCOUNT);
6651 dbms_sql.column_value(l_cursor, 33, fs_report_rec.OVERHEAD_ACCOUNT);
6652 dbms_sql.column_value(l_cursor, 34,
6653 fs_report_rec.OVERHEAD_VARIANCE_ACCOUNT);
6654 dbms_sql.column_value(l_cursor, 35, fs_report_rec.PROJECT_ID);
6655 dbms_sql.column_value(l_cursor, 36, fs_report_rec.TASK_ID);
6656 dbms_sql.column_value(l_cursor, 37, fs_report_rec.ATTRIBUTE_CATEGORY);
6657 dbms_sql.column_value(l_cursor, 38, fs_report_rec.ATTRIBUTE1);
6658 dbms_sql.column_value(l_cursor, 39, fs_report_rec.ATTRIBUTE2);
6659 dbms_sql.column_value(l_cursor, 40, fs_report_rec.ATTRIBUTE3);
6660 dbms_sql.column_value(l_cursor, 41, fs_report_rec.ATTRIBUTE4);
6661 dbms_sql.column_value(l_cursor, 42, fs_report_rec.ATTRIBUTE5);
6662 dbms_sql.column_value(l_cursor, 43, fs_report_rec.ATTRIBUTE6);
6663 dbms_sql.column_value(l_cursor, 44, fs_report_rec.ATTRIBUTE7);
6664 dbms_sql.column_value(l_cursor, 45, fs_report_rec.ATTRIBUTE8);
6665 dbms_sql.column_value(l_cursor, 46, fs_report_rec.ATTRIBUTE9);
6666 dbms_sql.column_value(l_cursor, 47, fs_report_rec.ATTRIBUTE10);
6667 dbms_sql.column_value(l_cursor, 48, fs_report_rec.ATTRIBUTE11);
6668 dbms_sql.column_value(l_cursor, 49, fs_report_rec.ATTRIBUTE12);
6669 dbms_sql.column_value(l_cursor, 50, fs_report_rec.ATTRIBUTE13);
6670 dbms_sql.column_value(l_cursor, 51, fs_report_rec.ATTRIBUTE14);
6671 dbms_sql.column_value(l_cursor, 52, fs_report_rec.ATTRIBUTE15);
6672 dbms_sql.column_value(l_cursor, 53, fs_report_rec.KANBAN_CARD_ID);
6673 dbms_sql.column_value(l_cursor, 54, fs_report_rec.END_ITEM_UNIT_NUMBER);
6674 dbms_sql.column_value(l_cursor, 55, fs_report_rec.CURRENT_LINE_OPERATION);
6675 dbms_sql.column_value(l_cursor, 56, fs_report_rec.WIP_ENTITY_ID);
6676
6677 END IF;
6678
6679 /*---------------------------------------------------------+
6680 | After loop completes, check to see if we still have a |
6681 | quantity in l_unprocessed_var then we add/subtract from |
6682 | last bucket and produce an error message otherwise |
6683 +---------------------------------------------------------*/
6684
6685 EXIT WHEN l_rows = 0;
6686
6687 -- If the variance is positive(under completions) , then process record
6688 IF (fs_report_rec.planned_quantity
6689 - fs_report_rec.quantity_completed) > 0
6690 THEN
6691
6692 l_update_variance := fs_report_rec.planned_quantity
6693 - fs_report_rec.quantity_completed;
6694 MRP_UTIL.MRP_LOG('quantity OK');
6695
6696 /*--------------------------------------------------------------+
6697 | We can have more than one schedule on a given date |
6698 | The cursor is sorted descending so we get the last schedule |
6699 | of the day. |
6700 +--------------------------------------------------------------*/
6701
6702 /*-------------------------------------------------------+
6703 | Since the variance is greater than zero, always create|
6704 | a new schedule (call private procedure) |
6705 +-------------------------------------------------------*/
6706 l_flow_schedule_rec.operation := MRP_GLOBALS.G_OPR_CREATE;
6707 l_flow_schedule_rec.organization_id
6708 := p_organization_id;
6709 l_flow_schedule_rec.schedule_group_id
6710 := fs_report_rec.schedule_group_id;
6711 l_flow_schedule_rec.primary_item_id
6712 := fs_report_rec.primary_item_id;
6713 l_flow_schedule_rec.line_id
6714 := fs_report_rec.line_id;
6715 l_flow_schedule_rec.planned_quantity := l_update_variance;
6716
6717 l_flow_schedule_rec.scheduled_completion_date
6718 := Time_Schedule(fs_report_rec.line_id,
6719 l_to_start_date,
6720 l_update_variance);
6721 --l_to_end_date,l_update_variance);
6722 --p_to_end_date,l_update_variance);
6723
6724 -- Bug 2213859
6725 -- Commented l_flow_schedule_rec.build_sequence:= fs_report_rec.build_sequence;
6726 /*-----------------------------------------------------------------+
6727 | Set the build sequence for newly forwarded schedules |
6728 | Start with a BASE NUMBER and keep incrementing it |
6729 | Keep separate counter linewise |
6730 | Keep NULL build sequence as NULL (manual) |
6731 +-----------------------------------------------------------------*/
6732 MRP_UTIL.MRP_LOG('Creating new build sequence for line='||fs_report_rec.line_id);
6733 if (fs_report_rec.build_sequence is not null) then
6734 if ( not l_build_seq_counter.exists(fs_report_rec.line_id) ) then
6735 -- Initialization of the Seq Counter table
6736 MRP_UTIL.MRP_LOG('Initialize the counter for line='||fs_report_rec.line_id);
6737 l_build_seq_counter(fs_report_rec.line_id).base_number
6738 := Get_Base_Number(fs_report_rec.line_id,
6739 flm_timezone.client00_in_server(l_flow_schedule_rec.scheduled_completion_date),
6740 l_from_start_date, l_from_end_date); --fix bug#3170105
6741 MRP_UTIL.MRP_LOG('Initialized base number='||
6742 l_build_seq_counter(fs_report_rec.line_id).base_number);
6743 l_build_seq_counter(fs_report_rec.line_id).current_build_seq :=
6744 l_build_seq_counter(fs_report_rec.line_id).base_number + 1;
6745 MRP_UTIL.MRP_LOG('Initialized current build Seq number='||
6746 l_build_seq_counter(fs_report_rec.line_id).current_build_seq);
6747 else
6748 MRP_UTIL.MRP_LOG('Increment the counter for line='||fs_report_rec.line_id);
6749 l_build_seq_counter(fs_report_rec.line_id).current_build_seq :=
6750 l_build_seq_counter(fs_report_rec.line_id).current_build_seq + 1;
6751 end if;
6752 l_temp_build_sequence := l_build_seq_counter(fs_report_rec.line_id).current_build_seq;
6753 else
6754 MRP_UTIL.MRP_LOG('Build Seq Counter is NULL for line='||fs_report_rec.line_id);
6755 l_temp_build_sequence := null;
6756 l_build_seq_counter(fs_report_rec.line_id).current_build_seq := NULL;
6757 end if;
6758 MRP_UTIL.MRP_LOG('Resultant Build Seq Counter is ='||l_temp_build_sequence);
6759
6760 l_flow_schedule_rec.build_sequence:= l_temp_build_sequence;
6761
6762 -- Bug 2213859
6763
6764 l_flow_schedule_rec.demand_source_header_id :=
6765 fs_report_rec.demand_source_header_id;
6766
6767 l_flow_schedule_rec.demand_source_line :=
6768 fs_report_rec.demand_source_line;
6769 l_flow_schedule_rec.demand_source_delivery :=
6770 fs_report_rec.demand_source_delivery;
6771 l_flow_schedule_rec.demand_source_type :=
6772 fs_report_rec.demand_source_type;
6773 l_flow_schedule_rec.demand_class :=
6774 fs_report_rec.demand_class;
6775
6776 l_flow_schedule_rec.roll_forwarded_flag :=
6777 G_INTERMEDIATE_ROLL_FORWARDED;
6778 l_flow_schedule_rec.status := 1;
6779
6780 l_flow_schedule_rec.mps_scheduled_comp_date :=
6781 fs_report_rec.MPS_SCHEDULED_COMPLETION_DATE;
6782 l_flow_schedule_rec.mps_net_quantity:=
6783 fs_report_rec.MPS_NET_QUANTITY;
6784 l_flow_schedule_rec.bom_revision:=
6785 fs_report_rec.BOM_REVISION;
6786 l_flow_schedule_rec.routing_revision:=
6787 fs_report_rec.ROUTING_REVISION;
6788 l_flow_schedule_rec.bom_revision_date:=
6789 fs_report_rec.BOM_REVISION_DATE;
6790 l_flow_schedule_rec.routing_revision_date:=
6791 fs_report_rec.ROUTING_REVISION_DATE;
6792 l_flow_schedule_rec.alternate_bom_designator:=
6793 fs_report_rec.ALTERNATE_BOM_DESIGNATOR;
6794 l_flow_schedule_rec.alternate_routing_desig:=
6795 fs_report_rec.ALTERNATE_ROUTING_DESIGNATOR;
6796 l_flow_schedule_rec.completion_subinventory:=
6797 fs_report_rec.COMPLETION_SUBINVENTORY;
6798 l_flow_schedule_rec.completion_locator_id:=
6799 fs_report_rec.COMPLETION_LOCATOR_ID;
6800 l_flow_schedule_rec.material_account:=
6801 fs_report_rec.MATERIAL_ACCOUNT;
6802 l_flow_schedule_rec.material_overhead_account:=
6803 fs_report_rec.MATERIAL_OVERHEAD_ACCOUNT;
6804 l_flow_schedule_rec.resource_account:=
6805 fs_report_rec.RESOURCE_ACCOUNT;
6806 l_flow_schedule_rec.outside_processing_acct:=
6807 fs_report_rec.OUTSIDE_PROCESSING_ACCOUNT;
6808 l_flow_schedule_rec.material_variance_account:=
6809 fs_report_rec.MATERIAL_VARIANCE_ACCOUNT;
6810 l_flow_schedule_rec.resource_variance_account:=
6811 fs_report_rec.RESOURCE_VARIANCE_ACCOUNT;
6812 l_flow_schedule_rec.outside_proc_var_acct:=
6813 fs_report_rec.OUTSIDE_PROC_VARIANCE_ACCOUNT;
6814 l_flow_schedule_rec.std_cost_adjustment_acct:=
6815 fs_report_rec.STD_COST_ADJUSTMENT_ACCOUNT;
6816 l_flow_schedule_rec.overhead_account:=
6817 fs_report_rec.OVERHEAD_ACCOUNT;
6818 l_flow_schedule_rec.overhead_variance_account:=
6819 fs_report_rec.OVERHEAD_VARIANCE_ACCOUNT;
6820 l_flow_schedule_rec.project_id:=
6821 fs_report_rec.PROJECT_ID;
6822 l_flow_schedule_rec.task_id:=
6823 fs_report_rec.TASK_ID;
6824 l_flow_schedule_rec.attribute_category :=
6825 fs_report_rec.ATTRIBUTE_CATEGORY;
6826 l_flow_schedule_rec.attribute1:=
6827 fs_report_rec.ATTRIBUTE1;
6828 l_flow_schedule_rec.attribute2:=
6829 fs_report_rec.ATTRIBUTE2;
6830 l_flow_schedule_rec.attribute3:=
6831 fs_report_rec.ATTRIBUTE3;
6832 l_flow_schedule_rec.attribute4:=
6833 fs_report_rec.ATTRIBUTE4;
6834 l_flow_schedule_rec.attribute5:=
6835 fs_report_rec.ATTRIBUTE5;
6836 l_flow_schedule_rec.attribute6:=
6837 fs_report_rec.ATTRIBUTE6;
6838 l_flow_schedule_rec.attribute7:=
6839 fs_report_rec.ATTRIBUTE7;
6840 l_flow_schedule_rec.attribute8:=
6841 fs_report_rec.ATTRIBUTE8;
6842 l_flow_schedule_rec.attribute9:=
6843 fs_report_rec.ATTRIBUTE9;
6844 l_flow_schedule_rec.attribute10:=
6845 fs_report_rec.ATTRIBUTE10;
6846 l_flow_schedule_rec.attribute11:=
6847 fs_report_rec.ATTRIBUTE11;
6848 l_flow_schedule_rec.attribute12:=
6849 fs_report_rec.ATTRIBUTE12;
6850 l_flow_schedule_rec.attribute13:=
6851 fs_report_rec.ATTRIBUTE13;
6852 l_flow_schedule_rec.attribute14:=
6853 fs_report_rec.ATTRIBUTE14;
6854 l_flow_schedule_rec.attribute15:=
6855 fs_report_rec.ATTRIBUTE15;
6856 l_flow_schedule_rec.kanban_card_id:=
6857 fs_report_rec.KANBAN_CARD_ID;
6858 l_flow_schedule_rec.end_item_unit_number:=
6859 fs_report_rec.END_ITEM_UNIT_NUMBER;
6860 l_flow_schedule_rec.current_line_operation:=
6861 fs_report_rec.CURRENT_LINE_OPERATION;
6862
6863 IF (NOT Close_Single_Schedule(fs_report_rec.schedule_number,
6864 p_organization_id)) THEN
6865 RAISE unexpected_error;
6866 END IF;
6867
6868 -- Call procedure to update mrp_form_query for the report
6869 /** Bug 2558664 - passed old build sequence as report goes haywire
6870 if modified build sequence is passed **/
6871 report_update_WD(l_report_query_id,
6872 fs_report_rec.line_id,
6873 fs_report_rec.primary_item_id,
6874 fs_report_rec.schedule_group_id,
6875 l_flow_schedule_rec.scheduled_completion_date,
6876 fs_report_rec.build_sequence, /* Bug 2558664 */
6877 l_update_variance,
6878 l_from_start_date,
6879 l_from_end_date,
6880 l_to_start_date,
6881 l_to_end_date);
6882
6883 -- Bug 2213859
6884 MRP_UTIL.MRP_LOG('Calling MRP_Flow_Schedule_PVT.Process_Flow_Schedule');
6885 -- Bug 2213859
6886
6887 MRP_Flow_Schedule_PVT.Process_Flow_Schedule
6888 ( p_api_version_number => 1.0,
6889 x_return_status => l_return_status,
6890 x_msg_count => l_msg_count,
6891 x_msg_data => l_msg_data,
6892 p_control_rec => l_control_rec,
6893 p_old_flow_schedule_rec => l_old_flow_schedule_rec,
6894 p_flow_schedule_rec => l_flow_schedule_rec,
6895 x_flow_schedule_rec => l_x_flow_schedule_rec
6896 );
6897
6898 /* Added for Enhancement #2829204 */
6899 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
6900 SELECT auto_replenish,
6901 wip_entity_id
6902 INTO l_auto_replenish,
6903 l_wip_entity_id
6904 FROM wip_flow_schedules
6905 WHERE schedule_number = fs_report_rec.schedule_number
6906 AND organization_id = p_organization_id;
6907
6908 /* Update the auto_replenish flag of new schedules with the old value,
6909 if auto_replenish is not null for old flow schedule */
6910 IF l_auto_replenish IS NOT NULL THEN
6911 UPDATE wip_flow_schedules
6912 SET auto_replenish = l_auto_replenish
6913 WHERE schedule_number = l_x_flow_schedule_rec.schedule_number
6914 AND organization_id = p_organization_id;
6915
6916 /* Update the Kanban Cards to reference the new flow schedule */
6917 IF (nvl(l_auto_replenish, 'N') = 'Y') THEN
6918 FOR l_kanban_card_activity_csr IN kanban_card_activity_csr(l_wip_entity_id)
6919 LOOP
6920 l_kanban_activity_id := l_kanban_card_activity_csr.kanban_activity_id;
6921
6922 UPDATE mtl_kanban_card_activity
6923 SET source_wip_entity_id = l_x_flow_schedule_rec.wip_entity_id
6924 WHERE kanban_activity_id = l_kanban_activity_id;
6925
6926 END LOOP; /* end of for loop cursor */
6927 END IF; /* end of if for nvl(l_auto_replenish,'N') */
6928 END IF; /* end of if for l_auto_replenish is not null */
6929
6930 -- Added for project 'Roll Flow Schedules: Maintain Schedule Number'
6931 -- Store the old/new values of schedule_number and wip_entity_id
6932 l_loop_count:=l_loop_count+1;
6933 oldFSSchNum(l_loop_count) := fs_report_rec.schedule_number;
6934 newFSSchNum(l_loop_count) := l_x_flow_schedule_rec.schedule_number;
6935 oldFSWipId(l_loop_count) := fs_report_rec.wip_entity_id;
6936 newFSWipId(l_loop_count) := l_x_flow_schedule_rec.wip_entity_id;
6937
6938 END IF; /* end of if for l_return_status */
6939
6940 IF p_output = 2 THEN
6941 -- Write either error or success message to log
6942 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
6943 FND_MESSAGE.set_name('MRP','MRP_ROLL_CREATE');
6944 FND_MESSAGE.set_token('LINE',fs_report_rec.line_code);
6945 FND_MESSAGE.set_token('ITEM',fs_report_rec.item);
6946 FND_MESSAGE.set_token('COMP_DATE',l_x_flow_schedule_rec.scheduled_completion_date);
6947 FND_MESSAGE.set_token('QTY',l_x_flow_schedule_rec.planned_quantity);
6948 l_log_message := FND_MESSAGE.get;
6949 MRP_UTIL.MRP_LOG(l_log_message);
6950 ELSE
6951 IF l_msg_count > 0 THEN
6952 FOR i in 1..l_msg_count LOOP
6953 l_log_message := fnd_msg_pub.get(i,'F');
6954 MRP_UTIL.MRP_LOG(l_log_message);
6955 END LOOP;
6956 END IF;
6957 END IF;
6958 -- end if for p_output = 2
6959 END IF;
6960 l_update_variance := 0;
6961 END IF;
6962
6963
6964 l_old_line_id := fs_report_rec.line_id;
6965 l_old_line_code := fs_report_rec.line_code;
6966 l_old_item_id := fs_report_rec.primary_item_id;
6967 l_old_item := fs_report_rec.item;
6968 l_old_sg_id := fs_report_rec.schedule_group_id;
6969 MRP_UTIL.MRP_LOG('item = '||to_char(l_old_item_id)||' var = '||to_char(l_unprocessed_var));
6970 END LOOP;
6971
6972 -- Bug 2213859
6973 /*-----------------------------------------------------------------+
6974 | After the LOOP completes, all the schedules on the destination |
6975 | day are shifted with the count per line which has been newly |
6976 | forwarded to avoid bumping; |
6977 +-----------------------------------------------------------------*/
6978
6979 /******************* Commented ********************
6980 UPDATE wip_flow_schedules set roll_forwarded_flag =
6981 G_ROLL_FORWARDED
6982 where roll_forwarded_flag =
6983 G_INTERMEDIATE_ROLL_FORWARDED;
6984 **************************************************/
6985
6986 MRP_UTIL.MRP_LOG('Shift build sequences of existing schedules on destination day');
6987 -- Bug 2558664 handled NULL build sequence counter gracefully
6988 if (l_build_seq_counter.count > 0) then
6989 l_index := l_build_seq_counter.first;
6990 loop
6991 if (l_build_seq_counter.exists(l_index)) then
6992 MRP_UTIL.MRP_LOG('Proccessing for line='||l_index);
6993 l_base_number := nvl(l_build_seq_counter(l_index).base_number,0);
6994 l_total_count := nvl(l_build_seq_counter(l_index).current_build_seq,0) - l_base_number;
6995 MRP_UTIL.MRP_LOG('Shift each BUILD_SEQ of existing eligible schedules by '||l_total_count);
6996
6997 UPDATE wip_flow_schedules
6998 set BUILD_SEQUENCE = BUILD_SEQUENCE + l_total_count
6999 WHERE organization_id = p_organization_id
7000 AND line_id = l_index
7001 AND nvl(planned_quantity,0) > nvl(quantity_completed,0)
7002 AND scheduled_completion_date --fix bug#3170105
7003 BETWEEN l_to_start_date AND l_to_end_date+1-1/(24*60*60)
7004 AND (ROLL_FORWARDED_FLAG <> G_INTERMEDIATE_ROLL_FORWARDED OR
7005 ROLL_FORWARDED_FLAG IS NULL); /*Bug 3019639*/
7006
7007 /*-----------------------------------------------------------------+
7008 | Update the newly forwarded schedules as ROLL FORWARDED; |
7009 | Deduct the base number from the build_sequence |
7010 +-----------------------------------------------------------------*/
7011
7012 UPDATE wip_flow_schedules set
7013 roll_forwarded_flag = G_ROLL_FORWARDED,
7014 build_sequence = build_sequence - l_base_number
7015 where roll_forwarded_flag = G_INTERMEDIATE_ROLL_FORWARDED
7016 and line_id = l_index
7017 --bug 3749052:
7018 and scheduled_completion_date
7019 BETWEEN l_to_start_date AND l_to_end_date+1-1/(24*60*60);
7020
7021 exit when ( l_index is NULL or l_index = l_build_seq_counter.last );
7022
7023 l_index := l_build_seq_counter.next(l_index);
7024 end if; /** END OF if (l_build_seq_counter.exists(l_index)) then **/
7025 end loop;
7026 end if; /** END OF if (l_build_seq_counter.count > 0) then **/
7027
7028 -- Bug 2213859
7029
7030 /* Added for project 'Roll Flow Schedules: Maintain Schedule Number'
7031 Logic to swap the new schedule number with old schedule number. */
7032 --First step is to change the schedule number of the rolled FS
7033 --to a temporaryones to avoid violating the unique contraints
7034 --on Schedule Number and Org ID and this is done for WIP_FLOW_SCHEDULES
7035 FORALL i IN 1..l_loop_count
7036 UPDATE wip_flow_schedules
7037 SET schedule_number=('?*?'||oldFSSchNum(i))
7038 WHERE wip_entity_id=oldFSWipId(i)
7039 AND organization_id=p_organization_id;
7040
7041 --Second Step is to Update the New FS created to use the old rolled FS
7042 --Schedule Number. This is need to be done for WIP_FLOW_SCHEDULES
7043 FORALL i IN 1..l_loop_count
7044 UPDATE wip_flow_schedules
7045 SET schedule_number=oldFSSchNum(i)
7046 WHERE wip_entity_id=newFSWipId(i)
7047 AND organization_id=p_organization_id;
7048
7049 --Third Step is to Update the Old rolled FS to use the Newly created FS
7050 --Schedule Number. This is need to be done for WIP_FLOW_SCHEDULES
7051 FORALL i IN 1..l_loop_count
7052 UPDATE wip_flow_schedules
7053 SET schedule_number=newFSSchNum(i)
7054 WHERE wip_entity_id=oldFSWipId(i)
7055 AND organization_id=p_organization_id;
7056
7057 --Update the detail record in execution to point to new schedule number.
7058 FORALL i IN 1..l_loop_count
7059 UPDATE flm_exe_operations
7060 SET wip_entity_id=newFSWipId(i)
7061 WHERE wip_entity_id=oldFSWipId(i)
7062 AND organization_id=p_organization_id;
7063 FORALL i IN 1..l_loop_count
7064 UPDATE flm_exe_req_operations
7065 SET wip_entity_id=newFSWipId(i)
7066 WHERE wip_entity_id=oldFSWipId(i)
7067 AND organization_id=p_organization_id;
7068 FORALL i IN 1..l_loop_count
7069 UPDATE flm_exe_lot_numbers
7070 SET wip_entity_id=newFSWipId(i)
7071 WHERE wip_entity_id=oldFSWipId(i)
7072 AND organization_id=p_organization_id;
7073 FORALL i IN 1..l_loop_count
7074 UPDATE flm_exe_serial_numbers
7075 SET wip_entity_id=newFSWipId(i)
7076 WHERE wip_entity_id=oldFSWipId(i)
7077 AND organization_id=p_organization_id;
7078
7079
7080 ELSIF p_spread_qty = 3 THEN
7081 /* this means close all the past schedules */
7082
7083 l_cursor := Close_All_Past_Schedules;
7084 IF l_cursor IS NULL THEN
7085 RAISE unexpected_error;
7086 END IF;
7087
7088 LOOP
7089 l_rows := dbms_sql.fetch_rows(l_cursor);
7090 IF l_rows > 0 THEN
7091 dbms_sql.column_value(l_cursor, 1, l_flow_schedule_rec.wip_entity_id);
7092 END IF;
7093 EXIT WHEN l_rows = 0;
7094 UPDATE wip_flow_schedules SET status = 2,
7095 date_closed = flm_timezone.sysdate00_in_server --fix bug#3170105
7096 WHERE wip_entity_id = l_flow_schedule_rec.wip_entity_id;
7097 MRP_UTIL.MRP_LOG('Closed Schedule with wip_entity_id:'||to_char(
7098 l_flow_schedule_rec.wip_entity_id));
7099 END LOOP;
7100 END IF;
7101
7102 IF (dbms_sql.is_open(l_cursor)) THEN
7103 dbms_sql.close_cursor(l_cursor);
7104 END IF;
7105 IF p_spread_qty = 3 THEN
7106 RETURN;
7107 END IF;
7108 FND_MESSAGE.set_name('MRP','EC_FROM');
7109 l_trans_var1 := FND_MESSAGE.get;
7110 FND_MESSAGE.set_name('MRP','EC_TO');
7111 l_trans_var2 := FND_MESSAGE.get;
7112 FND_MESSAGE.set_name('MRP','EC_ORIGINAL');
7113 l_trans_var3 := FND_MESSAGE.get;
7114 FND_MESSAGE.set_name('MRP','EC_ADJUSTED');
7115 l_trans_var4 := FND_MESSAGE.get;
7116
7117 l_out_message := ' ' ||
7118 rpad(substr(l_trans_var1,1,8),38) || ' ' ||
7119 rpad(substr(l_trans_var2,1,9),9) || ' ' ||
7120 rpad(substr(l_trans_var3,1,8),8) || ' ' ||
7121 rpad(substr(l_trans_var4,1,8),8);
7122 MRP_UTIL.MRP_OUT(l_out_message);
7123
7124 FND_MESSAGE.set_name('MRP','EC_SCHEDULE');
7125 l_trans_var1 := FND_MESSAGE.get;
7126 FND_MESSAGE.set_name('MRP','EC_SCHEDULED');
7127 l_trans_var2 := FND_MESSAGE.get;
7128 FND_MESSAGE.set_name('MRP','EC_COMPLETED');
7129 l_trans_var3 := FND_MESSAGE.get;
7130 FND_MESSAGE.set_name('MRP','EC_ADJUSTED');
7131 l_trans_var4 := FND_MESSAGE.get;
7132
7133 l_out_message := ' ' ||
7134 rpad(substr(l_trans_var1,1,8),8) || ' ' ||
7135 rpad(substr(l_trans_var1,1,9),9) || ' ' ||
7136 rpad(substr(l_trans_var2,1,9),9) || ' ' ||
7137 rpad(substr(l_trans_var3,1,9),18) || ' ' ||
7138 rpad(substr(l_trans_var1,1,9),9) || ' ' ||
7139 rpad(substr(l_trans_var1,1,8),8) || ' ' ||
7140 rpad(substr(l_trans_var1,1,8),8) || ' ' ||
7141 rpad(substr(l_trans_var4,1,8),8);
7142
7143 MRP_UTIL.MRP_OUT(l_out_message);
7144
7145 FND_MESSAGE.set_name('MRP','EC_LINE');
7146 l_trans_var1 := FND_MESSAGE.get;
7147 FND_MESSAGE.set_name('MRP','EC_ITEM');
7148 l_trans_var2 := FND_MESSAGE.get;
7149 FND_MESSAGE.set_name('MRP','EC_GROUP');
7150 l_trans_var3 := FND_MESSAGE.get;
7151 FND_MESSAGE.set_name('MRP','EC_DATE');
7152 l_trans_var4 := FND_MESSAGE.get;
7153 FND_MESSAGE.set_name('MRP','EC_QUANTITY');
7154 l_trans_var5 := FND_MESSAGE.get;
7155 FND_MESSAGE.set_name('MRP','EC_VARIANCE');
7156 l_trans_var6 := FND_MESSAGE.get;
7157
7158 l_out_message := rpad(substr(l_trans_var1,1,10),10) || ' ' ||
7159 rpad(substr(l_trans_var2,1,14),14) || ' ' ||
7160 rpad(substr(l_trans_var3,1,8),8) || ' ' ||
7161 rpad(substr(l_trans_var4,1,9),9) || ' ' ||
7162 rpad(substr(l_trans_var5,1,9),9) || ' ' ||
7163 rpad(substr(l_trans_var5,1,9),9) || ' ' ||
7164 rpad(substr(l_trans_var6,1,8),8) || ' ' ||
7165 rpad(substr(l_trans_var4,1,9),9) || ' ' ||
7166 rpad(substr(l_trans_var5,1,8),8) || ' ' ||
7167 rpad(substr(l_trans_var5,1,8),8) || ' ' ||
7168 rpad(substr(l_trans_var5,1,8),8);
7169 MRP_UTIL.MRP_OUT(l_out_message);
7170 l_out_message := '---------- -------------- -------- --------- --------- --------- -------- --------- -------- -------- --------';
7171 MRP_UTIL.MRP_OUT(l_out_message);
7172
7173 -- Reinitialize values
7174 l_old_line_id := -1;
7175 l_old_item_id := -1;
7176 l_old_sg_id := -1;
7177
7178 OPEN REPORT_CURSOR(l_report_query_id);
7179
7180 LOOP
7181
7182 FETCH REPORT_CURSOR INTO
7183 fs_report_rec.line_code,
7184 fs_report_rec.line_id,
7185 fs_report_rec.item,
7186 fs_report_rec.primary_item_id,
7187 fs_report_rec.schedule_group,
7188 fs_report_rec.schedule_group_id,
7189 fs_report_rec.completion_date,
7190 fs_report_rec.planned_quantity,
7191 fs_report_rec.quantity_completed,
7192 fs_report_rec.variance1,
7193 fs_report_rec.to_completion_date,
7194 fs_report_rec.to_scheduled_qty,
7195 fs_report_rec.to_adjusted_qty,
7196 fs_report_rec.variance2;
7197
7198 IF REPORT_CURSOR%NOTFOUND THEN
7199 fs_report_rec.primary_item_id := -1;
7200 END IF;
7201
7202 IF (NVL(fs_report_rec.schedule_group_id,-1) <> NVL(l_old_sg_id,-1)
7203 AND l_old_sg_id <> -1) OR
7204 (fs_report_rec.primary_item_id <> l_old_item_id
7205 AND l_old_item_id <> -1) OR
7206 (fs_report_rec.line_id <> l_old_line_id
7207 AND l_old_line_id <> -1)
7208 THEN
7209 OPEN REPORT_TOTALS(l_report_query_id, l_old_line_id,
7210 l_old_item_id, l_old_sg_id);
7211
7212 FETCH REPORT_TOTALS INTO
7213 l_planned_total,
7214 l_completed_total,
7215 l_variance1_total,
7216 l_scheduled_total,
7217 l_adjusted_total,
7218 l_variance2_total;
7219
7220 CLOSE REPORT_TOTALS;
7221
7222 l_out_message := '-------------------------------------------- --------- --------- -------- --------- -------- -------- --------';
7223 MRP_UTIL.MRP_OUT(l_out_message);
7224
7225 FND_MESSAGE.set_name('MRP','EC_TOTAL');
7226 l_out_message := FND_MESSAGE.get;
7227
7228 l_out_message := rpad(substr(l_out_message,1,8),8) || ' '||
7229 lpad(l_planned_total,9) || ' ' ||
7230 lpad(l_completed_total,9) || ' ' || lpad(l_variance1_total,8) ||
7231 ' ' ||
7232 lpad(l_scheduled_total,8) || ' ' || lpad(l_adjusted_total,8) || ' ' ||
7233 lpad(l_variance2_total,8);
7234
7235 MRP_UTIL.MRP_OUT(l_out_message);
7236
7237 l_out_message := ' ';
7238 MRP_UTIL.MRP_OUT(l_out_message);
7239 END IF;
7240
7241 IF REPORT_CURSOR%NOTFOUND THEN
7242 FND_MESSAGE.set_name('MRP','EC_END_OF_REPORT');
7243 l_out_message := FND_MESSAGE.get;
7244 MRP_UTIL.MRP_OUT(l_out_message);
7245 EXIT;
7246 END IF;
7247
7248 l_out_message := fs_report_rec.line_code || ' ' ||
7249 fs_report_rec.item || ' ' ||
7250 fs_report_rec.schedule_group || ' ' ||
7251 fs_report_rec.completion_date || ' ' ||
7252 lpad(fs_report_rec.planned_quantity,9) || ' ' ||
7253 lpad(fs_report_rec.quantity_completed,9) || ' ' ||
7254 lpad(fs_report_rec.variance1,8) || ' ' ||
7255 fs_report_rec.to_completion_date || ' ' ||
7256 lpad(fs_report_rec.to_scheduled_qty,8) || ' ' ||
7257 lpad(fs_report_rec.to_adjusted_qty,8) || ' ' ||
7258 lpad(fs_report_rec.variance2,8);
7259
7260 MRP_UTIL.MRP_OUT(l_out_message);
7261
7262 l_old_sg_id := fs_report_rec.schedule_group_id;
7263 l_old_item_id := fs_report_rec.primary_item_id;
7264 l_old_line_id := fs_report_rec.line_id;
7265 END LOOP;
7266
7267 CLOSE REPORT_CURSOR;
7268
7269 -- Rollback if haven't selected update
7270 IF p_output <> 2 THEN
7271 ROLLBACK;
7272 END IF;
7273
7274 EXCEPTION
7275 WHEN NO_DATA_FOUND THEN
7276 NULL;
7277
7278 WHEN expected_error THEN
7279 ROLLBACK;
7280 IF RETCODE <> 1 THEN
7281 RETCODE := G_ERROR;
7282 END IF;
7283 FND_MESSAGE.set_name('MRP','MRP_ROLL_FLOW_ERROR');
7284 ERRBUF := FND_MESSAGE.get;
7285 l_log_message := FND_MESSAGE.get;
7286 MRP_UTIL.MRP_LOG(l_log_message);
7287 l_log_message := 'Unexpected SQL Error: '||sqlerrm;
7288 MRP_UTIL.MRP_LOG(l_log_message);
7289
7290 WHEN unexpected_error THEN
7291 ROLLBACK;
7292 RETCODE := G_ERROR;
7293 FND_MESSAGE.set_name('MRP','MRP_ROLL_FLOW_ERROR');
7294 ERRBUF := FND_MESSAGE.get;
7295 l_log_message := FND_MESSAGE.get;
7296 MRP_UTIL.MRP_LOG(l_log_message);
7297 l_log_message := 'Unexpected SQL Error: '||sqlerrm;
7298 MRP_UTIL.MRP_LOG(l_log_message);
7299
7300 WHEN OTHERS THEN
7301 ROLLBACK;
7302 RETCODE := G_ERROR;
7303 FND_MESSAGE.set_name('MRP','MRP_ROLL_FLOW_ERROR');
7304 ERRBUF := FND_MESSAGE.get;
7305 l_log_message := FND_MESSAGE.get;
7306 MRP_UTIL.MRP_LOG(l_log_message);
7307 l_log_message := 'Unexpected SQL Error: '||sqlerrm;
7308 MRP_UTIL.MRP_LOG(l_log_message);
7309
7310 END Roll_Flow_Schedules;
7311
7312 -- ========================================================================
7313 -- This function builds the where clause for the item range specified
7314 -- Function accepts system items as delimited strings and build the where
7315 -- clause. It expects proper escaping, if 'delimiter' itself a valid
7316 -- character within the segment values.
7317 -- Delimiter is ignored if only ONE segment is enabled.
7318 -- ========================================================================
7319 /** Bug 2558664 - modified Item_Where_Clause to use fnd_flex_server.parse_flex_values
7320 which handles 'delimiter' more gracefully **/
7321 /** don't use this method!!! */
7322 /* this method is moved to package FLM_UTIL */
7323 FUNCTION Item_Where_Clause( p_item_lo IN VARCHAR2,
7324 p_item_hi IN VARCHAR2,
7325 p_table_name IN VARCHAR2,
7326 x_where OUT NOCOPY VARCHAR2,
7327 x_err_buf OUT NOCOPY VARCHAR2)
7328 RETURN BOOLEAN IS
7329
7330 BEGIN
7331
7332 x_where := ' ';
7333 x_err_buf := ' ';
7334
7335 RETURN TRUE;
7336
7337 END Item_Where_Clause;
7338
7339 -- ========================================================================
7340 -- This function builds the where clause for the category range specified
7341 -- ========================================================================
7342 /** don't use this method!!! */
7343 /* this method is moved to package FLM_UTIL */
7344 FUNCTION Category_Where_Clause ( p_cat_lo IN VARCHAR2,
7345 p_cat_hi IN VARCHAR2,
7346 p_table_name IN VARCHAR2,
7347 p_cat_struct_id IN NUMBER,
7348 p_where OUT NOCOPY VARCHAR2,
7349 x_err_buf OUT NOCOPY VARCHAR2 )
7350 RETURN BOOLEAN IS
7351
7352 BEGIN
7353 p_where := ' ';
7354 x_err_buf := ' ';
7355
7356 RETURN TRUE;
7357
7358 END Category_Where_Clause;
7359
7360
7361 PROCEDURE Line_Schedule ( p_rule_id IN NUMBER,
7362 p_line_id IN NUMBER,
7363 p_org_id IN NUMBER,
7364 p_sched_start_date IN DATE,
7365 p_sched_end_date IN DATE,
7366 p_update IN NUMBER,
7367 p_flex_tolerance IN NUMBER,
7368 x_return_status OUT NOCOPY VARCHAR2,
7369 x_msg_count OUT NOCOPY NUMBER,
7370 x_msg_data OUT NOCOPY VARCHAR2) IS
7371
7372 CURSOR RULE_CURSOR IS
7373 SELECT distinct user_defined
7374 FROM mrp_scheduling_rules
7375 WHERE rule_id = p_rule_id;
7376
7377 l_api_version_number CONSTANT NUMBER := 1.0;
7378 l_api_name CONSTANT VARCHAR2(30) := 'Line_Schedule';
7379 l_user_defined NUMBER;
7380
7381 l_return_status VARCHAR2(1);
7382 l_msg_count NUMBER;
7383 l_msg_data VARCHAR2(2000);
7384
7385 BEGIN
7386
7387 OPEN RULE_CURSOR;
7388 FETCH RULE_CURSOR into l_user_defined;
7389 CLOSE RULE_CURSOR;
7390
7391 IF p_rule_id <> -1 THEN
7392 IF l_user_defined = 1 THEN
7393 MRP_CUSTOM_LINE_SCHEDULE.Custom_Schedule(
7394 l_api_version_number,
7395 p_rule_id,
7396 p_line_id,
7397 p_org_id,
7398 p_flex_tolerance, /* Added in the bug 1949098*/
7399 p_sched_start_date,
7400 p_sched_end_date,
7401 x_return_status,
7402 x_msg_count,
7403 x_msg_data);
7404 ELSE
7405 MRP_LINE_SCHEDULE_ALGORITHM.Schedule(
7406 p_rule_id,
7407 p_line_id,
7408 p_org_id,
7409 p_sched_start_date,
7410 p_sched_end_date,
7411 p_flex_tolerance,
7412 x_return_status,
7413 x_msg_count,
7414 x_msg_data);
7415 END IF;
7416 END IF;
7417
7418 IF p_update = 1 THEN
7419 Post_Schedule_Update (p_org_id);
7420 END IF;
7421
7422 EXCEPTION
7423
7424 WHEN FND_API.G_EXC_ERROR THEN
7425
7426 x_return_status := FND_API.G_RET_STS_ERROR;
7427
7428 -- Get message count and data
7429
7430 FND_MSG_PUB.Count_And_Get
7431 ( p_count => x_msg_count
7432 , p_data => x_msg_data
7433 );
7434
7435 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7436
7437 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7438
7439 -- Get message count and data
7440
7441 FND_MSG_PUB.Count_And_Get
7442 ( p_count => x_msg_count
7443 , p_data => x_msg_data
7444 );
7445
7446 WHEN OTHERS THEN
7447
7448 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7449
7450 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7451 THEN
7452 FND_MSG_PUB.Add_Exc_Msg
7453 ( G_PKG_NAME
7454 , 'Line_Schedule'
7455 );
7456 END IF;
7457
7458 -- Get message count and data
7459
7460 FND_MSG_PUB.Count_And_Get
7461 ( p_count => x_msg_count
7462 , p_data => x_msg_data
7463 );
7464
7465 END Line_Schedule;
7466
7467 PROCEDURE Post_Schedule_Update (p_org_id IN NUMBER)
7468 IS
7469
7470 CURSOR C1 IS
7471 SELECT wip_entity_id, schedule_number
7472 FROM wip_flow_schedules
7473 WHERE request_id = USERENV( 'SESSIONID' );
7474
7475 CURSOR C2 IS
7476 SELECT sum(planned_quantity), demand_source_line
7477 FROM wip_flow_schedules
7478 WHERE organization_id = p_org_id
7479 AND demand_source_header_id IS NULL
7480 AND request_id = USERENV('SESSIONID')
7481 GROUP BY demand_source_line;
7482
7483 l_wip_entity_id NUMBER;
7484 l_schedule_number VARCHAR2(30);
7485 l_schedule_number_out VARCHAR2(30);
7486 l_error NUMBER;
7487 l_quantity NUMBER;
7488 l_trans_id NUMBER;
7489
7490 BEGIN
7491
7492 OPEN C1;
7493 LOOP
7494 FETCH C1 INTO l_wip_entity_id, l_schedule_number;
7495 EXIT WHEN C1%NOTFOUND;
7496
7497 --Bug 6122344
7498 IF l_schedule_number =
7499 --(nvl(substr(FND_PROFILE.value('WIP_JOB_PREFIX'),1,20),'X')
7500 -- || to_char(l_wip_entity_id))
7501 'FLM-INTERNAL' || (to_char(l_wip_entity_id))
7502
7503 THEN
7504 l_schedule_number_out := NULL;
7505 l_error := WIP_FLOW_DERIVE.schedule_number(l_schedule_number_out);
7506 IF l_error = 1 THEN
7507 UPDATE wip_flow_schedules
7508 SET schedule_number = l_schedule_number_out
7509 WHERE wip_entity_id = l_wip_entity_id;
7510
7511 UPDATE wip_entities
7512 SET wip_entity_name = l_schedule_number_out
7513 WHERE wip_entity_id = l_wip_entity_id;
7514 ELSE
7515 RAISE FND_API.G_EXC_ERROR;
7516 END IF;
7517 END IF;
7518 END LOOP;
7519 CLOSE C1;
7520
7521 Explode_New_Items;
7522
7523 OPEN C2;
7524 LOOP
7525 FETCH C2 into l_quantity, l_trans_id;
7526 EXIT WHEN C2%NOTFOUND;
7527
7528 UPDATE mrp_recommendations
7529 SET quantity_in_process = nvl(quantity_in_process,0) + l_quantity
7530 WHERE transaction_id = l_trans_id;
7531 END LOOP;
7532 CLOSE C2;
7533
7534 UPDATE wip_flow_schedules
7535 SET request_id = NULL,
7536 scheduled_flag = 1
7537 WHERE request_id = USERENV('SESSIONID');
7538
7539 END Post_Schedule_Update;
7540
7541 PROCEDURE Explode_New_Items
7542 IS
7543 CURSOR C1 IS
7544 SELECT distinct primary_item_id, organization_id, alternate_bom_designator
7545 FROM wip_flow_schedules
7546 WHERE request_id = USERENV('SESSIONID');
7547
7548 l_item_id NUMBER;
7549 l_org_id NUMBER;
7550 l_alt_bom VARCHAR2(10);
7551 l_error_msg VARCHAR2(2000);
7552 l_error_code NUMBER;
7553
7554 BEGIN
7555
7556 OPEN C1;
7557
7558 LOOP
7559 FETCH C1 INTO l_item_id, l_org_id, l_alt_bom;
7560 EXIT WHEN C1%NOTFOUND;
7561
7562 BOM_OE_EXPLODER_PKG.be_exploder(
7563 arg_org_id => l_org_id,
7564 arg_starting_rev_date => sysdate - 3,
7565 arg_expl_type => 'ALL',
7566 arg_order_by => 1,
7567 arg_levels_to_explode => 20,
7568 arg_item_id => l_item_id,
7569 arg_comp_code => '',
7570 arg_user_id => 0,
7571 arg_err_msg => l_error_msg,
7572 arg_error_code => l_error_code,
7573 arg_alt_bom_desig => l_alt_bom
7574 );
7575
7576 IF l_error_code = 9998 THEN
7577 -- Do nothing, there was just no bill to explode
7578 NULL;
7579 ELSIF l_error_code <> 0 THEN
7580 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7581 FND_MESSAGE.SET_NAME('BOM',l_error_msg);
7582 FND_MSG_PUB.Add;
7583 END IF;
7584 RAISE FND_API.G_EXC_ERROR;
7585 END IF;
7586
7587 END LOOP;
7588
7589 CLOSE C1;
7590
7591 END Explode_New_Items;
7592
7593
7594 /** Bug 2906437 -- Calculate_Needed--
7595 all right hand side expressions are nvl-ed
7596 and weeded out old commented code
7597 **/
7598 PROCEDURE calculate_needed(i_root IN NUMBER) IS
7599 l_index NUMBER;
7600 BEGIN
7601 IF l_lines.COUNT <= 0 THEN
7602 RETURN;
7603 END IF;
7604 IF l_lines(i_root).first_child IS NOT NULL THEN -- Not a Leaf
7605 l_lines(i_root).needed_quantity := 0;
7606 l_index := l_lines(i_root).first_child;
7607 LOOP
7608 calculate_needed(l_index);
7609 l_lines(i_root).needed_quantity := nvl(l_lines(i_root).needed_quantity,0) +
7610 nvl(l_lines(l_index).needed_quantity,0);
7611 EXIT WHEN l_lines(l_index).next_brother IS NULL;
7612 l_index := l_lines(l_index).next_brother;
7613 END LOOP;
7614 l_lines(i_root).needed_quantity := nvl(l_lines(i_root).needed_quantity,0) +
7615 nvl(l_lines(i_root).order_quantity,0) - nvl(l_lines(i_root).fs_quantity,0);
7616 IF l_lines(i_root).needed_quantity < 0 THEN
7617 l_lines(i_root).needed_quantity := 0;
7618 END IF;
7619 ELSE -- Leaf
7620 -- calculate needed_quantity
7621 l_lines(i_root).needed_quantity :=
7622 greatest(nvl(l_lines(i_root).order_quantity,0) - nvl(l_lines(i_root).fs_quantity,0),
7623 0);
7624 END IF;
7625 END calculate_needed;
7626
7627
7628 PROCEDURE distribute_quantity(i_root IN NUMBER) IS
7629 l_index NUMBER;
7630 l_index1 NUMBER; -- Bug 3039782
7631 l_index2 NUMBER; -- Bug 3039782
7632 l_overquantity NUMBER;
7633 l_flag BOOLEAN := TRUE; -- Bug 3267542
7634 BEGIN
7635 IF l_lines.COUNT <= 0 THEN
7636 RETURN;
7637 END IF;
7638 IF l_lines(i_root).first_child IS NOT NULL THEN -- Not a Leaf
7639 l_overquantity := l_lines(i_root).fs_quantity +
7640 l_lines(i_root).distributed_quantity -
7641 l_lines(i_root).order_quantity;
7642 IF l_overquantity <= 0 THEN
7643 /* Bug 3039782 -- Code additition starts */
7644 /***************************************************
7645 Removed code added in fix for bug 2906437
7646 and added the following
7647 *****************************************************/
7648 l_index2 := l_lines(i_root).first_child;
7649 loop
7650 l_lines(l_index2).distributed_quantity := 0;
7651 distribute_quantity(l_index2);
7652 EXIT WHEN l_lines(l_index2).next_brother IS NULL;
7653 l_index2 := l_lines(l_index2).next_brother;
7654 end loop;
7655 /* Bug 3039782 -- Code additition ends */
7656 l_lines(i_root).needed_quantity := 0 - l_overquantity;
7657 RETURN;
7658 ELSE
7659 /*************************************************************************
7660 Bug 2536351-
7661 Whole logic of filling up overquantity is changed, rather made opposite.
7662 Now, any 'overqunatity' obtained from parent is being filled up starting
7663 from last child to first child browsing through previous brothers
7664 **************************************************************************/
7665 l_lines(i_root).needed_quantity := 0;
7666 l_index := l_lines(i_root).last_child;
7667 LOOP
7668 IF l_lines(l_index).needed_quantity > 0 THEN
7669 IF l_lines(l_index).needed_quantity > l_overquantity THEN
7670 l_lines(l_index).distributed_quantity := l_overquantity;
7671 l_overquantity := 0;
7672 ELSE
7673 l_lines(l_index).distributed_quantity := l_lines(l_index).needed_quantity;
7674 l_overquantity := l_overquantity - l_lines(l_index).needed_quantity;
7675 END IF;
7676 distribute_quantity(l_index);
7677 END IF;
7678 /*Bug 3267542 -
7679 EXIT WHEN l_lines(l_index).previous_brother IS NULL or l_overquantity <= 0;
7680 Commented the above line and added the following to set l_flag */
7681 IF l_lines(l_index).previous_brother IS NULL or l_overquantity <= 0 THEN
7682 IF l_lines(l_index).previous_brother IS NULL THEN
7683 l_flag := FALSE;
7684 ELSE
7685 l_flag := TRUE;
7686 l_index1 := l_lines(l_index).previous_brother;
7687 END IF;
7688 EXIT;
7689 END IF;
7690 /*Bug 3267542 - addition for bug ends */
7691 l_index := l_lines(l_index).previous_brother;
7692 /** Modification for Bug 2536351 **/
7693 END LOOP; -- All Children
7694 END IF; -- Overquantity > 0
7695 /* Bug 3039782 -- Code additition starts */
7696 /***************************************************
7697 Removed code added in fix for bug 2906437
7698 and added the following
7699 *****************************************************/
7700 /*Bug 3267542 - modification starts. Call distribute_quantity util no prev. brother, if l_flag is set*/
7701 if l_flag then
7702 loop
7703 distribute_quantity(l_index1);
7704 EXIT WHEN l_lines(l_index1).previous_brother IS NULL;
7705 l_index1 := l_lines(l_index1).previous_brother;
7706 end loop;
7707 end if;
7708 /*Bug 3267542 - modification ends*/
7709 /* Bug 3039782 -- Code additition ends */
7710 ELSE
7711 -- nothing to distribute
7712 l_lines(i_root).needed_quantity :=
7713 greatest(l_lines(i_root).needed_quantity -
7714 l_lines(i_root).distributed_quantity,
7715 0);
7716 END IF;
7717 END distribute_quantity;
7718
7719 /*Bug 3042045 - new parameter p_use_open_quantity added*/
7720 FUNCTION get_flow_quantity_split(p_demand_source_line IN VARCHAR2,
7721 p_demand_source_type IN NUMBER,
7722 p_demand_source_delivery IN VARCHAR2,
7723 p_use_open_quantity IN VARCHAR2 )
7724 RETURN NUMBER
7725 IS
7726
7727 --
7728 -- Local Variables and Cursors
7729 --
7730 l_header_id number;
7731 l_item_id number;
7732
7733 /*Bug 3042045*/
7734 CURSOR all_lines(i_header_id number, i_item_id number) IS
7735 SELECT line_id,
7736 --fix bug#3417588
7737 decode(nvl(p_use_open_quantity, 'N'), 'Y',
7738 decode(SL.SHIPPED_QUANTITY, NULL,
7739 greatest(INV_DECIMALS_PUB.GET_PRIMARY_QUANTITY(SL.SHIP_FROM_ORG_ID,
7740 SL.INVENTORY_ITEM_ID,
7741 SL.ORDER_QUANTITY_UOM,
7742 SL.ORDERED_QUANTITY)
7743 - MRP_FLOW_SCHEDULE_UTIL.GET_RESERVATION_QUANTITY(
7744 SL.SHIP_FROM_ORG_ID,
7745 SL.INVENTORY_ITEM_ID,
7746 SL.LINE_ID,
7747 p_use_open_quantity), 0),
7748 0),
7749 greatest(INV_DECIMALS_PUB.GET_PRIMARY_QUANTITY(SL.SHIP_FROM_ORG_ID,
7750 SL.INVENTORY_ITEM_ID,
7751 SL.ORDER_QUANTITY_UOM,
7752 SL.ORDERED_QUANTITY)
7753 - MRP_FLOW_SCHEDULE_UTIL.GET_RESERVATION_QUANTITY(
7754 SL.SHIP_FROM_ORG_ID,
7755 SL.INVENTORY_ITEM_ID,
7756 SL.LINE_ID,
7757 p_use_open_quantity), 0))
7758 order_quantity,
7759 --end of fix bug#3417588
7760 split_from_line_id parent_line_id
7761 FROM oe_order_lines_all sl
7762 WHERE header_id = i_header_id
7763 AND inventory_item_id = i_item_id
7764 ORDER BY sl.line_id;
7765
7766 l_root_id NUMBER;
7767 l_this_root NUMBER;
7768 l_index NUMBER;
7769 l_index_temp NUMBER;
7770
7771 BEGIN
7772 -- get the header and item id
7773 SELECT header_id, inventory_item_id
7774 INTO l_header_id, l_item_id
7775 FROM oe_order_lines_all
7776 WHERE line_id = to_number(p_demand_source_line);
7777
7778 -- get all potentially relevant lines
7779 l_lines.DELETE;
7780 FOR line_rec IN all_lines(l_header_id, l_item_id) LOOP
7781 -- fetch line_id, order_quantity, parent_line_id
7782 l_lines(line_rec.line_id).line_id := line_rec.line_id;
7783 l_lines(line_rec.line_id).order_quantity := line_rec.order_quantity;
7784 l_lines(line_rec.line_id).parent_line_id := line_rec.parent_line_id;
7785 END LOOP;
7786
7787 -- this shouldn't happen
7788 IF l_lines.COUNT <= 0 THEN
7789 RETURN 0;
7790 END IF;
7791
7792 --
7793 -- Build Tree
7794 --
7795 -- find root
7796 l_root_id := to_number(p_demand_source_line);
7797 WHILE l_lines(l_root_id).parent_line_id IS NOT NULL LOOP
7798 l_root_id := l_lines(l_root_id).parent_line_id;
7799 END LOOP;
7800 -- delete un-relevant lines
7801 l_index := l_lines.FIRST;
7802 LOOP
7803 -- Find the root for this line
7804 l_this_root := l_lines(l_index).line_id;
7805 WHILE l_lines(l_this_root).parent_line_id IS NOT NULL LOOP
7806 l_this_root := l_lines(l_this_root).parent_line_id;
7807 IF NOT l_lines.EXISTS(l_this_root) THEN
7808 EXIT;
7809 END IF;
7810 END LOOP;
7811 -- If a different root, then delete
7812 IF l_this_root <> l_root_id THEN
7813 l_index_temp := l_index;
7814 IF l_index = l_lines.LAST THEN
7815 l_lines.DELETE(l_index_temp);
7816 EXIT;
7817 ELSE
7818 l_index := l_lines.NEXT(l_index);
7819 l_lines.DELETE(l_index_temp);
7820 END IF;
7821 ELSE -- If in the same root, plug into the tree
7822 IF l_lines(l_index).parent_line_id IS NOT NULL THEN
7823 IF l_lines(l_lines(l_index).parent_line_id).first_child IS NULL THEN
7824 l_lines(l_lines(l_index).parent_line_id).first_child := l_index;
7825 l_lines(l_lines(l_index).parent_line_id).last_child := l_index;
7826 ELSE
7827 l_lines(l_lines(l_lines(l_index).parent_line_id).last_child).next_brother := l_index;
7828 l_lines(l_lines(l_index).parent_line_id).last_child := l_index;
7829 END IF;
7830 END IF;
7831 EXIT WHEN l_index = l_lines.LAST;
7832 l_index := l_lines.NEXT(l_index);
7833 END IF;
7834 END LOOP;
7835
7836 /** Bug 2536351 - update previous_brother of each child node **/
7837 for i in l_lines.FIRST..l_lines.LAST
7838 LOOP
7839 if (l_lines.exists(i)) then
7840 if (l_lines(i).next_brother is NOT NULL) THEN
7841 l_lines(l_lines(i).next_brother).previous_brother := i;
7842 END IF;
7843 end if;
7844 END LOOP;
7845 /** Bug 2536351 - update previous_brother ends ****************/
7846
7847 -- query flow quantity
7848 l_index := l_lines.FIRST;
7849 LOOP
7850 /*Bug 3042045 - modified decode statement
7851 if 'Use Open Quantity' = 'Y' - if 'closed schedule' return 0,
7852 else return (planned_quantity minus quantity_completed)
7853 if 'Use Open Quantity' = 'N' or NULL - if 'closed schedule' return quantity_completed,
7854 else return planned_quantity
7855 */
7856 SELECT nvl(sum(decode(nvl(p_use_open_quantity,'N'),'Y',decode(status,2,0,
7857 (planned_quantity-quantity_completed)),
7858 decode(status,2,quantity_completed,
7859 planned_quantity))),0)
7860 INTO l_lines(l_index).fs_quantity
7861 FROM wip_flow_schedules
7862 WHERE primary_item_id = l_item_id
7863 AND demand_source_line = to_char(l_lines(l_index).line_id)
7864 AND demand_source_type = p_demand_source_type
7865 AND ((demand_source_delivery IS NULL) or
7866 (demand_source_delivery = p_demand_source_delivery));
7867 l_lines(l_index).distributed_quantity := 0;
7868 EXIT WHEN l_index = l_lines.LAST;
7869 l_index := l_lines.NEXT(l_index);
7870 END LOOP;
7871
7872 -- calculate needed quantity
7873 calculate_needed(l_root_id);
7874 -- distribute quantity
7875 distribute_quantity(l_root_id);
7876 --return l_lines(to_number(p_demand_source_line)).fs_quantity;
7877 /** Bug 2536351 **/
7878 RETURN greatest(l_lines(to_number(p_demand_source_line)).order_quantity -
7879 l_lines(to_number(p_demand_source_line)).needed_quantity,0);
7880 EXCEPTION
7881 WHEN OTHERS THEN
7882 RETURN 0;
7883 END get_flow_quantity_split;
7884
7885 /*Bug 3042045 - new parameter p_use_open_quantity added*/
7886 FUNCTION Get_Flow_Quantity( p_demand_source_line IN VARCHAR2,
7887 p_demand_source_type IN NUMBER,
7888 p_demand_source_delivery IN VARCHAR2,
7889 p_use_open_quantity IN VARCHAR2 )
7890 RETURN NUMBER
7891 IS
7892
7893 /*Bug 3042045 - modified decode statement
7894 if 'Use Open Quantity' = 'Y' - if 'closed schedule' return 0,
7895 else return (planned_quantity minus quantity_completed)
7896 if 'Use Open Quantity' = 'N' or NULL - if 'closed schedule' return quantity_completed,
7897 else return planned_quantity
7898 */
7899 CURSOR FLOW_QUANTITY IS
7900 SELECT nvl(sum(decode(nvl(p_use_open_quantity,'N'),'Y',decode(status,2,0,
7901 (planned_quantity-quantity_completed)),
7902 decode(status,2,quantity_completed,
7903 planned_quantity))),0)
7904 FROM wip_flow_schedules
7905 WHERE demand_source_line = p_demand_source_line
7906 AND demand_source_type = p_demand_source_type
7907 AND ((demand_source_delivery IS NULL)or(demand_source_delivery = p_demand_source_delivery));
7908
7909 l_quantity NUMBER := 0;
7910 l_split_from_line NUMBER := NULL;
7911 BEGIN
7912 IF p_demand_source_type = 2 THEN
7913 SELECT split_from_line_id
7914 INTO l_split_from_line
7915 FROM oe_order_lines_all
7916 WHERE line_id = to_number(p_demand_source_line);
7917 END IF;
7918
7919 IF l_split_from_line IS NOT NULL THEN
7920 return get_flow_quantity_split(p_demand_source_line,
7921 p_demand_source_type,
7922 p_demand_source_delivery,
7923 p_use_open_quantity); /*Bug 3042045*/
7924 ELSE
7925 OPEN FLOW_QUANTITY;
7926 FETCH FLOW_QUANTITY INTO l_quantity;
7927 CLOSE FLOW_QUANTITY;
7928
7929 RETURN l_quantity;
7930 END IF;
7931 EXCEPTION
7932
7933 WHEN NO_DATA_FOUND THEN
7934
7935 RETURN 0;
7936
7937 END Get_Flow_Quantity;
7938
7939 FUNCTION Get_Demand_Project( p_demand_id IN NUMBER,
7940 p_type IN NUMBER )
7941 RETURN NUMBER
7942 IS
7943
7944 CURSOR DEMAND_PROJECT IS
7945 SELECT project_id, task_id
7946 FROM pjm_project_demand_v
7947 WHERE demand_id = p_demand_id;
7948
7949 l_project_id NUMBER;
7950 l_task_id NUMBER;
7951
7952 BEGIN
7953
7954 OPEN DEMAND_PROJECT;
7955 FETCH DEMAND_PROJECT INTO l_project_id, l_task_id;
7956 CLOSE DEMAND_PROJECT;
7957
7958 IF p_type = 1 THEN
7959 RETURN l_project_id;
7960 ELSIF p_type = 2 THEN
7961 RETURN l_task_id;
7962 END IF;
7963
7964 EXCEPTION
7965
7966 WHEN NO_DATA_FOUND THEN
7967
7968 RETURN NULL;
7969
7970 END Get_Demand_Project;
7971
7972 FUNCTION check_ato_holds(p_line_id IN NUMBER,
7973 p_header_id IN NUMBER,
7974 p_action_id IN NUMBER)
7975 RETURN NUMBER IS
7976
7977 l_check_holds_result VARCHAR2(30);
7978 l_return_status VARCHAR2(30);
7979 l_msg_count NUMBER;
7980 l_msg_data VARCHAR2(2000);
7981 l_return NUMBER;
7982
7983 BEGIN
7984 OE_HOLDS_PUB.Check_Holds
7985 (p_api_version => 1.0
7986 ,p_header_id => p_header_id
7987 ,p_line_id => p_line_id
7988 ,x_result_out => l_check_holds_result
7989 ,x_return_status => l_return_status
7990 ,x_msg_count => l_msg_count
7991 ,x_msg_data => l_msg_data
7992 );
7993
7994 l_return := 1;
7995 IF ( l_return_status = FND_API.G_RET_STS_SUCCESS AND
7996 l_check_holds_result = FND_API.G_FALSE ) THEN
7997 l_return := 0;
7998 END IF;
7999
8000 return l_return;
8001
8002 EXCEPTION
8003 WHEN OTHERS THEN
8004 mrp_util.mrp_log('Excpetion during checking holds ' || sqlerrm );
8005 return 1;
8006
8007 END Check_ATO_Holds;
8008
8009 /*Bug 3042045 - new parameter p_use_open_quantity added*/
8010 FUNCTION Get_Reservation_Quantity ( p_org_id IN NUMBER,
8011 p_item_id IN NUMBER,
8012 p_line_id IN NUMBER,
8013 p_use_open_quantity IN VARCHAR2 )
8014 RETURN NUMBER IS
8015
8016 l_reserved_qty NUMBER := 0;
8017 l_wip_state_qty NUMBER := 0;
8018
8019 BEGIN
8020
8021 /* Fix bug 2466429, do UOM conversion. */
8022
8023 /*fix bug#3294125: Added 'demand_source_line = nvl (p_line_id,-1)'.
8024 *This would allow the reservation qty to be taken into account
8025 *whenever the order source is inconsistent with the corresponding
8026 *flow schedule.
8027 */
8028 SELECT nvl(sum(INV_DECIMALS_PUB.GET_PRIMARY_QUANTITY(P_ORG_ID,
8029 P_ITEM_ID,
8030 RESERVATION_UOM_CODE,
8031 RESERVATION_QUANTITY)), 0)
8032 INTO l_reserved_qty
8033 FROM mtl_reservations
8034 WHERE organization_id = p_org_id
8035 AND inventory_item_id = p_item_id
8036 AND demand_source_line_id = p_line_id
8037 AND ( nvl(p_use_open_quantity,'N') = 'N'
8038 and (supply_source_header_id is NULL
8039 or not exists (select wip_entity_id
8040 from wip_flow_schedules
8041 where wip_entity_id = supply_source_header_id
8042 and demand_source_line = nvl(p_line_id,-1))
8043 )
8044 or nvl(p_use_open_quantity,'N') = 'Y') ; /*Bug 3042045 - do not check supply source for ATO items*/
8045
8046 if p_use_open_quantity = 'Y' then
8047 SELECT nvl(SUM(mtrl.primary_quantity),0)
8048 INTO l_wip_state_qty
8049 FROM mtl_txn_request_lines mtrl, wms_license_plate_numbers wlpn, wip_lpn_completions wlc
8050 WHERE mtrl.organization_id = p_org_id
8051 AND mtrl.inventory_item_id = p_item_id
8052 AND NVL(mtrl.quantity_delivered, 0) = 0
8053 AND mtrl.line_status <> inv_globals.g_to_status_closed
8054 AND mtrl.lpn_id = wlpn.lpn_id
8055 AND wlpn.lpn_context = 2 -- WIP
8056 AND wlc.header_id = mtrl.reference_id
8057 AND wlc.wip_entity_id = mtrl.txn_source_id
8058 AND wlc.lpn_id = mtrl.lpn_id
8059 AND wlc.inventory_item_id = mtrl.inventory_item_id
8060 AND wlc.organization_id = mtrl.organization_id
8061 AND wlc.demand_source_line = p_line_id
8062 AND wlc.wip_entity_type = 4;
8063
8064 l_reserved_qty := l_reserved_qty + l_wip_state_qty;
8065 end if;
8066
8067 RETURN l_reserved_qty;
8068
8069 END Get_Reservation_Quantity;
8070
8071 FUNCTION check_std_holds(p_line_id IN NUMBER) return NUMBER
8072 IS
8073 CURSOR OM_LINE_STD_HOLDS IS
8074 SELECT count(*)
8075 FROM oe_hold_sources_all hs,
8076 oe_order_holds_all oh,
8077 oe_hold_definitions hd
8078 WHERE oh.hold_source_id = hs.hold_source_id
8079 AND oh.line_id = p_line_id
8080 AND oh.hold_release_id IS NULL
8081 AND hd.item_type = 'OEOL'
8082 AND hd.activity_name = 'LINE_SCHEDULING'
8083 AND hd.hold_id = hs.hold_id;
8084
8085 l_cnt NUMBER;
8086 l_return NUMBER;
8087 BEGIN
8088 OPEN OM_LINE_STD_HOLDS;
8089 FETCH OM_LINE_STD_HOLDS INTO l_cnt;
8090 CLOSE OM_LINE_STD_HOLDS;
8091 if( l_cnt > 0) then
8092 l_return := 1;
8093 else
8094 l_return := 0;
8095 end if;
8096
8097 return l_return;
8098 EXCEPTION WHEN OTHERS THEN
8099 return 0;
8100
8101 END check_std_holds;
8102
8103 /*
8104 * Check holds on order header/line
8105 * if p_wf_item and p_wf_activity both are null
8106 * then only check generic holds. Otherwise
8107 * check for both generic and the specifid activity holds
8108 *
8109 */
8110 FUNCTION Check_Holds(
8111 p_header_id IN NUMBER,
8112 p_line_id IN NUMBER ,
8113 p_wf_item IN VARCHAR2,
8114 p_wf_activity IN VARCHAR2)
8115 return number
8116 IS
8117 l_check_holds_result VARCHAR2(30);
8118 l_return_status VARCHAR2(30);
8119 l_msg_count NUMBER;
8120 l_msg_data VARCHAR2(2000);
8121 l_return NUMBER;
8122
8123 BEGIN
8124 OE_HOLDS_PUB.Check_Holds
8125 (p_api_version => 1.0
8126 ,p_header_id => p_header_id
8127 ,p_line_id => p_line_id
8128 ,p_wf_item => p_wf_item
8129 ,p_wf_activity => p_wf_activity
8130 ,x_result_out => l_check_holds_result
8131 ,x_return_status => l_return_status
8132 ,x_msg_count => l_msg_count
8133 ,x_msg_data => l_msg_data
8134 );
8135
8136 l_return := 1;
8137 IF ( l_return_status = FND_API.G_RET_STS_SUCCESS AND
8138 l_check_holds_result = FND_API.G_FALSE ) THEN
8139 l_return := 0;
8140 END IF;
8141
8142 return l_return;
8143 EXCEPTION
8144 WHEN OTHERS THEN
8145 mrp_util.mrp_log('Excpetion during checking holds ' || sqlerrm );
8146 return 1;
8147 END Check_Holds;
8148
8149 FUNCTION get_routing_designator(
8150 p_item_id IN NUMBER,
8151 p_organization_id IN NUMBER,
8152 p_line_id IN NUMBER)
8153 RETURN VARCHAR2 IS
8154
8155 CURSOR C_ALT IS
8156 SELECT alternate_routing_designator
8157 FROM bom_operational_routings
8158 WHERE line_id = p_line_id
8159 AND assembly_item_id = p_item_id
8160 AND organization_id = p_organization_id
8161 AND cfm_routing_flag = 1
8162 ORDER BY alternate_routing_designator desc;
8163
8164 l_alt_rtg_desig VARCHAR2(10) := null;
8165 BEGIN
8166 OPEN C_ALT;
8167 LOOP
8168 FETCH C_ALT into l_alt_rtg_desig;
8169 /* We just want one row so exit */
8170 EXIT;
8171 END LOOP;
8172 CLOSE C_ALT;
8173
8174 RETURN l_alt_rtg_desig;
8175
8176 END get_routing_designator;
8177
8178
8179 END MRP_Flow_Schedule_Util;