Example #1
0
        public void CreateBalanceEntry(string notes, int pointsAdjusted, DateTime date, Objective objective)
        {
            if (pointsAdjusted == 0)
            {
                return;
            }

            BalanceEntry entry = new BalanceEntry(this, notes, pointsAdjusted, date);

            entry.Objective = objective;

            if (objective.BalanceEntries == null)
            {
                objective.BalanceEntries = new HashSet <BalanceEntry>();
            }

            objective.BalanceEntries.Add(entry);

            if (BalanceEntries == null)
            {
                BalanceEntries = new HashSet <BalanceEntry>();
            }

            BalanceEntries.Add(entry);

            Balance = Balance + pointsAdjusted;
        }
Example #2
0
        public void AddBalanceEntry(BalanceEntry entry)
        {
            if (BalanceEntries == null)
            {
                BalanceEntries = new HashSet <BalanceEntry>();
            }

            BalanceEntries.Add(entry);
        }
Example #3
0
        public void CreateBalanceEntry(Objective objective, DateTime date)
        {
            if (objective == null || objective.FixedReward() <= 0)
            {
                return;
            }

            BalanceEntry entry = new BalanceEntry(this, "Objective reward for \"" + objective.ObjectiveName + "\"", objective.FixedReward(), date);

            entry.Objective = objective;

            if (BalanceEntries == null)
            {
                BalanceEntries = new HashSet <BalanceEntry>();
            }

            BalanceEntries.Add(entry);

            Balance = Balance + objective.FixedReward();
        }
Example #4
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);
        }
Example #5
0
        public void CreateBalanceEntry(string notes, int pointsAdjusted, DateTime date)
        {
            BalanceEntry entry = new BalanceEntry(this, notes, pointsAdjusted, date);

            if (BalanceEntries == null)
            {
                BalanceEntries = new HashSet<BalanceEntry>();
            }

            BalanceEntries.Add(entry);

            Balance = Balance + pointsAdjusted;
        }
Example #6
0
        public void AddBalanceEntry(BalanceEntry entry)
        {
            if (BalanceEntries == null)
            {
                BalanceEntries = new HashSet<BalanceEntry>();
            }

            BalanceEntries.Add(entry);
        }
 public ActivityFeedContainer(BalanceEntry entry)
     : this()
 {
     ItemDate = (entry.Date == null) ? siteEpoch : entry.Date;
     BalanceEntry = entry;
 }
Example #8
0
        public async Task CreateOrder(Order order, bool alreadyCharged, bool useDBKey = false)
        {
            // New orders should only have one product order entry
            ProductOrderEntry entry = order.ProductOrderEntries.FirstOrDefault();

            if (entry.ListingID != 0)
            {
                entry.Listing = listingRepository.GetListingByID(entry.ListingID);
            }
            
            DateTime date = DateTime.Now;
            order.SaleDate = date;

            String note = "Admin-created order";

            ClaimedProductKey newKey = new ClaimedProductKey();

            int priceToCharge = 0;

            if (order.ProductOrderEntries.Count() > 0)
            {
                priceToCharge = order.ProductOrderEntries.First().SalePrice;
            }
            
            if (useDBKey)
            {
                ProductKey key = GetProductKey(entry.ListingID);
                newKey = new ClaimedProductKey(key, order.AppUser, date, note);
                listingRepository.DeleteProductKey(key.ProductKeyID);
                unitOfWork.Save();

                priceToCharge = newKey.Listing.SaleOrDefaultPrice();

                entry.AddClaimedProductKey(newKey);//userRepository.InsertClaimedProductKey(newKey);
            }

            if (alreadyCharged == false)
            {
                BalanceEntry balanceEntry = new BalanceEntry();
                balanceEntry.Date = date;
                balanceEntry.AppUser = order.AppUser;
                balanceEntry.Notes = note;
                balanceEntry.PointsAdjusted = priceToCharge;
                order.AppUser.Balance -= priceToCharge;

                //userRepository.UpdateAppUser(order.AppUser);
                //userRepository.InsertBalanceEntry(balanceEntry);
                order.AppUser.AddBalanceEntry(balanceEntry);
            }
            
            entry.SalePrice = priceToCharge;
            order.AppUser.AddOrder(order);
            //userRepository.InsertOrder(order);
            await userRepository.UpdateAppUser(order.AppUser);
            unitOfWork.Save();
        }
