UNPKG

beerbay-math

Version:

129 lines (99 loc) 3.28 kB
"use strict"; 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;