public OrderRecord CreateOrder(int customerId, IEnumerable <ShoppingCartItem> items) { if (items == null) { throw new ArgumentNullException("items"); } // Convert to an array to avoid re-running the enumerable var itemsArray = items.ToArray(); if (!itemsArray.Any()) { throw new ArgumentException("Creating an order with 0 items is not supported", "items"); } var order = new OrderRecord { CreatedAt = _dateTimeService.Now, CustomerId = customerId, Status = "New", //SubTotal = 0, //Vat = 0 }; _orderRepository.Create(order); // Get all products in one shot, so we can add the product reference to each order detail var bookIds = itemsArray.Select(x => x.BookId).ToArray(); var books = _bookRepository.Fetch(x => bookIds.Contains(x.Id)).ToArray(); // Create an order detail for each item foreach (var item in itemsArray) { var book = books.Single(x => x.Id == item.BookId); var detail = new OrderDetailRecord { OrderRecord_Id = order.Id, BookId = book.Id, Quantity = item.Quantity, UnitPrice = book.UnitPrice, VatRate = .19m }; _orderDetailRepository.Create(detail); order.Details.Add(detail); } order.UpdateTotals(); return(order); }
public void OrderDetailDeleted(IContent order, OrderDetailRecord deletedDetail) { var stockPart = _contentManager.Get(deletedDetail.ContentId).As <StockPart>(); var orderPart = order.As <OrderPart>(); if (stockPart != null && stockPart.EnableStockMgmt && orderPart != null) { if (orderPart.OrderStatus == OrderStatus.Canceled) { return; } else if (orderPart.OrderStatus < OrderStatus.Completed) { stockPart.InOrderQty -= deletedDetail.Quantity; } else { stockPart.InStockQty += deletedDetail.Quantity; } } }
public void OrderDetailUpdated(IContent order, OrderDetailRecord originalDetail, OrderDetailRecord updatedDetail) { if (originalDetail.ContentId == updatedDetail.ContentId) { var orderPart = order.As <OrderPart>(); var stockPart = _contentManager.Get(updatedDetail.ContentId).As <StockPart>(); if (stockPart != null && stockPart.EnableStockMgmt && orderPart != null) { if (orderPart.OriginalStatus != orderPart.OrderStatus) { // OrderStatus changed if (orderPart.OriginalStatus == OrderStatus.Canceled) { if (orderPart.OrderStatus < OrderStatus.Completed) { stockPart.InOrderQty += updatedDetail.Quantity; } else { stockPart.InStockQty -= updatedDetail.Quantity; } } else if (orderPart.OriginalStatus < OrderStatus.Completed) { if (orderPart.OrderStatus == OrderStatus.Canceled) { stockPart.InOrderQty -= originalDetail.Quantity; } else if (orderPart.OrderStatus == OrderStatus.Completed) { stockPart.InOrderQty -= originalDetail.Quantity; stockPart.InStockQty -= updatedDetail.Quantity; } else { stockPart.InOrderQty += updatedDetail.Quantity - originalDetail.Quantity; } } else { stockPart.InStockQty += originalDetail.Quantity; if (orderPart.OrderStatus != OrderStatus.Canceled) { stockPart.InOrderQty += updatedDetail.Quantity; } } } else { // OrderStatus unchanged if (originalDetail.Quantity != updatedDetail.Quantity) { stockPart.InOrderQty += updatedDetail.Quantity - originalDetail.Quantity; } } } } else { OrderDetailDeleted(order, originalDetail); OrderDetailCreated(order, updatedDetail); } }
public void OrderDetailUpdated(IContent order, OrderDetailRecord originalDetail, OrderDetailRecord updatedDetail) { }
public void OrderDetailDeleted(IContent order, OrderDetailRecord deletedDetail) { }
public void OrderDetailCreated(IContent order, OrderDetailRecord createdDetail) { }