コード例 #1
0
        /// <summary>
        /// Populate DB with currencies.
        /// </summary>
        /// <param name="context">
        /// The context.
        /// </param>
        public static void Populate(ShopAnyWareSql context)
        {
            context.Currencies.Add(
            new Currency
            {
                AlphabeticCode = "USD",
                Entity = "UNITED STATES",
                Name = "US Dollar",
                NumericCode = "840",
                MinorUnit = 2
            });
            context.Currencies.Add(
            new Currency
            {
                AlphabeticCode = "EUR",
                Entity = "Europa",
                Name = "Euro",
                NumericCode = "978",
                MinorUnit = 2
            });
            context.Currencies.Add(
            new Currency
            {
                AlphabeticCode = "RUB",
                Entity = "RUSSIAN FEDERATION",
                Name = "Russian Ruble",
                NumericCode = "643",
                MinorUnit = 2
            });

            context.SaveChanges();
        }
コード例 #2
0
ファイル: GivenSteps.cs プロジェクト: Naviam/Shop-Any-Ware
        public void GivenThereIsAccountWithPasswordInRoleWithFullnameAnd(
            string email, string password, string roleName, string firstName, string lastName)
        {
            Mapper.AssertConfigurationIsValid();
            using (var context = new ShopAnyWareSql())
            {
                var user = context.Users.Include("Profile").Include("Wallet").Include("Roles").SingleOrDefault(u => u.Email == email);
                if (user != null)
                {
                    context.Users.Remove(user);
                    context.SaveChanges();
                }

                var role = context.Roles.SingleOrDefault(r => r.Name == roleName)
                               ?? context.Roles.Add(new Role { Name = roleName });

                var profile = new Profile { FirstName = firstName, LastName = lastName };
                context.Profiles.Add(profile);

                user = new User
                {
                    Email = email,
                    Password = password,
                    Profile = profile,
                    Wallet = new Wallet { Amount = 0m },
                    Roles = new List<Role> { role }
                };

                context.Users.Add(user);
                context.SaveChanges();

                ScenarioContext.Current.Set(user);
            }
        }
コード例 #3
0
 /// <summary>
 /// Get item by Id.
 /// </summary>
 /// <param name="itemId">
 /// The item Id.
 /// </param>
 /// <returns>
 /// The item.
 /// </returns>
 public Item GetItemById(int itemId)
 {
     using (var context = new ShopAnyWareSql())
     {
         return context.ItemsWithImages().SingleOrDefault(item => item.Id.Equals(itemId));
     }
 }
コード例 #4
0
ファイル: OrderItems.cs プロジェクト: Naviam/Shop-Any-Ware
        public void WhenIAddTheFollowingItemsToOrder(string orderNumber, Table table)
        {
            using (var context = new ShopAnyWareSql())
            {
                var order = context.Orders.SingleOrDefault(o => o.OrderNumber.Equals(orderNumber));
                Assert.IsNotNull(order);
                var contoller = this.GetItemsController();
                var itemViewModels = table.CreateSet<OrderItemViewModel>();
                var actuals = new List<OrderItemViewModel>();
                foreach (var itemViewModel in itemViewModels)
                {
                    itemViewModel.OrderId = order.Id;
                    var result = contoller.AddItemToOrder(itemViewModel) as JsonNetResult;
                    Assert.That(result, Is.Not.Null);
                    if (result == null)
                    {
                        continue;
                    }

                    var actual = result.Data as OrderItemViewModel;
                    actuals.Add(actual);
                }

                ScenarioContext.Current.Set(actuals);
            }
        }
コード例 #5
0
 /// <summary>
 /// Get the list of order's products.
 /// </summary>
 /// <param name="orderId">
 /// The order id.
 /// </param>
 /// <returns>
 /// Collection of items.
 /// </returns>
 public List<Item> GetOrderItems(int orderId)
 {
     using (var context = new ShopAnyWareSql())
     {
         var order = context.OrdersWithItemsAndImages().SingleOrDefault(o => o.Id == orderId);
         return order != null ? order.ItemsNotInPackage : null;
     }
 }
