Merge branch 'master' of ssh://float.ownsoft.de/git/beyondSoft/BeWo

This commit is contained in:
2024-10-09 15:56:11 +02:00
46 changed files with 3245 additions and 1478 deletions

View File

@@ -984,6 +984,7 @@
<Compile Include="Converter\BoolVisibilityMultiConverter.cs" />
<Compile Include="Converter\NullableBoolToBoolConverter.cs" />
<Compile Include="Converter\Object2ToStringConverter.cs" />
<Compile Include="Converter\RadioBoolToIntConverter.cs" />
<Compile Include="Converter\TestDebugConverter.cs" />
<Compile Include="Converter\ParticipationBrushConverter.cs" />
<Compile Include="Converter\ArchiveRight2VisibilityConverter.cs" />

View File

@@ -9,7 +9,7 @@
<ErrorReportUrlHistory />
<FallbackCulture>de-DE</FallbackCulture>
<VerifyUploadedFiles>false</VerifyUploadedFiles>
<ProjectView>ShowAllFiles</ProjectView>
<ProjectView>ProjectFiles</ProjectView>
</PropertyGroup>
<PropertyGroup>
<EnableSecurityDebugging>false</EnableSecurityDebugging>

View File

@@ -88,6 +88,7 @@
<conv:DeleteForGoodRight2VisibilityConverter x:Key="DeleteForGoodRight2VisibilityConverter" />
<conv:AnonymizationRight2VisibilityConverter x:Key="AnonymizationRight2VisibilityConverter" />
<conv:GkvState2StringConverter x:Key="GkvState2StringConverter" />
<conv:RadioBoolToIntConverter x:Key="RadioBoolToIntConverter" />
<conv:EnumTranslationConverter x:Key="EnumTranslationConverter" />
<Style x:Key="SupportConceptDetailStyle" TargetType="{x:Type ListBoxItem}">

View File

@@ -19,12 +19,18 @@ namespace BeWo.Converter
{
return v;
}
// RE:
// EnumTranslationConverter, aber betrachtet nicht alle?
// Brauche hier eig nur EnumTranslations.Gkv2Translation
if (EnumTranslations.AllTranslations.TryGetValue(e, out string vv))
{
return vv;
}
return e;
}
return null;
throw new NotImplementedException();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)

View File

@@ -22,6 +22,7 @@ namespace BeWo.Converter
{
case GkvState.NoSend: return "Erstellt";
case GkvState.Waiting: return "Gesendet";
case GkvState.Waiting4Urbelege: return "Urbelege per Post";
case GkvState.Error: return "Fehler";
case GkvState.ErrorFatal: return "Fataler Fehler";
case GkvState.Paid: return "Bezahlt";

View File

@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
namespace BeWo.Converter
{
public class RadioBoolToIntConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value?.Equals(int.Parse(parameter.ToString()));
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value?.Equals(true) == true ? int.Parse(parameter.ToString()) : Binding.DoNothing;
}
}
}

View File

@@ -11,7 +11,8 @@ namespace BeWo
SimpleAutoLogin,
FeatureCustomerWohnhilfe,
FeatureWohnheimWohneinheit,
FeatureAuswertungenQuittierungsbelege
FeatureAuswertungenQuittierungsbelege,
FeatureDakota
}
public class DebugConfig
@@ -77,5 +78,13 @@ namespace BeWo
AutoLogin = true,
SelectView = UIContext.Report
};
public static DebugConfig Feature_Dakota => new DebugConfig()
{
DebugConfigMode = DebugConfigMode.FeatureDakota,
AutoLogin = true,
SelectView = UIContext.Finance,
SelectIndex = 8
};
}
}

View File

