All Downloads are FREE. Search and download functionalities are using the official Maven repository.

META-INF.resources.utilities.quantities.js Maven / Gradle / Ivy

/**
 * SPDX-FileCopyrightText: (c) 2023 Liferay, Inc. https://liferay.com
 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
 */

export function getMinQuantity(
	minQuantity = 1,
	multipleQuantity = 1,
	precision = 0
) {
	const minDifference = minQuantity % multipleQuantity;

	if (!minDifference) {
		if (multipleQuantity <= minQuantity) {
			return minQuantity.toFixed(precision);
		}

		return multipleQuantity.toFixed(precision);
	}

	return Number(minQuantity + multipleQuantity - minDifference).toFixed(
		precision
	);
}

export function getMultiple(
	incrementalOrderQuantity = 1,
	multipleQuantity = 1,
	precision = 0
) {
	let precisionAdjustment = 0;

	if (!Number.isInteger(incrementalOrderQuantity)) {
		precisionAdjustment = incrementalOrderQuantity
			.toString()
			.split('.')[1].length;
	}

	if (!Number.isInteger(multipleQuantity)) {
		const multipleAdjustment = multipleQuantity
			.toString()
			.split('.')[1].length;
		precisionAdjustment = Math.max(precisionAdjustment, multipleAdjustment);
	}

	if (precisionAdjustment > 0) {
		const scale = Math.pow(10, precisionAdjustment);
		incrementalOrderQuantity *= scale;
		multipleQuantity *= scale;
	}

	const small = Math.min(incrementalOrderQuantity, multipleQuantity);
	const large = Math.max(incrementalOrderQuantity, multipleQuantity);

	let multiple = large;
	while (multiple % small !== 0) {
		multiple += large;
	}

	const result = multiple / Math.pow(10, precisionAdjustment);

	return Number(result.toFixed(precision));
}

export function getProductMaxQuantity(
	maxQuantity,
	multipleQuantity = 1,
	precision = 0
) {
	if (!maxQuantity) {
		return '';
	}

	const maxDifference = maxQuantity % multipleQuantity;

	if (!maxDifference) {
		return maxQuantity.toFixed(precision);
	}

	return Number(maxQuantity - maxDifference).toFixed(precision);
}

export function getProductMinQuantity({
	allowedOrderQuantities,
	minOrderQuantity,
	multipleOrderQuantity,
}) {
	let minQuantity;

	if (allowedOrderQuantities.length) {
		minQuantity = Math.min(...allowedOrderQuantities);
	}
	else {
		minQuantity = getMinQuantity(minOrderQuantity, multipleOrderQuantity);
	}

	return minQuantity;
}

export function getNumberOfDecimals(value) {
	if (value && Math.floor(value) !== Math.ceil(value)) {
		return value.toString().split('.')[1].length || 0;
	}

	return 0;
}

export function isMultiple(value1, value2, precision = 0) {
	return (
		(Math.round(value1 / value2) / (1 / value2)).toFixed(precision) ===
		Number(value1).toFixed(precision)
	);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy