/// <summary> /// Adds a new purchase /// </summary> /// <param name="purchase"></param> public void AddPurchase(Purchase purchase) { if (purchase.SupplierId == null) { throw new ArgumentNullException(nameof(purchase.SupplierId), "Purchase SupplierId is null"); } using (var scope = new TransactionScope()) { using (var connection = Connector.GetConnection()) { var purchaseDal = new PurchaseDal(connection); var itemDal = new ItemDal(connection); purchaseDal.Insert(purchase.SupplierId.Value, purchase.Amount, purchase.Note, purchase.IsSettled); purchase.Id = purchaseDal.GetLastInsertId(); if (purchase.Id == null) { throw new ArgumentNullException(nameof(purchase.Id), "Purchase Id null after insert"); } var purchaseItemDal = new PurchaseItemDal(connection); // Insert purchase items purchaseItemDal.InsertMultiple(purchase.Id.Value, purchase.PurchaseItems); // Update inventory foreach (var purchaseItem in purchase.PurchaseItems) { itemDal.Update(purchaseItem.ItemId, stockIncrement: (int)purchaseItem.Qty); } } scope.Complete(); } }