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

This commit is contained in:
2024-06-18 17:09:34 +02:00
53 changed files with 4397 additions and 2850 deletions

View File

@@ -831,6 +831,7 @@
<Compile Include="Converter\DeleteForGoodRight2VisibilityConverter.cs" />
<Compile Include="Converter\EnumToDescriptionConverter.cs" />
<Compile Include="Converter\FileAttachmentTypeConverter.cs" />
<Compile Include="Converter\GkvState2StringConverter.cs" />
<Compile Include="Converter\IndividualGoalMassnahmeUncheckPreventConverter.cs" />
<Compile Include="Converter\Int2DecimalConverter.cs" />
<Compile Include="Converter\AssessmentSheetHeaderToForegroundConverter.cs" />

View File

@@ -67,7 +67,7 @@
<conv:CollectionCountToVisibilityConverter x:Key="CollectionCountToVisibilityConverter" />
<conv:DeleteForGoodRight2VisibilityConverter x:Key="DeleteForGoodRight2VisibilityConverter" />
<conv:AnonymizationRight2VisibilityConverter x:Key="AnonymizationRight2VisibilityConverter" />
<conv:GkvState2StringConverter x:Key="GkvState2StringConverter" />
<Style x:Key="SupportConceptDetailStyle" TargetType="{x:Type ListBoxItem}">
<Setter Property="HorizontalContentAlignment" Value="{Binding Path=HorizontalContentAlignment, RelativeSource={RelativeSource AncestorLevel=1, AncestorType={x:Type ItemsControl}, Mode=FindAncestor}}" />

View File

@@ -600,7 +600,7 @@ namespace BeWo
AppSettings.ZeiterfassungsSchwellwert = zeiterfassungsSchwellwert;
AppSettings.TimeRecordingMenuName = timeRecordingMenuName;
AppSettings.ShowDistanceFields = showServiceRecordsDistanceFields;
AppSettings.ShowBetrag = showBetrag;
AppSettings.ShowBetrag = showBetrag;
AppSettings.ShowHilfeplanBezeichnung = showHilfeplanBezeichnung;
AppSettings.ShowArbeitszeiten = showArbeitszeiten;
AppSettings.ShowSignatures = showSignatures;

View File

@@ -0,0 +1,39 @@
using BS.Shared;
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 GkvState2StringConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var state = value as GkvState?;
if (state is null)
return null;
switch (state.Value)
{
case GkvState.NoSend: return "Erstellt";
case GkvState.Waiting: return "Gesendet";
case GkvState.Error: return "Fehler";
case GkvState.ErrorFatal: return "Fataler Fehler";
case GkvState.Paid: return "Bezahlt";
case GkvState.OldAndNoFeedback: return "Keine Antwort";
}
return state.ToString();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

View File

@@ -44,68 +44,21 @@
</Grid.RowDefinitions>
<Label Grid.Row="0" Grid.Column="0" Margin="3" Content="Gkv Oid:"/>
<TextBox Grid.Row="0" Grid.Column="2" Margin="3" IsReadOnly="True" Text="{Binding GkvAbrechnungOid}"/>
<Label Grid.Row="1" Grid.Column="0" Margin="3" Content="IK Leistungserbringer:"/>
<TextBox Grid.Row="1" Grid.Column="2" Margin="3" IsReadOnly="True" Text="{Binding IKLeistungserbringer}"/>
<Label Grid.Row="2" Grid.Column="0" Margin="3" Content="IK Krankenkasse:"/>
<TextBox Grid.Row="2" Grid.Column="2" Margin="3" IsReadOnly="True" Text="{Binding IKVersichertenKarte}"/>
<Label Grid.Row="3" Grid.Column="0" Margin="3" Content="IK Kostenträger:"/>
<TextBox Grid.Row="3" Grid.Column="2" Margin="3" IsReadOnly="True" Text="{Binding IKKostenträger}"/>
<Label Grid.Row="4" Grid.Column="0" Margin="3" Content="IK Datenannahmestelle:"/>
<TextBox Grid.Row="4" Grid.Column="2" Margin="3" IsReadOnly="True" Text="{Binding IKDatenannahmestelle}"/>
<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="7" Grid.Column="0" Margin="3" Content="Transfername:"/>
<TextBox Grid.Row="7" Grid.Column="2" Margin="3" IsReadOnly="True" Text="{Binding Transfername}"/>
<Label Grid.Row="8" Grid.Column="0" Margin="3" Content="Datenaustauschreferenz:"/>
<TextBox Grid.Row="8" Grid.Column="2" Margin="3" IsReadOnly="True" Text="{Binding Datenaustauschreferenz}"/>
<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="Dateigröße:"/>
<TextBox Grid.Row="10" Grid.Column="2" Margin="3" IsReadOnly="True" Text="{Binding DateigrößeDisplayname}"/>
<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}"/>
<!--<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" />
<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"/>
</Grid>
</TabItem>
<TabItem Header="Protokoll">
<dxg:GridControl Margin="3" x:Name="datagrid_transfer" DataSource="{Binding TransferProtokolle}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<dxg:GridControl.Columns>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Dateiname" Header="Dateiname"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="PruftDatum" Header="Geprüft am">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="g" Mask="c" MaskType="DateTime"></dxe:TextEditSettings>
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="PruftFehler" Header="Prüffehler"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="VerschlusseltDatum" Header="Verschlüsselt am">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="g" Mask="c" MaskType="DateTime"></dxe:TextEditSettings>
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="VerschlusseltFehler" Header="Verschlüsselungsfehler"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="UbertragDatum" Header="Übertragen am">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="g" Mask="c" MaskType="DateTime"></dxe:TextEditSettings>
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="UbertragFehler" Header="Übertragungsfehler"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="AbsenderBezeichnung" Header="Absender Bezeichnung"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="EmpfangerBezeichnung" Header="Empfänger Bezeichnung"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Dateityp" Header="Dateityp"></dxg:GridColumn>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView NavigationStyle="Cell" BestFitMode="Smart"
AllowBestFit="True" ShowGroupPanel="False" ScrollingMode="Smart" SnapsToDevicePixels="True"
Margin="3,22,3,3"/>
</dxg:GridControl.View>
</dxg:GridControl>
</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.Columns>
@@ -148,11 +101,43 @@
</dxg:GridControl.View>
</dxg:GridControl>
</TabItem>
<TabItem Header="Nutzdatendatei">
<local:TextViewer Text="{Binding Nutzdatendatei, Mode=OneWay}"/>
</TabItem>
<TabItem Header="Auftragsdatei">
<local:TextViewer Text="{Binding Auftragsdatei, Mode=OneWay}"/>
<TabItem Header="Protokoll">
<dxg:GridControl Margin="3" x:Name="datagrid_transfer" DataSource="{Binding TransferProtokolle}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<dxg:GridControl.Columns>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="GkvTransferProtokollOid" Header="Protokoll Oid" Tag="Debug"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="GkvTransferProtokollVersion" Header="Protokoll Version" Tag="Debug"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="AbsenderBezeichnung" Header="Absender Bezeichnung"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="EmpfangerBezeichnung" Header="Empfanger Bezeichnung"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="IKLeistungserbringer" Header="IK Leistungserbringer"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="IKKrankenkasse" Header="IK Krankenkasse"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="IKKostentrager" Header="IK Kostentrager"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Rechnungsnummer" Header="Rechnungsnummer"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Datenaustauschreferenz" Header="Datenaustauschreferenz"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Transfernummer" Header="Transfernummer"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Transfername" Header="Transfername"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="ErstelltAm" Header="Erstellt">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="g" Mask="c" MaskType="DateTime"></dxe:TextEditSettings>
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Dateityp" Header="Dateityp"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Dateiname" Header="Dateiname"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Dateigrosse" Header="Dateigrosse"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Fehlertitel" Header="Fehlertitel"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Fehlerdatum" Header="Fehlerdatum">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="g" Mask="c" MaskType="DateTime"></dxe:TextEditSettings>
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Fehlernachricht" Header="Fehlernachricht"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Fehlerlevel" Header="Fehlerlevel"></dxg:GridColumn>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView NavigationStyle="Cell" BestFitMode="Smart"
AllowBestFit="True" ShowGroupPanel="False" ScrollingMode="Smart" SnapsToDevicePixels="True"
Margin="3,22,3,3"/>
</dxg:GridControl.View>
</dxg:GridControl>
</TabItem>
</TabControl>
</Grid>

View File

@@ -26,8 +26,8 @@
<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"/>
<RadioButton x:Name="radioFilterByAccountingDate" Content="Nach Abrechnungszeitraum filtern" Click="radioFilterByInvoiceDate_Click"/>
<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."/>
</StackPanel>
<Grid Grid.Column="2">
<Grid.ColumnDefinitions>
@@ -35,75 +35,64 @@
<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" />
<Button x:Name="button_reload" Grid.Column="1" Content="Aktualisieren" Margin="3" Click="ReloadButton_OnClick" Height="24" VerticalAlignment="Bottom" Width="80" />
<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"/>
</Grid>
<dxg:GridControl Margin="3" Grid.ColumnSpan="3" Grid.Row="1" DataSource="{Binding VMList}" x:Name="datagrid_gkvAbrechnungen" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<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.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="70" FieldName="ReportLink" Header=" ">
<dxg:GridColumn x:Name="ColumnButtons" AllowEditing="False" Width="Auto" 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" />
<!--<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="#FFFF00" FontSize="11" FontFamily="Wingdings" x:Name="btn_send" Height="18" 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" />
<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" />
</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="AbrechnungsZeitraumStart" Header="Abrechnungsbeginn" Width="116">
<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.EditSettings>
<dxe:DateEditSettings DisplayFormat="d" HorizontalContentAlignment="Right"/>
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="AbrechnungsZeitraumEnde" Header="Abrechnungsende" Width="107" >
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="GkvState" Header="Status" Width="Auto">
<dxg:GridColumn.EditSettings>
<dxe:DateEditSettings DisplayTextConverter="{StaticResource GkvState2StringConverter}"/>
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="LastTransferDateTime" Header="Gesendet Am" Width="Auto">
<dxg:GridColumn.EditSettings>
<dxe:DateEditSettings DisplayFormat="d" HorizontalContentAlignment="Right"/>
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Transfername" Header="Transfername" Width="84" >
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings HorizontalContentAlignment="Right"/>
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Datenaustauschreferenz" Header="Referenz" Width="58" >
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings HorizontalContentAlignment="Right"/>
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="DateigrößeDisplayname" Header="Dateigröße" Width="100" >
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings HorizontalContentAlignment="Right"/>
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="ErstelltAm" Header="Erstelldatum" Width="120">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings HorizontalContentAlignment="Right"/>
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Betrag" Header="Betrag" MinWidth="74">
<dxg:GridColumn x:Name="FehlermeldungColumn" FieldName="Fehlermeldung" Header="Fehlermeldung" Width="*"></dxg:GridColumn>
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="Betrag" Header="Betrag">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="c" Mask="c" MaskType="Numeric" HorizontalContentAlignment="Right"></dxe:TextEditSettings>
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn FieldName="Notice" Header="Bemerkung" MinWidth="200" >
<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.EditSettings>
<dxe:TextEditSettings TextWrapping="Wrap" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn x:Name="PaidColumn" FieldName="Bezahlt" Header="Bezahlt" Width="50"></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"/>
Margin="3,22,3,3" CellValueChanged="gridView_CellValueChanged_1" RowMinHeight="24"
/>
</dxg:GridControl.View>
</dxg:GridControl>
</Grid>

View File

@@ -57,8 +57,6 @@ namespace BeWo.View.Detail.Accounting
CheckRights();
RefreshGkvAbrechnungenList();
UpdateDataGridFilter();
}
public DownloadLinkEngine DownloadLinkEngine { get; set; }
@@ -82,8 +80,7 @@ namespace BeWo.View.Detail.Accounting
private void UpdateDataGridFilter()
{
datagrid_gkvAbrechnungen.FixedFilter = null;
gridView.BestFitColumns();
if (ShowAllInvoices)
{
datagrid_gkvAbrechnungen.FixedFilter = null;
@@ -118,8 +115,16 @@ namespace BeWo.View.Detail.Accounting
(Action)delegate
{
_Viewmodel.UpdateList(dcList);
if (datagrid_gkvAbrechnungen.Visibility != Visibility.Visible)
datagrid_gkvAbrechnungen.Visibility = Visibility.Visible;
UpdateDataGridFilter();
gridView.BestFitColumns();
});
}
private void NewGkvAbrechnungPopUpViewCancelButtonClicked(object sender, EventArgs e)
@@ -196,54 +201,58 @@ namespace BeWo.View.Detail.Accounting
}
}
private void btn_force_send_Click(object sender, RoutedEventArgs e)
{
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>();
string text = "Sind Sie sicher, dass Sie die gewählte GKV-Abrechnung senden möchten?";
var dc = vm.CommitToDataContract();
var state = dc.GetState();
var can_send = state == GkvState.NoSend || state == GkvState.Error;
if (vm.TransferProtokolle != null && vm.TransferProtokolle.Any())
if (!can_send)
{
var last = vm.TransferProtokolle.Last();
var state = last.GetState();
if(state == 6)
{
text = "Die gewählte GKV-Abrechnung wurde bereits erfolgreich gesendet. Möchten Sie sie erneut senden?";
}
string error;
if (state == GkvState.Waiting)
error = "Es wurde bereits übertragen ohne direkte Fehler.";
else if (state == GkvState.ErrorFatal)
error = "GKV-Abrechnung enthält schwere Fehler. Erstellen Sie die Rechnung erneut.";
else if (state == GkvState.Paid)
error = "GKV-Abrechnung ist bereits als bezahlt markiert.";
else if (state == GkvState.OldAndNoFeedback)
error = "GKV-Abrechnung ist älter als 28 Tage und als nicht bezahlt markiert. Wenden Sie sich bitte an Ihre Krankenkasse";
else
{
text = "Die gewählte GKV-Abrechnung wurde nicht erfolgreich gesendet. Möchten Sie sie erneut senden?";
}
error = "def";
MessageBox.Show(error, "Übertragung nicht möglich");
return;
}
string text = "Sind Sie sicher, dass Sie die gewählte GKV-Abrechnung senden möchten?";
if (state == GkvState.Error)
text = "Die gewählte GKV-Abrechnung wurde nicht erfolgreich an die Krankenkasse übertragen. Möchten Sie sie erneut senden?";
if (MessageBox.Show(text, "GKV-Abrechnung senden", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
{
var req = new GkvAbrechnungSendRequestDC();
req.GkvAbrechnungDC = vm.CommitToDataContract();
ServiceFacade.DoAccountingServiceAsync(s => s.SendNewGkvAbrechnung(req),
cb =>
{
Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action) (() =>
{
if(cb.Successful)
{
var dc = cb.GkvAbrechnungDC;
vm.GkvAbrechnungVersion = dc.GkvAbrechnungVersion;
vm.UpdateGkvTransferProtokoll(dc.TransferProtokolle.ToList());
}
else
{
MessageBox.Show(cb.Message);
}
}));
}, false);
vm.SendGkvAbrechnung();
}
}
private void btn_delete_Click(object sender, RoutedEventArgs e)
@@ -276,7 +285,7 @@ namespace BeWo.View.Detail.Accounting
private void gridView_Loaded(object sender, RoutedEventArgs e)
{
//this.gridView.BestFitColumns();
this.gridView.BestFitColumns();
}
private void gridView_ShownEditor(object sender, EditorEventArgs e)
{
@@ -285,6 +294,10 @@ namespace BeWo.View.Detail.Accounting
var ed = (CheckEdit)e.Editor;
ed.Tag = e.Row;
}
else if (int.TryParse(datagrid_gkvAbrechnungen.CurrentColumn.Tag.ToString(), out int tag) && gridView.ActiveEditor is TextEdit)
{
((TextEdit)gridView.ActiveEditor).SetPropertyValue("MaxLength", tag);
}
}
private void gridView_CellValueChanged(object sender, CellValueChangedEventArgs e)
{
@@ -301,13 +314,15 @@ namespace BeWo.View.Detail.Accounting
if (e.Property != null && e.Property.Name == "Background")
{
var gkvAbrechnungVM = datagrid_gkvAbrechnungen.GetRow(e.RowHandle) as GkvAbrechnungVM;
/*
if (gkvAbrechnungVM != null && !String.IsNullOrEmpty(gkvAbrechnungVM.BackgroundColor))
if (gkvAbrechnungVM is null)
return;
if (!gkvAbrechnungVM.Bezahlt && DateTime.Now - gkvAbrechnungVM.ErstelltAm > TimeSpan.FromDays(28))
{
e.Result = new SolidColorBrush((Color)ColorConverter.ConvertFromString(gkvAbrechnungVM.BackgroundColor));
e.Result = Brushes.Orange;
e.Handled = true;
}
*/
}
}

View File

@@ -136,10 +136,6 @@ namespace BeWo.View.Detail.Accounting
popup_organisation.IsOpen = false;
gkvsearchview.ItemSelected -= gkvsearchview_OrganisationSelected;
ViewModel.IKKostenträger = e.Data.IKKostentrager;
ViewModel.IKVersichertenKarte = e.Data.IKKrankenkasse;
ViewModel.IKDatenannahmestelle = e.Data.IKDatenannahmestelle;
popupedit_GkvSearch.Text = e.Data.ToString();
popupedit_GkvSearch.Focus();

View File