@@ -61,7 +61,7 @@ namespace BeWo
//proxy anmeldedaten
public string proxyname;
public string proxyUsername;
public string proxypasswd;
public string proxypasswd;
private List<BeWoProfile> _ProfileList;
public List<BeWoProfile> ProfileList
@@ -69,7 +69,7 @@ namespace BeWo
get { return _ProfileList; }
set { _ProfileList = value; }
}
public LoginControl()
{
InitializeComponent();
@@ -77,24 +77,24 @@ namespace BeWo
DateTime dt = new DateTime(2017, 1, 1);
if (DateTime.Now > dt)
dt = DateTime.Now;
txtCopyright.Text = String.Format("Copyright {0:yyyy} | ownSoft GmbH", dt);
var checkPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\profiles.txt";
if (File.Exists(checkPath))
{
//Nimm lokalen Profilpfad wenn er existiert. Wird z.B. bei Kunden mit Citrix Server genutzt, die keine Clickonce Installation vornehmen
_ProfilesFilePath = checkPath;
}
else
{
_ProfilesFilePath = Path.Combine(BeWoApp.GetAndCreateUserAppDataPath(), "profiles.txt");
}
if (File.Exists(checkPath))
{
//Nimm lokalen Profilpfad wenn er existiert. Wird z.B. bei Kunden mit Citrix Server genutzt, die keine Clickonce Installation vornehmen
_ProfilesFilePath = checkPath;
}
else
{
_ProfilesFilePath = Path.Combine(BeWoApp.GetAndCreateUserAppDataPath(), "profiles.txt");
}
_ConfigFilePath = Path.Combine(BeWoApp.GetAndCreateUserAppDataPath(), "bwp.config");
ProfileList = new List<BeWoProfile>();
BeWoProfile selectedProfile = null;
BeWoProfile selectedProfile = null;
HeightFrom = gridLogin.Height;
HeightTo = gridLogin.Height + 64;
LineYCoordFrom = linkLine.Y1;
@@ -102,31 +102,31 @@ namespace BeWo
DataContext = this;
ReadProxyName();
try
{
ReadProfileList();
ReadProfileList();
#if DEBUG
var uri = new Uri("https://localhost/Host/?k=demo&s=localhost/service");
var paramDic = BeWoUtils.ParseQuery(uri.Query);
string v1, v2;
paramDic.TryGetValue("k", out v1);
paramDic.TryGetValue("s", out v2);
BeWoApp.Tenant = v1;
BeWoApp.ServerName = v2;
if (ProfileList.Count > 0)
ProfileList.Insert(0, new BeWoProfile(v1, v2, BeWoApp.Tenant));
else
ProfileList.Add(new BeWoProfile(v1, v2, BeWoApp.Tenant));
SaveProfileListToFile();
var paramDic = BeWoUtils.ParseQuery(uri.Query);
string v1, v2;
paramDic.TryGetValue("k", out v1);
paramDic.TryGetValue("s", out v2);
BeWoApp.Tenant = v1;
BeWoApp.ServerName = v2;
if (ProfileList.Count > 0)
ProfileList.Insert(0, new BeWoProfile(v1, v2, BeWoApp.Tenant));
else
ProfileList.Add(new BeWoProfile(v1, v2, BeWoApp.Tenant));
SaveProfileListToFile();
#else
@@ -171,29 +171,29 @@ namespace BeWo
}
#endif
}
}
catch (Exception ex)
{
}
//string ipaddress = "";
// --------------
}
//string ipaddress = "";
// --------------
if (ProfileList.Count == 0 || String.IsNullOrEmpty(ProfileList[0].Tenant))
ShowEnterTenantDialog();
ShowEnterTenantDialog();
//if (ProfileList.Count == 0)
//ProfileList.Add(new BeWoProfile("Ungültiges Profil", "Bitte geben Sie hier einen gültigen Server an. Z.B. app1", "Kundennummer"));
BeWoProfile firstProfile = null;
if (ProfileList.Count > 0)
firstProfile = ProfileList[0];
ProfileList.Sort((a, b) => a.Name.CompareTo(b.Name));
profileSelectionComboBox.ItemsSource = ProfileList;
//ProfileList.Add(new BeWoProfile("Ungültiges Profil", "Bitte geben Sie hier einen gültigen Server an. Z.B. app1", "Kundennummer"));
BeWoProfile firstProfile = null;
if (ProfileList.Count > 0)
firstProfile = ProfileList[0];
ProfileList.Sort((a, b) => a.Name.CompareTo(b.Name));
profileSelectionComboBox.ItemsSource = ProfileList;
if (ProfileList.Count > 0)
{
#if DEBUG
@@ -207,10 +207,10 @@ namespace BeWo
selectedProfile = firstProfile;
}
}
//if (profileSelectionComboBox.SelectedItem == null)
profileSelectionComboBox.SelectedItem = selectedProfile;
profileSelectionComboBox.SelectedItem = selectedProfile;
TextBox_Username.Focus();
@@ -218,9 +218,9 @@ namespace BeWo
{
TextBox_Username.Text = "demo";
PasswordBox_Password.Password = "demo";
}
//this.lblTenant.Content = BeWoApp.Tenant;
lblVersion.Content = BeWoApp.Version;
@@ -233,9 +233,9 @@ namespace BeWo
//linkLine.Margin = new Thickness(linkLine.Margin.Left, linkLine.Margin.Top + 25, linkLine.Margin.Right, linkLine.Margin.Bottom);
//gridLogin.Height += 25;
}
private void PinCertificate()
{
@@ -265,7 +265,7 @@ namespace BeWo
{
if (certificate == null || chain == null)
return false;
bool chainContainsPk = false;
foreach (var element in chain.ChainElements)
@@ -458,7 +458,7 @@ namespace BeWo
while (!myFile.EndOfStream)
{
var data = myFile.ReadLine();
if (!String.IsNullOrEmpty(data))
{
if (data.Contains("selected"))
@@ -484,65 +484,65 @@ namespace BeWo
}
catch (Exception e)
{
}
return null;
}
private void ReadProfileList()
{
try
{
if (File.Exists(_ProfilesFilePath))
{
var myFile = new StreamReader(_ProfilesFilePath, Encoding.Default);
{
try
{
if (File.Exists(_ProfilesFilePath))
{
var myFile = new StreamReader(_ProfilesFilePath, Encoding.Default);
while (!myFile.EndOfStream)
{
var data = myFile.ReadLine()?.Split('|');
while (!myFile.EndOfStream)
{
var data = myFile.ReadLine()?.Split('|');
if (data?.Length >= 3)
{
if (!String.IsNullOrEmpty(data[1]) && !String.IsNullOrEmpty(data[2]))
ProfileList.Add(new BeWoProfile(data[0], data[1], data[2]));
}
}
myFile.Close();
}
if (data?.Length >= 3)
{
if (!String.IsNullOrEmpty(data[1]) && !String.IsNullOrEmpty(data[2]))
ProfileList.Add(new BeWoProfile(data[0], data[1], data[2]));
}
}
myFile.Close();
}
}
catch (Exception e)
{
}
}
catch (Exception e)
{
}
}
private string GetNumericServerName(string serverName)
{
if (!String.IsNullOrEmpty(serverName))
{
int snOut = 0;
if (!Int32.TryParse(serverName, out snOut))
{
String nname = serverName.Replace("app", "");
if (nname.IndexOf('.') > 0)
{
return nname.Substring(0, nname.IndexOf('.'));
}
}
}
return serverName;
}
private string GetNumericServerName(string serverName)
{
if (!String.IsNullOrEmpty(serverName))
{
int snOut = 0;
if (!Int32.TryParse(serverName, out snOut))
{
String nname = serverName.Replace("app", "");
if (nname.IndexOf('.') > 0)
{
return nname.Substring(0, nname.IndexOf('.'));
}
}
}
return serverName;
}
private void ShowEnterTenantDialog()
{
BeWoProfile p = null;
var cancel = false;
var tenant = String.Empty;
while (p == null && !cancel)
{
var dlg = new EnterTenantDialog {Tenant = tenant};
var dlg = new EnterTenantDialog { Tenant = tenant };
var result = dlg.ShowDialog();
if (result.HasValue && result.Value)
{
@@ -551,14 +551,14 @@ namespace BeWo
{
tenant = tenant.Trim();
}
var server = GetServerFromTenant(tenant);
var server = GetServerFromTenant(tenant);
if (!String.IsNullOrEmpty(server))
{
p = new BeWoProfile(tenant, server, tenant);
if (ProfileList.Count > 0)
ProfileList.Insert(0, p);
else
ProfileList.Add(p);
if (ProfileList.Count > 0)
ProfileList.Insert(0, p);
else
ProfileList.Add(p);
SaveProfileListToFile();
}
else
@@ -574,14 +574,14 @@ namespace BeWo
}
private string GetServerFromTenant(string tenant)
{
try
{
if (tenant == "demo")
{
return "app1.bewoplaner.de";
}
private string GetServerFromTenant(string tenant)
{
try
{
if (tenant == "demo")
{
return "app1.bewoplaner.de";
}
//Server URL über Kundennummer:
//https://bewoplaner.beyondsoft.de/getserver.php?CustomerID=1234567890
@@ -590,28 +590,28 @@ namespace BeWo
//https://bewoplaner.beyondsoft.de/getcontractstate.php?CustomerID=1234567890
String url = String.Format(GETSERVER_URL, tenant);
using (WebClient client = new WebClient())
{
//MessageBox.Show(hostAddress);
byte[] response = client.UploadValues(url, "POST", new NameValueCollection());
using (WebClient client = new WebClient())
{
//MessageBox.Show(hostAddress);
byte[] response = client.UploadValues(url, "POST", new NameValueCollection());
String server = System.Text.Encoding.ASCII.GetString(response);
String server = System.Text.Encoding.ASCII.GetString(response);
return server;
}
}
catch (Exception ex)
{
//MessageBox.Show(String.Format("Fehler beim Prüfen der Kundennummer: {0}\n\n{1}", ex.Message, ex.StackTrace));
return null;
}
return server;
}
}
catch (Exception ex)
{
//MessageBox.Show(String.Format("Fehler beim Prüfen der Kundennummer: {0}\n\n{1}", ex.Message, ex.StackTrace));
return null;
}
return null;
}
return null;
}
private BeWoProfile GenerateProfileFromUri(Uri uri)
{
@@ -711,10 +711,12 @@ namespace BeWo
TextBox_Username.Focus();
}
if(DebugConfig.CurrentConfig is object && DebugConfig.CurrentConfig.AutoLogin)
#if DEBUG
if (DebugConfig.CurrentConfig is object && DebugConfig.CurrentConfig.AutoLogin)
{
button_login_Click(this, new RoutedEventArgs());
}
#endif
}
private void ShowModalBackground()
@@ -732,43 +734,43 @@ namespace BeWo
private void button_login_Click(object sender, RoutedEventArgs e)
{
if (!String.IsNullOrEmpty(proxyname))
{
var webProxy = WebProxy.GetDefaultProxy();
webProxy.UseDefaultCredentials = true;
System.Net.WebRequest.DefaultWebProxy = new WebProxy(proxyname, true);
if (!String.IsNullOrEmpty(proxyname))
{
var webProxy = WebProxy.GetDefaultProxy();
webProxy.UseDefaultCredentials = true;
System.Net.WebRequest.DefaultWebProxy = new WebProxy(proxyname, true);
if (String.IsNullOrEmpty(proxyUsername))
{
WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;
}
else
{
WebRequest.DefaultWebProxy.Credentials = new NetworkCredential(proxyUsername, proxypasswd);
}
}
if (String.IsNullOrEmpty(proxyUsername))
{
WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;
}
else
{
WebRequest.DefaultWebProxy.Credentials = new NetworkCredential(proxyUsername, proxypasswd);
}
}
if (ProfileList.Count == 0 || profileSelectionComboBox.SelectedItem == null)
{
MessageBox.Show(
"Es wurde kein gültiges Profil gefunden. Bitte erstellen Sie zunächst ein Profil. Klicken Sie dazu auf 'Erweitert' und anschließend auf den Button 'Profile bearbeiten'",
"Ungültiges Profil", MessageBoxButton.OK, MessageBoxImage.Warning);
}
else
{
var profile = profileSelectionComboBox.SelectedItem as BeWoProfile;
if (ProfileList.Count == 0 || profileSelectionComboBox.SelectedItem == null)
{
MessageBox.Show(
"Es wurde kein gültiges Profil gefunden. Bitte erstellen Sie zunächst ein Profil. Klicken Sie dazu auf 'Erweitert' und anschließend auf den Button 'Profile bearbeiten'",
"Ungültiges Profil", MessageBoxButton.OK, MessageBoxImage.Warning);
}
else
{
var profile = profileSelectionComboBox.SelectedItem as BeWoProfile;
isNet45OrNewer = IsNet45OrNewer();
isNet45OrNewer = IsNet45OrNewer();
if (!isNet45OrNewer)
{
if (!CheckStatusMessage(String.Format(GETNETMESSAGE_URL, profile.Tenant, BeWoApp.ShortVersion)))
{
return;
}
}
if (!isNet45OrNewer)
{
if (!CheckStatusMessage(String.Format(GETNETMESSAGE_URL, profile.Tenant, BeWoApp.ShortVersion)))
{
return;
}
}
#if DEBUG
if (!CheckStatusMessage(String.Format(GETSTATUSMESSAGE_URL + "&pre", profile.Tenant, BeWoApp.ShortVersion)))
@@ -784,30 +786,30 @@ namespace BeWo
ChangeServerAndTenant(profile);
var lWaitLayer = new WaitLayer2();
grid_root.Children.Add(lWaitLayer);
var lWaitLayer = new WaitLayer2();
grid_root.Children.Add(lWaitLayer);
string lUserName = TextBox_Username.Text;
string lPassword = PasswordBox_Password.Password;
string lPIN = PINTextBox.Text;
string lTenant = BeWoApp.Tenant;
if (!String.IsNullOrEmpty(lPIN))
{
lPIN += "_" + System.Environment.MachineName;
}
Action<WaitLayer2, String, String, String, String> action = Login;
action.BeginInvoke(lWaitLayer, lUserName, lPassword, lTenant, lPIN, cb => {}, null);
}
string lUserName = TextBox_Username.Text;
string lPassword = PasswordBox_Password.Password;
string lPIN = PINTextBox.Text;
string lTenant = BeWoApp.Tenant;
if (!String.IsNullOrEmpty(lPIN))
{
lPIN += "_" + System.Environment.MachineName;
}
Action<WaitLayer2, String, String, String, String> action = Login;
action.BeginInvoke(lWaitLayer, lUserName, lPassword, lTenant, lPIN, cb => { }, null);
}
}
private void Login(WaitLayer2 lWaitLayer, String lUserName, String lPassword, String lTenant, String lPIN)
{
{
try
{
//1. Versuch
UserValidationResult result = TryLogin(lWaitLayer, lUserName, lPassword, lTenant, lPIN );
UserValidationResult result = TryLogin(lWaitLayer, lUserName, lPassword, lTenant, lPIN);
//2. Versuch
if (result == UserValidationResult.UnkownError)
@@ -815,7 +817,7 @@ namespace BeWo
ServiceFacade.DoOperationsServiceAsync(op => op.ResetTenant(lTenant),
delegate
{
result = TryLogin(lWaitLayer ,lUserName, lPassword, lTenant, lPIN);
result = TryLogin(lWaitLayer, lUserName, lPassword, lTenant, lPIN);
if (result == UserValidationResult.UnkownError)
{
@@ -823,7 +825,7 @@ namespace BeWo
ServiceFacade.DoOperationsServiceAsync(op => op.ResetAllTenants(),
delegate
{
result = TryLogin(lWaitLayer,lUserName, lPassword, lTenant, lPIN);
result = TryLogin(lWaitLayer, lUserName, lPassword, lTenant, lPIN);
if (result == UserValidationResult.UnkownError)
{
@@ -862,37 +864,37 @@ namespace BeWo
MessageBox.Show("Die Kundennummer '" + lTenant + "' ist ungültig.", "Fehler bei der Anmeldung", MessageBoxButton.OK, MessageBoxImage.Exclamation);
});
}
String pin = lPIN;
if (!String.IsNullOrEmpty(lPIN) && lPIN.IndexOf('_') >= 0)
{
pin = lPIN.Substring(0, lPIN.IndexOf('_'));
}
String pin = lPIN;
if (result == UserValidationResult.IncorrectPin)
{
this.Dispatch(delegate
{
grid_root.Children.Remove(lWaitLayer);
MessageBox.Show("Die Pin '" + pin + "' ist unbekannt!", "Fehler bei der Anmeldung", MessageBoxButton.OK, MessageBoxImage.Exclamation);
});
}
if (result == UserValidationResult.PinAlreadyUsed)
{
this.Dispatch(delegate
{
grid_root.Children.Remove(lWaitLayer);
MessageBox.Show("Die Pin '" + pin + "' wurde bereits verwendet!", "Fehler bei der Anmeldung", MessageBoxButton.OK, MessageBoxImage.Exclamation);
});
}
if (result == UserValidationResult.PinExpired)
{
this.Dispatch(delegate
{
grid_root.Children.Remove(lWaitLayer);
MessageBox.Show("Die Pin '" + pin + "' ist bereits abgelaufen!", "Fehler bei der Anmeldung", MessageBoxButton.OK, MessageBoxImage.Exclamation);
});
}
if (!String.IsNullOrEmpty(lPIN) && lPIN.IndexOf('_') >= 0)
{
pin = lPIN.Substring(0, lPIN.IndexOf('_'));
}
if (result == UserValidationResult.IncorrectPin)
{
this.Dispatch(delegate
{
grid_root.Children.Remove(lWaitLayer);
MessageBox.Show("Die Pin '" + pin + "' ist unbekannt!", "Fehler bei der Anmeldung", MessageBoxButton.OK, MessageBoxImage.Exclamation);
});
}
if (result == UserValidationResult.PinAlreadyUsed)
{
this.Dispatch(delegate
{
grid_root.Children.Remove(lWaitLayer);
MessageBox.Show("Die Pin '" + pin + "' wurde bereits verwendet!", "Fehler bei der Anmeldung", MessageBoxButton.OK, MessageBoxImage.Exclamation);
});
}
if (result == UserValidationResult.PinExpired)
{
this.Dispatch(delegate
{
grid_root.Children.Remove(lWaitLayer);
MessageBox.Show("Die Pin '" + pin + "' ist bereits abgelaufen!", "Fehler bei der Anmeldung", MessageBoxButton.OK, MessageBoxImage.Exclamation);
});
}
if (result == UserValidationResult.PasswordExpired)
{
//this.Dispatch(delegate
@@ -919,7 +921,7 @@ namespace BeWo
private UserValidationResult TryLogin(WaitLayer2 lWaitLayer, string lUserName, string lPassword, string tenant, string lPin)
{
UserValidationResult? result = null;
if (!string.IsNullOrEmpty(lUserName) && !string.IsNullOrEmpty(lPassword))
{
String tempUsername = lUserName;
@@ -945,7 +947,7 @@ namespace BeWo
clr = e.Message;
}
tempUsername = String.Format("{0}//Version={1};CLRVersion={2};BeWoVersion={3};IsNet45OrNewer={4}", lUserName, version, clr, bewoVersion, isNet45OrNewer);
try
{
@@ -953,7 +955,7 @@ namespace BeWo
{
try
{
return s.IsUserValid(tempUsername, lPassword, lPin);
return s.IsUserValid(tempUsername, lPassword, lPin);
}
catch (Exception)
{
@@ -969,7 +971,7 @@ namespace BeWo
LoginResult(lWaitLayer, r, lUserName, lPassword, tenant, lPin);
});
}, true);
}
catch (FaultException<BeWoFault>)
@@ -979,7 +981,7 @@ namespace BeWo
}
else
{
if(result == null)
if (result == null)
result = UserValidationResult.UserUnknown;
}
@@ -991,9 +993,9 @@ namespace BeWo
return result.Value;
}
private void LoginResult( WaitLayer2 lWaitLayer, UserValidationResult result, String lUserName, String lPassword, String tenant, String lPIN)
private void LoginResult(WaitLayer2 lWaitLayer, UserValidationResult result, String lUserName, String lPassword, String tenant, String lPIN)
{
if (result == UserValidationResult.UserValid || result == UserValidationResult.UserValidTwoFactorAuthenticationNeeded || result == UserValidationResult.TwoFactorAuthenticationFailedNoChatCodeAllowLogin)
{
if (result == UserValidationResult.UserValidTwoFactorAuthenticationNeeded || result == UserValidationResult.TwoFactorAuthenticationFailedNoChatCodeAllowLogin)
@@ -1010,7 +1012,7 @@ namespace BeWo
message = Translator.Translate("Kein Chat Code für die Zwei Faktor Authentifizierung gefunden");
dlg.ShowCodeField = false;
}
if (message.Contains("<") && message.Contains(">"))
{
dlg.SetXaml(message);
@@ -1036,14 +1038,14 @@ namespace BeWo
BeWoApp.UserName = lUserName;
BeWoApp.UserPassword = lPassword;
BeWoApp.PasswortStrength = BeWoUtils.CheckPasswordSecurity(lPassword);
ServiceFacade.DoUserServiceAsync(s2 => s2.LoadUserByNameAndPassword(lUserName, lPassword),
r2 =>
{
BeWoApp.LoggedOnUser = r2;
ServiceFacade.DoOperationsServiceAsync(s => s.GetMandator(),
m =>
{
@@ -1078,7 +1080,7 @@ namespace BeWo
}
grid_root.Children.Remove(lWaitLayer);
MessageBox.Show(msg, "Fehler bei der Anmeldung", MessageBoxButton.OK, MessageBoxImage.Exclamation);
var pav = new PasswortAenderungsView();
pav.ShowDialog();
@@ -1086,7 +1088,8 @@ namespace BeWo
{
}
else {
else
{
LoginSuccessful?.Invoke(this, new EventArgs());
}
});
@@ -1153,14 +1156,14 @@ namespace BeWo
}
private void button_configureProxy_Click(object sender, RoutedEventArgs rea)
{
private void button_configureProxy_Click(object sender, RoutedEventArgs rea)
{
ProxyLoginView proxyLogin = new ProxyLoginView();
proxyLogin.WindowStartupLocation = WindowStartupLocation.CenterScreen;
proxyLogin.ShowDialog();
ReadProxyName();
}
proxyLogin.WindowStartupLocation = WindowStartupLocation.CenterScreen;
proxyLogin.ShowDialog();
ReadProxyName();
}
// TODO: Verschlüsselung einbauen!
private void ReadProxyName()
@@ -1171,15 +1174,15 @@ namespace BeWo
try
{
var filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\proxy.dat";
if (!File.Exists(filePath))
{
filePath = Path.Combine(BeWoApp.GetAndCreateUserAppDataPath(), "proxy.dat");
}
var filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\proxy.dat";
if (!File.Exists(filePath))
{
filePath = Path.Combine(BeWoApp.GetAndCreateUserAppDataPath(), "proxy.dat");
}
var allLines = File.ReadAllLines(filePath);
foreach(var linex in allLines)
foreach (var linex in allLines)
{
var decryptedLine = EncryptionUtils.DecryptString(linex);
datai[counter] = decryptedLine;
@@ -1195,20 +1198,22 @@ namespace BeWo
//}
//file.Close();
proxyname = datai[0];
proxyUsername = datai[1];
proxypasswd = datai[2];
proxyTextBox.Text = proxyname;
}catch(IOException i){
}
catch (IOException i)
{
//Fehlermeldung
}
}
private void SaveSelectedProfile(BeWoProfile profile)
{
try
@@ -1217,7 +1222,7 @@ namespace BeWo
{
#if DEBUG
sw.WriteLine("selected={0}|{1}|{2}", profile.Name, profile.Server, profile.Tenant);
#else
if (profile.Tenant != "demo")
{
@@ -1297,26 +1302,26 @@ namespace BeWo
}
profile.Tenant = profile.Tenant.Trim();
//if (BeWoApp.Tenant == "7635986435")
//{
// if (profile.Server != "3")
// {
// profile.Server = "3";
// SaveProfileListToFile();
// }
//}
//if (BeWoApp.Tenant == "7635986435")
//{
// if (profile.Server != "3")
// {
// profile.Server = "3";
// SaveProfileListToFile();
// }
var server = GetServerFromTenant(profile.Tenant);
if (!String.IsNullOrEmpty(server) && server != profile.Server)
{
profile.Server = server;
SaveProfileListToFile();
}
//}
BeWoApp.Tenant = profile.Tenant;
BeWoApp.ServerName = GetNumericServerName(profile.Server);
var server = GetServerFromTenant(profile.Tenant);
if (!String.IsNullOrEmpty(server) && server != profile.Server)
{
profile.Server = server;
SaveProfileListToFile();
}
BeWoApp.Tenant = profile.Tenant;
BeWoApp.ServerName = GetNumericServerName(profile.Server);
BeWoApp.ServerAddress = profile.Server;
#if DEBUG
@@ -1337,15 +1342,15 @@ namespace BeWo
"Ungültiges Profil", MessageBoxButton.OK, MessageBoxImage.Warning);
}
}
private void ShowProfileStackPanel(object sender, RoutedEventArgs e)
{
if (profileLabel.Visibility == Visibility.Visible)
{
profileLabel.Visibility = Visibility.Collapsed;
profileStackPanel.Visibility = Visibility.Collapsed;
proxyLabel.Visibility = Visibility.Collapsed;
proxyStackPanel.Visibility = Visibility.Collapsed;
proxyLabel.Visibility = Visibility.Collapsed;
proxyStackPanel.Visibility = Visibility.Collapsed;
}
}
@@ -1401,8 +1406,8 @@ namespace BeWo
showProfileSelectionBtn.Content = "Ausblenden";
profileLabel.Visibility = Visibility.Visible;
profileStackPanel.Visibility = Visibility.Visible;
proxyLabel.Visibility = Visibility.Visible;
proxyStackPanel.Visibility = Visibility.Visible;
proxyLabel.Visibility = Visibility.Visible;
proxyStackPanel.Visibility = Visibility.Visible;
}
else
{
@@ -1425,17 +1430,17 @@ namespace BeWo
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
private bool pwvViewOffen;
private void PasswortVergessenLinkOnRequestNavigate(object sender, RequestNavigateEventArgs e)
{
if (pwvViewOffen) return;
private bool pwvViewOffen;
private void PasswortVergessenLinkOnRequestNavigate(object sender, RequestNavigateEventArgs e)
{
if (pwvViewOffen) return;
var p = new PwVergessenView();
p.Closed += (s, ex) => { pwvViewOffen = false; };
p.Show();
var p = new PwVergessenView();
p.Closed += (s, ex) => { pwvViewOffen = false; };
p.Show();
pwvViewOffen = true;
}
pwvViewOffen = true;
}
private void UIElement_OnKeyDown(object sender, KeyEventArgs e)
{
@@ -1445,7 +1450,7 @@ namespace BeWo
{
PinEinblenden();
}
}
}
@@ -1476,8 +1481,8 @@ namespace BeWo
Name = pname;
Server = pserver;
Tenant = ptenant;
if (Name == null)
Name = String.Empty;
if (Name == null)
Name = String.Empty;
if (!String.IsNullOrEmpty(Tenant))
{
Tenant = Tenant.Trim();

View File

@@ -50,7 +50,8 @@ namespace BeWo
Wohnheim,
Vertretungen,
CustomerTeam,
Scheduling
Scheduling,
Finance
}
public partial class MainControl
@@ -295,6 +296,9 @@ namespace BeWo
case UIContext.Scheduling:
view = new SchedulingMasterView();
break;
case UIContext.Finance:
view = new FinanceView();
break;
}
_Views[uiContext] = view;
}
@@ -901,7 +905,7 @@ namespace BeWo
{
if (DoSaveCheck())
{
NavigateTo(new FinanceView());
NavigateTo(GetViewForUIContext(UIContext.Finance));
}
}

View File

@@ -36,11 +36,11 @@ namespace BeWo.View
return beWoWindow;
}
public static BeWoWindow GetGkvAbrechnungDetailWindow(GkvAbrechnungVM vM, double height = 600, double width = 1200)
public static BeWoWindow GetGkvAbrechnungDetailWindow(GkvAbrechnungVM vM, double height = 800, double width = 600)
{
var detail = new GkvAbrechnungDetailControl(vM);
var beWoWindow = GetGenericBeWoWindow("GKV-Abrechnung Nr. " + vM.GkvAbrechnungOid + ": Details", 100, height, 1000, 100, width, 1600);
var beWoWindow = GetGenericBeWoWindow("GKV-Abrechnung Nr. " + vM.GkvAbrechnungOid + ": Details", 100, height, 1000, 400, width, 1600);
beWoWindow.GroupBoxContent = detail;
return beWoWindow;

View File

@@ -1,143 +1,452 @@
<UserControl x:Class="BeWo.View.Controls.GkvAbrechnungDetailControl"
xmlns:markup="clr-namespace:BeWo.MultiLanguage.Markup"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:BeWo.View.Controls"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
mc:Ignorable="d">
<UserControl
x:Class="BeWo.View.Controls.GkvAbrechnungDetailControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
xmlns:local="clr-namespace:BeWo.View.Controls"
xmlns:markup="clr-namespace:BeWo.MultiLanguage.Markup"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewmodel="clr-namespace:BeWo.ViewModel"
d:DataContext="{d:DesignInstance Type=viewmodel:GkvAbrechnungVM}"
mc:Ignorable="d">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TabControl Background="#eeeeee" BorderThickness="0">
<TabItem Header="Allgemein">
<Grid Background="#eeeeee" Margin="0" HorizontalAlignment="Stretch" MaxWidth="700">
<Grid
MaxWidth="700"
Margin="0"
HorizontalAlignment="Stretch"
Background="#eeeeee">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="3*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Label Grid.Row="0" Grid.Column="0" Margin="3" Content="GKV-Abrechnung Nr.:"/>
<TextBox Grid.Row="0" Grid.Column="2" Margin="3" IsReadOnly="True" Text="{Binding GkvAbrechnungOid}"/>
<Label Grid.Row="5" Grid.Column="0" Margin="3" Content="Abrechnungsbeginn:"/>
<TextBox Grid.Row="5" Grid.Column="2" Margin="3" IsReadOnly="True" Text="{Binding AbrechnungsZeitraumStart}"/>
<Label Grid.Row="6" Grid.Column="0" Margin="3" Content="Abrechnungsende:"/>
<TextBox Grid.Row="6" Grid.Column="2" Margin="3" IsReadOnly="True" Text="{Binding AbrechnungsZeitraumEnde}"/>
<Label Grid.Row="9" Grid.Column="0" Margin="3" Content="Erstellt am:"/>
<TextBox Grid.Row="9" Grid.Column="2" Margin="3" IsReadOnly="True" Text="{Binding ErstelltAm}"/>
<Label Grid.Row="14" Grid.Column="0" Margin="3" Content="Betrag:"/>
<TextBox Grid.Row="14" Grid.Column="2" Margin="3" IsReadOnly="True" Text="{Binding Betrag, StringFormat={}{0:0.00 €}}"/>
<Label Grid.Row="15" Grid.Column="0" Margin="3" Content="Bezahlt:"/>
<CheckBox Grid.Row="15" Grid.Column="2" Margin="3" HorizontalAlignment="Left" x:Name="Checkbox_Bezahlt" IsChecked="{Binding Bezahlt}"/>
<Label
Grid.Row="0"
Grid.Column="0"
Margin="3"
Content="GKV-Abrechnung Nr.:" />
<TextBox
Grid.Row="0"
Grid.Column="2"
Margin="3"
IsReadOnly="True"
Text="{Binding GkvAbrechnungOid}" />
<Label
Grid.Row="5"
Grid.Column="0"
Margin="3"
Content="Abrechnungsbeginn:" />
<TextBox
Grid.Row="5"
Grid.Column="2"
Margin="3"
IsReadOnly="True"
Text="{Binding AbrechnungsZeitraumStart}" />
<Label
Grid.Row="6"
Grid.Column="0"
Margin="3"
Content="Abrechnungsende:" />
<TextBox
Grid.Row="6"
Grid.Column="2"
Margin="3"
IsReadOnly="True"
Text="{Binding AbrechnungsZeitraumEnde}" />
<Label
Grid.Row="9"
Grid.Column="0"
Margin="3"
Content="Erstellt am:" />
<TextBox
Grid.Row="9"
Grid.Column="2"
Margin="3"
IsReadOnly="True"
Text="{Binding ErstelltAm}" />
<Label
Grid.Row="10"
Grid.Column="0"
Margin="3"
Content="Verfahrensstufe:" />
<StackPanel
Grid.Row="10"
Grid.Column="2"
Margin="3"
Orientation="Horizontal">
<RadioButton
Margin="3"
GroupName="a"
IsChecked="{Binding Path=VerfahrensstufeInt, Converter={StaticResource RadioBoolToIntConverter}, ConverterParameter=0}">
Test
</RadioButton>
<RadioButton
Margin="3"
GroupName="a"
IsChecked="{Binding Path=VerfahrensstufeInt, Converter={StaticResource RadioBoolToIntConverter}, ConverterParameter=1}">
Erprobung
</RadioButton>
<RadioButton
Margin="3"
GroupName="a"
IsChecked="{Binding Path=VerfahrensstufeInt, Converter={StaticResource RadioBoolToIntConverter}, ConverterParameter=2}">
Echt
</RadioButton>
</StackPanel>
<Label
Grid.Row="13"
Grid.Column="0"
Margin="3"
Content="Urbelege Gesendet:" />
<CheckBox
x:Name="Checkbox_Urbelege"
Grid.Row="13"
Grid.Column="2"
Margin="3"
HorizontalAlignment="Left"
IsChecked="{Binding UrbelegeGesendet}" />
<Label
Grid.Row="14"
Grid.Column="0"
Margin="3"
Content="Bezahlt:" />
<CheckBox
x:Name="Checkbox_Bezahlt"
Grid.Row="14"
Grid.Column="2"
Margin="3"
HorizontalAlignment="Left"
IsChecked="{Binding Bezahlt}" />
<Label
Grid.Row="15"
Grid.Column="0"
Margin="3"
Content="Betrag:" />
<TextBox
Grid.Row="15"
Grid.Column="2"
Margin="3"
IsReadOnly="True"
Text="{Binding Betrag, StringFormat={}{0:0.00 €}}" />
<!--<TextBox Grid.Row="15" Grid.Column="2" Margin="3" IsReadOnly="True" Text="{Binding Bezahlt}"/>-->
<Label Grid.Row="16" Grid.Column="0" Margin="3" Content="Bemerkung:"/>
<TextBox Grid.Row="16" Grid.Column="2" Margin="3" Text="{Binding Notice}" x:Name="Textbox_Notice" MaxLength="1024" TextWrapping="Wrap" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" AcceptsReturn="True"/>
<Label
Grid.Row="16"
Grid.Column="0"
Margin="3"
Content="Bemerkung:" />
<TextBox
x:Name="Textbox_Notice"
Grid.Row="16"
Grid.Column="2"
Margin="3"
AcceptsReturn="True"
HorizontalScrollBarVisibility="Disabled"
MaxLength="1024"
Text="{Binding Notice}"
TextWrapping="Wrap"
VerticalScrollBarVisibility="Auto" />
</Grid>
</TabItem>
<TabItem x:Name="tabitem_rechnungen" Header="Enthaltene Rechnungen">
<dxg:GridControl Margin="3" x:Name="datagrid_invoices" DataSource="{Binding InvoiceBases2}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<dxg:GridControl
x:Name="datagrid_invoices"
Margin="3"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
DataSource="{Binding InvoiceBases2}">
<dxg:GridControl.Columns>
<dxg:GridColumn x:Name="ColumnChecked" FieldName="IsChecked" Header=" " MinWidth="30"></dxg:GridColumn>
<dxg:GridColumn x:Name="ColumnButtons" AllowEditing="False" FieldName="ReportLink" Header=" ">
<dxg:GridColumn
x:Name="ColumnChecked"
MinWidth="30"
FieldName="IsChecked"
Header=" " />
<dxg:GridColumn
x:Name="ColumnButtons"
AllowEditing="False"
FieldName="ReportLink"
Header=" ">
<dxg:GridColumn.DisplayTemplate>
<ControlTemplate>
<StackPanel Orientation="Horizontal">
<Button Margin="1" ToolTip="Formular anzeigen" x:Name="btn_report" Height="20" Width="20" VerticalAlignment="Center">
<Button
x:Name="btn_report"
Width="20"
Height="20"
Margin="1"
VerticalAlignment="Center"
ToolTip="Formular anzeigen">
<TextBlock Padding="0">
<Hyperlink TextDecorations="None" TargetName="_NewWindow" NavigateUri="{Binding DisplayText, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" RequestNavigate="Hyperlink_OnRequestNavigate">
<TextBlock Padding="0" Text="¥" Foreground="#FFFFFF" FontSize="15" FontFamily="Webdings" Height="17" Width="16" VerticalAlignment="Center" HorizontalAlignment="Left" />
</Hyperlink>
</TextBlock>
<Hyperlink
NavigateUri="{Binding DisplayText, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
RequestNavigate="Hyperlink_OnRequestNavigate"
TextDecorations="None"
TargetName="_NewWindow">
<TextBlock
Width="16"
Height="17"
Padding="0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
FontFamily="Webdings"
FontSize="15"
Foreground="#FFFFFF"
Text="¥" />
</Hyperlink>
</TextBlock>
</Button>
</StackPanel>
</ControlTemplate>
</dxg:GridColumn.DisplayTemplate>
</dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="TypeString" Header="Art der Rechnung" Width="150" />
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="CustomerName" Header="{markup:Translate Klient/in}" Width="100" />
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="AccountingPeriodString" SortFieldName="AccountingPeriodStart" Header="Zeitraum" Width="100" />
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="InvoiceNumber" Header="Nummer" />
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="InvoiceDate" Header="Datum" EditSettings="{dxe:DateSettings DisplayFormat=d}" MinWidth="70" />
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="RecipientString" Header="{markup:Translate EmpfängerSingular}" />
<dxg:GridColumn
Width="150"
AllowEditing="False"
FieldName="TypeString"
Header="Art der Rechnung"
ReadOnly="True" />
<dxg:GridColumn
Width="100"
AllowEditing="False"
FieldName="CustomerName"
Header="{markup:Translate Klient/in}"
ReadOnly="True" />
<dxg:GridColumn
Width="100"
AllowEditing="False"
FieldName="AccountingPeriodString"
Header="Zeitraum"
ReadOnly="True"
SortFieldName="AccountingPeriodStart" />
<dxg:GridColumn
AllowEditing="False"
FieldName="InvoiceNumber"
Header="Nummer"
ReadOnly="True" />
<dxg:GridColumn
MinWidth="70"
AllowEditing="False"
EditSettings="{dxe:DateSettings DisplayFormat=d}"
FieldName="InvoiceDate"
Header="Datum"
ReadOnly="True" />
<dxg:GridColumn
AllowEditing="False"
FieldName="RecipientString"
Header="{markup:Translate EmpfängerSingular}"
ReadOnly="True" />
<!--<dxg:GridColumn FieldName="AccountingPeriodString" Header="Abrechnungszeitraum" />-->
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="TotalAmount" Header="Betrag" MinWidth="70">
<dxg:GridColumn
MinWidth="70"
AllowEditing="False"
FieldName="TotalAmount"
Header="Betrag"
ReadOnly="True">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="c" Mask="c" MaskType="Numeric"></dxe:TextEditSettings>
<dxe:TextEditSettings
DisplayFormat="c"
Mask="c"
MaskType="Numeric" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Notice" Header="Bemerkung" MinWidth="200" />
<dxg:GridColumn ReadOnly="True" AllowEditing="False" x:Name="PaidColumn" FieldName="IsPaid" Header="Bezahlt"></dxg:GridColumn>
<dxg:GridColumn
MinWidth="200"
AllowEditing="False"
FieldName="Notice"
Header="Bemerkung"
ReadOnly="True" />
<dxg:GridColumn
x:Name="PaidColumn"
AllowEditing="False"
FieldName="IsPaid"
Header="Bezahlt"
ReadOnly="True" />
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView NavigationStyle="Cell" x:Name="gridView" BestFitMode="Smart"
AllowBestFit="True" ShowGroupPanel="False" ScrollingMode="Smart" SnapsToDevicePixels="True"
Loaded="gridView_Loaded"
Margin="3,22,3,3" />
<dxg:TableView
x:Name="gridView"
Margin="3,22,3,3"
AllowBestFit="True"
BestFitMode="Smart"
Loaded="gridView_Loaded"
NavigationStyle="Cell"
ScrollingMode="Smart"
ShowGroupPanel="False"
SnapsToDevicePixels="True" />
</dxg:GridControl.View>
</dxg:GridControl>
</TabItem>
<TabItem Header="Protokoll">
<dxg:GridControl Margin="3" x:Name="datagrid_transfer" DataSource="{Binding TransferProtokolle}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<dxg:GridControl
x:Name="datagrid_transfer"
Margin="3"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
DataSource="{Binding TransferProtokolle}">
<dxg:GridControl.Columns>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="GkvTransferProtokollOid" Header="Oid" Tag="Debug"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="GkvTransferProtokollVersion" Header="Version" Tag="Debug"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="AbsenderBezeichnung" Header="Absender"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="EmpfangerBezeichnung" Header="Empfänger"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="IKLeistungserbringer" Header="Leistungserbringer"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="IKKrankenkasse" Header="Krankenkasse"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="IKKostentrager" Header="Kostentrager"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Rechnungsnummer" Header="Rec.Nr."></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Datenaustauschreferenz" Header="Dat. ref."></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Transfernummer" Header="TNr."></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Transfername" Header="TName"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="ErstelltAm" Header="Erstellt">
<dxg:GridColumn
AllowEditing="False"
FieldName="GkvTransferProtokollOid"
Header="Oid"
ReadOnly="True"
Tag="Debug" />
<dxg:GridColumn
AllowEditing="False"
FieldName="GkvTransferProtokollVersion"
Header="Version"
ReadOnly="True"
Tag="Debug" />
<dxg:GridColumn
AllowEditing="False"
FieldName="AbsenderBezeichnung"
Header="Absender"
ReadOnly="True" />
<dxg:GridColumn
AllowEditing="False"
FieldName="EmpfangerBezeichnung"
Header="Empfänger"
ReadOnly="True" />
<dxg:GridColumn
AllowEditing="False"
FieldName="IKLeistungserbringer"
Header="Leistungserbringer"
ReadOnly="True" />
<dxg:GridColumn
AllowEditing="False"
FieldName="IKKrankenkasse"
Header="Krankenkasse"
ReadOnly="True" />
<dxg:GridColumn
AllowEditing="False"
FieldName="IKKostentrager"
Header="Kostentrager"
ReadOnly="True" />
<dxg:GridColumn
AllowEditing="False"
FieldName="Rechnungsnummer"
Header="Rec.Nr."
ReadOnly="True" />
<dxg:GridColumn
AllowEditing="False"
FieldName="Datenaustauschreferenz"
Header="Dat. ref."
ReadOnly="True" />
<dxg:GridColumn
AllowEditing="False"
FieldName="Transfernummer"
Header="TNr."
ReadOnly="True" />
<dxg:GridColumn
AllowEditing="False"
FieldName="Transfername"
Header="TName"
ReadOnly="True" />
<dxg:GridColumn
AllowEditing="False"
FieldName="ErstelltAm"
Header="Erstellt"
ReadOnly="True">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="g" Mask="c" MaskType="DateTime"></dxe:TextEditSettings>
<dxe:TextEditSettings
DisplayFormat="g"
Mask="c"
MaskType="DateTime" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Dateityp" Header="Typ" Width="100"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Dateiname" Header="Dateiname" Width="80"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Dateigrosse" Header="Größe" Width="70"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="SentSuccess" Header="Dakota Übertragen"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Fehlertitel" Header="Fehlertitel"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Fehlerdatum" Header="Fehlerdatum" Width="100">
<dxg:GridColumn
Width="100"
AllowEditing="False"
FieldName="Dateityp"
Header="Typ"
ReadOnly="True" />
<dxg:GridColumn
Width="80"
AllowEditing="False"
FieldName="Dateiname"
Header="Dateiname"
ReadOnly="True" />
<dxg:GridColumn
Width="70"
AllowEditing="False"
FieldName="Dateigrosse"
Header="Größe"
ReadOnly="True" />
<dxg:GridColumn
AllowEditing="False"
FieldName="SentSuccess"
Header="Dakota Übertragen"
ReadOnly="True" />
<dxg:GridColumn
AllowEditing="False"
FieldName="Fehlertitel"
Header="Fehlertitel"
ReadOnly="True" />
<dxg:GridColumn
Width="100"
AllowEditing="False"
FieldName="Fehlerdatum"
Header="Fehlerdatum"
ReadOnly="True">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="g" Mask="c" MaskType="DateTime"></dxe:TextEditSettings>
<dxe:TextEditSettings
DisplayFormat="g"
Mask="c"
MaskType="DateTime" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Fehlernachricht" Header="Fehlernachricht" MinWidth="200"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Fehlerlevel" Header="Fehlerlevel"></dxg:GridColumn>
<dxg:GridColumn
MinWidth="200"
AllowEditing="False"
FieldName="Fehlernachricht"
Header="Fehlernachricht"
ReadOnly="True" />
<dxg:GridColumn
AllowEditing="False"
FieldName="Fehlerlevel"
Header="Fehlerlevel"
ReadOnly="True" />
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView NavigationStyle="Cell" BestFitMode="Smart" x:Name="gridView2"
AllowBestFit="True" ShowGroupPanel="False" ScrollingMode="Smart" SnapsToDevicePixels="True"
Loaded="gridView_Loaded"
Margin="3,22,3,3"/>
<dxg:TableView
x:Name="gridView2"
Margin="3,22,3,3"
AllowBestFit="True"
BestFitMode="Smart"
Loaded="gridView_Loaded"
NavigationStyle="Cell"
ScrollingMode="Smart"
ShowGroupPanel="False"
SnapsToDevicePixels="True" />
</dxg:GridControl.View>
</dxg:GridControl>
</TabItem>

View File

@@ -1,19 +1,48 @@
<UserControl x:Class="BeWo.View.YearMonthFilter" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" SharedSizeGroup="a" />
<ColumnDefinition Width="Auto" SharedSizeGroup="b" />
</Grid.ColumnDefinitions>
<UserControl
x:Class="BeWo.View.YearMonthFilter"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" SharedSizeGroup="a" />
<ColumnDefinition Width="Auto" SharedSizeGroup="b" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<CheckBox Name="checkbox_yearfilter" IsChecked="True" Content="Nach Jahr filtern" />
<CheckBox Name="checkbox_monthfilter" IsEnabled="{Binding Path=IsChecked, ElementName=checkbox_yearfilter}" Grid.Column="1" IsChecked="True" Content="Nach Monat filtern" Margin="8,0,0,0" />
<ComboBox x:Name="combobox_year" IsEnabled="{Binding Path=IsChecked, ElementName=checkbox_yearfilter}" Grid.Row="1" Margin="0,3,0,0" Height="20" MinWidth="80" VerticalContentAlignment="Center" Background="White" />
<ComboBox x:Name="combobox_month" IsEnabled="{Binding Path=IsChecked, ElementName=checkbox_monthfilter}" Grid.Column="1" Grid.Row="1" Margin="8,3,0,0" Height="20" MinWidth="120" VerticalContentAlignment="Center" Background="White" />
</Grid>
<CheckBox
Name="checkbox_yearfilter"
Content="Nach Jahr filtern"
IsChecked="True" />
<CheckBox
Name="checkbox_monthfilter"
Grid.Column="1"
Margin="8,0,0,0"
Content="Nach Monat filtern"
IsChecked="True"
IsEnabled="{Binding Path=IsChecked, ElementName=checkbox_yearfilter}" />
<ComboBox
x:Name="combobox_year"
Grid.Row="1"
Height="20"
MinWidth="80"
Margin="0,3,0,0"
VerticalContentAlignment="Center"
Background="White"
IsEnabled="{Binding Path=IsChecked, ElementName=checkbox_yearfilter}" />
<ComboBox
x:Name="combobox_month"
Grid.Row="1"
Grid.Column="1"
Height="20"
MinWidth="120"
Margin="8,3,0,0"
VerticalContentAlignment="Center"
Background="White"
IsEnabled="{Binding Path=IsChecked, ElementName=checkbox_monthfilter}" />
</Grid>
</UserControl>

View File

@@ -1,28 +1,52 @@
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors" x:Class="BeWo.View.CostRatePeriodControl" VerticalAlignment="Top" x:Name="UserControl" Background="{x:Null}">
<UserControl.Resources>
<DataTemplate x:Key="CostRateItemTemplate">
<Border BorderThickness="0 1 0 0" BorderBrush="Gray" Margin="0 2 0 0">
<Grid Grid.Row="2" Grid.ColumnSpan="2" Margin="0 2 0 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="c1" />
<ColumnDefinition Width="Auto" SharedSizeGroup="c2" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Text="Gültig bis" Margin="0,4,3,0" />
<dxe:DateEdit MaskType="DateTimeAdvancingCaret" Grid.Column="1" x:Name="datepicker_validUntil" EditValue="{Binding Path=EndDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Height="23" />
</Grid>
<dxe:TextEdit Height="23" HorizontalAlignment="Stretch" MaskType="Numeric" MaskUseAsDisplayFormat="True" Grid.Column="1" Margin="3,0,0,0" EditValue="{Binding Path=CostRateValue, UpdateSourceTrigger=PropertyChanged}"
Mask="########0.00##"/>
<UserControl
x:Class="BeWo.View.CostRatePeriodControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
x:Name="UserControl"
VerticalAlignment="Top"
Background="{x:Null}">
<UserControl.Resources>
<DataTemplate x:Key="CostRateItemTemplate">
<Border
Margin="0,2,0,0"
BorderBrush="Gray"
BorderThickness="0,1,0,0">
<Grid
Grid.Row="2"
Grid.ColumnSpan="2"
Margin="0,2,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="c1" />
<ColumnDefinition Width="Auto" SharedSizeGroup="c2" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Margin="0,4,3,0" Text="Gültig bis" />
<dxe:DateEdit
x:Name="datepicker_validUntil"
Grid.Column="1"
Height="23"
EditValue="{Binding Path=EndDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
MaskType="DateTimeAdvancingCaret" />
</Grid>
<dxe:TextEdit
Grid.Column="1"
Height="23"
Margin="3,0,0,0"
HorizontalAlignment="Stretch"
EditValue="{Binding Path=CostRateValue, UpdateSourceTrigger=PropertyChanged}"
Mask="########0.00##"
MaskType="Numeric"
MaskUseAsDisplayFormat="True" />
<!--<dxe:TextEdit Height="23" HorizontalAlignment="Stretch" MaskType="Numeric" MaskUseAsDisplayFormat="True" Grid.Column="1" Margin="3,0,0,0" EditValue="{Binding Path=CostRateValue, UpdateSourceTrigger=PropertyChanged}" >
<dxe:TextEdit.Mask>
<MultiBinding Converter="{StaticResource CostRatePeriodValueConverter}" UpdateSourceTrigger="PropertyChanged">
@@ -33,59 +57,168 @@
</MultiBinding>
</dxe:TextEdit.Mask>
</dxe:TextEdit>-->
<TextBlock Padding="0 4 0 0" Height="23" x:Name="lblOldUnitName" Text="{Binding Text, ElementName=lblActualUnitName}" Grid.Row="1" Visibility="{Binding Visibility, ElementName=lblActualUnitName}" />
<TextBox Height="23" x:Name="txtOldUnitName" Grid.Row="1" Text="{Binding UnitName, UpdateSourceTrigger=PropertyChanged}" Visibility="{Binding Visibility, ElementName=lblActualUnitName}" Grid.Column="1" Margin="3,3,0,0" HorizontalAlignment="Stretch" />
<Button x:Name="button_deleteCostRatePeriod" Grid.RowSpan="2" VerticalAlignment="Bottom" Grid.Column="2" Width="20" Height="20" HorizontalAlignment="Right" Style="{DynamicResource CloseButtonStyle}" Click="button_deleteCostRatePeriod_Click" Margin="3,0,0,3" />
</Grid>
</Border>
</DataTemplate>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Grid.IsSharedSizeScope="True">
<Border x:Name="border" BorderBrush="#FF6A6A6A" BorderThickness="0" Padding="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid Margin="3 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" MinWidth="160" SharedSizeGroup="c1" />
<ColumnDefinition Width="Auto" MinWidth="70" SharedSizeGroup="c2" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Height="23" x:Name="lblActualValue" Text="Aktueller Stundensatz (€)" Padding="0,4,0,0" />
<TextBlock Height="23" Padding="0 4 0 0" x:Name="lblActualUnitName" Text="UnitName" Grid.Row="1" Visibility="Collapsed" />
<TextBlock x:Name="lblValidUntil" Text="(gültig ab 01.01.2009)" Grid.Row="2" Margin="0,-3,0,0" />
<TextBox Height="23" x:Name="txtActualUnitName" Text="{Binding UnitName, UpdateSourceTrigger=PropertyChanged}" Visibility="Collapsed" Grid.Column="1" Grid.Row="1" Margin="3,3,0,0" HorizontalAlignment="Stretch" />
<dxe:TextEdit Height="23" HorizontalAlignment="Stretch" MaskType="Numeric" MaskUseAsDisplayFormat="True" Grid.Column="1" Margin="3,0,0,0" EditValue="{Binding Path=CostRateValue, UpdateSourceTrigger=PropertyChanged}"
Mask="########0.00##"/>
<Button x:Name="button_addCostRatePeriod" HorizontalAlignment="Center" Grid.Column="2" Width="21" Height="21" Margin="3,0,0,0" VerticalAlignment="Center" Click="button_addCostRatePeriod_Click">
<Grid Width="18" HorizontalAlignment="Center" VerticalAlignment="Center">
<Line X1="4" X2="12" Y1="8" Y2="8" Fill="{x:Null}" Stroke="#FFFFFFFF" StrokeStartLineCap="Round" StrokeEndLineCap="Round" StrokeThickness="2" HorizontalAlignment="Center" VerticalAlignment="Center" Width="16" Height="16" />
<Line X1="8" X2="8" Y1="4" Y2="12" Fill="{x:Null}" Stroke="#FFFFFFFF" StrokeStartLineCap="Round" StrokeEndLineCap="Round" StrokeThickness="2" HorizontalAlignment="Center" VerticalAlignment="Center" Width="16" Height="16" />
</Grid>
</Button>
</Grid>
<ListBox x:Name="listBoxOldValues" IsSynchronizedWithCurrentItem="True" Grid.Row="3" Grid.ColumnSpan="3" Margin="0,3,0,0" BorderBrush="Transparent" BorderThickness="0" ItemTemplate="{DynamicResource CostRateItemTemplate}" Background="{x:Null}">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Focusable" Value="false" />
</Style>
</ListBox.ItemContainerStyle>
<ListBox.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
</ListBox.Resources>
</ListBox>
</Grid>
</Border>
</Grid>
<TextBlock
x:Name="lblOldUnitName"
Grid.Row="1"
Height="23"
Padding="0,4,0,0"
Text="{Binding Text, ElementName=lblActualUnitName}"
Visibility="{Binding Visibility, ElementName=lblActualUnitName}" />
<TextBox
x:Name="txtOldUnitName"
Grid.Row="1"
Grid.Column="1"
Height="23"
Margin="3,3,0,0"
HorizontalAlignment="Stretch"
Text="{Binding UnitName, UpdateSourceTrigger=PropertyChanged}"
Visibility="{Binding Visibility, ElementName=lblActualUnitName}" />
<Button
x:Name="button_deleteCostRatePeriod"
Grid.RowSpan="2"
Grid.Column="2"
Width="20"
Height="20"
Margin="3,0,0,3"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Click="button_deleteCostRatePeriod_Click"
Style="{DynamicResource CloseButtonStyle}" />
</Grid>
</Border>
</DataTemplate>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Grid.IsSharedSizeScope="True">
<Border
x:Name="border"
Padding="0"
BorderBrush="#FF6A6A6A"
BorderThickness="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid Margin="3,0">
<Grid.ColumnDefinitions>
<ColumnDefinition
Width="Auto"
MinWidth="160"
SharedSizeGroup="c1" />
<ColumnDefinition
Width="Auto"
MinWidth="70"
SharedSizeGroup="c2" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock
x:Name="lblActualValue"
Height="23"
Padding="0,4,0,0"
Text="Aktueller Stundensatz (€)" />
<TextBlock
x:Name="lblActualUnitName"
Grid.Row="1"
Height="23"
Padding="0,4,0,0"
Text="UnitName"
Visibility="Collapsed" />
<TextBlock
x:Name="lblValidUntil"
Grid.Row="2"
Margin="0,-3,0,0"
Text="(gültig ab 01.01.2009)" />
<TextBox
x:Name="txtActualUnitName"
Grid.Row="1"
Grid.Column="1"
Height="23"
Margin="3,3,0,0"
HorizontalAlignment="Stretch"
Text="{Binding UnitName, UpdateSourceTrigger=PropertyChanged}"
Visibility="Collapsed" />
<dxe:TextEdit
Grid.Column="1"
Height="23"
Margin="3,0,0,0"
HorizontalAlignment="Stretch"
EditValue="{Binding Path=CostRateValue, UpdateSourceTrigger=PropertyChanged}"
Mask="########0.00##"
MaskType="Numeric"
MaskUseAsDisplayFormat="True" />
<Button
x:Name="button_addCostRatePeriod"
Grid.Column="2"
Width="21"
Height="21"
Margin="3,0,0,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Click="button_addCostRatePeriod_Click">
<Grid
Width="18"
HorizontalAlignment="Center"
VerticalAlignment="Center">
<Line
Width="16"
Height="16"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Fill="{x:Null}"
Stroke="#FFFFFFFF"
StrokeEndLineCap="Round"
StrokeStartLineCap="Round"
StrokeThickness="2"
X1="4"
X2="12"
Y1="8"
Y2="8" />
<Line
Width="16"
Height="16"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Fill="{x:Null}"
Stroke="#FFFFFFFF"
StrokeEndLineCap="Round"
StrokeStartLineCap="Round"
StrokeThickness="2"
X1="8"
X2="8"
Y1="4"
Y2="12" />
</Grid>
</Button>
</Grid>
<ListBox
x:Name="listBoxOldValues"
Grid.Row="3"
Grid.ColumnSpan="3"
Margin="0,3,0,0"
Background="{x:Null}"
BorderBrush="Transparent"
BorderThickness="0"
IsSynchronizedWithCurrentItem="True"
ItemTemplate="{DynamicResource CostRateItemTemplate}">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Focusable" Value="false" />
</Style>
</ListBox.ItemContainerStyle>
<ListBox.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
</ListBox.Resources>
</ListBox>
</Grid>
</Border>
</Grid>
</UserControl>

View File

@@ -1,102 +1,293 @@
<localView:BeWoView x:Class="BeWo.View.Detail.Accounting.GkvAbrechnungOverview"
xmlns:markup="clr-namespace:BeWo.MultiLanguage.Markup"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:localView="clr-namespace:BeWo.View"
xmlns:localViewModel="clr-namespace:BeWo.ViewModel"
xmlns:localViewDetail="clr-namespace:BeWo.View.Detail.Accounting"
xmlns:val="clr-namespace:BeWo.Validation"
xmlns:proxy="clr-namespace:BeWo.ServiceProxy"
xmlns:uc="clr-namespace:BeWo.Controls;assembly=BeWo.Controls" xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid" xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core" xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors" Height="Auto" Width="Auto" HorizontalAlignment="Stretch" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:r="clr-namespace:BeWo.Security" VerticalAlignment="Stretch" Focusable="True" xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Classic">
<localView:BeWoView
x:Class="BeWo.View.Detail.Accounting.GkvAbrechnungOverview"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Classic"
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
xmlns:localView="clr-namespace:BeWo.View"
xmlns:localViewDetail="clr-namespace:BeWo.View.Detail.Accounting"
xmlns:localViewModel="clr-namespace:BeWo.ViewModel"
xmlns:markup="clr-namespace:BeWo.MultiLanguage.Markup"
xmlns:proxy="clr-namespace:BeWo.ServiceProxy"
xmlns:r="clr-namespace:BeWo.Security"
xmlns:s="clr-namespace:System;assembly=mscorlib"
xmlns:uc="clr-namespace:BeWo.Controls;assembly=BeWo.Controls"
xmlns:val="clr-namespace:BeWo.Validation"
Width="Auto"
Height="Auto"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Focusable="True">
<Grid>
<GroupBox x:Name="groupbox_editArea" Grid.Row="0" Header="GKV-Abrechnungen" Style="{DynamicResource ObjectEditGroupBox}">
<Grid>
<GroupBox
x:Name="groupbox_editArea"
Grid.Row="0"
Header="GKV-Abrechnungen"
Style="{DynamicResource ObjectEditGroupBox}">
<Grid Grid.IsSharedSizeScope="True" Margin="0,3,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<Grid Margin="0,3,0,0" Grid.IsSharedSizeScope="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<localView:YearMonthFilter Margin="3 0 0 3" VerticalAlignment="Bottom" HorizontalAlignment="Left" Grid.Column="0" x:Name="yearMonthFilter" FilterSpanChanged="YearMonthFilter_FilterSpanChanged" />
<StackPanel Orientation="Vertical" Grid.Column="1" Margin="12,5,0,0" VerticalAlignment="Center" HorizontalAlignment="Left">
<RadioButton x:Name="radioFilterByInvoiceDate" Content="Nach Erstelldatum filtern" IsChecked="True" Click="radioFilterByInvoiceDate_Click" ToolTip="Filtert die angezeigten GKV-Abrechnungen nach ihrem Erstelldatum"/>
<RadioButton x:Name="radioFilterByAccountingDate" Content="Nach Abrechnungszeitraum filtern" Click="radioFilterByInvoiceDate_Click" ToolTip="Filtert die angezeigten GKV-Abrechnungen nach ihrem Abrechnungszeitraum. Es werden alle Abrechnungen angezeigt, die den ausgewählten Monat bzw. Jahr beinhalten."/>
<localView:YearMonthFilter
x:Name="yearMonthFilter"
Grid.Column="0"
Margin="3,0,0,3"
HorizontalAlignment="Left"
VerticalAlignment="Bottom"
FilterSpanChanged="YearMonthFilter_FilterSpanChanged" />
<StackPanel
Grid.Column="1"
Margin="12,5,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Orientation="Vertical">
<RadioButton
x:Name="radioFilterByInvoiceDate"
Click="radioFilterByInvoiceDate_Click"
Content="Nach Erstelldatum filtern"
IsChecked="True"
ToolTip="Filtert die angezeigten GKV-Abrechnungen nach ihrem Erstelldatum" />
<RadioButton
x:Name="radioFilterByAccountingDate"
Click="radioFilterByInvoiceDate_Click"
Content="Nach Abrechnungszeitraum filtern"
ToolTip="Filtert die angezeigten GKV-Abrechnungen nach ihrem Abrechnungszeitraum. Es werden alle Abrechnungen angezeigt, die den ausgewählten Monat bzw. Jahr beinhalten." />
</StackPanel>
<Grid Grid.Column="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>
<Button x:Name="button_new" Grid.Column="2" Content="Neue Abrechnung" Margin="3" Click="NewButton_OnClick" Height="24" VerticalAlignment="Bottom" ToolTip="Neue GKV-Abrechnung erstellen" />
<Button x:Name="button_reload" Grid.Column="1" Content="Aktualisieren" Margin="3" Click="ReloadButton_OnClick" Height="24" VerticalAlignment="Bottom" Width="80" ToolTip="Aktualisiere die Liste aller GKV-Abrechnungen"/>
<Button
x:Name="button_new"
Grid.Column="2"
Height="24"
Margin="3"
VerticalAlignment="Bottom"
Click="NewButton_OnClick"
Content="Neue Abrechnung"
ToolTip="Neue GKV-Abrechnung erstellen" />
<Button
x:Name="button_reload"
Grid.Column="1"
Width="80"
Height="24"
Margin="3"
VerticalAlignment="Bottom"
Click="ReloadButton_OnClick"
Content="Aktualisieren"
ToolTip="Aktualisiere die Liste aller GKV-Abrechnungen" />
</Grid>
<dxg:GridControl Margin="3" Grid.ColumnSpan="3" Grid.Row="1" DataSource="{Binding VMList}" x:Name="datagrid_gkvAbrechnungen" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Visibility="Collapsed">
<dxg:GridControl
x:Name="datagrid_gkvAbrechnungen"
Grid.Row="1"
Grid.ColumnSpan="3"
Margin="3"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
DataSource="{Binding VMList}"
Visibility="Collapsed">
<dxg:GridControl.Effect>
<DropShadowEffect Color="#FFC7D9E2" />
</dxg:GridControl.Effect>
<dxg:GridControl.Columns>
<dxg:GridColumn x:Name="ColumnChecked" FieldName="IsChecked" Header=" " MinWidth="30" Width="120" Visible="False"></dxg:GridColumn>
<dxg:GridColumn x:Name="ColumnButtons" AllowEditing="False" Width="Auto" FieldName="ReportLink" Header=" ">
<dxg:GridColumn
x:Name="ColumnChecked"
Width="120"
MinWidth="30"
FieldName="IsChecked"
Header=" "
Visible="False" />
<dxg:GridColumn
x:Name="ColumnButtons"
Width="Auto"
AllowEditing="False"
FieldName="ReportLink"
Header=" ">
<dxg:GridColumn.DisplayTemplate>
<ControlTemplate>
<StackPanel Orientation="Horizontal" Margin="1">
<Button Click="btn_details_Click" Content="¥" Padding="0" Margin="1" ToolTip="Details anzeigen" Foreground="#FFFFFF" FontSize="11" FontFamily="Webdings" x:Name="btn_details" Height="18" Width="20" VerticalAlignment="Center" />
<StackPanel Margin="1" Orientation="Horizontal">
<Button
x:Name="btn_details"
Width="20"
Height="18"
Margin="1"
Padding="0"
VerticalAlignment="Center"
Click="btn_details_Click"
Content="¥"
FontFamily="Webdings"
FontSize="11"
Foreground="#FFFFFF"
ToolTip="Details anzeigen" />
<!--<Button Click="btn_nutz_Click" Content="¥" Padding="0" Margin="1" ToolTip="Nutzdatendatei" Foreground="#BBBBBB" FontSize="10" FontFamily="Webdings" x:Name="btn_nutz" Height="17" Width="20" VerticalAlignment="Center" />
<Button Click="btn_auf_Click" Content="¥" Padding="0" Margin="1" ToolTip="Auftragsdatei" Foreground="#BBBBBB" FontSize="10" FontFamily="Webdings" x:Name="btn_auf" Height="17" Width="20" VerticalAlignment="Center" />-->
<Button Click="btn_send_Click" Content="*" Padding="0" Margin="1" ToolTip="Senden" Foreground="#ffffff" FontSize="11" FontFamily="Wingdings" x:Name="btn_send" Height="18" Width="20" VerticalAlignment="Center"/>
<Button Click="btn_force_send_Click" Content="r" Padding="0" Margin="1" ToolTip="DEBUG: Protokolle Löschen" Foreground="#FFFF00" FontSize="11" FontFamily="Wingdings" x:Name="btn_force_send" Height="18" Width="20" VerticalAlignment="Center" Visibility="Collapsed"/>
<Button Click="btn_delete_Click" Content="r" Padding="0" Margin="1" ToolTip="Löschen" Foreground="#FF0000" FontSize="11" FontFamily="Webdings" x:Name="btn_delete" Height="18" Width="20" VerticalAlignment="Center" />
<Button
x:Name="btn_send"
Width="20"
Height="18"
Margin="1"
Padding="0"
VerticalAlignment="Center"
Click="btn_send_Click"
Content="*"
FontFamily="Wingdings"
FontSize="11"
Foreground="#ffffff"
ToolTip="Senden" />
<Button
x:Name="btn_delete"
Width="20"
Height="18"
Margin="1"
Padding="0"
VerticalAlignment="Center"
Click="btn_delete_Click"
Content="r"
FontFamily="Webdings"
FontSize="11"
Foreground="#FF0000"
ToolTip="Löschen" />
</StackPanel>
</ControlTemplate>
</dxg:GridColumn.DisplayTemplate>
</dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="RecipientString" Width="177" Header="{markup:Translate EmpfängerSingular}" />
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="AbrechnungsZeitraum" Header="Abrechnungszeitraum" Width="Auto"/>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="ErstelltAm" Header="Erstelldatum" Width="Auto">
<dxg:GridColumn
Width="177"
AllowEditing="False"
FieldName="RecipientString"
Header="{markup:Translate EmpfängerSingular}"
ReadOnly="True" />
<dxg:GridColumn
Width="Auto"
AllowEditing="False"
FieldName="AbrechnungsZeitraum"
Header="Abrechnungszeitraum"
ReadOnly="True" />
<dxg:GridColumn
Width="Auto"
AllowEditing="False"
FieldName="ErstelltAm"
Header="Erstelldatum"
ReadOnly="True">
<dxg:GridColumn.EditSettings>
<dxe:DateEditSettings DisplayFormat="d" HorizontalContentAlignment="Right"/>
<dxe:DateEditSettings HorizontalContentAlignment="Right" DisplayFormat="d" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="GkvState" Header="Status" Width="Auto">
<dxg:GridColumn
Width="Auto"
AllowEditing="False"
FieldName="Verfahrensstufe"
Header="Verfahrensstufe"
ReadOnly="True">
<dxg:GridColumn.EditSettings>
<dxe:DateEditSettings DisplayTextConverter="{StaticResource GkvState2StringConverter}"/>
<dxe:DateEditSettings DisplayTextConverter="{StaticResource EnumTranslationConverter}" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="LastTransferDateTime" Header="Gesendet Am" Width="Auto">
<dxg:GridColumn
Width="Auto"
AllowEditing="False"
FieldName="GkvState"
Header="Status"
ReadOnly="True">
<dxg:GridColumn.EditSettings>
<dxe:DateEditSettings DisplayFormat="d" HorizontalContentAlignment="Right"/>
<dxe:DateEditSettings DisplayTextConverter="{StaticResource GkvState2StringConverter}" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn x:Name="FehlermeldungColumn" FieldName="Fehlermeldung" Header="Fehlermeldung" Width="*"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Betrag" Header="Betrag">
<dxg:GridColumn
Width="Auto"
AllowEditing="False"
FieldName="LastTransferDateTime"
Header="Gesendet Am"
ReadOnly="True">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="c" Mask="c" MaskType="Numeric" HorizontalContentAlignment="Right"></dxe:TextEditSettings>
<dxe:DateEditSettings HorizontalContentAlignment="Right" DisplayFormat="d" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn x:Name="PaidColumn" FieldName="Bezahlt" Header="Bezahlt" Width="Auto"></dxg:GridColumn>
<dxg:GridColumn FieldName="Notice" Header="Bemerkung" MinWidth="200" Width="3*" Tag="1024">
<dxg:GridColumn
x:Name="FehlermeldungColumn"
Width="*"
FieldName="Fehlermeldung"
Header="Fehlermeldung" />
<dxg:GridColumn
x:Name="UrbelegeColumn"
Width="Auto"
FieldName="UrbelegeGesendet"
Header="Urbelege gesendet">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<dxe:CheckEdit Name="PART_Editor" />
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
<dxg:GridColumn
x:Name="PaidColumn"
Width="Auto"
FieldName="Bezahlt"
Header="Bezahlt">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<dxe:CheckEdit Name="PART_Editor" />
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
<dxg:GridColumn
AllowEditing="False"
FieldName="Betrag"
Header="Betrag"
ReadOnly="True">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings
HorizontalContentAlignment="Right"
DisplayFormat="c"
Mask="c"
MaskType="Numeric" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn
Width="3*"
MinWidth="200"
FieldName="Notice"
Header="Bemerkung"
Tag="1024">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings TextWrapping="Wrap" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView NavigationStyle="Cell" Loaded="gridView_Loaded" x:Name="gridView" BestFitMode="Smart"
AllowBestFit="True" ShowGroupPanel="False" ScrollingMode="Smart" SnapsToDevicePixels="True" ShownEditor="gridView_ShownEditor"
CellValueChanging="gridView_CellValueChanged"
CustomRowAppearance="TableView_OnCustomRowAppearance"
Margin="3,22,3,3" CellValueChanged="gridView_CellValueChanged_1" RowMinHeight="24"
/>
<dxg:TableView
x:Name="gridView"
Margin="3,22,3,3"
AllowBestFit="True"
BestFitMode="Smart"
CellValueChanged="gridView_CellValueChanged_1"
CellValueChanging="gridView_CellValueChanging"
CustomRowAppearance="TableView_OnCustomRowAppearance"
Loaded="gridView_Loaded"
NavigationStyle="Cell"
RowMinHeight="24"
ScrollingMode="Smart"
ShownEditor="gridView_ShownEditor"
SnapsToDevicePixels="True" />
</dxg:GridControl.View>
</dxg:GridControl>
</Grid>
</GroupBox>
</Grid>
</GroupBox>
</Grid>
</localView:BeWoView>

View File

@@ -34,7 +34,7 @@ namespace BeWo.View.Detail.Accounting
private readonly NewGkvAbrechnungPopUpView _NewGkvAbrechnungPopUpView;
private readonly GkvAbrechnungListVM _Viewmodel;
public GkvAbrechnungOverview(GkvAbrechnungListVM vm)
public GkvAbrechnungOverview()
{
UpdateDataGridFilterCommand = new DelegateCommand(UpdateDataGridFilter);
@@ -42,9 +42,9 @@ namespace BeWo.View.Detail.Accounting
DownloadLinkEngine = new DownloadLinkEngine();
_Viewmodel = vm;
_Viewmodel = new GkvAbrechnungListVM();
DataContext = vm;
DataContext = _Viewmodel;
//datagrid_gkvAbrechnungen.FixedFilter = new BinaryOperator("Datenaustauschreferenz", 1);
@@ -66,10 +66,7 @@ namespace BeWo.View.Detail.Accounting
private void CheckRights()
{
//if (!BeWoApp.AppSettings.AllowStorno)
//{
// ColumnButtons.MinWidth = 67;
//}
}
private void RefreshGkvAbrechnungenList()
{
@@ -204,27 +201,6 @@ namespace BeWo.View.Detail.Accounting
}
}
private void btn_force_send_Click(object sender, RoutedEventArgs e)
{
#if DEBUG
#else
return;
#endif
var vm = datagrid_gkvAbrechnungen.GetCurrentValue<GkvAbrechnungVM>();
if(vm.TransferProtokolle is object && vm.TransferProtokolle.Any())
{
vm.TransferProtokolle.Clear();
var result_dc = ServiceFacade.DoAccountingServiceSync(x => x.UpdateGkvAbrechnung(vm.CommitToDataContract()));
vm.TransferProtokolle = result_dc.TransferProtokolle?.ToList();
vm.GkvAbrechnungVersion = result_dc.GkvAbrechnungVersion;
}
}
private void btn_send_Click(object sender, RoutedEventArgs e)
{
var vm = datagrid_gkvAbrechnungen.GetCurrentValue<GkvAbrechnungVM>();
@@ -313,14 +289,24 @@ namespace BeWo.View.Detail.Accounting
((TextEdit)gridView.ActiveEditor).SetPropertyValue("MaxLength", tag);
}
}
private void gridView_CellValueChanged(object sender, CellValueChangedEventArgs e)
private void gridView_CellValueChanging(object sender, CellValueChangedEventArgs e)
{
if (e.Column != null && e.Column.FieldName == "Bezahlt")
if (e.Column is null)
return;
if (e.Column.FieldName == nameof(GkvAbrechnungVM.Bezahlt))
{
if (e.Value is bool b && e.Row is GkvAbrechnungVM vm)
{
SaveBezahltChange(vm, b);
}
}
else if (e.Column.FieldName == nameof(GkvAbrechnungVM.UrbelegeGesendet))
{
if (e.Value is bool b && e.Row is GkvAbrechnungVM vm)
{
SaveUrbelegeGesendetChange(vm, b);
}
}
}
private void TableView_OnCustomRowAppearance(object sender, CustomRowAppearanceEventArgs e)
@@ -337,6 +323,11 @@ namespace BeWo.View.Detail.Accounting
e.Result = Brushes.Orange;
e.Handled = true;
}
else if (GkvAbrechnungVM.GetState(gkvAbrechnungVM) == GkvState.Waiting4Urbelege)
{
e.Result = Brushes.Green;
e.Handled = true;
}
}
}
@@ -351,10 +342,33 @@ namespace BeWo.View.Detail.Accounting
dc_in.Bezahlt = b;
var dc = ServiceFacade.DoAccountingServiceSync(x => x.UpdateGkvAbrechnung(dc_in));
ServiceFacade.DoAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), cb =>
{
Dispatcher.Invoke(() => {
vm.GkvAbrechnungVersion = cb.GkvAbrechnungVersion;
vm.Bezahlt = cb.Bezahlt;
});
}, false);
}
vm.GkvAbrechnungVersion = dc.GkvAbrechnungVersion;
vm.Bezahlt = dc.Bezahlt;
private void SaveUrbelegeGesendetChange(GkvAbrechnungVM vm, bool b)
{
var dc_in = vm.CommitToDataContract();
dc_in.UrbelegeGesendet = b;
ServiceFacade.DoAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), cb =>
{
Dispatcher.Invoke(() => {
vm.GkvAbrechnungVersion = cb.GkvAbrechnungVersion;
vm.UrbelegeGesendet = cb.UrbelegeGesendet;
});
}, false);
//var dc = ServiceFacade.DoAccountingServiceSync(x => x.UpdateGkvAbrechnung(dc_in));
//vm.GkvAbrechnungVersion = dc.GkvAbrechnungVersion;
//vm.UrbelegeGesendet = dc.UrbelegeGesendet;
}
private void SaveNoticeChange(GkvAbrechnungVM vm, string notice)
@@ -375,5 +389,5 @@ namespace BeWo.View.Detail.Accounting
}
}
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -240,10 +240,10 @@
<dxsch:DataSource.AppointmentMappings>
<dxsch:AppointmentMappings
AllDay="AllDay"
End="EndDateDisplay"
LabelId="Customer.CustomerOid"
ResourceId="Wohneinheit.Oid"
AllDay="AllDay"
Start="StartDate"
Subject="Customer.VollerName" />
</dxsch:DataSource.AppointmentMappings>

