diff --git a/src/Banquale/Banquale/App.xaml.cs b/src/Banquale/Banquale/App.xaml.cs index c074ff2..71df00a 100644 --- a/src/Banquale/Banquale/App.xaml.cs +++ b/src/Banquale/Banquale/App.xaml.cs @@ -2,25 +2,35 @@ using Banquale.Stub; using Banquale.DataContractPersistance; -namespace Banquale; - -public partial class App : Application +namespace Banquale { - - public Manager MyManager { get; private set; } = new Manager(new Stub.Stub() /*DataContractPersistance.DataContractPersXML()*/); - - - - public App() - { - - MyManager.DataLoad(); - MyManager.Persistence = new DataContractPersistance.DataContractPersXML(); - MyManager.DataSave(); - - InitializeComponent(); - - MainPage = new AppShell(); - + /// + /// Classe principale de l'application Banquale. + /// + public partial class App : Application + { + /// + /// Déclare et instencie le manager MyManager + /// + public Manager MyManager { get; private set; } = new Manager(new Stub.Stub() /*DataContractPersistance.DataContractPersXML()*/); + + /// + /// Initialise une nouvelle instance de la classe App. + /// + public App() + { + // Charge les données + MyManager.DataLoad(); + + // Définit le mécanisme de persistance + MyManager.Persistence = new DataContractPersistance.DataContractPersXML(); + + // Enregistre les données + MyManager.DataSave(); + + InitializeComponent(); + + MainPage = new AppShell(); + } } } diff --git a/src/Banquale/Banquale/AppShell.xaml.cs b/src/Banquale/Banquale/AppShell.xaml.cs index 833df87..2a52ab8 100644 --- a/src/Banquale/Banquale/AppShell.xaml.cs +++ b/src/Banquale/Banquale/AppShell.xaml.cs @@ -3,16 +3,24 @@ using Banquale.Views.Category; using Banquale.Views.Transfer; using Model; -namespace Banquale; - -public partial class AppShell : Shell +namespace Banquale { + /// + /// Classe représentant la coquille de l'application. + /// + public partial class AppShell : Shell + { + /// + /// Obtient le gestionnaire de l'application à partir de l'instance de l'application (Manager Mgr). + /// + public Manager Mgr => (App.Current as App).MyManager; - public Manager Mgr => (App.Current as App).MyManager; - - public AppShell() - { - InitializeComponent(); + /// + /// Initialise une nouvelle instance de la classe AppShell. + /// + public AppShell() + { + InitializeComponent(); + } } - -} \ No newline at end of file +} diff --git a/src/Banquale/Banquale/DataContractPersistance/DataContractPersJSON.cs b/src/Banquale/Banquale/DataContractPersistance/DataContractPersJSON.cs index e8847e5..93b1b87 100644 --- a/src/Banquale/Banquale/DataContractPersistance/DataContractPersJSON.cs +++ b/src/Banquale/Banquale/DataContractPersistance/DataContractPersJSON.cs @@ -7,20 +7,31 @@ using System.Runtime.Serialization.Json; using System.Text; using System.Threading.Tasks; - - namespace Banquale.DataContractPersistance { - // Nous ne pouvons utiliser la persitance avec JSON dans notre application car la persitance avec JSON n'accepte pas // les références, nous sommes pourtant obligé d'utiliser des références pour la sauvegarde des transactions + + + /// + /// Gestionnaire de persistance avec JSON utilisant DataContract. + /// public class DataContractPersJSON : IPersistenceManager { - + /// + /// Chemin du fichier de sauvegarde. + /// public string FilePath { get; set; } = FileSystem.Current.AppDataDirectory; - public string FileName { get; set; } = "DataSave.json"; + /// + /// Nom du fichier de sauvegarde. + /// + public string FileName { get; set; } = "DataSave.json"; + /// + /// Charge les données sauvegardées. + /// + /// Tuple contenant la liste des clients et le consultant. public (HashSet, Consultant) DataLoad() { DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(DataToPersist)); @@ -33,12 +44,15 @@ namespace Banquale.DataContractPersistance } return (data.customer, data.consultant); - } + /// + /// Sauvegarde les données. + /// + /// Liste des clients. + /// Consultant. public void DataSave(HashSet cu, Consultant co) { - DataToPersist data = new DataToPersist(); data.customer = cu; data.consultant = co; @@ -50,7 +64,7 @@ namespace Banquale.DataContractPersistance stream, System.Text.Encoding.UTF8, false, - true))//<- this boolean says that we sant indentation + true)) // <- this boolean says that we want indentation { jsonSerializer.WriteObject(writer, data); } diff --git a/src/Banquale/Banquale/DataContractPersistance/DataContractPersLINQ.cs b/src/Banquale/Banquale/DataContractPersistance/DataContractPersLINQ.cs index dbf664d..4dd1f29 100644 --- a/src/Banquale/Banquale/DataContractPersistance/DataContractPersLINQ.cs +++ b/src/Banquale/Banquale/DataContractPersistance/DataContractPersLINQ.cs @@ -9,17 +9,35 @@ using System.Xml; namespace Banquale.DataContractPersistance { + /// + /// Classe de gestion de persistance utilisant LINQ. + /// public class DataContractPersLINQ : IPersistenceManager { - + /// + /// Chemin du fichier de sauvegarde. + /// public string FilePath { get; set; } = FileSystem.Current.AppDataDirectory; + + /// + /// Nom du fichier de sauvegarde. + /// public string FileName { get; set; } = "DataSave.xml"; + /// + /// Charge les données à partir du fichier de sauvegarde. + /// + /// Un tuple contenant la liste des clients et le consultant. public (HashSet, Consultant) DataLoad() { throw new NotImplementedException(); } + /// + /// Sauvegarde les données dans le fichier de sauvegarde. + /// + /// Liste des clients à sauvegarder. + /// Consultant à sauvegarder. public void DataSave(HashSet cu, Consultant co) { XDocument dataSave = new XDocument(); @@ -29,7 +47,7 @@ namespace Banquale.DataContractPersistance new XElement("name", v.FirstName), new XElement("id", Convert.ToString(v.Id)), new XElement("mdp", v.Password), - new XAttribute("Account", v.AccountsList)))); + new XAttribute("Account", v.AccountsList)))); dataSave.Add(new XElement("Customers", save)); diff --git a/src/Banquale/Banquale/DataContractPersistance/DataContractPersXML.cs b/src/Banquale/Banquale/DataContractPersistance/DataContractPersXML.cs index 1578188..23b84b1 100644 --- a/src/Banquale/Banquale/DataContractPersistance/DataContractPersXML.cs +++ b/src/Banquale/Banquale/DataContractPersistance/DataContractPersXML.cs @@ -5,20 +5,32 @@ using System.Diagnostics; using System.Runtime.Serialization; using System.Xml; - namespace Banquale.DataContractPersistance { - public class DataContractPersXML : IPersistenceManager - { - + /// + /// Gestionnaire de persistance avec XML utilisant DataContract. + /// + public class DataContractPersXML : IPersistenceManager + { + /// + /// Chemin du fichier de sauvegarde. + /// public string FilePath { get; set; } = FileSystem.Current.AppDataDirectory; - public string FileName { get; set; } = "DataSave.xml"; + /// + /// Nom du fichier de sauvegarde. + /// + public string FileName { get; set; } = "DataSave.xml"; + + /// + /// Charge les données sauvegardées. + /// + /// Tuple contenant la liste des clients et le consultant. public (HashSet, Consultant) DataLoad() - { - var serializer = new DataContractSerializer(typeof(DataToPersist)); + { + var serializer = new DataContractSerializer(typeof(DataToPersist)); - DataToPersist data; + DataToPersist data; if (File.Exists(Path.Combine(FilePath, FileName))) // Vérifiez si le fichier existe { @@ -33,11 +45,16 @@ namespace Banquale.DataContractPersistance } return (data.customer, data.consultant); - } + } - public void DataSave(HashSet cu, Consultant co) - { - var serializer = new DataContractSerializer(typeof(DataToPersist), new DataContractSerializerSettings() { PreserveObjectReferences = true }); + /// + /// Sauvegarde les données. + /// + /// Liste des clients. + /// Consultant. + public void DataSave(HashSet cu, Consultant co) + { + var serializer = new DataContractSerializer(typeof(DataToPersist), new DataContractSerializerSettings() { PreserveObjectReferences = true }); // La deuxième partie sert à faire des références, cela sert à ne pas duppliquer l'écriture de certains attributs if (!Directory.Exists(FilePath)) @@ -46,7 +63,6 @@ namespace Banquale.DataContractPersistance Directory.CreateDirectory(FilePath); } - DataToPersist data = new DataToPersist(); data.customer = cu; data.consultant = co; @@ -59,8 +75,6 @@ namespace Banquale.DataContractPersistance serializer.WriteObject(w, data); } } - } } } - diff --git a/src/Banquale/Banquale/DataContractPersistance/DataToPersist.cs b/src/Banquale/Banquale/DataContractPersistance/DataToPersist.cs index 1e08211..241f910 100644 --- a/src/Banquale/Banquale/DataContractPersistance/DataToPersist.cs +++ b/src/Banquale/Banquale/DataContractPersistance/DataToPersist.cs @@ -3,10 +3,19 @@ using Model; namespace Banquale.DataContractPersistance { - public class DataToPersist - { - public HashSet customer { get; set; } = new HashSet(); - public Consultant consultant { get; set; } - } -} + /// + /// Classe de données à persister. + /// + public class DataToPersist + { + /// + /// Liste des clients à persister. + /// + public HashSet customer { get; set; } = new HashSet(); + /// + /// Consultant à persister. + /// + public Consultant consultant { get; set; } + } +} \ No newline at end of file diff --git a/src/Banquale/Banquale/Views/Balance/BalancePage.xaml.cs b/src/Banquale/Banquale/Views/Balance/BalancePage.xaml.cs index 87950a3..01d6570 100644 --- a/src/Banquale/Banquale/Views/Balance/BalancePage.xaml.cs +++ b/src/Banquale/Banquale/Views/Balance/BalancePage.xaml.cs @@ -1,36 +1,44 @@ using Android.Telephony; using Model; -namespace Banquale.Views.Balance; - - -public partial class BalancePage : ContentPage +namespace Banquale.Views.Balance { - public Manager Mgr => (App.Current as App).MyManager; - - //private BalanceView MybalanceView; - public BalancePage() - { - InitializeComponent(); - BindingContext = Mgr.SelectedAccount; - //MybalanceView = balanceViewContainer.FindByName("balanceViewContainer"); - } - - public void RefreshPage() + /// + /// Page de balance. + /// + public partial class BalancePage : ContentPage { - BindingContext = Mgr.SelectedAccount; - //MybalanceView.RefreshView(); - } + public Manager Mgr => (App.Current as App).MyManager; - public async void Transaction_Clicked(Object sender, EventArgs e) - { - var selectedItem = (sender as Grid)?.BindingContext as Transaction; + /// + /// Constructeur de la page BalancePage. + /// + public BalancePage() + { + InitializeComponent(); + BindingContext = Mgr.SelectedAccount; + } - if (selectedItem != null) + /// + /// Actualise la page. + /// + public void RefreshPage() { - Mgr.SelectedTransaction = selectedItem; - await Navigation.PushModalAsync(new TransactionsPage()); + BindingContext = Mgr.SelectedAccount; } - } + /// + /// Gère le clic sur une transaction. + /// + public async void Transaction_Clicked(Object sender, EventArgs e) + { + var selectedItem = (sender as Grid)?.BindingContext as Transaction; + + if (selectedItem != null) + { + Mgr.SelectedTransaction = selectedItem; + await Navigation.PushModalAsync(new TransactionsPage()); + } + } + } } diff --git a/src/Banquale/Banquale/Views/Balance/BalanceView.xaml.cs b/src/Banquale/Banquale/Views/Balance/BalanceView.xaml.cs index c5bf00e..aa99ff0 100644 --- a/src/Banquale/Banquale/Views/Balance/BalanceView.xaml.cs +++ b/src/Banquale/Banquale/Views/Balance/BalanceView.xaml.cs @@ -1,34 +1,44 @@ -using System.Diagnostics; +using System.Diagnostics; using Model; -namespace Banquale.Views.Balance; - -public partial class BalanceView : ContentView +namespace Banquale.Views.Balance { + /// + /// Vue pour afficher les différentes transactions d'un compte. + /// + public partial class BalanceView : ContentView + { + public Manager Mgr => (App.Current as App).MyManager; - public Manager Mgr => (App.Current as App).MyManager; - - public BalanceView() - { - InitializeComponent(); - BindingContext = Mgr.SelectedAccount; - } + /// + /// Constructeur de la vue BalanceView. + /// + public BalanceView() + { + InitializeComponent(); + BindingContext = Mgr.SelectedAccount; + } - public async void Transaction_Clicked(Object sender, EventArgs e) - { - var selectedItem = (sender as Grid)?.BindingContext as Transaction; + /// + /// Gère l'événement de clic sur une transaction. + /// + public async void Transaction_Clicked(Object sender, EventArgs e) + { + var selectedItem = (sender as Grid)?.BindingContext as Transaction; - if (selectedItem != null) - { - Mgr.SelectedTransaction = selectedItem; - await Navigation.PushModalAsync(new TransactionsPage()); + if (selectedItem != null) + { + Mgr.SelectedTransaction = selectedItem; + await Navigation.PushModalAsync(new TransactionsPage()); + } } - } - public void RefreshView() - { - BindingContext = Mgr.SelectedAccount; - - + /// + /// Rafraîchit la vue. + /// + public void RefreshView() + { + BindingContext = Mgr.SelectedAccount; + } } } diff --git a/src/Banquale/Banquale/Views/Category/CategoryPage.xaml.cs b/src/Banquale/Banquale/Views/Category/CategoryPage.xaml.cs index 36768c5..d238d6b 100644 --- a/src/Banquale/Banquale/Views/Category/CategoryPage.xaml.cs +++ b/src/Banquale/Banquale/Views/Category/CategoryPage.xaml.cs @@ -1,13 +1,20 @@ using Model; -namespace Banquale.Views.Category; - -public partial class CategoryPage : ContentPage +namespace Banquale.Views.Category { + /// + /// Page de catégorie. + /// + public partial class CategoryPage : ContentPage + { + public Manager Mgr => (App.Current as App).MyManager; - public Manager Mgr => (App.Current as App).MyManager; - public CategoryPage() - { - InitializeComponent(); - } -} \ No newline at end of file + /// + /// Constructeur de la page CategoryPage. + /// + public CategoryPage() + { + InitializeComponent(); + } + } +} diff --git a/src/Banquale/Banquale/Views/Category/CategoryView.xaml.cs b/src/Banquale/Banquale/Views/Category/CategoryView.xaml.cs index 88597b1..e3ab210 100644 --- a/src/Banquale/Banquale/Views/Category/CategoryView.xaml.cs +++ b/src/Banquale/Banquale/Views/Category/CategoryView.xaml.cs @@ -1,26 +1,36 @@ using Model; -namespace Banquale.Views.Category; - -public partial class CategoryView : ContentView +namespace Banquale.Views.Category { + /// + /// Vue partielle pour afficher les différentes catégories. + /// + public partial class CategoryView : ContentView + { + public Manager Mgr => (App.Current as App).MyManager; - public Manager Mgr => (App.Current as App).MyManager; - public CategoryView() - { - InitializeComponent(); - BindingContext = Mgr; - } + /// + /// Constructeur de la vue CategoryView. + /// + public CategoryView() + { + InitializeComponent(); + BindingContext = Mgr; + } - public async void Category_Clicked(object sender, EventArgs e) - { - var selectedItem = (sender as Grid)?.BindingContext as string; - if (selectedItem != null) + /// + /// Gère l'événement de clic sur une catégorie. + /// + public async void Category_Clicked(object sender, EventArgs e) { - Mgr.SelectedTransaction.ChangeCategory(selectedItem); - Mgr.Persistence.DataSave(Mgr.CustomersList, Mgr.Consultant); - await Shell.Current.Navigation.PopAsync(); + var selectedItem = (sender as Grid)?.BindingContext as string; + + if (selectedItem != null) + { + Mgr.SelectedTransaction.ChangeCategory(selectedItem); + Mgr.Persistence.DataSave(Mgr.CustomersList, Mgr.Consultant); + await Shell.Current.Navigation.PopAsync(); + } } - } -} \ No newline at end of file +} diff --git a/src/Banquale/Banquale/Views/ConnectionPage.xaml.cs b/src/Banquale/Banquale/Views/ConnectionPage.xaml.cs index 2d2f00d..98d4d34 100644 --- a/src/Banquale/Banquale/Views/ConnectionPage.xaml.cs +++ b/src/Banquale/Banquale/Views/ConnectionPage.xaml.cs @@ -1,49 +1,57 @@ using Model; -namespace Banquale.Views; - -public partial class ConnectionPage : ContentPage +namespace Banquale.Views { - public Manager Mgr => (App.Current as App).MyManager; - - public ConnectionPage() - { - InitializeComponent(); - } - - public async void Connection_Clicked(Object sender, EventArgs e) + /// + /// Page de connexion. + /// + public partial class ConnectionPage : ContentPage { - uint currentId = Convert.ToUInt32(ident.Text); - string password = pass.Text; - - if (string.IsNullOrWhiteSpace(ident.Text) || string.IsNullOrWhiteSpace(password)) - { - await DisplayAlert("Erreur", "Tout les champs doivent être complétés", "OK"); - return; - } + public Manager Mgr => (App.Current as App).MyManager; - if(currentId == 0 && password == "consultant") + /// + /// Initialise une nouvelle instance de la classe ConnectionPage. + /// + public ConnectionPage() { - Mgr.IsConsultant = true; - await Navigation.PushModalAsync(new ConsultantHomePage()); - return; - } - else - { - Mgr.IsConsultant = false; + InitializeComponent(); } - Customer customer = Mgr.CustomersList.FirstOrDefault(u => u.Id == currentId && u.Password == password); - if (customer == null) + /// + /// Gère l'événement du bouton de connexion. + /// + public async void Connection_Clicked(Object sender, EventArgs e) { - await DisplayAlert("Erreur", "Le mot de passe ou l'id entré est incorrect.", "OK"); - return; + uint currentId = Convert.ToUInt32(ident.Text); + string password = pass.Text; + + if (string.IsNullOrWhiteSpace(ident.Text) || string.IsNullOrWhiteSpace(password)) + { + await DisplayAlert("Erreur", "Tous les champs doivent être complétés", "OK"); + return; + } + + if (currentId == 0 && password == "consultant") + { + Mgr.IsConsultant = true; + await Navigation.PushModalAsync(new ConsultantHomePage()); + return; + } + else + { + Mgr.IsConsultant = false; + } + + Customer customer = Mgr.CustomersList.FirstOrDefault(u => u.Id == currentId && u.Password == password); + if (customer == null) + { + await DisplayAlert("Erreur", "Le mot de passe ou l'identifiant entré est incorrect.", "OK"); + return; + } + + Mgr.SelectedCustomer = customer; + + await Navigation.PushModalAsync(new SwitchAccountPage()); } - - Mgr.SelectedCustomer = customer; - - - await Navigation.PushModalAsync(new SwitchAccountPage()); } - -} \ No newline at end of file +} diff --git a/src/Banquale/Banquale/Views/ConsultantHomePage.xaml.cs b/src/Banquale/Banquale/Views/ConsultantHomePage.xaml.cs index be0840f..ac1beaf 100644 --- a/src/Banquale/Banquale/Views/ConsultantHomePage.xaml.cs +++ b/src/Banquale/Banquale/Views/ConsultantHomePage.xaml.cs @@ -1,33 +1,48 @@ -namespace Banquale.Views; - -public partial class ConsultantHomePage : ContentPage +namespace Banquale.Views { - public ConsultantHomePage() - { - InitializeComponent(); - } - - async void DisconnectionClicked(System.Object sender, System.EventArgs e) + /// + /// Page d'accueil du consultant. + /// + public partial class ConsultantHomePage : ContentPage { - await Shell.Current.GoToAsync("///connection"); - } + /// + /// Initialise une nouvelle instance de la classe ConsultantHomePage. + /// + public ConsultantHomePage() + { + InitializeComponent(); + } - async void Id_Clicked(System.Object sender, System.EventArgs e) - { - await Shell.Current.Navigation.PushAsync(new ConsultantIdPage()); - //await Shell.Current.GoToAsync(".."); - } + /// + /// Gère l'événement du bouton de déconnexion. + /// + async void DisconnectionClicked(System.Object sender, System.EventArgs e) + { + await Shell.Current.GoToAsync("///connection"); + } - async void Create_Customer_Clicked(System.Object sender, System.EventArgs e) - { - await Shell.Current.Navigation.PushAsync(new CreateCustomerPage()); - //await Shell.Current.GoToAsync("///createcustomer"); - } + /// + /// Gère l'événement du bouton d'identification du client. + /// + async void Id_Clicked(System.Object sender, System.EventArgs e) + { + await Shell.Current.Navigation.PushAsync(new ConsultantIdPage()); + } - async void Message_Clicked(System.Object sender, System.EventArgs e) - { - await Shell.Current.Navigation.PushAsync(new MessageListPage()); - //await Shell.Current.GoToAsync("///createcustomer"); - } + /// + /// Gère l'événement du bouton de création de client. + /// + async void Create_Customer_Clicked(System.Object sender, System.EventArgs e) + { + await Shell.Current.Navigation.PushAsync(new CreateCustomerPage()); + } -} \ No newline at end of file + /// + /// Gère l'événement du bouton de messagerie. + /// + async void Message_Clicked(System.Object sender, System.EventArgs e) + { + await Shell.Current.Navigation.PushAsync(new MessageListPage()); + } + } +} diff --git a/src/Banquale/Banquale/Views/ConsultantIdPage.xaml.cs b/src/Banquale/Banquale/Views/ConsultantIdPage.xaml.cs index c012111..3018494 100644 --- a/src/Banquale/Banquale/Views/ConsultantIdPage.xaml.cs +++ b/src/Banquale/Banquale/Views/ConsultantIdPage.xaml.cs @@ -1,47 +1,63 @@ -using System.Diagnostics; +using System.Diagnostics; using Banquale.Views; using Model; -namespace Banquale.Views; - -public partial class ConsultantIdPage : ContentPage +namespace Banquale.Views { - public Manager Mgr => (App.Current as App).MyManager; - - public ConsultantIdPage() - { - InitializeComponent(); - } - - public async void Connection_Clicked(Object sender, EventArgs e) + /// + /// Page d'identification du consultant. + /// + public partial class ConsultantIdPage : ContentPage { - uint currentId = Convert.ToUInt32(ident.Text); - - if (string.IsNullOrWhiteSpace(ident.Text)) - { - await DisplayAlert("Erreur", "Il faut rentrer un ID", "OK"); - return; - } - - if (currentId == 0) + /// + /// Obtient le gestionnaire de l'application à partir de l'instance de l'application. + /// + public Manager Mgr => (App.Current as App).MyManager; + + /// + /// Initialise une nouvelle instance de la classe ConsultantIdPage. + /// + public ConsultantIdPage() { - await DisplayAlert("Erreur", "Ce compte est innaccessible", "OK"); - return; + InitializeComponent(); } - Customer customer = Mgr.CustomersList.FirstOrDefault(u => u.Id == currentId); - if (customer == null) + /// + /// Gère l'événement du bouton de connexion. + /// + public async void Connection_Clicked(Object sender, EventArgs e) { - await DisplayAlert("Erreur", "L'id entré est incorrect ou n'existe pas.", "OK"); - return; + // Récupération de l'ID entré + uint currentId = Convert.ToUInt32(ident.Text); + + // Validation de l'ID + if (string.IsNullOrWhiteSpace(ident.Text)) + { + await DisplayAlert("Erreur", "Il faut rentrer un ID", "OK"); + return; + } + + if (currentId == 0) + { + await DisplayAlert("Erreur", "Ce compte est inaccessible", "OK"); + return; + } + + // Recherche du client correspondant à l'ID + Customer customer = Mgr.CustomersList.FirstOrDefault(u => u.Id == currentId); + if (customer == null) + { + await DisplayAlert("Erreur", "L'ID entré est incorrect ou n'existe pas.", "OK"); + return; + } + + // Sélection du client dans le gestionnaire + Mgr.SelectedCustomer = customer; + + Debug.WriteLine(Mgr.IsConsultant); + + // Navigation vers la page de sélection du compte + await Navigation.PushModalAsync(new SwitchAccountPage()); } - - Mgr.SelectedCustomer = customer; - - Debug.WriteLine(Mgr.IsConsultant); - - - await Navigation.PushModalAsync(new SwitchAccountPage()); } - -} \ No newline at end of file +} diff --git a/src/Banquale/Banquale/Views/Converters/Bool2ColorConverters.cs b/src/Banquale/Banquale/Views/Converters/Bool2ColorConverters.cs index bf9a2f3..73832e9 100644 --- a/src/Banquale/Banquale/Views/Converters/Bool2ColorConverters.cs +++ b/src/Banquale/Banquale/Views/Converters/Bool2ColorConverters.cs @@ -7,17 +7,26 @@ using System.Threading.Tasks; namespace Banquale.Views.Converters { + /// + /// Convertisseur de type pour convertir une valeur booléenne en couleur. + /// public class Bool2ColorConverters : IValueConverter { + /// + /// Convertit une valeur booléenne en couleur. + /// public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { - bool NewValue = (bool) value; - - if (NewValue== true) + bool NewValue = (bool)value; + + if (NewValue == true) return Colors.Red; return Colors.Green; } + /// + /// Convertit une couleur en valeur booléenne (non implémenté). + /// public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); diff --git a/src/Banquale/Banquale/Views/Converters/Int2StringConverters.cs b/src/Banquale/Banquale/Views/Converters/Int2StringConverters.cs index ec6a24d..f4f5b57 100644 --- a/src/Banquale/Banquale/Views/Converters/Int2StringConverters.cs +++ b/src/Banquale/Banquale/Views/Converters/Int2StringConverters.cs @@ -8,15 +8,18 @@ using System.Threading.Tasks; namespace Banquale.Views.Converters { + /// + /// Convertisseur de type pour convertir un entier en chaîne de caractères avec un signe. + /// public class Int2StringConverters : IValueConverter { + /// + /// Convertit un entier en chaîne de caractères avec un signe. + /// public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { string res; Debug.WriteLine(parameter); - //return value.ToString(); - //if (parameter is not bool) - // return false; bool NewParameter = (bool)parameter; if (NewParameter) res = "-" + (string)value; @@ -25,6 +28,9 @@ namespace Banquale.Views.Converters return res; } + /// + /// Convertit une chaîne de caractères en entier (non implémenté). + /// public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); diff --git a/src/Banquale/Banquale/Views/CreateCustomerPage.xaml.cs b/src/Banquale/Banquale/Views/CreateCustomerPage.xaml.cs index adde7b5..5cb435f 100644 --- a/src/Banquale/Banquale/Views/CreateCustomerPage.xaml.cs +++ b/src/Banquale/Banquale/Views/CreateCustomerPage.xaml.cs @@ -1,136 +1,170 @@ -using System.Diagnostics; +using System.Diagnostics; using Model; -namespace Banquale.Views; -public partial class CreateCustomerPage : ContentPage +namespace Banquale.Views { - public Manager Mgr => (App.Current as App).MyManager; + /// + /// Page de création de client. + /// + public partial class CreateCustomerPage : ContentPage + { + /// + /// Obtient le gestionnaire de l'application à partir de l'instance de l'application. + /// + public Manager Mgr => (App.Current as App).MyManager; - int nbAccount = 1; + private int nbAccount = 1; + private bool Account2 = false; + private Label account = new Label { }; + private Grid gridAccount = new Grid(); + private Label balance = new Label { }; + private Entry balanceEntry = new Entry { }; + private Label nameLabel = new Label { }; + private Entry nameEntry = new Entry { }; + private Label iban = new Label { }; + private Entry ibanEntry = new Entry { }; - bool Account2 = false; + /// + /// Initialise une nouvelle instance de la classe CreateCustomerPage. + /// + public CreateCustomerPage() + { + InitializeComponent(); + } - Label account = new Label { }; - Grid gridAccount = new Grid(); - Label balance = new Label { }; - Entry balanceEntry = new Entry { }; - Label nameLabel = new Label { }; - Entry nameEntry = new Entry { }; - Label iban = new Label { }; - Entry ibanEntry = new Entry { }; + /// + /// Gère l'événement du bouton de création de client. + /// + public async void Create_Customer_Clicked(System.Object sender, System.EventArgs e) + { + // Récupération des valeurs des champs + double BalanceAccount2 = Convert.ToDouble(balanceEntry.Text); + string NameAccount2 = nameEntry.Text; + string IbanAccount2 = ibanEntry.Text; + string name = NameEntry.Text; + string firstName = FirstNameEntry.Text; + string password = PasswordEntry.Text; + string accountName = AccountNameEntry.Text; + double accountBalance = Convert.ToDouble(AccountBalanceEntry.Text); + string accountIban = AccountIbanEntry.Text; - public CreateCustomerPage() - { - InitializeComponent(); - } + // Validation des champs + if (string.IsNullOrWhiteSpace(name) || string.IsNullOrWhiteSpace(firstName) || string.IsNullOrWhiteSpace(password) + || double.IsNegative(accountBalance) || string.IsNullOrWhiteSpace(accountName) + || string.IsNullOrWhiteSpace(accountIban) || string.IsNullOrWhiteSpace(AccountBalanceEntry.Text) + || Account2 == true && string.IsNullOrWhiteSpace(NameAccount2) || Account2 == true && string.IsNullOrWhiteSpace(IbanAccount2) + || Account2 == true && double.IsNegative(BalanceAccount2) || Account2 == true && string.IsNullOrWhiteSpace(balanceEntry.Text)) + { + await DisplayAlert("Erreur", "Tous les champs doivent être renseignés et corrects (pas de solde négatif)", "OK"); + } + else if (AccountIbanEntry.Text.Length != 27 || IbanAccount2.Length != 27) + { + await DisplayAlert("Erreur", "L'IBAN doit contenir exactement 27 caractères.", "OK"); + } + else + { + // Création du client + Customer customer = new Customer(name, firstName, password); + Account account1 = new Account(accountBalance, accountName, accountIban); + customer.AccountsList.Add(account1); - public async void Create_Customer_Clicked(System.Object sender, System.EventArgs e) - { + if (Account2 == true) + { + Account account2 = new Account(BalanceAccount2, NameAccount2, IbanAccount2); + customer.AccountsList.Add(account2); + Debug.WriteLine(account2.IBAN); + } + + // Ajout du client au gestionnaire + Mgr.CustomersList.Add(customer); - double BalanceAccount2 = Convert.ToDouble(balanceEntry.Text); - string NameAccount2 = nameEntry.Text; - string IbanAccount2 = ibanEntry.Text; - string name = NameEntry.Text; - string firstName = FirstNameEntry.Text; - string password = PasswordEntry.Text; - string accountName = AccountNameEntry.Text; - double accountBalance = Convert.ToDouble(AccountBalanceEntry.Text); - string accountIban = AccountIbanEntry.Text; - - if (string.IsNullOrWhiteSpace(name) || string.IsNullOrWhiteSpace(firstName) || string.IsNullOrWhiteSpace(password) - || double.IsNegative(accountBalance) || string.IsNullOrWhiteSpace(accountName) - || string.IsNullOrWhiteSpace(accountIban) || string.IsNullOrWhiteSpace(AccountBalanceEntry.Text) - || Account2 == true && string.IsNullOrWhiteSpace(NameAccount2) || Account2 == true && string.IsNullOrWhiteSpace(IbanAccount2) - || Account2 == true && double.IsNegative(BalanceAccount2) || Account2 == true && string.IsNullOrWhiteSpace(balanceEntry.Text)) - { - await DisplayAlert("Erreur", "Tous les champs doivent être renseignés et corect (pas de solde négatif)", "OK"); - } - else if(AccountIbanEntry.Text.Length != 27 || IbanAccount2.Length != 27) - { - await DisplayAlert("Erreur", "L'IBAN doit contenir exactement 25 chiffres.", "OK"); - } - else - { - Customer customer = new Customer(name, firstName, password); - Account account1 = new Account(accountBalance, accountName, accountIban); - customer.AccountsList.Add(account1); - if (Account2 == true) - { - Account account2 = new Account(BalanceAccount2, NameAccount2, IbanAccount2); - customer.AccountsList.Add(account2); - Debug.WriteLine(account2.IBAN); + Debug.WriteLine(customer.Id); + Debug.WriteLine(customer.Password); + Debug.WriteLine(account1.IBAN); + Debug.WriteLine(customer.AccountsList[0].Balance); + Debug.WriteLine(customer.AccountsList[1].Balance); + + await DisplayAlert("Création", "Client " + customer.Name + " créé avec succès.", "OK"); + await Shell.Current.Navigation.PopAsync(); } - Mgr.CustomersList.Add(customer); - Debug.WriteLine(customer.Id); - Debug.WriteLine(customer.Password); - Debug.WriteLine(account1.IBAN); - Debug.WriteLine(customer.AccountsList[0].Balance); - Debug.WriteLine(customer.AccountsList[1].Balance); - await DisplayAlert("Création", "Client " + customer.Name +" crée avec succès.", "OK"); - await Shell.Current.Navigation.PopAsync(); - } - } + } - public void Account_Clicked(object sender, EventArgs e) - { - Account2 = true; - nbAccount++; - if(nbAccount >= 3) - { - DisplayAlert("Erreur", "Impossible d'ajouter plus de compte. Un client ne peut avoir plus de 2 comptes.", "OK"); - return; - } - account.Text = "Compte " + Convert.ToString(nbAccount); - account.FontSize = 25; - account.TextColor = Colors.DarkRed; - ColumnDefinition col1 = new ColumnDefinition(GridLength.Star); - ColumnDefinition col2 = new ColumnDefinition(GridLength.Star); - RowDefinition row1 = new RowDefinition(GridLength.Auto); - RowDefinition row2 = new RowDefinition(GridLength.Auto); - gridAccount.RowDefinitions.Add(row1); - gridAccount.RowDefinitions.Add(row2); - gridAccount.ColumnDefinitions.Add(col1); - gridAccount.ColumnDefinitions.Add(col2); - balance.Text = "Solde"; - balance.FontSize = 16; - balanceEntry.Placeholder = "Entrez le solde du compte"; - balanceEntry.Keyboard = Keyboard.Numeric; - nameLabel.Text = "Nom du compte"; - nameLabel.FontSize = 16; - nameEntry.Placeholder = "Entrez le nom du compte"; - iban.Text = "IBAN"; - iban.FontSize = 16; - ibanEntry.Text = "FR"; - ibanEntry.TextChanged += IbanChanged; - ibanEntry.Placeholder = "Entrez l'IBAN du compte"; - ibanEntry.Keyboard = Keyboard.Numeric; - StackLayout.Add(account); - gridAccount.SetColumn(balance, 0); - gridAccount.SetRow(balance, 0); - gridAccount.SetColumn(balanceEntry, 0); - gridAccount.SetRow(balanceEntry, 1); - gridAccount.SetColumn(nameLabel, 1); - gridAccount.SetRow(nameLabel, 0); - gridAccount.SetColumn(nameEntry, 1); - gridAccount.SetColumn(nameEntry, 1); - gridAccount.Children.Add(balance); - gridAccount.Children.Add(balanceEntry); - gridAccount.Children.Add(nameLabel); - gridAccount.Children.Add(nameEntry); - StackLayout.Add(gridAccount); - StackLayout.Add(iban); - StackLayout.Add(ibanEntry); - } + /// + /// Gère l'événement du bouton d'ajout de compte. + /// + public void Account_Clicked(object sender, EventArgs e) + { + Account2 = true; + nbAccount++; + + if (nbAccount >= 3) + { + DisplayAlert("Erreur", "Impossible d'ajouter plus de compte. Un client ne peut avoir plus de 2 comptes.", "OK"); + return; + } - public void IbanChanged(object sender, EventArgs e) - { - if(AccountIbanEntry.Text.Length < 2 || ibanEntry.Text.Length < 2) - { - DisplayAlert("Erreur", "Vous ne pouvez pas effacer le FR !", "OK"); - var cast = ((Entry)sender); - cast.Text = "FR"; - cast.CursorPosition = 3; - } - } + account.Text = "Compte " + Convert.ToString(nbAccount); + account.FontSize = 25; + account.TextColor = Colors.DarkRed; + ColumnDefinition col1 = new ColumnDefinition(GridLength.Star); + ColumnDefinition col2 = new ColumnDefinition(GridLength.Star); + RowDefinition row1 = new RowDefinition(GridLength.Auto); + RowDefinition row2 = new RowDefinition(GridLength.Auto); + + gridAccount.RowDefinitions.Add(row1); + gridAccount.RowDefinitions.Add(row2); + gridAccount.ColumnDefinitions.Add(col1); + gridAccount.ColumnDefinitions.Add(col2); + + balance.Text = "Solde"; + balance.FontSize = 16; + balanceEntry.Placeholder = "Entrez le solde du compte"; + balanceEntry.Keyboard = Keyboard.Numeric; + + nameLabel.Text = "Nom du compte"; + nameLabel.FontSize = 16; + nameEntry.Placeholder = "Entrez le nom du compte"; + + iban.Text = "IBAN"; + iban.FontSize = 16; + ibanEntry.Text = "FR"; + ibanEntry.TextChanged += IbanChanged; + ibanEntry.Placeholder = "Entrez l'IBAN du compte"; + ibanEntry.Keyboard = Keyboard.Numeric; + + StackLayout.Add(account); + gridAccount.SetColumn(balance, 0); + gridAccount.SetRow(balance, 0); + gridAccount.SetColumn(balanceEntry, 0); + gridAccount.SetRow(balanceEntry, 1); + gridAccount.SetColumn(nameLabel, 1); + gridAccount.SetRow(nameLabel, 0); + gridAccount.SetColumn(nameEntry, 1); + gridAccount.SetColumn(nameEntry, 1); + + gridAccount.Children.Add(balance); + gridAccount.Children.Add(balanceEntry); + gridAccount.Children.Add(nameLabel); + gridAccount.Children.Add(nameEntry); + + StackLayout.Add(gridAccount); + StackLayout.Add(iban); + StackLayout.Add(ibanEntry); + } + + /// + /// Gère l'événement de modification de l'IBAN. + /// + public void IbanChanged(object sender, EventArgs e) + { + if (AccountIbanEntry.Text.Length < 2 || ibanEntry.Text.Length < 2) + { + DisplayAlert("Erreur", "Vous ne pouvez pas effacer le FR !", "OK"); + var cast = ((Entry)sender); + cast.Text = "FR"; + cast.CursorPosition = 3; + } + } + } } diff --git a/src/Banquale/Banquale/Views/HelpPage.xaml.cs b/src/Banquale/Banquale/Views/HelpPage.xaml.cs index 170bf80..0526a04 100644 --- a/src/Banquale/Banquale/Views/HelpPage.xaml.cs +++ b/src/Banquale/Banquale/Views/HelpPage.xaml.cs @@ -1,27 +1,45 @@ using Model; + namespace Banquale.Views; +/// +/// Page d'aide permettant aux utilisateurs d'envoyer des messages de demande d'aide. +/// public partial class HelpPage : ContentPage { + /// + /// Obtient le gestionnaire de l'application à partir de l'instance de l'application. + /// public Manager Mgr => (App.Current as App).MyManager; - public HelpPage() - { - InitializeComponent(); - } + /// + /// Initialise une nouvelle instance de la classe HelpPage. + /// + public HelpPage() + { + InitializeComponent(); + } + + /// + /// Gère l'événement du bouton d'envoi. + /// public async void Send_Clicked(Object sender, EventArgs e) { - if(Subject.Text.Length >= 50 || Description.Text.Length >= 200) + if (Subject.Text.Length >= 50 || Description.Text.Length >= 200) { - await DisplayAlert("Erreur", "Trop de caracteres", "OK"); + await DisplayAlert("Erreur", "Trop de caractères", "OK"); } else { + // Crée un nouveau message de demande d'aide Message message = Account.AskForHelp(Subject.Text, Description.Text); + + // Ajoute le message à la liste des messages du consultant Mgr.Consultant.MessagesList.Add(message); + + // Navigue vers la page de solde await Shell.Current.GoToAsync("//balance"); } - } - } + diff --git a/src/Banquale/Banquale/Views/MessageListPage.xaml.cs b/src/Banquale/Banquale/Views/MessageListPage.xaml.cs index ffc7549..8376f96 100644 --- a/src/Banquale/Banquale/Views/MessageListPage.xaml.cs +++ b/src/Banquale/Banquale/Views/MessageListPage.xaml.cs @@ -1,18 +1,31 @@ -using System.Diagnostics; -using System.Runtime.Serialization.DataContracts; +using System.Diagnostics; +using System.Runtime.Serialization.DataContracts; using Model; -namespace Banquale.Views; - -public partial class MessageListPage : ContentPage +namespace Banquale.Views { - public Manager Mgr => (App.Current as App).MyManager; + /// + /// Page affichant la liste des messages. + /// + public partial class MessageListPage : ContentPage + { + /// + /// Obtient le gestionnaire de l'application à partir de l'instance de l'application. + /// + public Manager Mgr => (App.Current as App).MyManager; + + /// + /// Initialise une nouvelle instance de la classe MessageListPage. + /// + public MessageListPage() + { + // Affiche le sujet du premier message dans les logs de débogage + Debug.WriteLine(Mgr.Consultant.MessagesList[0].Subject); + + // Lie le contexte de liaison au gestionnaire + BindingContext = Mgr; - public MessageListPage() - { - Debug.WriteLine(Mgr.Consultant.MessagesList[0].Subject); - BindingContext = Mgr; - InitializeComponent(); - + InitializeComponent(); + } } } diff --git a/src/Banquale/Banquale/Views/SwitchAccountPage.xaml.cs b/src/Banquale/Banquale/Views/SwitchAccountPage.xaml.cs index d76f5e1..ccaa2cd 100644 --- a/src/Banquale/Banquale/Views/SwitchAccountPage.xaml.cs +++ b/src/Banquale/Banquale/Views/SwitchAccountPage.xaml.cs @@ -1,62 +1,84 @@ -using System.Diagnostics; -using Banquale.Views.Balance; +using System.Diagnostics; +using Banquale.Views.Balance; using Model; -namespace Banquale.Views; - -public partial class SwitchAccountPage : ContentPage +namespace Banquale.Views { + /// + /// Page permettant de basculer entre les comptes. + /// + public partial class SwitchAccountPage : ContentPage + { + /// + /// Obtient le gestionnaire de l'application à partir de l'instance de l'application (Manager Mgr). + /// + public Manager Mgr => (App.Current as App).MyManager; - public Manager Mgr => (App.Current as App).MyManager; - public SwitchAccountPage() - { - InitializeComponent(); - BindingContext = Mgr.SelectedCustomer; - } - - protected override void OnAppearing() - { - base.OnAppearing(); - - RefreshData(); - } + /// + /// Initialise une nouvelle instance de la classe SwitchAccountPage. + /// + public SwitchAccountPage() + { + InitializeComponent(); - public async void Transfer_Clicked(object sender, EventArgs e) - { - var selectedItem = (sender as Button)?.BindingContext as Account; - - if (selectedItem != null) - { - Mgr.SelectedAccount = selectedItem; - if (Mgr.IsConsultant == true) - { - await Shell.Current.Navigation.PushAsync(new Balance.BalancePage()); - } - else - { - await Shell.Current.GoToAsync("//balance"); - var balancePage = Shell.Current.CurrentPage as BalancePage; - balancePage?.RefreshPage(); - } + // Lie le contexte de liaison au client sélectionné dans le Manager + BindingContext = Mgr.SelectedCustomer; } - - } - async void DisconnectionClicked(object sender, EventArgs e) - { - if(Mgr.IsConsultant == true) + /// + /// Méthode appelée lorsque la page apparaît. + /// + protected override void OnAppearing() { - await Shell.Current.Navigation.PopAsync(); + base.OnAppearing(); + + RefreshData(); } - else + + /// + /// Gère l'événement du bouton de transfert. + /// + public async void Transfer_Clicked(object sender, EventArgs e) { - await Shell.Current.GoToAsync("///connection"); + var selectedItem = (sender as Button)?.BindingContext as Account; + + if (selectedItem != null) + { + Mgr.SelectedAccount = selectedItem; + if (Mgr.IsConsultant) + { + await Shell.Current.Navigation.PushAsync(new Balance.BalancePage()); + } + else + { + await Shell.Current.GoToAsync("//balance"); + var balancePage = Shell.Current.CurrentPage as BalancePage; + balancePage?.RefreshPage(); + } + } } - } + /// + /// Gère l'événement du bouton de déconnexion. + /// + async void DisconnectionClicked(object sender, EventArgs e) + { + if (Mgr.IsConsultant) + { + await Shell.Current.Navigation.PopAsync(); + } + else + { + await Shell.Current.GoToAsync("///connection"); + } + } - private void RefreshData() - { - BindingContext = Mgr.SelectedCustomer; + /// + /// Rafraîchit les données de la page. + /// + private void RefreshData() + { + BindingContext = Mgr.SelectedCustomer; + } } -} \ No newline at end of file +} diff --git a/src/Banquale/Banquale/Views/TransactionsPage.xaml.cs b/src/Banquale/Banquale/Views/TransactionsPage.xaml.cs index f541b71..9405dd7 100644 --- a/src/Banquale/Banquale/Views/TransactionsPage.xaml.cs +++ b/src/Banquale/Banquale/Views/TransactionsPage.xaml.cs @@ -1,82 +1,104 @@ using Model; using Banquale.Views.Category; -namespace Banquale.Views; -public partial class TransactionsPage : ContentPage +namespace Banquale.Views { - public Manager Mgr => (App.Current as App).MyManager; - - public TransactionsPage() - { - InitializeComponent(); - BindingContext = Mgr.SelectedTransaction; + /// + /// Page affichant le détail d'une transaction. + /// + public partial class TransactionsPage : ContentPage + { + /// + /// Obtient le gestionnaire de l'application à partir de l'instance de l'application (Manager Mgr). + /// + public Manager Mgr => (App.Current as App).MyManager; - if(Mgr.IsConsultant == true && Mgr.SelectedTransaction.IsOpposition == false) - { - oppose.Text = "Aucune demande en cours"; - } - else if(Mgr.IsConsultant == true && Mgr.SelectedTransaction.IsOpposition == true) + /// + /// Initialise une nouvelle instance de la classe TransactionsPage. + /// + public TransactionsPage() { - oppose.Text = "Accepter l'opposition"; - refuseOpposition.IsVisible = true; - } - - if(Mgr.IsConsultant == false && Mgr.SelectedTransaction.IsOpposition == true) - { - oppose.Text = "Demande en cours"; - } + InitializeComponent(); - if(Mgr.SelectedTransaction.Type == true) - { - string price1 = sum.Text; - sum.Text = "- " + price1; - sum.TextColor = Colors.Red; - } - else if(Mgr.SelectedTransaction.Type == false) - { - string price2 = sum.Text; - sum.Text = "+ " + price2; - sum.TextColor = Colors.Green; - } - } + // Lie le contexte de liaison aux transactions sélectionnées dans le gestionnaire + BindingContext = Mgr.SelectedTransaction; - async void Categ_Clicked(System.Object sender, System.EventArgs e) - { - await Shell.Current.Navigation.PushAsync(new CategoryPage()); - } + // Configure l'affichage en fonction des conditions + if (Mgr.IsConsultant && !Mgr.SelectedTransaction.IsOpposition) + { + oppose.Text = "Aucune demande en cours"; + } + else if (Mgr.IsConsultant && Mgr.SelectedTransaction.IsOpposition) + { + oppose.Text = "Accepter l'opposition"; + refuseOpposition.IsVisible = true; + } - async void Objection_Clicked(System.Object sender, System.EventArgs e) - { - if(Mgr.IsConsultant == false && Mgr.SelectedTransaction.IsOpposition == false) - { - Mgr.SelectedTransaction.IsOpposition = true; - await DisplayAlert("Opposition", "Votre demande d'opposition à bien été pris en compte", "OK"); - await Shell.Current.Navigation.PopAsync(); + if (!Mgr.IsConsultant && Mgr.SelectedTransaction.IsOpposition) + { + oppose.Text = "Demande en cours"; + } + + if (Mgr.SelectedTransaction.Type) + { + string price1 = sum.Text; + sum.Text = "- " + price1; + sum.TextColor = Colors.Red; + } + else if (!Mgr.SelectedTransaction.Type) + { + string price2 = sum.Text; + sum.Text = "+ " + price2; + sum.TextColor = Colors.Green; + } } - else if(Mgr.IsConsultant == true && Mgr.SelectedTransaction.IsOpposition == true) + + /// + /// Gère l'événement du bouton de la catégorie. + /// + async void Categ_Clicked(System.Object sender, System.EventArgs e) { - Mgr.SelectedAccount.TransactionsList.Remove(Mgr.SelectedTransaction); - await DisplayAlert("Opposition", "La demande d'opposition à été réalisé avec succé", "OK"); - await Shell.Current.Navigation.PopAsync(); + await Shell.Current.Navigation.PushAsync(new CategoryPage()); } - else if (Mgr.IsConsultant == true && Mgr.SelectedTransaction.IsOpposition == false) + + /// + /// Gère l'événement du bouton d'opposition. + /// + async void Objection_Clicked(System.Object sender, System.EventArgs e) { - await DisplayAlert("Erreur", "Aucune demande d'opposition est en cours sur cette transaction", "OK"); - await Shell.Current.Navigation.PopAsync(); + if (!Mgr.IsConsultant && !Mgr.SelectedTransaction.IsOpposition) + { + Mgr.SelectedTransaction.IsOpposition = true; + await DisplayAlert("Opposition", "Votre demande d'opposition a bien été prise en compte", "OK"); + await Shell.Current.Navigation.PopAsync(); + } + else if (Mgr.IsConsultant && Mgr.SelectedTransaction.IsOpposition) + { + Mgr.SelectedAccount.TransactionsList.Remove(Mgr.SelectedTransaction); + await DisplayAlert("Opposition", "La demande d'opposition a été réalisée avec succès", "OK"); + await Shell.Current.Navigation.PopAsync(); + } + else if (Mgr.IsConsultant && !Mgr.SelectedTransaction.IsOpposition) + { + await DisplayAlert("Erreur", "Aucune demande d'opposition en cours pour cette transaction", "OK"); + await Shell.Current.Navigation.PopAsync(); + } + else if (!Mgr.IsConsultant && Mgr.SelectedTransaction.IsOpposition) + { + await DisplayAlert("Opposition", "Votre demande est en cours. Veuillez patienter SVP.", "OK"); + await Shell.Current.Navigation.PopAsync(); + } } - else if (Mgr.IsConsultant == false && Mgr.SelectedTransaction.IsOpposition == true) + + /// + /// Gère l'événement du bouton de refus d'opposition du coté du consultant. + /// + async void Refuse_Clicked(System.Object sender, System.EventArgs e) { - await DisplayAlert("Opposition", "Votre demande est en cours. Veuillez patienter SVP.", "OK"); + Mgr.SelectedTransaction.IsOpposition = false; + await DisplayAlert("Opposition", "La demande d'opposition a bien été refusée", "OK"); + refuseOpposition.IsVisible = false; await Shell.Current.Navigation.PopAsync(); } - - } - - async void Refuse_Clicked(System.Object sender, System.EventArgs e) - { - Mgr.SelectedTransaction.IsOpposition = false; - await DisplayAlert("Opposition", "La demande d'opposition à bien été refusé", "OK"); - refuseOpposition.IsVisible = false; - await Shell.Current.Navigation.PopAsync(); } -} \ No newline at end of file +} diff --git a/src/Banquale/Banquale/Views/Transfer/MenuTransferPage.xaml.cs b/src/Banquale/Banquale/Views/Transfer/MenuTransferPage.xaml.cs index 0831b73..470c0bd 100644 --- a/src/Banquale/Banquale/Views/Transfer/MenuTransferPage.xaml.cs +++ b/src/Banquale/Banquale/Views/Transfer/MenuTransferPage.xaml.cs @@ -1,25 +1,40 @@ -namespace Banquale.Views.Transfer; - -public partial class MenuTransferPage : ContentPage +namespace Banquale.Views.Transfer { - public MenuTransferPage() - { - InitializeComponent(); - } - - public async void RIB_Clicked(object sender, EventArgs e) + /// + /// Page de menu pour les transferts. + /// + public partial class MenuTransferPage : ContentPage { - await Shell.Current.Navigation.PushAsync(new RibPage()); - } + /// + /// Initialise une nouvelle instance de la classe MenuTransferPage. + /// + public MenuTransferPage() + { + InitializeComponent(); + } - public async void Request_Clicked(object sender, EventArgs e) - { - await Shell.Current.Navigation.PushAsync(new RequestPage()); - } + /// + /// Gère l'événement du bouton "RIB". + /// + public async void RIB_Clicked(object sender, EventArgs e) + { + await Shell.Current.Navigation.PushAsync(new RibPage()); + } - public async void Transfer_Clicked(object sender, EventArgs e) - { - await Shell.Current.Navigation.PushAsync(new TransferPage()); - } + /// + /// Gère l'événement du bouton "Demande". + /// + public async void Request_Clicked(object sender, EventArgs e) + { + await Shell.Current.Navigation.PushAsync(new RequestPage()); + } + /// + /// Gère l'événement du bouton "Transfert". + /// + public async void Transfer_Clicked(object sender, EventArgs e) + { + await Shell.Current.Navigation.PushAsync(new TransferPage()); + } + } } diff --git a/src/Banquale/Banquale/Views/Transfer/RequestPage.xaml.cs b/src/Banquale/Banquale/Views/Transfer/RequestPage.xaml.cs index e271cb2..ff42e04 100644 --- a/src/Banquale/Banquale/Views/Transfer/RequestPage.xaml.cs +++ b/src/Banquale/Banquale/Views/Transfer/RequestPage.xaml.cs @@ -1,62 +1,79 @@ using Model; using Microsoft.Maui.Controls; -namespace Banquale.Views.Transfer; - -public partial class RequestPage : ContentPage +namespace Banquale.Views.Transfer { - public Manager Mgr => (App.Current as App).MyManager; - - public RequestPage() - { - InitializeComponent(); - } - - public async void Send_Clicked(Object sender, EventArgs e) + /// + /// Page de demande de virement. + /// + public partial class RequestPage : ContentPage { + public Manager Mgr => (App.Current as App).MyManager; - if (string.IsNullOrEmpty(Name.Text) || string.IsNullOrEmpty(IBAN.Text) || string.IsNullOrEmpty(Sum.Text)) - { - await DisplayAlert("Erreur", "Tout les champs doivent être complétés", "OK"); - return; - } - else if(IBAN.Text.Length != 27) + /// + /// Initialise une nouvelle instance de la classe RequestPage. + /// + public RequestPage() { - await DisplayAlert("Erreur", "L'IBAN doit contenir exactement 25 chiffres.", "OK"); + InitializeComponent(); } - if (Name.Text == Mgr.SelectedAccount.Name && IBAN.Text == Mgr.SelectedAccount.IBAN) - { - await DisplayAlert("Erreur", "Vous ne pouvez vous faire de demande à vous même", "OK"); - return; - } - foreach (var cust in Mgr.CustomersList) + + /// + /// Gère l'événement du bouton d'envoi de la demande de virement. + /// + public async void Send_Clicked(Object sender, EventArgs e) { - foreach (var acc in cust.AccountsList) + if (string.IsNullOrEmpty(Name.Text) || string.IsNullOrEmpty(IBAN.Text) || string.IsNullOrEmpty(Sum.Text)) { - if (acc.Name == Name.Text && acc.IBAN == IBAN.Text) + await DisplayAlert("Erreur", "Tous les champs doivent être complétés", "OK"); + return; + } + else if (IBAN.Text.Length != 27) + { + await DisplayAlert("Erreur", "L'IBAN doit contenir exactement 25 chiffres.", "OK"); + return; + } + + if (Name.Text == Mgr.SelectedAccount.Name && IBAN.Text == Mgr.SelectedAccount.IBAN) + { + await DisplayAlert("Erreur", "Vous ne pouvez pas effectuer une demande de virement à votre propre compte", "OK"); + return; + } + + foreach (var cust in Mgr.CustomersList) + { + foreach (var acc in cust.AccountsList) { - if (acc.Balance - Convert.ToDouble(Sum.Text) < 0) + if (acc.Name == Name.Text && acc.IBAN == IBAN.Text) { - await DisplayAlert("Erreur", "Le compte ne possède assez d'argent sur son compte pour aboutir à la transaction", "OK"); + if (acc.Balance - Convert.ToDouble(Sum.Text) < 0) + { + await DisplayAlert("Erreur", "Le compte ne possède pas suffisamment d'argent pour effectuer la transaction", "OK"); + return; + } + + acc.DoTransactions(Mgr.SelectedAccount, Convert.ToDouble(Sum.Text), true); // Type true car c'est un virement que le SelectedAccount reçoit + Mgr.Persistence.DataSave(Mgr.CustomersList, Mgr.Consultant); + await Shell.Current.Navigation.PopAsync(); return; } - acc.DoTransactions(Mgr.SelectedAccount, Convert.ToDouble(Sum.Text), true); // Type true car c'est un virement que le SelectedAccount reçoit - Mgr.Persistence.DataSave(Mgr.CustomersList, Mgr.Consultant); - await Shell.Current.Navigation.PopAsync(); - return; } } + + await DisplayAlert("Erreur", "Le compte n'existe pas", "OK"); } - await DisplayAlert("Erreur", "Le compte n'existe pas", "OK"); - } - public void IbanChanged(object sender, EventArgs e) - { - if (IBAN.Text.Length < 2) + /// + /// Gère l'événement de modification de l'Entry de l'IBAN. + /// + public void IbanChanged(object sender, EventArgs e) { - DisplayAlert("Erreur", "Vous ne pouvez pas effacer le FR !", "OK"); - var cast = ((Entry)sender); - cast.Text = "FR"; + if (IBAN.Text.Length < 2) + { + DisplayAlert("Erreur", "Vous ne pouvez pas effacer le FR !", "OK"); + var cast = ((Entry)sender); + cast.Text = "FR"; + } } } } diff --git a/src/Banquale/Banquale/Views/Transfer/RibPage.xaml.cs b/src/Banquale/Banquale/Views/Transfer/RibPage.xaml.cs index 61771ee..729b5a4 100644 --- a/src/Banquale/Banquale/Views/Transfer/RibPage.xaml.cs +++ b/src/Banquale/Banquale/Views/Transfer/RibPage.xaml.cs @@ -1,14 +1,21 @@ using Model; -namespace Banquale.Views.Transfer; - -public partial class RibPage : ContentPage +namespace Banquale.Views.Transfer { - public Manager Mgr => (App.Current as App).MyManager; + /// + /// Page d'affichage du RIB. + /// + public partial class RibPage : ContentPage + { + public Manager Mgr => (App.Current as App).MyManager; - public RibPage() - { - InitializeComponent(); - BindingContext = Mgr; + /// + /// Initialise une nouvelle instance de la classe RibPage. + /// + public RibPage() + { + InitializeComponent(); + BindingContext = Mgr; + } } } diff --git a/src/Banquale/Banquale/Views/Transfer/TransferPage.xaml.cs b/src/Banquale/Banquale/Views/Transfer/TransferPage.xaml.cs index acb0f87..a792040 100644 --- a/src/Banquale/Banquale/Views/Transfer/TransferPage.xaml.cs +++ b/src/Banquale/Banquale/Views/Transfer/TransferPage.xaml.cs @@ -1,61 +1,74 @@ using Model; using System.Linq; -namespace Banquale.Views.Transfer; -public partial class TransferPage : ContentPage +namespace Banquale.Views.Transfer { - public Manager Mgr => (App.Current as App).MyManager; - - public TransferPage() - { - InitializeComponent(); - } - - public async void Send_Clicked(Object sender, EventArgs e) + /// + /// Page de transfert d'argent. + /// + public partial class TransferPage : ContentPage { + public Manager Mgr => (App.Current as App).MyManager; - if (string.IsNullOrEmpty(Name.Text) || string.IsNullOrEmpty(IBAN.Text) || string.IsNullOrEmpty(Sum.Text)) + /// + /// Initialise une nouvelle instance de la classe TransferPage. + /// + public TransferPage() { - await DisplayAlert("Erreur", "Tout les champs doivent être complétés", "OK"); - return; + InitializeComponent(); } - else if (IBAN.Text.Length != 27) - { - await DisplayAlert("Erreur", "L'IBAN doit contenir exactement 25 chiffres.", "OK"); - } - if(Name.Text == Mgr.SelectedAccount.Name && IBAN.Text == Mgr.SelectedAccount.IBAN) - { - await DisplayAlert("Erreur", "Vous ne pouvez vous faire de virement à vous même", "OK"); - return; - } - foreach (var cust in Mgr.CustomersList) + + /// + /// Gère l'événement du bouton d'envoi de transfert. + /// + public async void Send_Clicked(Object sender, EventArgs e) { - foreach (var acc in cust.AccountsList) + if (string.IsNullOrEmpty(Name.Text) || string.IsNullOrEmpty(IBAN.Text) || string.IsNullOrEmpty(Sum.Text)) + { + await DisplayAlert("Erreur", "Tous les champs doivent être complétés", "OK"); + return; + } + else if (IBAN.Text.Length != 27) { - if(acc.Name == Name.Text && acc.IBAN == IBAN.Text) + await DisplayAlert("Erreur", "L'IBAN doit contenir exactement 25 chiffres.", "OK"); + } + if (Name.Text == Mgr.SelectedAccount.Name && IBAN.Text == Mgr.SelectedAccount.IBAN) + { + await DisplayAlert("Erreur", "Vous ne pouvez pas vous faire un virement à vous-même", "OK"); + return; + } + foreach (var cust in Mgr.CustomersList) + { + foreach (var acc in cust.AccountsList) { - if(Mgr.SelectedAccount.Balance - Convert.ToDouble(Sum.Text) < 0) + if (acc.Name == Name.Text && acc.IBAN == IBAN.Text) { - await DisplayAlert("Erreur", "Vous ne possèdez pas assez d'argent sur ce compte pour aboutir à la transaction", "OK"); + if (Mgr.SelectedAccount.Balance - Convert.ToDouble(Sum.Text) < 0) + { + await DisplayAlert("Erreur", "Vous ne possédez pas suffisamment d'argent sur ce compte pour effectuer la transaction", "OK"); + return; + } + Mgr.SelectedAccount.DoTransactions(acc, Convert.ToDouble(Sum.Text), true); // Type true car c'est un virement + Mgr.Persistence.DataSave(Mgr.CustomersList, Mgr.Consultant); + await Shell.Current.Navigation.PopAsync(); return; } - Mgr.SelectedAccount.DoTransactions(acc, Convert.ToDouble(Sum.Text), true); // Type true car c'est un virement - Mgr.Persistence.DataSave(Mgr.CustomersList, Mgr.Consultant); - await Shell.Current.Navigation.PopAsync(); - return; } } + await DisplayAlert("Erreur", "Le compte n'existe pas", "OK"); } - await DisplayAlert("Erreur", "Le compte n'existe pas", "OK"); - } - public void IbanChanged(object sender, EventArgs e) - { - if (IBAN.Text.Length < 2) + /// + /// Gère l'événement du changement de l'IBAN. + /// + public void IbanChanged(object sender, EventArgs e) { - DisplayAlert("Erreur", "Vous ne pouvez pas effacer le FR !", "OK"); - var cast = ((Entry)sender); - cast.Text = "FR"; + if (IBAN.Text.Length < 2) + { + DisplayAlert("Erreur", "Vous ne pouvez pas effacer le FR !", "OK"); + var cast = ((Entry)sender); + cast.Text = "FR"; + } } } -} \ No newline at end of file +} diff --git a/src/Banquale/Model/Account.cs b/src/Banquale/Model/Account.cs index acc304b..03b2e25 100644 --- a/src/Banquale/Model/Account.cs +++ b/src/Banquale/Model/Account.cs @@ -1,6 +1,6 @@ /// \file /// \brief Définition de la classe Account. -/// \author Votre nom +/// \author PEREDERII Antoine, LOUVET Titouan using System; using System.Collections.Generic; @@ -109,15 +109,15 @@ namespace Model /// Obtient ou définit la liste des transactions effectuées sur le compte. /// [DataMember(Order = 5)] - public ObservableCollection TransactionsList + public ObservableCollection TransactionsList { get => transactionsList; set { transactionsList = value; OnPropertyChanged(nameof(TransactionsList)); - } - } + } + } private ObservableCollection transactionsList; diff --git a/src/Banquale/Model/Consultant.cs b/src/Banquale/Model/Consultant.cs index 67b47a6..e55d0a1 100644 --- a/src/Banquale/Model/Consultant.cs +++ b/src/Banquale/Model/Consultant.cs @@ -1,6 +1,6 @@ /// \file /// \brief Définition de la classe Consultant. -/// \author Votre nom +/// \author PEREDERII Antoine, LOUVET Titouan using System; using System.Runtime.Serialization; diff --git a/src/Banquale/Model/Customer.cs b/src/Banquale/Model/Customer.cs index 5ad9c2f..c26c1e2 100644 --- a/src/Banquale/Model/Customer.cs +++ b/src/Banquale/Model/Customer.cs @@ -1,6 +1,6 @@ /// \file /// \brief Définition de la classe Customer. -/// \author Votre nom +/// \author PEREDERII Antoine, LOUVET Titouan using System; using System.Collections.Generic; diff --git a/src/Banquale/Model/IPersistenceManager.cs b/src/Banquale/Model/IPersistenceManager.cs index eeafcfc..0233b44 100644 --- a/src/Banquale/Model/IPersistenceManager.cs +++ b/src/Banquale/Model/IPersistenceManager.cs @@ -1,6 +1,6 @@ /// \file /// \brief Définition de l'interface IPersistenceManager. -/// \author Votre nom +/// \author PEREDERII Antoine, LOUVET Titouan using System; using System.Collections.Generic; @@ -15,7 +15,7 @@ namespace Model /// /// Charge les données depuis une source de persistance. /// - /// Un tuple contenant lle hashSet des clients et le consultant. + /// Un tuple contenant le hashSet des clients et le consultant. public (HashSet, Consultant) DataLoad(); /// diff --git a/src/Banquale/Model/Manager.cs b/src/Banquale/Model/Manager.cs index 9024a63..91a0f7b 100644 --- a/src/Banquale/Model/Manager.cs +++ b/src/Banquale/Model/Manager.cs @@ -1,6 +1,6 @@ /// \file /// \brief Définition de la classe Manager. -/// \author Votre nom +/// \author PEREDERII Antoine, LOUVET Titouan using System; using System.Collections.Generic; @@ -16,11 +16,11 @@ namespace Model /// [DataContract] public class Manager : INotifyPropertyChanged - { + { public event PropertyChangedEventHandler? PropertyChanged; void OnPropertyChanged([CallerMemberName] string? propertyName = null) - => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); /// /// Liste des clients gérés par le gestionnaire. @@ -28,7 +28,7 @@ namespace Model [DataMember] public HashSet CustomersList { get; private set; } - public ObservableCollection CategoryList { get; private set; } = new ObservableCollection {"Automobile", "Santé", "Abonnement", "Logement", "Impôts et taxes", "Courses", "Loisirs et sorties", "Enfant(s)"}; + public ObservableCollection CategoryList { get; private set; } = new ObservableCollection { "Automobile", "Santé", "Abonnement", "Logement", "Impôts et taxes", "Courses", "Loisirs et sorties", "Enfant(s)" }; /// /// Consultant assigné au gestionnaire. @@ -102,10 +102,10 @@ namespace Model /// /// Gestionnaire de persistance. public Manager(IPersistenceManager persistence) - { + { CustomersList = new HashSet(); - Persistence = persistence; - } + Persistence = persistence; + } /// /// Constructeur du gestionnaire sans gestionnaire de persistance. @@ -138,10 +138,10 @@ namespace Model /// Charge les données depuis la source de persistance. /// public void DataLoad() - { - var data = Persistence.DataLoad(); + { + var data = Persistence.DataLoad(); - CustomersList =data.Item1; + CustomersList = data.Item1; Consultant = data.Item2; } diff --git a/src/Banquale/Model/Message.cs b/src/Banquale/Model/Message.cs index 205a296..5a9fc35 100644 --- a/src/Banquale/Model/Message.cs +++ b/src/Banquale/Model/Message.cs @@ -1,6 +1,6 @@ /// \file /// \brief Définition de la classe Message. -/// \author Votre nom +/// \author PEREDERII Antoine, LOUVET Titouan using System; using System.ComponentModel; @@ -38,8 +38,6 @@ namespace Model private string subject; - - /// /// Description du message. /// @@ -56,6 +54,7 @@ namespace Model } private string description; + /// /// Constructeur de la classe Message. /// diff --git a/src/Banquale/Model/Person.cs b/src/Banquale/Model/Person.cs index 59e8a59..837fa39 100644 --- a/src/Banquale/Model/Person.cs +++ b/src/Banquale/Model/Person.cs @@ -1,6 +1,6 @@ /// \file /// \brief Définition de la classe Person. -/// \author Votre nom +/// \author PEREDERII Antoine, LOUVET Titouan using System; using System.Collections.Generic; diff --git a/src/Banquale/Model/Transaction.cs b/src/Banquale/Model/Transaction.cs index 19bf44c..6fa79da 100644 --- a/src/Banquale/Model/Transaction.cs +++ b/src/Banquale/Model/Transaction.cs @@ -1,4 +1,9 @@ -using System.ComponentModel; +/// \file +/// \brief Définition de la classe Message. +/// \author PEREDERII Antoine, LOUVET Titouan + + +using System.ComponentModel; using System.Runtime.Serialization; namespace Model