Skip to content

Instantly share code, notes, and snippets.

@ItemME
Created June 20, 2017 12:09
Show Gist options
  • Select an option

  • Save ItemME/001b2186163c3b692c9ebc5a91d2e10c to your computer and use it in GitHub Desktop.

Select an option

Save ItemME/001b2186163c3b692c9ebc5a91d2e10c to your computer and use it in GitHub Desktop.

Revisions

  1. ItemME created this gist Jun 20, 2017.
    1,297 changes: 1,297 additions & 0 deletions SaveSystem.cs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,1297 @@
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using QSE_Planner.Classes.StaffPackage;
    using Newtonsoft.Json;
    using System.IO;
    using System.Windows.Forms;
    using QSE_Planner.Classes.EventPlanner;
    using QSE_Planner.Classes.Component;
    using QSE_Planner.Classes.Signal;
    using System.Threading;

    namespace QSE_Planner.Classes
    {
    public sealed class SaveSystem
    {
    // INSTANCE DE SAVESYSTEM ET SON LOCK POUR SÉCURISER L'ACCES MÉMOIRE
    private static SaveSystem _instance = null;
    private static readonly object _lock = new object();

    // UTILISATEUR ACTUEL
    private Employee CurrentUser = null;

    // LISTE DE TOUS LES UTILISATEURS
    private List<Employee> AllUsers = new List<Employee>();
    // LISTE DE TOUS LES MATÉRIELS
    private List<Material> MaterialList = new List<Material>();
    // LISTE DES EVENTS PLANNIFIÉS
    private List<Event> EventsList = new List<Event>();
    // LISTE DES FOURNISSEURS
    private List<Fournisseur> FournisseurList = new List<Fournisseur>();
    // LISTE DES CATEGORIES FOURNISSEUR
    private List<Categorie> FournisseurCategoryList = new List<Categorie>();
    // LISTE DES CRITERES
    private List<CriteriaFournisseur> CritereList = new List<CriteriaFournisseur>();
    // LISTE DES SIGNALEMENTS MATIERE
    private List<MatiereSignal> MatiereSignalList = new List<MatiereSignal>();
    // LISTE DES SIGNALEMENTS NORMAUX
    private List<NormalSignal> NormalSignalList = new List<NormalSignal>();

    // CONSTRUCTEUR
    SaveSystem()
    {
    AllUsers = GetAllUsers();
    MaterialList = GetAllMaterials();
    EventsList = GetAllEvents();
    FournisseurList = GetAllFournisseurs();
    FournisseurCategoryList = GetAllCategory();
    CritereList = GetAllCriteres();
    MatiereSignalList = GetAllMatiereSignal();
    NormalSignalList = GetAllNormalSignal();
    }

    #region ACCESSEURS

    // GETTER DE L'INSTANCE
    public static SaveSystem Instance
    {
    get
    {
    lock (_lock)
    {
    if (_instance == null)
    {
    _instance = new SaveSystem();
    }
    return _instance;
    }
    }
    }

    // MISE A JOUR DE L'UTILISATEUR ACTUEL
    public void setCurrentUser(Employee e)
    {
    CurrentUser = e;
    }

    // GETTER DE L'UTILISATEUR ACTUEL
    public Employee getCurrentUser()
    {
    return CurrentUser;
    }

    // MISE A JOUR DE LA LISTE DE TOUS LES UTILISATEURS
    public void setAllUsers(List<Employee> e)
    {
    AllUsers = e;
    }

    // GETTER DE LA LISTE DE TOUS LES UTILISATEURS
    public List<Employee> getAllUsers()
    {
    return AllUsers;
    }

    // MISE A JOUR DE LA LISTE DES MATERIELS
    public void setMaterialList(List<Material> e)
    {
    MaterialList = e;
    }

    // GETTER DE LA LISTE DES MATERIELS
    public List<Material> getMaterialList()
    {
    return MaterialList;
    }

    // MISE A JOUR DE LA LISTE DE TOUS LES EVENTS
    public void setEventsList(List<Event> e)
    {
    EventsList = e;
    }

    // GETTER DE LA LISTE DE TOUS LES EVENTS
    public List<Event> getEventsLists()
    {
    return EventsList;
    }

    // MISE A JOUR DE LA LISTE DES FOURNISSEURS
    public void setFournisseurList(List<Fournisseur> e)
    {
    FournisseurList = e;
    }

    // GETTER DE LA LISTE DES FOURNISSEURS
    public List<Fournisseur> getFournisseurList()
    {
    return FournisseurList;
    }

    // MISE A JOUR DE LA LISTE DES CATEGORIES
    public void setFournisseurCategoryList(List<Categorie> e)
    {
    FournisseurCategoryList = e;
    }

    // GETTER DE LA LISTE DES CATEGORIES
    public List<Categorie> getFournisseurCategoryList()
    {
    return FournisseurCategoryList;
    }

    // MISE A JOUR DE LA LISTE DES CRITERES FOURNISSEUR
    public void setCritereList(List<CriteriaFournisseur> e)
    {
    CritereList = e;
    }

    // GETTER DE LA LISTE DES CRITERES FOURNISSEURS
    public List<CriteriaFournisseur> getCritereList()
    {
    return CritereList;
    }

    // MISE A JOUR DE LA LISTE DE TOUS LES SIGNALEMENTS MATIERE
    public void setMatiereSignalList(List<MatiereSignal> e)
    {
    MatiereSignalList = e;
    }

    // GETTER DE LA LISTE DE TOUS LES SIGNALEMENTS MATIERE
    public List<MatiereSignal> getMatiereSignalList()
    {
    return MatiereSignalList;
    }


    // MISE A JOUR DE LA LISTE DE TOUS LES SIGNALEMENTS NORMAUX
    public void setNormalSignalList(List<NormalSignal> e)
    {
    NormalSignalList = e;
    }

    // GETTER DE LA LISTE DE TOUS LES SIGNALEMENTS NORMAUX
    public List<NormalSignal> getNormalSignalList()
    {
    return NormalSignalList;
    }

    #endregion

    #region SAUVEGARDE/RÉCUPÉRATION UTILISATEUR

    /// SAUVEGARDE/RÉCUPÉRATION UTILISATEUR
    ///
    /// Concerne le partie du système de sauvegarde qui sauvegarde et récupère les utilisateurs
    /// - SaveUser() : void
    /// - GetAllUsers() : List<Employee>
    /// - GetUserByUsername() : Employee
    /// - GetUserByLastname() : List<Employee>
    /// - GetUserByFirstname() : List<Employee>
    /// - GetUserByFullname() : List<Employee>

    // SAUVEGARDE UTILISATEUR
    public static void SaveUser(Employee e)
    {
    try
    {
    // VALEUR A CRYPTER
    string output = JsonConvert.SerializeObject(e);

    // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);
    string FileName = CurrentFolder + "/data/users/" + e.getUsername() + "-" + e.getLastName() + "_" + e.getFirstName();

    // CRYPTAGE DES DONNÉES + SAUVEGARDE
    Obfuscate(FileName, output);
    }
    catch (Exception ex)
    {
    // EN CAS D'ERREUR
    MessageBox.Show(ex.ToString());
    }
    }

    // RÉCUPÉRATION DE TOUS LES UTILISATEURS
    public static List<Employee> GetAllUsers()
    {
    List<Employee> toReturn = new List<Employee>();

    try
    {
    // RÉCUPÉRATION DU DOSSIER
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    // INFORMATIONS DU DOSSIER
    DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/users/");

    // POUR CHAQUE UTILISATEUR..
    foreach (var file in di.GetFiles())
    {
    Employee e = JsonConvert.DeserializeObject<Employee>(Deobfuscate((CurrentFolder + "/data/users/" + file.Name)));
    toReturn.Add(e);
    }

    return toReturn;
    }
    catch
    {
    // SI L'UTILISATEUR N'EXISTE PAS
    return null;
    }
    }

    // RÉCUPÉRATION UTILISATEUR PAR USERNAME (NOM D'UTILISATEUR)
    public static Employee GetUserByUsername(string Username)
    {
    try
    {
    // RÉCUPÉRATION DU DOSSIER
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    // INFORMATIONS DU DOSSIER
    DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/users/");

    // POUR CHAQUE UTILISATEUR..
    foreach (var file in di.GetFiles())
    {
    string[] sub = file.Name.Split('-'); // Nom d'utilisateur en [0] et Nom_Prénom en [1]

    if (sub[0] == Username)
    {
    // RÉCUPÉRATION DE L'OBJET
    return JsonConvert.DeserializeObject<Employee>(Deobfuscate((CurrentFolder + "/data/users/" + file.Name)));
    }
    }

    // SI AUCUN UTILISATEUR
    return null;
    }
    catch
    {
    // SI L'UTILISATEUR N'EXISTE PAS
    return null;
    }
    }

    // RÉCUPÉRATION UTILISATEUR PAR NOM DE FAMILLE
    public static List<Employee> GetUserByLastname(string Lastname)
    {
    List<Employee> toReturn = new List<Employee>();

    try
    {
    // RÉCUPÉRATION DU DOSSIER
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    // INFORMATIONS DU DOSSIER
    DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/users/");

    // POUR CHAQUE UTILISATEUR..
    foreach (var file in di.GetFiles())
    {
    string[] s = file.Name.Split('-'); // Nom d'utilisateur en [0] et Nom_Prénom en [1]
    string[] sub = s[1].Split('_'); // Nom d'utilisateur en [0] et Nom_Prénom en [1]

    if (sub[0] == Lastname)
    {
    // RÉCUPÉRATION DES DONNÉES
    Employee e = JsonConvert.DeserializeObject<Employee>(Deobfuscate((CurrentFolder + "/data/users/" + file.Name)));
    toReturn.Add(e);
    }
    }

    return toReturn;
    }
    catch
    {
    // SI L'UTILISATEUR N'EXISTE PAS
    return null;
    }
    }

    // RÉCUPÉRATION UTILISATEUR PAR PRÉNOM
    public static List<Employee> GetUserByFirstname(string Firstname)
    {
    List<Employee> toReturn = new List<Employee>();

    try
    {
    // RÉCUPÉRATION DU DOSSIER
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    // INFORMATIONS DU DOSSIER
    DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/users/");

    // POUR CHAQUE UTILISATEUR..
    foreach (var file in di.GetFiles())
    {
    string[] s = file.Name.Split('-'); // Nom d'utilisateur en [0] et Nom_Prénom en [1]
    string[] sub = s[1].Split('_'); // Nom d'utilisateur en [0] et Nom_Prénom en [1]

    if (sub[1] == Firstname)
    {
    // RÉCUPÉRATION DES DONNÉES
    Employee e = JsonConvert.DeserializeObject<Employee>(Deobfuscate((CurrentFolder + "/data/users/" + file.Name)));
    toReturn.Add(e);
    }
    }

    return toReturn;
    }
    catch
    {
    // SI L'UTILISATEUR N'EXISTE PAS
    return null;
    }
    }

    // RÉCUPÉRATION UTILISATEUR PAR NOM COMPLET
    public static List<Employee> GetUserByFullname(string Lastname, string Firstname)
    {
    List<Employee> toReturn = new List<Employee>();

    try
    {
    // RÉCUPÉRATION DU DOSSIER
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    // INFORMATIONS DU DOSSIER
    DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/users/");

    // POUR CHAQUE UTILISATEUR..
    foreach (var file in di.GetFiles())
    {
    string[] s = file.Name.Split('-'); // Nom d'utilisateur en [0] et Nom_Prénom en [1]
    string[] sub = s[1].Split('_'); // Nom d'utilisateur en [0] et Nom_Prénom en [1]

    if (sub[0] == Lastname)
    {
    if (sub[1] == Firstname)
    {
    // RÉCUPÉRATION DES DONNÉES
    Employee e = JsonConvert.DeserializeObject<Employee>(Deobfuscate((CurrentFolder + "/data/users/" + file.Name)));
    toReturn.Add(e);
    }
    }
    }

    return toReturn;
    }
    catch
    {
    // SI L'UTILISATEUR N'EXISTE PAS
    return null;
    }
    }

    #endregion

    #region SAUVEGARDE/RÉCUPÉRATION MATÉRIEL

    /// SAUVEGARDE/RÉCUPÉRATION MATÉRIEL
    ///
    /// Concerne le partie du système de sauvegarde qui sauvegarde et récupère les matériels
    /// - SaveMaterial() : void
    /// - GetAllMaterials() : List<Material>
    /// - GetMaterialByImmat() : Material

    public static void SaveMaterial(Material m)
    {
    try
    {
    // VALEUR A CRYPTER
    string output = JsonConvert.SerializeObject(m);

    // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);
    string FileName = CurrentFolder + "/data/materials/" + m.Immatriculation;

    // CRYPTAGE DES DONNÉES + SAUVEGARDE
    Obfuscate(FileName, output);
    }
    catch (Exception ex)
    {
    // EN CAS D'ERREUR
    MessageBox.Show(ex.ToString());
    }
    }

    // RÉCUPÉRATION DE TOUS LES MATÉRIELS
    public static List<Material> GetAllMaterials()
    {
    List<Material> toReturn = new List<Material>();

    try
    {
    // RÉCUPÉRATION DU DOSSIER
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    // INFORMATIONS DU DOSSIER
    DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/materials/");

    // POUR CHAQUE MATERIEL..
    foreach (var file in di.GetFiles())
    {
    Material m = JsonConvert.DeserializeObject<Material>(Deobfuscate((CurrentFolder + "/data/materials/" + file.Name)));
    toReturn.Add(m);
    }

    return toReturn;
    }
    catch
    {
    // SI AUCUN MATERIEL
    return null;
    }
    }

    // RÉCUPÉRATION UTILISATEUR PAR USERNAME (NOM D'UTILISATEUR)
    public static Material GetMaterialByImmat(string Immat)
    {
    try
    {
    // RÉCUPÉRATION DU DOSSIER
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    // INFORMATIONS DU DOSSIER
    DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/materials/");

    // POUR CHAQUE UTILISATEUR..
    foreach (var file in di.GetFiles())
    {
    if (file.Name == Immat)
    {
    // RÉCUPÉRATION DE L'OBJET
    return JsonConvert.DeserializeObject<Material>(Deobfuscate((CurrentFolder + "/data/materials/" + file.Name)));
    }
    }

    // SI AUCUN UTILISATEUR
    return null;
    }
    catch
    {
    // SI L'UTILISATEUR N'EXISTE PAS
    return null;
    }
    }

    #endregion

    #region SAUVEGARDE/RÉCUPÉRATION EVENT

    /// SAUVEGARDE/RÉCUPÉRATION EVENT
    ///
    /// Concerne le partie du système de sauvegarde qui sauvegarde et récupère les évènements
    /// - SaveEvent() : void
    /// - GetAllEvents() : List<Event>
    /// - GetEvent() : Event

    public static void SaveEvent(Event e)
    {
    try
    {
    // VALEUR A CRYPTER
    string output = JsonConvert.SerializeObject(e);

    // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    // VÉRIFICATION DE L'EXISTENCE DU CHEMIN
    if (!Directory.Exists(CurrentFolder + "/data/events/" + e.Date.Year + "/" + e.Date.Month + "/" + e.Date.Day))
    Directory.CreateDirectory(CurrentFolder + "/data/events/" + e.Date.Year + "/" + e.Date.Month + "/" + e.Date.Day);

    string FileName = CurrentFolder + "/data/events/" + e.Date.Year + "/" + e.Date.Month + "/" + e.Date.Day + "/" + "event";

    // CRYPTAGE DES DONNÉES
    Obfuscate(FileName, output);
    }
    catch(Exception ex)
    {
    // EN CAS D'ERREUR
    MessageBox.Show(ex.ToString());
    }
    }

    public static List<Event> GetAllEvents()
    {
    List<Event> toReturn = new List<Event>();

    try
    {
    // RÉCUPÉRATION DU DOSSIER
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    // INFORMATIONS DU DOSSIER
    DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/events/");

    // POUR CHAQUE EVENT..
    foreach (var year in di.GetDirectories())
    {
    foreach (var month in year.GetDirectories())
    {
    foreach (var day in month.GetDirectories())
    {
    string y, m, d;
    y = year.Name;
    m = month.Name;
    d = day.Name;
    Event ev = JsonConvert.DeserializeObject<Event>(Deobfuscate((CurrentFolder + "/data/events/" + y + "/" + m + "/" + d + "/event")));
    toReturn.Add(ev);
    }
    }
    }

    return toReturn;
    }
    catch
    {
    // SI AUCUN EVENT
    return null;
    }
    }

    public static Event GetEvent(DateTime d)
    {
    try
    {
    // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);
    string FileName = CurrentFolder + "/data/events/" + d.Year + "/" + d.Month + "/" + d.Day + "/" + "event";

    // RÉCUPÉRATION DE L'OBJET
    return JsonConvert.DeserializeObject<Event>(Deobfuscate(FileName));
    }
    catch
    {
    // SI L'EVENT N'EXISTE PAS
    return null;
    }
    }

    public static List<Event> GetEventsYearMonth(int y, int m)
    {
    List<Event> toReturn = new List<Event>();

    try
    {
    // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    // INFORMATIONS DU DOSSIER
    DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/events/" + y + "/" + m + "/");

    foreach (var d in di.GetDirectories())
    {
    foreach (var f in d.GetFiles())
    {
    toReturn.Add(JsonConvert.DeserializeObject<Event>(Deobfuscate((CurrentFolder + "/data/events/" + y + "/" + m + "/" + d.Name + "/" + f.Name))));
    }
    }

    // RÉCUPÉRATION DE L'OBJET
    return toReturn;
    }
    catch
    {
    return toReturn;
    }
    }

    #endregion

    #region SAUVEGARDE/RÉCUPÉRATION/SUPPRESSION FOURNISSEUR + CATEGORIE

    /// SAUVEGARDE/RÉCUPÉRATION/SUPPRESSION FOURNISSEUR + CATEGORIE
    ///
    /// Concerne le partie du système de sauvegarde qui sauvegarde, récupère et supprime les fournisseurs & catégories
    /// - SaveFournisseur() : void
    /// - SaveCategory() : void
    /// - GetAllFournisseurs() : List<Fournisseur>
    /// - GetAllCategory() : List<Categorie>
    /// - GetFournisseur() : Fournisseur
    /// - GetCategory() : Categorie
    /// - DeleteAllCategory() : void
    /// - DeleteFournisseur() : void

    public static void SaveFournisseur(Fournisseur e)
    {
    try
    {
    // VALEUR A CRYPTER
    string output = JsonConvert.SerializeObject(e);

    // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    string FileName = CurrentFolder + "/data/providers/" + e.Nom;

    // CRYPTAGE DES DONNÉES
    Obfuscate(FileName, output);
    }
    catch (Exception ex)
    {
    // EN CAS D'ERREUR
    MessageBox.Show("Impossible de sauvegarder, le fournisseur existe déjà.");
    }
    }

    public static void SaveCategory(Categorie e)
    {
    try
    {
    // VALEUR A CRYPTER
    string output = JsonConvert.SerializeObject(e);

    // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    string FileName = CurrentFolder + "/data/providers/category/" + e.Nom;

    // CRYPTAGE DES DONNÉES
    Obfuscate(FileName, output);
    }
    catch (Exception ex)
    {
    // EN CAS D'ERREUR
    MessageBox.Show("Impossible de sauvegarder, la catégorie existe déjà.");
    }
    }

    public static List<Fournisseur> GetAllFournisseurs()
    {
    List<Fournisseur> toReturn = new List<Fournisseur>();

    try
    {
    // RÉCUPÉRATION DU DOSSIER
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    // INFORMATIONS DU DOSSIER
    DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/providers/");

    // POUR CHAQUE FOURNISSEUR..
    foreach (var file in di.GetFiles())
    {
    Fournisseur cr = JsonConvert.DeserializeObject<Fournisseur>(Deobfuscate((CurrentFolder + "/data/providers/" + file.Name)));
    toReturn.Add(cr);
    }

    return toReturn;
    }
    catch
    // SI AUCUN FOURNISSEUR
    {
    return null;
    }
    }

    public static List<Categorie> GetAllCategory()
    {
    List<Categorie> toReturn = new List<Categorie>();

    try
    {
    // RÉCUPÉRATION DU DOSSIER
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    // INFORMATIONS DU DOSSIER
    DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/providers/category/");

    // POUR CHAQUE CATEGORIE..
    foreach (var file in di.GetFiles())
    {
    Categorie cr = JsonConvert.DeserializeObject<Categorie>(Deobfuscate((CurrentFolder + "/data/providers/category/" + file.Name)));
    toReturn.Add(cr);
    }

    return toReturn;
    }
    catch
    // SI AUCUNE CATEGORIE
    {
    return null;
    }
    }

    public static Categorie GetCategory(string d)
    {
    try
    {
    // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);
    string FileName = CurrentFolder + "/data/providers/category/" + d;

    // RÉCUPÉRATION DE L'OBJET
    return JsonConvert.DeserializeObject<Categorie>(Deobfuscate(FileName));
    }
    catch
    {
    // SI L'EVENT N'EXISTE PAS
    return null;
    }
    }

    public static Fournisseur GetFournisseur(string d)
    {
    try
    {
    // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);
    string FileName = CurrentFolder + "/data/providers/" + d;

    // RÉCUPÉRATION DE L'OBJET
    return JsonConvert.DeserializeObject<Fournisseur>(Deobfuscate(FileName));
    }
    catch
    {
    // SI L'EVENT N'EXISTE PAS
    return null;
    }
    }

    public static void DeleteAllCategory()
    {
    try
    {
    // RÉCUPÉRATION DU DOSSIER
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    // INFORMATIONS DU DOSSIER
    DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/providers/category/");

    // SUPPRESSION
    foreach (var file in di.GetFiles())
    file.Delete();
    }
    catch (Exception ex)
    {
    // ERROR
    MessageBox.Show(ex.ToString());
    }
    }

    public static void DeleteFournisseur(Fournisseur f)
    {
    try
    {
    // RÉCUPÉRATION DU DOSSIER
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    // INFORMATIONS DU DOSSIER
    DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/providers/");
    DirectoryInfo di_doc = new DirectoryInfo(CurrentFolder + "/data/providers/documents/");

    if (File.Exists(CurrentFolder + "/data/providers/" + f.Nom))
    File.Delete(CurrentFolder + "/data/providers/" + f.Nom);

    foreach (var file in di_doc.GetFiles())
    {
    // RÉCUPÉRATION DE L'EXTENSION
    string[] sp = file.Name.Split('\\'); // sp1[sp1.Lenght-1] == nom du fichier
    string[] sp1 = sp[sp.Length -1].Split('-');

    if (sp1[0] == f.Nom)
    file.Delete();
    }

    }
    catch (Exception ex)
    {
    // ERROR
    MessageBox.Show(ex.ToString());
    }
    }

    #endregion

    #region SAUVEGARDE/RÉCUPÉRATION CRITERE

    /// SAUVEGARDE/RÉCUPÉRATION CRITERE
    ///
    /// Concerne le partie du système de sauvegarde qui sauvegarde et récupère les critères fournisseur
    /// - SaveCritere() : void
    /// - GetAllCriteres() : List<CriteriaFournisseur>
    /// - DeleteAllCriteres() : void

    public static void SaveCritere(CriteriaFournisseur e)
    {
    try
    {
    // VALEUR A CRYPTER
    string output = JsonConvert.SerializeObject(e);

    // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    // INFORMATIONS DU DOSSIER
    DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/criteria/");

    string FileName = CurrentFolder + "/data/criteria/" + di.GetFiles().Length;

    // CRYPTAGE DES DONNÉES
    Obfuscate(FileName, output);
    }
    catch (Exception ex)
    {
    // EN CAS D'ERREUR
    MessageBox.Show(ex.ToString());
    }
    }

    public static List<CriteriaFournisseur> GetAllCriteres()
    {
    List<CriteriaFournisseur> toReturn = new List<CriteriaFournisseur>();

    try
    {
    // RÉCUPÉRATION DU DOSSIER
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    // INFORMATIONS DU DOSSIER
    DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/criteria/");

    // POUR CHAQUE CRITERE..
    foreach (var file in di.GetFiles())
    {
    CriteriaFournisseur cr = JsonConvert.DeserializeObject<CriteriaFournisseur>(Deobfuscate((CurrentFolder + "/data/criteria/" + file.Name)));
    toReturn.Add(cr);
    }

    return toReturn;
    }
    catch
    {
    // SI AUCUN CRITERE
    return null;
    }
    }

    public static void DeleteAllCriteres()
    {
    try
    {
    // RÉCUPÉRATION DU DOSSIER
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    // INFORMATIONS DU DOSSIER
    DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/criteria/");

    // SUPPRESSION
    foreach (var file in di.GetFiles())
    file.Delete();
    }
    catch (Exception ex)
    {
    // ERROR
    MessageBox.Show(ex.ToString());
    }
    }

    #endregion

    #region SAUVEGARDE/RÉCUPÉRATION SIGNALEMENTS

    /// SAUVEGARDE/RÉCUPÉRATION SIGNALEMENTS
    ///
    /// Concerne le partie du système de sauvegarde qui sauvegarde et récupère les signalements (normaux et matières)
    /// - SaveNormalSignal() : void
    /// - SaveMatiereSignal() : void
    /// - GetAllNormalSignal() : List<NormalSignal>
    /// - GetAllMatiereSignal() : List<MatiereSignal>
    /// - GetNormalSignalByChrono() : NormalSignal
    /// - GetMatiereSignalByChrono() : MatiereSignal

    public static void SaveNormalSignal(NormalSignal e)
    {
    try
    {
    // VALEUR A CRYPTER
    string output = JsonConvert.SerializeObject(e);

    // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    string oldchrono = File.ReadAllText(CurrentFolder + "/data/signals/lastchrono");
    int newchrono = (Convert.ToInt32(oldchrono));

    if (newchrono < e.Chrono)
    File.WriteAllText(CurrentFolder + "/data/signals/lastchrono", e.Chrono.ToString(), Encoding.ASCII);

    string FileName = CurrentFolder + "/data/signals/normal/" + e.Chrono;

    // CRYPTAGE DES DONNÉES
    Obfuscate(FileName, output);
    }
    catch (Exception ex)
    {
    // EN CAS D'ERREUR
    MessageBox.Show(ex.ToString());
    }
    }

    public static void SaveMatiereSignal(MatiereSignal e)
    {
    try
    {
    // VALEUR A CRYPTER
    string output = JsonConvert.SerializeObject(e);

    // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    string oldchrono = File.ReadAllText(CurrentFolder + "/data/signals/lastchrono");
    int newchrono = (Convert.ToInt32(oldchrono));

    if (newchrono < e.Chrono)
    File.WriteAllText(CurrentFolder + "/data/signals/lastchrono", e.Chrono.ToString(), Encoding.ASCII);

    string FileName = CurrentFolder + "/data/signals/material/" + e.Chrono;

    // CRYPTAGE DES DONNÉES
    Obfuscate(FileName, output);
    }
    catch (Exception ex)
    {
    // EN CAS D'ERREUR
    MessageBox.Show(ex.ToString());
    }
    }

    public static List<NormalSignal> GetAllNormalSignal()
    {
    List<NormalSignal> toReturn = new List<NormalSignal>();

    try
    {
    // RÉCUPÉRATION DU DOSSIER
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    // INFORMATIONS DU DOSSIER
    DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/signals/normal/");

    // POUR CHAQUE CRITERE..
    foreach (var file in di.GetFiles())
    {
    NormalSignal ns = JsonConvert.DeserializeObject<NormalSignal>(Deobfuscate((CurrentFolder + "/data/signals/normal/" + file.Name)));
    toReturn.Add(ns);
    }

    return toReturn;
    }
    catch
    {
    // SI AUCUN CRITERE
    return null;
    }
    }

    public static List<MatiereSignal> GetAllMatiereSignal()
    {
    List<MatiereSignal> toReturn = new List<MatiereSignal>();

    try
    {
    // RÉCUPÉRATION DU DOSSIER
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    // INFORMATIONS DU DOSSIER
    DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/signals/material/");

    // POUR CHAQUE CRITERE..
    foreach (var file in di.GetFiles())
    {
    MatiereSignal ms = JsonConvert.DeserializeObject<MatiereSignal>(Deobfuscate((CurrentFolder + "/data/signals/material/" + file.Name)));
    toReturn.Add(ms);
    }

    return toReturn;
    }
    catch
    {
    // SI AUCUN CRITERE
    return null;
    }
    }

    public static NormalSignal GetNormalSignalByChrono(string s)
    {
    try
    {
    // RÉCUPÉRATION DU DOSSIER
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    // INFORMATIONS DU DOSSIER
    DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/signals/normal/");

    // POUR CHAQUE CRITERE..
    foreach (var file in di.GetFiles())
    {
    if (file.Name == s)
    return JsonConvert.DeserializeObject<NormalSignal>(Deobfuscate((CurrentFolder + "/data/signals/normal/" + file.Name)));
    }

    return null;
    }
    catch
    {
    // SI AUCUN CRITERE
    return null;
    }
    }

    public static MatiereSignal GetMatiereSignalByChrono(string s)
    {
    try
    {
    // RÉCUPÉRATION DU DOSSIER
    string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath);

    // INFORMATIONS DU DOSSIER
    DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/signals/material/");

    // POUR CHAQUE CRITERE..
    foreach (var file in di.GetFiles())
    {
    if (file.Name == s)
    return JsonConvert.DeserializeObject<MatiereSignal>(Deobfuscate((CurrentFolder + "/data/signals/material/" + file.Name)));
    }

    return null;
    }
    catch
    {
    // SI AUCUN CRITERE
    return null;
    }
    }

    public static object SearchSignalByChrono(string s)
    {
    foreach(NormalSignal ns in Instance.NormalSignalList)
    {
    if (ns.Chrono.ToString() == s)
    return ns;
    }

    foreach (MatiereSignal ms in Instance.MatiereSignalList)
    {
    if (ms.Chrono.ToString() == s)
    return ms;
    }

    return null;
    }

    public static List<NormalSignal> SearchNormalSignalByTypeAndMore(Material m, Fournisseur f, string VISA)
    {
    List<NormalSignal> toReturn = new List<NormalSignal>();

    // MATERIEL = TRUE ; FOURNISSEUR = TRUE
    if (m != null && f != null)
    {
    if (VISA == "Validé")
    {
    foreach (NormalSignal ns in Instance.NormalSignalList)
    {
    if (ns.Fournisseur != null && ns.Materiel != null)
    if (ns.Materiel.Immatriculation == m.Immatriculation && ns.Fournisseur.Nom == f.Nom && ns.VISA == true)
    toReturn.Add(ns);
    }
    }
    else if (VISA == "Non-Validé")
    {
    foreach (NormalSignal ns in Instance.NormalSignalList)
    {
    if (ns.Fournisseur != null && ns.Materiel != null)
    if (ns.Materiel.Immatriculation == m.Immatriculation && ns.Fournisseur.Nom == f.Nom && ns.VISA == false)
    toReturn.Add(ns);
    }
    }
    else
    {
    foreach (NormalSignal ns in Instance.NormalSignalList)
    {
    if (ns.Fournisseur != null && ns.Materiel != null)
    if (ns.Materiel.Immatriculation == m.Immatriculation && ns.Fournisseur.Nom == f.Nom)
    toReturn.Add(ns);
    }
    }
    }
    // MATERIEL = FALSE ; FOURNISSEUR = TRUE
    else if (m == null && f != null)
    {
    if (VISA == "Validé")
    {
    foreach (NormalSignal ns in Instance.NormalSignalList)
    {
    if (ns.Fournisseur != null)
    if (ns.Fournisseur.Nom == f.Nom && ns.VISA == true)
    toReturn.Add(ns);
    }
    }
    else if (VISA == "Non-Validé")
    {
    foreach (NormalSignal ns in Instance.NormalSignalList)
    {
    if (ns.Fournisseur != null)
    if (ns.Fournisseur.Nom == f.Nom && ns.VISA == false)
    toReturn.Add(ns);
    }
    }
    else
    {
    foreach (NormalSignal ns in Instance.NormalSignalList)
    {
    if (ns.Fournisseur != null)
    if (ns.Fournisseur.Nom == f.Nom)
    toReturn.Add(ns);
    }
    }
    }
    // MATERIEL = TRUE ; FOURNISSEUR = FALSE
    else if (m != null && f == null)
    {
    if (VISA == "Validé")
    {
    foreach (NormalSignal ns in Instance.NormalSignalList)
    {
    if (ns.Materiel != null)
    if (ns.Materiel.Immatriculation == m.Immatriculation && ns.VISA == true)
    toReturn.Add(ns);
    }
    }
    else if (VISA == "Non-Validé")
    {
    foreach (NormalSignal ns in Instance.NormalSignalList)
    {
    if (ns.Materiel != null)
    if (ns.Materiel.Immatriculation == m.Immatriculation && ns.VISA == false)
    toReturn.Add(ns);
    }
    }
    else
    {
    foreach (NormalSignal ns in Instance.NormalSignalList)
    {
    if (ns.Materiel != null)
    if (ns.Materiel.Immatriculation == m.Immatriculation)
    toReturn.Add(ns);
    }
    }
    }
    // MATERIEL = FALSE ; FOURNISSEUR = FALSE
    else if (m == null && f == null)
    {
    if (VISA == "Validé")
    {
    foreach (NormalSignal ns in Instance.NormalSignalList)
    {
    if (ns.VISA == true)
    toReturn.Add(ns);
    }
    }
    else if (VISA == "Non-Validé")
    {
    foreach (NormalSignal ns in Instance.NormalSignalList)
    {
    if (ns.VISA == false)
    toReturn.Add(ns);
    }
    }
    else
    return Instance.NormalSignalList;
    }

    return toReturn;
    }

    public static List<MatiereSignal> SearchMatiereSignalByTypeAndMore(Fournisseur f, string VISA)
    {
    List<MatiereSignal> toReturn = new List<MatiereSignal>();

    // FOURNISSEUR = TRUE
    if (f != null)
    {
    if (VISA == "Validé")
    {
    foreach (MatiereSignal ms in Instance.MatiereSignalList)
    {
    if (ms.Fournisseur != null)
    if (ms.Fournisseur.Nom == f.Nom && ms.VISA == true)
    toReturn.Add(ms);
    }
    }
    else if (VISA == "Non-Validé")
    {
    foreach (MatiereSignal ms in Instance.MatiereSignalList)
    {
    if (ms.Fournisseur != null)
    if (ms.Fournisseur.Nom == f.Nom && ms.VISA == false)
    toReturn.Add(ms);
    }
    }
    else
    {
    foreach (MatiereSignal ms in Instance.MatiereSignalList)
    {
    if (ms.Fournisseur != null)
    if (ms.Fournisseur.Nom == f.Nom)
    toReturn.Add(ms);
    }
    }
    }
    // FOURNISSEUR = FALSE
    else if (f == null)
    {
    if (VISA == "Validé")
    {
    foreach (MatiereSignal ms in Instance.MatiereSignalList)
    {
    if (ms.VISA == true)
    toReturn.Add(ms);
    }
    }
    else if (VISA == "Non-Validé")
    {
    foreach (MatiereSignal ms in Instance.MatiereSignalList)
    {
    if (ms.VISA == false)
    toReturn.Add(ms);
    }
    }
    else
    return Instance.MatiereSignalList;
    }

    return toReturn;
    }

    #endregion

    #region SÉCURITÉ DE LA SAUVEGARDE (ILLISIBLE)

    // ECRITURE DU FICHIER ILLISIBLE
    private static void Obfuscate(string fileName, string data)
    {
    var bytes = Encoding.UTF8.GetBytes(data);
    for (int i = 0; i < bytes.Length; i++) bytes[i] ^= 0x5a;
    File.WriteAllText(fileName, Convert.ToBase64String(bytes));
    }

    // RÉCUPÉRATION DU FICHIER ILLISIBLE
    private static string Deobfuscate(string fileName)
    {
    var bytes = Convert.FromBase64String(File.ReadAllText(fileName));
    for (int i = 0; i < bytes.Length; i++) bytes[i] ^= 0x5a;
    return Encoding.UTF8.GetString(bytes);
    }

    #endregion
    }
    }