// CreateProvision
 public Provision CreateProvision()
 {
     var service = new ProvisionServices(uow, groupeId);
     var dateProvisions = service.ProchaineDateProvision(svcDate);
     var _fabrique = new ProvisionFabrique(uow, groupeId);
     return _fabrique.creerProvision(dateProvisions);
 }
        // Exécution batch connexion
        public void Executer()
        {
            // Construction du calendrier
            var service = new ProvisionServices(uow, groupeId);
            List<DateTime> calendrier = service.GetCalendrier(svcDate);

            // Pour chaque date dans calendrier, exécuter le processus
            // puis tracer
            foreach (var date in calendrier)
            {
                // Exécuter process
                Boolean exec = ExecuterProcessus(date);
                if (!exec) {
                    break;
                }
            }
        }
        // GetAutorisation
        public ProvisionsDtoJSon GetAutorisation()
        {
            // Calcul de la prochaine provisions
            IQueryable<Provision> provisions = uow.Provision.GetAllByGroupeId(groupeId);

            // Init calendrier
            var service = new ProvisionServices(uow, groupeId);
            var calendrier = service.GetCalendrier(svcDate);

            // Prochain mois
            DateTime _prochaineDate = svcDate.ProchaineDateInCalendrierDanslemois(calendrier, 02);
            int iProchainMois = _prochaineDate.Month;

            // Calcul du asOf
            var _asOf = "2";

            // Calcul du libellé
            var _libInFrench = svcDate.LibelleMoisInFrench(iProchainMois);
            var _lib = _libInFrench + " " + DateTime.Now.Year;

            // Init message
            var _message = "x";

            // Vérification des pré-requis: si non vérifié, on retourne le résultat
            if (!service.VerifierPrerequis())
            {
                _message = "Les recettes provisionnées ne sont pas égales aux dépenses. Votre provision ne pourra être validée. Revoir le modèle provisions. La somme des provisions n'est pas nulle. ";

                // retour
                return new ProvisionsDtoJSon
                {
                    autorisation = false,
                    message = _message,
                    asOfProvision = _asOf,
                    libelleProvision = _lib
                };
            }

            // Si prérequis, vérifié, on continue
            // Init autorisation
            var _autorisation = false;

            if (calendrier.Count > 0)
            {
                _autorisation = true;
                _message = "Ajouter les provisions "
                    + _libInFrench
                    + " "
                    + DateTime.Now.Year
                    ;
            }
            else
            {
                _message = "La saisie des provisions du mois "
                    + _libInFrench
                    + " n'est pas encore possible."
                    ;
            }

            // Resultat
            var jsonProvision = new ProvisionsDtoJSon
            {
                autorisation = _autorisation,
                message = _message,
                asOfProvision = _asOf,
                libelleProvision = _lib
            };
            return jsonProvision;
        }
        // Exécution du processus de provisionnement à date voulue
        private Boolean ExecuterProcessus(DateTime date)
        {
            // Init
            Boolean exec = false;

            // Tentative provision
            var service = new ProvisionServices(uow, groupeId);
            var traceur = new ProvisionTraceur(groupeId);

            if (service.VerifierPrerequis())
            {
                // Exécuter provision
                var _fabrique = new ProvisionFabrique(uow, groupeId);
                var provision = _fabrique.creerProvision(date);

                // Ajout repo
                uow.Provision.Add(provision);

                // Trace execution
                int nbMouvs = 0;
                var mvts = new List<MouvementBudget>().AsQueryable<MouvementBudget>();
                if (provision.Mouvements != null)
                {
                    mvts = provision.Mouvements.AsQueryable<MouvementBudget>();
                    nbMouvs = provision.Mouvements.Count;
                }
                var rapportS = traceur.SaveForRapportSuccess(provision.DateSaisie, mvts);
                TraceLog trace = traceur.Success(date, nbMouvs, rapportS);

                // Ajout repo
                uow.TraceLog.Add(trace);

                // Succès
                exec = true;

            }
            else
            {
                //// Récupération du libellé de la provision
                //ServiceDate svc = new ServiceDate();
                //string lib = "Provision du mois "
                //    + svc.LibelleMoisInFrench(date.Month)
                //    + " "
                //    + date.Year;

                // Trace execution
                var rapport = traceur.SaveForRapportEchec(date);
                TraceLog trace = traceur.Echec(date, 0, rapport);

                // Ajout repo
                uow.TraceLog.Add(trace);

            };

            // Retour
            return exec;
        }