예제 #1
0
 public CompteBancaire(CompteCréé compte, DépotRéalisé dépotRéalisé)
 {
     _evenements = new List<IEvénementMétier>();
     _numeroDeCompte = compte.NuméroDeCompte;
     _autorisationDeCrédit = compte.AutorisationDeCrédit;
     _montant = new Montant(dépotRéalisé.MontantDepot.Montant1);
 }
 public BalanceNégativeDétectée(string numéroDeCompte, Montant montant, DateTime dateRetrait)
     : this()
 {
     _numéroDeCompte = numéroDeCompte;
     _montant1 = montant;
     _dateRetrait = dateRetrait;
 }
예제 #3
0
 public DépotRéalisé(string numéroDeCompte, Montant montantDepot, DateTime dateDepot)
     : this()
 {
     _numéroDeCompte = numéroDeCompte;
     MontantDepot = montantDepot;
     _dateDepot = dateDepot;
 }
예제 #4
0
 public RetraitRéalisé(string numéroDeCompte, Montant montantRetrait, DateTime dateRetrait)
     : this()
 {
     _numéroDeCompte = numéroDeCompte;
     MontantRetrait = montantRetrait;
     _dateRetrait = dateRetrait;
 }
예제 #5
0
 public CompteBancaire(CompteCréé compte)
 {
     _evenements = new List<IEvénementMétier>();
     _numeroDeCompte = compte.NuméroDeCompte;
     _autorisationDeCrédit = compte.AutorisationDeCrédit;
     _montant = new Montant(0);
 }
예제 #6
0
        public void EtantDonnéUnCompteBancaireFaireUnRetraitAvecProvisionSuffisanteProduitUnEvenement()
        {
            var compteBancaire = new CompteBancaire(new CompteCréé(_numéroDeCompte, 0), new DépotRéalisé(_numéroDeCompte, new Montant(100), DateTime.Now)); // Event Sourcing avec une liste d'événements (params IEvénementMétier>[])
            var montantRetrait = new Montant(10);
            var dateRetrait = DateTime.Now;
            var evenements = compteBancaire.FaireUnRetrait(montantRetrait, dateRetrait); // retourne un IEnumerable<IEvénémentMétier> contenant l'événement RetraitRealisé

            Check.That(evenements).ContainsExactly(new RetraitRéalisé(_numéroDeCompte, montantRetrait, dateRetrait));
        }
예제 #7
0
        public void EtantDonnéUnCompteBancaireNonApprovisionnéFaireUnRetraitSansDépasserSonAutorisationDeCreditSuffisanteProduitDeuxEvenements()
        {
            var compteBancaire = new CompteBancaire(new CompteCréé(_numéroDeCompte, 10), new DépotRéalisé(_numéroDeCompte, new Montant(5), DateTime.Now));
            var montantRetrait = new Montant(10);
            var dateRetrait = DateTime.Now;
            var evenements = compteBancaire.FaireUnRetrait(montantRetrait, dateRetrait).ToList(); // retourne un IEnumerable<IEvénémentMétier> contenant l'événement RetraitRealisé

            Check.That(evenements).ContainsExactly<IEvenementMetier>(new RetraitRéalisé(_numéroDeCompte, montantRetrait, dateRetrait), new BalanceNégativeDétectée(_numéroDeCompte, new Montant(5), dateRetrait));
        }
예제 #8
0
        public void EtantDonnéUnCompteBancaireInitialiséViaEventSourcingFaireUnRetraitEnDehorsDeLAutorisationDeCreditLèveUneException()
        {
            var compteBancaire = new CompteBancaire(new CompteCréé(_numéroDeCompte, 10), new DépotRéalisé(_numéroDeCompte, new Montant(5), DateTime.Now));
            var montantRetrait = new Montant(30);
            var dateRetrait = DateTime.Now;
            var evenements = compteBancaire.FaireUnRetrait(montantRetrait, dateRetrait);

            Check.That(evenements).IsEmpty();
        }
예제 #9
0
        public void EtantDonnéUnCompteBancaireNonApprovisionnéFaireUnRetraitSansDépasserSonAutorisationDeCreditSuffisanteProduitDeuxEvenements()
        {
            var compteBancaire = new CompteBancaire(new CompteCréé(_numéroDeCompte, 10), new DépotRéalisé(_numéroDeCompte, new Montant(5), DateTime.Now));
            var montantRetrait = new Montant(10);
            var dateRetrait    = DateTime.Now;
            var evenements     = compteBancaire.FaireUnRetrait(montantRetrait, dateRetrait); // retourne un IEnumerable<IEvénémentMétier> contenant l'événement RetraitRealisé

            Check.That(evenements).ContainsExactly <IEvénementMétier>(new RetraitRéalisé(_numéroDeCompte, montantRetrait, dateRetrait), new BalanceNégativeDétectée(_numéroDeCompte, new Montant(5), dateRetrait));
        }
