public static FichierCsv LireCsv(string code, bool skipHeaders = false)
        {
            var newline = Helper.DetecterLigne(code);

            var lignes = code.Split(new[] { newline }, StringSplitOptions.None);

            var resultat = new FichierCsv();
            var i        = 0;

            resultat.Colonnes = skipHeaders ? new List <string>() : lignes[i++].Split(Program.Separateur).ToList();

            //resultat.Lignes = lignes.Skip(1).Select(x => x.Split(Program.SEPARATEUR).ToList()).ToList();

            resultat.Lignes = new List <List <string> >();

            for (; i < lignes.Length; i++)
            {
                var cur = lignes[i];
                if (string.IsNullOrWhiteSpace(cur) || cur.All(x => x == Program.Separateur))
                {
                    break;
                }
                resultat.Lignes.Add(cur.Split(Program.Separateur).ToList());
            }

            return(resultat);
        }
Example #2
0
        private void ChargerFichierOptionsExclues(string f)
        {
            _csvOptionsExclues = FichierCsv.LireFichierCsv(f);

            dgvOptionsExclues.Clear();

            _csvOptionsExclues.RemplirDgv(dgvOptionsExclues);
        }
Example #3
0
        private void ChargerFichierEleves(string f)
        {
            dgvEleves.Clear();

            _csvFichierEleves = FichierCsv.LireFichierCsv(f);
            if (_csvFichierEleves.Colonnes.Count != _indices["NB COL"])
            {
                MessageBox.Show(
                    "Le fichier élèves contient " + _csvFichierEleves.Colonnes.Count +
                    " colonnes, alors qu'il devrait normalement en contenir " + _indices["NB COL"] + ". Cela pourrait provoquer des erreurs.",
                    "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            _csvFichierEleves.RemplirDgv(dgvEleves);
        }
Example #4
0
        private void ChargerFichierLivres(string f)
        {
            _csvFichierLivres = FichierCsv.LireFichierCsv(f, true);

            dgvLivres.Clear();

            dgvLivres.Columns.Add("division", "Division");
            dgvLivres.Columns.Add("option", "Option");

            var nbLivres = _csvFichierLivres.Lignes.Max(x => x.Count) - 2;

            for (var i = 1; i <= nbLivres; i++)
            {
                dgvLivres.Columns.Add("livre" + i, "Livre " + i);
            }

            _csvFichierLivres.RemplirDgv(dgvLivres);
        }
Example #5
0
        private void ChargerFichierDivisions(string f)
        {
            _csvDivisions = FichierCsv.LireFichierCsv(f);

            dgvDivisions.Clear();

            dgvDivisions.Columns.Add("division", "Division");
            dgvDivisions.Columns.Add("caution", "Caution");
            dgvDivisions.Columns.Add("loc_adhe", "Loc. Adhérent");
            dgvDivisions.Columns.Add("loc_non", "Loc. Non adhérent");

            var nbDiv = _csvDivisions.Lignes.Max(x => x.Count) - 4;

            for (var i = 1; i <= nbDiv; i++)
            {
                dgvDivisions.Columns.Add("division" + i, "Division " + i);
            }

            _csvDivisions.RemplirDgv(dgvDivisions, false);
        }
Example #6
0
        private void MainWindow_FormClosing(object sender, FormClosingEventArgs e)
        {
            e.Cancel = true;

            var verifs = new List <Tuple <bool, string, string, FichierCsv> >
            {
                Tuple.Create(_eleveModif, "élèves", fsFichierEleves.FileName, FichierCsv.FromDgv(dgvEleves)),
                Tuple.Create(_divExclModif, "divisions exclues", fsDivisionsExclues.FileName, FichierCsv.FromDgv(dgvDivisionsExclues)),
                Tuple.Create(_optExclModif, "options exclues", fsOptionsExclues.FileName, FichierCsv.FromDgv(dgvOptionsExclues)),
            };

            foreach (var cur in verifs)
            {
                if (cur.Item1)
                {
                    if (
                        MessageBox.Show(
                            "Le fichier des " + cur.Item2 +
                            " a été modifié à l'intérieur de GestionFichierEleves.\nVoulez-vous enregistrer les modifications ?",
                            "Attention", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        var path = cur.Item3;

                        try
                        {
                            cur.Item4.Enregistrer(path);
                        }
                        catch (Exception ex)
                        {
                            Helper.ShowExceptionMessage(ex);
                        }
                    }
                }
            }
            bool keep = false;

            if (_livresModif)
            {
                if (MessageBox.Show(
                        "Le fichier des livres a été modifié à l'intérieur de " +
                        "GestionFichierEleves. Si vous fermez GestionFichierEleves," +
                        " toutes les modifications seront perdues. Voulez-vous vraiment quitter ?", "Attention",
                        MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    keep = true;
                }
            }

            if (_divModif && !keep)
            {
                if (MessageBox.Show(
                        "Le fichier des divisions a été modifié à l'intérieur de " +
                        "GestionFichierEleves. Si vous fermez GestionFichierEleves," +
                        " toutes les modifications seront perdues. Voulez-vous vraiment quitter ?", "Attention",
                        MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    keep = true;
                }
            }

            if (!keep)
            {
                e.Cancel = false;
            }
        }
Example #7
0
        private void bwMain_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            try
            {
                var sw = new Stopwatch();
                ChangeStatus("Initialisation...");
                Thread.Sleep(1000);
                sw.Start();
                ChangeStatus("Initialisation des fichiers CSV...");

                ChangeProgressBarCurrent(0, 4);

                // Options non trouvées dans le fichier Livres et non présentes dans le fichier Options-exclues.
                var csvOptAnom = new FichierCsv {
                    Colonnes = new List <string> {
                        "Nom", "Prénom", "Division", "Option(s)"
                    }
                };
                ChangeProgressBarCurrent(1, 4);

                // Division non trouvée dans le fichier Divisions.csv et non présentes dans le fichier Divisions-exclues.
                var csvDivAnom = new FichierCsv {
                    Colonnes = new List <string> {
                        "Nom", "Prénom", "Division"
                    }
                };
                ChangeProgressBarCurrent(2, 4);

                // Mettre les frères et soeurs dans ce fichier.
                var csvFratries = new FichierCsv {
                    Colonnes = new List <string> {
                        "Nom", "Prénom", "Division"
                    }
                };
                ChangeProgressBarCurrent(3, 4);

                // Gestion des cas non traités.
                var csvAnomalie = new FichierCsv {
                    Colonnes = _csvFichierEleves.Colonnes
                };
                ChangeProgressBarCurrent(4, 4);

                ChangeProgressBarTotal(1, 6);
                ChangeProgressBarCurrent(0, 3);
                ChangeStatus("Création des dossiers de sortie...");
                var bf = _rootFolder;
                if (!Directory.Exists(bf))
                {
                    Directory.CreateDirectory(bf);
                }
                ChangeProgressBarCurrent(1, 3);
                var sd = Path.Combine(bf, "Fichiers Divisions");
                if (Directory.Exists(sd))
                {
                    Directory.Delete(sd, true);
                }
                // Une boucle while ici permet de s'assurer que le dossier est bien créé
                while (!Directory.Exists(sd))
                {
                    Directory.CreateDirectory(sd);
                }
                ChangeProgressBarCurrent(2, 3);
                var st = Path.Combine(bf, "Fichiers Traitement");
                if (Directory.Exists(st))
                {
                    Directory.Delete(st, true);
                }
                while (!Directory.Exists(st))
                {
                    Directory.CreateDirectory(st);
                }
                ChangeProgressBarCurrent(3, 3);

                ChangeProgressBarTotal(2, 6);
                ChangeProgressBarCurrent(0, 6);
                ChangeStatus("Génération du fichier des fratries...");

                var etape1 =
                    _csvFichierEleves.Lignes.GroupBy(
                        x => new { NomL1 = x[_indices["NOM L1"]], PrenomL1 = x[_indices["PRENOM L1"]], AdresseL1 = x[_indices["ADRESSE L1"]], CP = x[_indices["CP"]] });
                var etape2 = etape1.Where(x => x.Count() > 1);
                ChangeProgressBarCurrent(5, 6);
                csvFratries.Lignes = etape2.SelectMany(x => x.ToList().AddEmptyLine(x.Max(y => y.Count))).ToList();
                CreerDossiers();
                ChangeStatus("Enregistrement du fichier des fratries...");
                csvFratries.Enregistrer(Path.Combine(st, "Fratries.csv"));
                ChangeProgressBarCurrent(6, 6);
                Thread.Sleep(500);
                CreerDossiers(); // Acquis de conscience, juste au cas où
                ChangeProgressBarTotal(3, 6);
                ChangeProgressBarCurrent(0, _csvFichierEleves.Lignes.Count);
                ChangeStatus("Génération des fichiers CSV...");
                var csvClasses = new Dictionary <string, FichierCsv>();
                foreach (var d in _csvFichierEleves.Lignes.Select(x => x[_indices["DIV"]]).Distinct())
                {
                    var csv = new FichierCsv {
                        Colonnes = _csvFichierEleves.Colonnes.ToList()
                    };
                    csv.Colonnes.AddRange(new[] { "Adherent", "Famille", "Delegues", "Caution", "loc_adhe", "Loc_NON" });
                    for (var i = 1; i <= 16; i++)
                    {
                        csv.Colonnes.Add("L" + i.ToString().PadLeft(2, '0'));
                    }
                    csvClasses.Add(d, csv);
                }

                for (var i = 0; i < _csvFichierEleves.Lignes.Count; i++)
                {
                    var curl = _csvFichierEleves.Lignes[i].ToList();
                    try
                    {
                        var div = curl[_indices["DIV"]];

                        if (string.IsNullOrWhiteSpace(div) || string.IsNullOrWhiteSpace(curl[_indices["DIV SIECLE"]]))
                        {
                            csvAnomalie.Lignes.Add(curl);
                            continue;
                        }

                        curl.AddRange(new[] { "", "", "" }); // Adherent, Famille, Delegues (ne pas remplir)

                        if (_csvDivisionsExclues != null && _csvDivisionsExclues.Lignes.Any(x => x.Contains(div)))
                        {
                            continue;
                        }

                        var ligneDansFichDiv = _csvDivisions.Lignes.FirstOrDefault(x => x.Skip(4).Contains(div));
                        if (ligneDansFichDiv == null)
                        {
                            // Anomalie
                            csvDivAnom.Lignes.Add(new List <string> {
                                curl[0], curl[1], div
                            });
                            continue;
                        }

                        curl.AddRange(ligneDansFichDiv.GetRange(1, 3));

                        var lignesLivres = _csvFichierLivres.Lignes.Where(x => x[0] == ligneDansFichDiv[0]).ToArray();

                        foreach (var cli in curl.Skip(_indices["OPTION 1"]).Take(_indices["NB OPTIONS"]))
                        {
                            if (lignesLivres.All(x => x[1] != cli) && !string.IsNullOrWhiteSpace(cli) && cli != "NC")
                            {
                                if (_csvOptionsExclues == null ||
                                    !_csvOptionsExclues.Lignes.Any(
                                        y => (y[0] == "ALL" || y[0] == ligneDansFichDiv[0]) && y[1] == cli))
                                {
                                    // Anomalie
                                    csvOptAnom.Lignes.Add(new List <string> {
                                        curl[0], curl[1], div, cli
                                    });
                                }
                            }
                        }
                        _collivre1 = curl.Count;

                        curl.AddRange(
                            lignesLivres.Where(
                                x =>
                                (x[1] == "STD" || curl.Skip(_indices["OPTION 1"]).Take(_indices["NB OPTIONS"]).Contains(x[1])) &&
                                (_csvOptionsExclues == null || !_csvOptionsExclues.Lignes.Any(
                                     y => (y[0] == "ALL" || y[0] == ligneDansFichDiv[0]) && y[1] == x[1])))
                            .Select(x => x.Skip(2).Where(y => !string.IsNullOrWhiteSpace(y)))
                            .SelectMany(x => x));

                        csvClasses[div].Lignes.Add(curl);
                    }
                    catch
                    {
                        csvAnomalie.Lignes.Add(curl);
                    }

                    ChangeProgressBarCurrent(i + 1, _csvFichierEleves.Lignes.Count);
                }

                /*foreach (var kvp in csvClasses)
                 * {
                 *  var ligneDansFichDiv = CSVDivisions.Lignes.FirstOrDefault(x => x.Skip(4).Contains(kvp.Key));
                 *  if (ligneDansFichDiv == null) continue;
                 *  var lignesLivres = CSVFichierLivres.Lignes.Where(x => x[0] == ligneDansFichDiv[0]);
                 *  var ligneVide = new List<string>();
                 *  for (var j = 0; j < 33; j++) ligneVide.Add(".");
                 *  ligneVide[7] = "";
                 *  ligneVide[8] = "";
                 *  ligneVide.AddRange(ligneDansFichDiv.GetRange(1, 3));
                 *  ligneVide.AddRange(
                 *      lignesLivres.Select(x => x.Skip(2).Where(y => !string.IsNullOrWhiteSpace(y))).SelectMany(x => x));
                 *  kvp.Value.Lignes.Add(ligneVide);
                 * }*/

                ChangeProgressBarTotal(4, 6);
                ChangeProgressBarCurrent(0, 3);
                ChangeStatus("Enregistrement des fichiers CSV de traitement...");
                Thread.Sleep(200);
                CreerDossiers(); // Acquis de conscience, juste au cas où
                csvOptAnom.Enregistrer(Path.Combine(st, "Options-anomalies.csv"));
                ChangeProgressBarCurrent(1, 4);

                csvDivAnom.Enregistrer(Path.Combine(st, "Divisions-anomalies.csv"));
                ChangeProgressBarCurrent(2, 4);

                csvAnomalie.Enregistrer(Path.Combine(st, "Anomalies.csv"));
                ChangeProgressBarCurrent(3, 4);

                ChangeProgressBarTotal(5, 6);
                ChangeProgressBarCurrent(0, csvClasses.Count);
                ChangeStatus("Enregistrement des fichiers CSV des divisions...");

                var csvClassesL = csvClasses.ToList();
                for (var i = 0; i < csvClassesL.Count; i++)
                {
                    var it = csvClassesL[i];
                    if (it.Value.Lignes.Count == 0)
                    {
                        continue;
                    }
                    var iddivs = it.Value.Lignes[0][_indices["DIV SIECLE"]];
                    var iddiv  = it.Value.Lignes[0][_indices["DIV"]];
                    it.Value.Enregistrer(Path.Combine(sd, iddivs + ".csv"));

                    var ficheVierge = it.Value.Clone();
                    ficheVierge.Lignes.Clear();
                    var l = ficheVierge.Colonnes.Select(x => ".").Take(_collivre1).ToList();
                    var ligneDansFichDiv = _csvDivisions.Lignes.FirstOrDefault(x => x.Skip(4).Contains(iddiv));
                    if (ligneDansFichDiv != null)
                    {
                        l.AddRange(_csvFichierLivres.Lignes.Where(x => x[0] == ligneDansFichDiv[0]).SelectMany(x => x.Skip(2)).Where(x => !string.IsNullOrWhiteSpace(x)).Distinct());
                        ficheVierge.Lignes.Add(l.ToSize(ficheVierge.Colonnes.Count).ToList());
                        ficheVierge.Enregistrer(Path.Combine(sd, iddivs + "-vierge.csv"));
                    }

                    ChangeProgressBarCurrent(i + 1, csvClassesL.Count);
                }

                ChangeProgressBarTotal(6, 6);
                ChangeProgressBarCurrent(100, 100);
                ChangeStatus("Terminé");
                sw.Stop();
                if (MessageBox.Show(
                        "Génération terminée.\nTemps total écoulé : " + sw.Elapsed + " secondes." +
                        "\n\nVoulez-vous ouvrir le dossier de sortie ?", "Génération terminée", MessageBoxButtons.YesNo,
                        MessageBoxIcon.Information) == DialogResult.Yes)
                {
                    Process.Start(bf);
                }
            }
            catch (Exception ex)
            {
                ChangeProgressBarTotal(6, 6);
                ChangeProgressBarCurrent(100, 100);
                ChangeStatus("Erreur");

                Helper.ShowExceptionMessage(ex);
            }
        }