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