Export.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using GCHR.Model;
  6. using GCHR.Model.Konto;
  7. using GCHR.Model.Mandant;
  8. namespace GCHR.Control.Tasks
  9. {
  10. sealed class Export : Task
  11. {
  12. private List<HaendlerKonto> _konten;
  13. private readonly IMandant _mandant;
  14. private readonly string _debugExportFile;
  15. public Export(int id, string name)
  16. : base(id, name)
  17. {
  18. _mandant = MandantFactory.Create(Config.Mandantenname);
  19. HaendlerKonto.Mandant = _mandant;
  20. _debugExportFile = Config.AktuellePeriode.ProtokollDatei;
  21. }
  22. private const String DebugHeader =
  23. "Konto_Nr_Hersteller;Konto_Bezeichnung;Konto_Nr_Haendler;Konto_Typ;Konto_Art;Marke_Haendler;Betrieb_Haendler;Soll;Haben;Summe";
  24. /// <summary>
  25. /// Wartet auf das Eintreffen der manuellen Konten und startet dann den Export von Balance, Accounts und Debug,
  26. /// falls entsprechende Dateiangaben gesetzt sind.
  27. /// </summary>
  28. protected override void AufgabeAusfuehren()
  29. {
  30. ReportProgress(5);
  31. _konten = Data.GetKonten();
  32. if (_mandant.BalanceDatei)
  33. {
  34. var balanceStream = DateiStream(Config.AktuellePeriode.BalanceDatei);
  35. ReportProgress(20);
  36. balanceStream.WriteLine(_mandant.BalanceHeader);
  37. foreach (var kto in _konten.Where(k => (k.Summe != 0.0m)))
  38. {
  39. var zeile = _mandant.BalanceBody(kto);
  40. if (zeile.Length > 0)
  41. {
  42. balanceStream.WriteLine(zeile);
  43. }
  44. }
  45. balanceStream.Write(_mandant.BalanceFooter);
  46. balanceStream.Close();
  47. }
  48. ReportProgress(40);
  49. if (_mandant.AccountsDatei)
  50. {
  51. var accountsStream = DateiStream(Config.AktuellePeriode.AccountsDatei);
  52. ReportProgress(60);
  53. accountsStream.WriteLine(_mandant.AccountsHeader);
  54. foreach (var kto in _konten.Where(k => (k.Summe != 0.0m)))
  55. {
  56. accountsStream.WriteLine(_mandant.AccountsBody(kto));
  57. }
  58. accountsStream.Write(_mandant.AccountsFooter);
  59. accountsStream.Close();
  60. }
  61. if (!_debugExportFile.Equals(""))
  62. {
  63. var debugStream = DateiStream(_debugExportFile);
  64. ReportProgress(80);
  65. var liste = new List<string>();
  66. foreach (var kto in _konten)
  67. {
  68. liste.AddRange(kto.KontoCsv);
  69. }
  70. liste.Sort();
  71. debugStream.WriteLine(DebugHeader);
  72. liste.ForEach(debugStream.WriteLine);
  73. debugStream.Close();
  74. }
  75. var summeSusa = String.Format("{0:c}", _konten.Sum(k => (k.KontoTyp == KontoTypen.SuSa) ? k.Summe : 0.0m));
  76. var summeOhneFaktor = String.Format("{0:c}", _konten.Sum(k => (k.KontoTyp == KontoTypen.SuSa) ? k.Summe : 0.0m));
  77. var summeBilanz = String.Format("{0:c}", _konten.Sum(k => (k.Kontoart == "1") ? k.Summe : 0.0m));
  78. Logger.Progress("Export-Summe über alle SuSa-Konten: " + summeSusa);
  79. Logger.Progress("Export-Summe ohne Faktoren: " + summeOhneFaktor);
  80. Logger.Progress("Export-Summe über alle Bilanz-Konten: " + summeBilanz);
  81. var zero = String.Format("{0:c}", 0);
  82. if (!summeSusa.Equals(zero) && !summeOhneFaktor.Equals(zero))
  83. {
  84. ReportProgress(80, "Der Export war erfolgreich" + Environment.NewLine +
  85. "ACHTUNG SuSa Abweichung im Export!" + Environment.NewLine +
  86. "Export-Summe über alle SuSa-Konten: " + summeSusa);
  87. }
  88. ReportProgress(100);
  89. }
  90. private static StreamWriter DateiStream (string datei)
  91. {
  92. var info = new FileInfo(datei);
  93. if (info.Directory != null) info.Directory.Create();
  94. return new StreamWriter(info.FullName, false, Constants.CsvEncoding);
  95. }
  96. }
  97. }