/// <summary> /// Détermine si le stock est suffisant pour une <c>List<SaleDetail></c> donnée /// </summary> /// <param name="saleDetails"></param> /// <returns>True si le stock est suffisant pour TOUT les produits de <c>List<SaleDetail></c></returns> public static bool EnoughProductInStock(List <SaleDetail> saleDetails) { Dictionary <string, int> codesQuantities = new Dictionary <string, int>(); foreach (SaleDetail saleDetail in saleDetails) { if (codesQuantities.ContainsKey(saleDetail.ProductCode)) { codesQuantities[saleDetail.ProductCode] += (int)saleDetail.NbProduct; } else { codesQuantities.Add(saleDetail.ProductCode, (int)saleDetail.NbProduct); } } foreach (KeyValuePair <string, int> codeQuantity in codesQuantities) { Product product = ProductServices.GetProduct(codeQuantity.Key); if (product.QuantityStock - codeQuantity.Value < 0) { return(false); } } return(true); }
/// <summary> /// Crée et stocke une vente dans la DB. /// </summary> /// <param name="saleDetails"></param> /// <param name="paymentType">True = Carte bancaire false = monnaie</param> /// <param name="decrementQuantityStock"> est ce que le stock doit être débité à l'issue de la vente. </param> public static void NewSale(List <SaleDetail> saleDetails, bool paymentType, bool decrementQuantityStock = true) { if (decrementQuantityStock && !EnoughProductInStock(saleDetails)) { throw new Exception("Produit manquant dans le stock."); } using (MyPopupStoreDBContext db = new()) { Sale sale = new() { PaymentType = paymentType, Date = DateTime.Now }; sale.SaleDetails = saleDetails; db.Sales.Add(sale); db.SaveChanges(); } if (decrementQuantityStock) { foreach (SaleDetail saleDetail in saleDetails) { Product product = ProductServices.GetProduct(saleDetail.ProductCode); product.QuantityStock -= saleDetail.NbProduct; ProductServices.UpdateProduct(product); } } }
/// <summary> /// Supprime un produit de la DB. /// </summary> /// <param name="code">Identifiant du produit en question.</param> public static void RemoveProduct(string code) { using (MyPopupStoreDBContext db = new()) { if (ProductServices.ProductIsUsed(code)) { throw new Exception("Impossible de supprimer un produit enregistré dans au moins une vente."); } db.Products.Remove(GetProduct(code)); db.SaveChanges(); } }