123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Xml.Serialization;
- using GCHR.Model.Konto;
- namespace GCHR.Control.Tasks
- {
- class Verarbeitung : Task
- {
- public Verarbeitung(int id, string name)
- : base(id, name) { }
- protected override void AufgabeAusfuehren()
- {
- var konten = Data.GetKonten();
- // if (Data.ImportdatenSichern) KontenXmlSpeichern(konten);
- Data.SetKonten(KontenrahmenUebersetzen(konten));
- KontenXmlSpeichern(_zielKonten.Values.ToList());
- Data.AufSusaStatWarten.Set();
- }
- private readonly Dictionary<string, HaendlerKonto> _zielKonten = new Dictionary<string, HaendlerKonto>();
- private readonly Dictionary<string, string> _nichtZugeordnet = new Dictionary<string, string>();
- private readonly Dictionary<string, string> _nichtImKontenrahmen = new Dictionary<string, string>();
- private readonly HaendlerKonto _debugKontoKontenrahmen = new HaendlerKonto(KontoTypen.Debug) { Kontonummer = "00000000_1", Bezeichnung = "nicht im Kontenrahmen" };
- private readonly HaendlerKonto _debugKontoUebersetzung = new HaendlerKonto(KontoTypen.Debug) { Kontonummer = "00000000_2", Bezeichnung = "Uebersetzung fehlt" };
- private List<HaendlerKonto> KontenrahmenUebersetzen(IEnumerable<HaendlerKonto> kontenimport)
- {
- Data.KontoOhneUebersetzungUebernehmen = Config.KontoOhneUebersetzungUebernehmen;
- foreach (var aktKonto in kontenimport)
- {
- KontoUebersetzen(aktKonto);
- }
- ReportNichtZugeordnet();
- ReportNichtImKontenrahmen();
- return _zielKonten.Values.ToList();
- }
- private void KontoUebersetzen(HaendlerKonto aktKonto)
- {
- var kontonummer = SplitKontoVerarbeiten(Data.KontoUebersetzen(aktKonto), aktKonto.Marke);
- if (kontonummer == null)
- {
- if (aktKonto.Summe != 0.0m && !_nichtZugeordnet.ContainsKey(aktKonto.Kontonummer + aktKonto.KontoTyp))
- {
- _nichtZugeordnet.Add(aktKonto.Kontonummer + aktKonto.KontoTyp, DebugInfo(aktKonto));
- }
- _debugKontoUebersetzung.KontoZuordnen(aktKonto);
- return;
- }
- var ziel = Data.KontoAusKontenrahmen(kontonummer, aktKonto);
- if (ziel == null)
- {
- if (aktKonto.Summe != 0.0m && !_nichtImKontenrahmen.ContainsKey(kontonummer))
- {
- _nichtImKontenrahmen.Add(kontonummer, DebugInfo(kontonummer, aktKonto));
- }
- _debugKontoKontenrahmen.KontoZuordnen(aktKonto);
- return;
- }
- if (!_zielKonten.ContainsKey(ziel.KontonummerFormatiert))
- {
- _zielKonten.Add(ziel.KontonummerFormatiert, ziel);
- }
- else
- {
- ziel = _zielKonten[ziel.KontonummerFormatiert];
- }
- ziel.KontoZuordnen(aktKonto);
- }
- private string SplitKontoVerarbeiten(string konto, string marke)
- {
- if (konto == null || !konto.Contains(",")) return konto;
- if (marke.Equals(Config.Hauptmarke))
- {
- return konto.Split(',')[0];
- }
- return konto.Split(',')[1];
- }
- private void ReportNichtImKontenrahmen()
- {
- if (_nichtImKontenrahmen.Count <= 0) return;
- ReportProgress(60, "Es fehlen " + _nichtImKontenrahmen.Count + " Konten im Kontenrahmen.");
- Logger.Progress("Fehlende Konten im Kontenrahmen (" + _nichtImKontenrahmen.Count + "): " + Environment.NewLine + String.Join(Environment.NewLine, _nichtImKontenrahmen.Values.ToArray()));
- _zielKonten.Add(_debugKontoKontenrahmen.Kontonummer, _debugKontoKontenrahmen);
- }
- private void ReportNichtZugeordnet()
- {
- if (_nichtZugeordnet.Count <= 0) return;
- ReportProgress(50, "Es konnten " + _nichtZugeordnet.Count + " Konten nicht zugeordnet werden." + Environment.NewLine);
- Logger.Progress("Nicht zugeordnete Konten (" + _nichtZugeordnet.Count + "): " + Environment.NewLine + String.Join(Environment.NewLine, _nichtZugeordnet.Values.ToArray()));
- _zielKonten.Add(_debugKontoUebersetzung.Kontonummer, _debugKontoUebersetzung);
- }
- private static string DebugInfo(string kontonummer, HaendlerKonto aktKonto)
- {
- return String.Format("{0} (Typ: {1}, Summe: {2}, Anzahl Perioden: {3})",
- kontonummer, aktKonto.KontoTyp, aktKonto.Summe, aktKonto.ZugeordneteSaldi.Count);
- }
- private static string DebugInfo(HaendlerKonto aktKonto)
- {
- return DebugInfo(aktKonto.Kontonummer, aktKonto);
- }
- private static void KontenXmlSpeichern(List<HaendlerKonto> konten)
- {
- var serializer = new XmlSerializer(typeof(Konten));
- using (var stream = File.CreateText("logs\\Zuordnung.xml"))
- {
- serializer.Serialize(stream, new Konten { Kontenliste = konten });
- }
- }
- }
- }
|