Ejemplo n.º 1
0
        /// <summary>
        /// check discount code
        /// </summary>
        /// <param name="code"></param>
        /// <param name="orderId"></param>
        /// <returns>Returns Discount</returns>
        public IActionResponse <Discount> Check(DiscountCheckModel model)
        {
            var item = _discount.FirstOrDefault(x => x.Code == model.Code);

            if (item == null)
            {
                return new ActionResponse <Discount>
                       {
                           IsSuccessful = false,
                           Message      = BusinessMessage.InvalidDiscountCode
                       }
            }
            ;

            if (item.IsUsed)
            {
                return new ActionResponse <Discount>
                       {
                           IsSuccessful = false,
                           Message      = BusinessMessage.DiscountBeenUsed
                       }
            }
            ;

            if (DateTime.Now < item.ValidFromDateMi)
            {
                return new ActionResponse <Discount>
                       {
                           IsSuccessful = false,
                           Message      = BusinessMessage.DiscountUseDateNotArrived
                       }
            }
            ;

            if (DateTime.Now > item.ValidToDateMi)
            {
                return new ActionResponse <Discount>
                       {
                           IsSuccessful = false,
                           Message      = BusinessMessage.DiscountBeenExpired
                       }
            }
            ;
            if (item.UseForOnce && _discountOrder.Any(x => x.DiscountId == item.DiscountId))
            {
                return new ActionResponse <Discount>
                       {
                           IsSuccessful = false,
                           Message      = BusinessMessage.DiscountBeenUsed
                       }
            }
            ;

            if (_discountOrder.Any(x => x.OrderId == model.OrderId))
            {
                return new ActionResponse <Discount>
                       {
                           IsSuccessful = false,
                           Message      = BusinessMessage.OneDiscountCanBeUsedPerOrder
                       }
            }
            ;

            if (item.ForFirstUser && _discountOrder.Any(x => x.DiscountId == item.DiscountId && x.Order.UserId != model.UserId))
            {
                return new ActionResponse <Discount>
                       {
                           IsSuccessful = false,
                           Message      = BusinessMessage.DiscountBeenUsed
                       }
            }
            ;

            if (item.DiscountType != DiscountType.Value)
            {
                var value = model.TotalPrice * item.Value / 100;

                if (item.DiscountType == DiscountType.PercentageWithCeiling)
                {
                    item.Value = value > item.Ceiling ? item.Ceiling : value;
                }
                else
                {
                    item.Value = value;
                }
            }

            if (item.Value > model.TotalPrice)
            {
                item.Value = model.TotalPrice;
            }
            return(new ActionResponse <Discount>
            {
                IsSuccessful = true,
                Result = item
            });
        }
    }
}
 public virtual JsonResult Check(DiscountCheckModel model)
 {
     model.TotalPrice = _orderItemBusiness.Value.GetTotalPrice(model.OrderId, model.LangType, true);
     model.UserId     = model.UserId;
     return(Json(_discountBusiness.Check(model)));
 }