Example #9
0
        public async Task EditBalanceEntry(BalanceEntry entry, int objectiveId)
        {
            BalanceEntry updatedEntry = userRepository.GetBalanceEntryByID(entry.BalanceEntryID);

            int pointsChange = 0;

            if (objectiveId == 0)
            {
                pointsChange = entry.PointsAdjusted - updatedEntry.PointsAdjusted;
            }
            else
            {
                if (updatedEntry.Objective == null)
                {
                    updatedEntry.AddObjective(objectiveRepository.GetObjectiveByID(objectiveId));
                }
                else if (updatedEntry.Objective.ObjectiveID != objectiveId)
                {
                    updatedEntry.AddObjective(objectiveRepository.GetObjectiveByID(objectiveId));
                }

                pointsChange = updatedEntry.Objective.FixedReward() - updatedEntry.PointsAdjusted;
            }

            updatedEntry.AppUser.Balance += pointsChange;

            await UserManager.UpdateAsync(updatedEntry.AppUser);

            updatedEntry.PointsAdjusted = entry.PointsAdjusted;
            updatedEntry.Notes = entry.Notes;
            
            userRepository.UpdateBalanceEntry(updatedEntry);
            unitOfWork.Save();
        }
Example #10
0
        public async Task CreateBalanceEntry(BalanceEntry entry, int objectiveId)
        {
            if (objectiveId != 0)
            {
                entry.AddObjective(objectiveRepository.GetObjectiveByID(objectiveId));

                if (entry.PointsAdjusted == 0)
                {
                    entry.PointsAdjusted = entry.Objective.FixedReward();
                }
            }

            entry.AppUser.Balance += entry.PointsAdjusted;

            await UserManager.UpdateAsync(entry.AppUser);

            entry.Date = DateTime.Now;

            userRepository.InsertBalanceEntry(entry);
            unitOfWork.Save();
        }
Example #11
0
        public async Task CreateBalanceEntry(BalanceEntry entry, int objectiveId, string nickname)
        {
            if (objectiveId != 0)
            {
                entry.Objective = objectiveRepository.GetObjectiveByID(objectiveId);
                if (entry.PointsAdjusted == 0)
                {
                    entry.PointsAdjusted = entry.Objective.FixedReward();
                }
            }

            if (String.IsNullOrEmpty(nickname) == false)
            {
                entry.AppUser = userRepository.GetAppUsers().Where(a => object.Equals(nickname.ToUpper(), a.UserName.ToUpper())).SingleOrDefault();
            }

            if (entry.AppUser == null)
            {
                return;
            }

            entry.AppUser.Balance += entry.PointsAdjusted;

            await UserManager.UpdateAsync(entry.AppUser);

            entry.Date = DateTime.Now;

            userRepository.InsertBalanceEntry(entry);
            unitOfWork.Save();
        }
Example #12
0
        public void UpdateBalanceEntry(BalanceEntry balanceEntry)
        {
            BalanceEntry targetBalanceEntry = context.BalanceEntries.Find(balanceEntry.BalanceEntryID);

            if (targetBalanceEntry != null)
            {
                targetBalanceEntry.PointsAdjusted = balanceEntry.PointsAdjusted;
                targetBalanceEntry.Notes = balanceEntry.Notes;
                targetBalanceEntry.UserID = balanceEntry.UserID;
                targetBalanceEntry.Date = balanceEntry.Date;
            }
        }
Example #13
0
 public void InsertBalanceEntry(BalanceEntry balanceEntry)
 {
     context.BalanceEntries.Add(balanceEntry);
 }