public ServiceResult TransferRegistration(int existingRegistrationId, string name, string email) { ServiceResult result = null; IEmailService emailService = new EmailService(); var discountService = new DiscountService(this._repository, false); Registration transferReg = _repository.Registrations.Find(x => x.RegistrationId == existingRegistrationId); transferReg.RegistrationStatus = RegistrationStatus.Held; transferReg.DateUpdated = DateTime.Now; var newTransferCode = new RedemptionCode { GeneratingRegistrationId = existingRegistrationId, Code = discountService.GenerateDiscountCode(), RedemptionCodeType = RedemptionCodeType.Transfer, Value = GetRegistrationPathValue(existingRegistrationId), DiscountType = DiscountType.Dollars }; result = discountService.CreateRedemptionCode(newTransferCode); if (!_sharedRepository) { _repository.SaveChanges(); emailService.SendTransferEmail(newTransferCode.DiscountItemId, name, email); } return(result); }
/// <summary> /// Get the current redemptionCode of a redemptionCode. The cache is not bypassed by default. /// </summary> /// <param name="redemptionCodeId">The redemptionCode identifier</param> /// <param name="noCache">Bypass the cache</param> /// <param name="refreshCache">Force refresh the cache</param> /// <returns>A redemptionCode</returns> public RedemptionCode GetRedemptionCode(int redemptionCodeId, bool noCache, bool refreshCache) { // If no cache the load and return a entity from the database if (noCache && !refreshCache) { return(LoadRedemptionCode(redemptionCodeId)); } RedemptionCode redemptionCode; string cacheKey = RedemptionCode.GetCacheKeyById(redemptionCodeId); if (!CacheManagerProvider.GetCacheManagerInstance().Contains <RedemptionCode>(cacheKey) || refreshCache) { // Load the entity from the database redemptionCode = LoadRedemptionCode(redemptionCodeId); if (redemptionCode != null) { // Add the entity to the cache by reading caching parameters from the configuration CacheManagerProvider.GetCacheManagerInstance().Insert(cacheKey, redemptionCode, ConfigurationManager.GetCacheExpirationByType( redemptionCode.GetType())); } } else { redemptionCode = CacheManagerProvider.GetCacheManagerInstance().Get <RedemptionCode>(cacheKey); } return(redemptionCode); }
public ActionResult Index() { var userId = ClaimsPrincipal.Current.Claims.First(c => c.Type == Constants.ObjectIdClaim).Value; var model = new RedemptionCode(); return(View(model)); }
public override int GetHashCode() { int hashcode = 1; const int prime = 31; hashcode = hashcode * prime + Name.GetHashCode(); hashcode = hashcode * prime + RedemptionCode.GetHashCode(); hashcode = hashcode * prime + ExpiresOn.GetHashCode(); return(hashcode); }
public DiscountItem GetDiscountByCode(string code) { RedemptionCode redemptionCode = _repository.RedemptionCodes.Filter(x => x.Code.ToLower() == code.ToLower()).FirstOrDefault(); if (redemptionCode != null) { return(redemptionCode); } else { return(_repository.Coupons.Filter(x => x.Code.ToLower() == code.ToLower() && x.StartDateTime <= DateTime.Now && (x.EndDateTime == null || x.EndDateTime > DateTime.Now)).OrderByDescending(x => x.StartDateTime).FirstOrDefault()); } }
private bool NeedToRemoveProcessingFee(SessionCart currentCart, RedemptionCode code) { if (!NeedToRemoveProcessingFee(currentCart)) // check base method { return(false); } if (code.RedemptionCodeType == RedemptionCodeType.StraightValue || // check out redemption type code.RedemptionCodeType == RedemptionCodeType.Transfer) { return(true); } return(false); // no good reason to remove it... }
public ServiceResult ValidateRedemptionCodeForUserId(string code, int userId) { ServiceResult result = new ServiceResult(); try { //User user = _repository.Users.Find(x => x.UserId == userId); RedemptionCode redemptionCode = _repository.RedemptionCodes.Find(x => x.Code.ToLower() == code.ToLower()); if (redemptionCode != null) { if (redemptionCode.ResultingRegistrationId == null) { if (redemptionCode.RedemptionCodeType == RedemptionCodeType.Transfer && !(redemptionCode.DateAdded >= DateTime.Now.AddDays(-DirtyGirlServiceConfig.Settings.MaxTransferHeldDays))) { redemptionCode.GeneratingRegistration.RegistrationStatus = RegistrationStatus.Cancelled; redemptionCode.RedemptionCodeType = RedemptionCodeType.StraightValue; redemptionCode.GeneratingRegistration.DateUpdated = DateTime.Now; if (!_sharedRepository) { _repository.SaveChanges(); } } else if (redemptionCode.RedemptionCodeType == RedemptionCodeType.StraightValue && redemptionCode.GeneratingRegistration.UserId != userId) { result.AddServiceError("This redemption code is expired or doesn't belong to you."); } } else { result.AddServiceError("This code has already been used."); } } else { result.AddServiceError("Discount does not exist."); } } catch (Exception ex) { result.AddServiceError(Utilities.GetInnerMostException(ex)); } return(result); }
public ActionResult Index([Bind(Include = "Code")] RedemptionCode rcode) // may be other attrs for user setup { try { var userId = ClaimsPrincipal.Current.Claims.First(c => c.Type == Constants.ObjectIdClaim).Value; var code = db.NewUserCodes. First(c => (c.Code == rcode.Code) && (DateTime.Compare(DateTime.UtcNow, rcode.ExpiresBy) > 0)); db.UserRoles.Add(new UserRole { TenantId = code.TenantId, UserObjectId = userId, Role = code.Role }); db.NewUserCodes.Remove(code); db.SaveChanges(); var id = (ClaimsIdentity)(ClaimsPrincipal.Current.Identity); // Remove current claims foreach (var role in id.FindAll("role")) { id.RemoveClaim(role); // remove roles in previous default tenant } var tenantIdClaim = id.FindFirst(Constants.TenantIdClaim); if (tenantIdClaim != null) { id.RemoveClaim(tenantIdClaim); var tenantNameClaim = id.FindFirst(Constants.TenantNameClaim); id.RemoveClaim(tenantNameClaim); } // Replace with new claims var tenantName = db.Tenants.First(t => t.Id == code.TenantId).Name; id.AddClaim(new Claim(Constants.TenantIdClaim, code.TenantId)); id.AddClaim(new Claim(Constants.TenantNameClaim, tenantName)); id.AddClaim(new Claim("role", code.Role)); Request.GetOwinContext().Authentication.SignIn(id); ViewBag.Message = "User created"; } catch (Exception ex) { ViewBag.Message = ex.Message; } return(RedirectToAction("Index", "Business")); }
public ServiceResult CreateRedemptionCode(RedemptionCode redemptionCode) { var result = new ServiceResult(); try { _repository.RedemptionCodes.Create(redemptionCode); if (!_sharedRepository) { _repository.SaveChanges(); } } catch (Exception ex) { result.AddServiceError(Utilities.GetInnerMostException(ex)); } return(result); }
public bool SendCancellationEmail(int discountItemId) { try { RedemptionCode redemptionCode = _repository.RedemptionCodes.Find(x => x.DiscountItemId == discountItemId); string messageBody = File.ReadAllText(emailTemplatePath + DirtyGirlServiceConfig.Settings.CancellationEmailBody) .Replace("{Name}", redemptionCode.GeneratingRegistration.FirstName) .Replace("{WaveDetails}", string.Format("{0} {1}", redemptionCode.GeneratingRegistration.EventWave.EventDate.DateOfEvent.ToString("dddd MMMM, dd yyyy"), redemptionCode.GeneratingRegistration.EventWave.StartTime.ToString("h:mm tt"))) .Replace("{Code}", redemptionCode.Code); SendEmail(redemptionCode.GeneratingRegistration.Email, DirtyGirlServiceConfig.Settings.CancellationEmailSubject, messageBody); return(true); } catch (Exception ex) { Elmah.ErrorSignal.FromCurrentContext().Raise(ex); return(false); } }
private bool ApplyDiscount(CartSummary cartSummary, SessionCart currentCart) { DiscountItem discount = _repository.DiscountItems.Find(x => x.Code.ToLower() == currentCart.DiscountCode.ToLower()); if (discount != null) { if (cartSummary.TotalCost == 0) { discount = null; currentCart.DiscountCode = null; cartSummary.SummaryMessages.Add("You cannot apply a discount code to this cart. There are no charges."); } if (discount is RedemptionCode) { var discountableRegList = cartSummary.CartItems.Where(x => x.PurchaseType == PurchaseType.Registration && x.Discountable == true).OrderByDescending(x => x.ItemCost).ToList(); if (discountableRegList.Count() > 0) { RedemptionCode code = (RedemptionCode)discount; IDiscountService discountService = new DiscountService(this._repository, false); ServiceResult validationResult = discountService.ValidateDiscount(code); if (validationResult.Success) { var cost = discountableRegList[0].ItemCost; var discountValue = code.DiscountType == DiscountType.Dollars ? code.Value : cost * (code.Value / 100); discountableRegList[0].DiscountItemId = code.DiscountItemId; discountableRegList[0].DiscountDescription = code.Code; discountableRegList[0].DiscountType = code.DiscountType; discountableRegList[0].DiscountValue = discountableRegList[0].ItemTotal <= 0 ? cost : discountValue; if (NeedToRemoveProcessingFee(currentCart, code)) { RemoveProcessingFee(cartSummary); } } else { cartSummary.SummaryMessages.Add(validationResult.GetServiceErrors().First().ErrorMessage); } } else { cartSummary.SummaryMessages.Add("There are no applicable items for this discount."); } } if (discount is Coupon) { Coupon coupon = (Coupon)discount; IDiscountService discountService = new DiscountService(this._repository, false); ServiceResult validationResult = discountService.ValidateDiscount(coupon); if (validationResult.Success) { switch (coupon.CouponType) { case CouponType.Registration: var discountableRegList = cartSummary.CartItems.Where( x => x.PurchaseType == PurchaseType.Registration && x.Discountable == true && x.EventId == ((coupon.EventId.HasValue) ? coupon.EventId.Value : x.EventId)).OrderByDescending(x => x.ItemCost).ToList(); if (discountableRegList.Any()) { var cost = discountableRegList[0].ItemCost; var discountValue = coupon.DiscountType == DiscountType.Dollars ? coupon.Value : cost * (coupon.Value / 100); var discountedCost = cost - discountValue; discountableRegList[0].DiscountItemId = coupon.DiscountItemId; discountableRegList[0].DiscountDescription = coupon.Code; discountableRegList[0].DiscountType = coupon.DiscountType; discountableRegList[0].DiscountValue = discountableRegList[0].ItemTotal <= 0 ? cost : discountValue; if (NeedToRemoveProcessingFee(currentCart, coupon)) { RemoveProcessingFee(cartSummary); } } else { cartSummary.SummaryMessages.Add("There are no applicable items for this discount."); } break; } } else { cartSummary.SummaryMessages.Add(validationResult.GetServiceErrors().First().ErrorMessage); } } } else { cartSummary.SummaryMessages.Add("This discount does not exist."); } return(cartSummary.SummaryMessages.Count <= 0); }