Przeglądaj źródła

- Entwurf für Historie
- dynamische Kopfzeile
- Monatsauswahl letzter Monat oder letzter gesendeter Monat +1

Robert Bedner 12 lat temu
rodzic
commit
6a87707938

+ 36 - 47
App.xaml.cs

@@ -1,10 +1,8 @@
 using System;
-using System.ComponentModel;
 using System.IO;
 using System.Windows;
 using System.Windows.Threading;
 using GCHR.Control;
-using GCHR.Control.Tasks;
 using GCHR.Model;
 using Microsoft.Win32;
 
@@ -12,47 +10,52 @@ namespace GCHR
 {
     public partial class App
     {
-        private TaskManager _tasks;
+        // private TaskManager _tasks;
 
         protected override void OnStartup(StartupEventArgs e)
         {
             FrameworkVersionPruefen();
             KonfigdateiUmbenennen();
-            
-            if (e.Args.Length == 0)
+
+            if (e.Args.Length > 0 && e.Args[0].Contains(".xml"))
             {
-                StartupUri = new Uri("Main.xaml", UriKind.Relative);
-                base.OnStartup(e);
+                MessageBox.Show(e.Args[0]);
+                Constants.ConfigDatei = "config\\" + e.Args[0];
             }
-            else
-            {
-                if (e.Args[0].Length == 6)
-                {
-                    ConsoleStart(e.Args[0]);
-                }
-                else
-                {
-                    Console.WriteLine(@"Aufruf:\n\tGCHR.exe JJJJMM");
-                    Shutdown();
-                }
+            StartupUri = new Uri("Main.xaml", UriKind.Relative);
+            base.OnStartup(e);
+        }
 
-            }
+        /*
+        private void ConsoleStart(String periode)
+        {
+            Logger.Info("GCHR - Start im Konsolenmodus");
+            _tasks = new TaskManager();
+            _tasks.CreateTasks(Ablaufsteuerung, new Periode(periode));
+            _tasks.TryRunNextWorker();
+            _tasks.Data.AufManuelleKontenWarten.Set();
         }
 
-        private void KonfigdateiUmbenennen()
+        private void Ablaufsteuerung(object s, RunWorkerCompletedEventArgs e)
         {
-            if (File.Exists(Constants.ConfigDatei)) return;
-            if (File.Exists(Constants.ConfigDateiAlt))
+            var aktuellerWorker = (BackgroundWorker)s;
+            var aktuelleAufgabe = _tasks.GetAufgabeByWorker(aktuellerWorker);
+
+            if (e.Error == null)
             {
-                File.Move(Constants.ConfigDateiAlt, Constants.ConfigDatei);
+                Console.WriteLine(aktuelleAufgabe + @"... OK.");
             }
             else
             {
-                MessageBox.Show(string.Format("Konfigurationsdatei '{0}' nicht vorhanden!", Constants.ConfigDatei));
-                Logger.Info(string.Format("Konfigurationsdatei '{0}' nicht vorhanden!", Constants.ConfigDatei));
+                Console.WriteLine(aktuelleAufgabe + @"... Abbruch." + Environment.NewLine + e.Error.Message);
+                Shutdown();
+            }
+            if (aktuelleAufgabe.ID == 9)
+            {
                 Shutdown();
             }
         }
+        */
 
         private static void FrameworkVersionPruefen()
         {
@@ -75,38 +78,24 @@ namespace GCHR
             }
         }
 
-        private void ConsoleStart(String periode)
+        private void ApplicationDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
         {
-            Logger.Info("GCHR - Start im Konsolenmodus");
-            _tasks = new TaskManager();
-            _tasks.CreateTasks(Ablaufsteuerung, new Periode(periode));
-            _tasks.TryRunNextWorker();
-            _tasks.Data.AufManuelleKontenWarten.Set();
+            Logger.Info(e.Exception.ToString());
         }
 
-        private void Ablaufsteuerung(object s, RunWorkerCompletedEventArgs e)
+        private void KonfigdateiUmbenennen()
         {
-            var aktuellerWorker = (BackgroundWorker)s;
-            var aktuelleAufgabe = _tasks.GetAufgabeByWorker(aktuellerWorker);
-
-            if (e.Error == null)
+            if (File.Exists(Constants.ConfigDatei)) return;
+            if (File.Exists(Constants.ConfigDateiAlt))
             {
-                Console.WriteLine(aktuelleAufgabe + @"... OK.");
+                File.Move(Constants.ConfigDateiAlt, Constants.ConfigDatei);
             }
             else
             {
-                Console.WriteLine(aktuelleAufgabe + @"... Abbruch." + Environment.NewLine + e.Error.Message);
-                Shutdown();
-            }
-            if (aktuelleAufgabe.ID == 9)
-            {
+                MessageBox.Show(string.Format("Konfigurationsdatei '{0}' nicht vorhanden!", Constants.ConfigDatei));
+                Logger.Info(string.Format("Konfigurationsdatei '{0}' nicht vorhanden!", Constants.ConfigDatei));
                 Shutdown();
             }
         }
-
-        private void ApplicationDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
-        {
-            Logger.Info(e.Exception.ToString());
-        }
     }
 }

+ 2 - 1
Control/IO/ConfigIO.cs

@@ -46,8 +46,9 @@ namespace GCHR.Control.IO
                 File.Delete(_datei);
                 File.Move(BackupDatei, _datei);
             }
