public ActionResult ENREGISTRERREGLEMENT(String Id)
        {
            using (IDAL dal = new Dal())
            {
                if (dal.VerifierAccesParUtilisateurIdParPrivilegePeut(HttpContext.User.Identity.Name, "ENREGISTRER_REGLEMENT"))
                {
                    CAISSE CaisseOuverte = dal.CaisseOuverteParCaissierId(HttpContext.User.Identity.Name);

                    if (CaisseOuverte != null)
                    {
                        ReglementVM RVM = new ReglementVM();

                        FACTURE fact = dal.ObtenirFactureParId(CRYPTAGE.StringHelpers.Encrypt(Id));
                        if (fact != null)
                        {
                            FactureVM2 FVM = dal.ConvertirFactureFactureVM2(fact);

                            RVM.FactureId        = FVM.Id;
                            RVM.Patient          = FVM.Patient;
                            RVM.ReferenceFacture = FVM.Reference;
                            RVM.Montant          = FVM.Montant;
                            RVM.Reste            = FVM.Montant - dal.SommeTotalePayeeParFacture(fact);
                            RVM.CaisseId         = CaisseOuverte.CaisseID;
                            RVM.Caisse           = CRYPTAGE.StringHelpers.Decrypt(CaisseOuverte.Nom);

                            UTILISATEUR GerantCaisse = dal.ObtenirUtilisateurParId(HttpContext.User.Identity.Name);
                            if (GerantCaisse != null)
                            {
                                RVM.CaissierId = GerantCaisse.UtilisateurID;
                                RVM.Caissier   = CRYPTAGE.StringHelpers.Decrypt(GerantCaisse.Personne.Nom) + " " + CRYPTAGE.StringHelpers.Decrypt(GerantCaisse.Personne.Prenom);
                            }

                            ViewBag.ListeModePaiement = dal.ObtenirTousLesModePaiements();

                            return(View("FormulaireAjoutReglement", RVM));
                        }
                        else
                        {
                            ViewBag.ErrorMessage = "Rassurez-vous que cette facture existe.";
                            return(View("Error"));
                        }
                    }
                    else
                    {
                        ViewBag.ErrorMessage = "Rassurez-vous que votre Caisse est OUVERTE et qu'elle vous a été affectée.";
                        return(View("Error"));
                    }
                }
                else
                {
                    ViewBag.ErrorMessage = dal.getErrorMessageFailedAuthorization();
                    return(View("Error"));
                }
            }
        }
        public ActionResult ENREGISTRERREGLEMENT(ReglementVM PVM)
        {
            using (IDAL dal = new Dal())
            {
                if (dal.VerifierAccesParUtilisateurIdParPrivilegePeut(HttpContext.User.Identity.Name, "ENREGISTRER_REGLEMENT"))
                {
                    if (ModelState.IsValid)
                    {
                        REGLEMENT    Reglement    = new REGLEMENT();
                        FACTURE      Facture      = new FACTURE();
                        CAISSE       Caisse       = new CAISSE();
                        MODEPAIEMENT ModePaiement = new MODEPAIEMENT();

                        Caisse = dal.ObtenirCaisseParId(PVM.CaisseId);
                        if (Caisse != null)
                        {
                            Reglement.Caisse = Caisse;
                        }
                        else
                        {
                            ViewBag.ErrorMessage = "Un problème lors de la selection de la Caisse";
                            return(View("Error"));
                        }

                        Facture = dal.ObtenirFactureParId(PVM.FactureId);
                        if (Facture != null)
                        {
                            if (!Facture.EstPaye)
                            {
                                Reglement.Facture = Facture;
                            }
                            else
                            {
                                ViewBag.ErrorMessage = "Cette Facture semble deja etre payée";
                                return(View("Error"));
                            }
                        }
                        else
                        {
                            ViewBag.ErrorMessage = "Un problème lors de la selection de la Facture";
                            return(View("Error"));
                        }



                        ModePaiement = dal.ObtenirModePaiementParId(PVM.ModePaiementId);
                        if (ModePaiement != null)
                        {
                            Reglement.ModePaiement = ModePaiement;
                        }
                        else
                        {
                            ViewBag.ErrorMessage = "Séléctionnez un mode de Paiement valide";
                            return(View("Error"));
                        }

                        List <REGLEMENT> ListePaiements = dal.ObtenirReglementParFactureId(Facture.FactureID);

                        decimal MontantGlobalRecu = 0;
                        foreach (var reg in ListePaiements)
                        {
                            MontantGlobalRecu += reg.MontantRecu;
                        }

                        MontantGlobalRecu += PVM.MontantRecu;

                        Reglement.MontantNet        = PVM.Montant;
                        Reglement.MontantRecu       = PVM.MontantRecu;
                        Reglement.MontantRembourse  = PVM.MontantRembourse;
                        Reglement.MontantARembourse = PVM.MontantARembourse2;
                        Reglement.MontantRestant    = PVM.Reste2;


                        Reglement.ReglementID = dal.EnregistrerReglement(Reglement);

                        if (MontantGlobalRecu >= Reglement.MontantNet)
                        {
                            if (Reglement.ReglementID != null)
                            {
                                dal.MettreAJourFactureReglee(Reglement);
                                return(RedirectToAction("CONSULTERLISTEREGLEMENTS"));
                            }
                            else
                            {
                                ViewBag.ErrorMessage = "Il y a eu un souci lors de l'enregistrement de ce Paiement. Verifiez SVP.";
                                return(View("Error"));
                            }
                        }

                        if (Reglement.ReglementID != null)
                        {
                            CAISSEMOUVEMENT CaisseMvt = new CAISSEMOUVEMENT();
                            CaisseMvt.Caisse      = Reglement.Caisse;
                            CaisseMvt.Montant     = PVM.MontantRecu;
                            CaisseMvt.Raison      = "ENCAISSEMENT";
                            CaisseMvt.Direction   = "IN";
                            CaisseMvt.Commentaire = "Paiement Facture Réf : " + Facture.Reference;

                            dal.EnregistrerCaisseMouvements(CaisseMvt);
                        }

                        return(RedirectToAction("CONSULTERFACTURE", new { id = CRYPTAGE.StringHelpers.Decrypt(Facture.FactureID) }));
                    }
                    else
                    {
                        ViewBag.ErrorMessage = "Formulaire Semble etre mal Renseigné";
                        return(View("Error"));
                    }
                }
                else
                {
                    ViewBag.ErrorMessage = dal.getErrorMessageFailedAuthorization();
                    return(View("Error"));
                }
            }
        }