コード例 #6
0
 /// <summary>
 /// Get package items.
 /// </summary>
 /// <param name="packageId">
 /// The package id.
 /// </param>
 /// <returns>
 /// Collection of package items.
 /// </returns>
 public List<Item> GetPackageItems(int packageId)
 {
     using (var context = new ShopAnyWareSql())
     {
         var package = context.PackagesWithItemsAndImages().SingleOrDefault(p => p.Id == packageId);
         return package != null ? package.Items : null;
     }
 }
コード例 #7
0
 /// <summary>
 /// Get user's delivery address details.
 /// </summary>
 /// <param name="addressId">
 /// The address id.
 /// </param>
 /// <returns>
 /// User's delivery address details.
 /// </returns>
 public DeliveryAddress GetDeliveryAddressDetails(int addressId)
 {
     using (var context = new ShopAnyWareSql())
     {
         return context.DeliveryAddresses.Include(ad => ad.Country)
                       .SingleOrDefault(ad => ad.Id.Equals(addressId));
     }
 }
コード例 #8
0
ファイル: SeedRetailers.cs プロジェクト: Naviam/Shop-Any-Ware
 /// <summary>
 /// Populate DB with retailers.
 /// </summary>
 /// <param name="context">
 /// The context.
 /// </param>
 /// <param name="fileStorage">
 /// The file storage.
 /// </param>
 public static void Populate(ShopAnyWareSql context, IFileStorage fileStorage)
 {
     var path = fileStorage.MapPath("~/App_Data/retailers.xls");
     var retailersExcel = ExcelHelper.LoadRetailersFromExcelFile(path);
     var retailers = retailersExcel.Select(r => new Retailer(r.Url)).ToList();
     var retailers2 = retailers.Where(r => string.IsNullOrWhiteSpace(r.Url) == false).ToList();
     retailers2.ForEach(r => context.Retailers.Add(r));
     context.SaveChanges();
 }
コード例 #9
0
        /// <summary>
        /// The get transactions for user.
        /// </summary>
        /// <param name="email">
        /// The email.
        /// </param>
        /// <returns>
        /// Collection of transactions.
        /// </returns>
        public List<Transaction> GetTransactionsForUser(string email)
        {
            using (var context = new ShopAnyWareSql())
            {
                var user = context.Users.Include("Wallet.Transactions").Single(u => u.Email.Equals(email));

                return user.Wallet.Transactions;
            }
        }
コード例 #10
0
 /// <summary>
 /// The add transaction.
 /// </summary>
 /// <param name="transaction">
 /// The transaction.
 /// </param>
 /// <returns>
 /// The <see cref="Transaction"/>.
 /// </returns>
 public Transaction AddTransaction(Transaction transaction)
 {
     using (var context = new ShopAnyWareSql())
     {
         var result = context.Transactions.Add(transaction);
         context.SaveChanges();
         return result;
     }
 }
コード例 #11
0
 /// <summary>
 /// The get all received orders paged.
 /// </summary>
 /// <param name="skip">
 /// The skip.
 /// </param>
 /// <param name="take">
 /// The take.
 /// </param>
 /// <returns>
 /// The collection of orders.
 /// </returns>
 public List<Order> GetAllReceivedOrdersPaged(int skip, int take)
 {
     using (var context = new ShopAnyWareSql())
     {
         var query = context.Orders.Where(o => o.Status == OrderStatus.Received)
             .OrderByDescending(o => o.CreatedDate);
         return query.Skip(skip).Take(take).ToList();
     }
 }
コード例 #12
0
 /// <summary>
 /// Get order details.
 /// </summary>
 /// <param name="orderId">
 /// The order id.
 /// </param>
 /// <returns>
 /// Order details.
 /// </returns>
 public Order GetOrderById(int orderId)
 {
     using (var context = new ShopAnyWareSql())
     {
         return
             context.Orders.Include(o => o.User.Profile)
                    .Include(o => o.Retailer)
                    .SingleOrDefault(o => o.Id.Equals(orderId));
     }
 }
コード例 #13
0
ファイル: Hooks.cs プロジェクト: Naviam/Shop-Any-Ware
        public static void BeforeEachScenario()
        {
            using (var context = new ShopAnyWareSql())
            {
                if (context.Database.Exists())
                {
                    context.Database.Delete();
                }

                context.Database.Initialize(true);
                context.Database.CreateIfNotExists();
            }
        }