@@ -2,11 +2,16 @@ using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Windows;
using System.Windows.Threading;
using BeWo.ServiceProxy;
using BeWo.Validation;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.DataContracts.GkvAbrechnung;
using BS.Shared.Extensions;
using DevExpress.Xpf.Core;
namespace BeWo.ViewModel
@@ -32,38 +37,21 @@ AntwortEntschluesseltAm
public static string PropertyName_AbrechnungsZeitraumStart = "AbrechnungsZeitraumStart";
public static string PropertyName_AbrechnungsZeitraumEnde = "AbrechnungsZeitraumEnde";
public static string PropertyName_Nutzdatendatei = "Nutzdatendatei";
public static string PropertyName_Auftragsdatei = "Auftragsdatei";
public static string PropertyName_Transfername = "Transfername";
public static string PropertyName_ErstelltAm = "ErstelltAm";
private long? _GkvAbrechnungOid;
private long? _GkvAbrechnungVersion;
private string _Notice;
private string _IKLeistungserbringer;
private string _IKVersichertenKarte;
private string _IKKostenträger;
private string _IKDatenannahmestelle;
private DateTime? _AbrechnungsZeitraumStart;
private DateTime? _AbrechnungsZeitraumEnde;
private string _Nutzdatendatei;
private string _Auftragsdatei;
private string _Transfername;
private int _Dateigröße;
private int _Datenaustauschreferenz;
private DateTime? _ErstelltAm;
private DateTime _ErstelltAm;
private decimal _Betrag;
private bool _Bezahlt;
internal bool _IsChecked;
internal bool _IsSendingRequestCurrently;
internal bool _SendAndFailed;
private List<InvoiceBaseVM> _InvoiceBases2;
private BindingList<InvoiceBaseVM> _InvoiceBases;
@@ -77,68 +65,6 @@ AntwortEntschluesseltAm
}
#region
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public string IKVersichertenKarte
{
get { return this._IKVersichertenKarte; }
set
{
if (this.AreDifferent(this._IKVersichertenKarte, value))
{
this._IKVersichertenKarte = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.IKVersichertenKarte, value), nameof(IKVersichertenKarte));
this.FirePropertyChanged(nameof(IKVersichertenKarte));
}
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public string IKKostenträger
{
get { return this._IKKostenträger; }
set
{
if (this.AreDifferent(this._IKKostenträger, value))
{
this._IKKostenträger = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.IKKostenträger, value), nameof(IKKostenträger));
this.FirePropertyChanged(nameof(IKKostenträger));
}
}
}
[ValidationAttribute(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public string IKDatenannahmestelle
{
get { return this._IKDatenannahmestelle; }
set
{
if (this.AreDifferent(this._IKDatenannahmestelle, value))
{
this._IKDatenannahmestelle = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.IKDatenannahmestelle, value), nameof(IKDatenannahmestelle));
this.FirePropertyChanged(nameof(IKDatenannahmestelle));
}
}
}
[ValidationAttribute(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public string IKLeistungserbringer
{
get { return this._IKLeistungserbringer; }
set
{
if (this.AreDifferent(this._IKLeistungserbringer, value))
{
this._IKLeistungserbringer = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.IKLeistungserbringer, value), nameof(IKLeistungserbringer));
this.FirePropertyChanged(nameof(IKLeistungserbringer));
}
}
}
public string AbrechnungsZeitraum => $"{AbrechnungsZeitraumStart.Value.ToShortDateString()} - {AbrechnungsZeitraumEnde.Value.ToShortDateString()}";
@@ -178,99 +104,8 @@ AntwortEntschluesseltAm
}
}
[ValidationAttribute(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public string Nutzdatendatei
{
get { return this._Nutzdatendatei; }
set
{
if (this.AreDifferent(this._Nutzdatendatei, value))
{
this._Nutzdatendatei = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Nutzdatendatei, value), PropertyName_Nutzdatendatei);
this.FirePropertyChanged(PropertyName_Nutzdatendatei);
}
}
}
[ValidationAttribute(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public string Auftragsdatei
{
get { return this._Auftragsdatei; }
set
{
if (this.AreDifferent(this._Auftragsdatei, value))
{
this._Auftragsdatei = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Auftragsdatei, value), PropertyName_Auftragsdatei);
this.FirePropertyChanged(PropertyName_Auftragsdatei);
}
}
}
[ValidationAttribute(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public string Transfername
{
get { return this._Transfername; }
set
{
if (this.AreDifferent(this._Transfername, value))
{
this._Transfername = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Transfername, value), PropertyName_Transfername);
this.FirePropertyChanged(PropertyName_Transfername);
}
}
}
[ValidationAttribute(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public int Datenaustauschreferenz
{
get { return this._Datenaustauschreferenz; }
set
{
if (this.AreDifferent(this._Datenaustauschreferenz, value))
{
this._Datenaustauschreferenz = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Datenaustauschreferenz, value), nameof(Datenaustauschreferenz));
this.FirePropertyChanged(nameof(Datenaustauschreferenz));
}
}
}
[ValidationAttribute(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public int Dateigröße
{
get { return this._Dateigröße; }
set
{
if (this.AreDifferent(this._Dateigröße, value))
{
this._Dateigröße = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Dateigröße, value), nameof(Dateigröße));
this.FirePropertyChanged(nameof(Dateigröße));
FirePropertyChanged(nameof(DateigrößeDisplayname));
}
}
}
public string DateigrößeDisplayname {
get
{
return Utils.SizeSuffix(Dateigröße, 0);
}
set
{
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public DateTime? ErstelltAm
public DateTime ErstelltAm
{
get { return this._ErstelltAm; }
@@ -285,24 +120,6 @@ AntwortEntschluesseltAm
}
}
//public string GesendetDisplay
//{
// get
// {
// if (IsSendingRequestCurrently)
// return "Sendet";
// if (SendAndFailed)
// return "Fehlgeschlagen";
// if (GesendetAm.HasValue)
// return GesendetAm.Value.ToString();
// else
// return "-";
// }
//}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public long? GkvAbrechnungOid
{
@@ -369,19 +186,27 @@ AntwortEntschluesseltAm
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public bool Bezahlt
{
get { return this._Bezahlt; }
get { return _Bezahlt; }
set
{
if (this.AreDifferent(this._Bezahlt, value))
if (AreDifferent(this._Bezahlt, value))
{
this._Bezahlt = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Bezahlt, value), nameof(Bezahlt));
this.FirePropertyChanged(nameof(Bezahlt));
_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; }
@@ -411,13 +236,14 @@ AntwortEntschluesseltAm
public List<GkvTransferProtokollDC> TransferProtokolle
{
get { return _TransferProtokolle; }
set { _TransferProtokolle = value; }
}
public void UpdateGkvTransferProtokoll(List<GkvTransferProtokollDC> list)
{
_TransferProtokolle = list;
FirePropertyChanged(nameof(TransferProtokolle));
set
{
_TransferProtokolle = value;
FirePropertyChanged(nameof(TransferProtokolle));
FirePropertyChanged(nameof(GkvState));
FirePropertyChanged(nameof(Fehlermeldung));
FirePropertyChanged(nameof(LastTransferDateTime));
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
@@ -450,23 +276,57 @@ AntwortEntschluesseltAm
}
}
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)
{
_IKDatenannahmestelle = pDataContract.IKDatenannahmestelle;
_IKKostenträger = pDataContract.IKKostenträger;
_IKLeistungserbringer = pDataContract.IKLeistungserbringer;
_IKVersichertenKarte = pDataContract.IKVersichertenKarte;
_AbrechnungsZeitraumStart = pDataContract.AbrechnungsZeitraumStart;
_AbrechnungsZeitraumEnde = pDataContract.AbrechnungsZeitraumEnde;
_Nutzdatendatei = pDataContract.Nutzdatendatei;
_Auftragsdatei = pDataContract.Auftragsdatei;
_Transfername = pDataContract.Transfername;
_ErstelltAm = pDataContract.ErstelltAm;
_Datenaustauschreferenz = pDataContract.Datenaustauschreferenz;
_Dateigröße = pDataContract.Dateigröße;
_GkvAbrechnungOid = pDataContract.GkvAbrechnungOid;
_GkvAbrechnungVersion = pDataContract.GkvAbrechnungVersion;
_Notice = pDataContract.Notice;
_Betrag = pDataContract.Betrag;
@@ -487,26 +347,17 @@ AntwortEntschluesseltAm
}
protected override GkvAbrechnungDC MapToDataContract(GkvAbrechnungDC pDataContract, bool doCommit)
{
pDataContract.IKDatenannahmestelle = _IKDatenannahmestelle;
pDataContract.IKVersichertenKarte = _IKVersichertenKarte;
pDataContract.IKKostenträger = _IKKostenträger;
pDataContract.IKLeistungserbringer = _IKLeistungserbringer;
pDataContract.AbrechnungsZeitraumStart = _AbrechnungsZeitraumStart;
pDataContract.AbrechnungsZeitraumEnde = _AbrechnungsZeitraumEnde;
pDataContract.Nutzdatendatei = _Nutzdatendatei;
pDataContract.Auftragsdatei = _Auftragsdatei;
pDataContract.Transfername = _Transfername;
pDataContract.ErstelltAm = _ErstelltAm;
pDataContract.GkvAbrechnungOid = _GkvAbrechnungOid;
pDataContract.GkvAbrechnungVersion = _GkvAbrechnungVersion;
pDataContract.Dateigröße = _Dateigröße;
pDataContract.Notice = _Notice;
pDataContract.Betrag = _Betrag;
pDataContract.Bezahlt = _Bezahlt;
pDataContract.Datenaustauschreferenz = _Datenaustauschreferenz;
if (_InvoiceBases != null && _InvoiceBases.Any())
pDataContract.InvoiceBases = _InvoiceBases.Where(x => x.IsChecked).Select(vm => vm.CommitToDataContract()).ToList();
@@ -518,5 +369,27 @@ AntwortEntschluesseltAm
return pDataContract;
}
public void SendGkvAbrechnung()
{
var req = new GkvAbrechnungSendRequestDC();
req.GkvAbrechnungOid = GkvAbrechnungOid.Value;
ServiceFacade.DoAccountingServiceAsync(s => s.SendNewGkvAbrechnung(req),
cb => Application.Current.Dispatch(delegate
{
if (cb.GkvAbrechnungDC is GkvAbrechnungDC dc)
{
GkvAbrechnungVersion = dc.GkvAbrechnungVersion;
TransferProtokolle = dc.TransferProtokolle.ToList();
}
if (cb.Message is object)
{
MessageBox.Show(Application.Current.MainWindow, cb.Message);
}
}), true);
}
}
}

View File

@@ -22,7 +22,7 @@ namespace Dakota
/// <summary>
/// Validiert in erster Phase die Daten. Bei Fehler wird eine DakotaException geworfen.
/// </summary>
public static void ValidateFirstStep(MandatorDC mandatordc, GkvAbrechnungRequestDC request)
public static void ValidateFirstStep(MandatorDC mandatordc)
{
if (mandatordc == null)
throw new DakotaException("Mandator ist null");

View File

@@ -61,10 +61,8 @@ namespace Dakota.Logic
return info;
}
internal InfoDateiAuftrags GetEmptyInfoAuftragsdatei(string empfang, string logischerDateiname, string verfahrenkennung, int datenaustauschreferenz)
internal InfoDateiAuftrags GetEmptyInfoAuftragsdatei(string empfang, string logischerDateiname, string verfahrenkennung, int transfernummer)
{
var transfernummer = datenaustauschreferenz % 1000;
var info = new InfoDateiAuftrags();
info.Identifikator = 500000;
@@ -199,7 +197,7 @@ namespace Dakota.Logic
info.Rechnungsnummer = infoParameter.InvoiceBase.InvoiceNumber;
info.Rechnungsdatum = infoParameter.InvoiceBase.InvoiceDate.Value;
info.Rechnungsart = SchlüsselRechnungsart.AbrechnungVonLeistungserbringer;
info.Rechnungsart = SchlüsselRechnungsart.AbrechnungÜberAbrechnungsstelleOhneInkassovollmacht;
info.Name1 = infoParameter.Mandator.Name;
info.Name2 = "Rene Evertz";
@@ -220,7 +218,7 @@ namespace Dakota.Logic
info.Rechnungsnummer = infoParameter.InvoiceBase.InvoiceNumber;
info.Rechnungsdatum = infoParameter.InvoiceBase.InvoiceDate.Value;
info.Rechnungsart = SchlüsselRechnungsart.AbrechnungVonLeistungserbringer;
info.Rechnungsart = SchlüsselRechnungsart.AbrechnungÜberAbrechnungsstelleOhneInkassovollmacht;
info.Abrechnungsfalle = new List<InfoAbrechnungsfall>();

View File

@@ -40,7 +40,7 @@ namespace Dakota.Logic
IsSammelrechnung = isSammelrechnung;
}
public void Add(ServiceInvoiceDC serviceInvoice, OrganisationDC organisation, CustomerDC customer, MandatorDC mandator, int datenaustauschreferenz)
public void Add(ServiceInvoiceDC serviceInvoice, OrganisationDC organisation, CustomerDC customer, MandatorDC mandator, int datenaustauschreferenz, int transfernummer)
{
try
{
@@ -58,7 +58,7 @@ namespace Dakota.Logic
var logischer_dateiname = DakotaConfig.GetLogischerDateiname(Month).Trim();
var info_nutz_add = DakotaInfoCreator.GetEmptyInfoNutzdatendatei(DakotaConfig.IKAbsender, organisation.IKDatenannahmestelle, logischer_dateiname, datenaustauschreferenz);
var info_auf_add = DakotaInfoCreator.GetEmptyInfoAuftragsdatei(organisation.IKDatenannahmestelle, logischer_dateiname, verfahrenkennung, datenaustauschreferenz);
var info_auf_add = DakotaInfoCreator.GetEmptyInfoAuftragsdatei(organisation.IKDatenannahmestelle, logischer_dateiname, verfahrenkennung, transfernummer);
DakotaInfoNutzDict.Add(ik_datenannahmestelle, info_nutz_add);
DakotaInfoAufDict.Add(ik_datenannahmestelle, info_auf_add);

View File

@@ -9,7 +9,13 @@ namespace Dakota.Models
{
public class DakotaException : ArgumentException
{
public string Message { get; set; }
public string Title { get; set; }
public new string Message { get; set; }
public DakotaException(string message, string title) : this(message)
{
Title = title;
}
public DakotaException(string message) : this()
{

View File

@@ -86,5 +86,10 @@ namespace Dakota
{
return Nutzdatendatei.BlockKostenträger.Count;
}
public string GetRechnungsnummer()
{
return Nutzdatendatei.BlockKostenträger.First().BlockKrankenkasse.First().NachrichtSLGA.SegmentREC.Rechnungsnummer.GetValue();
}
}
}

View File

@@ -12,7 +12,7 @@ namespace Dakota.Models.Schlüssels
public static SchlüsselRechnungsart DerzeitNichtBelegt => new SchlüsselRechnungsart("0");
public static SchlüsselRechnungsart AbrechnungVonLeistungserbringer => new SchlüsselRechnungsart("1");
public static SchlüsselRechnungsart AbrechnungÜberAbrechnungsstelleOhnInkassovollmacht => new SchlüsselRechnungsart("2");
public static SchlüsselRechnungsart AbrechnungÜberAbrechnungsstelleOhneInkassovollmacht => new SchlüsselRechnungsart("2");
public static SchlüsselRechnungsart AbrechnungÜberAbrechnungsstelleMitInkassovollmacht => new SchlüsselRechnungsart("3");
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -2,6 +2,7 @@
using System.Collections.Generic;
using BS.Shared;
using BS.Shared.Extensions;
namespace BeWo.Data.Entities
{
@@ -12,36 +13,23 @@ namespace BeWo.Data.Entities
this._Tid = TableID.GkvAbrechnung;
}
public virtual string IKLeistungserbringer { get; set; }
public virtual string IKVersichertenKarte { get; set; }
public virtual string IKKostentrager { get; set; }
public virtual string IKDatenannahmestelle { get; set; }
public virtual DateTime ErstelltAm { get; set; }
public virtual DateTime? AbrechnungsZeitraumStart { get; set; }
public virtual DateTime? AbrechnungsZeitraumEnde { get; set; }
public virtual string Nutzdatendatei { get; set; }
public virtual string Auftragsdatei { get; set; }
public virtual int Dateigrosse { get; set; }
public virtual string Transfername { get; set; }
public virtual int Datenaustauschreferenz { get; set; }
public virtual DateTime? ErstelltAm { get; set; }
public virtual decimal Betrag { get; set; }
public virtual bool Bezahlt { get; set; }
public virtual IList<InvoiceBase> InvoiceBases { get; set; }
public virtual IList<GkvTransferProtokoll> GkvTransferProtokolle { get; set; }
public static GkvState GetState(GkvAbrechnung entity) =>
GkvAbrechnungExtensions.GetState(
entity,
() => entity.Bezahlt,
() => entity.GkvTransferProtokolle,
(x) => x.Fehlerdatum,
(x) => x.Fehlerlevel,
(x) => x.ErstelltAm.Value);
}
}

View File

@@ -13,15 +13,32 @@ namespace BeWo.Data.Entities
}
public virtual long GkvAbrechnungOid { get; set; }
public virtual string AbsenderBezeichnung { get; set; }
public virtual string EmpfangerBezeichnung { get; set; }
public virtual string IKLeistungserbringer { get; set; }
public virtual string IKKrankenkasse { get; set; }
public virtual string IKKostentrager { get; set; }
public virtual string IKDatenannahmestelle { get; set; }
public virtual string Rechnungsnummer { get; set; }
public virtual int Datenaustauschreferenz { get; set; }
public virtual int Transfernummer { get; set; }
public virtual string Transfername { get; set; }
public virtual DateTime? ErstelltAm { get; set; }
public virtual string Dateityp { get; set; }
public virtual string Dateiname { get; set; }
public virtual DateTime? PruftDatum { get; set; }
public virtual string PruftFehler { get; set; }
public virtual DateTime? VerschlusseltDatum { get; set; }
public virtual string VerschlusseltFehler { get; set; }
public virtual DateTime? UbertragDatum { get; set; }
public virtual string UbertragFehler { get; set; }
public virtual int Dateigrosse { get; set; }
public virtual string Nutzdatendatei { get; set; }
public virtual string Auftragsdatei { get; set; }
public virtual string Fehlertitel { get; set; }
public virtual DateTime? Fehlerdatum { get; set; }
public virtual string Fehlernachricht { get; set; }
public virtual GkvTransferFehlerlevel Fehlerlevel { get; set; }
}
}

