GetStatus FailFollowUpLogic

Zusätzliche Exception Handling
Test Tenant
This commit is contained in:
2024-11-05 09:52:36 +01:00
parent ea08476354
commit 8b6f9e9630
12 changed files with 507 additions and 215 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -1,12 +1,16 @@
<localView:BeWoView x:Class="BeWo.View.Detail.MandatorView"
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:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
xmlns:markup="clr-namespace:BeWo.MultiLanguage.Markup"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
Height="Auto" Width="Auto" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" Focusable="True">
<localView:BeWoView
x:Class="BeWo.View.Detail.MandatorView"
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"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
xmlns:localView="clr-namespace:BeWo.View"
xmlns:markup="clr-namespace:BeWo.MultiLanguage.Markup"
Width="Auto"
Height="Auto"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Focusable="True">
<Grid x:Name="root">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
@@ -24,13 +28,40 @@
<ColumnDefinition Width="*" MaxWidth="420" />
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Grid.Row="0" Margin="3" VerticalAlignment="Center">Name</Label>
<TextBox Grid.Column="1" Grid.Row="0" Margin="3" Height="23" Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}" />
<Label
Grid.Row="0"
Grid.Column="0"
Margin="3"
VerticalAlignment="Center">
Name
</Label>
<TextBox
Grid.Row="0"
Grid.Column="1"
Height="23"
Margin="3"
Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}" />
<Label Grid.Column="0" Grid.Row="1" Margin="3" VerticalAlignment="Center">IK Nummer (Leistungserbringer)</Label>
<TextBox Grid.Column="1" Grid.Row="1" Margin="3" Height="23" Text="{Binding Path=IKLeistungserbringer, UpdateSourceTrigger=PropertyChanged}" />
<Label
Grid.Row="1"
Grid.Column="0"
Margin="3"
VerticalAlignment="Center">
IK Nummer (Leistungserbringer)
</Label>
<TextBox
Grid.Row="1"
Grid.Column="1"
Height="23"
Margin="3"
Text="{Binding Path=IKLeistungserbringer, UpdateSourceTrigger=PropertyChanged}" />
<GroupBox Margin="3 20 3 3" Grid.Row="2" Grid.ColumnSpan="2" Header="Adresse" Style="{StaticResource ObjectEditGroupBox}">
<GroupBox
Grid.Row="2"
Grid.ColumnSpan="2"
Margin="3,20,3,3"
Header="Adresse"
Style="{StaticResource ObjectEditGroupBox}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
@@ -42,18 +73,56 @@
<ColumnDefinition Width="150" />
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Grid.Row="0" Margin="3" VerticalAlignment="Center">Strasse</Label>
<Label Grid.Column="0" Grid.Row="1" Margin="3" VerticalAlignment="Center">Postleitzahl</Label>
<Label Grid.Column="0" Grid.Row="2" Margin="3" VerticalAlignment="Center">Ort</Label>
<Label
Grid.Row="0"
Grid.Column="0"
Margin="3"
VerticalAlignment="Center">
Strasse
</Label>
<Label
Grid.Row="1"
Grid.Column="0"
Margin="3"
VerticalAlignment="Center">
Postleitzahl
</Label>
<Label
Grid.Row="2"
Grid.Column="0"
Margin="3"
VerticalAlignment="Center">
Ort
</Label>
<TextBox Grid.Column="1" Grid.Row="0" Margin="3" Height="23" Text="{Binding Path=Street, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Grid.Column="1" Grid.Row="1" Margin="3" Height="23" Text="{Binding Path=PostalCode, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Grid.Column="1" Grid.Row="2" Margin="3" Height="23" Text="{Binding Path=Town, UpdateSourceTrigger=PropertyChanged}" />
<TextBox
Grid.Row="0"
Grid.Column="1"
Height="23"
Margin="3"
Text="{Binding Path=Street, UpdateSourceTrigger=PropertyChanged}" />
<TextBox
Grid.Row="1"
Grid.Column="1"
Height="23"
Margin="3"
Text="{Binding Path=PostalCode, UpdateSourceTrigger=PropertyChanged}" />
<TextBox
Grid.Row="2"
Grid.Column="1"
Height="23"
Margin="3"
Text="{Binding Path=Town, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
</GroupBox>
<GroupBox Margin="3 20 3 3" Grid.Row="3" Grid.ColumnSpan="2" Header="Einstellungen" Style="{StaticResource ObjectEditGroupBox}">
<GroupBox
Grid.Row="3"
Grid.ColumnSpan="2"
Margin="3,20,3,3"
Header="Einstellungen"
Style="{StaticResource ObjectEditGroupBox}">
<Grid x:Name="EinstellungenGrid">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
@@ -72,31 +141,82 @@
</Grid.ColumnDefinitions>
<TextBlock Foreground="Black" Grid.Column="0" Grid.Row="3" Margin="3,5,3,5" TextWrapping="Wrap" VerticalAlignment="Center">
Zeit in Minuten bis der BeWoPlaner nach Inaktivität gesperrt wird
<TextBlock
Grid.Row="3"
Grid.Column="0"
Margin="3,5,3,5"
VerticalAlignment="Center"
Foreground="Black"
TextWrapping="Wrap">
Zeit in Minuten bis der BeWoPlaner nach Inaktivität gesperrt wird
</TextBlock>
<dxe:SpinEdit x:Name="LockUITimeSpinEdit" IsFloatValue="False" MinValue="0" MaxValue="999"
Grid.Column="1" Grid.Row="3" Margin="3,5,3,5" Height="23"
EditValue="{Binding Path=TimeUntilUILock, Converter={StaticResource Int2DecimalConverter}, Mode=TwoWay}" />
<dxe:SpinEdit
x:Name="LockUITimeSpinEdit"
Grid.Row="3"
Grid.Column="1"
Height="23"
Margin="3,5,3,5"
EditValue="{Binding Path=TimeUntilUILock, Converter={StaticResource Int2DecimalConverter}, Mode=TwoWay}"
IsFloatValue="False"
MaxValue="999"
MinValue="0" />
<TextBlock Foreground="Black" Grid.Column="0" Grid.Row="4" Margin="3,5,3,5" TextWrapping="Wrap" VerticalAlignment="Center">
<TextBlock
Grid.Row="4"
Grid.Column="0"
Margin="3,5,3,5"
VerticalAlignment="Center"
Foreground="Black"
TextWrapping="Wrap">
Zeit in Minuten bis die Session in der Mobilversion abläuft
</TextBlock>
<dxe:SpinEdit x:Name="MoKSessionTimeoutSpinEdit" IsFloatValue="False" MinValue="20" MaxValue="60"
Grid.Column="1" Grid.Row="4" Margin="3,5,3,5" Height="23"
EditValue="{Binding Path=MoKSessionTimeout, Converter={StaticResource Int2DecimalConverter}, Mode=TwoWay}" />
<dxe:SpinEdit
x:Name="MoKSessionTimeoutSpinEdit"
Grid.Row="4"
Grid.Column="1"
Height="23"
Margin="3,5,3,5"
EditValue="{Binding Path=MoKSessionTimeout, Converter={StaticResource Int2DecimalConverter}, Mode=TwoWay}"
IsFloatValue="False"
MaxValue="60"
MinValue="20" />
<TextBlock Foreground="Black" Grid.Column="0" Grid.Row="5" Margin="3,5,3,5" TextWrapping="Wrap" VerticalAlignment="Center" Text="{markup:Translate Anzahl Monate\, ab der eine Warnung für auslaufende Hilfepläne angezeigt wird}"/>
<dxe:SpinEdit x:Name="helpplan" IsFloatValue="False" MinValue="0" MaxValue="999"
Grid.Column="1" Grid.Row="5" Margin="3,5,3,5" Height="23" EditValue="{Binding Path=HilfeplanAuslaufAuswahl, Converter={StaticResource Int2DecimalConverter}}" />
<TextBlock
Grid.Row="5"
Grid.Column="0"
Margin="3,5,3,5"
VerticalAlignment="Center"
Foreground="Black"
Text="{markup:Translate Anzahl Monate\, ab der eine Warnung für auslaufende Hilfepläne angezeigt wird}"
TextWrapping="Wrap" />
<dxe:SpinEdit
x:Name="helpplan"
Grid.Row="5"
Grid.Column="1"
Height="23"
Margin="3,5,3,5"
EditValue="{Binding Path=HilfeplanAuslaufAuswahl, Converter={StaticResource Int2DecimalConverter}}"
IsFloatValue="False"
MaxValue="999"
MinValue="0" />
<CheckBox Margin="3,5,3,5" Content="Passwortsicherheit aktivieren" IsChecked="{Binding Path=IsPasswordSecurityActiv}" Grid.ColumnSpan="2" Grid.Row="7" />
<CheckBox
Grid.Row="7"
Grid.ColumnSpan="2"
Margin="3,5,3,5"
Content="Passwortsicherheit aktivieren"
IsChecked="{Binding Path=IsPasswordSecurityActiv}" />
</Grid>
</GroupBox>
<GroupBox Margin="3 20 3 3" Grid.Row="4" Grid.ColumnSpan="2" Header="{markup:Translate Zeiterfassung}" Style="{StaticResource ObjectEditGroupBox}">
<GroupBox
Grid.Row="4"
Grid.ColumnSpan="2"
Margin="3,20,3,3"
Header="{markup:Translate Zeiterfassung}"
Style="{StaticResource ObjectEditGroupBox}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
@@ -116,40 +236,149 @@
<ColumnDefinition Width="50" />
</Grid.ColumnDefinitions>
<CheckBox Grid.Row="0" Margin="3,5,3,5" Content="{markup:Translate Dokumentationstext in der Zeiterfassung Pflichtfeld}" IsChecked="{Binding Path=IsServiceRecordNoticeMandatory}" Grid.ColumnSpan="2"></CheckBox>
<CheckBox
Grid.Row="0"
Grid.ColumnSpan="2"
Margin="3,5,3,5"
Content="{markup:Translate Dokumentationstext in der Zeiterfassung Pflichtfeld}"
IsChecked="{Binding Path=IsServiceRecordNoticeMandatory}" />
<TextBlock Foreground="Black" Grid.Column="0" Grid.Row="1" Margin="3,5,3,5" TextWrapping="Wrap" VerticalAlignment="Center" Text="{markup:Translate Anzahl Tage des Folgemonats\, nach denen die Zeiterfassungseinträge des vergangenen Monats nicht mehr verändert werden oder neue Zeiterfassungseinträge angelegt werden dürfen (0 für unbegrenzt).}"/>
<dxe:SpinEdit IsFloatValue="False" MinValue="0" Grid.Column="1" Grid.Row="1" Margin="3,5,3,5" Height="23" EditValue="{Binding Path=MaxDaysEditServiceRecordsAllowed, Converter={StaticResource Int2DecimalConverter}}" />
<TextBlock
Grid.Row="1"
Grid.Column="0"
Margin="3,5,3,5"
VerticalAlignment="Center"
Foreground="Black"
Text="{markup:Translate Anzahl Tage des Folgemonats\, nach denen die Zeiterfassungseinträge des vergangenen Monats nicht mehr verändert werden oder neue Zeiterfassungseinträge angelegt werden dürfen (0 für unbegrenzt).}"
TextWrapping="Wrap" />
<dxe:SpinEdit
Grid.Row="1"
Grid.Column="1"
Height="23"
Margin="3,5,3,5"
EditValue="{Binding Path=MaxDaysEditServiceRecordsAllowed, Converter={StaticResource Int2DecimalConverter}}"
IsFloatValue="False"
MinValue="0" />
<TextBlock Foreground="Black" Grid.Column="0" Grid.Row="2" Margin="3,5,3,5" TextWrapping="Wrap" VerticalAlignment="Center" Text="{markup:Translate Anzahl Tage\, in der die Zeiterfassung erfolgen muss (0 für unbegrenzt)}"/>
<TextBlock Foreground="Black" Grid.Column="0" Grid.Row="3" Margin="3,5,3,5" TextWrapping="Wrap" VerticalAlignment="Center" Text="{markup:Translate Schwellwert in %\, ab der das Restbudget in der Zeiterfassung rot markiert wird}"/>
<TextBlock
Grid.Row="2"
Grid.Column="0"
Margin="3,5,3,5"
VerticalAlignment="Center"
Foreground="Black"
Text="{markup:Translate Anzahl Tage\, in der die Zeiterfassung erfolgen muss (0 für unbegrenzt)}"
TextWrapping="Wrap" />
<TextBlock
Grid.Row="3"
Grid.Column="0"
Margin="3,5,3,5"
VerticalAlignment="Center"
Foreground="Black"
Text="{markup:Translate Schwellwert in %\, ab der das Restbudget in der Zeiterfassung rot markiert wird}"
TextWrapping="Wrap" />
<dxe:SpinEdit x:Name="AnzTageZeiterfassErfolgt" IsFloatValue="False" MinValue="0" MaxValue="999"
Grid.Column="1" Grid.Row="2" Margin="3,5,3,5" Height="23" EditValue="{Binding Path=AnzTageZeiterfassErfolgt, Converter={StaticResource Int2DecimalConverter}}" />
<dxe:SpinEdit
x:Name="AnzTageZeiterfassErfolgt"
Grid.Row="2"
Grid.Column="1"
Height="23"
Margin="3,5,3,5"
EditValue="{Binding Path=AnzTageZeiterfassErfolgt, Converter={StaticResource Int2DecimalConverter}}"
IsFloatValue="False"
MaxValue="999"
MinValue="0" />
<dxe:SpinEdit x:Name="ZeiterfassungsSchwellwert" IsFloatValue="False" MinValue="0" MaxValue="100" Value="80"
Grid.Column="1" Grid.Row="3" Margin="3,5,3,5" Height="23" EditValue="{Binding Path=ZeiterfassungsSchwellwert, Converter={StaticResource Int2DecimalConverter}}" />
<dxe:SpinEdit
x:Name="ZeiterfassungsSchwellwert"
Grid.Row="3"
Grid.Column="1"
Height="23"
Margin="3,5,3,5"
EditValue="{Binding Path=ZeiterfassungsSchwellwert, Converter={StaticResource Int2DecimalConverter}}"
IsFloatValue="False"
MaxValue="100"
MinValue="0"
Value="80" />
<TextBlock Foreground="Black" Grid.Column="0" Grid.Row="4" Margin="3,5,3,5" TextWrapping="Wrap" VerticalAlignment="Center" Text="{markup:Translate Zeiteinheit der Dauer}"/>
<ComboBox x:Name="ComboZeiteinheit" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" Margin="160,5,3,5" Height="23" SelectionChanged="ComboZeiteinheit_SelectionChanged"/>
<TextBlock
Grid.Row="4"
Grid.Column="0"
Margin="3,5,3,5"
VerticalAlignment="Center"
Foreground="Black"
Text="{markup:Translate Zeiteinheit der Dauer}"
TextWrapping="Wrap" />
<ComboBox
x:Name="ComboZeiteinheit"
Grid.Row="4"
Grid.Column="0"
Grid.ColumnSpan="2"
Height="23"
Margin="160,5,3,5"
SelectionChanged="ComboZeiteinheit_SelectionChanged" />
<CheckBox Margin="3,5,3,5" Content="{markup:Translate Enddatum anzeigen}" IsChecked="{Binding Path=IsEndDateVisible}" Grid.ColumnSpan="2" Grid.Row="6" />
<CheckBox
Grid.Row="6"
Grid.ColumnSpan="2"
Margin="3,5,3,5"
Content="{markup:Translate Enddatum anzeigen}"
IsChecked="{Binding Path=IsEndDateVisible}" />
<CheckBox x:Name="EnableArbeitszeiterfassung" Margin="3,20,3,5" Content="{markup:Translate Arbeitszeit mit BeWoPlaner erfassen}" IsChecked="{Binding Path=EnableArbeitszeiterfassung}" Grid.ColumnSpan="2" Grid.Row="7" />
<CheckBox x:Name="EnableAutomaticPauses" Margin="3,5,3,5" Content="{markup:Translate Automatischer Pausenabzug}" IsChecked="{Binding Path=EnableAutomaticPauses}" Grid.ColumnSpan="2" Grid.Row="8" />
<CheckBox x:Name="EnableRestTimeWarning" Margin="3,5,3,5" Content="{markup:Translate Warnung bei nicht einhalten der Ruhezeit}" IsChecked="{Binding Path=EnableRestTimeWarning}" Grid.ColumnSpan="2" Grid.Row="9" />
<CheckBox
x:Name="EnableArbeitszeiterfassung"
Grid.Row="7"
Grid.ColumnSpan="2"
Margin="3,20,3,5"
Content="{markup:Translate Arbeitszeit mit BeWoPlaner erfassen}"
IsChecked="{Binding Path=EnableArbeitszeiterfassung}" />
<CheckBox
x:Name="EnableAutomaticPauses"
Grid.Row="8"
Grid.ColumnSpan="2"
Margin="3,5,3,5"
Content="{markup:Translate Automatischer Pausenabzug}"
IsChecked="{Binding Path=EnableAutomaticPauses}" />
<CheckBox
x:Name="EnableRestTimeWarning"
Grid.Row="9"
Grid.ColumnSpan="2"
Margin="3,5,3,5"
Content="{markup:Translate Warnung bei nicht einhalten der Ruhezeit}"
IsChecked="{Binding Path=EnableRestTimeWarning}" />
<TextBlock x:Name="TextBlockShowWarning" Foreground="Black" Grid.Column="0" Grid.Row="10" Margin="3,5,3,5" TextWrapping="Wrap" VerticalAlignment="Center" Text="{markup:Translate Anzahl Stunden\, ab der eine Warnung angezeigt wird}"/>
<dxe:SpinEdit x:Name="SpinEditShowWarning" IsFloatValue="False" Value="10" MinValue="0" Grid.Column="1" Grid.Row="10" Margin="3,5,3,5" Height="23" EditValue="{Binding Path=MaxWorkTimeHoursBeforeWarning, Converter={StaticResource Int2DecimalConverter}}" />
<TextBlock
x:Name="TextBlockShowWarning"
Grid.Row="10"
Grid.Column="0"
Margin="3,5,3,5"
VerticalAlignment="Center"
Foreground="Black"
Text="{markup:Translate Anzahl Stunden\, ab der eine Warnung angezeigt wird}"
TextWrapping="Wrap" />
<dxe:SpinEdit
x:Name="SpinEditShowWarning"
Grid.Row="10"
Grid.Column="1"
Height="23"
Margin="3,5,3,5"
EditValue="{Binding Path=MaxWorkTimeHoursBeforeWarning, Converter={StaticResource Int2DecimalConverter}}"
IsFloatValue="False"
MinValue="0"
Value="10" />
</Grid>
</GroupBox>
<GroupBox Margin="3 20 3 3" Grid.Row="5" Grid.ColumnSpan="2" Header="Rechnungsnummer" Style="{StaticResource ObjectEditGroupBox}">
<GroupBox
Grid.Row="5"
Grid.ColumnSpan="2"
Margin="3,20,3,3"
Header="Rechnungsnummer"
Style="{StaticResource ObjectEditGroupBox}">
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
@@ -162,38 +391,100 @@
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Label Content="Automatische Rechnungsnummer verwenden" Margin="3" VerticalAlignment="Center" />
<dxe:CheckEdit Grid.Column="1" Width="200" Margin="3" Height="23" IsChecked="{Binding InvoiceNumber.Use}" />
<Label
Margin="3"
VerticalAlignment="Center"
Content="Automatische Rechnungsnummer verwenden" />
<dxe:CheckEdit
Grid.Column="1"
Width="200"
Height="23"
Margin="3"
IsChecked="{Binding InvoiceNumber.Use}" />
<Label x:Name="lblSchema" Content="Schema" Grid.Row="1" Margin="3" VerticalAlignment="Center" />
<TextBox x:Name="txtSchema" Grid.Column="1" Grid.Row="1" Width="200" Margin="3" Height="23" Text="{Binding InvoiceNumber.Pattern}" />
<Label
x:Name="lblSchema"
Grid.Row="1"
Margin="3"
VerticalAlignment="Center"
Content="Schema" />
<TextBox
x:Name="txtSchema"
Grid.Row="1"
Grid.Column="1"
Width="200"
Height="23"
Margin="3"
Text="{Binding InvoiceNumber.Pattern}" />
<Label x:Name="lblNumber" Content="Aktuelle Nummer" Grid.Row="2" Margin="3" VerticalAlignment="Center" />
<dxe:SpinEdit Name="spinedit_number" Grid.Column="1" Grid.Row="2" IsFloatValue="False" MaxValue="999999999"
Height="23" Width="200" EditValue="{Binding Path=InvoiceNumber.CurrentNumber, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource Int2DecimalConverter}}" />
<Label
x:Name="lblNumber"
Grid.Row="2"
Margin="3"
VerticalAlignment="Center"
Content="Aktuelle Nummer" />
<dxe:SpinEdit
Name="spinedit_number"
Grid.Row="2"
Grid.Column="1"
Width="200"
Height="23"
EditValue="{Binding Path=InvoiceNumber.CurrentNumber, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource Int2DecimalConverter}}"
IsFloatValue="False"
MaxValue="999999999" />
<dxg:GridControl x:Name="GridControlInvoiceNumbers" Margin="0,10,0,0" Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="2" ItemsSource="{Binding InvoiceNumberList}">
<dxg:GridControl
x:Name="GridControlInvoiceNumbers"
Grid.Row="3"
Grid.Column="0"
Grid.ColumnSpan="2"
Margin="0,10,0,0"
ItemsSource="{Binding InvoiceNumberList}">
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="Name" Header="Name" Width="100" SortOrder="Ascending" SortIndex="0" AllowEditing="False">
</dxg:GridColumn>
<dxg:GridColumn FieldName="Pattern" Header="Schema" Width="100">
</dxg:GridColumn>
<dxg:GridColumn FieldName="CurrentNumber" Header="Aktuelle Nummer" Width="100">
<dxg:GridColumn
Width="100"
AllowEditing="False"
FieldName="Name"
Header="Name"
SortIndex="0"
SortOrder="Ascending" />
<dxg:GridColumn
Width="100"
FieldName="Pattern"
Header="Schema" />
<dxg:GridColumn
Width="100"
FieldName="CurrentNumber"
Header="Aktuelle Nummer">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="0" Mask="########0" MaskType="Numeric"></dxe:TextEditSettings>
<dxe:TextEditSettings
DisplayFormat="0"
Mask="########0"
MaskType="Numeric" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView AutoWidth="true" ShowGroupPanel="False" ShowGroupedColumns="false" ShowTotalSummary="False" NavigationStyle="Cell" />
<dxg:TableView
AutoWidth="true"
NavigationStyle="Cell"
ShowGroupPanel="False"
ShowGroupedColumns="false"
ShowTotalSummary="False" />
</dxg:GridControl.View>
</dxg:GridControl>
</Grid>
</GroupBox>
<GroupBox x:Name="groupBoxSozio" Margin="3 20 3 3" Grid.Row="6" Grid.ColumnSpan="2" Header="Soziotherapie" Style="{StaticResource ObjectEditGroupBox}" Visibility="Collapsed">
<!--Kann frei genutzt werden-->
<GroupBox
x:Name="groupBoxSozio"
Grid.Row="6"
Grid.ColumnSpan="2"
Margin="3,20,3,3"
Header="Soziotherapie"
Style="{StaticResource ObjectEditGroupBox}"
Visibility="Collapsed">
<!-- Kann frei genutzt werden -->
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
@@ -205,7 +496,13 @@
</Grid>
</GroupBox>
<GroupBox Margin="3 20 3 3" x:Name="GroupOwnChatSettings" Grid.Row="7" Grid.ColumnSpan="2" Header="{markup:Translate ownChat Einstellungen}" Style="{StaticResource ObjectEditGroupBox}">
<GroupBox
x:Name="GroupOwnChatSettings"
Grid.Row="7"
Grid.ColumnSpan="2"
Margin="3,20,3,3"
Header="{markup:Translate ownChat Einstellungen}"
Style="{StaticResource ObjectEditGroupBox}">
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
@@ -214,10 +511,17 @@
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock VerticalAlignment="Center" Margin="8,10,0,0" FontSize="12" Foreground="{DynamicResource MainGroupBoxForegroundBrush}">
<Hyperlink x:Name="HyperlinkOwnChatSettings" TargetName="_NewWindow" Click="Hyperlink_ShowOwnChatSettings_Click">
<TextBlock
Margin="8,10,0,0"
VerticalAlignment="Center"
FontSize="12"
Foreground="{DynamicResource MainGroupBoxForegroundBrush}">
<Hyperlink
x:Name="HyperlinkOwnChatSettings"
Click="Hyperlink_ShowOwnChatSettings_Click"
TargetName="_NewWindow">
<Hyperlink.Inlines>
<Run Text="{markup:Translate ownChat Einstellungen öffnen}"/>
<Run Text="{markup:Translate ownChat Einstellungen öffnen}" />
</Hyperlink.Inlines>
</Hyperlink>
</TextBlock>

View File

@@ -18,6 +18,7 @@ namespace DakotaSender
class Program
{
static readonly string TEST_TENANT = "5000000000";
static readonly string TEST_TENANT_2 = "7375324044";
static bool time_in_line = false;
static bool is_dakota_running = false;
@@ -49,6 +50,7 @@ namespace DakotaSender
if (is_dakota_running)
{
PrintSeperator();
PrintLine($"Verarbeitung im Silent Modus fehlgeschlagen. dakota30.exe läuft (bereits).");
PrintLine("Ignoriere Verarbeitung aktuell. Versuche im nächsten Programm Aufruf erneut.");
}
@@ -118,6 +120,7 @@ namespace DakotaSender
PrintSeperator();
}
static Dictionary<string, Dictionary<string, List<DakotaSystemFile>>> ScanQueueFolder()
{
var queue = Config.QueueFolder;
@@ -128,46 +131,13 @@ namespace DakotaSender
var ten2dat2files = new Dictionary<string, Dictionary<string, List<DakotaSystemFile>>>();
foreach (var auft in files)
{
var nutz_fullname = auft.FullName.Substring(0, auft.FullName.Length - 4);
var nutz = new FileInfo(nutz_fullname);
var file = ScanQueueFile(auft);
if (!nutz.Exists)
{
PrintLine($"{auft.FullName} wird ignoriert. {nutz.FullName} nicht vorhanden");
if (file is null)
continue;
}
PrintLine($"- {auft.FullName}");
var split = nutz.Name.Split('_');
var tenant = split[0];
var app_oid = long.Parse(split[1]);
var p_oid = long.Parse(split[2]);
var datenannahmestelle = split[3];
var transfername = split[4];
// Muss nachher nur entfernt werden, um andere zu testen
// Ggf Tool einbauen?
if (tenant != TEST_TENANT && tenant != "demo")
{
PrintLine($"{auft.FullName} wird ignoriert. Tenant {tenant} nicht gültig.");
continue;
}
else
{
tenant = TEST_TENANT;
}
var file = new DakotaSystemFile()
{
SourceAuftragsdatei = auft,
SourceNutzdatendatei = nutz,
Tenant = tenant,
ProtokollOid = p_oid,
ApplicationUserOid = app_oid,
Datenannahmestelle = datenannahmestelle,
Transfername = transfername,
};
var tenant = file.Tenant;
var datenannahmestelle = file.Datenannahmestelle;
if (!ten2dat2files.ContainsKey(tenant))
ten2dat2files.Add(tenant, new Dictionary<string, List<DakotaSystemFile>>());
@@ -183,7 +153,57 @@ namespace DakotaSender
if (ten2dat2files.Any())
return ten2dat2files;
PrintLine("Keine Dakota Dateien in Queue gefunden.");
PrintLine("Keine gültigen Dakota Dateien in Queue gefunden.");
return null;
}
static DakotaSystemFile ScanQueueFile(FileInfo auft)
{
try
{
var nutz_fullname = auft.FullName.Substring(0, auft.FullName.Length - 4);
var nutz = new FileInfo(nutz_fullname);
if (!nutz.Exists)
{
PrintLine($"{auft.FullName} wird ignoriert. {nutz.FullName} nicht vorhanden");
return null;
}
PrintLine($"- {auft.FullName}");
var split = nutz.Name.Split('_');
var tenant = split[0];
var app_oid = long.Parse(split[1]);
var p_oid = long.Parse(split[2]);
var datenannahmestelle = split[3];
var transfername = split[4];
// Muss nachher nur entfernt werden, um andere zu testen
// Ggf Tool einbauen?
if (tenant != TEST_TENANT && tenant != TEST_TENANT_2)
{
PrintLine($"{auft.FullName} wird ignoriert. Tenant {tenant} nicht gültig.");
return null;
}
var file = new DakotaSystemFile()
{
SourceAuftragsdatei = auft,
SourceNutzdatendatei = nutz,
Tenant = tenant,
ProtokollOid = p_oid,
ApplicationUserOid = app_oid,
Datenannahmestelle = datenannahmestelle,
Transfername = transfername,
};
return file;
}
catch(Exception e)
{
PrintException(e);
}
return null;
}
@@ -381,11 +401,11 @@ namespace DakotaSender
else
PrintLine("Fehler: " + res.Message);
}
catch(GkvException e)
catch (GkvException e)
{
PrintException(e);
}
catch(Exception e)
catch (Exception e)
{
PrintException(e);
}

View File

@@ -10,8 +10,8 @@ namespace DakotaSender
{
const int RC_DAKOTA_ALREADY_LOADED = 18;
static readonly int[] AcceptStatusCodes = new int[] { 0 };
static readonly int[] AcceptSendCodes = new int[] { 0 };
static readonly int[] AcceptStatusCodes = new int[] { 0, 1, 100, 101 };
static readonly int[] AcceptSendCodes = new int[] { 0, 1 };
static readonly Dictionary<int, string> StatusReturncodeToMeaning = new Dictionary<int, string>()
{

View File

@@ -5956,7 +5956,7 @@ namespace BeWo.Data.Access
var t = criteria.List<int?>().SingleOrDefault();
return t + 1?? 0;
return t + 1 ?? 0;
}
public List<Bargeldtransaktionshistory> LoadBargeldtransaktionshistoryEntriesByTransaktionsOids(List<long> transaktionsOids)

View File

@@ -75,32 +75,9 @@ namespace Host
try
{
foreach (var result in req.ResultDCs)
{
HandleResult(result);
}
var service = new AccountingServiceImp();
var follows = req.ResultDCs.Where(x => x.ResultType == GkvTransferResultType.FailFollowUp);
if (follows.Any())
{
var service = new AccountingServiceImp();
foreach (var follow in follows)
{
var protokoll_oid = follow.ProtokollOid;
var protokoll = DAOFactory.GenericDAO.LoadByID<GkvTransferProtokoll>(protokoll_oid);
var abrechnung_oid = protokoll.GkvAbrechnungOid;
var new_req = new GkvAbrechnungSendRequestDC() {
GkvAbrechnungOid = abrechnung_oid
};
var res = service.SendNewGkvAbrechnung(new_req);
if (!res.Success)
throw new GkvException(res.Message);
}
}
service.HandleGkvServerResults(req.ResultDCs);
response.Success = true;
}
@@ -116,34 +93,6 @@ namespace Host
SendResponse(response);
}
private void HandleResult(GkvServerResultDC result)
{
var protokoll = DAOFactory.GenericDAO.GetByID<GkvTransferProtokoll>(result.ProtokollOid);
protokoll.ResultType = result.ResultType;
protokoll.Fehlertitel = result.Titel;
protokoll.Fehlerdatum = result.Datum;
protokoll.Fehlernachricht = result.Nachricht;
switch (result.ResultType)
{
case GkvTransferResultType.Success:
protokoll.SentDakotaSuccess = true;
break;
case GkvTransferResultType.FailSoft:
protokoll.SentApp8Success = false;
break;
case GkvTransferResultType.FailFatal:
protokoll.SentApp8Success = false;
break;
case GkvTransferResultType.FailFollowUp:
protokoll.SentApp8Success = false;
break;
}
DAOFactory.GenericDAO.Update(protokoll);
}
#region Senden
private void SendInvalidInputResponse() => SendErrorResponse(INVALID_INPUT);
private void SendErrorResponse(string message)

View File

@@ -200,7 +200,7 @@ namespace Host
var tuple_count = req.Oids.Length;
response.ResultDC = new GkvServerResultDC[tuple_count];
response.Results = new GkvServerResultDC[tuple_count];
try
{
@@ -214,7 +214,7 @@ namespace Host
if (results.TryGetValue(gkv_transfer_oid, out var fehlerDC))
{
response.ResultDC[i] = fehlerDC;
response.Results[i] = fehlerDC;
}
}

View File

@@ -241,6 +241,7 @@
<add key="GkvKostentragerdateiFolderPath" value="C:\GkvAbrechnung\KTDatei\" />
<add key="DakotaPath" value="C:\Program Files (x86)\ITSG\dakotale\dakota30.exe" />
<add key="GkvSecretKey" value="DfDGNGn72PKfSYxSUsmRdzuBtpR9novewlmYU3gsjiFgSkaZZeylUXlbO42cWNqiKgLdMUFtWUNZT962F1raQDR7HGUzCNYsFeC" />
<add key="App8IpAddress" value="88.198.50.220" />
</appSettings>
<devExpress>
<themes enableThemesAssembly="true" styleSheetTheme="" theme="" />

View File

@@ -13,13 +13,10 @@ using System.Text;
using System.Text.RegularExpressions;
using System.Xml;
using BeWo.Data;
using BeWo.Data.Entities;
using BeWo.Service.ServiceContracts;
using BeWo.Data;
using BeWo.Data.Access;
using BeWo.View.Navigation.Filter;
using BS.Shared;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;
namespace BeWo.Service.Core

View File

@@ -60,7 +60,7 @@ namespace BeWo.Service.DCEntityMapper
break;
case BS.Shared.GkvState.ErrorFolgefehler:
isReady = false;
tooltip = "Folge Fehler";
tooltip = "Folgefehler";
break;
case BS.Shared.GkvState.Paid:
isReady = false;

View File

@@ -1104,7 +1104,7 @@ namespace BeWo.Service.ServiceImplementations
}
else
{
throw new ArgumentException("Versucht Datenaustauschref zu laden, invalid state", nameof(state));
throw new ArgumentException("Versucht Transfernummer zu laden, invalid state", nameof(state));
}
return new Tuple<int, int>(datenaustauschref, transfernummer);
@@ -1178,51 +1178,72 @@ namespace BeWo.Service.ServiceImplementations
if (!response_app8.Success)
throw new GkvException(response_app8.Message);
bool allAreUpToDate = true;
for (int id = 0; id < updateables_len; id++)
{
var gkv_abrechnung = updateables[id];
var result = response_app8.ResultDC[id];
var results = response_app8.Results.Where(x => x is object);
if (result is null)
continue;
if (!results.Any())
return true;
allAreUpToDate = false;
HandleGkvServerResults(results);
HandleResult(result);
}
return allAreUpToDate;
return false;
}
private void HandleResult(GkvServerResultDC result)
public void HandleGkvServerResults(IEnumerable<GkvServerResultDC> results)
{
var protokoll = DAOFactory.GenericDAO.GetByID<GkvTransferProtokoll>(result.ProtokollOid);
protokoll.ResultType = result.ResultType;
protokoll.Fehlertitel = result.Titel;
protokoll.Fehlerdatum = result.Datum;
protokoll.Fehlernachricht = result.Nachricht;
switch (result.ResultType)
var protokolls = new List<GkvTransferProtokoll>();
foreach (var result in results)
{
case GkvTransferResultType.Success:
protokoll.SentDakotaSuccess = true;
break;
case GkvTransferResultType.FailSoft:
protokoll.SentApp8Success = false;
break;
case GkvTransferResultType.FailFatal:
protokoll.SentApp8Success = false;
break;
case GkvTransferResultType.FailFollowUp:
protokoll.SentApp8Success = false;
break;
var protokoll = DAOFactory.GenericDAO.GetByID<GkvTransferProtokoll>(result.ProtokollOid);
protokoll.ResultType = result.ResultType;
protokoll.Fehlertitel = result.Titel;
protokoll.Fehlerdatum = result.Datum;
protokoll.Fehlernachricht = result.Nachricht;
switch (result.ResultType)
{
case GkvTransferResultType.Success:
protokoll.SentDakotaSuccess = true;
break;
case GkvTransferResultType.FailSoft:
protokoll.SentApp8Success = false;
break;
case GkvTransferResultType.FailFatal:
protokoll.SentApp8Success = false;
break;
case GkvTransferResultType.FailFollowUp:
protokoll.SentApp8Success = false;
break;
}
protokolls.Add(protokoll);
}
DAOFactory.GenericDAO.Update(protokoll);
}
if(protokolls.Any())
DAOFactory.GenericDAO.Update(protokolls);
var follows = results.Where(x => x.ResultType == GkvTransferResultType.FailFollowUp);
if (follows.Any())
{
foreach (var follow in follows)
{
var protokoll_oid = follow.ProtokollOid;
var protokoll = DAOFactory.GenericDAO.LoadByID<GkvTransferProtokoll>(protokoll_oid);
var abrechnung_oid = protokoll.GkvAbrechnungOid;
var new_req = new GkvAbrechnungSendRequestDC()
{
GkvAbrechnungOid = abrechnung_oid
};
var res = SendNewGkvAbrechnung(new_req);
if (!res.Success)
throw new GkvException(res.Message);
}
}
}
private Res SendApp8Request<Req, Res>(Req request) where Req : GkvRequestDC where Res : GkvResponseDC
{

View File

@@ -13,6 +13,6 @@ namespace BS.Shared.DataContracts.GkvAbrechnung
public GkvServerGetStatusResponseDC(bool success) : base(success) { }
public GkvServerGetStatusResponseDC(bool success, string message) : base(success, message) { }
[DataMember] public GkvServerResultDC[] ResultDC { get; set; }
[DataMember] public GkvServerResultDC[] Results { get; set; }
}
}