コード例 #14
0
        /// <summary>
        /// Get the list of user's addresses.
        /// </summary>
        /// <param name="email">
        /// The email.
        /// </param>
        /// <returns>
        /// Collection of user's addresses.
        /// </returns>
        public List<DeliveryAddress> GetDeliveryAddresses(string email)
        {
            if (email == null)
            {
                throw new ArgumentNullException("email");
            }

            using (var context = new ShopAnyWareSql())
            {
                var user = context.Users.SingleOrDefault(u => u.Email == email);
                var addr = context.DeliveryAddresses.Include(da => da.Country).Where(da => da.UserId.Equals(user.Id));

                return addr.ToList();
            }
        }
コード例 #15
0
ファイル: Hooks.cs プロジェクト: Naviam/Shop-Any-Ware
        public static void BeforeMembershipScenarios()
        {
            var context = new ShopAnyWareSql();
            var userRepository = new UserRepository(context);
            var roleRepository = new RoleRepository(context);
            var profileRepository = new ProfileRepository(context);
            var membershipRepository = new MembershipRepository();

            var logger = new FakeLogger();
            var emailService = new FakeEmailService();
            ScenarioContext.Current.Set(emailService);

            var membershipService = new MembershipService(logger, emailService, userRepository, roleRepository, profileRepository, membershipRepository);
            ScenarioContext.Current.Set(membershipService);
        }
コード例 #16
0
        /// <summary>
        /// Confirms transaction. 
        /// </summary>
        /// <param name="token">token from PP API</param>
        /// <param name="payerId">payerId from PP API</param>
        public void ConfirmTransaction(string token, string payerId)
        {
            using (var context = new ShopAnyWareSql())
            {
                var tran = context.Transactions.SingleOrDefault(t => t.Token.Equals(token));
                if (tran == null)
                {
                    throw new InvalidOperationException("Transaction Not Found");
                }

                tran.TransactionStatus = TransactionStatus.Approved;
                tran.PayerId = payerId;
                context.Wallets.Find(tran.WalletId).Amount += tran.OperationAmount;
                context.SaveChanges();
            }
        }
コード例 #17
0
ファイル: SeedOrders.cs プロジェクト: Naviam/Shop-Any-Ware
        /// <summary>
        /// Populate database with few orders.
        /// </summary>
        /// <param name="context">
        /// Shop any ware context.
        /// </param>
        public static void Populate(ShopAnyWareSql context)
        {
            var user = context.Users.SingleOrDefault(u => u.Email == "*****@*****.**");
            var retailer = context.Retailers.Find(1);
            if (user != null)
            {
                user.Orders = new List<Order>
                    {
                        new Order(OrderStatus.New)
                            {
                                Retailer = retailer,
                                CreatedDate = DateTime.UtcNow
                            },
                        new Order(OrderStatus.Received)
                            {
                                Retailer = retailer,
                                CreatedDate = DateTime.UtcNow.AddDays(-5),
                                ReceivedDate = DateTime.UtcNow.AddHours(-3)
                            }
                    };
            }

            context.SaveChanges();
        }
コード例 #18
0
        /// <summary>
        /// The cancel transaction.
        /// </summary>
        /// <param name="token">
        /// The token.
        /// </param>
        /// <exception cref="InvalidOperationException">
        /// Transaction can not be found.
        /// </exception>
        public void CancelTransaction(string token)
        {
            using (var context = new ShopAnyWareSql())
            {
                var tran = context.Transactions.SingleOrDefault(t => t.Token.Equals(token));
                if (tran == null)
                {
                    throw new InvalidOperationException("Transaction Not Found");
                }

                tran.TransactionStatus = TransactionStatus.Canceled;
                context.SaveChanges();
            }
        }
