Browse Source

- Export-Zusammenfassung nach formatierter Kontonummer.
- Jetzt auch Unittests. :D
- Fehlerbehandlung in Periode.cs
- AktuellePeriode variabel in Konfiguration.cs

Robert Bedner 11 years ago
parent
commit
4ffad45ac7

+ 2 - 0
App.xaml.cs

@@ -22,6 +22,8 @@ namespace GCHR
                 MessageBox.Show(e.Args[0]);
                 Constants.ConfigDatei = "config\\" + e.Args[0];
             }
+
+
             StartupUri = new Uri("Main.xaml", UriKind.Relative);
             base.OnStartup(e);
         }

+ 1 - 1
Control/Tasks/Datenimport.cs

@@ -118,7 +118,7 @@ namespace GCHR.Control.Tasks
 
         private string Dateiname
         {
-            get { return String.Format(Config.Importdaten, Periode.AktuellePeriode, _kontoTyp); }
+            get { return String.Format(Config.Importdaten, Config.AktuellePeriode, _kontoTyp); }
         }
 
 

+ 3 - 3
Control/Tasks/Export.cs

@@ -20,7 +20,7 @@ namespace GCHR.Control.Tasks
         {
             _mandant = MandantRegistrieren();
             HaendlerKonto.Mandant = _mandant;
-            _debugExportFile = Periode.AktuellePeriode.ProtokollDatei;
+            _debugExportFile = Config.AktuellePeriode.ProtokollDatei;
         }
 
         private const String DebugHeader =
