/// <summary> /// Updates a purchase /// </summary> /// <param name="purchase"></param> /// <param name="supplierId"></param> /// <param name="amount"></param> /// <param name="isSettled"></param> /// <param name="note"></param> /// <param name="purchaseItems"></param> public void UpdatePurchase(Purchase purchase, uint?supplierId = null, decimal?amount = null, bool?isSettled = null, string note = null, IEnumerable <PurchaseItem> purchaseItems = null) { using (var scope = new TransactionScope()) { using (var connection = Connector.GetConnection()) { if (purchase.Id == null) { throw new ArgumentNullException(nameof(purchase.Id), "Purchase Id is null"); } var purchaseDal = new PurchaseDal(connection); purchaseDal.Update(purchase.Id.Value, supplierId, amount, isSettled, note); var purchaseItemsList = purchaseItems?.ToList(); if (purchaseItemsList?.Any() == true) { var purchaseItemDal = new PurchaseItemDal(connection); purchaseItemDal.Delete(purchase.Id.Value); purchaseItemDal.InsertMultiple(purchase.Id.Value, purchaseItemsList); } } scope.Complete(); } }
/// <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(); } }