コード例 #19
0
        /// <summary>
        /// The add package payment transaction.
        /// </summary>
        /// <param name="packageId">
        /// The package id.
        /// </param>
        /// <returns>
        /// The <see cref="Tuple"/>.
        /// </returns>
        /// <exception cref="InvalidOperationException">
        /// Balance cannot be negative.
        /// </exception>
        public Tuple<Package, decimal> AddPackagePaymentTransaction(int packageId)
        {
            using (var context = new ShopAnyWareSql())
            {
                var package = context.PackagesWithUserAndWallet().Single(p => p.Id.Equals(packageId));
                var newTransaction = Transaction.CreatePackagePaymentTransaction(package);
                var wallet = package.User.Wallet;
                wallet.PackagePayment(newTransaction.OperationAmount);
                var brokenRules = wallet.GetBrokenRules();
                if (brokenRules.Any())
                {
                    throw new InvalidOperationException("Wallet amount can't be negative");
                }

                package.ChangePackageStatus(PackageStatus.Paid);
                context.Packages.Attach(package);
                context.Entry(package).State = System.Data.EntityState.Modified;
                context.Transactions.Add(newTransaction);
                context.SaveChanges();
                return new Tuple<Package, decimal>(package, wallet.Amount);
            }
        }
コード例 #20
0
 /// <summary>
 /// Gets a list of all the roles for the configured applicationName.
 /// </summary>
 /// <returns>
 /// A string array containing the names of all the roles stored in the data source for the configured applicationName.
 /// </returns>
 public override string[] GetAllRoles()
 {
     using (var context = new ShopAnyWareSql())
     {
         var roles = context.Roles.ToList();
         return roles.Select(role => role.Name).ToArray();
     }
 }
コード例 #21
0
        /// <summary>
        /// Detach item from package.
        /// </summary>
        /// <param name="packageId">
        /// The package Id.
        /// </param>
        /// <param name="itemId">
        /// The item Id.
        /// </param>
        public void DetachItemFromPackage(int packageId, int itemId)
        {
            using (var context = new ShopAnyWareSql())
            {
                var package = context.PackagesWithItems().SingleOrDefault(p => p.Id == packageId);
                if (package != null)
                {
                    var itemToDetach = package.Items.SingleOrDefault(i => i.Id == itemId);

                    if (itemToDetach != null)
                    {
                        package.Items.Remove(itemToDetach);
                        context.SaveChanges();
                    }
                }
            }
        }
コード例 #22
0
        /// <summary>
        /// Add item to an order.
        /// </summary>
        /// <param name="orderId">
        /// The order id.
        /// </param>
        /// <param name="item">
        /// The item.
        /// </param>
        /// <returns>
        /// The TdService.Model.Items.Item.
        /// </returns>
        public Item AddItemToOrder(int orderId, Item item)
        {
            using (var context = new ShopAnyWareSql())
            {
                var newItem = context.Items.Add(item);
                var order = context.OrdersWithItems().SingleOrDefault(o => o.Id == orderId);
                if (order != null)
                {
                    if (order.Items == null)
                    {
                        order.Items = new List<Item>();
                    }

                    order.Items.Add(newItem);
                    context.SaveChanges();
                }

                return newItem;
            }
        }
コード例 #23
0
        /// <summary>
        /// Gets an array of user names in a role where the user name contains the specified user name to match.
        /// </summary>
        /// <returns>
        /// A string array containing the names of all the users where the user name matches <paramref name="usernameToMatch"/> and the user is a member of the specified role.
        /// </returns>
        /// <param name="roleName">The role to search in.</param><param name="usernameToMatch">The user name to search for.</param>
        public override string[] FindUsersInRole(string roleName, string usernameToMatch)
        {
            using (var context = new ShopAnyWareSql())
            {
                var role = context.Roles.SingleOrDefault(r => r.Name == roleName);
                if (role != null)
                {
                    var users = from user in role.Users where user.Email.Contains(usernameToMatch) select user.Email;
                    return users.ToArray();
                }
            }

            return new string[] { };
        }
コード例 #24
0
 /// <summary>
 /// Gets a value indicating whether the specified user is in the specified role for the configured applicationName.
 /// </summary>
 /// <returns>
 /// true if the specified user is in the specified role for the configured applicationName; otherwise, false.
 /// </returns>
 /// <param name="username">The user name to search for.</param><param name="roleName">The role to search in.</param>
 public override bool IsUserInRole(string username, string roleName)
 {
     using (var context = new ShopAnyWareSql())
     {
         var user =
             context.Users.Include("Profile").Include("Roles").SingleOrDefault(u => u.Email == username);
         return user != null && user.Roles.Any(r => r.Name == roleName);
     }
 }