@@ -64,7 +64,7 @@ namespace GCHR.Control.Tasks
             
             if (_mandant.BalanceDatei)
             {
-                var balanceStream = DateiStream(Periode.AktuellePeriode.BalanceDatei);
+                var balanceStream = DateiStream(Config.AktuellePeriode.BalanceDatei);
                 ReportProgress(20);
 
                 balanceStream.WriteLine(_mandant.BalanceHeader);
@@ -85,7 +85,7 @@ namespace GCHR.Control.Tasks
 
             if (_mandant.AccountsDatei)
             {
-                var accountsStream = DateiStream(Periode.AktuellePeriode.AccountsDatei);
+                var accountsStream = DateiStream(Config.AktuellePeriode.AccountsDatei);
                 ReportProgress(60);
 
                 accountsStream.WriteLine(_mandant.AccountsHeader);

+ 1 - 1
Control/Tasks/Kontenrahmen.cs

@@ -111,7 +111,7 @@ namespace GCHR.Control.Tasks
 
             if (felder.Count() < 3) throw new FehlerhafteZeileException(zeile);
 
-            var kontoNummer = felder[0].PadLeft(Config.HerstellerKontenrahmenZiffern, '0');
+            var kontoNummer = felder[0].PadLeft(Config.HerstellerKontenrahmenStellen, '0');
             if (_kontenrahmen.ContainsKey(kontoNummer)) throw new KontoDoppeltException(kontoNummer);
 
             var kontoDesc = felder[1].Trim();

+ 3 - 2
Control/Tasks/TaskManager.cs

@@ -4,6 +4,7 @@ using System.ComponentModel;
 using System.IO;
 using System.Linq;
 using GCHR.Model;
+using GCHR.Model.Konto;
 using GCHR.View;
 
 namespace GCHR.Control.Tasks
@@ -16,7 +17,7 @@ namespace GCHR.Control.Tasks
 
         public void CreateTasks(RunWorkerCompletedEventHandler completed, Periode periode)
         {
-            Periode.AktuellePeriode = periode;
+            HaendlerKonto.AktuellePeriode = periode;                    
 
             Data.SetDepartmentCase(CreateDepartmentCaseInstance());
 
@@ -105,7 +106,7 @@ namespace GCHR.Control.Tasks
 
         private DepartmentCase CreateDepartmentCaseInstance()
         {
-            return new DepartmentCase(_config.Hauptmarke, _config.Hauptbetrieb, _config.BilanzMarke, _config.BilanzBetrieb, _config.HerstellerKontenrahmenZiffern);
+            return new DepartmentCase(_config.Hauptmarke, _config.Hauptbetrieb, _config.BilanzMarke, _config.BilanzBetrieb, _config.HerstellerKontenrahmenStellen);
         }
     }
 }

+ 6 - 6
Control/Tasks/Uebersetzung.cs

@@ -59,9 +59,9 @@ namespace GCHR.Control.Tasks
                 {
                     var felder = zeile.Split(';');
 
-                    var herstellerkonto = FehlendeZiffernErgaenzen(felder[0], Config.HerstellerKontenrahmenZiffern);
-                    var herstellerkonto2 = FehlendeZiffernErgaenzen(felder[1], Config.HerstellerKontenrahmenZiffern);
-                    var haendlerkonto = FehlendeZiffernErgaenzen(felder[2], Config.HaendlerKontenrahmenZiffern);
+                    var herstellerkonto = FehlendeZiffernErgaenzen(felder[0], Config.HerstellerKontenrahmenStellen);
+                    var herstellerkonto2 = FehlendeZiffernErgaenzen(felder[1], Config.HerstellerKontenrahmenStellen);
+                    var haendlerkonto = FehlendeZiffernErgaenzen(felder[2], Config.HaendlerKontenrahmenStellen);
 
                     if (!_uebersetzungstabelle.ContainsKey(haendlerkonto))
                     {
@@ -76,8 +76,8 @@ namespace GCHR.Control.Tasks
                 {
                     var felder = zeile.Split(';');
 
-                    var herstellerkonto = FehlendeZiffernErgaenzen(felder[0], Config.HerstellerKontenrahmenZiffern);
-                    var haendlerkonto = FehlendeZiffernErgaenzen(felder[2], Config.HaendlerKontenrahmenZiffern);
+                    var herstellerkonto = FehlendeZiffernErgaenzen(felder[0], Config.HerstellerKontenrahmenStellen);
+                    var haendlerkonto = FehlendeZiffernErgaenzen(felder[2], Config.HaendlerKontenrahmenStellen);
 
                     if (!_uebersetzungstabelle.ContainsKey(haendlerkonto))
                     {
@@ -91,7 +91,7 @@ namespace GCHR.Control.Tasks
                 }
                 else if (IstManuellesKonto(zeile))
                 {
-                    var kontonummer = zeile.Split(';').First().PadLeft(Config.HerstellerKontenrahmenZiffern, '0');
+                    var kontonummer = zeile.Split(';').First().PadLeft(Config.HerstellerKontenrahmenStellen, '0');
 
                     if (!ManuellesKonto(kontonummer) && !debugNichtImKontenrahmen.Contains(kontonummer))
                     {

+ 3 - 3
Control/Tasks/Verarbeitung.cs

@@ -71,13 +71,13 @@ namespace GCHR.Control.Tasks
                 return;
             }
 
-            if (!_zielKonten.ContainsKey(ziel.ToString()))
+            if (!_zielKonten.ContainsKey(ziel.KontonummerFormatiert))
             {
-                _zielKonten.Add(ziel.ToString(), ziel);
+                _zielKonten.Add(ziel.KontonummerFormatiert, ziel);
             }
             else
             {
-                ziel = _zielKonten[ziel.ToString()];
+                ziel = _zielKonten[ziel.KontonummerFormatiert];
             }
             ziel.KontoZuordnen(aktKonto);
         }

+ 1 - 1
Mandantenschnittstelle/Citroen.cs

@@ -29,7 +29,7 @@ namespace GCHR.Mandantenschnittstelle
         {
             get
             {
-                return String.Format("01{0}{1}{2}{3}", _config.Haendlernummer.PadLeft(7, '0'), _config.Eurodatanummer, Periode.AktuellePeriode.Monat, Periode.AktuellePeriode.JahrZweistellig);
+                return String.Format("01{0}{1}{2}{3}", _config.Haendlernummer.PadLeft(7, '0'), _config.Eurodatanummer, _config.AktuellePeriode.Monat, _config.AktuellePeriode.JahrZweistellig);
             }
         }
 

+ 2 - 2
Mandantenschnittstelle/Fiat.cs

@@ -28,7 +28,7 @@ namespace GCHR.Mandantenschnittstelle
         {
             get
             {
-                return String.Format("AA{0} {1}{2} ,20EUR", _config.Haendlernummer, Periode.AktuellePeriode.Monat, Periode.AktuellePeriode.JahrZweistellig);
+                return String.Format("AA{0} {1}{2} ,20EUR", _config.Haendlernummer, _config.AktuellePeriode.Monat, _config.AktuellePeriode.JahrZweistellig);
             }
         }
 
@@ -36,7 +36,7 @@ namespace GCHR.Mandantenschnittstelle
         {
             get
             {
-                return String.Format("XX{0} {1}{2}", _config.Haendlernummer, Periode.AktuellePeriode.Monat, Periode.AktuellePeriode.JahrZweistellig);
+                return String.Format("XX{0} {1}{2}", _config.Haendlernummer, _config.AktuellePeriode.Monat, _config.AktuellePeriode.JahrZweistellig);
             }
         }
 

+ 2 - 2
Mandantenschnittstelle/Ford.cs

@@ -41,7 +41,7 @@ namespace GCHR.Mandantenschnittstelle
         {
             get
             {
-                return String.Format("AA{0}M{1}{2} .20EUR", Config.Haendlernummer, Periode.AktuellePeriode.Monat, Periode.AktuellePeriode.JahrZweistellig);
+                return String.Format("AA{0}M{1}{2} .20EUR", Config.Haendlernummer, Config.AktuellePeriode.Monat, Config.AktuellePeriode.JahrZweistellig);
             }
         }
 
@@ -49,7 +49,7 @@ namespace GCHR.Mandantenschnittstelle
         {
             get
             {
-                return String.Format("XX{0}M{1}{2}", Config.Haendlernummer, Periode.AktuellePeriode.Monat, Periode.AktuellePeriode.JahrZweistellig);
+                return String.Format("XX{0}M{1}{2}", Config.Haendlernummer, Config.AktuellePeriode.Monat, Config.AktuellePeriode.JahrZweistellig);
             }
 
         }

+ 4 - 4
Mandantenschnittstelle/Honda.cs

@@ -31,10 +31,10 @@ namespace GCHR.Mandantenschnittstelle
                 return
                     string.Format(
                         "{1};Dealernumber{0};Honda Germany{0}{2};Evaluation;{3}{0}{4};Fiscal-Year;{5}{0};Timestamp;{6}",
-                        Environment.NewLine, Config.Haendlernummer, Periode.AktuellePeriode.Jahr,
-                        Periode.AktuellePeriode.Monat,
-                        Periode.AktuellePeriode.Jahresbeginn.Jahr,
-                        Periode.AktuellePeriode.Jahresbeginn.Monat,
+                        Environment.NewLine, Config.Haendlernummer, Config.AktuellePeriode.Jahr,
+                        Config.AktuellePeriode.Monat,
+                        Config.AktuellePeriode.Jahresbeginn.Jahr,
+                        Config.AktuellePeriode.Jahresbeginn.Monat,
                         DateTime.Now.ToString("MMddyyyy;HHmmss"));
             }
         }

+ 2 - 2
Mandantenschnittstelle/Opel.cs

@@ -28,7 +28,7 @@ namespace GCHR.Mandantenschnittstelle
         {
             get
             {
-                return String.Format("AA{0}M{1}{2} .20EUR", Config.Haendlernummer, Periode.AktuellePeriode.Monat, Periode.AktuellePeriode.JahrZweistellig);
+                return String.Format("AA{0}M{1}{2} .20EUR", Config.Haendlernummer, Config.AktuellePeriode.Monat, Config.AktuellePeriode.JahrZweistellig);
             }
         }
 
@@ -36,7 +36,7 @@ namespace GCHR.Mandantenschnittstelle
         {
             get
             {
-                return String.Format("XX{0}M{1}{2}", Config.Haendlernummer, Periode.AktuellePeriode.Monat, Periode.AktuellePeriode.JahrZweistellig);
+                return String.Format("XX{0}M{1}{2}", Config.Haendlernummer, Config.AktuellePeriode.Monat, Config.AktuellePeriode.JahrZweistellig);
             }
 
         }

+ 1 - 1
Mandantenschnittstelle/Peugeot.cs

@@ -29,7 +29,7 @@ namespace GCHR.Mandantenschnittstelle
         {
             get
             {
-                return String.Format("01{0}{1}{2}{3}", _config.Haendlernummer.PadLeft(7, '0'), _config.Eurodatanummer, Periode.AktuellePeriode.Monat, Periode.AktuellePeriode.JahrZweistellig);
+                return String.Format("01{0}{1}{2}{3}", _config.Haendlernummer.PadLeft(7, '0'), _config.Eurodatanummer, _config.AktuellePeriode.Monat, _config.AktuellePeriode.JahrZweistellig);
             }
         }
 

+ 2 - 2
Mandantenschnittstelle/Volkswagen.cs

@@ -68,8 +68,8 @@ namespace GCHR.Mandantenschnittstelle
                                     ),
                                     new XElement(Tns + "IsCumulative", "true"),
                                     new XElement(Tns + "AccountingDate",
-                                        new XElement(Tns + "AccountingMonth", Periode.AktuellePeriode.Monat),
-                                        new XElement(Tns + "AccountingYear", Periode.AktuellePeriode.Jahr)
+                                        new XElement(Tns + "AccountingMonth", _config.AktuellePeriode.Monat),
+                                        new XElement(Tns + "AccountingYear", _config.AktuellePeriode.Jahr)
                                     ),
                                     new XElement(Tns + "Currency", Currency),
                                     new XElement(Tns + "Level", Level),

+ 2 - 2
Mandantenschnittstelle/Volvo.cs

@@ -28,7 +28,7 @@ namespace GCHR.Mandantenschnittstelle
         {
             get
             {
-                return String.Format("AA{0}F{1}{2} .20EUR", Config.Haendlernummer, Periode.AktuellePeriode.Monat, Periode.AktuellePeriode.JahrZweistellig);
+                return String.Format("AA{0}F{1}{2} .20EUR", Config.Haendlernummer, Config.AktuellePeriode.Monat, Config.AktuellePeriode.JahrZweistellig);
             }
         }
 
@@ -36,7 +36,7 @@ namespace GCHR.Mandantenschnittstelle
         {
             get
             {
-                return String.Format("XX{0}F{1}{2}", Config.Haendlernummer, Periode.AktuellePeriode.Monat, Periode.AktuellePeriode.JahrZweistellig);
+                return String.Format("XX{0}F{1}{2}", Config.Haendlernummer, Config.AktuellePeriode.Monat, Config.AktuellePeriode.JahrZweistellig);
             }
 
         }

+ 0 - 1
Model/CTripleDES.cs

@@ -52,7 +52,6 @@ namespace GCHR.Model
             var input = Convert.FromBase64String(text);
             var output = Transform(input,
                             _des.CreateDecryptor(_key, _iv));
-            var des = _des.CreateDecryptor(_key, _iv);
             return _utf8.GetString(output);
         }
 

