public ActionResult Create()
        {
            if (!db.Caisses.Any())
            {
                return(RedirectToAction("Index"));
            }
            ViewBag.ClientId = new SelectList(db.Clients, "ID", "Nom");
            var venteVM = new VenteVM()
            {
                Details = new List <DetailVenteVM>()
            };
            var produits = db.Produits.OrderBy(p => p.Nom).ToList();

            foreach (var produit in produits)
            {
                venteVM.Details.Add(new DetailVenteVM()
                {
                    NomProduit = produit.Nom,
                    ProduitId  = produit.ID,
                    PU         = produit.PrixVente,
                    Quantite   = 0
                });
            }
            return(View(venteVM));
        }
        public ActionResult Edit(VenteVM vente, Guid clientId, string reglement)
        {
            if (ModelState.IsValid)
            {
                StockManager stockManager = new StockManager(db);
                Vente        oldVente     = db.Ventes.Where(v => v.Id == vente.Id).Include(v => v.Details.Select(d => d.Produit)).First();
                //Restitution du stock
                foreach (var detail in oldVente.Details)
                {
                    stockManager.AddStock(detail.ProduitID, detail.QuantiteVendue, OperationType.Vente);
                }
                //Annulation des reglements
                var caisseManager = new CaisseManager(db);
                caisseManager.AnnulerReglementsVente(oldVente, "suppression");
                //Suppression des anciens details
                oldVente.Montant        = 0;
                oldVente.MontantRegle   = 0;
                oldVente.MontantRestant = 0;
                for (int i = 0; i < oldVente.Details.Count; i++)
                {
                    db.DetailsVente.Remove(oldVente.Details[i]);
                }
                db.SaveChanges();
                //Enregistrement des nouveaux details commande
                double total = 0;
                foreach (var detail in vente.Details)
                {
                    if (detail.Quantite > 0)
                    {
                        oldVente.Details.Add(new DetailVente()
                        {
                            Produit        = db.Produits.Find(detail.ProduitId),
                            QuantiteVendue = detail.Quantite,
                            ProduitID      = detail.ProduitId,
                            ID             = Guid.NewGuid()
                        });
                    }
                    //Sortie de stock
                    stockManager.RemoveStock(detail.ProduitId, detail.Quantite, OperationType.Vente);
                    total += detail.Quantite * db.Produits.Find(detail.ProduitId).PrixVente;
                }

                //Reglements

                oldVente.Montant        = total;
                oldVente.MontantRestant = total;
                db.SaveChanges();
                caisseManager.reglerVente(vente.MontantPaye, oldVente, "Paiement de vente", reglement);
                return(RedirectToAction("Confirmer", new { id = oldVente.Id }));
            }

            ViewBag.ClientId = new SelectList(db.Clients, "ID", "Nom", vente.ClientId);
            return(View(vente));
        }
        public ActionResult Create(VenteVM vente, Guid clientId, string reglement)
        {
            if (ModelState.IsValid)
            {
                StockManager stockManager = new StockManager(db);
                Vente        newVente     = new Vente()
                {
                    Details       = new List <DetailVente>(),
                    Client        = db.Clients.Find(clientId),
                    Date          = DateTime.Now,
                    Id            = Guid.NewGuid(),
                    ClientId      = clientId,
                    MontantRegle  = 0,
                    DateOperation = DateTime.Now,
                    UserId        = User.Identity.GetUserId()
                };
                double total = 0;
                foreach (var detail in vente.Details)
                {
                    if (detail.Quantite > 0)
                    {
                        newVente.Details.Add(new DetailVente()
                        {
                            Produit        = db.Produits.Find(detail.ProduitId),
                            QuantiteVendue = detail.Quantite,
                            ProduitID      = detail.ProduitId,
                            ID             = Guid.NewGuid()
                        });
                    }
                    stockManager.RemoveStock(detail.ProduitId, detail.Quantite, OperationType.Vente);
                    total += detail.Quantite * db.Produits.Find(detail.ProduitId).PrixVente;
                }
                newVente.Montant        = total;
                newVente.MontantRestant = total;

                db.Operations.Add(newVente);
                db.SaveChanges();
                new CaisseManager(db).reglerVente(vente.MontantPaye, newVente, "Paiement de vente", reglement);
                return(RedirectToAction("Confirmer", new { id = newVente.Id }));
            }

            ViewBag.ClientId = new SelectList(db.Clients, "ID", "Nom", vente.ClientId);
            return(View(vente));
        }
        public ActionResult Edit(Guid?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Vente vente = db.Operations.OfType <Vente>().Include(o => o.Details).FirstOrDefault(o => o.Id == id);

            if (vente == null)
            {
                return(HttpNotFound());
            }
            if (!db.Caisses.Any())
            {
                return(RedirectToAction("Index"));
            }
            ViewBag.ClientId = new SelectList(db.Clients, "ID", "Nom");
            var venteVM = new VenteVM()
            {
                DateOperation = vente.DateOperation,
                Details       = new List <DetailVenteVM>()
            };
            var produits = db.Produits.OrderBy(p => p.Nom).ToList();

            foreach (var produit in produits)
            {
                venteVM.Details.Add(new DetailVenteVM()
                {
                    NomProduit = produit.Nom,
                    ProduitId  = produit.ID,
                    PU         = produit.PrixVente,
                    Quantite   = 0
                });
                var detail = vente.Details.FirstOrDefault(d => d.Produit.ID == produit.ID);
                if (detail != null)
                {
                    venteVM.Details.Last().Quantite = detail.QuantiteVendue;
                }
            }
            return(View(venteVM));
        }