⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c_validcombination_get.sql

📁 Java写的ERP系统
💻 SQL
字号:
CREATE OR REPLACE PROCEDURE C_ValidCombination_Get
(
	o_C_ValidCombination_ID      OUT NUMBER, 
	--	Mandatory Accounting fields
	p_AD_Client_ID               IN NUMBER, 
	p_AD_Org_ID                  IN NUMBER, 
	p_C_AcctSchema_ID            IN NUMBER, 
	p_Account_ID                 IN NUMBER, 
	--	Optional
	b_C_ValidCombination_ID      IN NUMBER DEFAULT NULL,
	MustBeFullyQualified		 IN CHAR DEFAULT 'N',
	p_Alias						 IN VARCHAR2 DEFAULT NULL,
	p_CreatedBy                  IN NUMBER DEFAULT NULL,
	--	Optional Accounting fields
    p_M_Product_ID               IN NUMBER DEFAULT NULL, 
    p_C_BPartner_ID              IN NUMBER DEFAULT NULL, 
    p_AD_OrgTrx_ID               IN NUMBER DEFAULT NULL, 
    p_C_LocFrom_ID               IN NUMBER DEFAULT NULL, 
    p_C_LocTo_ID                 IN NUMBER DEFAULT NULL, 
    p_C_SalesRegion_ID           IN NUMBER DEFAULT NULL, 
    p_C_Project_ID               IN NUMBER DEFAULT NULL, 
    p_C_Campaign_ID              IN NUMBER DEFAULT NULL, 
    p_C_Activity_ID              IN NUMBER DEFAULT NULL, 
    p_User1_ID                   IN NUMBER DEFAULT NULL, 
    p_User2_ID                   IN NUMBER DEFAULT NULL
)
/*************************************************************************
 * The contents of this file are subject to the Compiere License.  You may
 * obtain a copy of the License at    http://www.compiere.org/license.html
 * Software is on an  "AS IS" basis,  WITHOUT WARRANTY OF ANY KIND, either
 * express or implied. See the License for details. Code: Compiere ERP+CRM
 * Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
 *************************************************************************
 * $Id: C_ValidCombination_Get.sql,v 1.3 2002/02/08 05:43:58 jjanke Exp $
 ***
 * Title:	Create Valid Account Code Combination
 * Description:
 *	Get a Valid Account Combination
 *	1) Create template for combination
 *		- if base combination (b_) != NULL, retrieve existing VC
 *		- replace with NOT NULL transaction values (p_) elements
 *	2) Check, if combination exists
 *		- yes, return target combination (t_)
 *		- otherwise create it
 *	Returns NULL if not all mandatory fields have values 
 *	or if MustBeFullyQualified=Y and found combination is not fully qualified
 ************************************************************************/
