123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text.RegularExpressions;
- using GCHR.Model;
- using GCHR.Model.Konto;
- namespace GCHR.Control.Tasks
- {
- abstract class Uebersetzung : Task
- {
- protected Uebersetzung(int id, string name)
- : base(id, name) { }
-
- protected string Dateiname;
- protected KontoTypen KontoTyp;
- private readonly Dictionary<string, string> _uebersetzungstabelle = new Dictionary<string, string>();
- protected override void AufgabeAusfuehren()
- {
- UebersetzungstabelleLaden();
- TabelleUebergeben(_uebersetzungstabelle);
- }
- protected abstract void TabelleUebergeben(Dictionary<string, string> uebersetzung);
- private void UebersetzungstabelleLaden()
- {
- var debugFehlerhafteZeile = new List<string>();
- var debugHerstellerkontoFehlt = new List<string>();
- var debugNichtImKontenrahmen = new List<string>();
- var debugDoppeltesHaendlerkonto = new List<string>();
- var stream = new StreamReader(Dateiname, Constants.CsvEncoding);
- // Erste Zeile (Überschrift) ignorieren
- stream.ReadLine();
- while (!stream.EndOfStream)
- {
- var zeile = stream.ReadLine();
- if (zeile == null) continue;
- if (IstUeberschrift(zeile))
- {
- // wird vorerst ignoriert
- /*
- string ueberschrift = zeile.Split(';').First().Substring(1);
- Konto konto = new ManStatKonto() { Kontonummer = ueberschrift };
- ManuelleKonten.Add(konto);
- */
- }
- else if (IstSplitKonto(zeile))
- {
- var felder = zeile.Split(';');
- var herstellerkonto = FehlendeZiffernErgaenzen(felder[0], Config.HerstellerKontenrahmenStellen);
- var herstellerkonto2 = FehlendeZiffernErgaenzen(felder[1], Config.HerstellerKontenrahmenStellen);
- var haendlerkonto = FehlendeZiffernErgaenzen(felder[2], Config.HaendlerKontenrahmenStellen);
- if (!_uebersetzungstabelle.ContainsKey(haendlerkonto))
- {
- _uebersetzungstabelle.Add(haendlerkonto, herstellerkonto + "," + herstellerkonto2);
- }
- else
- {
- debugDoppeltesHaendlerkonto.Add(haendlerkonto);
- }
- }
- else if (IstNormalesKonto(zeile))
- {
- var felder = zeile.Split(';');
- var herstellerkonto = FehlendeZiffernErgaenzen(felder[0], Config.HerstellerKontenrahmenStellen);
- var haendlerkonto = FehlendeZiffernErgaenzen(felder[2], Config.HaendlerKontenrahmenStellen);
- if (!_uebersetzungstabelle.ContainsKey(haendlerkonto))
- {
- _uebersetzungstabelle.Add(haendlerkonto, herstellerkonto);
- }
- else
- {
- debugDoppeltesHaendlerkonto.Add(herstellerkonto);
- }
- }
- else if (IstManuellesKonto(zeile))
- {
- var kontonummer = zeile.Split(';').First().PadLeft(Config.HerstellerKontenrahmenStellen, '0');
- if (!ManuellesKonto(kontonummer) && !debugNichtImKontenrahmen.Contains(kontonummer))
- {
- debugNichtImKontenrahmen.Add(kontonummer);
- }
- }
- else if (HerstellerkontoFehlt(zeile))
- {
- debugHerstellerkontoFehlt.Add(zeile);
- }
- else
- {
- if (!zeile.Equals("ACC_NO_5;DESCRIPTION;ACC_NO_8;x;y") && !zeile.Equals("") && !zeile.Contains("Konto_"))
- {
- debugFehlerhafteZeile.Add(zeile);
- }
- }
- }
- stream.Close();
- #region Verarbeitung der Fehlerlisten
- if (debugFehlerhafteZeile.Count > 0)
- {
- Logger.Progress(string.Format("Fehlerhafte Zeilen ({0}): {1}{2}{3}", debugFehlerhafteZeile.Count, Environment.NewLine, String.Join(Environment.NewLine, debugFehlerhafteZeile.ToArray()), Environment.NewLine));
- ReportProgress(70, string.Format("Die Übersetzungstabelle enthält {0} fehlerhafte Zeilen.", debugFehlerhafteZeile.Count));
- }
- if (debugHerstellerkontoFehlt.Count > 0)
- {
- Logger.Progress(string.Format("Zeilen ohne Herstellerkonto ({0}): {1}{2}{3}", debugHerstellerkontoFehlt.Count, Environment.NewLine, String.Join(Environment.NewLine, debugHerstellerkontoFehlt.ToArray()), Environment.NewLine));
- ReportProgress(80, string.Format("In {0} Zeilen fehlt das Herstellerkonto.", debugHerstellerkontoFehlt.Count));
- }
- if (debugNichtImKontenrahmen.Count > 0)
- {
- Logger.Progress(string.Format("Fehlende Manuelle Konten im Kontenrahmen ({0}): {1}{2}{3}", debugNichtImKontenrahmen.Count, Environment.NewLine, String.Join(Environment.NewLine, debugNichtImKontenrahmen.ToArray()), Environment.NewLine));
- ReportProgress(90, string.Format("Zu {0} manuellen Konten fehlt der Eintrag im Kontenrahmen.", debugNichtImKontenrahmen.Count));
- }
- if (debugDoppeltesHaendlerkonto.Count > 0)
- {
- Logger.Progress(string.Format("Mehrfach zugeordnete Händlerkonten in der Übersetzungstabelle {0} ({1}): {2}{3}{4}", KontoTyp, debugDoppeltesHaendlerkonto.Count, Environment.NewLine, String.Join(Environment.NewLine, debugDoppeltesHaendlerkonto.ToArray()), Environment.NewLine));
- throw new ArgumentException(string.Format("Abbruch: {0} Händlerkonten sind in der Übersetzungstabelle {1} mehrfach zugeordnet.", debugDoppeltesHaendlerkonto.Count, KontoTyp));
- }
- #endregion
- }
- protected abstract bool ManuellesKonto(string kontonummer);
- private static String FehlendeZiffernErgaenzen(String kontonummer, int ziffern)
- {
- return (kontonummer.Length >= ziffern) ? kontonummer : kontonummer.PadLeft(ziffern, '0');
- }
- private static bool IstSplitKonto(string zeile)
- {
- return Regex.IsMatch(zeile, @"^[^;]+;[^;]+;[^;]+");
- }
- private static bool HerstellerkontoFehlt(string zeile)
- {
- return Regex.IsMatch(zeile, @"^;;[^;]+");
- }
- private static bool IstManuellesKonto(string zeile)
- {
- return Regex.IsMatch(zeile, @"^[^;]+;");
- }
- private static bool IstUeberschrift(string zeile)
- {
- return Regex.IsMatch(zeile, @"^[\+]");
- }
- private static bool IstNormalesKonto(string zeile)
- {
- return Regex.IsMatch(zeile, @"^[^;]+;;[^;]+");
- }
- }
- }
|