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 vhasTx BOOL DEFAULT @@in_transaction;
	DECLARE EXIT HANDLER FOR SQLEXCEPTION
	BEGIN
		CALL util.tx_rollback(vhasTx);
		RESIGNAL;
	END;

	IF vFiscalYear IS NULL THEN
		CALL util.throw('Fiscal year is required');
	END IF;
		
	CALL util.tx_start(vhasTx);
	CALL ledger_next(vFiscalYear, vLastBookEntry);
	CALL util.tx_commit(vhasTx);
END$$
DELIMITER ;