Main.xaml.cs 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Diagnostics;
  5. using System.Globalization;
  6. using System.IO;
  7. using System.Text.RegularExpressions;
  8. using System.Windows;
  9. using System.Windows.Controls;
  10. using System.Windows.Input;
  11. using GCHR.Control;
  12. using GCHR.Control.Tasks;
  13. using GCHR.Model;
  14. using GCHR.View;
  15. namespace GCHR
  16. {
  17. public partial class Main
  18. {
  19. private TaskManager _aufgabenListe;
  20. private List<string> _historie;
  21. //private readonly List<Periode> _periodenListe = new List<Periode>();
  22. private bool ImportdatenSichern
  23. {
  24. get { return (BtnImportdatenSichern.IsChecked != null) && (bool) BtnImportdatenSichern.IsChecked; }
  25. }
  26. private bool Offlinemodus
  27. {
  28. get { return (BtnOffline.IsChecked != null) && (bool)BtnOffline.IsChecked; }
  29. }
  30. private bool Exportprotokoll
  31. {
  32. get { return false; }
  33. }
  34. private bool KeinJahresabschluss
  35. {
  36. get { return (BtnKeinJahresabschluss.IsChecked != null) && (bool)BtnKeinJahresabschluss.IsChecked; }
  37. }
  38. public Main()
  39. {
  40. InitializeComponent();
  41. }
  42. private void WindowLoaded(object sender, RoutedEventArgs e)
  43. {
  44. var config = Konfiguration.CreateInstance(Constants.ConfigDatei);
  45. Historie();
  46. AktuellenMonatEinstellen();
  47. Kopfzeile.Content = config.Haendler + " - " + config.HaendlernummerBmCode + " - " + config.Mandantenname;
  48. }
  49. private void AktuellenMonatEinstellen()
  50. {
  51. Jahrbox.Items.Clear();
  52. for (var i = 2012; i <= DateTime.Today.Year; i++)
  53. {
  54. Jahrbox.Items.Add(i);
  55. }
  56. var aktPeriode = AktuellenMonatBestimmen();
  57. Monatsbox.SelectedIndex = Int32.Parse(aktPeriode.Monat) - 1;
  58. Jahrbox.SelectedValue = Int32.Parse(aktPeriode.Jahr);
  59. }
  60. private void Historie()
  61. {
  62. _historie = Logger.Historie();
  63. _historie.Reverse();
  64. LvPerioden.ItemsSource = _historie;
  65. }
  66. private Periode AktuellenMonatBestimmen()
  67. {
  68. var vormonat = new Periode(DateTime.Today.Year, DateTime.Today.Month).Vorgaenger;
  69. if (_historie.Count == 0) return vormonat;
  70. var match = Regex.Match(_historie[0], @"(\d{2})/(\d{4})$");
  71. if (!match.Success) return vormonat;
  72. var aktMonat = new Periode(match.Groups[2].Value + match.Groups[1].Value);
  73. var letzteFuenfTage = File.GetLastWriteTime(aktMonat.BalanceDatei).AddDays(5).CompareTo(DateTime.Now) >= 0;
  74. if (!File.Exists(aktMonat.BalanceDatei) || letzteFuenfTage) return aktMonat;
  75. return aktMonat.Nachfolger;
  76. }
  77. private void BtnStartenClick(object sender, RoutedEventArgs e)
  78. {
  79. BtnStarten.IsEnabled = false;
  80. AufgabenListeErstellen();
  81. AmpelnRegistrieren();
  82. _aufgabenListe.TryRunNextWorker();
  83. }
  84. private string PeriodeAusAuswahl()
  85. {
  86. var monat = (Monatsbox.SelectedIndex + 1).ToString(CultureInfo.InvariantCulture).PadLeft(2, '0');
  87. return Jahrbox.Text + monat;
  88. }
  89. private void AufgabenListeErstellen()
  90. {
  91. _aufgabenListe = new TaskManager
  92. {
  93. Data =
  94. {
  95. ImportdatenSichern = ImportdatenSichern,
  96. Offlinemodus = Offlinemodus,
  97. Exportprotokoll = Exportprotokoll,
  98. KeinJahresabschluss = KeinJahresabschluss
  99. }
  100. };
  101. _aufgabenListe.CreateTasks(Ablaufsteuerung, new Periode(PeriodeAusAuswahl(), KeinJahresabschluss));
  102. }
  103. private void AmpelnRegistrieren()
  104. {
  105. var ampeln = new[]
  106. {
  107. AmpelKontenrahmenLaden, AmpelÜbersetzungstabelleLaden,
  108. AmpelÜbersetzungstabelleStatLaden,
  109. AmpelManuelleLaden, AmpelSuSaKontenImport, AmpelStatKontenImport,
  110. AmpelSuSaKontenVerarbeitung,
  111. AmpelManuelleKontenVerarbeitung, AmpelExport
  112. };
  113. _aufgabenListe.RegisterAmpeln(ampeln);
  114. }
  115. private void Ablaufsteuerung(object s, RunWorkerCompletedEventArgs e)
  116. {
  117. var aktuellerWorker = (BackgroundWorker)s;
  118. var aktuelleAufgabe = _aufgabenListe.GetAufgabeByWorker(aktuellerWorker);
  119. if (e.Error != null)
  120. {
  121. BtnStarten.IsEnabled = true;
  122. }
  123. else
  124. {
  125. if (aktuelleAufgabe.ID == 3 && AmpelManuelleLaden.Done)
  126. {
  127. var manuelleKonten = _aufgabenListe.Data.GetManuelleKonten();
  128. if (manuelleKonten.Count == 0)
  129. {
  130. _aufgabenListe.Data.AufManuelleKontenWarten.Set();
  131. }
  132. else
  133. {
  134. var mkb = new ManuelleKontenBearbeiten(manuelleKonten);
  135. mkb.Closed += ManuelleKontenBearbeitenClosed;
  136. mkb.Show();
  137. }
  138. }
  139. if (aktuelleAufgabe.ID == 8)
  140. {
  141. BtnStarten.IsEnabled = true;
  142. BtnProtokoll.Visibility = Visibility.Visible;
  143. Historie();
  144. Logger.Progress(DateTime.Now + " Prozess beendet.");
  145. Logger.Progress("------------------------------------");
  146. Logger.Progress("");
  147. }
  148. }
  149. }
  150. private void ManuelleKontenBearbeitenClosed(object sender, EventArgs e)
  151. {
  152. var mkb = (ManuelleKontenBearbeiten)sender;
  153. _aufgabenListe.Data.SetManuelleKonten(mkb.ManuelleKonten);
  154. _aufgabenListe.Data.AufManuelleKontenWarten.Set();
  155. }
  156. #region Events für Checkboxen
  157. private void BtnOfflineChecked(object sender, RoutedEventArgs e)
  158. {
  159. var chk = sender as CheckBox;
  160. BtnImportdatenSichern.IsChecked = false;
  161. if (chk != null && chk.IsChecked != null) BtnImportdatenSichern.IsEnabled = !(bool)chk.IsChecked;
  162. }
  163. private void BtnImportdatenSichernChecked(object sender, RoutedEventArgs e)
  164. {
  165. BtnOffline.IsChecked = false;
  166. BtnOffline.Visibility = Visibility.Hidden;
  167. }
  168. private void BtnImportdatenSichernUnchecked(object sender, RoutedEventArgs e)
  169. {
  170. BtnOffline.Visibility = Visibility.Visible;
  171. }
  172. #endregion
  173. private void BtnProtokollClick(object sender, RoutedEventArgs e)
  174. {
  175. var dateiInfo = new FileInfo(Logger.ExportLog);
  176. if (dateiInfo.Directory == null) return;
  177. ProzessStarten("explorer.exe", dateiInfo.Directory.ToString());
  178. }
  179. private void LvPeriodenDoubleClick(object sender, MouseButtonEventArgs e)
  180. {
  181. var match = Regex.Match(_historie[LvPerioden.SelectedIndex], @"(\d{2})/(\d{4})$");
  182. var log = new Periode(match.Groups[2].Value + match.Groups[1].Value).LogDatei;
  183. ProzessStarten("notepad.exe", log);
  184. }
  185. private static void ProzessStarten(string programm, string parameter)
  186. {
  187. var psi = new ProcessStartInfo(programm, parameter)
  188. {
  189. RedirectStandardOutput = true,
  190. WindowStyle = ProcessWindowStyle.Normal,
  191. UseShellExecute = false
  192. };
  193. Process.Start(psi);
  194. }
  195. }
  196. }