/// <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);
                }
            }
        }