예제 #10
0
        public void EtantDonnéUnCompteBancaireFaireUnRetraitAvecProvisionSuffisanteProduitUnEvenement()
        {
            var compteBancaire = new CompteBancaire(new CompteCréé(_numéroDeCompte, 0), new DépotRéalisé(_numéroDeCompte, new Montant(100), DateTime.Now)); // Event Sourcing avec une liste d'événements (params IEvénementMétier>[])
            var montantRetrait = new Montant(10);
            var dateRetrait    = DateTime.Now;
            var evenements     = compteBancaire.FaireUnRetrait(montantRetrait, dateRetrait); // retourne un IEnumerable<IEvénémentMétier> contenant l'événement RetraitRealisé

            Check.That(evenements).ContainsExactly(new RetraitRéalisé(_numéroDeCompte, montantRetrait, dateRetrait));
        }
예제 #11
0
        public void EtantDonnéUnCompteBancaireInitialiséViaEventSourcingFaireUnRetraitEnDehorsDeLAutorisationDeCreditLèveUneException()
        {
            var compteBancaire = new CompteBancaire(new CompteCréé(_numéroDeCompte, 10), new DépotRéalisé(_numéroDeCompte, new Montant(5), DateTime.Now));
            var montantRetrait = new Montant(30);
            var dateRetrait    = DateTime.Now;
            var evenements     = compteBancaire.FaireUnRetrait(montantRetrait, dateRetrait);

            Check.That(evenements).IsEmpty();
        }
예제 #12
0
        public void EtantDonnéUnCompteBancaireFaireUnDepotProduitUnEvenement()
        {
            var compteBancaire = new CompteBancaire(new CompteCréé(_numéroDeCompte, 0)); // Event Sourcing avec un seul événement
            var montantDepot   = new Montant(10);
            var dateDepot      = DateTime.Now;
            var evenements     = compteBancaire.FaireUnDepot(montantDepot, dateDepot); // retourne un IEnumerable<IEvenementMetier> contenant l'événement DepotRealisé

            Check.That(evenements).ContainsExactly(new DépotRéalisé(_numéroDeCompte, montantDepot, dateDepot));
        }
예제 #13
0
        public void EtantDonnéUnCompteBancaireFaireUnDepotProduitUnEvenement()
        {
            var compteBancaire = new CompteBancaire(new CompteCréé(_numéroDeCompte, 0)); // Event Sourcing avec un seul événement
            var montantDepot = new Montant(10);
            var dateDepot = DateTime.Now;
            var evenements = compteBancaire.FaireUnDepot(montantDepot, dateDepot); // retourne un IEnumerable<IEvenementMetier> contenant l'événement DepotRealisé

            Check.That(evenements).ContainsExactly(new DépotRéalisé(_numéroDeCompte, montantDepot, dateDepot));
        }
예제 #14
0
 public IEnumerable<IEvenementMetier> FaireUnRetrait(Montant montantRetrait, DateTime dateRetrait)
 {
     if ((montant.Val - montantRetrait.Val)*-1 > _autorisationCredit.Val)
      {
          throw new Exception();
      }
      else
      {
          montant.Val -= montantRetrait.Val;
          yield return new RetraitRéalisé(_numCompte, montantRetrait, dateRetrait);
          if (montant.Val < 0)
          {
              yield return new BalanceNégativeDétectée(_numCompte, new Montant(montant.Val*-1), dateRetrait);
          }
      }
 }
예제 #15
0
        public IEnumerable<IEvénementMétier> FaireUnRetrait(Montant montantRetrait, DateTime dateRetrait)
        {
            RetraitRéalisé retrait = new RetraitRéalisé(_numeroDeCompte, montantRetrait, dateRetrait);
            _evenements.Add(retrait);
            if (montantRetrait.Montant1 - _montant.Montant1 > _autorisationDeCrédit)
            {
                throw new RetraitNonAutorisé("La valeur du retrait est supérieurs à la valeure maximale autorisée !");
            }

            if (montantRetrait.Montant1 > _montant.Montant1)
            {
                Montant mt = new Montant(Math.Abs(_montant.Montant1 - montantRetrait.Montant1));
                _evenements.Add(new BalanceNégativeDétectée(_numeroDeCompte, mt, dateRetrait));
            }

            _montant.Sub(montantRetrait);

            return _evenements;
        }