View File

@@ -136,6 +136,6 @@
</dxg:GridControl>
</Grid>
</GroupBox>
<local:WohneinheitBelegungEditPopup x:Name="popup_newBelegung"/>
<local:WohneinheitBelegungEditPopup x:Name="popup_newBelegung" />
</Grid>
</UserControl>

View File

@@ -22,11 +22,11 @@
Style="{StaticResource ObjectEditGroupBox}">
<ListBox
Name="PhotosListBox"
ContextMenuOpening="PhotosListBox_ContextMenuOpening"
ItemsSource="{Binding VMList}"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Auto"
SelectedIndex="0"
ContextMenuOpening="PhotosListBox_ContextMenuOpening"
Style="{StaticResource PhotoListBox}">
<ListBox.ContextMenu>
<ContextMenu>

View File

@@ -86,9 +86,9 @@
<ScrollViewer
Grid.Column="2"
Margin="5"
Padding="5"
DataContext="{Binding SelectedVM}"
VerticalScrollBarVisibility="Visible"
Padding="5"
Visibility="{Binding Path=., Converter={StaticResource ObjectVisibilityConverter}}">
<StackPanel Orientation="Vertical">
<GroupBox
@@ -255,7 +255,7 @@
Text="{Binding Path=Zusatznotiz, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
</GroupBox>
<local:WohneinheitGrundrissControl Visibility="{Binding Path=DataContext.PermissionWohneinheitGalleryView, ElementName=root_grid,Converter={StaticResource BoolVisibilityConverter}}" DataContext="{Binding ImageListVM}" />
<local:WohneinheitGrundrissControl DataContext="{Binding ImageListVM}" Visibility="{Binding Path=DataContext.PermissionWohneinheitGalleryView, ElementName=root_grid, Converter={StaticResource BoolVisibilityConverter}}" />
</StackPanel>
</ScrollViewer>

