* 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