Verarbeitung.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Xml.Serialization;
  6. using GCHR.Model.Konto;
  7. namespace GCHR.Control.Tasks
  8. {
  9. class Verarbeitung : Task
  10. {
  11. public Verarbeitung(int id, string name)
  12. : base(id, name) { }
  13. protected override void AufgabeAusfuehren()
  14. {
  15. var konten = Data.GetKonten();
  16. // if (Data.ImportdatenSichern) KontenXmlSpeichern(konten);
  17. Data.SetKonten(KontenrahmenUebersetzen(konten));
  18. KontenXmlSpeichern(_zielKonten.Values.ToList());
  19. Data.AufSusaStatWarten.Set();
  20. }
  21. private readonly Dictionary<string, HaendlerKonto> _zielKonten = new Dictionary<string, HaendlerKonto>();
  22. private readonly Dictionary<string, string> _nichtZugeordnet = new Dictionary<string, string>();
  23. private readonly Dictionary<string, string> _nichtImKontenrahmen = new Dictionary<string, string>();
  24. private readonly HaendlerKonto _debugKontoKontenrahmen = new HaendlerKonto(KontoTypen.Debug) { Kontonummer = "_1", Bezeichnung = "nicht im Kontenrahmen" };
  25. private readonly HaendlerKonto _debugKontoUebersetzung = new HaendlerKonto(KontoTypen.Debug) { Kontonummer = "_2", Bezeichnung = "Uebersetzung fehlt" };
  26. private List<HaendlerKonto> KontenrahmenUebersetzen(IEnumerable<HaendlerKonto> kontenimport)
  27. {
  28. Data.KontoOhneUebersetzungUebernehmen = Config.KontoOhneUebersetzungUebernehmen;
  29. foreach (var aktKonto in kontenimport)
  30. {
  31. KontoUebersetzen(aktKonto);
  32. }
  33. ReportNichtZugeordnet();
  34. ReportNichtImKontenrahmen();
  35. return _zielKonten.Values.ToList();
  36. }
  37. private void KontoUebersetzen(HaendlerKonto aktKonto)
  38. {
  39. var kontonummer = SplitKontoVerarbeiten(Data.KontoUebersetzen(aktKonto), aktKonto.Marke);
  40. if (kontonummer == null)
  41. {
  42. if (aktKonto.Summe != 0.0m && !_nichtZugeordnet.ContainsKey(aktKonto.Kontonummer + aktKonto.KontoTyp))
  43. {
  44. _nichtZugeordnet.Add(aktKonto.Kontonummer + aktKonto.KontoTyp, DebugInfo(aktKonto));
  45. }
  46. _debugKontoUebersetzung.KontoZuordnen(aktKonto);
  47. return;
  48. }
  49. var ziel = Data.KontoAusKontenrahmen(kontonummer, aktKonto);
  50. if (ziel == null)
  51. {
  52. if (aktKonto.Summe != 0.0m && !_nichtImKontenrahmen.ContainsKey(kontonummer))
  53. {
  54. _nichtImKontenrahmen.Add(kontonummer, DebugInfo(kontonummer, aktKonto));
  55. }
  56. _debugKontoKontenrahmen.KontoZuordnen(aktKonto);
  57. return;
  58. }
  59. if (!_zielKonten.ContainsKey(ziel.ToString()))
  60. {
  61. _zielKonten.Add(ziel.ToString(), ziel);
  62. }
  63. else
  64. {
  65. ziel = _zielKonten[ziel.ToString()];
  66. }
  67. ziel.KontoZuordnen(aktKonto);
  68. return;
  69. }
  70. private string SplitKontoVerarbeiten(string konto, string marke)
  71. {
  72. if (konto == null || !konto.Contains(",")) return konto;
  73. if (marke.Equals(Config.Hauptmarke))
  74. {
  75. return konto.Split(',')[0];
  76. }
  77. return konto.Split(',')[1];
  78. }
  79. private void ReportNichtImKontenrahmen()
  80. {
  81. if (_nichtImKontenrahmen.Count <= 0) return;
  82. ReportProgress(60, "Es fehlen " + _nichtImKontenrahmen.Count + " Konten im Kontenrahmen.");
  83. Logger.Progress("Fehlende Konten im Kontenrahmen (" + _nichtImKontenrahmen.Count + "): " + Environment.NewLine + String.Join(Environment.NewLine, _nichtImKontenrahmen.Values.ToArray()));
  84. _zielKonten.Add(_debugKontoKontenrahmen.Kontonummer, _debugKontoKontenrahmen);
  85. }
  86. private void ReportNichtZugeordnet()
  87. {
  88. if (_nichtZugeordnet.Count <= 0) return;
  89. ReportProgress(50, "Es konnten " + _nichtZugeordnet.Count + " Konten nicht zugeordnet werden." + Environment.NewLine);
  90. Logger.Progress("Nicht zugeordnete Konten (" + _nichtZugeordnet.Count + "): " + Environment.NewLine + String.Join(Environment.NewLine, _nichtZugeordnet.Values.ToArray()));
  91. _zielKonten.Add(_debugKontoUebersetzung.Kontonummer, _debugKontoUebersetzung);
  92. }
  93. private static string DebugInfo(string kontonummer, HaendlerKonto aktKonto)
  94. {
  95. return String.Format("{0} (Typ: {1}, Summe: {2}, Anzahl Perioden: {3})",
  96. kontonummer, aktKonto.KontoTyp, aktKonto.Summe, aktKonto.ZugeordneteSaldi.Count);
  97. }
  98. private static string DebugInfo(HaendlerKonto aktKonto)
  99. {
  100. return DebugInfo(aktKonto.Kontonummer, aktKonto);
  101. }
  102. private static void KontenXmlSpeichern(List<HaendlerKonto> konten)
  103. {
  104. var serializer = new XmlSerializer(typeof(Konten));
  105. using (var stream = File.CreateText("logs\\Zuordnung.xml"))
  106. {
  107. serializer.Serialize(stream, new Konten { Kontenliste = konten });
  108. }
  109. }
  110. }
  111. }