View File

@@ -1,17 +1,22 @@
<localView:BeWoView x:Class="BeWo.View.Master.DokumenteView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:uc="clr-namespace:BeWo.Controls;assembly=BeWo.Controls"
xmlns:localView="clr-namespace:BeWo.View"
xmlns:master="clr-namespace:BeWo.View.Master"
xmlns:dxa="http://schemas.devexpress.com/winfx/2008/xaml/accordion"
xmlns:markup="clr-namespace:BeWo.MultiLanguage.Markup"
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
xmlns:dxgt="http://schemas.devexpress.com/winfx/2008/xaml/grid/themekeys"
xmlns:dxlc="http://schemas.devexpress.com/winfx/2008/xaml/layoutcontrol"
xmlns:controls="clr-namespace:BeWo.View.Controls"
Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Focusable="True">
<localView:BeWoView
x:Class="BeWo.View.Master.DokumenteView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:BeWo.View.Controls"
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
xmlns:dxa="http://schemas.devexpress.com/winfx/2008/xaml/accordion"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
xmlns:dxgt="http://schemas.devexpress.com/winfx/2008/xaml/grid/themekeys"
xmlns:dxlc="http://schemas.devexpress.com/winfx/2008/xaml/layoutcontrol"
xmlns:localView="clr-namespace:BeWo.View"
xmlns:markup="clr-namespace:BeWo.MultiLanguage.Markup"
xmlns:master="clr-namespace:BeWo.View.Master"
xmlns:uc="clr-namespace:BeWo.Controls;assembly=BeWo.Controls"
Width="Auto"
Height="Auto"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Focusable="True">
<localView:BeWoView.Resources>
<Style TargetType="dxg:RowControl">
@@ -22,64 +27,78 @@
</Trigger>
</Style.Triggers>
</Style>
<ContextMenu x:Name="contextMenu" x:Key="cm" MenuItem.Click="ContextMenu_Click" Opened="ContextMenu_Opened">
<MenuItem Header="Neuer Ordner" >
<ContextMenu
x:Key="cm"
x:Name="contextMenu"
MenuItem.Click="ContextMenu_Click"
Opened="ContextMenu_Opened">
<MenuItem Header="Neuer Ordner">
<MenuItem.Icon>
<Image Source="..\Ressources\Icons\new.png"/>
<Image Source="..\Ressources\Icons\new.png" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Umbenennen">
<MenuItem.Icon>
<Image Source="..\Ressources\Icons\Rename24.png"/>
<Image Source="..\Ressources\Icons\Rename24.png" />
</MenuItem.Icon>
</MenuItem>
<Separator />
<MenuItem Header="Löschen" >
<MenuItem Header="Löschen">
<MenuItem.Icon>
<Image Source="..\Ressources\Icons\Delete24.png"/>
<Image Source="..\Ressources\Icons\Delete24.png" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
<ContextMenu x:Name="TemplateContextMenu" x:Key="templatecm" MenuItem.Click="TemplateContextMenu_Click" Opened="TemplateContextMenu_Opened">
<MenuItem Header="Neuer Ordner" >
<ContextMenu
x:Key="templatecm"
x:Name="TemplateContextMenu"
MenuItem.Click="TemplateContextMenu_Click"
Opened="TemplateContextMenu_Opened">
<MenuItem Header="Neuer Ordner">
<MenuItem.Icon>
<Image Source="..\Ressources\Icons\Add24.png"/>
<Image Source="..\Ressources\Icons\Add24.png" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Umbenennen">
<MenuItem.Icon>
<Image Source="..\Ressources\Icons\Rename24.png"/>
<Image Source="..\Ressources\Icons\Rename24.png" />
</MenuItem.Icon>
</MenuItem>
<Separator />
<MenuItem Header="Neue Vorlage" >
<MenuItem Header="Neue Vorlage">
<MenuItem.Icon>
<Image Source="..\Ressources\Icons\DocumentWithAdd.png"/>
<Image Source="..\Ressources\Icons\DocumentWithAdd.png" />
</MenuItem.Icon>
</MenuItem>
<Separator />
<MenuItem Header="Löschen" >
<MenuItem Header="Löschen">
<MenuItem.Icon>
<Image Source="..\Ressources\Icons\Delete24.png"/>
<Image Source="..\Ressources\Icons\Delete24.png" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
<master:DeleteButtonVisibilityConverter x:Key="DeleteButtonVisibilityConverter" />
<master:EditButtonVisibilityConverter x:Key="EditButtonVisibilityConverter" />
</localView:BeWoView.Resources>
<Grid>
<Grid>
<uc:ShadowChrome>
<GroupBox Style="{StaticResource MainContentGroupBoxStyle}">
<GroupBox.Header>
<StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" Margin="0,11,0,0">
<Image Source="..\..\Ressources\Icons\Folder.png" RenderTransformOrigin="0.5,0.5" Width="32">
<StackPanel
Margin="0,11,0,0"
VerticalAlignment="Bottom"
Orientation="Horizontal">
<Image
Width="32"
RenderTransformOrigin="0.5,0.5"
Source="..\..\Ressources\Icons\Folder.png">
<Image.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="1.3" ScaleY="1.3" />
@@ -89,34 +108,66 @@
</TransformGroup>
</Image.RenderTransform>
</Image>
<TextBox Text="Dokumente" Margin="10,0,0,0" Background="{x:Null}" Foreground="{DynamicResource MainGroupBoxForegroundBrush}" FontSize="22" BorderBrush="{x:Null}" VerticalAlignment="Stretch" Padding="0,0,0,0" BorderThickness="0,0,0,0" />
<TextBox
Margin="10,0,0,0"
Padding="0,0,0,0"
VerticalAlignment="Stretch"
Background="{x:Null}"
BorderBrush="{x:Null}"
BorderThickness="0,0,0,0"
FontSize="22"
Foreground="{DynamicResource MainGroupBoxForegroundBrush}"
Text="Dokumente" />
</StackPanel>
</GroupBox.Header>
<Grid Background="{StaticResource ObjectEditBackgroundBrush}">
<TabControl Visibility="Visible">
<TabItem Visibility="Visible">
<TabItem.Header>
<TextBlock Text="{markup:Translate Alle Dokumente}" TextElement.FontSize="16" TextElement.Foreground="{StaticResource TabItemHotTextBrush}" TextElement.FontFamily="Microsoft Sans Serif" Padding="3"></TextBlock>
<TextBlock
Padding="3"
Text="{markup:Translate Alle Dokumente}"
TextElement.FontFamily="Microsoft Sans Serif"
TextElement.FontSize="16"
TextElement.Foreground="{StaticResource TabItemHotTextBrush}" />
</TabItem.Header>
<dxlc:LayoutControl Orientation="Horizontal">
<dxlc:LayoutGroup dxlc:LayoutControl.AllowHorizontalSizing="True" Width="300">
<dxlc:LayoutGroup Width="300" dxlc:LayoutControl.AllowHorizontalSizing="True">
<Grid Margin="0,0,0,0">
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Content="Suche" Margin="0,0,0,0" />
<TextBox Height="20" Grid.Column="1" x:Name="textbox_searchForFileName" Margin="3,2,0,5" HorizontalContentAlignment="Stretch" TabIndex="0" Template="{DynamicResource SearchTextBoxTemplate}" BorderThickness="0,0,0,0" KeyDown="TextBox_KeyDown"/>
<Label Margin="0,0,0,0" Content="Suche" />
<TextBox
x:Name="textbox_searchForFileName"
Grid.Column="1"
Height="20"
Margin="3,2,0,5"
HorizontalContentAlignment="Stretch"
BorderThickness="0,0,0,0"
KeyDown="TextBox_KeyDown"
TabIndex="0"
Template="{DynamicResource SearchTextBoxTemplate}" />
<dxg:TreeListControl Grid.Row="1" Grid.ColumnSpan="2" x:Name="documents_treeview_control" Margin="0 0 2 4" VerticalAlignment="Stretch" dx:ThemeManager.ThemeName="Office2010Black">
<dxg:TreeListControl
x:Name="documents_treeview_control"
Grid.Row="1"
Grid.ColumnSpan="2"
Margin="0,0,2,4"
VerticalAlignment="Stretch"
dx:ThemeManager.ThemeName="Office2010Black">
<dxg:TreeListControl.Columns>
<dxg:TreeListColumn FieldName="Name" AllowSorting="False" Width="300">
<dxg:TreeListColumn
Width="300"
AllowSorting="False"
FieldName="Name">
<!--<dxg:TreeListColumn.CellStyle>
<Style TargetType="dxg:LightweightCellEditor" BasedOn="{StaticResource {dxgt:GridRowThemeKey ResourceKey=LightweightCellStyle}}">
<Style.Triggers>
@@ -130,10 +181,25 @@
</dxg:TreeListColumn>
</dxg:TreeListControl.Columns>
<dxg:TreeListControl.View>
<dxg:TreeListView x:Name="DocumentsTreeView" PreviewMouseLeftButtonDown="DocumentsTreeView_PreviewMouseLeftButtonDown" ShowColumnHeaders="False" ShowIndicator="False" ShowHorizontalLines="False" ShowVerticalLines="False"
FocusedRowChanged="DocumentsTreeView_FocusedRowChanged" LostFocus="DocumentsTreeView_LostFocus"
NodeExpanding="DocumentsTreeView_NodeExpanding" AllowEditing="False" ShowNodeImages="True" PrintNodeImages="True" AutoWidth="True"
KeyFieldName="{Binding DocumentTreeItemVM.DocTreeItemOid}" ParentFieldName="Binding DocumentTreeItemVM.ParentOid" ContextMenu="{StaticResource cm}" VerticalScrollbarVisibility="Auto" HorizontalScrollbarVisibility="Auto">
<dxg:TreeListView
x:Name="DocumentsTreeView"
AllowEditing="False"
AutoWidth="True"
ContextMenu="{StaticResource cm}"
FocusedRowChanged="DocumentsTreeView_FocusedRowChanged"
HorizontalScrollbarVisibility="Auto"
KeyFieldName="{Binding DocumentTreeItemVM.DocTreeItemOid}"
LostFocus="DocumentsTreeView_LostFocus"
NodeExpanding="DocumentsTreeView_NodeExpanding"
ParentFieldName="Binding DocumentTreeItemVM.ParentOid"
PreviewMouseLeftButtonDown="DocumentsTreeView_PreviewMouseLeftButtonDown"
PrintNodeImages="True"
ShowColumnHeaders="False"
ShowHorizontalLines="False"
ShowIndicator="False"
ShowNodeImages="True"
ShowVerticalLines="False"
VerticalScrollbarVisibility="Auto">
<!--<dxg:TreeListView.RowStyle>
<Style BasedOn="{StaticResource {dxgt:GridRowThemeKey ResourceKey=RowStyle}}" TargetType="dxg:rows">
<Style.Triggers>
@@ -151,7 +217,10 @@
</Grid>
</dxlc:LayoutGroup>
<dxlc:LayoutGroup dxlc:LayoutControl.AllowHorizontalSizing="True">
<Grid Grid.Column="1" Grid.Row="0" Grid.RowSpan="2">
<Grid
Grid.Row="0"
Grid.RowSpan="2"
Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
@@ -160,7 +229,12 @@
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<GroupBox x:Name="GroupBoxDokumentenListe" Grid.ColumnSpan="2" Padding="5" Style="{StaticResource ObjectEditGroupBox}" Header="">
<GroupBox
x:Name="GroupBoxDokumentenListe"
Grid.ColumnSpan="2"
Padding="5"
Header=""
Style="{StaticResource ObjectEditGroupBox}">
<Grid>
<Grid.ColumnDefinitions>
@@ -176,10 +250,29 @@
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Button Name="button_uploadDocument" Click="button_OpenUploadDocument_Click" Grid.Column="0" Grid.Row="0">Datei hochladen</Button>
<controls:PopupNonTopmost Grid.Row="0" Topmost="False" x:Name="popup_UploadFiles" Width="350" StaysOpen="True" Placement="MousePoint">
<Border Background="White" Padding="3" BorderThickness="1" BorderBrush="Gray">
<GroupBox x:Name="groupbox_uploadDocument" Header="Dokument hochladen" Style="{StaticResource ObjectEditGroupBox}">
<Button
Name="button_uploadDocument"
Grid.Row="0"
Grid.Column="0"
Click="button_OpenUploadDocument_Click">
Datei hochladen
</Button>
<controls:PopupNonTopmost
x:Name="popup_UploadFiles"
Grid.Row="0"
Width="350"
Placement="MousePoint"
StaysOpen="True"
Topmost="False">
<Border
Padding="3"
Background="White"
BorderBrush="Gray"
BorderThickness="1">
<GroupBox
x:Name="groupbox_uploadDocument"
Header="Dokument hochladen"
Style="{StaticResource ObjectEditGroupBox}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
@@ -195,15 +288,49 @@
</Grid.ColumnDefinitions>
<Label VerticalAlignment="Center" Content="{markup:Translate Datei}" />
<uc:PopUpEdit IsReadOnly="True" DeleteButtonVisibility="Collapsed"
Grid.Column="1" Grid.Row="0" Grid.ColumnSpan="2" Margin="3" Height="23" x:Name="popupedit_file"
PopUpClick="popupedit_file_PopUpClick_1" Cursor="Arrow" />
<Label Content="Beschreibung" Grid.Row="2" Grid.Column="0" VerticalAlignment="Top" />
<TextBox x:Name="textbox_beschreibung" Grid.Row="2" Grid.Column="1" Height="50" Margin="3" Grid.ColumnSpan="2" />
<Button Grid.Row="4" Grid.Column="1" HorizontalAlignment="Right" VerticalAlignment="Bottom" Height="25"
Margin="3" Content="Hochladen" x:Name="button_uploadFile" Click="button_uploadDocument_Click" />
<Button Grid.Row="4" Grid.Column="2" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Height="25"
Margin="3" Content="Abbrechen" x:Name="button_cancelFileUpload" Click="button_cancelFileUpload_Click" />
<uc:PopUpEdit
x:Name="popupedit_file"
Grid.Row="0"
Grid.Column="1"
Grid.ColumnSpan="2"
Height="23"
Margin="3"
Cursor="Arrow"
DeleteButtonVisibility="Collapsed"
IsReadOnly="True"
PopUpClick="popupedit_file_PopUpClick_1" />
<Label
Grid.Row="2"
Grid.Column="0"
VerticalAlignment="Top"
Content="Beschreibung" />
<TextBox
x:Name="textbox_beschreibung"
Grid.Row="2"
Grid.Column="1"
Grid.ColumnSpan="2"
Height="50"
Margin="3" />
<Button
x:Name="button_uploadFile"
Grid.Row="4"
Grid.Column="1"
Height="25"
Margin="3"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Click="button_uploadDocument_Click"
Content="Hochladen" />
<Button
x:Name="button_cancelFileUpload"
Grid.Row="4"
Grid.Column="2"
Height="25"
Margin="3"
HorizontalAlignment="Stretch"
VerticalAlignment="Bottom"
Click="button_cancelFileUpload_Click"
Content="Abbrechen" />
</Grid>
</GroupBox>
</Border>
@@ -211,8 +338,20 @@
<!--<Label Grid.Column="1" Margin="25 1 0 0" FontSize="13">Beschreibung</Label>
<TextBox Name="textbox_fileNotice" Margin="3" Height="23" Grid.Column="2" Grid.Row="0" />-->
<ProgressBar Height="20" Margin="2" Name="progressbar_upload" Grid.Row="1" Grid.ColumnSpan="3" Minimum="0" Maximum="1" />
<Label HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Row="2" Grid.ColumnSpan="3" Name="text_progress" />
<ProgressBar
Name="progressbar_upload"
Grid.Row="1"
Grid.ColumnSpan="3"
Height="20"
Margin="2"
Maximum="1"
Minimum="0" />
<Label
Name="text_progress"
Grid.Row="2"
Grid.ColumnSpan="3"
HorizontalAlignment="Center"
VerticalAlignment="Center" />
</Grid>
@@ -242,46 +381,106 @@
</Grid>-->
</GroupBox>
<dxg:GridControl Grid.Row="1" Margin="2,3,5,5" DataSource="{Binding SelectedItem.Files, ElementName=treeview}" x:Name="datagrid_documents" Grid.Column="1">
<dxg:GridControl
x:Name="datagrid_documents"
Grid.Row="1"
Grid.Column="1"
Margin="2,3,5,5"
DataSource="{Binding SelectedItem.Files, ElementName=treeview}">
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="FileName" Header="" FixedWidth="True" Width="24" ReadOnly="True" Visible="{Binding Converter={StaticResource DeleteButtonVisibilityConverter}}">
<dxg:GridColumn
Width="24"
FieldName="FileName"
FixedWidth="True"
Header=""
ReadOnly="True"
Visible="{Binding Converter={StaticResource DeleteButtonVisibilityConverter}}">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<Button Content="r" FontFamily="Webdings" Click="DeleteButton_Click" Width="20" Height="20" VerticalAlignment="Center" ToolTip="Löschen" />
<Button
Width="20"
Height="20"
VerticalAlignment="Center"
Click="DeleteButton_Click"
Content="r"
FontFamily="Webdings"
ToolTip="Löschen" />
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
<dxg:GridColumn Header="" FixedWidth="True" Width="24" ReadOnly="True" Visible="{Binding Converter={StaticResource EditButtonVisibilityConverter}}">
<dxg:GridColumn
Width="24"
FixedWidth="True"
Header=""
ReadOnly="True"
Visible="{Binding Converter={StaticResource EditButtonVisibilityConverter}}">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<Button Content="!" FontFamily="Wingdings" Click="EditButton_Click" Width="20" Height="20" VerticalAlignment="Center" ToolTip="Bearbeiten"/>
<Button
Width="20"
Height="20"
VerticalAlignment="Center"
Click="EditButton_Click"
Content="!"
FontFamily="Wingdings"
ToolTip="Bearbeiten" />
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
<dxg:GridColumn FieldName="InsertedOn" AllowEditing="False" Header="hinterlegt am" Width="*" />
<dxg:GridColumn FieldName="InsertedBy" AllowEditing="False" Header="hinterlegt von" Width="*" />
<dxg:GridColumn FieldName="FileName" AllowEditing="False" Header="Dateiname" Width="*" />
<dxg:GridColumn FieldName="Description" AllowEditing="False" Header="Beschreibung" Width="*" />
<dxg:GridColumn FieldName="URL" Header="Herunterladen" Width="100" MinWidth="90" x:Name="ColumnDownload">
<dxg:GridColumn
Width="*"
AllowEditing="False"
FieldName="InsertedOn"
Header="hinterlegt am" />
<dxg:GridColumn
Width="*"
AllowEditing="False"
FieldName="InsertedBy"
Header="hinterlegt von" />
<dxg:GridColumn
Width="*"
AllowEditing="False"
FieldName="FileName"
Header="Dateiname" />
<dxg:GridColumn
Width="*"
AllowEditing="False"
FieldName="Description"
Header="Beschreibung" />
<dxg:GridColumn
x:Name="ColumnDownload"
Width="100"
MinWidth="90"
FieldName="URL"
Header="Herunterladen">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<TextBlock>
<Hyperlink TargetName="inexistent" NavigateUri="{Binding Path=Value, Converter={StaticResource DownloadURLConverter}}" RequestNavigate="Hyperlink_OnRequestNavigate">
<TextBlock Text="herunterladen" />
</Hyperlink>
</TextBlock>
<Hyperlink
NavigateUri="{Binding Path=Value, Converter={StaticResource DownloadURLConverter}}"
RequestNavigate="Hyperlink_OnRequestNavigate"
TargetName="inexistent">
<TextBlock Text="herunterladen" />
</Hyperlink>
</TextBlock>
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView AutoWidth="false" ShowGroupPanel="False" ShowGroupedColumns="false" ShowTotalSummary="False" NavigationStyle="Cell" x:Name="DocumentTableView"/>
<dxg:TableView
x:Name="DocumentTableView"
AutoWidth="false"
NavigationStyle="Cell"
ShowGroupPanel="False"
ShowGroupedColumns="false"
ShowTotalSummary="False" />
</dxg:GridControl.View>
</dxg:GridControl>
</Grid>
</dxlc:LayoutGroup>
</dxlc:LayoutControl>
<!-- Hier kommt das Dokumentenzeug hin wenn Templates wieder angeschaltet werden/-->
<!-- Hier kommt das Dokumentenzeug hin wenn Templates wieder angeschaltet werden/ -->
</TabItem>
@@ -289,33 +488,57 @@
<TabItem Selector.IsSelected="True">
<TabItem.Header>
<TextBlock Text="{markup:Translate Vorlagen}" TextElement.FontSize="16" TextElement.Foreground="{StaticResource TabItemHotTextBrush}" TextElement.FontFamily="Microsoft Sans Serif" Padding="3"></TextBlock>
<TextBlock
Padding="3"
Text="{markup:Translate Vorlagen}"
TextElement.FontFamily="Microsoft Sans Serif"
TextElement.FontSize="16"
TextElement.Foreground="{StaticResource TabItemHotTextBrush}" />
</TabItem.Header>
<dxlc:LayoutControl Orientation="Horizontal">
<dxlc:LayoutGroup dxlc:LayoutControl.AllowHorizontalSizing="True" Width="300">
<Grid Margin="0,0,0,0" >
<Grid.RowDefinitions>
<dxlc:LayoutGroup Width="300" dxlc:LayoutControl.AllowHorizontalSizing="True">
<Grid Margin="0,0,0,0">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<dxg:TreeListControl x:Name="template_treeview_control" Grid.Column="0" DefaultSorting="Name" Margin="2,3,2,5" VerticalAlignment="Stretch" dx:ThemeManager.ThemeName="Office2010Black">
<dxg:TreeListControl.Columns>
<dxg:TreeListColumn FieldName="Name" AllowSorting="True"/>
</dxg:TreeListControl.Columns>
<dxg:TreeListControl.View>
<dxg:TreeListView x:Name="TemplateTreeView" PreviewMouseLeftButtonDown="TemplateTreeView_PreviewMouseLeftButtonDown" ShowColumnHeaders="False" AutoWidth="True"
ShowIndicator="False" ShowHorizontalLines="False" ShowVerticalLines="False" FocusedRowChanged="TemplateTreeView_FocusedRowChanged"
LostFocus="TemplateTreeView_LostFocus" NodeExpanding="templateTreeListView_NodeExpanding" AllowEditing="False" ShowNodeImages="True" PrintNodeImages="True"
KeyFieldName="{Binding DocumentTreeItemVM.DocTreeItemOid}" ParentFieldName="Binding DocumentTreeItemVM.ParentOid" ContextMenu="{StaticResource templatecm}"
VerticalScrollbarVisibility="Auto" HorizontalScrollbarVisibility="Auto">
</dxg:TreeListView>
</dxg:TreeListControl.View>
</dxg:TreeListControl>
<!--
<dxg:TreeListControl
x:Name="template_treeview_control"
Grid.Column="0"
Margin="2,3,2,5"
VerticalAlignment="Stretch"
dx:ThemeManager.ThemeName="Office2010Black"
DefaultSorting="Name">
<dxg:TreeListControl.Columns>
<dxg:TreeListColumn AllowSorting="True" FieldName="Name" />
</dxg:TreeListControl.Columns>
<dxg:TreeListControl.View>
<dxg:TreeListView
x:Name="TemplateTreeView"
AllowEditing="False"
AutoWidth="True"
ContextMenu="{StaticResource templatecm}"
FocusedRowChanged="TemplateTreeView_FocusedRowChanged"
HorizontalScrollbarVisibility="Auto"
KeyFieldName="{Binding DocumentTreeItemVM.DocTreeItemOid}"
LostFocus="TemplateTreeView_LostFocus"
NodeExpanding="templateTreeListView_NodeExpanding"
ParentFieldName="Binding DocumentTreeItemVM.ParentOid"
PreviewMouseLeftButtonDown="TemplateTreeView_PreviewMouseLeftButtonDown"
PrintNodeImages="True"
ShowColumnHeaders="False"
ShowHorizontalLines="False"
ShowIndicator="False"
ShowNodeImages="True"
ShowVerticalLines="False"
VerticalScrollbarVisibility="Auto" />
</dxg:TreeListControl.View>
</dxg:TreeListControl>
<!--
<Grid Grid.Column="2" Grid.Row="0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
@@ -348,9 +571,9 @@
<ProgressBar Height="20" Margin="2" Name="progressbar_upload" Grid.Row="1" Grid.ColumnSpan="3" Minimum="0" Maximum="1" />
<Label HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Row="2" Grid.ColumnSpan="3" Name="text_progress" />
</Grid>
-->
-->
<!--
<!--
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
@@ -374,42 +597,93 @@
<ProgressBar Height="20" Margin="3" Name="progressbar_upload" Grid.Row="2" Grid.ColumnSpan="5" Minimum="0" Maximum="1" />
<Label VerticalAlignment="Center" Grid.Row="2" Grid.ColumnSpan="5" HorizontalAlignment="Center" Name="text_progress" />
</Grid>
</GroupBox>
-->
</Grid>
-->
</Grid>
</dxlc:LayoutGroup>
<dxlc:LayoutGroup dxlc:LayoutControl.AllowHorizontalSizing="True">
<dxg:GridControl Grid.Row="0" Margin="2,3,5,5" DataSource="{Binding SelectedItem.Files, ElementName=treeview}" x:Name="datagrid_templates" Grid.Column="1">
<dxg:GridControl
x:Name="datagrid_templates"
Grid.Row="0"
Grid.Column="1"
Margin="2,3,5,5"
DataSource="{Binding SelectedItem.Files, ElementName=treeview}">
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="FileName" Header="" FixedWidth="True" Width="24" ReadOnly="True">
<dxg:GridColumn
Width="24"
FieldName="FileName"
FixedWidth="True"
Header=""
ReadOnly="True">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<Button Content="r" FontFamily="Webdings" Click="TemplateDeleteButton_Click" Width="20" Height="20" VerticalAlignment="Center" Margin="1"/>
<Button
Width="20"
Height="20"
Margin="1"
VerticalAlignment="Center"
Click="TemplateDeleteButton_Click"
Content="r"
FontFamily="Webdings" />
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
<dxg:GridColumn FieldName="Name" AllowEditing="False" Header="Dateiname" Width="*" />
<dxg:GridColumn FieldName="Beschreibung" AllowEditing="False" Header="Beschreibung" Width="*" />
<dxg:GridColumn FieldName="FileEdit" Header="" FixedWidth="True" Width="80" ReadOnly="True">
<dxg:GridColumn
Width="*"
AllowEditing="False"
FieldName="Name"
Header="Dateiname" />
<dxg:GridColumn
Width="*"
AllowEditing="False"
FieldName="Beschreibung"
Header="Beschreibung" />
<dxg:GridColumn
Width="80"
FieldName="FileEdit"
FixedWidth="True"
Header=""
ReadOnly="True">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<Button Content="Bearbeiten" Click="EditTemplate_Click" Width="75" Height="20" VerticalAlignment="Center" />
<Button
Width="75"
Height="20"
VerticalAlignment="Center"
Click="EditTemplate_Click"
Content="Bearbeiten" />
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
<dxg:GridColumn FieldName="PrintFile" Header="" FixedWidth="True" Width="80" ReadOnly="True">
<dxg:GridColumn
Width="80"
FieldName="PrintFile"
FixedWidth="True"
Header=""
ReadOnly="True">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<Button Content="Drucken" Click="PrintTemplate_Click" Width="75" Height="20" VerticalAlignment="Center" />
<Button
Width="75"
Height="20"
VerticalAlignment="Center"
Click="PrintTemplate_Click"
Content="Drucken" />
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView AutoWidth="false" ShowGroupPanel="False" ShowGroupedColumns="false" ShowTotalSummary="False" NavigationStyle="Cell" x:Name="TemplateTableView"/>
<dxg:TableView
x:Name="TemplateTableView"
AutoWidth="false"
NavigationStyle="Cell"
ShowGroupPanel="False"
ShowGroupedColumns="false"
ShowTotalSummary="False" />
</dxg:GridControl.View>
</dxg:GridControl>
</dxlc:LayoutGroup>
@@ -418,9 +692,9 @@
</TabControl>
</Grid>
</GroupBox>
</uc:ShadowChrome>
</Grid>
</localView:BeWoView>