View File

@@ -1,40 +1,35 @@
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="BeWo.Data.Entities.GkvAbrechnung, BeWo.Data" table="GkvAbrechnung">
<id name="Oid" column="Oid" type="Int64" unsaved-value="null">
<generator class="identity" />
</id>
<version type="Int64" column="Version" name="Version" />
<property column="Tid" type="BS.Shared.TableID, BS.Shared" name="_Tid" access="field" />
<property column="IKLeistungserbringer" type="string" name="IKLeistungserbringer" />
<property column="IKVersichertenKarte" type="string" name="IKVersichertenKarte" />
<property column="IKKostentrager" type="string" name="IKKostentrager" />
<property column="IKDatenannahmestelle" type="string" name="IKDatenannahmestelle" />
<property column="AbrechnungsZeitraumStart" type="DateTime" name="AbrechnungsZeitraumStart" />
<property column="AbrechnungsZeitraumEnde" type="DateTime" name="AbrechnungsZeitraumEnde" />
<property column="Nutzdatendatei" type="string" name="Nutzdatendatei" />
<property column="Auftragsdatei" type="string" name="Auftragsdatei" />
<property column="Transfername" type="string" name="Transfername" />
<property column="Dateigrosse" type="int" name="Dateigrosse" />
<property column="Datenaustauschreferenz" type="int" name="Datenaustauschreferenz" />
<property column="ErstelltAm" type="DateTime" name="ErstelltAm" />
<property column="Notice" type="String" name="Notice" length="1024" />
<property column="InsTs" type="DateTime" name="InsTs" />
<property column="InsUser" type="String" name="InsUser" length="256" />
<property column="UdpUser" type="String" name="UdpUser" length="256" />
<property column="IsActive" type="BS.Shared.ActivationTypeId, BS.Shared" name="IsActive" />
<property column="SystemEntryID" type="BS.Shared.SystemEntryID, BS.Shared" name="SystemEntryID" />
<property column="Betrag" type="decimal" name="Betrag" />
<property column="Bezahlt" type="bool" name="Bezahlt" />
<class name="BeWo.Data.Entities.GkvAbrechnung, BeWo.Data" table="GkvAbrechnung">
<id name="Oid" column="Oid" type="Int64" unsaved-value="null">
<generator class="identity" />
</id>
<version type="Int64" column="Version" name="Version" />
<property column="Tid" type="BS.Shared.TableID, BS.Shared" name="_Tid" access="field" />
<bag name="InvoiceBases" table="gkvabrechnung2invoicebase" generic="true" cascade="none" batch-size="250">
<key column="gkvabrechnungoid" />
<many-to-many column="invoicebaseoid" class="BeWo.Data.Entities.InvoiceBase, BeWo.Data" />
</bag>
<bag name="GkvTransferProtokolle" table="gkvtransferprotokoll" generic="true" cascade="all-delete-orphan" batch-size="250">
<key column="gkvabrechnungoid" />
<one-to-many class="BeWo.Data.Entities.GkvTransferProtokoll, BeWo.Data" />
</bag>
</class>
<property column="AbrechnungsZeitraumStart" type="DateTime" name="AbrechnungsZeitraumStart" />
<property column="AbrechnungsZeitraumEnde" type="DateTime" name="AbrechnungsZeitraumEnde" />
<property column="Notice" type="String" name="Notice" length="1024" />
<property column="InsTs" type="DateTime" name="InsTs" />
<property column="InsUser" type="String" name="InsUser" length="256" />
<property column="UdpUser" type="String" name="UdpUser" length="256" />
<property column="IsActive" type="BS.Shared.ActivationTypeId, BS.Shared" name="IsActive" />
<property column="SystemEntryID" type="BS.Shared.SystemEntryID, BS.Shared" name="SystemEntryID" />
<property column="Betrag" type="decimal" name="Betrag" />
<property column="Bezahlt" type="bool" name="Bezahlt" />
<property column="ErstelltAm" type="DateTime" name="ErstelltAm" />
<bag name="InvoiceBases" table="gkvabrechnung2invoicebase" generic="true" cascade="none" batch-size="250">
<key column="gkvabrechnungoid" />
<many-to-many column="invoicebaseoid" class="BeWo.Data.Entities.InvoiceBase, BeWo.Data" />
</bag>
<bag name="GkvTransferProtokolle" table="gkvtransferprotokoll" generic="true" cascade="all-delete-orphan" batch-size="250">
<key column="gkvabrechnungoid" />
<one-to-many class="BeWo.Data.Entities.GkvTransferProtokoll, BeWo.Data" />
</bag>
</class>
</hibernate-mapping>

View File

@@ -18,11 +18,24 @@
<property column="EmpfangerBezeichnung" type="string" name="EmpfangerBezeichnung" />
<property column="Dateityp" type="string" name="Dateityp" />
<property column="Dateiname" type="string" name="Dateiname" />
<property column="PruftDatum" type="DateTime" name="PruftDatum" />
<property column="PruftFehler" type="string" name="PruftFehler" />
<property column="VerschlusseltDatum" type="DateTime" name="VerschlusseltDatum" />
<property column="VerschlusseltFehler" type="string" name="VerschlusseltFehler" />
<property column="UbertragDatum" type="DateTime" name="UbertragDatum" />
<property column="UbertragFehler" type="string" name="UbertragFehler" />
<property column="IKLeistungserbringer" type="string" name="IKLeistungserbringer" />
<property column="IKKrankenkasse" type="string" name="IKKrankenkasse" />
<property column="IKKostentrager" type="string" name="IKKostentrager" />
<property column="IKDatenannahmestelle" type="string" name="IKDatenannahmestelle" />
<property column="Rechnungsnummer" type="string" name="Rechnungsnummer" />
<property column="Nutzdatendatei" type="string" name="Nutzdatendatei" />
<property column="Auftragsdatei" type="string" name="Auftragsdatei" />
<property column="Transfername" type="string" name="Transfername" />
<property column="Dateigrosse" type="int" name="Dateigrosse" />
<property column="Datenaustauschreferenz" type="int" name="Datenaustauschreferenz" />
<property column="Transfernummer" type="int" name="Transfernummer" />
<property column="ErstelltAm" type="DateTime" name="ErstelltAm" />
<property column="Fehlertitel" type="string" name="Fehlertitel" />
<property column="Fehlerdatum" type="DateTime" name="Fehlerdatum" />
<property column="Fehlernachricht" type="string" name="Fehlernachricht" />
<property column="Fehlerlevel" type="BS.Shared.GkvTransferFehlerlevel, BS.Shared" name="Fehlerlevel" />
</class>
</hibernate-mapping>

View File

@@ -26,6 +26,10 @@ using BeWo.Service.DCEntityMapper;
using BeWo.Data.Entities;
using BS.Shared.Extensions;
using System.Threading;
using System.Configuration;
using Dakota.Models;
using System.Xml;
using System.Xml.Linq;
namespace Host
{
@@ -34,6 +38,10 @@ namespace Host
private string GETSERVER_URL = "https://support.bewoplaner.de/api/getserver.php?k={0}&t=0";
private string LOGINSERVER_URL = "{0}/Host/Login.aspx";
private string GKVRESULT_FORMAT = "{0}/{1}/result.xml";
private string GkvAbrechnungResultFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvAbrechnungResultFolderPath");
public GkvApp8Request GkvRequest { get; set; }
protected void Page_Load(object sender, EventArgs e)
@@ -73,13 +81,13 @@ namespace Host
SendErrorResponse("Unbekannter Fehler");
}
catch(ThreadAbortException eee)
catch (ThreadAbortException eee)
{
}
catch (Exception ex)
{
var ex_text = ex.Message + "\n\n" + ex.StackTrace;
var ex_text = ex.Message + "\n" + ex.StackTrace;
SendErrorResponse(ex_text);
return;
}
@@ -150,34 +158,30 @@ namespace Host
private void SendNew(GkvApp8SendNewRequest req)
{
var debug_mode = true;
var debug_mode = false;
// Save File
SaveFileInFileSystem(req, debug_mode);
// Make DB Entry
//var entry = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewEntity(req.GkvAbrechnung);
//entry.Kundennummer = req.Tenant;
// DAOFactory.GenericDAO.Insert(entry);
// Dakota Send
#if DEBUG
debug_mode = true;
#endif
// Response
var response = new GkvApp8SendNewResponse();
var response = new GkvApp8SendNewResponse(false);
response.Success = true;
response.GkvTransferProtokollDC = new GkvTransferProtokollDC()
try
{
AbsenderBezeichnung = "Absender",
Dateiname = req.GkvAbrechnung.Transfername,
Dateityp = "Nutzdatendatei",
EmpfangerBezeichnung = "Empfang",
GkvAbrechnungOid = req.GkvAbrechnung.GkvAbrechnungOid.Value,
PruftFehler = "Manueller Insert",
PruftDatum = DateTime.Now
};
// Save File
SaveFileInFileSystem(req, debug_mode);
// Dakota Send
response.Success = true;
response.GkvTransferProtokollDC = req.GkvTransferProtokoll;
}
catch (Exception e)
{
response.Message = e.Message;
}
SendResponse(response);
}
@@ -188,65 +192,62 @@ namespace Host
if (debug_mode)
{
root_path = $@"C:\GkvAbrechnung\";
file_path = $@"{req.Tenant}-{req.GkvAbrechnung.IKDatenannahmestelle}-{req.GkvAbrechnung.Transfername}";
file_path = $@"{req.Tenant}-{req.GkvTransferProtokoll.IKDatenannahmestelle}-{req.GkvTransferProtokoll.Transfername}";
}
else
{
root_path = $@"C:\GkvAbrechnung\{req.Tenant}\{req.GkvAbrechnung.IKDatenannahmestelle}\";
file_path = $@"{req.GkvAbrechnung.Transfername}";
root_path = $@"C:\GkvAbrechnung\{req.Tenant}\{req.GkvTransferProtokoll.IKDatenannahmestelle}\";
file_path = $@"{req.GkvTransferProtokoll.Transfername}";
}
Directory.CreateDirectory(root_path);
var finalpath = root_path + file_path;
File.WriteAllText(finalpath, req.GkvAbrechnung.Nutzdatendatei);
File.WriteAllText(finalpath, req.GkvTransferProtokoll.Nutzdatendatei);
var auftragsdatei2 = Encoding.GetEncoding("ISO-8859-1").GetBytes(req.GkvTransferProtokoll.Auftragsdatei);
var auftragsdatei2 = Encoding.GetEncoding("ISO-8859-1").GetBytes(req.GkvAbrechnung.Auftragsdatei);
File.WriteAllBytes(finalpath + ".auf", auftragsdatei2);
}
private void GetStatus(GkvApp8GetStatusRequest req)
{
// Get Keys
//var gkv_oid = req.GkvAbrechnungDC.GkvAbrechnungOid;
//var kundennummer = req.GkvAbrechnungDC.Kundennummer;
var response = new GkvApp8GetStatusResponse(false);
// Get Entry
var entries = DAOFactory.GenericDAO.GetAllActive<GkvAbrechnung>();
var tuple_count = req.Oids.Length;
var tuples = req.Tuples;
var tuples_len = tuples.Length;
response.Fehler = new GkvApp8FehlerDC[tuple_count];
var response_tuples = new Tuple<bool, GkvAbrechnungDC>[tuples_len];
for (int i = 0; i < tuples_len; i++)
try
{
var tuple = tuples[i];
var gkv_abrechnung = tuple.Item1;
var gkv_abrechnung_oid = tuple.Item2;
// Load XML Info
var results = GetResultFile(req.Tenant);
var app8_gkv_abrechnung = entries.First(x => x.Oid == gkv_abrechnung_oid);
var app8_gkv_abrechnung_dc = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(app8_gkv_abrechnung);
for (int i = 0; i < tuple_count; i++)
{
var gkv_transfer_oid = req.Oids[i];
if (gkv_abrechnung.IsUpToDate(app8_gkv_abrechnung_dc))
{
response_tuples[i] = new Tuple<bool, GkvAbrechnungDC>(true, null);
}
else
{
response_tuples[i] = new Tuple<bool, GkvAbrechnungDC>(false, app8_gkv_abrechnung_dc);
if (results.TryGetValue(gkv_transfer_oid, out var fehlerDC))
{
response.Fehler[i] = fehlerDC;
}
}
response.Success = true;
}
catch (DakotaException e)
{
response.Message = e.Message;
}
catch (Exception e)
{
response.Message = e.ToString();
}
// Response
var response = new GkvApp8GetStatusResponse();
response.Success = true;
response.Tuples = response_tuples;
SendResponse(response);
return;
}
private void GetIK(GkvApp8GetIKRequest req)
@@ -284,5 +285,43 @@ namespace Host
return null;
}
}
private Dictionary<long, GkvApp8FehlerDC> GetResultFile(string tenant)
{
try
{
if (string.IsNullOrWhiteSpace(GkvAbrechnungResultFolderPath))
throw new DakotaException("Config GkvAbrechnungResultFolderPath is empty or whitespace");
if (string.IsNullOrWhiteSpace(tenant))
throw new DakotaException("Tenant is empty or whitespace");
var path = GkvAbrechnungResultFolderPath;
var folder = Path.Combine(path, tenant);
var location = Path.Combine(folder, "results.xml");
if (!File.Exists(location))
{
Directory.CreateDirectory(folder);
using (File.Create(location)) { };
return null;
}
var doc = XDocument.Load(location);
var list = doc.Root.Elements("Fehler")
.Select(GkvApp8FehlerXml.Parse)
.Select(GkvApp8FehlerXml.ToDC)
.ToList();
return list.ToDictionary(dc => dc.Oid);
}
catch (Exception e)
{
throw new DakotaException("App8 Server Error: " + e.Message);
}
}
}
}

View File

@@ -315,6 +315,10 @@
<EmbeddedResource Include="Properties\licenses.licx" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Dakota\Dakota.csproj">
<Project>{47331732-DD96-4075-869F-83AA9F3F9937}</Project>
<Name>Dakota</Name>
</ProjectReference>
<ProjectReference Include="..\Data\Data.csproj">
<Project>{b0d73e3d-4ae7-4024-93a6-db1f46d7ccee}</Project>
<Name>Data</Name>

View File

@@ -236,6 +236,7 @@
<add key="OpenrouteServiceApiUrl" value="https://api.openrouteservice.org/v2/matrix/driving-car" />
<add key="OpenrouteServiceApiUrlGeocode" value="https://api.openrouteservice.org/geocode/search" />
<add key="OpenrouteServiceApiKey" value="5b3ce3597851110001cf62484b0917529e9a4008acda819dc06e47e8" />
<add key="GkvAbrechnungResultFolderPath" value="C:\GkvAbrechnung\Results\" />
</appSettings>
<devExpress>
<themes enableThemesAssembly="true" styleSheetTheme="" theme="" />

View File