AS
	--	Base Combination
	CURSOR	Cur_Base_VC	IS
		SELECT 	* 
		FROM 	C_ValidCombination 
		WHERE 	C_ValidCombination_ID=b_C_ValidCombination_ID;
   	--	Target Combination
	t_AD_Client_ID               NUMBER := NULL;
	t_AD_Org_ID                  NUMBER := NULL;
	t_C_AcctSchema_ID            NUMBER := NULL;
	t_Account_ID                 NUMBER := NULL;
	t_M_Product_ID               NUMBER := NULL;
	t_C_BPartner_ID              NUMBER := NULL;
	t_AD_OrgTrx_ID               NUMBER := NULL;
	t_C_LocFrom_ID               NUMBER := NULL;
	t_C_LocTo_ID                 NUMBER := NULL;
	t_C_SalesRegion_ID           NUMBER := NULL;
	t_C_Project_ID               NUMBER := NULL;
	t_C_Campaign_ID              NUMBER := NULL;
	t_C_Activity_ID              NUMBER := NULL;
	t_User1_ID                   NUMBER := NULL;
	t_User2_ID                   NUMBER := NULL;
	t_CreatedBy		             NUMBER := NULL;

	--	Existance Loop - Get first fully qualified matching combination
	CURSOR	Cur_Existing_VC	IS
		SELECT 	*
		FROM 	C_ValidCombination 
			--	Mandatory fields
		WHERE 	AD_Client_ID=t_AD_Client_ID
		  AND	AD_Org_ID=t_AD_Org_ID
		  AND	C_AcctSchema_ID=t_C_AcctSchema_ID
		  AND	Account_ID=t_Account_ID
		  	--	Optional fields
		  AND	(t_M_Product_ID IS NULL OR M_Product_ID=t_M_Product_ID)
		  AND	(t_C_BPartner_ID IS NULL OR C_BPartner_ID=t_C_BPartner_ID)
		  AND	(t_AD_OrgTrx_ID IS NULL OR AD_OrgTrx_ID=t_AD_OrgTrx_ID)
		  AND	(t_C_LocFrom_ID IS NULL OR C_LocFrom_ID=t_C_LocFrom_ID)
		  AND	(t_C_LocTo_ID IS NULL OR C_LocTo_ID=t_C_LocTo_ID)
		  AND	(t_C_SalesRegion_ID IS NULL OR C_SalesRegion_ID=t_C_SalesRegion_ID)
		  AND	(t_C_Project_ID IS NULL OR C_Project_ID=t_C_Project_ID)
		  AND	(t_C_Campaign_ID IS NULL OR C_Campaign_ID=t_C_Campaign_ID)
		  AND	(t_C_Activity_ID IS NULL OR C_Activity_ID=t_C_Activity_ID)
		  AND	(t_User1_ID IS NULL OR User1_ID=t_User1_ID)
		  AND	(t_User2_ID IS NULL OR User2_ID=t_User2_ID)
		  AND	IsActive='Y'
		  	--	Y comes after N
		ORDER BY IsFullyQualified DESC;
	--
	FoundValue				CHAR(1) := 'N';
	RetValue				NUMBER := NULL;
	fullyQualified			CHAR(1);