View File

@@ -1,4 +1,4 @@
<localView:BeWoView x:Class="BeWo.View.Master.FinanceView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:uc="clr-namespace:BeWo.Controls;assembly=BeWo.Controls" xmlns:val="clr-namespace:BeWo.Validation" xmlns:localView="clr-namespace:BeWo.View" Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Focusable="True">
<localView:BeWoView x:Class="BeWo.View.Master.FinanceView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:uc="clr-namespace:BeWo.Controls;assembly=BeWo.Controls" xmlns:val="clr-namespace:BeWo.Validation" xmlns:localView="clr-namespace:BeWo.View" xmlns:accounting="clr-namespace:BeWo.View.Detail.Accounting" Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Focusable="True">
<Grid>
<uc:ShadowChrome>
@@ -40,7 +40,9 @@
Selector.Selected="tabitem_collectiveinvoice_Selected" />
<TabItem Header="Allgemeine Rechnungen" Name="tabitem_otherinvoice" Selector.Selected="tabitem_otherinvoice_Selected" />
<TabItem Header="Rechnungsübersicht" Name="tabitem_overviewinvoice" Selector.Selected="tabitem_overviewinvoice_Selected" />
<TabItem Header="GKV-Abrechnungen" Name="tabitem_gkvabrechnung" Selector.Selected="tabitem_gkvabrechnung_Selected" />
<TabItem Header="GKV-Abrechnungen" Name="tabitem_gkvabrechnung">
<accounting:GkvAbrechnungOverview/>
</TabItem>
<TabItem Header="Digitale Abrechnung" Name="tabitem_gkvabrechnung_alt" Selector.Selected="tabitem_gkvabrechnung_alt_Selected" />
<TabItem Header="Bargeldverwaltung" Name="tabitem_bargeldverwaltung" Selector.Selected="tabitem_bargeldverwaltung_Selected"/>
<TabItem Header="Dokumente" Name="tabitem_documents" Selector.Selected="tabitem_documents_Selected" />