예제 #16
0
 public override string ToString()
 {
     return(string.Format("Le montant {0} a été porté au {1} le {2}",
                          Montant.ToString(), Type, Date.ToLongDateString()));
 }
예제 #17
0
 public IEnumerable<IEvénementMétier> FaireUnDepot(Montant montantDepot, DateTime dateDepot)
 {
     DépotRéalisé depot = new DépotRéalisé(_numeroDeCompte, montantDepot, dateDepot);
     _montant.Add(montantDepot);
     yield return depot;
 }
예제 #18
0
 public IEnumerable<IEvenementMetier> FaireUnDepot(Montant montantDepot, DateTime dateDepot)
 {
     montant.Val += montantDepot.Val;
     yield return new DépotRéalisé(this._numCompte, montantDepot, dateDepot);
 }
 public BalanceNégativeDétectée(string numeroCompte, Montant montant, DateTime dateRetrait)
 {
     this.numeroCompte = numeroCompte;
     this.montant = montant;
      this.dateRetrait = dateRetrait;
 }
예제 #20
0
 public IEnumerable<IEvenementMetier> FaireUnRetrait(Montant montantRetrait, DateTime dateRetrait)
 {
     yield return new RetraitRéalisé(NuméroDeCompte, montantRetrait, dateRetrait);
 }
예제 #21
0
 public IEnumerable<IEvenementMetier> FaireUnDepot(Montant montantDepot, DateTime dateDepot)
 {
     yield return new DépotRéalisé(NuméroDeCompte, montantDepot, dateDepot);
 }
예제 #22
0
 public Montant Substract(Montant montantRetrait)
 {
     return new Montant(_montant - montantRetrait._montant);
 }
예제 #23
0
 public bool Equals(Montant mnt)
 {
     return mnt._montant == _montant;
 }
예제 #24
0
 public Montant Add(Montant montantDepot)
 {
     return  new Montant(_montant + montantDepot._montant);
 }
예제 #25
0
 public CompteCréé(string numéroDeCompte, int montant)
 {
     NuméroDeCompte = numéroDeCompte;
     MontantCompte = new Montant(montant);
 }
예제 #26
0
 public CompteBancaire(CompteCréé compteCréé, DépotRéalisé dépotRéalisé)
 {
     _numCompte = compteCréé.NumCompte;
      _autorisationCredit.Val = compteCréé.AutorisationCredit.Val;
     montant = dépotRéalisé.MontantDepot;
 }
예제 #27
0
 public RetraitRéalisé(String numeroCompte, Montant montantRetrait, DateTime dateRetrait)
 {
     MontantRetrait = montantRetrait;
     this.dateRetrait = dateRetrait;
     this.numeroCompte = numeroCompte;
 }
예제 #28
0
 public DépotRéalisé(string numéroDeCompte,Montant montantDepot, DateTime dateDepot)
 {
     this.numerocompte = numéroDeCompte;
     this.montantDepot = montantDepot;
     this.dateDepot = dateDepot;
 }
예제 #29
0
 public RetraitRéalisé(string numéroDeCompte,Montant montantRetrait, DateTime dateRetrait)
 {
     this.numerocompte = numéroDeCompte;
     this.montantRetrait = montantRetrait;
     this.dateRetait = dateRetrait;
 }
예제 #30
0
 public CompteBancaire(CompteCréé compteCréé)
 {
     _numCompte = compteCréé.NumCompte;
       _autorisationCredit = compteCréé.AutorisationCredit;
 }
