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; }
}
}
}