View File

@@ -25,6 +25,13 @@ namespace BeWo.View.Master
InitializeComponent();
InitRights();
#if DEBUG
if(DebugConfig.CurrentConfig is DebugConfig config && config.SelectView == UIContext.Finance)
{
root.SelectedIndex = config.SelectIndex ?? 0;
}
#endif
}
public override bool IsDirty
@@ -146,14 +153,16 @@ namespace BeWo.View.Master
tabitem_gkvabrechnung_alt.Visibility = Visibility.Collapsed;
}
foreach (TabItem tabitem in root.Items)
{
if (tabitem.Visibility == Visibility.Visible)
{
tabitem.IsSelected = true;
break;
}
}
root.SelectedIndex = 0;
//foreach (TabItem tabitem in root.Items)
//{
// if (tabitem.Visibility == Visibility.Visible)
// {
// tabitem.IsSelected = true;
// break;
// }
//}
}
private void tabitem_equityinvoice_Selected(object sender, RoutedEventArgs e)
@@ -245,14 +254,6 @@ namespace BeWo.View.Master
}
}
private void tabitem_gkvabrechnung_Selected(object sender, RoutedEventArgs e)
{
if (!_OpenViews.ContainsKey(tabitem_gkvabrechnung) || _SavePerformed)
{
AddView(tabitem_gkvabrechnung, new GkvAbrechnungOverview(new GkvAbrechnungListVM(null)));
}
}
private void tabitem_gkvabrechnung_alt_Selected(object sender, RoutedEventArgs e)
{
if (!_OpenViews.ContainsKey(tabitem_gkvabrechnung_alt) || _SavePerformed)

View File

@@ -16,381 +16,433 @@ using DevExpress.Xpf.Core;
namespace BeWo.ViewModel
{
public class GkvAbrechnungVM : AbstractDCMapperVM<GkvAbrechnungDC>
{
public static string PropertyName_AbrechnungsZeitraumStart = "AbrechnungsZeitraumStart";
public static string PropertyName_AbrechnungsZeitraumEnde = "AbrechnungsZeitraumEnde";
public static string PropertyName_ErstelltAm = "ErstelltAm";
private long? _GkvAbrechnungOid;
private long? _GkvAbrechnungVersion;
private string _Notice;
private DateTime? _AbrechnungsZeitraumStart;
private DateTime? _AbrechnungsZeitraumEnde;
private DateTime _ErstelltAm;
private decimal _Betrag;
private bool _Bezahlt;
internal bool _IsChecked;
private List<InvoiceBaseVM> _InvoiceBases2;
private BindingList<InvoiceBaseVM> _InvoiceBases;
private OrganisationDC _Organisation;
private List<GkvTransferProtokollDC> _TransferProtokolle;
public GkvAbrechnungVM(GkvAbrechnungDC pDC) : base(pDC, !pDC.GkvAbrechnungOid.HasValue)
{
_InvoiceBases = new BindingList<InvoiceBaseVM>();
}
#region
public string AbrechnungsZeitraum => $"{AbrechnungsZeitraumStart.Value.ToShortDateString()} - {AbrechnungsZeitraumEnde.Value.ToShortDateString()}";
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public DateTime? AbrechnungsZeitraumStart
{
get { return this._AbrechnungsZeitraumStart; }
set
{
if (this.AreDifferent(this._AbrechnungsZeitraumStart, value))
{
this._AbrechnungsZeitraumStart = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.AbrechnungsZeitraumStart, value), PropertyName_AbrechnungsZeitraumStart);
this.FirePropertyChanged(PropertyName_AbrechnungsZeitraumStart);
// RE893748923
// var day = value.Value.Day;
// AbrechnungsZeitraumEnde = value.Value.AddDays(1 - day).AddMonths(1).AddDays(-1);
}
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public DateTime? AbrechnungsZeitraumEnde
{
get { return this._AbrechnungsZeitraumEnde; }
set
{
if (this.AreDifferent(this._AbrechnungsZeitraumEnde, value))
{
this._AbrechnungsZeitraumEnde = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.AbrechnungsZeitraumEnde, value), PropertyName_AbrechnungsZeitraumEnde);
this.FirePropertyChanged(PropertyName_AbrechnungsZeitraumEnde);
}
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public DateTime ErstelltAm
{
get { return this._ErstelltAm; }
set
{
if (this.AreDifferent(this._ErstelltAm, value))
{
this._ErstelltAm = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.ErstelltAm, value), nameof(ErstelltAm));
this.FirePropertyChanged(nameof(ErstelltAm));
}
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public long? GkvAbrechnungOid
{
get { return this._GkvAbrechnungOid; }
set
{
if (this.AreDifferent(this._GkvAbrechnungOid, value))
{
this._GkvAbrechnungOid = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.GkvAbrechnungOid, value), nameof(GkvAbrechnungOid));
this.FirePropertyChanged(nameof(GkvAbrechnungOid));
}
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public long? GkvAbrechnungVersion
{
get { return this._GkvAbrechnungOid; }
set
{
if (this.AreDifferent(this._GkvAbrechnungVersion, value))
{
this._GkvAbrechnungVersion = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.GkvAbrechnungVersion, value), nameof(GkvAbrechnungVersion));
this.FirePropertyChanged(nameof(GkvAbrechnungVersion));
}
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public string Notice
{
get { return this._Notice; }
set
{
if (this.AreDifferent(this._Notice, value))
{
this._Notice = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Notice, value), nameof(Notice));
this.FirePropertyChanged(nameof(Notice));
}
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public decimal Betrag
{
get { return this._Betrag; }
set
{
if (this.AreDifferent(this._Betrag, value))
{
this._Betrag = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Betrag, value), nameof(Betrag));
this.FirePropertyChanged(nameof(Betrag));
}
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public bool Bezahlt
{
get { return _Bezahlt; }
set
{
if (AreDifferent(this._Bezahlt, value))
{
_Bezahlt = value;
StoreDirtyInformation(AreDifferent(DataContract.Bezahlt, value), nameof(Bezahlt));
FirePropertyChanged(nameof(Bezahlt));
FirePropertyChanged(nameof(GkvState));
FirePropertyChanged(nameof(Fehlermeldung));
}
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public GkvState GkvState
{
get { return GetState(this); }
}
public bool IsChecked
{
get { return _IsChecked; }
set
{
if (AreDifferent(_IsChecked, value))
{
_IsChecked = value;
FirePropertyChanged("IsChecked");
}
}
}
public List<InvoiceBaseVM> InvoiceBases2
{
get { return _InvoiceBases2; }
set { _InvoiceBases2 = value; }
}
public BindingList<InvoiceBaseVM> InvoiceBases
{
get { return _InvoiceBases; }
set { _InvoiceBases = value; }
}
public List<GkvTransferProtokollDC> TransferProtokolle
{
get { return _TransferProtokolle; }
set
{
_TransferProtokolle = value;
FirePropertyChanged(nameof(TransferProtokolle));
FirePropertyChanged(nameof(GkvState));
FirePropertyChanged(nameof(Fehlermeldung));
FirePropertyChanged(nameof(LastTransferDateTime));
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public OrganisationDC Organisation
{
get { return this._Organisation; }
set
{
if (this.AreDifferent(this._Organisation, value))
{
this._Organisation = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Organisation, value), nameof(Organisation));
this.FirePropertyChanged(nameof(Organisation));
}
}
}
#endregion
public string RecipientString
{
get
{
if (_InvoiceBases2 != null && _InvoiceBases2.Any())
{
return _InvoiceBases2.First().RecipientString;
}
return string.Empty;
}
}
public string Fehlermeldung
{
get
{
var last = TransferProtokolle?.LastOrDefault();
if (last is null || string.IsNullOrWhiteSpace(last.Fehlernachricht))
return null;
if (string.IsNullOrWhiteSpace(last.Fehlertitel))
return last.Fehlernachricht;
return $"{last.Fehlertitel}: {last.Fehlernachricht}";
}
}
public DateTime? LastTransferDateTime
{
get
{
var last = TransferProtokolle?.LastOrDefault();
if (last is null)
return null;
return last.ErstelltAm;
}
}
public static GkvState GetState(GkvAbrechnungVM vm)
{
return GkvAbrechnungExtensions.GetState(
vm,
() => vm.Bezahlt,
() => vm.TransferProtokolle,
(x) => x.Fehlerdatum,
(x) => x.Fehlerlevel,
(x) => x.ErstelltAm.Value);
}
protected override void InitByDataContract(GkvAbrechnungDC pDataContract)
{
_AbrechnungsZeitraumStart = pDataContract.AbrechnungsZeitraumStart;
_AbrechnungsZeitraumEnde = pDataContract.AbrechnungsZeitraumEnde;
_ErstelltAm = pDataContract.ErstelltAm;
_GkvAbrechnungOid = pDataContract.GkvAbrechnungOid;
_GkvAbrechnungVersion = pDataContract.GkvAbrechnungVersion;
_Notice = pDataContract.Notice;
_Betrag = pDataContract.Betrag;
_Bezahlt = pDataContract.Bezahlt;
if (pDataContract.InvoiceBases != null)
{
_InvoiceBases2 = pDataContract.InvoiceBases.Select(x => new InvoiceBaseVM(x, true)).ToList();
_InvoiceBases = new BindingList<InvoiceBaseVM>(_InvoiceBases2);
}
if (pDataContract.TransferProtokolle != null)
{
_TransferProtokolle = new List<GkvTransferProtokollDC>(pDataContract.TransferProtokolle);
}
_Organisation = pDataContract.Organisation;
}
protected override GkvAbrechnungDC MapToDataContract(GkvAbrechnungDC pDataContract, bool doCommit)
{
pDataContract.AbrechnungsZeitraumStart = _AbrechnungsZeitraumStart;
pDataContract.AbrechnungsZeitraumEnde = _AbrechnungsZeitraumEnde;
pDataContract.ErstelltAm = _ErstelltAm;
pDataContract.GkvAbrechnungOid = _GkvAbrechnungOid;
pDataContract.GkvAbrechnungVersion = _GkvAbrechnungVersion;
pDataContract.Notice = _Notice;
pDataContract.Betrag = _Betrag;
pDataContract.Bezahlt = _Bezahlt;
if (_InvoiceBases != null && _InvoiceBases.Any())
pDataContract.InvoiceBases = _InvoiceBases.Where(x => x.IsChecked).Select(vm => vm.CommitToDataContract()).ToList();
else if (_InvoiceBases2 != null && _InvoiceBases2.Any())
pDataContract.InvoiceBases = _InvoiceBases2.Where(x => x.IsChecked).Select(vm => vm.CommitToDataContract()).ToList();
pDataContract.Organisation = _Organisation;
pDataContract.TransferProtokolle = _TransferProtokolle?.ToList();
return pDataContract;
}
public void SendGkvAbrechnung()
{
var req = new GkvAbrechnungSendRequestDC();
req.GkvAbrechnungOid = GkvAbrechnungOid.Value;
ServiceFacade.DoAccountingServiceAsync(s => s.SendNewGkvAbrechnung(req),
cb => Application.Current.Dispatch(() => Update(cb)), true);
}
public void Update(GkvAbrechnungSendResponseDC cb)
{
var dc = cb.GkvAbrechnungDC;
if(dc is null)
{
MessageBox.Show(Application.Current.MainWindow, "Unerwarteter Übertragungsfehler");
return;
}
GkvAbrechnungVersion = dc.GkvAbrechnungVersion;
TransferProtokolle = dc.TransferProtokolle.ToList();
var protokoll = cb.TransferProtokoll;
if (protokoll.Fehlerlevel == GkvTransferFehlerlevel.Soft)
{
MessageBox.Show(Application.Current.MainWindow, protokoll.Fehlernachricht, protokoll.Fehlertitel);
}
else if (protokoll.Fehlerlevel == GkvTransferFehlerlevel.Fatal)
{
BeWoApp.ShowError(protokoll.Fehlertitel + ": " + protokoll.Fehlernachricht, null, false, false);
}
else
{
MessageBox.Show(Application.Current.MainWindow, "Ihre Sendung wurde korrekt übertragen");
}
}
}
public class GkvAbrechnungVM : AbstractDCMapperVM<GkvAbrechnungDC>
{
public static string PropertyName_AbrechnungsZeitraumStart = "AbrechnungsZeitraumStart";
public static string PropertyName_AbrechnungsZeitraumEnde = "AbrechnungsZeitraumEnde";
public static string PropertyName_ErstelltAm = "ErstelltAm";
private long? _GkvAbrechnungOid;
private long? _GkvAbrechnungVersion;
private string _Notice;
private DateTime? _AbrechnungsZeitraumStart;
private DateTime? _AbrechnungsZeitraumEnde;
private DateTime _ErstelltAm;
private decimal _Betrag;
private bool _Bezahlt;
private bool _UrbelegeGesendet;
private GkvVerfahrensstufe _Verfahrensstufe;
internal bool _IsChecked;
private List<InvoiceBaseVM> _InvoiceBases2;
private BindingList<InvoiceBaseVM> _InvoiceBases;
private OrganisationDC _Organisation;
private List<GkvTransferProtokollDC> _TransferProtokolle;
public GkvAbrechnungVM(GkvAbrechnungDC pDC) : base(pDC, !pDC.GkvAbrechnungOid.HasValue)
{
_InvoiceBases = new BindingList<InvoiceBaseVM>();
}
#region
public string AbrechnungsZeitraum => $"{AbrechnungsZeitraumStart.Value.ToShortDateString()} - {AbrechnungsZeitraumEnde.Value.ToShortDateString()}";
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public DateTime? AbrechnungsZeitraumStart
{
get { return this._AbrechnungsZeitraumStart; }
set
{
if (this.AreDifferent(this._AbrechnungsZeitraumStart, value))
{
this._AbrechnungsZeitraumStart = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.AbrechnungsZeitraumStart, value), PropertyName_AbrechnungsZeitraumStart);
this.FirePropertyChanged(PropertyName_AbrechnungsZeitraumStart);
// RE893748923
// var day = value.Value.Day;
// AbrechnungsZeitraumEnde = value.Value.AddDays(1 - day).AddMonths(1).AddDays(-1);
}
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public DateTime? AbrechnungsZeitraumEnde
{
get { return this._AbrechnungsZeitraumEnde; }
set
{
if (this.AreDifferent(this._AbrechnungsZeitraumEnde, value))
{
this._AbrechnungsZeitraumEnde = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.AbrechnungsZeitraumEnde, value), PropertyName_AbrechnungsZeitraumEnde);
this.FirePropertyChanged(PropertyName_AbrechnungsZeitraumEnde);
}
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public DateTime ErstelltAm
{
get { return this._ErstelltAm; }
set
{
if (this.AreDifferent(this._ErstelltAm, value))
{
this._ErstelltAm = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.ErstelltAm, value), nameof(ErstelltAm));
this.FirePropertyChanged(nameof(ErstelltAm));
}
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public long? GkvAbrechnungOid
{
get { return this._GkvAbrechnungOid; }
set
{
if (this.AreDifferent(this._GkvAbrechnungOid, value))
{
this._GkvAbrechnungOid = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.GkvAbrechnungOid, value), nameof(GkvAbrechnungOid));
this.FirePropertyChanged(nameof(GkvAbrechnungOid));
}
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public long? GkvAbrechnungVersion
{
get { return this._GkvAbrechnungOid; }
set
{
if (this.AreDifferent(this._GkvAbrechnungVersion, value))
{
this._GkvAbrechnungVersion = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.GkvAbrechnungVersion, value), nameof(GkvAbrechnungVersion));
this.FirePropertyChanged(nameof(GkvAbrechnungVersion));
}
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public string Notice
{
get { return this._Notice; }
set
{
if (this.AreDifferent(this._Notice, value))
{
this._Notice = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Notice, value), nameof(Notice));
this.FirePropertyChanged(nameof(Notice));
}
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public decimal Betrag
{
get { return this._Betrag; }
set
{
if (this.AreDifferent(this._Betrag, value))
{
this._Betrag = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Betrag, value), nameof(Betrag));
this.FirePropertyChanged(nameof(Betrag));
}
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public bool Bezahlt
{
get { return _Bezahlt; }
set
{
if (AreDifferent(this._Bezahlt, value))
{
_Bezahlt = value;
StoreDirtyInformation(AreDifferent(DataContract.Bezahlt, value), nameof(Bezahlt));
FirePropertyChanged(nameof(Bezahlt));
FirePropertyChanged(nameof(GkvState));
FirePropertyChanged(nameof(Fehlermeldung));
}
}
}
public bool UrbelegeGesendet
{
get { return _UrbelegeGesendet; }
set
{
if (!AreDifferent(_UrbelegeGesendet, value))
return;
_UrbelegeGesendet = value;
StoreDirtyInformation(AreDifferent(DataContract.UrbelegeGesendet, value), nameof(UrbelegeGesendet));
FirePropertyChanged(nameof(UrbelegeGesendet));
FirePropertyChanged(nameof(GkvState));
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public GkvState GkvState
{
get { return GetState(this); }
}
public bool IsChecked
{
get { return _IsChecked; }
set
{
if (AreDifferent(_IsChecked, value))
{
_IsChecked = value;
FirePropertyChanged("IsChecked");
}
}
}
public List<InvoiceBaseVM> InvoiceBases2
{
get { return _InvoiceBases2; }
set { _InvoiceBases2 = value; }
}
public BindingList<InvoiceBaseVM> InvoiceBases
{
get { return _InvoiceBases; }
set { _InvoiceBases = value; }
}
public List<GkvTransferProtokollDC> TransferProtokolle
{
get { return _TransferProtokolle; }
set
{
_TransferProtokolle = value;
FirePropertyChanged(nameof(TransferProtokolle));
FirePropertyChanged(nameof(GkvState));
FirePropertyChanged(nameof(Fehlermeldung));
FirePropertyChanged(nameof(LastTransferDateTime));
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public OrganisationDC Organisation
{
get { return this._Organisation; }
set
{
if (this.AreDifferent(this._Organisation, value))
{
this._Organisation = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Organisation, value), nameof(Organisation));
this.FirePropertyChanged(nameof(Organisation));
}
}
}
public GkvVerfahrensstufe Verfahrensstufe
{
get { return this._Verfahrensstufe; }
set
{
if (this.AreDifferent(this._Verfahrensstufe, value))
{
this._Verfahrensstufe = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Verfahrensstufe, value), nameof(Verfahrensstufe));
this.FirePropertyChanged(nameof(Verfahrensstufe));
}
}
}
public int VerfahrensstufeInt
{
get { return (int)Verfahrensstufe; }
set
{
if (!AreDifferent(this.VerfahrensstufeInt, value))
return;
Verfahrensstufe = (GkvVerfahrensstufe)value;
//FirePropertyChanged(nameof(VerfahrensstufeInt));
}
}
#endregion
public string RecipientString
{
get
{
if (_InvoiceBases2 != null && _InvoiceBases2.Any())
{
return _InvoiceBases2.First().RecipientString;
}
return string.Empty;
}
}
public string Fehlermeldung
{
get
{
var last = TransferProtokolle?.LastOrDefault();
if (last is null || string.IsNullOrWhiteSpace(last.Fehlernachricht))
return null;
if (string.IsNullOrWhiteSpace(last.Fehlertitel))
return last.Fehlernachricht;
return $"{last.Fehlertitel}: {last.Fehlernachricht}";
}
}
public DateTime? LastTransferDateTime
{
get
{
var last = TransferProtokolle?.LastOrDefault();
if (last is null)
return null;
return last.ErstelltAm;
}
}
public static GkvState GetState(GkvAbrechnungVM vm)
{
return GkvAbrechnungExtensions.GetState(
vm,
() => vm.Bezahlt,
() => vm.UrbelegeGesendet,
() => vm.TransferProtokolle,
(x) => x.Fehlerdatum,
(x) => x.Fehlerlevel,
(x) => x.ErstelltAm.Value);
}
protected override void InitByDataContract(GkvAbrechnungDC pDataContract)
{
_AbrechnungsZeitraumStart = pDataContract.AbrechnungsZeitraumStart;
_AbrechnungsZeitraumEnde = pDataContract.AbrechnungsZeitraumEnde;
_ErstelltAm = pDataContract.ErstelltAm;
_GkvAbrechnungOid = pDataContract.GkvAbrechnungOid;
_GkvAbrechnungVersion = pDataContract.GkvAbrechnungVersion;
_Notice = pDataContract.Notice;
_Betrag = pDataContract.Betrag;
_Bezahlt = pDataContract.Bezahlt;
_UrbelegeGesendet = pDataContract.UrbelegeGesendet;
_Verfahrensstufe = pDataContract.Verfahrensstufe;
if (pDataContract.InvoiceBases != null)
{
_InvoiceBases2 = pDataContract.InvoiceBases.Select(x => new InvoiceBaseVM(x, true)).ToList();
_InvoiceBases = new BindingList<InvoiceBaseVM>(_InvoiceBases2);
}
if (pDataContract.TransferProtokolle != null)
{
_TransferProtokolle = new List<GkvTransferProtokollDC>(pDataContract.TransferProtokolle);
}
_Organisation = pDataContract.Organisation;
}
protected override GkvAbrechnungDC MapToDataContract(GkvAbrechnungDC pDataContract, bool doCommit)
{
pDataContract.AbrechnungsZeitraumStart = _AbrechnungsZeitraumStart;
pDataContract.AbrechnungsZeitraumEnde = _AbrechnungsZeitraumEnde;
pDataContract.ErstelltAm = _ErstelltAm;
pDataContract.GkvAbrechnungOid = _GkvAbrechnungOid;
pDataContract.GkvAbrechnungVersion = _GkvAbrechnungVersion;
pDataContract.Notice = _Notice;
pDataContract.Betrag = _Betrag;
pDataContract.Bezahlt = _Bezahlt;
pDataContract.UrbelegeGesendet = _UrbelegeGesendet;
pDataContract.Verfahrensstufe = _Verfahrensstufe;
if (_InvoiceBases != null && _InvoiceBases.Any())
pDataContract.InvoiceBases = _InvoiceBases.Where(x => x.IsChecked).Select(vm => vm.CommitToDataContract()).ToList();
else if (_InvoiceBases2 != null && _InvoiceBases2.Any())
pDataContract.InvoiceBases = _InvoiceBases2.Where(x => x.IsChecked).Select(vm => vm.CommitToDataContract()).ToList();
pDataContract.Organisation = _Organisation;
pDataContract.TransferProtokolle = _TransferProtokolle?.ToList();
return pDataContract;
}
public void SendGkvAbrechnung()
{
var req = new GkvAbrechnungSendRequestDC();
req.GkvAbrechnungOid = GkvAbrechnungOid.Value;
ServiceFacade.DoAccountingServiceAsync(s => s.SendNewGkvAbrechnung(req),
cb => Application.Current.Dispatch(() => Update(cb)), true);
}
public void Update(GkvAbrechnungSendResponseDC cb)
{
var dc = cb.GkvAbrechnungDC;
if (dc is null)
{
MessageBox.Show(Application.Current.MainWindow, "Unerwarteter Übertragungsfehler");
return;
}
GkvAbrechnungVersion = dc.GkvAbrechnungVersion;
TransferProtokolle = dc.TransferProtokolle.ToList();
var protokoll = cb.TransferProtokoll;
if (protokoll.Fehlerlevel == GkvTransferFehlerlevel.Soft)
{
MessageBox.Show(Application.Current.MainWindow, protokoll.Fehlernachricht, protokoll.Fehlertitel);
}
else if (protokoll.Fehlerlevel == GkvTransferFehlerlevel.Fatal)
{
BeWoApp.ShowError(protokoll.Fehlertitel + ": " + protokoll.Fehlernachricht, null, false, false);
}
else
{
MessageBox.Show(Application.Current.MainWindow, "Ihre Sendung wurde korrekt übertragen");
}
}
}
}

View File

@@ -19,6 +19,10 @@ namespace BeWo.ViewModel.ListViewModel
this.VMList.ListChanged += (s, e) => this.FirePropertyChanged(PropertyName_FilterResultAmountSum);
this.VMList.ListChanged += (s, e) => this.FirePropertyChanged(PropertyName_FilterResultAmountNotPaidSum);
}
public GkvAbrechnungListVM() : this(null)
{
}
public DateTimeSpan DateTimeSpanFilter
{

View File

@@ -84,13 +84,9 @@ namespace BeWo.ViewModel
public static string PropertyName_Feiertage = "Feiertage";
public static string PropertyName_IKKrankenkasse = nameof(IKKrankenkasse);
public static string PropertyName_IKKostentrager = nameof(IKKostentrager);
public static string PropertyName_IKDatenannahmestelle = nameof(IKDatenannahmestelle);
public static string PropertyName_Leistungserbringergruppe = nameof(Leistungserbringergruppe);
public static string PropertyName_BusinessPartnerId = nameof(BusinessPartnerId);
private readonly List<ValueListEntryDC> _AllQualifications;
@@ -166,14 +162,11 @@ namespace BeWo.ViewModel
private FeiertagListVM _Feiertage;
private string _IKKrankenkasse;
private string _IKKostentrager;
private string _IKDatenannahmestelle;
private string _Leistungserbringergruppe;
private string _BusinessPartnerId;
private GkvVerfahrensstufe _Verfahrensstufe;
public OrganisationVM(OrganisationDC pDataContract, List<ValueListEntryDC> pAllQualifications, List<ValueListEntryDC> pPossibleFunctions, List<ValueListEntryDC> pPossibleRoleInOrganisations)
: base(pDataContract, pDataContract.OrganisationOid == null)
@@ -850,6 +843,35 @@ namespace BeWo.ViewModel
}
}
public GkvVerfahrensstufe Verfahrensstufe
{
get { return this._Verfahrensstufe; }
set
{
if (this.AreDifferent(this._Verfahrensstufe, value))
{
this._Verfahrensstufe = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Verfahrensstufe, value), nameof(Verfahrensstufe));
this.FirePropertyChanged(nameof(Verfahrensstufe));
}
}
}
public int VerfahrensstufeInt
{
get { return (int)Verfahrensstufe; }
set
{
if (!AreDifferent(this.VerfahrensstufeInt, value))
return;
Verfahrensstufe = (GkvVerfahrensstufe)value;
//FirePropertyChanged(nameof(VerfahrensstufeInt));
}
}
protected void CommitContact(string pValue, ContactType pContactType)
{
List<ContactDC> lOldContactDCs;
@@ -916,6 +938,7 @@ namespace BeWo.ViewModel
this._IKDatenannahmestelle = pDataContract.IKDatenannahmestelle;
_Leistungserbringergruppe = pDataContract.Leistungserbringergruppe;
_BusinessPartnerId = pDataContract.BusinessPartnerId;
_Verfahrensstufe = pDataContract.Verfahrensstufe;
_Function = pDataContract.Function;
@@ -1024,6 +1047,7 @@ namespace BeWo.ViewModel
pDataContract.IKKrankenkasse = this._IKKrankenkasse;
pDataContract.Leistungserbringergruppe = _Leistungserbringergruppe;
pDataContract.BusinessPartnerId = _BusinessPartnerId;
pDataContract.Verfahrensstufe = _Verfahrensstufe;
this.CommitContact(this._Phone, ContactType.business_Phone);
this.CommitContact(this._Website, ContactType.business_Homepage);

View File

@@ -12,12 +12,14 @@ namespace Dakota
{
public static class DakotaValidator
{
public static void ClearTextString(string input)
public static string ClearTextString(string input)
{
foreach (var specialChar in DakotaConfig.SpecialCollection)
{
input = input.Replace(specialChar, DakotaConfig.Aufhebungszeichen + specialChar);
}
return input.Trim();
}
/// <summary>

View File

@@ -1,4 +1,5 @@
using BeWo.Data.Entities;
using BS.Shared;
using BS.Shared.DataContracts;
using Dakota.Models.Infos;
using Dakota.Models.Schlüssels;
@@ -46,7 +47,7 @@ namespace Dakota.Logic
// return info;
//}
internal InfoDateiNutzdaten GetEmptyInfoNutzdatendatei(string absender, string empfang, string logischerDateiname, int datenaustauschreferenz)
internal InfoDateiNutzdaten GetEmptyInfoNutzdatendatei(string absender, string empfang, int verfahrensstufe, string logischerDateiname, int datenaustauschreferenz)
{
var info = new InfoDateiNutzdaten();
@@ -57,7 +58,7 @@ namespace Dakota.Logic
info.Datenaustauschreferenz = datenaustauschreferenz;
info.Leistungsbereich = SchlüsselLeistungserbringerSammelgruppenschlussel.SoziotherapeutischerLeistungserbringer;
info.Anwendungsreferenz = logischerDateiname;
info.Testindikator = SchlüsselTestindikator.Testdatei;
info.Testindikator = SchlüsselTestindikator.GetSchlüsselTestindikator((GkvVerfahrensstufe)verfahrensstufe);
return info;
}

View File

@@ -49,15 +49,18 @@ namespace Dakota.Logic
if (!success)
{
var verfahrensstufe = organisation.Verfahrensstufe;
// Verfahrenkennung
// Erste Stelle:
// "E" - Echtdaten
// "T" - Testdaten
var verfahrenkennung = "TSOL0";
// Annahme: "E" auch für Erprobungsverfahrenstufe
var verfahrenkennung = verfahrensstufe == 0 ? "TSOL0" : "ESOL0";
var logischer_dateiname = DakotaConfig.GetLogischerDateiname(Month).Trim();
var info_nutz_add = DakotaInfoCreator.GetEmptyInfoNutzdatendatei(DakotaConfig.IKAbsender, organisation.IKDatenannahmestelle, logischer_dateiname, datenaustauschreferenz);
var info_nutz_add = DakotaInfoCreator.GetEmptyInfoNutzdatendatei(DakotaConfig.IKAbsender, organisation.IKDatenannahmestelle, (int)verfahrensstufe, logischer_dateiname, datenaustauschreferenz);
var info_auf_add = DakotaInfoCreator.GetEmptyInfoAuftragsdatei(organisation.IKDatenannahmestelle, logischer_dateiname, verfahrenkennung, transfernummer);
DakotaInfoNutzDict.Add(ik_datenannahmestelle, info_nutz_add);

View File

@@ -97,9 +97,9 @@ namespace Dakota.Models.Daten
throw new DakotaException($"Das Feld \"{Title}\" hat bei der Erstellung {_Value.Length} Stellen ergeben! Nach Vorgabe darf es jedoch maximal {MaxStellen} Stellen haben");
}
DakotaValidator.ClearTextString(value);
var mod_value = DakotaValidator.ClearTextString(value);
_Value = value;
_Value = mod_value;
}
}
}