-            catch (Exception)
+            catch (Exception e)
             {
+                Logger.Info(e.ToString());
                 MessageBox.Show(
                     string.Format("Es ist ein Fehler aufgetreten. Die Datei '{0}' konnte nicht gespeichert werden.",
                                   _datei));

+ 0 - 5
Control/IO/GchrConfigIO.cs

@@ -19,11 +19,6 @@ namespace GCHR.Control.IO
         {
             config.Einstellungen.Update = null;
             config.Einstellungen.Steuerungsdateien = null;
-            
-            if (config.Einstellungen.BilanzDepartment != null)
-            {
-                
-            }
         }
 
         private static GchrConfig NeueInstanz()

+ 6 - 6
Control/Tasks/Datenimport.cs

@@ -44,9 +44,9 @@ namespace GCHR.Control.Tasks
         private IEnumerable<string> Importieren()
         {
             List<string> import;
-            if (Data.Offlinemodus && File.Exists(Dateiname()))
+            if (Data.Offlinemodus && File.Exists(Dateiname))
             {
-                import = File.ReadAllLines(Dateiname()).ToList();
+                import = File.ReadAllLines(Dateiname).ToList();
             }
             else
             {
@@ -88,15 +88,15 @@ namespace GCHR.Control.Tasks
 
         private void ImportdatenSichern(List<string> import)
         {
-            using (var sw = new StreamWriter(Dateiname(), false, Constants.CsvEncoding))
+            using (var sw = new StreamWriter(Dateiname, false, Constants.CsvEncoding))
             {
                 sw.WriteLine(String.Join(Environment.NewLine, import.ToArray()));
             }
         }
 
-        private string Dateiname()
+        private string Dateiname
         {
-            return String.Format(Constants.Importdaten, HaendlerKonto.AktuellePeriode, _kontoTyp);
+            get { return String.Format(Config.Importdaten, Periode.AktuellePeriode, _kontoTyp); }
         }
 
 
@@ -127,7 +127,7 @@ namespace GCHR.Control.Tasks
             }
         }
 
-        private HaendlerKonto NeuesKonto(IEnumerable<string[]> kontoSaldi)
+        private HaendlerKonto NeuesKonto(IList<string[]> kontoSaldi)
         {
             var neuesKonto = new HaendlerKonto(_kontoTyp);
             var feld = kontoSaldi.First();

+ 3 - 5
Control/Tasks/Export.cs

@@ -10,8 +10,6 @@ namespace GCHR.Control.Tasks
 {
     sealed class Export : Task
     {
-        private readonly Konfiguration _config = Konfiguration.GetInstance();
-
         private List<HaendlerKonto> _konten;
         private readonly IMandant _mandant;
 
@@ -21,7 +19,7 @@ namespace GCHR.Control.Tasks
             : base(id, name) 
         {
             _mandant = MandantRegistrieren();
-            _debugExportFile = _config.ProtokollDatei;
+            _debugExportFile = Periode.AktuellePeriode.ProtokollDatei;
         }
 
         private const String DebugHeader =
@@ -63,7 +61,7 @@ namespace GCHR.Control.Tasks
             
             if (_mandant.BalanceDatei)
             {
-                var balanceStream = DateiStream(_config.BalanceDatei);
+                var balanceStream = DateiStream(Periode.AktuellePeriode.BalanceDatei);
                 ReportProgress(20);
 
                 balanceStream.WriteLine(_mandant.BalanceHeader);
@@ -84,7 +82,7 @@ namespace GCHR.Control.Tasks
 
             if (_mandant.AccountsDatei)
             {
-                var accountsStream = DateiStream(_config.AccountsDatei);
+                var accountsStream = DateiStream(Periode.AktuellePeriode.AccountsDatei);
                 ReportProgress(60);
 
                 accountsStream.WriteLine(_mandant.AccountsHeader);

+ 1 - 2
Control/Tasks/Kontenrahmen.cs

@@ -39,7 +39,6 @@ namespace GCHR.Control.Tasks
 
         protected override void AufgabeAusfuehren()
         {
-            Config.DateiVonServerHolen("Kontenrahmen.csv");
             ReportProgress(40);
             KontenrahmenAusDateiAbrufen();
             Data.SetKontenrahmen(_kontenrahmen);
@@ -61,7 +60,7 @@ namespace GCHR.Control.Tasks
             var statusmeldung = "";
             #endregion
 
-            var stream = new StreamReader(Constants.KontenrahmenDatei, Constants.CsvEncoding);
+            var stream = new StreamReader(Config.Kontenrahmen, Constants.CsvEncoding);
 
             // Kopfzeile ignorieren
             stream.ReadLine();

+ 1 - 1
Control/Tasks/Task.cs

@@ -138,7 +138,7 @@ namespace GCHR.Control.Tasks
         
         protected override void AufgabeAusfuehren()
         {
-            return;
+
         }
     }
 }

+ 8 - 6
Control/Tasks/TaskManager.cs

@@ -1,9 +1,9 @@
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
+using System.IO;
 using System.Linq;
 using GCHR.Model;
-using GCHR.Model.Konto;
 using GCHR.View;
 
 namespace GCHR.Control.Tasks
@@ -12,13 +12,12 @@ namespace GCHR.Control.Tasks
     {
         public ThreadXData Data = ThreadXData.CreateInstance();
         private List<Task> _taskList;
-        private Konfiguration _config;
+        private readonly Konfiguration _config = Konfiguration.GetInstance();
 
         public void CreateTasks(RunWorkerCompletedEventHandler completed, Periode periode)
         {
-            HaendlerKonto.AktuellePeriode = periode;
-            
-            _config = Konfiguration.CreateInstance(Constants.ConfigDatei, Constants.KontenDatei);
+            Periode.AktuellePeriode = periode;
+
             Data.SetDepartmentCase(CreateDepartmentCaseInstance());
 
             completed += Ablaufsteuerung;
@@ -35,7 +34,10 @@ namespace GCHR.Control.Tasks
                             Task.CreateInstance(8, "Export",           completed, new[] { 7 })
             };
 
-            Logger.ExportLog = _config.LogDatei;
+            Logger.ExportLog = periode.LogDatei;
+            var info = new FileInfo(Logger.ExportLog);
+            if (info.Directory != null) info.Directory.Create();
+
             Logger.Info(string.Format("Prozess gestartet. Weitere Infos siehe '{0}'", Logger.ExportLog));
             Logger.Progress(DateTime.Now + " Prozess gestartet.");
         }

+ 1 - 3
Control/Tasks/Uebersetzung.cs

@@ -35,9 +35,7 @@ namespace GCHR.Control.Tasks
             var debugNichtImKontenrahmen = new List<string>();
             var debugDoppeltesHaendlerkonto = new List<string>();
 
-            Config.DateiVonServerHolen(Dateiname);
-
-            var stream = new StreamReader(Constants.DatenexportPfad + Dateiname, Constants.CsvEncoding);
+            var stream = new StreamReader(Dateiname, Constants.CsvEncoding);
 
             // Erste Zeile (Überschrift) ignorieren
             stream.ReadLine();

+ 1 - 1
Control/Tasks/UebersetzungStat.cs

@@ -8,7 +8,7 @@ namespace GCHR.Control.Tasks
         public UebersetzungStat(int id, string name)
             : base(id, name)
         {
-            Dateiname = "uebersetzungstabelle_stat.csv";
+            Dateiname = Config.UebersetzungStat;
             KontoTyp = KontoTypen.Stat;
         }
 

+ 1 - 1
Control/Tasks/UebersetzungSuSa.cs

@@ -8,7 +8,7 @@ namespace GCHR.Control.Tasks
         public UebersetzungSuSa(int id, string name)
             : base(id, name)
         {
-            Dateiname = "uebersetzungstabelle.csv";
+            Dateiname = Config.UebersetzungSusa;
             KontoTyp = KontoTypen.SuSa;
         }
 

+ 9 - 0
GCHR.csproj

@@ -96,6 +96,12 @@
       <SubType>Designer</SubType>
       <SubType>Designer</SubType>
     </ApplicationDefinition>
+    <Compile Include="View\PeriodenEintrag.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="View\PeriodenEintrag.Designer.cs">
+      <DependentUpon>PeriodenEintrag.cs</DependentUpon>
+    </Compile>
     <Page Include="View\Ampel.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
@@ -171,6 +177,9 @@
     </Compile>
     <Compile Include="Model\Periode.cs" />
     <Compile Include="Control\Tasks\TaskManager.cs" />
+    <EmbeddedResource Include="View\PeriodenEintrag.resx">
+      <DependentUpon>PeriodenEintrag.cs</DependentUpon>
+    </EmbeddedResource>
     <None Include="app.config" />
     <None Include="Tests.cs" />
     <Compile Include="Model\Konto\HaendlerKonto.cs" />

BIN
GCHR.suo


+ 113 - 151
Main.xaml

@@ -1,62 +1,52 @@
 <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="GCHR.Main" xmlns:View="clr-namespace:GCHR.View" xml:lang="de-DE"
-    Title="GCHR - GlobalCube Herstellerreporting" 
-        Height="507" Width="633" 
-        WindowStyle="SingleBorderWindow" SizeToContent="Manual" ResizeMode="CanMinimize" Loaded="WindowLoaded"> <!-- Icon="pack://siteOfOrigin:,,,/img/GCHR.ico">-->
-    
-    <Window.Resources>
-        <Storyboard x:Key="sbGridMainAusblenden">
-            <DoubleAnimation From="1.0" To=".0" Duration="0:0:0.3" Storyboard.TargetName="GridMain" Storyboard.TargetProperty="Opacity" />
-        </Storyboard>
-        
-        <Storyboard x:Key="sbGridMainEinblenden">
-            <DoubleAnimation From=".0" To="1.0" Duration="0:0:0.3" Storyboard.TargetName="GridMain" Storyboard.TargetProperty="Opacity" />
-        </Storyboard>
-        
-        <Storyboard x:Key="sbGridManuelleAusblenden">
-            <DoubleAnimation From="1.0" To=".0" Duration="0:0:0.3" Storyboard.TargetName="GridManuelle" Storyboard.TargetProperty="Opacity" />
-        </Storyboard>
-        
-        <Storyboard x:Key="sbGridManuelleEinblenden">
-            <DoubleAnimation From=".0" To="1.0" Duration="0:0:0.3" Storyboard.TargetName="GridManuelle" Storyboard.TargetProperty="Opacity" />
-        </Storyboard>
-
-        <Storyboard x:Key="sbGridOverlayAusblenden">
-            <DoubleAnimation From="1.0" To=".0" Duration="0:0:0.3" Storyboard.TargetName="GridOverlay" Storyboard.TargetProperty="Opacity" />
-        </Storyboard>
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="GCHR.Main" xmlns:view="clr-namespace:GCHR.View"
+        xmlns:model="clr-namespace:GCHR.Model"
+        xml:lang="de-DE"
+        Title="GCHR - GlobalCube Herstellerreporting"
+        WindowStyle="SingleBorderWindow" ResizeMode="CanMinimize" Loaded="WindowLoaded" SizeToContent="WidthAndHeight">
 
-        <Storyboard x:Key="sbGridOverlayEinblenden">
-            <DoubleAnimation From=".0" To="1.0" BeginTime="0:0:0" Duration="0:0:0.3" Storyboard.TargetName="GridOverlay" Storyboard.TargetProperty="Opacity" />
-        </Storyboard>
-    	<Style x:Key="taskLabel" TargetType="{x:Type TextBlock}">
-            <Setter Property="FontSize" Value="12" />
-            <Setter Property="Margin" Value="25,0,0,0" />
+    <Window.Resources>
+        <Style x:Key="TaskLabel" TargetType="{x:Type TextBlock}">
+            <Setter Property="Margin" Value="5,2,0,5" />
             <Setter Property="Foreground" Value="White" />
-            <Setter Property="VerticalAlignment" Value="Center" />
+            <Setter Property="Width" Value="290" />
+            <Setter Property="HorizontalAlignment" Value="Left" />
         </Style>
-        <Style x:Key="taskHead" TargetType="{x:Type TextBlock}">
+        <Style x:Key="TaskHead" TargetType="{x:Type TextBlock}">
             <Setter Property="FontSize" Value="14" />
             <Setter Property="FontWeight" Value="Bold" />
-            <Setter Property="Margin" Value="10,0,0,0" />
             <Setter Property="Foreground" Value="White" />
-            <Setter Property="VerticalAlignment" Value="Center" />
         </Style>
+
+        <DataTemplate x:Key="StatusTemplate" DataType="{x:Type model:Periode}">
+            <WrapPanel>
+                <TextBlock FontSize="14" FontWeight="Bold" Margin="5,2,135,2" Text="{Binding Klartext}" />
+                <view:Ampel Status="Gelb" Message="{Binding Info}" />
+                <TextBlock VerticalAlignment="Center" Margin="25,2,5,2" Text="{Binding Stand}"/>
+            </WrapPanel>
+        </DataTemplate>
     </Window.Resources>
-    
+
     <Grid>
-        <Grid Opacity="1.0" Name="GridMain">
-            <Grid.Background>
-                <LinearGradientBrush StartPoint="0,1" EndPoint="0,0">
-                    <GradientStop Color="#FF9EBFDE" Offset=".5"/>
-                    <GradientStop Color="#FF30567A" Offset="1"/>
-                </LinearGradientBrush>
-            </Grid.Background>
-            <Label Height="32" Margin="12,0,0,0" Foreground="White" VerticalAlignment="Top" HorizontalAlignment="Left" FontSize="14" FontWeight="Bold">
-                Periode auswählen
-            </Label>
-            <WrapPanel Margin="12,30,168,2" ClipToBounds="False">
+        <Grid.Background>
+            <LinearGradientBrush StartPoint="0,1" EndPoint="0,0">
+                <GradientStop Color="#FF9EBFDE" Offset=".5" />
+                <GradientStop Color="#FF30567A" Offset="1" />
+            </LinearGradientBrush>
+        </Grid.Background>
+        <StackPanel Opacity="1.0" Name="GridMain" Margin="10">
+
+            <Label Foreground="White" FontSize="20" FontWeight="Bold" Name="Kopfzeile">AZ West - Opel</Label>
+            
+        <!--
+            <ScrollViewer Height="80" Margin="10,3">
+                <ListView Name="LvPerioden" ItemTemplate="{StaticResource StatusTemplate}"/>
+            </ScrollViewer>
+-->
+            <Label Foreground="White" FontSize="14" FontWeight="Bold">Periode auswählen</Label>
+            <WrapPanel HorizontalAlignment="Center" Margin="0,0,0,10">
                 <Label Foreground="White">Monat:</Label>
-                <ComboBox Name="monatsbox" Width="100" Margin="0,0,10,0">
+                <ComboBox Name="Monatsbox" Width="100" Margin="0,0,10,0" VerticalContentAlignment="Center">
                     <ComboBoxItem>Januar</ComboBoxItem>
                     <ComboBoxItem>Februar</ComboBoxItem>
                     <ComboBoxItem>März</ComboBoxItem>
@@ -71,119 +61,91 @@
                     <ComboBoxItem>Dezember</ComboBoxItem>
                 </ComboBox>
                 <Label Foreground="White">Jahr:</Label>
-                <ComboBox Name="jahrbox" Width="55" Margin="0,0,15,0" />
-                <Button Template="{DynamicResource GlassButton}" Margin="10,0,0,0" Click="BtnStartenClick" Width="131" Foreground="White" Name="btnStarten">
-                    Prozess starten
-                </Button>
+                <ComboBox Name="Jahrbox" Width="55" Margin="0,0,15,0" VerticalContentAlignment="Center" />
+                <Button Click="BtnStartenClick" Width="100" Name="BtnStarten">Prozess starten</Button>
             </WrapPanel>
 
-            <Border CornerRadius="5" BorderThickness="0.5" BorderBrush="Black" Margin="12,74,192,15.553" Padding="3,3,3,10">
+            <Border CornerRadius="5" BorderThickness="1" BorderBrush="Black" Margin="0" Padding="10,5">
                 <Border.Background>
                     <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
-                        <GradientStop Color="#FF9EBFDE" Offset="-.1"/>
-                        <GradientStop Color="#FF30567A" Offset="1"/>
+                        <GradientStop Color="#FF9EBFDE" Offset="-.1" />
+                        <GradientStop Color="#FF30567A" Offset="1" />
                     </LinearGradientBrush>
                 </Border.Background>
 
-                <Grid Background="Transparent" Width="360">
-                    <Grid.ColumnDefinitions>
-                        <ColumnDefinition />
-                        <ColumnDefinition Width="55" />
-                    </Grid.ColumnDefinitions>
-
-                    <Grid.RowDefinitions>
-                        <RowDefinition />
-                        <RowDefinition />
-                        <RowDefinition />
-                        <RowDefinition />
-                        <RowDefinition />
-                        <RowDefinition />
-                        <RowDefinition />
-                        <RowDefinition />
-                        <RowDefinition />
-                        <RowDefinition />
-                        <RowDefinition />
-                        <RowDefinition />
-                        <RowDefinition />
-                        <RowDefinition />
-                        <RowDefinition />
-                    </Grid.RowDefinitions>
-
-                    <TextBlock Style="{StaticResource taskHead}" Grid.ColumnSpan="2">Vorbereitungen</TextBlock>
-
-
-                    <TextBlock Style="{StaticResource taskLabel}" Grid.Row="1">Kontenrahmen laden</TextBlock>
-                    <View:Ampel x:Name="ampel_KontenrahmenLaden" Grid.Row="1" Grid.Column="1" />
-
-                    <TextBlock Style="{StaticResource taskLabel}" Grid.Row="2">Übersetzungstabelle laden</TextBlock>
-                    <View:Ampel x:Name="ampel_ÜbersetzungstabelleLaden" Grid.Row="2" Grid.Column="1" />
-
-                    <TextBlock Style="{StaticResource taskLabel}" Grid.Row="3">Übersetzungstabelle für Statistikkonten laden</TextBlock>
-                    <View:Ampel x:Name="ampel_ÜbersetzungstabelleStatLaden" Grid.Row="3" Grid.Column="1" />
-
-                    <TextBlock Style="{StaticResource taskLabel}" Grid.Row="4" HorizontalAlignment="Left" Width="282">Vormonatswerte für manuelle Konten laden</TextBlock>
-                    <View:Ampel x:Name="ampel_ManuelleLaden" Grid.Row="4" Grid.Column="1" />
-
-                    <TextBlock Style="{StaticResource taskHead}" Grid.Row="5" Grid.ColumnSpan="2">
-                            Verarbeitung der Konten 
-                            <CheckBox Name="btnOffline" Margin="100,0,0,0" Checked="BtnOfflineChecked" Unchecked="BtnOfflineChecked">
-                                <TextBlock FontSize="9" FontWeight="Normal" Foreground="White">Offlinemodus</TextBlock>
-                            </CheckBox>
+                <StackPanel>
+                    <TextBlock Style="{StaticResource TaskHead}">Vorbereitungen</TextBlock>
+
+                    <WrapPanel>
+                        <TextBlock Style="{StaticResource TaskLabel}">Kontenrahmen laden</TextBlock>
+                        <view:Ampel x:Name="AmpelKontenrahmenLaden" />
+                    </WrapPanel>
+                    <WrapPanel>
+                        <TextBlock Style="{StaticResource TaskLabel}">Übersetzungstabelle laden</TextBlock>
+                        <view:Ampel x:Name="AmpelÜbersetzungstabelleLaden" />
+                    </WrapPanel>
+                    <WrapPanel>
+                        <TextBlock Style="{StaticResource TaskLabel}">Übersetzungstabelle für Statistikkonten laden</TextBlock>
+                        <view:Ampel x:Name="AmpelÜbersetzungstabelleStatLaden" />
+                    </WrapPanel>
+                    <WrapPanel>
+                        <TextBlock Style="{StaticResource TaskLabel}">Vormonatswerte für manuelle Konten laden</TextBlock>
+                        <view:Ampel x:Name="AmpelManuelleLaden" />
+                    </WrapPanel>
+                    <WrapPanel>
+                        <TextBlock Style="{StaticResource TaskHead}">
+                            Verarbeitung der Konten
                         </TextBlock>
-
-                    <TextBlock Style="{StaticResource taskLabel}" Grid.Row="6">Import der SuSa-Konten</TextBlock>
-                    <View:Ampel x:Name="ampel_SuSaKontenImport" Grid.Row="6" Grid.Column="1" />
-
-                    <TextBlock Style="{StaticResource taskLabel}" Grid.Row="7">
-                            <CheckBox Name="btnKeinJahresabschluss">
-                                <TextBlock Foreground="White">Eröffnungsbilanz berechnen</TextBlock>
-                            </CheckBox>
+                        <CheckBox Name="BtnOffline" Margin="100,0,0,0" Checked="BtnOfflineChecked"
+                                  Unchecked="BtnOfflineChecked">
+                            <TextBlock FontSize="9" FontWeight="Normal" Foreground="White">Offlinemodus</TextBlock>
+                        </CheckBox>
+                    </WrapPanel>
+
+                    <WrapPanel>
+                        <TextBlock Style="{StaticResource TaskLabel}">Import der SuSa-Konten</TextBlock>
+                        <view:Ampel x:Name="AmpelSuSaKontenImport" />
+                    </WrapPanel>
+
+                    <TextBlock Style="{StaticResource TaskLabel}">
+                        <CheckBox Name="BtnKeinJahresabschluss">
+                            <TextBlock Foreground="White">Eröffnungsbilanz berechnen</TextBlock>
+                        </CheckBox>
                     </TextBlock>
-
-                    <TextBlock Style="{StaticResource taskLabel}" Grid.Row="8">Import der Statistikkonten</TextBlock>
-                    <View:Ampel x:Name="ampel_StatKontenImport"  Grid.Row="8" Grid.Column="1" />
-
-                    <TextBlock Style="{StaticResource taskLabel}" Grid.Row="9">
-                            <CheckBox Name="btnImportdatenSichern" Checked="BtnImportdatenSichernChecked" Unchecked="BtnImportdatenSichernUnchecked">
+                    <WrapPanel>
+                        <TextBlock Style="{StaticResource TaskLabel}">Import der Statistikkonten</TextBlock>
+                        <view:Ampel x:Name="AmpelStatKontenImport" />
+                    </WrapPanel>
+
+                    <WrapPanel>
+                        <TextBlock Style="{StaticResource TaskLabel}">
+                            <CheckBox Name="BtnImportdatenSichern" Checked="BtnImportdatenSichernChecked"
+                                      Unchecked="BtnImportdatenSichernUnchecked">
                                 <TextBlock Foreground="White">Importierte Werte sichern</TextBlock>
                             </CheckBox>
-                    </TextBlock>
-
-                    <TextBlock Style="{StaticResource taskLabel}" Grid.Row="10">Übersetzung der Konten</TextBlock>
-                    <View:Ampel x:Name="ampel_SuSaKontenVerarbeitung"  Grid.Row="10" Grid.Column="1"/>
-
-                    <TextBlock Style="{StaticResource taskLabel}" Grid.Row="11">Verarbeitung der manuellen Konten</TextBlock>
-                    <View:Ampel x:Name="ampel_ManuelleKontenVerarbeitung"  Grid.Row="11" Grid.Column="1" />
-
-                    <TextBlock Style="{StaticResource taskHead}" Grid.Row="12" Grid.ColumnSpan="2">Ergebnisse exportieren</TextBlock>
-
-                    <TextBlock Style="{StaticResource taskLabel}" Grid.Row="13">Dateien schreiben</TextBlock>
-                    <View:Ampel x:Name="ampel_Export"  Grid.Row="13" Grid.Column="1" />
-
-                    <TextBlock Style="{StaticResource taskLabel}" Grid.Row="14" Visibility="Hidden">
-                            <CheckBox Name="btnExportprotokoll">
-                                <TextBlock Foreground="White">Exportprotokoll schreiben</TextBlock>
-                            </CheckBox>
-                    </TextBlock>
-                </Grid>
+                        </TextBlock>
+                    </WrapPanel>
+
+                    <WrapPanel>
+                        <TextBlock Style="{StaticResource TaskLabel}">Übersetzung der Konten</TextBlock>
+                        <view:Ampel x:Name="AmpelSuSaKontenVerarbeitung" />
+                    </WrapPanel>
+                    <WrapPanel>
+                        <TextBlock Style="{StaticResource TaskLabel}">Verarbeitung der manuellen Konten</TextBlock>
+                        <view:Ampel x:Name="AmpelManuelleKontenVerarbeitung" />
+                    </WrapPanel>
+                    <TextBlock Style="{StaticResource TaskHead}">Ergebnisse exportieren</TextBlock>
+
+                    <WrapPanel>
+                        <TextBlock Style="{StaticResource TaskLabel}">Dateien schreiben</TextBlock>
+                        <view:Ampel x:Name="AmpelExport" />
+                    </WrapPanel>
+                    <Button HorizontalAlignment="Left" Width="130" Margin="15,3" Click="BtnProtokollClick"
+                            Name="BtnProtokoll" Visibility="Hidden">
+                        Export-Verzeichnis
+                    </Button>
+                </StackPanel>
             </Border>
-
-            <StackPanel Margin="0,12,12,0" HorizontalAlignment="Right" Name="stack1" Width="210" Height="149.605" VerticalAlignment="Top">
-                <!--<Image Name="imgGlobalCube" Source="pack://siteOfOrigin:,,,/img/GlobalCube.png" />-->
-                <!--
-                <Label Height="50" Name="label1" VerticalAlignment="Top" FontSize="35" FontWeight="Normal" FontFamily="Gill Sans Ultra Bold" HorizontalAlignment="Right" Width="72" HorizontalContentAlignment="Right" VerticalContentAlignment="Top" Foreground="White">GC</Label>
-                <Label Height="23" HorizontalAlignment="Right" Name="label2" FontFamily="Gill Sans Ultra Bold" VerticalAlignment="Top" Width="160" Foreground="White">Herstellerreporting</Label>
-                <Image HorizontalAlignment="Right" Name="image1" Stretch="None" Width="50" /> -->
-            </StackPanel>
-            
-            <StackPanel VerticalAlignment="Bottom" Margin="0,0,5,10" HorizontalAlignment="Right" Width="155">
-                <Button Margin="3" Template="{DynamicResource GlassButton}" Click="BtnManuelleKontenClick" Foreground="White" Height="23" Name="btnManuelleKonten" Visibility="Hidden">Manuelle Konten</Button>
-                <Button Margin="3" Template="{DynamicResource GlassButton}" Click="BtnProtokollClick" Foreground="White" Height="23" Name="btnProtokoll" Visibility="Hidden">Export-Verzeichnis</Button>
-                <Button Margin="3" Template="{DynamicResource GlassButton}" Click="BtnEinstellungenClick" Foreground="White" Height="23" Name="btnEinstellungen" Visibility="Hidden">Einstellungen</Button>
-                <Button Margin="3" Template="{DynamicResource GlassButton}" Click="BtnBeendenClick" Foreground="White" Height="23" Name="btnBeenden">Beenden</Button>
-            </StackPanel>
-        </Grid>
-
- 
+        </StackPanel>
     </Grid>
-</Window>
+</Window>

+ 81 - 58
Main.xaml.cs

@@ -1,6 +1,7 @@
 using System;
 using System.ComponentModel;
 using System.Diagnostics;
+using System.Globalization;
 using System.IO;
 using System.Windows;
 using System.Windows.Controls;
@@ -15,24 +16,26 @@ namespace GCHR
     {
         private TaskManager _aufgabenListe;
 
+        //private readonly List<Periode> _periodenListe = new List<Periode>();
+
         private bool ImportdatenSichern
         {
-            get { return (btnImportdatenSichern.IsChecked != null) ? (bool) btnImportdatenSichern.IsChecked : false; }
+            get { return (BtnImportdatenSichern.IsChecked != null) && (bool) BtnImportdatenSichern.IsChecked; }
         }
 
         private bool Offlinemodus
         {
-            get { return (btnOffline.IsChecked != null) ? (bool)btnOffline.IsChecked : false; }
+            get { return (BtnOffline.IsChecked != null) && (bool)BtnOffline.IsChecked; }
         }
 
         private bool Exportprotokoll
         {
-            get { return (btnExportprotokoll.IsChecked != null) ? (bool)btnExportprotokoll.IsChecked : false; }
+            get { return false; }
         }
 
         private bool KeinJahresabschluss
         {
-            get { return (btnKeinJahresabschluss.IsChecked != null) ? (bool)btnKeinJahresabschluss.IsChecked : false; }
+            get { return (BtnKeinJahresabschluss.IsChecked != null) && (bool)BtnKeinJahresabschluss.IsChecked; }
         }
 
         public Main()
@@ -42,34 +45,73 @@ namespace GCHR
 
         private void WindowLoaded(object sender, RoutedEventArgs e)
         {
-            AktuellenMonatEinstellen();
+            var config = Konfiguration.CreateInstance(Constants.ConfigDatei);
             Logger.Info(DateTime.Now + " GCHR gestartet.");
+
+            /*
+            var von = new Periode((DateTime.Today.Year - 1).ToString(CultureInfo.InvariantCulture) + "01");
+            var bis =
+                new Periode(DateTime.Today.Year +
+                            DateTime.Today.Month.ToString(CultureInfo.InvariantCulture).PadLeft(2, '0'));
+
+            while (!von.ToString().Equals(bis.ToString()))
+            {
+                _periodenListe.Add(von);
+                von = von.Nachfolger;
+            }
+             */
+
+
+            AktuellenMonatEinstellen();
+            Kopfzeile.Content = config.Haendler + " - " + config.Mandantenname;
+
+            /*
+            LvPerioden.ItemsSource = _periodenListe;
+            LvPerioden.SelectedIndex = _periodenListe.Count - 1;
+            LvPerioden.ScrollIntoView(_periodenListe[_periodenListe.Count - 1]);
+            LvPerioden.Focus();
+            */
         }
 
         private void AktuellenMonatEinstellen()
         {
-            jahrbox.Items.Clear();
-            for (var i = 2008; i <= DateTime.Today.Year; i++)
+            Jahrbox.Items.Clear();
+            for (var i = 2010; i <= DateTime.Today.Year; i++)
             {
-                jahrbox.Items.Add(i);
+                Jahrbox.Items.Add(i);
             }
 
-            var jahr = DateTime.Today.Year;
-            var vormonat = DateTime.Today.Month - 1;
+            var aktPeriode = aktuellenMonatBestimmen();
+
+            Monatsbox.SelectedIndex = Int32.Parse(aktPeriode.Monat) - 1;
+            Jahrbox.SelectedValue = Int32.Parse(aktPeriode.Jahr);
+        }
 
-            if (vormonat < 1)
+        private Periode aktuellenMonatBestimmen()
+        {
+            var neuerMonat =
+                new Periode(DateTime.Today.Year +
+                            DateTime.Today.Month.ToString(CultureInfo.InvariantCulture).PadLeft(2, '0'));
+            var monateZurueck = DateTime.Today.Month;
+            if (monateZurueck <= 2)
             {
-                vormonat += 12;
-                jahr--;
+                monateZurueck += 12;
             }
-            monatsbox.SelectedIndex = vormonat - 1;
-            jahrbox.SelectedValue = jahr;
+
+            for (var i = 0; i < monateZurueck; i++)
+            {
+                neuerMonat = neuerMonat.Vorgaenger;
+                if (File.Exists(neuerMonat.Vorgaenger.BalanceDatei))
+                {
+                    return neuerMonat;
+                }
+            }
+            return neuerMonat.Nachfolger;
         }
 
         private void BtnStartenClick(object sender, RoutedEventArgs e)
         {
-            btnStarten.IsEnabled = false;
-            btnManuelleKonten.Visibility = Visibility.Hidden;
+            BtnStarten.IsEnabled = false;
 
             AufgabenListeErstellen();
             AmpelnRegistrieren();
@@ -78,8 +120,8 @@ namespace GCHR
 
         private string PeriodeAusAuswahl()
         {
-            var monat = (monatsbox.SelectedIndex + 1).ToString().PadLeft(2, '0');
-            return jahrbox.Text + monat;
+            var monat = (Monatsbox.SelectedIndex + 1).ToString(CultureInfo.InvariantCulture).PadLeft(2, '0');
+            return Jahrbox.Text + monat;
         }
 
         private void AufgabenListeErstellen()
@@ -101,11 +143,11 @@ namespace GCHR
         {
             var ampeln = new[]
                              {
-                                 ampel_KontenrahmenLaden, ampel_ÜbersetzungstabelleLaden,
-                                 ampel_ÜbersetzungstabelleStatLaden,
-                                 ampel_ManuelleLaden, ampel_SuSaKontenImport, ampel_StatKontenImport,
-                                 ampel_SuSaKontenVerarbeitung,
-                                 ampel_ManuelleKontenVerarbeitung, ampel_Export
+                                 AmpelKontenrahmenLaden, AmpelÜbersetzungstabelleLaden,
+                                 AmpelÜbersetzungstabelleStatLaden,
+                                 AmpelManuelleLaden, AmpelSuSaKontenImport, AmpelStatKontenImport,
+                                 AmpelSuSaKontenVerarbeitung,
+                                 AmpelManuelleKontenVerarbeitung, AmpelExport
                              };
 
             _aufgabenListe.RegisterAmpeln(ampeln);
@@ -118,11 +160,11 @@ namespace GCHR
 
             if (e.Error != null)
             {
-                btnStarten.IsEnabled = true;
+                BtnStarten.IsEnabled = true;
             }
             else
             {
-                if (aktuelleAufgabe.ID == 3 && ampel_ManuelleLaden.Done)
+                if (aktuelleAufgabe.ID == 3 && AmpelManuelleLaden.Done)
                 {
                     var mkb = new ManuelleKontenBearbeiten(_aufgabenListe.Data.GetManuelleKonten());
                     mkb.Closed += ManuelleKontenBearbeitenClosed;
@@ -131,8 +173,8 @@ namespace GCHR
 
                 if (aktuelleAufgabe.ID == 8)
                 {
-                    btnStarten.IsEnabled = true;
-                    btnProtokoll.Visibility = Visibility.Visible;
+                    BtnStarten.IsEnabled = true;
+                    BtnProtokoll.Visibility = Visibility.Visible;
                 }
             }
         }
@@ -144,45 +186,25 @@ namespace GCHR
             _aufgabenListe.Data.AufManuelleKontenWarten.Set();                
         }
 
-        #region Events für Buttons auf der rechten Seite
-
-        private void BtnBeendenClick(object sender, RoutedEventArgs e)
-        {
-            Close();
-        }
-
-        private void BtnEinstellungenClick(object sender, RoutedEventArgs e)
-        {
-            new Einstellungen().ShowDialog();
-        }
-
-
-        private void BtnManuelleKontenClick(object sender, RoutedEventArgs e)
-        {
-            return;
-        }
-
-        #endregion
-
 
         #region Events für Checkboxen
 
         private void BtnOfflineChecked(object sender, RoutedEventArgs e)
         {
             var chk = sender as CheckBox;
-            btnImportdatenSichern.IsChecked = false;
-            if (chk != null && chk.IsChecked != null) btnImportdatenSichern.IsEnabled = !(bool)chk.IsChecked;
+            BtnImportdatenSichern.IsChecked = false;
+            if (chk != null && chk.IsChecked != null) BtnImportdatenSichern.IsEnabled = !(bool)chk.IsChecked;
         }
 
         private void BtnImportdatenSichernChecked(object sender, RoutedEventArgs e)
         {
-            btnOffline.IsChecked = false;
-            btnOffline.Visibility = Visibility.Hidden;
+            BtnOffline.IsChecked = false;
+            BtnOffline.Visibility = Visibility.Hidden;
         }
 
         private void BtnImportdatenSichernUnchecked(object sender, RoutedEventArgs e)
         {
-            btnOffline.Visibility = Visibility.Visible;
+            BtnOffline.Visibility = Visibility.Visible;
         }
 
         #endregion
@@ -190,12 +212,13 @@ namespace GCHR
         private void BtnProtokollClick(object sender, RoutedEventArgs e)
         {
             var dateiInfo = new FileInfo(Logger.ExportLog);
+            if (dateiInfo.Directory == null) return;
             var psi = new ProcessStartInfo("explorer.exe", dateiInfo.Directory.ToString())
-            {
-                RedirectStandardOutput = true,
-                WindowStyle = ProcessWindowStyle.Normal,
-                UseShellExecute = false
-            };
+                {
+                    RedirectStandardOutput = true,
+                    WindowStyle = ProcessWindowStyle.Normal,
+                    UseShellExecute = false
+                };
             Process.Start(psi);
         }
     }

+ 1 - 1
Mandantenschnittstelle/Citroen.cs

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

+ 2 - 2
Mandantenschnittstelle/Fiat.cs

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

+ 68 - 1
Mandantenschnittstelle/Ford.cs

@@ -1,7 +1,74 @@
 
+using System;
+using GCHR.Model;
+using GCHR.Model.Konto;
+
 namespace GCHR.Mandantenschnittstelle
 {
-    class Ford : Opel
+    class Ford : IMandant
     {
+        public string BalanceBody(HaendlerKonto kto)
+        {
+            return (kto.Kontonummer + String.Format("{0,30:0.00}", (kto.Summe)).Replace(',', '.'));
+        }
+
+        public string AccountsBody(HaendlerKonto kto)
+        {
+            return (kto.Kontonummer.PadRight(42, ' ') + kto.Bezeichnung);
+        }
+
+
+
+        protected Konfiguration Config = Konfiguration.GetInstance();
+
+        public bool BalanceDatei
+        {
+            get
+            {
+                return true;
+            }
+        }
+
+        public bool AccountsDatei
+        {
+            get
+            {
+                return true;
+            }
+        }
+
+        public string BalanceHeader
+        {
+            get
+            {
+                return String.Format("AA{0}M{1}{2} .20EUR", Config.Haendlernummer, Periode.AktuellePeriode.Monat, Periode.AktuellePeriode.JahrZweistellig);
+            }
+        }
+
+        public string BalanceFooter
+        {
+            get
+            {
+                return String.Format("XX{0}M{1}{2}", Config.Haendlernummer, Periode.AktuellePeriode.Monat, Periode.AktuellePeriode.JahrZweistellig);
+            }
+
+        }
+
+        public string AccountsHeader
+        {
+            get
+            {
+                return "Account Code".PadRight(42, ' ') + "Description";
+            }
+        }
+
+        public string AccountsFooter
+        {
+            get
+            {
+                return String.Empty;
+            }
+
+        }
     }
 }

+ 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.Händlernummer, HaendlerKonto.AktuellePeriode.Jahr,
-                        HaendlerKonto.AktuellePeriode.Monat,
-                        HaendlerKonto.AktuellePeriode.Jahresbeginn(Config.Geschaeftsjahr).Jahr,
-                        HaendlerKonto.AktuellePeriode.Jahresbeginn(Config.Geschaeftsjahr).Monat,
+                        Environment.NewLine, Config.Haendlernummer, Periode.AktuellePeriode.Jahr,
+                        Periode.AktuellePeriode.Monat,
+                        Periode.AktuellePeriode.Jahresbeginn.Jahr,
+                        Periode.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.Händlernummer, HaendlerKonto.AktuellePeriode.Monat, HaendlerKonto.AktuellePeriode.JahrZweistellig);
+                return String.Format("AA{0}M{1}{2} .20EUR", Config.Haendlernummer, Periode.AktuellePeriode.Monat, Periode.AktuellePeriode.JahrZweistellig);
             }
         }
 
@@ -36,7 +36,7 @@ namespace GCHR.Mandantenschnittstelle
         {
             get
             {
-                return String.Format("XX{0}M{1}{2}", Config.Händlernummer, HaendlerKonto.AktuellePeriode.Monat, HaendlerKonto.AktuellePeriode.JahrZweistellig);
+                return String.Format("XX{0}M{1}{2}", Config.Haendlernummer, Periode.AktuellePeriode.Monat, Periode.AktuellePeriode.JahrZweistellig);
             }
 
         }

+ 1 - 1
Mandantenschnittstelle/Peugeot.cs

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

+ 3 - 3
Mandantenschnittstelle/Volkswagen.cs

@@ -64,12 +64,12 @@ namespace GCHR.Mandantenschnittstelle
                                     new XElement(Tns + "PartnerKey",
                                         new XElement(Tns + "Country", Country),
                                         new XElement(Tns + "Brand", Hauptmarke.V),
-                                        new XElement(Tns + "PartnerNumber", _config.Händlernummer)
+                                        new XElement(Tns + "PartnerNumber", _config.Haendlernummer)
                                     ),
                                     new XElement(Tns + "IsCumulative", "true"),
                                     new XElement(Tns + "AccountingDate",
-                                        new XElement(Tns + "AccountingMonth", HaendlerKonto.AktuellePeriode.Monat),
-                                        new XElement(Tns + "AccountingYear", HaendlerKonto.AktuellePeriode.Jahr)
+                                        new XElement(Tns + "AccountingMonth", Periode.AktuellePeriode.Monat),
+                                        new XElement(Tns + "AccountingYear", Periode.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.Händlernummer, HaendlerKonto.AktuellePeriode.Monat, HaendlerKonto.AktuellePeriode.JahrZweistellig);
+                return String.Format("AA{0}F{1}{2} .20EUR", Config.Haendlernummer, Periode.AktuellePeriode.Monat, Periode.AktuellePeriode.JahrZweistellig);
             }
         }
 
@@ -36,7 +36,7 @@ namespace GCHR.Mandantenschnittstelle
         {
             get
             {
-                return String.Format("XX{0}F{1}{2}", Config.Händlernummer, HaendlerKonto.AktuellePeriode.Monat, HaendlerKonto.AktuellePeriode.JahrZweistellig);
+                return String.Format("XX{0}F{1}{2}", Config.Haendlernummer, Periode.AktuellePeriode.Monat, Periode.AktuellePeriode.JahrZweistellig);
             }
 
         }

+ 6 - 13
Model/Constants.cs

@@ -17,37 +17,30 @@ namespace GCHR.Model
                 monat = 12;
                 jahr--;
             }
-            return jahr + monat.ToString().PadLeft(2, '0');
+            return jahr + monat.ToString(CultureInfo.InvariantCulture).PadLeft(2, '0');
         }
 
