using System; using System.Collections.Generic; using System.IO; using System.Linq; using GCHR.Model; namespace GCHR.Control.Tasks { class KontoDoppeltException : ArgumentException { public KontoDoppeltException(String kontonummer) : base(kontonummer) { } } class FehlendeBeschriftungException : ArgumentException { public FehlendeBeschriftungException(String kontonummer) : base(kontonummer) { } } class FehlenderCaseException : ArgumentException { public FehlenderCaseException(String kontonummer) : base(kontonummer) { } } class FehlerhafteZeileException : ArgumentException { public FehlerhafteZeileException(String zeile) : base(zeile) { } } class KontenrahmenAlt : Task { public KontenrahmenAlt(int id, string name) : base(id, name) { } private readonly Dictionary _kontenrahmen = new Dictionary(); protected override void AufgabeAusfuehren() { Config.DateiVonServerHolen("Kontenrahmen.csv"); ReportProgress(40); KontenrahmenAusDateiAbrufen(); Data.SetKontenrahmen(_kontenrahmen); } private void KontenrahmenAusDateiAbrufen() { #region Fehlerlisten var fehlerlisten = new Dictionary> { {"KontoDoppelt", new List {"Im Kontenrahmen doppelt vorhandene Konten"}}, {"FehlendeBeschriftung", new List {"Konten ohne Beschriftung"}}, {"FehlenderCase", new List {"Konten ohne Case"}}, { "FehlerhafteZeile", new List {"Im Kontenrahmen nicht als Konto erkannte Zeilen"} } }; var statusmeldung = ""; #endregion var stream = new StreamReader(Constants.KontenrahmenDatei, Constants.CsvEncoding); // Kopfzeile ignorieren stream.ReadLine(); while (!stream.EndOfStream) { try { ZeileVerarbeiten(stream.ReadLine()); } catch (KontoDoppeltException e) { fehlerlisten["KontoDoppelt"].Add(e.Message); Logger.Progress("Doppeltes Konto im Kontenrahmen: " + e.Message); } catch (FehlendeBeschriftungException e) { fehlerlisten["FehlendeBeschriftung"].Add(e.Message); } catch (FehlenderCaseException e) { fehlerlisten["FehlenderCase"].Add(e.Message); } catch (FehlerhafteZeileException e) { fehlerlisten["FehlerhafteZeile"].Add(e.Message); } } foreach (var fehlerliste in fehlerlisten.Values) { if (fehlerliste.Count <= 1) continue; statusmeldung += string.Format("{0}: {1}{2}", fehlerliste[0], fehlerliste.Count, Environment.NewLine); Logger.Progress(string.Format("{0} ({1}){2}{3}{4}", fehlerliste[0], fehlerliste.Count, Environment.NewLine, String.Join(Environment.NewLine, fehlerliste.ToArray()), Environment.NewLine)); } if (statusmeldung != "") { ReportProgress(80, statusmeldung); } stream.Close(); } private void ZeileVerarbeiten(string zeile) { if (zeile.Equals("")) return; var felder = zeile.Split(';'); if (felder.Count() < 3) throw new FehlerhafteZeileException(zeile); var kontoNummer = felder[0].PadLeft(Config.HerstellerKontenrahmenZiffern, '0'); if (_kontenrahmen.ContainsKey(kontoNummer)) throw new KontoDoppeltException(kontoNummer); var kontoDesc = felder[1].Trim(); var kontoCase = felder[2].Trim(); var kontoInfo = (felder.Count() > 3) ? felder[3].Trim() : ""; _kontenrahmen.Add(kontoNummer, new[] { kontoDesc, kontoCase, kontoInfo }); if (kontoDesc.Equals("")) throw new FehlendeBeschriftungException(kontoNummer); if (kontoCase.Equals("")) throw new FehlenderCaseException(kontoNummer); } } }