123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.IO;
- using System.Linq;
- using GCHR.Model;
- using GCHR.Model.Konto;
- using GCHR.View;
- namespace GCHR.Control.Tasks
- {
- class TaskManager
- {
- public ThreadXData Data = ThreadXData.CreateInstance();
- private List<Task> _taskList;
- private readonly Konfiguration _config = Konfiguration.GetInstance();
- public void CreateTasks(RunWorkerCompletedEventHandler completed, Periode periode)
- {
- HaendlerKonto.AktuellePeriode = periode;
- _config.AktuellePeriode = periode;
- Data.SetDepartmentCase(CreateDepartmentCaseInstance());
- Data.JahresergebnisKonto = _config.JahresergebnisKonto;
- completed += Ablaufsteuerung;
- _taskList = new List<Task> {
- Task.CreateInstance(0, "Kontenrahmen", completed, new[] { -1 }),
- Task.CreateInstance(1, "UebersetzungSuSa", completed, new[] { 0 }),
- Task.CreateInstance(2, "UebersetzungStat", completed, new[] { 0 }),
- Task.CreateInstance(3, "ManuelleKonten", completed, new[] { 2 }),
- Task.CreateInstance(4, "DatenimportSuSa", completed, new[] { 1, 2 }),
- Task.CreateInstance(5, "DatenimportStat", completed, new[] { 4 }),
- Task.CreateInstance(6, "Verarbeitung", completed, new[] { 5 }),
- Task.CreateInstance(7, "Verrechnung", completed, new[] { 3 }),
- Task.CreateInstance(8, "Export", completed, new[] { 7 })
- };
- Logger.ExportLog = periode.LogDatei;
- var info = new FileInfo(Logger.ExportLog);
- if (info.Directory != null) info.Directory.Create();
- Logger.Info(DateTime.Now + " - " + periode.Klartext);
- Logger.Info(string.Format("Prozess gestartet. Weitere Infos siehe '{0}'", Logger.ExportLog));
- Logger.Progress(DateTime.Now + " Prozess gestartet.");
- }
- private void Ablaufsteuerung(object s, RunWorkerCompletedEventArgs e)
- {
- var aktuellerWorker = (BackgroundWorker)s;
- var aktuelleAufgabe = GetAufgabeByWorker(aktuellerWorker);
- if (e.Error == null)
- {
- if (aktuelleAufgabe.Ampel != null && aktuelleAufgabe.Ampel.Message.Equals(""))
- {
- aktuelleAufgabe.Ampel.Message = "Die Verarbeitung war erfolgreich.";
- }
- SetWorkerCompleted(aktuelleAufgabe.ID);
- var weitereAufgabe = TryRunNextWorker();
- if (!weitereAufgabe)
- {
- _config.ManuelleKontenSpeichern();
- }
- }
- else
- {
- if (aktuelleAufgabe.Ampel != null)
- {
- aktuelleAufgabe.Ampel.Status = Ampelstatus.Rot;
- aktuelleAufgabe.Ampel.Message += e.Error.Message;
- }
- Logger.Info(e.Error.ToString());
- Logger.Progress(e.Error.ToString());
- }
- }
- public Task GetAufgabeByWorker(BackgroundWorker worker)
- {
- var aufgabe = (from a in _taskList
- where a.Worker == worker
- select a).First();
- return aufgabe;
- }
- private void SetWorkerCompleted(int aufgabeId)
- {
- foreach (var aufgabe in _taskList)
- {
- aufgabe.WartelisteAktualisieren(aufgabeId);
- }
- }
- public bool TryRunNextWorker()
- {
- return (_taskList.Where(aufgabe => aufgabe.TryRun())).Any();
- }
-
- public void RegisterAmpeln(Ampel[] ampeln)
- {
- for (var i = 0; i < Math.Min(ampeln.Count(), _taskList.Count); i++)
- {
- _taskList[i].RegisterAmpel(ampeln[i]);
- }
- }
- private DepartmentCase CreateDepartmentCaseInstance()
- {
- return new DepartmentCase(_config.Hauptmarke, _config.Hauptbetrieb, _config.BilanzMarke, _config.BilanzBetrieb, _config.HerstellerKontenrahmenStellen);
- }
- }
- }
|