-        private static byte[] key = {76, 123, 122, 84, 45, 12, 44, 78, 56, 43, 47, 6, 
+        private static readonly byte[] Key = {76, 123, 122, 84, 45, 12, 44, 78, 56, 43, 47, 6, 
               2, 13, 23, 23, 45, 255, 65, 20, 33, 5, 235, 66};
-        private static readonly byte[] iv = { 56, 254, 98, 123, 66, 4, 90, 34, 111, 34, 78, 33, 222, 80, 74, 35 };
+        private static readonly byte[] Iv = { 56, 254, 98, 123, 66, 4, 90, 34, 111, 34, 78, 33, 222, 80, 74, 35 };
 
         internal static string Encrypt(string toenc)
         {
-            var des = new CTripleDes(key, iv);
+            var des = new CTripleDes(Key, Iv);
             return des.Encrypt(toenc);
         }
 
         internal static string Decrypt(string todec)
         {
-            var des = new CTripleDes(key, iv);
+            var des = new CTripleDes(Key, Iv);
             return des.Decrypt(todec);
         }
 
         public static Encoding CsvEncoding = Encoding.Default;
 
-        public static string Importdaten = "data\\import\\import_{0}_{1}.txt";
-
-        public const string ConfigDatei = "config\\gchr.xml";
+        public static string ConfigDatei = "config\\gchr.xml";
         public const string ConfigDateiAlt = "config\\config.xml";
 
-        public const string KontenDatei = "data\\ManuelleKonten.xml";
-
-        public const string KontenrahmenDatei = "data\\Kontenrahmen.csv";
-        public const string DatenexportPfad = "data\\";
-
         public const string DepartmentFilter = "'01','1'";
 
         public static NumberFormatInfo Zahlenformat = CultureInfo.GetCultureInfo("de-DE").NumberFormat;

+ 10 - 8
Model/DateipfadeXml.cs

@@ -2,15 +2,17 @@
 {
     public class DateipfadeXml
     {
-        public string ConfigPfad = "config\\";
-        public string DataPfad = "data\\";
+        public string Importdaten = "data\\import\\import_{0}_{1}.txt";
 
-        public string ImportPfad = "data\\import\\";
-        public string ExportPfad = "export\\";
+        public string Kontenrahmen = "data\\kontenrahmen.csv";
+        public string UebersetzungSusa = "data\\uebersetzungstabelle.csv";
+        public string UebersetzungStat = "data\\uebersetzungstabelle_stat.csv";
 
-        public string BalanceDatei = "export\\{0}\\export_{0}-{1}_balance.txt";
-        public string AccountsDatei = "export\\{0}\\export_{0}-{1}_accounts.txt";
-        public string LogDatei = "export\\{0}\\export_{0}-{1}.log";
-        public string ProtokollDatei = "export\\{0}\\export_{0}-{1}_protokoll.csv";
+        public string ManuelleKonten = "data\\ManuelleKonten.xml";
+
+        public string ExportBalance = "export\\{0}\\export_{0}-{1}_balance.txt";
+        public string ExportAccounts = "export\\{0}\\export_{0}-{1}_accounts.txt";
+        public string ExportLog = "export\\{0}\\export_{0}-{1}_info.log";
+        public string ExportProtokoll = "export\\{0}\\export_{0}-{1}_protokoll.csv";
     }
 }

+ 23 - 2
Model/GchrConfig.cs

@@ -49,6 +49,8 @@ namespace GCHR.Model
     [XmlRoot("Einstellungen")]
     public class EinstellungenXml
     {
+        public string Haendler = "Autohaus";
+
         public Mandanten Mandantenname;
         public string Eurodatanummer;
 
@@ -67,14 +69,27 @@ namespace GCHR.Model
         public string Hauptmarke;
         public string Hauptbetrieb;
 
-        public string BilanzDepartment;
+        public string BilanzDepartment
+        {
+            get { return null; }
+            set
+            {
+                BilanzMarke = value.Substring(0, 1);
+                BilanzBetrieb = value.Substring(1, 2);
+            }
+        }
+
         public string BilanzMarke = "0";
         public string BilanzBetrieb = "07";
 
         public string BilanzKontoart = "1";
 
         [XmlElement("Geschäftsjahr")]
-        public string Geschaeftsjahr = "01";
+        public string Geschaeftsjahr
+        {
+            get { return _geschaeftsjahr.PadLeft(2, '0'); }
+            set { _geschaeftsjahr = value; }
+        }
 
         [XmlElement("ODBC")]
         public string Odbc;
@@ -96,6 +111,12 @@ namespace GCHR.Model
         public UpdateXml Update;
         public SteuerungsdateienXml Steuerungsdateien;
         public string Verrechnungskonten;
+        private string _geschaeftsjahr;
+
+        public EinstellungenXml()
+        {
+            Geschaeftsjahr = "01";
+        }
     }
 
     [XmlRoot("Update")]

+ 32 - 72
Model/Konfiguration.cs

@@ -1,10 +1,7 @@
 using System;
 using System.Collections.Generic;
-using System.IO;
 using System.Linq;
-using System.Net;
 using System.Text.RegularExpressions;
-using System.Windows;
 using GCHR.Control;
 using GCHR.Control.IO;
 using GCHR.Mandantenschnittstelle;
@@ -18,9 +15,9 @@ namespace GCHR.Model
 
         private static Konfiguration _instance;
 
-        public static Konfiguration CreateInstance(string cfgDatei, string kontenDatei)
+        public static Konfiguration CreateInstance(string cfgDatei)
         {
-            return _instance ?? (_instance = new Konfiguration(cfgDatei, kontenDatei));
+            return _instance ?? (_instance = new Konfiguration(cfgDatei));
         }
 
         public static Konfiguration GetInstance()
@@ -37,16 +34,15 @@ namespace GCHR.Model
         private readonly GchrConfig _gchrConfig;
         private readonly Konten _konten;
         private readonly string _configDatei;
-        private readonly string _kontenDatei;
 
-        public Konfiguration(string cfgDatei, string kontenDatei)
+        public Konfiguration(string cfgDatei)
         {
             _configDatei = cfgDatei;
             _gchrConfig = (GchrConfig)new GchrConfigIO(_configDatei).Laden();
-
-            _kontenDatei = kontenDatei;
-            _konten = (Konten) new KontenIO(_kontenDatei).Laden();
+            _konten = (Konten) new KontenIO(_gchrConfig.Dateipfade.ManuelleKonten).Laden();
             KontenXmlUmsortieren();
+            Periode.Dateipfade = _gchrConfig.Dateipfade;
+            Periode.ErsterMonatImGeschaeftsjahr = _gchrConfig.Einstellungen.Geschaeftsjahr;
         }
 
         private void KontenXmlUmsortieren()
@@ -74,11 +70,19 @@ namespace GCHR.Model
 
         public void ManuelleKontenSpeichern()
         {
-            new KontenIO(_kontenDatei).Speichern(_konten);
+            new KontenIO(_gchrConfig.Dateipfade.ManuelleKonten).Speichern(_konten);
+        }
+
+        public string Haendler
+        {
+            get
+            {
+                return _gchrConfig.Einstellungen.Haendler;
+            }
         }
 
 
-        public string Händlernummer
+        public string Haendlernummer
         {
             get
             {
@@ -189,40 +193,6 @@ namespace GCHR.Model
             }
         }
 
-        public void DateiVonServerHolen(string dateiName)
-        {
-            try
-            {
-                return;
-                var dateiTyp = _gchrConfig.Einstellungen.Steuerungsdateien.Typ;
-                var dateiPfad = _gchrConfig.Einstellungen.Steuerungsdateien.Pfad;
-
-                if (dateiPfad.Equals("")) return;
-
-                if (!dateiPfad.EndsWith("/"))
-                {
-                    dateiPfad += "/";
-                }
-
-                if (dateiTyp.Equals("http"))
-                {
-                    var web = new WebClient();
-                    web.DownloadFile(dateiPfad + dateiName, "data\\" + dateiName);
-                }
-                else if (dateiTyp.Equals("verzeichnis"))
-                {
-                    File.Copy(dateiPfad + dateiName, "data\\" + dateiName);
-                }
-            }
-            catch (Exception e)
-            {
-                var message = string.Format("Beim Laden der Datei '{0}' ist ein Fehler aufgetreten.", dateiName);
-                MessageBox.Show(message, "Fehler");
-                Logger.Info(message);
-                Logger.Info(e.Message);
-            }
-        }
-
         public string JuengstenVormonatBestimmen(string aktPeriode)
         {
             return Array.Find(VorhandenePerioden(), eintrag => String.CompareOrdinal(eintrag, aktPeriode) < 0) ?? aktPeriode;
@@ -305,9 +275,9 @@ namespace GCHR.Model
         {
             queryStr = Regex.Replace(queryStr, @"\<datenbank\>", "");
 
-            queryStr = Regex.Replace(queryStr, @"\<period[e]?\>", HaendlerKonto.AktuellePeriode.ToString());
-            queryStr = Regex.Replace(queryStr, @"\<jahresbeginn\>", HaendlerKonto.AktuellePeriode.Jahresbeginn(Geschaeftsjahr).ToString());
-            queryStr = Regex.Replace(queryStr, @"\<bilanzbeginn\>", HaendlerKonto.AktuellePeriode.Bilanzbeginn(Geschaeftsjahr).ToString());
+            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());
 
             return Regex.Replace(queryStr, @"\<department_filter\>", DepartmentFilter);
         }
@@ -332,39 +302,29 @@ namespace GCHR.Model
             ManuelleKontenSpeichern();
         }
 
