CREATE OR REPLACE FUNCTION nextid(
	p_AD_Sequence_ID 	IN 	INTEGER, 
	p_System 		IN 	VARCHAR,
	o_NextID		OUT	INTEGER
)
  RETURNS INTEGER AS $body$
/*************************************************************************
 * 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-2005 Jorg Janke, ComPiere, Inc. All Rights Reserved.
 *
 * converted to postgreSQL by Karsten Thiemann (Schaeffer AG), 
 * kthiemann@adempiere.org
 *************************************************************************
 ***
 * Title:	Get Next ID - no Commit
 * Description: Returns the next id of the sequence.
 * Test:
 *	select * from nextid((select ad_sequence_id from ad_sequence where name = 'Test')::Integer, 'Y'::Varchar);
 * 
 ************************************************************************/
DECLARE
Isnativeseqon VARCHAR(1);
tablename     VARCHAR(60);
BEGIN
    IF (p_System = 'Y') THEN
	RAISE NOTICE 'system';
        SELECT CurrentNextSys
            INTO o_NextID
        FROM AD_Sequence
        WHERE AD_Sequence_ID=p_AD_Sequence_ID;
        --
        UPDATE AD_Sequence
          SET CurrentNextSys = CurrentNextSys + IncrementNo
        WHERE AD_Sequence_ID=p_AD_Sequence_ID;
    ELSE
    
        Isnativeseqon := get_Sysconfig('SYSTEM_NATIVE_SEQUENCE','N',0,0);
        IF Isnativeseqon = 'Y' THEN 
          SELECT Name
            INTO tablename 
            FROM Ad_Sequence
           WHERE Ad_Sequence_Id=P_Ad_Sequence_Id;
	   --
	   EXECUTE 'SELECT nextval('''||tablename||'_sq'''||')' INTO o_NextID;
	   --
       ELSE   
          SELECT CurrentNext
            INTO o_NextID
            FROM AD_Sequence
           WHERE AD_Sequence_ID=p_AD_Sequence_ID;
          --
          UPDATE AD_Sequence
             SET CurrentNext = CurrentNext + IncrementNo
           WHERE AD_Sequence_ID=p_AD_Sequence_ID;
       END IF; 
    END IF;
    --
EXCEPTION
    WHEN  OTHERS THEN
    	RAISE NOTICE '%',SQLERRM;
END;

$body$ LANGUAGE plpgsql;

DROP SEQUENCE ad_error_seq
;

DROP SEQUENCE ad_pinstance_seq
;

DROP SEQUENCE t_spool_seq
;

DROP SEQUENCE w_basket_seq
;

SELECT register_migration_script('921_IDEMPIERE-422_NativeSequence.sql') FROM dual
;

