Пример #1
0
        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);
            }
        }
Пример #2
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();
        }
Пример #3
0
 /// <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();
 }
 /// <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;
     }
 }
        /// <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();
            }
        }
Пример #6
0
        /// <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();
        }
Пример #7
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();
     }
 }
Пример #8
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();
                    }
                }
            }
        }
Пример #9
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();
         }
     }
 }
Пример #10
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();
            }
        }
Пример #11
0
        public void GivenIHaveTheFollowingOrders(Table table)
        {
            var user = ScenarioContext.Current.Get<User>();
            using (var context = new ShopAnyWareSql())
            {
                var orders = table.CreateSet<Order>().Select(o => { context.Entry(o).State = EntityState.Added; return o; });
                if (user.Orders == null)
                {
                    user.Orders = new List<Order>();
                }

                user.Orders.AddRange(orders);
                context.Entry(user).State = EntityState.Modified;
                context.SaveChanges();

                ScenarioContext.Current.Set(user);
            }
        }
Пример #12
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);
            }
        }
Пример #13
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();
            }
        }
Пример #14
0
        /// <summary>
        /// Add or update delivery address.
        /// </summary>
        /// <param name="email">
        /// The email.
        /// </param>
        /// <param name="address">
        /// The address.
        /// </param>
        /// <returns>
        /// The TdService.Model.Addresses.DeliveryAddress.
        /// </returns>
        public DeliveryAddress AddOrUpdateDeliveryAddress(string email, DeliveryAddress address)
        {
            if (email == null)
            {
                throw new ArgumentNullException("email");
            }

            if (address == null)
            {
                throw new ArgumentNullException("address");
            }

            using (var context = new ShopAnyWareSql())
            {
                var user = context.Users.Include("DeliveryAddresses").Include("Profile").Include("Wallet").Include("Roles").SingleOrDefault(u => u.Email == email);
                if (user == null)
                {
                    throw new InvalidUserException(ErrorCode.UserNotFound.ToString());
                }

                address.UserId = user.Id;
                var addressInDb = address.Id == 0 ? null : context.DeliveryAddresses.Find(address.Id);
                if (addressInDb == null)
                {
                    addressInDb = context.DeliveryAddresses.Add(address);
                    context.SaveChanges();

                    if (user.DeliveryAddresses == null)
                    {
                        user.DeliveryAddresses = new List<DeliveryAddress>();
                    }
                }
                else
                {
                    addressInDb.AddressName = address.AddressName;
                    addressInDb.FirstName = address.FirstName;
                    addressInDb.LastName = address.LastName;
                    addressInDb.Phone = address.Phone;
                    addressInDb.Region = address.Region;
                    addressInDb.State = address.State;
                    addressInDb.ZipCode = address.ZipCode;
                    addressInDb.AddressLine1 = address.AddressLine1;
                    addressInDb.AddressLine2 = address.AddressLine2;
                    addressInDb.AddressLine3 = address.AddressLine3;
                    addressInDb.CountryId = address.CountryId;

                    context.Entry(addressInDb).State = EntityState.Modified;
                    context.SaveChanges();
                }

                addressInDb.Country = context.Countries.Single(c => c.Id.Equals(addressInDb.CountryId));
                return addressInDb;
            }
        }
Пример #15
0
        /// <summary>
        /// Remove delivery address.
        /// </summary>
        /// <param name="email">
        /// The email.
        /// </param>
        /// <param name="address">
        /// The address.
        /// </param>
        /// <returns>
        /// The TdService.Model.Addresses.DeliveryAddress.
        /// </returns>
        public DeliveryAddress RemoveDeliveryAddress(string email, DeliveryAddress address)
        {
            if (email == null)
            {
                throw new ArgumentNullException("email");
            }

            if (address == null)
            {
                throw new ArgumentNullException("address");
            }

            using (var context = new ShopAnyWareSql())
            {
                var user = context.Users.Include("DeliveryAddresses").Include("Profile").Include("Wallet").Include("Roles").SingleOrDefault(u => u.Email == email);
                if (user == null)
                {
                    throw new InvalidUserException(ErrorCode.UserNotFound.ToString());
                }

                var addressToRemove = user.DeliveryAddresses.Find(a => a.Id == address.Id);
                if (addressToRemove != null)
                {
                    user.DeliveryAddresses.Remove(addressToRemove);
                }

                var removedAddress = context.DeliveryAddresses.Remove(addressToRemove);
                context.SaveChanges();
                return removedAddress;
            }
        }