@@ -8,20 +8,11 @@ CREATE TABLE `gkvabrechnung` (
`UdpUser` varchar(256) DEFAULT NULL,
`IsActive` tinyint DEFAULT NULL,
`SystemEntryID` int DEFAULT NULL,
`IKLeistungserbringer` varchar(256) DEFAULT NULL,
`IKVersichertenKarte` varchar(256) DEFAULT NULL,
`IKKostentrager` varchar(256) DEFAULT NULL,
`IKDatenannahmestelle` varchar(256) DEFAULT NULL,
`AbrechnungsZeitraumStart` datetime DEFAULT NULL,
`AbrechnungsZeitraumEnde` datetime DEFAULT NULL,
`Nutzdatendatei` text,
`Auftragsdatei` varchar(1024) DEFAULT NULL,
`Transfername` varchar(256) DEFAULT NULL,
`Dateigrosse` int DEFAULT NULL,
`Datenaustauschreferenz` int DEFAULT NULL,
`ErstelltAm` datetime DEFAULT NULL,
`Betrag` decimal(18,10) DEFAULT NULL,
`Bezahlt` tinyint DEFAULT NULL,
`ErstelltAm` datetime DEFAULT NULL,
PRIMARY KEY (`Oid`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
@@ -47,14 +38,24 @@ CREATE TABLE `gkvtransferprotokoll` (
`GkvAbrechnungOid` bigint DEFAULT NULL,
`AbsenderBezeichnung` varchar(4096) DEFAULT NULL,
`EmpfangerBezeichnung` varchar(4096) DEFAULT NULL,
`IKLeistungserbringer` varchar(256) DEFAULT NULL,
`IKKrankenkasse` varchar(256) DEFAULT NULL,
`IKKostentrager` varchar(256) DEFAULT NULL,
`IKDatenannahmestelle` varchar(256) DEFAULT NULL,
`Rechnungsnummer` varchar(64) DEFAULT NULL,
`Datenaustauschreferenz` int DEFAULT NULL,
`Transfernummer` int DEFAULT NULL,
`Transfername` varchar(256) DEFAULT NULL,
`ErstelltAm` datetime DEFAULT NULL,
`Dateityp` varchar(4096) DEFAULT NULL,
`Dateiname` varchar(4096) DEFAULT NULL,
`PruftDatum` datetime DEFAULT NULL,
`PruftFehler` varchar(4096) DEFAULT NULL,
`VerschlusseltDatum` datetime DEFAULT NULL,
`VerschlusseltFehler` varchar(4096) DEFAULT NULL,
`UbertragDatum` datetime DEFAULT NULL,
`UbertragFehler` varchar(4096) DEFAULT NULL,
`Dateigrosse` int DEFAULT NULL,
`Nutzdatendatei` text,
`Auftragsdatei` varchar(1024) DEFAULT NULL,
`Fehlertitel` varchar(256) DEFAULT NULL,
`Fehlerdatum` datetime DEFAULT NULL,
`Fehlernachricht` varchar(4096) DEFAULT NULL,
`Fehlerlevel` int DEFAULT NULL,
PRIMARY KEY (`Oid`),
KEY `FK_GKVTRANSFERPROTOKOLL_GKVABRECHNUNG` (`GkvAbrechnungOid`),
CONSTRAINT `FK_GKVTRANSFERPROTOKOLL_GKVABRECHNUNG` FOREIGN KEY (`GkvAbrechnungOid`) REFERENCES `gkvabrechnung` (`Oid`)

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema

View File

@@ -1,120 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -44,13 +44,22 @@ namespace HphBersenbrueckFreizeitUndReisen.Abrechnung
}
else if (item.ServiceDescription.Name.ToLower().Contains("kurzurlaub"))
{
<<<<<<< HEAD
// keine zweite Rechnung aufmachen, deshalb zu Reisen
=======
// keine neue Rechnung für Kurzurlaub aufmachen, zu Reisen
>>>>>>> master
serviceRecordsReise.Add(item);
}
else if (item.ServiceDescription.Name.ToLower().Contains("tagesfahrt"))
{
<<<<<<< HEAD
// keine zweite Rechnung aufmachen, deshalb zu Reisen
serviceRecordsReise.Add(item);
=======
// keine neue Rechnung für Tagesfahrt aufmachen, zu sonstigen
serviceRecordsNichtUrlaubUndReise.Add(item);
>>>>>>> master
}
else
{

View File

@@ -50,12 +50,6 @@ namespace LebensWert
this.lblZeitraum = new DevExpress.XtraReports.UI.XRLabel();
this.DetailReport = new DevExpress.XtraReports.UI.DetailReportBand();
this.Detail1 = new DevExpress.XtraReports.UI.DetailBand();
this.xrTable5 = new DevExpress.XtraReports.UI.XRTable();
this.xrTableRow23 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell37 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell35 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell33 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell34 = new DevExpress.XtraReports.UI.XRTableCell();
this.DetailReport2 = new DevExpress.XtraReports.UI.DetailReportBand();
this.Detail3 = new DevExpress.XtraReports.UI.DetailBand();
this.xrTable6 = new DevExpress.XtraReports.UI.XRTable();
@@ -64,20 +58,26 @@ namespace LebensWert
this.xrTableCell43 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell44 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell47 = new DevExpress.XtraReports.UI.XRTableCell();
this.GroupFooter1 = new DevExpress.XtraReports.UI.GroupFooterBand();
this.xrLabel8 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel4 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel14 = new DevExpress.XtraReports.UI.XRLabel();
this.lblAbschluss = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel5 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel9 = new DevExpress.XtraReports.UI.XRLabel();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
this.xrTable5 = new DevExpress.XtraReports.UI.XRTable();
this.xrTableRow23 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell37 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell35 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell33 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell34 = new DevExpress.XtraReports.UI.XRTableCell();
this.ReportFooter = new DevExpress.XtraReports.UI.ReportFooterBand();
this.xrLabel9 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel5 = new DevExpress.XtraReports.UI.XRLabel();
this.lblAbschluss = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel14 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel4 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel8 = new DevExpress.XtraReports.UI.XRLabel();
((System.ComponentModel.ISupportInitialize)(this.xrRichText5)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrRichText4)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable5)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable6)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable5)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this)).BeginInit();
//
// Detail
@@ -91,14 +91,15 @@ namespace LebensWert
//
this.ReportHeader.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.xrRichText5});
this.ReportHeader.Font = new System.Drawing.Font("Verdana", 10F);
this.ReportHeader.Font = new DevExpress.Drawing.DXFont("Verdana", 10F);
this.ReportHeader.HeightF = 70.88824F;
this.ReportHeader.Name = "ReportHeader";
this.ReportHeader.StylePriority.UseFont = false;
//
// xrRichText5
//
this.xrRichText5.Font = new System.Drawing.Font("Calibri", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrRichText5.Font = new DevExpress.Drawing.DXFont("Calibri", 9F, DevExpress.Drawing.DXFontStyle.Regular, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
this.xrRichText5.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
this.xrRichText5.Name = "xrRichText5";
this.xrRichText5.SerializableRtfString = resources.GetString("xrRichText5.SerializableRtfString");
@@ -125,6 +126,7 @@ namespace LebensWert
// Page1
//
this.Page1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.xrTable5,
this.xrLabel2,
this.lblAnrede,
this.xrLabel15,
@@ -136,8 +138,8 @@ namespace LebensWert
this.xrLabel7,
this.xrLabel3,
this.lblZeitraum});
this.Page1.Font = new System.Drawing.Font("Calibri", 11F);
this.Page1.HeightF = 519.6049F;
this.Page1.Font = new DevExpress.Drawing.DXFont("Calibri", 11F);
this.Page1.HeightF = 558.3333F;
this.Page1.Name = "Page1";
this.Page1.StylePriority.UseFont = false;
//
@@ -145,7 +147,8 @@ namespace LebensWert
//
this.xrLabel2.BackColor = System.Drawing.Color.Transparent;
this.xrLabel2.CanShrink = true;
this.xrLabel2.Font = new System.Drawing.Font("Times New Roman", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrLabel2.Font = new DevExpress.Drawing.DXFont("Times New Roman", 11.25F, DevExpress.Drawing.DXFontStyle.Regular, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
this.xrLabel2.LocationFloat = new DevExpress.Utils.PointFloat(0F, 466.2716F);
this.xrLabel2.Name = "xrLabel2";
this.xrLabel2.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
@@ -159,7 +162,8 @@ namespace LebensWert
//
this.lblAnrede.BackColor = System.Drawing.Color.Transparent;
this.lblAnrede.CanShrink = true;
this.lblAnrede.Font = new System.Drawing.Font("Times New Roman", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblAnrede.Font = new DevExpress.Drawing.DXFont("Times New Roman", 11.25F, DevExpress.Drawing.DXFontStyle.Regular, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
this.lblAnrede.LocationFloat = new DevExpress.Utils.PointFloat(0F, 416.2717F);
this.lblAnrede.Name = "lblAnrede";
this.lblAnrede.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
@@ -173,7 +177,7 @@ namespace LebensWert
//
this.xrLabel15.BackColor = System.Drawing.Color.Transparent;
this.xrLabel15.CanShrink = true;
this.xrLabel15.Font = new System.Drawing.Font("Times New Roman", 9.75F);
this.xrLabel15.Font = new DevExpress.Drawing.DXFont("Times New Roman", 9.75F);
this.xrLabel15.LocationFloat = new DevExpress.Utils.PointFloat(412.028F, 248.5416F);
this.xrLabel15.Name = "xrLabel15";
this.xrLabel15.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
@@ -189,7 +193,8 @@ namespace LebensWert
this.xrLabel17.CanShrink = true;
this.xrLabel17.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "InvoiceBase.InvoiceDate", "{0:dd.MM.yyyy}")});
this.xrLabel17.Font = new System.Drawing.Font("Times New Roman", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrLabel17.Font = new DevExpress.Drawing.DXFont("Times New Roman", 9.75F, DevExpress.Drawing.DXFontStyle.Regular, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
this.xrLabel17.LocationFloat = new DevExpress.Utils.PointFloat(464.5832F, 248.5416F);
this.xrLabel17.Name = "xrLabel17";
this.xrLabel17.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
@@ -200,7 +205,7 @@ namespace LebensWert
//
// xrRichText4
//
this.xrRichText4.Font = new System.Drawing.Font("Arial", 8F);
this.xrRichText4.Font = new DevExpress.Drawing.DXFont("Arial", 8F);
this.xrRichText4.LocationFloat = new DevExpress.Utils.PointFloat(412.028F, 21.45834F);
this.xrRichText4.Name = "xrRichText4";
this.xrRichText4.SerializableRtfString = resources.GetString("xrRichText4.SerializableRtfString");
@@ -212,7 +217,8 @@ namespace LebensWert
//
this.xrLabel12.BackColor = System.Drawing.Color.Transparent;
this.xrLabel12.CanShrink = true;
this.xrLabel12.Font = new System.Drawing.Font("Times New Roman", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrLabel12.Font = new DevExpress.Drawing.DXFont("Times New Roman", 12F, DevExpress.Drawing.DXFontStyle.Bold, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
this.xrLabel12.LocationFloat = new DevExpress.Utils.PointFloat(0F, 379.4183F);
this.xrLabel12.Name = "xrLabel12";
this.xrLabel12.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
@@ -228,7 +234,8 @@ namespace LebensWert
this.xrLabel11.CanShrink = true;
this.xrLabel11.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "InvoiceNumber")});
this.xrLabel11.Font = new System.Drawing.Font("Times New Roman", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrLabel11.Font = new DevExpress.Drawing.DXFont("Times New Roman", 9.75F, DevExpress.Drawing.DXFontStyle.Regular, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
this.xrLabel11.LocationFloat = new DevExpress.Utils.PointFloat(537.4999F, 268.5416F);
this.xrLabel11.Name = "xrLabel11";
this.xrLabel11.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
@@ -239,7 +246,7 @@ namespace LebensWert
//
// xrLabel6
//
this.xrLabel6.Font = new System.Drawing.Font("Times New Roman", 9.75F);
this.xrLabel6.Font = new DevExpress.Drawing.DXFont("Times New Roman", 9.75F);
this.xrLabel6.LocationFloat = new DevExpress.Utils.PointFloat(0F, 38.12501F);
this.xrLabel6.Name = "xrLabel6";
this.xrLabel6.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
@@ -249,7 +256,8 @@ namespace LebensWert
//
// xrLabel7
//
this.xrLabel7.Font = new System.Drawing.Font("Times New Roman", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrLabel7.Font = new DevExpress.Drawing.DXFont("Times New Roman", 11.25F, DevExpress.Drawing.DXFontStyle.Regular, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
this.xrLabel7.LocationFloat = new DevExpress.Utils.PointFloat(0F, 68.12499F);
this.xrLabel7.Multiline = true;
this.xrLabel7.Name = "xrLabel7";
@@ -263,7 +271,7 @@ namespace LebensWert
//
this.xrLabel3.BackColor = System.Drawing.Color.Transparent;
this.xrLabel3.CanShrink = true;
this.xrLabel3.Font = new System.Drawing.Font("Times New Roman", 9.75F);
this.xrLabel3.Font = new DevExpress.Drawing.DXFont("Times New Roman", 9.75F);
this.xrLabel3.LocationFloat = new DevExpress.Utils.PointFloat(412.028F, 268.5416F);
this.xrLabel3.Name = "xrLabel3";
this.xrLabel3.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
@@ -275,7 +283,8 @@ namespace LebensWert
//
// lblZeitraum
//
this.lblZeitraum.Font = new System.Drawing.Font("Times New Roman", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblZeitraum.Font = new DevExpress.Drawing.DXFont("Times New Roman", 12F, DevExpress.Drawing.DXFontStyle.Bold, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
this.lblZeitraum.LocationFloat = new DevExpress.Utils.PointFloat(0F, 362.4183F);
this.lblZeitraum.Name = "lblZeitraum";
this.lblZeitraum.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
@@ -295,15 +304,123 @@ namespace LebensWert
//
// Detail1
//
this.Detail1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.xrTable5});
this.Detail1.HeightF = 25F;
this.Detail1.HeightF = 0F;
this.Detail1.Name = "Detail1";
//
// DetailReport2
//
this.DetailReport2.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {
this.Detail3});
this.DetailReport2.DataMember = "ServiceInvoicePeriods.ServiceInvoiceItems";
this.DetailReport2.DataSource = this.bindingSource1;
this.DetailReport2.Level = 0;
this.DetailReport2.Name = "DetailReport2";
//
// Detail3
//
this.Detail3.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.xrTable6});
this.Detail3.HeightF = 25F;
this.Detail3.Name = "Detail3";
//
// xrTable6
//
this.xrTable6.Font = new DevExpress.Drawing.DXFont("Calibri", 11F);
this.xrTable6.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
this.xrTable6.Name = "xrTable6";
this.xrTable6.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
this.xrTableRow25});
this.xrTable6.SizeF = new System.Drawing.SizeF(677.0001F, 25F);
this.xrTable6.StylePriority.UseFont = false;
//
// xrTableRow25
//
this.xrTableRow25.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
this.xrTableCell42,
this.xrTableCell43,
this.xrTableCell44,
this.xrTableCell47});
this.xrTableRow25.Name = "xrTableRow25";
this.xrTableRow25.Weight = 1D;
//
// xrTableCell42
//
this.xrTableCell42.BorderColor = System.Drawing.Color.Black;
this.xrTableCell42.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrTableCell42.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "ServiceInvoicePeriods.ServiceInvoiceItems.ServiceDescription")});
this.xrTableCell42.Font = new DevExpress.Drawing.DXFont("Times New Roman", 11.25F);
this.xrTableCell42.Name = "xrTableCell42";
this.xrTableCell42.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 2, 2, 100F);
this.xrTableCell42.StylePriority.UseBorderColor = false;
this.xrTableCell42.StylePriority.UseBorders = false;
this.xrTableCell42.StylePriority.UseFont = false;
this.xrTableCell42.StylePriority.UsePadding = false;
this.xrTableCell42.StylePriority.UseTextAlignment = false;
this.xrTableCell42.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
this.xrTableCell42.Weight = 1.3847857790213918D;
//
// xrTableCell43
//
this.xrTableCell43.BorderColor = System.Drawing.Color.Black;
this.xrTableCell43.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrTableCell43.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "ServiceInvoicePeriods.ServiceInvoiceItems.UnitCountString", "{0:0.00}")});
this.xrTableCell43.Font = new DevExpress.Drawing.DXFont("Times New Roman", 11.25F);
this.xrTableCell43.Name = "xrTableCell43";
this.xrTableCell43.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 2, 2, 100F);
this.xrTableCell43.StylePriority.UseBorderColor = false;
this.xrTableCell43.StylePriority.UseBorders = false;
this.xrTableCell43.StylePriority.UseFont = false;
this.xrTableCell43.StylePriority.UsePadding = false;
this.xrTableCell43.StylePriority.UseTextAlignment = false;
this.xrTableCell43.Text = "xrTableCell43";
this.xrTableCell43.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
this.xrTableCell43.Weight = 0.32791712229997105D;
//
// xrTableCell44
//
this.xrTableCell44.BorderColor = System.Drawing.Color.Black;
this.xrTableCell44.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrTableCell44.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "ServiceInvoicePeriods.ServiceInvoiceItems.AmountPerUnit", "{0:c} ")});
this.xrTableCell44.Font = new DevExpress.Drawing.DXFont("Times New Roman", 11.25F);
this.xrTableCell44.Name = "xrTableCell44";
this.xrTableCell44.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 2, 2, 100F);
this.xrTableCell44.StylePriority.UseBorderColor = false;
this.xrTableCell44.StylePriority.UseBorders = false;
this.xrTableCell44.StylePriority.UseFont = false;
this.xrTableCell44.StylePriority.UsePadding = false;
this.xrTableCell44.StylePriority.UseTextAlignment = false;
this.xrTableCell44.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
this.xrTableCell44.Weight = 0.82607164969433422D;
//
// xrTableCell47
//
this.xrTableCell47.BorderColor = System.Drawing.Color.Black;
this.xrTableCell47.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right)
| DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrTableCell47.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "ServiceInvoicePeriods.ServiceInvoiceItems.GrossAmount")});
this.xrTableCell47.Font = new DevExpress.Drawing.DXFont("Times New Roman", 11.25F);
this.xrTableCell47.Name = "xrTableCell47";
this.xrTableCell47.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 10, 2, 2, 100F);
this.xrTableCell47.StylePriority.UseBorderColor = false;
this.xrTableCell47.StylePriority.UseBorders = false;
this.xrTableCell47.StylePriority.UseFont = false;
this.xrTableCell47.StylePriority.UsePadding = false;
this.xrTableCell47.StylePriority.UseTextAlignment = false;
this.xrTableCell47.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell47.Weight = 0.46122587742123339D;
//
// bindingSource1
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.ServiceInvoiceRO);
//
// xrTable5
//
this.xrTable5.Font = new System.Drawing.Font("Calibri", 11F);
this.xrTable5.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
this.xrTable5.Font = new DevExpress.Drawing.DXFont("Calibri", 11F);
this.xrTable5.LocationFloat = new DevExpress.Utils.PointFloat(0F, 533.3333F);
this.xrTable5.Name = "xrTable5";
this.xrTable5.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
this.xrTableRow23});
@@ -328,7 +445,7 @@ namespace LebensWert
this.xrTableCell37.BorderColor = System.Drawing.Color.Black;
this.xrTableCell37.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top)
| DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrTableCell37.Font = new System.Drawing.Font("Times New Roman", 11.25F);
this.xrTableCell37.Font = new DevExpress.Drawing.DXFont("Times New Roman", 11.25F);
this.xrTableCell37.Name = "xrTableCell37";
this.xrTableCell37.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 2, 2, 100F);
this.xrTableCell37.StylePriority.UseBackColor = false;
@@ -347,7 +464,7 @@ namespace LebensWert
this.xrTableCell35.BorderColor = System.Drawing.Color.Black;
this.xrTableCell35.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top)
| DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrTableCell35.Font = new System.Drawing.Font("Times New Roman", 11.25F);
this.xrTableCell35.Font = new DevExpress.Drawing.DXFont("Times New Roman", 11.25F);
this.xrTableCell35.Name = "xrTableCell35";
this.xrTableCell35.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 2, 2, 100F);
this.xrTableCell35.StylePriority.UseBackColor = false;
@@ -366,7 +483,7 @@ namespace LebensWert
this.xrTableCell33.BorderColor = System.Drawing.Color.Black;
this.xrTableCell33.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top)
| DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrTableCell33.Font = new System.Drawing.Font("Times New Roman", 11.25F);
this.xrTableCell33.Font = new DevExpress.Drawing.DXFont("Times New Roman", 11.25F);
this.xrTableCell33.Name = "xrTableCell33";
this.xrTableCell33.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 2, 2, 100F);
this.xrTableCell33.StylePriority.UseBackColor = false;
@@ -386,7 +503,7 @@ namespace LebensWert
this.xrTableCell34.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top)
| DevExpress.XtraPrinting.BorderSide.Right)
| DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrTableCell34.Font = new System.Drawing.Font("Times New Roman", 11.25F);
this.xrTableCell34.Font = new DevExpress.Drawing.DXFont("Times New Roman", 11.25F);
this.xrTableCell34.Name = "xrTableCell34";
this.xrTableCell34.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 10, 2, 2, 100F);
this.xrTableCell34.StylePriority.UseBackColor = false;
@@ -399,176 +516,56 @@ namespace LebensWert
this.xrTableCell34.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell34.Weight = 0.46122568052246343D;
//
// DetailReport2
// ReportFooter
//
this.DetailReport2.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {
this.Detail3,
this.GroupFooter1});
this.DetailReport2.DataMember = "ServiceInvoicePeriods.ServiceInvoiceItems";
this.DetailReport2.DataSource = this.bindingSource1;
this.DetailReport2.Level = 0;
this.DetailReport2.Name = "DetailReport2";
this.DetailReport2.PageBreak = DevExpress.XtraReports.UI.PageBreak.AfterBand;
//
// Detail3
//
this.Detail3.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.xrTable6});
this.Detail3.HeightF = 25F;
this.Detail3.Name = "Detail3";
//
// xrTable6
//
this.xrTable6.Font = new System.Drawing.Font("Calibri", 11F);
this.xrTable6.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
this.xrTable6.Name = "xrTable6";
this.xrTable6.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
this.xrTableRow25});
this.xrTable6.SizeF = new System.Drawing.SizeF(677.0001F, 25F);
this.xrTable6.StylePriority.UseFont = false;
//
// xrTableRow25
//
this.xrTableRow25.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
this.xrTableCell42,
this.xrTableCell43,
this.xrTableCell44,
this.xrTableCell47});
this.xrTableRow25.Name = "xrTableRow25";
this.xrTableRow25.Weight = 1D;
//
// xrTableCell42
//
this.xrTableCell42.BorderColor = System.Drawing.Color.Black;
this.xrTableCell42.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrTableCell42.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "ServiceInvoicePeriods.ServiceInvoiceItems.ServiceDescription")});
this.xrTableCell42.Font = new System.Drawing.Font("Times New Roman", 11.25F);
this.xrTableCell42.Name = "xrTableCell42";
this.xrTableCell42.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 2, 2, 100F);
this.xrTableCell42.StylePriority.UseBorderColor = false;
this.xrTableCell42.StylePriority.UseBorders = false;
this.xrTableCell42.StylePriority.UseFont = false;
this.xrTableCell42.StylePriority.UsePadding = false;
this.xrTableCell42.StylePriority.UseTextAlignment = false;
this.xrTableCell42.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
this.xrTableCell42.Weight = 1.3847857790213918D;
//
// xrTableCell43
//
this.xrTableCell43.BorderColor = System.Drawing.Color.Black;
this.xrTableCell43.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrTableCell43.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "ServiceInvoicePeriods.ServiceInvoiceItems.UnitCountString", "{0:0.00}")});
this.xrTableCell43.Font = new System.Drawing.Font("Times New Roman", 11.25F);
this.xrTableCell43.Name = "xrTableCell43";
this.xrTableCell43.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 2, 2, 100F);
this.xrTableCell43.StylePriority.UseBorderColor = false;
this.xrTableCell43.StylePriority.UseBorders = false;
this.xrTableCell43.StylePriority.UseFont = false;
this.xrTableCell43.StylePriority.UsePadding = false;
this.xrTableCell43.StylePriority.UseTextAlignment = false;
this.xrTableCell43.Text = "xrTableCell43";
this.xrTableCell43.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
this.xrTableCell43.Weight = 0.32791712229997105D;
//
// xrTableCell44
//
this.xrTableCell44.BorderColor = System.Drawing.Color.Black;
this.xrTableCell44.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrTableCell44.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "ServiceInvoicePeriods.ServiceInvoiceItems.AmountPerUnit", "{0:c} ")});
this.xrTableCell44.Font = new System.Drawing.Font("Times New Roman", 11.25F);
this.xrTableCell44.Name = "xrTableCell44";
this.xrTableCell44.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 2, 2, 100F);
this.xrTableCell44.StylePriority.UseBorderColor = false;
this.xrTableCell44.StylePriority.UseBorders = false;
this.xrTableCell44.StylePriority.UseFont = false;
this.xrTableCell44.StylePriority.UsePadding = false;
this.xrTableCell44.StylePriority.UseTextAlignment = false;
this.xrTableCell44.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
this.xrTableCell44.Weight = 0.82607164969433422D;
//
// xrTableCell47
//
this.xrTableCell47.BorderColor = System.Drawing.Color.Black;
this.xrTableCell47.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right)
| DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrTableCell47.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "ServiceInvoicePeriods.ServiceInvoiceItems.GrossAmount")});
this.xrTableCell47.Font = new System.Drawing.Font("Times New Roman", 11.25F);
this.xrTableCell47.Name = "xrTableCell47";
this.xrTableCell47.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 10, 2, 2, 100F);
this.xrTableCell47.StylePriority.UseBorderColor = false;
this.xrTableCell47.StylePriority.UseBorders = false;
this.xrTableCell47.StylePriority.UseFont = false;
this.xrTableCell47.StylePriority.UsePadding = false;
this.xrTableCell47.StylePriority.UseTextAlignment = false;
this.xrTableCell47.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell47.Weight = 0.46122587742123339D;
//
// GroupFooter1
//
this.GroupFooter1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.xrLabel8,
this.xrLabel4,
this.xrLabel14,
this.lblAbschluss,
this.xrLabel5,
this.ReportFooter.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.xrLabel9,
this.xrLabel1,
this.xrLabel9});
this.GroupFooter1.HeightF = 278.632F;
this.GroupFooter1.Name = "GroupFooter1";
this.xrLabel5,
this.lblAbschluss,
this.xrLabel14,
this.xrLabel4,
this.xrLabel8});
this.ReportFooter.HeightF = 253.6319F;
this.ReportFooter.Name = "ReportFooter";
//
// xrLabel8
// xrLabel9
//
this.xrLabel8.Font = new System.Drawing.Font("Times New Roman", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrLabel8.LocationFloat = new DevExpress.Utils.PointFloat(9.536743E-05F, 83.54422F);
this.xrLabel8.Name = "xrLabel8";
this.xrLabel8.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel8.SizeF = new System.Drawing.SizeF(666.9999F, 40.71032F);
this.xrLabel8.StylePriority.UseFont = false;
this.xrLabel8.Text = "Ein Nachweis über die geleisteten Stunden ist in der Anlage beigefügt. Für evtl. " +
"Rückfragen stehe ich Ihnen gerne zur Verfügung.";
this.xrLabel9.Font = new DevExpress.Drawing.DXFont("Times New Roman", 11.25F, DevExpress.Drawing.DXFontStyle.Regular, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
this.xrLabel9.LocationFloat = new DevExpress.Utils.PointFloat(0F, 142.1519F);
this.xrLabel9.Name = "xrLabel9";
this.xrLabel9.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel9.SizeF = new System.Drawing.SizeF(250F, 17F);
this.xrLabel9.StylePriority.UseFont = false;
this.xrLabel9.Text = "Mit freundlichen Grüßen";
//
// xrLabel4
// xrLabel1
//
this.xrLabel4.Font = new System.Drawing.Font("Times New Roman", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrLabel4.LocationFloat = new DevExpress.Utils.PointFloat(0F, 221.6717F);
this.xrLabel4.Name = "xrLabel4";
this.xrLabel4.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel4.SizeF = new System.Drawing.SizeF(131.5832F, 21.96034F);
this.xrLabel4.StylePriority.UseFont = false;
this.xrLabel4.Text = "Kai Lippel";
//
// xrLabel14
//
this.xrLabel14.Font = new System.Drawing.Font("Times New Roman", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrLabel14.LocationFloat = new DevExpress.Utils.PointFloat(572.9167F, 231.6716F);
this.xrLabel14.Name = "xrLabel14";
this.xrLabel14.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel14.SizeF = new System.Drawing.SizeF(72.20821F, 21.96034F);
this.xrLabel14.StylePriority.UseFont = false;
this.xrLabel14.Text = "Anlage";
//
// lblAbschluss
//
this.lblAbschluss.Font = new System.Drawing.Font("Times New Roman", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblAbschluss.LocationFloat = new DevExpress.Utils.PointFloat(0F, 47.50595F);
this.lblAbschluss.Name = "lblAbschluss";
this.lblAbschluss.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.lblAbschluss.SizeF = new System.Drawing.SizeF(666.9999F, 36.03821F);
this.lblAbschluss.StylePriority.UseFont = false;
this.lblAbschluss.Text = "Den Rechnungsbetrag, in Höhe von [GrossClaim], bitte ich sofort nach Erhalt der R" +
"echnung, unter Angabe der Rechnungsnummer, auf das oben angegebene Konto zu über" +
"weisen.";
this.xrLabel1.BackColor = System.Drawing.Color.LightGray;
this.xrLabel1.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Right | DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrLabel1.BorderWidth = 1F;
this.xrLabel1.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "GrossClaim")});
this.xrLabel1.Font = new DevExpress.Drawing.DXFont("Times New Roman", 11.25F, DevExpress.Drawing.DXFontStyle.Bold);
this.xrLabel1.LocationFloat = new DevExpress.Utils.PointFloat(332.9583F, 0F);
this.xrLabel1.Name = "xrLabel1";
this.xrLabel1.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 10, 0, 0, 100F);
this.xrLabel1.SizeF = new System.Drawing.SizeF(344.0417F, 21.46428F);
this.xrLabel1.StylePriority.UseBackColor = false;
this.xrLabel1.StylePriority.UseBorders = false;
this.xrLabel1.StylePriority.UseBorderWidth = false;
this.xrLabel1.StylePriority.UseFont = false;
this.xrLabel1.StylePriority.UsePadding = false;
this.xrLabel1.StylePriority.UseTextAlignment = false;
this.xrLabel1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
//
// xrLabel5
//
this.xrLabel5.BackColor = System.Drawing.Color.LightGray;
this.xrLabel5.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrLabel5.BorderWidth = 1F;
this.xrLabel5.Font = new System.Drawing.Font("Times New Roman", 11.25F, System.Drawing.FontStyle.Bold);
this.xrLabel5.Font = new DevExpress.Drawing.DXFont("Times New Roman", 11.25F, DevExpress.Drawing.DXFontStyle.Bold);
this.xrLabel5.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
this.xrLabel5.Name = "xrLabel5";
this.xrLabel5.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 2, 0, 0, 100F);
@@ -582,39 +579,52 @@ namespace LebensWert
this.xrLabel5.Text = "Rechnungsbetrag";
this.xrLabel5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
//
// xrLabel1
// lblAbschluss
//
this.xrLabel1.BackColor = System.Drawing.Color.LightGray;
this.xrLabel1.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Right | DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrLabel1.BorderWidth = 1F;
this.xrLabel1.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "GrossClaim")});
this.xrLabel1.Font = new System.Drawing.Font("Times New Roman", 11.25F, System.Drawing.FontStyle.Bold);
this.xrLabel1.LocationFloat = new DevExpress.Utils.PointFloat(332.9583F, 0F);
this.xrLabel1.Name = "xrLabel1";
this.xrLabel1.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 10, 0, 0, 100F);
this.xrLabel1.SizeF = new System.Drawing.SizeF(344.0417F, 21.46428F);
this.xrLabel1.StylePriority.UseBackColor = false;
this.xrLabel1.StylePriority.UseBorders = false;
this.xrLabel1.StylePriority.UseBorderWidth = false;
this.xrLabel1.StylePriority.UseFont = false;
this.xrLabel1.StylePriority.UsePadding = false;
this.xrLabel1.StylePriority.UseTextAlignment = false;
this.xrLabel1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
this.lblAbschluss.Font = new DevExpress.Drawing.DXFont("Times New Roman", 11.25F, DevExpress.Drawing.DXFontStyle.Regular, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
this.lblAbschluss.LocationFloat = new DevExpress.Utils.PointFloat(0F, 47.50595F);
this.lblAbschluss.Name = "lblAbschluss";
this.lblAbschluss.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.lblAbschluss.SizeF = new System.Drawing.SizeF(666.9999F, 36.03821F);
this.lblAbschluss.StylePriority.UseFont = false;
this.lblAbschluss.Text = "Den Rechnungsbetrag, in Höhe von [GrossClaim], bitte ich sofort nach Erhalt der R" +
"echnung, unter Angabe der Rechnungsnummer, auf das oben angegebene Konto zu über" +
"weisen.";
//
// xrLabel9
// xrLabel14
//
this.xrLabel9.Font = new System.Drawing.Font("Times New Roman", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrLabel9.LocationFloat = new DevExpress.Utils.PointFloat(0F, 142.1519F);
this.xrLabel9.Name = "xrLabel9";
this.xrLabel9.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel9.SizeF = new System.Drawing.SizeF(250F, 17F);
this.xrLabel9.StylePriority.UseFont = false;
this.xrLabel9.Text = "Mit freundlichen Grüßen";
this.xrLabel14.Font = new DevExpress.Drawing.DXFont("Times New Roman", 11.25F, DevExpress.Drawing.DXFontStyle.Regular, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
this.xrLabel14.LocationFloat = new DevExpress.Utils.PointFloat(572.9167F, 231.6716F);
this.xrLabel14.Name = "xrLabel14";
this.xrLabel14.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel14.SizeF = new System.Drawing.SizeF(72.20821F, 21.96034F);
this.xrLabel14.StylePriority.UseFont = false;
this.xrLabel14.Text = "Anlage";
//
// bindingSource1
// xrLabel4
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.ServiceInvoiceRO);
this.xrLabel4.Font = new DevExpress.Drawing.DXFont("Times New Roman", 11.25F, DevExpress.Drawing.DXFontStyle.Regular, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
this.xrLabel4.LocationFloat = new DevExpress.Utils.PointFloat(0F, 221.6717F);
this.xrLabel4.Name = "xrLabel4";
this.xrLabel4.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel4.SizeF = new System.Drawing.SizeF(131.5832F, 21.96034F);
this.xrLabel4.StylePriority.UseFont = false;
this.xrLabel4.Text = "Kai Lippel";
//
// xrLabel8
//
this.xrLabel8.Font = new DevExpress.Drawing.DXFont("Times New Roman", 11.25F, DevExpress.Drawing.DXFontStyle.Regular, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
this.xrLabel8.LocationFloat = new DevExpress.Utils.PointFloat(9.536743E-05F, 83.54422F);
this.xrLabel8.Name = "xrLabel8";
this.xrLabel8.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel8.SizeF = new System.Drawing.SizeF(666.9999F, 40.71032F);
this.xrLabel8.StylePriority.UseFont = false;
this.xrLabel8.Text = "Ein Nachweis über die geleisteten Stunden ist in der Anlage beigefügt. Für evtl. " +
"Rückfragen stehe ich Ihnen gerne zur Verfügung.";
//
// RechnungHI
//
@@ -624,22 +634,24 @@ namespace LebensWert
this.topMarginBand1,
this.bottomMarginBand1,
this.Page1,
this.DetailReport});
this.DetailReport,
this.ReportFooter});
this.DataSource = this.bindingSource1;
this.ExportOptions.PrintPreview.DefaultFileName = "Spitzabrechnung";
this.Font = new System.Drawing.Font("Calibri", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.Font = new DevExpress.Drawing.DXFont("Calibri", 11F, DevExpress.Drawing.DXFontStyle.Regular, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
this.FormattingRuleSheet.AddRange(new DevExpress.XtraReports.UI.FormattingRule[] {
this.ruleRateFactorNull});
this.Margins = new System.Drawing.Printing.Margins(75, 75, 60, 22);
this.Margins = new DevExpress.Drawing.DXMargins(75F, 75F, 60F, 21.96034F);
this.PageHeight = 1169;
this.PageWidth = 827;
this.PaperKind = DevExpress.Drawing.Printing.DXPaperKind.A4;
this.Version = "17.1";
this.Version = "23.2";
((System.ComponentModel.ISupportInitialize)(this.xrRichText5)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrRichText4)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable5)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable6)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable5)).EndInit();
((System.ComponentModel.ISupportInitialize)(this)).EndInit();
}
@@ -656,12 +668,6 @@ namespace LebensWert
private DevExpress.XtraReports.UI.XRLabel lblZeitraum;
private DevExpress.XtraReports.UI.DetailReportBand DetailReport;
private DevExpress.XtraReports.UI.DetailBand Detail1;
private DevExpress.XtraReports.UI.XRTable xrTable5;
private DevExpress.XtraReports.UI.XRTableRow xrTableRow23;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell37;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell35;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell33;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell34;
private DevExpress.XtraReports.UI.DetailReportBand DetailReport2;
private DevExpress.XtraReports.UI.DetailBand Detail3;
private DevExpress.XtraReports.UI.XRTable xrTable6;
@@ -671,21 +677,27 @@ namespace LebensWert
private DevExpress.XtraReports.UI.XRTableCell xrTableCell44;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell47;
private DevExpress.XtraReports.UI.XRLabel xrLabel7;
private DevExpress.XtraReports.UI.GroupFooterBand GroupFooter1;
private DevExpress.XtraReports.UI.XRLabel xrLabel6;
private DevExpress.XtraReports.UI.XRLabel xrLabel12;
private DevExpress.XtraReports.UI.XRLabel xrLabel11;
private DevExpress.XtraReports.UI.XRLabel xrLabel1;
private DevExpress.XtraReports.UI.XRLabel xrLabel5;
private DevExpress.XtraReports.UI.XRLabel lblAbschluss;
private DevExpress.XtraReports.UI.XRRichText xrRichText4;
private DevExpress.XtraReports.UI.XRLabel xrLabel14;
private DevExpress.XtraReports.UI.XRLabel xrLabel9;
private DevExpress.XtraReports.UI.XRRichText xrRichText5;
private DevExpress.XtraReports.UI.XRLabel xrLabel15;
private DevExpress.XtraReports.UI.XRLabel xrLabel17;
private DevExpress.XtraReports.UI.XRLabel lblAnrede;
private DevExpress.XtraReports.UI.XRLabel xrLabel2;
private DevExpress.XtraReports.UI.XRTable xrTable5;
private DevExpress.XtraReports.UI.XRTableRow xrTableRow23;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell37;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell35;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell33;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell34;
private DevExpress.XtraReports.UI.ReportFooterBand ReportFooter;
private DevExpress.XtraReports.UI.XRLabel xrLabel9;
private DevExpress.XtraReports.UI.XRLabel xrLabel1;
private DevExpress.XtraReports.UI.XRLabel xrLabel5;
private DevExpress.XtraReports.UI.XRLabel lblAbschluss;
private DevExpress.XtraReports.UI.XRLabel xrLabel14;
private DevExpress.XtraReports.UI.XRLabel xrLabel4;
private DevExpress.XtraReports.UI.XRLabel xrLabel8;
}

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +1,7 @@
using BeWo.Service.Plugins;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Plugins;
using BS.Shared.DataContracts;
using System;
using System.Collections.Generic;
@@ -14,6 +17,11 @@ namespace LebensWert.Service
public override SupportConceptStatisticsDC CreateSupportConceptStatisticsImpl(long costBearer2SupportConceptOid, DateTime statisticsDate, long? ignoreServiceRecordOid)
{
var stats = base.CreateSupportConceptStatisticsImpl(costBearer2SupportConceptOid, statisticsDate, ignoreServiceRecordOid);
var cb = MapperFactory.SupportConceptCostBearerRelDC_CostBearer2SupportConcept.MapToNewDC(DAOFactory.GenericDAO.GetByID<CostBearer2SupportConcept>(costBearer2SupportConceptOid));
if (!cb.CostBearer.Name.ToLower().Contains("neu"))
return stats;
decimal factor = 1.2m;
stats.ApprovedMinutesTillNow *= factor;
@@ -21,8 +29,6 @@ namespace LebensWert.Service
stats.MinutesApprovedPerMonth *= factor;
stats.MinutesApprovedPerWeek *= factor;
stats.MinutesApprovedTotal *= factor;
stats.MinutesFreePerMonthAverage *= factor;
stats.MinutesFreePerWeekAverage *= factor;
stats.MinutesOutOfApprovedPeriod *= factor;
stats.MinutesProvidedPerMonthAverage *= factor;
stats.MinutesProvidedPerWeekAverage *= factor;
@@ -32,6 +38,11 @@ namespace LebensWert.Service
stats.MinutesProvidedTotalRounded *= factor;
stats.SollTotalUntilThisMonth *= factor;
stats.MinutesFreePerMonthAverage *= factor;
stats.MinutesFreePerWeekAverage *= factor;
foreach (var s in stats.PeriodStatistics)
{
s.AmountConsumedThisInterval *= factor;
@@ -41,14 +52,41 @@ namespace LebensWert.Service
s.MinutesApprovedPerMonth *= factor;
s.MinutesApprovedPerWeek *= factor;
s.MinutesApprovedTotal *= factor;
s.MinutesFreePerWeek *= factor;
s.MinutesOutOfApprovedPeriod *= factor;
s.MinutesProvidedThisMonth *= factor;
s.MinutesProvidedThisWeek *= factor;
s.MinutesProvidedTotal *= factor;
s.MinutesProvidedTotalRounded *= factor;
s.SollTotalUntilThisMonth *= factor;
DateTime dtPeriod = statisticsDate.Date;
if (s.SupportConceptApprovalPeriod.StartDate.HasValue && s.SupportConceptApprovalPeriod.StartDate > dtPeriod)
{
dtPeriod = s.SupportConceptApprovalPeriod.StartDate.Value;
}
TimeSpan tsPeriod = s.SupportConceptApprovalPeriod.EndDate.Value.Subtract(dtPeriod);
int daysPeriod = tsPeriod.Days + 1;
if (daysPeriod < 0)
daysPeriod = 0;
if (daysPeriod != 0)
{
s.MinutesFreePerWeek = (s.MinutesApprovedTotal - s.MinutesProvidedTotalRounded) / (daysPeriod / 7m);
}
else
{
s.MinutesFreePerWeek = s.MinutesApprovedTotal - s.MinutesProvidedTotalRounded;
}
//s.MinutesFreePerWeek *= factor;
}
decimal freeTotal = stats.MinutesApprovedTotal - stats.MinutesProvidedTotalRounded;
if (stats.MinutesFreePerWeekAverage > freeTotal)
stats.MinutesFreePerWeekAverage = freeTotal;
if (stats.MinutesFreePerWeekAverage < 0)
stats.MinutesFreePerWeekAverage = 0;
return stats;
}