BEGIN
	--	1a  -- Fill with base info
	IF (b_C_ValidCombination_ID != NULL) THEN
		--	Actually only one value possible, for convineance
		FOR base IN Cur_Base_VC LOOP
			DBMS_OUTPUT.PUT_LINE('Base VC found');
			--	mandatory fields
			t_AD_Client_ID := base.AD_Client_ID;
			t_AD_Org_ID := base.AD_Org_ID;
			t_C_AcctSchema_ID := base.C_AcctSchema_ID;
			t_Account_ID := base.Account_ID;
			--	optional fields
			t_M_Product_ID := base.M_Product_ID;
			t_C_BPartner_ID := base.C_BPartner_ID;
			t_AD_OrgTrx_ID := base.AD_OrgTrx_ID;
			t_C_LocFrom_ID := base.C_LocFrom_ID;
			t_C_LocTo_ID := base.C_LocTo_ID;
			t_C_SalesRegion_ID := base.C_SalesRegion_ID;
			t_C_Project_ID := base.C_Project_ID;
			t_C_Campaign_ID := base.C_Campaign_ID;
			t_C_Activity_ID := base.C_Activity_ID;
			t_User1_ID := base.User1_ID;
			t_User2_ID := base.User2_ID;
		END LOOP;
	END IF;

	--	1b  -- Update target values
	IF (p_AD_Client_ID IS NOT NULL) THEN
		t_AD_Client_ID := p_AD_Client_ID;
	END IF;
	IF (p_AD_Org_ID IS NOT NULL) THEN
		t_AD_Org_ID := p_AD_Org_ID;
	END IF;
	IF (p_C_AcctSchema_ID IS NOT NULL) THEN
		t_C_AcctSchema_ID := p_C_AcctSchema_ID;
	END IF;
	IF (p_Account_ID IS NOT NULL) THEN
		t_Account_ID := p_Account_ID;
	END IF;
	--	optional fields
	IF (p_M_Product_ID IS NOT NULL) THEN
		t_M_Product_ID := p_M_Product_ID;
	END IF;
	IF (p_C_BPartner_ID IS NOT NULL) THEN
		t_C_BPartner_ID := p_C_BPartner_ID;
	END IF;
	IF (p_AD_OrgTrx_ID IS NOT NULL) THEN
		t_AD_OrgTrx_ID := p_AD_OrgTrx_ID;
	END IF;
	IF (p_C_LocFrom_ID IS NOT NULL) THEN
		t_C_LocFrom_ID := p_C_LocFrom_ID;
	END IF;
	IF (p_C_LocTo_ID IS NOT NULL) THEN
		t_C_LocTo_ID := p_C_LocTo_ID;
	END IF;
	IF (p_C_SalesRegion_ID IS NOT NULL) THEN
		t_C_SalesRegion_ID := p_C_SalesRegion_ID;
	END IF;
	IF (p_C_Project_ID IS NOT NULL) THEN
		t_C_Project_ID := p_C_Project_ID;
	END IF;
	IF (p_C_Campaign_ID IS NOT NULL) THEN
		t_C_Campaign_ID := p_C_Campaign_ID;
	END IF;
	IF (p_C_Activity_ID IS NOT NULL) THEN
		t_C_Activity_ID := p_C_Activity_ID;
	END IF;
	IF (p_User1_ID IS NOT NULL) THEN
		t_User1_ID := p_User1_ID;
	END IF;
	IF (p_User2_ID IS NOT NULL) THEN
		t_User2_ID := p_User2_ID;
	END IF;	

	--	Are nandatory elements null?
	IF (t_AD_Client_ID IS NULL OR t_AD_Org_ID IS NULL 
		OR t_C_AcctSchema_ID IS NULL OR t_Account_ID IS NULL) THEN
		DBMS_OUTPUT.PUT_LINE('Mandatory Fields Null');
		o_C_ValidCombination_ID := NULL;
		RETURN;
	END IF;

	--	Existance check
	FOR e IN Cur_Existing_VC LOOP
		IF (FoundValue = 'N') THEN
			FoundValue := 'Y';
			IF (MustBeFullyQualified='Y' AND e.IsFullyQualified='N') THEN
				DBMS_OUTPUT.PUT_LINE('Combination found but not fully qualified - ' || e.C_ValidCombination_ID);
				RetValue := NULL;
	   		END IF;
			RetValue := e.C_ValidCombination_ID;
		END IF;
	END LOOP;
	--	We found a value
	IF (FoundValue = 'Y') THEN
		o_C_ValidCombination_ID := RetValue;
		DBMS_OUTPUT.PUT_LINE('Found Combination');
		RETURN;
	END IF;

	--	No Combination found - so create one
	DBMS_OUTPUT.PUT_LINE('Create new');
	AD_Sequence_Next('C_ValidCombination', t_AD_Client_ID, o_C_ValidCombination_ID);
	t_CreatedBy := p_CreatedBy;
	IF (t_CreatedBy IS NULL) THEN
		t_CreatedBy := 0;
	END IF;

	--	Don't catch trigger or integrity errors - let it fail
    INSERT INTO C_ValidCombination (C_ValidCombination_ID, IsFullyQualified,
        AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, 
        Alias, C_AcctSchema_ID, 
        Account_ID, M_Product_ID, C_BPartner_ID, AD_OrgTrx_ID, 
        C_LocFrom_ID, C_LocTo_ID, C_SalesRegion_ID, C_Project_ID, 
        C_Campaign_ID, C_Activity_ID, User1_ID, User2_ID) 
	VALUES (o_C_ValidCombination_ID, 'N', 
		t_AD_Client_ID, t_AD_Org_ID, 'Y', SysDate, t_CreatedBy, SysDate, t_CreatedBy, 
		p_Alias, t_C_AcctSchema_ID, 
        t_Account_ID, t_M_Product_ID, t_C_BPartner_ID, t_AD_OrgTrx_ID, 
        t_C_LocFrom_ID, t_C_LocTo_ID, t_C_SalesRegion_ID, t_C_Project_ID, 
        t_C_Campaign_ID, t_C_Activity_ID, t_User1_ID, t_User2_ID); 
    COMMIT;

	--	Read Trigger result (fully qualified) 
	IF (MustBeFullyQualified='Y') THEN
		SELECT 	IsFullyQualified 
		  INTO	fullyQualified
	   	FROM	C_ValidCombination
		WHERE	C_ValidCombination_ID=o_C_ValidCombination_ID;
		--
		IF (fullyQualified = 'N') THEN
			DBMS_OUTPUT.PUT_LINE('New Combination not fully qualified - ' || o_C_ValidCombination_ID);
			o_C_ValidCombination_ID := NULL;
		END IF;
	END IF;
END C_ValidCombination_Get;
/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -