/// <summary> /// Loads OrderItems into passed Order /// </summary> /// <param name="order"></param> public void LoadOrderItems(Order order) { if (order.Id == null) { throw new ArgumentNullException(nameof(order.Id), "Order Id is null"); } using (var connection = Connector.GetConnection()) { var orderItemDal = new OrderItemDal(connection); order.OrderItems = orderItemDal.Search(order.Id).ToList(); } }
/// <summary> /// Searches for all orders and returns matches /// </summary> /// <returns></returns> public IEnumerable <Order> GetOrders(bool?isCredit = null, uint?customerId = null, string note = null) { using (var connection = Connector.GetConnection()) { var orderDal = new OrderDal(connection); var orderItemDal = new OrderItemDal(connection); var orders = orderDal.Search(isCredit, customerId, note == null ? null : $"%{note}%"); foreach (var order in orders) { order.OrderItems = orderItemDal.Search(order.Id).ToList(); yield return(order); } } }
/// <summary> /// Adds a new Order /// </summary> public void AddOrder(Order order) { // Exception handling if (order.OrderItems == null) { throw new ArgumentNullException(nameof(order.OrderItems), "Attempted inserting order without orderEntries initialized"); } if (order.IsCancelled) { throw new ArgumentException("Attempted inserting a cancelled order", nameof(order.IsCancelled)); } using (var scope = new TransactionScope()) { using (var connection = Connector.GetConnection()) { var orderDal = new OrderDal(connection); var orderItemDal = new OrderItemDal(connection); var itemDal = new ItemDal(connection); // Insert order record orderDal.Insert(order.CustomerId, order.Amount, order.Note); order.Id = orderDal.GetLastInsertId(); if (order.Id == null) { throw new ArgumentNullException(nameof(order.Id), "Order has not been set after insert"); } // Insert order entries orderItemDal.InsertMultiple(order.Id.Value, order.OrderItems); // Update inventory foreach (var orderItem in order.OrderItems) { itemDal.Update(orderItem.ProductId, stockIncrement: (int)-orderItem.Qty); } } scope.Complete(); } }