DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `util`.`log_addWithUser`(
	vSchema VARCHAR(45),
	vEntity VARCHAR(45),
	vChangedModel VARCHAR(45),
	vOriginFk INT,
	vChangedModelId INT,
	vActionCode VARCHAR(45),
	vOldInstance JSON,
	vNewInstance JSON,
	vUserId INT)
BEGIN
/**
 * Guarda las acciones realizadas por el usuario
 *
 * @param vScheme Esquema al que pertenece la tabla.
 * @param vEntity Nombre que hace referencia a la tabla donde se insertará el log
 * @param vChangedModel Nombre que hace referencia a la tabla que se modifica
 * @param vOriginFk Id del registro de la tabla origen
 * @param vChangedModelId Id del registro de la tabla a la que se realiza la acción
 * @param vActionCode Código de la acción {insert | delete | update}
 * @param vOldInstance JSON que contiene los valores viejos
 * @param vNewInstance JSON que contiene los valores nuevos
 * @param vUserId Id del usuario que realiza la acción
 */
	DECLARE vTableName VARCHAR(255) DEFAULT CONCAT(IFNULL(vEntity, ''), 'Log');

	SET vSchema = util.quoteIdentifier(vSchema);
	SET vTableName = util.quoteIdentifier(vTableName);

	CALL util.log_cleanInstances(vActionCode, vOldInstance, vNewInstance);

	EXECUTE IMMEDIATE CONCAT(
		'INSERT INTO ', vSchema, '.', vTableName, ' SET changedModel = ?, originFk = ?, changedModelId= ?, action = ?,  oldInstance = ?, newInstance = ?, userFk = ?'
	) USING vChangedModel, vOriginFk, vChangedModelId, vActionCode,  vOldInstance, vNewInstance, vUserId;
END$$
DELIMITER ;