123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- 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<String, String[]> _kontenrahmen = new Dictionary<string, string[]>();
- protected override void AufgabeAusfuehren()
- {
- ReportProgress(40);
- KontenrahmenAusDateiAbrufen();
- Data.SetKontenrahmen(_kontenrahmen);
- }
- private void KontenrahmenAusDateiAbrufen()
- {
- #region Fehlerlisten
- var fehlerlisten = new Dictionary<string, List<string>>
- {
- {"KontoDoppelt", new List<string> {"Im Kontenrahmen doppelt vorhandene Konten"}},
- {"FehlendeBeschriftung", new List<string> {"Konten ohne Beschriftung"}},
- {"FehlenderCase", new List<string> {"Konten ohne Case"}},
- {
- "FehlerhafteZeile",
- new List<string> {"Im Kontenrahmen nicht als Konto erkannte Zeilen"}
- }
- };
- var statusmeldung = "";
- #endregion
- var stream = new StreamReader(Config.Kontenrahmen, 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.HerstellerKontenrahmenStellen, '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);
- }
- }
- }
|