public ActionResult ENREGISTRERPRODUIT(ProduitVM ProduitVM)
        {
            using (IDAL dal = new Dal())
            {
                if (dal.VerifierAccesParUtilisateurIdParPrivilegePeut(HttpContext.User.Identity.Name, "ENREGISTRER_PRODUIT"))
                {
                    if (ModelState.IsValid)
                    {
                        PRODUIT produit = new PRODUIT();

                        produit.ProduitID        = ProduitVM.ProduitID;
                        produit.Stock            = dal.ObtenirStockParId(ProduitVM.StockID);
                        produit.Rayon            = dal.ObtenirRayonParId(ProduitVM.RayonID);
                        produit.Fabricant        = dal.ObtenirFabricantParId(ProduitVM.FabricantID);
                        produit.Nom              = ProduitVM.Nom;
                        produit.PrixVente        = ProduitVM.PrixVente;
                        produit.PrixAchat        = ProduitVM.PrixAchat;
                        produit.ReferenceExterne = ProduitVM.ReferenceExterne;
                        produit.Description      = ProduitVM.Description;

                        produit.ProduitID = dal.EnregistrerProduit(produit);


                        STOCKDETAILS stockDetails = new STOCKDETAILS()
                        {
                            Produit    = dal.ObtenirProduitParId(produit.ProduitID),
                            Stock      = dal.ObtenirStockParId(ProduitVM.StockID),
                            StockAlert = ProduitVM.SeuilAlert
                        };

                        stockDetails.StockDetailsID = dal.EnregistrerProduitEnStock(stockDetails);

                        return(RedirectToAction("CONSULTERLISTEPRODUITS"));
                    }
                    else
                    {
                        ViewBag.ErrorMessage = "Veuillez remplir correctement le formulaire et reessayez svp.";
                        return(View("Error"));
                    }
                }
                else
                {
                    ViewBag.ErrorMessage = dal.getErrorMessageFailedAuthorization();
                    return(View("Error"));
                }
            }
        }
        public ActionResult TRANSFERERSTOCK(TransfertStockVM TSVM, String[] IdsProduitATransferer, String[] QuantiteATransferer)
        {
            using (IDAL dal = new Dal())
            {
                if (dal.VerifierAccesParUtilisateurIdParPrivilegePeut(HttpContext.User.Identity.Name, "TRANSFERER_STOCK"))
                {
                    List <TransfertStockVM2> ListeProduitsTransfert = new List <TransfertStockVM2>();

                    if (IdsProduitATransferer != null)
                    {
                        TransfertStockVM2 ProduitTransfert;
                        int i = 0;

                        foreach (var ProduitId in IdsProduitATransferer)
                        {
                            ProduitTransfert = new TransfertStockVM2();

                            if (ProduitId != "false")
                            {
                                ProduitTransfert.ProduitId = ProduitId;

                                int Qte;
                                if (Int32.TryParse(QuantiteATransferer[i], out Qte))
                                {
                                    ProduitTransfert.Quantite = Qte;
                                }
                                ListeProduitsTransfert.Add(ProduitTransfert);
                            }
                            i++;
                        }
                    }

                    if (ListeProduitsTransfert != null)
                    {
                        int i = 0;
                        foreach (var ProduitTransfert in ListeProduitsTransfert)
                        {
                            if (ProduitTransfert != null)
                            {
                                PRODUIT Prod = dal.ObtenirProduitParId(ProduitTransfert.ProduitId);

                                if (Prod != null)
                                {
                                    STOCK stock = dal.ObtenirStockParId(CRYPTAGE.StringHelpers.Encrypt(TSVM.StockFromId));
                                    if (stock != null)
                                    {
                                        List <STOCKDETAILS> StockDetailExistant = dal.ObtenirStockDetailsParProduitEtParStock(Prod.ProduitID, stock.StockID).OrderBy(stkd => stkd.DateExpiration).ToList();


                                        int QuantiteAInserer = ProduitTransfert.Quantite;
                                        int ResteAInserer    = QuantiteAInserer;
                                        int QuantiteInseree  = 0;

                                        foreach (var stkd in StockDetailExistant)
                                        {
                                            if (QuantiteAInserer >= QuantiteInseree)
                                            {
                                                if (stkd != null && stkd.StockQuantity > 0)
                                                {
                                                    STOCKDETAILS NewStkD = new STOCKDETAILS();
                                                    NewStkD.Produit        = stkd.Produit;
                                                    NewStkD.DateExpiration = stkd.DateExpiration;
                                                    NewStkD.Stock          = dal.ObtenirStockParId(CRYPTAGE.StringHelpers.Encrypt(TSVM.StockToId));

                                                    if (stkd.StockQuantity >= ResteAInserer)
                                                    {
                                                        NewStkD.StockQuantity = ResteAInserer;
                                                        QuantiteInseree      += ResteAInserer;

                                                        stkd.StockQuantity = stkd.StockQuantity - ResteAInserer;

                                                        dal.EnregistrerProduitEnStock(NewStkD);

                                                        dal.EnregistrerProduitEnStock(stkd);

                                                        ResteAInserer = 0;
                                                    }
                                                    else
                                                    {
                                                        NewStkD.StockQuantity = stkd.StockQuantity;
                                                        QuantiteInseree      += stkd.StockQuantity;

                                                        dal.EnregistrerProduitEnStock(NewStkD);

                                                        ResteAInserer      = QuantiteAInserer - QuantiteInseree;
                                                        stkd.StockQuantity = 0;

                                                        dal.EnregistrerProduitEnStock(stkd);
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                break;
                                            }
                                        }
                                    }
                                }
                            }

                            i++;
                        }
                        return(RedirectToAction("TRANSFERERSTOCK"));
                    }
                    else
                    {
                        ViewBag.ErrorMessage = "Veuillez selectionner les produits à transferer.";
                        return(View("Error"));
                    }
                }
                else
                {
                    ViewBag.ErrorMessage = dal.getErrorMessageFailedAuthorization();
                    return(View("Error"));
                }
            }
        }
        public ActionResult APPROVISIONNERPRODUITS(ApprovisionnementStockVM ASVM, String[] IdsProduitAApprovionner, String[] QuantiteApprovisionner, String[] DateExpiration)
        {
            using (IDAL dal = new Dal())
            {
                if (dal.VerifierAccesParUtilisateurIdParPrivilegePeut(HttpContext.User.Identity.Name, "APPROVISIONNER_PRODUITS"))
                {
                    List <ApprovisionnementStockVM2> ListeAppro = new List <ApprovisionnementStockVM2>();

                    if (IdsProduitAApprovionner != null)
                    {
                        ApprovisionnementStockVM2 Appro;
                        int i = 0;

                        foreach (var ProduitId in IdsProduitAApprovionner)
                        {
                            Appro = new ApprovisionnementStockVM2();

                            if (ProduitId != "false")
                            {
                                Appro.ProduitId = ProduitId;

                                int Qte;
                                if (Int32.TryParse(QuantiteApprovisionner[i], out Qte))
                                {
                                    Appro.Quantite = Qte;
                                }

                                DateTime DateExp;
                                if (DateTime.TryParse(DateExpiration[i], out DateExp))
                                {
                                    Appro.DateExpiration = DateExp;
                                }

                                ListeAppro.Add(Appro);
                            }
                            i++;
                        }
                    }

                    if (ListeAppro != null)
                    {
                        int i = 0;
                        foreach (var Appro in ListeAppro)
                        {
                            if (Appro != null)
                            {
                                PRODUIT Prod = dal.ObtenirProduitParId(Appro.ProduitId);

                                if (Prod != null)
                                {
                                    STOCKDETAILS StockDetail = new STOCKDETAILS();
                                    StockDetail.Produit = Prod;

                                    STOCK stock = dal.ObtenirStockParId(ASVM.StockId);
                                    if (stock != null)
                                    {
                                        StockDetail.Stock          = stock;
                                        StockDetail.DateExpiration = Appro.DateExpiration;
                                        StockDetail.StockQuantity  = Appro.Quantite;

                                        List <STOCKDETAILS> StockDetailExistant = dal.ObtenirStockDetailsParProduitParStockParDateExpiration(Prod.ProduitID, stock.StockID, StockDetail.DateExpiration);
                                        Boolean             EstUneMAJ           = false;

                                        foreach (var stkd in StockDetailExistant)
                                        {
                                            if (stkd != null && stkd.DateExpiration == StockDetail.DateExpiration)
                                            {
                                                stkd.StockQuantity += StockDetail.StockQuantity;
                                                dal.EnregistrerProduitEnStock(stkd);
                                                EstUneMAJ = true;
                                                break;
                                            }
                                        }

                                        if (!EstUneMAJ)
                                        {
                                            dal.EnregistrerProduitEnStock(StockDetail);
                                        }
                                    }
                                }
                            }

                            i++;
                        }
                    }

                    return(RedirectToAction("APPROVISIONNERPRODUITS"));
                }
                else
                {
                    ViewBag.ErrorMessage = dal.getErrorMessageFailedAuthorization();
                    return(View("Error"));
                }
            }
        }