예제 #1
0
        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);
        }
예제 #2
0
        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;
                }
            }
        }
예제 #3
0
 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);
     }
 }
예제 #4
0
 public void OrderDetailUpdated(IContent order, OrderDetailRecord originalDetail, OrderDetailRecord updatedDetail)
 {
 }
예제 #5
0
 public void OrderDetailDeleted(IContent order, OrderDetailRecord deletedDetail)
 {
 }
예제 #6
0
 public void OrderDetailCreated(IContent order, OrderDetailRecord createdDetail)
 {
 }