-        public string BalanceDatei
+        public string UebersetzungStat
         {
-            get
-            {
-                return string.Format(_gchrConfig.Dateipfade.BalanceDatei, HaendlerKonto.AktuellePeriode.Jahr, HaendlerKonto.AktuellePeriode.Monat);
-            }
+            get { return _gchrConfig.Dateipfade.UebersetzungStat; }
         }
 
-        public string AccountsDatei
+        public string UebersetzungSusa
         {
-            get
-            {
-                return string.Format(_gchrConfig.Dateipfade.AccountsDatei, HaendlerKonto.AktuellePeriode.Jahr, HaendlerKonto.AktuellePeriode.Monat);
-            }
+            get { return _gchrConfig.Dateipfade.UebersetzungSusa; }
         }
 
-        public string LogDatei
+        public string Kontenrahmen
         {
-            get
-            {
-                var datei = string.Format(_gchrConfig.Dateipfade.LogDatei, HaendlerKonto.AktuellePeriode.Jahr, HaendlerKonto.AktuellePeriode.Monat);
-                var info = new FileInfo(datei);
-                if (info.Directory != null) info.Directory.Create();
-                return datei;
-            }
+            get { return _gchrConfig.Dateipfade.Kontenrahmen; }
         }
 
-        public string ProtokollDatei
+        public string ManuelleKonten
         {
-            get
-            {
-                return string.Format(_gchrConfig.Dateipfade.ProtokollDatei, HaendlerKonto.AktuellePeriode.Jahr, HaendlerKonto.AktuellePeriode.Monat);
-            }
+            get { return _gchrConfig.Dateipfade.ManuelleKonten; }
+        }
+
+        public string Importdaten
+        {
+            get { return _gchrConfig.Dateipfade.Importdaten; }
         }
     }
 }

