Verarbeitung.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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 IDictionary<string, HaendlerKonto> _zielKonten = new Dictionary<string, HaendlerKonto>();
  22. private readonly IDictionary<string, string> _nichtZugeordnet = new SortedDictionary<string, string>();
  23. private readonly IDictionary<string, string> _nichtImKontenrahmen = new SortedDictionary<string, string>();
  24. private readonly HaendlerKonto _debugKontoKontenrahmen = new HaendlerKonto(KontoTypen.Debug) { Kontonummer = "00000000_1", Bezeichnung = "nicht im Kontenrahmen" };
  25. private readonly HaendlerKonto _debugKontoUebersetzung = new HaendlerKonto(KontoTypen.Debug) { Kontonummer = "00000000_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.KontoTyp + aktKonto.Kontonummer))
  43. {
  44. _nichtZugeordnet.Add(aktKonto.KontoTyp + aktKonto.Kontonummer, 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.KontonummerFormatiert))
  60. {
  61. _zielKonten.Add(ziel.KontonummerFormatiert, ziel);
  62. }
  63. else
  64. {
  65. ziel = _zielKonten[ziel.KontonummerFormatiert];
  66. }
  67. ziel.KontoZuordnen(aktKonto);
  68. }
  69. private string SplitKontoVerarbeiten(string konto, string marke)
  70. {
  71. if (konto == null || !konto.Contains(",")) return konto;
  72. if (marke.Equals(Config.Hauptmarke))
  73. {
  74. return konto.Split(',')[0];
  75. }
  76. return konto.Split(',')[1];
  77. }
  78. private void ReportNichtImKontenrahmen()
  79. {
  80. if (_nichtImKontenrahmen.Count <= 0) return;
  81. ReportProgress(60, "Es fehlen " + _nichtImKontenrahmen.Count + " Konten im Kontenrahmen.");
  82. Logger.Progress("Fehlende Konten im Kontenrahmen (" + _nichtImKontenrahmen.Count + "): " + Environment.NewLine + String.Join(Environment.NewLine, _nichtImKontenrahmen.Values.ToArray()));
  83. _zielKonten.Add(_debugKontoKontenrahmen.Kontonummer, _debugKontoKontenrahmen);
  84. }
  85. private void ReportNichtZugeordnet()
  86. {
  87. if (_nichtZugeordnet.Count <= 0) return;
  88. ReportProgress(50, "Es konnten " + _nichtZugeordnet.Count + " Konten nicht zugeordnet werden." + Environment.NewLine);
  89. Logger.Progress("Nicht zugeordnete Konten (" + _nichtZugeordnet.Count + "): " + Environment.NewLine + String.Join(Environment.NewLine, _nichtZugeordnet.Values.ToArray()));
  90. _zielKonten.Add(_debugKontoUebersetzung.Kontonummer, _debugKontoUebersetzung);
  91. }
  92. private static string DebugInfo(string kontonummer, HaendlerKonto aktKonto)
  93. {
  94. return String.Format("{0} (Typ: {1}, Kontoart: {4}, Summe (M:{5}, B:{6}): {2}, Anzahl Perioden: {3})",
  95. kontonummer, aktKonto.KontoTyp, aktKonto.Summe, aktKonto.ZugeordneteSaldi.Count, aktKonto.Kontoart, aktKonto.Marke, aktKonto.Betrieb);
  96. }
  97. private static string DebugInfo(HaendlerKonto aktKonto)
  98. {
  99. return DebugInfo(aktKonto.Kontonummer, aktKonto);
  100. }
  101. private static void KontenXmlSpeichern(List<HaendlerKonto> konten)
  102. {
  103. var serializer = new XmlSerializer(typeof(Konten));
  104. using (var stream = File.CreateText("logs\\Zuordnung.xml"))
  105. {
  106. serializer.Serialize(stream, new Konten { Kontenliste = konten });
  107. }
  108. }
  109. }
  110. }