File diff suppressed because it is too large Load Diff

View File

@@ -77,15 +77,19 @@ namespace PerspektiveSL
ro.Stellvertretung2 = vertretung2.Employee.Person.LastNameFirstName;
ro.Stellvertretung2Oid = vertretung2.EmployeeOid.Value;
}
<<<<<<< HEAD
result.DetailList.Add(ro);
=======
if (eghFachkraft == null && vertretung == null && vertretung2 == null)
{
// Klienten ohne Betreuung herausfiltern
}
else
{
result.DetailList.Add(ro);
if (eghFachkraft == null && vertretung == null && vertretung2 == null)
{
// Klienten ohne Betreuung herausfiltern
}
else
{
result.DetailList.Add(ro);
}
>>>>>>> master
}
foreach (var pair in empOidDict)

View File

@@ -1,120 +1,242 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<<<<<<< HEAD
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
=======
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
>>>>>>> master
</root>

View File

@@ -61,7 +61,10 @@
<Compile Include="CustomMitarbeiterstundenkontoBerechnungMonate.cs" />
<Compile Include="Invoicing\CustomBeWo67InvoiceCreation.cs" />
<Compile Include="Invoicing\CustomInvoiceFactory.cs" />
<<<<<<< HEAD
=======
<Compile Include="Invoicing\CustomInvoiceNumberGenerator.cs" />
>>>>>>> master
<Compile Include="Invoicing\SettlementInvoiceCreation.cs" />
<Compile Include="Mitarbeiterarbeitszeitkonto.cs">
<SubType>Component</SubType>

