USE `vn`;
DROP procedure IF EXISTS `logAddWithUser`;

DELIMITER $$
USE `vn`$$
CREATE DEFINER=`root`@`%` PROCEDURE `logAddWithUser`(vOriginFk INT, vUserId INT, vActionCode VARCHAR(45), vEntity VARCHAR(45), vDescription TEXT)
BEGIN
	/**
	* Guarda las acciones realizadas por el usuario
	*
	* @param vOriginFk Id del registro de origen
	* @param vActionCode Código de la acción {insert | delete | update}
	* @param vEntity Nombre que hace referencia a la tabla.
	* @param descripcion Descripción de la acción realizada por el usuario
	*/
	DECLARE vTableName VARCHAR(255) DEFAULT CONCAT(IFNULL(vEntity, ''), 'Log');

	SET @sqlQuery = CONCAT(
		'INSERT INTO vn.', vTableName, ' SET originFk = ?, userFk = ?, action = ?, description = ?'
		);
	SET @originFk = vOriginFk;
	SET @userFk = vUserId;
	SET @action = vActionCode;
	SET @description = vDescription;

	PREPARE stmt FROM @sqlQuery;
	EXECUTE stmt USING @originFk, @userFk, @action, @description;
	DEALLOCATE PREPARE stmt;

	SET @sqlQuery = NULL;
END$$

DELIMITER ;

