98: FETCH cur_get_info
99: INTO l_validity_rule_id, l_recipe_id, l_organization_id, l_routing_id ,l_formula_id;
100: CLOSE cur_get_info;
101: IF (l_recipe_id IS NULL AND l_validity_rule_id IS NOT NULL) THEN
102: gme_common_pvt.log_message ('GME_INVALID_BATCH');
103: RAISE expected_error;
104: END IF;
105: ELSIF p_validity_rule_id IS NOT NULL THEN
106: -- Validate recipe validity rule
110: FETCH cur_get_info_from_validity INTO l_recipe_id, l_routing_id, l_formula_id;
111: CLOSE cur_get_info_from_validity;
112:
113: IF (l_recipe_id IS NULL) THEN
114: gme_common_pvt.log_message ('GME_API_INVALID_RULE');
115: RAISE expected_error;
116: END IF;
117: END IF;
118:
208: /******* Procedure to apply fixed process loss **********/
209:
210: PROCEDURE apply_fixed_process_loss (
211: p_batch_header_rec IN gme_batch_header%ROWTYPE
212: ,p_material_tbl IN gme_common_pvt.material_details_tab
213: ,p_organization_id IN NUMBER DEFAULT NULL
214: ,p_creation_mode IN VARCHAR2
215: ,p_called_from IN NUMBER DEFAULT 1 /*1 = Create Batch, 2 = Batch details */
216: ,x_batch_header_rec OUT NOCOPY gme_batch_header%ROWTYPE
213: ,p_organization_id IN NUMBER DEFAULT NULL
214: ,p_creation_mode IN VARCHAR2
215: ,p_called_from IN NUMBER DEFAULT 1 /*1 = Create Batch, 2 = Batch details */
216: ,x_batch_header_rec OUT NOCOPY gme_batch_header%ROWTYPE
217: ,x_material_tbl OUT NOCOPY gme_common_pvt.material_details_tab
218: ,x_return_status OUT NOCOPY VARCHAR2
219: )
220: IS
221: l_api_name VARCHAR2(30) := 'APPLY_FIXED_PROCESS_LOSS';
304: gme_debug.put_line(' product plan qty is ' || p_material_tbl(i).plan_qty);
305: END IF;
306: l_new_dtl_qty := inv_convert.inv_um_convert
307: (item_id => p_material_tbl(i).inventory_item_id
308: ,PRECISION => gme_common_pvt.g_precision
309: ,from_quantity => p_material_tbl(i).plan_qty
310: ,from_unit => p_material_tbl(i).dtl_um
311: ,to_unit => l_fixed_process_loss_uom
312: ,from_name => NULL
343: -- IF detail uom is not same as FM Yield type uom then convert it to FM Yield type uom
344: IF p_material_tbl(i).dtl_um <> l_fixed_process_loss_uom THEN
345: l_new_dtl_qty := inv_convert.inv_um_convert
346: (item_id => p_material_tbl(i).inventory_item_id
347: ,PRECISION => gme_common_pvt.g_precision
348: ,from_quantity => p_material_tbl(i).plan_qty
349: ,from_unit => p_material_tbl(i).dtl_um
350: ,to_unit => l_fixed_process_loss_uom
351: ,from_name => NULL
404: -- If not convert plan qty to FM yield type uom.
405: IF p_material_tbl(i).dtl_um <> l_fixed_process_loss_uom THEN
406: l_new_dtl_qty := inv_convert.inv_um_convert
407: (item_id => p_material_tbl(i).inventory_item_id
408: ,PRECISION => gme_common_pvt.g_precision
409: ,from_quantity => p_material_tbl(i).plan_qty
410: ,from_unit => p_material_tbl(i).dtl_um
411: ,to_unit => l_fixed_process_loss_uom
412: ,from_name => NULL
442: IF l_convert_dtl_uom = 1 THEN
443: -- Convert plan qty back to material detail uom.
444: l_plan_qty := inv_convert.inv_um_convert
445: (item_id => p_material_tbl(i).inventory_item_id
446: ,PRECISION => gme_common_pvt.g_precision
447: ,from_quantity => l_new_dtl_qty
448: ,from_unit => l_fixed_process_loss_uom
449: ,to_unit => p_material_tbl(i).dtl_um
450: ,from_name => NULL
478: -- If item uom is not same as detail uom, convert!
479: IF (l_item_uom <> p_material_tbl(i).dtl_um) THEN
480: l_original_primary_qty := inv_convert.inv_um_convert
481: (item_id => p_material_tbl(i).inventory_item_id
482: ,PRECISION => gme_common_pvt.g_precision
483: ,from_quantity => x_material_tbl(i).original_primary_qty
484: ,from_unit => p_material_tbl(i).dtl_um
485: ,to_unit => l_item_uom
486: ,from_name => NULL
541: WHERE batch_id = v_batch_id
542: ORDER BY line_no;
543: l_api_name CONSTANT VARCHAR2 (30) := 'FPL_batch_details';
544: x_batch_header_rec gme_batch_header%ROWTYPE;
545: l_material_tbl gme_common_pvt.material_details_tab;
546: x_material_tbl gme_common_pvt.material_details_tab;
547: i NUMBER := 0;
548: l_row_count NUMBER;
549: err_msg varchar2(2000);
542: ORDER BY line_no;
543: l_api_name CONSTANT VARCHAR2 (30) := 'FPL_batch_details';
544: x_batch_header_rec gme_batch_header%ROWTYPE;
545: l_material_tbl gme_common_pvt.material_details_tab;
546: x_material_tbl gme_common_pvt.material_details_tab;
547: i NUMBER := 0;
548: l_row_count NUMBER;
549: err_msg varchar2(2000);
550: Fixed_process_loss_failure EXCEPTION;
590: END IF;
591: IF x_return_status <> fnd_api.g_ret_sts_success THEN
592: RAISE Fixed_process_loss_failure;
593: END IF;
594: IF NOT gme_common_pvt.g_setup_done THEN
595: gme_common_pvt.g_setup_done :=
596: gme_common_pvt.setup (p_batch_header_rec.organization_id);
597:
598: IF NOT gme_common_pvt.g_setup_done THEN
591: IF x_return_status <> fnd_api.g_ret_sts_success THEN
592: RAISE Fixed_process_loss_failure;
593: END IF;
594: IF NOT gme_common_pvt.g_setup_done THEN
595: gme_common_pvt.g_setup_done :=
596: gme_common_pvt.setup (p_batch_header_rec.organization_id);
597:
598: IF NOT gme_common_pvt.g_setup_done THEN
599: x_return_status := fnd_api.g_ret_sts_error;
592: RAISE Fixed_process_loss_failure;
593: END IF;
594: IF NOT gme_common_pvt.g_setup_done THEN
595: gme_common_pvt.g_setup_done :=
596: gme_common_pvt.setup (p_batch_header_rec.organization_id);
597:
598: IF NOT gme_common_pvt.g_setup_done THEN
599: x_return_status := fnd_api.g_ret_sts_error;
600: RAISE setup_failure;
594: IF NOT gme_common_pvt.g_setup_done THEN
595: gme_common_pvt.g_setup_done :=
596: gme_common_pvt.setup (p_batch_header_rec.organization_id);
597:
598: IF NOT gme_common_pvt.g_setup_done THEN
599: x_return_status := fnd_api.g_ret_sts_error;
600: RAISE setup_failure;
601: END IF;
602: END IF;
599: x_return_status := fnd_api.g_ret_sts_error;
600: RAISE setup_failure;
601: END IF;
602: END IF;
603: gme_common_pvt.set_timestamp;
604: -- Update the batch header
605: IF NOT gme_batch_header_dbl.update_row
606: (p_batch_header => x_batch_header_rec) THEN
607: RAISE error_update_batch;
613: END IF;
614: IF NOT (gme_material_details_dbl.update_row (x_material_tbl (i) )) THEN
615: RAISE material_save_failed;
616: ELSE
617: x_material_tbl (i).last_update_date := gme_common_pvt.g_timestamp;
618: x_material_tbl (i).last_updated_by := gme_common_pvt.g_user_ident;
619: x_material_tbl (i).last_update_login := gme_common_pvt.g_login_id;
620: END IF;
621: END LOOP;
614: IF NOT (gme_material_details_dbl.update_row (x_material_tbl (i) )) THEN
615: RAISE material_save_failed;
616: ELSE
617: x_material_tbl (i).last_update_date := gme_common_pvt.g_timestamp;
618: x_material_tbl (i).last_updated_by := gme_common_pvt.g_user_ident;
619: x_material_tbl (i).last_update_login := gme_common_pvt.g_login_id;
620: END IF;
621: END LOOP;
622: EXCEPTION
615: RAISE material_save_failed;
616: ELSE
617: x_material_tbl (i).last_update_date := gme_common_pvt.g_timestamp;
618: x_material_tbl (i).last_updated_by := gme_common_pvt.g_user_ident;
619: x_material_tbl (i).last_update_login := gme_common_pvt.g_login_id;
620: END IF;
621: END LOOP;
622: EXCEPTION
623: WHEN Fixed_process_loss_failure THEN
633: x_return_status := fnd_api.g_ret_sts_error;
634: WHEN setup_failure THEN
635: --ROLLBACK TO SAVEPOINT create_batch;
636: --x_batch_header_rec := NULL;
637: gme_common_pvt.count_and_get (x_count => x_message_count
638: ,p_encoded => fnd_api.g_false
639: ,x_data => x_message_list);
640: x_return_status := fnd_api.g_ret_sts_error;
641: END ;