public ProductsReport Create(AggregateId id, IReadOnlyCollection <Product> products, IReadOnlyCollection <Order> orders, int maxRank) { if (products == null || !products.Any()) { throw new EmptyProductsException(); } if (orders == null || !orders.Any()) { throw new EmptyOrdersException(); } maxRank = maxRank > 0 ? maxRank : 3; var productsSales = _salesCalculator.Calculate(products, orders); var rankings = new List <ProductRank>(); var currentRank = 1; foreach (var sales in productsSales.OrderByDescending(p => p.TotalSales)) { var product = products.Single(p => p.Id.Equals(sales.ProductId)); var totalEarnings = product.Price * sales.TotalSales; var rank = new ProductRank(product.Id, product.Name, product.Price, product.Vendor, currentRank, sales.TotalSales, totalEarnings); rankings.Add(rank); if (currentRank == maxRank) { break; } currentRank++; } return(new ProductsReport(id, rankings)); }
public async Task <int> SaveDataAsync(ProductVM viewModel) { var entity = _mapper.Map <ProductVM, Product>(viewModel); if (viewModel.PublicationDate == DateTime.MinValue) { entity.PublicationDate = DateTime.Now; } //Update product rating var rank = new ProductRank { ProductId = entity.ProductId, Name = entity.Name, CategoryId = entity.CategoryId, Rate = 0, Sold = 0 }; if (viewModel.ProductId == 0) { entity.CreateBy = "admin"; entity.UpdateBy = "admin"; entity.CreateDate = DateTime.Now; entity.UpdatedDate = DateTime.Now; entity.UniqueStringKey = Guid.NewGuid(); entity.Authors = new List <Author>() { await _authorDetailRepository.GetAuthorById(1) }; var zeroDiscount = await _discountRepository.GetSingleByIDAsync(1); entity.Discount = zeroDiscount; await _productRepository.AddAsync(entity); await _productRankRepository.AddAsync(rank); } else { entity.UpdatedDate = DateTime.Now; await _productRepository.UpdateAsync(entity); await _productRankRepository.UpdateAsync(rank); } return(await _unitOfWork.SaveAsync()); }
private void SeedMockData(WebBanSach_2_0DbContext context, bool isTrue) { if (isTrue) { var userStore = new UserStore <ApplicationUser>(context); var userManager = new UserManager <ApplicationUser>(userStore); var ZeroDiscount = context.Discounts.FirstOrDefault(m => m.DiscountId == 1); var undefinedAuthor = context.Authors.FirstOrDefault(m => m.AuthorId == 1); //Seed Mock Data //Add Product for (int i = 0; i < 30; i++) { var product = new Product { ProductId = i, CategoryId = 1, CreateDate = DateTime.Now, PublicationDate = DateTime.Now, CreateBy = "admin", Name = "Book " + i, NameAlias = "book-" + i, Price = 10000, Status = true }; product.Discount = ZeroDiscount; product.Authors = new List <Author> { undefinedAuthor }; context.Products.Add(product); context.SaveChanges(); var rank = new ProductRank { ProductId = product.ProductId, Name = product.Name, CategoryId = product.CategoryId, Rate = 0, Sold = 0 }; context.ProductRanks.Add(rank); } //Add Account string[] roles = new string[4] { "user", "mod", "employee", "shipper" }; Random random = new Random(); List <ApplicationUser> users = new List <ApplicationUser>(); for (int i = 0; i < 100; i++) { var clients = new ApplicationUser { UserName = "******" + i + "@abc.xyz", PhoneNumber = "12345678911", Email = "client" + i + "@abc.xyz", Address = "test", FullName = "client" + i, Dob = DateTime.Now, }; var clientsRole = new IdentityUserRole(); clientsRole.RoleId = roles[random.Next(roles.Length)]; clientsRole.UserId = clients.Id; clients.Roles.Add(clientsRole); userManager.Create(clients, "client@123"); if (clientsRole.RoleId == "user") { users.Add(clients); } } //Add Order string[] orderroles = new string[3] { "admin", "mod", "employee" }; var productList = context.Products.ToList(); Random rd = new Random(); for (int i = 0; i < 200; i++) { var userRd = users[random.Next(users.Count())]; var order = new Order { CustomerName = userRd.FullName, CustomerAddress = userRd.Address, CustomerMobile = userRd.PhoneNumber, CustomerEmail = userRd.Email, PaymentMethod = (PaymentMethod)random.Next(4), PaymentStatus = false, CreatedDate = new DateTime(DateTime.Now.Year, rd.Next(3, 7), rd.Next(1, 31)), CreatedBy = orderroles[random.Next(orderroles.Length)], Status = (OrderStatus)random.Next(10), Discount = ZeroDiscount, }; context.Orders.Add(order); context.SaveChanges(); } for (int i = 1; i <= context.Orders.Count(); i++) { context.OrderDetails.Add(new OrderDetail { OrderId = i, ProductId = productList[random.Next(productList.Count())].ProductId, Quantity = 1 }); } } }