Hyundai.cs 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Xml.Linq;
  6. using GCHR.Model.Konto;
  7. namespace GCHR.Model.Mandant
  8. {
  9. internal class Hyundai : IMandant
  10. {
  11. private const string Country = "DE";
  12. private const string Currency = "EUR";
  13. private static readonly XNamespace Tns = XNamespace.None;
  14. private XDocument _xmlDocument;
  15. private readonly XElement _accounts = new XElement(Tns + "RecordList");
  16. private readonly HashSet<string> _makes = new HashSet<string>();
  17. private readonly HashSet<string> _sites = new HashSet<string>();
  18. private readonly HashSet<string> _departments = new HashSet<string>();
  19. private readonly Konfiguration _config = Konfiguration.GetInstance();
  20. public bool BalanceDatei
  21. {
  22. get { return true; }
  23. }
  24. public bool AccountsDatei
  25. {
  26. get { return false; }
  27. }
  28. public string BalanceHeader
  29. {
  30. get
  31. {
  32. return String.Empty;
  33. }
  34. }
  35. private IEnumerable<XElement> MakeList
  36. {
  37. get
  38. {
  39. return (from make in _makes
  40. select new XElement("MakeListEntry", new XElement("Make", make), new XElement("MakeCode", make == "01" ? "8252" : "0000")));
  41. }
  42. }
  43. private IEnumerable<XElement> BmCodeList
  44. {
  45. get
  46. {
  47. return (from dept in _departments
  48. select
  49. new XElement("BmCodeListEntry", new XElement("Make", dept.Split(new[] {'-'})[0]),
  50. new XElement("Site", dept.Split(new[] {'-'})[1]),
  51. new XElement("BmCode", _config.HaendlernummerBmCode)));
  52. }
  53. }
  54. public string BalanceFooter
  55. {
  56. get
  57. {
  58. _xmlDocument = new XDocument();
  59. _xmlDocument.Add(new XElement(Tns + "HbvData",
  60. new XElement(Tns + "Header",
  61. new XElement(Tns + "Country", Country),
  62. new XElement(Tns + "MainBmCode", _config.HaendlernummerBmCode),
  63. new XElement(Tns + "Month", _config.AktuellePeriode.Monat),
  64. new XElement(Tns + "Year", _config.AktuellePeriode.Jahr),
  65. new XElement(Tns + "Currency", Currency),
  66. new XElement(Tns + "NumberOfMakes", _makes.Count),
  67. new XElement(Tns + "NumberOfSites", _sites.Count),
  68. new XElement(Tns + "ExtractionDate", DateTime.Now.ToShortDateString()),
  69. new XElement(Tns + "ExtractionTime", string.Format("{0:T}", DateTime.Now)),
  70. new XElement(Tns + "BeginFiscalYear", _config.Geschaeftsjahr)
  71. ),
  72. new XElement(Tns + "MakeList", MakeList),
  73. new XElement(Tns + "BmCodeList", BmCodeList),
  74. _accounts
  75. ));
  76. return _xmlDocument.ToString();
  77. }
  78. }
  79. public string BalanceBody(HaendlerKonto konto)
  80. {
  81. // Konto: Account-Make-Site-Origin-SalesChannel-CostCarrier
  82. var split = konto.Kontonummer.Split(new[] {'-'});
  83. var make = (split[1] == "??") ? konto.Marke : split[1];
  84. if (!_makes.Contains(make))
  85. {
  86. _makes.Add(make);
  87. }
  88. var site = (split[2] == "??") ? konto.Betrieb : split[2];
  89. if (!_sites.Contains(site))
  90. {
  91. _sites.Add(site);
  92. }
  93. var department = make + "-" + site;
  94. if (!_departments.Contains(department))
  95. {
  96. _departments.Add(department);
  97. }
  98. _accounts.Add(new XElement(Tns + "Record",
  99. new XElement(Tns + "Account", split[0].PadLeft(4, '0')),
  100. new XElement(Tns + "Make", make.PadLeft(2, '0')),
  101. new XElement(Tns + "Site", site.PadLeft(2, '0')),
  102. new XElement(Tns + "Origin", split[3].PadLeft(2, '0')),
  103. new XElement(Tns + "SalesChannel", split[4].PadLeft(2, '0')),
  104. new XElement(Tns + "CostCarrier", split[5].PadLeft(2, '0')),
  105. new XElement(Tns + "CostAccountingString", make.PadLeft(2, '0') + site.PadLeft(2, '0') + split[3].PadLeft(2, '0') + split[4].PadLeft(2, '0') + split[5].PadLeft(2, '0')),
  106. new XElement(Tns + "Decimals", "2"),
  107. new XElement(Tns + "OpeningBalance", string.Format("{0:0.}", konto.Eroeffnungsbilanz * 100)),
  108. new XElement(Tns + "Period01", MonatFormat(konto, 1)),
  109. new XElement(Tns + "Period02", MonatFormat(konto, 2)),
  110. new XElement(Tns + "Period03", MonatFormat(konto, 3)),
  111. new XElement(Tns + "Period04", MonatFormat(konto, 4)),
  112. new XElement(Tns + "Period05", MonatFormat(konto, 5)),
  113. new XElement(Tns + "Period06", MonatFormat(konto, 6)),
  114. new XElement(Tns + "Period07", MonatFormat(konto, 7)),
  115. new XElement(Tns + "Period08", MonatFormat(konto, 8)),
  116. new XElement(Tns + "Period09", MonatFormat(konto, 9)),
  117. new XElement(Tns + "Period10", MonatFormat(konto, 10)),
  118. new XElement(Tns + "Period11", MonatFormat(konto, 11)),
  119. new XElement(Tns + "Period12", MonatFormat(konto, 12)),
  120. new XElement(Tns + "CumulatedYear", string.Format("{0:0.}", konto.Summe * 100))
  121. ));
  122. return String.Empty;
  123. }
  124. private static string MonatFormat(HaendlerKonto konto, int monat)
  125. {
  126. return string.Format("{0:0.}", konto.Monatssumme(monat)*100);
  127. }
  128. public string AccountsHeader
  129. {
  130. get { return String.Empty; }
  131. }
  132. public string AccountsBody(HaendlerKonto kto)
  133. {
  134. return String.Empty;
  135. }
  136. public string AccountsFooter
  137. {
  138. get { return String.Empty; }
  139. }
  140. public string KontonummerFormatieren(HaendlerKonto konto)
  141. {
  142. // Konto: Account-Make-Site-Origin-SalesChannel-CostCarrier
  143. var split = konto.Kontonummer.Split(new[] { '-' });
  144. if (split.Count() < 6) return konto.ToString();
  145. var make = (split[1] == "??") ? konto.Marke : split[1];
  146. var site = (split[2] == "??") ? konto.Betrieb : split[2];
  147. return split[0].PadLeft(4, '0') + "-" + make.PadLeft(2, '0') + site.PadLeft(2, '0') + split[3].PadLeft(2, '0') + split[4].PadLeft(2, '0') + split[5].PadLeft(2, '0');
  148. }
  149. public Encoding Encoding
  150. {
  151. get { return Encoding.Default; }
  152. }
  153. }
  154. }