Esempio n. 1
0
        public void MethodShouldWorkProperlyReturnsTrue()
        {
            var repository = new Mock <IDeletableEntityRepository <FamilyKitchenUser> >();

            repository.Setup(x => x.All()).Returns(this.TestDataUserRepository().AsQueryable());

            IFamilyKitchenUsersService usersService = new FamilyKitchenUsersService(repository.Object);
            FamilyKitchenUser          user         = usersService.GetUserByName("*****@*****.**");

            Assert.True(user.Email == "*****@*****.**");
            Assert.False(user.Id == "d3d03427-f9fa-43c2-b88b-5695decf3326");
        }
Esempio n. 2
0
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl           = returnUrl ?? this.Url.Content("~/");
            this.ExternalLogins = (await this.signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
            if (this.ModelState.IsValid)
            {
                var user = new FamilyKitchenUser {
                    UserName = this.Input.Email, Email = this.Input.Email, ShoppingCart = new ShoppingCart(), ClientCard = new ClientCard()
                };
                var result = await this.userManager.CreateAsync(user, this.Input.Password);

                if (result.Succeeded)
                {
                    this.logger.LogInformation("User created a new account with password.");

                    var code = await this.userManager.GenerateEmailConfirmationTokenAsync(user);

                    code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                    var callbackUrl = this.Url.Page(
                        "/Account/ConfirmEmail",
                        pageHandler: null,
                        values: new { area = "Identity", userId = user.Id, code = code },
                        protocol: this.Request.Scheme);

                    await this.emailSender
                    .SendEmailAsync(this.Input.Email, "Confirm your email", $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

                    await this.ClaimCreator(user, this.Input.Nickname, this.Input.PhoneNumber);

                    if (this.userManager.Options.SignIn.RequireConfirmedAccount)
                    {
                        return(this.RedirectToPage("RegisterConfirmation", new { email = this.Input.Email }));
                    }
                    else
                    {
                        await this.signInManager.SignInAsync(user, isPersistent : false);

                        return(this.LocalRedirect(returnUrl));
                    }
                }

                foreach (var error in result.Errors)
                {
                    this.ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            // If we got this far, something failed, redisplay form
            return(this.Page());
        }
Esempio n. 3
0
        private async Task ClaimCreator(FamilyKitchenUser user, string nickname, string phone)
        {
            if (nickname != null)
            {
                var claim = new Claim("Nickname", nickname);

                await this.userManager.AddClaimAsync(user, claim);
            }

            if (phone != null)
            {
                var claim = new Claim("Phone", phone);

                await this.userManager.AddClaimAsync(user, claim);
            }

            await this.userManager.AddToRoleAsync(user, GlobalConstants.FamilyMemberRoleName);
        }
Esempio n. 4
0
        public async Task <bool> ReturnFamilyCart(FamilyKitchenUser moderator, FamilyKitchenUser member)
        {
            if (moderator == null || member == null)
            {
                return(false);
            }

            if (moderator.UserName != member.UserName)
            {
                var memberCart = this.productCartRepository.All().Where(x => x.ShoppingCartId == member.ShoppingCartId).ToList();
                if (memberCart == null)
                {
                    return(false);
                }

                var moderatorCart = memberCart.Select(mc => new ShoppingCartShopProduct
                {
                    ShoppingCartId = moderator.ShoppingCartId,
                    ShopProductId  = mc.ShopProductId,
                    Quantity       = mc.Quantity,
                }).ToList();

                foreach (var entity in moderatorCart)
                {
                    if (this.productCartRepository.All().Any(x => x.ShoppingCartId == entity.ShoppingCartId && x.ShopProductId == entity.ShopProductId))
                    {
                        this.productCartRepository.Update(entity);
                    }
                    else
                    {
                        await this.productCartRepository.AddAsync(entity);
                    }
                }

                foreach (var entity in memberCart)
                {
                    this.productCartRepository.Delete(entity);
                }

                await this.productCartRepository.SaveChangesAsync();
            }

            return(true);
        }
        private async Task OrderEntityUpdate(FamilyKitchenUser user, Order order, IQueryable <ShoppingCartShopProduct> products)
        {
            var productList = products.Select(x => new OrderShopProduct
            {
                OrderId       = order.Id,
                ShopProductId = x.ShopProductId,
                Quantity      = x.Quantity,
                Price         = Math.Round(x.ShopProduct.Price - (x.ShopProduct.Price * x.ShopProduct.Discount / GlobalConstants.PercentageDivider), GlobalConstants.FractionalDigits),
            })
                              .ToList();

            var card = this.clientCardRepository
                       .All()
                       .Where(x => x.Id == user.ClientCardId)
                       .FirstOrDefault();

            var discount   = card.Discount;
            var subTotal   = productList.Sum(x => x.Price * x.Quantity);
            var totalPrice = Math.Round(subTotal - (subTotal * discount / GlobalConstants.PercentageDivider) + order.DeliveryPrice, GlobalConstants.FractionalDigits);

            if (totalPrice < 0)
            {
                totalPrice          = 0;
                order.PaymentStatus = PaymentStatus.Complete;
                order.Status        = OrderStatus.Paid;
            }

            order.OrdersShopProducts = productList;
            order.TotalPrice         = totalPrice;

            this.ordersRepository.Update(order);
            await this.ordersRepository.SaveChangesAsync();

            card.Voucher       = 0;
            card.DeliveryPrice = 10;

            this.clientCardRepository.Update(card);
            await this.clientCardRepository.SaveChangesAsync();
        }
        private Order OrderFactory(FamilyKitchenUser user, OrderProfileInputModel profile, string paymentMethod)
        {
            var card = this.clientCardRepository
                       .All()
                       .Where(x => x.Id == user.ClientCardId)
                       .FirstOrDefault();

            var clientCard = user.ClientCard?.DeliveryPrice;

            var order = new Order()
            {
                Status            = OrderStatus.PayingAwaiting,
                PaymentStatus     = PaymentStatus.Pending,
                PaymentMethod     = (PaymentMethod)Enum.Parse(typeof(PaymentMethod), paymentMethod),
                OrderDate         = DateTime.UtcNow,
                DeliveryDate      = DateTime.UtcNow.AddDays(2),
                DeliveryPrice     = card.DeliveryPrice,
                FamilyKitchenUser = user,
                OrderProfile      = this.mapper.Map <OrderProfile>(profile),
                TotalPrice        = 0,
            };

            return(order);
        }