+ 11 - 13
Model/Konto/HaendlerKonto.cs

@@ -8,8 +8,6 @@ namespace GCHR.Model.Konto
     [XmlRoot("Konto")]
     public class HaendlerKonto : IKonto
     {
-        internal static Periode AktuellePeriode = new Periode("200001");
-
         private static int _markeLength = 1;
         private static int _betriebLength = 2;
 
@@ -81,7 +79,7 @@ namespace GCHR.Model.Konto
             get
             {
                 return (KontoTyp == KontoTypen.ManStat)
-                           ? SaldoVon(AktuellePeriode.ToString())
+                           ? SaldoVon(Model.Periode.AktuellePeriode.ToString())
                            : Math.Round(
                                Faktor*
                                (_soll + ZugeordneteKonten.Sum(kto => kto.Soll) +
@@ -235,50 +233,50 @@ namespace GCHR.Model.Konto
         {
             get 
             {
-                var saldo = SaldoSuchen(AktuellePeriode.ToString());
+                var saldo = SaldoSuchen(Model.Periode.AktuellePeriode.ToString());
                 if (saldo != null)
                     return saldo.Soll.ToString(Constants.Zahlenformat);
-                SaldoZuordnen(AktuellePeriode.ToString(), Decimal.Parse(Vormonat1, Constants.Zahlenformat), 0m);
+                SaldoZuordnen(Model.Periode.AktuellePeriode.ToString(), Decimal.Parse(Vormonat1, Constants.Zahlenformat), 0m);
                 return Vormonat1;
             }
             set
             {
-                var saldo = SaldoSuchen(AktuellePeriode.ToString());
+                var saldo = SaldoSuchen(Model.Periode.AktuellePeriode.ToString());
                 if (saldo != null)
                     saldo.Soll = Decimal.Parse(value, Constants.Zahlenformat);
                 else
-                    SaldoZuordnen(AktuellePeriode.ToString(), Decimal.Parse(value, Constants.Zahlenformat), 0m);
+                    SaldoZuordnen(Model.Periode.AktuellePeriode.ToString(), Decimal.Parse(value, Constants.Zahlenformat), 0m);
             }
         }
 
         [XmlIgnore]
         public string Vormonat1
         {
-            get { return SaldoVon(AktuellePeriode.Vormonat(1)).ToString(Constants.Zahlenformat); }
+            get { return SaldoVon(Model.Periode.AktuellePeriode.Vormonat(1)).ToString(Constants.Zahlenformat); }
         }
 
         [XmlIgnore]
         public string Vormonat2
         {
-            get { return SaldoVon(AktuellePeriode.Vormonat(2)).ToString(Constants.Zahlenformat); }
+            get { return SaldoVon(Model.Periode.AktuellePeriode.Vormonat(2)).ToString(Constants.Zahlenformat); }
         }
 
         [XmlIgnore]
         public string Vormonat3
         {
-            get { return SaldoVon(AktuellePeriode.Vormonat(3)).ToString(Constants.Zahlenformat); }
+            get { return SaldoVon(Model.Periode.AktuellePeriode.Vormonat(3)).ToString(Constants.Zahlenformat); }
         }
 
         [XmlIgnore]
         public string Vormonat4
         {
-            get { return SaldoVon(AktuellePeriode.Vormonat(4)).ToString(Constants.Zahlenformat); }
+            get { return SaldoVon(Model.Periode.AktuellePeriode.Vormonat(4)).ToString(Constants.Zahlenformat); }
         }
 
         [XmlIgnore]
         public string Vormonat5
         {
-            get { return SaldoVon(AktuellePeriode.Vormonat(5)).ToString(Constants.Zahlenformat); }
+            get { return SaldoVon(Model.Periode.AktuellePeriode.Vormonat(5)).ToString(Constants.Zahlenformat); }
         }
 
         private decimal Monatssumme (string periode)
@@ -290,7 +288,7 @@ namespace GCHR.Model.Konto
             return (ZugeordneteKonten.Count > 0) ? ZugeordneteKonten.Sum(k => k.Monatssumme(periode)) : 0m;
         }
 
-        public decimal SummeAktuellePeriode { get { return Monatssumme(AktuellePeriode.ToString()); } }
+        public decimal SummeAktuellePeriode { get { return Monatssumme(Model.Periode.AktuellePeriode.ToString()); } }
 
         public string Kontoart { get; set; }
     }

+ 69 - 18
Model/Periode.cs

@@ -1,9 +1,15 @@
 using System;
+using System.Globalization;
 
 namespace GCHR.Model
 {
     public class Periode
     {
+        internal static Periode AktuellePeriode = new Periode("200001");
+
+        public static string ErsterMonatImGeschaeftsjahr { get; set; }
+        public static DateipfadeXml Dateipfade { get; set; }
+
         public string Jahr;
         public string Monat;
         public string JahrZweistellig { get { return Jahr.Substring(2, 2); } }
@@ -24,32 +30,22 @@ namespace GCHR.Model
             _keinJahresabschluss = keinJahresabschluss;
         }
 
-        public Periode Jahresbeginn(string geschaeftsjahr)
+        public Periode Jahresbeginn
         {
-            return Jahresbeginn(geschaeftsjahr, false);
+            get { return Jahresbeginn2(false); }
         }
 
-        public Periode Bilanzbeginn(string geschaeftsjahr)
+        public Periode Bilanzbeginn
         {
-            return Jahresbeginn(geschaeftsjahr, _keinJahresabschluss);
+            get { return Jahresbeginn2(_keinJahresabschluss); }
         }
 
-        private Periode Jahresbeginn(string geschaeftsjahr, bool keinJahresabschluss)
+        private Periode Jahresbeginn2(bool keinJahresabschluss)
         {
-            int ersterMonat; // erster Monat im Geschäftsjahr
-            try
-            {
-                ersterMonat = Int32.Parse(geschaeftsjahr);
-                if (ersterMonat > 12 || ersterMonat < 1) throw new OverflowException("Erster Monat im Geschäftsjahr muss zwischen 1 und 12 sein.");
-            }
-            catch (Exception)
-            {
-                ersterMonat = 1;
-            }
             var aktJahr = Int32.Parse(Jahr);
-            if (Int32.Parse(Monat) < ersterMonat) aktJahr--;
+            if (String.Compare(Monat, ErsterMonatImGeschaeftsjahr, StringComparison.Ordinal) < 0) aktJahr--;
             if (keinJahresabschluss) aktJahr--;
-            return new Periode(aktJahr + ersterMonat.ToString().PadLeft(2, '0'));
+            return new Periode(aktJahr + ErsterMonatImGeschaeftsjahr);
         }
 
 
@@ -64,9 +60,16 @@ namespace GCHR.Model
                 monat += 12;
                 jahr--;
             }
-            return (jahr + monat.ToString().PadLeft(2, '0'));
+            if (monat > 12)
+            {
+                monat -= 12;
+                jahr++;
+            }
+            return (jahr + monat.ToString(CultureInfo.InvariantCulture).PadLeft(2, '0'));
         }
 
+        public Periode Vorgaenger { get { return new Periode(Vormonat(1)); } }
+        public Periode Nachfolger { get { return new Periode(Vormonat(-1)); } }
 
         public override string ToString()
         {
@@ -77,5 +80,53 @@ namespace GCHR.Model
         {
             get { return (Monat + "/" + Jahr); }
         }
+
+
+
+        public string BalanceDatei
+        {
+            get
+            {
+                return String.Format(Dateipfade.ExportBalance, Jahr, Monat);
+            }
+        }
+
+        public string AccountsDatei
+        {
+            get
+            {
+                return String.Format(Dateipfade.ExportAccounts, Jahr, Monat);
+            }
+        }
+
+        public string LogDatei
+        {
+            get
+            {
+                var datei = String.Format(Dateipfade.ExportLog, Jahr, Monat);
+                return datei;
+            }
+        }
+
+        public string ProtokollDatei
+        {
+            get
+            {
+                return String.Format(Dateipfade.ExportProtokoll, Jahr, Monat);
+            }
+        }
+
+        public Ampelstatus Status
+        {
+            get { return Ampelstatus.Gelb; }
+        }
+
+        public string Stand
+        {
+            get { return "20.02.2013"; }
+        }
+
+        public string Info { get { return "Abweichung in Summe: 12.345 €"; } }
+
     }
 }

