1 PACKAGE BODY GMD_RECIPE_HEADER_PVT AS
2 /* $Header: GMDVRCHB.pls 120.10 2009/03/23 17:48:43 rnalla ship $ */
3
4
5 /* Define any variable specific to this package */
6 G_PKG_NAME CONSTANT VARCHAR2(30) := 'GMD_RECIPE_HEADER_PVT' ;
7
8 --Bug 3222090, NSRIVAST 20-FEB-2004, BEGIN
9 --Forward declaration.
10 FUNCTION set_debug_flag RETURN VARCHAR2;
11 l_debug VARCHAR2(1) := set_debug_flag;
12
13 FUNCTION set_debug_flag RETURN VARCHAR2 IS
14 l_debug VARCHAR2(1):= 'N';
15 BEGIN
16 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
17 l_debug := 'Y';
18 END IF;
19 RETURN l_debug;
20 END set_debug_flag;
21 --Bug 3222090, NSRIVAST 20-FEB-2004, END
22
23
24 /* ===================================================*/
25 /* Procedure: */
26 /* Create_Recipe_Header */
27 /* DESCRIPTION: */
28 /* This PL/SQL procedure is responsible for */
29 /* inserting a recipe */
30 /* HISTORY: */
31 /* 09/16/2003 Jeff Baird Bug #3136456 */
32 /* Changed owner from created_by. */
33 /* */
34 /* ===================================================*/
35 /* Start of commments */
36 /* API name : Create_Recipe_Header */
37 /* Type : Private */
38 /* Function : */
39 /* Paramaters : */
40 /* p_recipe_tbl IN Required */
41 /* */
42 /* OUT x_return_status */
43 /* */
44 /* */
45 /* Notes : */
46 /* End of comments */
47 /* ===================================================*/
48
49 PROCEDURE CREATE_RECIPE_HEADER
50 ( p_recipe_header_rec IN GMD_RECIPE_HEADER.recipe_hdr ,
51 p_recipe_hdr_flex_rec IN GMD_RECIPE_HEADER.flex ,
52 x_return_status OUT NOCOPY VARCHAR2
53 ) IS
54
55 /* Defining all local variables */
56 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_RECIPE_HEADER';
57 l_user_id fnd_user.user_id%TYPE := 0;
58 l_surrogate gmd_recipes.recipe_id%TYPE := 0;
59
60
61 /* Recipe variables */
62 l_recipe_id gmd_recipes.recipe_id%TYPE := 0;
63
64 /* Formula variables */
65 l_formula_id fm_form_mst.formula_id%TYPE := 0;
66 l_formula_no fm_form_mst.formula_no%TYPE;
67 l_formula_vers fm_form_mst.formula_vers%TYPE;
68
69 /* Routing variables */
70 l_routing_id fm_rout_hdr.routing_id%TYPE := 0;
71 l_routing_no fm_rout_hdr.routing_no%TYPE;
72 l_routing_vers fm_rout_hdr.routing_vers%TYPE;
73
74 /* Organization related */
75 l_plant_ind NUMBER;
76 l_process_loss NUMBER;
77 l_out_rec gmd_parameters_dtl_pkg.parameter_rec_type;
78 l_fixed_process_loss NUMBER; /* B6811759 */
79 l_fixed_process_loss_uom VARCHAR2(3); /*B6811759 */
80 /* Variables used for defining status */
81 l_return_status varchar2(1) := FND_API.G_RET_STS_SUCCESS;
82 l_return_code NUMBER := 0;
83 l_rowid VARCHAR2(32);
84
85 /* Error message count and data */
86 l_msg_count NUMBER;
87 l_msg_data VARCHAR2(2000);
88
89 l_val_rt_status BOOLEAN;
90 BEGIN
91 /* Initialize API return status to success */
92 x_return_status := FND_API.G_RET_STS_SUCCESS;
93 -- Bug 2099699. Sukarna Reddy dt 02/19/02.
94 -- Check if proper routing is associated with recipe
95 IF (p_recipe_header_rec.routing_id IS NOT NULL) THEN
96 l_val_rt_status := gmd_recipe_val.check_routing_validity
97 (p_recipe_header_rec.routing_id,
98 NVL(p_recipe_header_rec.recipe_Status,
99 '100'));
100 IF (NOT l_val_rt_status) THEN
101 FND_MESSAGE.SET_NAME('GMD', 'GMD_RECIPE_ROUTING_INVALID');
102 FND_MSG_PUB.ADD;
103 RAISE FND_API.G_EXC_ERROR;
104 END IF;
105 END IF;
106 -- End bug 2099699
107
108 /* ====================================== */
109 /* Either a recipe no or version must be */
110 /* passed tp create a recipe */
111 /* ====================================== */
112 If ((p_recipe_header_rec.recipe_no IS NULL )
113 OR (p_recipe_header_rec.recipe_version IS NULL)) THEN
114 x_return_status := FND_API.G_RET_STS_ERROR;
115 FND_MESSAGE.SET_NAME('GMD', 'GMD_RECIPE_NOT_VALID');
116 FND_MSG_PUB.Add;
117 END IF;
118
119 /* ================================ */
120 /* Based on Recipe_no and */
121 /* Recipe_version check if a recipe */
122 /* already exists in the database */
123 /* ================================= */
124 GMD_RECIPE_VAL.recipe_name
125 ( p_api_version => 1.0,
126 p_init_msg_list => FND_API.G_FALSE,
127 p_commit => FND_API.G_FALSE,
128 p_recipe_no => p_recipe_header_rec.recipe_no,
129 p_recipe_version => p_recipe_header_rec.recipe_version,
130 x_return_status => l_return_status,
131 x_msg_count => l_msg_count,
132 x_msg_data => l_msg_data,
133 x_return_code => l_return_code,
134 x_recipe_id => l_recipe_id);
135
136 IF (l_recipe_id IS NOT NULL) THEN
137 x_return_status := FND_API.G_RET_STS_ERROR;
138 FND_MESSAGE.SET_NAME('GMD', 'GMD_DUP_RECIPE');
139 FND_MSG_PUB.ADD;
140 END IF;
141
142 l_formula_id := p_recipe_header_rec.formula_id;
143
144
145 /* ====================================== */
146 /* If Routing details are provided, */
147 /* Check if it exists and is valid. */
148 /* Procedure returns routing id if given */
149 /* only number and vers. Routing is optional in recipe. */
150 /* If all three details given, only */
151 /* routing no and vers will be validated. */
152 /* ====================================== */
153
154 /* set l_routing_id to routing_id in record. If Check_Routing procedure */
155 /* finds the id, l_routing_id will be overwritten/given a value. */
156 /* Bug 1745549 L.R.Jackson Apr2001 */
157 l_routing_id := p_recipe_header_rec.routing_id;
158
159 IF (p_recipe_header_rec.routing_id IS NOT NULL) OR
160 (p_recipe_header_rec.routing_no IS NOT NULL AND
161 p_recipe_header_rec.routing_vers IS NOT NULL)
162 THEN
163 GMDRTVAL_PUB.check_routing( pRouting_no => p_recipe_header_rec.routing_no,
164 pRouting_vers => p_recipe_header_rec.routing_vers,
165 xRouting_id => l_routing_id,
166 xReturn_status=> l_return_status);
167 /* if error returned OR if no id given but given number and not version
168 or version and no number THEN give error message */
169 IF (l_return_status <> 'S') OR
170 (p_recipe_header_rec.routing_id IS NULL AND
171 NOT (p_recipe_header_rec.routing_no IS NOT NULL AND
172 p_recipe_header_rec.routing_vers IS NOT NULL))
173 THEN
174 FND_MESSAGE.SET_NAME('GMD', 'GMD_RECIPE_ROUTING_INVALID');
175 FND_MSG_PUB.ADD;
176 END IF; -- end setting error message
177 END IF; -- end if routing info is given
178
179 /* ==================================== */
180 /* Check if recipe description has been */
181 /* provided. */
182 /* ==================================== */
183 If (p_recipe_header_rec.recipe_description IS NOT NULL) THEN
184 GMD_RECIPE_VAL.recipe_description
185 ( p_api_version => 1.0,
186 p_init_msg_list => FND_API.G_FALSE,
187 p_commit => FND_API.G_FALSE,
188 p_recipe_description => p_recipe_header_rec.recipe_description,
189 x_return_status => l_return_status,
190 x_msg_count => l_msg_count,
191 x_msg_data => l_msg_data,
192 x_return_code => l_return_code);
193
194 IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
195 x_return_status := FND_API.G_RET_STS_ERROR;
196 FND_MESSAGE.SET_NAME('GMD', 'GMD_RECIPE_DESCRIPTION');
197 FND_MSG_PUB.ADD;
198 END IF;
199 ELSE
200 x_return_status := FND_API.G_RET_STS_ERROR;
201 FND_MESSAGE.SET_NAME('GMD', 'GMD_RECIPE_DECRIPTION');
202 FND_MSG_PUB.ADD;
203 END IF;
204
205 /* ============================================ */
206 /* Validate Owner and Creator Organization code. */
207 /* While creating a recipe the */
208 /* owner_orgn_code and creation_orgn_code */
209 /* is the creators orgn code. */
210 /* ============================================ */
211
212 gmd_api_grp.fetch_parm_values ( P_orgn_id => p_recipe_header_rec.owner_organization_id,
213 X_out_rec => l_out_rec,
214 X_return_status => l_return_status);
215
216 /*IF (l_out_rec.plant_ind <> 1 OR l_out_rec.lab_ind <> 1) THEN
217 x_return_status := FND_API.G_RET_STS_ERROR;
218 FND_MESSAGE.SET_NAME('GMD', 'GMD_RECIPE_ORGN_INVALID');
219 FND_MSG_PUB.ADD;
220 END IF;*/
221
222 IF (x_return_status = 'S') THEN
223 /* ===================================== */
224 /* Get the recipe_id */
225 /* Sequence generator creator creates a */
226 /* recipe id */
227 /* ===================================== */
228 IF (p_recipe_header_rec.recipe_id IS NULL) THEN
229 SELECT gmd_recipe_id_s.nextval INTO l_recipe_id
230 FROM sys.dual;
231 ELSE
232 l_recipe_id := p_recipe_header_rec.recipe_id;
233 END IF;
234
235 /* Making an insert into Recipe table */
236 /* To incorporate MLS, we need to call the */
237 /* on-insert pkg to insert into <Recipe_b> */
238 /* and <Recipe_Tl> table */
239 /* Text Code is handled by another package. */
240
241 GMD_RECIPES_MLS.INSERT_ROW(
242 X_ROWID => l_rowid,
243 X_RECIPE_ID => l_recipe_id,
244 X_RECIPE_NO => p_recipe_header_rec.recipe_no,
245 X_RECIPE_VERSION => p_recipe_header_rec.recipe_version,
246 X_OWNER_ORGANIZATION_ID => p_recipe_header_rec.owner_organization_id,
247 X_CREATION_ORGANIZATION_ID => p_recipe_header_rec.creation_organization_id,
248 X_FORMULA_ID => l_formula_id,
249 X_ROUTING_ID => l_routing_id,
250 X_PROJECT_ID => NULL,
251 X_RECIPE_STATUS => p_recipe_header_rec.recipe_status,
252 X_CALCULATE_STEP_QUANTITY => p_recipe_header_rec.calculate_step_quantity,
253 X_PLANNED_PROCESS_LOSS => p_recipe_header_rec.planned_process_loss,
254 X_CONTIGUOUS_IND => p_recipe_header_rec.contiguous_ind,
255 X_ENHANCED_PI_IND => p_recipe_header_rec.enhanced_pi_ind,
256 X_RECIPE_TYPE => p_recipe_header_rec.recipe_type,
257 X_RECIPE_DESCRIPTION => p_recipe_header_rec.recipe_description,
258 X_OWNER_LAB_TYPE => p_recipe_header_rec.owner_lab_type,
259 X_ATTRIBUTE_CATEGORY => p_recipe_hdr_flex_rec.attribute_category,
260 X_ATTRIBUTE1 => p_recipe_hdr_flex_rec.attribute1,
261 X_ATTRIBUTE2 => p_recipe_hdr_flex_rec.attribute2,
262 X_ATTRIBUTE3 => p_recipe_hdr_flex_rec.attribute3,
263 X_ATTRIBUTE4 => p_recipe_hdr_flex_rec.attribute4,
264 X_ATTRIBUTE5 => p_recipe_hdr_flex_rec.attribute5,
265 X_ATTRIBUTE6 => p_recipe_hdr_flex_rec.attribute6,
266 X_ATTRIBUTE7 => p_recipe_hdr_flex_rec.attribute7,
267 X_ATTRIBUTE8 => p_recipe_hdr_flex_rec.attribute8,
268 X_ATTRIBUTE9 => p_recipe_hdr_flex_rec.attribute9,
269 X_ATTRIBUTE10 => p_recipe_hdr_flex_rec.attribute10,
270 X_ATTRIBUTE11 => p_recipe_hdr_flex_rec.attribute11,
271 X_ATTRIBUTE12 => p_recipe_hdr_flex_rec.attribute12,
272 X_ATTRIBUTE13 => p_recipe_hdr_flex_rec.attribute13,
273 X_ATTRIBUTE14 => p_recipe_hdr_flex_rec.attribute14,
274 X_ATTRIBUTE15 => p_recipe_hdr_flex_rec.attribute15,
275 X_ATTRIBUTE16 => p_recipe_hdr_flex_rec.attribute16,
276 X_ATTRIBUTE17 => p_recipe_hdr_flex_rec.attribute17,
277 X_ATTRIBUTE18 => p_recipe_hdr_flex_rec.attribute18,
278 X_ATTRIBUTE19 => p_recipe_hdr_flex_rec.attribute19,
279 X_ATTRIBUTE20 => p_recipe_hdr_flex_rec.attribute20,
280 X_ATTRIBUTE21 => p_recipe_hdr_flex_rec.attribute21,
281 X_ATTRIBUTE22 => p_recipe_hdr_flex_rec.attribute22,
282 X_ATTRIBUTE23 => p_recipe_hdr_flex_rec.attribute23,
283 X_ATTRIBUTE24 => p_recipe_hdr_flex_rec.attribute24,
284 X_ATTRIBUTE25 => p_recipe_hdr_flex_rec.attribute25,
285 X_ATTRIBUTE26 => p_recipe_hdr_flex_rec.attribute26,
286 X_ATTRIBUTE27 => p_recipe_hdr_flex_rec.attribute27,
287 X_ATTRIBUTE28 => p_recipe_hdr_flex_rec.attribute28,
288 X_ATTRIBUTE29 => p_recipe_hdr_flex_rec.attribute29,
289 X_ATTRIBUTE30 => p_recipe_hdr_flex_rec.attribute30,
290 X_DELETE_MARK => 0,
291 X_TEXT_CODE => p_recipe_header_rec.text_code,
292 X_OWNER_ID => NVL(p_recipe_header_rec.owner_id
293 ,gmd_api_grp.user_id),
294 X_CREATION_DATE => NVL(p_recipe_header_rec.creation_date
295 ,SYSDATE),
296 X_CREATED_BY => NVL(p_recipe_header_rec.created_by
297 ,gmd_api_grp.user_id),
298 X_LAST_UPDATE_DATE => NVL(p_recipe_header_rec.last_update_date
299 ,SYSDATE),
300 X_LAST_UPDATED_BY => NVL(p_recipe_header_rec.last_updated_by
301 ,gmd_api_grp.user_id),
302 X_LAST_UPDATE_LOGIN => NVL(p_recipe_header_rec.last_update_login
303 ,gmd_api_grp.login_id),
304 X_FIXED_PROCESS_LOSS => p_recipe_header_rec.fixed_process_loss,
305 X_FIXED_PROCESS_LOSS_UOM => p_recipe_header_rec.fixed_process_loss_uom
306 );
307 END IF;
308 EXCEPTION
309 WHEN FND_API.G_EXC_ERROR THEN
310 x_return_status := FND_API.G_RET_STS_ERROR;
311 WHEN OTHERS THEN
312 fnd_msg_pub.add_exc_msg (G_pkg_name, l_api_name);
313 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
314 END CREATE_RECIPE_HEADER;
315
316
317 /* ================================================== */
318 /* Procedure: */
319 /* Update_Recipe_Header */
320 /* */
321 /* DESCRIPTION: */
322 /* This PL/SQL procedure is responsible for */
323 /* updating a recipe */
324 /* */
325 /* ================================================== */
326 /* Start of commments */
327 /* API name : Update_Recipe_Header */
328 /* Type : Private */
329 /* Function : */
330 /* Paramaters : */
331 /* p_recipe_tbl IN Required */
332 /* */
333 /* OUT x_return_status */
334 /* */
335 /* */
336 /* Notes : */
337 /* Sukarna Reddy 03/14/02. Bug 2099699. Modified */
338 /* to include validation for routing. */
339 /* Vipul Vaish 02/12/04 BUG#3427313 */
340 /* Modified CURSOR cur_getrcprout - Added one more */
341 /* condition in the Where clause. */
342 /* KSHUKLA added as per as 5138316 to incorporate */
343 /* deletion of the records for step and step*/
344 /* material association if the routing is */
345 /* nullified. 10-APR-2006 */
346 /* End of comments */
347
348 PROCEDURE UPDATE_RECIPE_HEADER
349 ( p_recipe_header_rec IN GMD_RECIPE_HEADER.recipe_hdr ,
350 p_flex_header_rec IN GMD_RECIPE_HEADER.update_flex ,
351 x_return_status OUT NOCOPY VARCHAR2
352 ) IS
353
354 /* Defining all local variables */
355 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_RECIPE_HEADER';
356
357 l_user_id fnd_user.user_id%TYPE := 0;
358 l_surrogate gmd_recipes.recipe_id%TYPE := 0;
359
360 l_meaning GMD_STATUS.meaning%TYPE;
361 l_description GMD_STATUS.description%TYPE;
362
363 /* Formula variables */
364 l_formula_id fm_form_mst.formula_id%TYPE := 0;
365 l_formula_no fm_form_mst.formula_no%TYPE;
366 l_formula_vers fm_form_mst.formula_vers%TYPE;
367
368 /* Routing variables */
369 l_routing_id fm_rout_hdr.routing_id%TYPE := 0;
370 l_routing_no fm_rout_hdr.routing_no%TYPE;
371 l_routing_vers fm_rout_hdr.routing_vers%TYPE;
372
373
374 /* Organization related */
375 l_plant_ind NUMBER;
376 l_out_rec gmd_parameters_dtl_pkg.parameter_rec_type;
377
378 /* Variables used for defining status */
379 l_return_status varchar2(1) := FND_API.G_RET_STS_SUCCESS;
380 l_return_code NUMBER := 0;
381 l_rowid VARCHAR2(32);
382
383 /* Error message count and data */
384 l_msg_count NUMBER;
385 l_msg_data VARCHAR2(2000);
386
387
388 CURSOR cur_getrcprout(pRecipe_id GMD_RECIPES.recipe_id%TYPE) IS
389 Select r.routing_id,b.status_type
390 From GMD_RECIPES r,gmd_status b
391 Where Recipe_id = pRecipe_id
392 And r.Recipe_status = b.Status_code;--BUG#3427313
393
394 -- Cursor and declaration as per as Bug 5138316 KSHUKLA
395 CURSOR Cur_get_formula(vRecipe_id NUMBER, vFormula_id NUMBER) IS
396 SELECT 1
397 FROM gmd_recipe_step_materials a, fm_matl_dtl b
398 WHERE a.recipe_id = vRecipe_id
399 AND a.formulaline_id = b.formulaline_id
400 AND b.formula_id <>vFormula_id ;
401
402 CURSOR Cur_get_formula_val(vRecipe_id NUMBER, vFormula_id NUMBER) IS
403 SELECT 1
404 FROM gmd_recipe_validity_rules a
405 WHERE a.recipe_id = vRecipe_id
406 AND item_id not in (select item_id
407 from fm_matl_dtl
408 where line_type = 1
409 and formula_id = vFormula_id);
410
411 CURSOR Cur_check_routing(vRecipe_id NUMBER, vRouting_id NUMBER) IS
412 SELECT 1
413 FROM gmd_recipe_step_materials a, fm_rout_dtl b
414 WHERE a.recipe_id = vRecipe_id
415 AND a.routingstep_id = b.routingstep_id
416 AND b.routing_id <> NVL(vRouting_id, 0);
417
418 v_dummy NUMBER;
419 l_deleteRoutDependent BOOLEAN := FALSE;
420 l_delValRule BOOLEAN := FALSE;
421 -- End of declaration as per as 5138316 KSHUKLA
422 l_val_rt_status BOOLEAN;
423 x_routing_id NUMBER;
424 l_status_type gmd_status.status_type%type;
425 BEGIN
426 /* Initialize API return status to success */
427 x_return_status := FND_API.G_RET_STS_SUCCESS;
428
429 -- Bug 2099699. Sukarna Reddy dt 02/19/02.
430 -- Check if proper routing is associated with recipe
431 IF (p_recipe_header_rec.routing_id IS NOT NULL) THEN
432 -- Get the routing if one existed before for this recipe.
433 OPEN cur_getrcprout(p_recipe_header_rec.recipe_id);
434 FETCH Cur_getrcprout INTO x_routing_id,l_status_type;
435 CLOSE Cur_getrcprout;
436
437 --Check if we are associating routing with recipe for the first time.
438 -- Check if new routing is different from old routing if one
439 -- is already associated with recipe.
440 -- This check will work for third party and also when called from form.
441 IF (x_routing_id IS NULL) THEN
442 l_val_rt_status := gmd_recipe_val.check_routing_validity
443 (p_recipe_header_rec.routing_id,
444 p_recipe_header_rec.recipe_Status);
445 IF (NOT l_val_rt_status) THEN
446 FND_MESSAGE.SET_NAME('GMD', 'GMD_RECIPE_ROUTING_INVALID');
447 FND_MSG_PUB.ADD;
448 RAISE FND_API.G_EXC_ERROR;
449 END IF;
450 ELSIF (l_status_type IN ('700','900')) THEN
451 IF (x_routing_id IS NOT NULL AND
452 p_recipe_header_rec.routing_id IS NOT NULL AND
453 x_routing_id <> p_recipe_header_rec.routing_id) THEN
454 FND_MESSAGE.SET_NAME('GMD','GMD_RECIPE_INVALID_MODE');
455 FND_MSG_PUB.ADD;
456 RAISE FND_API.G_EXC_ERROR;
457 END IF;
458 END IF;
459 END IF;
460 -- End bug 2099699
461
462 /* ============================================= */
463 /* If Recipe is frozen no updates can be made */
464 /* This needs to be a part of the GMD_COMMON_VAL , */
465 /* can be used by formulas and recipes */
466 /* ============================================= */
467 GMD_COMMON_VAL.Get_Status
468 ( Status_code => p_recipe_header_rec.Recipe_status ,
469 Meaning => l_meaning ,
470 Description => l_description ,
471 x_return_status => l_return_status
472 );
473
474 IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
475 x_return_status := FND_API.G_RET_STS_ERROR;
476 END IF;
477
478 IF (p_recipe_header_rec.Recipe_status BETWEEN '900' and '999') THEN
479 x_return_status := FND_API.G_RET_STS_ERROR;
480 FND_MESSAGE.SET_NAME('GMD', 'GMD_RECIPE_UPDATE_NOT_ALLOWED');
481 FND_MSG_PUB.ADD;
482 END IF;
483
484 l_return_status := 'S';
485
486 /* ====================================== */
487 /* If Routing details are provided, */
488 /* Check if it exists and is valid. */
489 /* Procedure returns routing id if given */
490 /* only number and vers. Routing is optional in recipe. */
491 /* If all three details given, only */
492 /* routing no and vers will be validated. */
493 /* ====================================== */
494
495 /* set l_routing_id to routing_id in record. If Check_Routing procedure */
496 /* finds the id, l_routing_id will be overwritten/given a value. */
497 l_routing_id := p_recipe_header_rec.routing_id;
498
499 IF (p_recipe_header_rec.routing_id IS NOT NULL) OR
500 (p_recipe_header_rec.routing_no IS NOT NULL AND
501 p_recipe_header_rec.routing_vers IS NOT NULL)
502 THEN
503 GMDRTVAL_PUB.check_routing
504 ( pRouting_no => p_recipe_header_rec.routing_no,
505 pRouting_vers => p_recipe_header_rec.routing_vers,
506 xRouting_id => l_routing_id,
507 xReturn_status=> l_return_status);
508 /* if error returned OR if no id given but given number and not version
509 or version and no number THEN give error message */
510 IF (l_return_status <> 'S') OR
511 (p_recipe_header_rec.routing_id IS NULL AND
512 NOT (p_recipe_header_rec.routing_no IS NOT NULL AND
513 p_recipe_header_rec.routing_vers IS NOT NULL))
514 THEN
515 FND_MESSAGE.SET_NAME('GMD', 'GMD_RECIPE_ROUTING_INVALID');
516 FND_MSG_PUB.ADD;
517 END IF; -- end setting error message
518 END IF; -- end if routing info is given
519
520 /* ===================================== */
521 /* Validate Owner and Creators */
522 /* Organization code */
523 /* ===================================== */
524
525 gmd_api_grp.fetch_parm_values ( P_orgn_id => p_recipe_header_rec.owner_organization_id,
526 X_out_rec => l_out_rec,
527 X_return_status => l_return_status);
528
529 /*IF (l_out_rec.plant_ind <> 1 OR l_out_rec.lab_ind <> 1) THEN
530 x_return_status := FND_API.G_RET_STS_ERROR;
531 FND_MESSAGE.SET_NAME('GMD', 'GMD_RECIPE_ORGN_INVALID');
532 FND_MSG_PUB.ADD;
533 END IF;*/
534
535 /* Making an updates into Recipe table */
536 /* To incorporate MLS, we need to call the */
537 /* on-insert pkg to insert into <Recipe_b> */
538 /* and <Recipe_Tl> table */
539 /* Text Code is handled by another package. */
540 IF (x_return_status = 'S') THEN
541 GMD_RECIPES_MLS.UPDATE_ROW(
542 X_RECIPE_ID => p_recipe_header_rec.recipe_id,
543 X_OWNER_ID => p_recipe_header_rec.owner_id,
544 X_OWNER_LAB_TYPE => p_recipe_header_rec.owner_lab_type,
545 X_DELETE_MARK => p_recipe_header_rec.delete_mark,
546 X_RECIPE_NO => p_recipe_header_rec.recipe_no,
547 X_RECIPE_VERSION => p_recipe_header_rec.recipe_version,
548 X_OWNER_ORGANIZATION_ID => p_recipe_header_rec.owner_organization_id,
549 X_CREATION_ORGANIZATION_ID => p_recipe_header_rec.creation_organization_id,
550 X_FORMULA_ID => p_recipe_header_rec.formula_id,
551 X_ROUTING_ID => l_routing_id,
552 X_PROJECT_ID => NULL,
553 X_RECIPE_STATUS => p_recipe_header_rec.recipe_status,
554 X_CALCULATE_STEP_QUANTITY => p_recipe_header_rec.calculate_step_quantity,
555 X_PLANNED_PROCESS_LOSS => p_recipe_header_rec.planned_process_loss,
556 X_CONTIGUOUS_IND => p_recipe_header_rec.contiguous_ind,
557 X_ENHANCED_PI_IND => p_recipe_header_rec.enhanced_pi_ind,
558 X_RECIPE_TYPE => p_recipe_header_rec.recipe_type,
559 X_RECIPE_DESCRIPTION => p_recipe_header_rec.recipe_description,
560 X_ATTRIBUTE_CATEGORY => p_flex_header_rec.attribute_category,
561 X_ATTRIBUTE1 => p_flex_header_rec.attribute1,
562 X_ATTRIBUTE2 => p_flex_header_rec.attribute2,
563 X_ATTRIBUTE3 => p_flex_header_rec.attribute3,
564 X_ATTRIBUTE4 => p_flex_header_rec.attribute4,
565 X_ATTRIBUTE5 => p_flex_header_rec.attribute5,
566 X_ATTRIBUTE6 => p_flex_header_rec.attribute6,
567 X_ATTRIBUTE7 => p_flex_header_rec.attribute7,
568 X_ATTRIBUTE8 => p_flex_header_rec.attribute8,
569 X_ATTRIBUTE9 => p_flex_header_rec.attribute9,
570 X_ATTRIBUTE10 => p_flex_header_rec.attribute10,
571 X_ATTRIBUTE11 => p_flex_header_rec.attribute11,
572 X_ATTRIBUTE12 => p_flex_header_rec.attribute12,
573 X_ATTRIBUTE13 => p_flex_header_rec.attribute13,
574 X_ATTRIBUTE14 => p_flex_header_rec.attribute14,
575 X_ATTRIBUTE15 => p_flex_header_rec.attribute15,
576 X_ATTRIBUTE16 => p_flex_header_rec.attribute16,
577 X_ATTRIBUTE17 => p_flex_header_rec.attribute17,
578 X_ATTRIBUTE18 => p_flex_header_rec.attribute18,
579 X_ATTRIBUTE19 => p_flex_header_rec.attribute19,
580 X_ATTRIBUTE20 => p_flex_header_rec.attribute20,
581 X_ATTRIBUTE21 => p_flex_header_rec.attribute21,
582 X_ATTRIBUTE22 => p_flex_header_rec.attribute22,
583 X_ATTRIBUTE23 => p_flex_header_rec.attribute23,
584 X_ATTRIBUTE24 => p_flex_header_rec.attribute24,
585 X_ATTRIBUTE25 => p_flex_header_rec.attribute25,
586 X_ATTRIBUTE26 => p_flex_header_rec.attribute26,
587 X_ATTRIBUTE27 => p_flex_header_rec.attribute27,
588 X_ATTRIBUTE28 => p_flex_header_rec.attribute28,
589 X_ATTRIBUTE29 => p_flex_header_rec.attribute29,
590 X_ATTRIBUTE30 => p_flex_header_rec.attribute30,
591 X_TEXT_CODE => p_recipe_header_rec.text_code,
592 X_LAST_UPDATE_DATE => NVL(p_recipe_header_rec.last_update_date
593 ,SYSDATE),
594 X_LAST_UPDATED_BY => p_recipe_header_rec.last_updated_by,
595 X_LAST_UPDATE_LOGIN => p_recipe_header_rec.last_update_login,
596 X_FIXED_PROCESS_LOSS => p_recipe_header_rec.fixed_process_loss,
597 X_FIXED_PROCESS_LOSS_UOM => p_recipe_header_rec.fixed_process_loss_uom
598 );
599
600 -- KSHUKLA added following as per as 5187046
601 l_formula_id := p_recipe_header_rec.formula_id;
602
603 /*-----------------------------------------
604 # KSHUKLA added the update statement
605 # While the recipe is deleted set the
606 # validity rules as deleted.
607 -------------------------------------------*/
608 IF p_recipe_header_rec.delete_mark =1 then
609 update GMD_RECIPE_VALIDITY_RULES
610 set DELETE_MARK = p_recipe_header_rec.delete_mark
611 WHERE recipe_id = p_recipe_header_rec.recipe_id;
612 END IF;
613
614 /*-----------------------------------------
615 # KSHUKLA added the delete statement
616 # as if the recipe is nullified
617 # delete the step and step material
618 # association records.
619 -------------------------------------------*/
620 -- bug 5138316 KSHUKLA
621
622 --Deleting the validity rules if formula_no or vers is updated
623 OPEN Cur_get_formula_val(p_recipe_header_rec.recipe_id, l_formula_id);
624 FETCH Cur_get_formula_val INTO v_dummy;
625 IF (Cur_get_formula_val%FOUND) THEN
626 l_delValRule := TRUE;
627 END IF;
628 CLOSE Cur_get_formula_val;
629
630 IF l_routing_id IS NULL THEN
631 l_deleteRoutDependent := TRUE;
632 ELSE
633 OPEN Cur_get_formula(p_recipe_header_rec.recipe_id, l_formula_id);
634 FETCH Cur_get_formula INTO v_dummy;
635 IF (Cur_get_formula%FOUND) THEN
636 l_deleteRoutDependent := TRUE;
637 ELSE
638 OPEN Cur_check_routing(p_recipe_header_rec.recipe_id, l_routing_id);
639 FETCH Cur_check_routing INTO v_dummy;
640 IF (Cur_check_routing%FOUND) THEN
641 l_deleteRoutDependent := TRUE;
642 END IF;
643 CLOSE Cur_check_routing;
644 END IF;
645 CLOSE Cur_get_formula;
646 END IF;
647 -- Execute the delete statements
648 IF l_deleteRoutDependent THEN
649 delete from gmd_recipe_routing_steps
650 WHERE recipe_id =p_recipe_header_rec.recipe_id;
651
652 delete from gmd_recipe_step_materials
653 WHERE recipe_id =p_recipe_header_rec.recipe_id;
654
655 END IF;
656
657 IF l_delValRule THEN
658 delete from gmd_recipe_validity_rules
659 where recipe_id =p_recipe_header_rec.recipe_id;
660 END IF;
661 --End bug 5138316 KSHUKLA
662
663 END IF; -- End if for x_return_status = 'S'
664 EXCEPTION
665 WHEN FND_API.G_EXC_ERROR THEN
666 x_return_status := FND_API.G_RET_STS_ERROR;
667 WHEN OTHERS THEN
668 fnd_msg_pub.add_exc_msg (G_pkg_name, l_api_name);
669 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
670 END UPDATE_RECIPE_HEADER;
671
672
673 PROCEDURE DELETE_RECIPE_HEADER
674 ( p_recipe_header_rec IN GMD_RECIPE_HEADER.recipe_hdr ,
675 p_flex_header_rec IN GMD_RECIPE_HEADER.update_flex ,
676 x_return_status OUT NOCOPY VARCHAR2
677 ) IS
678
679 BEGIN
680
681 /* Call the update API */
682 /* Delete in OPM world is not a physical delete. Its a logical delete */
683 /* i.e its an update with the delete_mark set to 1 */
684 /* Therefore prior to calling this procedure the delete_mark need to be set to 1 */
685
686 GMD_RECIPE_HEADER_PVT.UPDATE_RECIPE_HEADER
687 (p_recipe_header_rec => p_recipe_header_rec ,
688 p_flex_header_rec => p_flex_header_rec ,
689 x_return_status => x_return_status
690 );
691
692 END DELETE_RECIPE_HEADER;
693
694 /* ===================================================*/
695 /* Procedure: */
696 /* Copy_Recipe_Header */
697 /* DESCRIPTION: */
698 /* This PL/SQL procedure is responsible for */
699 /* inserting a recipe */
700 /* */
701 /* ===================================================*/
702 /* Start of commments */
703 /* API name : Copy_Recipe_Header */
704 /* Type : Private */
705 /* Function : */
706 /* Paramaters : */
707 /* p_recipe_tbl IN Required */
708 /* p_old_recipe_id */
709 /* p_recipe_header_rec */
710 /* p_recipe_hdr_flex_rec */
711 /* */
712 /* OUT x_return_status */
713 /* */
714 /* */
715 /* Notes : */
716 /* End of comments */
717 /* ===================================================*/
718
719 PROCEDURE COPY_RECIPE_HEADER
720 ( p_old_recipe_id IN GMD_RECIPES_B.recipe_id%TYPE ,
721 p_recipe_header_rec IN GMD_RECIPE_HEADER.recipe_hdr ,
722 p_recipe_hdr_flex_rec IN GMD_RECIPE_HEADER.flex ,
723 x_return_status OUT NOCOPY VARCHAR2
724 ) IS
725
726 CURSOR get_old_recipe_record(vRecipe_id GMD_RECIPES_B.recipe_id%TYPE) IS
727 SELECT *
728 FROM gmd_recipes
729 WHERE recipe_id = vRecipe_id;
730
731 CURSOR get_next_recipe_version (vRecipe_no GMD_RECIPES_B.recipe_no%TYPE) IS
732 SELECT max(Recipe_version) + 1
733 FROM gmd_recipes_b
734 WHERE Recipe_no = vRecipe_no;
735
736 CURSOR get_formula_no_and_vers(vFormula_id FM_FORM_MST_B.formula_id%TYPE) IS
737 SELECT formula_no, formula_vers
738 FROM fm_form_mst_b
739 WHERE formula_id = vFormula_id;
740
741 CURSOR get_formula_id(vFormula_no FM_FORM_MST_B.formula_no%TYPE,
742 vFormula_vers FM_FORM_MST_B.formula_vers%TYPE) IS
743 SELECT formula_id
744 FROM fm_form_mst_b
745 WHERE formula_no = vFormula_no
746 AND formula_vers = vFormula_vers;
747
748 CURSOR get_routing_id(vRouting_no GMD_ROUTINGS_B.routing_no%TYPE,
749 vRouting_vers GMD_ROUTINGS_B.routing_vers%TYPE) IS
750 SELECT routing_id
751 FROM gmd_routings_b
752 WHERE routing_no = vRouting_no
753 AND routing_vers = vRouting_vers;
754
755 CURSOR get_routing_no_and_vers(vRouting_id GMD_ROUTINGS_B.routing_id%TYPE) IS
756 SELECT routing_no, routing_vers
757 FROM gmd_routings_b
758 WHERE routing_id = vRouting_id;
759
760 /* Defining all local variables */
761 l_api_name CONSTANT VARCHAR2(30) := 'COPY_RECIPE_HEADER';
762 l_api_version CONSTANT NUMBER := 1.0;
763 l_return_code NUMBER;
764 l_msg_count NUMBER;
765 l_msg_data VARCHAR2(2000);
766 l_return_status VARCHAR2(1) := 'S';
767 l_rowcount NUMBER := 0;
768 l_plant_ind NUMBER;
769 l_changed_flag BOOLEAN := FALSE;
770
771 l_recipe_header_rec GMD_RECIPE_HEADER.recipe_hdr;
772 l_recipe_hdr_flex_rec GMD_RECIPE_HEADER.flex;
773
774 l_old_formula_no FM_FORM_MST_B.formula_no%TYPE;
775 l_old_formula_vers FM_FORM_MST_B.formula_vers%TYPE;
776 l_old_routing_no GMD_ROUTINGS_B.routing_no%TYPE;
777 l_old_routing_vers GMD_ROUTINGS_B.routing_vers%TYPE;
778 l_out_rec gmd_parameters_dtl_pkg.parameter_rec_type;
779
780 Copy_Recipe_Err EXCEPTION;
781
782 BEGIN
783
784 IF (l_debug = 'Y') THEN
785 gmd_debug.log_initialize('CopyRecipe');
786 END IF;
787
788 /* Get the old recipe record and compare with the new one that
789 is passed in. Compare the old record with the new record that
790 gets passed IN. If there are any difference (eg formula used in the new
791 Recipe might be different) replace the OLD value with the new one
792 (in this eg. we ould replace the old formula with the new one).
793 */
794 FOR old_recipe_rec IN get_old_recipe_record(p_old_recipe_id) LOOP
795 l_rowcount := l_rowcount + 1;
796 IF (l_debug = 'Y') THEN
797 gmd_debug.put_line('-- 1. Check for Recipe id ');
798 END IF;
799 IF p_recipe_header_rec.recipe_id = FND_API.G_MISS_NUM THEN
800 fnd_message.set_name ('GMI', 'GMI_MISSING');
801 fnd_message.set_token ('MISSING', 'RECIPE_ID');
802 fnd_msg_pub.add;
803 RAISE copy_recipe_err;
804 ELSE
805 IF p_recipe_header_rec.recipe_id IS NULL THEN
806 -- Generate Recipe Id from sequence
807 SELECT gmd_recipe_id_s.nextval
808 INTO l_recipe_header_rec.recipe_id
809 FROM sys.dual;
810 ELSE -- Recipe id has been provided
811 -- Chcek if Recipe id is not a negative number
812 IF p_recipe_header_rec.recipe_id < 0 THEN
813 fnd_message.set_name('GMD', 'GMD_RECIPE_NOT_VALID');
814 fnd_msg_pub.add;
815 RAISE copy_recipe_err;
816 END IF;
817
818 -- Check if this recipe id already exists in our system
819 gmd_recipe_val.recipe_exists
820 ( p_api_version => 1.0 ,
821 p_recipe_id => p_recipe_header_rec.Recipe_id ,
822 p_recipe_no => NULL ,
823 p_recipe_version => NULL ,
824 x_return_status => l_return_status ,
825 x_msg_count => l_msg_count ,
826 x_msg_data => l_msg_data ,
827 x_return_code => l_return_code ,
828 x_recipe_id => l_recipe_header_rec.recipe_id
829 );
830 -- Its ok only if the above validation returns an error.
831 IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
832 l_recipe_header_rec.recipe_id := p_recipe_header_rec.recipe_id;
833 ELSE -- This is an invalid Recipe Id
834 fnd_message.set_name('GMD', 'GMD_RECIPE_NOT_VALID');
835 fnd_msg_pub.add;
836 RAISE copy_recipe_err;
837 END IF; -- End condition when x_ret_sts is error
838 END IF; -- End condition when recipe id is null
839 END IF; -- End condition when recipe id is G_miss...
840
841 IF (l_debug = 'Y') THEN
842 gmd_debug.put_line('-- 2. Check for Recipe Number (recipe_no) ');
843 END IF;
844
845 IF p_recipe_header_rec.recipe_no = FND_API.G_MISS_CHAR THEN
846 fnd_message.set_name ('GMI', 'GMI_MISSING');
847 fnd_message.set_token ('MISSING', 'RECIPE_NO');
848 fnd_msg_pub.add;
849 RAISE copy_recipe_err;
850 ELSE
851 IF p_recipe_header_rec.recipe_no IS NULL THEN
852 l_recipe_header_rec.recipe_no := old_recipe_rec.recipe_no;
853 ELSIF -- recipe_no value is different from that in db
854 p_recipe_header_rec.recipe_no <> old_recipe_rec.recipe_no THEN
855 gmd_recipe_val.recipe_name
856 ( p_api_version => 1.0
857 ,p_recipe_no => p_recipe_header_rec.recipe_no
858 ,p_recipe_version => p_recipe_header_rec.recipe_version
859 ,p_action_code => 'I'
860 ,x_return_status => l_return_status
861 ,x_msg_count => l_msg_count
862 ,x_msg_data => l_msg_data
863 ,x_return_code => l_return_code
864 ,x_recipe_id => l_recipe_header_rec.recipe_id
865 );
866
867 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
868 l_recipe_header_rec.recipe_no := p_recipe_header_rec.recipe_no;
869 l_changed_flag := TRUE;
870 ELSE
871 fnd_message.set_name('GMD', 'GMD_RECIPE_NOT_VALID');
872 fnd_msg_pub.add;
873 RAISE copy_recipe_err;
874 END IF;
875 ELSE -- recipe_no value is same as that in db
876 l_recipe_header_rec.recipe_no := old_recipe_rec.recipe_no ;
877 END IF; -- End condition when recipe no is null
878 END IF; -- End condition when recipe_no is G_miss...
879
880
881 IF (l_debug = 'Y') THEN
882 gmd_debug.put_line('-- 3. Check for Recipe Version (recipe_version) ');
883 END IF;
884
885 IF p_recipe_header_rec.recipe_version = FND_API.G_MISS_NUM THEN
886 fnd_message.set_name ('GMI', 'GMI_MISSING');
887 fnd_message.set_token ('MISSING', 'RECIPE_VERSION');
888 fnd_msg_pub.add;
889 RAISE copy_recipe_err;
890 ELSE
891 IF p_recipe_header_rec.recipe_version IS NULL THEN
892 l_recipe_header_rec.recipe_version
893 := old_recipe_rec.recipe_version;
894 ELSIF -- recipe_version value is different from that in db
895 p_recipe_header_rec.recipe_version
896 <> old_recipe_rec.recipe_version THEN
897 gmd_recipe_val.recipe_name
898 ( p_api_version => 1.0
899 ,p_recipe_no => p_recipe_header_rec.recipe_no
900 ,p_recipe_version => p_recipe_header_rec.recipe_version
901 ,p_action_code => 'I'
902 ,x_return_status => l_return_status
903 ,x_msg_count => l_msg_count
904 ,x_msg_data => l_msg_data
905 ,x_return_code => l_return_code
906 ,x_recipe_id => l_recipe_header_rec.recipe_id
907 );
908
909 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
910 l_recipe_header_rec.recipe_version
911 := p_recipe_header_rec.recipe_version;
912 l_changed_flag := TRUE;
913 ELSE
914 fnd_message.set_name('GMD', 'GMD_RECIPE_NOT_VALID');
915 fnd_msg_pub.add;
916 RAISE copy_recipe_err;
917 END IF;
918 ELSE -- recipe_version value is same as that in db
919 l_recipe_header_rec.recipe_version
920 := old_recipe_rec.recipe_version ;
921 END IF; -- End condition when recipe_version is null
922
923 -- IF recipe_nos in db and new record are the same
924 IF UPPER(l_recipe_header_rec.recipe_no)
925 = UPPER(old_recipe_rec.recipe_no) THEN
926 OPEN get_next_recipe_version(l_recipe_header_rec.recipe_no);
927 FETCH get_next_recipe_version
928 INTO l_recipe_header_rec.recipe_version ;
929 IF get_next_recipe_version%NOTFOUND THEN
930 CLOSE get_next_recipe_version;
931 fnd_message.set_name('GMD', 'GMD_RECIPE_NOT_VALID');
932 fnd_msg_pub.add;
933 RAISE copy_recipe_err;
934 END IF;
935 CLOSE get_next_recipe_version;
936 END IF;
937 END IF; -- End condition when recipe_version is G_miss...
938
939 -- At this stage we should have the recipe_no , versions and the
940 -- recipe_id. If not raise an exception.
941 IF (l_recipe_header_rec.recipe_no IS NULL
942 OR l_recipe_header_rec.recipe_version IS NULL
943 OR l_recipe_header_rec.recipe_id IS NULL) THEN
944 fnd_message.set_name ('GMI', 'GMI_MISSING');
945 fnd_message.set_token ('MISSING', 'RECIPE_NO OR RECIPE_VERSION OR RECIPE_ID');
946 fnd_msg_pub.add;
947 RAISE copy_recipe_err;
948 END IF;
949
950 IF (l_debug = 'Y') THEN
951 gmd_debug.put_line('-- 3.1. Check for Recipe Description ');
952 END IF;
953
954 IF p_recipe_header_rec.recipe_description = FND_API.G_MISS_CHAR THEN
955 fnd_message.set_name ('GMI', 'GMI_MISSING');
956 fnd_message.set_token ('MISSING', 'RECIPE_DESCRIPTION');
957 fnd_msg_pub.add;
958 RAISE copy_recipe_err;
959 ELSE
960 IF p_recipe_header_rec.recipe_description IS NULL THEN
961 l_recipe_header_rec.recipe_description
962 := old_recipe_rec.recipe_description;
963 ELSIF -- if the description is different from that in db
964 p_recipe_header_rec.recipe_description
965 <> old_recipe_rec.recipe_description THEN
966 l_recipe_header_rec.recipe_description
967 := p_recipe_header_rec.recipe_description;
968 l_changed_flag := TRUE;
969 ELSE -- if the description is same as that in db
970 l_recipe_header_rec.recipe_description
971 := old_recipe_rec.recipe_description ;
972 END IF; -- End condition when recipe_desc is null
973 END IF; -- End condition when recipe_desc is G_miss...
974
975 IF (l_debug = 'Y') THEN
976 gmd_debug.put_line('-- 4. Check for user id ');
977 END IF;
978 IF p_recipe_header_rec.user_id = FND_API.G_MISS_NUM THEN
979 fnd_message.set_name ('GMI', 'GMI_MISSING');
980 fnd_message.set_token ('MISSING', 'USER ID');
981 fnd_msg_pub.add;
982 RAISE copy_recipe_err;
983 ELSE
984 IF p_recipe_header_rec.user_id IS NULL THEN
985 IF p_recipe_header_rec.user_name IS NOT NULL THEN
986 GMA_GLOBAL_GRP.get_who(p_recipe_header_rec.user_name
987 ,l_recipe_header_rec.user_id);
988 ELSE
989 l_recipe_header_rec.user_id := old_recipe_rec.created_by;
990 END IF;
991 END IF; -- End condition when user id is null
992 END IF; -- End condition when user id is G_miss...
993
994 IF (l_debug = 'Y') THEN
995 gmd_debug.put_line('-- 5. Check for owner orgn code ');
996 END IF;
997
998 IF p_recipe_header_rec.owner_organization_id = FND_API.G_MISS_NUM THEN
999 fnd_message.set_name ('GMI', 'GMI_MISSING');
1000 fnd_message.set_token ('MISSING', 'OWNER_ORGANIZATION_ID');
1001 fnd_msg_pub.add;
1002 RAISE copy_recipe_err;
1003 ELSE
1004 IF p_recipe_header_rec.owner_organization_id IS NULL THEN
1005 l_recipe_header_rec.owner_organization_id
1006 := old_recipe_rec.owner_organization_id;
1007 ELSIF -- the owner orgn code is diff from that in db
1008 p_recipe_header_rec.owner_organization_id
1009 <> old_recipe_rec.owner_organization_id THEN
1010
1011 gmd_api_grp.fetch_parm_values ( P_orgn_id => p_recipe_header_rec.owner_organization_id,
1012 X_out_rec => l_out_rec,
1013 X_return_status => l_return_status);
1014
1015 IF (l_out_rec.plant_ind <> 1 OR l_out_rec.lab_ind <> 1) THEN
1016 x_return_status := FND_API.G_RET_STS_ERROR;
1017 FND_MESSAGE.SET_NAME('GMD', 'GMD_RECIPE_ORGN_INVALID');
1018 FND_MSG_PUB.ADD;
1019 ELSE
1020 l_recipe_header_rec.owner_organization_id
1021 := p_recipe_header_rec.owner_organization_id;
1022 l_changed_flag := TRUE;
1023 END IF;
1024 ELSE -- the owner orgn code is same as that in db
1025 l_recipe_header_rec.owner_organization_id
1026 := old_recipe_rec.owner_organization_id;
1027 END IF; -- End condition when owner orgn code is null
1028 END IF; -- End condition when owner_orgn_code is G_miss...
1029
1030
1031 IF (l_debug = 'Y') THEN
1032 gmd_debug.put_line('-- 6. Check for creation orgn code ');
1033 END IF;
1034 IF p_recipe_header_rec.creation_organization_id = FND_API.G_MISS_NUM THEN
1035 fnd_message.set_name ('GMI', 'GMI_MISSING');
1036 fnd_message.set_token ('MISSING', 'CREATION_ORGANIZATION_ID');
1037 fnd_msg_pub.add;
1038 RAISE copy_recipe_err;
1039 ELSE
1040 IF p_recipe_header_rec.creation_organization_id IS NULL THEN
1041 l_recipe_header_rec.creation_organization_id
1042 := old_recipe_rec.creation_organization_id;
1043 ELSIF -- the creation orgn code is diff from that in db
1044 p_recipe_header_rec.creation_organization_id
1045 <> old_recipe_rec.creation_organization_id THEN
1046
1047 gmd_api_grp.fetch_parm_values (P_orgn_id => p_recipe_header_rec.creation_organization_id,
1048 X_out_rec => l_out_rec,
1049 X_return_status => l_return_status);
1050
1051 IF (l_out_rec.plant_ind <> 1 OR l_out_rec.lab_ind <> 1) THEN
1052 x_return_status := FND_API.G_RET_STS_ERROR;
1053 FND_MESSAGE.SET_NAME('GMD', 'GMD_RECIPE_ORGN_INVALID');
1054 FND_MSG_PUB.ADD;
1055 ELSE
1056 l_recipe_header_rec.creation_organization_id
1057 := p_recipe_header_rec.creation_organization_id;
1058 l_changed_flag := TRUE;
1059 END IF;
1060 ELSE -- the creation orgn code is same as that in db
1061 l_recipe_header_rec.creation_organization_id
1062 := old_recipe_rec.creation_organization_id;
1063 END IF; -- End condition when creation orgn code is null
1064 END IF; -- End condition when creation_orgn_code is G_miss...
1065
1066
1067 IF (l_debug = 'Y') THEN
1068 gmd_debug.put_line('-- 7. Check for formula id ');
1069 END IF;
1070 IF p_recipe_header_rec.formula_id = FND_API.G_MISS_NUM THEN
1071 fnd_message.set_name ('GMI', 'GMI_MISSING');
1072 fnd_message.set_token ('MISSING', 'FORMULA_ID');
1073 fnd_msg_pub.add;
1074 RAISE copy_recipe_err;
1075 ELSE
1076 IF p_recipe_header_rec.formula_id IS NULL THEN
1077 /* Check if formula_no and vers is passed */
1078 /* If yes then get the formula_id from the db */
1079 /* If not passed, then get the old formula id */
1080 IF (p_recipe_header_rec.formula_no IS NOT NULL) AND
1081 (p_recipe_header_rec.formula_vers IS NOT NULL) THEN
1082 OPEN get_formula_id(p_recipe_header_rec.formula_no,
1083 p_recipe_header_rec.formula_vers) ;
1084 FETCH get_formula_id INTO l_recipe_header_rec.formula_id;
1085 IF get_formula_id%NOTFOUND THEN
1086 l_recipe_header_rec.formula_id
1087 := old_recipe_rec.formula_id;
1088 END IF;
1089 CLOSE get_formula_id;
1090 ELSE -- Formula_no and/or version must be Null
1091 l_recipe_header_rec.formula_id
1092 := old_recipe_rec.formula_id;
1093 END IF; -- Condition ends when formula no, vers is not null
1094 ELSIF p_recipe_header_rec.formula_id
1095 <> old_recipe_rec.formula_id THEN
1096 l_recipe_header_rec.formula_id
1097 := p_recipe_header_rec.formula_id;
1098 l_changed_flag := TRUE;
1099 ELSE -- both the old and new formula id are the same
1100 l_recipe_header_rec.formula_id
1101 := old_recipe_rec.formula_id;
1102 END IF;
1103 END IF;
1104
1105
1106 IF (l_debug = 'Y') THEN
1107 gmd_debug.put_line('-- 8. Check for formula_no and version ');
1108 END IF;
1109 /* What if the calling function passes same formula_id
1110 but different formula_no and/or formula_vers?
1111 Then we need to the formula id that corresponds to this
1112 changed formula_no and/or formula_vers
1113 */
1114 IF (p_recipe_header_rec.formula_no = FND_API.G_MISS_CHAR) OR
1115 (p_recipe_header_rec.formula_vers = FND_API.G_MISS_NUM) THEN
1116 fnd_message.set_name ('GMI', 'GMI_MISSING');
1117 fnd_message.set_token ('MISSING', 'FORMULA_NO OR VERS');
1118 fnd_msg_pub.add;
1119 RAISE copy_recipe_err;
1120 ELSE
1121 IF (l_recipe_header_rec.formula_id
1122 = p_recipe_header_rec.formula_id) AND
1123 (p_recipe_header_rec.formula_no IS NOT NULL) AND
1124 (p_recipe_header_rec.formula_vers IS NOT NULL) THEN
1125
1126 -- Get the old formula_no and formula_version
1127 OPEN get_formula_no_and_vers(old_recipe_rec.formula_id);
1128 FETCH get_formula_no_and_vers INTO l_old_formula_no,
1129 l_old_formula_vers;
1130 IF get_formula_no_and_vers%NOTFOUND THEN
1131 -- Hmmm ... major issue
1132 Null;
1133 END IF;
1134 CLOSE get_formula_no_and_vers;
1135
1136 -- Compare this formula_no and version with old formula_no and vers
1137 IF ((p_recipe_header_rec.formula_no <> l_old_formula_no) OR
1138 (p_recipe_header_rec.formula_vers <> l_old_formula_vers)) THEN
1139 OPEN get_formula_id(p_recipe_header_rec.formula_no,
1140 p_recipe_header_rec.formula_vers) ;
1141 FETCH get_formula_id INTO l_recipe_header_rec.formula_id;
1142 IF get_formula_id%NOTFOUND THEN
1143 -- Is this possible? check.
1144 l_recipe_header_rec.formula_id
1145 := p_recipe_header_rec.formula_id;
1146 ELSE
1147 l_changed_flag := TRUE;
1148 END IF;
1149 CLOSE get_formula_id;
1150 END IF; -- Condition ends when formula no or vers is different
1151 -- from the old formula_no and formual_vers
1152 END IF; -- Condition ends when formula_id were same and ....
1153 END IF; -- Condition for G_Miss_....
1154
1155
1156 IF (l_debug = 'Y') THEN
1157 gmd_debug.put_line('-- 9. Check for routing_id ');
1158 END IF;
1159
1160 IF p_recipe_header_rec.routing_id = FND_API.G_MISS_NUM THEN
1161 l_recipe_header_rec.routing_id := NULL;
1162 ELSE
1163 IF p_recipe_header_rec.routing_id IS NULL THEN
1164 /* Check if Routing no and version is passed */
1165 /* then get the routing_id from the db */
1166 /* If not passed, then get the old routing id */
1167 IF (p_recipe_header_rec.routing_no IS NOT NULL) AND
1168 (p_recipe_header_rec.routing_vers IS NOT NULL) THEN
1169 OPEN get_routing_id(p_recipe_header_rec.routing_no,
1170 p_recipe_header_rec.routing_vers) ;
1171 FETCH get_routing_id INTO l_recipe_header_rec.routing_id;
1172 IF get_routing_id%NOTFOUND THEN
1173 l_recipe_header_rec.routing_id
1174 := old_recipe_rec.routing_id;
1175 END IF;
1176 CLOSE get_routing_id;
1177 ELSE
1178 l_recipe_header_rec.routing_id
1179 := old_recipe_rec.routing_id;
1180 END IF; -- Condition ends when routing no, vers is not null
1181 ELSIF p_recipe_header_rec.routing_id
1182 <> old_recipe_rec.routing_id THEN
1183 l_recipe_header_rec.routing_id
1184 := p_recipe_header_rec.routing_id;
1185 l_changed_flag := TRUE;
1186 ELSE -- both the old and new formula id are the same
1187 l_recipe_header_rec.routing_id
1188 := old_recipe_rec.routing_id;
1189 END IF; -- End condition when routing_id is null
1190 END IF; -- End condition when routing_id is G_miss...
1191
1192 IF (l_debug = 'Y') THEN
1193 gmd_debug.put_line('-- 10. Check for routing_no and version ');
1194 END IF;
1195 /* We need to the set the routing_id that corresponds to the
1196 id derived from routing_no and/or routing_vers passed in.
1197 We need to do this only if the old and new routing id are
1198 different.
1199 */
1200 IF (p_recipe_header_rec.routing_no = FND_API.G_MISS_CHAR) OR
1201 (p_recipe_header_rec.routing_vers = FND_API.G_MISS_NUM) THEN
1202 -- We set the Routing id to a Null value
1203 l_recipe_header_rec.routing_id := NULL;
1204 ELSE
1205 IF (l_recipe_header_rec.routing_id
1206 = p_recipe_header_rec.routing_id) AND
1207 (p_recipe_header_rec.routing_no IS NOT NULL) AND
1208 (p_recipe_header_rec.routing_vers IS NOT NULL) THEN
1209
1210 /* Get the old routing_no and version */
1211 OPEN get_routing_no_and_vers(old_recipe_rec.routing_id);
1212 FETCH get_routing_no_and_vers INTO l_old_routing_no,
1213 l_old_routing_vers;
1214 IF get_routing_no_and_vers%NOTFOUND THEN
1215 -- Maybe we need to flag an error msg
1216 Null;
1217 END IF;
1218 CLOSE get_routing_no_and_vers;
1219
1220 IF ((p_recipe_header_rec.routing_no
1221 <> l_old_routing_no) OR
1222 (p_recipe_header_rec.routing_vers
1223 <> l_old_routing_vers)) THEN
1224 OPEN get_routing_id(p_recipe_header_rec.routing_no,
1225 p_recipe_header_rec.routing_vers) ;
1226 FETCH get_routing_id INTO l_recipe_header_rec.routing_id;
1227 IF get_routing_id%NOTFOUND THEN
1228 -- Is this possible? check.
1229 l_recipe_header_rec.routing_id := NULL;
1230 END IF;
1231 CLOSE get_routing_id;
1232 l_changed_flag := TRUE;
1233 END IF; -- Condition ends when routing no or vers is different
1234 -- from the old routing_no and vers
1235 END IF; -- Condition ends when routing_id were same and ....
1236 END IF;
1237
1238 /* Recipe status should always be set to New */
1239 IF p_recipe_header_rec.recipe_status = FND_API.G_MISS_CHAR THEN
1240 fnd_message.set_name ('GMI', 'GMI_MISSING');
1241 fnd_message.set_token ('MISSING', 'RECIPE_STATUS');
1242 fnd_msg_pub.add;
1243 RAISE copy_recipe_err;
1244 ELSE
1245 l_recipe_header_rec.recipe_status := '100';
1246 END IF;
1247
1248 IF p_recipe_header_rec.planned_process_loss = FND_API.G_MISS_NUM THEN
1249 l_recipe_header_rec.planned_process_loss := NULL;
1250 ELSE
1251 IF p_recipe_header_rec.planned_process_loss IS NULL THEN
1252 l_recipe_header_rec.planned_process_loss
1253 := old_recipe_rec.planned_process_loss;
1254 ELSIF p_recipe_header_rec.planned_process_loss
1255 <> old_recipe_rec.planned_process_loss THEN
1256 l_recipe_header_rec.planned_process_loss
1257 := p_recipe_header_rec.planned_process_loss;
1258 ELSE
1259 l_recipe_header_rec.planned_process_loss
1260 := old_recipe_rec.planned_process_loss;
1261 END IF;
1262 END IF;
1263 /* B6811759 */
1264 IF p_recipe_header_rec.fixed_process_loss = FND_API.G_MISS_NUM THEN
1265 l_recipe_header_rec.fixed_process_loss := NULL;
1266 ELSE
1267 IF p_recipe_header_rec.fixed_process_loss IS NULL THEN
1268 l_recipe_header_rec.fixed_process_loss
1269 := old_recipe_rec.fixed_process_loss;
1270 ELSIF p_recipe_header_rec.fixed_process_loss
1271 <> old_recipe_rec.fixed_process_loss THEN
1272 l_recipe_header_rec.fixed_process_loss
1273 := p_recipe_header_rec.fixed_process_loss;
1274 ELSE
1275 l_recipe_header_rec.fixed_process_loss
1276 := old_recipe_rec.fixed_process_loss;
1277 END IF;
1278 END IF;
1279 IF p_recipe_header_rec.fixed_process_loss_uom = FND_API.G_MISS_CHAR THEN
1280 l_recipe_header_rec.fixed_process_loss_uom := NULL;
1281 ELSE
1282 IF p_recipe_header_rec.fixed_process_loss_uom IS NULL THEN
1283 l_recipe_header_rec.fixed_process_loss_uom
1284 := old_recipe_rec.fixed_process_loss_uom;
1285 ELSIF p_recipe_header_rec.fixed_process_loss_uom
1286 <> old_recipe_rec.fixed_process_loss_uom THEN
1287 l_recipe_header_rec.fixed_process_loss_uom
1288 := p_recipe_header_rec.fixed_process_loss_uom;
1289 ELSE
1290 l_recipe_header_rec.fixed_process_loss_uom
1291 := old_recipe_rec.fixed_process_loss_uom;
1292 END IF;
1293 END IF;
1294
1295 IF p_recipe_header_rec.contiguous_ind IS NULL THEN
1296 l_recipe_header_rec.contiguous_ind
1297 := old_recipe_rec.contiguous_ind;
1298 ELSIF p_recipe_header_rec.contiguous_ind
1299 <> old_recipe_rec.contiguous_ind THEN
1300 l_recipe_header_rec.contiguous_ind
1301 := p_recipe_header_rec.contiguous_ind;
1302 ELSE
1303 l_recipe_header_rec.contiguous_ind
1304 := old_recipe_rec.contiguous_ind;
1305 END IF;
1306
1307 IF p_recipe_header_rec.enhanced_pi_ind IS NULL THEN
1308 l_recipe_header_rec.enhanced_pi_ind
1309 := old_recipe_rec.enhanced_pi_ind;
1310 ELSIF p_recipe_header_rec.enhanced_pi_ind
1311 <> old_recipe_rec.enhanced_pi_ind THEN
1312 l_recipe_header_rec.enhanced_pi_ind
1313 := p_recipe_header_rec.enhanced_pi_ind;
1314 ELSE
1315 l_recipe_header_rec.enhanced_pi_ind
1316 := old_recipe_rec.enhanced_pi_ind;
1317 END IF;
1318
1319 IF p_recipe_header_rec.recipe_type IS NULL THEN
1320 l_recipe_header_rec.recipe_type
1321 := old_recipe_rec.recipe_type;
1322 ELSIF p_recipe_header_rec.recipe_type
1323 <> old_recipe_rec.recipe_type THEN
1324 l_recipe_header_rec.recipe_type
1325 := p_recipe_header_rec.recipe_type;
1326 ELSE
1327 l_recipe_header_rec.recipe_type
1328 := old_recipe_rec.recipe_type;
1329 END IF;
1330
1331
1332 IF p_recipe_header_rec.text_code = FND_API.G_MISS_NUM THEN
1333 l_recipe_header_rec.text_code := NULL;
1334 ELSE
1335 IF p_recipe_header_rec.text_code IS NULL THEN
1336 l_recipe_header_rec.text_code
1337 := old_recipe_rec.text_code;
1338 ELSIF p_recipe_header_rec.text_code
1339 <> old_recipe_rec.text_code THEN
1340 l_recipe_header_rec.text_code
1341 := p_recipe_header_rec.text_code;
1342 l_changed_flag := TRUE;
1343 ELSE
1344 l_recipe_header_rec.text_code
1345 := old_recipe_rec.text_code;
1346 END IF;
1347 END IF;
1348
1349 /* Delete Mark should always be set to 0 */
1350 IF p_recipe_header_rec.delete_mark = FND_API.G_MISS_NUM THEN
1351 fnd_message.set_name ('GMI', 'GMI_MISSING');
1352 fnd_message.set_token ('MISSING', 'DELETE_MARK');
1353 fnd_msg_pub.add;
1354 RAISE copy_recipe_err;
1355 ELSE
1356 l_recipe_header_rec.delete_mark := 0;
1357 END IF;
1358
1359 IF p_recipe_header_rec.creation_date = FND_API.G_MISS_DATE THEN
1360 fnd_message.set_name ('GMI', 'GMI_MISSING');
1361 fnd_message.set_token ('MISSING', 'CREATION_DATE');
1362 fnd_msg_pub.add;
1363 RAISE copy_recipe_err;
1364 ELSE
1365 IF p_recipe_header_rec.creation_date IS NULL THEN
1366 l_recipe_header_rec.creation_date
1367 := old_recipe_rec.creation_date;
1368 ELSIF p_recipe_header_rec.creation_date
1369 <> old_recipe_rec.creation_date THEN
1370 l_recipe_header_rec.creation_date
1371 := p_recipe_header_rec.creation_date;
1372 l_changed_flag := TRUE;
1373 ELSE
1374 l_recipe_header_rec.creation_date
1375 := old_recipe_rec.creation_date;
1376 END IF;
1377 END IF;
1378
1379 IF p_recipe_header_rec.created_by = FND_API.G_MISS_NUM THEN
1380 fnd_message.set_name ('GMI', 'GMI_MISSING');
1381 fnd_message.set_token ('MISSING', 'CREATED_BY');
1382 fnd_msg_pub.add;
1383 RAISE copy_recipe_err;
1384 ELSE
1385 IF p_recipe_header_rec.created_by IS NULL THEN
1386 l_recipe_header_rec.created_by
1387 := old_recipe_rec.created_by;
1388 ELSIF p_recipe_header_rec.created_by
1389 <> old_recipe_rec.created_by THEN
1390 l_recipe_header_rec.created_by
1391 := p_recipe_header_rec.created_by;
1392 l_changed_flag := TRUE;
1393 ELSE
1394 l_recipe_header_rec.created_by
1395 := old_recipe_rec.created_by;
1396 END IF;
1397 END IF;
1398
1399 IF p_recipe_header_rec.last_updated_by = FND_API.G_MISS_NUM THEN
1400 fnd_message.set_name ('GMI', 'GMI_MISSING');
1401 fnd_message.set_token ('MISSING', 'LAST_UPDATED_BY');
1402 fnd_msg_pub.add;
1403 RAISE copy_recipe_err;
1404 ELSE
1405 IF p_recipe_header_rec.last_updated_by IS NULL THEN
1406 l_recipe_header_rec.last_updated_by
1407 := old_recipe_rec.last_updated_by;
1408 ELSIF p_recipe_header_rec.last_updated_by
1409 <> old_recipe_rec.last_updated_by THEN
1410 l_recipe_header_rec.last_updated_by
1411 := p_recipe_header_rec.last_updated_by;
1412 l_changed_flag := TRUE;
1413 ELSE
1414 l_recipe_header_rec.last_updated_by
1415 := old_recipe_rec.last_updated_by;
1416 END IF;
1417 END IF;
1418
1419 IF p_recipe_header_rec.last_update_date = FND_API.G_MISS_DATE THEN
1420 fnd_message.set_name ('GMI', 'GMI_MISSING');
1421 fnd_message.set_token ('MISSING', 'LAST_UPDATE_DATE');
1422 fnd_msg_pub.add;
1423 RAISE copy_recipe_err;
1424 ELSE
1425 IF p_recipe_header_rec.last_update_date IS NULL THEN
1426 l_recipe_header_rec.last_update_date
1427 := old_recipe_rec.last_update_date;
1428 ELSIF p_recipe_header_rec.last_update_date
1429 <> old_recipe_rec.last_update_date THEN
1430 l_recipe_header_rec.last_update_date
1431 := p_recipe_header_rec.last_update_date;
1432 l_changed_flag := TRUE;
1433 ELSE
1434 l_recipe_header_rec.last_update_date
1435 := old_recipe_rec.last_update_date;
1436 END IF;
1437 END IF;
1438
1439 IF p_recipe_header_rec.last_update_login = FND_API.G_MISS_NUM THEN
1440 l_recipe_header_rec.last_update_login := NULL;
1441 ELSE
1442 IF p_recipe_header_rec.last_update_login IS NULL THEN
1443 l_recipe_header_rec.last_update_login
1444 := old_recipe_rec.last_update_login;
1445 ELSIF p_recipe_header_rec.last_update_login
1446 <> old_recipe_rec.last_update_login THEN
1447 l_recipe_header_rec.last_update_login
1448 := p_recipe_header_rec.last_update_login;
1449 l_changed_flag := TRUE;
1450 ELSE
1451 l_recipe_header_rec.last_update_login
1452 := old_recipe_rec.last_update_login;
1453 END IF;
1454 END IF;
1455
1456 IF p_recipe_header_rec.owner_id = FND_API.G_MISS_NUM THEN
1457 fnd_message.set_name ('GMI', 'GMI_MISSING');
1458 fnd_message.set_token ('MISSING', 'OWNER_ID');
1459 fnd_msg_pub.add;
1460 RAISE copy_recipe_err;
1461 ELSE
1462 IF p_recipe_header_rec.owner_id IS NULL THEN
1463 l_recipe_header_rec.owner_id
1464 := old_recipe_rec.owner_id;
1465 ELSIF p_recipe_header_rec.owner_id
1466 <> old_recipe_rec.owner_id THEN
1467 l_recipe_header_rec.owner_id
1468 := p_recipe_header_rec.owner_id;
1469 l_changed_flag := TRUE;
1470 ELSE
1471 l_recipe_header_rec.owner_id
1472 := old_recipe_rec.owner_id;
1473 END IF;
1474 END IF;
1475
1476 IF p_recipe_header_rec.owner_lab_type = FND_API.G_MISS_CHAR THEN
1477 l_recipe_header_rec.owner_lab_type := NULL;
1478 ELSE
1479 IF p_recipe_header_rec.owner_lab_type IS NULL THEN
1480 l_recipe_header_rec.owner_lab_type
1481 := old_recipe_rec.owner_lab_type;
1482 ELSIF p_recipe_header_rec.owner_lab_type
1483 <> old_recipe_rec.owner_lab_type THEN
1484 l_recipe_header_rec.owner_lab_type
1485 := p_recipe_header_rec.owner_lab_type;
1486 l_changed_flag := TRUE;
1487 ELSE
1488 l_recipe_header_rec.owner_lab_type
1489 := old_recipe_rec.owner_lab_type;
1490 END IF;
1491 END IF;
1492
1493 IF p_recipe_header_rec.calculate_step_quantity = FND_API.G_MISS_NUM THEN
1494 l_recipe_header_rec.calculate_step_quantity := NULL;
1495 ELSE
1496 IF p_recipe_header_rec.calculate_step_quantity IS NULL THEN
1497 l_recipe_header_rec.calculate_step_quantity
1498 := old_recipe_rec.calculate_step_quantity;
1499 ELSIF p_recipe_header_rec.calculate_step_quantity
1500 <> old_recipe_rec.calculate_step_quantity THEN
1501 l_recipe_header_rec.calculate_step_quantity
1502 := p_recipe_header_rec.calculate_step_quantity;
1503 l_changed_flag := TRUE;
1504 ELSE
1505 l_recipe_header_rec.calculate_step_quantity
1506 := old_recipe_rec.calculate_step_quantity;
1507 END IF;
1508 END IF;
1509
1510 -- Flex field attributes
1511 IF p_recipe_hdr_flex_rec.attribute1 = FND_API.G_MISS_CHAR THEN
1512 l_recipe_hdr_flex_rec.attribute1 := NULL;
1513 ELSE
1514 IF p_recipe_hdr_flex_rec.attribute1 IS NULL THEN
1515 l_recipe_hdr_flex_rec.attribute1
1516 := old_recipe_rec.attribute1;
1517 ELSIF p_recipe_hdr_flex_rec.attribute1
1518 <> old_recipe_rec.attribute1 THEN
1519 l_recipe_hdr_flex_rec.attribute1
1520 := p_recipe_hdr_flex_rec.attribute1;
1521 l_changed_flag := TRUE;
1522 ELSE
1523 l_recipe_hdr_flex_rec.attribute1
1524 := old_recipe_rec.attribute1;
1525 END IF;
1526 END IF;
1527
1528 IF p_recipe_hdr_flex_rec.attribute2 = FND_API.G_MISS_CHAR THEN
1529 l_recipe_hdr_flex_rec.attribute2 := NULL;
1530 ELSE
1531 IF p_recipe_hdr_flex_rec.attribute2 IS NULL THEN
1532 l_recipe_hdr_flex_rec.attribute2
1533 := old_recipe_rec.attribute2;
1534 ELSIF p_recipe_hdr_flex_rec.attribute2
1535 <> old_recipe_rec.attribute2 THEN
1536 l_recipe_hdr_flex_rec.attribute2
1537 := p_recipe_hdr_flex_rec.attribute2;
1538 l_changed_flag := TRUE;
1539 ELSE
1540 l_recipe_hdr_flex_rec.attribute2
1541 := old_recipe_rec.attribute2;
1542 END IF;
1543 END IF;
1544
1545 IF p_recipe_hdr_flex_rec.attribute3 = FND_API.G_MISS_CHAR THEN
1546 l_recipe_hdr_flex_rec.attribute3 := NULL;
1547 ELSE
1548 IF p_recipe_hdr_flex_rec.attribute3 IS NULL THEN
1549 l_recipe_hdr_flex_rec.attribute3
1550 := old_recipe_rec.attribute3;
1551 ELSIF p_recipe_hdr_flex_rec.attribute3
1552 <> old_recipe_rec.attribute3 THEN
1553 l_recipe_hdr_flex_rec.attribute3
1554 := p_recipe_hdr_flex_rec.attribute3;
1555 l_changed_flag := TRUE;
1556 ELSE
1557 l_recipe_hdr_flex_rec.attribute3
1558 := old_recipe_rec.attribute3;
1559 END IF;
1560 END IF;
1561
1562 IF p_recipe_hdr_flex_rec.attribute4 = FND_API.G_MISS_CHAR THEN
1563 l_recipe_hdr_flex_rec.attribute4 := NULL;
1564 ELSE
1565 IF p_recipe_hdr_flex_rec.attribute4 IS NULL THEN
1566 l_recipe_hdr_flex_rec.attribute4
1567 := old_recipe_rec.attribute4;
1568 ELSIF p_recipe_hdr_flex_rec.attribute4
1569 <> old_recipe_rec.attribute4 THEN
1570 l_recipe_hdr_flex_rec.attribute4
1571 := p_recipe_hdr_flex_rec.attribute4;
1572 l_changed_flag := TRUE;
1573 ELSE
1574 l_recipe_hdr_flex_rec.attribute4
1575 := old_recipe_rec.attribute4;
1576 END IF;
1577 END IF;
1578
1579 IF p_recipe_hdr_flex_rec.attribute5 = FND_API.G_MISS_CHAR THEN
1580 l_recipe_hdr_flex_rec.attribute5 := NULL;
1581 ELSE
1582 IF p_recipe_hdr_flex_rec.attribute5 IS NULL THEN
1583 l_recipe_hdr_flex_rec.attribute5
1584 := old_recipe_rec.attribute5;
1585 ELSIF p_recipe_hdr_flex_rec.attribute5
1586 <> old_recipe_rec.attribute5 THEN
1587 l_recipe_hdr_flex_rec.attribute5
1588 := p_recipe_hdr_flex_rec.attribute5;
1589 l_changed_flag := TRUE;
1590 ELSE
1591 l_recipe_hdr_flex_rec.attribute5
1592 := old_recipe_rec.attribute5;
1593 END IF;
1594 END IF;
1595
1596 IF p_recipe_hdr_flex_rec.attribute6 = FND_API.G_MISS_CHAR THEN
1597 l_recipe_hdr_flex_rec.attribute6 := NULL;
1598 ELSE
1599 IF p_recipe_hdr_flex_rec.attribute6 IS NULL THEN
1600 l_recipe_hdr_flex_rec.attribute6
1601 := old_recipe_rec.attribute6;
1602 ELSIF p_recipe_hdr_flex_rec.attribute6
1603 <> old_recipe_rec.attribute6 THEN
1604 l_recipe_hdr_flex_rec.attribute6
1605 := p_recipe_hdr_flex_rec.attribute6;
1606 l_changed_flag := TRUE;
1607 ELSE
1608 l_recipe_hdr_flex_rec.attribute6
1609 := old_recipe_rec.attribute6;
1610 END IF;
1611 END IF;
1612
1613 IF p_recipe_hdr_flex_rec.attribute7 = FND_API.G_MISS_CHAR THEN
1614 l_recipe_hdr_flex_rec.attribute7 := NULL;
1615 ELSE
1616 IF p_recipe_hdr_flex_rec.attribute7 IS NULL THEN
1617 l_recipe_hdr_flex_rec.attribute7
1618 := old_recipe_rec.attribute7;
1619 ELSIF p_recipe_hdr_flex_rec.attribute7
1620 <> old_recipe_rec.attribute7 THEN
1621 l_recipe_hdr_flex_rec.attribute7
1622 := p_recipe_hdr_flex_rec.attribute7;
1623 l_changed_flag := TRUE;
1624 ELSE
1625 l_recipe_hdr_flex_rec.attribute7
1626 := old_recipe_rec.attribute7;
1627 END IF;
1628 END IF;
1629
1630 IF p_recipe_hdr_flex_rec.attribute8 = FND_API.G_MISS_CHAR THEN
1631 l_recipe_hdr_flex_rec.attribute8 := NULL;
1632 ELSE
1633 IF p_recipe_hdr_flex_rec.attribute8 IS NULL THEN
1634 l_recipe_hdr_flex_rec.attribute8
1635 := old_recipe_rec.attribute8;
1636 ELSIF p_recipe_hdr_flex_rec.attribute8
1637 <> old_recipe_rec.attribute8 THEN
1638 l_recipe_hdr_flex_rec.attribute8
1639 := p_recipe_hdr_flex_rec.attribute8;
1640 l_changed_flag := TRUE;
1641 ELSE
1642 l_recipe_hdr_flex_rec.attribute8
1643 := old_recipe_rec.attribute8;
1644 END IF;
1645 END IF;
1646
1647 IF p_recipe_hdr_flex_rec.attribute9 = FND_API.G_MISS_CHAR THEN
1648 l_recipe_hdr_flex_rec.attribute9 := NULL;
1649 ELSE
1650 IF p_recipe_hdr_flex_rec.attribute9 IS NULL THEN
1651 l_recipe_hdr_flex_rec.attribute9
1652 := old_recipe_rec.attribute9;
1653 ELSIF p_recipe_hdr_flex_rec.attribute9
1654 <> old_recipe_rec.attribute9 THEN
1655 l_recipe_hdr_flex_rec.attribute9
1656 := p_recipe_hdr_flex_rec.attribute9;
1657 l_changed_flag := TRUE;
1658 ELSE
1659 l_recipe_hdr_flex_rec.attribute9
1660 := old_recipe_rec.attribute9;
1661 END IF;
1662 END IF;
1663
1664 IF p_recipe_hdr_flex_rec.attribute10 = FND_API.G_MISS_CHAR THEN
1665 l_recipe_hdr_flex_rec.attribute10 := NULL;
1666 ELSE
1667 IF p_recipe_hdr_flex_rec.attribute10 IS NULL THEN
1668 l_recipe_hdr_flex_rec.attribute10
1669 := old_recipe_rec.attribute10;
1670 ELSIF p_recipe_hdr_flex_rec.attribute10
1671 <> old_recipe_rec.attribute10 THEN
1672 l_recipe_hdr_flex_rec.attribute10
1673 := p_recipe_hdr_flex_rec.attribute10;
1674 l_changed_flag := TRUE;
1675 ELSE
1676 l_recipe_hdr_flex_rec.attribute10
1677 := old_recipe_rec.attribute10;
1678 END IF;
1679 END IF;
1680
1681 IF p_recipe_hdr_flex_rec.attribute11 = FND_API.G_MISS_CHAR THEN
1682 l_recipe_hdr_flex_rec.attribute11 := NULL;
1683 ELSE
1684 IF p_recipe_hdr_flex_rec.attribute11 IS NULL THEN
1685 l_recipe_hdr_flex_rec.attribute11
1686 := old_recipe_rec.attribute11;
1687 ELSIF p_recipe_hdr_flex_rec.attribute11
1688 <> old_recipe_rec.attribute11 THEN
1689 l_recipe_hdr_flex_rec.attribute11
1690 := p_recipe_hdr_flex_rec.attribute11;
1691 l_changed_flag := TRUE;
1692 ELSE
1693 l_recipe_hdr_flex_rec.attribute11
1694 := old_recipe_rec.attribute11;
1695 END IF;
1696 END IF;
1697
1698 IF p_recipe_hdr_flex_rec.attribute12 = FND_API.G_MISS_CHAR THEN
1699 l_recipe_hdr_flex_rec.attribute12 := NULL;
1700 ELSE
1701 IF p_recipe_hdr_flex_rec.attribute12 IS NULL THEN
1702 l_recipe_hdr_flex_rec.attribute12
1703 := old_recipe_rec.attribute12;
1704 ELSIF p_recipe_hdr_flex_rec.attribute12
1705 <> old_recipe_rec.attribute12 THEN
1706 l_recipe_hdr_flex_rec.attribute12
1707 := p_recipe_hdr_flex_rec.attribute12;
1708 l_changed_flag := TRUE;
1709 ELSE
1710 l_recipe_hdr_flex_rec.attribute12
1711 := old_recipe_rec.attribute2;
1712 END IF;
1713 END IF;
1714
1715 IF p_recipe_hdr_flex_rec.attribute13 = FND_API.G_MISS_CHAR THEN
1716 l_recipe_hdr_flex_rec.attribute13 := NULL;
1717 ELSE
1718 IF p_recipe_hdr_flex_rec.attribute13 IS NULL THEN
1719 l_recipe_hdr_flex_rec.attribute13
1720 := old_recipe_rec.attribute13;
1721 ELSIF p_recipe_hdr_flex_rec.attribute13
1722 <> old_recipe_rec.attribute13 THEN
1723 l_recipe_hdr_flex_rec.attribute13
1724 := p_recipe_hdr_flex_rec.attribute13;
1725 l_changed_flag := TRUE;
1726 ELSE
1727 l_recipe_hdr_flex_rec.attribute13
1728 := old_recipe_rec.attribute13;
1729 END IF;
1730 END IF;
1731
1732 IF p_recipe_hdr_flex_rec.attribute14 = FND_API.G_MISS_CHAR THEN
1733 l_recipe_hdr_flex_rec.attribute14 := NULL;
1734 ELSE
1735 IF p_recipe_hdr_flex_rec.attribute14 IS NULL THEN
1736 l_recipe_hdr_flex_rec.attribute14
1737 := old_recipe_rec.attribute14;
1738 ELSIF p_recipe_hdr_flex_rec.attribute14
1739 <> old_recipe_rec.attribute14 THEN
1740 l_recipe_hdr_flex_rec.attribute14
1741 := p_recipe_hdr_flex_rec.attribute14;
1742 l_changed_flag := TRUE;
1743 ELSE
1744 l_recipe_hdr_flex_rec.attribute14
1745 := old_recipe_rec.attribute14;
1746 END IF;
1747 END IF;
1748
1749 IF p_recipe_hdr_flex_rec.attribute15 = FND_API.G_MISS_CHAR THEN
1750 l_recipe_hdr_flex_rec.attribute15 := NULL;
1751 ELSE
1752 IF p_recipe_hdr_flex_rec.attribute15 IS NULL THEN
1753 l_recipe_hdr_flex_rec.attribute15
1754 := old_recipe_rec.attribute15;
1755 ELSIF p_recipe_hdr_flex_rec.attribute15
1756 <> old_recipe_rec.attribute15 THEN
1757 l_recipe_hdr_flex_rec.attribute15
1758 := p_recipe_hdr_flex_rec.attribute15;
1759 l_changed_flag := TRUE;
1760 ELSE
1761 l_recipe_hdr_flex_rec.attribute15
1762 := old_recipe_rec.attribute15;
1763 END IF;
1764 END IF;
1765
1766 IF p_recipe_hdr_flex_rec.attribute16 = FND_API.G_MISS_CHAR THEN
1767 l_recipe_hdr_flex_rec.attribute16 := NULL;
1768 ELSE
1769 IF p_recipe_hdr_flex_rec.attribute16 IS NULL THEN
1770 l_recipe_hdr_flex_rec.attribute16
1771 := old_recipe_rec.attribute16;
1772 ELSIF p_recipe_hdr_flex_rec.attribute16
1773 <> old_recipe_rec.attribute16 THEN
1774 l_recipe_hdr_flex_rec.attribute16
1775 := p_recipe_hdr_flex_rec.attribute16;
1776 l_changed_flag := TRUE;
1777 ELSE
1778 l_recipe_hdr_flex_rec.attribute16
1779 := old_recipe_rec.attribute16;
1780 END IF;
1781 END IF;
1782
1783 IF p_recipe_hdr_flex_rec.attribute17 = FND_API.G_MISS_CHAR THEN
1784 l_recipe_hdr_flex_rec.attribute17 := NULL;
1785 ELSE
1786 IF p_recipe_hdr_flex_rec.attribute17 IS NULL THEN
1787 l_recipe_hdr_flex_rec.attribute17
1788 := old_recipe_rec.attribute7;
1789 ELSIF p_recipe_hdr_flex_rec.attribute17
1790 <> old_recipe_rec.attribute17 THEN
1791 l_recipe_hdr_flex_rec.attribute17
1792 := p_recipe_hdr_flex_rec.attribute17;
1793 l_changed_flag := TRUE;
1794 ELSE
1795 l_recipe_hdr_flex_rec.attribute17
1796 := old_recipe_rec.attribute17;
1797 END IF;
1798 END IF;
1799
1800 IF p_recipe_hdr_flex_rec.attribute18 = FND_API.G_MISS_CHAR THEN
1801 l_recipe_hdr_flex_rec.attribute18 := NULL;
1802 ELSE
1803 IF p_recipe_hdr_flex_rec.attribute18 IS NULL THEN
1804 l_recipe_hdr_flex_rec.attribute18
1805 := old_recipe_rec.attribute18;
1806 ELSIF p_recipe_hdr_flex_rec.attribute18
1807 <> old_recipe_rec.attribute18 THEN
1808 l_recipe_hdr_flex_rec.attribute18
1809 := p_recipe_hdr_flex_rec.attribute8;
1810 l_changed_flag := TRUE;
1811 ELSE
1812 l_recipe_hdr_flex_rec.attribute18
1813 := old_recipe_rec.attribute18;
1814 END IF;
1815 END IF;
1816
1817 IF p_recipe_hdr_flex_rec.attribute19 = FND_API.G_MISS_CHAR THEN
1818 l_recipe_hdr_flex_rec.attribute19 := NULL;
1819 ELSE
1820 IF p_recipe_hdr_flex_rec.attribute19 IS NULL THEN
1821 l_recipe_hdr_flex_rec.attribute19
1822 := old_recipe_rec.attribute19;
1823 ELSIF p_recipe_hdr_flex_rec.attribute19
1824 <> old_recipe_rec.attribute19 THEN
1825 l_recipe_hdr_flex_rec.attribute19
1826 := p_recipe_hdr_flex_rec.attribute19;
1827 l_changed_flag := TRUE;
1828 ELSE
1829 l_recipe_hdr_flex_rec.attribute19
1830 := old_recipe_rec.attribute19;
1831 END IF;
1832 END IF;
1833
1834 IF p_recipe_hdr_flex_rec.attribute20 = FND_API.G_MISS_CHAR THEN
1835 l_recipe_hdr_flex_rec.attribute20 := NULL;
1836 ELSE
1837 IF p_recipe_hdr_flex_rec.attribute20 IS NULL THEN
1838 l_recipe_hdr_flex_rec.attribute20
1839 := old_recipe_rec.attribute20;
1840 ELSIF p_recipe_hdr_flex_rec.attribute20
1841 <> old_recipe_rec.attribute20 THEN
1842 l_recipe_hdr_flex_rec.attribute20
1843 := p_recipe_hdr_flex_rec.attribute20;
1844 l_changed_flag := TRUE;
1845 ELSE
1846 l_recipe_hdr_flex_rec.attribute20
1847 := old_recipe_rec.attribute20;
1848 END IF;
1849 END IF;
1850
1851 IF p_recipe_hdr_flex_rec.attribute21 = FND_API.G_MISS_CHAR THEN
1852 l_recipe_hdr_flex_rec.attribute21 := NULL;
1853 ELSE
1854 IF p_recipe_hdr_flex_rec.attribute21 IS NULL THEN
1855 l_recipe_hdr_flex_rec.attribute21
1856 := old_recipe_rec.attribute21;
1857 ELSIF p_recipe_hdr_flex_rec.attribute21
1858 <> old_recipe_rec.attribute21 THEN
1859 l_recipe_hdr_flex_rec.attribute21
1860 := p_recipe_hdr_flex_rec.attribute21;
1861 l_changed_flag := TRUE;
1862 ELSE
1863 l_recipe_hdr_flex_rec.attribute21
1864 := old_recipe_rec.attribute21;
1865 END IF;
1866 END IF;
1867
1868 IF p_recipe_hdr_flex_rec.attribute22 = FND_API.G_MISS_CHAR THEN
1869 l_recipe_hdr_flex_rec.attribute22 := NULL;
1870 ELSE
1871 IF p_recipe_hdr_flex_rec.attribute22 IS NULL THEN
1872 l_recipe_hdr_flex_rec.attribute22
1873 := old_recipe_rec.attribute22;
1874 ELSIF p_recipe_hdr_flex_rec.attribute22
1875 <> old_recipe_rec.attribute22 THEN
1876 l_recipe_hdr_flex_rec.attribute22
1877 := p_recipe_hdr_flex_rec.attribute22;
1878 l_changed_flag := TRUE;
1879 ELSE
1880 l_recipe_hdr_flex_rec.attribute22
1881 := old_recipe_rec.attribute2;
1882 END IF;
1883 END IF;
1884
1885 IF p_recipe_hdr_flex_rec.attribute23 = FND_API.G_MISS_CHAR THEN
1886 l_recipe_hdr_flex_rec.attribute23 := NULL;
1887 ELSE
1888 IF p_recipe_hdr_flex_rec.attribute23 IS NULL THEN
1889 l_recipe_hdr_flex_rec.attribute23
1890 := old_recipe_rec.attribute23;
1891 ELSIF p_recipe_hdr_flex_rec.attribute23
1892 <> old_recipe_rec.attribute23 THEN
1893 l_recipe_hdr_flex_rec.attribute23
1894 := p_recipe_hdr_flex_rec.attribute23;
1895 l_changed_flag := TRUE;
1896 ELSE
1897 l_recipe_hdr_flex_rec.attribute23
1898 := old_recipe_rec.attribute23;
1899 END IF;
1900 END IF;
1901
1902 IF p_recipe_hdr_flex_rec.attribute24 = FND_API.G_MISS_CHAR THEN
1903 l_recipe_hdr_flex_rec.attribute24 := NULL;
1904 ELSE
1905 IF p_recipe_hdr_flex_rec.attribute24 IS NULL THEN
1906 l_recipe_hdr_flex_rec.attribute24
1907 := old_recipe_rec.attribute24;
1908 ELSIF p_recipe_hdr_flex_rec.attribute24
1909 <> old_recipe_rec.attribute24 THEN
1910 l_recipe_hdr_flex_rec.attribute24
1911 := p_recipe_hdr_flex_rec.attribute24;
1912 l_changed_flag := TRUE;
1913 ELSE
1914 l_recipe_hdr_flex_rec.attribute24
1915 := old_recipe_rec.attribute24;
1916 END IF;
1917 END IF;
1918
1919 IF p_recipe_hdr_flex_rec.attribute25 = FND_API.G_MISS_CHAR THEN
1920 l_recipe_hdr_flex_rec.attribute25 := NULL;
1921 ELSE
1922 IF p_recipe_hdr_flex_rec.attribute25 IS NULL THEN
1923 l_recipe_hdr_flex_rec.attribute25
1924 := old_recipe_rec.attribute25;
1925 ELSIF p_recipe_hdr_flex_rec.attribute25
1926 <> old_recipe_rec.attribute25 THEN
1927 l_recipe_hdr_flex_rec.attribute25
1928 := p_recipe_hdr_flex_rec.attribute25;
1929 l_changed_flag := TRUE;
1930 ELSE
1931 l_recipe_hdr_flex_rec.attribute25
1932 := old_recipe_rec.attribute25;
1933 END IF;
1934 END IF;
1935
1936 IF p_recipe_hdr_flex_rec.attribute26 = FND_API.G_MISS_CHAR THEN
1937 l_recipe_hdr_flex_rec.attribute26 := NULL;
1938 ELSE
1939 IF p_recipe_hdr_flex_rec.attribute26 IS NULL THEN
1940 l_recipe_hdr_flex_rec.attribute26
1941 := old_recipe_rec.attribute26;
1942 ELSIF p_recipe_hdr_flex_rec.attribute26
1943 <> old_recipe_rec.attribute26 THEN
1944 l_recipe_hdr_flex_rec.attribute26
1945 := p_recipe_hdr_flex_rec.attribute26;
1946 l_changed_flag := TRUE;
1947 ELSE
1948 l_recipe_hdr_flex_rec.attribute26
1949 := old_recipe_rec.attribute26;
1950 END IF;
1951 END IF;
1952
1953 IF p_recipe_hdr_flex_rec.attribute27 = FND_API.G_MISS_CHAR THEN
1954 l_recipe_hdr_flex_rec.attribute27 := NULL;
1955 ELSE
1956 IF p_recipe_hdr_flex_rec.attribute27 IS NULL THEN
1957 l_recipe_hdr_flex_rec.attribute27
1958 := old_recipe_rec.attribute27;
1959 ELSIF p_recipe_hdr_flex_rec.attribute27
1960 <> old_recipe_rec.attribute27 THEN
1961 l_recipe_hdr_flex_rec.attribute27
1962 := p_recipe_hdr_flex_rec.attribute27;
1963 l_changed_flag := TRUE;
1964 ELSE
1965 l_recipe_hdr_flex_rec.attribute27
1966 := old_recipe_rec.attribute27;
1967 END IF;
1968 END IF;
1969
1970 IF p_recipe_hdr_flex_rec.attribute28 = FND_API.G_MISS_CHAR THEN
1971 l_recipe_hdr_flex_rec.attribute28 := NULL;
1972 ELSE
1973 IF p_recipe_hdr_flex_rec.attribute28 IS NULL THEN
1974 l_recipe_hdr_flex_rec.attribute28
1975 := old_recipe_rec.attribute28;
1976 ELSIF p_recipe_hdr_flex_rec.attribute28
1977 <> old_recipe_rec.attribute28 THEN
1978 l_recipe_hdr_flex_rec.attribute28
1979 := p_recipe_hdr_flex_rec.attribute28;
1980 l_changed_flag := TRUE;
1981 ELSE
1982 l_recipe_hdr_flex_rec.attribute28
1983 := old_recipe_rec.attribute28;
1984 END IF;
1985 END IF;
1986
1987 IF p_recipe_hdr_flex_rec.attribute29 = FND_API.G_MISS_CHAR THEN
1988 l_recipe_hdr_flex_rec.attribute29 := NULL;
1989 ELSE
1990 IF p_recipe_hdr_flex_rec.attribute29 IS NULL THEN
1991 l_recipe_hdr_flex_rec.attribute29
1992 := old_recipe_rec.attribute29;
1993 ELSIF p_recipe_hdr_flex_rec.attribute29
1994 <> old_recipe_rec.attribute29 THEN
1995 l_recipe_hdr_flex_rec.attribute29
1996 := p_recipe_hdr_flex_rec.attribute29;
1997 l_changed_flag := TRUE;
1998 ELSE
1999 l_recipe_hdr_flex_rec.attribute29
2000 := old_recipe_rec.attribute29;
2001 END IF;
2002 END IF;
2003
2004 IF p_recipe_hdr_flex_rec.attribute30 = FND_API.G_MISS_CHAR THEN
2005 l_recipe_hdr_flex_rec.attribute30 := NULL;
2006 ELSE
2007 IF p_recipe_hdr_flex_rec.attribute30 IS NULL THEN
2008 l_recipe_hdr_flex_rec.attribute30
2009 := old_recipe_rec.attribute30;
2010 ELSIF p_recipe_hdr_flex_rec.attribute30
2011 <> old_recipe_rec.attribute30 THEN
2012 l_recipe_hdr_flex_rec.attribute30
2013 := p_recipe_hdr_flex_rec.attribute30;
2014 l_changed_flag := TRUE;
2015 ELSE
2016 l_recipe_hdr_flex_rec.attribute30
2017 := old_recipe_rec.attribute30;
2018 END IF;
2019 END IF;
2020
2021 IF p_recipe_hdr_flex_rec.attribute_category = FND_API.G_MISS_CHAR THEN
2022 l_recipe_hdr_flex_rec.attribute_category := NULL;
2023 ELSE
2024 IF p_recipe_hdr_flex_rec.attribute_category IS NULL THEN
2025 l_recipe_hdr_flex_rec.attribute_category
2026 := old_recipe_rec.attribute_category;
2027 ELSIF p_recipe_hdr_flex_rec.attribute_category
2028 <> old_recipe_rec.attribute_category THEN
2029 l_recipe_hdr_flex_rec.attribute_category
2030 := p_recipe_hdr_flex_rec.attribute_category;
2031 l_changed_flag := TRUE;
2032 ELSE
2033 l_recipe_hdr_flex_rec.attribute_category
2034 := old_recipe_rec.attribute_category;
2035 END IF;
2036 END IF;
2037
2038
2039 -- Creating a copy of the original Recipe
2040 IF l_changed_flag THEN
2041 GMD_RECIPE_HEADER_PVT.create_recipe_header
2042 (p_recipe_header_rec => l_recipe_header_rec
2043 ,p_recipe_hdr_flex_rec => p_recipe_hdr_flex_rec
2044 ,x_return_status => x_return_status);
2045 IF x_return_status <> FND_API.g_ret_sts_success THEN
2046 RAISE copy_recipe_err;
2047 END IF; -- End condition when create API return state is ...
2048 ELSE -- when l_changed_flag is False
2049 IF (l_debug = 'Y') THEN
2050 gmd_debug.put_line('Atleast one Recipe field should change ');
2051 END IF;
2052 fnd_message.set_name ('GMD', 'GMD_CANNOT_COPY');
2053 fnd_message.set_token ('ENTITY', 'recipe');
2054 fnd_msg_pub.add;
2055 RAISE copy_recipe_err;
2056 END IF; -- End condition when l_changed flag is TRUE
2057 END LOOP; -- End Loop condition for each recipe record passed IN
2058
2059 IF (l_rowcount = 0) THEN
2060 fnd_message.set_name ('GMD','GMD_RECIPE_DOES_NOT_EXIST');
2061 fnd_msg_pub.add;
2062 RAISE copy_recipe_err;
2063 END IF;
2064
2065
2066 EXCEPTION
2067 WHEN copy_recipe_err THEN
2068 x_return_status := FND_API.G_RET_STS_ERROR;
2069 WHEN OTHERS THEN
2070 fnd_msg_pub.add_exc_msg (G_pkg_name, l_api_name);
2071 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2072 END COPY_RECIPE_HEADER;
2073
2074 /* ================================================== */
2075 /* Procedure: */
2076 /* Validate_Formula */
2077 /* */
2078 /* DESCRIPTION: */
2079 /* This PL/SQL procedure is responsible for */
2080 /* validating the formula passed to the API */
2081 /* */
2082 /* */
2083 /* Notes : */
2084 /* Thomas Daniel 11/11/05. Bug 4716923. Added this */
2085 /* procedure to validate formula. */
2086 /* ================================================== */
2087
2088 PROCEDURE VALIDATE_FORMULA
2089 (p_formula_id IN NUMBER,
2090 p_formula_no IN VARCHAR2,
2091 p_formula_vers IN NUMBER,
2092 p_owner_organization_id IN NUMBER,
2093 x_return_status OUT NOCOPY VARCHAR2,
2094 x_formula_id OUT NOCOPY NUMBER
2095 ) IS
2096
2097 /* Defining all local variables */
2098 l_fm_rec_in GMDFMVAL_PUB.formula_info_in;
2099 l_fm_tab_out GMDFMVAL_PUB.formula_table_out;
2100 l_return_status VARCHAR2(1);
2101 BEGIN
2102 /* Initialize return status */
2103 x_return_status := FND_API.G_RET_STS_SUCCESS;
2104
2105 /* =================================== */
2106 /* Check if a formula_id OR */
2107 /* a formula_no and formula_vers combo */
2108 /* exists */
2109 /* =================================== */
2110 l_fm_rec_in.formula_no := p_formula_no;
2111 l_fm_rec_in.formula_vers := p_formula_vers;
2112 l_fm_rec_in.formula_id := p_formula_id;
2113
2114 GMDFMVAL_PUB.get_element(pElement_name => 'FORMULA',
2115 pRecord_in => l_fm_rec_in,
2116 xTable_out => l_fm_tab_out,
2117 xReturn => l_return_status);
2118 IF (l_return_status <> FND_API.g_ret_sts_success) THEN
2119 IF (p_formula_no IS NULL) AND
2120 (p_formula_id IS NULL) THEN
2121 x_return_status := FND_API.G_RET_STS_ERROR;
2122 FND_MESSAGE.SET_NAME('GMD', 'FM_MISSING_FORMULA_NO');
2123 FND_MSG_PUB.Add;
2124 ELSIF (p_formula_vers IS NULL) AND
2125 (p_formula_id IS NULL) THEN
2126 x_return_status := FND_API.G_RET_STS_ERROR;
2127 FND_MESSAGE.SET_NAME('GMD', 'FM_MISSING_FORMULA_VERS');
2128 FND_MSG_PUB.Add;
2129 ELSE
2130 x_return_status := FND_API.G_RET_STS_ERROR;
2131 IF p_formula_id IS NOT NULL THEN
2132 FND_MESSAGE.SET_NAME('GMD', 'GMD_INVFORMULA_ID');
2133 FND_MESSAGE.SET_TOKEN('FORMULA_ID', p_formula_id);
2134 ELSE
2135 FND_MESSAGE.SET_NAME('GMD', 'FM_INVFORMULA_NO');
2136 FND_MESSAGE.SET_TOKEN('FORMULA_NO', p_formula_no);
2137 END IF;
2138 FND_MSG_PUB.Add;
2139 END IF;
2140 ELSE
2141 x_formula_id := l_fm_tab_out(1).formula_id;
2142 END IF;
2143
2144 /* Check if all the items in the formula exists in the current organization */
2145 IF (p_owner_organization_id IS NOT NULL) AND
2146 (x_formula_id IS NOT NULL) THEN
2147 GMD_API_GRP.check_item_exists (p_formula_id => x_formula_id
2148 ,p_organization_id => p_owner_organization_id
2149 ,x_return_status => l_return_status);
2150 IF l_return_status <> FND_API.g_ret_sts_success THEN
2151 x_return_status := l_return_status;
2152 END IF;
2153 END IF;
2154 END validate_formula;
2155
2156
2157 END GMD_RECIPE_HEADER_PVT;