View File

@@ -1,4 +1,5 @@
using System;
using BS.Shared;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -6,12 +7,24 @@ using System.Threading.Tasks;
namespace Dakota.Models.Schlüssels
{
public class SchlüsselTestindikator : Schlüssel
{
public SchlüsselTestindikator(string val) : base(val) { }
public class SchlüsselTestindikator : Schlüssel
{
public SchlüsselTestindikator(string val) : base(val) { }
public static SchlüsselTestindikator Testdatei => new SchlüsselTestindikator("0");
public static SchlüsselTestindikator Erprobungsdatei => new SchlüsselTestindikator("1");
public static SchlüsselTestindikator Echtdatei => new SchlüsselTestindikator("2");
}
public static SchlüsselTestindikator Testdatei => new SchlüsselTestindikator("0");
public static SchlüsselTestindikator Erprobungsdatei => new SchlüsselTestindikator("1");
public static SchlüsselTestindikator Echtdatei => new SchlüsselTestindikator("2");
public static SchlüsselTestindikator GetSchlüsselTestindikator(GkvVerfahrensstufe verfahrensstufe)
{
switch (verfahrensstufe)
{
case GkvVerfahrensstufe.Test: return Testdatei;
case GkvVerfahrensstufe.Erprobung: return Erprobungsdatei;
case GkvVerfahrensstufe.Echt: return Echtdatei;
}
throw new ArgumentOutOfRangeException(nameof(verfahrensstufe));
}
}
}