예제 #31
0
        //Transforme un groupe sous la forme Element, dElement
        public override Element Déconstruire()
        {
            Element     e = new Element();
            dElement    d;
            string      CodeAttribut = "";
            TypeElement type         = Acces.type_BUDGET_OPERATION;

            e.ID           = ID;
            e.Element_Type = type.ID;
            e.Code         = Code;
            e.Libelle      = Libelle;
            e.Type_Element = (int)Type_Flux;
            e.Actif        = Actif;

            //Type Enveloppe
            {
                CodeAttribut = "ENVELOPPE";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, Enveloppe.ToString());
                e.Liste.Add(d);
            }

            //Période
            {
                CodeAttribut = "PERIODE";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, Periode.ToString());
                e.Liste.Add(d);
            }

            //Date opération
            {
                CodeAttribut = "DATE_OPERATION";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, DateOperation);
                e.Liste.Add(d);
            }


            //Type opération
            {
                CodeAttribut = "TYPE_OPERATION";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, Type_Operation.ToString());
                e.Liste.Add(d);
            }

            //Budget ORG
            {
                CodeAttribut = "BUDGET_ORG";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, Budget_ORG.ToString());
                e.Liste.Add(d);
            }

            //Budget GEO
            {
                CodeAttribut = "BUDGET_GEO";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, Budget_GEO.ToString());
                e.Liste.Add(d);
            }

            //Compte ID
            {
                CodeAttribut = "COMPTE_ID";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, Compte_ID.ToString());
                e.Liste.Add(d);
            }

            //Montant
            {
                CodeAttribut = "MONTANT";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, Montant.ToString());
                e.Liste.Add(d);
            }

            //Type Flux
            {
                CodeAttribut = "TYPE_FLUX";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, ((int)Type_Flux).ToString());
                e.Liste.Add(d);
            }

            //Type monatnt
            {
                CodeAttribut = "TYPE_MONTANT";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, ((int)Type_Montant).ToString());
                e.Liste.Add(d);
            }

            //Commentaire
            {
                CodeAttribut = "COMMENTAIRE";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, Commentaire);
                e.Liste.Add(d);
            }

            //Virement ID
            {
                CodeAttribut = "VIREMENT_ID";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, Virement_ID.ToString());
                e.Liste.Add(d);
            }
            return(e);
        }
예제 #32
0
        //Transforme un groupe sous la forme Element, dElement
        public override Element Déconstruire()
        {
            Element     e = new Element();
            dElement    d;
            string      CodeAttribut = "";
            TypeElement type         = Acces.type_BUDGET_VIREMENT;

            e.ID           = ID;
            e.Code         = Code;
            e.Libelle      = Libelle;
            e.Element_Type = type.ID;
            e.Type_Element = (int)Type_Virement;
            e.Actif        = Actif;

            //Période
            {
                CodeAttribut = "PERIODE";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, Periode.ToString());
                e.Liste.Add(d);
            }

            //TypeFlux
            {
                CodeAttribut = "TYPE_FLUX";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, ((int)Type_Flux).ToString());
                e.Liste.Add(d);
            }

            //TYpeMontant
            {
                CodeAttribut = "TYPE_MONTANT";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, ((int)Type_Montant).ToString());
                e.Liste.Add(d);
            }

            //Enveloppe Source
            {
                CodeAttribut = "ENVELOPPE_SRC";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, Enveloppe_Src.ToString());
                e.Liste.Add(d);
            }

            //Budget GEO Source
            {
                CodeAttribut = "BUDGET_ORG_SRC";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, Budget_ORG_Src.ToString());
                e.Liste.Add(d);
            }

            //Budget GEO Source
            {
                CodeAttribut = "BUDGET_GEO_SRC";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, Budget_GEO_Src.ToString());
                e.Liste.Add(d);
            }

            //Compte ID Source
            {
                CodeAttribut = "COMPTE_ID_SRC";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, Compte_ID_Src.ToString());
                e.Liste.Add(d);
            }

            //Enveloppe Destination
            {
                CodeAttribut = "ENVELOPPE_DEST";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, Enveloppe_Dest.ToString());
                e.Liste.Add(d);
            }

            //Budget GEO Destination
            {
                CodeAttribut = "BUDGET_ORG_DEST";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, Budget_ORG_Dest.ToString());
                e.Liste.Add(d);
            }

            //Budget GEO Destination
            {
                CodeAttribut = "BUDGET_GEO_DEST";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, Budget_GEO_Dest.ToString());
                e.Liste.Add(d);
            }

            //Compte ID Destination
            {
                CodeAttribut = "COMPTE_ID_DEST";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, Compte_ID_Dest.ToString());
                e.Liste.Add(d);
            }

            //Date de la demande
            {
                CodeAttribut = "DATE_DEMANDE";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, DateDemande);
                e.Liste.Add(d);
            }

            //Date d'effet
            {
                CodeAttribut = "DATE_EFFET";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, DateEffet);
                e.Liste.Add(d);
            }

            //Montant
            {
                CodeAttribut = "MONTANT";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, Montant.ToString());
                e.Liste.Add(d);
            }

            //Commentaire
            {
                CodeAttribut = "COMMENTAIRE";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, Commentaire);
                e.Liste.Add(d);
            }

            //Validé
            {
                CodeAttribut = "VALIDE";
                d            = new dElement(ID, Acces.Trouver_Attribut(type, CodeAttribut).ID, CodeAttribut, (Validé?"1":"0"));
                e.Liste.Add(d);
            }

            return(e);
        }