Verarbeitung.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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 SortedDictionary<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. if (Data.KeinJahresabschluss)
  34. {
  35. _zielKonten.Add(Data.JahresergebnisKonto.KontonummerFormatiert, Data.JahresergebnisKonto);
  36. }
  37. ReportNichtZugeordnet();
  38. ReportNichtImKontenrahmen();
  39. return _zielKonten.Values.ToList();
  40. }
  41. private void KontoUebersetzen(HaendlerKonto aktKonto)
  42. {
  43. var kontonummer = SplitKontoVerarbeiten(Data.KontoUebersetzen(aktKonto), aktKonto.Marke);
  44. if (kontonummer == null)
  45. {
  46. if (aktKonto.Summe != 0.0m && !_nichtZugeordnet.ContainsKey(aktKonto.KontoTyp + aktKonto.Kontonummer))
  47. {
  48. _nichtZugeordnet.Add(aktKonto.KontoTyp + aktKonto.Kontonummer, DebugInfo(aktKonto));
  49. }
  50. _debugKontoUebersetzung.KontoZuordnen(aktKonto);
  51. return;
  52. }
  53. var ziel = Data.KontoAusKontenrahmen(kontonummer, aktKonto);
  54. if (ziel == null)
  55. {
  56. if (aktKonto.Summe != 0.0m && !_nichtImKontenrahmen.ContainsKey(kontonummer))
  57. {
  58. _nichtImKontenrahmen.Add(kontonummer, DebugInfo(kontonummer, aktKonto));
  59. }
  60. _debugKontoKontenrahmen.KontoZuordnen(aktKonto);
  61. return;
  62. }
  63. if (!_zielKonten.ContainsKey(ziel.KontonummerFormatiert))
  64. {
  65. _zielKonten.Add(ziel.KontonummerFormatiert, ziel);
  66. }
  67. else
  68. {
  69. ziel = _zielKonten[ziel.KontonummerFormatiert];
  70. }
  71. ziel.KontoZuordnen(aktKonto);
  72. }
  73. private string SplitKontoVerarbeiten(string konto, string marke)
  74. {
  75. if (konto == null || !konto.Contains(",")) return konto;
  76. if (marke.Equals(Config.Hauptmarke))
  77. {
  78. return konto.Split(',')[0];
  79. }
  80. return konto.Split(',')[1];
  81. }
  82. private void ReportNichtImKontenrahmen()
  83. {
  84. if (_nichtImKontenrahmen.Count <= 0) return;
  85. ReportProgress(60, "Es fehlen " + _nichtImKontenrahmen.Count + " Konten im Kontenrahmen.");
  86. Logger.Progress("Fehlende Konten im Kontenrahmen (" + _nichtImKontenrahmen.Count + "): " + Environment.NewLine + String.Join(Environment.NewLine, _nichtImKontenrahmen.Values.ToArray()));
  87. _zielKonten.Add(_debugKontoKontenrahmen.Kontonummer, _debugKontoKontenrahmen);
  88. }
  89. private void ReportNichtZugeordnet()
  90. {
  91. if (_nichtZugeordnet.Count <= 0) return;
  92. ReportProgress(50, "Es konnten " + _nichtZugeordnet.Count + " Konten nicht zugeordnet werden." + Environment.NewLine);
  93. Logger.Progress("Nicht zugeordnete Konten (" + _nichtZugeordnet.Count + "): " + Environment.NewLine + String.Join(Environment.NewLine, _nichtZugeordnet.Values.ToArray()));
  94. _zielKonten.Add(_debugKontoUebersetzung.Kontonummer, _debugKontoUebersetzung);
  95. }
  96. private static string DebugInfo(string kontonummer, HaendlerKonto aktKonto)
  97. {
  98. return String.Format("{0} (Typ: {1}, Kontoart: {4}, Summe (M:{5}, B:{6}): {2}, Anzahl Perioden: {3})",
  99. kontonummer, aktKonto.KontoTyp, aktKonto.Summe, aktKonto.ZugeordneteSaldi.Count, aktKonto.Kontoart, aktKonto.Marke, aktKonto.Betrieb);
  100. }
  101. private static string DebugInfo(HaendlerKonto aktKonto)
  102. {
  103. return DebugInfo(aktKonto.Kontonummer, aktKonto);
  104. }
  105. private static void KontenXmlSpeichern(List<HaendlerKonto> konten)
  106. {
  107. var serializer = new XmlSerializer(typeof(Konten));
  108. using (var stream = File.CreateText("logs\\Zuordnung.xml"))
  109. {
  110. serializer.Serialize(stream, new Konten { Kontenliste = konten });
  111. }
  112. }
  113. }
  114. }