+ 1 - 1
Properties/AssemblyInfo.cs

@@ -50,5 +50,5 @@ using System.Windows;
 //
 // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern 
 // übernehmen, indem Sie "*" eingeben:
-[assembly: AssemblyVersion("1.34.3.*")]
+[assembly: AssemblyVersion("1.34.17.*")]
 [assembly: AssemblyFileVersion("1.0.0.0")]

+ 19 - 18
View/ManuelleKontenBearbeiten.xaml

@@ -1,8 +1,9 @@
 <Window x:Class="GCHR.View.ManuelleKontenBearbeiten"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-    xmlns:local="clr-namespace:GCHR"
-    x:Name="root"
+    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:konto="clr-namespace:GCHR.Model.Konto" mc:Ignorable="d"
+        x:Name="Root"
     Title="Manuelle Konten bearbeiten" Height="480" Width="780">
 
     <Grid Name="GridManuelle">
@@ -14,7 +15,7 @@
         </Grid.Background>
         <Label Margin="12,12,12,0" VerticalAlignment="Top" Foreground="White">Bitte geben Sie die aktuellen Werte für die manuellen Konten ein:</Label>
 
-        <ListView Name="lvManuelle" Opacity="1.0" Margin="12,36,12,42" Focusable="True" KeyboardNavigation.TabNavigation="Continue" HorizontalContentAlignment="Stretch">
+        <ListView Name="LvManuelle" Opacity="1.0" Margin="12,36,12,42" Focusable="True" KeyboardNavigation.TabNavigation="Continue" HorizontalContentAlignment="Stretch">
             <ListView.ItemContainerStyle>
                 <Style TargetType="{x:Type ListViewItem}">
                     <Setter Property="IsTabStop" Value="False" />