View File

@@ -238,7 +238,11 @@ namespace VkmHamm
if (item.ServiceDescription != null &&
item.ServiceDescription.ServiceCategory != null)
{
<<<<<<< HEAD
if (item.ServiceDescription.ServiceCategory.Name == "Arbeitszeit")
=======
if (item.ServiceDescription.ServiceCategory.Name == "Arbeitszeit" && !IsUrlaubAbsenceServiceRecord(item) && !IsKrankAbsenceServiceRecord(item))
>>>>>>> master
{
arbeitszeit += duration;
}
@@ -274,6 +278,55 @@ namespace VkmHamm
= 1 * (1 + 5/40)
*/
public override void CreateEmployeeDetails(MitarbeiterstundenkontoRO ro)
<<<<<<< HEAD
{
base.CreateEmployeeDetails(ro);
if (ro.ReportStartDate >= new DateTime(2024, 02, 01) && ro.EmployeeDetailList.Count > 0)
{
foreach (var ed in ro.EmployeeDetailList)
{
// Da deren Abwesenheiten ServiceRecords (Arbeitszeit) sind und die trotzdem vom Soll abgezogen werden, hat man die Stunden von der Abwesenheit doppelt.
// Daher muss nochmal die Anzahl Stunden von Abweseneheiten von den Überstunden abgezogen werden..
if (ed.TageKrankheit.HasValue)
{
ed.Ueberstunden -= ed.TageKrankheit.Value * ed.SollProTag;
ed.UeberstundenGesamt -= ed.TageKrankheit.Value * ed.SollProTag;
}
if (ed.TageUrlaub.HasValue)
{
ed.Ueberstunden -= ed.TageUrlaub.Value * ed.SollProTag;
ed.UeberstundenGesamt -= ed.TageUrlaub.Value * ed.SollProTag;
}
var contract = GetContractForDate(ed.Employee, ro.ReportStartDate, ro.ReportEndDate);
if (contract != null)
{
var toleranzstundenVorFaktor = contract.ProbationPeriod2;
if (toleranzstundenVorFaktor.HasValue && toleranzstundenVorFaktor > 0)
{
if (ed.Ueberstunden > toleranzstundenVorFaktor.Value)
{
var ueberstundenFuerFaktor = ed.Ueberstunden.Value - toleranzstundenVorFaktor.Value;
ed.Custom15 = ueberstundenFuerFaktor * 1.25m; // Auf Stunden, die den Korridor überschritten haben, kommt der Faktor 1,25 drauf
ed.Ueberstunden = toleranzstundenVorFaktor; // Überstunden werden dann auf die Korridorstunden gesetzt, da die Stunden mit Faktor extra dargestellt werden
ed.UeberstundenGesamt += (ed.Ueberstunden + ed.Custom15) - (ed.Ueberstunden + ueberstundenFuerFaktor);
}
}
}
}
}
}
protected override decimal? BerechneUeberstunden(MitarbeiterstundenkontoRO.EmployeeDetail ed, decimal? ueberstundenStd, Contract contract, DateTime start, DateTime ende)
{
if (start < new DateTime(2024, 02, 01))
return ueberstundenStd;
=======
{
base.CreateEmployeeDetails(ro);
@@ -325,12 +378,17 @@ namespace VkmHamm
if (start >= new DateTime(2024, 04, 01))
{ };
>>>>>>> master
if (ed.UeberstundenVormonat == null)
ed.UeberstundenVormonat = 0;
if (ed.UeberstundenGesamt == null)
ed.UeberstundenGesamt = 0;
<<<<<<< HEAD
var ueberstunden = ueberstundenStd - ed.UeberstundenVormonat - (ed.StundenSollMax - ed.StundenSollOhneUrlaubKrankheit);
=======
var ueberstunden = ueberstundenStd - ed.UeberstundenVormonat;
>>>>>>> master
if (contract.ProbationPeriod2.HasValue && contract.ProbationPeriod2.Value > 0 && ueberstunden > contract.ProbationPeriod2.Value)
{

View File

@@ -23,24 +23,12 @@ namespace BeWo.Service.DCEntityMapper
pDataContract.GkvAbrechnungVersion = pEntity.Version;
pDataContract.Notice = pEntity.Notice;
pDataContract.IKDatenannahmestelle = pEntity.IKDatenannahmestelle;
pDataContract.IKVersichertenKarte = pEntity.IKVersichertenKarte;
pDataContract.IKLeistungserbringer = pEntity.IKLeistungserbringer;
pDataContract.IKKostenträger = pEntity.IKKostentrager;
pDataContract.AbrechnungsZeitraumStart = pEntity.AbrechnungsZeitraumStart;
pDataContract.AbrechnungsZeitraumEnde = pEntity.AbrechnungsZeitraumEnde;
pDataContract.Nutzdatendatei = pEntity.Nutzdatendatei;
pDataContract.Auftragsdatei = pEntity.Auftragsdatei;
pDataContract.Transfername = pEntity.Transfername;
pDataContract.Dateigröße = pEntity.Dateigrosse;
pDataContract.Datenaustauschreferenz = pEntity.Datenaustauschreferenz;
pDataContract.ErstelltAm = pEntity.ErstelltAm;
pDataContract.Betrag = pEntity.Betrag;
pDataContract.Bezahlt = pEntity.Bezahlt;
pDataContract.ErstelltAm = pEntity.ErstelltAm;
pDataContract.InvoiceBases = MapperFactory.InvoiceBaseDC_InvoiceBase.MapToNewDCs(pEntity.InvoiceBases);
@@ -59,25 +47,14 @@ namespace BeWo.Service.DCEntityMapper
pEntity.Version = pDataContract.GkvAbrechnungVersion;
pEntity.Notice = pDataContract.Notice;
pEntity.IKDatenannahmestelle = pDataContract.IKDatenannahmestelle;
pEntity.IKVersichertenKarte = pDataContract.IKVersichertenKarte;
pEntity.IKLeistungserbringer = pDataContract.IKLeistungserbringer;
pEntity.IKKostentrager = pDataContract.IKKostenträger;
pEntity.AbrechnungsZeitraumStart = pDataContract.AbrechnungsZeitraumStart;
pEntity.AbrechnungsZeitraumEnde = pDataContract.AbrechnungsZeitraumEnde;
pEntity.Nutzdatendatei = pDataContract.Nutzdatendatei;
pEntity.Auftragsdatei = pDataContract.Auftragsdatei;
pEntity.Transfername = pDataContract.Transfername;
pEntity.Dateigrosse = pDataContract.Dateigröße;
pEntity.Datenaustauschreferenz = pDataContract.Datenaustauschreferenz;
pEntity.ErstelltAm = pDataContract.ErstelltAm;
pEntity.Betrag = pDataContract.Betrag;
pEntity.Bezahlt = pDataContract.Bezahlt;
pEntity.ErstelltAm = pDataContract.ErstelltAm;
if (pEntity.GkvTransferProtokolle is null)
pEntity.GkvTransferProtokolle = new List<GkvTransferProtokoll>();

View File

@@ -13,6 +13,11 @@ namespace BeWo.Service.DCEntityMapper
{
public override GkvTransferProtokollDC MergeWithDC(GkvTransferProtokoll pEntity, GkvTransferProtokollDC pDataContract)
{
pDataContract.IKDatenannahmestelle = pEntity.IKDatenannahmestelle;
pDataContract.IKKrankenkasse = pEntity.IKKrankenkasse;
pDataContract.IKLeistungserbringer = pEntity.IKLeistungserbringer;
pDataContract.IKKostentrager = pEntity.IKKostentrager;
pDataContract.AbsenderBezeichnung = pEntity.AbsenderBezeichnung;
pDataContract.Dateiname = pEntity.Dateiname;
pDataContract.Dateityp = pEntity.Dateityp;
@@ -21,12 +26,21 @@ namespace BeWo.Service.DCEntityMapper
pDataContract.GkvTransferProtokollOid = pEntity.Oid;
pDataContract.GkvTransferProtokollVersion = pEntity.Version;
pDataContract.Notice = pEntity.Notice;
pDataContract.PruftDatum = pEntity.PruftDatum;
pDataContract.PruftFehler = pEntity.PruftFehler;
pDataContract.UbertragDatum = pEntity.UbertragDatum;
pDataContract.UbertragFehler = pEntity.UbertragFehler;
pDataContract.VerschlusseltDatum = pEntity.VerschlusseltDatum;
pDataContract.VerschlusseltFehler = pEntity.VerschlusseltFehler;
pDataContract.Rechnungsnummer = pEntity.Rechnungsnummer;
pDataContract.Nutzdatendatei = pEntity.Nutzdatendatei;
pDataContract.Auftragsdatei = pEntity.Auftragsdatei;
pDataContract.Transfername = pEntity.Transfername;
pDataContract.Transfernummer = pEntity.Transfernummer;
pDataContract.Dateigrosse = pEntity.Dateigrosse;
pDataContract.Datenaustauschreferenz = pEntity.Datenaustauschreferenz;
pDataContract.ErstelltAm = pEntity.ErstelltAm;
pDataContract.Fehlerdatum = pEntity.Fehlerdatum;
pDataContract.Fehlerlevel = pEntity.Fehlerlevel;
pDataContract.Fehlernachricht = pEntity.Fehlernachricht;
pDataContract.Fehlertitel = pEntity.Fehlertitel;
return pDataContract;
}
@@ -43,12 +57,26 @@ namespace BeWo.Service.DCEntityMapper
pEntity.Oid = pDataContract.GkvTransferProtokollOid;
pEntity.Version = pDataContract.GkvTransferProtokollVersion;
pEntity.Notice = pDataContract.Notice;
pEntity.PruftDatum = pDataContract.PruftDatum;
pEntity.PruftFehler = pDataContract.PruftFehler;
pEntity.UbertragDatum = pDataContract.UbertragDatum;
pEntity.UbertragFehler = pDataContract.UbertragFehler;
pEntity.VerschlusseltDatum = pDataContract.VerschlusseltDatum;
pEntity.VerschlusseltFehler = pDataContract.VerschlusseltFehler;
pEntity.IKDatenannahmestelle = pDataContract.IKDatenannahmestelle;
pEntity.IKKrankenkasse = pDataContract.IKKrankenkasse;
pEntity.IKLeistungserbringer = pDataContract.IKLeistungserbringer;
pEntity.IKKostentrager = pDataContract.IKKostentrager;
pEntity.Rechnungsnummer = pDataContract.Rechnungsnummer;
pEntity.Nutzdatendatei = pDataContract.Nutzdatendatei;
pEntity.Auftragsdatei = pDataContract.Auftragsdatei;
pEntity.Transfername = pDataContract.Transfername;
pEntity.Transfernummer = pDataContract.Transfernummer;
pEntity.Dateigrosse = pDataContract.Dateigrosse;
pEntity.Datenaustauschreferenz = pDataContract.Datenaustauschreferenz;
pEntity.ErstelltAm = pDataContract.ErstelltAm;
pEntity.Fehlerdatum = pDataContract.Fehlerdatum;
pEntity.Fehlerlevel = pDataContract.Fehlerlevel;
pEntity.Fehlernachricht = pDataContract.Fehlernachricht;
pEntity.Fehlertitel = pDataContract.Fehlertitel;
return pEntity;
}

View File

@@ -137,10 +137,6 @@ namespace BeWo.Service.ServiceContracts
[OperationContract]
void StorniereInvoiceBases(List<InvoiceBaseDC> invoices);
[FaultContract(typeof(BeWoFault))]
[OperationContract]
List<long> InsertNewGkvAbrechnungen(List<GkvAbrechnungDC> dc);
[FaultContract(typeof(BeWoFault))]
[OperationContract]
GkvAbrechnungDC GetGkvAbrechnung(long oid);

View File

@@ -31,7 +31,6 @@ namespace BeWo.Service.ServiceImplementations
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)]
public class AccountingServiceImp : IAccountingService
{
public void DeactivateInvoiceBases(List<InvoiceBaseDC> invoices)
{
try
@@ -677,6 +676,7 @@ namespace BeWo.Service.ServiceImplementations
}
}
#region GKV
public GkvAbrechnungDC GetGkvAbrechnung(long oid)
{
try
@@ -724,9 +724,7 @@ namespace BeWo.Service.ServiceImplementations
var dcs = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDCs(entries);
var updateables = dcs.Where(x => x.GetState() != 5 && x.GetState() != 1
//&& x.GesendetAm.HasValue
).ToArray();
var updateables = dcs.Where(x => x.IsWaiting()).ToArray();
if (!updateables.Any())
return dcs;
@@ -748,93 +746,20 @@ namespace BeWo.Service.ServiceImplementations
}
}
/// <summary>
///
/// </summary>
/// <param name="updateables"></param>
/// <param name="loginName"></param>
/// <param name="hashed_password"></param>
/// <returns>Returns true, if the states are all up to date. False otherwise.</returns>
private bool SendApp8GetStatusRequest(GkvAbrechnungDC[] updateables, string loginName, string hashed_password)
{
var updateables_len = updateables.Count();
var url = "https://app8.bewoplaner.de/service/GkvAbrechnungView.aspx";
#if DEBUG
url = "http://localhost:3777/Host/GkvAbrechnungView.aspx";
#endif
var request = new GkvApp8GetStatusRequest
{
Username = loginName,
Password = hashed_password,
Tenant = MultitenancyOperationContextExt.Current.Tenant,
Tuples = new Tuple<GkvAbrechnungDC, long>[updateables_len]
};
for (int id = 0; id < updateables_len; id++)
{
var gkv_abrechnung = updateables[id];
var gkv_abrechnung_oid = gkv_abrechnung.GkvAbrechnungOid.Value;
request.Tuples[id] = new Tuple<GkvAbrechnungDC, long>(gkv_abrechnung, gkv_abrechnung_oid);
}
var response_app8_str = SendApp8Request(url, JsonConvert.SerializeObject(request));
var response_app8 = JsonConvert.DeserializeObject<GkvApp8GetStatusResponse>(response_app8_str);
if (!response_app8.Success)
{
return true;
throw new NotImplementedException("App 8 Anfrage nicht erfolgreich");
}
bool allAreUpToDate = true;
for (int id = 0; id < updateables_len; id++)
{
var gkv_abrechnung = updateables[id];
var app8_tuple = response_app8.Tuples[id];
var app8_isUpToDate = app8_tuple.Item1;
var app8_gkv_abrechnunng = app8_tuple.Item2;
if (app8_isUpToDate)
continue;
allAreUpToDate = false;
var gkv_abrechnung_entity = DAOFactory.GenericDAO.LoadByID<GkvAbrechnung>(gkv_abrechnung.GkvAbrechnungOid.Value);
var gkv_abrechnung_new_entity = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MergeWithEntity(gkv_abrechnung, gkv_abrechnung_entity);
DAOFactory.GenericDAO.Update(gkv_abrechnung_new_entity);
}
return allAreUpToDate;
}
public GkvAbrechnungResponseDC CreateNewGkvAbrechnung(GkvAbrechnungRequestDC request)
{
var response = new GkvAbrechnungResponseDC();
try
{
var gkv_abrechnung_dc = request.GkvAbrechnungDC;
var gkv_abrechnung = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewEntity(request.GkvAbrechnungDC);
if(gkv_abrechnung_dc.AbrechnungsZeitraumEnde.Value.Hour == 0)
if (gkv_abrechnung.AbrechnungsZeitraumEnde.Value.Hour == 0)
{
gkv_abrechnung_dc.AbrechnungsZeitraumEnde = gkv_abrechnung_dc.AbrechnungsZeitraumEnde.Value.Date.AddDays(1).AddMilliseconds(-1);
gkv_abrechnung.AbrechnungsZeitraumEnde = gkv_abrechnung.AbrechnungsZeitraumEnde.Value.Date.AddDays(1).AddMilliseconds(-1);
}
var manager = new DakotaManager();
var mandatordc = new OperationsServiceImp().GetMandator();
var loaded_invoicebases = new List<InvoiceBaseDC>();
DakotaValidator.ValidateFirstStep(mandatordc, request);
int? datenaustauschreferenz = null;
decimal gesamt = 0;
foreach (var invoicebase_oid in request.SelectedInvoiceBases)
{
var service = DAOFactory.SearchDAO.GetServiceInvoiceByInvoiceBaseOid(invoicebase_oid);
@@ -844,64 +769,26 @@ namespace BeWo.Service.ServiceImplementations
var invoicebase_dc = MapperFactory.InvoiceBaseDC_InvoiceBase.MapToNewDC(invoicebase);
if(!datenaustauschreferenz.HasValue)
datenaustauschreferenz = DAOFactory.SearchDAO.GetLastDatenaustauschreferenz(orga.IKDatenannahmestelle) + 1;
loaded_invoicebases.Add(invoicebase_dc);
var servicedc = MapperFactory.ServiceInvoiceDC_ServiceInvoice.MapToNewDC(service);
var orgadc = MapperFactory.OrganisationDC_OrganisationMapper.MapToNewDC(orga);
var customerdc = MapperFactory.CustomerDC_Customer.MapToNewDC(customer);
DakotaValidator.ValidateSecondStep(orgadc, customerdc);
manager.Add(servicedc, orgadc, customerdc, mandatordc, datenaustauschreferenz.Value);
foreach (var peroid in service.ServiceInvoicePeriodList)
{
foreach (var invoice in peroid.InvoiceItemList)
{
gesamt += invoice.AmountTotal.Value;
}
}
}
manager.Apply();
gkv_abrechnung.Betrag = gesamt;
gkv_abrechnung.Bezahlt = false;
if (manager.DakotaFileDict.Count != 1 || manager.DakotaFileDict.First().Value.GetKostenträgerCount() != 1)
{
throw new DakotaException("Unerwartete Anzahl an Dakota Files berechnet.");
}
var file_from_manager = manager.DakotaFileDict.First().Value;
var nutzdatendatei = file_from_manager.GetNutzdatendatei();
// https://dev.mysql.com/doc/refman/8.3/en/string-type-syntax.html
// A TEXT column with a maximum length of 65,535 (2^16 1) characters.
// The effective maximum length is less if the value contains multibyte
// characters. Each TEXT value is stored using a 2-byte length prefix
// that indicates the number of bytes in the value.
if (nutzdatendatei.Length > 65535)
{
throw new DakotaException($"nutzdatendatei - Länger als 65535: {nutzdatendatei.Length}");
}
gkv_abrechnung_dc.IKDatenannahmestelle = file_from_manager.GetIKDatenannahmestelle();
gkv_abrechnung_dc.IKKostenträger = file_from_manager.GetIKKostenträger();
gkv_abrechnung_dc.IKLeistungserbringer = file_from_manager.GetIKLeistungserbringer();
gkv_abrechnung_dc.IKVersichertenKarte = file_from_manager.GetIKVersichertenKarte();
gkv_abrechnung_dc.Auftragsdatei = file_from_manager.GetAuftragsdatei();
gkv_abrechnung_dc.Nutzdatendatei = file_from_manager.GetNutzdatendatei();
gkv_abrechnung_dc.Transfername = file_from_manager.GetTransferName();
gkv_abrechnung_dc.Datenaustauschreferenz = file_from_manager.GetDatenaustauschreferenz();
gkv_abrechnung_dc.Dateigröße = nutzdatendatei.Length;
gkv_abrechnung_dc.ErstelltAm = file_from_manager.Created;
gkv_abrechnung_dc.Betrag = file_from_manager.GetBetrag();
gkv_abrechnung_dc.InvoiceBases = loaded_invoicebases;
var gkv_abrechnung = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewEntity(gkv_abrechnung_dc);
gkv_abrechnung.ErstelltAm = DateTime.Now;
DAOFactory.GenericDAO.Insert(gkv_abrechnung);
var new_gkv_abrechnung_dc = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(gkv_abrechnung);
var gkv_abrechnung_dc = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(gkv_abrechnung);
response.Success = true;
response.GkvAbrechnungDC = new_gkv_abrechnung_dc;
response.GkvAbrechnungDC = gkv_abrechnung_dc;
return response;
}
@@ -925,9 +812,6 @@ namespace BeWo.Service.ServiceImplementations
MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MergeWithEntity(abrechnung, entity);
//entity.Notice = abrechnung.Notice;
//entity.Bezahlt = abrechnung.Bezahlt;
DAOFactory.GenericDAO.Update(entity);
return MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(entity);
@@ -950,25 +834,6 @@ namespace BeWo.Service.ServiceImplementations
}
}
public List<long> InsertNewGkvAbrechnungen(List<GkvAbrechnungDC> dcList)
{
//try
//{
// var newGkvAbrechnungen = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewEntities(dcList);
// DAOFactory.GenericDAO.Insert(newGkvAbrechnungen);
// return newGkvAbrechnungen.Select(i => i.Oid.Value).ToList();
//}
//catch (Exception e)
//{
// throw Utils.CreateBeWoFaultException(e);
//}
return null;
}
public GkvAbrechnungSendResponseDC SendNewGkvAbrechnung(GkvAbrechnungSendRequestDC req)
{
var response = new GkvAbrechnungSendResponseDC();
@@ -982,54 +847,213 @@ namespace BeWo.Service.ServiceImplementations
return response;
}
var oid = req.GkvAbrechnungOid;
var entity = DAOFactory.GenericDAO.LoadByID<GkvAbrechnung>(oid);
var protokoll = new GkvTransferProtokoll();
protokoll.ErstelltAm = DateTime.Now;
protokoll.GkvAbrechnungOid = entity.Oid.Value;
try
{
var oid = req.GkvAbrechnungDC.GkvAbrechnungOid.Value;
var validation_success = CreateGkvTransferProtokoll(entity, protokoll);
string response_app8_str = SendApp8SendNewRequest(oid, user.LoginName, user.RC2EncryptedHash);
if(!validation_success)
{
response.Message = "Validierung fehlgeschlagen";
return response;
}
string response_app8_str = SendApp8SendNewRequest(protokoll, user.LoginName, user.RC2EncryptedHash);
if (string.IsNullOrEmpty(response_app8_str))
{
response.Message = "App8 leere Antwort";
return response;
}
throw new DakotaException("Leere Antwort", "App8");
var response_app8 = JsonConvert.DeserializeObject<GkvApp8SendNewResponse>(response_app8_str);
response.Successful = response_app8.Success;
if (!response_app8.Success)
throw new DakotaException(response_app8.Message, "App8 Error");
if (response_app8.Success)
{
var entity = DAOFactory.GenericDAO.GetByID<GkvAbrechnung>(req.GkvAbrechnungDC.GkvAbrechnungOid.Value);
var app8_protokoll = response_app8.GkvTransferProtokollDC;
var child_dc = response_app8.GkvTransferProtokollDC;
var child = MapperFactory.GkvTransferProtokollDC_GkvTransferprotokoll.MapToNewEntity(child_dc);
MapperFactory.GkvTransferProtokollDC_GkvTransferprotokoll.MergeWithEntity(app8_protokoll, protokoll);
entity.GkvTransferProtokolle.Add(child);
DAOFactory.GenericDAO.Update(entity);
response.Message = "Erfolgreich gesendet";
response.GkvAbrechnungDC = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(entity);
}
else
{
response.Message = response_app8.Message;
}
return response;
response.Successful = true;
}
catch (DakotaException de)
{
protokoll.Fehlerdatum = DateTime.Now;
protokoll.Fehlerlevel = GkvTransferFehlerlevel.Soft;
protokoll.Fehlernachricht = de.Message;
protokoll.Fehlertitel = de.Title ?? "Default";
}
catch (Exception e)
{
throw Utils.CreateBeWoFaultException(e);
protokoll.Fehlerdatum = DateTime.Now;
protokoll.Fehlerlevel = GkvTransferFehlerlevel.Fatal;
protokoll.Fehlernachricht = e.ToString();
protokoll.Fehlertitel = "Erstellung (kritisch)";
}
if (entity.GkvTransferProtokolle is null)
entity.GkvTransferProtokolle = new List<GkvTransferProtokoll>();
entity.GkvTransferProtokolle.Add(protokoll);
DAOFactory.GenericDAO.Update(entity);
response.TransferProtokoll = MapperFactory.GkvTransferProtokollDC_GkvTransferprotokoll.MapToNewDC(protokoll);
response.GkvAbrechnungDC = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(entity);
if (response.Successful)
{
}
else
{
response.Message = $"{protokoll.Fehlertitel} - {protokoll.Fehlernachricht}";
}
return response;
}
private bool CreateGkvTransferProtokoll(GkvAbrechnung gkvAbrechnung, GkvTransferProtokoll protokoll)
{
try
{
var gkvAbrechnungDC = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(gkvAbrechnung);
var datenannahmestelle = gkvAbrechnungDC.Organisation.IKDatenannahmestelle;
var state = GkvAbrechnung.GetState(gkvAbrechnung);
if (state == GkvState.Waiting || state == GkvState.OldAndNoFeedback || state == GkvState.Paid || state == GkvState.ErrorFatal)
{
return false;
}
var (datenaustauschreferenz, transfernummer) = GetNextDatenaustauschreferenzTransfernummer(gkvAbrechnung, datenannahmestelle);
var (dat_short, tra_short) = ClearDatenaustauschreferenzTransfernummer(datenaustauschreferenz, transfernummer);
protokoll.Datenaustauschreferenz = datenaustauschreferenz;
protokoll.Transfernummer = transfernummer;
var manager = new DakotaManager();
var mandatordc = new OperationsServiceImp().GetMandator();
DakotaValidator.ValidateFirstStep(mandatordc);
foreach (var invoicebase in gkvAbrechnung.InvoiceBases)
{
var service = DAOFactory.SearchDAO.GetServiceInvoiceByInvoiceBaseOid(invoicebase.Oid.Value);
var orga2 = invoicebase.CostBearer2SupportConcept.CostBearer.Organisation;
var customer = invoicebase.CostBearer2SupportConcept.SupportConcept.Customer;
var invoicebase_dc = MapperFactory.InvoiceBaseDC_InvoiceBase.MapToNewDC(invoicebase);
var servicedc = MapperFactory.ServiceInvoiceDC_ServiceInvoice.MapToNewDC(service);
var orgadc = MapperFactory.OrganisationDC_OrganisationMapper.MapToNewDC(orga2);
var customerdc = MapperFactory.CustomerDC_Customer.MapToNewDC(customer);
DakotaValidator.ValidateSecondStep(orgadc, customerdc);
manager.Add(servicedc, orgadc, customerdc, mandatordc, dat_short, tra_short);
}
manager.Apply();
if (manager.DakotaFileDict.Count != 1 || manager.DakotaFileDict.First().Value.GetKostenträgerCount() != 1)
{
throw new DakotaException("Unerwartete Anzahl an Dakota Files berechnet.");
}
var file_from_manager = manager.DakotaFileDict.First().Value;
var nutzdatendatei = file_from_manager.GetNutzdatendatei();
// https://dev.mysql.com/doc/refman/8.3/en/string-type-syntax.html
// A TEXT column with a maximum length of 65,535 (2^16 1) characters.
// The effective maximum length is less if the value contains multibyte
// characters. Each TEXT value is stored using a 2-byte length prefix
// that indicates the number of bytes in the value.
if (nutzdatendatei.Length > 65535)
{
throw new DakotaException($"nutzdatendatei - Länger als 65535: {nutzdatendatei.Length}");
}
protokoll.IKDatenannahmestelle = file_from_manager.GetIKDatenannahmestelle();
protokoll.IKKostentrager = file_from_manager.GetIKKostenträger();
protokoll.IKLeistungserbringer = file_from_manager.GetIKLeistungserbringer();
protokoll.IKKrankenkasse = file_from_manager.GetIKVersichertenKarte();
protokoll.Rechnungsnummer = file_from_manager.GetRechnungsnummer();
protokoll.Auftragsdatei = file_from_manager.GetAuftragsdatei();
protokoll.Nutzdatendatei = nutzdatendatei;
protokoll.Transfername = file_from_manager.GetTransferName();
protokoll.Dateigrosse = nutzdatendatei.Length;
protokoll.Dateityp = "Nutzdatendatei";
protokoll.Dateiname = protokoll.Transfername;
protokoll.AbsenderBezeichnung = "TestAbsBez";
protokoll.EmpfangerBezeichnung = "TestEmpBez";
return true;
}
catch (DakotaException de)
{
if (string.IsNullOrEmpty(de.Title))
de.Title = "Protokoll Erstellung";
throw de;
}
catch (Exception e)
{
throw new DakotaException(e.Message, "Erstellung");
}
}
private string SendApp8SendNewRequest(long oid, string loginName, string hashed_password)
{
var entity = DAOFactory.GenericDAO.LoadByID<GkvAbrechnung>(oid);
var gkv_abrechnung_dc = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(entity);
private Tuple<int, int> GetNextDatenaustauschreferenzTransfernummer(GkvAbrechnung gkvAbrechnung, string datenannahmestelle)
{
var datenaustauschref = DAOFactory.SearchDAO.GetNextDatenaustauschreferenz(datenannahmestelle);
int transfernummer;
var state = GkvAbrechnung.GetState(gkvAbrechnung);
if (state == GkvState.NoSend)
{
transfernummer = DAOFactory.SearchDAO.GetNextTransfernummer(datenannahmestelle);
}
else if (state == GkvState.Error)
{
transfernummer = gkvAbrechnung.GkvTransferProtokolle.Last().Transfernummer;
}
else
{
throw new ArgumentException("Versucht Datenaustauschref zu laden, invalid state", nameof(state));
}
return new Tuple<int, int>(datenaustauschref, transfernummer);
}
private Tuple<int, int> ClearDatenaustauschreferenzTransfernummer(int datenaustauschreferenz, int transfernummer)
{
int d = datenaustauschreferenz % 99999;
int t = transfernummer % 1000;
if (d == 0)
{
d = 99999;
}
return new Tuple<int, int>(d, t);
}
private string SendApp8SendNewRequest(GkvTransferProtokoll protokoll, string loginName, string hashed_password)
{
var gkv_transfer_dc = MapperFactory.GkvTransferProtokollDC_GkvTransferprotokoll.MapToNewDC(protokoll);
var url = "https://app8.bewoplaner.de/service/GkvAbrechnungView.aspx";
@@ -1039,7 +1063,7 @@ namespace BeWo.Service.ServiceImplementations
var request_app8 = new GkvApp8SendNewRequest
{
GkvAbrechnung = gkv_abrechnung_dc,
GkvTransferProtokoll = gkv_transfer_dc,
Username = loginName,
Password = hashed_password,
Tenant = MultitenancyOperationContextExt.Current.Tenant
@@ -1047,6 +1071,74 @@ namespace BeWo.Service.ServiceImplementations
return SendApp8Request(url, request_app8);
}
/// <summary>
///
/// </summary>
/// <param name="updateables"></param>
/// <param name="loginName"></param>
/// <param name="hashed_password"></param>
/// <returns>Returns true, if the states are all up to date. False otherwise.</returns>
private bool SendApp8GetStatusRequest(GkvAbrechnungDC[] updateables, string loginName, string hashed_password)
{
var updateables_len = updateables.Count();
var url = "https://app8.bewoplaner.de/service/GkvAbrechnungView.aspx";
#if DEBUG
url = "http://localhost:3777/Host/GkvAbrechnungView.aspx";
#endif
var request = new GkvApp8GetStatusRequest
{
Username = loginName,
Password = hashed_password,
Tenant = MultitenancyOperationContextExt.Current.Tenant,
Oids = new long[updateables_len]
};
for (int id = 0; id < updateables_len; id++)
{
var gkv_abrechnung = updateables[id];
var gkv_transfer = gkv_abrechnung.TransferProtokolle.Last();
request.Oids[id] = gkv_transfer.GkvTransferProtokollOid.Value;
}
var response_app8_str = SendApp8Request(url, JsonConvert.SerializeObject(request));
var response_app8 = JsonConvert.DeserializeObject<GkvApp8GetStatusResponse>(response_app8_str);
if (!response_app8.Success)
{
return true;
throw new NotImplementedException("App 8 Anfrage nicht erfolgreich");
}
bool allAreUpToDate = true;
for (int id = 0; id < updateables_len; id++)
{
var gkv_abrechnung = updateables[id];
var fehler = response_app8.Fehler[id];
if (fehler is null)
continue;
allAreUpToDate = false;
var gkv_abrechnung_entity = DAOFactory.GenericDAO.LoadByID<GkvAbrechnung>(gkv_abrechnung.GkvAbrechnungOid.Value);
var protokoll = gkv_abrechnung_entity.GkvTransferProtokolle.First(x => x.Oid == fehler.Oid);
protokoll.Fehlerdatum = fehler.Datum;
protokoll.Fehlerlevel = fehler.Level;
protokoll.Fehlernachricht = fehler.Nachricht;
protokoll.Fehlertitel = fehler.Titel;
DAOFactory.GenericDAO.Update(gkv_abrechnung_entity);
}
return allAreUpToDate;
}
private string SendApp8Request(string url, object request) => SendApp8Request(url, JsonConvert.SerializeObject(request));
private string SendApp8Request(string url, string dataString)
@@ -1063,5 +1155,7 @@ namespace BeWo.Service.ServiceImplementations
return response_app8_str;
}
#endregion
}
}

