* relocated to ddlutils/oracle/functions and ddlutils/oracle/procedures
This commit is contained in:
parent
ea1c5af324
commit
4455acc4b0
|
@ -1,64 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION acctBalance
|
|
||||||
(
|
|
||||||
p_Account_ID IN NUMBER,
|
|
||||||
p_AmtDr IN NUMBER,
|
|
||||||
p_AmtCr IN NUMBER
|
|
||||||
)
|
|
||||||
RETURN NUMBER
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2004 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: Acct_Balance.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Aclculate Balance based on Account Sign + Type
|
|
||||||
* Description:
|
|
||||||
* If an account is specified and found
|
|
||||||
* - If the account sign is Natural it sets it based on Account Type
|
|
||||||
* Returns Credit or Debit Balance
|
|
||||||
* Test:
|
|
||||||
SELECT Acct_Balance (0,11,22) FROM DUAL
|
|
||||||
SELECT AccountType, AccountSign,
|
|
||||||
Acct_Balance(C_ElementValue_ID, 20, 10) "DR Balance",
|
|
||||||
Acct_Balance(C_ElementValue_ID, 10, 20) "CR Balance"
|
|
||||||
FROM C_ElementValue
|
|
||||||
WHERE AccountSign<>'N'
|
|
||||||
ORDER BY AccountSign
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
v_balance NUMBER;
|
|
||||||
v_AccountType C_ElementValue.AccountType%TYPE;
|
|
||||||
v_AccountSign C_ElementValue.AccountSign%TYPE;
|
|
||||||
BEGIN
|
|
||||||
v_balance := p_AmtDr - p_AmtCr;
|
|
||||||
--
|
|
||||||
IF (p_Account_ID > 0) THEN
|
|
||||||
SELECT AccountType, AccountSign
|
|
||||||
INTO v_AccountType, v_AccountSign
|
|
||||||
FROM C_ElementValue
|
|
||||||
WHERE C_ElementValue_ID=p_Account_ID;
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('Type=' || v_AccountType || ' - Sign=' || v_AccountSign);
|
|
||||||
-- Natural Account Sign
|
|
||||||
IF (v_AccountSign='N') THEN
|
|
||||||
IF (v_AccountType IN ('A','E')) THEN
|
|
||||||
v_AccountSign := 'D';
|
|
||||||
ELSE
|
|
||||||
v_AccountSign := 'C';
|
|
||||||
END IF;
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('Type=' || v_AccountType || ' - Sign=' || v_AccountSign);
|
|
||||||
END IF;
|
|
||||||
-- Debit Balance
|
|
||||||
IF (v_AccountSign = 'C') THEN
|
|
||||||
v_balance := p_AmtCr - p_AmtDr;
|
|
||||||
END IF;
|
|
||||||
END IF;
|
|
||||||
--
|
|
||||||
RETURN v_balance;
|
|
||||||
EXCEPTION WHEN OTHERS THEN
|
|
||||||
-- In case Acct not found
|
|
||||||
RETURN p_AmtDr - p_AmtCr;
|
|
||||||
END acctBalance;
|
|
||||||
/
|
|
|
@ -1,48 +0,0 @@
|
||||||
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 Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere 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;
|
|
||||||
--
|
|
||||||
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;
|
|
||||||
/
|
|
|
@ -1,49 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION bomPriceList
|
|
||||||
(
|
|
||||||
Product_ID IN NUMBER,
|
|
||||||
PriceList_Version_ID IN NUMBER
|
|
||||||
)
|
|
||||||
RETURN NUMBER
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2002 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: BOM_PriceList.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Return List 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;
|
|
||||||
--
|
|
||||||
BEGIN
|
|
||||||
-- Try to get price from pricelist directly
|
|
||||||
SELECT COALESCE (SUM(PriceList), 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=' || Price);
|
|
||||||
|
|
||||||
-- No Price - Check if BOM
|
|
||||||
IF (v_Price = 0) THEN
|
|
||||||
FOR bom IN CUR_BOM LOOP
|
|
||||||
v_ProductPrice := bomPriceList (bom.M_ProductBOM_ID, PriceList_Version_ID);
|
|
||||||
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('Qry=' || bom.BOMQty || ' @ ' || v_ProductPrice || ', Price=' || v_Price);
|
|
||||||
END LOOP; -- BOM
|
|
||||||
END IF;
|
|
||||||
--
|
|
||||||
RETURN v_Price;
|
|
||||||
END bomPriceList;
|
|
||||||
/
|
|
|
@ -1,49 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION bomPriceStd
|
|
||||||
(
|
|
||||||
Product_ID IN NUMBER,
|
|
||||||
PriceList_Version_ID IN NUMBER
|
|
||||||
)
|
|
||||||
RETURN NUMBER
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2002 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: BOM_PriceStd.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Return Standard 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;
|
|
||||||
--
|
|
||||||
BEGIN
|
|
||||||
-- Try to get price from pricelist directly
|
|
||||||
SELECT COALESCE(SUM(PriceStd), 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 := bomPriceStd (bom.M_ProductBOM_ID, PriceList_Version_ID);
|
|
||||||
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('Price=' || v_Price);
|
|
||||||
END LOOP; -- BOM
|
|
||||||
END IF;
|
|
||||||
--
|
|
||||||
RETURN v_Price;
|
|
||||||
END bomPriceStd;
|
|
||||||
/
|
|
|
@ -1,21 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION bomQtyAvailable
|
|
||||||
(
|
|
||||||
Product_ID IN NUMBER,
|
|
||||||
Warehouse_ID IN NUMBER,
|
|
||||||
Locator_ID IN NUMBER -- Only used, if warehouse is null
|
|
||||||
)
|
|
||||||
RETURN NUMBER
|
|
||||||
/******************************************************************************
|
|
||||||
* ** Adempiere Product ** Copyright (c) 1999-2001 Accorto, Inc. USA
|
|
||||||
* Open Source Software Provided "AS IS" without warranty or liability
|
|
||||||
* When you use any parts (changed or unchanged), add "Powered by Adempiere" to
|
|
||||||
* your product name; See license details http://www.adempiere.org/license.html
|
|
||||||
******************************************************************************
|
|
||||||
* Return quantity available for BOM
|
|
||||||
*/
|
|
||||||
AS
|
|
||||||
BEGIN
|
|
||||||
RETURN bomQtyOnHand(Product_ID, Warehouse_ID, Locator_ID)
|
|
||||||
- bomQtyReserved(Product_ID, Warehouse_ID, Locator_ID);
|
|
||||||
END bomQtyAvailable;
|
|
||||||
/
|
|
|
@ -1,120 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION bomQtyOnHand
|
|
||||||
(
|
|
||||||
Product_ID IN NUMBER,
|
|
||||||
Warehouse_ID IN NUMBER,
|
|
||||||
Locator_ID IN NUMBER -- Only used, if warehouse is null
|
|
||||||
)
|
|
||||||
RETURN NUMBER
|
|
||||||
/******************************************************************************
|
|
||||||
* ** Adempiere Product ** Copyright (c) 1999-2001 Accorto, Inc. USA
|
|
||||||
* Open Source Software Provided "AS IS" without warranty or liability
|
|
||||||
* When you use any parts (changed or unchanged), add "Powered by Adempiere" to
|
|
||||||
* your product name; See license details http://www.adempiere.org/license.html
|
|
||||||
******************************************************************************
|
|
||||||
* Return quantity on hand for BOM
|
|
||||||
*/
|
|
||||||
AS
|
|
||||||
myWarehouse_ID NUMBER;
|
|
||||||
Quantity NUMBER := 99999; -- unlimited
|
|
||||||
IsBOM CHAR(1);
|
|
||||||
IsStocked CHAR(1);
|
|
||||||
ProductType CHAR(1);
|
|
||||||
ProductQty NUMBER;
|
|
||||||
StdPrecision NUMBER;
|
|
||||||
-- Get BOM Product info
|
|
||||||
CURSOR CUR_BOM IS
|
|
||||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType
|
|
||||||
FROM M_Product_BOM b, M_Product p
|
|
||||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
|
||||||
AND b.M_Product_ID=Product_ID;
|
|
||||||
--
|
|
||||||
BEGIN
|
|
||||||
-- Check Parameters
|
|
||||||
myWarehouse_ID := Warehouse_ID;
|
|
||||||
IF (myWarehouse_ID IS NULL) THEN
|
|
||||||
IF (Locator_ID IS NULL) THEN
|
|
||||||
RETURN 0;
|
|
||||||
ELSE
|
|
||||||
SELECT SUM(M_Warehouse_ID) INTO myWarehouse_ID
|
|
||||||
FROM M_Locator
|
|
||||||
WHERE M_Locator_ID=Locator_ID;
|
|
||||||
END IF;
|
|
||||||
END IF;
|
|
||||||
IF (myWarehouse_ID IS NULL) THEN
|
|
||||||
RETURN 0;
|
|
||||||
END IF;
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('Warehouse=' || myWarehouse_ID);
|
|
||||||
|
|
||||||
-- Check, if product exists and if it is stocked
|
|
||||||
BEGIN
|
|
||||||
SELECT IsBOM, ProductType, IsStocked
|
|
||||||
INTO IsBOM, ProductType, IsStocked
|
|
||||||
FROM M_Product
|
|
||||||
WHERE M_Product_ID=Product_ID;
|
|
||||||
--
|
|
||||||
EXCEPTION -- not found
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
RETURN 0;
|
|
||||||
END;
|
|
||||||
-- Unimited capacity if no item
|
|
||||||
IF (IsBOM='N' AND (ProductType<>'I' OR IsStocked='N')) THEN
|
|
||||||
RETURN Quantity;
|
|
||||||
-- Stocked item
|
|
||||||
ELSIF (IsStocked='Y') THEN
|
|
||||||
-- Get ProductQty
|
|
||||||
SELECT NVL(SUM(QtyOnHand), 0)
|
|
||||||
INTO ProductQty
|
|
||||||
FROM M_Storage s
|
|
||||||
WHERE M_Product_ID=Product_ID
|
|
||||||
AND EXISTS (SELECT * FROM M_Locator l WHERE s.M_Locator_ID=l.M_Locator_ID
|
|
||||||
AND l.M_Warehouse_ID=myWarehouse_ID);
|
|
||||||
--
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('Qty=' || ProductQty);
|
|
||||||
RETURN ProductQty;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Go though BOM
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('BOM');
|
|
||||||
FOR bom IN CUR_BOM LOOP
|
|
||||||
-- Stocked Items "leaf node"
|
|
||||||
IF (bom.ProductType = 'I' AND bom.IsStocked = 'Y') THEN
|
|
||||||
-- Get ProductQty
|
|
||||||
SELECT NVL(SUM(QtyOnHand), 0)
|
|
||||||
INTO ProductQty
|
|
||||||
FROM M_Storage s
|
|
||||||
WHERE M_Product_ID=bom.M_ProductBOM_ID
|
|
||||||
AND EXISTS (SELECT * FROM M_Locator l WHERE s.M_Locator_ID=l.M_Locator_ID
|
|
||||||
AND l.M_Warehouse_ID=myWarehouse_ID);
|
|
||||||
-- Get Rounding Precision
|
|
||||||
SELECT NVL(MAX(u.StdPrecision), 0)
|
|
||||||
INTO StdPrecision
|
|
||||||
FROM C_UOM u, M_Product p
|
|
||||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=bom.M_ProductBOM_ID;
|
|
||||||
-- How much can we make with this product
|
|
||||||
ProductQty := ROUND (ProductQty/bom.BOMQty, StdPrecision);
|
|
||||||
-- How much can we make overall
|
|
||||||
IF (ProductQty < Quantity) THEN
|
|
||||||
Quantity := ProductQty;
|
|
||||||
END IF;
|
|
||||||
-- Another BOM
|
|
||||||
ELSIF (bom.IsBOM = 'Y') THEN
|
|
||||||
ProductQty := bomQtyOnHand (bom.M_ProductBOM_ID, myWarehouse_ID, Locator_ID);
|
|
||||||
-- How much can we make overall
|
|
||||||
IF (ProductQty < Quantity) THEN
|
|
||||||
Quantity := ProductQty;
|
|
||||||
END IF;
|
|
||||||
END IF;
|
|
||||||
END LOOP; -- BOM
|
|
||||||
|
|
||||||
IF (Quantity > 0) THEN
|
|
||||||
-- Get Rounding Precision for Product
|
|
||||||
SELECT NVL(MAX(u.StdPrecision), 0)
|
|
||||||
INTO StdPrecision
|
|
||||||
FROM C_UOM u, M_Product p
|
|
||||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=Product_ID;
|
|
||||||
--
|
|
||||||
RETURN ROUND (Quantity, StdPrecision);
|
|
||||||
END IF;
|
|
||||||
RETURN 0;
|
|
||||||
END bomQtyOnHand;
|
|
||||||
/
|
|
|
@ -1,126 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION bomQtyOrdered
|
|
||||||
(
|
|
||||||
p_Product_ID IN NUMBER,
|
|
||||||
p_Warehouse_ID IN NUMBER,
|
|
||||||
p_Locator_ID IN NUMBER -- Only used, if warehouse is null
|
|
||||||
)
|
|
||||||
RETURN NUMBER
|
|
||||||
/******************************************************************************
|
|
||||||
* ** Adempiere Product ** Copyright (c) 1999-2001 Accorto, Inc. USA
|
|
||||||
* Open Source Software Provided "AS IS" without warranty or liability
|
|
||||||
* When you use any parts (changed or unchanged), add "Powered by Adempiere" to
|
|
||||||
* your product name; See license details http://www.adempiere.org/license.html
|
|
||||||
******************************************************************************
|
|
||||||
* Return quantity ordered for BOM
|
|
||||||
*/
|
|
||||||
AS
|
|
||||||
v_Warehouse_ID NUMBER;
|
|
||||||
v_Quantity NUMBER := 99999; -- unlimited
|
|
||||||
v_IsBOM CHAR(1);
|
|
||||||
v_IsStocked CHAR(1);
|
|
||||||
v_ProductType CHAR(1);
|
|
||||||
v_ProductQty NUMBER;
|
|
||||||
v_StdPrecision NUMBER;
|
|
||||||
-- Get BOM Product info
|
|
||||||
CURSOR CUR_BOM IS
|
|
||||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType
|
|
||||||
FROM M_Product_BOM b, M_Product p
|
|
||||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
|
||||||
AND b.M_Product_ID=p_Product_ID;
|
|
||||||
--
|
|
||||||
BEGIN
|
|
||||||
-- Check Parameters
|
|
||||||
v_Warehouse_ID := p_Warehouse_ID;
|
|
||||||
IF (v_Warehouse_ID IS NULL) THEN
|
|
||||||
IF (p_Locator_ID IS NULL) THEN
|
|
||||||
RETURN 0;
|
|
||||||
ELSE
|
|
||||||
SELECT MAX(M_Warehouse_ID) INTO v_Warehouse_ID
|
|
||||||
FROM M_Locator
|
|
||||||
WHERE M_Locator_ID=p_Locator_ID;
|
|
||||||
END IF;
|
|
||||||
END IF;
|
|
||||||
IF (v_Warehouse_ID IS NULL) THEN
|
|
||||||
RETURN 0;
|
|
||||||
END IF;
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('Warehouse=' || v_Warehouse_ID);
|
|
||||||
|
|
||||||
-- Check, if product exists and if it is stocked
|
|
||||||
BEGIN
|
|
||||||
SELECT IsBOM, ProductType, IsStocked
|
|
||||||
INTO v_IsBOM, v_ProductType, v_IsStocked
|
|
||||||
FROM M_Product
|
|
||||||
WHERE M_Product_ID=p_Product_ID;
|
|
||||||
--
|
|
||||||
EXCEPTION -- not found
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
RETURN 0;
|
|
||||||
END;
|
|
||||||
|
|
||||||
-- No reservation for non-stocked
|
|
||||||
IF (v_IsBOM='N' AND (v_ProductType<>'I' OR v_IsStocked='N')) THEN
|
|
||||||
RETURN 0;
|
|
||||||
-- Stocked item
|
|
||||||
ELSIF (v_IsStocked='Y') THEN
|
|
||||||
-- Get ProductQty
|
|
||||||
SELECT NVL(SUM(QtyOrdered), 0)
|
|
||||||
INTO v_ProductQty
|
|
||||||
FROM M_Storage s
|
|
||||||
WHERE M_Product_ID=p_Product_ID
|
|
||||||
AND EXISTS (SELECT * FROM M_Locator l WHERE s.M_Locator_ID=l.M_Locator_ID
|
|
||||||
AND l.M_Warehouse_ID=v_Warehouse_ID);
|
|
||||||
--
|
|
||||||
RETURN v_ProductQty;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Go though BOM
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('BOM');
|
|
||||||
FOR bom IN CUR_BOM LOOP
|
|
||||||
-- Stocked Items "leaf node"
|
|
||||||
IF (bom.ProductType = 'I' AND bom.IsStocked = 'Y') THEN
|
|
||||||
-- Get ProductQty
|
|
||||||
SELECT NVL(SUM(QtyOrdered), 0)
|
|
||||||
INTO v_ProductQty
|
|
||||||
FROM M_Storage s
|
|
||||||
WHERE M_Product_ID=bom.M_ProductBOM_ID
|
|
||||||
AND EXISTS (SELECT * FROM M_Locator l WHERE s.M_Locator_ID=l.M_Locator_ID
|
|
||||||
AND l.M_Warehouse_ID=v_Warehouse_ID);
|
|
||||||
-- Get Rounding Precision
|
|
||||||
SELECT NVL(MAX(u.StdPrecision), 0)
|
|
||||||
INTO v_StdPrecision
|
|
||||||
FROM C_UOM u, M_Product p
|
|
||||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=bom.M_ProductBOM_ID;
|
|
||||||
-- How much can we make with this product
|
|
||||||
v_ProductQty := ROUND (v_ProductQty/bom.BOMQty, v_StdPrecision);
|
|
||||||
-- How much can we make overall
|
|
||||||
IF (v_ProductQty < v_Quantity) THEN
|
|
||||||
v_Quantity := v_ProductQty;
|
|
||||||
END IF;
|
|
||||||
-- Another BOM
|
|
||||||
ELSIF (bom.IsBOM = 'Y') THEN
|
|
||||||
v_ProductQty := bomQtyOrdered (bom.M_ProductBOM_ID, v_Warehouse_ID, p_Locator_ID);
|
|
||||||
-- How much can we make overall
|
|
||||||
IF (v_ProductQty < v_Quantity) THEN
|
|
||||||
v_Quantity := v_ProductQty;
|
|
||||||
END IF;
|
|
||||||
END IF;
|
|
||||||
END LOOP; -- BOM
|
|
||||||
|
|
||||||
-- Unlimited (e.g. only services)
|
|
||||||
IF (v_Quantity = 99999) THEN
|
|
||||||
RETURN 0;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
IF (v_Quantity > 0) THEN
|
|
||||||
-- Get Rounding Precision for Product
|
|
||||||
SELECT NVL(MAX(u.StdPrecision), 0)
|
|
||||||
INTO v_StdPrecision
|
|
||||||
FROM C_UOM u, M_Product p
|
|
||||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=p_Product_ID;
|
|
||||||
--
|
|
||||||
RETURN ROUND (v_Quantity, v_StdPrecision);
|
|
||||||
END IF;
|
|
||||||
--
|
|
||||||
RETURN 0;
|
|
||||||
END bomQtyOrdered;
|
|
||||||
/
|
|
|
@ -1,125 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION bomQtyReserved
|
|
||||||
(
|
|
||||||
p_Product_ID IN NUMBER,
|
|
||||||
p_Warehouse_ID IN NUMBER,
|
|
||||||
p_Locator_ID IN NUMBER -- Only used, if warehouse is null
|
|
||||||
)
|
|
||||||
RETURN NUMBER
|
|
||||||
/******************************************************************************
|
|
||||||
* ** Adempiere Product ** Copyright (c) 1999-2001 Accorto, Inc. USA
|
|
||||||
* Open Source Software Provided "AS IS" without warranty or liability
|
|
||||||
* When you use any parts (changed or unchanged), add "Powered by Adempiere" to
|
|
||||||
* your product name; See license details http://www.adempiere.org/license.html
|
|
||||||
******************************************************************************
|
|
||||||
* Return quantity reserved for BOM
|
|
||||||
*/
|
|
||||||
AS
|
|
||||||
v_Warehouse_ID NUMBER;
|
|
||||||
v_Quantity NUMBER := 99999; -- unlimited
|
|
||||||
v_IsBOM CHAR(1);
|
|
||||||
v_IsStocked CHAR(1);
|
|
||||||
v_ProductType CHAR(1);
|
|
||||||
v_ProductQty NUMBER;
|
|
||||||
v_StdPrecision NUMBER;
|
|
||||||
-- Get BOM Product info
|
|
||||||
CURSOR CUR_BOM IS
|
|
||||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType
|
|
||||||
FROM M_Product_BOM b, M_Product p
|
|
||||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
|
||||||
AND b.M_Product_ID=p_Product_ID;
|
|
||||||
--
|
|
||||||
BEGIN
|
|
||||||
-- Check Parameters
|
|
||||||
v_Warehouse_ID := p_Warehouse_ID;
|
|
||||||
IF (v_Warehouse_ID IS NULL) THEN
|
|
||||||
IF (p_Locator_ID IS NULL) THEN
|
|
||||||
RETURN 0;
|
|
||||||
ELSE
|
|
||||||
SELECT MAX(M_Warehouse_ID) INTO v_Warehouse_ID
|
|
||||||
FROM M_Locator
|
|
||||||
WHERE M_Locator_ID=p_Locator_ID;
|
|
||||||
END IF;
|
|
||||||
END IF;
|
|
||||||
IF (v_Warehouse_ID IS NULL) THEN
|
|
||||||
RETURN 0;
|
|
||||||
END IF;
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('Warehouse=' || v_Warehouse_ID);
|
|
||||||
|
|
||||||
-- Check, if product exists and if it is stocked
|
|
||||||
BEGIN
|
|
||||||
SELECT IsBOM, ProductType, IsStocked
|
|
||||||
INTO v_IsBOM, v_ProductType, v_IsStocked
|
|
||||||
FROM M_Product
|
|
||||||
WHERE M_Product_ID=p_Product_ID;
|
|
||||||
--
|
|
||||||
EXCEPTION -- not found
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
RETURN 0;
|
|
||||||
END;
|
|
||||||
|
|
||||||
-- No reservation for non-stocked
|
|
||||||
IF (v_IsBOM='N' AND (v_ProductType<>'I' OR v_IsStocked='N')) THEN
|
|
||||||
RETURN 0;
|
|
||||||
-- Stocked item
|
|
||||||
ELSIF (v_IsStocked='Y') THEN
|
|
||||||
-- Get ProductQty
|
|
||||||
SELECT NVL(SUM(QtyReserved), 0)
|
|
||||||
INTO v_ProductQty
|
|
||||||
FROM M_Storage s
|
|
||||||
WHERE M_Product_ID=p_Product_ID
|
|
||||||
AND EXISTS (SELECT * FROM M_Locator l WHERE s.M_Locator_ID=l.M_Locator_ID
|
|
||||||
AND l.M_Warehouse_ID=v_Warehouse_ID);
|
|
||||||
--
|
|
||||||
RETURN v_ProductQty;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Go though BOM
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('BOM');
|
|
||||||
FOR bom IN CUR_BOM LOOP
|
|
||||||
-- Stocked Items "leaf node"
|
|
||||||
IF (bom.ProductType = 'I' AND bom.IsStocked = 'Y') THEN
|
|
||||||
-- Get ProductQty
|
|
||||||
SELECT NVL(SUM(QtyReserved), 0)
|
|
||||||
INTO v_ProductQty
|
|
||||||
FROM M_Storage s
|
|
||||||
WHERE M_Product_ID=bom.M_ProductBOM_ID
|
|
||||||
AND EXISTS (SELECT * FROM M_Locator l WHERE s.M_Locator_ID=l.M_Locator_ID
|
|
||||||
AND l.M_Warehouse_ID=v_Warehouse_ID);
|
|
||||||
-- Get Rounding Precision
|
|
||||||
SELECT NVL(MAX(u.StdPrecision), 0)
|
|
||||||
INTO v_StdPrecision
|
|
||||||
FROM C_UOM u, M_Product p
|
|
||||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=bom.M_ProductBOM_ID;
|
|
||||||
-- How much can we make with this product
|
|
||||||
v_ProductQty := ROUND (v_ProductQty/bom.BOMQty, v_StdPrecision);
|
|
||||||
-- How much can we make overall
|
|
||||||
IF (v_ProductQty < v_Quantity) THEN
|
|
||||||
v_Quantity := v_ProductQty;
|
|
||||||
END IF;
|
|
||||||
-- Another BOM
|
|
||||||
ELSIF (bom.IsBOM = 'Y') THEN
|
|
||||||
v_ProductQty := bomQtyReserved (bom.M_ProductBOM_ID, v_Warehouse_ID, p_Locator_ID);
|
|
||||||
-- How much can we make overall
|
|
||||||
IF (v_ProductQty < v_Quantity) THEN
|
|
||||||
v_Quantity := v_ProductQty;
|
|
||||||
END IF;
|
|
||||||
END IF;
|
|
||||||
END LOOP; -- BOM
|
|
||||||
|
|
||||||
-- Unlimited (e.g. only services)
|
|
||||||
IF (v_Quantity = 99999) THEN
|
|
||||||
RETURN 0;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
IF (v_Quantity > 0) THEN
|
|
||||||
-- Get Rounding Precision for Product
|
|
||||||
SELECT NVL(MAX(u.StdPrecision), 0)
|
|
||||||
INTO v_StdPrecision
|
|
||||||
FROM C_UOM u, M_Product p
|
|
||||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=p_Product_ID;
|
|
||||||
--
|
|
||||||
RETURN ROUND (v_Quantity, v_StdPrecision);
|
|
||||||
END IF;
|
|
||||||
RETURN 0;
|
|
||||||
END bomQtyReserved;
|
|
||||||
/
|
|
|
@ -1,34 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION bpartnerRemitLocation
|
|
||||||
(
|
|
||||||
p_C_BPartner_ID C_BPartner.C_BPartner_ID%TYPE
|
|
||||||
)
|
|
||||||
RETURN NUMBER
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2002 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: C_BPartner_RemitLocation.SQL,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Return the first RemitTo C_Location_ID of a Business Partner
|
|
||||||
* Description:
|
|
||||||
*
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
v_C_Location_ID NUMBER := NULL;
|
|
||||||
CURSOR CUR_BPLoc IS
|
|
||||||
SELECT IsRemitTo, C_Location_ID
|
|
||||||
FROM C_BPartner_Location
|
|
||||||
WHERE C_BPartner_ID=p_C_BPartner_ID
|
|
||||||
ORDER BY IsRemitTo DESC;
|
|
||||||
BEGIN
|
|
||||||
FOR l IN CUR_BPLoc LOOP
|
|
||||||
IF (v_C_Location_ID IS NULL) THEN
|
|
||||||
v_C_Location_ID := l.C_Location_ID;
|
|
||||||
END IF;
|
|
||||||
END LOOP;
|
|
||||||
RETURN v_C_Location_ID;
|
|
||||||
END bpartnerRemitLocation;
|
|
||||||
/
|
|
|
@ -1,47 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION currencyBase
|
|
||||||
(
|
|
||||||
p_Amount IN NUMBER,
|
|
||||||
p_CurFrom_ID IN NUMBER,
|
|
||||||
p_ConvDate IN DATE,
|
|
||||||
p_Client_ID IN NUMBER,
|
|
||||||
p_Org_ID IN NUMBER
|
|
||||||
)
|
|
||||||
RETURN NUMBER
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: C_Base_Convert.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Convert Amount to Base Currency of Client
|
|
||||||
* Description:
|
|
||||||
* Get CurrencyTo from Client
|
|
||||||
* Returns NULL, if conversion not found
|
|
||||||
* Standard Rounding
|
|
||||||
* Test:
|
|
||||||
* SELECT C_Base_Convert(100,116,11,null) FROM DUAL => 64.72
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
v_CurTo_ID NUMBER;
|
|
||||||
BEGIN
|
|
||||||
-- Get Currency
|
|
||||||
SELECT MAX(ac.C_Currency_ID)
|
|
||||||
INTO v_CurTo_ID
|
|
||||||
FROM AD_ClientInfo ci, C_AcctSchema ac
|
|
||||||
WHERE ci.C_AcctSchema1_ID=ac.C_AcctSchema_ID
|
|
||||||
AND ci.AD_Client_ID=p_Client_ID;
|
|
||||||
-- Same as Currency_Conversion - if currency/rate not found - return 0
|
|
||||||
IF (v_CurTo_ID IS NULL) THEN
|
|
||||||
RETURN NULL;
|
|
||||||
END IF;
|
|
||||||
-- Same currency
|
|
||||||
IF (p_CurFrom_ID = v_CurTo_ID) THEN
|
|
||||||
RETURN p_Amount;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
RETURN currencyConvert (p_Amount, p_CurFrom_ID, v_CurTo_ID, p_ConvDate, null, p_Client_ID, p_Org_ID);
|
|
||||||
END currencyBase;
|
|
||||||
/
|
|
|
@ -1,51 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION currencyConvert
|
|
||||||
(
|
|
||||||
p_Amount IN NUMBER,
|
|
||||||
p_CurFrom_ID IN NUMBER,
|
|
||||||
p_CurTo_ID IN NUMBER,
|
|
||||||
p_ConvDate IN DATE,
|
|
||||||
p_ConversionType_ID IN NUMBER,
|
|
||||||
p_Client_ID IN NUMBER,
|
|
||||||
p_Org_ID IN NUMBER
|
|
||||||
)
|
|
||||||
RETURN NUMBER
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: C_Currency_Convert.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Convert Amount (using IDs)
|
|
||||||
* Description:
|
|
||||||
* from CurrencyFrom_ID to CurrencyTo_ID
|
|
||||||
* Returns NULL, if conversion not found
|
|
||||||
* Standard Rounding
|
|
||||||
* Test:
|
|
||||||
* SELECT C_Currency_Convert(100,116,100,null,null) FROM DUAL => 64.72
|
|
||||||
* SELECT C_Currency_Convert(100,116,100) FROM DUAL => 64.72
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
v_Rate NUMBER;
|
|
||||||
BEGIN
|
|
||||||
-- Return Amount
|
|
||||||
IF (p_Amount = 0 OR p_CurFrom_ID = p_CurTo_ID) THEN
|
|
||||||
RETURN p_Amount;
|
|
||||||
END IF;
|
|
||||||
-- Return NULL
|
|
||||||
IF (p_Amount IS NULL OR p_CurFrom_ID IS NULL OR p_CurTo_ID IS NULL) THEN
|
|
||||||
RETURN NULL;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Get Rate
|
|
||||||
v_Rate := currencyRate (p_CurFrom_ID, p_CurTo_ID, p_ConvDate, p_ConversionType_ID, p_Client_ID, p_Org_ID);
|
|
||||||
IF (v_Rate IS NULL) THEN
|
|
||||||
RETURN NULL;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Standard Precision
|
|
||||||
RETURN currencyRound(p_Amount * v_Rate, p_CurTo_ID, null);
|
|
||||||
END currencyConvert;
|
|
||||||
/
|
|
|
@ -1,171 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION currencyRate
|
|
||||||
(
|
|
||||||
p_CurFrom_ID IN NUMBER,
|
|
||||||
p_CurTo_ID IN NUMBER,
|
|
||||||
p_ConvDate IN DATE,
|
|
||||||
p_ConversionType_ID IN NUMBER,
|
|
||||||
p_Client_ID IN NUMBER,
|
|
||||||
p_Org_ID IN NUMBER
|
|
||||||
)
|
|
||||||
RETURN NUMBER
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: C_Currency_Rate.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Return Conversion Rate
|
|
||||||
* Description:
|
|
||||||
* from CurrencyFrom_ID to CurrencyTo_ID
|
|
||||||
* Returns NULL, if rate not found
|
|
||||||
* Test
|
|
||||||
* SELECT C_Currency_Rate(116, 100, null, null) FROM DUAL; => .647169
|
|
||||||
* SELECT C_Currency_Rate(116, 100) FROM DUAL; => .647169
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
-- Currency From variables
|
|
||||||
cf_IsEuro CHAR(1);
|
|
||||||
cf_IsEMUMember CHAR(1);
|
|
||||||
cf_EMUEntryDate DATE;
|
|
||||||
cf_EMURate NUMBER;
|
|
||||||
-- Currency To variables
|
|
||||||
ct_IsEuro CHAR(1);
|
|
||||||
ct_IsEMUMember CHAR(1);
|
|
||||||
ct_EMUEntryDate DATE;
|
|
||||||
ct_EMURate NUMBER;
|
|
||||||
-- Triangle
|
|
||||||
v_CurrencyFrom NUMBER;
|
|
||||||
v_CurrencyTo NUMBER;
|
|
||||||
v_CurrencyEuro NUMBER;
|
|
||||||
--
|
|
||||||
v_ConvDate DATE := SysDate;
|
|
||||||
v_ConversionType_ID NUMBER := 0;
|
|
||||||
v_Rate NUMBER;
|
|
||||||
BEGIN
|
|
||||||
-- No Conversion
|
|
||||||
IF (p_CurFrom_ID = p_CurTo_ID) THEN
|
|
||||||
RETURN 1;
|
|
||||||
END IF;
|
|
||||||
-- Default Date Parameter
|
|
||||||
IF (p_ConvDate IS NOT NULL) THEN
|
|
||||||
v_ConvDate := p_ConvDate; -- SysDate
|
|
||||||
END IF;
|
|
||||||
-- Default Conversion Type
|
|
||||||
IF (p_ConversionType_ID IS NULL OR p_ConversionType_ID = 0) THEN
|
|
||||||
BEGIN
|
|
||||||
SELECT C_ConversionType_ID
|
|
||||||
INTO v_ConversionType_ID
|
|
||||||
FROM C_ConversionType
|
|
||||||
WHERE IsDefault='Y'
|
|
||||||
AND AD_Client_ID IN (0,p_Client_ID)
|
|
||||||
AND ROWNUM=1
|
|
||||||
ORDER BY AD_Client_ID DESC;
|
|
||||||
EXCEPTION WHEN OTHERS THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Conversion Type Not Found');
|
|
||||||
END;
|
|
||||||
ELSE
|
|
||||||
v_ConversionType_ID := p_ConversionType_ID;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Get Currency Info
|
|
||||||
SELECT MAX(IsEuro), MAX(IsEMUMember), MAX(EMUEntryDate), MAX(EMURate)
|
|
||||||
INTO cf_IsEuro, cf_IsEMUMember, cf_EMUEntryDate, cf_EMURate
|
|
||||||
FROM C_Currency
|
|
||||||
WHERE C_Currency_ID = p_CurFrom_ID;
|
|
||||||
-- Not Found
|
|
||||||
IF (cf_IsEuro IS NULL) THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE('From Currency Not Found');
|
|
||||||
RETURN NULL;
|
|
||||||
END IF;
|
|
||||||
SELECT MAX(IsEuro), MAX(IsEMUMember), MAX(EMUEntryDate), MAX(EMURate)
|
|
||||||
INTO ct_IsEuro, ct_IsEMUMember, ct_EMUEntryDate, ct_EMURate
|
|
||||||
FROM C_Currency
|
|
||||||
WHERE C_Currency_ID = p_CurTo_ID;
|
|
||||||
-- Not Found
|
|
||||||
IF (ct_IsEuro IS NULL) THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE('To Currency Not Found');
|
|
||||||
RETURN NULL;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Fixed - From Euro to EMU
|
|
||||||
IF (cf_IsEuro = 'Y' AND ct_IsEMUMember ='Y' AND v_ConvDate >= ct_EMUEntryDate) THEN
|
|
||||||
RETURN ct_EMURate;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Fixed - From EMU to Euro
|
|
||||||
IF (ct_IsEuro = 'Y' AND cf_IsEMUMember ='Y' AND v_ConvDate >= cf_EMUEntryDate) THEN
|
|
||||||
RETURN 1 / cf_EMURate;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Fixed - From EMU to EMU
|
|
||||||
IF (cf_IsEMUMember = 'Y' AND cf_IsEMUMember ='Y'
|
|
||||||
AND v_ConvDate >= cf_EMUEntryDate AND v_ConvDate >= ct_EMUEntryDate) THEN
|
|
||||||
RETURN ct_EMURate / cf_EMURate;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Flexible Rates
|
|
||||||
v_CurrencyFrom := p_CurFrom_ID;
|
|
||||||
v_CurrencyTo := p_CurTo_ID;
|
|
||||||
|
|
||||||
-- if EMU Member involved, replace From/To Currency
|
|
||||||
IF ((cf_isEMUMember = 'Y' AND v_ConvDate >= cf_EMUEntryDate)
|
|
||||||
OR (ct_isEMUMember = 'Y' AND v_ConvDate >= ct_EMUEntryDate)) THEN
|
|
||||||
SELECT MAX(C_Currency_ID)
|
|
||||||
INTO v_CurrencyEuro
|
|
||||||
FROM C_Currency
|
|
||||||
WHERE IsEuro = 'Y';
|
|
||||||
-- Conversion Rate not Found
|
|
||||||
IF (v_CurrencyEuro IS NULL) THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Euro Not Found');
|
|
||||||
RETURN NULL;
|
|
||||||
END IF;
|
|
||||||
IF (cf_isEMUMember = 'Y' AND v_ConvDate >= cf_EMUEntryDate) THEN
|
|
||||||
v_CurrencyFrom := v_CurrencyEuro;
|
|
||||||
ELSE
|
|
||||||
v_CurrencyTo := v_CurrencyEuro;
|
|
||||||
END IF;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Get Rate
|
|
||||||
DECLARE
|
|
||||||
CURSOR CUR_Rate IS
|
|
||||||
SELECT MultiplyRate
|
|
||||||
FROM C_Conversion_Rate
|
|
||||||
WHERE C_Currency_ID=v_CurrencyFrom AND C_Currency_ID_To=v_CurrencyTo
|
|
||||||
AND C_ConversionType_ID=v_ConversionType_ID
|
|
||||||
AND v_ConvDate BETWEEN ValidFrom AND ValidTo
|
|
||||||
AND AD_Client_ID IN (0,p_Client_ID) AND AD_Org_ID IN (0,p_Org_ID)
|
|
||||||
ORDER BY AD_Client_ID DESC, AD_Org_ID DESC, ValidFrom DESC;
|
|
||||||
BEGIN
|
|
||||||
FOR c IN CUR_Rate LOOP
|
|
||||||
v_Rate := c.MultiplyRate;
|
|
||||||
EXIT; -- only first
|
|
||||||
END LOOP;
|
|
||||||
END;
|
|
||||||
-- Not found
|
|
||||||
IF (v_Rate IS NULL) THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Conversion Rate Not Found');
|
|
||||||
RETURN NULL;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Currency From was EMU
|
|
||||||
IF (cf_isEMUMember = 'Y' AND v_ConvDate >= cf_EMUEntryDate) THEN
|
|
||||||
RETURN v_Rate / cf_EMURate;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Currency To was EMU
|
|
||||||
IF (ct_isEMUMember = 'Y' AND v_ConvDate >= ct_EMUEntryDate) THEN
|
|
||||||
RETURN v_Rate * ct_EMURate;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
RETURN v_Rate;
|
|
||||||
|
|
||||||
EXCEPTION WHEN OTHERS THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE(SQLERRM);
|
|
||||||
RETURN NULL;
|
|
||||||
|
|
||||||
END currencyRate;
|
|
||||||
/
|
|
|
@ -1,49 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION currencyRound
|
|
||||||
(
|
|
||||||
p_Amount IN NUMBER,
|
|
||||||
p_CurTo_ID IN NUMBER,
|
|
||||||
p_Costing IN VARCHAR2 -- Default 'N'
|
|
||||||
)
|
|
||||||
RETURN NUMBER
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: C_Currency_Round.SQL,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Round amount for Traget Currency
|
|
||||||
* Description:
|
|
||||||
* Round Amount using Costing or Standard Precision
|
|
||||||
* Returns unmodified amount if currency not found
|
|
||||||
* Test:
|
|
||||||
* SELECT C_Currency_Round(C_Currency_Convert(100,116,100,null,null),100,null) FROM DUAL => 64.72
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
v_StdPrecision NUMBER;
|
|
||||||
v_CostPrecision NUMBER;
|
|
||||||
BEGIN
|
|
||||||
-- Nothing to convert
|
|
||||||
IF (p_Amount IS NULL OR p_CurTo_ID IS NULL) THEN
|
|
||||||
RETURN p_Amount;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Ger Precision
|
|
||||||
SELECT MAX(StdPrecision), MAX(CostingPrecision)
|
|
||||||
INTO v_StdPrecision, v_CostPrecision
|
|
||||||
FROM C_Currency
|
|
||||||
WHERE C_Currency_ID = p_CurTo_ID;
|
|
||||||
-- Currency Not Found
|
|
||||||
IF (v_StdPrecision IS NULL) THEN
|
|
||||||
RETURN p_Amount;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
IF (p_Costing = 'Y') THEN
|
|
||||||
RETURN ROUND (p_Amount, v_CostPrecision);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
RETURN ROUND (p_Amount, v_StdPrecision);
|
|
||||||
END currencyRound;
|
|
||||||
/
|
|
|
@ -1,74 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION invoiceDiscount
|
|
||||||
(
|
|
||||||
p_C_Invoice_ID IN NUMBER,
|
|
||||||
p_PayDate IN DATE,
|
|
||||||
p_C_InvoicePaySchedule_ID IN NUMBER
|
|
||||||
)
|
|
||||||
RETURN NUMBER
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: C_Invoice_Discount.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Calculate Payment Discount Amount
|
|
||||||
* Description:
|
|
||||||
* - Calculate discountable amount (i.e. with or without tax)
|
|
||||||
* - Calculate and return payment discount
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
v_Amount NUMBER;
|
|
||||||
v_IsDiscountLineAmt CHAR(1);
|
|
||||||
v_GrandTotal NUMBER;
|
|
||||||
v_TotalLines NUMBER;
|
|
||||||
v_C_PaymentTerm_ID NUMBER(10);
|
|
||||||
v_DocDate DATE;
|
|
||||||
v_PayDate DATE := SysDate;
|
|
||||||
v_IsPayScheduleValid CHAR(1);
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
SELECT ci.IsDiscountLineAmt, i.GrandTotal, i.TotalLines,
|
|
||||||
i.C_PaymentTerm_ID, i.DateInvoiced, i.IsPayScheduleValid
|
|
||||||
INTO v_IsDiscountLineAmt, v_GrandTotal, v_TotalLines,
|
|
||||||
v_C_PaymentTerm_ID, v_DocDate, v_IsPayScheduleValid
|
|
||||||
FROM AD_ClientInfo ci, C_Invoice i
|
|
||||||
WHERE ci.AD_Client_ID=i.AD_Client_ID
|
|
||||||
AND i.C_Invoice_ID=p_C_Invoice_ID;
|
|
||||||
-- What Amount is the Discount Base?
|
|
||||||
IF (v_IsDiscountLineAmt = 'Y') THEN
|
|
||||||
v_Amount := v_TotalLines;
|
|
||||||
ELSE
|
|
||||||
v_Amount := v_GrandTotal;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Anything to discount?
|
|
||||||
IF (v_Amount = 0) THEN
|
|
||||||
RETURN 0;
|
|
||||||
END IF;
|
|
||||||
IF (p_PayDate IS NOT NULL) THEN
|
|
||||||
v_PayDate := p_PayDate;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Valid Payment Schedule
|
|
||||||
IF (v_IsPayScheduleValid='Y' AND p_C_InvoicePaySchedule_ID > 0) THEN
|
|
||||||
SELECT COALESCE(MAX(DiscountAmt),0)
|
|
||||||
INTO v_Amount
|
|
||||||
FROM C_InvoicePaySchedule
|
|
||||||
WHERE C_InvoicePaySchedule_ID=p_C_InvoicePaySchedule_ID
|
|
||||||
AND DiscountDate <= v_PayDate;
|
|
||||||
--
|
|
||||||
RETURN v_Amount;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- return discount amount
|
|
||||||
RETURN paymentTermDiscount (v_Amount, 0, v_C_PaymentTerm_ID, v_DocDate, p_PayDate);
|
|
||||||
|
|
||||||
-- Most likely if invoice not found
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
RETURN NULL;
|
|
||||||
END invoiceDiscount;
|
|
||||||
/
|
|
|
@ -1,115 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION invoiceOpen
|
|
||||||
(
|
|
||||||
p_C_Invoice_ID IN NUMBER,
|
|
||||||
p_C_InvoicePaySchedule_ID IN NUMBER
|
|
||||||
)
|
|
||||||
RETURN NUMBER
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: C_Invoice_Open.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Calculate Open Item Amount in Invoice Currency
|
|
||||||
* Description:
|
|
||||||
* Add up total amount open for C_Invoice_ID if no split payment.
|
|
||||||
* Grand Total minus Sum of Allocations in Invoice Currency
|
|
||||||
*
|
|
||||||
* For Split Payments:
|
|
||||||
* Allocate Payments starting from first schedule.
|
|
||||||
|
|
||||||
SELECT C_Invoice_Open (109) FROM DUAL;
|
|
||||||
SELECT C_Invoice_Open (109, null) FROM DUAL;
|
|
||||||
SELECT C_Invoice_Open (109, 11) FROM DUAL;
|
|
||||||
SELECT C_Invoice_Open (109, 102) FROM DUAL;
|
|
||||||
SELECT C_Invoice_Open (109, 103) FROM DUAL;
|
|
||||||
SELECT * FROM RV_OpenItem WHERE C_Invoice_ID=109;
|
|
||||||
SELECT C_InvoicePaySchedule_ID, DueAmt FROM C_InvoicePaySchedule WHERE C_Invoice_ID=109 ORDER BY DueDate;
|
|
||||||
|
|
||||||
* Cannot be used for IsPaid as mutating
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
v_Currency_ID NUMBER(10);
|
|
||||||
v_TotalOpenAmt NUMBER := 0;
|
|
||||||
v_PaidAmt NUMBER := 0;
|
|
||||||
v_Remaining NUMBER := 0;
|
|
||||||
v_MultiplierAP NUMBER := 0;
|
|
||||||
v_MultiplierCM NUMBER := 0;
|
|
||||||
v_Temp NUMBER := 0;
|
|
||||||
--
|
|
||||||
CURSOR Cur_Alloc IS
|
|
||||||
SELECT a.AD_Client_ID, a.AD_Org_ID,
|
|
||||||
al.Amount, al.DiscountAmt, al.WriteOffAmt,
|
|
||||||
a.C_Currency_ID, a.DateTrx
|
|
||||||
FROM C_AllocationLine al
|
|
||||||
INNER JOIN C_AllocationHdr a ON (al.C_AllocationHdr_ID=a.C_AllocationHdr_ID)
|
|
||||||
WHERE al.C_Invoice_ID = p_C_Invoice_ID
|
|
||||||
AND a.IsActive='Y';
|
|
||||||
--
|
|
||||||
CURSOR Cur_PaySchedule IS
|
|
||||||
SELECT C_InvoicePaySchedule_ID, DueAmt
|
|
||||||
FROM C_InvoicePaySchedule
|
|
||||||
WHERE C_Invoice_ID = p_C_Invoice_ID
|
|
||||||
AND IsValid='Y'
|
|
||||||
ORDER BY DueDate;
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
-- Get Currency
|
|
||||||
BEGIN
|
|
||||||
SELECT MAX(C_Currency_ID), SUM(GrandTotal), MAX(MultiplierAP), MAX(Multiplier)
|
|
||||||
INTO v_Currency_ID, v_TotalOpenAmt, v_MultiplierAP, v_MultiplierCM
|
|
||||||
FROM C_Invoice_v -- corrected for CM / Split Payment
|
|
||||||
WHERE C_Invoice_ID = p_C_Invoice_ID;
|
|
||||||
EXCEPTION -- Invoice in draft form
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE('InvoiceOpen - ' || SQLERRM);
|
|
||||||
RETURN NULL;
|
|
||||||
END;
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('== C_Invoice_ID=' || p_C_Invoice_ID || ', Total=' || v_TotalOpenAmt || ', AP=' || v_MultiplierAP || ', CM=' || v_MultiplierCM);
|
|
||||||
|
|
||||||
-- Calculate Allocated Amount
|
|
||||||
FOR a IN Cur_Alloc LOOP
|
|
||||||
v_Temp := a.Amount + a.DisCountAmt + a.WriteOffAmt;
|
|
||||||
v_PaidAmt := v_PaidAmt
|
|
||||||
-- Allocation
|
|
||||||
+ currencyConvert(v_Temp * v_MultiplierAP,
|
|
||||||
a.C_Currency_ID, v_Currency_ID, a.DateTrx, null, a.AD_Client_ID, a.AD_Org_ID);
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' PaidAmt=' || v_PaidAmt || ', Allocation=' || v_Temp || ' * ' || v_MultiplierAP);
|
|
||||||
END LOOP;
|
|
||||||
|
|
||||||
-- Do we have a Payment Schedule ?
|
|
||||||
IF (p_C_InvoicePaySchedule_ID > 0) THEN -- if not valid = lists invoice amount
|
|
||||||
v_Remaining := v_PaidAmt;
|
|
||||||
FOR s IN Cur_PaySchedule LOOP
|
|
||||||
IF (s.C_InvoicePaySchedule_ID = p_C_InvoicePaySchedule_ID) THEN
|
|
||||||
v_TotalOpenAmt := (s.DueAmt*v_MultiplierCM) + v_Remaining;
|
|
||||||
IF (s.DueAmt - v_Remaining < 0) THEN
|
|
||||||
v_TotalOpenAmt := 0;
|
|
||||||
END IF;
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('Sched Total=' || v_TotalOpenAmt || ', Due=' || s.DueAmt || ',Remaining=' || v_Remaining || ',CM=' || v_MultiplierCM);
|
|
||||||
ELSE -- calculate amount, which can be allocated to next schedule
|
|
||||||
v_Remaining := v_Remaining - s.DueAmt;
|
|
||||||
IF (v_Remaining < 0) THEN
|
|
||||||
v_Remaining := 0;
|
|
||||||
END IF;
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('Remaining=' || v_Remaining);
|
|
||||||
END IF;
|
|
||||||
END LOOP;
|
|
||||||
ELSE
|
|
||||||
v_TotalOpenAmt := v_TotalOpenAmt - v_PaidAmt;
|
|
||||||
END IF;
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('== Total=' || v_TotalOpenAmt);
|
|
||||||
|
|
||||||
-- Ignore Rounding
|
|
||||||
IF (v_TotalOpenAmt BETWEEN -0.00999 AND 0.00999) THEN
|
|
||||||
v_TotalOpenAmt := 0;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Round to penny
|
|
||||||
v_TotalOpenAmt := ROUND(COALESCE(v_TotalOpenAmt,0), 2);
|
|
||||||
RETURN v_TotalOpenAmt;
|
|
||||||
END invoiceOpen;
|
|
||||||
/
|
|
|
@ -1,60 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION invoicePaid
|
|
||||||
(
|
|
||||||
p_C_Invoice_ID IN NUMBER,
|
|
||||||
p_C_Currency_ID IN NUMBER,
|
|
||||||
p_MultiplierAP IN NUMBER -- DEFAULT 1
|
|
||||||
)
|
|
||||||
RETURN NUMBER
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: C_Invoice_Paid.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Calculate Paid/Allocated amount in Currency
|
|
||||||
* Description:
|
|
||||||
* Add up total amount paid for for C_Invoice_ID.
|
|
||||||
* Split Payments are ignored.
|
|
||||||
* all allocation amounts converted to invoice C_Currency_ID
|
|
||||||
* round it to the nearest cent
|
|
||||||
* and adjust for CreditMemos by using C_Invoice_v
|
|
||||||
* and for Payments with the multiplierAP (-1, 1)
|
|
||||||
*
|
|
||||||
SELECT C_Invoice_ID, IsPaid, IsSOTrx, GrandTotal,
|
|
||||||
C_Invoice_Paid (C_Invoice_ID, C_Currency_ID, MultiplierAP)
|
|
||||||
FROM C_Invoice_v;
|
|
||||||
--
|
|
||||||
UPDATE C_Invoice_v1
|
|
||||||
SET IsPaid = CASE WHEN C_Invoice_Paid(C_Invoice_ID,C_Currency_ID,MultiplierAP)=GrandTotal THEN 'Y' ELSE 'N' END
|
|
||||||
WHERE C_Invoice_ID>1000000
|
|
||||||
*
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
v_MultiplierAP NUMBER := 1;
|
|
||||||
v_PaymentAmt NUMBER := 0;
|
|
||||||
CURSOR Cur_Alloc IS
|
|
||||||
SELECT a.AD_Client_ID, a.AD_Org_ID,
|
|
||||||
al.Amount, al.DiscountAmt, al.WriteOffAmt,
|
|
||||||
a.C_Currency_ID, a.DateTrx
|
|
||||||
FROM C_AllocationLine al
|
|
||||||
INNER JOIN C_AllocationHdr a ON (al.C_AllocationHdr_ID=a.C_AllocationHdr_ID)
|
|
||||||
WHERE al.C_Invoice_ID = p_C_Invoice_ID
|
|
||||||
AND a.IsActive='Y';
|
|
||||||
BEGIN
|
|
||||||
-- Default
|
|
||||||
IF (p_MultiplierAP IS NOT NULL) THEN
|
|
||||||
v_MultiplierAP := p_MultiplierAP;
|
|
||||||
END IF;
|
|
||||||
-- Calculate Allocated Amount
|
|
||||||
FOR a IN Cur_Alloc LOOP
|
|
||||||
v_PaymentAmt := v_PaymentAmt
|
|
||||||
+ currencyConvert(a.Amount + a.DisCountAmt + a.WriteOffAmt,
|
|
||||||
a.C_Currency_ID, p_C_Currency_ID, a.DateTrx, null, a.AD_Client_ID, a.AD_Org_ID);
|
|
||||||
END LOOP;
|
|
||||||
--
|
|
||||||
RETURN ROUND(NVL(v_PaymentAmt,0), 2) * v_MultiplierAP;
|
|
||||||
END invoicePaid;
|
|
||||||
/
|
|
|
@ -1,71 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION paymentTermDiscount
|
|
||||||
(
|
|
||||||
Amount IN NUMBER,
|
|
||||||
Currency_ID IN NUMBER,
|
|
||||||
PaymentTerm_ID IN NUMBER,
|
|
||||||
DocDate IN DATE,
|
|
||||||
PayDate IN DATE
|
|
||||||
)
|
|
||||||
RETURN NUMBER
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: C_PaymentTerm_Discount.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Calculate Discount
|
|
||||||
* Description:
|
|
||||||
* Calculate the allowable Discount Amount of the Payment Term
|
|
||||||
*
|
|
||||||
* Test: SELECT C_PaymentTerm_Discount(17777, 103, '10-DEC-1999') FROM DUAL
|
|
||||||
************************************************************************/
|
|
||||||
|
|
||||||
AS
|
|
||||||
Discount NUMBER := 0;
|
|
||||||
CURSOR Cur_PT IS
|
|
||||||
SELECT *
|
|
||||||
FROM C_PaymentTerm
|
|
||||||
WHERE C_PaymentTerm_ID = PaymentTerm_ID;
|
|
||||||
Discount1Date DATE;
|
|
||||||
Discount2Date DATE;
|
|
||||||
Add1Date NUMBER := 0;
|
|
||||||
Add2Date NUMBER := 0;
|
|
||||||
BEGIN
|
|
||||||
-- No Data - No Discount
|
|
||||||
IF (Amount IS NULL OR PaymentTerm_ID IS NULL OR DocDate IS NULL) THEN
|
|
||||||
RETURN 0;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
FOR p IN Cur_PT LOOP -- for convineance only
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE(p.Name || ' - Doc = ' || TO_CHAR(DocDate));
|
|
||||||
Discount1Date := TRUNC(DocDate + p.DiscountDays + p.GraceDays);
|
|
||||||
Discount2Date := TRUNC(DocDate + p.DiscountDays2 + p.GraceDays);
|
|
||||||
|
|
||||||
-- Next Business Day
|
|
||||||
IF (p.IsNextBusinessDay='Y') THEN
|
|
||||||
-- Not fully correct - only does weekends (7=Saturday, 1=Sunday)
|
|
||||||
SELECT DECODE(TO_CHAR(Discount1Date,'D'), '7',2, '1',1, 0),
|
|
||||||
DECODE(TO_CHAR(Discount2Date,'D'), '7',2, '1',1, 0)
|
|
||||||
INTO Add1Date, Add2Date
|
|
||||||
FROM DUAL;
|
|
||||||
Discount1Date := Discount1Date+Add1Date;
|
|
||||||
Discount2Date := Discount2Date+Add2Date;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Discount 1
|
|
||||||
IF (Discount1Date >= TRUNC(PayDate)) THEN
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('Discount 1 ' || TO_CHAR(Discount1Date) || ' ' || p.Discount);
|
|
||||||
Discount := Amount * p.Discount / 100;
|
|
||||||
-- Discount 2
|
|
||||||
ELSIF (Discount2Date >= TRUNC(PayDate)) THEN
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('Discount 2 ' || TO_CHAR(Discount2Date) || ' ' || p.Discount2);
|
|
||||||
Discount := Amount * p.Discount2 / 100;
|
|
||||||
END IF;
|
|
||||||
END LOOP;
|
|
||||||
--
|
|
||||||
RETURN ROUND(NVL(Discount,0), 2); -- fixed rounding
|
|
||||||
END paymentTermDiscount;
|
|
||||||
/
|
|
|
@ -1,52 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION paymentTermDueDate
|
|
||||||
(
|
|
||||||
PaymentTerm_ID IN NUMBER,
|
|
||||||
DocDate IN DATE
|
|
||||||
)
|
|
||||||
RETURN DATE
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: C_PaymentTerm_DueDate.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Get Due Date
|
|
||||||
* Description:
|
|
||||||
* Returns the due date
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
Days NUMBER := 0;
|
|
||||||
DueDate DATE := TRUNC(DocDate);
|
|
||||||
--
|
|
||||||
CURSOR Cur_PT IS
|
|
||||||
SELECT *
|
|
||||||
FROM C_PaymentTerm
|
|
||||||
WHERE C_PaymentTerm_ID = PaymentTerm_ID;
|
|
||||||
FirstDay DATE;
|
|
||||||
NoDays NUMBER;
|
|
||||||
BEGIN
|
|
||||||
FOR p IN Cur_PT LOOP -- for convineance only
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE(p.Name || ' - Doc = ' || TO_CHAR(DocDate));
|
|
||||||
-- Due 15th of following month
|
|
||||||
IF (p.IsDueFixed = 'Y') THEN
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE(p.Name || ' - Day = ' || p.FixMonthDay);
|
|
||||||
FirstDay := TRUNC(DocDate, 'MM');
|
|
||||||
NoDays := TRUNC(DocDate) - FirstDay;
|
|
||||||
DueDate := FirstDay + (p.FixMonthDay-1); -- starting on 1st
|
|
||||||
DueDate := ADD_MONTHS(DueDate, p.FixMonthOffset);
|
|
||||||
IF (NoDays > p.FixMonthCutoff) THEN
|
|
||||||
DueDate := ADD_MONTHS(DueDate, 1);
|
|
||||||
END IF;
|
|
||||||
ELSE
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('Net = ' || p.NetDays);
|
|
||||||
DueDate := TRUNC(DocDate) + p.NetDays;
|
|
||||||
END IF;
|
|
||||||
END LOOP;
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('Due = ' || TO_CHAR(DueDate) || ', Pay = ' || TO_CHAR(PayDate));
|
|
||||||
|
|
||||||
RETURN DueDate;
|
|
||||||
END paymentTermDueDate;
|
|
||||||
/
|
|
|
@ -1,58 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION paymentTermDueDays
|
|
||||||
(
|
|
||||||
PaymentTerm_ID IN NUMBER,
|
|
||||||
DocDate IN DATE,
|
|
||||||
PayDate IN DATE
|
|
||||||
)
|
|
||||||
RETURN NUMBER
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: C_PaymentTerm_DueDays.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Get Due Days
|
|
||||||
* Description:
|
|
||||||
* Returns the days due (positive) or the days till due (negative)
|
|
||||||
* Grace days are not considered!
|
|
||||||
* If record is not found it assumes due immediately
|
|
||||||
*
|
|
||||||
* Test: SELECT C_PaymentTerm_DueDays(103, '01-DEC-2000', '15-DEC-2000') FROM DUAL
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
Days NUMBER := 0;
|
|
||||||
DueDate DATE := TRUNC(DocDate);
|
|
||||||
--
|
|
||||||
CURSOR Cur_PT IS
|
|
||||||
SELECT *
|
|
||||||
FROM C_PaymentTerm
|
|
||||||
WHERE C_PaymentTerm_ID = PaymentTerm_ID;
|
|
||||||
FirstDay DATE;
|
|
||||||
NoDays NUMBER;
|
|
||||||
BEGIN
|
|
||||||
FOR p IN Cur_PT LOOP -- for convineance only
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE(p.Name || ' - Doc = ' || TO_CHAR(DocDate));
|
|
||||||
-- Due 15th of following month
|
|
||||||
IF (p.IsDueFixed = 'Y') THEN
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE(p.Name || ' - Day = ' || p.FixMonthDay);
|
|
||||||
FirstDay := TRUNC(DocDate, 'MM');
|
|
||||||
NoDays := TRUNC(DocDate) - FirstDay;
|
|
||||||
DueDate := FirstDay + (p.FixMonthDay-1); -- starting on 1st
|
|
||||||
DueDate := ADD_MONTHS(DueDate, p.FixMonthOffset);
|
|
||||||
IF (NoDays > p.FixMonthCutoff) THEN
|
|
||||||
DueDate := ADD_MONTHS(DueDate, 1);
|
|
||||||
END IF;
|
|
||||||
ELSE
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('Net = ' || p.NetDays);
|
|
||||||
DueDate := TRUNC(DocDate) + p.NetDays;
|
|
||||||
END IF;
|
|
||||||
END LOOP;
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('Due = ' || TO_CHAR(DueDate) || ', Pay = ' || TO_CHAR(PayDate));
|
|
||||||
|
|
||||||
Days := TRUNC(PayDate) - DueDate;
|
|
||||||
RETURN Days;
|
|
||||||
END paymentTermDueDays;
|
|
||||||
/
|
|
|
@ -1,57 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION paymentAllocated
|
|
||||||
(
|
|
||||||
p_C_Payment_ID IN NUMBER,
|
|
||||||
p_C_Currency_ID IN NUMBER
|
|
||||||
)
|
|
||||||
RETURN NUMBER
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: C_Payment_Allocated.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Calculate Allocated Payment Amount in Payment Currency
|
|
||||||
* Description:
|
|
||||||
--
|
|
||||||
SELECT C_Payment_Allocated(C_Payment_ID,C_Currency_ID), PayAmt, IsAllocated
|
|
||||||
FROM C_Payment_v
|
|
||||||
WHERE C_Payment_ID>=1000000;
|
|
||||||
--
|
|
||||||
UPDATE C_Payment_v
|
|
||||||
SET IsAllocated=CASE WHEN C_Payment_Allocated(C_Payment_ID, C_Currency_ID)=PayAmt THEN 'Y' ELSE 'N' END
|
|
||||||
WHERE C_Payment_ID>=1000000;
|
|
||||||
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
v_AllocatedAmt NUMBER := 0;
|
|
||||||
v_PayAmt NUMBER;
|
|
||||||
CURSOR Cur_Alloc IS
|
|
||||||
SELECT a.AD_Client_ID, a.AD_Org_ID, al.Amount, a.C_Currency_ID, a.DateTrx
|
|
||||||
FROM C_AllocationLine al
|
|
||||||
INNER JOIN C_AllocationHdr a ON (al.C_AllocationHdr_ID=a.C_AllocationHdr_ID)
|
|
||||||
WHERE al.C_Payment_ID = p_C_Payment_ID
|
|
||||||
AND a.IsActive='Y';
|
|
||||||
-- AND al.C_Invoice_ID IS NOT NULL;
|
|
||||||
BEGIN
|
|
||||||
-- Charge - nothing available
|
|
||||||
SELECT MAX(PayAmt)
|
|
||||||
INTO v_PayAmt
|
|
||||||
FROM C_Payment
|
|
||||||
WHERE C_Payment_ID=p_C_Payment_ID AND C_Charge_ID > 0;
|
|
||||||
IF (v_PayAmt IS NOT NULL) THEN
|
|
||||||
RETURN 0;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Calculate Allocated Amount
|
|
||||||
FOR a IN Cur_Alloc LOOP
|
|
||||||
v_AllocatedAmt := v_AllocatedAmt
|
|
||||||
+ currencyConvert(a.Amount, a.C_Currency_ID, p_C_Currency_ID, a.DateTrx, null, a.AD_Client_ID, a.AD_Org_ID);
|
|
||||||
END LOOP;
|
|
||||||
-- Round to penny
|
|
||||||
v_AllocatedAmt := ROUND(NVL(v_AllocatedAmt,0), 2);
|
|
||||||
RETURN v_AllocatedAmt;
|
|
||||||
END paymentAllocated;
|
|
||||||
/
|
|
|
@ -1,62 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION paymentAvailable
|
|
||||||
(
|
|
||||||
p_C_Payment_ID IN NUMBER
|
|
||||||
)
|
|
||||||
RETURN NUMBER
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: C_Payment_Available.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Calculate Available Payment Amount in Payment Currency
|
|
||||||
* Description:
|
|
||||||
* similar to C_Invoice_Open
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
v_Currency_ID NUMBER(10);
|
|
||||||
v_AvailableAmt NUMBER := 0;
|
|
||||||
v_IsReceipt C_Payment.IsReceipt%TYPE;
|
|
||||||
v_Amt NUMBER := 0;
|
|
||||||
CURSOR Cur_Alloc IS
|
|
||||||
SELECT a.AD_Client_ID, a.AD_Org_ID, al.Amount, a.C_Currency_ID, a.DateTrx
|
|
||||||
FROM C_AllocationLine al
|
|
||||||
INNER JOIN C_AllocationHdr a ON (al.C_AllocationHdr_ID=a.C_AllocationHdr_ID)
|
|
||||||
WHERE al.C_Payment_ID = p_C_Payment_ID
|
|
||||||
AND a.IsActive='Y';
|
|
||||||
-- AND al.C_Invoice_ID IS NOT NULL;
|
|
||||||
BEGIN
|
|
||||||
-- Charge - fully allocated
|
|
||||||
SELECT MAX(PayAmt)
|
|
||||||
INTO v_Amt
|
|
||||||
FROM C_Payment
|
|
||||||
WHERE C_Payment_ID=p_C_Payment_ID AND C_Charge_ID > 0;
|
|
||||||
IF (v_Amt IS NOT NULL) THEN
|
|
||||||
RETURN v_Amt;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Get Currency
|
|
||||||
SELECT C_Currency_ID, PayAmt, IsReceipt
|
|
||||||
INTO v_Currency_ID, v_AvailableAmt, v_IsReceipt
|
|
||||||
FROM C_Payment_v -- corrected for AP/AR
|
|
||||||
WHERE C_Payment_ID = p_C_Payment_ID;
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('== C_Payment_ID=' || p_C_Payment_ID || ', PayAmt=' || v_AvailableAmt || ', Receipt=' || v_IsReceipt);
|
|
||||||
|
|
||||||
-- Calculate Allocated Amount
|
|
||||||
FOR a IN Cur_Alloc LOOP
|
|
||||||
v_Amt := currencyConvert(a.Amount, a.C_Currency_ID, v_Currency_ID, a.DateTrx, null, a.AD_Client_ID, a.AD_Org_ID);
|
|
||||||
v_AvailableAmt := v_AvailableAmt - v_Amt;
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE(' Allocation=' || a.Amount || ' - Available=' || v_AvailableAmt);
|
|
||||||
END LOOP;
|
|
||||||
-- Ignore Rounding
|
|
||||||
IF (v_AvailableAmt BETWEEN -0.00999 AND 0.00999) THEN
|
|
||||||
v_AvailableAmt := 0;
|
|
||||||
END IF;
|
|
||||||
-- Round to penny
|
|
||||||
v_AvailableAmt := ROUND(NVL(v_AvailableAmt,0), 2);
|
|
||||||
RETURN v_AvailableAmt;
|
|
||||||
END paymentAvailable;
|
|
||||||
/
|
|
|
@ -1,59 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION DBA_ConstraintCmd
|
|
||||||
(
|
|
||||||
p_ConstraintName IN VARCHAR2
|
|
||||||
)
|
|
||||||
RETURN VARCHAR2
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: DBA_ConstraintCmd.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
* $Source: /cvs/adempiere/db/database/Functions/DBA_ConstraintCmd.sql,v $
|
|
||||||
***
|
|
||||||
* Title: Create DML command for given constraint
|
|
||||||
* Description:
|
|
||||||
* SELECT DBA_ConstraintCmd(Constraint_Name) FROM User_Constraints WHERE CONSTRAINT_TYPE='R'
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
v_Result VARCHAR2(2000);
|
|
||||||
v_TableName VARCHAR2(256);
|
|
||||||
v_ColumnName VARCHAR2(256);
|
|
||||||
v_ConstraintName VARCHAR2(256);
|
|
||||||
v_DeleteRule VARCHAR2(256);
|
|
||||||
BEGIN
|
|
||||||
-- Get First Part
|
|
||||||
SELECT c.Table_Name, cc.Column_name, c.R_Constraint_Name, c.Delete_Rule
|
|
||||||
INTO v_TableName, v_ColumnName, v_ConstraintName, v_DeleteRule
|
|
||||||
FROM USER_Constraints c, USER_Cons_Columns cc
|
|
||||||
WHERE c.Constraint_Name=cc.Constraint_Name
|
|
||||||
AND cc.Constraint_Name=p_ConstraintName;
|
|
||||||
-- Create First Part
|
|
||||||
v_Result := 'ALTER TABLE ' || v_TableName || ' ADD CONSTRAINT ' || p_ConstraintName
|
|
||||||
|| ' FOREIGN KEY (' || v_ColumnName || ') ';
|
|
||||||
|
|
||||||
-- Not a valid FK Reference
|
|
||||||
IF (v_ConstraintName IS NULL) THEN
|
|
||||||
RETURN NULL;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Get Second Part
|
|
||||||
SELECT c.Table_Name, cc.Column_name
|
|
||||||
INTO v_TableName, v_ColumnName
|
|
||||||
FROM USER_Constraints c, USER_Cons_Columns cc
|
|
||||||
WHERE c.Constraint_Name=cc.Constraint_Name
|
|
||||||
AND cc.Constraint_Name=v_ConstraintName;
|
|
||||||
-- Create Second Part
|
|
||||||
v_Result := v_Result || 'REFERENCES ' || v_TableName || '(' || v_ColumnName || ')';
|
|
||||||
|
|
||||||
IF (v_DeleteRule = 'CASCADE') THEN
|
|
||||||
v_Result := v_Result || ' ON DELETE CASCADE';
|
|
||||||
END IF;
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE(v_Result);
|
|
||||||
RETURN v_Result;
|
|
||||||
|
|
||||||
END DBA_ConstraintCmd;
|
|
||||||
/
|
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION DBA_DisplayType
|
|
||||||
(
|
|
||||||
AD_Reference_ID IN NUMBER
|
|
||||||
)
|
|
||||||
RETURN VARCHAR2
|
|
||||||
AS
|
|
||||||
BEGIN
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: DBA_DisplayType.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Show clear text od DisplayType
|
|
||||||
* Description:
|
|
||||||
************************************************************************/
|
|
||||||
IF (AD_Reference_ID = 10) THEN RETURN 'String = 10';
|
|
||||||
ELSIF (AD_Reference_ID = 11) THEN RETURN 'Integer = 11';
|
|
||||||
ELSIF (AD_Reference_ID = 12) THEN RETURN 'Amount = 12';
|
|
||||||
ELSIF (AD_Reference_ID = 13) THEN RETURN 'ID = 13';
|
|
||||||
ELSIF (AD_Reference_ID = 14) THEN RETURN 'Text = 14';
|
|
||||||
ELSIF (AD_Reference_ID = 15) THEN RETURN 'Date = 15';
|
|
||||||
ELSIF (AD_Reference_ID = 16) THEN RETURN 'DateTime = 16';
|
|
||||||
ELSIF (AD_Reference_ID = 17) THEN RETURN 'List = 17';
|
|
||||||
ELSIF (AD_Reference_ID = 18) THEN RETURN 'Table = 18';
|
|
||||||
ELSIF (AD_Reference_ID = 19) THEN RETURN 'TableDir = 19';
|
|
||||||
ELSIF (AD_Reference_ID = 20) THEN RETURN 'YesNo = 20';
|
|
||||||
ELSIF (AD_Reference_ID = 21) THEN RETURN 'Location = 21';
|
|
||||||
ELSIF (AD_Reference_ID = 22) THEN RETURN 'Number = 22';
|
|
||||||
ELSIF (AD_Reference_ID = 23) THEN RETURN 'Binary = 23';
|
|
||||||
ELSIF (AD_Reference_ID = 24) THEN RETURN 'Time = 24';
|
|
||||||
ELSIF (AD_Reference_ID = 25) THEN RETURN 'Account = 25';
|
|
||||||
ELSIF (AD_Reference_ID = 26) THEN RETURN 'RowID = 26';
|
|
||||||
ELSIF (AD_Reference_ID = 27) THEN RETURN 'Color = 27';
|
|
||||||
ELSIF (AD_Reference_ID = 28) THEN RETURN 'Button = 28';
|
|
||||||
ELSIF (AD_Reference_ID = 29) THEN RETURN 'Quantity = 29';
|
|
||||||
ELSIF (AD_Reference_ID = 30) THEN RETURN 'Search = 30';
|
|
||||||
ELSIF (AD_Reference_ID = 31) THEN RETURN 'Locator = 31';
|
|
||||||
ELSIF (AD_Reference_ID = 32) THEN RETURN 'Image = 32';
|
|
||||||
ELSIF (AD_Reference_ID = 33) THEN RETURN 'Assignment= 33';
|
|
||||||
ELSE RETURN 'Unknown ('||AD_Reference_ID||')'; END IF;
|
|
||||||
END DBA_DisplayType;
|
|
||||||
/
|
|
|
@ -1,84 +0,0 @@
|
||||||
CREATE OR REPLACE FUNCTION productAttribute
|
|
||||||
(
|
|
||||||
p_M_AttributeSetInstance_ID IN NUMBER
|
|
||||||
)
|
|
||||||
RETURN NVARCHAR2
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: M_Attribute_Name.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Return Instance Attribute Info
|
|
||||||
* Description:
|
|
||||||
*
|
|
||||||
* Test:
|
|
||||||
SELECT M_Attribute_Name (M_AttributeSetInstance_ID)
|
|
||||||
FROM M_InOutLine WHERE M_AttributeSetInstance_ID > 0
|
|
||||||
--
|
|
||||||
SELECT p.Name
|
|
||||||
FROM C_InvoiceLine il LEFT OUTER JOIN M_Product p ON (il.M_Product_ID=p.M_Product_ID);
|
|
||||||
SELECT p.Name || M_Attribute_Name (il.M_AttributeSetInstance_ID)
|
|
||||||
FROM C_InvoiceLine il LEFT OUTER JOIN M_Product p ON (il.M_Product_ID=p.M_Product_ID);
|
|
||||||
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
v_Name NVARCHAR2(2000) := NULL;
|
|
||||||
v_NameAdd NVARCHAR2(2000) := '';
|
|
||||||
--
|
|
||||||
v_Lot M_AttributeSetInstance.Lot%TYPE;
|
|
||||||
v_LotStart M_AttributeSet.LotCharSOverwrite%TYPE;
|
|
||||||
v_LotEnd M_AttributeSet.LotCharEOverwrite%TYPE;
|
|
||||||
v_SerNo M_AttributeSetInstance.SerNo%TYPE;
|
|
||||||
v_SerNoStart M_AttributeSet.SerNoCharSOverwrite%TYPE;
|
|
||||||
v_SerNoEnd M_AttributeSet.SerNoCharEOverwrite%TYPE;
|
|
||||||
v_GuaranteeDate M_AttributeSetInstance.GuaranteeDate%TYPE;
|
|
||||||
--
|
|
||||||
CURSOR CUR_Attributes IS
|
|
||||||
SELECT ai.Value, a.Name
|
|
||||||
FROM M_AttributeInstance ai
|
|
||||||
INNER JOIN M_Attribute a ON (ai.M_Attribute_ID=a.M_Attribute_ID AND a.IsInstanceAttribute='Y')
|
|
||||||
WHERE ai.M_AttributeSetInstance_ID=p_M_AttributeSetInstance_ID;
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
/* -- Get Product Name
|
|
||||||
SELECT Name
|
|
||||||
INTO v_Name
|
|
||||||
FROM M_Product WHERE M_Product_ID=p_M_Product_ID;
|
|
||||||
*/
|
|
||||||
-- Get Product Attribute Set Instance
|
|
||||||
IF (p_M_AttributeSetInstance_ID > 0) THEN
|
|
||||||
SELECT asi.Lot, asi.SerNo, asi.GuaranteeDate,
|
|
||||||
COALESCE(a.SerNoCharSOverwrite, N'#'), COALESCE(a.SerNoCharEOverwrite, N''),
|
|
||||||
COALESCE(a.LotCharSOverwrite, N'<EFBFBD>'), COALESCE(a.LotCharEOverwrite, N'<EFBFBD>')
|
|
||||||
INTO v_Lot, v_SerNo, v_GuaranteeDate,
|
|
||||||
v_SerNoStart, v_SerNoEnd, v_LotStart, v_LotEnd
|
|
||||||
FROM M_AttributeSetInstance asi
|
|
||||||
INNER JOIN M_AttributeSet a ON (asi.M_AttributeSet_ID=a.M_AttributeSet_ID)
|
|
||||||
WHERE asi.M_AttributeSetInstance_ID=p_M_AttributeSetInstance_ID;
|
|
||||||
--
|
|
||||||
IF (v_SerNo IS NOT NULL) THEN
|
|
||||||
v_NameAdd := v_NameAdd || v_SerNoStart || v_SerNo || v_SerNoEnd || ' ';
|
|
||||||
END IF;
|
|
||||||
IF (v_Lot IS NOT NULL) THEN
|
|
||||||
v_NameAdd := v_NameAdd || v_LotStart || v_Lot || v_LotEnd || ' ';
|
|
||||||
END IF;
|
|
||||||
IF (v_GuaranteeDate IS NOT NULL) THEN
|
|
||||||
v_NameAdd := v_NameAdd || v_GuaranteeDate || ' ';
|
|
||||||
END IF;
|
|
||||||
--
|
|
||||||
FOR a IN CUR_Attributes LOOP
|
|
||||||
v_NameAdd := v_NameAdd || a.Name || ':' || a.Value || ' ';
|
|
||||||
END LOOP;
|
|
||||||
--
|
|
||||||
IF (LENGTH(v_NameAdd) > 0) THEN
|
|
||||||
v_Name := v_Name || ' (' || TRIM(v_NameAdd) || ')';
|
|
||||||
END IF;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
RETURN v_Name;
|
|
||||||
END productAttribute;
|
|
||||||
/
|
|
|
@ -1,280 +0,0 @@
|
||||||
CREATE OR REPLACE PROCEDURE AD_Column_Sync
|
|
||||||
(
|
|
||||||
p_PInstance_ID IN NUMBER
|
|
||||||
)
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: AD_Column_Sync.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Synchronize Column with Database
|
|
||||||
* Description:
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
-- Logistice
|
|
||||||
v_ResultStr VARCHAR2(2000);
|
|
||||||
v_Message VARCHAR2(2000);
|
|
||||||
v_Result NUMBER := 1; -- 0=failure
|
|
||||||
v_Record_ID NUMBER;
|
|
||||||
v_AD_User_ID NUMBER;
|
|
||||||
-- Parameter
|
|
||||||
CURSOR Cur_Parameter (pp_PInstance NUMBER) IS
|
|
||||||
SELECT i.Record_ID, i.AD_User_ID,
|
|
||||||
p.ParameterName, p.P_String, p.P_Number, p.P_Date
|
|
||||||
FROM AD_PInstance i, AD_PInstance_Para p
|
|
||||||
WHERE i.AD_PInstance_ID=pp_PInstance
|
|
||||||
AND i.AD_PInstance_ID=p.AD_PInstance_ID(+)
|
|
||||||
ORDER BY p.SeqNo;
|
|
||||||
-- Parameter Variables
|
|
||||||
-- Variables
|
|
||||||
v_TableName AD_Table.TableName%TYPE;
|
|
||||||
v_ColumnName AD_Column.ColumnName%TYPE;
|
|
||||||
v_AD_Reference_ID AD_Column.AD_Reference_ID%TYPE;
|
|
||||||
v_FieldLength AD_Column.FieldLength%TYPE;
|
|
||||||
v_DefaultValue AD_Column.DefaultValue%TYPE;
|
|
||||||
v_IsMandatory AD_Column.IsMandatory%TYPE;
|
|
||||||
--
|
|
||||||
v_DB_DataType USER_TAB_COLUMNS.DATA_TYPE%TYPE;
|
|
||||||
v_Cmd VARCHAR2(255);
|
|
||||||
v_DB_TableName VARCHAR(60) := NULL;
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
-- Update AD_PInstance
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Updating PInstance - Processing ' || p_PInstance_ID);
|
|
||||||
v_ResultStr := 'PInstanceNotFound';
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Created = SysDate,
|
|
||||||
IsProcessing = 'Y'
|
|
||||||
WHERE AD_PInstance_ID=p_PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
|
|
||||||
-- Get Parameters
|
|
||||||
v_ResultStr := 'ReadingParameters';
|
|
||||||
FOR p IN Cur_Parameter (p_PInstance_ID) LOOP
|
|
||||||
v_Record_ID := p.Record_ID;
|
|
||||||
v_AD_User_ID := p.AD_User_ID;
|
|
||||||
END LOOP; -- Get Parameter
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' Record_ID=' || v_Record_ID);
|
|
||||||
|
|
||||||
-- Get Table/Column Info
|
|
||||||
v_ResultStr := 'ReadingColumnInfo';
|
|
||||||
SELECT t.TableName, c.ColumnName, c.AD_Reference_ID, c.FieldLength,
|
|
||||||
c.DefaultValue, c.IsMandatory
|
|
||||||
INTO v_TableName, v_ColumnName, v_AD_Reference_ID, v_FieldLength,
|
|
||||||
v_DefaultValue, v_IsMandatory
|
|
||||||
FROM AD_Table t, AD_Column c
|
|
||||||
WHERE t.AD_Table_ID = c.AD_Table_ID
|
|
||||||
AND c.AD_Column_ID = v_Record_ID;
|
|
||||||
|
|
||||||
|
|
||||||
-- Check if Table exists
|
|
||||||
v_ResultStr := 'ReadingDBTableInfo';
|
|
||||||
BEGIN
|
|
||||||
SELECT Table_Name
|
|
||||||
INTO v_DB_TableName
|
|
||||||
FROM USER_TABLES
|
|
||||||
WHERE Table_Name=UPPER(v_TableName);
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN NULL;
|
|
||||||
END;
|
|
||||||
|
|
||||||
-- Table does not exists
|
|
||||||
IF (v_DB_TableName IS NULL) THEN
|
|
||||||
v_ResultStr := 'CreateTableCommand';
|
|
||||||
BEGIN
|
|
||||||
v_CMD := 'CREATE TABLE ' || SYS_CONTEXT('USERENV', 'CURRENT_USER') || '.'
|
|
||||||
|| UPPER(v_TableName) || ' (XXXX CHAR(1))';
|
|
||||||
EXECUTE IMMEDIATE v_Cmd;
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
v_Result := 0; -- failure
|
|
||||||
v_Message := 'Error: ' || SQLERRM || ' - Command: ' || v_Cmd;
|
|
||||||
GOTO FINISH_PROCESS;
|
|
||||||
END;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
|
|
||||||
-- Get Data Dictionary Info
|
|
||||||
v_ResultStr := 'ReadingDBColumnInfo';
|
|
||||||
BEGIN
|
|
||||||
SELECT DATA_TYPE --, DATA_LENGTH, DATA_PRECISION, DATA_SCALE, NULLABLE, DATA_DEFAULT
|
|
||||||
INTO v_DB_DataType
|
|
||||||
FROM USER_TAB_COLUMNS
|
|
||||||
WHERE TABLE_NAME=UPPER(v_TableName)
|
|
||||||
AND COLUMN_NAME=UPPER(v_ColumnName);
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN NULL;
|
|
||||||
END;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create Column in Database
|
|
||||||
*/
|
|
||||||
IF (v_DB_DataType IS NULL) THEN
|
|
||||||
v_ResultStr := 'CreateALTERCommand';
|
|
||||||
BEGIN
|
|
||||||
-- Get TableName
|
|
||||||
v_Cmd := 'ALTER TABLE ' || v_TableName || ' ADD ' || v_ColumnName || ' ';
|
|
||||||
-- Map Data Type
|
|
||||||
IF (v_AD_Reference_ID IN (10,14)) THEN
|
|
||||||
-- String, Text
|
|
||||||
v_Cmd := v_Cmd || 'NVARCHAR2(' || v_FieldLength || ')';
|
|
||||||
ELSIF (v_AD_Reference_ID IN (17,20,28)) THEN
|
|
||||||
-- List,YesNo,Button
|
|
||||||
v_Cmd := v_Cmd || 'CHAR(' || v_FieldLength || ')';
|
|
||||||
ELSIF (v_AD_Reference_ID IN (13,18,19,21,25,27,30,31)) THEN
|
|
||||||
-- ID,Table,TableDir,Location,Account,Color,Search,Locator
|
|
||||||
v_Cmd := v_Cmd || 'NUMBER(10)';
|
|
||||||
ELSIF (v_AD_Reference_ID IN (11,12,22,29)) THEN
|
|
||||||
-- Integer,Amount,Number,Quantity
|
|
||||||
v_Cmd := v_Cmd || 'NUMBER';
|
|
||||||
ELSIF (v_AD_Reference_ID IN (15,16)) THEN
|
|
||||||
-- Date,DateTime
|
|
||||||
v_Cmd := v_Cmd || 'DATE';
|
|
||||||
ELSE -- 23-Binary, 24-Radio, 26-RowID, 32-Image
|
|
||||||
v_Result := 0; -- failure
|
|
||||||
v_Message := 'DisplayType Not Supported';
|
|
||||||
END IF;
|
|
||||||
-- Default (literal)
|
|
||||||
IF (v_DefaultValue IS NOT NULL AND LENGTH(v_DefaultValue) <> 0) THEN
|
|
||||||
IF (v_AD_Reference_ID IN (10,14,17,20,28)) THEN
|
|
||||||
v_Cmd := v_Cmd || ' DEFAULT (''' || v_DefaultValue || ''')';
|
|
||||||
ELSE
|
|
||||||
v_Cmd := v_Cmd || ' DEFAULT ' || v_DefaultValue;
|
|
||||||
END IF;
|
|
||||||
END IF;
|
|
||||||
-- Mandatory
|
|
||||||
IF (v_IsMandatory = 'Y') THEN
|
|
||||||
IF (v_DefaultValue IS NULL OR LENGTH(v_DefaultValue) = 0) THEN
|
|
||||||
v_Result := 0; -- failure
|
|
||||||
v_Message := 'Mandatory requites literal default value';
|
|
||||||
ELSE
|
|
||||||
v_Cmd := v_Cmd || ' NOT NULL';
|
|
||||||
END IF;
|
|
||||||
END IF;
|
|
||||||
-- Execute it
|
|
||||||
IF (v_Result = 1) THEN
|
|
||||||
EXECUTE IMMEDIATE v_Cmd;
|
|
||||||
v_Message := '@Created@ - ' || v_Cmd;
|
|
||||||
END IF;
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
v_Result := 0; -- failure
|
|
||||||
v_Message := 'Error: ' || SQLERRM || ' - Command: ' || v_Cmd;
|
|
||||||
END;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Change certain Attributes
|
|
||||||
*/
|
|
||||||
ELSE
|
|
||||||
v_ResultStr := 'CreateALTERCommand';
|
|
||||||
BEGIN
|
|
||||||
-- Get TableName
|
|
||||||
v_Cmd := 'ALTER TABLE ' || v_TableName || ' MODIFY ' || v_ColumnName || ' ';
|
|
||||||
-- Map Data Type
|
|
||||||
IF (v_AD_Reference_ID IN (10,14)) THEN
|
|
||||||
-- String, Text
|
|
||||||
v_Cmd := v_Cmd || 'NVARCHAR2(' || v_FieldLength || ')';
|
|
||||||
ELSIF (v_AD_Reference_ID IN (17,20,28)) THEN
|
|
||||||
-- List,YesNo,Button
|
|
||||||
v_Cmd := v_Cmd || 'CHAR(' || v_FieldLength || ')';
|
|
||||||
ELSIF (v_AD_Reference_ID IN (13,18,19,21,25,27,30,31)) THEN
|
|
||||||
-- ID,Table,TableDir,Location,Account,Color,Search,Locator
|
|
||||||
v_Cmd := v_Cmd || 'NUMBER(10)';
|
|
||||||
ELSIF (v_AD_Reference_ID IN (11,12,22,29)) THEN
|
|
||||||
-- Integer,Amount,Number,Quantity
|
|
||||||
v_Cmd := v_Cmd || 'NUMBER';
|
|
||||||
ELSIF (v_AD_Reference_ID IN (15,16)) THEN
|
|
||||||
-- Date,DateTime
|
|
||||||
v_Cmd := v_Cmd || 'DATE';
|
|
||||||
ELSE -- 23-Binary, 24-Radio, 26-RowID, 32-Image
|
|
||||||
v_Result := 0; -- failure
|
|
||||||
v_Message := 'DisplayType Not Supported';
|
|
||||||
END IF;
|
|
||||||
-- Default (literal)
|
|
||||||
IF (v_DefaultValue IS NOT NULL AND LENGTH(v_DefaultValue) <> 0) THEN
|
|
||||||
IF (v_AD_Reference_ID IN (10,14,17,20,28)) THEN
|
|
||||||
v_Cmd := v_Cmd || ' DEFAULT (''' || v_DefaultValue || ''')';
|
|
||||||
ELSE
|
|
||||||
v_Cmd := v_Cmd || ' DEFAULT ' || v_DefaultValue;
|
|
||||||
END IF;
|
|
||||||
END IF;
|
|
||||||
-- Mandatory
|
|
||||||
IF (v_IsMandatory = 'Y') THEN
|
|
||||||
IF (v_DefaultValue IS NULL OR LENGTH(v_DefaultValue) = 0) THEN
|
|
||||||
v_Result := 0; -- failure
|
|
||||||
v_Message := 'Mandatory requites literal default value';
|
|
||||||
ELSE
|
|
||||||
v_Cmd := v_Cmd || ' NOT NULL';
|
|
||||||
END IF;
|
|
||||||
END IF;
|
|
||||||
-- Execute it
|
|
||||||
IF (v_Result = 1) THEN
|
|
||||||
EXECUTE IMMEDIATE v_Cmd;
|
|
||||||
v_Message := '@Updated@ - ' || v_Cmd;
|
|
||||||
END IF;
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
v_Result := 0; -- failure
|
|
||||||
v_Message := 'Error: ' || SQLERRM || ' - Command: ' || v_Cmd;
|
|
||||||
END;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete Column
|
|
||||||
*
|
|
||||||
ELSE
|
|
||||||
v_Cmd := 'ALTER TABLE ' || v_TableName
|
|
||||||
|| ' DROP COLUMN ' || v_ColumnName;
|
|
||||||
-- Execute it
|
|
||||||
EXECUTE IMMEDIATE v_Cmd;
|
|
||||||
END IF;
|
|
||||||
/**/
|
|
||||||
|
|
||||||
|
|
||||||
-- Table did not exist - drop initial column
|
|
||||||
IF (v_DB_TableName IS NULL) THEN
|
|
||||||
v_ResultStr := 'CreateDropXXColumnCommand';
|
|
||||||
BEGIN
|
|
||||||
v_CMD := 'ALTER TABLE ' || v_TableName || ' DROP COLUMN XXXX';
|
|
||||||
EXECUTE IMMEDIATE v_Cmd;
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
v_Result := 0; -- failure
|
|
||||||
v_Message := 'Error: ' || SQLERRM || ' - Command: ' || v_Cmd;
|
|
||||||
END;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
|
|
||||||
<<FINISH_PROCESS>>
|
|
||||||
-- Update AD_PInstance
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Updating PInstance - Finished ' || v_Message);
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Updated = SysDate,
|
|
||||||
IsProcessing = 'N',
|
|
||||||
Result = v_Result, -- 1=success
|
|
||||||
ErrorMsg = v_Message
|
|
||||||
WHERE AD_PInstance_ID=p_PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
RETURN;
|
|
||||||
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
v_ResultStr := v_ResultStr || ': ' || SQLERRM || ' - ' || v_Message;
|
|
||||||
DBMS_OUTPUT.PUT_LINE(v_ResultStr);
|
|
||||||
ROLLBACK;
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Updated = SysDate,
|
|
||||||
IsProcessing = 'N',
|
|
||||||
Result = 0, -- failure
|
|
||||||
ErrorMsg = v_ResultStr
|
|
||||||
WHERE AD_PInstance_ID=p_PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
RETURN;
|
|
||||||
|
|
||||||
END AD_Column_Sync;
|
|
||||||
/
|
|
|
@ -1,92 +0,0 @@
|
||||||
CREATE OR REPLACE PROCEDURE AD_PrintPaper_Default
|
|
||||||
(
|
|
||||||
p_AD_PInstance_ID IN NUMBER
|
|
||||||
)
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: AD_PrintPaper_Default.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Set Current Format as Default
|
|
||||||
* Description:
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
-- Logistice
|
|
||||||
v_ResultStr VARCHAR2(2000);
|
|
||||||
v_Message VARCHAR2(2000);
|
|
||||||
p_Record_ID NUMBER;
|
|
||||||
-- Parameter
|
|
||||||
CURSOR Cur_Parameter (PInstance NUMBER) IS
|
|
||||||
SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date
|
|
||||||
FROM AD_PInstance i, AD_PInstance_Para p
|
|
||||||
WHERE i.AD_PInstance_ID=PInstance
|
|
||||||
AND i.AD_PInstance_ID=p.AD_PInstance_ID(+)
|
|
||||||
ORDER BY p.SeqNo;
|
|
||||||
-- Parameter Variables
|
|
||||||
p_AD_Client_ID NUMBER := NULL;
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
-- Update AD_PInstance
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Updating PInstance - Processing ' || p_AD_PInstance_ID);
|
|
||||||
v_ResultStr := 'PInstanceNotFound';
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Created = SysDate,
|
|
||||||
IsProcessing = 'Y'
|
|
||||||
WHERE AD_PInstance_ID=p_AD_PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
|
|
||||||
-- Get Parameters
|
|
||||||
v_ResultStr := 'ReadingParameters';
|
|
||||||
FOR p IN Cur_Parameter (p_AD_PInstance_ID) LOOP
|
|
||||||
p_Record_ID := p.Record_ID;
|
|
||||||
IF (p.ParameterName = 'AD_Client_ID') THEN
|
|
||||||
p_AD_Client_ID := p.P_Number;
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' AD_Client_ID=' || p_AD_Client_ID);
|
|
||||||
ELSE
|
|
||||||
DBMS_OUTPUT.PUT_LINE('*** Unknown Parameter=' || p.ParameterName);
|
|
||||||
END IF;
|
|
||||||
END LOOP; -- Get Parameter
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' Record_ID=' || p_Record_ID);
|
|
||||||
|
|
||||||
|
|
||||||
v_ResultStr := 'Updating';
|
|
||||||
UPDATE AD_PrintFormat pf
|
|
||||||
SET AD_PrintPaper_ID = p_Record_ID
|
|
||||||
WHERE (AD_Client_ID = p_AD_Client_ID OR p_AD_Client_ID IS NULL)
|
|
||||||
AND EXISTS (SELECT * FROM AD_PrintPaper pp
|
|
||||||
WHERE pf.AD_PrintPaper_ID=pp.AD_PrintPaper_ID
|
|
||||||
AND IsLandscape = (SELECT IsLandscape FROM AD_PrintPaper
|
|
||||||
WHERE AD_PrintPaper_ID=p_Record_ID));
|
|
||||||
v_Message := '@Copied@=' || SQL%ROWCOUNT;
|
|
||||||
|
|
||||||
<<FINISH_PROCESS>>
|
|
||||||
-- Update AD_PInstance
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Updating PInstance - Finished ' || v_Message);
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Updated = SysDate,
|
|
||||||
IsProcessing = 'N',
|
|
||||||
Result = 1, -- success
|
|
||||||
ErrorMsg = v_Message
|
|
||||||
WHERE AD_PInstance_ID=p_AD_PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
RETURN;
|
|
||||||
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
v_ResultStr := v_ResultStr || ': ' || SQLERRM || ' - ' || v_Message;
|
|
||||||
DBMS_OUTPUT.PUT_LINE(v_ResultStr);
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Updated = SysDate,
|
|
||||||
IsProcessing = 'N',
|
|
||||||
Result = 0, -- failure
|
|
||||||
ErrorMsg = v_ResultStr
|
|
||||||
WHERE AD_PInstance_ID=p_AD_PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
RETURN;
|
|
||||||
|
|
||||||
END AD_PrintPaper_Default;
|
|
||||||
/
|
|
|
@ -1,56 +0,0 @@
|
||||||
CREATE OR REPLACE PROCEDURE AD_Sequence_Doc
|
|
||||||
(
|
|
||||||
p_SequenceName IN VARCHAR2,
|
|
||||||
p_AD_Client_ID IN NUMBER,
|
|
||||||
o_DocumentNo OUT VARCHAR2
|
|
||||||
)
|
|
||||||
AS
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: AD_Sequence_Doc.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Get the next DocumentNo of TableName
|
|
||||||
* Description:
|
|
||||||
* store in parameter o_DocumentNo
|
|
||||||
* if ID < 1000000, use System Doc Sequence
|
|
||||||
************************************************************************/
|
|
||||||
v_NextNo NUMBER;
|
|
||||||
v_NextNoSys NUMBER;
|
|
||||||
v_Prefix VARCHAR2(30);
|
|
||||||
v_Suffix VARCHAR2(30);
|
|
||||||
BEGIN
|
|
||||||
SELECT CurrentNext, CurrentNextSys, Prefix, Suffix
|
|
||||||
INTO v_NextNo, v_NextNoSys, v_Prefix, v_Suffix
|
|
||||||
FROM AD_Sequence
|
|
||||||
WHERE Name = p_SequenceName
|
|
||||||
AND IsActive = 'Y'
|
|
||||||
AND IsTableID = 'N'
|
|
||||||
AND IsAutoSequence = 'Y'
|
|
||||||
AND AD_Client_ID = p_AD_Client_ID
|
|
||||||
FOR UPDATE OF CurrentNext, CurrentNextSys;
|
|
||||||
|
|
||||||
IF (v_NextNoSys <> -1 AND p_AD_Client_ID < 1000000) THEN -- System No
|
|
||||||
UPDATE AD_Sequence
|
|
||||||
SET CurrentNextSys = CurrentNextSys + IncrementNo,
|
|
||||||
Updated = SysDate
|
|
||||||
WHERE Name = p_SequenceName;
|
|
||||||
o_DocumentNo := NVL(v_Prefix, '') || v_NextNoSys || NVL(v_Suffix, '');
|
|
||||||
ELSE -- Standard No
|
|
||||||
UPDATE AD_Sequence
|
|
||||||
SET CurrentNext = CurrentNext + IncrementNo,
|
|
||||||
Updated = SysDate
|
|
||||||
WHERE Name = p_SequenceName;
|
|
||||||
o_DocumentNo := NVL(v_Prefix, '') || v_NextNo || NVL(v_Suffix, '');
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
EXCEPTION
|
|
||||||
WHEN NO_DATA_FOUND THEN
|
|
||||||
RAISE_APPLICATION_ERROR (-20100, 'Document Sequence not found - ' || p_SequenceName);
|
|
||||||
|
|
||||||
END AD_Sequence_Doc;
|
|
||||||
/
|
|
|
@ -1,80 +0,0 @@
|
||||||
CREATE OR REPLACE PROCEDURE AD_Sequence_DocType
|
|
||||||
(
|
|
||||||
p_DocType_ID IN NUMBER,
|
|
||||||
p_ID IN NUMBER,
|
|
||||||
p_DocumentNo OUT VARCHAR2
|
|
||||||
)
|
|
||||||
AS
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: AD_Sequence_DocType.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Get the next DocumentNo of Document Type
|
|
||||||
* Description:
|
|
||||||
* store in parameter p_DocumentNo
|
|
||||||
* If ID < 1000000, use System Doc Sequence
|
|
||||||
* If no Document Sequence is defined, return null !
|
|
||||||
* Use AD_Sequence_Doc('DocumentNo_myTable',.. to get it directly
|
|
||||||
************************************************************************/
|
|
||||||
|
|
||||||
v_NextNo NUMBER;
|
|
||||||
v_NextNoSys NUMBER;
|
|
||||||
v_Sequence_ID NUMBER := NULL;
|
|
||||||
v_Prefix VARCHAR2(30);
|
|
||||||
v_Suffix VARCHAR2(30);
|
|
||||||
BEGIN
|
|
||||||
-- Is a document Sequence defined and valid?
|
|
||||||
BEGIN
|
|
||||||
SELECT DocNoSequence_ID
|
|
||||||
INTO v_Sequence_ID
|
|
||||||
FROM C_DocType
|
|
||||||
WHERE C_DocType_ID=p_DocType_ID -- parameter
|
|
||||||
AND IsDocNoControlled='Y'
|
|
||||||
AND IsActive='Y';
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
NULL;
|
|
||||||
END;
|
|
||||||
|
|
||||||
IF (v_Sequence_ID IS NULL) THEN -- No Sequence Number
|
|
||||||
p_DocumentNo := ''; -- Return NULL
|
|
||||||
DBMS_OUTPUT.PUT_LINE('[AD_Sequence_DocType: not found - C_DocType_ID=' || p_DocType_ID || ']');
|
|
||||||
RETURN;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Get the numbers
|
|
||||||
SELECT s.AD_Sequence_ID, s.CurrentNext, s.CurrentNextSys, s.Prefix, s.Suffix
|
|
||||||
INTO v_Sequence_ID, v_NextNo, v_NextNoSys, v_Prefix, v_Suffix
|
|
||||||
FROM C_DocType d, AD_Sequence s
|
|
||||||
WHERE d.C_DocType_ID=p_DocType_ID -- parameter
|
|
||||||
AND d.DocNoSequence_ID=s.AD_Sequence_ID
|
|
||||||
AND s.IsActive = 'Y'
|
|
||||||
AND s.IsTableID = 'N'
|
|
||||||
AND s.IsAutoSequence = 'Y'
|
|
||||||
FOR UPDATE OF CurrentNext, CurrentNextSys;
|
|
||||||
|
|
||||||
IF (v_NextNoSys <> -1 AND p_ID < 1000000) THEN -- System No
|
|
||||||
UPDATE AD_Sequence
|
|
||||||
SET CurrentNextSys = CurrentNextSys + IncrementNo
|
|
||||||
WHERE AD_Sequence_ID = v_Sequence_ID;
|
|
||||||
p_DocumentNo := NVL(v_Prefix, '') || v_NextNoSys || NVL(v_Suffix, '');
|
|
||||||
ELSE -- Standard No
|
|
||||||
UPDATE AD_Sequence
|
|
||||||
SET CurrentNext = CurrentNext + IncrementNo
|
|
||||||
WHERE AD_Sequence_ID = v_Sequence_ID;
|
|
||||||
p_DocumentNo := NVL(v_Prefix, '') || v_NextNo || NVL(v_Suffix, '');
|
|
||||||
END IF;
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE(p_DocumentNo);
|
|
||||||
|
|
||||||
EXCEPTION
|
|
||||||
WHEN NO_DATA_FOUND THEN
|
|
||||||
RAISE_APPLICATION_ERROR (-20100, 'AD_Sequence_DocType: not found - DocType_ID='
|
|
||||||
|| p_DocType_ID || ', Sequence_ID=' || v_Sequence_ID);
|
|
||||||
|
|
||||||
END AD_Sequence_DocType;
|
|
||||||
/
|
|
|
@ -1,56 +0,0 @@
|
||||||
CREATE OR REPLACE PROCEDURE AD_Sequence_Next
|
|
||||||
(
|
|
||||||
p_TableName IN VARCHAR2,
|
|
||||||
p_ID IN NUMBER,
|
|
||||||
p_NextNo OUT NUMBER
|
|
||||||
)
|
|
||||||
AS
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: AD_Sequence_Next.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Get the next sequence number of TableName
|
|
||||||
* Description:
|
|
||||||
* store in parameter p_NextNo
|
|
||||||
* if ID < 1000000, use System Doc Sequence
|
|
||||||
************************************************************************/
|
|
||||||
|
|
||||||
v_NextNoSys NUMBER;
|
|
||||||
v_ResultStr VARCHAR(255);
|
|
||||||
BEGIN
|
|
||||||
v_ResultStr := 'Read';
|
|
||||||
SELECT CurrentNext, CurrentNextSys
|
|
||||||
INTO p_NextNo, v_NextNoSys
|
|
||||||
FROM AD_Sequence
|
|
||||||
WHERE Name = p_TableName
|
|
||||||
AND IsActive = 'Y'
|
|
||||||
AND IsTableID = 'Y'
|
|
||||||
AND IsAutoSequence = 'Y'
|
|
||||||
FOR UPDATE OF CurrentNext, CurrentNextSys;
|
|
||||||
|
|
||||||
v_ResultStr := 'Write';
|
|
||||||
IF (v_NextNoSys <> -1 AND p_ID < 1000000) THEN -- System No
|
|
||||||
UPDATE AD_Sequence
|
|
||||||
SET CurrentNextSys = CurrentNextSys + IncrementNo,
|
|
||||||
Updated = SysDate
|
|
||||||
WHERE Name = p_TableName;
|
|
||||||
p_NextNo := v_NextNoSys;
|
|
||||||
ELSE -- Standard No
|
|
||||||
UPDATE AD_Sequence
|
|
||||||
SET CurrentNext = CurrentNext + IncrementNo,
|
|
||||||
Updated = SysDate
|
|
||||||
WHERE Name = p_TableName;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
EXCEPTION
|
|
||||||
WHEN NO_DATA_FOUND THEN
|
|
||||||
RAISE_APPLICATION_ERROR (-20100, 'Table Sequence not found ');
|
|
||||||
-- || v_ResultStr || ': ' || p_TableName);
|
|
||||||
|
|
||||||
END AD_Sequence_Next;
|
|
||||||
/
|
|
|
@ -1,775 +0,0 @@
|
||||||
CREATE OR REPLACE PROCEDURE AD_Synchronize
|
|
||||||
(
|
|
||||||
p_PInstance_ID IN NUMBER -- DEFAULT NULL
|
|
||||||
)
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2003 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: AD_Syncronize.sql,v 1.2 2006/05/03 00:06:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Syncronize Application Dictionary
|
|
||||||
* Description:
|
|
||||||
* Synchronize Elements
|
|
||||||
* Update Column and Field with Names from Element and Process
|
|
||||||
* Update Process Parameters from Elements
|
|
||||||
* Update Workflow Notes from Windows
|
|
||||||
* Update Menu from Window/Form/Process/Task
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
-- Logistice
|
|
||||||
v_ResultStr VARCHAR2(2000);
|
|
||||||
v_Message VARCHAR2(2000);
|
|
||||||
v_Result NUMBER := 1; -- 0=failure
|
|
||||||
v_Record_ID NUMBER;
|
|
||||||
v_AD_User_ID NUMBER;
|
|
||||||
-- Parameter
|
|
||||||
CURSOR Cur_Parameter (pp_PInstance NUMBER) IS
|
|
||||||
SELECT i.Record_ID, i.AD_User_ID,
|
|
||||||
p.ParameterName, p.P_String, p.P_Number, p.P_Date
|
|
||||||
FROM AD_PInstance i, AD_PInstance_Para p
|
|
||||||
WHERE i.AD_PInstance_ID=pp_PInstance
|
|
||||||
AND i.AD_PInstance_ID=p.AD_PInstance_ID(+)
|
|
||||||
ORDER BY p.SeqNo;
|
|
||||||
-- Parameter Variables
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
IF (p_PInstance_ID IS NOT NULL) THEN
|
|
||||||
-- Update AD_PInstance
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Updating PInstance - Processing ' || p_PInstance_ID);
|
|
||||||
v_ResultStr := 'PInstanceNotFound';
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Created = SysDate,
|
|
||||||
IsProcessing = 'Y'
|
|
||||||
WHERE AD_PInstance_ID=p_PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
|
|
||||||
-- Get Parameters
|
|
||||||
v_ResultStr := 'ReadingParameters';
|
|
||||||
FOR p IN Cur_Parameter (p_PInstance_ID) LOOP
|
|
||||||
v_Record_ID := p.Record_ID;
|
|
||||||
v_AD_User_ID := p.AD_User_ID;
|
|
||||||
END LOOP; -- Get Parameter
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' Record_ID=' || v_Record_ID);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Adding missing Elements');
|
|
||||||
DECLARE
|
|
||||||
NextNo NUMBER;
|
|
||||||
CURSOR Cur_Column IS
|
|
||||||
SELECT DISTINCT ColumnName, Name, Description, Help, EntityType
|
|
||||||
FROM AD_Column c
|
|
||||||
WHERE NOT EXISTS
|
|
||||||
(SELECT * FROM AD_Element e
|
|
||||||
WHERE UPPER(c.ColumnName)=UPPER(e.ColumnName));
|
|
||||||
CURSOR Cur_Process IS
|
|
||||||
SELECT DISTINCT ColumnName, Name, Description, Help, EntityType
|
|
||||||
FROM AD_Process_Para p
|
|
||||||
WHERE NOT EXISTS
|
|
||||||
(SELECT * FROM AD_Element e
|
|
||||||
WHERE UPPER(p.ColumnName)=UPPER(e.ColumnName));
|
|
||||||
CC Cur_Column%ROWTYPE;
|
|
||||||
BEGIN
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Column:');
|
|
||||||
FOR CC IN Cur_Column LOOP
|
|
||||||
AD_Sequence_Next('AD_Element', 0, NextNo); -- get ID
|
|
||||||
INSERT INTO AD_ELEMENT
|
|
||||||
(AD_ELEMENT_ID, AD_CLIENT_ID, AD_ORG_ID,
|
|
||||||
ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY,
|
|
||||||
ColumnName, Name, PrintName, Description, Help, EntityType)
|
|
||||||
VALUES
|
|
||||||
(NextNo, 0, 0,
|
|
||||||
'Y', SysDate, 0, SysDate, 0,
|
|
||||||
CC.ColumnName, CC.Name, CC.Name, CC.Description, CC.Help, CC.EntityType);
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' added ' || cc.ColumnName);
|
|
||||||
COMMIT;
|
|
||||||
END LOOP;
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Parameter:');
|
|
||||||
FOR CC IN Cur_Process LOOP
|
|
||||||
AD_Sequence_Next('AD_Element', 0, NextNo); -- get ID
|
|
||||||
INSERT INTO AD_ELEMENT
|
|
||||||
(AD_ELEMENT_ID, AD_CLIENT_ID, AD_ORG_ID,
|
|
||||||
ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY,
|
|
||||||
ColumnName, Name, PrintName, Description, Help, EntityType)
|
|
||||||
VALUES
|
|
||||||
(NextNo, 0, 0,
|
|
||||||
'Y', SysDate, 0, SysDate, 0,
|
|
||||||
CC.ColumnName, CC.Name, CC.Name, CC.Description, CC.Help, CC.EntityType);
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' added ' || cc.ColumnName);
|
|
||||||
COMMIT;
|
|
||||||
END LOOP;
|
|
||||||
END;
|
|
||||||
|
|
||||||
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Adding missing Element Translations');
|
|
||||||
INSERT INTO AD_Element_Trl (AD_Element_ID, AD_Language, AD_Client_ID, AD_Org_ID,
|
|
||||||
IsActive, Created, CreatedBy, Updated, UpdatedBy,
|
|
||||||
Name, PrintName, Description, Help, IsTranslated)
|
|
||||||
SELECT m.AD_Element_ID, l.AD_Language, m.AD_Client_ID, m.AD_Org_ID,
|
|
||||||
m.IsActive, m.Created, m.CreatedBy, m.Updated, m.UpdatedBy,
|
|
||||||
m.Name, m.PrintName, m.Description, m.Help, 'N'
|
|
||||||
FROM AD_Element m, AD_Language l
|
|
||||||
WHERE l.IsActive = 'Y' AND l.IsSystemLanguage = 'Y'
|
|
||||||
AND AD_Element_ID || AD_Language NOT IN
|
|
||||||
(SELECT AD_Element_ID || AD_Language FROM AD_Element_Trl);
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows added: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Creating link from Element to Column');
|
|
||||||
UPDATE AD_Column c
|
|
||||||
SET AD_Element_id =
|
|
||||||
(SELECT AD_Element_ID FROM AD_Element e
|
|
||||||
WHERE UPPER(c.ColumnName)=UPPER(e.ColumnName))
|
|
||||||
WHERE AD_Element_ID IS NULL;
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
COMMIT;
|
|
||||||
|
|
||||||
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Deleting unused Elements');
|
|
||||||
DELETE AD_Element_Trl
|
|
||||||
WHERE AD_Element_ID IN
|
|
||||||
(SELECT AD_Element_ID FROM AD_Element e
|
|
||||||
WHERE NOT EXISTS
|
|
||||||
(SELECT * FROM AD_Column c WHERE UPPER(e.ColumnName)=UPPER(c.ColumnName))
|
|
||||||
AND NOT EXISTS
|
|
||||||
(SELECT * FROM AD_Process_Para p WHERE UPPER(e.ColumnName)=UPPER(p.ColumnName)));
|
|
||||||
|
|
||||||
DELETE AD_Element e
|
|
||||||
WHERE NOT EXISTS
|
|
||||||
(SELECT * FROM AD_Column c WHERE UPPER(e.ColumnName)=UPPER(c.ColumnName))
|
|
||||||
AND NOT EXISTS
|
|
||||||
(SELECT * FROM AD_Process_Para p WHERE UPPER(e.ColumnName)=UPPER(p.ColumnName));
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows deleted: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
-- Columns
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronize Column');
|
|
||||||
/* Identify offending column
|
|
||||||
SELECT UPPER(ColumnName)
|
|
||||||
FROM AD_Element
|
|
||||||
GROUP BY UPPER(ColumnName)
|
|
||||||
HAVING COUNT(UPPER(ColumnName)) > 1
|
|
||||||
|
|
||||||
SELECT c.ColumnName, e.ColumnName
|
|
||||||
FROM AD_Column c
|
|
||||||
INNER JOIN AD_Element e ON (c.AD_Element_ID=e.AD_Element_ID)
|
|
||||||
WHERE c.ColumnName <> e.ColumnName
|
|
||||||
*/
|
|
||||||
UPDATE AD_Column c
|
|
||||||
SET (ColumnName, Name, Description, Help) =
|
|
||||||
(SELECT ColumnName, Name, Description, Help
|
|
||||||
FROM AD_Element e WHERE c.AD_Element_ID=e.AD_Element_ID),
|
|
||||||
Updated = SysDate
|
|
||||||
WHERE EXISTS (SELECT * FROM AD_Element e
|
|
||||||
WHERE c.AD_Element_ID=e.AD_Element_ID
|
|
||||||
AND (c.ColumnName <> e.ColumnName OR c.Name <> e.Name
|
|
||||||
OR NVL(c.Description,' ') <> NVL(e.Description,' ') OR NVL(c.Help,' ') <> NVL(e.Help,' ')));
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
-- Fields should now be syncronized
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronize Field');
|
|
||||||
UPDATE AD_Field f
|
|
||||||
SET (Name, Description, Help) =
|
|
||||||
(SELECT e.Name, e.Description, e.Help
|
|
||||||
FROM AD_Element e, AD_Column c
|
|
||||||
WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=f.AD_Column_ID),
|
|
||||||
Updated = SysDate
|
|
||||||
WHERE f.IsCentrallyMaintained='Y' AND f.IsActive='Y'
|
|
||||||
AND EXISTS (SELECT * FROM AD_Element e, AD_Column c
|
|
||||||
WHERE f.AD_Column_ID=c.AD_Column_ID
|
|
||||||
AND c.AD_Element_ID=e.AD_Element_ID AND c.AD_Process_ID IS NULL
|
|
||||||
AND (f.Name <> e.Name OR NVL(f.Description,' ') <> NVL(e.Description,' ') OR NVL(f.Help,' ') <> NVL(e.Help,' ')));
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
-- Field Translations
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronize Field Translations');
|
|
||||||
UPDATE AD_Field_trl trl
|
|
||||||
SET Name = (SELECT e.Name FROM AD_Element_trl e, AD_Column c, AD_Field f
|
|
||||||
WHERE e.AD_Language=trl.AD_Language AND e.AD_Element_ID=c.AD_Element_ID
|
|
||||||
AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=trl.AD_Field_ID),
|
|
||||||
Description = (SELECT e.Description FROM AD_Element_trl e, AD_Column c, AD_Field f
|
|
||||||
WHERE e.AD_Language=trl.AD_Language AND e.AD_Element_ID=c.AD_Element_ID
|
|
||||||
AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=trl.AD_Field_ID),
|
|
||||||
Help = (SELECT e.Help FROM AD_Element_trl e, AD_Column c, AD_Field f
|
|
||||||
WHERE e.AD_Language=trl.AD_Language AND e.AD_Element_ID=c.AD_Element_ID
|
|
||||||
AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=trl.AD_Field_ID),
|
|
||||||
IsTranslated = (SELECT e.IsTranslated FROM AD_Element_trl e, AD_Column c, AD_Field f
|
|
||||||
WHERE e.AD_Language=trl.AD_Language AND e.AD_Element_ID=c.AD_Element_ID
|
|
||||||
AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=trl.AD_Field_ID),
|
|
||||||
Updated = SysDate
|
|
||||||
WHERE EXISTS (SELECT * FROM AD_Field f, AD_Element_trl e, AD_Column c
|
|
||||||
WHERE trl.AD_Field_ID=f.AD_Field_ID
|
|
||||||
AND f.AD_Column_ID=c.AD_Column_ID
|
|
||||||
AND c.AD_Element_ID=e.AD_Element_ID AND c.AD_Process_ID IS NULL
|
|
||||||
AND trl.AD_Language=e.AD_Language
|
|
||||||
AND f.IsCentrallyMaintained='Y' AND f.IsActive='Y'
|
|
||||||
AND (trl.Name <> e.Name OR NVL(trl.Description,' ') <> NVL(e.Description,' ') OR NVL(trl.Help,' ') <> NVL(e.Help,' ')));
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
-- Fields should now be syncronized
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronize PO Field');
|
|
||||||
UPDATE AD_Field f
|
|
||||||
SET Name = (SELECT e.PO_Name FROM AD_Element e, AD_Column c
|
|
||||||
WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=f.AD_Column_ID),
|
|
||||||
Description = (SELECT e.PO_Description FROM AD_Element e, AD_Column c
|
|
||||||
WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=f.AD_Column_ID),
|
|
||||||
Help = (SELECT e.PO_Help FROM AD_Element e, AD_Column c
|
|
||||||
WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=f.AD_Column_ID),
|
|
||||||
Updated = SysDate
|
|
||||||
WHERE f.IsCentrallyMaintained='Y' AND f.IsActive='Y'
|
|
||||||
AND EXISTS (SELECT * FROM AD_Element e, AD_Column c
|
|
||||||
WHERE f.AD_Column_ID=c.AD_Column_ID
|
|
||||||
AND c.AD_Element_ID=e.AD_Element_ID AND c.AD_Process_ID IS NULL
|
|
||||||
AND (f.Name <> e.PO_Name OR NVL(f.Description,' ') <> NVL(e.PO_Description,' ') OR NVL(f.Help,' ') <> NVL(e.PO_Help,' '))
|
|
||||||
AND e.PO_Name IS NOT NULL)
|
|
||||||
AND EXISTS (SELECT * FROM AD_Tab t, AD_Window w
|
|
||||||
WHERE f.AD_Tab_ID=t.AD_Tab_ID
|
|
||||||
AND t.AD_Window_ID=w.AD_Window_ID
|
|
||||||
AND w.IsSOTrx='N');
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
-- Field Translations
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronize PO Field Translations');
|
|
||||||
UPDATE AD_Field_trl trl
|
|
||||||
SET Name = (SELECT e.PO_Name FROM AD_Element_trl e, AD_Column c, AD_Field f
|
|
||||||
WHERE e.AD_Language=trl.AD_Language AND e.AD_Element_ID=c.AD_Element_ID
|
|
||||||
AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=trl.AD_Field_ID),
|
|
||||||
Description = (SELECT e.PO_Description FROM AD_Element_trl e, AD_Column c, AD_Field f
|
|
||||||
WHERE e.AD_Language=trl.AD_Language AND e.AD_Element_ID=c.AD_Element_ID
|
|
||||||
AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=trl.AD_Field_ID),
|
|
||||||
Help = (SELECT e.PO_Help FROM AD_Element_trl e, AD_Column c, AD_Field f
|
|
||||||
WHERE e.AD_Language=trl.AD_Language AND e.AD_Element_ID=c.AD_Element_ID
|
|
||||||
AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=trl.AD_Field_ID),
|
|
||||||
IsTranslated = (SELECT e.IsTranslated FROM AD_Element_trl e, AD_Column c, AD_Field f
|
|
||||||
WHERE e.AD_Language=trl.AD_Language AND e.AD_Element_ID=c.AD_Element_ID
|
|
||||||
AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=trl.AD_Field_ID),
|
|
||||||
Updated = SysDate
|
|
||||||
WHERE EXISTS (SELECT * FROM AD_Field f, AD_Element_trl e, AD_Column c
|
|
||||||
WHERE trl.AD_Field_ID=f.AD_Field_ID
|
|
||||||
AND f.AD_Column_ID=c.AD_Column_ID
|
|
||||||
AND c.AD_Element_ID=e.AD_Element_ID AND c.AD_Process_ID IS NULL
|
|
||||||
AND trl.AD_Language=e.AD_Language
|
|
||||||
AND f.IsCentrallyMaintained='Y' AND f.IsActive='Y'
|
|
||||||
AND (trl.Name <> e.PO_Name OR NVL(trl.Description,' ') <> NVL(e.PO_Description,' ') OR NVL(trl.Help,' ') <> NVL(e.PO_Help,' '))
|
|
||||||
AND e.PO_Name IS NOT NULL)
|
|
||||||
AND EXISTS (SELECT * FROM AD_Field f, AD_Tab t, AD_Window w
|
|
||||||
WHERE trl.AD_Field_ID=f.AD_Field_ID
|
|
||||||
AND f.AD_Tab_ID=t.AD_Tab_ID
|
|
||||||
AND t.AD_Window_ID=w.AD_Window_ID
|
|
||||||
AND w.IsSOTrx='N');
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
|
|
||||||
-- Fields from Process
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronize Field from Process');
|
|
||||||
UPDATE AD_Field f
|
|
||||||
SET Name = (SELECT p.Name FROM AD_Process p, AD_Column c WHERE p.AD_Process_ID=c.AD_Process_ID
|
|
||||||
AND c.AD_Column_ID=f.AD_Column_ID),
|
|
||||||
Description = (SELECT p.Description FROM AD_Process p, AD_Column c WHERE p.AD_Process_ID=c.AD_Process_ID
|
|
||||||
AND c.AD_Column_ID=f.AD_Column_ID),
|
|
||||||
Help = (SELECT p.Help FROM AD_Process p, AD_Column c WHERE p.AD_Process_ID=c.AD_Process_ID
|
|
||||||
AND c.AD_Column_ID=f.AD_Column_ID),
|
|
||||||
Updated = SysDate
|
|
||||||
WHERE f.IsCentrallyMaintained='Y' AND f.IsActive='Y'
|
|
||||||
AND EXISTS (SELECT * FROM AD_Process p, AD_Column c
|
|
||||||
WHERE c.AD_Process_ID=p.AD_Process_ID AND f.AD_Column_ID=c.AD_Column_ID
|
|
||||||
AND (f.Name<>p.Name OR NVL(f.Description,' ')<>NVL(p.Description,' ') OR NVL(f.Help,' ')<>NVL(p.Help,' ')));
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
-- Field Translations from Process
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronize Field Trl from Process Trl');
|
|
||||||
UPDATE AD_Field_trl trl
|
|
||||||
SET Name = (SELECT p.Name FROM AD_Process_trl p, AD_Column c, AD_Field f
|
|
||||||
WHERE p.AD_Process_ID=c.AD_Process_ID AND c.AD_Column_ID=f.AD_Column_ID
|
|
||||||
AND f.AD_Field_ID=trl.AD_Field_ID AND p.AD_Language=trl.AD_Language),
|
|
||||||
Description = (SELECT p.Description FROM AD_Process_trl p, AD_Column c, AD_Field f
|
|
||||||
WHERE p.AD_Process_ID=c.AD_Process_ID AND c.AD_Column_ID=f.AD_Column_ID
|
|
||||||
AND f.AD_Field_ID=trl.AD_Field_ID AND p.AD_Language=trl.AD_Language),
|
|
||||||
Help = (SELECT p.Help FROM AD_Process_trl p, AD_Column c, AD_Field f
|
|
||||||
WHERE p.AD_Process_ID=c.AD_Process_ID AND c.AD_Column_ID=f.AD_Column_ID
|
|
||||||
AND f.AD_Field_ID=trl.AD_Field_ID AND p.AD_Language=trl.AD_Language),
|
|
||||||
IsTranslated = (SELECT p.IsTranslated FROM AD_Process_trl p, AD_Column c, AD_Field f
|
|
||||||
WHERE p.AD_Process_ID=c.AD_Process_ID AND c.AD_Column_ID=f.AD_Column_ID
|
|
||||||
AND f.AD_Field_ID=trl.AD_Field_ID AND p.AD_Language=trl.AD_Language),
|
|
||||||
Updated = SysDate
|
|
||||||
WHERE EXISTS (SELECT * FROM AD_Process_Trl p, AD_Column c, AD_Field f
|
|
||||||
WHERE c.AD_Process_ID=p.AD_Process_ID AND f.AD_Column_ID=c.AD_Column_ID
|
|
||||||
AND f.AD_Field_ID=trl.AD_Field_ID AND p.AD_Language=trl.AD_Language
|
|
||||||
AND f.IsCentrallyMaintained='Y' AND f.IsActive='Y'
|
|
||||||
AND (trl.Name<>p.Name OR NVL(trl.Description,' ')<>NVL(p.Description,' ') OR NVL(trl.Help,' ')<>NVL(p.Help,' ')));
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
-- Sync Parameter ColumnName
|
|
||||||
UPDATE AD_Process_Para f
|
|
||||||
SET ColumnName = (SELECT e.ColumnName FROM AD_Element e
|
|
||||||
WHERE UPPER(e.ColumnName)=UPPER(f.ColumnName))
|
|
||||||
WHERE f.IsCentrallyMaintained='Y' AND f.IsActive='Y'
|
|
||||||
AND EXISTS (SELECT * FROM AD_Element e
|
|
||||||
WHERE UPPER(e.ColumnName)=UPPER(f.ColumnName)
|
|
||||||
AND e.ColumnName<>f.ColumnName);
|
|
||||||
|
|
||||||
|
|
||||||
-- Paramenter Fields
|
|
||||||
UPDATE AD_Process_Para p
|
|
||||||
SET IsCentrallyMaintained = 'N'
|
|
||||||
WHERE IsCentrallyMaintained <> 'N'
|
|
||||||
AND NOT EXISTS (SELECT * FROM AD_Element e WHERE p.ColumnName=e.ColumnName);
|
|
||||||
|
|
||||||
-- Parameter Fields
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronize Process Parameter');
|
|
||||||
UPDATE AD_Process_Para f
|
|
||||||
SET Name = (SELECT e.Name FROM AD_Element e
|
|
||||||
WHERE e.ColumnName=f.ColumnName),
|
|
||||||
Description = (SELECT e.Description FROM AD_Element e
|
|
||||||
WHERE e.ColumnName=f.ColumnName),
|
|
||||||
Help = (SELECT e.Help FROM AD_Element e
|
|
||||||
WHERE e.ColumnName=f.ColumnName),
|
|
||||||
Updated = SysDate
|
|
||||||
WHERE f.IsCentrallyMaintained='Y' AND f.IsActive='Y'
|
|
||||||
AND EXISTS (SELECT * FROM AD_Element e
|
|
||||||
WHERE e.ColumnName=f.ColumnName
|
|
||||||
AND (f.Name <> e.Name OR NVL(f.Description,' ') <> NVL(e.Description,' ') OR NVL(f.Help,' ') <> NVL(e.Help,' ')));
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
-- Parameter Translations
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronize Process Parameter Trl');
|
|
||||||
UPDATE AD_Process_Para_Trl trl
|
|
||||||
SET Name = (SELECT et.Name FROM AD_Element_Trl et, AD_Element e, AD_Process_Para f
|
|
||||||
WHERE et.AD_Language=trl.AD_Language AND et.AD_Element_ID=e.AD_Element_ID
|
|
||||||
AND e.ColumnName=f.ColumnName AND f.AD_Process_Para_ID=trl.AD_Process_Para_ID),
|
|
||||||
Description = (SELECT et.Description FROM AD_Element_Trl et, AD_Element e, AD_Process_Para f
|
|
||||||
WHERE et.AD_Language=trl.AD_Language AND et.AD_Element_ID=e.AD_Element_ID
|
|
||||||
AND e.ColumnName=f.ColumnName AND f.AD_Process_Para_ID=trl.AD_Process_Para_ID),
|
|
||||||
Help = (SELECT et.Help FROM AD_Element_Trl et, AD_Element e, AD_Process_Para f
|
|
||||||
WHERE et.AD_Language=trl.AD_Language AND et.AD_Element_ID=e.AD_Element_ID
|
|
||||||
AND e.ColumnName=f.ColumnName AND f.AD_Process_Para_ID=trl.AD_Process_Para_ID),
|
|
||||||
IsTranslated = (SELECT et.IsTranslated FROM AD_Element_Trl et, AD_Element e, AD_Process_Para f
|
|
||||||
WHERE et.AD_Language=trl.AD_Language AND et.AD_Element_ID=e.AD_Element_ID
|
|
||||||
AND e.ColumnName=f.ColumnName AND f.AD_Process_Para_ID=trl.AD_Process_Para_ID),
|
|
||||||
Updated = SysDate
|
|
||||||
WHERE EXISTS (SELECT * FROM AD_Element_Trl et, AD_Element e, AD_Process_Para f
|
|
||||||
WHERE et.AD_Language=trl.AD_Language AND et.AD_Element_ID=e.AD_Element_ID
|
|
||||||
AND e.ColumnName=f.ColumnName AND f.AD_Process_Para_ID=trl.AD_Process_Para_ID
|
|
||||||
AND f.IsCentrallyMaintained='Y' AND f.IsActive='Y'
|
|
||||||
AND (trl.Name <> et.Name OR NVL(trl.Description,' ') <> NVL(et.Description,' ') OR NVL(trl.Help,' ') <> NVL(et.Help,' ')));
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
|
|
||||||
-- Workflow Node - Window
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronize Workflow Node from Window');
|
|
||||||
UPDATE AD_WF_Node n
|
|
||||||
SET Name = (SELECT w.Name FROM AD_Window w
|
|
||||||
WHERE w.AD_Window_ID=n.AD_Window_ID),
|
|
||||||
Description = (SELECT w.Description FROM AD_Window w
|
|
||||||
WHERE w.AD_Window_ID=n.AD_Window_ID),
|
|
||||||
Help = (SELECT w.Help FROM AD_Window w
|
|
||||||
WHERE w.AD_Window_ID=n.AD_Window_ID)
|
|
||||||
WHERE n.IsCentrallyMaintained = 'Y'
|
|
||||||
AND EXISTS (SELECT * FROM AD_Window w
|
|
||||||
WHERE w.AD_Window_ID=n.AD_Window_ID
|
|
||||||
AND (w.Name <> n.Name OR NVL(w.Description,' ') <> NVL(n.Description,' ') OR NVL(w.Help,' ') <> NVL(n.Help,' ')));
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
-- Workflow Translations - Window
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronize Workflow Node Trl from Window Trl');
|
|
||||||
UPDATE AD_WF_Node_Trl trl
|
|
||||||
SET Name = (SELECT t.Name FROM AD_Window_trl t, AD_WF_Node n
|
|
||||||
WHERE trl.AD_WF_Node_ID=n.AD_WF_Node_ID AND n.AD_Window_ID=t.AD_Window_ID
|
|
||||||
AND trl.AD_Language=t.AD_Language),
|
|
||||||
Description = (SELECT t.Description FROM AD_Window_trl t, AD_WF_Node n
|
|
||||||
WHERE trl.AD_WF_Node_ID=n.AD_WF_Node_ID AND n.AD_Window_ID=t.AD_Window_ID
|
|
||||||
AND trl.AD_Language=t.AD_Language),
|
|
||||||
Help = (SELECT t.Help FROM AD_Window_trl t, AD_WF_Node n
|
|
||||||
WHERE trl.AD_WF_Node_ID=n.AD_WF_Node_ID AND n.AD_Window_ID=t.AD_Window_ID
|
|
||||||
AND trl.AD_Language=t.AD_Language)
|
|
||||||
WHERE EXISTS (SELECT * FROM AD_Window_Trl t, AD_WF_Node n
|
|
||||||
WHERE trl.AD_WF_Node_ID=n.AD_WF_Node_ID AND n.AD_Window_ID=t.AD_Window_ID
|
|
||||||
AND trl.AD_Language=t.AD_Language AND n.IsCentrallyMaintained='Y' AND n.IsActive='Y'
|
|
||||||
AND (trl.Name <> t.Name OR NVL(trl.Description,' ') <> NVL(t.Description,' ') OR NVL(trl.Help,' ') <> NVL(t.Help,' ')));
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
-- Workflow Node - Form
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronize Workflow Node from Form');
|
|
||||||
UPDATE AD_WF_Node n
|
|
||||||
SET (Name, Description, Help) = (SELECT f.Name, f.Description, f.Help
|
|
||||||
FROM AD_Form f
|
|
||||||
WHERE f.AD_Form_ID=n.AD_Form_ID)
|
|
||||||
WHERE n.IsCentrallyMaintained = 'Y'
|
|
||||||
AND EXISTS (SELECT * FROM AD_Form f
|
|
||||||
WHERE f.AD_Form_ID=n.AD_Form_ID
|
|
||||||
AND (f.Name <> n.Name OR NVL(f.Description,' ') <> NVL(n.Description,' ') OR NVL(f.Help,' ') <> NVL(n.Help,' ')));
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
-- Workflow Translations - Form
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronize Workflow Node Trl from Form Trl');
|
|
||||||
UPDATE AD_WF_Node_Trl trl
|
|
||||||
SET (Name, Description, Help) = (SELECT t.Name, t.Description, t.Help
|
|
||||||
FROM AD_Form_trl t, AD_WF_Node n
|
|
||||||
WHERE trl.AD_WF_Node_ID=n.AD_WF_Node_ID AND n.AD_Form_ID=t.AD_Form_ID
|
|
||||||
AND trl.AD_Language=t.AD_Language)
|
|
||||||
WHERE EXISTS (SELECT * FROM AD_Form_Trl t, AD_WF_Node n
|
|
||||||
WHERE trl.AD_WF_Node_ID=n.AD_WF_Node_ID AND n.AD_Form_ID=t.AD_Form_ID
|
|
||||||
AND trl.AD_Language=t.AD_Language AND n.IsCentrallyMaintained='Y' AND n.IsActive='Y'
|
|
||||||
AND (trl.Name <> t.Name OR NVL(trl.Description,' ') <> NVL(t.Description,' ') OR NVL(trl.Help,' ') <> NVL(t.Help,' ')));
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
-- Workflow Node - Report
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronize Workflow Node from Process');
|
|
||||||
UPDATE AD_WF_Node n
|
|
||||||
SET (Name, Description, Help) = (SELECT f.Name, f.Description, f.Help
|
|
||||||
FROM AD_Process f
|
|
||||||
WHERE f.AD_Process_ID=n.AD_Process_ID)
|
|
||||||
WHERE n.IsCentrallyMaintained = 'Y'
|
|
||||||
AND EXISTS (SELECT * FROM AD_Process f
|
|
||||||
WHERE f.AD_Process_ID=n.AD_Process_ID
|
|
||||||
AND (f.Name <> n.Name OR NVL(f.Description,' ') <> NVL(n.Description,' ') OR NVL(f.Help,' ') <> NVL(n.Help,' ')));
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
-- Workflow Translations - Form
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronize Workflow Node Trl from Process Trl');
|
|
||||||
UPDATE AD_WF_Node_Trl trl
|
|
||||||
SET (Name, Description, Help) = (SELECT t.Name, t.Description, t.Help
|
|
||||||
FROM AD_Process_trl t, AD_WF_Node n
|
|
||||||
WHERE trl.AD_WF_Node_ID=n.AD_WF_Node_ID AND n.AD_Process_ID=t.AD_Process_ID
|
|
||||||
AND trl.AD_Language=t.AD_Language)
|
|
||||||
WHERE EXISTS (SELECT * FROM AD_Process_Trl t, AD_WF_Node n
|
|
||||||
WHERE trl.AD_WF_Node_ID=n.AD_WF_Node_ID AND n.AD_Process_ID=t.AD_Process_ID
|
|
||||||
AND trl.AD_Language=t.AD_Language AND n.IsCentrallyMaintained='Y' AND n.IsActive='Y'
|
|
||||||
AND (trl.Name <> t.Name OR NVL(trl.Description,' ') <> NVL(t.Description,' ') OR NVL(trl.Help,' ') <> NVL(t.Help,' ')));
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
-- Need centrally maintained flag here!
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronize PrintFormatItem Name from Element');
|
|
||||||
UPDATE AD_PrintFormatItem pfi
|
|
||||||
SET Name = (SELECT e.Name
|
|
||||||
FROM AD_Element e, AD_Column c
|
|
||||||
WHERE e.AD_Element_ID=c.AD_Element_ID
|
|
||||||
AND c.AD_Column_ID=pfi.AD_Column_ID)
|
|
||||||
WHERE pfi.IsCentrallyMaintained='Y'
|
|
||||||
AND EXISTS (SELECT *
|
|
||||||
FROM AD_Element e, AD_Column c
|
|
||||||
WHERE e.AD_Element_ID=c.AD_Element_ID
|
|
||||||
AND c.AD_Column_ID=pfi.AD_Column_ID
|
|
||||||
AND e.Name<>pfi.Name)
|
|
||||||
AND EXISTS (SELECT * FROM AD_Client
|
|
||||||
WHERE AD_Client_ID=pfi.AD_Client_ID AND IsMultiLingualDocument='Y');
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronize PrintFormatItem PrintName from Element');
|
|
||||||
UPDATE AD_PrintFormatItem pfi
|
|
||||||
SET PrintName = (SELECT e.PrintName
|
|
||||||
FROM AD_Element e, AD_Column c
|
|
||||||
WHERE e.AD_Element_ID=c.AD_Element_ID
|
|
||||||
AND c.AD_Column_ID=pfi.AD_Column_ID)
|
|
||||||
WHERE pfi.IsCentrallyMaintained='Y'
|
|
||||||
AND EXISTS (SELECT *
|
|
||||||
FROM AD_Element e, AD_Column c, AD_PrintFormat pf
|
|
||||||
WHERE e.AD_Element_ID=c.AD_Element_ID
|
|
||||||
AND c.AD_Column_ID=pfi.AD_Column_ID
|
|
||||||
AND LENGTH(pfi.PrintName) > 0
|
|
||||||
AND e.PrintName<>pfi.PrintName
|
|
||||||
AND pf.AD_PrintFormat_ID=pfi.AD_PrintFormat_ID
|
|
||||||
AND pf.IsForm='N' AND IsTableBased='Y')
|
|
||||||
AND EXISTS (SELECT * FROM AD_Client
|
|
||||||
WHERE AD_Client_ID=pfi.AD_Client_ID AND IsMultiLingualDocument='Y');
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronize PrintFormatItem Trl from Element Trl (Multi-Lingual)');
|
|
||||||
UPDATE AD_PrintFormatItem_Trl trl
|
|
||||||
SET PrintName = (SELECT e.PrintName
|
|
||||||
FROM AD_Element_Trl e, AD_Column c, AD_PrintFormatItem pfi
|
|
||||||
WHERE e.AD_Language=trl.AD_Language
|
|
||||||
AND e.AD_Element_ID=c.AD_Element_ID
|
|
||||||
AND c.AD_Column_ID=pfi.AD_Column_ID
|
|
||||||
AND pfi.AD_PrintFormatItem_ID=trl.AD_PrintFormatItem_ID)
|
|
||||||
WHERE EXISTS (SELECT *
|
|
||||||
FROM AD_Element_Trl e, AD_Column c, AD_PrintFormatItem pfi, AD_PrintFormat pf
|
|
||||||
WHERE e.AD_Language=trl.AD_Language
|
|
||||||
AND e.AD_Element_ID=c.AD_Element_ID
|
|
||||||
AND c.AD_Column_ID=pfi.AD_Column_ID
|
|
||||||
AND pfi.AD_PrintFormatItem_ID=trl.AD_PrintFormatItem_ID
|
|
||||||
AND pfi.IsCentrallyMaintained='Y'
|
|
||||||
AND LENGTH(pfi.PrintName) > 0
|
|
||||||
AND (e.PrintName<>trl.PrintName OR trl.PrintName IS NULL)
|
|
||||||
AND pf.AD_PrintFormat_ID=pfi.AD_PrintFormat_ID
|
|
||||||
AND pf.IsForm='N' AND IsTableBased='Y')
|
|
||||||
AND EXISTS (SELECT * FROM AD_Client
|
|
||||||
WHERE AD_Client_ID=trl.AD_Client_ID AND IsMultiLingualDocument='Y');
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronize PrintFormatItem Trl (Not Multi-Lingual)');
|
|
||||||
UPDATE AD_PrintFormatItem_Trl trl
|
|
||||||
SET PrintName = (SELECT pfi.PrintName
|
|
||||||
FROM AD_PrintFormatItem pfi
|
|
||||||
WHERE pfi.AD_PrintFormatItem_ID=trl.AD_PrintFormatItem_ID)
|
|
||||||
WHERE EXISTS (SELECT *
|
|
||||||
FROM AD_PrintFormatItem pfi, AD_PrintFormat pf
|
|
||||||
WHERE pfi.AD_PrintFormatItem_ID=trl.AD_PrintFormatItem_ID
|
|
||||||
AND pfi.IsCentrallyMaintained='Y'
|
|
||||||
AND LENGTH(pfi.PrintName) > 0
|
|
||||||
AND pfi.PrintName<>trl.PrintName
|
|
||||||
AND pf.AD_PrintFormat_ID=pfi.AD_PrintFormat_ID
|
|
||||||
AND pf.IsForm='N' AND pf.IsTableBased='Y')
|
|
||||||
AND EXISTS (SELECT * FROM AD_Client
|
|
||||||
WHERE AD_Client_ID=trl.AD_Client_ID AND IsMultiLingualDocument='N');
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Reset PrintFormatItem Trl where not used in base table');
|
|
||||||
UPDATE AD_PrintFormatItem_Trl trl
|
|
||||||
SET PrintName = NULL
|
|
||||||
WHERE PrintName IS NOT NULL
|
|
||||||
AND EXISTS (SELECT *
|
|
||||||
FROM AD_PrintFormatItem pfi
|
|
||||||
WHERE pfi.AD_PrintFormatItem_ID=trl.AD_PrintFormatItem_ID
|
|
||||||
AND pfi.IsCentrallyMaintained='Y'
|
|
||||||
AND (LENGTH (pfi.PrintName) = 0 OR pfi.PrintName IS NULL));
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
/**
|
|
||||||
SELECT e.PrintName "Element", pfi.PrintName "FormatItem", trl.AD_Language, trl.PrintName "Trl"
|
|
||||||
FROM AD_Element e
|
|
||||||
INNER JOIN AD_Column c ON (e.AD_Element_ID=c.AD_Element_ID)
|
|
||||||
INNER JOIN AD_PrintFormatItem pfi ON (c.AD_Column_ID=pfi.AD_Column_ID)
|
|
||||||
INNER JOIN AD_PrintFormatItem_Trl trl ON (pfi.AD_PrintFormatItem_ID=trl.AD_PrintFormatItem_ID)
|
|
||||||
WHERE pfi.AD_PrintFormatItem_ID=?
|
|
||||||
**/
|
|
||||||
|
|
||||||
-- Sync Names - Window
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronizing Menu with Window');
|
|
||||||
UPDATE AD_Menu m
|
|
||||||
SET Name = (SELECT Name FROM AD_Window w WHERE m.AD_Window_ID=w.AD_Window_ID),
|
|
||||||
Description = (SELECT Description FROM AD_Window w WHERE m.AD_Window_ID=w.AD_Window_ID)
|
|
||||||
WHERE AD_Window_ID IS NOT NULL
|
|
||||||
AND Action = 'W';
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
UPDATE AD_Menu_Trl mt
|
|
||||||
SET Name = (SELECT wt.Name FROM AD_Window_Trl wt, AD_Menu m
|
|
||||||
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Window_ID=wt.AD_Window_ID
|
|
||||||
AND mt.AD_Language=wt.AD_Language),
|
|
||||||
Description = (SELECT wt.Description FROM AD_Window_Trl wt, AD_Menu m
|
|
||||||
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Window_ID=wt.AD_Window_ID
|
|
||||||
AND mt.AD_Language=wt.AD_Language),
|
|
||||||
IsTranslated = (SELECT wt.IsTranslated FROM AD_Window_Trl wt, AD_Menu m
|
|
||||||
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Window_ID=wt.AD_Window_ID
|
|
||||||
AND mt.AD_Language=wt.AD_Language)
|
|
||||||
WHERE EXISTS (SELECT * FROM AD_Window_Trl wt, AD_Menu m
|
|
||||||
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Window_ID=wt.AD_Window_ID
|
|
||||||
AND mt.AD_Language=wt.AD_Language
|
|
||||||
AND m.AD_Window_ID IS NOT NULL
|
|
||||||
AND m.Action = 'W');
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' trl rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
-- Sync Names - Process
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronizing Menu with Processes');
|
|
||||||
UPDATE AD_Menu m
|
|
||||||
SET Name = (SELECT p.Name FROM AD_Process p WHERE m.AD_Process_ID=p.AD_Process_ID),
|
|
||||||
Description = (SELECT p.Description FROM AD_Process p WHERE m.AD_Process_ID=p.AD_Process_ID)
|
|
||||||
WHERE m.AD_Process_ID IS NOT NULL
|
|
||||||
AND m.Action IN ('R', 'P');
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
UPDATE AD_Menu_Trl mt
|
|
||||||
SET Name = (SELECT pt.Name FROM AD_Process_Trl pt, AD_Menu m
|
|
||||||
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Process_ID=pt.AD_Process_ID
|
|
||||||
AND mt.AD_Language=pt.AD_Language),
|
|
||||||
Description = (SELECT pt.Description FROM AD_Process_Trl pt, AD_Menu m
|
|
||||||
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Process_ID=pt.AD_Process_ID
|
|
||||||
AND mt.AD_Language=pt.AD_Language),
|
|
||||||
IsTranslated = (SELECT pt.IsTranslated FROM AD_Process_Trl pt, AD_Menu m
|
|
||||||
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Process_ID=pt.AD_Process_ID
|
|
||||||
AND mt.AD_Language=pt.AD_Language)
|
|
||||||
WHERE EXISTS (SELECT * FROM AD_Process_Trl pt, AD_Menu m
|
|
||||||
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Process_ID=pt.AD_Process_ID
|
|
||||||
AND mt.AD_Language=pt.AD_Language
|
|
||||||
AND m.AD_Process_ID IS NOT NULL
|
|
||||||
AND Action IN ('R', 'P'));
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' trl rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
-- Sync Names = Form
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronizing Menu with Forms');
|
|
||||||
UPDATE AD_Menu m
|
|
||||||
SET Name = (SELECT Name FROM AD_Form f WHERE m.AD_Form_ID=f.AD_Form_ID),
|
|
||||||
Description = (SELECT Description FROM AD_Form f WHERE m.AD_Form_ID=f.AD_Form_ID)
|
|
||||||
WHERE AD_Form_ID IS NOT NULL
|
|
||||||
AND Action = 'X';
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
UPDATE AD_Menu_Trl mt
|
|
||||||
SET Name = (SELECT ft.Name FROM AD_Form_Trl ft, AD_Menu m
|
|
||||||
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Form_ID=ft.AD_Form_ID
|
|
||||||
AND mt.AD_Language=ft.AD_Language),
|
|
||||||
Description = (SELECT ft.Description FROM AD_Form_Trl ft, AD_Menu m
|
|
||||||
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Form_ID=ft.AD_Form_ID
|
|
||||||
AND mt.AD_Language=ft.AD_Language),
|
|
||||||
IsTranslated = (SELECT ft.IsTranslated FROM AD_Form_Trl ft, AD_Menu m
|
|
||||||
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Form_ID=ft.AD_Form_ID
|
|
||||||
AND mt.AD_Language=ft.AD_Language)
|
|
||||||
WHERE EXISTS (SELECT * FROM AD_Form_Trl ft, AD_Menu m
|
|
||||||
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Form_ID=ft.AD_Form_ID
|
|
||||||
AND mt.AD_Language=ft.AD_Language
|
|
||||||
AND m.AD_Form_ID IS NOT NULL
|
|
||||||
AND Action = 'X');
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' trl rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
-- Sync Names - Workflow
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronizing Menu with Workflows');
|
|
||||||
UPDATE AD_Menu m
|
|
||||||
SET Name = (SELECT p.Name FROM AD_Workflow p WHERE m.AD_Workflow_ID=p.AD_Workflow_ID),
|
|
||||||
Description = (SELECT p.Description FROM AD_Workflow p WHERE m.AD_Workflow_ID=p.AD_Workflow_ID)
|
|
||||||
WHERE m.AD_Workflow_ID IS NOT NULL
|
|
||||||
AND m.Action = 'F';
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
UPDATE AD_Menu_Trl mt
|
|
||||||
SET Name = (SELECT pt.Name FROM AD_Workflow_Trl pt, AD_Menu m
|
|
||||||
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Workflow_ID=pt.AD_Workflow_ID
|
|
||||||
AND mt.AD_Language=pt.AD_Language),
|
|
||||||
Description = (SELECT pt.Description FROM AD_Workflow_Trl pt, AD_Menu m
|
|
||||||
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Workflow_ID=pt.AD_Workflow_ID
|
|
||||||
AND mt.AD_Language=pt.AD_Language),
|
|
||||||
IsTranslated = (SELECT pt.IsTranslated FROM AD_Workflow_Trl pt, AD_Menu m
|
|
||||||
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Workflow_ID=pt.AD_Workflow_ID
|
|
||||||
AND mt.AD_Language=pt.AD_Language)
|
|
||||||
WHERE EXISTS (SELECT * FROM AD_Workflow_Trl pt, AD_Menu m
|
|
||||||
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Workflow_ID=pt.AD_Workflow_ID
|
|
||||||
AND mt.AD_Language=pt.AD_Language
|
|
||||||
AND m.AD_Workflow_ID IS NOT NULL
|
|
||||||
AND Action = 'F');
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' trl rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
-- Sync Names = Task
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronizing Menu with Tasks');
|
|
||||||
UPDATE AD_Menu m
|
|
||||||
SET Name = (SELECT Name FROM AD_Task f WHERE m.AD_Task_ID=f.AD_Task_ID),
|
|
||||||
Description = (SELECT Description FROM AD_Task f WHERE m.AD_Task_ID=f.AD_Task_ID)
|
|
||||||
WHERE AD_Task_ID IS NOT NULL
|
|
||||||
AND Action = 'T';
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
UPDATE AD_Menu_Trl mt
|
|
||||||
SET Name = (SELECT ft.Name FROM AD_Task_Trl ft, AD_Menu m
|
|
||||||
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Task_ID=ft.AD_Task_ID
|
|
||||||
AND mt.AD_Language=ft.AD_Language),
|
|
||||||
Description = (SELECT ft.Description FROM AD_Task_Trl ft, AD_Menu m
|
|
||||||
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Task_ID=ft.AD_Task_ID
|
|
||||||
AND mt.AD_Language=ft.AD_Language),
|
|
||||||
IsTranslated = (SELECT ft.IsTranslated FROM AD_Task_Trl ft, AD_Menu m
|
|
||||||
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Task_ID=ft.AD_Task_ID
|
|
||||||
AND mt.AD_Language=ft.AD_Language)
|
|
||||||
WHERE EXISTS (SELECT * FROM AD_Task_Trl ft, AD_Menu m
|
|
||||||
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Task_ID=ft.AD_Task_ID
|
|
||||||
AND mt.AD_Language=ft.AD_Language
|
|
||||||
AND m.AD_Task_ID IS NOT NULL
|
|
||||||
AND Action = 'T');
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' trl rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
-- Column Name + Element
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronizing Column with Element');
|
|
||||||
UPDATE AD_Column c
|
|
||||||
SET (Name,Description,Help) =
|
|
||||||
(SELECT e.Name,e.Description,e.Help
|
|
||||||
FROM AD_Element e WHERE c.AD_Element_ID=e.AD_Element_ID)
|
|
||||||
WHERE EXISTS
|
|
||||||
(SELECT * FROM AD_Element e
|
|
||||||
WHERE c.AD_Element_ID=e.AD_Element_ID
|
|
||||||
AND c.Name<>e.Name);
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
UPDATE AD_Column_Trl ct
|
|
||||||
SET Name = (SELECT e.Name
|
|
||||||
FROM AD_Column c INNER JOIN AD_Element_Trl e ON (c.AD_Element_ID=e.AD_Element_ID)
|
|
||||||
WHERE ct.AD_Column_ID=c.AD_Column_ID AND ct.AD_Language=e.AD_Language)
|
|
||||||
WHERE EXISTS
|
|
||||||
(SELECT * FROM AD_Column c INNER JOIN AD_Element_Trl e ON (c.AD_Element_ID=e.AD_Element_ID)
|
|
||||||
WHERE ct.AD_Column_ID=c.AD_Column_ID AND ct.AD_Language=e.AD_Language
|
|
||||||
AND ct.Name<>e.Name);
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' trl rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
|
|
||||||
-- Table Name + Element
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Synchronizing Table with Element');
|
|
||||||
UPDATE AD_Table t
|
|
||||||
SET (Name,Description) = (SELECT e.Name,e.Description FROM AD_Element e
|
|
||||||
WHERE t.TableName||'_ID'=e.ColumnName)
|
|
||||||
WHERE EXISTS (SELECT * FROM AD_Element e
|
|
||||||
WHERE t.TableName||'_ID'=e.ColumnName
|
|
||||||
AND t.Name<>e.Name);
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
UPDATE AD_Table_Trl tt
|
|
||||||
SET Name = (SELECT e.Name
|
|
||||||
FROM AD_Table t INNER JOIN AD_Element ex ON (t.TableName||'_ID'=ex.ColumnName)
|
|
||||||
INNER JOIN AD_Element_Trl e ON (ex.AD_Element_ID=e.AD_Element_ID)
|
|
||||||
WHERE tt.AD_Table_ID=t.AD_Table_ID AND tt.AD_Language=e.AD_Language)
|
|
||||||
WHERE EXISTS (SELECT *
|
|
||||||
FROM AD_Table t INNER JOIN AD_Element ex ON (t.TableName||'_ID'=ex.ColumnName)
|
|
||||||
INNER JOIN AD_Element_Trl e ON (ex.AD_Element_ID=e.AD_Element_ID)
|
|
||||||
WHERE tt.AD_Table_ID=t.AD_Table_ID AND tt.AD_Language=e.AD_Language
|
|
||||||
AND tt.Name<>e.Name);
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' trl rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
-- Trl Table Name + Element
|
|
||||||
UPDATE AD_Table t
|
|
||||||
SET (Name,Description) = (SELECT e.Name||' Trl', e.Description
|
|
||||||
FROM AD_Element e
|
|
||||||
WHERE SUBSTR(t.TableName,1,LENGTH(t.TableName)-4)||'_ID'=e.ColumnName)
|
|
||||||
WHERE TableName LIKE '%_Trl'
|
|
||||||
AND EXISTS (SELECT * FROM AD_Element e
|
|
||||||
WHERE SUBSTR(t.TableName,1,LENGTH(t.TableName)-4)||'_ID'=e.ColumnName
|
|
||||||
AND t.Name<>e.Name);
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
UPDATE AD_Table_Trl tt
|
|
||||||
SET Name = (SELECT e.Name || ' **'
|
|
||||||
FROM AD_Table t INNER JOIN AD_Element ex ON (SUBSTR(t.TableName,1,LENGTH(t.TableName)-4)||'_ID'=ex.ColumnName)
|
|
||||||
INNER JOIN AD_Element_Trl e ON (ex.AD_Element_ID=e.AD_Element_ID)
|
|
||||||
WHERE tt.AD_Table_ID=t.AD_Table_ID AND tt.AD_Language=e.AD_Language)
|
|
||||||
WHERE EXISTS (SELECT *
|
|
||||||
FROM AD_Table t INNER JOIN AD_Element ex ON (SUBSTR(t.TableName,1,LENGTH(t.TableName)-4)||'_ID'=ex.ColumnName)
|
|
||||||
INNER JOIN AD_Element_Trl e ON (ex.AD_Element_ID=e.AD_Element_ID)
|
|
||||||
WHERE tt.AD_Table_ID=t.AD_Table_ID AND tt.AD_Language=e.AD_Language
|
|
||||||
AND t.TableName LIKE '%_Trl'
|
|
||||||
AND tt.Name<>e.Name);
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' trl rows updated: ' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
/** Remaining tables
|
|
||||||
SELECT Name, TableName FROM AD_Table t WHERE Name=TableName ORDER BY 1
|
|
||||||
**/
|
|
||||||
|
|
||||||
|
|
||||||
<<FINISH_PROCESS>>
|
|
||||||
IF (p_PInstance_ID IS NOT NULL) THEN
|
|
||||||
-- Update AD_PInstance
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Updating PInstance - Finished ' || v_Message);
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Updated = SysDate,
|
|
||||||
IsProcessing = 'N',
|
|
||||||
Result = v_Result, -- 1=success
|
|
||||||
ErrorMsg = v_Message
|
|
||||||
WHERE AD_PInstance_ID=p_PInstance_ID;
|
|
||||||
END IF;
|
|
||||||
COMMIT;
|
|
||||||
RETURN;
|
|
||||||
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
v_ResultStr := v_ResultStr || ': ' || SQLERRM || ' - ' || v_Message;
|
|
||||||
DBMS_OUTPUT.PUT_LINE(v_ResultStr);
|
|
||||||
ROLLBACK;
|
|
||||||
IF (p_PInstance_ID IS NOT NULL) THEN
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Updated = SysDate,
|
|
||||||
IsProcessing = 'N',
|
|
||||||
Result = 0, -- failure
|
|
||||||
ErrorMsg = v_ResultStr
|
|
||||||
WHERE AD_PInstance_ID=p_PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
END IF;
|
|
||||||
RETURN;
|
|
||||||
|
|
||||||
END AD_Synchronize;
|
|
||||||
/
|
|
|
@ -1,173 +0,0 @@
|
||||||
CREATE OR REPLACE PROCEDURE C_Order_DrillDown
|
|
||||||
(
|
|
||||||
PInstance_ID IN NUMBER
|
|
||||||
)
|
|
||||||
/******************************************************************************
|
|
||||||
* ** Adempiere Product ** Copyright (c) 1999-2001 Accorto, Inc. USA
|
|
||||||
* Open Source Software Provided "AS IS" without warranty or liability
|
|
||||||
* When you use any parts (changed or unchanged), add "Powered by Adempiere" to
|
|
||||||
* your product name; See license details http://www.adempiere.org/license.html
|
|
||||||
******************************************************************************
|
|
||||||
* List Orders with their Shipments and Invoices
|
|
||||||
* Spool to T_Spool
|
|
||||||
*/
|
|
||||||
AS
|
|
||||||
ResultStr VARCHAR2(2000);
|
|
||||||
Message VARCHAR2(2000);
|
|
||||||
Record_ID NUMBER;
|
|
||||||
CURSOR Cur_Parameter (PInstance NUMBER) IS
|
|
||||||
SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date
|
|
||||||
FROM AD_PInstance i, AD_PInstance_Para p
|
|
||||||
WHERE i.AD_PInstance_ID=PInstance
|
|
||||||
AND i.AD_PInstance_ID=p.AD_PInstance_ID(+)
|
|
||||||
ORDER BY p.SeqNo;
|
|
||||||
-- Parameter
|
|
||||||
C_Order_ID NUMBER;
|
|
||||||
--
|
|
||||||
CURSOR Cur_Order IS
|
|
||||||
SELECT o.C_Order_ID, d.Name, o.DocumentNo, o.DocStatus, o.DocAction, o.Processed
|
|
||||||
FROM C_Order o, C_DocType d
|
|
||||||
WHERE o.C_Order_ID=C_Order_ID
|
|
||||||
AND o.C_DocType_ID=d.C_DocType_ID
|
|
||||||
ORDER BY o.DocumentNo DESC;
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
-- No locking or Updating
|
|
||||||
|
|
||||||
-- Get Parameters
|
|
||||||
ResultStr := 'ReadingParameters';
|
|
||||||
FOR p IN Cur_Parameter (PInstance_ID) LOOP
|
|
||||||
Record_ID := p.Record_ID;
|
|
||||||
IF (p.ParameterName = 'C_Order_ID') THEN
|
|
||||||
C_Order_ID := p.P_Number;
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' C_Order_ID=' || C_Order_ID);
|
|
||||||
ELSE
|
|
||||||
DBMS_OUTPUT.PUT_LINE('*** Unknown Parameter=' || p.ParameterName);
|
|
||||||
END IF;
|
|
||||||
END LOOP; -- Get Parameter
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' Record_ID=' || Record_ID);
|
|
||||||
|
|
||||||
IF (C_Order_ID IS NULL) THEN
|
|
||||||
C_Order_ID := Record_ID;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Should be nothing there
|
|
||||||
DELETE T_Spool
|
|
||||||
WHERE AD_PInstance_ID=PInstance_ID;
|
|
||||||
|
|
||||||
-- Order Info
|
|
||||||
FOR o IN Cur_Order LOOP
|
|
||||||
|
|
||||||
INSERT INTO T_Spool (AD_PInstance_ID, SeqNo, MsgText) VALUES (PInstance_ID, T_Spool_Seq.NextVal,
|
|
||||||
o.Name || ' ' || o.DocumentNo || ': @DocStatus@=' || o.DocStatus
|
|
||||||
|| ', @DocAction@=' || o.DocAction || ', @Processed@=' || o.Processed);
|
|
||||||
|
|
||||||
-- Order Lines
|
|
||||||
DECLARE
|
|
||||||
CURSOR Cur_OrderLine IS
|
|
||||||
SELECT *
|
|
||||||
FROM C_OrderLine
|
|
||||||
WHERE C_Order_ID=o.C_Order_ID
|
|
||||||
ORDER BY Line;
|
|
||||||
BEGIN
|
|
||||||
FOR ol IN Cur_OrderLine LOOP
|
|
||||||
INSERT INTO T_Spool (AD_PInstance_ID, SeqNo, MsgText) VALUES (PInstance_ID, T_Spool_Seq.NextVal,
|
|
||||||
' @QtyOrdered@=' || ol.QtyOrdered || ', @QtyReserved@=' || ol.QtyReserved
|
|
||||||
|| ', @QtyDelivered@=' || ol.QtyDelivered || ', @QtyInvoiced@=' || ol.QtyInvoiced
|
|
||||||
|| ' - Wh=' || ol.M_Warehouse_ID
|
|
||||||
|| ', Prd=' || ol.M_Product_ID);
|
|
||||||
END LOOP;
|
|
||||||
END;
|
|
||||||
|
|
||||||
-- Shipment
|
|
||||||
DECLARE
|
|
||||||
CURSOR Cur_InOut IS
|
|
||||||
SELECT s.M_InOut_ID, d.Name, s.DocumentNo, s.DocStatus, s.Processed, s.M_Warehouse_ID
|
|
||||||
FROM M_InOut s, C_DocType d
|
|
||||||
WHERE s.C_Order_ID = o.C_Order_ID
|
|
||||||
AND s.C_DocType_ID=d.C_DocType_ID;
|
|
||||||
BEGIN
|
|
||||||
FOR s IN Cur_InOut LOOP
|
|
||||||
INSERT INTO T_Spool (AD_PInstance_ID, SeqNo, MsgText) VALUES (PInstance_ID, T_Spool_Seq.NextVal,
|
|
||||||
'> ' || s.Name || ' ' || s.DocumentNo || ': @DocStatus@=' || s.DocStatus
|
|
||||||
|| ', @Processed@=' || s.Processed || ', Wh=' || s.M_Warehouse_ID);
|
|
||||||
|
|
||||||
-- Shipment Lines
|
|
||||||
DECLARE
|
|
||||||
CURSOR Cur_InOutLine IS
|
|
||||||
SELECT *
|
|
||||||
FROM M_InOutLine
|
|
||||||
WHERE M_InOut_ID=s.M_InOut_ID
|
|
||||||
ORDER BY Line;
|
|
||||||
BEGIN
|
|
||||||
FOR sl IN Cur_InOutLine LOOP
|
|
||||||
INSERT INTO T_Spool (AD_PInstance_ID, SeqNo, MsgText) VALUES (PInstance_ID, T_Spool_Seq.NextVal,
|
|
||||||
' @QtyDelivered@=' || sl.MovementQty || ', Prd=' || sl.M_Product_ID);
|
|
||||||
END LOOP;
|
|
||||||
END; -- Shipment Lines
|
|
||||||
END LOOP; -- Shipments
|
|
||||||
END; -- Shipment
|
|
||||||
|
|
||||||
-- Invoice
|
|
||||||
DECLARE
|
|
||||||
CURSOR Cur_Invoice IS
|
|
||||||
SELECT i.C_Invoice_ID, d.Name, i.DocumentNo, i.DocStatus, i.Processed
|
|
||||||
FROM C_Invoice i, C_DocType d
|
|
||||||
WHERE i.C_DocType_ID=d.C_DocType_ID
|
|
||||||
AND EXISTS (SELECT * FROM C_InvoiceLine l, C_OrderLine ol
|
|
||||||
WHERE i.C_Invoice_ID = l.C_Invoice_ID
|
|
||||||
AND l.C_OrderLine_ID = ol.C_OrderLine_ID
|
|
||||||
AND ol.C_Order_ID=o.C_Order_ID);
|
|
||||||
BEGIN
|
|
||||||
FOR i IN Cur_Invoice LOOP
|
|
||||||
|
|
||||||
INSERT INTO T_Spool (AD_PInstance_ID, SeqNo, MsgText) VALUES (PInstance_ID, T_Spool_Seq.NextVal,
|
|
||||||
'> ' || i.Name || ' ' || i.DocumentNo || ': @DocStatus@=' || i.DocStatus
|
|
||||||
|| ', @Processed@=' || i.Processed);
|
|
||||||
|
|
||||||
-- Invoice Lines
|
|
||||||
DECLARE
|
|
||||||
CURSOR Cur_InvoiceLine IS
|
|
||||||
SELECT *
|
|
||||||
FROM C_InvoiceLine
|
|
||||||
WHERE C_Invoice_ID=i.C_Invoice_ID
|
|
||||||
ORDER BY Line;
|
|
||||||
BEGIN
|
|
||||||
FOR il IN Cur_InvoiceLine LOOP
|
|
||||||
INSERT INTO T_Spool (AD_PInstance_ID, SeqNo, MsgText) VALUES (PInstance_ID, T_Spool_Seq.NextVal,
|
|
||||||
' @QtyInvoiced@=' || il.QtyInvoiced || ', Prd=' || il.M_Product_ID);
|
|
||||||
END LOOP;
|
|
||||||
END; -- Invoice Lines
|
|
||||||
END LOOP; -- Invoices
|
|
||||||
END; -- Invoice
|
|
||||||
|
|
||||||
END LOOP; -- Order
|
|
||||||
|
|
||||||
|
|
||||||
<<FINISH_PROCESS>>
|
|
||||||
-- Update AD_PInstance
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Updating PInstance - Finished ' || Message);
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Updated = SysDate,
|
|
||||||
IsProcessing = 'N',
|
|
||||||
Result = 1, -- success
|
|
||||||
ErrorMsg = Message
|
|
||||||
WHERE AD_PInstance_ID=PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
RETURN;
|
|
||||||
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
ResultStr := ResultStr || ': ' || SQLERRM || ' - ' || Message;
|
|
||||||
DBMS_OUTPUT.PUT_LINE(ResultStr);
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Updated = SysDate,
|
|
||||||
IsProcessing = 'N',
|
|
||||||
Result = 0, -- failure
|
|
||||||
ErrorMsg = ResultStr
|
|
||||||
WHERE AD_PInstance_ID=PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
RETURN;
|
|
||||||
|
|
||||||
END C_Order_DrillDown;
|
|
||||||
/
|
|
|
@ -1,56 +0,0 @@
|
||||||
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'C_ProcessCreate')
|
|
||||||
BEGIN
|
|
||||||
PRINT '<<< DROPPING PROCEDURE C_ProcessCreate >>>'
|
|
||||||
DROP Procedure C_ProcessCreate
|
|
||||||
END
|
|
||||||
go
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
CREATE Procedure C_ProcessCreate
|
|
||||||
(
|
|
||||||
@AD_Table_ID Identifier,
|
|
||||||
@Record_ID Identifier,
|
|
||||||
@AD_IProcess_ID Identifier OUTPUT
|
|
||||||
)
|
|
||||||
--WITH ENCRYPTION
|
|
||||||
AS
|
|
||||||
/******************************************************************************
|
|
||||||
* Author: Jorg Janke (c) ClassApps 1999
|
|
||||||
* Version: $Header: /cvs/adempiere/db/database/Procedures/C_ProcessCreate.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Create process for background execution
|
|
||||||
*
|
|
||||||
* Return values:
|
|
||||||
* Int_Process_ID
|
|
||||||
*
|
|
||||||
* Called by:
|
|
||||||
*
|
|
||||||
******************************************************************************/
|
|
||||||
BEGIN
|
|
||||||
Set NoCount ON
|
|
||||||
BEGIN TRANSACTION
|
|
||||||
|
|
||||||
SELECT @AD_IProcess_ID = ISNULL(MAX(AD_IProcess_ID), 0)+1
|
|
||||||
FROM AD_IProcess
|
|
||||||
---------------------------------
|
|
||||||
INSERT INTO AD_IProcess
|
|
||||||
(AD_IProcess_ID, AD_Table_ID, Record_ID, IsProcessing, Updated)
|
|
||||||
VALUES
|
|
||||||
(@AD_IProcess_ID, @AD_Table_ID, @Record_ID, 'N', null)
|
|
||||||
|
|
||||||
IF (@@ERROR <> 0)
|
|
||||||
BEGIN
|
|
||||||
RAISERROR 60001 'Int_Process insert error'
|
|
||||||
ROLLBACK TRAN
|
|
||||||
RETURN(1)
|
|
||||||
END
|
|
||||||
|
|
||||||
COMMIT TRANSACTION
|
|
||||||
END -- C_ProcessCreate
|
|
||||||
go
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
IF OBJECT_ID('C_ProcessCreate') IS NOT NULL
|
|
||||||
PRINT '<<< CREATED PROCEDURE C_ProcessCreate >>>'
|
|
||||||
ELSE
|
|
||||||
PRINT '<<< FAILED CREATING PROCEDURE C_ProcessCreate >>>'
|
|
||||||
go
|
|
|
@ -1,21 +0,0 @@
|
||||||
CREATE OR REPLACE PROCEDURE Cleanup
|
|
||||||
/******************************************************************************
|
|
||||||
* ** Adempiere Product ** Copyright (c) 1999-2001 Accorto, Inc. USA
|
|
||||||
* Open Source Software Provided "AS IS" without warranty or liability
|
|
||||||
* When you use any parts (changed or unchanged), add "Powered by Adempiere" to
|
|
||||||
* your product name; See license details http://www.adempiere.org/license.html
|
|
||||||
******************************************************************************
|
|
||||||
* Cleanup old temporary data
|
|
||||||
*/
|
|
||||||
AS
|
|
||||||
BEGIN
|
|
||||||
-- Processes
|
|
||||||
DELETE FROM AD_PInstance;
|
|
||||||
-- Search Info
|
|
||||||
DELETE FROM AD_Find;
|
|
||||||
-- Errors older than 1 week
|
|
||||||
DELETE AD_ERROR WHERE Created < SysDate-7;
|
|
||||||
--
|
|
||||||
COMMIT;
|
|
||||||
END Cleanup;
|
|
||||||
/
|
|
|
@ -1,45 +0,0 @@
|
||||||
CREATE OR REPLACE PROCEDURE DBA_AfterImport
|
|
||||||
AS
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: DBA_AfterImport.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
* $Source: /cvs/adempiere/db/database/Procedures/DBA_AfterImport.sql,v $
|
|
||||||
***
|
|
||||||
* Title: Run after Import
|
|
||||||
* Description:
|
|
||||||
* - Set Java Permissions
|
|
||||||
* - Recompile
|
|
||||||
* - Compute Statistics
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
-- Statistics
|
|
||||||
CURSOR Cur_Stat IS
|
|
||||||
SELECT Table_Name, Blocks
|
|
||||||
FROM USER_TABLES
|
|
||||||
WHERE DURATION IS NULL -- No temporary tables
|
|
||||||
AND Table_Name NOT LIKE '%$%'
|
|
||||||
AND (LAST_ANALYZED IS NULL OR LAST_ANALYZED < SysDate-7);
|
|
||||||
--
|
|
||||||
v_Cmd VARCHAR2(256);
|
|
||||||
v_NoC NUMBER := 0;
|
|
||||||
--
|
|
||||||
BEGIN
|
|
||||||
-- Recompile
|
|
||||||
DBA_Recompile(NULL);
|
|
||||||
|
|
||||||
-- Statistics
|
|
||||||
FOR s IN Cur_Stat LOOP
|
|
||||||
v_Cmd := 'ANALYZE TABLE ' || s.Table_Name || ' COMPUTE STATISTICS';
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE (v_Cmd);
|
|
||||||
v_NoC := v_NoC + 1;
|
|
||||||
EXECUTE IMMEDIATE v_Cmd;
|
|
||||||
END LOOP;
|
|
||||||
DBMS_OUTPUT.PUT_LINE ('Statistics computed: ' || v_NoC);
|
|
||||||
--
|
|
||||||
END DBA_AfterImport;
|
|
||||||
/
|
|
|
@ -1,117 +0,0 @@
|
||||||
CREATE OR REPLACE PROCEDURE DBA_Cleanup
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: DBA_Cleanup.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Cleanup old temporary data
|
|
||||||
* Description:
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
BEGIN
|
|
||||||
DBMS_OUTPUT.PUT_LINE('DBA_Cleanup');
|
|
||||||
-- Clean up data
|
|
||||||
/**
|
|
||||||
-- C_Invoice_CheckPaid();
|
|
||||||
UPDATE C_Payment_v
|
|
||||||
SET IsAllocated=CASE WHEN paymentAllocated(C_Payment_ID, C_Currency_ID)=PayAmt THEN 'Y' ELSE 'N' END
|
|
||||||
WHERE IsAllocated='N';
|
|
||||||
UPDATE C_Invoice_v1
|
|
||||||
SET IsPaid = CASE WHEN invoicePaid(C_Invoice_ID,C_Currency_ID,MultiplierAP)=GrandTotal THEN 'Y' ELSE 'N' END
|
|
||||||
WHERE IsPaid='N';
|
|
||||||
**/
|
|
||||||
|
|
||||||
-- Temporary Tables
|
|
||||||
DELETE FROM T_Aging;
|
|
||||||
IF (SQL%ROWCOUNT <> 0) THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' T_Aging=' || SQL%ROWCOUNT);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
DELETE FROM T_DistributionRunDetail;
|
|
||||||
IF (SQL%ROWCOUNT <> 0) THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' T_DistributionRunDetail=' || SQL%ROWCOUNT);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
DELETE FROM T_InventoryValue;
|
|
||||||
IF (SQL%ROWCOUNT <> 0) THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' T_InventoryValue=' || SQL%ROWCOUNT);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
DELETE FROM T_Replenish;
|
|
||||||
IF (SQL%ROWCOUNT <> 0) THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' T_Replenish=' || SQL%ROWCOUNT);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
DELETE FROM T_Report;
|
|
||||||
IF (SQL%ROWCOUNT <> 0) THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' T_Report=' || SQL%ROWCOUNT);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
DELETE FROM T_ReportStatement;
|
|
||||||
IF (SQL%ROWCOUNT <> 0) THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' T_ReportStatement=' || SQL%ROWCOUNT);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
DELETE FROM T_TrialBalance;
|
|
||||||
IF (SQL%ROWCOUNT <> 0) THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' T_TrialBalance=' || SQL%ROWCOUNT);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
DELETE FROM T_Selection;
|
|
||||||
IF (SQL%ROWCOUNT <> 0) THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' T_Selection=' || SQL%ROWCOUNT);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
DELETE FROM T_Selection2;
|
|
||||||
IF (SQL%ROWCOUNT <> 0) THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' T_Selection2=' || SQL%ROWCOUNT);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
DELETE FROM T_Spool;
|
|
||||||
IF (SQL%ROWCOUNT <> 0) THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' T_Spool=' || SQL%ROWCOUNT);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Search Info
|
|
||||||
DELETE FROM AD_Find;
|
|
||||||
IF (SQL%ROWCOUNT <> 0) THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' AD_Find=' || SQL%ROWCOUNT);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Processes older than a week
|
|
||||||
DELETE FROM AD_PInstance WHERE Created < SysDate-7;
|
|
||||||
IF (SQL%ROWCOUNT <> 0) THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' Old AD_PInstance=' || SQL%ROWCOUNT);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
/** Old Session (1 Week)
|
|
||||||
DELETE FROM AD_ChangeLog WHERE Created < SysDate-7;
|
|
||||||
IF (SQL%ROWCOUNT <> 0) THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' Old AD_ChangeLock=' || SQL%ROWCOUNT);
|
|
||||||
END IF;
|
|
||||||
DELETE FROM AD_Session WHERE Created < SysDate-7;
|
|
||||||
IF (SQL%ROWCOUNT <> 0) THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' Old AD_Session=' || SQL%ROWCOUNT);
|
|
||||||
END IF;
|
|
||||||
/** */
|
|
||||||
|
|
||||||
-- Errors older than 1 week
|
|
||||||
DELETE FROM AD_Error WHERE Created < SysDate-7;
|
|
||||||
IF (SQL%ROWCOUNT <> 0) THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' Old AD_Error=' || SQL%ROWCOUNT);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Acknowledged Notes older than a day
|
|
||||||
DELETE FROM AD_Note WHERE Processed='Y' AND Updated < SysDate-1;
|
|
||||||
IF (SQL%ROWCOUNT <> 0) THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' Processed AD_Note=' || SQL%ROWCOUNT);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
--
|
|
||||||
COMMIT;
|
|
||||||
END DBA_Cleanup;
|
|
||||||
/
|
|
|
@ -1,148 +0,0 @@
|
||||||
CREATE OR REPLACE PROCEDURE DBA_Recompile
|
|
||||||
(
|
|
||||||
p_PInstance_ID IN NUMBER -- DEFAULT NULL
|
|
||||||
)
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: DBA_Recompile.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Recompile all User_Objects
|
|
||||||
* Description:
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
-- Logistice
|
|
||||||
v_Message VARCHAR2(2000) := ' ';
|
|
||||||
v_Result NUMBER := 1; -- 0=failure
|
|
||||||
--
|
|
||||||
v_Buffer VARCHAR2(2000);
|
|
||||||
v_Line VARCHAR(100);
|
|
||||||
v_PrintInfo CHAR(1) := 'N'; -- Diagnostic
|
|
||||||
--
|
|
||||||
CURSOR Cur_Invalids IS
|
|
||||||
SELECT object_id, object_name, object_type
|
|
||||||
FROM user_objects
|
|
||||||
WHERE status <> 'VALID'
|
|
||||||
AND object_type IN ('VIEW', 'PACKAGE', 'PACKAGE BODY', 'FUNCTION',
|
|
||||||
'PROCEDURE', 'TRIGGER', 'JAVA CLASS')
|
|
||||||
ORDER BY object_type, object_name;
|
|
||||||
|
|
||||||
CURSOR Cur_Valids (p_id NUMBER) IS
|
|
||||||
SELECT 'FOUND'
|
|
||||||
FROM user_objects
|
|
||||||
WHERE status = 'VALID'
|
|
||||||
AND object_id = p_id;
|
|
||||||
|
|
||||||
-- failed compile
|
|
||||||
TYPE invalid_tab IS TABLE OF Cur_Invalids%ROWTYPE INDEX BY BINARY_INTEGER;
|
|
||||||
invalid_tab_rec invalid_tab;
|
|
||||||
|
|
||||||
count_compiled PLS_INTEGER;
|
|
||||||
valid_text VARCHAR2(5);
|
|
||||||
exec_cursor PLS_INTEGER := DBMS_SQL.OPEN_CURSOR;
|
|
||||||
sql_statement VARCHAR2(200);
|
|
||||||
count_object PLS_INTEGER := 0;
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
LOOP
|
|
||||||
count_compiled := 0;
|
|
||||||
FOR ci IN Cur_Invalids LOOP
|
|
||||||
-- not unsuccessfuly compiled yet
|
|
||||||
IF NOT invalid_tab_rec.EXISTS(ci.object_id) THEN
|
|
||||||
IF (ci.object_type = 'JAVA CLASS') THEN
|
|
||||||
sql_statement := 'ALTER JAVA CLASS "' || ci.object_name || '" RESOLVE';
|
|
||||||
ELSIF (ci.object_type = 'PACKAGE BODY') THEN
|
|
||||||
sql_statement := 'ALTER PACKAGE ' || ci.object_name || ' COMPILE BODY';
|
|
||||||
ELSE
|
|
||||||
sql_statement := 'ALTER ' || ci.object_type || ' ' || ci.object_name || ' COMPILE';
|
|
||||||
END IF;
|
|
||||||
-- compile
|
|
||||||
BEGIN
|
|
||||||
count_object := count_object + 1;
|
|
||||||
DBMS_SQL.PARSE(exec_cursor, sql_statement, DBMS_SQL.NATIVE);
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
NULL;
|
|
||||||
END;
|
|
||||||
--
|
|
||||||
OPEN Cur_Valids (ci.object_ID);
|
|
||||||
FETCH Cur_Valids INTO valid_text;
|
|
||||||
IF Cur_Valids%ROWCOUNT > 0 THEN
|
|
||||||
IF (v_PrintInfo = 'Y') THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE('OK: ' || ci.object_type || ' ' || ci.object_name);
|
|
||||||
END IF;
|
|
||||||
count_compiled := count_compiled + 1;
|
|
||||||
CLOSE Cur_Valids;
|
|
||||||
EXIT;
|
|
||||||
ELSE
|
|
||||||
IF (LENGTH(v_Message) < 1950) THEN
|
|
||||||
v_Message := v_Message || ci.object_name || ' ';
|
|
||||||
END IF;
|
|
||||||
IF (v_PrintInfo = 'Y') THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Error: ' || ci.object_type || ' ' || ci.object_name);
|
|
||||||
END IF;
|
|
||||||
--
|
|
||||||
invalid_tab_rec(ci.object_id).object_name := ci.object_name;
|
|
||||||
invalid_tab_rec(ci.object_id).object_type := ci.object_type;
|
|
||||||
CLOSE Cur_Valids;
|
|
||||||
END IF;
|
|
||||||
END IF; -- not unsuccessfuly compiled yet
|
|
||||||
END LOOP; -- Cur_Invalids
|
|
||||||
-- any other to be compiled
|
|
||||||
IF count_compiled = 0 THEN
|
|
||||||
EXIT;
|
|
||||||
END IF;
|
|
||||||
END LOOP; -- outer loop
|
|
||||||
|
|
||||||
DBMS_SQL.CLOSE_CURSOR(exec_cursor);
|
|
||||||
--
|
|
||||||
-- Print Message
|
|
||||||
IF (LENGTH(v_Message) = 1) THEN
|
|
||||||
v_Message := 'All valid';
|
|
||||||
DBMS_OUTPUT.PUT_LINE(v_Message);
|
|
||||||
ELSIF (LENGTH(v_Message) > 80) THEN
|
|
||||||
v_Buffer := v_Message;
|
|
||||||
DBMS_OUTPUT.PUT_LINE('>');
|
|
||||||
WHILE (LENGTH(v_Buffer) > 0) LOOP
|
|
||||||
v_Line := SUBSTR(v_Buffer, 1, 80);
|
|
||||||
DBMS_OUTPUT.PUT_LINE(v_Line);
|
|
||||||
v_Buffer := SUBSTR(v_Buffer, 81);
|
|
||||||
END LOOP;
|
|
||||||
DBMS_OUTPUT.PUT_LINE('<');
|
|
||||||
v_Result := 0;
|
|
||||||
DBMS_OUTPUT.PUT_LINE('ERROR');
|
|
||||||
ELSE
|
|
||||||
DBMS_OUTPUT.PUT_LINE('>' || v_Message || '<');
|
|
||||||
v_Result := 0;
|
|
||||||
DBMS_OUTPUT.PUT_LINE('ERROR');
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
<<FINISH_PROCESS>>
|
|
||||||
IF (p_PInstance_ID IS NOT NULL) THEN
|
|
||||||
-- Update AD_PInstance
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Updated = SysDate,
|
|
||||||
IsProcessing = 'N',
|
|
||||||
Result = v_Result, -- 1=success
|
|
||||||
ErrorMsg = v_Message
|
|
||||||
WHERE AD_PInstance_ID=p_PInstance_ID;
|
|
||||||
END IF;
|
|
||||||
COMMIT;
|
|
||||||
RETURN;
|
|
||||||
|
|
||||||
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE(SQLERRM);
|
|
||||||
IF DBMS_SQL.IS_OPEN(exec_cursor) THEN
|
|
||||||
DBMS_SQL.CLOSE_CURSOR(exec_cursor);
|
|
||||||
END IF;
|
|
||||||
IF Cur_Valids%ISOPEN THEN
|
|
||||||
CLOSE Cur_Valids;
|
|
||||||
END IF;
|
|
||||||
END DBA_Recompile;
|
|
||||||
/
|
|
|
@ -1,116 +0,0 @@
|
||||||
CREATE OR REPLACE PROCEDURE Fact_Acct_Balance_Update
|
|
||||||
(
|
|
||||||
p_DeleteFirst IN VARCHAR2 DEFAULT 'N'
|
|
||||||
)
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2003 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: Fact_Acct_Balance_Update.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Update ALL Balances
|
|
||||||
* Description:
|
|
||||||
* - Recreates all Balances
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
BEGIN
|
|
||||||
|
|
||||||
IF (p_DeleteFirst = 'Y') THEN
|
|
||||||
DELETE Fact_Acct_Balance;
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' Deletes=' || SQL%ROWCOUNT);
|
|
||||||
ELSE
|
|
||||||
/** Update **/
|
|
||||||
UPDATE Fact_Acct_Balance ab
|
|
||||||
SET (AmtAcctDr, AmtAcctCr, Qty) =
|
|
||||||
(SELECT COALESCE(SUM(AmtAcctDr),0), COALESCE(SUM(AmtAcctCr),0), COALESCE(SUM(Qty),0)
|
|
||||||
FROM Fact_Acct a
|
|
||||||
WHERE a.AD_Client_ID=ab.AD_Client_ID AND a.AD_Org_ID=ab.AD_Org_ID
|
|
||||||
AND a.C_AcctSchema_ID=ab.C_AcctSchema_ID AND TRUNC(a.DateAcct)=TRUNC(ab.DateAcct)
|
|
||||||
AND a.Account_ID=ab.Account_ID AND a.PostingType=ab.PostingType
|
|
||||||
AND COALESCE(a.M_Product_ID,0)=COALESCE(ab.M_Product_ID,0) AND COALESCE(a.C_BPartner_ID,0)=COALESCE(ab.C_BPartner_ID,0)
|
|
||||||
AND COALESCE(a.C_Project_ID,0)=COALESCE(ab.C_Project_ID,0) AND COALESCE(a.AD_OrgTrx_ID,0)=COALESCE(ab.AD_OrgTrx_ID,0)
|
|
||||||
AND COALESCE(a.C_SalesRegion_ID,0)=COALESCE(ab.C_SalesRegion_ID,0) AND COALESCE(a.C_Activity_ID,0)=COALESCE(ab.C_Activity_ID,0)
|
|
||||||
AND COALESCE(a.C_Campaign_ID,0)=COALESCE(ab.C_Campaign_ID,0) AND COALESCE(a.C_LocTo_ID,0)=COALESCE(ab.C_LocTo_ID,0) AND COALESCE(a.C_LocFrom_ID,0)=COALESCE(ab.C_LocFrom_ID,0)
|
|
||||||
AND COALESCE(a.User1_ID,0)=COALESCE(ab.User1_ID,0) AND COALESCE(a.User2_ID,0)=COALESCE(ab.User2_ID,0) AND COALESCE(a.GL_Budget_ID,0)=COALESCE(ab.GL_Budget_ID,0)
|
|
||||||
GROUP BY AD_Client_ID,AD_Org_ID,
|
|
||||||
C_AcctSchema_ID, TRUNC(DateAcct),
|
|
||||||
Account_ID, PostingType,
|
|
||||||
M_Product_ID, C_BPartner_ID,
|
|
||||||
C_Project_ID, AD_OrgTrx_ID,
|
|
||||||
C_SalesRegion_ID, C_Activity_ID,
|
|
||||||
C_Campaign_ID, C_LocTo_ID, C_LocFrom_ID,
|
|
||||||
User1_ID, User2_ID, GL_Budget_ID)
|
|
||||||
WHERE EXISTS
|
|
||||||
(SELECT *
|
|
||||||
FROM Fact_Acct a
|
|
||||||
WHERE a.AD_Client_ID=ab.AD_Client_ID AND a.AD_Org_ID=ab.AD_Org_ID
|
|
||||||
AND a.C_AcctSchema_ID=ab.C_AcctSchema_ID AND TRUNC(a.DateAcct)=TRUNC(ab.DateAcct)
|
|
||||||
AND a.Account_ID=ab.Account_ID AND a.PostingType=ab.PostingType
|
|
||||||
AND COALESCE(a.M_Product_ID,0)=COALESCE(ab.M_Product_ID,0) AND COALESCE(a.C_BPartner_ID,0)=COALESCE(ab.C_BPartner_ID,0)
|
|
||||||
AND COALESCE(a.C_Project_ID,0)=COALESCE(ab.C_Project_ID,0) AND COALESCE(a.AD_OrgTrx_ID,0)=COALESCE(ab.AD_OrgTrx_ID,0)
|
|
||||||
AND COALESCE(a.C_SalesRegion_ID,0)=COALESCE(ab.C_SalesRegion_ID,0) AND COALESCE(a.C_Activity_ID,0)=COALESCE(ab.C_Activity_ID,0)
|
|
||||||
AND COALESCE(a.C_Campaign_ID,0)=COALESCE(ab.C_Campaign_ID,0) AND COALESCE(a.C_LocTo_ID,0)=COALESCE(ab.C_LocTo_ID,0) AND COALESCE(a.C_LocFrom_ID,0)=COALESCE(ab.C_LocFrom_ID,0)
|
|
||||||
AND COALESCE(a.User1_ID,0)=COALESCE(ab.User1_ID,0) AND COALESCE(a.User2_ID,0)=COALESCE(ab.User2_ID,0) AND COALESCE(a.GL_Budget_ID,0)=COALESCE(ab.GL_Budget_ID,0)
|
|
||||||
GROUP BY AD_Client_ID,AD_Org_ID,
|
|
||||||
C_AcctSchema_ID, TRUNC(DateAcct),
|
|
||||||
Account_ID, PostingType,
|
|
||||||
M_Product_ID, C_BPartner_ID,
|
|
||||||
C_Project_ID, AD_OrgTrx_ID,
|
|
||||||
C_SalesRegion_ID, C_Activity_ID,
|
|
||||||
C_Campaign_ID, C_LocTo_ID, C_LocFrom_ID,
|
|
||||||
User1_ID, User2_ID, GL_Budget_ID);
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' Updates=' || SQL%ROWCOUNT);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
|
|
||||||
/** Insert **/
|
|
||||||
INSERT INTO Fact_Acct_Balance ab
|
|
||||||
(AD_Client_ID, AD_Org_ID,
|
|
||||||
C_AcctSchema_ID, DateAcct,
|
|
||||||
Account_ID, PostingType,
|
|
||||||
M_Product_ID, C_BPartner_ID,
|
|
||||||
C_Project_ID, AD_OrgTrx_ID,
|
|
||||||
C_SalesRegion_ID,C_Activity_ID,
|
|
||||||
C_Campaign_ID, C_LocTo_ID, C_LocFrom_ID,
|
|
||||||
User1_ID, User2_ID, GL_Budget_ID,
|
|
||||||
AmtAcctDr, AmtAcctCr, Qty)
|
|
||||||
--
|
|
||||||
SELECT AD_Client_ID, AD_Org_ID,
|
|
||||||
C_AcctSchema_ID, TRUNC(DateAcct),
|
|
||||||
Account_ID, PostingType,
|
|
||||||
M_Product_ID, C_BPartner_ID,
|
|
||||||
C_Project_ID, AD_OrgTrx_ID,
|
|
||||||
C_SalesRegion_ID,C_Activity_ID,
|
|
||||||
C_Campaign_ID, C_LocTo_ID, C_LocFrom_ID,
|
|
||||||
User1_ID, User2_ID, GL_Budget_ID,
|
|
||||||
COALESCE(SUM(AmtAcctDr),0), COALESCE(SUM(AmtAcctCr),0), COALESCE(SUM(Qty),0)
|
|
||||||
FROM Fact_Acct a
|
|
||||||
WHERE NOT EXISTS
|
|
||||||
(SELECT *
|
|
||||||
FROM Fact_Acct_Balance x
|
|
||||||
WHERE a.AD_Client_ID=x.AD_Client_ID AND a.AD_Org_ID=x.AD_Org_ID
|
|
||||||
AND a.C_AcctSchema_ID=x.C_AcctSchema_ID AND TRUNC(a.DateAcct)=TRUNC(x.DateAcct)
|
|
||||||
AND a.Account_ID=x.Account_ID AND a.PostingType=x.PostingType
|
|
||||||
AND COALESCE(a.M_Product_ID,0)=COALESCE(x.M_Product_ID,0) AND COALESCE(a.C_BPartner_ID,0)=COALESCE(x.C_BPartner_ID,0)
|
|
||||||
AND COALESCE(a.C_Project_ID,0)=COALESCE(x.C_Project_ID,0) AND COALESCE(a.AD_OrgTrx_ID,0)=COALESCE(x.AD_OrgTrx_ID,0)
|
|
||||||
AND COALESCE(a.C_SalesRegion_ID,0)=COALESCE(x.C_SalesRegion_ID,0) AND COALESCE(a.C_Activity_ID,0)=COALESCE(x.C_Activity_ID,0)
|
|
||||||
AND COALESCE(a.C_Campaign_ID,0)=COALESCE(x.C_Campaign_ID,0) AND COALESCE(a.C_LocTo_ID,0)=COALESCE(x.C_LocTo_ID,0) AND COALESCE(a.C_LocFrom_ID,0)=COALESCE(x.C_LocFrom_ID,0)
|
|
||||||
AND COALESCE(a.User1_ID,0)=COALESCE(x.User1_ID,0) AND COALESCE(a.User2_ID,0)=COALESCE(x.User2_ID,0) AND COALESCE(a.GL_Budget_ID,0)=COALESCE(x.GL_Budget_ID,0) )
|
|
||||||
GROUP BY AD_Client_ID,AD_Org_ID,
|
|
||||||
C_AcctSchema_ID, TRUNC(DateAcct),
|
|
||||||
Account_ID, PostingType,
|
|
||||||
M_Product_ID, C_BPartner_ID,
|
|
||||||
C_Project_ID, AD_OrgTrx_ID,
|
|
||||||
C_SalesRegion_ID, C_Activity_ID,
|
|
||||||
C_Campaign_ID, C_LocTo_ID, C_LocFrom_ID,
|
|
||||||
User1_ID, User2_ID, GL_Budget_ID;
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' Inserts=' || SQL%ROWCOUNT);
|
|
||||||
|
|
||||||
-----------------------
|
|
||||||
COMMIT;
|
|
||||||
|
|
||||||
END Fact_Acct_Balance_Update;
|
|
||||||
/
|
|
|
@ -1,374 +0,0 @@
|
||||||
CREATE OR REPLACE PROCEDURE M_PriceList_Create
|
|
||||||
(
|
|
||||||
PInstance_ID IN NUMBER
|
|
||||||
)
|
|
||||||
AS
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2003 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: M_PriceList_Create.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Create Pricelist
|
|
||||||
* Description:
|
|
||||||
* Create PriceList by copying purchase prices (M_Product_PO)
|
|
||||||
* and applying product category discounts (M_CategoryDiscount)
|
|
||||||
************************************************************************/
|
|
||||||
-- Logistice
|
|
||||||
ResultStr VARCHAR2(2000);
|
|
||||||
Message VARCHAR2(2000) := '';
|
|
||||||
NoRate EXCEPTION;
|
|
||||||
-- Parameter
|
|
||||||
CURSOR Cur_Parameter (PInstance NUMBER) IS
|
|
||||||
SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date
|
|
||||||
FROM AD_PInstance i, AD_PInstance_Para p
|
|
||||||
WHERE i.AD_PInstance_ID=PInstance
|
|
||||||
AND i.AD_PInstance_ID=p.AD_PInstance_ID(+)
|
|
||||||
ORDER BY p.SeqNo;
|
|
||||||
-- Parameter Variables
|
|
||||||
p_PriceList_Version_ID NUMBER;
|
|
||||||
p_DeleteOld CHAR(1) := 'N';
|
|
||||||
--
|
|
||||||
v_Currency_ID NUMBER;
|
|
||||||
v_Client_ID NUMBER;
|
|
||||||
v_Org_ID NUMBER;
|
|
||||||
v_UpdatedBy NUMBER;
|
|
||||||
v_StdPrecision NUMBER;
|
|
||||||
v_DiscountSchema_ID NUMBER;
|
|
||||||
v_PriceList_Version_Base_ID NUMBER;
|
|
||||||
--
|
|
||||||
v_NextNo NUMBER := 0;
|
|
||||||
|
|
||||||
-- Get PL Parameter
|
|
||||||
CURSOR Cur_DiscountLine (DiscountSchema_ID NUMBER) IS
|
|
||||||
SELECT *
|
|
||||||
FROM M_DiscountSchemaLine
|
|
||||||
WHERE M_DiscountSchema_ID=DiscountSchema_ID
|
|
||||||
AND IsActive='Y'
|
|
||||||
ORDER BY SeqNo;
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
-- Update AD_PInstance
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Updating PInstance - Processing');
|
|
||||||
ResultStr := 'PInstanceNotFound';
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Created = SysDate,
|
|
||||||
IsProcessing = 'Y'
|
|
||||||
WHERE AD_PInstance_ID=PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
|
|
||||||
-- Get Parameters
|
|
||||||
ResultStr := 'ReadingParameters';
|
|
||||||
FOR p IN Cur_Parameter (PInstance_ID) LOOP
|
|
||||||
p_PriceList_Version_ID := p.Record_ID;
|
|
||||||
IF (p.ParameterName = 'DeleteOld') THEN
|
|
||||||
p_DeleteOld := p.P_String;
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' DeleteOld=' || p_DeleteOld);
|
|
||||||
ELSE
|
|
||||||
DBMS_OUTPUT.PUT_LINE('*** Unknown Parameter=' || p.ParameterName);
|
|
||||||
END IF;
|
|
||||||
END LOOP; -- Get Parameter
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' PriceList_Version_ID=' || p_PriceList_Version_ID);
|
|
||||||
|
|
||||||
-- Checking Prerequisites
|
|
||||||
-- -- PO Prices must exists
|
|
||||||
ResultStr := 'CorrectingProductPO';
|
|
||||||
DBMS_OUTPUT.PUT_LINE(ResultStr);
|
|
||||||
UPDATE M_Product_PO
|
|
||||||
SET PriceList = 0
|
|
||||||
WHERE PriceList IS NULL;
|
|
||||||
UPDATE M_Product_PO
|
|
||||||
SET PriceLastPO = 0
|
|
||||||
WHERE PriceLastPO IS NULL;
|
|
||||||
UPDATE M_Product_PO
|
|
||||||
SET PricePO = PriceLastPO
|
|
||||||
WHERE (PricePO IS NULL OR PricePO = 0) AND PriceLastPO <> 0;
|
|
||||||
UPDATE M_Product_PO
|
|
||||||
SET PricePO = 0
|
|
||||||
WHERE PricePO IS NULL;
|
|
||||||
-- Set default current vendor
|
|
||||||
UPDATE M_Product_PO p
|
|
||||||
SET IsCurrentVendor = 'Y'
|
|
||||||
WHERE IsCurrentVendor = 'N'
|
|
||||||
AND NOT EXISTS
|
|
||||||
(SELECT pp.M_Product_ID FROM M_Product_PO pp
|
|
||||||
WHERE pp.M_Product_ID=p.M_Product_ID
|
|
||||||
GROUP BY pp.M_Product_ID HAVING COUNT(*) > 1);
|
|
||||||
COMMIT;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Make sure that we have only one active product
|
|
||||||
*/
|
|
||||||
ResultStr := 'CorrectingDuplicates';
|
|
||||||
DBMS_OUTPUT.PUT_LINE(ResultStr);
|
|
||||||
DECLARE
|
|
||||||
-- All duplicate products
|
|
||||||
CURSOR Cur_Duplicates IS
|
|
||||||
SELECT DISTINCT M_Product_ID
|
|
||||||
FROM M_Product_PO po
|
|
||||||
WHERE IsCurrentVendor='Y' AND IsActive='Y'
|
|
||||||
AND EXISTS ( SELECT M_Product_ID FROM M_Product_PO x
|
|
||||||
WHERE x.M_Product_ID=po.M_Product_ID
|
|
||||||
GROUP BY M_Product_ID HAVING COUNT(*) > 1 )
|
|
||||||
ORDER BY 1;
|
|
||||||
-- All vendors of Product - expensive first
|
|
||||||
CURSOR Cur_Vendors (Product_ID NUMBER) IS
|
|
||||||
SELECT M_Product_ID, C_BPartner_ID
|
|
||||||
FROM M_Product_PO
|
|
||||||
WHERE IsCurrentVendor='Y' AND IsActive='Y'
|
|
||||||
AND M_Product_ID=Product_ID
|
|
||||||
ORDER BY PriceList DESC;
|
|
||||||
--
|
|
||||||
Product_ID NUMBER;
|
|
||||||
BPartner_ID NUMBER;
|
|
||||||
BEGIN
|
|
||||||
FOR dupl IN Cur_Duplicates LOOP
|
|
||||||
OPEN Cur_Vendors (dupl.M_Product_ID);
|
|
||||||
FETCH Cur_Vendors INTO Product_ID, BPartner_ID; -- Leave First
|
|
||||||
LOOP
|
|
||||||
FETCH Cur_Vendors INTO Product_ID, BPartner_ID; -- Get Record ID
|
|
||||||
EXIT WHEN Cur_Vendors%NOTFOUND;
|
|
||||||
--
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' Record: ' || Product_ID || ' / ' || BPartner_ID);
|
|
||||||
UPDATE M_Product_PO
|
|
||||||
SET IsCurrentVendor='N'
|
|
||||||
WHERE M_Product_ID=Product_ID AND C_BPartner_ID=BPartner_ID;
|
|
||||||
END LOOP;
|
|
||||||
CLOSE Cur_Vendors;
|
|
||||||
END LOOP;
|
|
||||||
COMMIT;
|
|
||||||
END;
|
|
||||||
|
|
||||||
/** Delete Old Data */
|
|
||||||
ResultStr := 'DeletingOld';
|
|
||||||
IF (p_DeleteOld = 'Y') THEN
|
|
||||||
DELETE M_ProductPrice
|
|
||||||
WHERE M_PriceList_Version_ID = p_PriceList_Version_ID;
|
|
||||||
Message := '@Deleted@=' || SQL%ROWCOUNT || ' - ';
|
|
||||||
DBMS_OUTPUT.PUT_LINE(Message);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Get PriceList Info
|
|
||||||
ResultStr := 'GetPLInfo';
|
|
||||||
DBMS_OUTPUT.PUT_LINE(ResultStr);
|
|
||||||
SELECT p.C_Currency_ID, c.StdPrecision,
|
|
||||||
v.AD_Client_ID, v.AD_Org_ID, v.UpdatedBy,
|
|
||||||
v.M_DiscountSchema_ID, M_PriceList_Version_Base_ID
|
|
||||||
INTO v_Currency_ID, v_StdPrecision,
|
|
||||||
v_Client_ID, v_Org_ID, v_UpdatedBy,
|
|
||||||
v_DiscountSchema_ID, v_PriceList_Version_Base_ID
|
|
||||||
FROM M_PriceList p, M_PriceList_Version v, C_Currency c
|
|
||||||
WHERE p.M_PriceList_ID=v.M_PriceList_ID
|
|
||||||
AND p.C_Currency_ID=c.C_Currency_ID
|
|
||||||
AND v.M_PriceList_Version_ID=p_PriceList_Version_ID;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* For All Discount Lines in Sequence
|
|
||||||
*/
|
|
||||||
FOR dl IN Cur_DiscountLine (v_DiscountSchema_ID) LOOP
|
|
||||||
ResultStr := 'Parameter Seq=' || dl.SeqNo;
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE(ResultStr);
|
|
||||||
|
|
||||||
-- Clear Temporary Table
|
|
||||||
DELETE FROM T_Selection;
|
|
||||||
|
|
||||||
-- -----------------------------------
|
|
||||||
-- Create Selection in temporary table
|
|
||||||
-- -----------------------------------
|
|
||||||
IF (v_PriceList_Version_Base_ID IS NULL) THEN
|
|
||||||
-- Create Selection from M_Product_PO
|
|
||||||
INSERT INTO T_Selection (T_Selection_ID)
|
|
||||||
SELECT DISTINCT po.M_Product_ID
|
|
||||||
FROM M_Product p, M_Product_PO po
|
|
||||||
WHERE p.M_Product_ID=po.M_Product_ID
|
|
||||||
AND (p.AD_Client_ID=v_Client_ID OR p.AD_Client_ID=0)
|
|
||||||
AND p.IsActive='Y' AND po.IsActive='Y' AND po.IsCurrentVendor='Y'
|
|
||||||
-- Optional Restrictions
|
|
||||||
AND (dl.M_Product_Category_ID IS NULL OR p.M_Product_Category_ID=dl.M_Product_Category_ID)
|
|
||||||
AND (dl.C_BPartner_ID IS NULL OR po.C_BPartner_ID=dl.C_BPartner_ID)
|
|
||||||
AND (dl.M_Product_ID IS NULL OR p.M_Product_ID=dl.M_Product_ID);
|
|
||||||
ELSE
|
|
||||||
-- Create Selection from existing PriceList
|
|
||||||
INSERT INTO T_Selection (T_Selection_ID)
|
|
||||||
SELECT DISTINCT p.M_Product_ID
|
|
||||||
FROM M_Product p, M_ProductPrice pp
|
|
||||||
WHERE p.M_Product_ID=pp.M_Product_ID
|
|
||||||
AND pp.M_PriceList_Version_ID=v_PriceList_Version_Base_ID
|
|
||||||
AND p.IsActive='Y' AND pp.IsActive='Y'
|
|
||||||
-- Optional Restrictions
|
|
||||||
AND (dl.M_Product_Category_ID IS NULL OR p.M_Product_Category_ID=dl.M_Product_Category_ID)
|
|
||||||
AND (dl.C_BPartner_ID IS NULL OR EXISTS
|
|
||||||
(SELECT * FROM M_Product_PO po WHERE po.M_Product_ID=p.M_Product_ID AND po.C_BPartner_ID=dl.C_BPartner_ID))
|
|
||||||
AND (dl.M_Product_ID IS NULL OR p.M_Product_ID=dl.M_Product_ID);
|
|
||||||
END IF;
|
|
||||||
Message := Message || '@Selected@=' || SQL%ROWCOUNT;
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE(Message);
|
|
||||||
|
|
||||||
-- Delete Prices in Selection, so that we can insert
|
|
||||||
IF (v_PriceList_Version_Base_ID IS NULL
|
|
||||||
OR v_PriceList_Version_Base_ID <> p_PriceList_Version_ID) THEN
|
|
||||||
ResultStr := ResultStr || ', Delete';
|
|
||||||
DELETE M_ProductPrice pp
|
|
||||||
WHERE pp.M_PriceList_Version_ID = p_PriceList_Version_ID
|
|
||||||
AND EXISTS (SELECT * FROM T_Selection s WHERE pp.M_Product_ID=s.T_Selection_ID);
|
|
||||||
Message := ', @Deleted@=' || SQL%ROWCOUNT;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- --------------------
|
|
||||||
-- Copy (Insert) Prices
|
|
||||||
-- --------------------
|
|
||||||
IF (v_PriceList_Version_Base_ID = p_PriceList_Version_ID) THEN
|
|
||||||
-- We have Prices already
|
|
||||||
NULL;
|
|
||||||
ELSIF (v_PriceList_Version_Base_ID IS NULL) THEN
|
|
||||||
-- Copy and Convert from Product_PO
|
|
||||||
ResultStr := ResultStr || ',Copy_PO';
|
|
||||||
INSERT INTO M_ProductPrice
|
|
||||||
(M_PriceList_Version_ID, M_Product_ID,
|
|
||||||
AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy,
|
|
||||||
PriceList, PriceStd, PriceLimit)
|
|
||||||
SELECT
|
|
||||||
p_PriceList_Version_ID, po.M_Product_ID,
|
|
||||||
v_Client_ID, v_Org_ID, 'Y', SysDate, v_UpdatedBy, SysDate, v_UpdatedBy,
|
|
||||||
-- Price List
|
|
||||||
COALESCE(currencyConvert(po.PriceList,
|
|
||||||
po.C_Currency_ID, v_Currency_ID, dl.ConversionDate, dl.C_ConversionType_ID, v_Client_ID, v_Org_ID),0),
|
|
||||||
-- Price Std
|
|
||||||
COALESCE(currencyConvert(po.PriceList,
|
|
||||||
po.C_Currency_ID, v_Currency_ID, dl.ConversionDate, dl.C_ConversionType_ID, v_Client_ID, v_Org_ID),0),
|
|
||||||
-- Price Limit
|
|
||||||
COALESCE(currencyConvert(po.PricePO,
|
|
||||||
po.C_Currency_ID, v_Currency_ID, dl.ConversionDate, dl.C_ConversionType_ID, v_Client_ID, v_Org_ID),0)
|
|
||||||
FROM M_Product_PO po
|
|
||||||
WHERE EXISTS (SELECT * FROM T_Selection s WHERE po.M_Product_ID=s.T_Selection_ID)
|
|
||||||
AND po.IsCurrentVendor='Y' AND po.IsActive='Y';
|
|
||||||
ELSE
|
|
||||||
-- Copy and Convert from other PriceList_Version
|
|
||||||
ResultStr := ResultStr || ',Copy_PL';
|
|
||||||
INSERT INTO M_ProductPrice
|
|
||||||
(M_PriceList_Version_ID, M_Product_ID,
|
|
||||||
AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy,
|
|
||||||
PriceList, PriceStd, PriceLimit)
|
|
||||||
SELECT
|
|
||||||
p_PriceList_Version_ID, pp.M_Product_ID,
|
|
||||||
v_Client_ID, v_Org_ID, 'Y', SysDate, v_UpdatedBy, SysDate, v_UpdatedBy,
|
|
||||||
-- Price List
|
|
||||||
COALESCE(currencyConvert(pp.PriceList,
|
|
||||||
pl.C_Currency_ID, v_Currency_ID, dl.ConversionDate, dl.C_ConversionType_ID, v_Client_ID, v_Org_ID),0),
|
|
||||||
-- Price Std
|
|
||||||
COALESCE(currencyConvert(pp.PriceStd,
|
|
||||||
pl.C_Currency_ID, v_Currency_ID, dl.ConversionDate, dl.C_ConversionType_ID, v_Client_ID, v_Org_ID),0),
|
|
||||||
-- Price Limit
|
|
||||||
COALESCE(currencyConvert(pp.PriceLimit,
|
|
||||||
pl.C_Currency_ID, v_Currency_ID, dl.ConversionDate, dl.C_ConversionType_ID, v_Client_ID, v_Org_ID),0)
|
|
||||||
FROM M_ProductPrice pp
|
|
||||||
INNER JOIN M_PriceList_Version plv ON (pp.M_PriceList_Version_ID=plv.M_PriceList_Version_ID)
|
|
||||||
INNER JOIN M_PriceList pl ON (plv.M_PriceList_ID=pl.M_PriceList_ID)
|
|
||||||
WHERE pp.M_PriceList_Version_ID=v_PriceList_Version_Base_ID
|
|
||||||
AND EXISTS (SELECT * FROM T_Selection s WHERE pp.M_Product_ID=s.T_Selection_ID)
|
|
||||||
AND pp.IsActive='Y';
|
|
||||||
END IF;
|
|
||||||
Message := Message || ', @Inserted@=' || SQL%ROWCOUNT;
|
|
||||||
|
|
||||||
-- -----------
|
|
||||||
-- Calculation
|
|
||||||
-- -----------
|
|
||||||
ResultStr := ResultStr || ',Calc';
|
|
||||||
UPDATE M_ProductPrice p
|
|
||||||
SET PriceList = (DECODE(dl.List_Base, 'S', PriceStd, 'X', PriceLimit, PriceList)
|
|
||||||
+ dl.List_AddAmt) * (1 - dl.List_Discount/100),
|
|
||||||
PriceStd = (DECODE(dl.Std_Base, 'L', PriceList, 'X', PriceLimit, PriceStd)
|
|
||||||
+ dl.Std_AddAmt) * (1 - dl.Std_Discount/100),
|
|
||||||
PriceLimit = (DECODE(dl.Limit_Base, 'L', PriceList, 'S', PriceStd, PriceLimit)
|
|
||||||
+ dl.Limit_AddAmt) * (1 - dl.Limit_Discount/100)
|
|
||||||
WHERE M_PriceList_Version_ID=p_PriceList_Version_ID
|
|
||||||
AND EXISTS (SELECT * FROM T_Selection s
|
|
||||||
WHERE s.T_Selection_ID=p.M_Product_ID);
|
|
||||||
|
|
||||||
-- --------
|
|
||||||
-- Rounding (AD_Reference_ID=155)
|
|
||||||
-- --------
|
|
||||||
ResultStr := ResultStr || ',Round';
|
|
||||||
UPDATE M_ProductPrice p
|
|
||||||
SET PriceList = DECODE(dl.List_Rounding,
|
|
||||||
'N', PriceList,
|
|
||||||
'0', ROUND(PriceList, 0), -- Even .00
|
|
||||||
'D', ROUND(PriceList, 1), -- Dime .10
|
|
||||||
'T', ROUND(PriceList, -1), -- Ten 10.00
|
|
||||||
'5', ROUND(PriceList*20,0)/20, -- Nickle .05
|
|
||||||
'Q', ROUND(PriceList*4,0)/4, -- Quarter .25
|
|
||||||
ROUND(PriceList, v_StdPrecision)),-- Currency
|
|
||||||
PriceStd = DECODE(dl.Std_Rounding,
|
|
||||||
'N', PriceStd,
|
|
||||||
'0', ROUND(PriceStd, 0), -- Even .00
|
|
||||||
'D', ROUND(PriceStd, 1), -- Dime .10
|
|
||||||
'T', ROUND(PriceStd, -1), -- Ten 10.00
|
|
||||||
'5', ROUND(PriceStd*20,0)/20, -- Nickle .05
|
|
||||||
'Q', ROUND(PriceStd*4,0)/4, -- Quarter .25
|
|
||||||
ROUND(PriceStd, v_StdPrecision)), -- Currency
|
|
||||||
PriceLimit = DECODE(dl.Limit_Rounding,
|
|
||||||
'N', PriceLimit,
|
|
||||||
'0', ROUND(PriceLimit, 0), -- Even .00
|
|
||||||
'D', ROUND(PriceLimit, 1), -- Dime .10
|
|
||||||
'T', ROUND(PriceLimit, -1), -- Ten 10.00
|
|
||||||
'5', ROUND(PriceLimit*20,0)/20, -- Nickle .05
|
|
||||||
'Q', ROUND(PriceLimit*4,0)/4, -- Quarter .25
|
|
||||||
ROUND(PriceLimit, v_StdPrecision))-- Currency
|
|
||||||
WHERE M_PriceList_Version_ID=p_PriceList_Version_ID
|
|
||||||
AND EXISTS (SELECT * FROM T_Selection s
|
|
||||||
WHERE s.T_Selection_ID=p.M_Product_ID);
|
|
||||||
Message := Message || ', @Updated@=' || SQL%ROWCOUNT;
|
|
||||||
|
|
||||||
-- Fixed Price overwrite
|
|
||||||
ResultStr := ResultStr || ',Fix';
|
|
||||||
UPDATE M_ProductPrice p
|
|
||||||
SET PriceList = DECODE(dl.List_Base, 'F', dl.List_Fixed, PriceList),
|
|
||||||
PriceStd = DECODE(dl.Std_Base, 'F', dl.Std_Fixed, PriceStd),
|
|
||||||
PriceLimit = DECODE(dl.Limit_Base, 'F', dl.Limit_Fixed, PriceLimit)
|
|
||||||
WHERE M_PriceList_Version_ID=p_PriceList_Version_ID
|
|
||||||
AND EXISTS (SELECT * FROM T_Selection s
|
|
||||||
WHERE s.T_Selection_ID=p.M_Product_ID);
|
|
||||||
|
|
||||||
-- Log Info
|
|
||||||
INSERT INTO AD_PInstance_Log (AD_PInstance_ID, Log_ID, P_ID, P_NUMBER, P_MSG)
|
|
||||||
VALUES (PInstance_ID, v_NextNo, null, dl.SeqNo, Message);
|
|
||||||
--
|
|
||||||
v_NextNo := v_NextNo + 1;
|
|
||||||
Message := '';
|
|
||||||
END LOOP; -- For all DiscountLines
|
|
||||||
|
|
||||||
-- Delete Temporary Selection
|
|
||||||
DELETE FROM T_Selection;
|
|
||||||
|
|
||||||
|
|
||||||
<<FINISH_PROCESS>>
|
|
||||||
-- Update AD_PInstance
|
|
||||||
DBMS_OUTPUT.PUT_LINE(Message);
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Updating PInstance - Finished');
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Updated = SysDate,
|
|
||||||
IsProcessing = 'N',
|
|
||||||
Result = 1, -- success
|
|
||||||
ErrorMsg = Message
|
|
||||||
WHERE AD_PInstance_ID=PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
RETURN;
|
|
||||||
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
ResultStr := ResultStr || ':' || SQLERRM || ' ' || Message;
|
|
||||||
DBMS_OUTPUT.PUT_LINE(ResultStr);
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Updated = SysDate,
|
|
||||||
IsProcessing = 'N',
|
|
||||||
Result = 0, -- failure
|
|
||||||
ErrorMsg = ResultStr
|
|
||||||
WHERE AD_PInstance_ID=PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
RETURN;
|
|
||||||
|
|
||||||
END M_PriceList_Create;
|
|
||||||
/
|
|
|
@ -1,147 +0,0 @@
|
||||||
CREATE OR REPLACE PROCEDURE M_Product_BOM_Check
|
|
||||||
(
|
|
||||||
PInstance_ID IN NUMBER
|
|
||||||
)
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: M_Product_BOM_Check.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Check BOM Structure (free of cycles)
|
|
||||||
* Description:
|
|
||||||
* Tree cannot contain BOMs which are already referenced
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
-- Logistice
|
|
||||||
ResultStr VARCHAR2(2000);
|
|
||||||
Message VARCHAR2(2000);
|
|
||||||
Record_ID NUMBER;
|
|
||||||
-- Parameter
|
|
||||||
CURSOR Cur_Parameter (PInstance NUMBER) IS
|
|
||||||
SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date
|
|
||||||
FROM AD_PInstance i, AD_PInstance_Para p
|
|
||||||
WHERE i.AD_PInstance_ID=PInstance
|
|
||||||
AND i.AD_PInstance_ID=p.AD_PInstance_ID(+)
|
|
||||||
ORDER BY p.SeqNo;
|
|
||||||
-- Variables
|
|
||||||
Verified CHAR(1) := 'Y';
|
|
||||||
IsBOM CHAR(1);
|
|
||||||
CountNo NUMBER;
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
-- Update AD_PInstance
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Updating PInstance - Processing ' || PInstance_ID);
|
|
||||||
ResultStr := 'PInstanceNotFound';
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Created = SysDate,
|
|
||||||
IsProcessing = 'Y'
|
|
||||||
WHERE AD_PInstance_ID=PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
|
|
||||||
-- Get Parameters
|
|
||||||
ResultStr := 'ReadingParameters';
|
|
||||||
FOR p IN Cur_Parameter (PInstance_ID) LOOP
|
|
||||||
Record_ID := p.Record_ID;
|
|
||||||
END LOOP; -- Get Parameter
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' Record_ID=' || Record_ID);
|
|
||||||
|
|
||||||
-- Record ID is M_Product_ID of product to be tested
|
|
||||||
SELECT IsBOM
|
|
||||||
INTO IsBOM
|
|
||||||
FROM M_Product
|
|
||||||
WHERE M_Product_ID=Record_ID;
|
|
||||||
|
|
||||||
-- No BOM - should not happen, but no problem
|
|
||||||
IF (IsBOM = 'N') THEN
|
|
||||||
GOTO FINISH_PROCESS;
|
|
||||||
-- Did not find product
|
|
||||||
ELSIF (IsBOM <> 'Y') THEN
|
|
||||||
RETURN;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Checking BOM Structure
|
|
||||||
ResultStr := 'InsertingRoot';
|
|
||||||
-- Table to put all BOMs - duplicate will cause exception
|
|
||||||
DELETE FROM T_Selection2 WHERE Query_ID = 0;
|
|
||||||
INSERT INTO T_Selection2 (Query_ID, T_Selection_ID) VALUES (0, Record_ID);
|
|
||||||
-- Table of root modes
|
|
||||||
DELETE FROM T_Selection;
|
|
||||||
INSERT INTO T_Selection (T_Selection_ID) VALUES (Record_ID);
|
|
||||||
|
|
||||||
LOOP
|
|
||||||
-- How many do we have?
|
|
||||||
SELECT COUNT(*)
|
|
||||||
INTO CountNo
|
|
||||||
FROM T_Selection;
|
|
||||||
-- Nothing to do
|
|
||||||
EXIT WHEN (CountNo = 0);
|
|
||||||
|
|
||||||
-- Insert BOM Nodes into "All" table
|
|
||||||
INSERT INTO T_Selection2 (Query_ID, T_Selection_ID)
|
|
||||||
SELECT 0, p.M_Product_ID
|
|
||||||
FROM M_Product p
|
|
||||||
WHERE IsBOM='Y'
|
|
||||||
AND EXISTS (SELECT * FROM M_Product_BOM b WHERE p.M_Product_ID=b.M_ProductBOM_ID
|
|
||||||
AND b.M_Product_ID IN (SELECT T_Selection_ID FROM T_Selection));
|
|
||||||
|
|
||||||
-- Insert BOM Nodes into temporary table
|
|
||||||
DELETE FROM T_Selection2 WHERE Query_ID = 1;
|
|
||||||
INSERT INTO T_Selection2 (Query_ID, T_Selection_ID)
|
|
||||||
SELECT 1, p.M_Product_ID
|
|
||||||
FROM M_Product p
|
|
||||||
WHERE IsBOM='Y'
|
|
||||||
AND EXISTS (SELECT * FROM M_Product_BOM b WHERE p.M_Product_ID=b.M_ProductBOM_ID
|
|
||||||
AND b.M_Product_ID IN (SELECT T_Selection_ID FROM T_Selection));
|
|
||||||
|
|
||||||
-- Copy into root table
|
|
||||||
DELETE FROM T_Selection;
|
|
||||||
INSERT INTO T_Selection (T_Selection_ID)
|
|
||||||
SELECT T_Selection_ID
|
|
||||||
FROM T_Selection2
|
|
||||||
WHERE Query_ID = 1;
|
|
||||||
|
|
||||||
END LOOP;
|
|
||||||
|
|
||||||
<<FINISH_PROCESS>>
|
|
||||||
-- OK
|
|
||||||
Message := 'OK';
|
|
||||||
UPDATE M_Product
|
|
||||||
SET IsVerified = 'Y'
|
|
||||||
WHERE M_Product_ID=Record_ID;
|
|
||||||
|
|
||||||
-- Update AD_PInstance
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Updating PInstance - Finished ' || Message);
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Updated = SysDate,
|
|
||||||
IsProcessing = 'N',
|
|
||||||
Result = 1, -- success
|
|
||||||
ErrorMsg = Message
|
|
||||||
WHERE AD_PInstance_ID=PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
RETURN;
|
|
||||||
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
ResultStr := ResultStr || ': ' || SQLERRM || ' - ' || Message;
|
|
||||||
DBMS_OUTPUT.PUT_LINE(ResultStr);
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Updated = SysDate,
|
|
||||||
IsProcessing = 'N',
|
|
||||||
Result = 0, -- failure
|
|
||||||
ErrorMsg = ResultStr
|
|
||||||
WHERE AD_PInstance_ID=PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
--
|
|
||||||
UPDATE M_Product
|
|
||||||
SET IsVerified = 'N'
|
|
||||||
WHERE M_Product_ID=Record_ID;
|
|
||||||
COMMIT;
|
|
||||||
--
|
|
||||||
RETURN;
|
|
||||||
|
|
||||||
END M_Product_BOM_Check;
|
|
||||||
/
|
|
|
@ -1,37 +0,0 @@
|
||||||
CREATE OR REPLACE PROCEDURE M_Product_Delete
|
|
||||||
(
|
|
||||||
whereClause IN VARCHAR2 DEFAULT NULL
|
|
||||||
)
|
|
||||||
AS
|
|
||||||
/******************************************************************************
|
|
||||||
* ** Adempiere Product ** Copyright (c) 1999-2001 Accorto, Inc. USA
|
|
||||||
* Open Source Software Provided "AS IS" without warranty or liability
|
|
||||||
* When you use any parts (changed or unchanged), add "Powered by Adempiere" to
|
|
||||||
* your product name; See license details http://www.adempiere.org/license.html
|
|
||||||
******************************************************************************
|
|
||||||
* Delete Products
|
|
||||||
*/
|
|
||||||
CURSOR CUR_DEL IS
|
|
||||||
SELECT M_Product_ID, Value, Name
|
|
||||||
FROM M_Product
|
|
||||||
WHERE IsActive='N';
|
|
||||||
--
|
|
||||||
SQL_Base VARCHAR2(255) := 'SELECT M_Product_ID FROM M_Product WHERE ';
|
|
||||||
-- SQL_Where VARCHAR2(255) := 'ValueX IN (SELECT ValueX FROM M_Product GROUP BY ValueX HAVING Count(*) <> 1) AND INSTR(Value,''@'') <> 0';
|
|
||||||
SQL_Statement VARCHAR2(255);
|
|
||||||
BEGIN
|
|
||||||
-- Delete inactive
|
|
||||||
IF (whereClause IS NULL OR LENGTH(whereClause) = 0) THEN
|
|
||||||
For d IN CUR_DEL LOOP
|
|
||||||
BEGIN
|
|
||||||
DBMS_OUTPUT.PUT('Deleting ' || d.Name || ' - ');
|
|
||||||
DELETE M_Product
|
|
||||||
WHERE M_Product_ID=d.M_Product_ID;
|
|
||||||
DBMS_OUTPUT.PUT_LINE('OK');
|
|
||||||
EXCEPTION WHEN OTHERS THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Error ' || SQLERRM);
|
|
||||||
END;
|
|
||||||
END LOOP;
|
|
||||||
END IF;
|
|
||||||
END M_Product_Delete;
|
|
||||||
/
|
|
|
@ -1,298 +0,0 @@
|
||||||
CREATE OR REPLACE PROCEDURE M_Production_Run
|
|
||||||
(
|
|
||||||
PInstance_ID IN NUMBER
|
|
||||||
)
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: M_Production_Run.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Production of BOMs
|
|
||||||
* Description:
|
|
||||||
* 1) Creating ProductionLines when IsCreated = 'N'
|
|
||||||
* 2) Posting the Lines (optionally only when fully stocked)
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
-- Logistice
|
|
||||||
ResultStr VARCHAR2(2000);
|
|
||||||
Message VARCHAR2(2000);
|
|
||||||
Record_ID NUMBER;
|
|
||||||
-- Parameter
|
|
||||||
CURSOR Cur_Parameter (PInstance NUMBER) IS
|
|
||||||
SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date
|
|
||||||
FROM AD_PInstance i, AD_PInstance_Para p
|
|
||||||
WHERE i.AD_PInstance_ID=PInstance
|
|
||||||
AND i.AD_PInstance_ID=p.AD_PInstance_ID(+)
|
|
||||||
ORDER BY p.SeqNo;
|
|
||||||
-- Parameter Variables
|
|
||||||
MustBeStocked CHAR(1);
|
|
||||||
IsCreated CHAR(1);
|
|
||||||
Processed CHAR(1);
|
|
||||||
Client_ID NUMBER;
|
|
||||||
Org_ID NUMBER;
|
|
||||||
--
|
|
||||||
Line NUMBER;
|
|
||||||
NextNo NUMBER;
|
|
||||||
CountNo NUMBER;
|
|
||||||
-- ProductionPlan
|
|
||||||
CURSOR CUR_PP IS
|
|
||||||
SELECT *
|
|
||||||
FROM M_ProductionPlan
|
|
||||||
WHERE M_Production_ID=Record_ID
|
|
||||||
ORDER BY Line, M_Product_ID;
|
|
||||||
-- BOM Lines
|
|
||||||
CURSOR CUR_BOM (Product_ID NUMBER) IS
|
|
||||||
SELECT *
|
|
||||||
FROM M_Product_BOM
|
|
||||||
WHERE M_Product_ID=Product_ID
|
|
||||||
ORDER BY Line;
|
|
||||||
-- ProductionLines which are non-stocked BOMs (need to be resolved)
|
|
||||||
CURSOR CUR_PLineBOM (ProductionPlan_ID NUMBER) IS
|
|
||||||
SELECT pl.M_ProductionLine_ID, pl.Line, pl.M_Product_ID, pl.MovementQty
|
|
||||||
FROM M_ProductionLine pl, M_Product p
|
|
||||||
WHERE pl.M_ProductionPlan_ID=ProductionPlan_ID
|
|
||||||
AND pl.M_Product_ID=p.M_Product_ID
|
|
||||||
AND pl.Line<>100 -- Origin Line
|
|
||||||
AND p.IsBOM='Y' AND p.IsStocked='N';
|
|
||||||
|
|
||||||
-- Posting
|
|
||||||
CURSOR CUR_PL_Post IS
|
|
||||||
SELECT pl.M_ProductionLine_ID, pl.AD_Client_ID, pl.AD_Org_ID, p.MovementDate,
|
|
||||||
pl.M_Product_ID, pl.M_AttributeSetInstance_ID, pl.MovementQty, pl.M_Locator_ID
|
|
||||||
FROM M_Production p, M_ProductionLine pl, M_ProductionPlan pp
|
|
||||||
WHERE p.M_Production_ID=pp.M_Production_ID
|
|
||||||
AND pp.M_ProductionPlan_ID=pl.M_ProductionPlan_ID
|
|
||||||
AND pp.M_Production_ID=Record_ID
|
|
||||||
ORDER BY pp.Line, pl.Line;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
-- Update AD_PInstance
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Updating PInstance - Processing ' || PInstance_ID);
|
|
||||||
ResultStr := 'PInstanceNotFound';
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Created = SysDate,
|
|
||||||
IsProcessing = 'Y'
|
|
||||||
WHERE AD_PInstance_ID=PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
|
|
||||||
-- Get Parameters
|
|
||||||
ResultStr := 'ReadingParameters';
|
|
||||||
FOR p IN Cur_Parameter (PInstance_ID) LOOP
|
|
||||||
Record_ID := p.Record_ID;
|
|
||||||
IF (p.ParameterName = 'MustBeStocked') THEN
|
|
||||||
MustBeStocked := p.P_String;
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' MustBeStocked=' || MustBeStocked);
|
|
||||||
ELSE
|
|
||||||
DBMS_OUTPUT.PUT_LINE('*** Unknown Parameter=' || p.ParameterName);
|
|
||||||
END IF;
|
|
||||||
END LOOP; -- Get Parameter
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' Record_ID=' || Record_ID);
|
|
||||||
|
|
||||||
-- Processing??? Lock ????
|
|
||||||
-- TODO
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Info + Lock
|
|
||||||
*/
|
|
||||||
ResultStr := 'ReadingRecord';
|
|
||||||
SELECT IsCreated, Processed, AD_Client_ID, AD_Org_ID
|
|
||||||
INTO IsCreated, Processed, Client_ID, Org_ID
|
|
||||||
FROM M_Production
|
|
||||||
WHERE M_Production_ID=Record_ID
|
|
||||||
FOR UPDATE;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* No Action
|
|
||||||
*/
|
|
||||||
IF (Processed <> 'N') THEN
|
|
||||||
Message := '@AlreadyPosted@';
|
|
||||||
GOTO FINISH_PROCESS;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* Create Lines
|
|
||||||
*/
|
|
||||||
IF (IsCreated <> 'Y') THEN
|
|
||||||
-- For every Production Plan
|
|
||||||
FOR pp IN CUR_PP LOOP
|
|
||||||
-- Delete prior lines
|
|
||||||
DELETE M_ProductionLine
|
|
||||||
WHERE M_ProductionPlan_ID=pp.M_ProductionPlan_ID;
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('ProductionPlan=' || pp.M_ProductionPlan_ID);
|
|
||||||
-- Create BOM Line
|
|
||||||
ResultStr := 'CreatingLine BOM';
|
|
||||||
Line := 100; -- OriginLine
|
|
||||||
AD_Sequence_Next('M_ProductionLine', pp.AD_Client_ID, NextNo);
|
|
||||||
INSERT INTO M_ProductionLine
|
|
||||||
(M_ProductionLine_ID, M_ProductionPlan_ID, Line,
|
|
||||||
AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,
|
|
||||||
M_Product_ID, MovementQty, M_Locator_ID, Description)
|
|
||||||
VALUES
|
|
||||||
(NextNo, pp.M_ProductionPlan_ID, Line,
|
|
||||||
pp.AD_Client_ID,pp.AD_Org_ID,'Y',SysDate,0,SysDate,0,
|
|
||||||
pp.M_Product_ID, pp.ProductionQty, pp.M_Locator_ID, pp.Description);
|
|
||||||
|
|
||||||
-- Create First Level
|
|
||||||
FOR bom IN CUR_BOM (pp.M_Product_ID) LOOP
|
|
||||||
ResultStr := 'CreatingLine Products';
|
|
||||||
Line := Line + 100;
|
|
||||||
AD_Sequence_Next('M_ProductionLine', pp.AD_Client_ID, NextNo);
|
|
||||||
INSERT INTO M_ProductionLine
|
|
||||||
(M_ProductionLine_ID, M_ProductionPlan_ID, Line,
|
|
||||||
AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,
|
|
||||||
M_Product_ID, MovementQty, M_Locator_ID)
|
|
||||||
VALUES
|
|
||||||
(NextNo, pp.M_ProductionPlan_ID, Line,
|
|
||||||
pp.AD_Client_ID,pp.AD_Org_ID,'Y',SysDate,0,SysDate,0,
|
|
||||||
bom.M_ProductBOM_ID, -pp.ProductionQty*bom.BOMQty, pp.M_Locator_ID);
|
|
||||||
END LOOP;
|
|
||||||
|
|
||||||
-- While we have BOMs
|
|
||||||
LOOP
|
|
||||||
-- Are there non-stored BOMs to list details?
|
|
||||||
ResultStr := 'CreatingLine CheckBOM';
|
|
||||||
SELECT COUNT(*) INTO CountNo
|
|
||||||
FROM M_ProductionLine pl, M_Product p
|
|
||||||
WHERE pl.M_Product_ID=p.M_Product_ID
|
|
||||||
AND pl.M_ProductionPlan_ID=pp.M_ProductionPlan_ID
|
|
||||||
AND pl.Line<>100 -- Origin Line
|
|
||||||
AND p.IsBOM='Y' AND p.IsStocked='N';
|
|
||||||
-- Nothing to do
|
|
||||||
EXIT WHEN (CountNo = 0);
|
|
||||||
--
|
|
||||||
|
|
||||||
-- Resolve BOMs in ProductLine which are not stocked
|
|
||||||
FOR pl IN CUR_PLineBOM (pp.M_ProductionPlan_ID) LOOP
|
|
||||||
ResultStr := 'CreatingLineBOM Resolution';
|
|
||||||
Line := pl.Line;
|
|
||||||
-- Resolve BOM Line in product line
|
|
||||||
FOR bom IN CUR_BOM (pl.M_Product_ID) LOOP
|
|
||||||
ResultStr := 'CreatingLine Products2';
|
|
||||||
Line := Line + 10;
|
|
||||||
AD_Sequence_Next('M_ProductionLine', pp.AD_Client_ID, NextNo);
|
|
||||||
INSERT INTO M_ProductionLine
|
|
||||||
(M_ProductionLine_ID, M_ProductionPlan_ID, Line,
|
|
||||||
AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,
|
|
||||||
M_Product_ID, MovementQty, M_Locator_ID)
|
|
||||||
VALUES
|
|
||||||
(NextNo, pp.M_ProductionPlan_ID, Line,
|
|
||||||
pp.AD_Client_ID,pp.AD_Org_ID,'Y',SysDate,0,SysDate,0,
|
|
||||||
bom.M_ProductBOM_ID, pl.MovementQty*bom.BOMQty, pp.M_Locator_ID);
|
|
||||||
END LOOP;
|
|
||||||
-- Delete BOM line
|
|
||||||
DELETE M_ProductionLine
|
|
||||||
WHERE M_ProductionLine_ID=pl.M_ProductionLine_ID;
|
|
||||||
END LOOP;
|
|
||||||
END LOOP; -- While we have BOMs
|
|
||||||
|
|
||||||
END LOOP; -- For every Production Plan
|
|
||||||
|
|
||||||
-- Modifying locator to have sufficient stock
|
|
||||||
|
|
||||||
|
|
||||||
-- Indicate that it is Created
|
|
||||||
UPDATE M_Production
|
|
||||||
SET IsCreated='Y'
|
|
||||||
WHERE M_Production_ID=Record_ID;
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* Post Lines
|
|
||||||
*/
|
|
||||||
ELSE
|
|
||||||
-- All Production Lines
|
|
||||||
FOR pl IN CUR_PL_Post LOOP
|
|
||||||
-- M_ProductionLine_ID, AD_Client_ID, AD_Org_ID, MovementDate, M_Product_ID, MovementQty, M_Locator_ID
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE('ProductionLine=' || pl.M_ProductionLine_ID);
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE(' Qty=' || pl.MovementQty || ', OnHand=' || BOM_Qty_OnHand(pl.M_Product_ID, NULL, pl.M_Locator_ID));
|
|
||||||
-- Check Stock levels for reductions
|
|
||||||
IF (pl.MovementQty < 0 AND MustBeStocked <> 'N'
|
|
||||||
AND bomQtyOnHand(pl.M_Product_ID, NULL, pl.M_Locator_ID)+pl.MovementQty < 0) THEN
|
|
||||||
ROLLBACK;
|
|
||||||
SELECT '@NotEnoughStocked@: ' || Name INTO Message
|
|
||||||
FROM M_Product WHERE M_Product_ID=pl.M_Product_ID;
|
|
||||||
GOTO FINISH_PROCESS;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Adjust Quantity at Location
|
|
||||||
UPDATE M_Storage
|
|
||||||
SET QtyOnHand = QtyOnHand + pl.MovementQty,
|
|
||||||
Updated = SysDate
|
|
||||||
WHERE M_Locator_ID = pl.M_Locator_ID
|
|
||||||
AND M_AttributeSetInstance_ID = COALESCE(pl.M_AttributeSetInstance_ID,0)
|
|
||||||
AND M_Product_ID = pl.M_Product_ID;
|
|
||||||
-- Product not on Stock yet
|
|
||||||
IF (SQL%ROWCOUNT = 0) THEN
|
|
||||||
INSERT INTO M_Storage
|
|
||||||
(M_Product_ID, M_Locator_ID, M_AttributeSetInstance_ID,
|
|
||||||
AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy,
|
|
||||||
QtyOnHand, QtyReserved, QtyOrdered)
|
|
||||||
VALUES
|
|
||||||
(pl.M_Product_ID, pl.M_Locator_ID, COALESCE(pl.M_AttributeSetInstance_ID,0),
|
|
||||||
pl.AD_Client_ID, pl.AD_Org_ID, 'Y', SysDate, 0, SysDate, 0,
|
|
||||||
pl.MovementQty, 0, 0);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Create Transaction Entry
|
|
||||||
ResultStr := 'CreateTransaction';
|
|
||||||
AD_Sequence_Next('M_Transaction', pl.AD_Org_ID, NextNo);
|
|
||||||
INSERT INTO M_Transaction
|
|
||||||
(M_Transaction_ID, M_ProductionLine_ID,
|
|
||||||
AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy,
|
|
||||||
MovementType, M_Locator_ID, M_Product_ID, M_AttributeSetInstance_ID,
|
|
||||||
MovementDate, MovementQty)
|
|
||||||
VALUES
|
|
||||||
(NextNo, pl.M_ProductionLine_ID,
|
|
||||||
pl.AD_Client_ID, pl.AD_Org_ID, 'Y', SysDate, 0, SysDate, 0,
|
|
||||||
'P+', pl.M_Locator_ID, pl.M_Product_ID, COALESCE(pl.M_AttributeSetInstance_ID,0), -- not distinguishing between assemby/disassembly
|
|
||||||
pl.MovementDate, pl.MovementQty);
|
|
||||||
--
|
|
||||||
UPDATE M_ProductionLine
|
|
||||||
SET Processed='Y'
|
|
||||||
WHERE M_ProductionLine_ID=pl.M_ProductionLine_ID;
|
|
||||||
END LOOP;
|
|
||||||
|
|
||||||
-- Indicate that we are done
|
|
||||||
UPDATE M_Production
|
|
||||||
SET Processed='Y'
|
|
||||||
WHERE M_Production_ID=Record_ID;
|
|
||||||
UPDATE M_ProductionPlan
|
|
||||||
SET Processed='Y'
|
|
||||||
WHERE M_Production_ID=Record_ID;
|
|
||||||
|
|
||||||
END IF;
|
|
||||||
-- Only commit when entire job successful
|
|
||||||
COMMIT;
|
|
||||||
|
|
||||||
<<FINISH_PROCESS>>
|
|
||||||
-- Update AD_PInstance
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Updating PInstance - Finished ' || Message);
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Updated = SysDate,
|
|
||||||
IsProcessing = 'N',
|
|
||||||
Result = 1, -- success
|
|
||||||
ErrorMsg = Message
|
|
||||||
WHERE AD_PInstance_ID=PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
RETURN;
|
|
||||||
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
ResultStr := ResultStr || ': ' || SQLERRM || ' - ' || Message;
|
|
||||||
DBMS_OUTPUT.PUT_LINE(ResultStr);
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Updated = SysDate,
|
|
||||||
IsProcessing = 'N',
|
|
||||||
Result = 0, -- failure
|
|
||||||
ErrorMsg = ResultStr
|
|
||||||
WHERE AD_PInstance_ID=PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
RETURN;
|
|
||||||
|
|
||||||
END M_Production_Run;
|
|
||||||
/
|
|
|
@ -1,198 +0,0 @@
|
||||||
CREATE OR REPLACE PROCEDURE T_InventoryValue_Create
|
|
||||||
(
|
|
||||||
p_PInstance_ID IN NUMBER
|
|
||||||
)
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: T_InventoryValue_Create.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Inventory Valuation Temporary Table
|
|
||||||
* Description:
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
-- Logistice
|
|
||||||
v_ResultStr VARCHAR2(2000);
|
|
||||||
v_Message VARCHAR2(2000);
|
|
||||||
v_Result NUMBER := 1; -- 0=failure
|
|
||||||
v_Record_ID NUMBER;
|
|
||||||
v_AD_User_ID NUMBER;
|
|
||||||
-- Parameter
|
|
||||||
CURSOR Cur_Parameter (pp_PInstance NUMBER) IS
|
|
||||||
SELECT i.Record_ID, i.AD_User_ID,
|
|
||||||
p.ParameterName, p.P_String, p.P_Number, p.P_Date
|
|
||||||
FROM AD_PInstance i, AD_PInstance_Para p
|
|
||||||
WHERE i.AD_PInstance_ID=pp_PInstance
|
|
||||||
AND i.AD_PInstance_ID=p.AD_PInstance_ID(+)
|
|
||||||
ORDER BY p.SeqNo;
|
|
||||||
-- Parameter Variables
|
|
||||||
p_M_PriceList_Version_ID NUMBER(10);
|
|
||||||
p_DateValue DATE;
|
|
||||||
p_M_Warehouse_ID NUMBER(10);
|
|
||||||
p_C_Currency_ID NUMBER(10);
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
-- Update AD_PInstance
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Updating PInstance - Processing ' || p_PInstance_ID);
|
|
||||||
v_ResultStr := 'PInstanceNotFound';
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Created = SysDate,
|
|
||||||
IsProcessing = 'Y'
|
|
||||||
WHERE AD_PInstance_ID=p_PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
|
|
||||||
-- Get Parameters
|
|
||||||
v_ResultStr := 'ReadingParameters';
|
|
||||||
FOR p IN Cur_Parameter (p_PInstance_ID) LOOP
|
|
||||||
v_Record_ID := p.Record_ID;
|
|
||||||
v_AD_User_ID := p.AD_User_ID;
|
|
||||||
IF (p.ParameterName = 'M_PriceList_Version_ID') THEN
|
|
||||||
p_M_PriceList_Version_ID := p.P_Number;
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' M_PriceList_Version_ID=' || p_M_PriceList_Version_ID);
|
|
||||||
ELSIF (p.ParameterName = 'DateValue') THEN
|
|
||||||
p_DateValue := p.P_Date;
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' DateValue=' || p_DateValue);
|
|
||||||
ELSIF (p.ParameterName = 'M_Warehouse_ID') THEN
|
|
||||||
p_M_Warehouse_ID := p.P_Number;
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' M_Warehouse_ID=' || p_M_Warehouse_ID);
|
|
||||||
ELSIF (p.ParameterName = 'C_Currency_ID') THEN
|
|
||||||
p_C_Currency_ID := p.P_Number;
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' C_Currency_ID=' || p_C_Currency_ID);
|
|
||||||
ELSE
|
|
||||||
DBMS_OUTPUT.PUT_LINE('*** Unknown Parameter=' || p.ParameterName);
|
|
||||||
END IF;
|
|
||||||
END LOOP; -- Get Parameter
|
|
||||||
DBMS_OUTPUT.PUT_LINE(' Record_ID=' || v_Record_ID);
|
|
||||||
|
|
||||||
-- Clear
|
|
||||||
-- v_ResultStr := 'ClearTable';
|
|
||||||
-- DELETE T_InventoryValue WHERE M_Warehouse_ID=p_M_Warehouse_ID;
|
|
||||||
-- COMMIT;
|
|
||||||
|
|
||||||
-- Insert Products
|
|
||||||
v_ResultStr := 'InsertStockedProducts';
|
|
||||||
INSERT INTO T_InventoryValue
|
|
||||||
(AD_Client_ID,AD_Org_ID, AD_PInstance_ID, M_Warehouse_ID,M_Product_ID)
|
|
||||||
SELECT AD_Client_ID,AD_Org_ID, p_PInstance_ID, p_M_Warehouse_ID,M_Product_ID
|
|
||||||
FROM M_Product
|
|
||||||
WHERE IsStocked='Y';
|
|
||||||
--
|
|
||||||
IF (SQL%ROWCOUNT = 0) THEN
|
|
||||||
v_Message := '@Created@ = 0';
|
|
||||||
GOTO FINISH_PROCESS;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Update Constants
|
|
||||||
v_ResultStr := 'UpdateConstants';
|
|
||||||
UPDATE T_InventoryValue
|
|
||||||
SET DateValue = TRUNC(p_DateValue) + 0.9993,
|
|
||||||
M_PriceList_Version_ID = p_M_PriceList_Version_ID,
|
|
||||||
C_Currency_ID = p_C_Currency_ID
|
|
||||||
WHERE M_Warehouse_ID = p_M_Warehouse_ID;
|
|
||||||
|
|
||||||
-- Get current QtyOnHand
|
|
||||||
v_ResultStr := 'GetQtyOnHand';
|
|
||||||
UPDATE T_InventoryValue iv
|
|
||||||
SET QtyOnHand = (SELECT SUM(QtyOnHand) FROM M_Storage s, M_Locator l
|
|
||||||
WHERE iv.M_Product_ID=s.M_Product_ID
|
|
||||||
AND l.M_Locator_ID=s.M_Locator_ID
|
|
||||||
AND l.M_Warehouse_ID=iv.M_Warehouse_ID)
|
|
||||||
WHERE iv.M_Warehouse_ID = p_M_Warehouse_ID;
|
|
||||||
|
|
||||||
-- Adjust for Valuation Date
|
|
||||||
v_ResultStr := 'AdjustQtyOnHand';
|
|
||||||
UPDATE T_InventoryValue iv
|
|
||||||
SET QtyOnHand =
|
|
||||||
(SELECT iv.QtyOnHand - NVL(SUM(t.MovementQty), 0)
|
|
||||||
FROM M_Transaction t, M_Locator l
|
|
||||||
WHERE t.M_Product_ID=iv.M_Product_ID
|
|
||||||
-- AND t.M_AttributeSetInstance_ID=iv.M_AttributeSetInstance_ID
|
|
||||||
AND t.MovementDate > iv.DateValue
|
|
||||||
AND t.M_Locator_ID=l.M_Locator_ID
|
|
||||||
AND l.M_Warehouse_ID=iv.M_Warehouse_ID)
|
|
||||||
WHERE iv.M_Warehouse_ID = p_M_Warehouse_ID;
|
|
||||||
|
|
||||||
-- Delete Records w/o OnHand Qty
|
|
||||||
v_ResultStr := 'DeleteZeroQtyOnHand';
|
|
||||||
DELETE T_InventoryValue
|
|
||||||
WHERE QtyOnHand=0
|
|
||||||
OR QtyOnHand IS NULL;
|
|
||||||
|
|
||||||
-- Update Prices
|
|
||||||
v_ResultStr := 'GetPrices';
|
|
||||||
UPDATE T_InventoryValue iv
|
|
||||||
SET PricePO =
|
|
||||||
(SELECT currencyConvert (po.PriceList,po.C_Currency_ID,iv.C_Currency_ID,iv.DateValue, null, iv.AD_Client_ID, iv.AD_Org_ID)
|
|
||||||
FROM M_Product_PO po WHERE po.M_Product_ID=iv.M_Product_ID
|
|
||||||
AND po.IsCurrentVendor='Y' AND RowNum=1),
|
|
||||||
PriceList =
|
|
||||||
(SELECT currencyConvert(pp.PriceList,pl.C_Currency_ID,iv.C_Currency_ID,iv.DateValue, null, iv.AD_Client_ID, iv.AD_Org_ID)
|
|
||||||
FROM M_PriceList pl, M_PriceList_Version plv, M_ProductPrice pp
|
|
||||||
WHERE pp.M_Product_ID=iv.M_Product_ID AND pp.M_PriceList_Version_ID=iv.M_PriceList_Version_ID
|
|
||||||
AND pp.M_PriceList_Version_ID=plv.M_PriceList_Version_ID
|
|
||||||
AND plv.M_PriceList_ID=pl.M_PriceList_ID),
|
|
||||||
PriceStd =
|
|
||||||
(SELECT currencyConvert(pp.PriceStd,pl.C_Currency_ID,iv.C_Currency_ID,iv.DateValue, null, iv.AD_Client_ID, iv.AD_Org_ID)
|
|
||||||
FROM M_PriceList pl, M_PriceList_Version plv, M_ProductPrice pp
|
|
||||||
WHERE pp.M_Product_ID=iv.M_Product_ID AND pp.M_PriceList_Version_ID=iv.M_PriceList_Version_ID
|
|
||||||
AND pp.M_PriceList_Version_ID=plv.M_PriceList_Version_ID
|
|
||||||
AND plv.M_PriceList_ID=pl.M_PriceList_ID),
|
|
||||||
PriceLimit =
|
|
||||||
(SELECT currencyConvert(pp.PriceLimit,pl.C_Currency_ID,iv.C_Currency_ID,iv.DateValue, null, iv.AD_Client_ID, iv.AD_Org_ID)
|
|
||||||
FROM M_PriceList pl, M_PriceList_Version plv, M_ProductPrice pp
|
|
||||||
WHERE pp.M_Product_ID=iv.M_Product_ID AND pp.M_PriceList_Version_ID=iv.M_PriceList_Version_ID
|
|
||||||
AND pp.M_PriceList_Version_ID=plv.M_PriceList_Version_ID
|
|
||||||
AND plv.M_PriceList_ID=pl.M_PriceList_ID),
|
|
||||||
CostStandard =
|
|
||||||
(SELECT currencyConvert(pc.CurrentCostPrice,acs.C_Currency_ID,iv.C_Currency_ID,iv.DateValue, null, iv.AD_Client_ID, iv.AD_Org_ID)
|
|
||||||
FROM AD_ClientInfo ci, C_AcctSchema acs, M_Product_Costing pc
|
|
||||||
WHERE iv.AD_Client_ID=ci.AD_Client_ID AND ci.C_AcctSchema1_ID=acs.C_AcctSchema_ID
|
|
||||||
AND acs.C_AcctSchema_ID=pc.C_AcctSchema_ID
|
|
||||||
AND iv.M_Product_ID=pc.M_Product_ID)
|
|
||||||
WHERE iv.M_Warehouse_ID = p_M_Warehouse_ID;
|
|
||||||
|
|
||||||
-- Update Values
|
|
||||||
v_ResultStr := 'UpdateValue';
|
|
||||||
UPDATE T_InventoryValue
|
|
||||||
SET PricePOAmt = QtyOnHand * PricePO,
|
|
||||||
PriceListAmt = QtyOnHand * PriceList,
|
|
||||||
PriceStdAmt = QtyOnHand * PriceStd,
|
|
||||||
PriceLimitAmt = QtyOnHand * PriceLimit,
|
|
||||||
CostStandardAmt = QtyOnHand * CostStandard
|
|
||||||
WHERE M_Warehouse_ID = p_M_Warehouse_ID;
|
|
||||||
|
|
||||||
v_Message := '@Created@ = ' || SQL%ROWCOUNT;
|
|
||||||
|
|
||||||
|
|
||||||
<<FINISH_PROCESS>>
|
|
||||||
-- Update AD_PInstance
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Updating PInstance - Finished ' || v_Message);
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Updated = SysDate,
|
|
||||||
IsProcessing = 'N',
|
|
||||||
Result = v_Result, -- 1=success
|
|
||||||
ErrorMsg = v_Message
|
|
||||||
WHERE AD_PInstance_ID=p_PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
RETURN;
|
|
||||||
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
v_ResultStr := v_ResultStr || ': ' || SQLERRM || ' - ' || v_Message;
|
|
||||||
DBMS_OUTPUT.PUT_LINE(v_ResultStr);
|
|
||||||
ROLLBACK;
|
|
||||||
UPDATE AD_PInstance
|
|
||||||
SET Updated = SysDate,
|
|
||||||
IsProcessing = 'N',
|
|
||||||
Result = 0, -- failure
|
|
||||||
ErrorMsg = v_ResultStr
|
|
||||||
WHERE AD_PInstance_ID=p_PInstance_ID;
|
|
||||||
COMMIT;
|
|
||||||
RETURN;
|
|
||||||
|
|
||||||
END T_InventoryValue_Create;
|
|
||||||
/
|
|
|
@ -1,55 +0,0 @@
|
||||||
CREATE OR REPLACE PROCEDURE nextID
|
|
||||||
(
|
|
||||||
p_AD_Sequence_ID IN NUMBER,
|
|
||||||
p_System IN CHAR,
|
|
||||||
o_NextID OUT NUMBER
|
|
||||||
)
|
|
||||||
/*************************************************************************
|
|
||||||
* The contents of this file are subject to the Adempiere License. You may
|
|
||||||
* obtain a copy of the License at http://www.adempiere.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: Adempiere ERP+CRM
|
|
||||||
* Copyright (C) 1999-2005 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
|
||||||
*************************************************************************
|
|
||||||
* $Id: nextID.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
|
||||||
***
|
|
||||||
* Title: Get Next ID - no Commit
|
|
||||||
* Description:
|
|
||||||
* Test via
|
|
||||||
DECLARE
|
|
||||||
v_NextID NUMBER;
|
|
||||||
BEGIN
|
|
||||||
nextID(2, 'Y', v_NextID);
|
|
||||||
DBMS_OUTPUT.PUT_LINE(v_NextID);
|
|
||||||
END;
|
|
||||||
*
|
|
||||||
************************************************************************/
|
|
||||||
AS
|
|
||||||
BEGIN
|
|
||||||
IF (p_System = 'Y') THEN
|
|
||||||
SELECT CurrentNextSys
|
|
||||||
INTO o_NextID
|
|
||||||
FROM AD_Sequence
|
|
||||||
WHERE AD_Sequence_ID=p_AD_Sequence_ID
|
|
||||||
FOR UPDATE OF CurrentNextSys;
|
|
||||||
--
|
|
||||||
UPDATE AD_Sequence
|
|
||||||
SET CurrentNextSys = CurrentNextSys + IncrementNo
|
|
||||||
WHERE AD_Sequence_ID=p_AD_Sequence_ID;
|
|
||||||
ELSE
|
|
||||||
SELECT CurrentNext
|
|
||||||
INTO o_NextID
|
|
||||||
FROM AD_Sequence
|
|
||||||
WHERE AD_Sequence_ID=p_AD_Sequence_ID
|
|
||||||
FOR UPDATE OF CurrentNext;
|
|
||||||
--
|
|
||||||
UPDATE AD_Sequence
|
|
||||||
SET CurrentNext = CurrentNext + IncrementNo
|
|
||||||
WHERE AD_Sequence_ID=p_AD_Sequence_ID;
|
|
||||||
END IF;
|
|
||||||
--
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
DBMS_OUTPUT.PUT_LINE(SQLERRM);
|
|
||||||
END nextID;
|
|
||||||
/
|
|
Loading…
Reference in New Issue