Пример #16
0
        public void GivenThereAreFollowingItemsForPackageInDatabase(string packageName, Table table)
        {
            var user = ScenarioContext.Current.Get<User>();
            var packageId = user.Packages.SingleOrDefault(p => p.Name.Equals(packageName)).Id;
            
            ScenarioContext.Current.Set(packageId, "PackageId");
            var items = table.CreateSet<Item>().Select(i =>
                {
                    i.Dimensions = new Dimensions();
                    i.Weight = new Weight();
                    return i;
                });
            using (var context = new ShopAnyWareSql())
            {
                var package = context.Packages.Find(packageId);
                if (package.Items == null)
                {
                    package.Items = new List<Item>();
                }

                context.Packages.Attach(package);
                package.Items.AddRange(items);
                context.SaveChanges();
                ScenarioContext.Current.Set(package.Items);
            }
        }
Пример #17
0
        public void GivenThereAreFollowingItemsForOrderInDatabase(string orderNumber, Table table)
        {
            var user = ScenarioContext.Current.Get<User>();
            var orderId = user.Orders.SingleOrDefault(o => o.OrderNumber.Equals(orderNumber)).Id;

            var items = table.CreateSet<Item>().Select(i => { i.Dimensions = new Dimensions(); i.Weight = new Weight(); return i; });
            ScenarioContext.Current.Set(orderId, "OrderId");
            using (var context = new ShopAnyWareSql())
            {
                var order = context.Orders.Find(orderId);
                if (order.Items == null)
                {
                    order.Items = new List<Item>();
                }

                order.Items.AddRange(items);
                context.Orders.Attach(order);
                context.SaveChanges();
                ScenarioContext.Current.Set(order.Items);
            }
        }
Пример #18
0
 public void GivenThereAreFollowingOrdersInDatabase(Table table)
 {
     var orders = this.OrdersTransform(table);
     using (var context = new ShopAnyWareSql())
     {
         var addedOrders = orders.Select(order => context.Orders.Add(order)).ToList();
         context.SaveChanges();
         ScenarioContext.Current.Set(addedOrders);
     }
 }
Пример #19
0
        public void GivenIHaveTheFollowingPackages(Table table)
        {
            var packages = table.CreateSet<Package>();
            var user = ScenarioContext.Current.Get<User>();
            using (var context = new ShopAnyWareSql())
            {
                if (user.Packages == null)
                {
                    user.Packages = new List<Package>();
                }

                var addedPackages = packages.Select(p =>
                    {
                        p.CreatedDate = DateTime.Now;
                        p.Dimensions = new Dimensions();
                        return context.Packages.Add(p);
                    });

                user.Packages.AddRange(addedPackages);
                context.SaveChanges();

                ScenarioContext.Current.Set(user);
            }
        }
Пример #20
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;
            }
        }
Пример #21
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;
            }
        }
Пример #22
0
 /// <summary>
 /// Update the order.
 /// </summary>
 /// <param name="order">
 /// The order to update.
 /// </param>
 /// <returns>
 /// The TdService.Model.Orders.Order.
 /// </returns>
 public Order UpdateOrder(Order order)
 {
     using (var context = new ShopAnyWareSql())
     {
         context.Orders.Attach(order);
         context.Entry(order).State = EntityState.Modified;
         context.SaveChanges();
         return order;
     }
 }