View File

@@ -1235,4 +1235,21 @@ namespace BS.Shared
GetStatus,
GetIKNumber
}
public enum GkvTransferFehlerlevel
{
None, // Kein Fehler
Soft, // Kann erneut senden
Fatal // Kann nicht erneut senden
}
public enum GkvState
{
NoSend,
Waiting,
Error,
ErrorFatal,
Paid,
OldAndNoFeedback
}
}

View File

@@ -17,48 +17,21 @@ namespace BS.Shared.DataContracts.GkvAbrechnung
[DataMember]
public string Notice { get; set; }
[DataMember]
public string IKLeistungserbringer { get; set; }
[DataMember]
public string IKVersichertenKarte { get; set; }
[DataMember]
public string IKKostenträger { get; set; }
[DataMember]
public string IKDatenannahmestelle { get; set; }
[DataMember]
public DateTime? AbrechnungsZeitraumStart { get; set; }
[DataMember]
public DateTime? AbrechnungsZeitraumEnde { get; set; }
[DataMember]
public string Nutzdatendatei { get; set; }
[DataMember]
public string Auftragsdatei { get; set; }
[DataMember]
public string Transfername { get; set; }
[DataMember]
public int Dateigröße { get; set; }
[DataMember]
public int Datenaustauschreferenz { get; set; }
[DataMember]
public DateTime? ErstelltAm { get; set; }
[DataMember]
public decimal Betrag { get; set; }
[DataMember]
public bool Bezahlt { get; set; }
[DataMember]
public DateTime ErstelltAm { get; set; }
[DataMember]
public IList<InvoiceBaseDC> InvoiceBases { get; set; }