コード例 #25
0
        /// <summary>
        /// Adds image to item
        /// </summary>
        /// <param name="itemId">
        /// The item Id.
        /// </param>
        /// <param name="image">
        /// The image.
        /// </param>
        public void AddImageToItem(int itemId, ItemImage image)
        {
            using (var context = new ShopAnyWareSql())
            {
                var item = context.ItemsWithImages().SingleOrDefault(i => i.Id.Equals(itemId));
                if (item != null)
                {
                    item.Images.Add(image);
                }

                context.SaveChanges();
            }
        }
コード例 #26
0
        /// <summary>
        /// Remove item completely.
        /// </summary>
        /// <param name="itemId">
        /// The item id.
        /// </param>
        /// <returns>
        /// The <see cref="Item"/>.
        /// </returns>
        public Item RemoveItem(int itemId)
        {
            using (var context = new ShopAnyWareSql())
            {
                var item = context.Items.Find(itemId);

                var removedItem = context.Items.Remove(item);
                context.SaveChanges();
                return removedItem;
            }
        }
コード例 #27
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RetailerRepository"/> class.
 /// </summary>
 /// <param name="context">
 /// The context.
 /// </param>
 public RetailerRepository(ShopAnyWareSql context)
 {
     this.context = context;
 }
コード例 #28
0
        /// <summary>
        /// Populate users.
        /// </summary>
        /// <param name="context">
        /// The context.
        /// </param>
        public static void Populate(ShopAnyWareSql context)
        {
            var adminRole = new Role { Name = "Admin", Description = "System Administrator" };
            var shopperRole = new Role { Name = "Shopper", Description = "Main user of the system" };
            var operatorRole = new Role { Name = "Operator", Description = "Person who process orders" };
            var consultantRole = new Role { Name = "Consultant", Description = "Person who help user to solve service issues" };
            context.Roles.Add(adminRole);
            context.Roles.Add(shopperRole);
            context.Roles.Add(operatorRole);
            context.Roles.Add(consultantRole);

            context.SaveChanges();

            // vitali
            var profile = new Profile
            {
                FirstName = "Vitali",
                LastName = "Hatalski",
                UserCulture = "en",
                NotifyOnOrderStatusChanged = true,
                NotifyOnPackageStatusChanged = true
            };
            context.Profiles.Add(profile);
            context.SaveChanges();

            var user = new User
            {
                Email = "*****@*****.**",
                Password = PasswordHash.CreateHash("ruinruin"),
                Profile = profile,
                Roles = new List<Role> { adminRole, shopperRole, operatorRole },
                Wallet = new Wallet { Amount = 0.00m },
                Activated = true
            };
            context.Users.Add(user);
            context.SaveChanges();

            // oleg
            var profileOleg = new Profile
            {
                FirstName = "Oleg",
                LastName = "Voronin",
                NotifyOnOrderStatusChanged = true,
                NotifyOnPackageStatusChanged = true
            };
            context.Profiles.Add(profileOleg);
            context.SaveChanges();

            var userOleg = new User
            {
                Email = "*****@*****.**",
                Password = PasswordHash.CreateHash("1234567"),
                Roles = new List<Role> { adminRole },
                Wallet = new Wallet { Amount = 0.00m },
                Profile = profileOleg,
                ActivationCode = Guid.NewGuid(),
                Activated = true
            };
            context.Users.Add(userOleg);
            context.SaveChanges();

            // shopper
            var profileShopper = new Profile
            {
                FirstName = "Shopper First name",
                LastName = "Shopper Last name",
                NotifyOnOrderStatusChanged = true,
                NotifyOnPackageStatusChanged = true
            };
            context.Profiles.Add(profileShopper);
            context.SaveChanges();

            var shopper = new User
            {
                Email = "*****@*****.**",
                Password = PasswordHash.CreateHash("1111111111"),
                Profile = profileShopper,
                Roles = new List<Role> { shopperRole },
                Wallet = new Wallet { Amount = 0.00m },
                ActivationCode = Guid.NewGuid(),
                Activated = true
            };
            context.Users.Add(shopper);
            context.SaveChanges();

            // operator
            var profileOperator = new Profile
            {
                FirstName = "Operator First name",
                LastName = "Operator Last name",
                NotifyOnOrderStatusChanged = true,
                NotifyOnPackageStatusChanged = true
            };
            context.Profiles.Add(profileOperator);
            context.SaveChanges();

            var operatorUser = new User
            {
                Email = "*****@*****.**",
                Password = PasswordHash.CreateHash("1111111111"),
                Profile = profileOperator,
                Roles = new List<Role> { operatorRole },
                Wallet = new Wallet { Amount = 0.00m },
                ActivationCode = Guid.NewGuid(),
                Activated = true
            };
            context.Users.Add(operatorUser);
            context.SaveChanges();

            // consultant
            var profileConsultant = new Profile
            {
                FirstName = "Consultant First name",
                LastName = "Consultant Last name",
                NotifyOnOrderStatusChanged = true,
                NotifyOnPackageStatusChanged = true
            };
            context.Profiles.Add(profileConsultant);
            context.SaveChanges();

            var consultant = new User
            {
                Email = "*****@*****.**",
                Password = PasswordHash.CreateHash("1111111111"),
                Profile = profileConsultant,
                Roles = new List<Role> { consultantRole },
                Wallet = new Wallet { Amount = 0.00m },
                ActivationCode = Guid.NewGuid(),
                Activated = true
            };
            context.Users.Add(consultant);
            context.SaveChanges();

            // consultant
            var profileKotg = new Profile
            {
                FirstName = "Kotg First name",
                LastName = "Kotg Last name",
                NotifyOnOrderStatusChanged = true,
                NotifyOnPackageStatusChanged = true
            };
            context.Profiles.Add(profileKotg);
            context.SaveChanges();
            var kotg = new User
            {
                Email = "*****@*****.**",
                Password = PasswordHash.CreateHash("2320244"),
                Profile = profileKotg,
                Roles = new List<Role> { adminRole, shopperRole, operatorRole },
                Wallet = new Wallet { Amount = 0 },
                Activated = true
            };
            context.Users.Add(kotg);
            context.SaveChanges();

            for (var i = 0; i < 100; i++)
            {
                var pwd = PasswordHash.CreateHash("111111");
                var s = i.ToString(CultureInfo.InvariantCulture);
                var bulkProfile = new Profile
                                      {
                                          FirstName = "First Name " + s, 
                                          LastName = "Last name " + s, 
                                          NotifyOnOrderStatusChanged = true, 
                                          NotifyOnPackageStatusChanged = true
                                      };
                context.Profiles.Add(bulkProfile);
                context.SaveChanges();

                var bulkUser = new User
                {
                    Email = string.Format("user{0}@gmail.com", s),
                    Password = pwd, 
                    Profile = bulkProfile, 
                    Roles = new List<Role> { shopperRole },
                    Wallet = new Wallet { Amount = 500 },
                    Activated = true
                };
                context.Users.Add(bulkUser);
                context.SaveChanges();
            }
        }
コード例 #29
0
 /// <summary>
 /// Update item.
 /// </summary>
 /// <param name="item">
 /// The item.
 /// </param>
 public void UpdateItem(Item item)
 {
     using (var context = new ShopAnyWareSql())
     {
         context.Entry(item).State = EntityState.Modified;
         context.SaveChanges();
     }
 }
コード例 #30
0
 /// <summary>
 /// Attach item to package.
 /// </summary>
 /// <param name="packageId">
 /// The package id.
 /// </param>
 /// <param name="itemId">
 /// The item id to attach.
 /// </param>
 public void AttachItemToPackage(int packageId, int itemId)
 {
     using (var context = new ShopAnyWareSql())
     {
         var item = context.Items.Find(itemId);
         var package = context.PackagesWithItems().SingleOrDefault(p => p.Id == packageId);
         if (package != null)
         {
             package.Items.Add(item);
             context.SaveChanges();
         }
     }
 }