/// \file /// \brief Définition de la classe Account. /// \author Votre nom using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Linq; using System.Runtime.Serialization; using System.Threading.Tasks; namespace Model { /// /// Représente un compte bancaire. /// [DataContract] public class Account : INotifyPropertyChanged { /// /// Événement déclenché lorsqu'une propriété est modifiée. /// public event PropertyChangedEventHandler? PropertyChanged; /// /// Déclenche l'événement PropertyChanged pour une propriété donnée. /// /// Nom de la propriété modifiée. void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } /// /// Obtient ou définit le solde du compte. /// [DataMember(Order = 3)] public double Balance { get => balance; set { if (balance == value) return; balance = value; OnPropertyChanged(nameof(Balance)); } } [DataMember] private double balance; /// /// Obtient ou définit le nom du titulaire du compte. /// [DataMember(Order = 1)] public string Name { get => name; set { if (name == value) return; name = value; OnPropertyChanged(nameof(Name)); } } [DataMember] private string name; /// /// Obtient ou définit le numéro IBAN du compte. /// [DataMember(Order = 2)] public string IBAN { get => iban; set { if (iban == value) return; iban = value; OnPropertyChanged(nameof(IBAN)); } } [DataMember] private string iban; /// /// Obtient une version masquée du numéro IBAN du compte. /// [DataMember(Order = 4)] public string IBANHide { get => ibanHide; set { if (ibanHide == value) return; ibanHide = value; OnPropertyChanged(nameof(IBANHide)); } } [DataMember] private string ibanHide; /// /// Obtient ou définit la liste des transactions effectuées sur le compte. /// [DataMember(Order = 5)] public List TransactionsList { get; set; } = new List(); /// /// Effectue une transaction entre le compte courant et un compte tiers. /// /// Compte tiers impliqué dans la transaction. /// Somme de la transaction. /// Type de transaction (débit ou crédit). /// Numéro de la transaction. public void DoTransactions(Account involvedAccount, Double sum, bool type, int nb) { if (type) // si le type est True => c'est un débit, on doit donc ajouter la transaction pour l'autre compte { Transaction transaction = new Transaction(type, sum, involvedAccount, nb, DateTime.Now); TransactionsList.Add(transaction); Balance = Balance - sum; involvedAccount.DoTransactions(this, sum, !type, nb + 1); } else // Sinon, c'est un crédit, on a juste à l'ajouter à notre liste de transactions { TransactionsList.Add(new Transaction(type, sum, involvedAccount, nb, DateTime.Now)); Balance = Balance + sum; } } /// /// Constructeur de la classe Account. /// /// Solde initial du compte. /// Nom du titulaire du compte. /// Numéro IBAN du compte. public Account(Double balance, string name, string iban) { Balance = balance; Name = name; IBAN = iban; IBANHide = IBANToString(); } /// /// Demande d'aide pour un compte. /// /// Sujet de la demande d'aide. /// Description de la demande d'aide. /// Un message d'aide. public static Message AskForHelp(string subject, string description) { Debug.WriteLine(subject); Debug.WriteLine(description); Debug.WriteLine("Help button pressed !"); Message message = new Message(subject, description); return message; } /// /// Convertit le numéro IBAN en une version masquée. /// /// Le numéro IBAN masqué. public string IBANToString() { char[] res = IBAN.ToCharArray(); for (int i = 5; i < IBAN.Length - 4; i++) { if (res[i] == ' ') continue; res[i] = '*'; } return new string(res); } /// /// Vérifie si deux comptes sont égaux en comparant leur numéro IBAN. /// /// Compte à comparer. /// True si les comptes sont égaux, False sinon. public bool Equals(Account other) { if (other == null) return false; else return other.IBAN.Equals(IBAN); } /// /// Obtient le code de hachage du compte basé sur le numéro IBAN. /// /// Le code de hachage. public override int GetHashCode() { return IBAN.GetHashCode(); } } }