Exemplo n.º 1
0
        public void AddProductOrderEntry(ProductOrderEntry entry)
        {
            if (ProductOrderEntries == null)
            {
                ProductOrderEntries = new HashSet<ProductOrderEntry>();
            }

            ProductOrderEntries.Add(entry);
        }
Exemplo n.º 2
0
        public void AddProductOrderEntry(ProductOrderEntry entry)
        {
            if (ProductOrderEntries == null)
            {
                ProductOrderEntries = new HashSet <ProductOrderEntry>();
            }

            ProductOrderEntries.Add(entry);
        }
Exemplo n.º 3
0
        public async Task<Order> CreateOrder()
        {
            AppUser user = await GetCurrentUser();

            if (!user.AssertValidOrder())
            {
                return null;
            }

            DateTime orderDate = new DateTime();
            orderDate = DateTime.Now;

            Order order = new Order(user, orderDate);
            userRepository.InsertOrder(order);
            this.unitOfWork.Save();

            ICollection<ShoppingCartEntry> cartEntries = user.ShoppingCartEntries;
            
            foreach (ShoppingCartEntry entry in cartEntries)
            {
                List<ProductKey> keys = listingRepository.GetProductKeys().Where(k => k.ListingID == entry.ListingID).Take(entry.Quantity).ToList();
                int remainingQuantity = entry.Quantity - keys.Count;

                if (keys.Count > 0 && keys.Count < entry.Quantity && entry.Listing.ChildListings != null)
                {
                    foreach (ProductKey productKey in keys)
                    {
                        listingRepository.DeleteProductKey(productKey.ProductKeyID);

                        ClaimedProductKey claimedKey = new ClaimedProductKey(productKey, user, orderDate, "Purchase - Order #" + order.OrderID);
                        user.AddClaimedProductKey(claimedKey);
                        userRepository.InsertClaimedProductKey(claimedKey);
                        unitOfWork.Save();

                        //unitOfWork.Save();

                        ProductOrderEntry orderEntry = new ProductOrderEntry(order, entry);
                        order.AddProductOrderEntry(orderEntry);
                        userRepository.InsertProductOrderEntry(orderEntry);
                        unitOfWork.Save();
                        orderEntry.AddClaimedProductKey(claimedKey);
                    }

                    keys = new List<ProductKey>();
                    
                    foreach (Listing childListing in entry.Listing.ChildListings)
                    {
                        keys.AddRange(listingRepository.GetProductKeys().Where(k => k.ListingID == childListing.ListingID).Take(remainingQuantity));
                    }
                }
                else if (keys.Count < entry.Quantity && entry.Listing.ChildListings != null)
                {
                    foreach (Listing childListing in entry.Listing.ChildListings)
                    {
                        keys.AddRange(listingRepository.GetProductKeys().Where(k => k.ListingID == childListing.ListingID).Take(entry.Quantity));
                    }
                }

                if (entry.Listing.ChildListings == null || entry.Listing.ChildListings.Count == 0 || keys.Count == entry.Quantity)
                {
                    foreach (ProductKey productKey in keys)
                    {
                        listingRepository.DeleteProductKey(productKey.ProductKeyID);

                        ClaimedProductKey claimedKey = new ClaimedProductKey(productKey, user, orderDate, "Purchase - Order #" + order.OrderID);
                        user.AddClaimedProductKey(claimedKey);
                        userRepository.InsertClaimedProductKey(claimedKey);
                        unitOfWork.Save();

                        ProductOrderEntry orderEntry = new ProductOrderEntry(order, entry);
                        userRepository.InsertProductOrderEntry(orderEntry);
                        unitOfWork.Save();
                        orderEntry.AddClaimedProductKey(claimedKey);

                        order.AddProductOrderEntry(orderEntry);
                    }
                }
                else
                {
                    for (int i = 0; i < remainingQuantity; i++)
                    {
                        ProductOrderEntry orderEntry = new ProductOrderEntry(order, entry);
                        order.AddProductOrderEntry(orderEntry);
                        userRepository.InsertProductOrderEntry(orderEntry);
                        unitOfWork.Save();

                        foreach (Listing childListing in entry.Listing.ChildListings)
                        {
                            ProductKey productKey = keys.Where(k => k.Listing.ListingID == childListing.ListingID).First();
                            keys.Remove(productKey);
                            listingRepository.DeleteProductKey(productKey.ProductKeyID);

                            ClaimedProductKey claimedKey = new ClaimedProductKey(productKey, user, orderDate, "Purchase - Order #" + order.OrderID);
                            userRepository.InsertClaimedProductKey(claimedKey);
                            unitOfWork.Save();
                            orderEntry.AddClaimedProductKey(claimedKey);
                            user.AddClaimedProductKey(claimedKey);
                        }

                        order.AddProductOrderEntry(orderEntry);
                    }
                }

                Listing listing = listingRepository.GetListingByID(entry.ListingID);
                listing.Quantity -= entry.Quantity;
                listing.UpdateParentQuantities();
                listingRepository.UpdateListing(listing);
                
                unitOfWork.Save();
            }

            await DeleteShoppingCart();

            BalanceEntry balanceEntry = new BalanceEntry(user, "Purchase - Order #" + order.OrderID, 0 - order.TotalSalePrice() , orderDate);
            user.BalanceEntries.Add(balanceEntry);
            //userRepository.InsertBalanceEntry(balanceEntry);

            user.Balance -= order.TotalSalePrice();
            user.AddOrder(order);
            await userRepository.UpdateAppUser(user);

            this.unitOfWork.Save();

            return userRepository.GetOrderByID(order.OrderID);
        }
Exemplo n.º 4
0
        public void EditProductOrderEntry(ProductOrderEntry orderEntry)
        {
            ProductOrderEntry updatedEntry = userRepository.GetProductOrderEntryByID(orderEntry.ProductOrderEntryID);

            if (orderEntry.ListingID != 0)
            {
                updatedEntry.ListingID = orderEntry.ListingID;
            }

            updatedEntry.SalePrice = orderEntry.SalePrice;

            userRepository.UpdateProductOrderEntry(updatedEntry);
            unitOfWork.Save();
        }
Exemplo n.º 5
0
        public void UpdateProductOrderEntry(ProductOrderEntry productOrderEntry)
        {
            ProductOrderEntry targetOrderProduct = context.ProductOrderEntries.Find(productOrderEntry.ProductOrderEntryID);

            if (targetOrderProduct != null)
            {
                targetOrderProduct.SalePrice = productOrderEntry.SalePrice;
                targetOrderProduct.ListingID = productOrderEntry.ListingID;
            }

            foreach (ClaimedProductKey key in productOrderEntry.ClaimedProductKeys)
            {
                if (key.ClaimedProductKeyID == 0)
                {
                    InsertClaimedProductKey(key);
                }
                else
                {
                    UpdateClaimedProductKey(key);
                }
            }
        }
Exemplo n.º 6
0
        public void InsertProductOrderEntry(ProductOrderEntry productOrderEntry)
        {
            context.ProductOrderEntries.Add(productOrderEntry);

            foreach (ClaimedProductKey key in productOrderEntry.ClaimedProductKeys)
            {
                if (key.ClaimedProductKeyID == 0)
                {
                    InsertClaimedProductKey(key);
                }
                else
                {
                    UpdateClaimedProductKey(key);
                }
            }
        }