CREATE OR REPLACE FUNCTION Bompricelimit ( Product_ID IN NUMBER, PriceList_Version_ID IN NUMBER ) RETURN NUMBER /************************************************************************* * The contents of this file are subject to the Compiere License. You may * obtain a copy of the License at http://www.compiere.org/license.html * Software is on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either * express or implied. See the License for details. Code: Compiere ERP+CRM * Copyright (C) 1999-2002 Jorg Janke, ComPiere, Inc. All Rights Reserved. ************************************************************************* * $Id: BOM_PriceLimit.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $ *** * Title: Return Limit Price of Product/BOM * Description: * if not found: 0 ************************************************************************/ AS v_Price NUMBER; v_ProductPrice NUMBER; -- Get BOM Product info CURSOR CUR_BOM IS /*SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM FROM M_PRODUCT_BOM b, M_PRODUCT p WHERE b.M_ProductBOM_ID=p.M_Product_ID AND b.M_Product_ID=Product_ID;*/ SELECT bl.M_Product_ID AS M_ProductBOM_ID, CASE WHEN bl.IsQtyPercentage = 'N' THEN bl.QtyBOM ELSE bl.QtyBatch / 100 END AS BomQty , p.IsBOM FROM PP_PRODUCT_BOM b INNER JOIN M_PRODUCT p ON (p.M_Product_ID=b.M_Product_ID) INNER JOIN PP_PRODUCT_BOMLINE bl ON (bl.PP_Product_BOM_ID=b.PP_Product_BOM_ID) WHERE b.M_Product_ID = Product_ID; -- BEGIN -- Try to get price from PriceList directly SELECT COALESCE (SUM(PriceLimit), 0) INTO v_Price FROM M_PRODUCTPRICE WHERE M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID; -- DBMS_OUTPUT.PUT_LINE('Price=' || v_Price); -- No Price - Check if BOM IF (v_Price = 0) THEN FOR bom IN CUR_BOM LOOP v_ProductPrice := Bompricelimit (bom.M_ProductBOM_ID, PriceList_Version_ID); v_Price := v_Price + (bom.BOMQty * v_ProductPrice); END LOOP; END IF; -- RETURN v_Price; END Bompricelimit; /