+ 11 - 11
Model/GchrConfig.cs

@@ -53,23 +53,23 @@ namespace GCHR.Model
     {
         public string Haendler = "Autohaus";
 
-        public Mandanten Mandantenname;
-        public string Eurodatanummer;
+        public Mandanten Mandantenname = Mandanten.Opel;
+        public string Eurodatanummer = "000000";
 
         [XmlElement("Händlernummer")]
-        public string Haendlernummer;
+        public string Haendlernummer = "000000";
 
         [XmlElement("Herstellerkontenrahmen", DataType = "int")]
-        public int Herstellerkontenrahmen;
+        public int Herstellerkontenrahmen = 5;
 
         [XmlElement("Händlerkontenrahmen", DataType = "int")]
-        public int Haendlerkontenrahmen;
+        public int Haendlerkontenrahmen = 5;
 
         public string Marke = "Department,3,1";
         public string Betrieb = "Department,1,2";
 
-        public string Hauptmarke;
-        public string Hauptbetrieb;
+        public string Hauptmarke = "1";
+        public string Hauptbetrieb = "01";
 
         public string BilanzDepartment
         {
@@ -94,15 +94,15 @@ namespace GCHR.Model
         }
 
         [XmlElement("ODBC")]
-        public string Odbc;
+        public string Odbc = "O21";
 
         [XmlElement("U")]
-        public string OdbcUsername;
+        public string OdbcUsername = Constants.Encrypt("sa");
 
         [XmlElement("P")]
-        public string OdbcPassword;
+        public string OdbcPassword = Constants.Encrypt("");
 
-        public AbfragenXml Abfragen;
+        public AbfragenXml Abfragen = new AbfragenXml();
         
         [XmlArray("DepartmentÜbersetzung")]
         [XmlArrayItem("Über")]

+ 15 - 28
Model/Konfiguration.cs

@@ -35,14 +35,19 @@ namespace GCHR.Model
         private readonly Konten _konten;
         private readonly string _configDatei;
 
+        public Periode AktuellePeriode { get; set; }
+
+
         public Konfiguration(string cfgDatei)
         {
+            AktuellePeriode = new Periode("200001");
             _configDatei = cfgDatei;
             _gchrConfig = (GchrConfig)new GchrConfigIO(_configDatei).Laden();
             _konten = (Konten) new KontenIO(_gchrConfig.Dateipfade.ManuelleKonten).Laden();
             KontenXmlUmsortieren();
             Periode.Dateipfade = _gchrConfig.Dateipfade;
             Periode.ErsterMonatImGeschaeftsjahr = _gchrConfig.Einstellungen.Geschaeftsjahr;
+            AktuellePeriode = new Periode("200001");
             Logger.ConfigDatei = cfgDatei;
             if (!Logger.DateiExistiert)
             {
@@ -144,7 +149,7 @@ namespace GCHR.Model
                 return _gchrConfig.Einstellungen.Geschaeftsjahr;
             }
         }
-        public int HerstellerKontenrahmenZiffern
+        public int HerstellerKontenrahmenStellen
         {
             get
             {
@@ -152,7 +157,7 @@ namespace GCHR.Model
 
             }
         }
-        public int HaendlerKontenrahmenZiffern
+        public int HaendlerKontenrahmenStellen
         {
             get
             {
@@ -163,14 +168,14 @@ namespace GCHR.Model
         {
             get
             {
-                return QueryAnpassen(Constants.Decrypt(_gchrConfig.Einstellungen.Abfragen.SuSaKontenQuery));
+                return QueryAnpassen(Constants.Decrypt(_gchrConfig.Einstellungen.Abfragen.SuSaKontenQuery), AktuellePeriode);
             }
         }
         public string StatKontenQuery
         {
             get
             {
-                return QueryAnpassen(Constants.Decrypt(_gchrConfig.Einstellungen.Abfragen.StatKontenQuery));
+                return QueryAnpassen(Constants.Decrypt(_gchrConfig.Einstellungen.Abfragen.StatKontenQuery), AktuellePeriode);
             }
         }
 
@@ -190,7 +195,7 @@ namespace GCHR.Model
             }
         }
 
-        private String DepartmentFilter
+        private static string DepartmentFilter
         {
             get
             {
@@ -198,24 +203,6 @@ namespace GCHR.Model
             }
         }
 
-        public string JuengstenVormonatBestimmen(string aktPeriode)
-        {
-            return Array.Find(VorhandenePerioden(), eintrag => String.CompareOrdinal(eintrag, aktPeriode) < 0) ?? aktPeriode;
-        }
-
-        private string[] VorhandenePerioden()
-        {
-            var vorhandenePerioden = (from HaendlerKonto konto in _konten.Kontenliste
-                                      select konto.ZugeordneteSaldi
-                                      into perioden
-                                      from Saldo p in perioden
-                                      select p.Periode).Distinct().ToArray();
-
-            Array.Sort(vorhandenePerioden);
-            Array.Reverse(vorhandenePerioden);
-            return vorhandenePerioden;
-        }
-
         public string OdbcConnectionString
         {
             get
@@ -276,20 +263,20 @@ namespace GCHR.Model
                        : "";
         }
 
-        private string QueryAnpassen(string queryStr)
+        private string QueryAnpassen(string queryStr, Periode aktuellePeriode)
         {
             queryStr = Regex.Replace(queryStr, @"\<datenbank\>", "");
 
-            queryStr = Regex.Replace(queryStr, @"\<period[e]?\>", Periode.AktuellePeriode.ToString());
-            queryStr = Regex.Replace(queryStr, @"\<jahresbeginn\>", Periode.AktuellePeriode.Jahresbeginn.ToString());
-            queryStr = Regex.Replace(queryStr, @"\<bilanzbeginn\>", Periode.AktuellePeriode.Bilanzbeginn.ToString());
+            queryStr = Regex.Replace(queryStr, @"\<period[e]?\>", aktuellePeriode.ToString());
+            queryStr = Regex.Replace(queryStr, @"\<jahresbeginn\>", aktuellePeriode.Jahresbeginn.ToString());
+            queryStr = Regex.Replace(queryStr, @"\<bilanzbeginn\>", aktuellePeriode.Bilanzbeginn.ToString());
 
             return Regex.Replace(queryStr, @"\<department_filter\>", DepartmentFilter);
         }
 
         internal string HaendlerKontonummerFormatieren(string kontonummer)
         {
-            return kontonummer.PadLeft(HaendlerKontenrahmenZiffern, '0');
+            return kontonummer.PadLeft(HaendlerKontenrahmenStellen, '0');
         }
 
         public HaendlerKonto ManuellesKontoSuchen(string kontonummer)

+ 24 - 13
Model/Konto/HaendlerKonto.cs

@@ -13,6 +13,8 @@ namespace GCHR.Model.Konto
         private static int _betriebLength = 2;
         private static IMandant _mandant = new Test();
 
+        public static Periode AktuellePeriode = new Periode("200001");
+
 
         public HaendlerKonto()
             : this(KontoTypen.ManStat)
@@ -51,6 +53,12 @@ namespace GCHR.Model.Konto
         [XmlAttribute("Konto_Nr")]
         public string Kontonummer { get; set; }
 
+        [XmlIgnore]
+        public string KontonummerFormatiert
+        {
+            get { return Mandant.KontonummerFormatieren(this); }
+        }
+
         [XmlAttribute("Konto_Bezeichnung")]
         public string Bezeichnung { get; set; }
 
@@ -81,7 +89,7 @@ namespace GCHR.Model.Konto
             get
             {
                 return (KontoTyp == KontoTypen.ManStat)
-                           ? SaldoVon(Model.Periode.AktuellePeriode.ToString())
+                           ? SaldoVon(AktuellePeriode.ToString())
                            : Math.Round(
                                Faktor*
                                (_soll + ZugeordneteKonten.Sum(kto => kto.Soll) +
@@ -138,6 +146,9 @@ namespace GCHR.Model.Konto
 
         public override string ToString()
         {
+            if (KontoTyp == KontoTypen.ManStat)
+                return Marke + Betrieb + Kontonummer;
+
             return Marke + "-" + Betrieb + "-" + Kontonummer;
         }
 
@@ -169,7 +180,7 @@ namespace GCHR.Model.Konto
             {
                 if (ZugeordneteKonten.Count > 0)
                 {
-                    var csv = "'" + Mandant.KontonummerFormatieren(this) + ";" +
+                    var csv = "'" + KontonummerFormatiert + ";" +
                               Bezeichnung + ";";
 
                     return ZugeordneteKonten.FindAll(kto => kto.Summe != 0).Select(kto => csv + kto.KontoCsv[0]).ToList();
@@ -179,7 +190,7 @@ namespace GCHR.Model.Konto
                 {
                     return new List<string>
                     {
-                        string.Format("'{0};{8};;;{1}{2};'{3};'{4};{5:0.2};{6:0.00};{7:0.00}", Mandant.KontonummerFormatieren(this),
+                        string.Format("'{0};{8};;;{1}{2};'{3};'{4};{5:0.2};{6:0.00};{7:0.00}", KontonummerFormatiert,
                                       KontoTypKuerzel(KontoTyp), Minus, Marke, Betrieb, Soll, Haben, Summe, Bezeichnung)
                     };
                 }
@@ -235,50 +246,50 @@ namespace GCHR.Model.Konto
         {
             get 
             {
-                var saldo = SaldoSuchen(Model.Periode.AktuellePeriode.ToString());
+                var saldo = SaldoSuchen(AktuellePeriode.ToString());
                 if (saldo != null)
                     return saldo.Soll.ToString(Constants.Zahlenformat);
-                SaldoZuordnen(Model.Periode.AktuellePeriode.ToString(), Decimal.Parse(Vormonat1, Constants.Zahlenformat), 0m);
+                SaldoZuordnen(AktuellePeriode.ToString(), Decimal.Parse(Vormonat1, Constants.Zahlenformat), 0m);
                 return Vormonat1;
             }
             set
             {
-                var saldo = SaldoSuchen(Model.Periode.AktuellePeriode.ToString());
+                var saldo = SaldoSuchen(AktuellePeriode.ToString());
                 if (saldo != null)
                     saldo.Soll = Decimal.Parse(value, Constants.Zahlenformat);
                 else
-                    SaldoZuordnen(Model.Periode.AktuellePeriode.ToString(), Decimal.Parse(value, Constants.Zahlenformat), 0m);
+                    SaldoZuordnen(AktuellePeriode.ToString(), Decimal.Parse(value, Constants.Zahlenformat), 0m);
             }
         }
 
         [XmlIgnore]
         public string Vormonat1
         {
-            get { return SaldoVon(Model.Periode.AktuellePeriode.Vormonat(1)).ToString(Constants.Zahlenformat); }
+            get { return SaldoVon(AktuellePeriode.Vormonat(1)).ToString(Constants.Zahlenformat); }
         }
 
         [XmlIgnore]
         public string Vormonat2
         {
-            get { return SaldoVon(Model.Periode.AktuellePeriode.Vormonat(2)).ToString(Constants.Zahlenformat); }
+            get { return SaldoVon(AktuellePeriode.Vormonat(2)).ToString(Constants.Zahlenformat); }
         }
 
         [XmlIgnore]
         public string Vormonat3
         {
-            get { return SaldoVon(Model.Periode.AktuellePeriode.Vormonat(3)).ToString(Constants.Zahlenformat); }
+            get { return SaldoVon(AktuellePeriode.Vormonat(3)).ToString(Constants.Zahlenformat); }
         }
 
         [XmlIgnore]
         public string Vormonat4
         {
-            get { return SaldoVon(Model.Periode.AktuellePeriode.Vormonat(4)).ToString(Constants.Zahlenformat); }
+            get { return SaldoVon(AktuellePeriode.Vormonat(4)).ToString(Constants.Zahlenformat); }
         }
 
         [XmlIgnore]
         public string Vormonat5
         {
-            get { return SaldoVon(Model.Periode.AktuellePeriode.Vormonat(5)).ToString(Constants.Zahlenformat); }
+            get { return SaldoVon(AktuellePeriode.Vormonat(5)).ToString(Constants.Zahlenformat); }
         }
 
         private decimal Monatssumme (string periode)
@@ -290,7 +301,7 @@ namespace GCHR.Model.Konto
             return (ZugeordneteKonten.Count > 0) ? ZugeordneteKonten.Sum(k => k.Monatssumme(periode)) : 0m;
         }
 
-        public decimal SummeAktuellePeriode { get { return Monatssumme(Model.Periode.AktuellePeriode.ToString()); } }
+        public decimal SummeAktuellePeriode { get { return Monatssumme(AktuellePeriode.ToString()); } }
 
         public string Kontoart { get; set; }
 

+ 22 - 2
Model/Periode.cs

@@ -1,12 +1,16 @@
 using System;
 using System.Globalization;
+using System.Text.RegularExpressions;
 
 namespace GCHR.Model
 {
-    public class Periode
+    public class UngueltigePeriodeException : Exception
     {
-        internal static Periode AktuellePeriode = new Periode("200001");
+        
+    }
 
+    public class Periode
+    {
         public static string ErsterMonatImGeschaeftsjahr { get; set; }
         public static DateipfadeXml Dateipfade { get; set; }
 
@@ -24,9 +28,23 @@ namespace GCHR.Model
 
         public Periode(string periode, bool keinJahresabschluss)
         {
+            if (string.IsNullOrEmpty(ErsterMonatImGeschaeftsjahr))
+            {
+                ErsterMonatImGeschaeftsjahr = "01";
+            }
+            if (Dateipfade == null)
+            {
+                Dateipfade = new DateipfadeXml();
+            }
+
+            if (periode.Length != 6 || !Regex.IsMatch(periode, @"2[012][0-9][0-9][01][0-9]")) throw new UngueltigePeriodeException();
+            
             Jahr = periode.Substring(0, 4);
             Monat = periode.Substring(4, 2);
 
+            var monat = Int32.Parse(Monat);
+            if (monat > 12 || monat < 1) throw new UngueltigePeriodeException();
+
             _keinJahresabschluss = keinJahresabschluss;
         }
 
@@ -116,6 +134,8 @@ namespace GCHR.Model
             }
         }
 
+
+
         public Ampelstatus Status
         {
             get { return Ampelstatus.Gelb; }

+ 0 - 76
Tests.cs

@@ -1,76 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using NUnit.Framework;
-using System.Diagnostics;
-using System.IO;
-using System.Xml.Serialization;
-using System.Threading;
-
-namespace HRep_WPF
-{
-    [TestFixture]
-    public class KonfigurationTest
-    {
-        private Konfiguration config;
-
-        public KonfigurationTest()
-        {
-            String configFile = "test2.xml";
-
-            GCExportConfig gceConfig = gceConfigTestwerteGenerieren();
-            gceConfigTestwerteSpeichern(gceConfig, configFile);
-
-            config = new Konfiguration(new ThreadXData(), configFile, "201001");
-        }
-
-        private void gceConfigTestwerteSpeichern(GCExportConfig gceConfig, String configFile)
-        {
-            XmlSerializer serializer = new XmlSerializer(typeof(GCExportConfig));
-            using (TextWriter stream = new StreamWriter(configFile))
-            {
-                serializer.Serialize(stream, gceConfig);
-            }
-        }
-
-        private GCExportConfig gceConfigTestwerteGenerieren()
-        {
-            GCExportConfig gceConfig = new GCExportConfig();
-
-            gceConfig.Einstellungen.DepartmentUebersetzung.Add(new UebersetzungXml() { von = "1", nach = "2" });
-            gceConfig.Einstellungen.DepartmentUebersetzung.Add(new UebersetzungXml() { von = "22", nach = "33" });
-            gceConfig.Einstellungen.Eurodatanummer = "12345";
-            KontoXml kto = new KontoXml() { Kontonummer = "81000" };
-            kto.Periode.Add(new PeriodeXml() { Name = "201001", Debit = 0.01 });
-            gceConfig.Konten.Add(kto);
-
-            return gceConfig;
-        }
-
-        [Test]
-        public void AktuellePeriode()
-        {
-            Assert.AreEqual("201001", config.aktuellePeriode.ToString());
-            Assert.AreEqual("01", config.aktuellePeriode.Monat);
-            Assert.AreEqual("2010", config.aktuellePeriode.Jahr);
-            Assert.AreEqual("10", config.aktuellePeriode.JahrZweistellig);
-        }
-
-        [Test]
-        public void Variablen()
-        {
-            Assert.AreEqual("00012345", config.Eurodatanummer);
-            Assert.AreEqual("01", config.Geschaeftsjahr);
-        }
-
-        [Test]
-        public void DepartmentUebersetzung()
-        {
-            Assert.AreEqual("312", config.DepartmentAnpassen("123"));
-            Assert.AreEqual("211", config.DepartmentAnpassen("111"));
-            Assert.AreEqual("033", config.DepartmentAnpassen("220"));
-            Assert.AreEqual("233", config.DepartmentAnpassen("221"));
-        }
-    }
-}

+ 45 - 0
Tests/KonfigurationTest.cs

@@ -0,0 +1,45 @@
+using System;
+using System.IO;
+using System.Xml.Serialization;
+using GCHR.Control;
+using GCHR.Mandantenschnittstelle;
+using GCHR.Model;
+using NUnit.Framework;
+
+namespace GCHR.Tests
+{
+    [TestFixture]
+    public class KonfigurationTest
+    {
+        private static string PfadUndDatei(string dateiOhneEndung)
+        {
+            return Directory.GetCurrentDirectory() + "\\config\\" + dateiOhneEndung + ".xml";
+        }
+
+        private static Konfiguration KonfigurationLaden(string test)
+        {
+            return new Konfiguration(PfadUndDatei(test));
+        }
+
+        [Test]
+        public void DateiMitStandardwertenAnlegen()
+        {
+            var datei = PfadUndDatei("standard");
+            File.Delete(datei);
+            var config = new Konfiguration(datei);
+            
+            Assert.IsTrue(File.Exists(datei));
+            Assert.AreEqual("Autohaus", config.Haendler);
+            Assert.AreEqual(Mandanten.Opel, config.Mandantenname);
+            Assert.AreEqual(5, config.HerstellerKontenrahmenStellen);
+            Assert.AreEqual(5, config.HaendlerKontenrahmenStellen);
+            Assert.AreEqual("0", config.BilanzMarke);
+            Assert.AreEqual("07", config.BilanzBetrieb);
+            Assert.IsFalse(config.KontoOhneUebersetzungUebernehmen);
+            Assert.IsTrue(config.StatKontenImportieren);
+            Assert.AreEqual("01", config.Geschaeftsjahr);
+
+            Assert.AreEqual("DSN=O21;UID=sa;PWD=;", config.OdbcConnectionString);
+        }
+    }
+}

+ 82 - 0
Tests/PeriodeTest.cs

@@ -0,0 +1,82 @@
+using GCHR.Model;
+using NUnit.Framework;
+
+namespace GCHR.Tests
+{
+    [TestFixture]
+    class PeriodeTest
+    {
+        [Test]
+        public void StandardwerteFuerBeliebigePeriode()
+        {
+            var periode = new Periode("201309");
+
+            Assert.AreEqual("01", Periode.ErsterMonatImGeschaeftsjahr);
+            Assert.IsNotNull(Periode.Dateipfade);
+
+            Assert.AreEqual("2013", periode.Jahr);
+            Assert.AreEqual("13", periode.JahrZweistellig);
+            Assert.AreEqual("09", periode.Monat);
+
+            Assert.AreEqual("201309", periode.ToString());
+            Assert.AreEqual("09/2013", periode.Klartext);
+
+            Assert.AreEqual("export\\2013\\export_2013-09_balance.txt", periode.BalanceDatei);
+            Assert.AreEqual("export\\2013\\export_2013-09_accounts.txt", periode.AccountsDatei);
+            Assert.AreEqual("export\\2013\\export_2013-09_info.log", periode.LogDatei);
+            Assert.AreEqual("export\\2013\\export_2013-09_protokoll.csv", periode.ProtokollDatei);
+        }
+
+        [Test]
+        public void VorgaengerUndNachfolger()
+        {
+            var periode = new Periode("201202");
+
+            Assert.AreEqual("201203", periode.Nachfolger.ToString());
+            Assert.AreEqual("201204", periode.Nachfolger.Nachfolger.ToString());
+
+            Assert.AreEqual("201201", periode.Vorgaenger.ToString());
+            Assert.AreEqual("201112", periode.Vorgaenger.Vorgaenger.ToString());
+        }
+
+        [Test]
+        public void Vormonat()
+        {
+            var periode = new Periode("200912");
+
+            Assert.AreEqual("200912", periode.Vormonat(0));
+            Assert.AreEqual("200911", periode.Vormonat(1));
+            Assert.AreEqual("200910", periode.Vormonat(2));
+
+            Assert.AreEqual("201001", periode.Vormonat(-1));
+        }
+
+        [Test]
+        public void JahresbeginnUndBilanzbeginn()
+        {
+            var periode = new Periode("201307");
+            Assert.AreEqual("201301", periode.Jahresbeginn.ToString());
+            Assert.AreEqual("201301", periode.Bilanzbeginn.ToString());
+
+            var periodeOhneJahresabschluss = new Periode("201303", true);
+            Assert.AreEqual("201301", periodeOhneJahresabschluss.Jahresbeginn.ToString());
+            Assert.AreEqual("201201", periodeOhneJahresabschluss.Bilanzbeginn.ToString());
+        }
+
+        [Test]
+        public void UngueltigePeriode()
+        {
+            Assert.Throws<UngueltigePeriodeException> (() => new Periode("1234567"), "zu lang");
+            Assert.Throws<UngueltigePeriodeException>(() => new Periode("1301"), "zu kurz");
+
+            Assert.Throws<UngueltigePeriodeException>(() => new Periode("a1b§C3"), "nur Zahlen erlaubt");
+
+            Assert.Throws<UngueltigePeriodeException>(() => new Periode("199901"), "Jahr ungültig");
+            Assert.Throws<UngueltigePeriodeException>(() => new Periode("235901"), "Jahr ungültig");
+
+            Assert.Throws<UngueltigePeriodeException>(() => new Periode("201231"), "Monat ungültig");
+            Assert.Throws<UngueltigePeriodeException>(() => new Periode("201200"), "Monat ungültig");
+            Assert.Throws<UngueltigePeriodeException>(() => new Periode("201213"), "Monat ungültig");
+        }
+    }
+}

+ 7 - 7
View/ManuelleKontenBearbeiten.xaml.cs

@@ -12,11 +12,11 @@ namespace GCHR.View
     {
         delegate void DelAsyncWindowAction();
 
-        public string Vormonat1 { get { return new Periode(Periode.AktuellePeriode.Vormonat(1)).Klartext; } }
-        public string Vormonat2 { get { return new Periode(Periode.AktuellePeriode.Vormonat(2)).Klartext; } }
-        public string Vormonat3 { get { return new Periode(Periode.AktuellePeriode.Vormonat(3)).Klartext; } }
-        public string Vormonat4 { get { return new Periode(Periode.AktuellePeriode.Vormonat(4)).Klartext; } }
-        public string Vormonat5 { get { return new Periode(Periode.AktuellePeriode.Vormonat(5)).Klartext; } }
+        public string Vormonat1 { get { return new Periode(HaendlerKonto.AktuellePeriode.Vormonat(1)).Klartext; } }
+        public string Vormonat2 { get { return new Periode(HaendlerKonto.AktuellePeriode.Vormonat(2)).Klartext; } }
+        public string Vormonat3 { get { return new Periode(HaendlerKonto.AktuellePeriode.Vormonat(3)).Klartext; } }
+        public string Vormonat4 { get { return new Periode(HaendlerKonto.AktuellePeriode.Vormonat(4)).Klartext; } }
+        public string Vormonat5 { get { return new Periode(HaendlerKonto.AktuellePeriode.Vormonat(5)).Klartext; } }
 
         public List<HaendlerKonto> ManuelleKonten;
 
@@ -79,8 +79,8 @@ namespace GCHR.View
                                                    if (printDialog.ShowDialog() != true) return;
                                                    var paginator =
                                                        new RandomTabularPaginator(
-                                                           Periode.AktuellePeriode.ToString(),
-                                                           Periode.AktuellePeriode.ToString(), konten,
+                                                           HaendlerKonto.AktuellePeriode.ToString(),
+                                                           HaendlerKonto.AktuellePeriode.ToString(), konten,
                                                            new Size(printDialog.PrintableAreaWidth,
                                                                     printDialog.PrintableAreaHeight));