beerbay-math
Version:
129 lines (99 loc) • 3.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getCouponValue = exports.isFreeShipping = exports.isCouponUsable = exports.isCouponActive = void 0;
var _cart = require("./cart");
var _shipping = require("./shipping");
/**
* @method isCouponActive
* @description Given the coupon it checks if the coupon is active
* @param {*} coupon
*/
var isCouponActive = function isCouponActive(coupon) {
if (coupon) {
return coupon.active;
}
return false;
};
/**
* @method isCouponUsable
* @description Given the coupon and user it checks if the coupon is usable
* @param {*} coupon
* @param {*} user
*/
exports.isCouponActive = isCouponActive;
var isCouponUsable = function isCouponUsable(coupon, user) {
if (coupon) {
var active = isCouponActive(coupon);
var maxUses = coupon.maxUses ? parseInt(coupon.maxUses) : Infinity;
var couponUses = coupon.uses ? coupon.uses.length : 0;
var couponHasUses = couponUses < maxUses;
var userMaxUses = coupon.userMaxUses ? parseInt(coupon.userMaxUses) : Infinity;
var userUser = coupon.uses ? coupon.uses.filter(function (uses) {
return uses.user_email === user.email;
}).length : 0;
var userCanUse = userUser < userMaxUses;
return active && couponHasUses && userCanUse;
}
return false;
};
/**
* @method isFreeShipping
* @description Given the cart, country, coupon and user it checks if the coupon is valid for free shipping
* @param {*} cart
* @param {*} selectedCountry
* @param {*} coupon
* @param {*} user
*/
exports.isCouponUsable = isCouponUsable;
var isFreeShipping = function isFreeShipping(cart, selectedCountry, coupon) {
var user = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
if (!isCouponUsable(coupon, user)) {
return false;
}
if (!coupon.shippingCountries || !coupon.shippingCountries.length) {
return false;
}
var found = coupon.shippingCountries.find(function (country) {
return country.id === selectedCountry.id;
});
return !!found;
};
exports.isFreeShipping = isFreeShipping;
var couponValue = function couponValue(cart, coupon) {
var cartPrice = (0, _cart.getCartPrice)(cart);
var minimum = coupon.priceMinimum ? Number(coupon.priceMinimum) : 0;
var isEnough = cartPrice > minimum;
if (!isEnough) {
return 0;
}
var value = parseFloat(coupon.value);
if (coupon.type === "percentage") {
return cartPrice * value;
}
if (coupon.type === "flat") {
return value;
}
return 0;
};
/**
* @method getCouponValue
* @description Given the cart, country, coupon and user it gets the coupon value
* @param {*} cart
* @param {*} selectedCountry
* @param {*} coupon
* @param {*} user
*/
var getCouponValue = function getCouponValue(cart, selectedCountry) {
var coupon = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var user = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
if (!isCouponUsable(coupon, user)) {
return 0;
} //Shipping
if (isFreeShipping(cart, selectedCountry, coupon, user)) {
return (0, _shipping.getShippingGross)(cart, selectedCountry);
} //Mode
return couponValue(cart, coupon);
};
exports.getCouponValue = getCouponValue;