Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        /// <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));
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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());
            }
        }
Esempio n. 6
0
        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...
        }
Esempio n. 7
0
        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"));
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        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);
            }
        }
Esempio n. 11
0
        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);
        }