@@ -27,15 +28,15 @@
                 <GridView AllowsColumnReorder="False">
                     <GridViewColumn Width="90" Header="Kontonummer">
                         <GridViewColumn.CellTemplate>
-                            <DataTemplate>
-                                <Label HorizontalContentAlignment="Left" VerticalAlignment="Bottom" Content="{Binding Path=Kontonummer}" FontSize="18" />
+                            <DataTemplate DataType="konto:HaendlerKonto">
+                                <Label HorizontalContentAlignment="Left" VerticalAlignment="Bottom" Content="{Binding Path=Kontonummer}" FontSize="18"/>
                             </DataTemplate>
                         </GridViewColumn.CellTemplate>
                     </GridViewColumn>
                     <GridViewColumn Header="Beschriftung">
                         <GridViewColumn.CellTemplate>
                             <DataTemplate>
-                                <Grid>
+                                <Grid d:DataContext="{d:DesignData HaendlerKonto}">
                                     <Grid.ColumnDefinitions>
                                         <ColumnDefinition />
                                     </Grid.ColumnDefinitions>
@@ -46,11 +47,11 @@
 
                                     <Label HorizontalContentAlignment="Left" Content="{Binding Path=Bezeichnung}" FontSize="12" />
                                     <WrapPanel Grid.Row="1" TextElement.FontSize="9">
