From d0a1f8d9618a192807afbce42aad2b25c2754488 Mon Sep 17 00:00:00 2001 From: pantaflex44 Date: Sun, 27 Jun 2021 22:08:42 +0200 Subject: [PATCH] =?UTF-8?q?Ajout=20d'=C3=A9v=C3=A9nements=20pour=20remonte?= =?UTF-8?q?r=20les=20ajouts,=20modifications,=20et=20suppressions=20d'?= =?UTF-8?q?=C3=A9l=C3=A9ments=20dans=20les=20diff=C3=A9rentes=20liste=20(d?= =?UTF-8?q?=C3=A9riv=C3=A9es=20d'ObjectList)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Kotlib.test/Program.cs | 170 +++++++++++++++++++++++----- Kotlib/Financial.cs | 21 +++- Kotlib/Objects/AccountList.cs | 94 +++++++++++++++- Kotlib/Objects/CategoryList.cs | 140 +++++++++++++++++++++++ Kotlib/Objects/Event.cs | 6 +- Kotlib/Objects/EventList.cs | 62 ++++++++++ Kotlib/Objects/IdentityList.cs | 140 +++++++++++++++++++++++ Kotlib/Objects/OperationList.cs | 136 ++++++++++++++++++++++ Kotlib/Objects/PaytypeList.cs | 136 ++++++++++++++++++++++ Kotlib/Objects/ThirdpartyList.cs | 140 +++++++++++++++++++++++ Kotlib/Objects/TransferList.cs | 138 +++++++++++++++++++++++ README.md | 187 +++++++++++++++++++++++-------- 12 files changed, 1292 insertions(+), 78 deletions(-) diff --git a/Kotlib.test/Program.cs b/Kotlib.test/Program.cs index 86d628e..92113ab 100644 --- a/Kotlib.test/Program.cs +++ b/Kotlib.test/Program.cs @@ -35,25 +35,34 @@ public static void Main(string[] args) { Console.OutputEncoding = Encoding.UTF8; + // Création d'une nouvelle identité var me = new Identity(name: "Christophe LEMOINE") { Lastname = "LEMOINE", Forname = "Christophe" }; + // Création d'un moyen de paiement de type 'Carte bancaire' var bc = new BankCard(name: "CIC Mastercard Tof") { Number = "5135 1800 0000 0001", CVV = "123", Date = new CardDate(2025, 12) }; - bc.Name = "CIC Mastercard"; - + + // Création d'un élément bancaire de type 'Portefeuille d'espèces' + var wl = new Wallet(name: "Portefeuille de Tof", + owner: me) + { + Electronic = false + }; + + // Création d'un élément bancaire de type 'Compte bancaire' var ba = new BankAccount(name: "CIC Compte courant", owner: me) { BankName = "CIC", - Iban = "FR76 1180 8009 1012 3456 7890 147", + Iban = "FR76 5896 1234 7852 1456 9856 147", Bic = "CMCIFRPP", Contact = new Identity(name: "CIC COUERON") { @@ -64,6 +73,9 @@ public static void Main(string[] args) InitialAmount = 300.0d }; + //############################################################################################################### + + // Création du dossier financier et ajout des informations liées var fi = Financial.Create( name: "Mon dossier financier", owner: me, @@ -74,9 +86,57 @@ public static void Main(string[] args) ); Console.WriteLine(); Console.WriteLine("Creation d'un dossier financier nommé {0}", fi.Name); - fi.UpdatedEvent += (sender, e) => Console.WriteLine("fi1 updated " + sender.GetType().UnderlyingSystemType); - fi.SavedEvent += (sender, e) => Console.WriteLine("fi1 saved."); + // Abonnements aux événements + // dossier financier + fi.UpdatedEvent += (sender, e) => Console.WriteLine("fi1 - Modification d'une propriété de type: " + sender.GetType().Name); + fi.SavedEvent += (sender, e) => Console.WriteLine("fi1 - Sauvegardé."); + // événements programmés + fi.Events.PostEventAddedEvent += (postEvent) => Console.WriteLine("fi1 - Ajout de la programmation id {2}, '{0}' de type {1}", postEvent.Name, postEvent.GetType().Name, postEvent.Id); + fi.Events.PostEventUpdatedEvent += (postEvent) => Console.WriteLine("fi1 - Modification de la programmation id {1}, '{0}'", postEvent.Name, postEvent.Id); + fi.Events.PostEventRemovedEvent += (postEvent) => Console.WriteLine("fi1 - Suppression de la programmation id {1}, '{0}'", postEvent.Name, postEvent.Id); + fi.PostRaisedEvent += (date, postEvent) => + { + Console.WriteLine("fi1 - L'occurence '{0}' programmée pour le {1} sur le compte {2} vient dêtre postée.", + postEvent.Name, + date.ToLongDateString(), + fi.Accounts.GetById(postEvent.AccountId).Name); + Console.WriteLine("dates restantes: {0}", + string.Join(", ", postEvent.GetNextCalendar().Select(d => d.ToLongDateString()))); + Console.WriteLine("prochaine date: {0} ({1}/{2} occurences restantes)\r\n", + postEvent.NextDate.ToLongDateString(), + postEvent.Counter, + postEvent.RepeatCount); + }; + // éléments bancaires + fi.Accounts.AccountAddedEvent += (account) => Console.WriteLine("fi1 - Ajout de l'élément bancaire id {2}, '{0}' de type {1}", account.Name, account.GetType().Name, account.Id); + fi.Accounts.AccountUpdatedEvent += (account) => Console.WriteLine("fi1 - Modification de l'élément bancaire id {1}, '{0}'", account.Name, account.Id); + fi.Accounts.AccountRemovedEvent += (account) => Console.WriteLine("fi1 - Suppression de l'élément bancaire id {1}, '{0}'", account.Name, account.Id); + // catégories + fi.Categories.CategoryAddedEvent += (category) => Console.WriteLine("fi1 - Ajout de la catégorie id {2}, '{0}' de type {1}", category.Name, category.GetType().Name, category.Id); + fi.Categories.CategoryUpdatedEvent += (category) => Console.WriteLine("fi1 - Modification de la catégorie id {1}, '{0}'", category.Name, category.Id); + fi.Categories.CategoryRemovedEvent += (category) => Console.WriteLine("fi1 - Suppression de la catégorie id {1}, '{0}'", category.Name, category.Id); + // moyens de paiements + fi.Paytypes.PaytypeAddedEvent += (paytype) => Console.WriteLine("fi1 - Ajout d'un moyen de paiements id {2}, '{0}' de type {1}", paytype.Name, paytype.GetType().Name, paytype.Id); + fi.Paytypes.PaytypeUpdatedEvent += (paytype) => Console.WriteLine("fi1 - Modification d'un moyen de paiements id {1}, '{0}'", paytype.Name, paytype.Id); + fi.Paytypes.PaytypeRemovedEvent += (paytype) => Console.WriteLine("fi1 - Suppression d'un moyen de paiements id {1}, '{0}'", paytype.Name, paytype.Id); + // tiers + fi.Thirdparties.ThirdpartyAddedEvent += (thirdparty) => Console.WriteLine("fi1 - Ajout d'un tiers id {2}, '{0}' de type {1}", thirdparty.Name, thirdparty.GetType().Name, thirdparty.Id); + fi.Thirdparties.ThirdpartyUpdatedEvent += (thirdparty) => Console.WriteLine("fi1 - Modification d'un tiers id {1}, '{0}'", thirdparty.Name, thirdparty.Id); + fi.Thirdparties.ThirdpartyRemovedEvent += (thirdparty) => Console.WriteLine("fi1 - Suppression d'un tiers id {1}, '{0}'", thirdparty.Name, thirdparty.Id); + // transferts + fi.Accounts.Transfers.TransferAddedEvent += (transfer) => Console.WriteLine("fi1 - Ajout d'un transfert id {2}, '{0}' de type {1}", transfer.Name, transfer.GetType().Name, transfer.Id); + fi.Accounts.Transfers.TransferUpdatedEvent += (transfer) => Console.WriteLine("fi1 - Modification d'un transfert id {1}, '{0}'", transfer.Name, transfer.Id); + fi.Accounts.Transfers.TransferRemovedEvent += (transfer) => Console.WriteLine("fi1 - Suppression d'un transfert id {1}, '{0}'", transfer.Name, transfer.Id); + // operations + fi.Accounts.Items.ForEach(a => + { + a.Operations.OperationAddedEvent += (operation) => Console.WriteLine("fi1 - {0} - Ajout d'une opération id {3}, '{1}' de type {2}", a.Name, operation.Name, operation.GetType().Name, operation.Id); + a.Operations.OperationUpdatedEvent += (operation) => Console.WriteLine("fi1 - {0} - Modification d'une opération id {2}, '{1}'", a.Name, operation.Name, operation.Id); + a.Operations.OperationRemovedEvent += (operation) => Console.WriteLine("fi1 - {0} - Suppression d'une opération id {2}, '{1}'", a.Name, operation.Name, operation.Id); + }); + + // Création d'une nouvelle programmation Console.WriteLine(); var p = new Event(name: "essai", accountId: fi.Accounts[0].Id, @@ -93,29 +153,98 @@ public static void Main(string[] args) p.RepeatCount); Console.WriteLine("dates restantes: {0}", string.Join(", ", p.GetNextCalendar().Select(d => d.ToLongDateString()))); - - Console.WriteLine(); Console.WriteLine("Activation de la programmation"); p.Active = true; fi.Events.Add(p); - + + // Ajout de l'élément bancaire 'Portefeuille d'espèces' au dossie financier + Console.WriteLine(); + Console.WriteLine("Ajout d'un portefeuille d'èspèces..."); + fi.Accounts.Add(wl); + Console.WriteLine("renommage du portefeuille d'espèces en 'Mon porte monnaie'..."); + wl.Name = "Mon porte monnaie"; + + // Sauvegarde du dossier financier Console.WriteLine(); Console.WriteLine("Enregistrement du dossier financier..."); string filepath = fi.SaveToFile(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), password: "bob"); + + //############################################################################################################### + + // Chargement du dossier financier précédement enregistré Console.WriteLine(); Console.WriteLine("Rechargement du dossier financier..."); var fi2 = Financial.LoadFromFile(filepath, password: "bob"); - fi2.UpdatedEvent += (sender, e) => Console.WriteLine("fi2 updated " + sender.GetType().UnderlyingSystemType); - byte[] datas2 = fi2.Serialize(); - Console.WriteLine(); + // Abonnements aux événements + // dossier financier + fi2.UpdatedEvent += (sender, e) => Console.WriteLine("fi2 - Modification d'une propriété de type: " + sender.GetType().Name); + fi.SavedEvent += (sender, e) => Console.WriteLine("fi2 - Sauvegardé."); + // événements programmés + fi2.Events.PostEventAddedEvent += (postEvent) => Console.WriteLine("fi2 - Ajout de la programmation id {2}, '{0}' de type {1}", postEvent.Name, postEvent.GetType().Name, postEvent.Id); + fi2.Events.PostEventUpdatedEvent += (postEvent) => Console.WriteLine("fi2 - Modification de la programmation id {1}, '{0}'", postEvent.Name, postEvent.Id); + fi2.Events.PostEventRemovedEvent += (postEvent) => Console.WriteLine("fi2 - Suppression de la programmation id {1}, '{0}'", postEvent.Name, postEvent.Id); + fi2.PostRaisedEvent += (date, postEvent) => + { + Console.WriteLine("fi2 - L'occurence '{0}' programmée pour le {1} sur le compte {2} vient dêtre postée.", + postEvent.Name, + date.ToLongDateString(), + fi2.Accounts.GetById(postEvent.AccountId).Name); + Console.WriteLine("dates restantes: {0}", + string.Join(", ", postEvent.GetNextCalendar().Select(d => d.ToLongDateString()))); + Console.WriteLine("prochaine date: {0} ({1}/{2} occurences restantes)\r\n", + postEvent.NextDate.ToLongDateString(), + postEvent.Counter, + postEvent.RepeatCount); + }; + // éléments bancaires + fi2.Accounts.AccountAddedEvent += (account) => Console.WriteLine("fi2 - Ajout de l'élément bancaire id {2}, '{0}' de type {1}", account.Name, account.GetType().Name, account.Id); + fi2.Accounts.AccountUpdatedEvent += (account) => Console.WriteLine("fi2 - Modification de l'élément bancaire id {1}, '{0}'", account.Name, account.Id); + fi2.Accounts.AccountRemovedEvent += (account) => Console.WriteLine("fi2 - Suppression de l'élément bancaire id {1}, '{0}'", account.Name, account.Id); + // catégories + fi2.Categories.CategoryAddedEvent += (category) => Console.WriteLine("fi2 - Ajout de la catégorie id {2}, '{0}' de type {1}", category.Name, category.GetType().Name, category.Id); + fi2.Categories.CategoryUpdatedEvent += (category) => Console.WriteLine("fi2 - Modification de la catégorie id {1}, '{0}'", category.Name, category.Id); + fi2.Categories.CategoryRemovedEvent += (category) => Console.WriteLine("fi2 - Suppression de la catégorie id {1}, '{0}'", category.Name, category.Id); + // moyens de paiements + fi2.Paytypes.PaytypeAddedEvent += (paytype) => Console.WriteLine("fi2 - Ajout d'un moyen de paiements id {2}, '{0}' de type {1}", paytype.Name, paytype.GetType().Name, paytype.Id); + fi2.Paytypes.PaytypeUpdatedEvent += (paytype) => Console.WriteLine("fi2 - Modification d'un moyen de paiements id {1}, '{0}'", paytype.Name, paytype.Id); + fi2.Paytypes.PaytypeRemovedEvent += (paytype) => Console.WriteLine("fi2 - Suppression d'un moyen de paiements id {1}, '{0}'", paytype.Name, paytype.Id); + // tiers + fi2.Thirdparties.ThirdpartyAddedEvent += (thirdparty) => Console.WriteLine("fi2 - Ajout d'un tiers id {2}, '{0}' de type {1}", thirdparty.Name, thirdparty.GetType().Name, thirdparty.Id); + fi2.Thirdparties.ThirdpartyUpdatedEvent += (thirdparty) => Console.WriteLine("fi2 - Modification d'un tiers id {1}, '{0}'", thirdparty.Name, thirdparty.Id); + fi2.Thirdparties.ThirdpartyRemovedEvent += (thirdparty) => Console.WriteLine("fi2 - Suppression d'un tiers id {1}, '{0}'", thirdparty.Name, thirdparty.Id); + // transferts + fi2.Accounts.Transfers.TransferAddedEvent += (transfer) => Console.WriteLine("fi2 - Ajout d'un transfert id {2}, '{0}' de type {1}", transfer.Name, transfer.GetType().Name, transfer.Id); + fi2.Accounts.Transfers.TransferUpdatedEvent += (transfer) => Console.WriteLine("fi2 - Modification d'un transfert id {1}, '{0}'", transfer.Name, transfer.Id); + fi2.Accounts.Transfers.TransferRemovedEvent += (transfer) => Console.WriteLine("fi2 - Suppression d'un transfert id {1}, '{0}'", transfer.Name, transfer.Id); + // operations + fi2.Accounts.Items.ForEach(a => + { + a.Operations.OperationAddedEvent += (operation) => Console.WriteLine("fi2 - {0} - Ajout d'une opération id {3}, '{1}' de type {2}", a.Name, operation.Name, operation.GetType().Name, operation.Id); + a.Operations.OperationUpdatedEvent += (operation) => Console.WriteLine("fi2 - {0} - Modification d'une opération id {2}, '{1}'", a.Name, operation.Name, operation.Id); + a.Operations.OperationRemovedEvent += (operation) => Console.WriteLine("fi2 - {0} - Suppression d'une opération id {2}, '{1}'", a.Name, operation.Name, operation.Id); + }); + + // Affichage pour l'exemple des données brutes du dossier financier Console.WriteLine("Affichage du contenu brut:"); - Console.WriteLine(Encoding.UTF8.GetString(datas2)); + Console.WriteLine("------------------------------------------------------------------------------------------------------"); + Console.WriteLine(Encoding.UTF8.GetString(fi2.Serialize())); + Console.WriteLine("------------------------------------------------------------------------------------------------------"); + // Poste automatiquement toutes les occurences programmées en retard (jusqu'a ce jour) + Console.WriteLine(); + Console.WriteLine("Postage automatique de toutes les occurences restantes en retard...\r\n"); + fi2.AutoPostOverdue(); + + + //############################################################################################################### + + // Pour l'exemple, calcule et affichage formatté du solde total de tous les éléments bancaires Console.WriteLine(); Console.WriteLine("Solde total: {0}", fi2.Currency.Format(fi2.AmountAt(DateTime.Now, addInitialAmount: true))); + // Pour l'exemple, liste toutes les monnaies disponibles et indique celle du systeme Console.WriteLine(); foreach (var c in Currencies.Availlable.OrderBy(a => a.CultureFullname)) { @@ -123,22 +252,7 @@ public static void Main(string[] args) Console.WriteLine("Culture système: {0} | Monnaie: {1} {2}", c.CultureFullname, c.Symbol, c.Name); } - if (!fi2.Accounts.GetById(fi2.Events[0].AccountId).Equals(default(Account))) - { - Console.WriteLine(); - Console.WriteLine("Postage des occurences passées pour le compte {0} depuis le {1}", - fi2.Accounts.GetById(fi2.Events[0].AccountId).Name, - fi2.Events[0].StartDate.ToLongDateString()); - fi2.Events[0].PostOverdue(); - Console.WriteLine("dates restantes: {0}", - string.Join(", ", fi2.Events[0].GetNextCalendar().Select(d => d.ToLongDateString()))); - Console.WriteLine("prochaine date: {0} ({1}/{2} occurences restantes)", - fi2.Events[0].NextDate.ToLongDateString(), - fi2.Events[0].Counter, - fi2.Events[0].RepeatCount); - } - else - fi2.Events.Remove(fi2.Events[0]); + Console.ReadLine(); } diff --git a/Kotlib/Financial.cs b/Kotlib/Financial.cs index a7028b5..65ed2e1 100644 --- a/Kotlib/Financial.cs +++ b/Kotlib/Financial.cs @@ -150,6 +150,17 @@ public void OnSaved(object sender, EventArgs e) SavedEvent.Invoke(sender, e); } + /// + /// Informe qu'un événement programmé vient d'être posté + /// + /// Date programmée + /// Evénement et ses détails + public void OnPostRaised(DateTime date, Event postEvent) + { + if (PostRaisedEvent != null) + PostRaisedEvent(date, postEvent); + } + /// /// S'execute lorsque qu'un événement est posté /// @@ -158,9 +169,12 @@ public void OnSaved(object sender, EventArgs e) private void EventPosted(DateTime date, Event postEvent) { var account = Accounts.GetById(postEvent.AccountId); - if(!account.Equals(default(Account))) + if (!account.Equals(default(Account))) { //TODO: Traiter l'opération ou le transfert à poster + + + OnPostRaised(date, postEvent); } } @@ -183,6 +197,11 @@ private void EventPosted(DateTime date, Event postEvent) /// public event EventHandler SavedEvent; + /// + /// Se produit lorsque qu'un événement programmé est posté + /// + public event Event.PostDelegate PostRaisedEvent; + #endregion #region Propriétés publiques diff --git a/Kotlib/Objects/AccountList.cs b/Kotlib/Objects/AccountList.cs index fc4bd28..6618277 100644 --- a/Kotlib/Objects/AccountList.cs +++ b/Kotlib/Objects/AccountList.cs @@ -34,6 +34,62 @@ namespace Kotlib.Objects public class AccountList : ObjectList { + #region Evénements + + /// + /// Délégué en charge des événements d'ajout, modification et supppression + /// + /// Elément concené + public delegate void AccountEventHandler(Account account); + /// + /// Un élément a été ajouté + /// + public event AccountEventHandler AccountAddedEvent; + /// + /// Un élément a été modifié + /// + public event AccountEventHandler AccountUpdatedEvent; + /// + /// Un élément a été supprimé + /// + public event AccountEventHandler AccountRemovedEvent; + + #endregion + + #region Fonctions privées + + /// + /// Informe qu'un élément a été ajouté + /// + /// Elément concerné + public void OnAccountAdded(Account account) + { + if (AccountAddedEvent != null) + AccountAddedEvent(account); + } + + /// + /// Informe qu'un élément a été modifié + /// + /// Elément concerné + public void OnAccountUpdated(Account account) + { + if (AccountUpdatedEvent != null) + AccountUpdatedEvent(account); + } + + /// + /// Informe qu'un élément a été supprimé + /// + /// Elément concerné + public void OnAccountRemoved(Account account) + { + if (AccountRemovedEvent != null) + AccountRemovedEvent(account); + } + + #endregion + #region Propriétés publiques /// @@ -115,7 +171,13 @@ public Account GetById(Guid id) set { Transfers.RemoveAll(a => a.FromAccountId.Equals(base[index].Id) || a.ToAccountId.Equals(base[index].Id)); + + OnAccountRemoved(base[index]); + base[index] = value; + + base[index].UpdatedEvent += (sender, e) => OnAccountUpdated((Account)sender); + OnAccountAdded(base[index]); } } @@ -128,6 +190,8 @@ public Account GetById(Guid id) if (index >= 0 && index < base.Count) { Transfers.RemoveAll(a => a.FromAccountId.Equals(base[index].Id) || a.ToAccountId.Equals(base[index].Id)); + + OnAccountRemoved(base[index]); base.RemoveAt(index); } } @@ -138,7 +202,10 @@ public Account GetById(Guid id) public new void Clear() { foreach (var e in Items) + { Transfers.RemoveAll(a => a.FromAccountId.Equals(e.Id) || a.ToAccountId.Equals(e.Id)); + OnAccountRemoved(e); + } base.Clear(); } @@ -151,10 +218,35 @@ public Account GetById(Guid id) public new bool Remove(Account item) { if (base.IndexOf(item) > -1) + { Transfers.RemoveAll(a => a.FromAccountId.Equals(item.Id) || a.ToAccountId.Equals(item.Id)); - + OnAccountRemoved(item); + } return base.Remove(item); } + + /// + /// Ajoute un élément à la liste + /// + /// Item. + public new void Add(Account item) + { + OnAccountAdded(item); + item.UpdatedEvent += (sender, e) => OnAccountUpdated((Account)sender); + base.Add(item); + } + + /// + /// Insert un élément à la position spécifiée + /// + /// Position d'insertion. + /// Elément à insérer. + public new void Insert(int index, Account item) + { + OnAccountAdded(item); + item.UpdatedEvent += (sender, e) => OnAccountUpdated((Account)sender); + base.Insert(index, item); + } /// /// Retourne la liste des éléments bancaires disponibles diff --git a/Kotlib/Objects/CategoryList.cs b/Kotlib/Objects/CategoryList.cs index 94e18f2..393d70c 100644 --- a/Kotlib/Objects/CategoryList.cs +++ b/Kotlib/Objects/CategoryList.cs @@ -31,6 +31,62 @@ namespace Kotlib.Objects /// public class CategoryList : ObjectList { + + #region Evénements + + /// + /// Délégué en charge des événements d'ajout, modification et supppression + /// + /// Elément concené + public delegate void CategoryEventHandler(Category item); + /// + /// Un élément a été ajouté + /// + public event CategoryEventHandler CategoryAddedEvent; + /// + /// Un élément a été modifié + /// + public event CategoryEventHandler CategoryUpdatedEvent; + /// + /// Un élément a été supprimé + /// + public event CategoryEventHandler CategoryRemovedEvent; + + #endregion + + #region Fonctions privées + + /// + /// Informe qu'un élément a été ajouté + /// + /// Elément concerné + public void OnCategoryAdded(Category item) + { + if (CategoryAddedEvent != null) + CategoryAddedEvent(item); + } + + /// + /// Informe qu'un élément a été modifié + /// + /// Elément concerné + public void OnCategoryUpdated(Category item) + { + if (CategoryUpdatedEvent != null) + CategoryUpdatedEvent(item); + } + + /// + /// Informe qu'un élément a été supprimé + /// + /// Elément concerné + public void OnCategoryRemoved(Category item) + { + if (CategoryRemovedEvent != null) + CategoryRemovedEvent(item); + } + + #endregion #region Propriétés publiques @@ -154,6 +210,90 @@ public Category GetById(Guid id) return this.ToList().FirstOrDefault(a => a.Id.Equals(id)); } + /// + /// Retourne l'élément à la position index + /// + /// Position de l'élément. + public new Category this[int index] + { + get + { + return base[index]; + } + set + { + OnCategoryRemoved(base[index]); + + base[index] = value; + + base[index].UpdatedEvent += (sender, e) => OnCategoryUpdated((Category)sender); + OnCategoryAdded(base[index]); + } + } + + /// + /// Supprime l'élément de la liste à la position spécifié + /// + /// Position de l'élément. + public new void RemoveAt(int index) + { + if (index >= 0 && index < base.Count) + { + OnCategoryRemoved(base[index]); + base.RemoveAt(index); + } + } + + /// + /// Vide la liste de ses éléments + /// + public new void Clear() + { + foreach (var e in Items) + { + OnCategoryRemoved(e); + } + + base.Clear(); + } + + /// + /// Supprime un élément de la liste + /// + /// true, l'élément est supprimé, sinon, false. + /// Elément à supprimer. + public new bool Remove(Category item) + { + if (base.IndexOf(item) > -1) + OnCategoryRemoved(item); + + return base.Remove(item); + } + + /// + /// Ajoute un élément à la liste + /// + /// Item. + public new void Add(Category item) + { + OnCategoryAdded(item); + item.UpdatedEvent += (sender, e) => OnCategoryUpdated((Category)sender); + base.Add(item); + } + + /// + /// Insert un élément à la position spécifiée + /// + /// Position d'insertion. + /// Elément à insérer. + public new void Insert(int index, Category item) + { + OnCategoryAdded(item); + item.UpdatedEvent += (sender, e) => OnCategoryUpdated((Category)sender); + base.Insert(index, item); + } + + } } diff --git a/Kotlib/Objects/Event.cs b/Kotlib/Objects/Event.cs index d071440..b531bff 100644 --- a/Kotlib/Objects/Event.cs +++ b/Kotlib/Objects/Event.cs @@ -549,8 +549,7 @@ public bool Post() return false; } - OnPostRaised(NextDate, this); - + var curentDate = NextDate; NextDate = ComputeNextDate(NextDate); _counter--; @@ -558,6 +557,9 @@ public bool Post() _counter = 0; Active &= (NextDate.Date <= EndDate.Date && _counter > 0); + + OnPostRaised(curentDate, this); + return Active; } diff --git a/Kotlib/Objects/EventList.cs b/Kotlib/Objects/EventList.cs index d579562..7b43bc2 100644 --- a/Kotlib/Objects/EventList.cs +++ b/Kotlib/Objects/EventList.cs @@ -44,6 +44,36 @@ public void OnPostRaised(DateTime date, Event postEvent) if (PostRaisedEvent != null) PostRaisedEvent.Invoke(date, postEvent); } + + /// + /// Informe qu'un élément a été ajouté + /// + /// Elément concerné + public void OnPostEventAdded(Event item) + { + if (PostEventAddedEvent != null) + PostEventAddedEvent(item); + } + + /// + /// Informe qu'un élément a été modifié + /// + /// Elément concerné + public void OnPostEventUpdated(Event item) + { + if (PostEventUpdatedEvent != null) + PostEventUpdatedEvent(item); + } + + /// + /// Informe qu'un élément a été supprimé + /// + /// Elément concerné + public void OnPostEventRemoved(Event item) + { + if (PostEventRemovedEvent != null) + PostEventRemovedEvent(item); + } /// /// Lie l'événement UpdatedEvent d'un objet à celui de la liste d'objets @@ -90,6 +120,24 @@ private void _RemovePostRaisedEvent(Event item) /// public event PostDelegate PostRaisedEvent; + /// + /// Délégué en charge des événements d'ajout, modification et supppression + /// + /// Elément concené + public delegate void PostEventEventHandler(Event item); + /// + /// Un élément a été ajouté + /// + public event PostEventEventHandler PostEventAddedEvent; + /// + /// Un élément a été modifié + /// + public event PostEventEventHandler PostEventUpdatedEvent; + /// + /// Un élément a été supprimé + /// + public event PostEventEventHandler PostEventRemovedEvent; + #endregion #region Propriétés publiques @@ -158,8 +206,13 @@ public Event GetById(Guid id) set { _RemovePostRaisedEvent(base[index]); + OnPostEventRemoved(base[index]); + base[index] = value; + base[index].UpdatedEvent += (sender, e) => OnPostEventUpdated((Event)sender); + _AddPostRaisedEvent(base[index]); + OnPostEventAdded(base[index]); } } @@ -172,6 +225,8 @@ public Event GetById(Guid id) if (base.IndexOf(item) == -1) { _AddPostRaisedEvent(item); + OnPostEventAdded(item); + item.UpdatedEvent += (sender, e) => OnPostEventUpdated((Event)sender); base.Add(item); } } @@ -185,6 +240,8 @@ public Event GetById(Guid id) { if (base.IndexOf(item) == -1) { + OnPostEventAdded(item); + item.UpdatedEvent += (sender, e) => OnPostEventUpdated((Event)sender); _AddPostRaisedEvent(item); base.Insert(index, item); } @@ -199,6 +256,7 @@ public Event GetById(Guid id) if (index >= 0 && index < base.Count) { _RemovePostRaisedEvent(base[index]); + OnPostEventRemoved(base[index]); base.RemoveAt(index); } } @@ -209,7 +267,10 @@ public Event GetById(Guid id) public new void Clear() { foreach (var e in base.Items) + { _RemovePostRaisedEvent(e); + OnPostEventRemoved(e); + } base.Clear(); } @@ -224,6 +285,7 @@ public Event GetById(Guid id) if (base.IndexOf(item) > -1) { _RemovePostRaisedEvent(item); + OnPostEventRemoved(item); return base.Remove(item); } return false; diff --git a/Kotlib/Objects/IdentityList.cs b/Kotlib/Objects/IdentityList.cs index 2b36f70..764b604 100644 --- a/Kotlib/Objects/IdentityList.cs +++ b/Kotlib/Objects/IdentityList.cs @@ -32,6 +32,62 @@ namespace Kotlib.Objects public class IdentityList : ObjectList { + #region Evénements + + /// + /// Délégué en charge des événements d'ajout, modification et supppression + /// + /// Elément concené + public delegate void IdentityEventHandler(Identity item); + /// + /// Un élément a été ajouté + /// + public event IdentityEventHandler IdentityAddedEvent; + /// + /// Un élément a été modifié + /// + public event IdentityEventHandler IdentityUpdatedEvent; + /// + /// Un élément a été supprimé + /// + public event IdentityEventHandler IdentityRemovedEvent; + + #endregion + + #region Fonctions privées + + /// + /// Informe qu'un élément a été ajouté + /// + /// Elément concerné + public void OnIdentityAdded(Identity item) + { + if (IdentityAddedEvent != null) + IdentityAddedEvent(item); + } + + /// + /// Informe qu'un élément a été modifié + /// + /// Elément concerné + public void OnIdentityUpdated(Identity item) + { + if (IdentityUpdatedEvent != null) + IdentityUpdatedEvent(item); + } + + /// + /// Informe qu'un élément a été supprimé + /// + /// Elément concerné + public void OnIdentityRemoved(Identity item) + { + if (IdentityRemovedEvent != null) + IdentityRemovedEvent(item); + } + + #endregion + #region Propriétés publiques /// @@ -74,6 +130,90 @@ public Identity GetById(Guid id) return this.ToList().FirstOrDefault(a => a.Id.Equals(id)); } + /// + /// Retourne l'élément à la position index + /// + /// Position de l'élément. + public new Identity this[int index] + { + get + { + return base[index]; + } + set + { + OnIdentityRemoved(base[index]); + + base[index] = value; + + base[index].UpdatedEvent += (sender, e) => OnIdentityUpdated((Identity)sender); + OnIdentityAdded(base[index]); + } + } + + /// + /// Supprime l'élément de la liste à la position spécifié + /// + /// Position de l'élément. + public new void RemoveAt(int index) + { + if (index >= 0 && index < base.Count) + { + OnIdentityRemoved(base[index]); + base.RemoveAt(index); + } + } + + /// + /// Vide la liste de ses éléments + /// + public new void Clear() + { + foreach (var e in Items) + { + OnIdentityRemoved(e); + } + + base.Clear(); + } + + /// + /// Supprime un élément de la liste + /// + /// true, l'élément est supprimé, sinon, false. + /// Elément à supprimer. + public new bool Remove(Identity item) + { + if (base.IndexOf(item) > -1) + OnIdentityRemoved(item); + + return base.Remove(item); + } + + /// + /// Ajoute un élément à la liste + /// + /// Item. + public new void Add(Identity item) + { + OnIdentityAdded(item); + item.UpdatedEvent += (sender, e) => OnIdentityUpdated((Identity)sender); + base.Add(item); + } + + /// + /// Insert un élément à la position spécifiée + /// + /// Position d'insertion. + /// Elément à insérer. + public new void Insert(int index, Identity item) + { + OnIdentityAdded(item); + item.UpdatedEvent += (sender, e) => OnIdentityUpdated((Identity)sender); + base.Insert(index, item); + } + + } } diff --git a/Kotlib/Objects/OperationList.cs b/Kotlib/Objects/OperationList.cs index 124f877..f993ead 100644 --- a/Kotlib/Objects/OperationList.cs +++ b/Kotlib/Objects/OperationList.cs @@ -32,7 +32,60 @@ namespace Kotlib.Objects public class OperationList : ObjectList { + #region Evénements + + /// + /// Délégué en charge des événements d'ajout, modification et supppression + /// + /// Elément concené + public delegate void OperationEventHandler(Operation item); + /// + /// Un élément a été ajouté + /// + public event OperationEventHandler OperationAddedEvent; + /// + /// Un élément a été modifié + /// + public event OperationEventHandler OperationUpdatedEvent; + /// + /// Un élément a été supprimé + /// + public event OperationEventHandler OperationRemovedEvent; + + #endregion + #region Fonctions privées + + /// + /// Informe qu'un élément a été ajouté + /// + /// Elément concerné + public void OnOperationAdded(Operation item) + { + if (OperationAddedEvent != null) + OperationAddedEvent(item); + } + + /// + /// Informe qu'un élément a été modifié + /// + /// Elément concerné + public void OnOperationUpdated(Operation item) + { + if (OperationUpdatedEvent != null) + OperationUpdatedEvent(item); + } + + /// + /// Informe qu'un élément a été supprimé + /// + /// Elément concerné + public void OnOperationRemoved(Operation item) + { + if (OperationRemovedEvent != null) + OperationRemovedEvent(item); + } + #endregion #region Propriétés publiques @@ -88,6 +141,89 @@ public Operation GetById(Guid id) return this.ToList().FirstOrDefault(a => a.Id.Equals(id)); } + /// + /// Retourne l'élément à la position index + /// + /// Position de l'élément. + public new Operation this[int index] + { + get + { + return base[index]; + } + set + { + OnOperationRemoved(base[index]); + + base[index] = value; + + base[index].UpdatedEvent += (sender, e) => OnOperationUpdated((Operation)sender); + OnOperationAdded(base[index]); + } + } + + /// + /// Supprime l'élément de la liste à la position spécifié + /// + /// Position de l'élément. + public new void RemoveAt(int index) + { + if (index >= 0 && index < base.Count) + { + OnOperationRemoved(base[index]); + base.RemoveAt(index); + } + } + + /// + /// Vide la liste de ses éléments + /// + public new void Clear() + { + foreach (var e in Items) + { + OnOperationRemoved(e); + } + + base.Clear(); + } + + /// + /// Supprime un élément de la liste + /// + /// true, l'élément est supprimé, sinon, false. + /// Elément à supprimer. + public new bool Remove(Operation item) + { + if (base.IndexOf(item) > -1) + OnOperationRemoved(item); + + return base.Remove(item); + } + + /// + /// Ajoute un élément à la liste + /// + /// Item. + public new void Add(Operation item) + { + OnOperationAdded(item); + item.UpdatedEvent += (sender, e) => OnOperationUpdated((Operation)sender); + base.Add(item); + } + + /// + /// Insert un élément à la position spécifiée + /// + /// Position d'insertion. + /// Elément à insérer. + public new void Insert(int index, Operation item) + { + OnOperationAdded(item); + item.UpdatedEvent += (sender, e) => OnOperationUpdated((Operation)sender); + base.Insert(index, item); + } + diff --git a/Kotlib/Objects/PaytypeList.cs b/Kotlib/Objects/PaytypeList.cs index 75d97f5..495bcf9 100644 --- a/Kotlib/Objects/PaytypeList.cs +++ b/Kotlib/Objects/PaytypeList.cs @@ -33,7 +33,60 @@ namespace Kotlib.Objects public class PaytypeList : ObjectList { + #region Evénements + + /// + /// Délégué en charge des événements d'ajout, modification et supppression + /// + /// Elément concené + public delegate void PaytypeEventHandler(Paytype item); + /// + /// Un élément a été ajouté + /// + public event PaytypeEventHandler PaytypeAddedEvent; + /// + /// Un élément a été modifié + /// + public event PaytypeEventHandler PaytypeUpdatedEvent; + /// + /// Un élément a été supprimé + /// + public event PaytypeEventHandler PaytypeRemovedEvent; + + #endregion + #region Fonctions privées + + /// + /// Informe qu'un élément a été ajouté + /// + /// Elément concerné + public void OnPaytypeAdded(Paytype item) + { + if (PaytypeAddedEvent != null) + PaytypeAddedEvent(item); + } + + /// + /// Informe qu'un élément a été modifié + /// + /// Elément concerné + public void OnPaytypeUpdated(Paytype item) + { + if (PaytypeUpdatedEvent != null) + PaytypeUpdatedEvent(item); + } + + /// + /// Informe qu'un élément a été supprimé + /// + /// Elément concerné + public void OnPaytypeRemoved(Paytype item) + { + if (PaytypeRemovedEvent != null) + PaytypeRemovedEvent(item); + } + #endregion #region Propriétés publiques @@ -136,6 +189,89 @@ public static List> GetAvaillableCollections() return GetAvaillablePaytypes("collection"); } + /// + /// Retourne l'élément à la position index + /// + /// Position de l'élément. + public new Paytype this[int index] + { + get + { + return base[index]; + } + set + { + OnPaytypeRemoved(base[index]); + + base[index] = value; + + base[index].UpdatedEvent += (sender, e) => OnPaytypeUpdated((Paytype)sender); + OnPaytypeAdded(base[index]); + } + } + + /// + /// Supprime l'élément de la liste à la position spécifié + /// + /// Position de l'élément. + public new void RemoveAt(int index) + { + if (index >= 0 && index < base.Count) + { + OnPaytypeRemoved(base[index]); + base.RemoveAt(index); + } + } + + /// + /// Vide la liste de ses éléments + /// + public new void Clear() + { + foreach (var e in Items) + { + OnPaytypeRemoved(e); + } + + base.Clear(); + } + + /// + /// Supprime un élément de la liste + /// + /// true, l'élément est supprimé, sinon, false. + /// Elément à supprimer. + public new bool Remove(Paytype item) + { + if (base.IndexOf(item) > -1) + OnPaytypeRemoved(item); + + return base.Remove(item); + } + + /// + /// Ajoute un élément à la liste + /// + /// Item. + public new void Add(Paytype item) + { + OnPaytypeAdded(item); + item.UpdatedEvent += (sender, e) => OnPaytypeUpdated((Paytype)sender); + base.Add(item); + } + + /// + /// Insert un élément à la position spécifiée + /// + /// Position d'insertion. + /// Elément à insérer. + public new void Insert(int index, Paytype item) + { + OnPaytypeAdded(item); + item.UpdatedEvent += (sender, e) => OnPaytypeUpdated((Paytype)sender); + base.Insert(index, item); + } + } diff --git a/Kotlib/Objects/ThirdpartyList.cs b/Kotlib/Objects/ThirdpartyList.cs index 095ba89..4e28e6f 100644 --- a/Kotlib/Objects/ThirdpartyList.cs +++ b/Kotlib/Objects/ThirdpartyList.cs @@ -32,6 +32,62 @@ namespace Kotlib.Objects public class ThirdpartyList : ObjectList { + #region Evénements + + /// + /// Délégué en charge des événements d'ajout, modification et supppression + /// + /// Elément concené + public delegate void ThirdpartyEventHandler(Identity item); + /// + /// Un élément a été ajouté + /// + public event ThirdpartyEventHandler ThirdpartyAddedEvent; + /// + /// Un élément a été modifié + /// + public event ThirdpartyEventHandler ThirdpartyUpdatedEvent; + /// + /// Un élément a été supprimé + /// + public event ThirdpartyEventHandler ThirdpartyRemovedEvent; + + #endregion + + #region Fonctions privées + + /// + /// Informe qu'un élément a été ajouté + /// + /// Elément concerné + public void OnThirdpartyAdded(Identity item) + { + if (ThirdpartyAddedEvent != null) + ThirdpartyAddedEvent(item); + } + + /// + /// Informe qu'un élément a été modifié + /// + /// Elément concerné + public void OnThirdpartyUpdated(Identity item) + { + if (ThirdpartyUpdatedEvent != null) + ThirdpartyUpdatedEvent(item); + } + + /// + /// Informe qu'un élément a été supprimé + /// + /// Elément concerné + public void OnThirdpartyRemoved(Identity item) + { + if (ThirdpartyRemovedEvent != null) + ThirdpartyRemovedEvent(item); + } + + #endregion + #region Propriétés publiques /// @@ -74,6 +130,90 @@ public Identity GetById(Guid id) return this.ToList().FirstOrDefault(a => a.Id.Equals(id)); } + /// + /// Retourne l'élément à la position index + /// + /// Position de l'élément. + public new Identity this[int index] + { + get + { + return base[index]; + } + set + { + OnThirdpartyRemoved(base[index]); + + base[index] = value; + + base[index].UpdatedEvent += (sender, e) => OnThirdpartyUpdated((Identity)sender); + OnThirdpartyAdded(base[index]); + } + } + + /// + /// Supprime l'élément de la liste à la position spécifié + /// + /// Position de l'élément. + public new void RemoveAt(int index) + { + if (index >= 0 && index < base.Count) + { + OnThirdpartyRemoved(base[index]); + base.RemoveAt(index); + } + } + + /// + /// Vide la liste de ses éléments + /// + public new void Clear() + { + foreach (var e in Items) + { + OnThirdpartyRemoved(e); + } + + base.Clear(); + } + + /// + /// Supprime un élément de la liste + /// + /// true, l'élément est supprimé, sinon, false. + /// Elément à supprimer. + public new bool Remove(Identity item) + { + if (base.IndexOf(item) > -1) + OnThirdpartyRemoved(item); + + return base.Remove(item); + } + + /// + /// Ajoute un élément à la liste + /// + /// Item. + public new void Add(Identity item) + { + OnThirdpartyAdded(item); + item.UpdatedEvent += (sender, e) => OnThirdpartyUpdated((Identity)sender); + base.Add(item); + } + + /// + /// Insert un élément à la position spécifiée + /// + /// Position d'insertion. + /// Elément à insérer. + public new void Insert(int index, Identity item) + { + OnThirdpartyAdded(item); + item.UpdatedEvent += (sender, e) => OnThirdpartyUpdated((Identity)sender); + base.Insert(index, item); + } + + } } diff --git a/Kotlib/Objects/TransferList.cs b/Kotlib/Objects/TransferList.cs index b60c317..0ba0663 100644 --- a/Kotlib/Objects/TransferList.cs +++ b/Kotlib/Objects/TransferList.cs @@ -32,7 +32,60 @@ namespace Kotlib.Objects public class TransferList : ObjectList { + #region Evénements + + /// + /// Délégué en charge des événements d'ajout, modification et supppression + /// + /// Elément concené + public delegate void TransferEventHandler(Transfer item); + /// + /// Un élément a été ajouté + /// + public event TransferEventHandler TransferAddedEvent; + /// + /// Un élément a été modifié + /// + public event TransferEventHandler TransferUpdatedEvent; + /// + /// Un élément a été supprimé + /// + public event TransferEventHandler TransferRemovedEvent; + + #endregion + #region Fonctions privées + + /// + /// Informe qu'un élément a été ajouté + /// + /// Elément concerné + public void OnTransferAdded(Transfer item) + { + if (TransferAddedEvent != null) + TransferAddedEvent(item); + } + + /// + /// Informe qu'un élément a été modifié + /// + /// Elément concerné + public void OnTransferUpdated(Transfer item) + { + if (TransferUpdatedEvent != null) + TransferUpdatedEvent(item); + } + + /// + /// Informe qu'un élément a été supprimé + /// + /// Elément concerné + public void OnTransferRemoved(Transfer item) + { + if (TransferRemovedEvent != null) + TransferRemovedEvent(item); + } + #endregion #region Propriétés publiques @@ -107,6 +160,91 @@ public double PartialAmountAt(Account account, DateTime date, bool addInitialAmo return amts.Sum(); } + /// + /// Retourne l'élément à la position index + /// + /// Position de l'élément. + public new Transfer this[int index] + { + get + { + return base[index]; + } + set + { + OnTransferRemoved(base[index]); + + base[index] = value; + + base[index].UpdatedEvent += (sender, e) => OnTransferUpdated((Transfer)sender); + OnTransferAdded(base[index]); + } + } + + /// + /// Supprime l'élément de la liste à la position spécifié + /// + /// Position de l'élément. + public new void RemoveAt(int index) + { + if (index >= 0 && index < base.Count) + { + OnTransferRemoved(base[index]); + base.RemoveAt(index); + } + } + + /// + /// Vide la liste de ses éléments + /// + public new void Clear() + { + foreach (var e in Items) + { + OnTransferRemoved(e); + } + + base.Clear(); + } + + /// + /// Supprime un élément de la liste + /// + /// true, l'élément est supprimé, sinon, false. + /// Elément à supprimer. + public new bool Remove(Transfer item) + { + if (base.IndexOf(item) > -1) + OnTransferRemoved(item); + + return base.Remove(item); + } + + /// + /// Ajoute un élément à la liste + /// + /// Item. + public new void Add(Transfer item) + { + OnTransferAdded(item); + item.UpdatedEvent += (sender, e) => OnTransferUpdated((Transfer)sender); + base.Add(item); + } + + /// + /// Insert un élément à la position spécifiée + /// + /// Position d'insertion. + /// Elément à insérer. + public new void Insert(int index, Transfer item) + { + OnTransferAdded(item); + item.UpdatedEvent += (sender, e) => OnTransferUpdated((Transfer)sender); + base.Insert(index, item); + } + + + } } diff --git a/README.md b/README.md index b9c4092..4704919 100644 --- a/README.md +++ b/README.md @@ -39,29 +39,35 @@ ```c# Console.OutputEncoding = Encoding.UTF8; - -// Création d'une identité + +// Création d'une nouvelle identité var me = new Identity(name: "Christophe LEMOINE") { Lastname = "LEMOINE", Forname = "Christophe" }; -// Création d'un élément bancaire de type 'Carte bancaire' +// Création d'un moyen de paiement de type 'Carte bancaire' var bc = new BankCard(name: "CIC Mastercard Tof") { Number = "5135 1800 0000 0001", CVV = "123", Date = new CardDate(2025, 12) }; -bc.Name = "CIC Mastercard"; + +// Création d'un élément bancaire de type 'Portefeuille d'espèces' +var wl = new Wallet(name: "Portefeuille de Tof", + owner: me) +{ + Electronic = false +}; // Création d'un élément bancaire de type 'Compte bancaire' var ba = new BankAccount(name: "CIC Compte courant", owner: me) { BankName = "CIC", - Iban = "FR76 1180 8009 1012 3456 7890 147", + Iban = "FR76 5896 1234 7852 1456 9856 147", Bic = "CMCIFRPP", Contact = new Identity(name: "CIC COUERON") { @@ -72,8 +78,9 @@ var ba = new BankAccount(name: "CIC Compte courant", InitialAmount = 300.0d }; -// Création d'un nouveau dossier financier -// puis ajout des informations créées précédement +//############################################################################################################### + +// Création du dossier financier et ajout des informations liées var fi = Financial.Create( name: "Mon dossier financier", owner: me, @@ -82,14 +89,59 @@ var fi = Financial.Create( loadDefaults: true, paytypes: new PaytypeList() { bc } ); - Console.WriteLine(); Console.WriteLine("Creation d'un dossier financier nommé {0}", fi.Name); -// abonnement aux différents événements -fi.UpdatedEvent += (sender, e) => Console.WriteLine("fi1 updated " + sender.GetType().UnderlyingSystemType); -fi.SavedEvent += (sender, e) => Console.WriteLine("fi1 saved."); -// Création d'un événement programmable +// Abonnements aux événements +// dossier financier +fi.UpdatedEvent += (sender, e) => Console.WriteLine("fi1 - Modification d'une propriété de type: " + sender.GetType().Name); +fi.SavedEvent += (sender, e) => Console.WriteLine("fi1 - Sauvegardé."); +// événements programmés +fi.Events.PostEventAddedEvent += (postEvent) => Console.WriteLine("fi1 - Ajout de la programmation id {2}, '{0}' de type {1}", postEvent.Name, postEvent.GetType().Name, postEvent.Id); +fi.Events.PostEventUpdatedEvent += (postEvent) => Console.WriteLine("fi1 - Modification de la programmation id {1}, '{0}'", postEvent.Name, postEvent.Id); +fi.Events.PostEventRemovedEvent += (postEvent) => Console.WriteLine("fi1 - Suppression de la programmation id {1}, '{0}'", postEvent.Name, postEvent.Id); +fi.PostRaisedEvent += (date, postEvent) => +{ + Console.WriteLine("fi1 - L'occurence '{0}' programmée pour le {1} sur le compte {2} vient dêtre postée.", + postEvent.Name, + date.ToLongDateString(), + fi.Accounts.GetById(postEvent.AccountId).Name); + Console.WriteLine("dates restantes: {0}", + string.Join(", ", postEvent.GetNextCalendar().Select(d => d.ToLongDateString()))); + Console.WriteLine("prochaine date: {0} ({1}/{2} occurences restantes)\r\n", + postEvent.NextDate.ToLongDateString(), + postEvent.Counter, + postEvent.RepeatCount); +}; +// éléments bancaires +fi.Accounts.AccountAddedEvent += (account) => Console.WriteLine("fi1 - Ajout de l'élément bancaire id {2}, '{0}' de type {1}", account.Name, account.GetType().Name, account.Id); +fi.Accounts.AccountUpdatedEvent += (account) => Console.WriteLine("fi1 - Modification de l'élément bancaire id {1}, '{0}'", account.Name, account.Id); +fi.Accounts.AccountRemovedEvent += (account) => Console.WriteLine("fi1 - Suppression de l'élément bancaire id {1}, '{0}'", account.Name, account.Id); +// catégories +fi.Categories.CategoryAddedEvent += (category) => Console.WriteLine("fi1 - Ajout de la catégorie id {2}, '{0}' de type {1}", category.Name, category.GetType().Name, category.Id); +fi.Categories.CategoryUpdatedEvent += (category) => Console.WriteLine("fi1 - Modification de la catégorie id {1}, '{0}'", category.Name, category.Id); +fi.Categories.CategoryRemovedEvent += (category) => Console.WriteLine("fi1 - Suppression de la catégorie id {1}, '{0}'", category.Name, category.Id); +// moyens de paiements +fi.Paytypes.PaytypeAddedEvent += (paytype) => Console.WriteLine("fi1 - Ajout d'un moyen de paiements id {2}, '{0}' de type {1}", paytype.Name, paytype.GetType().Name, paytype.Id); +fi.Paytypes.PaytypeUpdatedEvent += (paytype) => Console.WriteLine("fi1 - Modification d'un moyen de paiements id {1}, '{0}'", paytype.Name, paytype.Id); +fi.Paytypes.PaytypeRemovedEvent += (paytype) => Console.WriteLine("fi1 - Suppression d'un moyen de paiements id {1}, '{0}'", paytype.Name, paytype.Id); +// tiers +fi.Thirdparties.ThirdpartyAddedEvent += (thirdparty) => Console.WriteLine("fi1 - Ajout d'un tiers id {2}, '{0}' de type {1}", thirdparty.Name, thirdparty.GetType().Name, thirdparty.Id); +fi.Thirdparties.ThirdpartyUpdatedEvent += (thirdparty) => Console.WriteLine("fi1 - Modification d'un tiers id {1}, '{0}'", thirdparty.Name, thirdparty.Id); +fi.Thirdparties.ThirdpartyRemovedEvent += (thirdparty) => Console.WriteLine("fi1 - Suppression d'un tiers id {1}, '{0}'", thirdparty.Name, thirdparty.Id); +// transferts +fi.Accounts.Transfers.TransferAddedEvent += (transfer) => Console.WriteLine("fi1 - Ajout d'un transfert id {2}, '{0}' de type {1}", transfer.Name, transfer.GetType().Name, transfer.Id); +fi.Accounts.Transfers.TransferUpdatedEvent += (transfer) => Console.WriteLine("fi1 - Modification d'un transfert id {1}, '{0}'", transfer.Name, transfer.Id); +fi.Accounts.Transfers.TransferRemovedEvent += (transfer) => Console.WriteLine("fi1 - Suppression d'un transfert id {1}, '{0}'", transfer.Name, transfer.Id); +// operations +fi.Accounts.Items.ForEach(a => + { + a.Operations.OperationAddedEvent += (operation) => Console.WriteLine("fi1 - {0} - Ajout d'une opération id {3}, '{1}' de type {2}", a.Name, operation.Name, operation.GetType().Name, operation.Id); + a.Operations.OperationUpdatedEvent += (operation) => Console.WriteLine("fi1 - {0} - Modification d'une opération id {2}, '{1}'", a.Name, operation.Name, operation.Id); + a.Operations.OperationRemovedEvent += (operation) => Console.WriteLine("fi1 - {0} - Suppression d'une opération id {2}, '{1}'", a.Name, operation.Name, operation.Id); + }); + +// Création d'une nouvelle programmation Console.WriteLine(); var p = new Event(name: "essai", accountId: fi.Accounts[0].Id, @@ -106,36 +158,98 @@ Console.WriteLine("prochaine date le {0} jusqu'au {1} ({2} occurences)", p.RepeatCount); Console.WriteLine("dates restantes: {0}", string.Join(", ", p.GetNextCalendar().Select(d => d.ToLongDateString()))); - -// Activation de l'événement prrogrammable -Console.WriteLine(); Console.WriteLine("Activation de la programmation"); p.Active = true; fi.Events.Add(p); -// Enregistrement du dossier financier +// Ajout de l'élément bancaire 'Portefeuille d'espèces' au dossie financier +Console.WriteLine(); +Console.WriteLine("Ajout d'un portefeuille d'èspèces..."); +fi.Accounts.Add(wl); +Console.WriteLine("renommage du portefeuille d'espèces en 'Mon porte monnaie'..."); +wl.Name = "Mon porte monnaie"; + +// Sauvegarde du dossier financier Console.WriteLine(); Console.WriteLine("Enregistrement du dossier financier..."); string filepath = fi.SaveToFile(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), password: "bob"); -// Ouverture et rechargement du dossier financier + +//############################################################################################################### + +// Chargement du dossier financier précédement enregistré Console.WriteLine(); Console.WriteLine("Rechargement du dossier financier..."); var fi2 = Financial.LoadFromFile(filepath, password: "bob"); -// Réabonnement aux événements -fi2.UpdatedEvent += (sender, e) => Console.WriteLine("fi2 updated " + sender.GetType().UnderlyingSystemType); -byte[] datas2 = fi2.Serialize(); -// Affichage du contenu brute -Console.WriteLine(); +// Abonnements aux événements +// dossier financier +fi2.UpdatedEvent += (sender, e) => Console.WriteLine("fi2 - Modification d'une propriété de type: " + sender.GetType().Name); +fi.SavedEvent += (sender, e) => Console.WriteLine("fi2 - Sauvegardé."); +// événements programmés +fi2.Events.PostEventAddedEvent += (postEvent) => Console.WriteLine("fi2 - Ajout de la programmation id {2}, '{0}' de type {1}", postEvent.Name, postEvent.GetType().Name, postEvent.Id); +fi2.Events.PostEventUpdatedEvent += (postEvent) => Console.WriteLine("fi2 - Modification de la programmation id {1}, '{0}'", postEvent.Name, postEvent.Id); +fi2.Events.PostEventRemovedEvent += (postEvent) => Console.WriteLine("fi2 - Suppression de la programmation id {1}, '{0}'", postEvent.Name, postEvent.Id); +fi2.PostRaisedEvent += (date, postEvent) => +{ + Console.WriteLine("fi2 - L'occurence '{0}' programmée pour le {1} sur le compte {2} vient dêtre postée.", + postEvent.Name, + date.ToLongDateString(), + fi2.Accounts.GetById(postEvent.AccountId).Name); + Console.WriteLine("dates restantes: {0}", + string.Join(", ", postEvent.GetNextCalendar().Select(d => d.ToLongDateString()))); + Console.WriteLine("prochaine date: {0} ({1}/{2} occurences restantes)\r\n", + postEvent.NextDate.ToLongDateString(), + postEvent.Counter, + postEvent.RepeatCount); +}; +// éléments bancaires +fi2.Accounts.AccountAddedEvent += (account) => Console.WriteLine("fi2 - Ajout de l'élément bancaire id {2}, '{0}' de type {1}", account.Name, account.GetType().Name, account.Id); +fi2.Accounts.AccountUpdatedEvent += (account) => Console.WriteLine("fi2 - Modification de l'élément bancaire id {1}, '{0}'", account.Name, account.Id); +fi2.Accounts.AccountRemovedEvent += (account) => Console.WriteLine("fi2 - Suppression de l'élément bancaire id {1}, '{0}'", account.Name, account.Id); +// catégories +fi2.Categories.CategoryAddedEvent += (category) => Console.WriteLine("fi2 - Ajout de la catégorie id {2}, '{0}' de type {1}", category.Name, category.GetType().Name, category.Id); +fi2.Categories.CategoryUpdatedEvent += (category) => Console.WriteLine("fi2 - Modification de la catégorie id {1}, '{0}'", category.Name, category.Id); +fi2.Categories.CategoryRemovedEvent += (category) => Console.WriteLine("fi2 - Suppression de la catégorie id {1}, '{0}'", category.Name, category.Id); +// moyens de paiements +fi2.Paytypes.PaytypeAddedEvent += (paytype) => Console.WriteLine("fi2 - Ajout d'un moyen de paiements id {2}, '{0}' de type {1}", paytype.Name, paytype.GetType().Name, paytype.Id); +fi2.Paytypes.PaytypeUpdatedEvent += (paytype) => Console.WriteLine("fi2 - Modification d'un moyen de paiements id {1}, '{0}'", paytype.Name, paytype.Id); +fi2.Paytypes.PaytypeRemovedEvent += (paytype) => Console.WriteLine("fi2 - Suppression d'un moyen de paiements id {1}, '{0}'", paytype.Name, paytype.Id); +// tiers +fi2.Thirdparties.ThirdpartyAddedEvent += (thirdparty) => Console.WriteLine("fi2 - Ajout d'un tiers id {2}, '{0}' de type {1}", thirdparty.Name, thirdparty.GetType().Name, thirdparty.Id); +fi2.Thirdparties.ThirdpartyUpdatedEvent += (thirdparty) => Console.WriteLine("fi2 - Modification d'un tiers id {1}, '{0}'", thirdparty.Name, thirdparty.Id); +fi2.Thirdparties.ThirdpartyRemovedEvent += (thirdparty) => Console.WriteLine("fi2 - Suppression d'un tiers id {1}, '{0}'", thirdparty.Name, thirdparty.Id); +// transferts +fi2.Accounts.Transfers.TransferAddedEvent += (transfer) => Console.WriteLine("fi2 - Ajout d'un transfert id {2}, '{0}' de type {1}", transfer.Name, transfer.GetType().Name, transfer.Id); +fi2.Accounts.Transfers.TransferUpdatedEvent += (transfer) => Console.WriteLine("fi2 - Modification d'un transfert id {1}, '{0}'", transfer.Name, transfer.Id); +fi2.Accounts.Transfers.TransferRemovedEvent += (transfer) => Console.WriteLine("fi2 - Suppression d'un transfert id {1}, '{0}'", transfer.Name, transfer.Id); +// operations +fi2.Accounts.Items.ForEach(a => + { + a.Operations.OperationAddedEvent += (operation) => Console.WriteLine("fi2 - {0} - Ajout d'une opération id {3}, '{1}' de type {2}", a.Name, operation.Name, operation.GetType().Name, operation.Id); + a.Operations.OperationUpdatedEvent += (operation) => Console.WriteLine("fi2 - {0} - Modification d'une opération id {2}, '{1}'", a.Name, operation.Name, operation.Id); + a.Operations.OperationRemovedEvent += (operation) => Console.WriteLine("fi2 - {0} - Suppression d'une opération id {2}, '{1}'", a.Name, operation.Name, operation.Id); + }); + +// Affichage pour l'exemple des données brutes du dossier financier Console.WriteLine("Affichage du contenu brut:"); -Console.WriteLine(Encoding.UTF8.GetString(datas2)); +Console.WriteLine("------------------------------------------------------------------------------------------------------"); +Console.WriteLine(Encoding.UTF8.GetString(fi2.Serialize())); +Console.WriteLine("------------------------------------------------------------------------------------------------------"); -// Exemple d'affichage du solde total de tous les éléments bancaires reunis +// Poste automatiquement toutes les occurences programmées en retard (jusqu'a ce jour) +Console.WriteLine(); +Console.WriteLine("Postage automatique de toutes les occurences restantes en retard...\r\n"); +fi2.AutoPostOverdue(); + + +//############################################################################################################### + +// Pour l'exemple, calcule et affichage formatté du solde total de tous les éléments bancaires Console.WriteLine(); Console.WriteLine("Solde total: {0}", fi2.Currency.Format(fi2.AmountAt(DateTime.Now, addInitialAmount: true))); -// Liste toutes les monnaies disponibles et détecte celle qui correspond au systeme +// Pour l'exemple, liste toutes les monnaies disponibles et indique celle du systeme Console.WriteLine(); foreach (var c in Currencies.Availlable.OrderBy(a => a.CultureFullname)) { @@ -143,28 +257,9 @@ foreach (var c in Currencies.Availlable.OrderBy(a => a.CultureFullname)) Console.WriteLine("Culture système: {0} | Monnaie: {1} {2}", c.CultureFullname, c.Symbol, c.Name); } -// Affiche le premier événement programmable -if (!fi2.Accounts.GetById(fi2.Events[0].AccountId).Equals(default(Account))) -{ - Console.WriteLine(); - Console.WriteLine("Postage des occurences passées pour le compte {0} depuis le {1}", - fi2.Accounts.GetById(fi2.Events[0].AccountId).Name, - fi2.Events[0].StartDate.ToLongDateString()); - - // Poste toutes les occurences restantes en retard de cet événement - fi2.Events[0].PostOverdue(); - - Console.WriteLine("dates restantes: {0}", - string.Join(", ", fi2.Events[0].GetNextCalendar().Select(d => d.ToLongDateString()))); - Console.WriteLine("prochaine date: {0} ({1}/{2} occurences restantes)", - fi2.Events[0].NextDate.ToLongDateString(), - fi2.Events[0].Counter, - fi2.Events[0].RepeatCount); -} -else - fi2.Events.Remove(fi2.Events[0]); -Console.ReadLine();` + +Console.ReadLine(); ```