You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
203 lines
6.4 KiB
203 lines
6.4 KiB
/// \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
|
|
{
|
|
/// <summary>
|
|
/// Représente un compte bancaire.
|
|
/// </summary>
|
|
[DataContract]
|
|
public class Account : INotifyPropertyChanged
|
|
{
|
|
/// <summary>
|
|
/// Événement déclenché lorsqu'une propriété est modifiée.
|
|
/// </summary>
|
|
public event PropertyChangedEventHandler? PropertyChanged;
|
|
|
|
/// <summary>
|
|
/// Déclenche l'événement PropertyChanged pour une propriété donnée.
|
|
/// </summary>
|
|
/// <param name="propertyName">Nom de la propriété modifiée.</param>
|
|
void OnPropertyChanged(string propertyName)
|
|
{
|
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Obtient ou définit le solde du compte.
|
|
/// </summary>
|
|
[DataMember(Order = 3)]
|
|
public double Balance
|
|
{
|
|
get => balance;
|
|
set
|
|
{
|
|
if (balance == value)
|
|
return;
|
|
balance = value;
|
|
OnPropertyChanged(nameof(Balance));
|
|
}
|
|
}
|
|
[DataMember]
|
|
private double balance;
|
|
|
|
/// <summary>
|
|
/// Obtient ou définit le nom du titulaire du compte.
|
|
/// </summary>
|
|
[DataMember(Order = 1)]
|
|
public string Name
|
|
{
|
|
get => name;
|
|
set
|
|
{
|
|
if (name == value)
|
|
return;
|
|
name = value;
|
|
OnPropertyChanged(nameof(Name));
|
|
}
|
|
}
|
|
[DataMember]
|
|
private string name;
|
|
|
|
/// <summary>
|
|
/// Obtient ou définit le numéro IBAN du compte.
|
|
/// </summary>
|
|
[DataMember(Order = 2)]
|
|
public string IBAN
|
|
{
|
|
get => iban;
|
|
set
|
|
{
|
|
if (iban == value)
|
|
return;
|
|
iban = value;
|
|
OnPropertyChanged(nameof(IBAN));
|
|
}
|
|
}
|
|
[DataMember]
|
|
private string iban;
|
|
|
|
/// <summary>
|
|
/// Obtient une version masquée du numéro IBAN du compte.
|
|
/// </summary>
|
|
[DataMember(Order = 4)]
|
|
public string IBANHide
|
|
{
|
|
get => ibanHide;
|
|
set
|
|
{
|
|
if (ibanHide == value)
|
|
return;
|
|
ibanHide = value;
|
|
OnPropertyChanged(nameof(IBANHide));
|
|
}
|
|
}
|
|
[DataMember]
|
|
private string ibanHide;
|
|
|
|
/// <summary>
|
|
/// Obtient ou définit la liste des transactions effectuées sur le compte.
|
|
/// </summary>
|
|
[DataMember(Order = 5)]
|
|
public List<Transaction> TransactionsList { get; set; } = new List<Transaction>();
|
|
|
|
/// <summary>
|
|
/// Effectue une transaction entre le compte courant et un compte tiers.
|
|
/// </summary>
|
|
/// <param name="involvedAccount">Compte tiers impliqué dans la transaction.</param>
|
|
/// <param name="sum">Somme de la transaction.</param>
|
|
/// <param name="type">Type de transaction (débit ou crédit).</param>
|
|
/// <param name="nb">Numéro de la transaction.</param>
|
|
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;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Constructeur de la classe Account.
|
|
/// </summary>
|
|
/// <param name="balance">Solde initial du compte.</param>
|
|
/// <param name="name">Nom du titulaire du compte.</param>
|
|
/// <param name="iban">Numéro IBAN du compte.</param>
|
|
public Account(Double balance, string name, string iban)
|
|
{
|
|
Balance = balance;
|
|
Name = name;
|
|
IBAN = iban;
|
|
IBANHide = IBANToString();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Demande d'aide pour un compte.
|
|
/// </summary>
|
|
/// <param name="subject">Sujet de la demande d'aide.</param>
|
|
/// <param name="description">Description de la demande d'aide.</param>
|
|
/// <returns>Un message d'aide.</returns>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Convertit le numéro IBAN en une version masquée.
|
|
/// </summary>
|
|
/// <returns>Le numéro IBAN masqué.</returns>
|
|
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);
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Vérifie si deux comptes sont égaux en comparant leur numéro IBAN.
|
|
/// </summary>
|
|
/// <param name="other">Compte à comparer.</param>
|
|
/// <returns>True si les comptes sont égaux, False sinon.</returns>
|
|
public bool Equals(Account other)
|
|
{
|
|
if (other == null) return false;
|
|
else return other.IBAN.Equals(IBAN);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Obtient le code de hachage du compte basé sur le numéro IBAN.
|
|
/// </summary>
|
|
/// <returns>Le code de hachage.</returns>
|
|
public override int GetHashCode()
|
|
{
|
|
return IBAN.GetHashCode();
|
|
}
|
|
}
|
|
}
|