private Purchase Map(PurchaseCommand purchaseCommand) { var purchase = new Purchase { Id = purchaseCommand.PurchaseId, PurchaseDate = DateTime.UtcNow }; foreach (LineItemCommand lineItemCommand in purchaseCommand.LineItems) { var productLineItem = new ProductLineItem { Product = new Product { Id = lineItemCommand.ProductId, ProductName = lineItemCommand.ProductName } }; productLineItem.PurchaseUnitPrice = lineItemCommand.PurchaseUnitPrice; productLineItem.PurchaseQuantity = lineItemCommand.PurchaseQuantity; purchase.LineItems.Add(productLineItem); } return(purchase); }
public async Task <CommandResult <CreateCommandResult <Guid> > > Handle(CreateOrderCommand request, CancellationToken cancellationToken) { var order = Order.Create(); var plis = request.Products.Select(p => ProductLineItem.Create(order.Id, p.Id, p.Quantity)).ToList(); await _context.Orders.AddAsync(order, cancellationToken); await _context.ProductLineItems.AddRangeAsync(plis, cancellationToken); await _context.SaveChangesAsync(cancellationToken); return(await Task.FromResult(CommandResult <CreateCommandResult <Guid> > .Ok(new CreateCommandResult <Guid>(order.Id)))); }
public static IProductLineItem BreadItem() { var breadItem = new ProductLineItem { BasketId = 1, Product = new Product { Id = 1, Name = "Bread", Price = 1.00m }, Quantity = 1 }; return(breadItem); }
public void CalculateLineItemPrice_Return_Total_Success(int id, string name, decimal price, int qty, decimal expected) { var productItem = new ProductLineItem { BasketId = 1, Product = new Product { Id = id, Name = name, Price = price }, Quantity = qty }; var productTotal = productItem.Quantity * productItem.Product.Price; Assert.True(expected == productTotal); output.WriteLine($"Name: {productItem.Product.Name} : Price: {productItem.Product.Price} : Line Qty:{productItem.Quantity} : Line Cost:{productItem.Quantity * productItem.Product.Price}"); }
public static IProductLineItem MilkItem() { var discount = new Discount { Id = 2, DiscountAmount = 100m, TargetProductId = 2 }; var milkItem = new ProductLineItem { BasketId = 1, Product = new Product { Id = 2, Discount = discount, Name = "Milk", Price = 1.15m }, Quantity = 1 }; return(milkItem); }
public static IProductLineItem ButterItem() { var discount = new Discount { Id = 1, DiscountAmount = 50m, TargetProductId = 1 }; var butterItem = new ProductLineItem { BasketId = 1, Product = new Product { Id = 3, Discount = discount, Name = "Butter", Price = 0.80m }, Quantity = 1 }; return(butterItem); }
public void SaveBasketLineItem(int basketId, IProductLineItem lineItem) { var basketItem = _appDbContext.BasketLineItems.FirstOrDefault(l => l.BasketId == basketId && l.Product.Id == lineItem.Product.Id); if (basketItem != null) { basketItem.Quantity = lineItem.Quantity; } else { basketItem = new ProductLineItem { BasketId = basketId, Quantity = lineItem.Quantity, DiscountedLineCost = lineItem.DiscountedLineCost, Product = lineItem.Product }; _appDbContext.BasketLineItems.Add(basketItem); } _appDbContext.SaveChanges(); }
/// <summary> /// Builds the sales snapshot /// </summary> /// <param name="startDate"></param> /// <param name="endDate"></param> /// <param name="invoiceStatuses"></param> /// <param name="search"></param> /// <returns></returns> private SalesSearchSnapshot BuildSalesSearchSnapshot(DateTime startDate, DateTime endDate, IEnumerable <Guid> invoiceStatuses, string search) { // Get all the statuses var statuses = AllStatuses(); // Loop and set selected statuses foreach (var status in statuses) { if (invoiceStatuses.Contains(status.Key)) { status.Checked = true; } } // Get the SQL var sql = ReportSqlHelper.SalesByItem.GetSaleSearchSql(startDate, endDate, invoiceStatuses, search); // Execure the SQL var results = ApplicationContext.DatabaseContext.Database.Query <SaleItem>(sql).ToList(); // Group results by the product key var groupedResults = results.GroupBy(x => x.ExtendedData.GetProductKey()); // List of ProductLineItem to add var ProductLineItemList = new List <ProductLineItem>(); var currencySymbol = this.ActiveCurrencies.FirstOrDefault(); // Loop each product foreach (var productGroup in groupedResults) { // We do a try as the product may be deleted and not exist anymore try { // Get the base/master product (We need it for the name) var product = _merchello.Query.Product.GetByKey(productGroup.Key); if (product != null) { var productLineItem = new ProductLineItem { Name = product.Name, Quantity = productGroup.Sum(x => x.Quantity), Variants = new List <ProductLineItem>(), CurrencySymbol = currencySymbol.Symbol }; // Get the correct total decimal productGroupTotal = 0; foreach (var p in productGroup) { productGroupTotal += p.Price * p.Quantity; } productLineItem.Total = productGroupTotal; foreach (var variants in productGroup.GroupBy(x => x.Name)) { var variantLineItem = new ProductLineItem { Name = variants.FirstOrDefault().Name, Quantity = variants.Sum(x => x.Quantity), CurrencySymbol = currencySymbol.Symbol }; // Get the correct total decimal productVariantTotal = 0; foreach (var v in variants) { productVariantTotal += v.Price * v.Quantity; } variantLineItem.Total = productVariantTotal; productLineItem.Variants.Add(variantLineItem); } if (productLineItem.Variants.Count() == 1) { if (productLineItem.Variants.FirstOrDefault().Name == product.Name) { // Same as base product so clear productLineItem.Variants.Clear(); } } ProductLineItemList.Add(productLineItem); } } catch (Exception ex) { MultiLogHelper.Error <SalesSearchReportApiController>("Error in BuildSalesSearchSnapshot", ex); } } // Make final model var salesSearchSnapshot = new SalesSearchSnapshot { EndDate = endDate, Search = search, StartDate = startDate, InvoiceStatuses = statuses, Products = ProductLineItemList.OrderByDescending(x => x.Total) }; // return return(salesSearchSnapshot); }