using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Linq; using GCHR.Model.Konto; namespace GCHR.Model.Mandant { class Volkswagen : IMandant { /// /// V = Volkswagen, /// A = Audi, /// S = Seat, /// C = Skoda, /// E = Bentley, /// L = Lamborghini /// internal enum Hauptmarke { V, A, S, C, E, L }; /// /// 1 = Istdaten, /// 2 = Plandaten /// private const string Level = "1"; private const string Country = "DEU"; private const string Currency = "EUR"; private static readonly XNamespace Tns = "http://xmldefs.volkswagenag.com/Retail/AccountBalanceDTS/V1"; private static XNamespace _tns1 = "http://xmldefs.volkswagenag.com/DD/BasicTypes"; private static XNamespace _xsi = "http://www.w3.org/2001/XMLSchema-instance"; private XDocument _xmlDocument; private readonly XElement _accounts = new XElement(Tns + "Accounts"); private readonly Konfiguration _config = Konfiguration.GetInstance(); internal Hauptmarke MandantHauptmarke = Hauptmarke.V; public bool BalanceDatei { get { return true; } } public bool AccountsDatei { get { return false; } } public string BalanceHeader { get { _xmlDocument = new XDocument(); _xmlDocument.Add(new XElement(Tns + "ShowAccountBalance", new XAttribute(XNamespace.Xmlns + "tns", Tns), // new XAttribute(XNamespace.Xmlns + "tns1", tns1), // new XAttribute(XNamespace.Xmlns + "xsi", xsi), // new XAttribute(xsi + "schemaLocation", "http://xmldefs.volkswagenag.com/Retail/AccountBalanceDTS/V1 AccountBalanceDTS.xsd"), new XElement(Tns + "PartnerKey", new XElement(Tns + "Country", Country), new XElement(Tns + "Brand", MandantHauptmarke), new XElement(Tns + "PartnerNumber", _config.HaendlernummerBmCode) ), new XElement(Tns + "IsCumulative", "true"), new XElement(Tns + "AccountingDate", new XElement(Tns + "AccountingMonth", _config.AktuellePeriode.Monat), new XElement(Tns + "AccountingYear", _config.AktuellePeriode.Jahr) ), new XElement(Tns + "Currency", Currency), new XElement(Tns + "Level", Level), _accounts )); return ""; /* return String.Format("" + Environment.NewLine + "" + Environment.NewLine + " " + Environment.NewLine + " {0}" + Environment.NewLine + " {1}" + Environment.NewLine + " {2}" + Environment.NewLine + " " + Environment.NewLine + " true" + Environment.NewLine + " " + Environment.NewLine + " {3}" + Environment.NewLine + " {4}" + Environment.NewLine + " " + Environment.NewLine + " {5}" + Environment.NewLine + " {6}" + Environment.NewLine + " ", country, Hauptmarke.V, config.Händlernummer, Konto.aktuellePeriode.Monat, Konto.aktuellePeriode.Jahr, currency, level); */ } } public string BalanceFooter { get { return _xmlDocument.ToString(); } } public string BalanceBody(HaendlerKonto konto) { _accounts.Add(new XElement(Tns + "Account", new XElement(Tns + "ProfitCenter", "00"), new XElement(Tns + "AccountKey", KontonummerFormatieren(konto) // accountAttributes(kto) ), new XElement(Tns + "AccountValue", AccountValue(konto)) )); return String.Empty; } private XAttribute[] AccountAttributes(HaendlerKonto kto) { return (from attrib in AccountKeyDict(kto) select new XAttribute(attrib.Key, attrib.Value)).ToArray(); } private static Dictionary AccountKeyDict(HaendlerKonto konto) { // Konto: Account-Make-Site-Origin-SalesChannel-CostCarrier var split = konto.Kontonummer.Split(new[] { '-' }); if (split.Count() == 6) { var marke = (split[1].Contains("?")) ? konto.Marke : split[1]; marke = marke.PadLeft(6, '0'); var betrieb = (split[2] == "??") ? konto.Betrieb : split[2]; return new Dictionary { {"Brand", marke.Substring(0, 2)}, {"ModelCode", marke.Substring(2)}, {"Account", split[0].PadLeft(4, '0')}, {"CostCentre", split[3].PadLeft(2, '0')}, {"TradeChannel", split[4].PadLeft(2, '0')}, {"CostUnit", split[5].PadLeft(2, '0')}, {"Location", betrieb.PadLeft(2, '0')}, {"TaxCode", "000"} }; } var marke2 = konto.Marke.PadRight(6, '?'); var kontonummer = konto.Kontonummer.PadRight(10, '?'); return new Dictionary { {"Brand", marke2.Substring(0, 2)}, {"ModelCode", marke2.Substring(2)}, {"Account", kontonummer.Substring(0, 4)}, {"CostCentre", kontonummer.Substring(4, 2)}, {"TradeChannel", kontonummer.Substring(6, 2)}, {"CostUnit", kontonummer.Substring(8, 2)}, {"Location", konto.Betrieb}, {"TaxCode", "000"} }; } private static string AccountValue(HaendlerKonto kto) { /* if (kto.KontoTyp == KontoTypen.SuSa) { return String.Format("{0:-0.00;+0.00;+0.00}", kto.Summe).Replace(',', '.'); }*/ return String.Format("{0:+0.00;-0.00;+0.00}", kto.Summe).Replace(',', '.'); } public string AccountsHeader { get { return String.Empty; } } public string AccountsBody(HaendlerKonto kto) { return String.Empty; } public string AccountsFooter { get { return String.Empty; } } public string KontonummerFormatieren(HaendlerKonto konto) { return String.Join("", AccountKeyDict(konto).Values.ToArray()); } public Encoding Encoding { get { return Encoding.Default; } } } }