View File

@@ -59,7 +59,8 @@ namespace DakotaSender
PrintLine("-------------------");
}
static void PrintLine(string line = null)
static void PrintLine() => PrintLine(null);
static void PrintLine(string line)
{
PrintWithTime(line + "\n", !time_in_line);
@@ -78,6 +79,13 @@ namespace DakotaSender
else
Console.Write(line);
}
static void PrintFileInfo(DakotaSystemFile file)
{
PrintLine($"Verarbeite Datei: {file.SourceNutzdatendatei.Name}");
PrintLine($"- Tenant: {file.Tenant}");
PrintLine($"- Protokoll Oid: {file.ProtokollOid}");
PrintLine($"- Datenannahmestelle: {file.Datenannahmestelle}");
}
static void CheckDakotaStatus()
{
@@ -176,64 +184,65 @@ namespace DakotaSender
return toCheck.Any() ? toCheck : null;
}
static void TryProcessFile(DakotaSystemFile file)
{
string error;
bool copied = false;
try
{
var protokoll_oid = file.ProtokollOid;
PrintLine($"Verarbeite Datei: {file.SourceNutzdatendatei.Name}");
PrintLine($"- Tenant: {file.Tenant}");
PrintLine($"- Protokoll Oid: {protokoll_oid}");
PrintLine($"- Datenannahmestelle: {file.Datenannahmestelle}");
copied = true;
CopyFileToDestination(file);
Print("Sende via Dakota. ");
var code = ExecuteDakota("-x");
if (AcceptSendCodes.Contains(code))
{
PrintLine($"Ok.");
DeleteQueueFile(file);
}
else
{
if(code == RC_DAKOTA_ALREADY_LOADED)
{
PrintLine($"Verarbeitung fehlgeschlagen. Dakota läuft bereits.");
PrintLine("Ignoriere Verarbeitung aktuell. Versuche im nächsten Programm Aufruf erneut.");
DeleteDakotaFile(file);
}
else
{
var error = $"Verarbeitung fehlgeschlagen. Statuscode {code} wird nicht akzeptiert.";
PrintLine(error);
MoveQueueToFailed(file);
DeleteDakotaFile(file);
CreateResultXmlFile(file, error);
}
}
error = ProcessFile(file, out copied);
}
catch (Exception e)
{
PrintLine($"Verarbeitung fehlgeschlagen. Exception: {e}");
error = e.ToString();
}
if (error is string)
{
PrintLine(error);
MoveQueueToFailed(file);
if (copied)
DeleteDakotaFile(file);
CreateResultXmlFile(file, error);
}
}
static string ProcessFile(DakotaSystemFile file, out bool copied)
{
copied = false;
PrintFileInfo(file);
if (!IsDakotaFolderDatenannahmestelleValid(file.Datenannahmestelle))
return "Datenannahmestelle unbekannt.";
CopyFileToDestination(file);
copied = true;
Print("Sende via Dakota. ");
var code = ExecuteDakota("-x");
if (code == RC_DAKOTA_ALREADY_LOADED)
{
PrintLine($"Verarbeitung fehlgeschlagen. Dakota läuft bereits.");
PrintLine("Ignoriere Verarbeitung aktuell. Versuche im nächsten Programm Aufruf erneut.");
DeleteDakotaFile(file);
return null;
}
if (!AcceptSendCodes.Contains(code))
return $"Verarbeitung fehlgeschlagen. Statuscode {code} wird nicht akzeptiert.";
PrintLine($"Ok.");
DeleteQueueFile(file);
return null;
}
static void CreateResultXmlFile(DakotaSystemFile file, string error)
{
Print("Speichere Fehler als Xml. ");
@@ -338,6 +347,19 @@ namespace DakotaSender
}
}
static bool IsDakotaFolderDatenannahmestelleValid(string datenannahmestelle)
{
try
{
_ = GetDakotaFolderDatenannahmestelle(datenannahmestelle);
return true;
}
catch (Exception e)
{
return false;
}
}
static DirectoryInfo GetDakotaFolderDatenannahmestelle(string datenannahmestelle)
{
var folder = new DirectoryInfo(Path.Combine(GetDakotaFolder().FullName, "TP5Daten", datenannahmestelle));
@@ -359,7 +381,7 @@ namespace DakotaSender
return dirinfo;
}
static string GetLogPath()
=> ConfigurationManager.AppSettings.Get("LogPath") ?? @"C:\GkvAbrechnung\Sender\log.txt";
static int GetProcessWaitForExitMs()

View File

@@ -19,6 +19,8 @@ namespace BeWo.Data.Entities
public virtual DateTime? AbrechnungsZeitraumEnde { get; set; }
public virtual decimal Betrag { get; set; }
public virtual bool Bezahlt { get; set; }
public virtual bool UrbelegeGesendet { get; set; }
public virtual GkvVerfahrensstufe Verfahrensstufe { get; set; }
public virtual IList<InvoiceBase> InvoiceBases { get; set; }
public virtual IList<GkvTransferProtokoll> GkvTransferProtokolle { get; set; }
@@ -27,6 +29,7 @@ namespace BeWo.Data.Entities
GkvAbrechnungExtensions.GetState(
entity,
() => entity.Bezahlt,
() => entity.UrbelegeGesendet,
() => entity.GkvTransferProtokolle,
(x) => x.Fehlerdatum,
(x) => x.Fehlerlevel,

View File

@@ -351,5 +351,7 @@ namespace BeWo.Data.Entities
}
}
}
public virtual GkvVerfahrensstufe Verfahrensstufe { get; set; }
}
}

View File

@@ -20,8 +20,10 @@
<property column="Betrag" type="decimal" name="Betrag" />
<property column="Bezahlt" type="bool" name="Bezahlt" />
<property column="UrbelegeGesendet" type="bool" name="UrbelegeGesendet" />
<property column="ErstelltAm" type="DateTime" name="ErstelltAm" />
<property column="Verfahrensstufe" type="BS.Shared.GkvVerfahrensstufe, BS.Shared" name="Verfahrensstufe"/>
<bag name="InvoiceBases" table="gkvabrechnung2invoicebase" generic="true" cascade="none" batch-size="250">
<key column="gkvabrechnungoid" />

View File

@@ -20,6 +20,7 @@
<property column="IKKostentrager" type="String" name="IKKostentrager" length="256" />
<property column="IKDatenannahmestelle" type="String" name="IKDatenannahmestelle" length="256" />
<property column="Leistungserbringergruppe" type="String" name="Leistungserbringergruppe" length="256" />
<property column="Verfahrensstufe" type="BS.Shared.GkvVerfahrensstufe, BS.Shared" name="Verfahrensstufe"/>
<property column="BusinessPartnerId" type="String" name="BusinessPartnerId" length="256" />
<many-to-one name="Address" column="AddressOid" class="BeWo.Data.Entities.Address, BeWo.Data" cascade="all" fetch="join"/>

View File

@@ -0,0 +1,2 @@
ALTER TABLE `gkvabrechnung`
ADD COLUMN `UrbelegeGesendet` TINYINT NULL DEFAULT NULL AFTER `Bezahlt`;

View File

@@ -0,0 +1,5 @@
ALTER TABLE `organisation`
ADD COLUMN `Verfahrensstufe` INT NULL DEFAULT 0 AFTER `BusinessPartnerId`;
ALTER TABLE `gkvabrechnung`
ADD COLUMN `Verfahrensstufe` INT NULL DEFAULT 0 AFTER `ErstelltAm`;

View File

@@ -28,7 +28,9 @@ namespace BeWo.Service.DCEntityMapper
pDataContract.Betrag = pEntity.Betrag;
pDataContract.Bezahlt = pEntity.Bezahlt;
pDataContract.UrbelegeGesendet = pEntity.UrbelegeGesendet;
pDataContract.ErstelltAm = pEntity.ErstelltAm;
pDataContract.Verfahrensstufe = pEntity.Verfahrensstufe;
pDataContract.InvoiceBases = MapperFactory.InvoiceBaseDC_InvoiceBase.MapToNewDCs(pEntity.InvoiceBases);
@@ -52,6 +54,8 @@ namespace BeWo.Service.DCEntityMapper
pEntity.Betrag = pDataContract.Betrag;
pEntity.Bezahlt = pDataContract.Bezahlt;
pEntity.UrbelegeGesendet = pDataContract.UrbelegeGesendet;
pEntity.Verfahrensstufe = pDataContract.Verfahrensstufe;
pEntity.ErstelltAm = pDataContract.ErstelltAm;

View File

@@ -32,6 +32,7 @@ namespace BeWo.Service.DCEntityMapper
pDataContract.IKKostentrager = pEntity.IKKostentrager;
pDataContract.IKDatenannahmestelle = pEntity.IKDatenannahmestelle;
pDataContract.Leistungserbringergruppe = pEntity.Leistungserbringergruppe;
pDataContract.Verfahrensstufe = pEntity.Verfahrensstufe;
pDataContract.BusinessPartnerId = pEntity.BusinessPartnerId;
@@ -109,6 +110,7 @@ namespace BeWo.Service.DCEntityMapper
pEntity.IKKostentrager = pDataContract.IKKostentrager;
pEntity.IKDatenannahmestelle = pDataContract.IKDatenannahmestelle;
pEntity.Leistungserbringergruppe = pDataContract.Leistungserbringergruppe;
pEntity.Verfahrensstufe = pDataContract.Verfahrensstufe;
pEntity.BusinessPartnerId = pDataContract.BusinessPartnerId;

View File

@@ -783,13 +783,15 @@ namespace BeWo.Service.ServiceImplementations
gkv_abrechnung.AbrechnungsZeitraumEnde = gkv_abrechnung.AbrechnungsZeitraumEnde.Value.Date.AddDays(1).AddMilliseconds(-1);
}
var orga = gkv_abrechnung.GetOrganisation();
gkv_abrechnung.Verfahrensstufe = orga.Verfahrensstufe;
decimal gesamt = 0;
foreach (var invoicebase_oid in request.SelectedInvoiceBases)
{
var service = DAOFactory.SearchDAO.GetServiceInvoiceByInvoiceBaseOid(invoicebase_oid);
var invoicebase = DAOFactory.GenericDAO.GetByID<InvoiceBase>(invoicebase_oid);
var orga = invoicebase.CostBearer2SupportConcept.CostBearer.Organisation;
var customer = invoicebase.CostBearer2SupportConcept.SupportConcept.Customer;
var invoicebase_dc = MapperFactory.InvoiceBaseDC_InvoiceBase.MapToNewDC(invoicebase);

View File

@@ -1274,9 +1274,17 @@ namespace BS.Shared
{
NoSend,
Waiting,
Waiting4Urbelege,
Error,
ErrorFatal,
Paid,
OldAndNoFeedback
}
public enum GkvVerfahrensstufe
{
Test,
Erprobung,
Echt
}
}

View File

@@ -31,6 +31,7 @@ namespace BS.Shared.Core
public static Dictionary<UserRightType, String> UserRightType2Translations;
public static Dictionary<Enum, string> Wohnhilfe2Translation;
public static Dictionary<Enum, string> Gkv2Translation;
public static Dictionary<ValueListEntryType, String> ValueListEntryType2Header;
@@ -64,6 +65,8 @@ namespace BS.Shared.Core
InitWohnhilfeEnums();
InitGkvTranslation();
#region FamilyStatusTranslations
FamilyStatusTranslations = new Dictionary<object, String>
{
@@ -629,9 +632,10 @@ namespace BS.Shared.Core
BehinderungsartTranslations.DoForEach(p => AllTranslations.AddAndIgnoreDuplicates(p.Key, p.Value));
MerkzeichenTranslations.DoForEach(p => AllTranslations.AddAndIgnoreDuplicates(p.Key, p.Value));
Wohnhilfe2Translation?.DoForEach(kv => AllTranslations.Add(kv.Key, kv.Value));
Gkv2Translation?.DoForEach(kv => AllTranslations.Add(kv.Key, kv.Value));
}
private static void InitUserRightTranslation()
private static void InitUserRightTranslation()
{
var dict = new Dictionary<UserRightType, String>();
@@ -1072,5 +1076,14 @@ namespace BS.Shared.Core
Wohnhilfe2Translation = dict;
}
private static void InitGkvTranslation()
{
var dict = new Dictionary<Enum, string>();
dict.Add(GkvVerfahrensstufe.Test, "Test");
dict.Add(GkvVerfahrensstufe.Erprobung, "Erprobung");
dict.Add(GkvVerfahrensstufe.Echt, "Echt");
}
}
}

View File

@@ -29,9 +29,15 @@ namespace BS.Shared.DataContracts.GkvAbrechnung
[DataMember]
public bool Bezahlt { get; set; }
[DataMember]
public bool UrbelegeGesendet { get; set; }
[DataMember]
public DateTime ErstelltAm { get; set; }
[DataMember]
public GkvVerfahrensstufe Verfahrensstufe { get; set; }
[DataMember]
public IList<InvoiceBaseDC> InvoiceBases { get; set; }

View File

@@ -183,5 +183,8 @@ namespace BS.Shared.DataContracts
[DataMember]
public string BusinessPartnerId { get; set; }
[DataMember]
public GkvVerfahrensstufe Verfahrensstufe { get; set; }
}
}

View File

@@ -9,9 +9,15 @@ namespace BS.Shared.Extensions
{
public static class GkvAbrechnungExtensions
{
/// <summary>
/// Lässt sich besser über Interface lösen....
/// </summary>
/// <param name="gkvAbrechnungDC"></param>
/// <returns></returns>
public static GkvState GetState(this GkvAbrechnungDC gkvAbrechnungDC) => GetState(
gkvAbrechnungDC,
() => gkvAbrechnungDC.Bezahlt,
() => gkvAbrechnungDC.UrbelegeGesendet,
() => gkvAbrechnungDC.TransferProtokolle,
(x) => x.Fehlerdatum,
(x) => x.Fehlerlevel,
@@ -20,6 +26,7 @@ namespace BS.Shared.Extensions
public static GkvState GetState<T2>(
object gkvAbrechnung,
Func<bool> bezahlt,
Func<bool> urbelege,
Func<IList<T2>> protokoll,
Func<T2, DateTime?> fehlerdatum,
Func<T2, GkvTransferFehlerlevel> fehlerlevel,
@@ -45,6 +52,8 @@ namespace BS.Shared.Extensions
}
// Kein Fehler
if (!urbelege())
return GkvState.Waiting4Urbelege;
if (DateTime.Now - created(last_transfer) > TimeSpan.FromDays(28))
{