-                                        <TextBox HorizontalContentAlignment="Right" IsReadOnly="True" IsTabStop="False" TextAlignment="Right" Width="70" Cursor="Hand" Text="{Binding Path=Vormonat5, Mode=OneWay}" ToolTip="{Binding ElementName=root, Path=Vormonat5, Mode=OneWay}" GotFocus="VormonatGotFocus" />
-                                        <TextBox HorizontalContentAlignment="Right" IsReadOnly="True" IsTabStop="False" TextAlignment="Right" Width="70" Cursor="Hand" Text="{Binding Path=Vormonat4, Mode=OneWay}" ToolTip="{Binding ElementName=root, Path=Vormonat4, Mode=OneWay}" GotFocus="VormonatGotFocus" />
-                                        <TextBox HorizontalContentAlignment="Right" IsReadOnly="True" IsTabStop="False" TextAlignment="Right" Width="70" Cursor="Hand" Text="{Binding Path=Vormonat3, Mode=OneWay}" ToolTip="{Binding ElementName=root, Path=Vormonat3, Mode=OneWay}" GotFocus="VormonatGotFocus" />
-                                        <TextBox HorizontalContentAlignment="Right" IsReadOnly="True" IsTabStop="False" TextAlignment="Right" Width="70" Cursor="Hand" Text="{Binding Path=Vormonat2, Mode=OneWay}" ToolTip="{Binding ElementName=root, Path=Vormonat2, Mode=OneWay}" GotFocus="VormonatGotFocus" />
-                                        <TextBox HorizontalContentAlignment="Right" IsReadOnly="True" IsTabStop="False" TextAlignment="Right" Width="70" Cursor="Hand" Text="{Binding Path=Vormonat1, Mode=OneWay}" ToolTip="{Binding ElementName=root, Path=Vormonat1, Mode=OneWay}" GotFocus="VormonatGotFocus" />
+                                        <TextBox HorizontalContentAlignment="Right" IsReadOnly="True" IsTabStop="False" TextAlignment="Right" Width="70" Cursor="Hand" Text="{Binding Path=Vormonat5, Mode=OneWay}" ToolTip="{Binding ElementName=Root, Path=Vormonat5, Mode=OneWay}" GotFocus="VormonatGotFocus" />
+                                        <TextBox HorizontalContentAlignment="Right" IsReadOnly="True" IsTabStop="False" TextAlignment="Right" Width="70" Cursor="Hand" Text="{Binding Path=Vormonat4, Mode=OneWay}" ToolTip="{Binding ElementName=Root, Path=Vormonat4, Mode=OneWay}" GotFocus="VormonatGotFocus" />
+                                        <TextBox HorizontalContentAlignment="Right" IsReadOnly="True" IsTabStop="False" TextAlignment="Right" Width="70" Cursor="Hand" Text="{Binding Path=Vormonat3, Mode=OneWay}" ToolTip="{Binding ElementName=Root, Path=Vormonat3, Mode=OneWay}" GotFocus="VormonatGotFocus" />
+                                        <TextBox HorizontalContentAlignment="Right" IsReadOnly="True" IsTabStop="False" TextAlignment="Right" Width="70" Cursor="Hand" Text="{Binding Path=Vormonat2, Mode=OneWay}" ToolTip="{Binding ElementName=Root, Path=Vormonat2, Mode=OneWay}" GotFocus="VormonatGotFocus" />
+                                        <TextBox HorizontalContentAlignment="Right" IsReadOnly="True" IsTabStop="False" TextAlignment="Right" Width="70" Cursor="Hand" Text="{Binding Path=Vormonat1, Mode=OneWay}" ToolTip="{Binding ElementName=Root, Path=Vormonat1, Mode=OneWay}" GotFocus="VormonatGotFocus" />
                                     </WrapPanel>
                                 </Grid>                                
                             </DataTemplate>
@@ -58,8 +59,8 @@
                     </GridViewColumn>
                     <GridViewColumn Width="100" Header="Aktuelle Periode">
                         <GridViewColumn.CellTemplate>
-                            <DataTemplate>
-                                <TextBox HorizontalContentAlignment="Right" Text="{Binding Path=Saldo, Mode=TwoWay}" GotFocus="TextBoxGotFocus" TextAlignment="Right" FontSize="12" VerticalAlignment="Bottom" Width="90" />
+                            <DataTemplate DataType="konto:HaendlerKonto">
+                                <TextBox HorizontalContentAlignment="Right" Text="{Binding Path=Saldo, Mode=TwoWay}" GotFocus="TextBoxGotFocus" TextAlignment="Right" FontSize="12" VerticalAlignment="Bottom" Width="90"/>
                             </DataTemplate>
                         </GridViewColumn.CellTemplate>
                     </GridViewColumn>
@@ -75,10 +76,10 @@
         </ListView>
 
         <WrapPanel VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="12,0,12,6">
-            <Button Margin="3" Width="80" Height="24" Template="{DynamicResource GlassButton}" Click="BtnManuelleDruckenClick"  Foreground="White" Name="btnManuelleDrucken">Drucken</Button>
-            <Button Margin="3" Width="80" Height="24" Template="{DynamicResource GlassButton}" Click="BtnManuelleAusblendenClick" Foreground="White" Name="btnManuelleAusblenden">Ausblenden</Button>
-            <Button Margin="3" Width="80" Height="24" Template="{DynamicResource GlassButton}" Click="BtnManuelleIgnorierenClick" Foreground="White" Name="btnManuelleIgnorieren">Ignorieren</Button>
-            <Button Margin="3" Width="80" Height="24" Template="{DynamicResource GlassButton}" Click="BtnManuelleSpeichernClick" Name="btnManuelleSpeichern" Foreground="White">Speichern</Button>
+            <Button Margin="3" Width="80" Height="24" Template="{DynamicResource GlassButton}" Click="BtnManuelleDruckenClick"  Foreground="White" Name="BtnManuelleDrucken">Drucken</Button>
+            <Button Margin="3" Width="80" Height="24" Template="{DynamicResource GlassButton}" Click="BtnManuelleAusblendenClick" Foreground="White" Name="BtnManuelleAusblenden">Ausblenden</Button>
+            <Button Margin="3" Width="80" Height="24" Template="{DynamicResource GlassButton}" Click="BtnManuelleIgnorierenClick" Foreground="White" Name="BtnManuelleIgnorieren">Ignorieren</Button>
+            <Button Margin="3" Width="80" Height="24" Template="{DynamicResource GlassButton}" Click="BtnManuelleSpeichernClick" Name="BtnManuelleSpeichern" Foreground="White">Speichern</Button>
         </WrapPanel>
     </Grid>
 </Window>

+ 14 - 14
View/ManuelleKontenBearbeiten.xaml.cs

@@ -12,11 +12,11 @@ namespace GCHR.View
     {
         delegate void DelAsyncWindowAction();
 
-        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 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 List<HaendlerKonto> ManuelleKonten;
 
@@ -26,7 +26,7 @@ namespace GCHR.View
             ManuelleKonten = (from kto in konten orderby kto.Ebene1, kto.Kontonummer select kto).ToList();
 
             InitializeComponent();
-            lvManuelle.ItemsSource = ManuelleKonten;
+            LvManuelle.ItemsSource = ManuelleKonten;
         }
 
         private void BtnManuelleAusblendenClick(object sender, RoutedEventArgs e)
@@ -36,16 +36,16 @@ namespace GCHR.View
 
         private void BtnManuelleIgnorierenClick(object sender, RoutedEventArgs e)
         {
-            btnManuelleIgnorieren.IsEnabled = false;
-            btnManuelleSpeichern.IsEnabled = false;
+            BtnManuelleIgnorieren.IsEnabled = false;
+            BtnManuelleSpeichern.IsEnabled = false;
 
             Close();
         }
 
         private void BtnManuelleSpeichernClick(object sender, RoutedEventArgs e)
         {
-            btnManuelleIgnorieren.IsEnabled = false;
-            btnManuelleSpeichern.IsEnabled = false;
+            BtnManuelleIgnorieren.IsEnabled = false;
+            BtnManuelleSpeichern.IsEnabled = false;
 
             Close();
         }
@@ -55,10 +55,10 @@ namespace GCHR.View
             DelAsyncWindowAction drucken = delegate
                                                {
                                                    var kontenAktuelleWerte =
-                                                       (List<HaendlerKonto>) lvManuelle.Items.SourceCollection;
+                                                       (List<HaendlerKonto>) LvManuelle.Items.SourceCollection;
                                                        //ItemsSource;
                                                    var kontenVormonatswerte =
-                                                       (List<HaendlerKonto>) lvManuelle.ItemsSource;
+                                                       (List<HaendlerKonto>) LvManuelle.ItemsSource;
                                                    var konten = kontenAktuelleWerte.Join(kontenVormonatswerte,
                                                                                          k1 => k1.Kontonummer,
                                                                                          k2 => k2.Kontonummer,
@@ -79,8 +79,8 @@ namespace GCHR.View
                                                    if (printDialog.ShowDialog() != true) return;
                                                    var paginator =
                                                        new RandomTabularPaginator(
-                                                           HaendlerKonto.AktuellePeriode.ToString(),
-                                                           HaendlerKonto.AktuellePeriode.ToString(), konten,
+                                                           Periode.AktuellePeriode.ToString(),
+                                                           Periode.AktuellePeriode.ToString(), konten,
                                                            new Size(printDialog.PrintableAreaWidth,
                                                                     printDialog.PrintableAreaHeight));