TaskManager.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.IO;
  5. using System.Linq;
  6. using GCHR.Model;
  7. using GCHR.Model.Konto;
  8. using GCHR.View;
  9. namespace GCHR.Control.Tasks
  10. {
  11. class TaskManager
  12. {
  13. public ThreadXData Data = ThreadXData.CreateInstance();
  14. private List<Task> _taskList;
  15. private readonly Konfiguration _config = Konfiguration.GetInstance();
  16. public void CreateTasks(RunWorkerCompletedEventHandler completed, Periode periode)
  17. {
  18. HaendlerKonto.AktuellePeriode = periode;
  19. _config.AktuellePeriode = periode;
  20. Data.SetDepartmentCase(CreateDepartmentCaseInstance());
  21. Data.JahresergebnisKonto = _config.JahresergebnisKonto;
  22. completed += Ablaufsteuerung;
  23. _taskList = new List<Task> {
  24. Task.CreateInstance(0, "Kontenrahmen", completed, new[] { -1 }),
  25. Task.CreateInstance(1, "UebersetzungSuSa", completed, new[] { 0 }),
  26. Task.CreateInstance(2, "UebersetzungStat", completed, new[] { 0 }),
  27. Task.CreateInstance(3, "ManuelleKonten", completed, new[] { 2 }),
  28. Task.CreateInstance(4, "DatenimportSuSa", completed, new[] { 1, 2 }),
  29. Task.CreateInstance(5, "DatenimportStat", completed, new[] { 4 }),
  30. Task.CreateInstance(6, "Verarbeitung", completed, new[] { 5 }),
  31. Task.CreateInstance(7, "Verrechnung", completed, new[] { 3 }),
  32. Task.CreateInstance(8, "Export", completed, new[] { 7 })
  33. };
  34. Logger.ExportLog = periode.LogDatei;
  35. var info = new FileInfo(Logger.ExportLog);
  36. if (info.Directory != null) info.Directory.Create();
  37. Logger.Info(DateTime.Now + " - " + periode.Klartext);
  38. Logger.Info(string.Format("Prozess gestartet. Weitere Infos siehe '{0}'", Logger.ExportLog));
  39. Logger.Progress(DateTime.Now + " Prozess gestartet.");
  40. }
  41. private void Ablaufsteuerung(object s, RunWorkerCompletedEventArgs e)
  42. {
  43. var aktuellerWorker = (BackgroundWorker)s;
  44. var aktuelleAufgabe = GetAufgabeByWorker(aktuellerWorker);
  45. if (e.Error == null)
  46. {
  47. if (aktuelleAufgabe.Ampel != null && aktuelleAufgabe.Ampel.Message.Equals(""))
  48. {
  49. aktuelleAufgabe.Ampel.Message = "Die Verarbeitung war erfolgreich.";
  50. }
  51. SetWorkerCompleted(aktuelleAufgabe.ID);
  52. var weitereAufgabe = TryRunNextWorker();
  53. if (!weitereAufgabe)
  54. {
  55. _config.ManuelleKontenSpeichern();
  56. }
  57. }
  58. else
  59. {
  60. if (aktuelleAufgabe.Ampel != null)
  61. {
  62. aktuelleAufgabe.Ampel.Status = Ampelstatus.Rot;
  63. aktuelleAufgabe.Ampel.Message += e.Error.Message;
  64. }
  65. Logger.Info(e.Error.ToString());
  66. Logger.Progress(e.Error.ToString());
  67. }
  68. }
  69. public Task GetAufgabeByWorker(BackgroundWorker worker)
  70. {
  71. var aufgabe = (from a in _taskList
  72. where a.Worker == worker
  73. select a).First();
  74. return aufgabe;
  75. }
  76. private void SetWorkerCompleted(int aufgabeId)
  77. {
  78. foreach (var aufgabe in _taskList)
  79. {
  80. aufgabe.WartelisteAktualisieren(aufgabeId);
  81. }
  82. }
  83. public bool TryRunNextWorker()
  84. {
  85. return (_taskList.Where(aufgabe => aufgabe.TryRun())).Any();
  86. }
  87. public void RegisterAmpeln(Ampel[] ampeln)
  88. {
  89. for (var i = 0; i < Math.Min(ampeln.Count(), _taskList.Count); i++)
  90. {
  91. _taskList[i].RegisterAmpel(ampeln[i]);
  92. }
  93. }
  94. private DepartmentCase CreateDepartmentCaseInstance()
  95. {
  96. return new DepartmentCase(_config.Hauptmarke, _config.Hauptbetrieb, _config.BilanzMarke, _config.BilanzBetrieb, _config.HerstellerKontenrahmenStellen);
  97. }
  98. }
  99. }