public CouponValidationToken ValidateCoupon(int priceLineId, int couponOwnerId, int?courseId, int?bundleId, string couponCode) { var result = new CouponValidationToken { IsValid = false , Discount = 0 }; if (string.IsNullOrEmpty(couponCode)) { result.Message = "coupon code required"; return(result); } var code = couponCode.TrimString().OptimizedUrl(); var inst = CouponInstanceRepository.GetMany(x => x.CouponCode.ToLower() == code && ( (courseId != null && x.Coupons.CourseId == courseId) || (bundleId != null && x.Coupons.BundleId == bundleId) || (x.Coupons.OwnerUserId != null && x.Coupons.OwnerUserId == couponOwnerId) ) ).ToList(); if (inst.Count() == 1) { return(ValidateCoupon(priceLineId, couponOwnerId, courseId, bundleId, inst[0].Id)); } result.Message = inst.Count.Equals(0) ? "coupon instance not found" : "multiple coupon instances found. please contact author"; return(result); }
private bool SaveUniqueCouponInstance(int couponId, string code, out string error) { try { var entities = CouponInstanceRepository.GetMany(x => x.CouponId == couponId && x.CouponCode == code).ToList(); if (!entities.Any()) { CouponInstanceRepository.Add((new CouponDTO { CouponId = couponId, CouponCode = code, UsageLimit = 1 }).CourseCouponDto2CouponInstanceEntity(code)); } else { error = "already exists"; return(false); } return(CouponInstanceRepository.UnitOfWork.CommitAndRefreshChanges(out error)); } catch (Exception ex) { error = Utils.FormatError(ex); return(false); } }
private bool SaveCouponInstance(CouponDTO dto, out string error) { try { var entities = CouponInstanceRepository.GetMany(x => x.CouponId == dto.CouponId).ToList(); if (!entities.Any()) { CouponInstanceRepository.Add(dto.CourseCouponDto2CouponInstanceEntity()); } else { if (entities.Count().Equals(1)) { var entity = entities[0]; entity.UpdateCouponInstanceEntity(dto); } //else //{ //TODO ask for logic //} } return(CouponInstanceRepository.UnitOfWork.CommitAndRefreshChanges(out error)); } catch (Exception ex) { error = Utils.FormatError(ex); return(false); } }
private void GetCouponProperties(int couponId, out int usageLimit, out int actualUsage, out string couponCode) { var instances = CouponInstanceRepository.GetMany(x => x.CouponId == couponId).ToList(); var ids = instances.Select(i => i.Id).ToList(); usageLimit = instances.Any() ? (instances.Count == 1 ? instances[0].UsageLimit : instances.Count) : 0; couponCode = instances.Any() ? (instances.Count == 1 ? instances[0].CouponCode : string.Empty) : string.Empty; actualUsage = instances.Any() ? OrderLineRepository.Count(x => x.CouponInstanceId != null && ids.Contains((int)x.CouponInstanceId)) : 0; }