Пример #23
0
        /// <summary>
        /// Remove an order.
        /// </summary>
        /// <param name="email">
        /// The email.
        /// </param>
        /// <param name="orderId">
        /// The order ID to remove.
        /// </param>
        /// <returns>
        /// The TdService.Model.Orders.Order.
        /// </returns>
        public Order RemoveOrder(string email, int orderId)
        {
            using (var context = new ShopAnyWareSql())
            {
                var user = context.Users.Include("Profile").Include("Wallet").Include("Orders").Include("Roles").SingleOrDefault(u => u.Email == email);
                if (user == null)
                {
                    throw new ArgumentNullException(ErrorCode.UserNotFound.ToString());
                }

                var order = user.RemoveOrder(orderId);
                context.Orders.Attach(order);
                //// TODO : make a cascading delete in the database
                context.Entry(order).Collection(o => o.Items).Load();
                context.Orders.Remove(order);
                context.SaveChanges();
                return order;
            }
        }
        /// <summary>
        /// Removes a role from the data source for the configured applicationName.
        /// </summary>
        /// <returns>
        /// true if the role was successfully deleted; otherwise, false.
        /// </returns>
        /// <param name="roleName">The name of the role to delete.</param><param name="throwOnPopulatedRole">If true, throw an exception if <paramref name="roleName"/> has one or more members and do not delete <paramref name="roleName"/>.</param>
        public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
        {
            using (var context = new ShopAnyWareSql())
            {
                var role = context.Roles.SingleOrDefault(r => r.Name == roleName);
                context.Roles.Remove(role);
                context.SaveChanges();
            }

            return true;
        }
 /// <summary>
 /// Adds a new role to the data source for the configured applicationName.
 /// </summary>
 /// <param name="roleName">The name of the role to create.</param>
 public override void CreateRole(string roleName)
 {
     using (var context = new ShopAnyWareSql())
     {
         var role = new Role { Name = roleName, Description = string.Empty };
         context.Roles.Add(role);
         context.SaveChanges();
     }
 }
Пример #26
0
        public void GivenIHaveTheFollowingDeliveryAddresses(Table table)
        {
            var addresses = table.CreateSet<DeliveryAddress>();
            var user = ScenarioContext.Current.Get<User>();
            using (var context = new ShopAnyWareSql())
            {
                context.Wallets.Attach(user.Wallet);
                context.Profiles.Attach(user.Profile);
                context.Users.Attach(user);
                if (user.DeliveryAddresses == null)
                {
                    user.DeliveryAddresses = new List<DeliveryAddress>();
                }

                var addedAddresses = addresses.Select(deliveryAddress => context.DeliveryAddresses.Add(deliveryAddress)).ToList();
                context.SaveChanges();

                user.DeliveryAddresses.AddRange(addedAddresses.ToList());
                context.Entry(user).State = EntityState.Modified;
                context.SaveChanges();

                ScenarioContext.Current.Set(user);
            }
        }
Пример #27
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();
            }
        }
Пример #28
0
        /// <summary>
        /// Add order.
        /// </summary>
        /// <param name="email">
        /// The email.
        /// </param>
        /// <param name="order">
        /// The order to add.
        /// </param>
        /// <returns>
        /// The TdService.Model.Orders.Order.
        /// </returns>
        public Order AddOrder(string email, Order order)
        {
            using (var context = new ShopAnyWareSql())
            {
                var user = context.Users.Include("Profile").Include("Wallet").Include("Roles").Include("Orders")
                    .SingleOrDefault(u => u.Email == email);
                if (user == null)
                {
                    throw new ArgumentNullException(ErrorCode.UserNotFound.ToString());
                }

                order.Retailer = context.Retailers.SingleOrDefault(r => r.Url == order.Retailer.Url)
                               ?? context.Retailers.Add(order.Retailer);
                context.Orders.Add(order);
                if (user.Orders == null)
                {
                    user.Orders = new List<Order>();
                }

                user.AddOrder(order);
                context.Entry(user).State = EntityState.Modified;
                context.SaveChanges();

                return order;
            }
        }