View File

@@ -11,6 +11,6 @@ namespace BS.Shared.DataContracts.GkvAbrechnung
public class GkvAbrechnungSendRequestDC : IDataContract
{
[DataMember]
public GkvAbrechnungDC GkvAbrechnungDC { get; set; }
public long GkvAbrechnungOid { get; set; }
}
}

View File

@@ -18,5 +18,8 @@ namespace BS.Shared.DataContracts.GkvAbrechnung
[DataMember]
public GkvAbrechnungDC GkvAbrechnungDC { get; set; }
[DataMember]
public GkvTransferProtokollDC TransferProtokoll { get; set; }
}
}

View File

@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace BS.Shared.DataContracts.GkvAbrechnung
{
[DataContract]
public class GkvApp8FehlerDC
{
[DataMember]
public long Oid { get; set; }
[DataMember]
public string Titel { get; set; }
[DataMember]
public DateTime? Datum { get; set; }
[DataMember]
public string Nachricht { get; set; }
[DataMember]
public GkvTransferFehlerlevel Level { get; set; }
}
}

View File

@@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using System.Xml.Serialization;
namespace BS.Shared.DataContracts.GkvAbrechnung
{
[Serializable()]
[XmlRoot("Fehler")]
public class GkvApp8FehlerXml
{
[XmlAttribute("Oid")]
public long Oid { get; set; }
[XmlElement("Titel")]
public string Titel { get; set; }
[XmlElement("Datum")]
public DateTime? Datum { get; set; }
[XmlElement("Nachricht")]
public string Nachricht { get; set; }
[XmlElement("Level")]
public int Level { get; set; }
public static GkvApp8FehlerXml Parse(XElement element)
{
var serializer = new XmlSerializer(typeof(GkvApp8FehlerXml));
return (GkvApp8FehlerXml)serializer.Deserialize(element.CreateReader());
}
public static GkvApp8FehlerDC ToDC(GkvApp8FehlerXml fehler)
{
var dc = new GkvApp8FehlerDC();
dc.Oid = fehler.Oid;
dc.Titel = fehler.Titel;
dc.Datum = fehler.Datum;
dc.Nachricht = fehler.Nachricht;
dc.Level = (GkvTransferFehlerlevel)fehler.Level;
return dc;
}
}
}

View File

@@ -10,7 +10,7 @@ namespace BS.Shared.DataContracts.GkvAbrechnung
public class GkvApp8GetStatusRequest : GkvApp8Request
{
[DataMember]
public Tuple<GkvAbrechnungDC, long>[] Tuples { get; set; }
public long[] Oids { get; set; }
public GkvApp8GetStatusRequest()
{

View File

@@ -10,6 +10,16 @@ namespace BS.Shared.DataContracts.GkvAbrechnung
public class GkvApp8GetStatusResponse : GkvApp8Response
{
[DataMember]
public Tuple<bool, GkvAbrechnungDC>[] Tuples { get; set; }
public GkvApp8FehlerDC[] Fehler { get; set; }
public GkvApp8GetStatusResponse()
{
}
public GkvApp8GetStatusResponse(bool success) : base(success)
{
}
}
}

View File

@@ -15,5 +15,15 @@ namespace BS.Shared.DataContracts.GkvAbrechnung
[DataMember]
public string Message { get; set; }
public GkvApp8Response()
{
}
public GkvApp8Response(bool success) : this()
{
Success = success;
}
}
}

View File

@@ -12,6 +12,9 @@ namespace BS.Shared.DataContracts.GkvAbrechnung
[DataMember]
public GkvAbrechnungDC GkvAbrechnung { get; set; }
[DataMember]
public GkvTransferProtokollDC GkvTransferProtokoll { get; set; }
public GkvApp8SendNewRequest()
{
Type = GkvAbrechnungApp8RequestTypeDC.SendNew;

View File

@@ -14,7 +14,12 @@ namespace BS.Shared.DataContracts.GkvAbrechnung
public GkvApp8SendNewResponse()
{
}
public GkvApp8SendNewResponse(bool success) : this()
{
Success = success;
}
}
}

View File

@@ -17,15 +17,42 @@ namespace BS.Shared.DataContracts.GkvAbrechnung
[DataMember]
public string Notice { get; set; }
[DataMember]
[DataMember]
public long GkvAbrechnungOid { get; set; }
[DataMember]
[DataMember]
public string AbsenderBezeichnung { get; set; }
[DataMember]
[DataMember]
public string EmpfangerBezeichnung { get; set; }
[DataMember]
public string IKLeistungserbringer { get; set; }
[DataMember]
public string IKKrankenkasse { get; set; }
[DataMember]
public string IKKostentrager { get; set; }
[DataMember]
public string IKDatenannahmestelle { get; set; }
[DataMember]
public string Rechnungsnummer { get; set; }
[DataMember]
public int Datenaustauschreferenz { get; set; }
[DataMember]
public int Transfernummer { get; set; }
[DataMember]
public string Transfername { get; set; }
[DataMember]
public DateTime? ErstelltAm { get; set; }
[DataMember]
public string Dateityp { get; set; }
@@ -33,21 +60,24 @@ namespace BS.Shared.DataContracts.GkvAbrechnung
public string Dateiname { get; set; }
[DataMember]
public DateTime? PruftDatum { get; set; }
public int Dateigrosse { get; set; }
[DataMember]
public string PruftFehler { get; set; }
public string Nutzdatendatei { get; set; }
[DataMember]
public DateTime? VerschlusseltDatum { get; set; }
public string Auftragsdatei { get; set; }
[DataMember]
public string VerschlusseltFehler { get; set; }
public string Fehlertitel { get; set; }
[DataMember]
public DateTime? UbertragDatum { get; set; }
public DateTime? Fehlerdatum { get; set; }
[DataMember]
public string UbertragFehler { get; set; }
public string Fehlernachricht { get; set; }
[DataMember]
public GkvTransferFehlerlevel Fehlerlevel { get; set; }
}
}

View File

@@ -9,76 +9,64 @@ namespace BS.Shared.Extensions
{
public static class GkvAbrechnungExtensions
{
/// <summary>
/// 1 - Übertragung nicht begonnen
/// 2 - Prüfung keine Antwort
/// 3 - Verschlüsselt keine Antwort
/// 4 - Übertragung keine Antwort
/// 5 - Fertig (Erfolreich oder Fehler)
/// </summary>
/// <param name="gkvAbrechnungDC"></param>
/// <returns></returns>
public static int GetState(this GkvAbrechnungDC gkvAbrechnungDC)
public static GkvState GetState(this GkvAbrechnungDC gkvAbrechnungDC) => GetState(
gkvAbrechnungDC,
() => gkvAbrechnungDC.Bezahlt,
() => gkvAbrechnungDC.TransferProtokolle,
(x) => x.Fehlerdatum,
(x) => x.Fehlerlevel,
(x) => x.ErstelltAm.Value);
public static GkvState GetState<T2>(
object gkvAbrechnung,
Func<bool> bezahlt,
Func<IList<T2>> protokoll,
Func<T2, DateTime?> fehlerdatum,
Func<T2, GkvTransferFehlerlevel> fehlerlevel,
Func<T2, DateTime> created)
{
if (gkvAbrechnungDC.TransferProtokolle == null || !gkvAbrechnungDC.TransferProtokolle.Any())
return 1;
if (gkvAbrechnung is null)
throw new ArgumentNullException(nameof(gkvAbrechnung));
var last_protokoll = gkvAbrechnungDC.TransferProtokolle.Last();
if (bezahlt())
return GkvState.Paid;
return GetState(last_protokoll);
var protokolle = protokoll();
if (protokolle is null || !protokolle.Any())
return GkvState.NoSend;
var last_transfer = protokolle.Last();
if (fehlerdatum(last_transfer).HasValue)
{
if (fehlerlevel(last_transfer) == GkvTransferFehlerlevel.Fatal)
return GkvState.ErrorFatal;
else
return GkvState.Error;
}
// Kein Fehler
if (DateTime.Now - created(last_transfer) > TimeSpan.FromDays(28))
{
return GkvState.OldAndNoFeedback;
}
return GkvState.Waiting;
}
public static int GetState(this GkvTransferProtokollDC last_protokoll)
{
if (!last_protokoll.PruftDatum.HasValue)
{
return 2;
}
else
{
if (last_protokoll.PruftFehler != null)
{
return 5;
}
}
if (!last_protokoll.VerschlusseltDatum.HasValue)
{
return 3;
}
else
{
if (last_protokoll.VerschlusseltFehler != null)
{
return 5;
}
}
if (!last_protokoll.UbertragDatum.HasValue)
{
return 4;
}
else
{
if (last_protokoll.UbertragFehler != null)
{
return 5;
}
}
return 6;
}
public static bool IsStatusComplete(this GkvAbrechnungDC gkvAbrechnungDC)
public static bool IsWaiting(this GkvAbrechnungDC gkvAbrechnungDC)
{
var state = gkvAbrechnungDC.GetState();
return state == 5 || state == 6;
//gkvAbrechnungDC.VerschluesseltAm.HasValue
//&& gkvAbrechnungDC.UebertragenAm.HasValue
//&& gkvAbrechnungDC.AntwortErhaltenAm.HasValue
//&& gkvAbrechnungDC.AntwortEntschluesseltAm.HasValue;
if (state == GkvState.Waiting || state == GkvState.OldAndNoFeedback)
return true;
return false;
}
public static bool IsSend(this GkvAbrechnungDC gkvAbrechnung)
{
return gkvAbrechnung.TransferProtokolle is object && gkvAbrechnung.TransferProtokolle.Any();
}
public static bool IsUpToDate(this GkvAbrechnungDC gkvAbrechnungDC, GkvAbrechnungDC compareTo)

View File

@@ -186,6 +186,8 @@
<Compile Include="DataContracts\DokumentvorlageDC.cs" />
<Compile Include="DataContracts\AdditionalServiceNoticeDC.cs" />
<Compile Include="DataContracts\GeschenkterUrlaubstagDC.cs" />
<Compile Include="DataContracts\GkvAbrechnung\GkvApp8FehlerDC.cs" />
<Compile Include="DataContracts\GkvAbrechnung\GkvApp8FehlerXml.cs" />
<Compile Include="DataContracts\GkvAbrechnung\GkvApp8SendNewResponse.cs" />
<Compile Include="DataContracts\GkvAbrechnung\GkvTransferProtokollDC.cs" />
<Compile Include="DataContracts\GkvAbrechnung\GkvApp8GetIKRequest.cs" />