DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ledger_nextTx`(
	IN vFiscalYear INT,
	OUT vLastBookEntry INT
)
/**
 * Devuelve un número de asiento válido, según el contador de asientos 
 * tabla vn.ledgerConfig, si no existe lo inicializa a 1
 * Lo hace transaccionando el proceso
 *
 * @param vFiscalYear Id del año contable
 * @return vLastBookEntry Id del asiento
 */
BEGIN
	DECLARE EXIT HANDLER FOR SQLEXCEPTION
	BEGIN
		ROLLBACK;
		RESIGNAL;
	END;

	IF vFiscalYear IS NULL THEN
		CALL util.throw('Fiscal year is required');
	END IF;
	
	IF @@in_transaction THEN
		CALL util.throw('This procedure should not be executed within a transaction');
	END IF;

	START TRANSACTION;
		
	CALL ledger_next(vFiscalYear, vLastBookEntry);
	
	COMMIT;
END$$
DELIMITER ;