Merge branch 'feature_rene_13_dakota'
# Conflicts: # .gitignore # BeWo/ServiceProxy/Generated.cs
This commit is contained in:
134
BeWo.Styles/BeWo.Styles.csproj
Normal file
134
BeWo.Styles/BeWo.Styles.csproj
Normal file
@@ -0,0 +1,134 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{9BAB16DE-E284-4B57-BD09-763FC5CE521A}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>BeWo.Styles</RootNamespace>
|
||||
<AssemblyName>BeWo.Styles</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<Deterministic>true</Deterministic>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="DevExpress.Xpf.Core.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||
<Reference Include="DevExpress.Xpf.Core.v23.2.Extensions, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="PresentationFramework" />
|
||||
<Reference Include="PresentationFramework.Aero" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="WindowsBase" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Converters\EnumTranslationConverter.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Page Include="Colors\Colors.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="ControlStyles\ButtonStyles.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="ControlStyles\CheckBoxStyles.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="ControlStyles\ComboBoxStyles.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="ControlStyles\CustomControlsStyles.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="ControlStyles\DateEditStyles.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="ControlStyles\GroupBoxStyles.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="ControlStyles\LabelStyles.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="ControlStyles\ListBoxStyles.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="ControlStyles\NullItemComboBoxStyles.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="ControlStyles\RadioButtonStyles.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="ControlStyles\TextBoxStyles.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="ControlStyles\TextEditStyles.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="ControlStyles\ToggleButtonStyles.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="DataTemplates\ControlTemplates.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="DataTemplates\DataTemplates.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="ModernOrangeBlack.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Controls\Controls.csproj">
|
||||
<Project>{d5e53b0f-bf5a-41e8-93e2-0f32845fc729}</Project>
|
||||
<Name>Controls</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Shared\Shared.csproj">
|
||||
<Project>{2f50b83d-a3f0-4ec4-979a-3f9b7e3d8ed4}</Project>
|
||||
<Name>Shared</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
16
BeWo.Styles/Colors/Colors.xaml
Normal file
16
BeWo.Styles/Colors/Colors.xaml
Normal file
@@ -0,0 +1,16 @@
|
||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<SolidColorBrush x:Key="TextBoxBorderBrush" Color="#FF86878F" />
|
||||
|
||||
|
||||
<SolidColorBrush x:Key="ControlBackgroundBrush" Color="#FFFDC784" />
|
||||
<SolidColorBrush x:Key="ControlSelectedBackgroundBrush" Color="#FFFFD86C" />
|
||||
<SolidColorBrush x:Key="ControlMouseOverBackgroundBrush" Color="#FFDCA158" />
|
||||
|
||||
<SolidColorBrush x:Key="TabItemHotTextBrush" Color="#FFAB4A07" />
|
||||
|
||||
<LinearGradientBrush x:Key="ApplicationBackground" StartPoint="0.5,0" EndPoint="0.5,1">
|
||||
<GradientStop Offset="0.38" Color="#FFDADADB" />
|
||||
<GradientStop Offset="0.725" Color="#FFA9B8C2" />
|
||||
<GradientStop Offset="0.91" Color="#FF4E565A" />
|
||||
</LinearGradientBrush>
|
||||
</ResourceDictionary>
|
||||
153
BeWo.Styles/ControlStyles/ButtonStyles.xaml
Normal file
153
BeWo.Styles/ControlStyles/ButtonStyles.xaml
Normal file
@@ -0,0 +1,153 @@
|
||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<!-- Base -->
|
||||
<Style x:Key="BaseButton" TargetType="{x:Type Button}">
|
||||
<Setter Property="Margin" Value="3" />
|
||||
<Setter Property="Height" Value="25" />
|
||||
<Setter Property="HorizontalAlignment" Value="Center" />
|
||||
<Setter Property="VerticalContentAlignment" Value="Center" />
|
||||
<Setter Property="SnapsToDevicePixels" Value="True" />
|
||||
<Setter Property="Foreground" Value="#FFFFFFFF" />
|
||||
<Setter Property="FontFamily" Value="Microsoft Sans Serif" />
|
||||
<Setter Property="FontSize" Value="12" />
|
||||
</Style>
|
||||
|
||||
<Style
|
||||
x:Key="PrimaryButton"
|
||||
BasedOn="{StaticResource BaseButton}"
|
||||
TargetType="{x:Type Button}">
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="{x:Type Button}">
|
||||
<ControlTemplate.Resources>
|
||||
<Storyboard x:Key="Timeline1">
|
||||
<DoubleAnimationUsingKeyFrames
|
||||
BeginTime="00:00:00"
|
||||
Storyboard.TargetName="glow"
|
||||
Storyboard.TargetProperty="(UIElement.Opacity)">
|
||||
<SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="1" />
|
||||
</DoubleAnimationUsingKeyFrames>
|
||||
</Storyboard>
|
||||
<Storyboard x:Key="Timeline2">
|
||||
<DoubleAnimationUsingKeyFrames
|
||||
BeginTime="00:00:00"
|
||||
Storyboard.TargetName="glow"
|
||||
Storyboard.TargetProperty="(UIElement.Opacity)">
|
||||
<SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0" />
|
||||
</DoubleAnimationUsingKeyFrames>
|
||||
</Storyboard>
|
||||
</ControlTemplate.Resources>
|
||||
<Border
|
||||
x:Name="border"
|
||||
Padding="0,0,0,0"
|
||||
BorderBrush="#FF000000"
|
||||
BorderThickness="1,1,1,1"
|
||||
CornerRadius="4,4,4,4">
|
||||
<Border.Background>
|
||||
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
|
||||
<GradientStop Offset="0" Color="#FF000000" />
|
||||
<GradientStop Offset="1" Color="#FF262626" />
|
||||
</LinearGradientBrush>
|
||||
</Border.Background>
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="0.5*" />
|
||||
<RowDefinition Height="0.5*" />
|
||||
</Grid.RowDefinitions>
|
||||
<Border
|
||||
x:Name="glow"
|
||||
Grid.RowSpan="2"
|
||||
Width="Auto"
|
||||
HorizontalAlignment="Stretch"
|
||||
CornerRadius="4,4,4,4"
|
||||
Opacity="0">
|
||||
<Border.Background>
|
||||
<RadialGradientBrush>
|
||||
<RadialGradientBrush.RelativeTransform>
|
||||
<TransformGroup>
|
||||
<ScaleTransform ScaleX="1.702" ScaleY="2.243" />
|
||||
<SkewTransform AngleX="0" AngleY="0" />
|
||||
<RotateTransform Angle="0" />
|
||||
<TranslateTransform X="-0.368" Y="-0.152" />
|
||||
</TransformGroup>
|
||||
</RadialGradientBrush.RelativeTransform>
|
||||
<GradientStop Offset="0" Color="#B28DBDFF" />
|
||||
<GradientStop Offset="1" Color="#008DBDFF" />
|
||||
</RadialGradientBrush>
|
||||
</Border.Background>
|
||||
</Border>
|
||||
<Border
|
||||
x:Name="shine"
|
||||
Grid.Row="0"
|
||||
Width="Auto"
|
||||
Margin="0,0,0,0"
|
||||
HorizontalAlignment="Stretch"
|
||||
CornerRadius="4,4,0,0">
|
||||
<Border.Background>
|
||||
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
|
||||
<GradientStop Offset="0" Color="#99FFFFFF" />
|
||||
<GradientStop Offset="1" Color="#33FFFFFF" />
|
||||
</LinearGradientBrush>
|
||||
</Border.Background>
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="0"
|
||||
Grid.RowSpan="2"
|
||||
Margin="0,0,0,0">
|
||||
<ContentPresenter
|
||||
Width="Auto"
|
||||
Margin="3,0,3,0"
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center" />
|
||||
</Border>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<ControlTemplate.Triggers>
|
||||
<Trigger Property="IsPressed" Value="True">
|
||||
<Setter TargetName="shine" Property="Opacity" Value="0.4" />
|
||||
<Setter TargetName="border" Property="Background" Value="#998DBDFF" />
|
||||
<Setter TargetName="glow" Property="Visibility" Value="Hidden" />
|
||||
<Setter TargetName="border" Property="BorderBrush" Value="#FF0C0C0C" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="True">
|
||||
<Trigger.EnterActions>
|
||||
<BeginStoryboard Storyboard="{StaticResource Timeline1}" />
|
||||
</Trigger.EnterActions>
|
||||
<Trigger.ExitActions>
|
||||
<BeginStoryboard x:Name="Timeline2_BeginStoryboard" Storyboard="{StaticResource Timeline2}" />
|
||||
</Trigger.ExitActions>
|
||||
</Trigger>
|
||||
<Trigger Property="IsEnabled" Value="False">
|
||||
<Setter TargetName="border" Property="Background" Value="#FF808080" />
|
||||
</Trigger>
|
||||
</ControlTemplate.Triggers>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
|
||||
<Style
|
||||
x:Key="HideDisabledButton"
|
||||
BasedOn="{StaticResource PrimaryButton}"
|
||||
TargetType="{x:Type Button}">
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled}" Value="False">
|
||||
<Setter Property="Visibility" Value="Collapsed" />
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
|
||||
<Style
|
||||
x:Key="HideDisabledButtonSmall"
|
||||
BasedOn="{StaticResource HideDisabledButton}"
|
||||
TargetType="{x:Type Button}">
|
||||
<Setter Property="Height" Value="21" />
|
||||
</Style>
|
||||
|
||||
<Style
|
||||
x:Key="PrimaryButtonSmall"
|
||||
BasedOn="{StaticResource PrimaryButton}"
|
||||
TargetType="{x:Type Button}">
|
||||
<Setter Property="Height" Value="21" />
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
7
BeWo.Styles/ControlStyles/CheckBoxStyles.xaml
Normal file
7
BeWo.Styles/ControlStyles/CheckBoxStyles.xaml
Normal file
@@ -0,0 +1,7 @@
|
||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Style x:Key="CheckBoxBase" TargetType="{x:Type CheckBox}">
|
||||
<Setter Property="Margin" Value="5" />
|
||||
<Setter Property="Padding" Value="0" />
|
||||
<Setter Property="VerticalAlignment" Value="Center" />
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
161
BeWo.Styles/ControlStyles/ComboBoxStyles.xaml
Normal file
161
BeWo.Styles/ControlStyles/ComboBoxStyles.xaml
Normal file
@@ -0,0 +1,161 @@
|
||||
<ResourceDictionary
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
|
||||
xmlns:conv="clr-namespace:BeWo.Styles.Converters">
|
||||
<ResourceDictionary.MergedDictionaries>
|
||||
<ResourceDictionary Source="..\DataTemplates\ControlTemplates.xaml" />
|
||||
<ResourceDictionary Source="..\ControlStyles\ToggleButtonStyles.xaml" />
|
||||
</ResourceDictionary.MergedDictionaries>
|
||||
|
||||
|
||||
<!-- ComboBox -->
|
||||
<Style x:Key="BaseComboBox" TargetType="ComboBox">
|
||||
<Setter Property="Margin" Value="3" />
|
||||
<Setter Property="Height" Value="23" />
|
||||
<Setter Property="FocusVisualStyle" Value="{DynamicResource ComboBoxFocusVisual}" />
|
||||
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}" />
|
||||
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}" />
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource TextBoxBorderBrush}" />
|
||||
<Setter Property="BorderThickness" Value="1" />
|
||||
<Setter Property="Padding" Value="1" />
|
||||
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
|
||||
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
|
||||
<Setter Property="ScrollViewer.CanContentScroll" Value="True" />
|
||||
<Setter Property="VerticalContentAlignment" Value="Center" />
|
||||
</Style>
|
||||
<Style
|
||||
x:Key="PrimaryComboBox"
|
||||
BasedOn="{StaticResource BaseComboBox}"
|
||||
TargetType="ComboBox">
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="{x:Type ComboBox}">
|
||||
<Grid SnapsToDevicePixels="true">
|
||||
<Border
|
||||
x:Name="Bd"
|
||||
MaxWidth="{TemplateBinding MaxWidth}"
|
||||
Padding="1"
|
||||
Background="{TemplateBinding Background}"
|
||||
BorderBrush="{TemplateBinding BorderBrush}"
|
||||
BorderThickness="{TemplateBinding BorderThickness}">
|
||||
<Grid Grid.IsSharedSizeScope="true">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="1" />
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="Auto" SharedSizeGroup="ComboBoxButton" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Border
|
||||
x:Name="SelectedItemBorder"
|
||||
Grid.ColumnSpan="2"
|
||||
Margin="2,1,20,1">
|
||||
<ContentPresenter
|
||||
Margin="3,0"
|
||||
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
|
||||
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
|
||||
Content="{TemplateBinding SelectionBoxItem}"
|
||||
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
|
||||
ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
|
||||
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
|
||||
</Border>
|
||||
<ToggleButton
|
||||
Grid.ColumnSpan="3"
|
||||
IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
|
||||
Style="{StaticResource ComboBoxTransparentButtonStyle}" />
|
||||
</Grid>
|
||||
</Border>
|
||||
<Popup
|
||||
x:Name="PART_Popup"
|
||||
AllowsTransparency="true"
|
||||
Focusable="false"
|
||||
IsOpen="{Binding Path=IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}"
|
||||
Placement="Bottom"
|
||||
PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}">
|
||||
<Microsoft_Windows_Themes:SystemDropShadowChrome
|
||||
x:Name="Shdw"
|
||||
MinWidth="{TemplateBinding ActualWidth}"
|
||||
MaxHeight="{TemplateBinding MaxDropDownHeight}"
|
||||
Color="Transparent">
|
||||
<Border
|
||||
x:Name="DropDownBorder"
|
||||
Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"
|
||||
BorderBrush="{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}}"
|
||||
BorderThickness="1">
|
||||
<ScrollViewer>
|
||||
<ItemsPresenter KeyboardNavigation.DirectionalNavigation="Contained" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
|
||||
</ScrollViewer>
|
||||
</Border>
|
||||
</Microsoft_Windows_Themes:SystemDropShadowChrome>
|
||||
</Popup>
|
||||
</Grid>
|
||||
<ControlTemplate.Triggers>
|
||||
<MultiTrigger>
|
||||
<MultiTrigger.Conditions>
|
||||
<Condition Property="IsSelectionBoxHighlighted" Value="true" />
|
||||
<Condition Property="IsDropDownOpen" Value="false" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Foreground" Value="#FF000000" />
|
||||
</MultiTrigger>
|
||||
<Trigger Property="IsSelectionBoxHighlighted" Value="true">
|
||||
<Setter TargetName="SelectedItemBorder" Property="Background" Value="{DynamicResource ControlSelectedBackgroundBrush}" />
|
||||
</Trigger>
|
||||
<Trigger SourceName="PART_Popup" Property="HasDropShadow" Value="true">
|
||||
<Setter TargetName="Shdw" Property="Margin" Value="0,0,5,5" />
|
||||
<Setter TargetName="Shdw" Property="Color" Value="#71000000" />
|
||||
</Trigger>
|
||||
<Trigger Property="HasItems" Value="false">
|
||||
<Setter TargetName="DropDownBorder" Property="MinHeight" Value="95" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsEnabled" Value="false">
|
||||
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
|
||||
<Setter TargetName="Bd" Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsGrouping" Value="true">
|
||||
<Setter Property="ScrollViewer.CanContentScroll" Value="false" />
|
||||
</Trigger>
|
||||
</ControlTemplate.Triggers>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsEditable" Value="true">
|
||||
<Setter Property="IsTabStop" Value="false" />
|
||||
<Setter Property="Padding" Value="0,1" />
|
||||
<Setter Property="Template" Value="{StaticResource ComboBoxEditableTemplate}" />
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
|
||||
<Style
|
||||
x:Key="NoWrapComboBox"
|
||||
BasedOn="{StaticResource PrimaryComboBox}"
|
||||
TargetType="ComboBox">
|
||||
<Setter Property="ItemTemplate">
|
||||
<Setter.Value>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding Path=.}" TextWrapping="NoWrap" />
|
||||
</DataTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
|
||||
<conv:EnumTranslationConverter x:Key="EnumTranslationConverter" />
|
||||
<DataTemplate x:Key="ListItemView">
|
||||
<TextBlock
|
||||
x:Name="textblock"
|
||||
MaxWidth="362"
|
||||
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
|
||||
Text="{Binding Path=., Converter={StaticResource EnumTranslationConverter}}"
|
||||
TextTrimming="CharacterEllipsis"
|
||||
TextWrapping="NoWrap"
|
||||
ToolTip="{Binding Path=Text, RelativeSource={RelativeSource Self}}" />
|
||||
</DataTemplate>
|
||||
<Style
|
||||
x:Key="EnumTranslationComboBox"
|
||||
BasedOn="{StaticResource PrimaryComboBox}"
|
||||
TargetType="ComboBox">
|
||||
<Setter Property="ItemTemplate" Value="{StaticResource ListItemView}" />
|
||||
<Setter Property="HorizontalAlignment" Value="Stretch" />
|
||||
<Setter Property="MaxWidth" Value="400" />
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
1
BeWo.Styles/ControlStyles/CustomControlsStyles.xaml
Normal file
1
BeWo.Styles/ControlStyles/CustomControlsStyles.xaml
Normal file
@@ -0,0 +1 @@
|
||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" />
|
||||
74
BeWo.Styles/ControlStyles/DateEditStyles.xaml
Normal file
74
BeWo.Styles/ControlStyles/DateEditStyles.xaml
Normal file
@@ -0,0 +1,74 @@
|
||||
<ResourceDictionary
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
|
||||
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
|
||||
xmlns:dxei="http://schemas.devexpress.com/winfx/2008/xaml/editors/internal"
|
||||
xmlns:dxet="http://schemas.devexpress.com/winfx/2008/xaml/editors/themekeys">
|
||||
<Style
|
||||
x:Key="BaseDateEdit"
|
||||
BasedOn="{StaticResource {x:Type dxe:DateEdit}}"
|
||||
TargetType="{x:Type dxe:DateEdit}">
|
||||
<Setter Property="Margin" Value="3" />
|
||||
<Setter Property="Padding" Value="1" />
|
||||
<Setter Property="Height" Value="23" />
|
||||
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}" />
|
||||
<Setter Property="BorderBrush" Value="{StaticResource TextBoxBorderBrush}" />
|
||||
<Setter Property="BorderThickness" Value="1" />
|
||||
</Style>
|
||||
<Style
|
||||
x:Key="PrimaryDateEdit"
|
||||
BasedOn="{StaticResource BaseDateEdit}"
|
||||
TargetType="{x:Type dxe:DateEdit}">
|
||||
<Style.Resources>
|
||||
<DataTemplate x:Key="{dxet:ButtonsThemeKey ResourceKey=ToggleButtonInfoTemplate, IsThemeIndependent=True}">
|
||||
<dx:ToggleStateButton
|
||||
x:Name="PART_Item"
|
||||
Margin="2"
|
||||
dxei:SetIsCheckedToButtonInfoBehavior.IsEnabled="True"
|
||||
IsChecked="{Binding Path=IsChecked, Mode=TwoWay}"
|
||||
Style="{StaticResource ComboBoxTransparentButtonStyle}" />
|
||||
<DataTemplate.Triggers>
|
||||
<DataTrigger Binding="{Binding Path=IsDefaultButton}" Value="True">
|
||||
<Setter TargetName="PART_Item" Property="IsChecked" Value="{Binding Path=(dxe:BaseEdit.OwnerEdit).IsPopupOpen, RelativeSource={RelativeSource Self}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding Path=IsDefaultButton}" Value="False">
|
||||
<Setter TargetName="PART_Item" Property="HandleToggle" Value="False" />
|
||||
</DataTrigger>
|
||||
</DataTemplate.Triggers>
|
||||
</DataTemplate>
|
||||
</Style.Resources>
|
||||
</Style>
|
||||
<Style
|
||||
x:Key="DateEditDateOnly"
|
||||
BasedOn="{StaticResource PrimaryDateEdit}"
|
||||
TargetType="{x:Type dxe:DateEdit}">
|
||||
<Setter Property="MaskType" Value="DateOnlyAdvancingCaret" />
|
||||
<Setter Property="MaskUseAsDisplayFormat" Value="true" />
|
||||
</Style>
|
||||
<Style
|
||||
x:Key="DateEditDateOnlyShort"
|
||||
BasedOn="{StaticResource DateEditDateOnly}"
|
||||
TargetType="{x:Type dxe:DateEdit}">
|
||||
<Setter Property="Mask" Value="d" />
|
||||
</Style>
|
||||
<Style
|
||||
x:Key="DateEditDateOnlyLong"
|
||||
BasedOn="{StaticResource DateEditDateOnly}"
|
||||
TargetType="{x:Type dxe:DateEdit}">
|
||||
<Setter Property="Mask" Value="D" />
|
||||
</Style>
|
||||
<Style
|
||||
x:Key="DateEditDateTime"
|
||||
BasedOn="{StaticResource PrimaryDateEdit}"
|
||||
TargetType="{x:Type dxe:DateEdit}">
|
||||
<Setter Property="MaskType" Value="DateTimeAdvancingCaret" />
|
||||
<Setter Property="MaskUseAsDisplayFormat" Value="true" />
|
||||
</Style>
|
||||
<Style
|
||||
x:Key="DateEditDateTimeShort"
|
||||
BasedOn="{StaticResource DateEditDateTime}"
|
||||
TargetType="{x:Type dxe:DateEdit}">
|
||||
<Setter Property="Mask" Value="F" />
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
52
BeWo.Styles/ControlStyles/GroupBoxStyles.xaml
Normal file
52
BeWo.Styles/ControlStyles/GroupBoxStyles.xaml
Normal file
@@ -0,0 +1,52 @@
|
||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Style x:Key="BaseGroupBox" TargetType="{x:Type GroupBox}">
|
||||
<Setter Property="BorderThickness" Value="1" />
|
||||
<Setter Property="Padding" Value="3" />
|
||||
</Style>
|
||||
<Style
|
||||
x:Key="ObjectEditGroupBox"
|
||||
BasedOn="{StaticResource BaseGroupBox}"
|
||||
TargetType="{x:Type GroupBox}">
|
||||
<!-- <Setter Property="BorderBrush" Value="#D5DFE5" />-->
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="{x:Type GroupBox}">
|
||||
<Grid SnapsToDevicePixels="true">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Border
|
||||
x:Name="Header"
|
||||
Grid.Row="0"
|
||||
Grid.Column="0"
|
||||
MinHeight="20"
|
||||
Padding="3,0,3,0"
|
||||
TextElement.FontFamily="Microsoft Sans Serif"
|
||||
TextElement.FontSize="16"
|
||||
TextElement.Foreground="{StaticResource TabItemHotTextBrush}">
|
||||
<ContentPresenter
|
||||
ContentSource="Header"
|
||||
RecognizesAccessKey="True"
|
||||
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="1"
|
||||
BorderBrush="#FF86878F"
|
||||
BorderThickness="0,0,0,1" />
|
||||
<ContentPresenter
|
||||
Grid.Row="2"
|
||||
Grid.Column="0"
|
||||
Margin="{TemplateBinding Padding}"
|
||||
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
|
||||
</Grid>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
19
BeWo.Styles/ControlStyles/LabelStyles.xaml
Normal file
19
BeWo.Styles/ControlStyles/LabelStyles.xaml
Normal file
@@ -0,0 +1,19 @@
|
||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Style x:Key="BaseLabel" TargetType="Label">
|
||||
<Setter Property="IsEnabled" Value="True" />
|
||||
<Setter Property="Margin" Value="3" />
|
||||
<Setter Property="Padding" Value="3" />
|
||||
<Setter Property="VerticalAlignment" Value="Top" />
|
||||
<Setter Property="TextElement.Foreground" Value="#FF000000" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="Header1" TargetType="Label">
|
||||
<Setter Property="TextElement.FontSize" Value="16" />
|
||||
<Setter Property="TextElement.Foreground" Value="{StaticResource TabItemHotTextBrush}" />
|
||||
<Setter Property="TextElement.FontFamily" Value="Microsoft Sans Serif" />
|
||||
<Setter Property="Padding" Value="3,0,3,0" />
|
||||
<Setter Property="MinHeight" Value="20" />
|
||||
<Setter Property="HorizontalAlignment" Value="Center" />
|
||||
<Setter Property="Margin" Value="3,-6,3,6" />
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
27
BeWo.Styles/ControlStyles/ListBoxStyles.xaml
Normal file
27
BeWo.Styles/ControlStyles/ListBoxStyles.xaml
Normal file
@@ -0,0 +1,27 @@
|
||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<!-- ListBoxItems -->
|
||||
<Style x:Key="PhotoListBoxItem" TargetType="ListBoxItem">
|
||||
<Setter Property="HorizontalAlignment" Value="Stretch" />
|
||||
<Style.Resources>
|
||||
<SolidColorBrush
|
||||
x:Key="{x:Static SystemColors.HighlightBrushKey}"
|
||||
Opacity="0.4"
|
||||
Color="AliceBlue" />
|
||||
<SolidColorBrush
|
||||
x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}"
|
||||
Opacity="0.4"
|
||||
Color="AliceBlue" />
|
||||
</Style.Resources>
|
||||
</Style>
|
||||
|
||||
<!-- ListBox -->
|
||||
<Style x:Key="PhotoListBox" TargetType="{x:Type ListBox}">
|
||||
<Setter Property="Foreground" Value="Black" />
|
||||
<Setter Property="Margin" Value="5" />
|
||||
<Setter Property="MinHeight" Value="100" />
|
||||
<Setter Property="MaxHeight" Value="800" />
|
||||
<Setter Property="IsSynchronizedWithCurrentItem" Value="True" />
|
||||
<Setter Property="SelectionMode" Value="Single" />
|
||||
<Setter Property="ItemContainerStyle" Value="{StaticResource PhotoListBoxItem}" />
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
148
BeWo.Styles/ControlStyles/NullItemComboBoxStyles.xaml
Normal file
148
BeWo.Styles/ControlStyles/NullItemComboBoxStyles.xaml
Normal file
@@ -0,0 +1,148 @@
|
||||
<ResourceDictionary
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
|
||||
xmlns:uc="clr-namespace:BeWo.Controls;assembly=BeWo.Controls">
|
||||
|
||||
<!-- NullItemComboBox -->
|
||||
<Style x:Key="PrimaryNullItemComboBox" TargetType="uc:NullItemComboBox">
|
||||
<Setter Property="Margin" Value="3" />
|
||||
<Setter Property="Height" Value="23" />
|
||||
<Setter Property="FocusVisualStyle" Value="{DynamicResource ComboBoxFocusVisual}" />
|
||||
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}" />
|
||||
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}" />
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource TextBoxBorderBrush}" />
|
||||
<Setter Property="BorderThickness" Value="1" />
|
||||
<Setter Property="Padding" Value="1" />
|
||||
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
|
||||
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
|
||||
<Setter Property="ScrollViewer.CanContentScroll" Value="true" />
|
||||
<Setter Property="VerticalContentAlignment" Value="Center" />
|
||||
<Setter Property="ItemTemplate">
|
||||
<Setter.Value>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding Path=.}" TextWrapping="NoWrap" />
|
||||
</DataTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="{x:Type uc:NullItemComboBox}">
|
||||
<Grid SnapsToDevicePixels="true">
|
||||
<Border
|
||||
x:Name="Bd"
|
||||
Padding="1"
|
||||
Background="{TemplateBinding Background}"
|
||||
BorderBrush="{TemplateBinding BorderBrush}"
|
||||
BorderThickness="{TemplateBinding BorderThickness}">
|
||||
<Grid Grid.IsSharedSizeScope="true">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="1" />
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="Auto" SharedSizeGroup="ComboBoxButton" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Border
|
||||
x:Name="SelectedItemBorder"
|
||||
Grid.ColumnSpan="2"
|
||||
Margin="2,1,20,1">
|
||||
<ContentPresenter
|
||||
Margin="3,0"
|
||||
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
|
||||
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
|
||||
Content="{TemplateBinding SelectionBoxItem}"
|
||||
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
|
||||
ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
|
||||
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
|
||||
</Border>
|
||||
<ToggleButton
|
||||
Grid.Column="0"
|
||||
Grid.ColumnSpan="3"
|
||||
IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
|
||||
Style="{DynamicResource ComboBoxTransparentButtonStyle}" />
|
||||
<Label
|
||||
x:Name="label_nullText"
|
||||
Grid.Column="0"
|
||||
Grid.ColumnSpan="2"
|
||||
Margin="5,3,20,3"
|
||||
Padding="0"
|
||||
HorizontalAlignment="Left"
|
||||
VerticalAlignment="Center"
|
||||
Content="{TemplateBinding NullText}"
|
||||
IsHitTestVisible="False"
|
||||
Visibility="Hidden" />
|
||||
</Grid>
|
||||
</Border>
|
||||
<Popup
|
||||
x:Name="PART_Popup"
|
||||
AllowsTransparency="true"
|
||||
Focusable="false"
|
||||
IsOpen="{Binding Path=IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}"
|
||||
Placement="Bottom"
|
||||
PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}">
|
||||
<Microsoft_Windows_Themes:SystemDropShadowChrome
|
||||
x:Name="Shdw"
|
||||
MinWidth="{TemplateBinding ActualWidth}"
|
||||
MaxHeight="{TemplateBinding MaxDropDownHeight}"
|
||||
Color="Transparent">
|
||||
<Border
|
||||
x:Name="DropDownBorder"
|
||||
Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"
|
||||
BorderBrush="{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}}"
|
||||
BorderThickness="1">
|
||||
<ScrollViewer>
|
||||
<ItemsPresenter KeyboardNavigation.DirectionalNavigation="Contained" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
|
||||
</ScrollViewer>
|
||||
</Border>
|
||||
</Microsoft_Windows_Themes:SystemDropShadowChrome>
|
||||
</Popup>
|
||||
</Grid>
|
||||
<ControlTemplate.Triggers>
|
||||
<MultiTrigger>
|
||||
<MultiTrigger.Conditions>
|
||||
<Condition Property="IsSelectionBoxHighlighted" Value="true" />
|
||||
<Condition Property="IsDropDownOpen" Value="false" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Foreground" Value="#FF000000" />
|
||||
</MultiTrigger>
|
||||
<Trigger Property="IsSelectionBoxHighlighted" Value="true">
|
||||
<Setter TargetName="SelectedItemBorder" Property="Background" Value="{DynamicResource ControlSelectedBackgroundBrush}" />
|
||||
</Trigger>
|
||||
<Trigger SourceName="PART_Popup" Property="HasDropShadow" Value="true">
|
||||
<Setter TargetName="Shdw" Property="Margin" Value="0,0,5,5" />
|
||||
<Setter TargetName="Shdw" Property="Color" Value="#71000000" />
|
||||
</Trigger>
|
||||
<Trigger Property="HasItems" Value="false">
|
||||
<Setter TargetName="DropDownBorder" Property="MinHeight" Value="95" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsEnabled" Value="false">
|
||||
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
|
||||
<Setter TargetName="Bd" Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsGrouping" Value="true">
|
||||
<Setter Property="ScrollViewer.CanContentScroll" Value="false" />
|
||||
</Trigger>
|
||||
<Trigger Property="SelectedItem" Value="{x:Null}">
|
||||
<Setter TargetName="label_nullText" Property="Visibility" Value="Visible" />
|
||||
</Trigger>
|
||||
</ControlTemplate.Triggers>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsEditable" Value="true">
|
||||
<Setter Property="IsTabStop" Value="false" />
|
||||
<Setter Property="Padding" Value="0,1" />
|
||||
<Setter Property="Template" Value="{DynamicResource ComboBoxEditableTemplate}" />
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
|
||||
<Style
|
||||
x:Key="EnumTranslationNullItemComboBox"
|
||||
BasedOn="{StaticResource PrimaryNullItemComboBox}"
|
||||
TargetType="{x:Type uc:NullItemComboBox}">
|
||||
<Setter Property="ItemTemplate" Value="{DynamicResource ListItemView}" />
|
||||
<Setter Property="HorizontalAlignment" Value="Stretch" />
|
||||
<Setter Property="MaxWidth" Value="400" />
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
7
BeWo.Styles/ControlStyles/RadioButtonStyles.xaml
Normal file
7
BeWo.Styles/ControlStyles/RadioButtonStyles.xaml
Normal file
@@ -0,0 +1,7 @@
|
||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<!-- Base -->
|
||||
<Style x:Key="BaseRadioButton" TargetType="RadioButton">
|
||||
<Setter Property="Margin" Value="3" />
|
||||
<Setter Property="VerticalAlignment" Value="Top" />
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
71
BeWo.Styles/ControlStyles/TextBoxStyles.xaml
Normal file
71
BeWo.Styles/ControlStyles/TextBoxStyles.xaml
Normal file
@@ -0,0 +1,71 @@
|
||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Style x:Key="TextBoxBase" TargetType="{x:Type TextBox}">
|
||||
<Setter Property="Margin" Value="3" />
|
||||
<Setter Property="Padding" Value="3" />
|
||||
<Setter Property="Height" Value="23" />
|
||||
<Setter Property="VerticalAlignment" Value="Center" />
|
||||
<Setter Property="HorizontalAlignment" Value="Stretch" />
|
||||
</Style>
|
||||
|
||||
<Style
|
||||
x:Key="TextBoxNoticeBase"
|
||||
BasedOn="{StaticResource TextBoxBase}"
|
||||
TargetType="{x:Type TextBox}">
|
||||
<Setter Property="MinHeight" Value="23" />
|
||||
<Setter Property="VerticalContentAlignment" Value="Stretch" />
|
||||
<Setter Property="VerticalAlignment" Value="Stretch" />
|
||||
<Setter Property="AcceptsReturn" Value="True" />
|
||||
<Setter Property="VerticalScrollBarVisibility" Value="Auto" />
|
||||
</Style>
|
||||
<Style
|
||||
x:Key="TextBoxNotice"
|
||||
BasedOn="{StaticResource TextBoxNoticeBase}"
|
||||
TargetType="{x:Type TextBox}">
|
||||
<Setter Property="MaxHeight" Value="150" />
|
||||
<Setter Property="Height" Value="auto" />
|
||||
</Style>
|
||||
<Style
|
||||
x:Key="TextBoxNoticeLarge"
|
||||
BasedOn="{StaticResource TextBoxNoticeBase}"
|
||||
TargetType="{x:Type TextBox}">
|
||||
<Setter Property="MinHeight" Value="58" />
|
||||
<Setter Property="Height" Value="auto" />
|
||||
<Setter Property="MaxHeight" Value="300" />
|
||||
</Style>
|
||||
<Style
|
||||
x:Key="TextBoxNoticeExtended"
|
||||
BasedOn="{StaticResource TextBoxNoticeBase}"
|
||||
TargetType="{x:Type TextBox}">
|
||||
<Setter Property="MinHeight" Value="150" />
|
||||
<Setter Property="Height" Value="150" />
|
||||
<Setter Property="MaxHeight" Value="150" />
|
||||
</Style>
|
||||
<Style
|
||||
x:Key="TextBoxNoticeSmallExtended"
|
||||
BasedOn="{StaticResource TextBoxNoticeBase}"
|
||||
TargetType="{x:Type TextBox}">
|
||||
<Setter Property="MinHeight" Value="75" />
|
||||
<Setter Property="MaxHeight" Value="75" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="ComboBoxEditableTextBox" TargetType="{x:Type TextBox}">
|
||||
<Setter Property="OverridesDefaultStyle" Value="true" />
|
||||
<Setter Property="AllowDrop" Value="true" />
|
||||
<Setter Property="MinWidth" Value="0" />
|
||||
<Setter Property="MinHeight" Value="0" />
|
||||
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="{x:Type TextBox}">
|
||||
<ScrollViewer
|
||||
x:Name="PART_ContentHost"
|
||||
Background="Transparent"
|
||||
Focusable="false"
|
||||
HorizontalScrollBarVisibility="Hidden"
|
||||
VerticalScrollBarVisibility="Hidden" />
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
|
||||
</ResourceDictionary>
|
||||
76
BeWo.Styles/ControlStyles/TextEditStyles.xaml
Normal file
76
BeWo.Styles/ControlStyles/TextEditStyles.xaml
Normal file
@@ -0,0 +1,76 @@
|
||||
<ResourceDictionary
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
|
||||
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors">
|
||||
|
||||
<!-- Base -->
|
||||
<Style x:Key="BaseTextEdit" TargetType="{x:Type dxe:TextEdit}">
|
||||
<Setter Property="Margin" Value="3" />
|
||||
<Setter Property="Height" Value="23" />
|
||||
</Style>
|
||||
<Style
|
||||
x:Key="BaseNumberMaskTextEdit"
|
||||
BasedOn="{StaticResource BaseTextEdit}"
|
||||
TargetType="{x:Type dxe:TextEdit}">
|
||||
<Setter Property="MaskType" Value="Numeric" />
|
||||
<Setter Property="MaskUseAsDisplayFormat" Value="True" />
|
||||
</Style>
|
||||
|
||||
<!-- Special -->
|
||||
<Style
|
||||
x:Key="TextEditNumber"
|
||||
BasedOn="{StaticResource BaseNumberMaskTextEdit}"
|
||||
TargetType="{x:Type dxe:TextEdit}">
|
||||
<Setter Property="Mask" Value="N0" />
|
||||
</Style>
|
||||
<Style
|
||||
x:Key="TextEditYear"
|
||||
BasedOn="{StaticResource BaseNumberMaskTextEdit}"
|
||||
TargetType="{x:Type dxe:TextEdit}">
|
||||
<Setter Property="Mask" Value="0000" />
|
||||
</Style>
|
||||
<Style
|
||||
x:Key="TextEditQm"
|
||||
BasedOn="{StaticResource BaseNumberMaskTextEdit}"
|
||||
TargetType="{x:Type dxe:TextEdit}">
|
||||
<Setter Property="Mask" Value="######0.00 qm" />
|
||||
</Style>
|
||||
<Style
|
||||
x:Key="TextEditCurrency"
|
||||
BasedOn="{StaticResource BaseNumberMaskTextEdit}"
|
||||
TargetType="{x:Type dxe:TextEdit}">
|
||||
<Setter Property="Mask" Value="######0.## $" />
|
||||
<Setter Property="dxe:NumericMaskOptions.AlwaysShowDecimalSeparator" Value="False" />
|
||||
</Style>
|
||||
<Style
|
||||
x:Key="TextEditHours"
|
||||
BasedOn="{StaticResource BaseNumberMaskTextEdit}"
|
||||
TargetType="{x:Type dxe:TextEdit}">
|
||||
<Setter Property="Mask" Value="########0.## Std" />
|
||||
<Setter Property="dxe:NumericMaskOptions.AlwaysShowDecimalSeparator" Value="False" />
|
||||
</Style>
|
||||
<Style
|
||||
x:Key="TextEditDays"
|
||||
BasedOn="{StaticResource BaseNumberMaskTextEdit}"
|
||||
TargetType="{x:Type dxe:TextEdit}">
|
||||
<Setter Property="Mask" Value="########0.## Tage" />
|
||||
<Setter Property="dxe:NumericMaskOptions.AlwaysShowDecimalSeparator" Value="False" />
|
||||
</Style>
|
||||
|
||||
<!-- Numbers -->
|
||||
<Style
|
||||
x:Key="TextEditNumberDecimal"
|
||||
BasedOn="{StaticResource BaseNumberMaskTextEdit}"
|
||||
TargetType="{x:Type dxe:TextEdit}">
|
||||
<Setter Property="Mask" Value="########0.##" />
|
||||
<Setter Property="dxe:NumericMaskOptions.AlwaysShowDecimalSeparator" Value="False" />
|
||||
</Style>
|
||||
<Style
|
||||
x:Key="TextEditNumberDecimalNullable"
|
||||
BasedOn="{StaticResource BaseNumberMaskTextEdit}"
|
||||
TargetType="{x:Type dxe:TextEdit}">
|
||||
<Setter Property="Mask" Value="#########.##" />
|
||||
<Setter Property="dxe:NumericMaskOptions.AlwaysShowDecimalSeparator" Value="False" />
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
149
BeWo.Styles/ControlStyles/ToggleButtonStyles.xaml
Normal file
149
BeWo.Styles/ControlStyles/ToggleButtonStyles.xaml
Normal file
@@ -0,0 +1,149 @@
|
||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Style x:Key="ComboBoxTransparentButtonStyle" TargetType="{x:Type ToggleButton}">
|
||||
<Setter Property="MinWidth" Value="0" />
|
||||
<Setter Property="MinHeight" Value="0" />
|
||||
<Setter Property="Width" Value="Auto" />
|
||||
<Setter Property="Height" Value="Auto" />
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
<Setter Property="Focusable" Value="false" />
|
||||
<Setter Property="ClickMode" Value="Press" />
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="{x:Type ToggleButton}">
|
||||
<ControlTemplate.Resources>
|
||||
<Storyboard x:Key="Timeline1">
|
||||
<DoubleAnimationUsingKeyFrames
|
||||
BeginTime="00:00:00"
|
||||
Storyboard.TargetName="glow"
|
||||
Storyboard.TargetProperty="(UIElement.Opacity)">
|
||||
<SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="1" />
|
||||
</DoubleAnimationUsingKeyFrames>
|
||||
<DoubleAnimation
|
||||
Storyboard.TargetName="border"
|
||||
Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleX)"
|
||||
To="1.3"
|
||||
Duration="0:0:0.2" />
|
||||
<DoubleAnimation
|
||||
Storyboard.TargetName="border"
|
||||
Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)"
|
||||
To="1.3"
|
||||
Duration="0:0:0.2" />
|
||||
</Storyboard>
|
||||
<Storyboard x:Key="Timeline2">
|
||||
<DoubleAnimationUsingKeyFrames
|
||||
BeginTime="00:00:00"
|
||||
Storyboard.TargetName="glow"
|
||||
Storyboard.TargetProperty="(UIElement.Opacity)">
|
||||
<SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0" />
|
||||
</DoubleAnimationUsingKeyFrames>
|
||||
<DoubleAnimation
|
||||
Storyboard.TargetName="border"
|
||||
Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleX)"
|
||||
Duration="0:0:0.2" />
|
||||
<DoubleAnimation
|
||||
Storyboard.TargetName="border"
|
||||
Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)"
|
||||
Duration="0:0:0.2" />
|
||||
</Storyboard>
|
||||
</ControlTemplate.Resources>
|
||||
<Grid SnapsToDevicePixels="true">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Border
|
||||
x:Name="border"
|
||||
Grid.Column="1"
|
||||
Width="{DynamicResource {x:Static SystemParameters.ScrollWidthKey}}"
|
||||
Margin="0,0,0,0"
|
||||
Padding="0,0,0,0"
|
||||
BorderBrush="#FF000000"
|
||||
BorderThickness="1,1,1,1"
|
||||
CornerRadius="4,4,4,4">
|
||||
<Border.Background>
|
||||
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
|
||||
<GradientStop Offset="0" Color="#FF000000" />
|
||||
<GradientStop Offset="1" Color="#FF262626" />
|
||||
</LinearGradientBrush>
|
||||
</Border.Background>
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="0.5*" />
|
||||
<RowDefinition Height="0.5*" />
|
||||
</Grid.RowDefinitions>
|
||||
<Border
|
||||
x:Name="glow"
|
||||
Grid.RowSpan="2"
|
||||
Width="Auto"
|
||||
HorizontalAlignment="Stretch"
|
||||
CornerRadius="3,3,3,3"
|
||||
Opacity="0">
|
||||
<Border.Background>
|
||||
<RadialGradientBrush>
|
||||
<RadialGradientBrush.RelativeTransform>
|
||||
<TransformGroup>
|
||||
<ScaleTransform ScaleX="1.702" ScaleY="2.243" />
|
||||
<SkewTransform AngleX="0" AngleY="0" />
|
||||
<RotateTransform Angle="0" />
|
||||
<TranslateTransform X="-0.368" Y="-0.152" />
|
||||
</TransformGroup>
|
||||
</RadialGradientBrush.RelativeTransform>
|
||||
<GradientStop Offset="0" Color="#B28DBDFF" />
|
||||
<GradientStop Offset="1" Color="#008DBDFF" />
|
||||
</RadialGradientBrush>
|
||||
</Border.Background>
|
||||
</Border>
|
||||
<Border
|
||||
x:Name="shine"
|
||||
Grid.Row="0"
|
||||
Width="Auto"
|
||||
Margin="0,0,0,0"
|
||||
HorizontalAlignment="Stretch"
|
||||
CornerRadius="3,3,0,0">
|
||||
<Border.Background>
|
||||
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
|
||||
<GradientStop Offset="0" Color="#99FFFFFF" />
|
||||
<GradientStop Offset="1" Color="#33FFFFFF" />
|
||||
</LinearGradientBrush>
|
||||
</Border.Background>
|
||||
</Border>
|
||||
<TextBlock
|
||||
Grid.Row="0"
|
||||
Grid.RowSpan="2"
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
FontFamily="Webdings"
|
||||
FontSize="9"
|
||||
Text="6"
|
||||
TextWrapping="Wrap">
|
||||
<TextBlock.Foreground>
|
||||
<SolidColorBrush Color="{DynamicResource {x:Static SystemColors.ControlColorKey}}" />
|
||||
</TextBlock.Foreground>
|
||||
</TextBlock>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<!-- <ToggleButton x:Name="Chrome" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" Style="{StaticResource ComboBoxReadonlyToggleButton}" Grid.ColumnSpan="2" IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"/>-->
|
||||
|
||||
</Grid>
|
||||
<ControlTemplate.Triggers>
|
||||
<Trigger Property="IsChecked" Value="True">
|
||||
<Setter TargetName="shine" Property="Opacity" Value="0.4" />
|
||||
<Setter TargetName="border" Property="Background" Value="#99FFA500" />
|
||||
<Setter TargetName="glow" Property="Visibility" Value="Hidden" />
|
||||
<Setter TargetName="border" Property="BorderBrush" Value="#FF0C0C0C" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="True">
|
||||
<Trigger.EnterActions>
|
||||
<BeginStoryboard Storyboard="{StaticResource Timeline1}" />
|
||||
</Trigger.EnterActions>
|
||||
<Trigger.ExitActions>
|
||||
<BeginStoryboard x:Name="Timeline2_BeginStoryboard" Storyboard="{StaticResource Timeline2}" />
|
||||
</Trigger.ExitActions>
|
||||
</Trigger>
|
||||
</ControlTemplate.Triggers>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
37
BeWo.Styles/Converters/EnumTranslationConverter.cs
Normal file
37
BeWo.Styles/Converters/EnumTranslationConverter.cs
Normal file
@@ -0,0 +1,37 @@
|
||||
using BS.Shared.Core;
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace BeWo.Styles.Converters
|
||||
{
|
||||
public class EnumTranslationConverter : IValueConverter
|
||||
{
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
if (value is Enum e)
|
||||
{
|
||||
if (EnumTranslations.Wohnhilfe2Translation.TryGetValue(e, out string v))
|
||||
{
|
||||
return v;
|
||||
}
|
||||
// RE:
|
||||
// EnumTranslationConverter, aber betrachtet nicht alle?
|
||||
// Brauche hier eig nur EnumTranslations.Gkv2Translation
|
||||
if (EnumTranslations.AllTranslations.TryGetValue(e, out string vv))
|
||||
{
|
||||
return vv;
|
||||
}
|
||||
|
||||
return e;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
92
BeWo.Styles/DataTemplates/ControlTemplates.xaml
Normal file
92
BeWo.Styles/DataTemplates/ControlTemplates.xaml
Normal file
@@ -0,0 +1,92 @@
|
||||
<ResourceDictionary
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero">
|
||||
<Style x:Key="ComboBoxFocusVisual">
|
||||
<Setter Property="Control.Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate>
|
||||
<Rectangle
|
||||
Margin="4,4,21,4"
|
||||
SnapsToDevicePixels="true"
|
||||
Stroke="Black"
|
||||
StrokeDashArray="1 2"
|
||||
StrokeThickness="1" />
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
|
||||
<!-- Control Templates -->
|
||||
<ControlTemplate x:Key="ComboBoxEditableTemplate" TargetType="{x:Type ComboBox}">
|
||||
<Grid SnapsToDevicePixels="true">
|
||||
<Border
|
||||
x:Name="Bd"
|
||||
Padding="1"
|
||||
Background="{TemplateBinding Background}"
|
||||
BorderBrush="{TemplateBinding BorderBrush}"
|
||||
BorderThickness="{TemplateBinding BorderThickness}">
|
||||
<Grid Grid.IsSharedSizeScope="true">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="1" />
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="Auto" SharedSizeGroup="ComboBoxButton" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBox
|
||||
x:Name="PART_EditableTextBox"
|
||||
Grid.Column="1"
|
||||
Margin="{TemplateBinding Padding}"
|
||||
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
|
||||
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
|
||||
IsReadOnly="{Binding Path=IsReadOnly, RelativeSource={RelativeSource TemplatedParent}}"
|
||||
Style="{DynamicResource ComboBoxEditableTextBox}" />
|
||||
<ToggleButton
|
||||
Grid.Column="0"
|
||||
Grid.ColumnSpan="3"
|
||||
Background="{x:Null}"
|
||||
IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
|
||||
Style="{DynamicResource ComboBoxTransparentButtonStyle}" />
|
||||
</Grid>
|
||||
</Border>
|
||||
<Popup
|
||||
x:Name="PART_Popup"
|
||||
AllowsTransparency="true"
|
||||
Focusable="false"
|
||||
IsOpen="{Binding Path=IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}"
|
||||
Placement="Bottom"
|
||||
PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}">
|
||||
<Microsoft_Windows_Themes:SystemDropShadowChrome
|
||||
x:Name="Shdw"
|
||||
MinWidth="{TemplateBinding ActualWidth}"
|
||||
MaxHeight="{TemplateBinding MaxDropDownHeight}"
|
||||
Color="Transparent">
|
||||
<Border
|
||||
x:Name="DropDownBorder"
|
||||
Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"
|
||||
BorderBrush="{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}}"
|
||||
BorderThickness="1">
|
||||
<ScrollViewer>
|
||||
<ItemsPresenter KeyboardNavigation.DirectionalNavigation="Contained" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
|
||||
</ScrollViewer>
|
||||
</Border>
|
||||
</Microsoft_Windows_Themes:SystemDropShadowChrome>
|
||||
</Popup>
|
||||
</Grid>
|
||||
<ControlTemplate.Triggers>
|
||||
<Trigger Property="HasItems" Value="false">
|
||||
<Setter TargetName="DropDownBorder" Property="MinHeight" Value="95" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsEnabled" Value="false">
|
||||
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
|
||||
<Setter TargetName="Bd" Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsGrouping" Value="true">
|
||||
<Setter Property="ScrollViewer.CanContentScroll" Value="false" />
|
||||
</Trigger>
|
||||
<Trigger SourceName="PART_Popup" Property="HasDropShadow" Value="true">
|
||||
<Setter TargetName="Shdw" Property="Margin" Value="0,0,5,5" />
|
||||
<Setter TargetName="Shdw" Property="Color" Value="#71000000" />
|
||||
</Trigger>
|
||||
</ControlTemplate.Triggers>
|
||||
</ControlTemplate>
|
||||
</ResourceDictionary>
|
||||
4
BeWo.Styles/DataTemplates/DataTemplates.xaml
Normal file
4
BeWo.Styles/DataTemplates/DataTemplates.xaml
Normal file
@@ -0,0 +1,4 @@
|
||||
<ResourceDictionary
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:conv="clr-namespace:BeWo.Styles.Converters" />
|
||||
41
BeWo.Styles/ModernOrangeBlack.xaml
Normal file
41
BeWo.Styles/ModernOrangeBlack.xaml
Normal file
@@ -0,0 +1,41 @@
|
||||
<ResourceDictionary
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:controls="clr-namespace:BeWo.Controls;assembly=BeWo.Controls"
|
||||
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors">
|
||||
<ResourceDictionary.MergedDictionaries>
|
||||
|
||||
<ResourceDictionary Source="Colors\Colors.xaml" />
|
||||
|
||||
<ResourceDictionary Source="DataTemplates\ControlTemplates.xaml" />
|
||||
<ResourceDictionary Source="DataTemplates\DataTemplates.xaml" />
|
||||
|
||||
<ResourceDictionary Source="ControlStyles\ButtonStyles.xaml" />
|
||||
<ResourceDictionary Source="ControlStyles\CheckBoxStyles.xaml" />
|
||||
<ResourceDictionary Source="ControlStyles\ComboBoxStyles.xaml" />
|
||||
<ResourceDictionary Source="ControlStyles\CustomControlsStyles.xaml" />
|
||||
<ResourceDictionary Source="ControlStyles\DateEditStyles.xaml" />
|
||||
<ResourceDictionary Source="ControlStyles\GroupBoxStyles.xaml" />
|
||||
<ResourceDictionary Source="ControlStyles\LabelStyles.xaml" />
|
||||
<ResourceDictionary Source="ControlStyles\ListBoxStyles.xaml" />
|
||||
<ResourceDictionary Source="ControlStyles\RadioButtonStyles.xaml" />
|
||||
<ResourceDictionary Source="ControlStyles\TextBoxStyles.xaml" />
|
||||
<ResourceDictionary Source="ControlStyles\TextEditStyles.xaml" />
|
||||
<ResourceDictionary Source="ControlStyles\ToggleButtonStyles.xaml" />
|
||||
|
||||
<!-- Benötigt TextBoxStyles + ToggleButtonStyles -->
|
||||
<ResourceDictionary Source="ControlStyles\NullItemComboBoxStyles.xaml" />
|
||||
|
||||
</ResourceDictionary.MergedDictionaries>
|
||||
|
||||
<!-- Default Styles -->
|
||||
<Style BasedOn="{StaticResource HideDisabledButton}" TargetType="Button" />
|
||||
<Style BasedOn="{StaticResource CheckBoxBase}" TargetType="CheckBox" />
|
||||
<Style BasedOn="{StaticResource NoWrapComboBox}" TargetType="ComboBox" />
|
||||
<Style BasedOn="{StaticResource PrimaryDateEdit}" TargetType="dxe:DateEdit" />
|
||||
<Style BasedOn="{StaticResource BaseLabel}" TargetType="Label" />
|
||||
<Style BasedOn="{StaticResource PrimaryNullItemComboBox}" TargetType="controls:NullItemComboBox" />
|
||||
<Style BasedOn="{StaticResource BaseRadioButton}" TargetType="RadioButton" />
|
||||
<Style BasedOn="{StaticResource TextBoxBase}" TargetType="TextBox" />
|
||||
<Style BasedOn="{StaticResource BaseTextEdit}" TargetType="dxe:TextEdit" />
|
||||
</ResourceDictionary>
|
||||
36
BeWo.Styles/Properties/AssemblyInfo.cs
Normal file
36
BeWo.Styles/Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// Allgemeine Informationen über eine Assembly werden über die folgenden
|
||||
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
|
||||
// die einer Assembly zugeordnet sind.
|
||||
[assembly: AssemblyTitle("BeWo.Styles")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("BeWo.Styles")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2025")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
|
||||
// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
|
||||
// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
|
||||
[assembly: Guid("9bab16de-e284-4b57-bd09-763fc5ce521a")]
|
||||
|
||||
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
|
||||
//
|
||||
// Hauptversion
|
||||
// Nebenversion
|
||||
// Buildnummer
|
||||
// Revision
|
||||
//
|
||||
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
|
||||
// indem Sie "*" wie unten gezeigt eingeben:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
@@ -1,92 +1,133 @@
|
||||
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" x:Class="BeWo.BSLogoControl" x:Name="UserControl" Foreground="AliceBlue" Width="800" Height="800">
|
||||
<UserControl.Resources>
|
||||
<SolidColorBrush x:Key="FillBrush" Color="#FFF18A00" />
|
||||
<UserControl
|
||||
x:Class="BeWo.BSLogoControl"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
x:Name="UserControl"
|
||||
Width="800"
|
||||
Height="800"
|
||||
Foreground="AliceBlue">
|
||||
<UserControl.Resources>
|
||||
<SolidColorBrush x:Key="FillBrush" Color="#FFF18A00" />
|
||||
|
||||
<Style TargetType="{x:Type Ellipse}">
|
||||
<Setter Property="Fill" Value="{Binding Path=Foreground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}" />
|
||||
<Setter Property="Width" Value="20" />
|
||||
<Setter Property="Height" Value="20" />
|
||||
</Style>
|
||||
</UserControl.Resources>
|
||||
<Style TargetType="{x:Type Ellipse}">
|
||||
<Setter Property="Fill" Value="{Binding Path=Foreground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}" />
|
||||
<Setter Property="Width" Value="20" />
|
||||
<Setter Property="Height" Value="20" />
|
||||
</Style>
|
||||
</UserControl.Resources>
|
||||
|
||||
<Grid>
|
||||
<Viewbox StretchDirection="Both" Stretch="Fill" MaxWidth="{Binding Path=Width, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}" MaxHeight="{Binding Path=Height, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}">
|
||||
<Canvas Width="800" Height="800">
|
||||
<Canvas Width="100" Height="100" Canvas.Left="350" Canvas.Top="350">
|
||||
<Ellipse Canvas.Left="40" Canvas.Top="6" />
|
||||
<Ellipse Canvas.Left="10" Canvas.Top="56" />
|
||||
<Ellipse Canvas.Left="70" Canvas.Top="56" />
|
||||
</Canvas>
|
||||
<Canvas Width="100" Height="100" Canvas.Left="350" Canvas.Top="350" RenderTransformOrigin="0.5,0.5">
|
||||
<Canvas.RenderTransform>
|
||||
<TransformGroup>
|
||||
<ScaleTransform ScaleX="1.6" ScaleY="1.6" />
|
||||
<SkewTransform AngleX="0" AngleY="0" />
|
||||
<RotateTransform Angle="-20" />
|
||||
<TranslateTransform X="0" Y="0" />
|
||||
</TransformGroup>
|
||||
</Canvas.RenderTransform>
|
||||
<Ellipse Canvas.Left="40" Canvas.Top="6" />
|
||||
<Ellipse Canvas.Left="10" Canvas.Top="56" />
|
||||
<Ellipse Canvas.Left="70" Canvas.Top="56" />
|
||||
</Canvas>
|
||||
<Canvas Width="100" Height="100" Canvas.Left="350" Canvas.Top="350" RenderTransformOrigin="0.5,0.5">
|
||||
<Canvas.RenderTransform>
|
||||
<TransformGroup>
|
||||
<ScaleTransform ScaleX="2.5" ScaleY="2.5" />
|
||||
<SkewTransform AngleX="0" AngleY="0" />
|
||||
<RotateTransform Angle="-42" />
|
||||
<TranslateTransform X="0" Y="0" />
|
||||
</TransformGroup>
|
||||
</Canvas.RenderTransform>
|
||||
<Ellipse Canvas.Left="40" Canvas.Top="6" />
|
||||
<Ellipse Canvas.Left="10" Canvas.Top="56" />
|
||||
<Ellipse Canvas.Left="70" Canvas.Top="56" />
|
||||
</Canvas>
|
||||
<Canvas Width="100" Height="100" Canvas.Left="350" Canvas.Top="350" RenderTransformOrigin="0.5,0.5">
|
||||
<Canvas.RenderTransform>
|
||||
<TransformGroup>
|
||||
<ScaleTransform ScaleX="3.8" ScaleY="3.8" />
|
||||
<SkewTransform AngleX="0" AngleY="0" />
|
||||
<RotateTransform Angle="-65" />
|
||||
<TranslateTransform X="0" Y="0" />
|
||||
</TransformGroup>
|
||||
</Canvas.RenderTransform>
|
||||
<Ellipse Canvas.Left="40" Canvas.Top="6" />
|
||||
<Ellipse Canvas.Left="10" Canvas.Top="56" />
|
||||
<Ellipse Canvas.Left="70" Canvas.Top="56" />
|
||||
</Canvas>
|
||||
<Grid>
|
||||
<Viewbox
|
||||
MaxWidth="{Binding Path=Width, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"
|
||||
MaxHeight="{Binding Path=Height, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"
|
||||
Stretch="Fill"
|
||||
StretchDirection="Both">
|
||||
<Canvas Width="800" Height="800">
|
||||
<Canvas
|
||||
Canvas.Left="350"
|
||||
Canvas.Top="350"
|
||||
Width="100"
|
||||
Height="100">
|
||||
<Ellipse Canvas.Left="40" Canvas.Top="6" />
|
||||
<Ellipse Canvas.Left="10" Canvas.Top="56" />
|
||||
<Ellipse Canvas.Left="70" Canvas.Top="56" />
|
||||
</Canvas>
|
||||
<Canvas
|
||||
Canvas.Left="350"
|
||||
Canvas.Top="350"
|
||||
Width="100"
|
||||
Height="100"
|
||||
RenderTransformOrigin="0.5,0.5">
|
||||
<Canvas.RenderTransform>
|
||||
<TransformGroup>
|
||||
<ScaleTransform ScaleX="1.6" ScaleY="1.6" />
|
||||
<SkewTransform AngleX="0" AngleY="0" />
|
||||
<RotateTransform Angle="-20" />
|
||||
<TranslateTransform X="0" Y="0" />
|
||||
</TransformGroup>
|
||||
</Canvas.RenderTransform>
|
||||
<Ellipse Canvas.Left="40" Canvas.Top="6" />
|
||||
<Ellipse Canvas.Left="10" Canvas.Top="56" />
|
||||
<Ellipse Canvas.Left="70" Canvas.Top="56" />
|
||||
</Canvas>
|
||||
<Canvas
|
||||
Canvas.Left="350"
|
||||
Canvas.Top="350"
|
||||
Width="100"
|
||||
Height="100"
|
||||
RenderTransformOrigin="0.5,0.5">
|
||||
<Canvas.RenderTransform>
|
||||
<TransformGroup>
|
||||
<ScaleTransform ScaleX="2.5" ScaleY="2.5" />
|
||||
<SkewTransform AngleX="0" AngleY="0" />
|
||||
<RotateTransform Angle="-42" />
|
||||
<TranslateTransform X="0" Y="0" />
|
||||
</TransformGroup>
|
||||
</Canvas.RenderTransform>
|
||||
<Ellipse Canvas.Left="40" Canvas.Top="6" />
|
||||
<Ellipse Canvas.Left="10" Canvas.Top="56" />
|
||||
<Ellipse Canvas.Left="70" Canvas.Top="56" />
|
||||
</Canvas>
|
||||
<Canvas
|
||||
Canvas.Left="350"
|
||||
Canvas.Top="350"
|
||||
Width="100"
|
||||
Height="100"
|
||||
RenderTransformOrigin="0.5,0.5">
|
||||
<Canvas.RenderTransform>
|
||||
<TransformGroup>
|
||||
<ScaleTransform ScaleX="3.8" ScaleY="3.8" />
|
||||
<SkewTransform AngleX="0" AngleY="0" />
|
||||
<RotateTransform Angle="-65" />
|
||||
<TranslateTransform X="0" Y="0" />
|
||||
</TransformGroup>
|
||||
</Canvas.RenderTransform>
|
||||
<Ellipse Canvas.Left="40" Canvas.Top="6" />
|
||||
<Ellipse Canvas.Left="10" Canvas.Top="56" />
|
||||
<Ellipse Canvas.Left="70" Canvas.Top="56" />
|
||||
</Canvas>
|
||||
|
||||
<Canvas Width="100" Height="100" Canvas.Left="350" Canvas.Top="350" RenderTransformOrigin="0.5,0.5">
|
||||
<Canvas.RenderTransform>
|
||||
<TransformGroup>
|
||||
<ScaleTransform ScaleX="5.8" ScaleY="5.8" />
|
||||
<SkewTransform AngleX="0" AngleY="0" />
|
||||
<RotateTransform Angle="-88" />
|
||||
<TranslateTransform X="0" Y="0" />
|
||||
</TransformGroup>
|
||||
</Canvas.RenderTransform>
|
||||
<Ellipse Canvas.Left="40" Canvas.Top="6" />
|
||||
<Ellipse Canvas.Left="10" Canvas.Top="56" />
|
||||
<Ellipse Canvas.Left="70" Canvas.Top="56" />
|
||||
</Canvas>
|
||||
<Canvas Width="100" Height="100" Canvas.Left="350" Canvas.Top="350" RenderTransformOrigin="0.5,0.5">
|
||||
<Canvas.RenderTransform>
|
||||
<TransformGroup>
|
||||
<ScaleTransform ScaleX="9" ScaleY="9" />
|
||||
<SkewTransform AngleX="0" AngleY="0" />
|
||||
<RotateTransform Angle="-110" />
|
||||
<TranslateTransform X="0" Y="0" />
|
||||
</TransformGroup>
|
||||
</Canvas.RenderTransform>
|
||||
<Ellipse Canvas.Left="40" Canvas.Top="6" />
|
||||
<Ellipse Canvas.Left="10" Canvas.Top="56" />
|
||||
<Ellipse Canvas.Left="70" Canvas.Top="56" />
|
||||
</Canvas>
|
||||
<Canvas
|
||||
Canvas.Left="350"
|
||||
Canvas.Top="350"
|
||||
Width="100"
|
||||
Height="100"
|
||||
RenderTransformOrigin="0.5,0.5">
|
||||
<Canvas.RenderTransform>
|
||||
<TransformGroup>
|
||||
<ScaleTransform ScaleX="5.8" ScaleY="5.8" />
|
||||
<SkewTransform AngleX="0" AngleY="0" />
|
||||
<RotateTransform Angle="-88" />
|
||||
<TranslateTransform X="0" Y="0" />
|
||||
</TransformGroup>
|
||||
</Canvas.RenderTransform>
|
||||
<Ellipse Canvas.Left="40" Canvas.Top="6" />
|
||||
<Ellipse Canvas.Left="10" Canvas.Top="56" />
|
||||
<Ellipse Canvas.Left="70" Canvas.Top="56" />
|
||||
</Canvas>
|
||||
<Canvas
|
||||
Canvas.Left="350"
|
||||
Canvas.Top="350"
|
||||
Width="100"
|
||||
Height="100"
|
||||
RenderTransformOrigin="0.5,0.5">
|
||||
<Canvas.RenderTransform>
|
||||
<TransformGroup>
|
||||
<ScaleTransform ScaleX="9" ScaleY="9" />
|
||||
<SkewTransform AngleX="0" AngleY="0" />
|
||||
<RotateTransform Angle="-110" />
|
||||
<TranslateTransform X="0" Y="0" />
|
||||
</TransformGroup>
|
||||
</Canvas.RenderTransform>
|
||||
<Ellipse Canvas.Left="40" Canvas.Top="6" />
|
||||
<Ellipse Canvas.Left="10" Canvas.Top="56" />
|
||||
<Ellipse Canvas.Left="70" Canvas.Top="56" />
|
||||
</Canvas>
|
||||
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
</Grid>
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
</Grid>
|
||||
|
||||
|
||||
</UserControl>
|
||||
@@ -2101,9 +2101,9 @@ namespace BeWo.ServiceProxy
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.ServiceInvoicePeriodDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.InvoiceNumberDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.InvoiceNumberDC>))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.AppResponseDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.InvoiceType))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.GkvTransferResultType))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.GkvRawDataType))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.GkvAbrechnung.GkvTransferProtokollDC>))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvTransferProtokollDC))]
|
||||
@@ -2116,6 +2116,7 @@ namespace BeWo.ServiceProxy
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendResponseDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungGetIKRequestDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungGetIKResponseDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.AppResponseDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.IO.MemoryStream))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.IO.Stream))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<System.DateTime>))]
|
||||
@@ -5991,9 +5992,9 @@ namespace BeWo.ServiceProxy
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.ServiceInvoicePeriodDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.InvoiceNumberDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.InvoiceNumberDC>))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.AppResponseDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.InvoiceType))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.GkvTransferResultType))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.GkvRawDataType))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.GkvAbrechnung.GkvTransferProtokollDC>))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvTransferProtokollDC))]
|
||||
@@ -6006,6 +6007,7 @@ namespace BeWo.ServiceProxy
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendResponseDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungGetIKRequestDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungGetIKResponseDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.AppResponseDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.IO.MemoryStream))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.IO.Stream))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<System.DateTime>))]
|
||||
@@ -9762,38 +9764,6 @@ namespace BeWo.ServiceProxy
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/StorniereInvoiceBases", ReplyAction="http://tempuri.org/IAccountingService/StorniereInvoiceBasesResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/StorniereInvoiceBasesBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
void StorniereInvoiceBases(System.Collections.Generic.List<BS.Shared.DataContracts.InvoiceBaseDC> invoices);
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/GetGkvAbrechnung", ReplyAction="http://tempuri.org/IAccountingService/GetGkvAbrechnungResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/GetGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC GetGkvAbrechnung(long oid);
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/GetAllGkvAbrechnungen", ReplyAction="http://tempuri.org/IAccountingService/GetAllGkvAbrechnungenResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/GetAllGkvAbrechnungenBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
System.Collections.Generic.List<BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC> GetAllGkvAbrechnungen();
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/GetFilteredGkvAbrechnungen", ReplyAction="http://tempuri.org/IAccountingService/GetFilteredGkvAbrechnungenResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/GetFilteredGkvAbrechnungenBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
System.Collections.Generic.List<BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC> GetFilteredGkvAbrechnungen(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungViewFilterDC gkvAbrechnungViewFilter);
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/CreateNewGkvAbrechnung", ReplyAction="http://tempuri.org/IAccountingService/CreateNewGkvAbrechnungResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/CreateNewGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungCreateResponseDC CreateNewGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungCreateRequestDC request);
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/UpdateGkvAbrechnung", ReplyAction="http://tempuri.org/IAccountingService/UpdateGkvAbrechnungResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/UpdateGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC UpdateGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC abrechnung);
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/DeleteGkvAbrechnung", ReplyAction="http://tempuri.org/IAccountingService/DeleteGkvAbrechnungResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/DeleteGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
void DeleteGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC abrechnung);
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/SendNewGkvAbrechnung", ReplyAction="http://tempuri.org/IAccountingService/SendNewGkvAbrechnungResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/SendNewGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendResponseDC SendNewGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendRequestDC req);
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/SendGetIKRequest", ReplyAction="http://tempuri.org/IAccountingService/SendGetIKRequestResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/SendGetIKRequestBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungGetIKResponseDC SendGetIKRequest(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungGetIKRequestDC req);
|
||||
}
|
||||
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
|
||||
@@ -9989,6 +9959,84 @@ namespace BeWo.ServiceProxy
|
||||
{
|
||||
base.Channel.StorniereInvoiceBases(invoices);
|
||||
}
|
||||
}
|
||||
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
|
||||
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="BeWo.ServiceProxy.IGkvAccountingService")]
|
||||
public interface IGkvAccountingService
|
||||
{
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IGkvAccountingService/GetGkvAbrechnung", ReplyAction="http://tempuri.org/IGkvAccountingService/GetGkvAbrechnungResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IGkvAccountingService/GetGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC GetGkvAbrechnung(long oid);
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IGkvAccountingService/GetAllGkvAbrechnungen", ReplyAction="http://tempuri.org/IGkvAccountingService/GetAllGkvAbrechnungenResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IGkvAccountingService/GetAllGkvAbrechnungenBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
System.Collections.Generic.List<BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC> GetAllGkvAbrechnungen();
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IGkvAccountingService/GetFilteredGkvAbrechnungen", ReplyAction="http://tempuri.org/IGkvAccountingService/GetFilteredGkvAbrechnungenResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IGkvAccountingService/GetFilteredGkvAbrechnungenBeWoFaultFault" +
|
||||
"", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
System.Collections.Generic.List<BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC> GetFilteredGkvAbrechnungen(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungViewFilterDC gkvAbrechnungViewFilter);
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IGkvAccountingService/GetProtokollRawDataString", ReplyAction="http://tempuri.org/IGkvAccountingService/GetProtokollRawDataStringResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IGkvAccountingService/GetProtokollRawDataStringBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
string GetProtokollRawDataString(long oid, BS.Shared.GkvRawDataType gkvRawData);
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IGkvAccountingService/CreateNewGkvAbrechnung", ReplyAction="http://tempuri.org/IGkvAccountingService/CreateNewGkvAbrechnungResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IGkvAccountingService/CreateNewGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungCreateResponseDC CreateNewGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungCreateRequestDC request);
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IGkvAccountingService/UpdateGkvAbrechnung", ReplyAction="http://tempuri.org/IGkvAccountingService/UpdateGkvAbrechnungResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IGkvAccountingService/UpdateGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC UpdateGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC abrechnung);
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IGkvAccountingService/DeleteGkvAbrechnung", ReplyAction="http://tempuri.org/IGkvAccountingService/DeleteGkvAbrechnungResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IGkvAccountingService/DeleteGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
void DeleteGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC abrechnung);
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IGkvAccountingService/SendNewGkvAbrechnung", ReplyAction="http://tempuri.org/IGkvAccountingService/SendNewGkvAbrechnungResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IGkvAccountingService/SendNewGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendResponseDC SendNewGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendRequestDC req);
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IGkvAccountingService/SendGetIKRequest", ReplyAction="http://tempuri.org/IGkvAccountingService/SendGetIKRequestResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IGkvAccountingService/SendGetIKRequestBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungGetIKResponseDC SendGetIKRequest(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungGetIKRequestDC req);
|
||||
}
|
||||
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
|
||||
public interface IGkvAccountingServiceChannel : BeWo.ServiceProxy.IGkvAccountingService, System.ServiceModel.IClientChannel
|
||||
{
|
||||
}
|
||||
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
|
||||
public partial class GkvAccountingServiceClient : System.ServiceModel.ClientBase<BeWo.ServiceProxy.IGkvAccountingService>, BeWo.ServiceProxy.IGkvAccountingService
|
||||
{
|
||||
|
||||
public GkvAccountingServiceClient()
|
||||
{
|
||||
}
|
||||
|
||||
public GkvAccountingServiceClient(string endpointConfigurationName) :
|
||||
base(endpointConfigurationName)
|
||||
{
|
||||
}
|
||||
|
||||
public GkvAccountingServiceClient(string endpointConfigurationName, string remoteAddress) :
|
||||
base(endpointConfigurationName, remoteAddress)
|
||||
{
|
||||
}
|
||||
|
||||
public GkvAccountingServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
|
||||
base(endpointConfigurationName, remoteAddress)
|
||||
{
|
||||
}
|
||||
|
||||
public GkvAccountingServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
|
||||
base(binding, remoteAddress)
|
||||
{
|
||||
}
|
||||
|
||||
public BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC GetGkvAbrechnung(long oid)
|
||||
{
|
||||
@@ -10005,6 +10053,11 @@ namespace BeWo.ServiceProxy
|
||||
return base.Channel.GetFilteredGkvAbrechnungen(gkvAbrechnungViewFilter);
|
||||
}
|
||||
|
||||
public string GetProtokollRawDataString(long oid, BS.Shared.GkvRawDataType gkvRawData)
|
||||
{
|
||||
return base.Channel.GetProtokollRawDataString(oid, gkvRawData);
|
||||
}
|
||||
|
||||
public BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungCreateResponseDC CreateNewGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungCreateRequestDC request)
|
||||
{
|
||||
return base.Channel.CreateNewGkvAbrechnung(request);
|
||||
|
||||
@@ -6,13 +6,15 @@ using System.ServiceModel;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Threading;
|
||||
using BeWo.Multitenancy;
|
||||
using BeWo.Security;
|
||||
|
||||
using BS.Shared;
|
||||
using BS.Shared.DataContracts;
|
||||
using BS.Shared.DataContracts.Compact;
|
||||
using DevExpress.CodeParser;
|
||||
|
||||
namespace BeWo.ServiceProxy
|
||||
{
|
||||
@@ -59,6 +61,7 @@ namespace BeWo.ServiceProxy
|
||||
{ typeof(IAnalysisService), new EndpointAddress(_ServerName + "AnalysisService.svc") },
|
||||
{ typeof(IMailService), new EndpointAddress(_ServerName + "MailService.svc") },
|
||||
{ typeof(IAccountingService), new EndpointAddress(_ServerName + "AccountingService.svc") },
|
||||
{ typeof(IGkvAccountingService), new EndpointAddress(_ServerName + "GkvAccountingService.svc") },
|
||||
{ typeof(IReportService), new EndpointAddress(_ServerName + "ReportService.svc") }
|
||||
};
|
||||
|
||||
@@ -232,21 +235,19 @@ namespace BeWo.ServiceProxy
|
||||
return default(T);
|
||||
}
|
||||
|
||||
public static void DoWohnheimServiceAsync<T>(Func<ICustomerService, T> pFunc, Action<T> pCallBack, bool showWaitDialog)
|
||||
#region Wohnheim
|
||||
public static void DoWohnheimServiceAsync<T>(Func<ICustomerService, T> pFunc, Action<T> pCallBack, bool showWaitDialog)
|
||||
{
|
||||
DoAsync<CustomerServiceClient, ICustomerService, T>(pFunc, pCallBack, showWaitDialog);
|
||||
}
|
||||
|
||||
public static void DoWohnheimServiceAsync<T>(Func<ICustomerService, T> pFunc, Action<T> pCallBack)
|
||||
{
|
||||
DoAsync<CustomerServiceClient, ICustomerService, T>(pFunc, pCallBack, true);
|
||||
}
|
||||
|
||||
public static void DoWohnheimServiceAsync(Action<ICustomerService> pAction)
|
||||
{
|
||||
DoAsync<CustomerServiceClient,ICustomerService>(pAction, true);
|
||||
}
|
||||
|
||||
public static void DoWohnheimServiceSync(Action<ICustomerService> pAction)
|
||||
{
|
||||
try
|
||||
@@ -258,12 +259,11 @@ namespace BeWo.ServiceProxy
|
||||
ShowErrorMessage(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static T DoWohnheimServiceSync<T>(Func<IOperationsService, T> pFunc)
|
||||
public static T DoWohnheimServiceSync<T>(Func<ICustomerService, T> pFunc)
|
||||
{
|
||||
try
|
||||
{
|
||||
return pFunc.Invoke(GetInstance<OperationsServiceClient, IOperationsService>());
|
||||
return pFunc.Invoke(GetInstance<CustomerServiceClient, ICustomerService>());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@@ -272,8 +272,61 @@ namespace BeWo.ServiceProxy
|
||||
|
||||
return default(T);
|
||||
}
|
||||
#endregion
|
||||
|
||||
public static void DoMailServiceAsync<T>(Func<IMailService, T> pFunc, Action<T> pCallBack)
|
||||
#region GkvAccounting
|
||||
public static void DoGkvAccountingServiceAsync<T>(Func<IGkvAccountingService, T> pFunc, Action<T> pCallBack, bool showWaitDialog)
|
||||
{
|
||||
DoAsync<GkvAccountingServiceClient, IGkvAccountingService, T>(pFunc, pCallBack, showWaitDialog);
|
||||
}
|
||||
public static void DoGkvAccountingServiceAsync<T>(Func<IGkvAccountingService, T> pFunc, Action<T> pCallBack)
|
||||
{
|
||||
DoAsync<GkvAccountingServiceClient, IGkvAccountingService, T>(pFunc, pCallBack, true);
|
||||
}
|
||||
public static void DoGkvAccountingServiceAsyncGUI<T>(Func<IGkvAccountingService, T> pFunc, Action<T> pCallBack, Dispatcher dispatcher)
|
||||
{
|
||||
Action<T> action = (t) => dispatcher.BeginInvoke(
|
||||
DispatcherPriority.Normal,
|
||||
(Action)delegate
|
||||
{
|
||||
pCallBack(t);
|
||||
});
|
||||
|
||||
DoAsync<GkvAccountingServiceClient, IGkvAccountingService, T>(pFunc, action, true);
|
||||
}
|
||||
|
||||
public static void DoGkvAccountingServiceAsync(Action<IGkvAccountingService> pAction)
|
||||
{
|
||||
DoAsync<GkvAccountingServiceClient, IGkvAccountingService>(pAction, true);
|
||||
}
|
||||
public static void DoGkvAccountingServiceSync(Action<IGkvAccountingService> pAction)
|
||||
{
|
||||
try
|
||||
{
|
||||
pAction.Invoke(GetInstance<GkvAccountingServiceClient, IGkvAccountingService>());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ShowErrorMessage(e);
|
||||
}
|
||||
}
|
||||
public static T DoGkvAccountingServiceSync<T>(Func<IGkvAccountingService, T> pFunc)
|
||||
{
|
||||
try
|
||||
{
|
||||
return pFunc.Invoke(GetInstance<GkvAccountingServiceClient, IGkvAccountingService>());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ShowErrorMessage(e);
|
||||
}
|
||||
|
||||
return default(T);
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
public static void DoMailServiceAsync<T>(Func<IMailService, T> pFunc, Action<T> pCallBack)
|
||||
{
|
||||
DoAsync<MailServiceClient, IMailService, T>(pFunc, pCallBack, true);
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
svcutil.exe /noConfig /edb /n:*,BeWo.ServiceProxy /out:ServiceProxy\Generated.cs /ct:System.Collections.Generic.List`1 /r:..\Shared\bin\Debug\BS.Shared.dll http://localhost:3777/Host/EmployeeService.svc?wsdl http://localhost:3777/Host/CustomerService.svc?wsdl http://localhost:3777/Host/UserService.svc?wsdl http://localhost:3777/Host/StreamingService.svc?wsdl http://localhost:3777/Host/ValueListService.svc?wsdl http://localhost:3777/Host/DownloadService.svc?wsdl http://localhost:3777/Host/ResourceService.svc?wsdl http://localhost:3777/Host/OperationsService.svc?wsdl http://localhost:3777/Host/AnalysisService.svc?wsdl http://localhost:3777/Host/MailService.svc?wsdl http://localhost:3777/Host/AccountingService.svc?wsdl http://localhost:3777/Host/ReportService.svc?wsdl http://localhost:3777/Host/QueryService.svc?wsdl
|
||||
svcutil.exe /noConfig /edb /n:*,BeWo.ServiceProxy /out:ServiceProxy\Generated.cs /ct:System.Collections.Generic.List`1 /r:..\Shared\bin\Debug\BS.Shared.dll http://localhost:3777/Host/EmployeeService.svc?wsdl http://localhost:3777/Host/CustomerService.svc?wsdl http://localhost:3777/Host/UserService.svc?wsdl http://localhost:3777/Host/StreamingService.svc?wsdl http://localhost:3777/Host/ValueListService.svc?wsdl http://localhost:3777/Host/DownloadService.svc?wsdl http://localhost:3777/Host/ResourceService.svc?wsdl http://localhost:3777/Host/OperationsService.svc?wsdl http://localhost:3777/Host/AnalysisService.svc?wsdl http://localhost:3777/Host/MailService.svc?wsdl http://localhost:3777/Host/AccountingService.svc?wsdl http://localhost:3777/Host/GkvAccountingService.svc?wsdl http://localhost:3777/Host/ReportService.svc?wsdl http://localhost:3777/Host/QueryService.svc?wsdl
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using BeWo.Core;
|
||||
using BeWo.ServiceProxy;
|
||||
using BeWo.ViewModel;
|
||||
using BeWo.ViewModel.ListViewModel;
|
||||
using BS.Shared.DataContracts.GkvAbrechnung;
|
||||
@@ -21,86 +22,87 @@ using System.Windows.Shapes;
|
||||
|
||||
namespace BeWo.View.Controls
|
||||
{
|
||||
/// <summary>
|
||||
/// Interaktionslogik für GkvAbrechnungDetailControl.xaml
|
||||
/// </summary>
|
||||
public partial class GkvAbrechnungDetailControl : UserControl
|
||||
{
|
||||
/// <summary>
|
||||
/// Interaktionslogik für GkvAbrechnungDetailControl.xaml
|
||||
/// </summary>
|
||||
public partial class GkvAbrechnungDetailControl : UserControl
|
||||
{
|
||||
public GkvAbrechnungVM GkvAbrechnungVM { get; set; }
|
||||
|
||||
public Window Window { get; private set; }
|
||||
public Window Window { get; private set; }
|
||||
|
||||
public GkvAbrechnungDetailControl(GkvAbrechnungVM vm, Window window)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
GkvAbrechnungVM = vm;
|
||||
DataContext = vm;
|
||||
|
||||
Window = window;
|
||||
}
|
||||
|
||||
private void Hyperlink_OnRequestNavigate(object sender, RequestNavigateEventArgs e)
|
||||
{
|
||||
BeWoUtils.NavigateToReportUri(((Hyperlink)sender).NavigateUri.ToString(), "Druckvorschau");
|
||||
}
|
||||
|
||||
private void gridView_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var tableView = sender as TableView;
|
||||
if (tableView != null)
|
||||
{
|
||||
foreach (var item in tableView.VisibleColumns)
|
||||
{
|
||||
tableView.BestFitColumn(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void btn_auftragsdatei_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var vm = datagrid_transfer.GetCurrentValue<GkvTransferProtokollDC>();
|
||||
|
||||
var window = BeWoWindowBuilder.GetTextViewer("Auftragsdatei", vm.Auftragsdatei);
|
||||
|
||||
window.Owner = Window;
|
||||
|
||||
window.ShowDialog();
|
||||
}
|
||||
|
||||
private void btn_nutzdatendatei_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var vm = datagrid_transfer.GetCurrentValue<GkvTransferProtokollDC>();
|
||||
|
||||
var window = BeWoWindowBuilder.GetTextViewer("Nutzdatendatei", vm.Nutzdatendatei);
|
||||
|
||||
window.Owner = Window;
|
||||
|
||||
window.ShowDialog();
|
||||
}
|
||||
|
||||
private void button_checkAll_Click(object sender, RoutedEventArgs e)
|
||||
public GkvAbrechnungDetailControl(GkvAbrechnungVM vm, Window window)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
GkvAbrechnungVM = vm;
|
||||
DataContext = vm;
|
||||
|
||||
Window = window;
|
||||
}
|
||||
|
||||
private void button_uncheckAll_Click(object sender, RoutedEventArgs e)
|
||||
private void Hyperlink_OnRequestNavigate(object sender, RequestNavigateEventArgs e)
|
||||
{
|
||||
|
||||
BeWoUtils.NavigateToReportUri(((Hyperlink)sender).NavigateUri.ToString(), "Druckvorschau");
|
||||
}
|
||||
|
||||
private void gridView_CellValueChanging(object sender, CellValueChangedEventArgs e)
|
||||
{
|
||||
if (e.Column is null)
|
||||
return;
|
||||
private void gridView_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var tableView = sender as TableView;
|
||||
if (tableView != null)
|
||||
{
|
||||
foreach (var item in tableView.VisibleColumns)
|
||||
{
|
||||
tableView.BestFitColumn(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (e.Column.FieldName == nameof(InvoiceBaseVM.IsChecked))
|
||||
{
|
||||
if (e.Value is bool b && e.Row is InvoiceBaseVM vm)
|
||||
{
|
||||
vm.IsChecked = b;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private void btn_auftragsdatei_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var protokoll = datagrid_transfer.GetCurrentValue<GkvTransferProtokollDC>();
|
||||
|
||||
var oid = protokoll.GkvTransferProtokollOid.Value;
|
||||
|
||||
ServiceFacade.DoGkvAccountingServiceAsyncGUI(
|
||||
service => service.GetProtokollRawDataString(oid, BS.Shared.GkvRawDataType.Auftragsdatei),
|
||||
callback => ShowTextViewer("Auftragsdatei", callback),
|
||||
Dispatcher);
|
||||
}
|
||||
|
||||
private void btn_nutzdatendatei_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var protokoll = datagrid_transfer.GetCurrentValue<GkvTransferProtokollDC>();
|
||||
|
||||
var oid = protokoll.GkvTransferProtokollOid.Value;
|
||||
|
||||
ServiceFacade.DoGkvAccountingServiceAsyncGUI(
|
||||
service => service.GetProtokollRawDataString(oid, BS.Shared.GkvRawDataType.Nutzdatendatei),
|
||||
callback => ShowTextViewer("Nutzdatendatei", callback),
|
||||
Dispatcher);
|
||||
}
|
||||
|
||||
private void ShowTextViewer(string title, string text)
|
||||
{
|
||||
var window = BeWoWindowBuilder.GetTextViewer(title, text);
|
||||
|
||||
window.Owner = Window;
|
||||
|
||||
window.ShowDialog();
|
||||
}
|
||||
|
||||
private void gridView_CellValueChanging(object sender, CellValueChangedEventArgs e)
|
||||
{
|
||||
if (e.Column is null)
|
||||
return;
|
||||
|
||||
if (e.Column.FieldName == nameof(InvoiceBaseVM.IsChecked))
|
||||
{
|
||||
if (e.Value is bool b && e.Row is InvoiceBaseVM vm)
|
||||
{
|
||||
vm.IsChecked = b;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ using BeWo.ViewModel;
|
||||
using BeWo.ViewModel.ListViewModel;
|
||||
|
||||
using BS.Shared;
|
||||
using BS.Shared.AppSender;
|
||||
using BS.Shared.Core;
|
||||
using BS.Shared.DataContracts;
|
||||
using BS.Shared.DataContracts.GkvAbrechnung;
|
||||
@@ -72,7 +73,7 @@ namespace BeWo.View.Detail.Accounting
|
||||
{
|
||||
_IsRequesting = true;
|
||||
|
||||
ServiceFacade.DoAccountingServiceAsync(s => s.GetFilteredGkvAbrechnungen(null), UpdateGkvAbrechnungList);
|
||||
ServiceFacade.DoGkvAccountingServiceAsync(s => s.GetFilteredGkvAbrechnungen(null), UpdateGkvAbrechnungList);
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
@@ -184,7 +185,7 @@ namespace BeWo.View.Detail.Accounting
|
||||
SelectedInvoiceBases = checked_invoice_bases.Select(x => x.DataContract.InvoiceBaseOid.Value).ToList()
|
||||
};
|
||||
|
||||
ServiceFacade.DoAccountingServiceAsync(x => x.CreateNewGkvAbrechnung(gkv_filter),
|
||||
ServiceFacade.DoGkvAccountingServiceAsync(x => x.CreateNewGkvAbrechnung(gkv_filter),
|
||||
cb => Dispatcher.BeginInvoke(DispatcherPriority.Normal,
|
||||
(Action)delegate
|
||||
{
|
||||
@@ -234,7 +235,7 @@ namespace BeWo.View.Detail.Accounting
|
||||
{
|
||||
var dc_in = vm.CommitToDataContract();
|
||||
|
||||
ServiceFacade.DoAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
||||
ServiceFacade.DoGkvAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
||||
{
|
||||
Dispatcher.Invoke(() => {
|
||||
vm.UpdateByDataContract(dc_out);
|
||||
@@ -267,7 +268,7 @@ namespace BeWo.View.Detail.Accounting
|
||||
{
|
||||
_Viewmodel.VMList.Remove(vm);
|
||||
|
||||
ServiceFacade.DoAccountingServiceAsync(s => s.DeleteGkvAbrechnung(vm.CommitToDataContract()));
|
||||
ServiceFacade.DoGkvAccountingServiceAsync(s => s.DeleteGkvAbrechnung(vm.CommitToDataContract()));
|
||||
}
|
||||
}
|
||||
private void NewButton_OnClick(object sender, RoutedEventArgs e)
|
||||
@@ -360,7 +361,7 @@ namespace BeWo.View.Detail.Accounting
|
||||
|
||||
dc_in.Bezahlt = b;
|
||||
|
||||
ServiceFacade.DoAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
||||
ServiceFacade.DoGkvAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
||||
{
|
||||
Dispatcher.Invoke(() => {
|
||||
vm.UpdateByDataContract(dc_out);
|
||||
@@ -374,7 +375,7 @@ namespace BeWo.View.Detail.Accounting
|
||||
|
||||
dc_in.UrbelegeGesendet = b;
|
||||
|
||||
ServiceFacade.DoAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
||||
ServiceFacade.DoGkvAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
||||
{
|
||||
Dispatcher.Invoke(() => {
|
||||
vm.UpdateByDataContract(dc_out);
|
||||
@@ -386,7 +387,7 @@ namespace BeWo.View.Detail.Accounting
|
||||
{
|
||||
var dc_in = vm.CommitToDataContract();
|
||||
|
||||
ServiceFacade.DoAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
||||
ServiceFacade.DoGkvAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
||||
{
|
||||
Dispatcher.Invoke(() => {
|
||||
vm.UpdateByDataContract(dc_out);
|
||||
|
||||
@@ -449,8 +449,10 @@
|
||||
Grid.Row="7"
|
||||
Grid.ColumnSpan="2"
|
||||
Margin="3,20,3,5"
|
||||
Checked="EnableArbeitszeiterfassung_Checked"
|
||||
Content="{markup:Translate Arbeitszeit mit BeWoPlaner erfassen}"
|
||||
IsChecked="{Binding Path=EnableArbeitszeiterfassung}" Checked="EnableArbeitszeiterfassung_Checked" Unchecked="EnableArbeitszeiterfassung_Checked"/>
|
||||
IsChecked="{Binding Path=EnableArbeitszeiterfassung}"
|
||||
Unchecked="EnableArbeitszeiterfassung_Checked" />
|
||||
<CheckBox
|
||||
x:Name="EnableAutomaticPauses"
|
||||
Grid.Row="8"
|
||||
|
||||
@@ -325,7 +325,7 @@ namespace BeWo.View.Detail
|
||||
req.IKKrankenkasse = ViewModel.IKKrankenkasse;
|
||||
req.Leistungserbringergruppe = ViewModel.Leistungserbringergruppe;
|
||||
|
||||
ServiceFacade.DoAccountingServiceAsync(x => x.SendGetIKRequest(req), cb => Dispatcher.Invoke(() => IKRequestCallback(req, cb)));
|
||||
ServiceFacade.DoGkvAccountingServiceAsync(x => x.SendGetIKRequest(req), cb => Dispatcher.Invoke(() => IKRequestCallback(req, cb)));
|
||||
}
|
||||
|
||||
private void IKRequestCallback(GkvAbrechnungGetIKRequestDC req, GkvAbrechnungGetIKResponseDC response)
|
||||
|
||||
@@ -452,7 +452,7 @@ namespace BeWo.ViewModel
|
||||
|
||||
req.GkvAbrechnungOid = GkvAbrechnungOid.Value;
|
||||
|
||||
ServiceFacade.DoAccountingServiceAsync(s => s.SendNewGkvAbrechnung(req),
|
||||
ServiceFacade.DoGkvAccountingServiceAsync(s => s.SendNewGkvAbrechnung(req),
|
||||
cb => Application.Current.Dispatch(() => UpdateBySendResponse(cb)), true);
|
||||
}
|
||||
public void UpdateBySendResponse(GkvAbrechnungSendResponseDC cb)
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
<endpoint binding="basicHttpBinding" bindingConfiguration="BeWoBasicEndpoint" contract="BeWo.ServiceProxy.IResourceService" name="BeWoBasicEndpoint" />
|
||||
<endpoint behaviorConfiguration="BeWoServiceBehavior" binding="basicHttpBinding" bindingConfiguration="BeWoBasicEndpoint" contract="BeWo.ServiceProxy.IOperationsService" name="OperationsServiceEndpoint" />
|
||||
<endpoint behaviorConfiguration="BeWoServiceBehavior" binding="basicHttpBinding" bindingConfiguration="BeWoBasicEndpoint" contract="BeWo.ServiceProxy.IAccountingService" name="AccountingServiceEndpoint" />
|
||||
<endpoint behaviorConfiguration="BeWoServiceBehavior" binding="basicHttpBinding" bindingConfiguration="BeWoBasicEndpoint" contract="BeWo.ServiceProxy.IGkvAccountingService" name="GkvAccountingServiceEndpoint" />
|
||||
<endpoint behaviorConfiguration="BeWoServiceBehavior" binding="basicHttpBinding" bindingConfiguration="BeWoBasicEndpoint" contract="BeWo.ServiceProxy.IAnalysisService" name="AnalysisServiceEndpoint" />
|
||||
<endpoint binding="basicHttpBinding" bindingConfiguration="BeWoBasicEndpoint" contract="BeWo.ServiceProxy.IMailService" name="MailServiceEndpoint" />
|
||||
<endpoint binding="basicHttpBinding" bindingConfiguration="BeWoBasicEndpoint" contract="BeWo.ServiceProxy.IReportService" name="ReportServiceEndpoint" />
|
||||
|
||||
@@ -41,6 +41,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DakotaUnitTest", "DakotaUni
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TranslationUnitTest", "TranslationUnitTest\TranslationUnitTest.csproj", "{83C43FEC-233D-49EF-BD23-BF842A3EBDF5}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{BF0F7058-96E7-492B-8224-7976A32A751C}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BeWo.Styles", "BeWo.Styles\BeWo.Styles.csproj", "{9BAB16DE-E284-4B57-BD09-763FC5CE521A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KTDReaderGUI", "Tools\KTDReaderGUI\KTDReaderGUI\KTDReaderGUI.csproj", "{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|.NET = Debug|.NET
|
||||
@@ -199,6 +205,30 @@ Global
|
||||
{83C43FEC-233D-49EF-BD23-BF842A3EBDF5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{83C43FEC-233D-49EF-BD23-BF842A3EBDF5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{83C43FEC-233D-49EF-BD23-BF842A3EBDF5}.Release|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{9BAB16DE-E284-4B57-BD09-763FC5CE521A}.Debug|.NET.ActiveCfg = Debug|Any CPU
|
||||
{9BAB16DE-E284-4B57-BD09-763FC5CE521A}.Debug|.NET.Build.0 = Debug|Any CPU
|
||||
{9BAB16DE-E284-4B57-BD09-763FC5CE521A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9BAB16DE-E284-4B57-BD09-763FC5CE521A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9BAB16DE-E284-4B57-BD09-763FC5CE521A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{9BAB16DE-E284-4B57-BD09-763FC5CE521A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{9BAB16DE-E284-4B57-BD09-763FC5CE521A}.Release|.NET.ActiveCfg = Release|Any CPU
|
||||
{9BAB16DE-E284-4B57-BD09-763FC5CE521A}.Release|.NET.Build.0 = Release|Any CPU
|
||||
{9BAB16DE-E284-4B57-BD09-763FC5CE521A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9BAB16DE-E284-4B57-BD09-763FC5CE521A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9BAB16DE-E284-4B57-BD09-763FC5CE521A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{9BAB16DE-E284-4B57-BD09-763FC5CE521A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2}.Debug|.NET.ActiveCfg = Debug|Any CPU
|
||||
{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2}.Debug|.NET.Build.0 = Debug|Any CPU
|
||||
{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2}.Release|.NET.ActiveCfg = Release|Any CPU
|
||||
{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2}.Release|.NET.Build.0 = Release|Any CPU
|
||||
{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2}.Release|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@@ -216,6 +246,8 @@ Global
|
||||
{A959FE9A-1647-4C02-B2EE-6A95EBF6DC9A} = {FEB0336B-F053-40B6-92DD-7DE56AB9408A}
|
||||
{B1FF561D-1677-4B06-9168-E7B024084B69} = {2AA59C1D-5537-4C49-9F9D-6E7CF827F687}
|
||||
{83C43FEC-233D-49EF-BD23-BF842A3EBDF5} = {2AA59C1D-5537-4C49-9F9D-6E7CF827F687}
|
||||
{9BAB16DE-E284-4B57-BD09-763FC5CE521A} = {E7543C39-A44C-40C9-82C9-E7FAA2D9A852}
|
||||
{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2} = {BF0F7058-96E7-492B-8224-7976A32A751C}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {5352BE53-F2FD-442F-85A8-4157599AA153}
|
||||
|
||||
@@ -153,12 +153,24 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<ItemGroup>
|
||||
<Content Include="KTDatei\AO05Q424.ke0.txt" />
|
||||
<Content Include="KTDatei\BK05Q424.ke1.txt" />
|
||||
<Content Include="KTDatei\BN05Q424.ke1.txt" />
|
||||
<Content Include="KTDatei\EK05Q324.ke4.txt" />
|
||||
<Content Include="KTDatei\IK05Q424.ke0.txt" />
|
||||
<Content Include="KTDatei\LK05Q223.ke0.txt" />
|
||||
<Content Include="KTDatei\AO05Q125.ke0.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="KTDatei\BK05Q125.ke3.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="KTDatei\BN05Q424.ke1.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="KTDatei\EK05Q125.ke0.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="KTDatei\IK05Q125.ke1.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="KTDatei\LK05Q223.ke0.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
@@ -1,5 +1,5 @@
|
||||
UNA:+,? '
|
||||
UNB+UNOC:3+109910000+999999999+240910:1202+00388++AO05Q424ke0'
|
||||
UNB+UNOC:3+109910000+999999999+241210:1038+00390++AO05Q125ke0'
|
||||
UNH+00001+KOTR:02:001:KV'
|
||||
IDK+100295017+99+gkv informatik'
|
||||
VDT+19970403'
|
||||
@@ -318,7 +318,7 @@ VKG+09+104212594+5++28++++63'
|
||||
VKG+09+101519213+5++28++++65'
|
||||
VKG+09+104212538+5++28++++66'
|
||||
VKG+09+104212594+5++28++++67'
|
||||
VKG+09+104212594+5++28++++40'
|
||||
VKG+09+104212300+5++28++++40'
|
||||
VKG+09+104212594+5++28++++69'
|
||||
VKG+09+101519213+5++28++++99'
|
||||
VKG+03+101519213+5++07++++00'
|
||||
@@ -1109,7 +1109,7 @@ VKG+09+184212516+5++28++++30'
|
||||
VKG+03+104212516+5++07++++00'
|
||||
VKG+09+104212607+5++28++++18'
|
||||
VKG+09+104212607+5++28++++19'
|
||||
VKG+09+104212594+5++28++++40'
|
||||
VKG+09+104212300+5++28++++40'
|
||||
VKG+09+104212607+5++28++++11'
|
||||
VKG+09+104212607+5++28++++15'
|
||||
VKG+01+104212505+5++++++00'
|
||||
@@ -1134,11 +1134,10 @@ UNH+00080+KOTR:02:001:KV'
|
||||
IDK+104212538+99+AOK Rheinland/Hamburg'
|
||||
VDT+19970403'
|
||||
FKT+02'
|
||||
NAM+01+AOK Rheinland/Hamburg+Fachbereich Rechnungsprüfung'
|
||||
ANS+2+40004+Düsseldorf+101338'
|
||||
NAM+01+AOK Rheinland/Hamburg+Rechnungsprüfung Heilmittel'
|
||||
ANS+1+40468+Düsseldorf+Wanheimer Str. 72'
|
||||
ASP+01+02118791/55743++Frau Jacobs-Lange+Heilmittel'
|
||||
ASP+02+02118791/55716++Frau Krawzyk+Fahrtkosten'
|
||||
UNT+000009+00080'
|
||||
UNT+000008+00080'
|
||||
UNH+00081+KOTR:02:001:KV'
|
||||
IDK+104212594+99+AOK Rheinland/Hamburg'
|
||||
VDT+20030915'
|
||||
@@ -2522,4 +2521,12 @@ FKT+01'
|
||||
NAM+01+CompetenzCenter Thüringen GmbH'
|
||||
ANS+1+98528+Suhl+Fröhliche-Mann-Str. 3b'
|
||||
UNT+000007+00205'
|
||||
UNZ+000205+00388'
|
||||
UNH+00206+KOTR:02:001:KV'
|
||||
IDK+104212300+99+AOK Rheinland/Hamburg'
|
||||
VDT+19970403'
|
||||
FKT+02'
|
||||
NAM+01+AOK Rheinland/Hamburg+Rechnungsprüfung Fahrkosten'
|
||||
ANS+1+40468+Düsseldorf+Wanheimer Str. 72'
|
||||
ASP+01+02118791/56515++Frau Kromat+Fahrkosten'
|
||||
UNT+000008+00206'
|
||||
UNZ+000206+00390'
|
||||
@@ -1,5 +1,5 @@
|
||||
UNA:+,? '
|
||||
UNB+UNOC:3+104027544+999999999+240909:0000+00235++BK05Q424ke1'
|
||||
UNB+UNOC:3+104027544+999999999+250123:1530+00239++BK05Q125KE3'
|
||||
UNH+00001+KOTR:02:001:KV'
|
||||
IDK+100820488+99+Brandenburgische BKK'
|
||||
VDT+20100101'
|
||||
@@ -1134,38 +1134,19 @@ IDK+103720893+99+Bertelsmann BKK/Ost'
|
||||
VDT+20070701'
|
||||
FKT+01'
|
||||
VKG+01+103720893+5++++++00'
|
||||
VKG+03+661430035+5++07++++10'
|
||||
VKG+03+661430035+5++07++++20'
|
||||
VKG+03+661430035+5++07++++30'
|
||||
VKG+03+661430035+5++07++++40'
|
||||
VKG+03+661430035+5++07++++50'
|
||||
VKG+03+661430035+5++07++++55'
|
||||
VKG+03+661430035+5++07++++56'
|
||||
VKG+03+661430035+5++07++++57'
|
||||
VKG+03+661430035+5++07++++61'
|
||||
VKG+03+661430035+5++07++++62'
|
||||
VKG+03+661430035+5++07++++63'
|
||||
VKG+03+661430035+5++07++++65'
|
||||
VKG+03+661430035+5++07++++66'
|
||||
VKG+03+661430035+5++07++++67'
|
||||
VKG+03+661430035+5++07++++68'
|
||||
VKG+03+661430035+5++07++++69'
|
||||
VKG+03+661430035+5++07++++71'
|
||||
VKG+03+661430035+5++07++++72'
|
||||
VKG+03+661430035+5++07++++73'
|
||||
VKG+03+661430035+5++07++++74'
|
||||
VKG+03+661430035+5++07++++75'
|
||||
VKG+03+104027544+5++07++++76'
|
||||
VKG+09+103725342+5++28++++76'
|
||||
VKG+09+103725342+5++29++++76'
|
||||
VKG+03+104027544+5++07++++90'
|
||||
VKG+09+103725342+5++28++++90'
|
||||
VKG+09+103725342+5++29++++90'
|
||||
VKG+09+661430035+5++28++++99'
|
||||
VKG+09+661430035+5++29++++99'
|
||||
VKG+03+104027544+5++07++++B1'
|
||||
VKG+09+103725342+5++28++++B1'
|
||||
VKG+09+103725342+5++29++++B1'
|
||||
VKG+03+107436557+5++07++++99'
|
||||
VKG+09+107436557+5++28++++99'
|
||||
VKG+09+107436557+5++29++++99'
|
||||
NAM+01+Bertelsmann+Betriebskrankenkasse+Gesch.Ber.Neue Bundesländer'
|
||||
ANS+1+33335+Gütersloh+Carl-Miele-Str. 214'
|
||||
ANS+2+33311+Gütersloh+170'
|
||||
UNT+000037+00074'
|
||||
UNT+000018+00074'
|
||||
UNH+00075+KOTR:02:001:KV'
|
||||
IDK+103723317+99+BKK MIELE Ost'
|
||||
VDT+20100401'
|
||||
@@ -1189,202 +1170,165 @@ IDK+103723896+99+Heimat Krankenkasse/Ost'
|
||||
VDT+20120101'
|
||||
FKT+01'
|
||||
VKG+01+103723896+5++++++00'
|
||||
VKG+03+661430035+5++07++++10'
|
||||
VKG+03+661430035+5++07++++20'
|
||||
VKG+03+661430035+5++07++++30'
|
||||
VKG+03+661430035+5++07++++40'
|
||||
VKG+03+661430035+5++07++++50'
|
||||
VKG+03+661430035+5++07++++55'
|
||||
VKG+03+661430035+5++07++++56'
|
||||
VKG+03+661430035+5++07++++57'
|
||||
VKG+03+661430035+5++07++++61'
|
||||
VKG+03+661430035+5++07++++62'
|
||||
VKG+03+661430035+5++07++++63'
|
||||
VKG+03+661430035+5++07++++65'
|
||||
VKG+03+661430035+5++07++++66'
|
||||
VKG+03+661430035+5++07++++67'
|
||||
VKG+03+661430035+5++07++++68'
|
||||
VKG+03+661430035+5++07++++69'
|
||||
VKG+03+661430035+5++07++++71'
|
||||
VKG+03+661430035+5++07++++72'
|
||||
VKG+03+661430035+5++07++++73'
|
||||
VKG+03+661430035+5++07++++74'
|
||||
VKG+09+103724238+5++28++++75'
|
||||
VKG+09+103724238+5++29++++75'
|
||||
VKG+03+104027544+5++07++++76'
|
||||
VKG+09+103724238+5++28++++76'
|
||||
VKG+09+103724238+5++29++++76'
|
||||
VKG+03+104027544+5++07++++66'
|
||||
VKG+03+103724238+5++28++++66'
|
||||
VKG+03+103724238+5++29++++66'
|
||||
VKG+03+104027544+5++07++++90'
|
||||
VKG+09+103724238+5++28++++90'
|
||||
VKG+09+103724238+5++29++++90'
|
||||
VKG+03+104027544+5++07++++A0'
|
||||
VKG+09+103724238+5++28++++A0'
|
||||
VKG+09+103724238+5++29++++A0'
|
||||
VKG+03+104027544+5++07++++B1'
|
||||
VKG+09+103724238+5++28++++B1'
|
||||
VKG+09+103724238+5++29++++B1'
|
||||
VKG+09+661430035+5++28++++99'
|
||||
VKG+09+661430035+5++29++++99'
|
||||
VKG+03+107436557+5++07++++99'
|
||||
VKG+09+107436557+5++28++++99'
|
||||
VKG+09+107436557+5++29++++99'
|
||||
NAM+01+Heimat+Krankenkasse+Gesch.Ber.Neue Bundesländer'
|
||||
ANS+1+33602+Bielefeld+Herforder Str. 23'
|
||||
UNT+000042+00076'
|
||||
UNT+000023+00076'
|
||||
UNH+00077+KOTR:02:001:KV'
|
||||
IDK+103724238+99+Heimat Krankenkasse'
|
||||
VDT+20120101'
|
||||
FKT+01'
|
||||
VKG+01+103724238+5++++++00'
|
||||
VKG+03+661430035+5++07++++10'
|
||||
VKG+03+661430035+5++07++++20'
|
||||
VKG+03+661430035+5++07++++30'
|
||||
VKG+03+661430035+5++07++++40'
|
||||
VKG+03+661430035+5++07++++50'
|
||||
VKG+03+661430035+5++07++++55'
|
||||
VKG+03+661430035+5++07++++56'
|
||||
VKG+03+661430035+5++07++++57'
|
||||
VKG+03+661430035+5++07++++61'
|
||||
VKG+03+661430035+5++07++++62'
|
||||
VKG+03+661430035+5++07++++63'
|
||||
VKG+03+661430035+5++07++++65'
|
||||
VKG+03+661430035+5++07++++66'
|
||||
VKG+03+661430035+5++07++++67'
|
||||
VKG+03+661430035+5++07++++68'
|
||||
VKG+03+661430035+5++07++++69'
|
||||
VKG+03+661430035+5++07++++71'
|
||||
VKG+03+661430035+5++07++++72'
|
||||
VKG+03+661430035+5++07++++73'
|
||||
VKG+03+661430035+5++07++++74'
|
||||
VKG+09+103724238+5++28++++75'
|
||||
VKG+09+103724238+5++29++++75'
|
||||
VKG+03+104027544+5++07++++76'
|
||||
VKG+09+103724238+5++28++++76'
|
||||
VKG+09+103724238+5++29++++76'
|
||||
VKG+03+104027544+5++07++++66'
|
||||
VKG+03+103724238+5++28++++66'
|
||||
VKG+03+103724238+5++29++++66'
|
||||
VKG+03+104027544+5++07++++90'
|
||||
VKG+09+103724238+5++28++++90'
|
||||
VKG+09+103724238+5++29++++90'
|
||||
VKG+03+104027544+5++07++++A0'
|
||||
VKG+09+103724238+5++28++++A0'
|
||||
VKG+09+103724238+5++29++++A0'
|
||||
VKG+03+104027544+5++07++++B1'
|
||||
VKG+09+103724238+5++28++++B1'
|
||||
VKG+09+103724238+5++29++++B1'
|
||||
VKG+09+661430035+5++28++++99'
|
||||
VKG+09+661430035+5++29++++99'
|
||||
VKG+03+107436557+5++07++++99'
|
||||
VKG+09+107436557+5++28++++99'
|
||||
VKG+09+107436557+5++29++++99'
|
||||
NAM+01+Heimat+Krankenkasse'
|
||||
ANS+1+33602+Bielefeld+Herforder Str. 23'
|
||||
UNT+000042+00077'
|
||||
UNT+000023+00077'
|
||||
UNH+00078+KOTR:02:001:KV'
|
||||
IDK+103724249+99+BKK_DürkoppAdler'
|
||||
VDT+20120525'
|
||||
FKT+01'
|
||||
VKG+01+103724249+5++++++00'
|
||||
VKG+03+661430035+5++07++++10'
|
||||
VKG+03+661430035+5++07++++20'
|
||||
VKG+03+661430035+5++07++++30'
|
||||
VKG+03+661430035+5++07++++40'
|
||||
VKG+03+661430035+5++07++++50'
|
||||
VKG+03+661430035+5++07++++55'
|
||||
VKG+03+661430035+5++07++++56'
|
||||
VKG+03+661430035+5++07++++57'
|
||||
VKG+03+661430035+5++07++++61'
|
||||
VKG+03+661430035+5++07++++62'
|
||||
VKG+03+661430035+5++07++++63'
|
||||
VKG+03+661430035+5++07++++65'
|
||||
VKG+03+661430035+5++07++++66'
|
||||
VKG+03+661430035+5++07++++67'
|
||||
VKG+03+661430035+5++07++++68'
|
||||
VKG+09+103724249+5++28++++69'
|
||||
VKG+09+103724249+5++29++++69'
|
||||
VKG+03+661430035+5++07++++71'
|
||||
VKG+03+661430035+5++07++++72'
|
||||
VKG+03+661430035+5++07++++73'
|
||||
VKG+03+661430035+5++07++++74'
|
||||
VKG+09+103724249+5++28++++75'
|
||||
VKG+09+103724249+5++29++++75'
|
||||
VKG+03+661430035+5++07++++76'
|
||||
VKG+03+107436557+5++07++++10'
|
||||
VKG+03+107436557+5++07++++20'
|
||||
VKG+03+107436557+5++07++++30'
|
||||
VKG+03+107436557+5++07++++40'
|
||||
VKG+03+107436557+5++07++++50'
|
||||
VKG+03+107436557+5++07++++55'
|
||||
VKG+03+107436557+5++07++++56'
|
||||
VKG+03+107436557+5++07++++57'
|
||||
VKG+03+107436557+5++07++++61'
|
||||
VKG+03+107436557+5++07++++62'
|
||||
VKG+03+107436557+5++07++++63'
|
||||
VKG+03+107436557+5++07++++65'
|
||||
VKG+03+107436557+5++07++++66'
|
||||
VKG+03+107436557+5++07++++67'
|
||||
VKG+03+107436557+5++07++++68'
|
||||
VKG+09+107436557+5++07++++69'
|
||||
VKG+03+107436557+5++07++++71'
|
||||
VKG+03+107436557+5++07++++72'
|
||||
VKG+03+107436557+5++07++++73'
|
||||
VKG+03+107436557+5++07++++74'
|
||||
VKG+09+107436557+5++07++++75'
|
||||
VKG+03+107436557+5++07++++76'
|
||||
VKG+09+103724249+5++28++++90'
|
||||
VKG+09+103724249+5++29++++90'
|
||||
VKG+09+103724249+5++28++++A0'
|
||||
VKG+09+103724249+5++29++++A0'
|
||||
VKG+09+107436557+5++07++++A0'
|
||||
VKG+09+103724249+5++28++++B1'
|
||||
VKG+09+103724249+5++29++++B1'
|
||||
VKG+09+661430035+5++28++++99'
|
||||
VKG+09+661430035+5++29++++99'
|
||||
VKG+09+107436557+5++28++++99'
|
||||
VKG+09+107436557+5++29++++99'
|
||||
NAM+01+Betriebskrankenkasse+Dürkopp Adler'
|
||||
ANS+1+33605+Bielefeld+Stieghorster Str. 66'
|
||||
ANS+2+33697+Bielefeld+219140'
|
||||
UNT+000040+00078'
|
||||
UNT+000038+00078'
|
||||
UNH+00079+KOTR:02:001:KV'
|
||||
IDK+103724272+99+BKK GILDEMEISTER SEIDENSTICKER'
|
||||
VDT+20110701'
|
||||
FKT+01'
|
||||
VKG+01+103724272+5++++++00'
|
||||
VKG+03+661430035+5++07++++10'
|
||||
VKG+03+661430035+5++07++++20'
|
||||
VKG+03+661430035+5++07++++30'
|
||||
VKG+03+661430035+5++07++++40'
|
||||
VKG+03+661430035+5++07++++50'
|
||||
VKG+03+661430035+5++07++++55'
|
||||
VKG+03+661430035+5++07++++56'
|
||||
VKG+03+661430035+5++07++++57'
|
||||
VKG+03+661430035+5++07++++61'
|
||||
VKG+03+661430035+5++07++++62'
|
||||
VKG+03+661430035+5++07++++63'
|
||||
VKG+03+661430035+5++07++++65'
|
||||
VKG+03+661430035+5++07++++66'
|
||||
VKG+03+661430035+5++07++++67'
|
||||
VKG+03+661430035+5++07++++68'
|
||||
VKG+03+661430035+5++07++++69'
|
||||
VKG+03+661430035+5++07++++71'
|
||||
VKG+03+661430035+5++07++++72'
|
||||
VKG+03+661430035+5++07++++73'
|
||||
VKG+03+661430035+5++07++++74'
|
||||
VKG+03+661430035+5++07++++75'
|
||||
VKG+03+661430035+5++07++++76'
|
||||
VKG+03+107436557+5++07++++10'
|
||||
VKG+03+107436557+5++07++++20'
|
||||
VKG+03+107436557+5++07++++30'
|
||||
VKG+03+107436557+5++07++++40'
|
||||
VKG+03+107436557+5++07++++50'
|
||||
VKG+03+107436557+5++07++++55'
|
||||
VKG+03+107436557+5++07++++56'
|
||||
VKG+03+107436557+5++07++++57'
|
||||
VKG+03+107436557+5++07++++61'
|
||||
VKG+03+107436557+5++07++++62'
|
||||
VKG+03+107436557+5++07++++63'
|
||||
VKG+03+107436557+5++07++++65'
|
||||
VKG+03+107436557+5++07++++66'
|
||||
VKG+03+107436557+5++07++++67'
|
||||
VKG+03+107436557+5++07++++68'
|
||||
VKG+03+107436557+5++07++++69'
|
||||
VKG+03+107436557+5++07++++71'
|
||||
VKG+03+107436557+5++07++++72'
|
||||
VKG+03+107436557+5++07++++73'
|
||||
VKG+03+107436557+5++07++++74'
|
||||
VKG+03+107436557+5++07++++75'
|
||||
VKG+03+107436557+5++07++++76'
|
||||
VKG+09+103724272+5++28++++90'
|
||||
VKG+09+103724272+5++29++++90'
|
||||
VKG+09+103724272+5++28++++A0'
|
||||
VKG+09+103724272+5++29++++A0'
|
||||
VKG+03+107436557+5++07++++A0'
|
||||
VKG+09+103724272+5++28++++B1'
|
||||
VKG+09+103724272+5++29++++B1'
|
||||
VKG+09+661430035+5++28++++99'
|
||||
VKG+09+661430035+5++29++++99'
|
||||
VKG+09+107436557+5++28++++99'
|
||||
VKG+09+107436557+5++29++++99'
|
||||
NAM+01+Betriebskrankenkasse+Gildemeister Seidensticker'
|
||||
ANS+1+33649+Bielefeld+Winterstr. 49'
|
||||
ANS+2+33621+Bielefeld+140160'
|
||||
UNT+000039+00079'
|
||||
UNT+000038+00079'
|
||||
UNH+00080+KOTR:02:001:KV'
|
||||
IDK+103724294+99+BKK Diakonie'
|
||||
VDT+20080101'
|
||||
FKT+01'
|
||||
VKG+01+103724294+5++++++00'
|
||||
VKG+03+661430035+5++07++++10'
|
||||
VKG+03+661430035+5++07++++20'
|
||||
VKG+03+661430035+5++07++++30'
|
||||
VKG+03+661430035+5++07++++40'
|
||||
VKG+03+661430035+5++07++++50'
|
||||
VKG+03+661430035+5++07++++55'
|
||||
VKG+03+661430035+5++07++++56'
|
||||
VKG+03+661430035+5++07++++57'
|
||||
VKG+03+661430035+5++07++++61'
|
||||
VKG+03+661430035+5++07++++62'
|
||||
VKG+03+661430035+5++07++++63'
|
||||
VKG+03+661430035+5++07++++65'
|
||||
VKG+03+661430035+5++07++++66'
|
||||
VKG+03+661430035+5++07++++67'
|
||||
VKG+03+661430035+5++07++++68'
|
||||
VKG+03+107436557+5++07++++10'
|
||||
VKG+03+107436557+5++07++++20'
|
||||
VKG+03+107436557+5++07++++30'
|
||||
VKG+03+107436557+5++07++++40'
|
||||
VKG+03+107436557+5++07++++50'
|
||||
VKG+03+107436557+5++07++++55'
|
||||
VKG+03+107436557+5++07++++56'
|
||||
VKG+03+107436557+5++07++++57'
|
||||
VKG+03+107436557+5++07++++61'
|
||||
VKG+03+107436557+5++07++++62'
|
||||
VKG+03+107436557+5++07++++63'
|
||||
VKG+03+107436557+5++07++++65'
|
||||
VKG+03+107436557+5++07++++66'
|
||||
VKG+03+107436557+5++07++++67'
|
||||
VKG+03+107436557+5++07++++68'
|
||||
VKG+09+103724294+5++28++++69'
|
||||
VKG+09+103724294+5++29++++69'
|
||||
VKG+03+661430035+5++07++++71'
|
||||
VKG+03+661430035+5++07++++72'
|
||||
VKG+03+661430035+5++07++++73'
|
||||
VKG+03+661430035+5++07++++74'
|
||||
VKG+03+661430035+5++07++++75'
|
||||
VKG+03+107436557+5++07++++71'
|
||||
VKG+03+107436557+5++07++++72'
|
||||
VKG+03+107436557+5++07++++73'
|
||||
VKG+03+107436557+5++07++++74'
|
||||
VKG+03+107436557+5++07++++75'
|
||||
VKG+03+104027544+5++07++++76'
|
||||
VKG+09+103724294+5++28++++76'
|
||||
VKG+09+103724294+5++29++++76'
|
||||
VKG+03+104027544+5++07++++90'
|
||||
VKG+09+103724294+5++28++++90'
|
||||
VKG+09+103724294+5++29++++90'
|
||||
VKG+09+661430035+5++28++++99'
|
||||
VKG+09+661430035+5++29++++99'
|
||||
VKG+03+107436557+5++07++++A0'
|
||||
VKG+09+103724294+5++28++++B1'
|
||||
VKG+09+103724294+5++29++++B1'
|
||||
VKG+09+107436557+5++28++++99'
|
||||
VKG+09+107436557+5++29++++99'
|
||||
NAM+01+Betriebskrankenkasse+Diakonie'
|
||||
ANS+1+33617+Bielefeld+Königsweg 8'
|
||||
ANS+2+33544+Bielefeld+130104'
|
||||
UNT+000038+00080'
|
||||
UNT+000042+00080'
|
||||
UNH+00081+KOTR:02:001:KV'
|
||||
IDK+103724341+99+BKK GILDEMEISTER SEIDENSTICKER'
|
||||
VDT+20110701'
|
||||
@@ -1426,38 +1370,19 @@ IDK+103725342+99+Bertelsmann BKK'
|
||||
VDT+20070701'
|
||||
FKT+01'
|
||||
VKG+01+103725342+5++++++00'
|
||||
VKG+03+661430035+5++07++++10'
|
||||
VKG+03+661430035+5++07++++20'
|
||||
VKG+03+661430035+5++07++++30'
|
||||
VKG+03+661430035+5++07++++40'
|
||||
VKG+03+661430035+5++07++++50'
|
||||
VKG+03+661430035+5++07++++55'
|
||||
VKG+03+661430035+5++07++++56'
|
||||
VKG+03+661430035+5++07++++57'
|
||||
VKG+03+661430035+5++07++++61'
|
||||
VKG+03+661430035+5++07++++62'
|
||||
VKG+03+661430035+5++07++++63'
|
||||
VKG+03+661430035+5++07++++65'
|
||||
VKG+03+661430035+5++07++++66'
|
||||
VKG+03+661430035+5++07++++67'
|
||||
VKG+03+661430035+5++07++++68'
|
||||
VKG+03+661430035+5++07++++69'
|
||||
VKG+03+661430035+5++07++++71'
|
||||
VKG+03+661430035+5++07++++72'
|
||||
VKG+03+661430035+5++07++++73'
|
||||
VKG+03+661430035+5++07++++74'
|
||||
VKG+03+661430035+5++07++++75'
|
||||
VKG+03+104027544+5++07++++76'
|
||||
VKG+09+103725342+5++28++++76'
|
||||
VKG+09+103725342+5++29++++76'
|
||||
VKG+03+104027544+5++07++++90'
|
||||
VKG+09+103725342+5++28++++90'
|
||||
VKG+09+103725342+5++29++++90'
|
||||
VKG+09+661430035+5++28++++99'
|
||||
VKG+09+661430035+5++29++++99'
|
||||
VKG+03+104027544+5++07++++B1'
|
||||
VKG+09+103725342+5++28++++B1'
|
||||
VKG+09+103725342+5++29++++B1'
|
||||
VKG+03+107436557+5++07++++99'
|
||||
VKG+09+107436557+5++28++++99'
|
||||
VKG+09+107436557+5++29++++99'
|
||||
NAM+01+Bertelsmann+Betriebskrankenkasse'
|
||||
ANS+1+33335+Gütersloh+Carl-Miele-Str. 214'
|
||||
ANS+2+33311+Gütersloh+170'
|
||||
UNT+000037+00085'
|
||||
UNT+000018+00085'
|
||||
UNH+00086+KOTR:02:001:KV'
|
||||
IDK+103725364+99+BKK Miele'
|
||||
VDT+20100401'
|
||||
@@ -1490,80 +1415,80 @@ IDK+103726081+99+BKK Melitta HMR'
|
||||
VDT+20100701'
|
||||
FKT+01'
|
||||
VKG+01+103726081+5++++++00'
|
||||
VKG+03+661430035+5++07++++10'
|
||||
VKG+03+661430035+5++07++++20'
|
||||
VKG+03+661430035+5++07++++30'
|
||||
VKG+03+661430035+5++07++++40'
|
||||
VKG+03+661430035+5++07++++50'
|
||||
VKG+03+661430035+5++07++++55'
|
||||
VKG+03+661430035+5++07++++56'
|
||||
VKG+03+661430035+5++07++++57'
|
||||
VKG+03+661430035+5++07++++61'
|
||||
VKG+03+661430035+5++07++++62'
|
||||
VKG+03+661430035+5++07++++63'
|
||||
VKG+03+661430035+5++07++++65'
|
||||
VKG+03+661430035+5++07++++66'
|
||||
VKG+03+661430035+5++07++++67'
|
||||
VKG+03+661430035+5++07++++68'
|
||||
VKG+03+661430035+5++07++++71'
|
||||
VKG+03+661430035+5++07++++72'
|
||||
VKG+03+661430035+5++07++++73'
|
||||
VKG+03+661430035+5++07++++74'
|
||||
VKG+03+661430035+5++07++++76'
|
||||
VKG+09+103726081+5++28++++69'
|
||||
VKG+09+103726081+5++29++++69'
|
||||
VKG+09+103726081+5++28++++75'
|
||||
VKG+09+103726081+5++29++++75'
|
||||
VKG+03+107436557+5++07++++10'
|
||||
VKG+03+107436557+5++07++++20'
|
||||
VKG+03+107436557+5++07++++30'
|
||||
VKG+03+107436557+5++07++++40'
|
||||
VKG+03+107436557+5++07++++50'
|
||||
VKG+03+107436557+5++07++++55'
|
||||
VKG+03+107436557+5++07++++56'
|
||||
VKG+03+107436557+5++07++++57'
|
||||
VKG+03+107436557+5++07++++61'
|
||||
VKG+03+107436557+5++07++++62'
|
||||
VKG+03+107436557+5++07++++63'
|
||||
VKG+03+107436557+5++07++++65'
|
||||
VKG+03+107436557+5++07++++66'
|
||||
VKG+03+107436557+5++07++++67'
|
||||
VKG+03+107436557+5++07++++68'
|
||||
VKG+03+107436557+5++07++++71'
|
||||
VKG+03+107436557+5++07++++72'
|
||||
VKG+03+107436557+5++07++++73'
|
||||
VKG+03+107436557+5++07++++74'
|
||||
VKG+03+107436557+5++07++++75'
|
||||
VKG+03+107436557+5++07++++76'
|
||||
VKG+09+103726081+5++28++++90'
|
||||
VKG+09+103726081+5++29++++90'
|
||||
VKG+09+103726081+5++28++++A0'
|
||||
VKG+09+103726081+5++29++++A0'
|
||||
VKG+03+107436557+5++07++++A0'
|
||||
VKG+09+103726081+5++28++++B1'
|
||||
VKG+09+103726081+5++29++++B1'
|
||||
VKG+09+661430035+5++28++++99'
|
||||
VKG+09+661430035+5++29++++99'
|
||||
VKG+09+107436557+5++28++++99'
|
||||
VKG+09+107436557+5++29++++99'
|
||||
NAM+01+Betriebskrankenkasse+Melitta HMR'
|
||||
ANS+1+32425+Minden+Marienstr. 122'
|
||||
ANS+2+32372+Minden+1224'
|
||||
UNT+000041+00088'
|
||||
UNT+000037+00088'
|
||||
UNH+00089+KOTR:02:001:KV'
|
||||
IDK+103729701+99+BKK Diakonie/Ost'
|
||||
VDT+20080101'
|
||||
FKT+01'
|
||||
VKG+01+103729701+5++++++00'
|
||||
VKG+03+661430035+5++07++++10'
|
||||
VKG+03+661430035+5++07++++20'
|
||||
VKG+03+661430035+5++07++++30'
|
||||
VKG+03+661430035+5++07++++40'
|
||||
VKG+03+661430035+5++07++++50'
|
||||
VKG+03+661430035+5++07++++55'
|
||||
VKG+03+661430035+5++07++++56'
|
||||
VKG+03+661430035+5++07++++57'
|
||||
VKG+03+661430035+5++07++++61'
|
||||
VKG+03+661430035+5++07++++62'
|
||||
VKG+03+661430035+5++07++++63'
|
||||
VKG+03+661430035+5++07++++65'
|
||||
VKG+03+661430035+5++07++++66'
|
||||
VKG+03+661430035+5++07++++67'
|
||||
VKG+03+661430035+5++07++++68'
|
||||
VKG+03+107436557+5++07++++10'
|
||||
VKG+03+107436557+5++07++++20'
|
||||
VKG+03+107436557+5++07++++30'
|
||||
VKG+03+107436557+5++07++++40'
|
||||
VKG+03+107436557+5++07++++50'
|
||||
VKG+03+107436557+5++07++++55'
|
||||
VKG+03+107436557+5++07++++56'
|
||||
VKG+03+107436557+5++07++++57'
|
||||
VKG+03+107436557+5++07++++61'
|
||||
VKG+03+107436557+5++07++++62'
|
||||
VKG+03+107436557+5++07++++63'
|
||||
VKG+03+107436557+5++07++++65'
|
||||
VKG+03+107436557+5++07++++66'
|
||||
VKG+03+107436557+5++07++++67'
|
||||
VKG+03+107436557+5++07++++68'
|
||||
VKG+09+103724294+5++28++++69'
|
||||
VKG+09+103724294+5++29++++69'
|
||||
VKG+03+661430035+5++07++++71'
|
||||
VKG+03+661430035+5++07++++72'
|
||||
VKG+03+661430035+5++07++++73'
|
||||
VKG+03+661430035+5++07++++74'
|
||||
VKG+03+661430035+5++07++++75'
|
||||
VKG+03+107436557+5++07++++71'
|
||||
VKG+03+107436557+5++07++++72'
|
||||
VKG+03+107436557+5++07++++73'
|
||||
VKG+03+107436557+5++07++++74'
|
||||
VKG+03+107436557+5++07++++75'
|
||||
VKG+03+104027544+5++07++++76'
|
||||
VKG+09+103724294+5++28++++76'
|
||||
VKG+09+103724294+5++29++++76'
|
||||
VKG+03+104027544+5++07++++90'
|
||||
VKG+09+103724294+5++28++++90'
|
||||
VKG+09+103724294+5++29++++90'
|
||||
VKG+09+661430035+5++28++++99'
|
||||
VKG+09+661430035+5++29++++99'
|
||||
VKG+03+107436557+5++07++++A0'
|
||||
VKG+09+103724294+5++28++++B1'
|
||||
VKG+09+103724294+5++29++++B1'
|
||||
VKG+09+107436557+5++28++++99'
|
||||
VKG+09+107436557+5++29++++99'
|
||||
NAM+01+Betriebskrankenkasse+Diakonie/Ost+Gesch.Ber.Neue Bundesländer'
|
||||
ANS+1+33617+Bielefeld+Königsweg 8'
|
||||
ANS+2+33544+Bielefeld+130104'
|
||||
UNT+000038+00089'
|
||||
UNT+000042+00089'
|
||||
UNH+00090+KOTR:02:001:KV'
|
||||
IDK+103736722+99+BKK HMR/Ost'
|
||||
VDT+20110101'
|
||||
@@ -1578,40 +1503,39 @@ IDK+103791489+99+BKK GILDEMEISTER SEIDENST./Ost'
|
||||
VDT+20110701'
|
||||
FKT+01'
|
||||
VKG+01+103791489+5++++++00'
|
||||
VKG+03+661430035+5++07++++10'
|
||||
VKG+03+661430035+5++07++++20'
|
||||
VKG+03+661430035+5++07++++30'
|
||||
VKG+03+661430035+5++07++++40'
|
||||
VKG+03+661430035+5++07++++50'
|
||||
VKG+03+661430035+5++07++++55'
|
||||
VKG+03+661430035+5++07++++56'
|
||||
VKG+03+661430035+5++07++++57'
|
||||
VKG+03+661430035+5++07++++61'
|
||||
VKG+03+661430035+5++07++++62'
|
||||
VKG+03+661430035+5++07++++63'
|
||||
VKG+03+661430035+5++07++++65'
|
||||
VKG+03+661430035+5++07++++66'
|
||||
VKG+03+661430035+5++07++++67'
|
||||
VKG+03+661430035+5++07++++68'
|
||||
VKG+03+661430035+5++07++++69'
|
||||
VKG+03+661430035+5++07++++71'
|
||||
VKG+03+661430035+5++07++++72'
|
||||
VKG+03+661430035+5++07++++73'
|
||||
VKG+03+661430035+5++07++++74'
|
||||
VKG+03+661430035+5++07++++75'
|
||||
VKG+03+661430035+5++07++++76'
|
||||
VKG+03+107436557+5++07++++10'
|
||||
VKG+03+107436557+5++07++++20'
|
||||
VKG+03+107436557+5++07++++30'
|
||||
VKG+03+107436557+5++07++++40'
|
||||
VKG+03+107436557+5++07++++50'
|
||||
VKG+03+107436557+5++07++++55'
|
||||
VKG+03+107436557+5++07++++56'
|
||||
VKG+03+107436557+5++07++++57'
|
||||
VKG+03+107436557+5++07++++61'
|
||||
VKG+03+107436557+5++07++++62'
|
||||
VKG+03+107436557+5++07++++63'
|
||||
VKG+03+107436557+5++07++++65'
|
||||
VKG+03+107436557+5++07++++66'
|
||||
VKG+03+107436557+5++07++++67'
|
||||
VKG+03+107436557+5++07++++68'
|
||||
VKG+03+107436557+5++07++++69'
|
||||
VKG+03+107436557+5++07++++71'
|
||||
VKG+03+107436557+5++07++++72'
|
||||
VKG+03+107436557+5++07++++73'
|
||||
VKG+03+107436557+5++07++++74'
|
||||
VKG+03+107436557+5++07++++75'
|
||||
VKG+03+107436557+5++07++++76'
|
||||
VKG+09+103724272+5++28++++90'
|
||||
VKG+09+103724272+5++29++++90'
|
||||
VKG+09+103724272+5++28++++A0'
|
||||
VKG+09+103724272+5++29++++A0'
|
||||
VKG+03+107436557+5++07++++A0'
|
||||
VKG+09+103724272+5++28++++B1'
|
||||
VKG+09+103724272+5++29++++B1'
|
||||
VKG+09+661430035+5++28++++99'
|
||||
VKG+09+661430035+5++29++++99'
|
||||
VKG+09+107436557+5++28++++99'
|
||||
VKG+09+107436557+5++29++++99'
|
||||
NAM+01+Betriebskrankenkasse+Gildemeister Seidensticker+Gesch.Ber.Neue Bundesländer'
|
||||
ANS+1+33649+Bielefeld+Winterstr. 49'
|
||||
ANS+2+33621+Bielefeld+140160'
|
||||
UNT+000039+00091'
|
||||
UNT+000038+00091'
|
||||
UNH+00092+KOTR:02:001:KV'
|
||||
IDK+103791490+99+BKK GILDEMEISTER SEIDENSTICKER'
|
||||
VDT+20110701'
|
||||
@@ -2152,7 +2076,7 @@ VKG+09+104926702+5++29++++66'
|
||||
VKG+03+104027544+5++07++++67'
|
||||
VKG+09+104926702+5++28++++67'
|
||||
VKG+09+104926702+5++29++++67'
|
||||
VKG+03+104027544+5++07++++68'
|
||||
VKG+03+107436557+5++07++++68'
|
||||
VKG+09+107436557+5++28++++68'
|
||||
VKG+09+107436557+5++29++++68'
|
||||
VKG+03+104027544+5++07++++69'
|
||||
@@ -2459,67 +2383,55 @@ IDK+105734543+99+BKK Wirtschaft & Finanzen'
|
||||
VDT+20100101'
|
||||
FKT+01'
|
||||
VKG+01+105734543+5++++++00'
|
||||
VKG+03+104027544+5++07++++76'
|
||||
VKG+09+105734543+5++28++++76'
|
||||
VKG+09+105734543+5++29++++76'
|
||||
VKG+03+104027544+5++07++++90'
|
||||
VKG+09+105734543+5++28++++90'
|
||||
VKG+09+105734543+5++29++++90'
|
||||
VKG+03+104027544+5++07++++A0'
|
||||
VKG+09+105734543+5++28++++A0'
|
||||
VKG+09+105734543+5++29++++A0'
|
||||
VKG+03+104027544+5++07++++B1'
|
||||
VKG+09+105734543+5++28++++B1'
|
||||
VKG+09+105734543+5++29++++B1'
|
||||
VKG+03+661430035+5++07++++99'
|
||||
VKG+09+661430035+5++28++++99'
|
||||
VKG+09+661430035+5++29++++99'
|
||||
VKG+03+107436557+5++07++++99'
|
||||
VKG+09+107436557+5++28++++99'
|
||||
VKG+09+107436557+5++29++++99'
|
||||
NAM+01+Die BKK für wirschaftsprüfende+und -beratende Berufe'
|
||||
ANS+1+34212+Melsungen+Bahnhofstr. 19'
|
||||
ANS+2+34202+Melsungen+1264'
|
||||
UNT+000024+00144'
|
||||
UNT+000018+00144'
|
||||
UNH+00145+KOTR:02:001:KV'
|
||||
IDK+105734554+99+BKK Wirtschaft & Finanzen WT'
|
||||
VDT+20100101'
|
||||
IDK+108433204+99+BKK MAN und MTU Muenchen'
|
||||
VDT+19560401+20111231'
|
||||
FKT+01'
|
||||
VKG+01+105734543+5++++++00'
|
||||
NAM+01+Die BKK f<> wirschaftspr<70>ende+und -beratende Berufe+Wahltarif'
|
||||
ANS+1+34212+Melsungen+Bahnhofstr. 19'
|
||||
ANS+2+34202+Melsungen+1264'
|
||||
VKG+01+108534160+5++++++00'
|
||||
NAM+01+Betriebskrankenkasse+MAN und MTU München'
|
||||
ANS+1+80995+München+Karlsfelder Str. 209e-f'
|
||||
ANS+2+80971+München+500144'
|
||||
UNT+000009+00145'
|
||||
UNH+00146+KOTR:02:001:KV'
|
||||
IDK+105734565+99+BKK Wirtschaft & Finanzen/Ost'
|
||||
VDT+20100101'
|
||||
IDK+105230383+99+BKK ENKA'
|
||||
VDT+20000801+20101231'
|
||||
FKT+01'
|
||||
VKG+01+105792123+5++++++00'
|
||||
NAM+01+Die BKK f<> wirschaftspr<70>ende+und -beratende Berufe+Wahltarif'
|
||||
ANS+1+34212+Melsungen+Bahnhofstr. 19'
|
||||
ANS+2+34202+Melsungen+1264'
|
||||
VKG+01+105330191+5++++++00'
|
||||
NAM+01+Betriebskrankenkasse+ENKA'
|
||||
ANS+1+65451+Kelsterbach+Kleiner Kornweg 2'
|
||||
ANS+2+65440+Kelsterbach+1110'
|
||||
UNT+000009+00146'
|
||||
UNH+00147+KOTR:02:001:KV'
|
||||
IDK+105792123+99+BKK Wirtschaft & Finanzen/Ost'
|
||||
VDT+20100101'
|
||||
FKT+01'
|
||||
VKG+01+105792123+5++++++00'
|
||||
VKG+03+104027544+5++07++++76'
|
||||
VKG+09+105792123+5++28++++76'
|
||||
VKG+09+105792123+5++29++++76'
|
||||
VKG+03+104027544+5++07++++90'
|
||||
VKG+09+105792123+5++28++++90'
|
||||
VKG+09+105792123+5++29++++90'
|
||||
VKG+03+104027544+5++07++++A0'
|
||||
VKG+09+105792123+5++28++++A0'
|
||||
VKG+09+105792123+5++29++++A0'
|
||||
VKG+03+104027544+5++07++++B1'
|
||||
VKG+09+105792123+5++28++++B1'
|
||||
VKG+09+105792123+5++29++++B1'
|
||||
VKG+03+661430035+5++07++++99'
|
||||
VKG+09+661430035+5++28++++99'
|
||||
VKG+09+661430035+5++29++++99'
|
||||
VKG+03+107436557+5++07++++99'
|
||||
VKG+09+107436557+5++28++++99'
|
||||
VKG+09+107436557+5++29++++99'
|
||||
NAM+01+Die BKK für wirschaftsprüfende+und -beratende Berufe+Gesch.Ber.Neue Bundesländer'
|
||||
ANS+1+34212+Melsungen+Bahnhofstr. 19'
|
||||
ANS+2+34202+Melsungen+1264'
|
||||
UNT+000024+00147'
|
||||
UNT+000018+00147'
|
||||
UNH+00148+KOTR:02:001:KV'
|
||||
IDK+105792190+99+BKK PwC/Ost'
|
||||
VDT+20090101'
|
||||
@@ -3656,14 +3568,14 @@ ANS+1+01445+Radebeul+Ledenweg 2'
|
||||
ANS+2+01439+Radebeul+020108'
|
||||
UNT+000009+00191'
|
||||
UNH+00192+KOTR:02:001:KV'
|
||||
IDK+108021400+99+WMF Betriebskrankenkasse/OST'
|
||||
IDK+108021400+99+WMF BKK/OST'
|
||||
VDT+20060701'
|
||||
FKT+01'
|
||||
VKG+01+108021400+5++++++00'
|
||||
VKG+03+107436557+5++07++++00'
|
||||
VKG+09+107436557+5++28++++00'
|
||||
VKG+09+107436557+5++29++++00'
|
||||
NAM+01+WMF Betriebskrankenkasse+Gesch.Ber.Neue Bundesl舅der'
|
||||
NAM+01+WMF BKK+Gesch.Ber.Neue Bundesländer'
|
||||
ANS+1+73312+Geislingen+Eberhardstr.'
|
||||
ANS+2+73304+Geislingen+1412'
|
||||
UNT+000012+00192'
|
||||
@@ -4108,14 +4020,14 @@ ANS+1+70376+Stuttgart+Pragstr. 26-46'
|
||||
ANS+2+70369+Stuttgart+500780'
|
||||
UNT+000018+00220'
|
||||
UNH+00221+KOTR:02:001:KV'
|
||||
IDK+108036441+99+WMF Betriebskrankenkasse'
|
||||
IDK+108036441+99+WMF BKK'
|
||||
VDT+20060701'
|
||||
FKT+01'
|
||||
VKG+01+108036441+5++++++00'
|
||||
VKG+03+107436557+5++07++++00'
|
||||
VKG+09+107436557+5++28++++00'
|
||||
VKG+09+107436557+5++29++++00'
|
||||
NAM+01+WMF Betriebskrankenkasse'
|
||||
NAM+01+WMF BKK'
|
||||
ANS+1+73312+Geislingen+Eberhardstraße'
|
||||
ANS+2+73304+Geislingen+1412'
|
||||
UNT+000012+00221'
|
||||
@@ -4647,51 +4559,11 @@ UNH+00255+KOTR:02:001:KV'
|
||||
IDK+108632900+99+BKK Textilgruppe Hof'
|
||||
VDT+20100401'
|
||||
FKT+01'
|
||||
VKG+01+108632900+5++++++00'
|
||||
VKG+03+107436557+5++07++++10'
|
||||
VKG+03+107436557+5++07++++20'
|
||||
VKG+03+104027544+5++07++++30'
|
||||
VKG+09+108632900+5++28++++30'
|
||||
VKG+09+108632900+5++29++++30'
|
||||
VKG+03+107436557+5++07++++40'
|
||||
VKG+09+107436557+5++28++++40'
|
||||
VKG+09+107436557+5++29++++40'
|
||||
VKG+03+107436557+5++07++++50'
|
||||
VKG+03+107436557+5++07++++55'
|
||||
VKG+03+107436557+5++07++++56'
|
||||
VKG+03+107436557+5++07++++57'
|
||||
VKG+03+107436557+5++07++++61'
|
||||
VKG+03+107436557+5++07++++62'
|
||||
VKG+03+107436557+5++07++++63'
|
||||
VKG+03+107436557+5++07++++65'
|
||||
VKG+03+107436557+5++07++++66'
|
||||
VKG+03+107436557+5++07++++67'
|
||||
VKG+03+107436557+5++07++++68'
|
||||
VKG+03+107436557+5++07++++69'
|
||||
VKG+03+107436557+5++07++++71'
|
||||
VKG+03+107436557+5++07++++72'
|
||||
VKG+03+107436557+5++07++++73'
|
||||
VKG+03+107436557+5++07++++74'
|
||||
VKG+03+104027544+5++07++++75'
|
||||
VKG+09+108632900+5++28++++75'
|
||||
VKG+09+108632900+5++29++++75'
|
||||
VKG+03+104027544+5++07++++76'
|
||||
VKG+09+108632900+5++28++++76'
|
||||
VKG+09+108632900+5++29++++76'
|
||||
VKG+03+104027544+5++07++++90'
|
||||
VKG+09+108632900+5++28++++90'
|
||||
VKG+09+108632900+5++29++++90'
|
||||
VKG+03+104027544+5++07++++A0'
|
||||
VKG+09+108632900+5++28++++A0'
|
||||
VKG+09+108632900+5++29++++A0'
|
||||
VKG+09+108632900+5++28++++B1'
|
||||
VKG+09+108632900+5++29++++B1'
|
||||
VKG+09+107436557+5++28++++99'
|
||||
VKG+09+107436557+5++29++++99'
|
||||
VKG+01+108035612+5++++++00'
|
||||
NAM+01+Gemeinsame Betriebskranken-+kasse der Gesellschaften+der textilgruppe hof'
|
||||
ANS+1+95028+Hof+Fabrikzeile 21'
|
||||
ANS+2+95014+Hof+1529'
|
||||
UNT+000049+00255'
|
||||
UNT+000009+00255'
|
||||
UNH+00256+KOTR:02:001:KV'
|
||||
IDK+108633433+99+BKK Kassana'
|
||||
VDT+20110801'
|
||||
@@ -5897,8 +5769,8 @@ IDK+107436557+99+AZE Emmendingen'
|
||||
VDT+20000401'
|
||||
FKT+01'
|
||||
NAM+01+Abrechnungszentrum Emmendingen'
|
||||
ANS+1+79312+Emmendingen+An der B3 Haus-Nr. 6'
|
||||
ANS+2+79301+Emmendingen+1167'
|
||||
ANS+1+79312+Emmendingen+Bundesstraße 6'
|
||||
ANS+2+79312+Emmendingen+An der B3 Haus Nr. 6'
|
||||
UEM+1+00+I8'
|
||||
DFU+01+070+++++inbox@tp5.arz-emmendingen.de'
|
||||
DFU+02+016+++++ftam.arz-emmendingen.de?:9000'
|
||||
@@ -6151,15 +6023,6 @@ NAM+01+ktp - Betriebskrankenkasse+Gesch.Ber.Neue Bundesl
|
||||
ANS+1+45138+Essen+Kurfürstenstr. 58'
|
||||
UNT+000008+00359'
|
||||
UNH+00360+KOTR:02:001:KV'
|
||||
IDK+108433204+99+BKK MAN und MTU Muenchen'
|
||||
VDT+19560401+20111231'
|
||||
FKT+01'
|
||||
VKG+01+108534160+5++++++00'
|
||||
NAM+01+Betriebskrankenkasse+MAN und MTU M<>chen'
|
||||
ANS+1+80995+M<>chen+Karlsfelder Str. 209e-f'
|
||||
ANS+2+80971+M<>chen+500144'
|
||||
UNT+000009+00360'
|
||||
UNH+00361+KOTR:02:001:KV'
|
||||
IDK+104625684+99+GBK KOELN'
|
||||
VDT+20031001+20101231'
|
||||
FKT+01'
|
||||
@@ -6167,8 +6030,8 @@ VKG+01+108035612+5++++++00'
|
||||
NAM+01+Gemeinsame BKK der+Stadt Köln'
|
||||
ANS+1+50668+Köln+Jakordenstr. 18-20'
|
||||
ANS+2+50455+Köln+101534'
|
||||
UNT+000009+00361'
|
||||
UNH+00362+KOTR:02:001:KV'
|
||||
UNT+000009+00360'
|
||||
UNH+00361+KOTR:02:001:KV'
|
||||
IDK+104691721+99+GBK KOELN-OST'
|
||||
VDT+20031001+20101231'
|
||||
FKT+01'
|
||||
@@ -6176,8 +6039,8 @@ VKG+01+108034508+5++++++00'
|
||||
NAM+01+Gemeinsame BKK der+Stadt Köln+Gesch.Ber.Neue Bundesländer'
|
||||
ANS+1+50668+Köln+Jakordenstr. 18-20'
|
||||
ANS+2+50455+Köln+101534'
|
||||
UNT+000009+00362'
|
||||
UNH+00363+KOTR:02:001:KV'
|
||||
UNT+000009+00361'
|
||||
UNH+00362+KOTR:02:001:KV'
|
||||
IDK+104826197+99+BKK futur'
|
||||
VDT+20071101+20111231'
|
||||
FKT+01'
|
||||
@@ -6185,24 +6048,24 @@ VKG+01+109723913+5++++++00'
|
||||
NAM+01+Betriebskrankenkasse+futur'
|
||||
ANS+1+47803+Krefeld+Girmesgath 5'
|
||||
ANS+3+70426+Stuttgart'
|
||||
UNT+000009+00363'
|
||||
UNH+00364+KOTR:02:001:KV'
|
||||
UNT+000009+00362'
|
||||
UNH+00363+KOTR:02:001:KV'
|
||||
IDK+104892110+99+BKK futur (Proj. ZOM)'
|
||||
VDT+20040715+20111231'
|
||||
FKT+01'
|
||||
VKG+01+109723913+5++++++00'
|
||||
NAM+01+Betriebskrankenkasse+futur+Projekt ZOM'
|
||||
ANS+1+47803+Krefeld+Girmesgath 5'
|
||||
UNT+000008+00364'
|
||||
UNH+00365+KOTR:02:001:KV'
|
||||
UNT+000008+00363'
|
||||
UNH+00364+KOTR:02:001:KV'
|
||||
IDK+104892358+99+BKK futur Mitarbeiterkasse'
|
||||
VDT+20071101+20111231'
|
||||
FKT+01'
|
||||
VKG+01+109723913+5++++++00'
|
||||
NAM+01+Betriebskrankenkasse+futur+Mitarbeiterkasse'
|
||||
ANS+2+91701+Gunzenhausen+1101'
|
||||
UNT+000008+00365'
|
||||
UNH+00366+KOTR:02:001:KV'
|
||||
UNT+000008+00364'
|
||||
UNH+00365+KOTR:02:001:KV'
|
||||
IDK+104892369+99+BKK futur/Ost'
|
||||
VDT+20100601+20111231'
|
||||
FKT+01'
|
||||
@@ -6210,14 +6073,5 @@ VKG+01+109737010+5++++++00'
|
||||
NAM+01+Betriebskrankenkasse+futur+Gesch.Ber.Neue Bundesländer'
|
||||
ANS+1+47803+Krefeld+Girmesgath 5'
|
||||
ANS+3+70426+Stuttgart'
|
||||
UNT+000009+00366'
|
||||
UNH+00367+KOTR:02:001:KV'
|
||||
IDK+105230383+99+BKK ENKA'
|
||||
VDT+20000801+20101231'
|
||||
FKT+01'
|
||||
VKG+01+105330191+5++++++00'
|
||||
NAM+01+Betriebskrankenkasse+ENKA'
|
||||
ANS+1+65451+Kelsterbach+Kleiner Kornweg 2'
|
||||
ANS+2+65440+Kelsterbach+1110'
|
||||
UNT+000009+00367'
|
||||
UNZ+000367+00235'
|
||||
UNT+000009+00365'
|
||||
UNZ+000365+00239'
|
||||
@@ -1,5 +1,5 @@
|
||||
UNA:+,? '
|
||||
UNB+UNOC:3+109979990+999999999+240917:1104+00001++EK05Q324KE4'
|
||||
UNB+UNOC:3+109979990+999999999+241219:1420+00001++EK05Q125KE0'
|
||||
UNH+00001+KOTR:02:001:KV'
|
||||
IDK+100167999+99+DAK+78602'
|
||||
VDT+19951001'
|
||||
@@ -1121,7 +1121,7 @@ VKG+03+104940005+5++07++16++A0'
|
||||
VKG+09+660510336+5++28++99++10'
|
||||
VKG+09+660510336+5++28++99++20'
|
||||
VKG+09+104940185+5++28++01++30'
|
||||
VKG+09+104940174+5++28++02++30'
|
||||
VKG+09+104940185+5++28++02++30'
|
||||
VKG+09+104940174+5++28++03++30'
|
||||
VKG+09+104940174+5++28++04++30'
|
||||
VKG+09+104940174+5++28++05++30'
|
||||
@@ -1130,14 +1130,14 @@ VKG+09+104940185+5++28++07++30'
|
||||
VKG+09+104940185+5++28++08++30'
|
||||
VKG+09+104940185+5++28++09++30'
|
||||
VKG+09+104940185+5++28++10++30'
|
||||
VKG+09+104940174+5++28++11++30'
|
||||
VKG+09+104940174+5++28++12++30'
|
||||
VKG+09+104940185+5++28++11++30'
|
||||
VKG+09+104940185+5++28++12++30'
|
||||
VKG+09+104940185+5++28++13++30'
|
||||
VKG+09+104940185+5++28++14++30'
|
||||
VKG+09+104940185+5++28++15++30'
|
||||
VKG+09+104940185+5++28++16++30'
|
||||
VKG+09+108079819+5++28++01++40'
|
||||
VKG+09+104940152+5++28++02++40'
|
||||
VKG+09+108079819+5++28++02++40'
|
||||
VKG+09+104940152+5++28++03++40'
|
||||
VKG+09+104940152+5++28++04++40'
|
||||
VKG+09+104940152+5++28++05++40'
|
||||
@@ -1146,8 +1146,8 @@ VKG+09+108079819+5++28++07++40'
|
||||
VKG+09+108079819+5++28++08++40'
|
||||
VKG+09+108079819+5++28++09++40'
|
||||
VKG+09+108079819+5++28++10++40'
|
||||
VKG+09+104940152+5++28++11++40'
|
||||
VKG+09+104940152+5++28++12++40'
|
||||
VKG+09+108079819+5++28++11++40'
|
||||
VKG+09+108079819+5++28++12++40'
|
||||
VKG+09+108079819+5++28++13++40'
|
||||
VKG+09+108079819+5++28++14++40'
|
||||
VKG+09+108079819+5++28++15++40'
|
||||
@@ -1167,7 +1167,7 @@ VKG+09+660510336+5++28++99++74'
|
||||
VKG+09+660510336+5++28++99++75'
|
||||
VKG+09+660510336+5++28++99++76'
|
||||
VKG+09+104940185+5++28++01++A0'
|
||||
VKG+09+104940174+5++28++02++A0'
|
||||
VKG+09+104940185+5++28++02++A0'
|
||||
VKG+09+104940174+5++28++03++A0'
|
||||
VKG+09+104940174+5++28++04++A0'
|
||||
VKG+09+104940174+5++28++05++A0'
|
||||
@@ -1176,8 +1176,8 @@ VKG+09+104940185+5++28++07++A0'
|
||||
VKG+09+104940185+5++28++08++A0'
|
||||
VKG+09+104940185+5++28++09++A0'
|
||||
VKG+09+104940185+5++28++10++A0'
|
||||
VKG+09+104940174+5++28++11++A0'
|
||||
VKG+09+104940174+5++28++12++A0'
|
||||
VKG+09+104940185+5++28++11++A0'
|
||||
VKG+09+104940185+5++28++12++A0'
|
||||
VKG+09+104940185+5++28++13++A0'
|
||||
VKG+09+104940185+5++28++14++A0'
|
||||
VKG+09+104940185+5++28++15++A0'
|
||||
@@ -1,5 +1,5 @@
|
||||
UNA:+,? '
|
||||
UNB+UNOC:3+109900019+999999999+240925:1200+00030++IK05Q424KE0'
|
||||
UNB+UNOC:3+109900019+999999999+241219:1500+00032++IK05Q125KE1'
|
||||
UNH+00001+KOTR:02:001:KV'
|
||||
IDK+100202527+99+IKK Nord (vorm. IKK MV)+78301'
|
||||
VDT+19950801'
|
||||
@@ -1579,8 +1579,8 @@ IDK+107436557+99+AZE Emmendingen'
|
||||
VDT+20000401'
|
||||
FKT+01'
|
||||
NAM+01+Abrechenzentrum Emmendingen'
|
||||
ANS+1+79312+Emmendingen+An der B3 Haus Nr. 6'
|
||||
ANS+2+79301+Emmendingen+1167'
|
||||
ANS+1+79312+Emmendingen+Bundesstraße 6'
|
||||
ANS+2+79312+Emmendingen+An der B3 Haus Nr. 6'
|
||||
UEM+1+00+I8'
|
||||
DFU+01+070+++++inbox@tp5.arz-emmendingen.de'
|
||||
DFU+02+016+++++ftam.arz-emmendingen.de?:9000'
|
||||
@@ -2300,4 +2300,4 @@ NAM+01+IKK Classic+c/o DAVASO GmbH'
|
||||
ANS+1+04316+Leipzig+Sommerfelder Str. 120'
|
||||
ANS+2+04304+Leipzig+500761'
|
||||
UNT+000008+00227'
|
||||
UNZ+000227+00030'
|
||||
UNZ+000227+00032'
|
||||
@@ -18,9 +18,6 @@ namespace DakotaSender
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static readonly string TEST_TENANT = "5000000000";
|
||||
static readonly string TEST_TENANT_2 = "7375324044";
|
||||
|
||||
static bool time_in_line = false;
|
||||
static bool is_dakota_running = false;
|
||||
|
||||
@@ -130,7 +127,6 @@ namespace DakotaSender
|
||||
if (accept)
|
||||
{
|
||||
PrintLine("Ok.");
|
||||
//PrintLine(message);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -46,11 +46,13 @@
|
||||
<HintPath>..\packages\MSTest.TestFramework.2.1.2\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Configuration" />
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="DakotaReaderUnitTest.cs" />
|
||||
<Compile Include="GkvObjectUnitTest.cs" />
|
||||
<Compile Include="GkvSumServer.cs" />
|
||||
<Compile Include="MailUnitTest.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
42
DakotaUnitTest/GkvSumServer.cs
Normal file
42
DakotaUnitTest/GkvSumServer.cs
Normal file
@@ -0,0 +1,42 @@
|
||||
using BS.Shared.AppSender;
|
||||
using BS.Shared.DataContracts.GkvAbrechnung;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DakotaUnitTest
|
||||
{
|
||||
[TestClass]
|
||||
public class GkvSumServer
|
||||
{
|
||||
[TestInitialize]
|
||||
public void Initialize()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void Test()
|
||||
{
|
||||
|
||||
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
|
||||
|
||||
var req = new GkvClientSumRequestJson();
|
||||
req.GkvSecretKey = "DfDGNGn72PKfSYxSUsmRdzuBtpR9novewlmYU3gsjiFgSkaZZeylUXlbO42cWNqiKgLdMUFtWUNZT962F1raQDR7HGUzCNYsFeC";
|
||||
req.Tenant = "9005111114";
|
||||
req.Start = new DateTime(2025, 1, 30);
|
||||
req.End = new DateTime(2025, 1, 30, 10, 0, 0);
|
||||
|
||||
var res = AppRequestSender.Send<GkvClientSumRequestJson, GkvClientSumResponseJson>(req, "https://app5.bewoplaner.de/service/GkvAbrechnungClient.aspx");
|
||||
|
||||
var test = res.Sum;
|
||||
|
||||
Assert.IsTrue(res.Success);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19,108 +19,108 @@ using NHibernate.Cfg;
|
||||
|
||||
namespace BeWo.Data
|
||||
{
|
||||
public class ASPHibernateSessionManager : IHttpModule
|
||||
{
|
||||
public void Dispose()
|
||||
{
|
||||
}
|
||||
public class ASPHibernateSessionManager : IHttpModule
|
||||
{
|
||||
public void Dispose()
|
||||
{
|
||||
}
|
||||
|
||||
public void Init(HttpApplication context)
|
||||
{
|
||||
context.AcquireRequestState += (s, e) =>
|
||||
{
|
||||
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
|
||||
public void Init(HttpApplication context)
|
||||
{
|
||||
context.AcquireRequestState += (s, e) =>
|
||||
{
|
||||
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
|
||||
|
||||
if(ShouldConfigureHibernateSession(context))
|
||||
{
|
||||
// TEST FOR DEVEXPRESS. PROBLEMS WITH THIS MODULE WHEN USING AJAX!
|
||||
if(HttpContext.Current.Session == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (ShouldConfigureHibernateSession(context))
|
||||
{
|
||||
// TEST FOR DEVEXPRESS. PROBLEMS WITH THIS MODULE WHEN USING AJAX!
|
||||
if (HttpContext.Current.Session == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
if(!ConfigureHibernateSession(context))
|
||||
{
|
||||
return;
|
||||
}
|
||||
// ---------------------------------------------------------------
|
||||
if (!ConfigureHibernateSession(context))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// throw new Exception("Could not configure database. No tenant parameter found");
|
||||
var userLoaded = TryAuthenticateWithRequestParams(context);
|
||||
// throw new Exception("Could not configure database. No tenant parameter found");
|
||||
var userLoaded = TryAuthenticateWithRequestParams(context);
|
||||
|
||||
if(!userLoaded)
|
||||
{
|
||||
userLoaded = TryAuthenticateWithLoginForm(context);
|
||||
}
|
||||
|
||||
if(!userLoaded)
|
||||
{
|
||||
userLoaded = TryAuthenticateWithGkv(context);
|
||||
}
|
||||
if (!userLoaded)
|
||||
{
|
||||
userLoaded = TryAuthenticateWithLoginForm(context);
|
||||
}
|
||||
|
||||
if(!userLoaded && !(SessionFacade.LoggedInUser?.Oid is null))
|
||||
{
|
||||
SessionFacade.LoggedInUser = DAOFactory.GenericDAO.LoadByID<ApplicationUser>(SessionFacade.LoggedInUser.Oid.Value);
|
||||
}
|
||||
}
|
||||
};
|
||||
if (!userLoaded)
|
||||
{
|
||||
userLoaded = TryAuthenticateWithGkv(context);
|
||||
}
|
||||
|
||||
context.EndRequest += (s, e) =>
|
||||
{
|
||||
if(HttpContext.Current.Items["hibernateSession"] != null)
|
||||
{
|
||||
((ISession) HttpContext.Current.Items["hibernateSession"]).Close();
|
||||
}
|
||||
};
|
||||
}
|
||||
if (!userLoaded && !(SessionFacade.LoggedInUser?.Oid is null))
|
||||
{
|
||||
SessionFacade.LoggedInUser = DAOFactory.GenericDAO.LoadByID<ApplicationUser>(SessionFacade.LoggedInUser.Oid.Value);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private static bool ShouldConfigureHibernateSession(HttpApplication context)
|
||||
{
|
||||
if (string.IsNullOrEmpty(context.Request.FilePath))
|
||||
return false;
|
||||
context.EndRequest += (s, e) =>
|
||||
{
|
||||
if (HttpContext.Current.Items["hibernateSession"] != null)
|
||||
{
|
||||
((ISession)HttpContext.Current.Items["hibernateSession"]).Close();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
if (context.Request.FilePath.IndexOf("GkvAbrechnungServer.aspx") >= 0)
|
||||
return false;
|
||||
private static bool ShouldConfigureHibernateSession(HttpApplication context)
|
||||
{
|
||||
if (string.IsNullOrEmpty(context.Request.FilePath))
|
||||
return false;
|
||||
|
||||
if (context.Request.FilePath.IndexOf("Admin.aspx") >= 0)
|
||||
return false;
|
||||
if (context.Request.FilePath.IndexOf("GkvAbrechnungServer.aspx") >= 0)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
if (context.Request.FilePath.IndexOf("Admin.aspx") >= 0)
|
||||
return false;
|
||||
|
||||
private static bool ConfigureHibernateSession(HttpApplication context)
|
||||
{
|
||||
var lTenant = GetTenant(context);
|
||||
|
||||
if(!string.IsNullOrEmpty(lTenant))
|
||||
{
|
||||
SessionFacade.Tenant = lTenant;
|
||||
}
|
||||
else
|
||||
{
|
||||
lTenant = SessionFacade.Tenant;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if(string.IsNullOrEmpty(lTenant))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var sessionFactory = new Configuration().Configure(context.Server.MapPath(@"Multitenancy\" + lTenant + ".config")).BuildSessionFactory();
|
||||
|
||||
XmlConfigurator.Configure();
|
||||
if(HttpContext.Current.Items.Contains("hibernateSession"))
|
||||
{
|
||||
HttpContext.Current.Items.Remove("hibernateSession");
|
||||
}
|
||||
private static bool ConfigureHibernateSession(HttpApplication context)
|
||||
{
|
||||
var lTenant = GetTenant(context);
|
||||
|
||||
HttpContext.Current.Items.Add("hibernateSession", sessionFactory.OpenSession());
|
||||
if (!string.IsNullOrEmpty(lTenant))
|
||||
{
|
||||
SessionFacade.Tenant = lTenant;
|
||||
}
|
||||
else
|
||||
{
|
||||
lTenant = SessionFacade.Tenant;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
if (string.IsNullOrEmpty(lTenant))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var sessionFactory = new Configuration().Configure(context.Server.MapPath(@"Multitenancy\" + lTenant + ".config")).BuildSessionFactory();
|
||||
|
||||
XmlConfigurator.Configure();
|
||||
if (HttpContext.Current.Items.Contains("hibernateSession"))
|
||||
{
|
||||
HttpContext.Current.Items.Remove("hibernateSession");
|
||||
}
|
||||
|
||||
HttpContext.Current.Items.Add("hibernateSession", sessionFactory.OpenSession());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static String GetTenant(HttpApplication context)
|
||||
{
|
||||
{
|
||||
var lTenant = String.Empty;
|
||||
|
||||
String token = context.Request.Params["token"];
|
||||
@@ -140,201 +140,198 @@ namespace BeWo.Data
|
||||
lTenant = context.Request.Params["k"];
|
||||
|
||||
return lTenant;
|
||||
}
|
||||
}
|
||||
|
||||
private static bool TryAuthenticateWithRequestParams(HttpApplication context)
|
||||
{
|
||||
string lUserName = null;
|
||||
string lPassword = null;
|
||||
private static bool TryAuthenticateWithRequestParams(HttpApplication context)
|
||||
{
|
||||
string lUserName = null;
|
||||
string lPassword = null;
|
||||
|
||||
//if (!context.Request.Params.AllKeys.Contains("tenant"))
|
||||
// return false;
|
||||
var lTenant = GetTenant(context);
|
||||
//if (!context.Request.Params.AllKeys.Contains("tenant"))
|
||||
// return false;
|
||||
var lTenant = GetTenant(context);
|
||||
|
||||
if (!string.IsNullOrEmpty(lTenant))
|
||||
{
|
||||
if (context.Request.Params.AllKeys.Contains("token"))
|
||||
{
|
||||
lUserName = GetLoginInfoFromToken(context.Request.Params["token"])["user"];
|
||||
lPassword = GetLoginInfoFromToken(context.Request.Params["token"])["password"];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
lUserName = context.Request.Params["username"];
|
||||
lPassword = context.Request.Params["token"];
|
||||
}
|
||||
|
||||
if (!BS.Shared.Core.Utils.IsAnyNullOrEmpty(lUserName, lPassword))
|
||||
{
|
||||
var ip = context.Request.UserHostAddress;
|
||||
|
||||
var lUser = DAOFactory.UserDAO.FindUserByLoginName(lUserName, ip);
|
||||
|
||||
if (lUser != null && lUser.CheckRC2Password(lPassword))
|
||||
{
|
||||
SessionFacade.LoggedInUser = lUser;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static bool TryAuthenticateWithLoginForm(HttpApplication context)
|
||||
{
|
||||
var name = context.Request.Params["ctl00$tb_login"];
|
||||
var password = context.Request.Params["ctl00$tb_password"];
|
||||
|
||||
if (!BS.Shared.Core.Utils.IsAnyNullOrEmpty(name, password))
|
||||
{
|
||||
ApplicationUser user = DAOFactory.UserDAO.FindUserByLoginName(name);
|
||||
|
||||
if (user != null && DAOFactory.UserDAO.CheckPassword(user, password))
|
||||
{
|
||||
SessionFacade.LoggedInUser = user;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static bool TryAuthenticateWithGkv(HttpApplication context)
|
||||
{
|
||||
if (context.Request.FilePath.IndexOf("GkvAbrechnungClient.aspx") == -1)
|
||||
return false;
|
||||
|
||||
// Eigene IP
|
||||
var clientip = GetIP(true);
|
||||
|
||||
// App 8 IP
|
||||
var appsettingip = System.Configuration.ConfigurationManager.AppSettings["App8IpAddress"];
|
||||
|
||||
// Summen Server
|
||||
var appsettingip2 = System.Configuration.ConfigurationManager.AppSettings["ServerSumIpAddress"];
|
||||
|
||||
if (appsettingip != clientip && appsettingip2 != clientip)
|
||||
return false;
|
||||
|
||||
if(appsettingip == clientip)
|
||||
if (!string.IsNullOrEmpty(lTenant))
|
||||
{
|
||||
var useroidstr = context.Request.Params["useroid"];
|
||||
|
||||
if (!long.TryParse(useroidstr, out long useroid))
|
||||
return false;
|
||||
|
||||
SessionFacade.LoggedInUser = DAOFactory.GenericDAO.LoadByID<ApplicationUser>(useroid);
|
||||
}
|
||||
if (context.Request.Params.AllKeys.Contains("token"))
|
||||
{
|
||||
lUserName = GetLoginInfoFromToken(context.Request.Params["token"])["user"];
|
||||
lPassword = GetLoginInfoFromToken(context.Request.Params["token"])["password"];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
SessionFacade.LoggedInUser = DAOFactory.UserDAO.GetBSUser("BSAdmin", "xyz");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
lUserName = context.Request.Params["username"];
|
||||
lPassword = context.Request.Params["token"];
|
||||
}
|
||||
|
||||
private static string GetIP(bool CheckForward = false)
|
||||
{
|
||||
// https://stackoverflow.com/a/13249280
|
||||
if (!BS.Shared.Core.Utils.IsAnyNullOrEmpty(lUserName, lPassword))
|
||||
{
|
||||
var ip = context.Request.UserHostAddress;
|
||||
|
||||
string ip = null;
|
||||
if (CheckForward)
|
||||
{
|
||||
ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
|
||||
}
|
||||
var lUser = DAOFactory.UserDAO.FindUserByLoginName(lUserName, ip);
|
||||
|
||||
if (string.IsNullOrEmpty(ip))
|
||||
{
|
||||
ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
|
||||
}
|
||||
else
|
||||
{ // Using X-Forwarded-For last address
|
||||
ip = ip.Split(',')
|
||||
.Last()
|
||||
.Trim();
|
||||
}
|
||||
if (lUser != null && lUser.CheckRC2Password(lPassword))
|
||||
{
|
||||
SessionFacade.LoggedInUser = lUser;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return ip;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static Dictionary<string, string> GetLoginInfoFromToken(string token)
|
||||
{
|
||||
if(string.IsNullOrWhiteSpace(token))
|
||||
{
|
||||
return new Dictionary<string, string>();
|
||||
}
|
||||
private static bool TryAuthenticateWithLoginForm(HttpApplication context)
|
||||
{
|
||||
var name = context.Request.Params["ctl00$tb_login"];
|
||||
var password = context.Request.Params["ctl00$tb_password"];
|
||||
|
||||
string decodedToken;
|
||||
if (!BS.Shared.Core.Utils.IsAnyNullOrEmpty(name, password))
|
||||
{
|
||||
ApplicationUser user = DAOFactory.UserDAO.FindUserByLoginName(name);
|
||||
|
||||
token = token.Replace(' ', '+');
|
||||
token = token.Trim(',');
|
||||
if (user != null && DAOFactory.UserDAO.CheckPassword(user, password))
|
||||
{
|
||||
SessionFacade.LoggedInUser = user;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
decodedToken = DecryptString(HttpUtility.UrlDecode(token));
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
decodedToken = DecryptString(token);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
if (decodedToken.Split(';')[2].Split('=')[0].Equals("myToken"))
|
||||
{
|
||||
var b = decodedToken.Split(';');
|
||||
private static bool TryAuthenticateWithGkv(HttpApplication context)
|
||||
{
|
||||
if (context.Request.FilePath.IndexOf("GkvAbrechnungClient.aspx") == -1)
|
||||
return false;
|
||||
|
||||
var a = DecryptString(new Regex(@"[\=]{1}").Split(b[2], 2)[1]);
|
||||
decodedToken += ";" + a;
|
||||
}
|
||||
if (!IsRequestIPValid("App8IpAddress"))
|
||||
return false;
|
||||
|
||||
var Params = decodedToken.Split(';');
|
||||
var useroidstr = context.Request.Params["useroid"];
|
||||
|
||||
return Params.Select(item => item.Split('=')).Where(a => a[0].Equals("tenant") || a[0].Equals("password") || a[0].Equals("user")).ToDictionary(a => a[0], a => a[1]);
|
||||
}
|
||||
if (!long.TryParse(useroidstr, out long useroid))
|
||||
return false;
|
||||
|
||||
private static string DecryptString(string strToDecrypt)
|
||||
{
|
||||
if(string.IsNullOrWhiteSpace(strToDecrypt))
|
||||
{
|
||||
return "Beim Decodieren ist leider ein Fehler aufgetreten.";
|
||||
}
|
||||
SessionFacade.LoggedInUser = DAOFactory.GenericDAO.LoadByID<ApplicationUser>(useroid);
|
||||
|
||||
strToDecrypt = strToDecrypt.Replace(' ', '+');
|
||||
return true;
|
||||
}
|
||||
|
||||
if(strToDecrypt.Contains(","))
|
||||
{
|
||||
strToDecrypt = strToDecrypt.Split(',')[0];
|
||||
}
|
||||
public static bool IsRequestIPValid(string appsetting)
|
||||
{
|
||||
var clientip = GetRequestIP(true);
|
||||
var appsettingip = System.Configuration.ConfigurationManager.AppSettings[appsetting];
|
||||
|
||||
byte[] _Rc2IV = { 35, 138, 177, 253, 227, 63, 2, 27 };
|
||||
byte[] _Rc2Key = { 174, 130, 219, 185, 185, 221, 96, 50, 37, 212, 81, 121, 71, 206, 130, 153 };
|
||||
var lRc2CSP = new RC2CryptoServiceProvider();
|
||||
var lDecryptor = lRc2CSP.CreateDecryptor(_Rc2Key, _Rc2IV);
|
||||
#if DEBUG
|
||||
if (clientip == "::1")
|
||||
return true;
|
||||
#endif
|
||||
|
||||
strToDecrypt = strToDecrypt.Replace(' ', '+');
|
||||
strToDecrypt = strToDecrypt.Trim(',');
|
||||
return clientip == appsettingip;
|
||||
}
|
||||
|
||||
using (var msDecrypt = new MemoryStream(Convert.FromBase64String(strToDecrypt)))
|
||||
{
|
||||
using (var csDecrypt = new CryptoStream(msDecrypt, lDecryptor, CryptoStreamMode.Read))
|
||||
{
|
||||
var bytes = new List<byte>();
|
||||
int b;
|
||||
private static string GetRequestIP(bool CheckForward = false)
|
||||
{
|
||||
// https://stackoverflow.com/a/13249280
|
||||
|
||||
do
|
||||
{
|
||||
b = csDecrypt.ReadByte();
|
||||
string ip = null;
|
||||
if (CheckForward)
|
||||
{
|
||||
ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
|
||||
}
|
||||
|
||||
if(b != -1)
|
||||
{
|
||||
bytes.Add(Convert.ToByte(b));
|
||||
}
|
||||
if (string.IsNullOrEmpty(ip))
|
||||
{
|
||||
ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
|
||||
}
|
||||
else
|
||||
{ // Using X-Forwarded-For last address
|
||||
ip = ip.Split(',')
|
||||
.Last()
|
||||
.Trim();
|
||||
}
|
||||
|
||||
} while (b != -1);
|
||||
return ip;
|
||||
}
|
||||
|
||||
return Encoding.UTF8.GetString(bytes.ToArray());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private static Dictionary<string, string> GetLoginInfoFromToken(string token)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(token))
|
||||
{
|
||||
return new Dictionary<string, string>();
|
||||
}
|
||||
|
||||
string decodedToken;
|
||||
|
||||
token = token.Replace(' ', '+');
|
||||
token = token.Trim(',');
|
||||
|
||||
try
|
||||
{
|
||||
decodedToken = DecryptString(HttpUtility.UrlDecode(token));
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
decodedToken = DecryptString(token);
|
||||
}
|
||||
|
||||
if (decodedToken.Split(';')[2].Split('=')[0].Equals("myToken"))
|
||||
{
|
||||
var b = decodedToken.Split(';');
|
||||
|
||||
var a = DecryptString(new Regex(@"[\=]{1}").Split(b[2], 2)[1]);
|
||||
decodedToken += ";" + a;
|
||||
}
|
||||
|
||||
var Params = decodedToken.Split(';');
|
||||
|
||||
return Params.Select(item => item.Split('=')).Where(a => a[0].Equals("tenant") || a[0].Equals("password") || a[0].Equals("user")).ToDictionary(a => a[0], a => a[1]);
|
||||
}
|
||||
|
||||
private static string DecryptString(string strToDecrypt)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(strToDecrypt))
|
||||
{
|
||||
return "Beim Decodieren ist leider ein Fehler aufgetreten.";
|
||||
}
|
||||
|
||||
strToDecrypt = strToDecrypt.Replace(' ', '+');
|
||||
|
||||
if (strToDecrypt.Contains(","))
|
||||
{
|
||||
strToDecrypt = strToDecrypt.Split(',')[0];
|
||||
}
|
||||
|
||||
byte[] _Rc2IV = { 35, 138, 177, 253, 227, 63, 2, 27 };
|
||||
byte[] _Rc2Key = { 174, 130, 219, 185, 185, 221, 96, 50, 37, 212, 81, 121, 71, 206, 130, 153 };
|
||||
var lRc2CSP = new RC2CryptoServiceProvider();
|
||||
var lDecryptor = lRc2CSP.CreateDecryptor(_Rc2Key, _Rc2IV);
|
||||
|
||||
strToDecrypt = strToDecrypt.Replace(' ', '+');
|
||||
strToDecrypt = strToDecrypt.Trim(',');
|
||||
|
||||
using (var msDecrypt = new MemoryStream(Convert.FromBase64String(strToDecrypt)))
|
||||
{
|
||||
using (var csDecrypt = new CryptoStream(msDecrypt, lDecryptor, CryptoStreamMode.Read))
|
||||
{
|
||||
var bytes = new List<byte>();
|
||||
int b;
|
||||
|
||||
do
|
||||
{
|
||||
b = csDecrypt.ReadByte();
|
||||
|
||||
if (b != -1)
|
||||
{
|
||||
bytes.Add(Convert.ToByte(b));
|
||||
}
|
||||
|
||||
} while (b != -1);
|
||||
|
||||
return Encoding.UTF8.GetString(bytes.ToArray());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,8 @@
|
||||
|
||||
private static GenericDAO _GenericDAO;
|
||||
|
||||
private static ScriptDAO _ScriptDAO;
|
||||
|
||||
private static SearchDAO _SearchDAO;
|
||||
|
||||
private static UserDAO _UserDAO;
|
||||
@@ -26,7 +28,15 @@
|
||||
}
|
||||
}
|
||||
|
||||
public static SearchDAO SearchDAO
|
||||
public static ScriptDAO ScriptDAO
|
||||
{
|
||||
get
|
||||
{
|
||||
return _ScriptDAO ?? (_ScriptDAO = new ScriptDAO());
|
||||
}
|
||||
}
|
||||
|
||||
public static SearchDAO SearchDAO
|
||||
{
|
||||
get
|
||||
{
|
||||
|
||||
45
Data/Access/ScriptDAO.cs
Normal file
45
Data/Access/ScriptDAO.cs
Normal file
@@ -0,0 +1,45 @@
|
||||
using BS.Shared;
|
||||
using DevExpress.XtraPrinting;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BeWo.Data.Access
|
||||
{
|
||||
public class ScriptDAO : AbstractBaseDAO
|
||||
{
|
||||
private string LoadSQLStatement(string statementName)
|
||||
{
|
||||
string sqlStatement = string.Empty;
|
||||
|
||||
string namespacePart = "BeWo.Data.Access.Scripts";
|
||||
string resourceName = namespacePart + "." + statementName;
|
||||
|
||||
using (Stream stm = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
|
||||
{
|
||||
if (stm != null)
|
||||
{
|
||||
sqlStatement = new StreamReader(stm).ReadToEnd();
|
||||
}
|
||||
}
|
||||
|
||||
return sqlStatement;
|
||||
}
|
||||
|
||||
public decimal? GetGkvSumByDateRange(DateTime? start, DateTime? end)
|
||||
{
|
||||
var sql = LoadSQLStatement("GetGkvSumByDateRange.sql");
|
||||
|
||||
var rtn = Session.CreateSQLQuery(sql)
|
||||
.SetParameter(0, start ?? DateTime.MinValue)
|
||||
.SetParameter(1, end ?? DateTime.MaxValue)
|
||||
.UniqueResult<decimal>();
|
||||
|
||||
return rtn;
|
||||
}
|
||||
}
|
||||
}
|
||||
12
Data/Access/Scripts/GetGkvSumByDateRange.sql
Normal file
12
Data/Access/Scripts/GetGkvSumByDateRange.sql
Normal file
@@ -0,0 +1,12 @@
|
||||
SELECT SUM(a1.Betrag)
|
||||
FROM gkvtransferprotokoll AS t1
|
||||
JOIN gkvabrechnung a1
|
||||
ON a1.Oid = t1.GkvAbrechnungOid
|
||||
WHERE DATE(t1.ErstelltAm) >= ?
|
||||
AND DATE(t1.ErstelltAm) <= ?
|
||||
AND t1.Oid = (
|
||||
SELECT MIN(Oid)
|
||||
FROM gkvtransferprotokoll AS t2
|
||||
WHERE t1.GkvAbrechnungOid = t2.GkvAbrechnungOid
|
||||
GROUP BY t2.GkvAbrechnungOid
|
||||
)
|
||||
@@ -27,6 +27,8 @@ using static System.String;
|
||||
using Appointment = BeWo.Data.Entities.Appointment;
|
||||
using Login = BeWo.Data.Entities.Login;
|
||||
using Resource = BeWo.Data.Entities.Resource;
|
||||
using System.Reflection;
|
||||
using System.IO;
|
||||
|
||||
namespace BeWo.Data.Access
|
||||
{
|
||||
@@ -6207,5 +6209,28 @@ WHERE sc.Billable = 1 and sr.StartDate >= '{0:yyyy-MM-dd}' and sr.StartDate < '{
|
||||
var q = Session.CreateSQLQuery(sql);
|
||||
return q.List<long>().First();
|
||||
}
|
||||
|
||||
public string GetGkvRawData(long oid, GkvRawDataType gkvRawData)
|
||||
{
|
||||
var criteria = CreateCriteria<GkvTransferProtokoll>()
|
||||
.Add(Restrictions.Where<GkvTransferProtokoll>(x => x.Oid == oid));
|
||||
|
||||
if(gkvRawData == GkvRawDataType.Auftragsdatei)
|
||||
{
|
||||
criteria = criteria.SetProjection(Projections.Property(nameof(GkvTransferProtokoll.Auftragsdatei)));
|
||||
}
|
||||
else if(gkvRawData == GkvRawDataType.Nutzdatendatei)
|
||||
{
|
||||
criteria = criteria.SetProjection(Projections.Property(nameof(GkvTransferProtokoll.Nutzdatendatei)));
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(nameof(gkvRawData), $"GkvRawDataType \'{gkvRawData}\' unbekannt.");
|
||||
}
|
||||
|
||||
var t = criteria.List<string>().SingleOrDefault();
|
||||
|
||||
return t;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,6 +46,8 @@
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
<NoWarn>
|
||||
</NoWarn>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
@@ -202,6 +204,7 @@
|
||||
<Compile Include="Access\AdoDAO.cs" />
|
||||
<Compile Include="Access\DAOFactory.cs" />
|
||||
<Compile Include="Access\GenericDAO.cs" />
|
||||
<Compile Include="Access\ScriptDAO.cs" />
|
||||
<Compile Include="Access\SearchDAO.cs" />
|
||||
<Compile Include="Access\UserDAO.cs" />
|
||||
<Compile Include="ASPHibernateSessionManager.cs" />
|
||||
@@ -699,6 +702,7 @@
|
||||
</BootstrapperPackage>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Access\Scripts\GetGkvSumByDateRange.sql" />
|
||||
<Content Include="ICD10\icd10.xml">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
|
||||
1
Host/AdminService.svc
Normal file
1
Host/AdminService.svc
Normal file
@@ -0,0 +1 @@
|
||||
<%@ ServiceHost Language="C#" Debug="true" Service="BeWo.Service.ServiceImplementations.AdminServiceImp" %>
|
||||
@@ -1,4 +1,5 @@
|
||||
using BeWo.Data.Access;
|
||||
using BeWo.Data;
|
||||
using BeWo.Data.Access;
|
||||
using BeWo.Data.Entities;
|
||||
using BeWo.Service.ServiceImplementations;
|
||||
using BS.Shared;
|
||||
@@ -7,6 +8,7 @@ using BS.Shared.DataContracts;
|
||||
using BS.Shared.DataContracts.GkvAbrechnung;
|
||||
using BS.Shared.Exceptions;
|
||||
using Newtonsoft.Json;
|
||||
using NHibernate.Dialect.Function;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
@@ -19,6 +21,13 @@ using System.Web.UI.WebControls;
|
||||
|
||||
namespace Host
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// Stellt einen Entpunkt für Clients dar.
|
||||
/// z.B. app2,app3,app4,...
|
||||
///
|
||||
///
|
||||
/// </summary>
|
||||
public partial class GkvAbrechnungClient : Page
|
||||
{
|
||||
private readonly string INVALID_INPUT = "Bad Request";
|
||||
@@ -74,15 +83,18 @@ namespace Host
|
||||
|
||||
private void ClientResult(GkvClientResultRequestDC req)
|
||||
{
|
||||
if (!SessionFacade.IsUserLoggedIn())
|
||||
SendErrorResponse(INVALID_INPUT + " 4");
|
||||
|
||||
if (req.ResultDCs is null || !req.ResultDCs.Any())
|
||||
SendInvalidInputResponse();
|
||||
SendErrorResponse(INVALID_INPUT + " 5");
|
||||
|
||||
// Response
|
||||
var response = new GkvResponseDC(false);
|
||||
|
||||
try
|
||||
{
|
||||
var service = new AccountingServiceImp();
|
||||
var service = new GkvAccountingServiceImp();
|
||||
|
||||
service.HandleGkvServerResults(req.ResultDCs);
|
||||
|
||||
@@ -102,30 +114,29 @@ namespace Host
|
||||
|
||||
private void ClientSum(GkvClientSumRequestJson req)
|
||||
{
|
||||
if (req.Tenant is null)
|
||||
SendInvalidInputResponse();
|
||||
|
||||
if (req.Start > req.End)
|
||||
SendInvalidInputResponse();
|
||||
SendErrorResponse(INVALID_INPUT + " 4");
|
||||
|
||||
if (!ASPHibernateSessionManager.IsRequestIPValid("GkvSumServerIPAdress"))
|
||||
SendErrorResponse(INVALID_INPUT + " 5");
|
||||
|
||||
// Response
|
||||
var response = new GkvClientSumResponseJson();
|
||||
|
||||
try
|
||||
{
|
||||
var service = new AccountingServiceImp();
|
||||
var sum = DAOFactory.ScriptDAO.GetGkvSumByDateRange(req.Start, req.End);
|
||||
|
||||
var invoices = service.GetCompactGkvAbrechnungByTransferDateRange(req.Start, req.End);
|
||||
|
||||
if(invoices is object && invoices.Count > 0)
|
||||
if(sum is decimal s)
|
||||
{
|
||||
response.CompactGkvAbrechnungen = invoices.ToArray();
|
||||
response.Success = true;
|
||||
response.Sum = s;
|
||||
}
|
||||
else
|
||||
{
|
||||
response.Message = "no records";
|
||||
response.Message = "sum is null";
|
||||
}
|
||||
|
||||
response.Success = true;
|
||||
}
|
||||
catch (GkvException e)
|
||||
{
|
||||
|
||||
@@ -18,6 +18,13 @@ using Page = System.Web.UI.Page;
|
||||
|
||||
namespace Host
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// Stellt einen Entpunkt für Server dar.
|
||||
/// Hier: app8
|
||||
///
|
||||
///
|
||||
/// </summary>
|
||||
public partial class GkvAbrechnungServer : Page
|
||||
{
|
||||
public const int PROCESS_WAITFOREXIT_MS = 10 * 1000;
|
||||
|
||||
1
Host/GkvAccountingService.svc
Normal file
1
Host/GkvAccountingService.svc
Normal file
@@ -0,0 +1 @@
|
||||
<%@ ServiceHost Language="C#" Debug="true" Service="BeWo.Service.ServiceImplementations.GkvAccountingServiceImp" %>
|
||||
@@ -168,6 +168,8 @@
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="AdminService.svc" />
|
||||
<Content Include="GkvAccountingService.svc" />
|
||||
<Content Include="Admin.aspx" />
|
||||
<Content Include="AnalysisService.svc" />
|
||||
<Content Include="Content\BeWoMobilTheme.min.css" />
|
||||
|
||||
@@ -113,25 +113,16 @@
|
||||
<requestLimits maxQueryString="65536" maxUrl="65536" />
|
||||
</requestFiltering>
|
||||
</security>
|
||||
<httpProtocol>
|
||||
<customHeaders>
|
||||
<add name="Access-Control-Allow-Origin" value="*" />
|
||||
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
|
||||
<add name="Access-Control-Allow-Headers" value="Content-Type" />
|
||||
</customHeaders>
|
||||
</httpProtocol>
|
||||
</system.webServer>
|
||||
|
||||
<system.serviceModel>
|
||||
<bindings>
|
||||
<basicHttpBinding>
|
||||
<binding name="TransportSecurity" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
|
||||
<security mode="None">
|
||||
<transport clientCredentialType="None" />
|
||||
</security>
|
||||
<readerQuotas maxStringContentLength="2147483647" />
|
||||
</binding>
|
||||
<binding name="TransportSecurityStreaming" maxBufferSize="65536" maxReceivedMessageSize="2147483647" messageEncoding="Text" transferMode="StreamedRequest">
|
||||
<security mode="None">
|
||||
<transport clientCredentialType="None" />
|
||||
</security>
|
||||
<readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" />
|
||||
</binding>
|
||||
</basicHttpBinding>
|
||||
</bindings>
|
||||
<system.serviceModel>
|
||||
<services>
|
||||
<service behaviorConfiguration="returnFaults" name="BeWo.Service.ServiceImplementations.EmployeeServiceImp">
|
||||
<endpoint behaviorConfiguration="SecurityAndSessionBehavior" binding="basicHttpBinding" bindingConfiguration="TransportSecurity" name="EmployeeServiceEndpoint" contract="BeWo.Service.ServiceContracts.IEmployeeService" />
|
||||
@@ -169,6 +160,9 @@
|
||||
<service behaviorConfiguration="returnFaults" name="BeWo.Service.ServiceImplementations.AccountingServiceImp">
|
||||
<endpoint behaviorConfiguration="SecurityAndSessionBehavior" binding="basicHttpBinding" bindingConfiguration="TransportSecurity" name="AccountingServiceEndpoint" contract="BeWo.Service.ServiceContracts.IAccountingService" />
|
||||
</service>
|
||||
<service behaviorConfiguration="returnFaults" name="BeWo.Service.ServiceImplementations.GkvAccountingServiceImp">
|
||||
<endpoint behaviorConfiguration="SecurityAndSessionBehavior" binding="basicHttpBinding" bindingConfiguration="TransportSecurity" name="GkvAccountingServiceEndpoint" contract="BeWo.Service.ServiceContracts.IGkvAccountingService" />
|
||||
</service>
|
||||
<service behaviorConfiguration="returnFaults" name="BeWo.Service.ServiceImplementations.MailServiceImp">
|
||||
<endpoint behaviorConfiguration="SecurityAndSessionBehavior" binding="basicHttpBinding" bindingConfiguration="TransportSecurity" name="MailServiceEndpoint" contract="BeWo.Service.ServiceContracts.IMailService" />
|
||||
</service>
|
||||
@@ -181,7 +175,34 @@
|
||||
<service behaviorConfiguration="returnFaults" name="BeWo.Service.ServiceImplementations.EnumTranslationServiceImp">
|
||||
<endpoint behaviorConfiguration="SecurityAndSessionBehavior" binding="basicHttpBinding" bindingConfiguration="TransportSecurity" name="EnumTranslationServiceEndpoint" contract="BeWo.Service.ServiceContracts.IEnumTranslationService" />
|
||||
</service>
|
||||
<service behaviorConfiguration="returnFaults" name="BeWo.Service.ServiceImplementations.AdminServiceImp">
|
||||
<endpoint behaviorConfiguration="webHttpBehaviorConfig" binding="webHttpBinding" bindingConfiguration="webHttpBindingConfig" name="AdminServiceEndpoint" contract="BeWo.Service.ServiceContracts.IAdminService" />
|
||||
</service>
|
||||
</services>
|
||||
<bindings>
|
||||
<basicHttpBinding>
|
||||
<binding name="TransportSecurity" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
|
||||
<security mode="None">
|
||||
<transport clientCredentialType="None" />
|
||||
</security>
|
||||
<readerQuotas maxStringContentLength="2147483647" />
|
||||
</binding>
|
||||
<binding name="TransportSecurityStreaming" maxBufferSize="65536" maxReceivedMessageSize="2147483647" messageEncoding="Text" transferMode="StreamedRequest">
|
||||
<security mode="None">
|
||||
<transport clientCredentialType="None" />
|
||||
</security>
|
||||
<readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" />
|
||||
</binding>
|
||||
</basicHttpBinding>
|
||||
<webHttpBinding>
|
||||
<binding name="webHttpBindingConfig">
|
||||
<!-- Optional: Maximale Nachrichten- und Puffergröße anpassen -->
|
||||
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
|
||||
<security mode="None" />
|
||||
<!-- Für ungesicherte Verbindungen (HTTP) -->
|
||||
</binding>
|
||||
</webHttpBinding>
|
||||
</bindings>
|
||||
<behaviors>
|
||||
<endpointBehaviors>
|
||||
<behavior name="SecurityBehavior">
|
||||
@@ -189,11 +210,19 @@
|
||||
<SecurityExtension />
|
||||
</behavior>
|
||||
<behavior name="SecurityAndSessionBehavior">
|
||||
<!--wichtig: erst Mulittenancy dann session dann security!-->
|
||||
<!--wichtig: Mulittenancy >>> Hibernate >>> Security(Permission)!-->
|
||||
<MultitenancyExtension />
|
||||
<HibernateSessionExtension />
|
||||
<SecurityExtension />
|
||||
</behavior>
|
||||
<behavior name="webHttpBehaviorConfig">
|
||||
<!--wichtig: Security(ip) >>> Multitenancy >>> Hibernate >>> JsonErrorExtension-->
|
||||
<AdminSecurityExtension />
|
||||
<AdminMultitenancyExtension />
|
||||
<AdminHibernateSessionExtension />
|
||||
<webHttp />
|
||||
<JsonErrorExtension/>
|
||||
</behavior>
|
||||
</endpointBehaviors>
|
||||
<serviceBehaviors>
|
||||
<behavior name="returnFaults">
|
||||
@@ -209,11 +238,20 @@
|
||||
<add name="MultitenancyExtension" type="BeWo.Service.Multitenancy.MultitenancyBehaviorExtension, BeWo.Service, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
|
||||
<add name="SecurityExtension" type="BeWo.Service.Security.SecurityBehaviorExtension, BeWo.Service, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
|
||||
<add name="HibernateSessionExtension" type="BeWo.Service.UnitOfWork.HibernateSessionBehaviorExtension, BeWo.Service, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
|
||||
<add name="AdminMultitenancyExtension" type="BeWo.Service.ServiceBehavior.AdminMultitenancyBehaviorExtension, BeWo.Service, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
|
||||
<add name="AdminSecurityExtension" type="BeWo.Service.ServiceBehavior.AdminSecurityBehaviorExtension, BeWo.Service, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
|
||||
<add name="AdminHibernateSessionExtension" type="BeWo.Service.ServiceBehavior.AdminHibernateBehaviorExtension, BeWo.Service, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
|
||||
<add name="JsonErrorExtension" type="BeWo.Service.ServiceBehavior.JsonError.JsonErrorBehaviorExtension, BeWo.Service, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
|
||||
</behaviorExtensions>
|
||||
</extensions>
|
||||
</system.serviceModel>
|
||||
<!-- <> <> <> Appsettings <> <> <> -->
|
||||
<appSettings>
|
||||
<add key="AdminServiceIPAddress" value="::1" />
|
||||
<add key="AdminServiceIPAddress2" value="::1" />
|
||||
<add key="AdminServiceAPIKey" value="HasteGedachteWa" />
|
||||
<add key="AdminServiceEnableStackTrace" value="true" />
|
||||
|
||||
<add key="SendMailOnError" value="false" />
|
||||
<add key="SmptServer" value="mail.ownsoft.de" />
|
||||
<add key="SmtpUser" value="bewoplaner.support@ownsoft.de" />
|
||||
@@ -245,7 +283,7 @@
|
||||
<add key="DakotaPath" value="C:\Program Files (x86)\ITSG\dakotale\dakota30.exe" />
|
||||
<add key="GkvSecretKey" value="DfDGNGn72PKfSYxSUsmRdzuBtpR9novewlmYU3gsjiFgSkaZZeylUXlbO42cWNqiKgLdMUFtWUNZT962F1raQDR7HGUzCNYsFeC" />
|
||||
<add key="App8IpAddress" value="88.198.50.220" />
|
||||
<add key="ServerSumIpAddress" value="88.198.50.220" />
|
||||
<add key="GkvSumServerIPAdress" value="88.198.50.220" />
|
||||
|
||||
<add key="SendMailModuleSmtpServer" value="mail.ownsoft.de" />
|
||||
<add key="SendMailModuleGkvEnabled" value="true" />
|
||||
|
||||
@@ -13,7 +13,29 @@ namespace BeWo.Service.DCEntityMapper
|
||||
{
|
||||
public class GkvAbrechnungDC_GkvAbrechnung : AbstractIDCEntityMapper<GkvAbrechnung, GkvAbrechnungDC>
|
||||
{
|
||||
public override GkvAbrechnungDC MergeWithDC(GkvAbrechnung pEntity, GkvAbrechnungDC pDataContract)
|
||||
public void ClearRawData(List<GkvAbrechnungDC> gkvAbrechnungen)
|
||||
{
|
||||
if ((!gkvAbrechnungen?.Any()) ?? true)
|
||||
return;
|
||||
|
||||
foreach (var gkvAbrechnung in gkvAbrechnungen)
|
||||
{
|
||||
ClearRawData(gkvAbrechnung);
|
||||
}
|
||||
}
|
||||
|
||||
public void ClearRawData(GkvAbrechnungDC gkvAbrechnung)
|
||||
{
|
||||
if ((!gkvAbrechnung.TransferProtokolle?.Any()) ?? true)
|
||||
return;
|
||||
|
||||
foreach (var protokoll in gkvAbrechnung.TransferProtokolle)
|
||||
{
|
||||
MapperFactory.GkvTransferProtokollDC_GkvTransferprotokoll.ClearRawData(protokoll);
|
||||
}
|
||||
}
|
||||
|
||||
public override GkvAbrechnungDC MergeWithDC(GkvAbrechnung pEntity, GkvAbrechnungDC pDataContract)
|
||||
{
|
||||
if(pEntity.InvoiceBases == null || !pEntity.InvoiceBases.Any())
|
||||
{
|
||||
|
||||
@@ -4,6 +4,7 @@ using BeWo.Data.Entities;
|
||||
using BS.Shared.DataContracts;
|
||||
using BS.Shared.DataContracts.GkvAbrechnung;
|
||||
using NHibernate.Linq;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
@@ -11,7 +12,13 @@ namespace BeWo.Service.DCEntityMapper
|
||||
{
|
||||
public class GkvTransferProtokollDC_GkvTransferprotokoll : AbstractIDCEntityMapper<GkvTransferProtokoll, GkvTransferProtokollDC>
|
||||
{
|
||||
public override GkvTransferProtokollDC MergeWithDC(GkvTransferProtokoll pEntity, GkvTransferProtokollDC pDataContract)
|
||||
public void ClearRawData(GkvTransferProtokollDC gkvTransfer)
|
||||
{
|
||||
gkvTransfer.Auftragsdatei = null;
|
||||
gkvTransfer.Nutzdatendatei = null;
|
||||
}
|
||||
|
||||
public override GkvTransferProtokollDC MergeWithDC(GkvTransferProtokoll pEntity, GkvTransferProtokollDC pDataContract)
|
||||
{
|
||||
pDataContract.IKDatenannahmestelle = pEntity.IKDatenannahmestelle;
|
||||
pDataContract.IKKrankenkasse = pEntity.IKKrankenkasse;
|
||||
@@ -49,7 +56,7 @@ namespace BeWo.Service.DCEntityMapper
|
||||
return pDataContract;
|
||||
}
|
||||
|
||||
public override GkvTransferProtokoll MergeWithEntity(GkvTransferProtokollDC pDataContract, GkvTransferProtokoll pEntity)
|
||||
public override GkvTransferProtokoll MergeWithEntity(GkvTransferProtokollDC pDataContract, GkvTransferProtokoll pEntity)
|
||||
{
|
||||
this.ConcurrencyCheck(pDataContract.GkvTransferProtokollVersion, pEntity);
|
||||
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Web;
|
||||
using System.Windows;
|
||||
using BeWo.Data;
|
||||
using BeWo.Data.Access;
|
||||
using BeWo.Data.Entities;
|
||||
using BS.Shared;
|
||||
using BS.Shared.DataContracts;
|
||||
|
||||
namespace BeWo.Service.Security
|
||||
{
|
||||
public class Method2Rights
|
||||
{
|
||||
|
||||
public static Dictionary<String, IList<UserRightType>> GetAuthorizedMethodDictionary()
|
||||
{
|
||||
var dict = new Dictionary<String, IList<UserRightType>>();
|
||||
|
||||
dict.Add("DeleteUserGroups", new UserRightType[] { UserRightType.UserGroupView_Delete });
|
||||
dict.Add("DeactivateUserGroup", new UserRightType[] { UserRightType.UserGroupView_Delete });
|
||||
dict.Add("UpdateUserGroup", new UserRightType[] { UserRightType.UserGroupView_Edit, UserRightType.EditAll });
|
||||
dict.Add("InsertNewUserGroup", new UserRightType[] { UserRightType.UserGroupView_Create });
|
||||
|
||||
dict.Add("InsertNewUser", new UserRightType[] { UserRightType.UserView_Create });
|
||||
dict.Add("DeactivateUser", new UserRightType[] { UserRightType.UserView_Delete });
|
||||
dict.Add("DeactivateUsers", new UserRightType[] { UserRightType.UserView_Delete });
|
||||
dict.Add("DeleteUsers", new UserRightType[] { UserRightType.UserView_Delete });
|
||||
dict.Add("DeleteUser", new UserRightType[] { UserRightType.UserView_Delete });
|
||||
dict.Add("UpdateUser", new UserRightType[] { UserRightType.UserView_Edit });
|
||||
|
||||
|
||||
|
||||
return dict;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Reflection;
|
||||
using System.Security;
|
||||
using System.ServiceModel;
|
||||
using System.ServiceModel.Channels;
|
||||
@@ -11,147 +12,157 @@ using BeWo.Data;
|
||||
using BeWo.Data.Access;
|
||||
using BeWo.Data.Entities;
|
||||
using BeWo.Service.Core;
|
||||
|
||||
using BeWo.Service.ServiceContracts;
|
||||
using BeWo.Service.ServiceUtils;
|
||||
using BS.Shared.Attributes;
|
||||
using BS.Shared.Extensions;
|
||||
using NHibernate.Hql.Ast.ANTLR.Tree;
|
||||
|
||||
namespace BeWo.Service.Security
|
||||
{
|
||||
public class SecurityContextInitializer : ICallContextInitializer
|
||||
{
|
||||
public void AfterInvoke(object pCorrelationState)
|
||||
{
|
||||
if (pCorrelationState is LoggedInUserOperationContextExt)
|
||||
{
|
||||
OperationContext.Current.Extensions.Remove((LoggedInUserOperationContextExt)pCorrelationState);
|
||||
}
|
||||
}
|
||||
public class SecurityContextInitializer : ICallContextInitializer
|
||||
{
|
||||
private readonly string[] ALLOW_ALWAYS = new string[]
|
||||
{
|
||||
//"Download",
|
||||
//"Download2",
|
||||
//"DownloadInfo",
|
||||
//"GetUpdatePlan",
|
||||
//"GetUpdateFile",
|
||||
"ResetAllTenants",
|
||||
"IsUserValid",
|
||||
"IsUserValidTwoFactor",
|
||||
"ResetTenant",
|
||||
"GetEmailForUserName",
|
||||
"GetTranslationDictionary",
|
||||
};
|
||||
|
||||
public object BeforeInvoke(InstanceContext pInstanceContext, IClientChannel pChannel, Message pMessage)
|
||||
{
|
||||
try
|
||||
{
|
||||
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
|
||||
private readonly string[] ALLOW_ONLY_WITH_LOGIN = new string[] {
|
||||
"LoadUserByNameAndPassword",
|
||||
"LoadUserByLoginName",
|
||||
"GetMandator",
|
||||
"LoadEmployee",
|
||||
"GetPersonsHavingBirthday",
|
||||
"GetLastLogins",
|
||||
"GetSupportConceptsWithConferenceDate",
|
||||
"GetExpiringSupportConcepts",
|
||||
"GetPublishedNewsItemsForEmployee",
|
||||
"GetAllActiveEmployeesCompact",
|
||||
"GetHomeViewPanels",
|
||||
"LoadCompactEmployee",
|
||||
"GetTranslationDictionary",
|
||||
"ConvertToNewSubstitutionType" };
|
||||
|
||||
var lTemp = pMessage.Headers.Action.Split("/");
|
||||
string lMethodName = lTemp[lTemp.Count - 1];
|
||||
string lServiceInterface = lTemp[lTemp.Count - 2];
|
||||
public void AfterInvoke(object pCorrelationState)
|
||||
{
|
||||
if (pCorrelationState is LoggedInUserOperationContextExt)
|
||||
{
|
||||
OperationContext.Current.Extensions.Remove((LoggedInUserOperationContextExt)pCorrelationState);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO Hier kann man jetzt etwas bauen wer sich für welchen service autorisieren muss...
|
||||
var skip = new string[] { "Download", "Download2", "DownloadInfo", "GetUpdatePlan", "GetUpdateFile", "ResetAllTenants" };
|
||||
if (lMethodName == "IsUserValid" || lMethodName == "IsUserValidTwoFactor" || lMethodName == "ResetTenant" || lMethodName == "ResetAllTenant" || lMethodName == "GetEmailForUserName" || lMethodName == "GetTranslationDictionary")
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else if (skip.Contains(lMethodName))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Vergessen neue Methode einzutragen?
|
||||
}
|
||||
public object BeforeInvoke(InstanceContext pInstanceContext, IClientChannel pChannel, Message pMessage)
|
||||
{
|
||||
try
|
||||
{
|
||||
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
|
||||
|
||||
string lUserName = null, lPassword = null;
|
||||
var lTemp = pMessage.Headers.Action.Split("/");
|
||||
string lMethodName = lTemp[lTemp.Count - 1];
|
||||
string lServiceInterface = lTemp[lTemp.Count - 2];
|
||||
|
||||
int lSecurityHeaderIndex = pMessage.Headers.FindHeader("Security", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
|
||||
// TODO Hier kann man jetzt etwas bauen wer sich für welchen service autorisieren muss...
|
||||
if (ALLOW_ALWAYS.Contains(lMethodName))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Vergessen neue Methode einzutragen?
|
||||
}
|
||||
|
||||
if (lSecurityHeaderIndex > -1)
|
||||
{
|
||||
XmlReader lReader = pMessage.Headers.GetReaderAtHeader(lSecurityHeaderIndex);
|
||||
string lUserName = null, lPassword = null;
|
||||
|
||||
if (lReader.ReadToFollowing("Username"))
|
||||
{
|
||||
lUserName = lReader.ReadString();
|
||||
}
|
||||
int lSecurityHeaderIndex = pMessage.Headers.FindHeader("Security", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
|
||||
|
||||
if (lReader.ReadToFollowing("Password"))
|
||||
{
|
||||
lPassword = lReader.ReadString();
|
||||
}
|
||||
if (lSecurityHeaderIndex > -1)
|
||||
{
|
||||
XmlReader lReader = pMessage.Headers.GetReaderAtHeader(lSecurityHeaderIndex);
|
||||
|
||||
ApplicationUser lUser = DAOFactory.UserDAO.FindUserByLoginName(lUserName);
|
||||
if (lReader.ReadToFollowing("Username"))
|
||||
{
|
||||
lUserName = lReader.ReadString();
|
||||
}
|
||||
|
||||
if (lUser != null && DAOFactory.UserDAO.CheckPassword(lUser, lPassword))
|
||||
{
|
||||
if (!HasMethodAuthorization(lUser, lMethodName))
|
||||
{
|
||||
throw new SecurityException("Methode nicht autorisiert: " + lMethodName);
|
||||
}
|
||||
|
||||
if (lReader.ReadToFollowing("Password"))
|
||||
{
|
||||
lPassword = lReader.ReadString();
|
||||
}
|
||||
|
||||
var lExt = new LoggedInUserOperationContextExt { User = lUser, LoginName = lUserName, UnhashedPassword = lPassword };
|
||||
OperationContext.Current.Extensions.Add(lExt);
|
||||
return lExt;
|
||||
}
|
||||
}
|
||||
ApplicationUser lUser = DAOFactory.UserDAO.FindUserByLoginName(lUserName);
|
||||
|
||||
throw new SecurityException("Nicht autorisiert");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw Utils.CreateBeWoFaultException(e);
|
||||
}
|
||||
}
|
||||
if (lUser != null && DAOFactory.UserDAO.CheckPassword(lUser, lPassword))
|
||||
{
|
||||
if (!HasMethodAuthorization(lUser, lMethodName, pMessage))
|
||||
{
|
||||
throw new SecurityException("Methode nicht autorisiert: " + lMethodName);
|
||||
}
|
||||
|
||||
private bool HasMethodAuthorization(ApplicationUser lUser, string methodName)
|
||||
{
|
||||
var alwaysAllowed = new string[]
|
||||
{
|
||||
"LoadUserByNameAndPassword", "LoadUserByLoginName", "GetMandator", "LoadEmployee",
|
||||
"GetPersonsHavingBirthday",
|
||||
"GetLastLogins",
|
||||
"GetSupportConceptsWithConferenceDate",
|
||||
"GetExpiringSupportConcepts",
|
||||
"GetPublishedNewsItemsForEmployee",
|
||||
"GetAllActiveEmployeesCompact",
|
||||
"GetHomeViewPanels",
|
||||
"LoadCompactEmployee",
|
||||
"GetTranslationDictionary",
|
||||
"ConvertToNewSubstitutionType"
|
||||
};
|
||||
var lExt = new LoggedInUserOperationContextExt { User = lUser, LoginName = lUserName, UnhashedPassword = lPassword };
|
||||
OperationContext.Current.Extensions.Add(lExt);
|
||||
return lExt;
|
||||
}
|
||||
}
|
||||
|
||||
if (alwaysAllowed.Contains(methodName))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
throw new SecurityException("Nicht autorisiert");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw Utils.CreateBeWoFaultException(e);
|
||||
}
|
||||
}
|
||||
|
||||
var rights = Utils.GetGrantedRights(lUser);
|
||||
var dict = Method2Rights.GetAuthorizedMethodDictionary();
|
||||
private bool HasMethodAuthorization(ApplicationUser pUser, string methodName, Message pMessage)
|
||||
{
|
||||
if (ALLOW_ONLY_WITH_LOGIN.Contains(methodName))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Vergessen neue Methode einzutragen?
|
||||
}
|
||||
|
||||
if (dict.ContainsKey(methodName))
|
||||
{
|
||||
bool allowed = false;
|
||||
var minimumRechte = dict[methodName];
|
||||
var rights = Utils.GetGrantedRights(pUser);
|
||||
|
||||
foreach (var right in minimumRechte)
|
||||
{
|
||||
if (rights.Contains(right))
|
||||
{
|
||||
allowed = true;
|
||||
}
|
||||
}
|
||||
// Finde Action
|
||||
var lTemp = pMessage.Headers.Action?.Split("/");
|
||||
|
||||
return allowed;
|
||||
}
|
||||
//var dict = Right2Methods.GetAuthorizedMethodDictionary();
|
||||
if (lTemp is null)
|
||||
lTemp = pMessage.Headers.To.Segments.ToList();
|
||||
|
||||
//foreach (var right in rights)
|
||||
//{
|
||||
if (lTemp is null)
|
||||
throw new ArgumentException("Kann Action nicht finden");
|
||||
|
||||
// if (dict.ContainsKey(right))
|
||||
// {
|
||||
// var names = dict[right];
|
||||
// if (names.Contains(methodName))
|
||||
// {
|
||||
// return true;
|
||||
// }
|
||||
// Extrahiere MethodeName + ServiceInterface
|
||||
string lMethodName = lTemp[lTemp.Count - 1].Trim('/');
|
||||
string lServiceInterface = lTemp[lTemp.Count - 2].Trim('/');
|
||||
|
||||
// return true;
|
||||
// }
|
||||
//}
|
||||
try
|
||||
{
|
||||
var attribute = ServiceHelper.GetCustomAttribute<RequirePermissionAttribute>(lServiceInterface, lMethodName);
|
||||
if (attribute != null)
|
||||
{
|
||||
return attribute.HasPermission(rights);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -191,6 +191,7 @@
|
||||
<Reference Include="System.ServiceModel">
|
||||
<RequiredTargetFramework>3.0</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="System.ServiceModel.Web" />
|
||||
<Reference Include="System.Text.Encoding.CodePages, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Text.Encoding.CodePages.5.0.0\lib\net461\System.Text.Encoding.CodePages.dll</HintPath>
|
||||
</Reference>
|
||||
@@ -472,16 +473,29 @@
|
||||
<Compile Include="Reporting\AnnualReportFactory.cs" />
|
||||
<Compile Include="SBD\VertretungsAlgorithmus.cs" />
|
||||
<Compile Include="SBD\VertretungsManager.cs" />
|
||||
<Compile Include="Security\Method2Rights.cs" />
|
||||
<Compile Include="Security\SecurityBehaviorExtension.cs" />
|
||||
<Compile Include="Security\SecurityEndpointBehavior.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Security\SecurityContextInitializer.cs" />
|
||||
<Compile Include="Security\Right2Methods.cs" />
|
||||
<Compile Include="Security\SecurityUtils.cs" />
|
||||
<Compile Include="ServiceBehavior\AdminHibernateBehavior.cs" />
|
||||
<Compile Include="ServiceBehavior\AdminHibernateBehaviorExtension.cs" />
|
||||
<Compile Include="ServiceBehavior\AdminHibernateContextInitializer.cs" />
|
||||
<Compile Include="ServiceBehavior\AdminMultitenancyBehavior.cs" />
|
||||
<Compile Include="ServiceBehavior\AdminMultitenancyBehaviorExtension.cs" />
|
||||
<Compile Include="ServiceBehavior\AdminMultitenancyContextInitializer.cs" />
|
||||
<Compile Include="ServiceBehavior\AdminSecurityBehavior.cs" />
|
||||
<Compile Include="ServiceBehavior\AdminSecurityBehaviorExtension.cs" />
|
||||
<Compile Include="ServiceBehavior\AdminServiceMessageInspector.cs" />
|
||||
<Compile Include="ServiceBehavior\JsonError\JsonErrorBehavior.cs" />
|
||||
<Compile Include="ServiceBehavior\JsonError\JsonErrorBehaviorExtension.cs" />
|
||||
<Compile Include="ServiceBehavior\JsonError\JsonErrorHandler.cs" />
|
||||
<Compile Include="ServiceContracts\BeWoFault.cs" />
|
||||
<Compile Include="ServiceContracts\IAccountingService.cs" />
|
||||
<Compile Include="ServiceContracts\IAdminService.cs" />
|
||||
<Compile Include="ServiceContracts\IAnalysisService.cs" />
|
||||
<Compile Include="ServiceContracts\IGkvAccountingService.cs" />
|
||||
<Compile Include="ServiceContracts\IMailService.cs" />
|
||||
<Compile Include="ServiceContracts\IOperationsService.cs" />
|
||||
<Compile Include="ServiceContracts\IDownloadService.cs" />
|
||||
@@ -492,7 +506,9 @@
|
||||
<Compile Include="ServiceContracts\IStreamingService.cs" />
|
||||
<Compile Include="ServiceContracts\IResourceService.cs" />
|
||||
<Compile Include="ServiceImplementations\AccountingServiceImp.cs" />
|
||||
<Compile Include="ServiceImplementations\AdminServiceImp.cs" />
|
||||
<Compile Include="ServiceImplementations\AnalysisServiceImp.cs" />
|
||||
<Compile Include="ServiceImplementations\GkvAccountingServiceImp.cs" />
|
||||
<Compile Include="ServiceImplementations\MailServiceImp.cs" />
|
||||
<Compile Include="ServiceImplementations\OperationsServiceImp.cs" />
|
||||
<Compile Include="ServiceImplementations\QueryServiceImp.cs" />
|
||||
@@ -513,6 +529,8 @@
|
||||
<Compile Include="ServiceUtils\DistanceCalculator\IDistanceAPI.cs" />
|
||||
<Compile Include="ServiceUtils\DistanceCalculator\OpenrouteServiceAPI.cs" />
|
||||
<Compile Include="ServiceUtils\ServiceTranslator.cs" />
|
||||
<Compile Include="ServiceUtils\ServiceHelper.cs" />
|
||||
<Compile Include="ServiceUtils\UriTemplateResolver.cs" />
|
||||
<Compile Include="UnitOfWork\HibernateSessionEndpointBehavior.cs" />
|
||||
<Compile Include="UnitOfWork\HibernateSessionBehaviorExtension.cs" />
|
||||
<Compile Include="UnitOfWork\HibernateSessionContextInitializer.cs" />
|
||||
|
||||
35
Service/ServiceBehavior/AdminHibernateBehavior.cs
Normal file
35
Service/ServiceBehavior/AdminHibernateBehavior.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
using BeWo.Service.UnitOfWork;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.ServiceModel.Channels;
|
||||
using System.ServiceModel.Description;
|
||||
using System.ServiceModel.Dispatcher;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BeWo.Service.ServiceBehavior
|
||||
{
|
||||
public class AdminHibernateBehavior : IEndpointBehavior
|
||||
{
|
||||
public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
|
||||
{
|
||||
}
|
||||
|
||||
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
|
||||
{
|
||||
}
|
||||
|
||||
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
|
||||
{
|
||||
foreach (DispatchOperation iOperation in endpointDispatcher.DispatchRuntime.Operations)
|
||||
{
|
||||
iOperation.CallContextInitializers.Add(new AdminHibernateContextInitializer());
|
||||
}
|
||||
}
|
||||
|
||||
public void Validate(ServiceEndpoint endpoint)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
20
Service/ServiceBehavior/AdminHibernateBehaviorExtension.cs
Normal file
20
Service/ServiceBehavior/AdminHibernateBehaviorExtension.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using BeWo.Service.UnitOfWork;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.ServiceModel.Configuration;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BeWo.Service.ServiceBehavior
|
||||
{
|
||||
public class AdminHibernateBehaviorExtension : BehaviorExtensionElement
|
||||
{
|
||||
public override Type BehaviorType => typeof(AdminHibernateBehavior);
|
||||
|
||||
protected override object CreateBehavior()
|
||||
{
|
||||
return new AdminHibernateBehavior();
|
||||
}
|
||||
}
|
||||
}
|
||||
49
Service/ServiceBehavior/AdminHibernateContextInitializer.cs
Normal file
49
Service/ServiceBehavior/AdminHibernateContextInitializer.cs
Normal file
@@ -0,0 +1,49 @@
|
||||
using BeWo.Data;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.ServiceModel;
|
||||
using System.ServiceModel.Channels;
|
||||
using System.ServiceModel.Dispatcher;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BeWo.Service.ServiceBehavior
|
||||
{
|
||||
public class AdminHibernateContextInitializer : ICallContextInitializer
|
||||
{
|
||||
public void AfterInvoke(object pCorrelationState)
|
||||
{
|
||||
if (pCorrelationState != null)
|
||||
{
|
||||
WCFHibernateSessionManager.CloseSession();
|
||||
OperationContext.Current.Extensions.Remove((SessionOperationContextExt)pCorrelationState);
|
||||
}
|
||||
}
|
||||
|
||||
public object BeforeInvoke(InstanceContext pInstanceContext, IClientChannel pChannel, Message pMessage)
|
||||
{
|
||||
if (MultitenancyOperationContextExt.Current?.Tenant is null)
|
||||
return null;
|
||||
|
||||
try
|
||||
{
|
||||
//System.Threading.Monitor.Enter
|
||||
SessionOperationContextExt lExt = new SessionOperationContextExt();
|
||||
//int c = OperationContext.Current.Extensions.Count;
|
||||
//if (c > 0)
|
||||
//{
|
||||
// int te st = 0;
|
||||
//}
|
||||
OperationContext.Current.Extensions.Add(lExt);
|
||||
WCFHibernateSessionManager.OpenSession();
|
||||
return lExt;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new FaultException(e.ToString());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
36
Service/ServiceBehavior/AdminMultitenancyBehavior.cs
Normal file
36
Service/ServiceBehavior/AdminMultitenancyBehavior.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
using BeWo.Service.Multitenancy;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.ServiceModel.Channels;
|
||||
using System.ServiceModel.Description;
|
||||
using System.ServiceModel.Dispatcher;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BeWo.Service.ServiceBehavior
|
||||
{
|
||||
public class AdminMultitenancyBehavior : IEndpointBehavior
|
||||
{
|
||||
public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
|
||||
{
|
||||
}
|
||||
|
||||
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
|
||||
{
|
||||
throw new NotImplementedException("This is a server behavior only");
|
||||
}
|
||||
|
||||
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
|
||||
{
|
||||
foreach (DispatchOperation iOperation in endpointDispatcher.DispatchRuntime.Operations)
|
||||
{
|
||||
iOperation.CallContextInitializers.Add(new AdminMultitenancyContextInitializer());
|
||||
}
|
||||
}
|
||||
|
||||
public void Validate(ServiceEndpoint endpoint)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.ServiceModel.Configuration;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BeWo.Service.ServiceBehavior
|
||||
{
|
||||
public class AdminMultitenancyBehaviorExtension : BehaviorExtensionElement
|
||||
{
|
||||
public override Type BehaviorType => typeof(AdminMultitenancyBehavior);
|
||||
|
||||
protected override object CreateBehavior()
|
||||
{
|
||||
return new AdminMultitenancyBehavior();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
using BeWo.Data;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.ServiceModel.Channels;
|
||||
using System.ServiceModel;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
using System.Xml;
|
||||
using System.ServiceModel.Dispatcher;
|
||||
using BeWo.Service.Core;
|
||||
using BS.Shared.Extensions;
|
||||
using BeWo.Service.ServiceUtils;
|
||||
using BS.Shared.Attributes;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
|
||||
|
||||
namespace BeWo.Service.ServiceBehavior
|
||||
{
|
||||
public class AdminMultitenancyContextInitializer : ICallContextInitializer
|
||||
{
|
||||
public void AfterInvoke(object pCorrelationState)
|
||||
{
|
||||
if (pCorrelationState is MultitenancyOperationContextExt)
|
||||
{
|
||||
OperationContext.Current.Extensions.Remove((MultitenancyOperationContextExt)pCorrelationState);
|
||||
}
|
||||
}
|
||||
|
||||
public object BeforeInvoke(InstanceContext pInstanceContext, IClientChannel pChannel, Message pMessage)
|
||||
{
|
||||
string lTenant = null;
|
||||
|
||||
// Hole Interface
|
||||
string lInterface = null;
|
||||
var segments = pChannel.LocalAddress.Uri.Segments;
|
||||
for (int i = 0; i < segments.Length; i++)
|
||||
{
|
||||
var seg = segments[i].Trim('/');
|
||||
|
||||
if (seg.EndsWith(".svc"))
|
||||
{
|
||||
lInterface = "I" + seg.Substring(0, seg.Length - 4);
|
||||
}
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(lInterface))
|
||||
{
|
||||
throw new ArgumentException($"Zugriff verweigert. Interface unbekannt");
|
||||
}
|
||||
|
||||
|
||||
// Hole Methode
|
||||
string lMethod = pMessage.Properties[WebHttpDispatchOperationSelector.HttpOperationNamePropertyName] as string;
|
||||
if (string.IsNullOrWhiteSpace(lMethod))
|
||||
{
|
||||
throw new ArgumentException($"Zugriff verweigert. Methode unbekannt");
|
||||
}
|
||||
|
||||
|
||||
// RequireNoTenant
|
||||
var lTemp = ServiceHelper.GetCustomAttribute<RequireNoTenantAttribute>(lInterface, lMethod);
|
||||
if (lTemp is object)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
// Hole tenant aus Query
|
||||
// Wird erstmal nicht benötigt. Per Header besser
|
||||
// Ungefähr auf einem Level wie Username
|
||||
//if (pMessage.Properties?.Via is Uri uri)
|
||||
//{
|
||||
// var query = HttpUtility.ParseQueryString(uri.Query);
|
||||
// var tenant = query["tenant"];
|
||||
|
||||
// lTenant = tenant;
|
||||
//}
|
||||
|
||||
// Hole tenant aus Header
|
||||
if (string.IsNullOrWhiteSpace(lTenant))
|
||||
{
|
||||
var prop = (HttpRequestMessageProperty)pMessage.Properties[HttpRequestMessageProperty.Name];
|
||||
lTenant = prop?.Headers["tenant"];
|
||||
}
|
||||
|
||||
// Wenn kein Tenant gefunden wird,
|
||||
if (string.IsNullOrWhiteSpace(lTenant))
|
||||
{
|
||||
throw new ArgumentException($"Zugriff verweigert. Tenant (\'{lTenant}\') darf nicht leer sein.", nameof(lTenant));
|
||||
}
|
||||
|
||||
var lExt = new MultitenancyOperationContextExt { Tenant = lTenant };
|
||||
OperationContext.Current.Extensions.Add(lExt);
|
||||
return lExt;
|
||||
}
|
||||
}
|
||||
}
|
||||
39
Service/ServiceBehavior/AdminSecurityBehavior.cs
Normal file
39
Service/ServiceBehavior/AdminSecurityBehavior.cs
Normal file
@@ -0,0 +1,39 @@
|
||||
using BeWo.Data;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Configuration;
|
||||
using System.Linq;
|
||||
using System.ServiceModel;
|
||||
using System.ServiceModel.Channels;
|
||||
using System.ServiceModel.Description;
|
||||
using System.ServiceModel.Dispatcher;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BeWo.Service.ServiceBehavior
|
||||
{
|
||||
public class AdminSecurityBehavior : IEndpointBehavior
|
||||
{
|
||||
public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
|
||||
{
|
||||
// Keine zusätzlichen Bindungsparameter erforderlich
|
||||
}
|
||||
|
||||
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
|
||||
{
|
||||
// Verhalten für Clients - hier nicht benötigt
|
||||
}
|
||||
|
||||
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
|
||||
{
|
||||
// Füge einen Message Inspector hinzu, um eingehende Requests zu überprüfen
|
||||
endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new AdminServiceMessageInspector());
|
||||
}
|
||||
|
||||
public void Validate(ServiceEndpoint endpoint)
|
||||
{
|
||||
// Optional: Endpunktvalidierung (falls erforderlich)
|
||||
}
|
||||
}
|
||||
}
|
||||
15
Service/ServiceBehavior/AdminSecurityBehaviorExtension.cs
Normal file
15
Service/ServiceBehavior/AdminSecurityBehaviorExtension.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.ServiceModel.Configuration;
|
||||
|
||||
namespace BeWo.Service.ServiceBehavior
|
||||
{
|
||||
public class AdminSecurityBehaviorExtension : BehaviorExtensionElement
|
||||
{
|
||||
public override Type BehaviorType => typeof(AdminSecurityBehavior);
|
||||
|
||||
protected override object CreateBehavior()
|
||||
{
|
||||
return new AdminSecurityBehavior();
|
||||
}
|
||||
}
|
||||
}
|
||||
57
Service/ServiceBehavior/AdminServiceMessageInspector.cs
Normal file
57
Service/ServiceBehavior/AdminServiceMessageInspector.cs
Normal file
@@ -0,0 +1,57 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Linq;
|
||||
using System.ServiceModel.Channels;
|
||||
using System.ServiceModel.Dispatcher;
|
||||
using System.ServiceModel;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using BeWo.Data;
|
||||
|
||||
namespace BeWo.Service.ServiceBehavior
|
||||
{
|
||||
public class AdminServiceMessageInspector : IDispatchMessageInspector
|
||||
{
|
||||
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
|
||||
{
|
||||
// Hole die erlaubte IP aus den appSettings
|
||||
string allowedIP = ConfigurationManager.AppSettings["AdminServiceIPAddress"];
|
||||
string allowedIP2 = ConfigurationManager.AppSettings["AdminServiceIPAddress2"];
|
||||
|
||||
// Extrahiere die RemoteEndpoint-IP-Adresse
|
||||
string remoteIP = request.Properties.ContainsKey(RemoteEndpointMessageProperty.Name)
|
||||
? ((RemoteEndpointMessageProperty)request.Properties[RemoteEndpointMessageProperty.Name]).Address
|
||||
: null;
|
||||
|
||||
var allowed = string.Equals(remoteIP, allowedIP, StringComparison.OrdinalIgnoreCase);
|
||||
var allowed2 = string.Equals(remoteIP, allowedIP2, StringComparison.OrdinalIgnoreCase);
|
||||
|
||||
// Vergleiche die IPs
|
||||
if (remoteIP == null || !(allowed || allowed2))
|
||||
{
|
||||
throw new UnauthorizedAccessException($"Zugriff verweigert. Remote IP ({remoteIP ?? "Unbekannt"}) ist nicht erlaubt.");
|
||||
}
|
||||
|
||||
// Hole erlaubten API Key aus den appSettings
|
||||
string allowedApikey = ConfigurationManager.AppSettings["AdminServiceAPIKey"];
|
||||
|
||||
// Extrahiert den API Key von Remote
|
||||
var prop = (HttpRequestMessageProperty)request.Properties[HttpRequestMessageProperty.Name];
|
||||
var remoteApikey = prop?.Headers["admin-service-api-key"];
|
||||
|
||||
// Vergleicht die API Keys
|
||||
if(remoteApikey == null || !string.Equals(remoteApikey, allowedApikey, StringComparison.Ordinal))
|
||||
{
|
||||
throw new UnauthorizedAccessException($"Zugriff verweigert. API Key ({remoteApikey ?? "Unbekannt"}) ist nicht erlaubt.");
|
||||
}
|
||||
|
||||
return null; // Keine Zustandsinformationen erforderlich
|
||||
}
|
||||
|
||||
public void BeforeSendReply(ref Message reply, object correlationState)
|
||||
{
|
||||
// Keine zusätzliche Logik erforderlich vor dem Senden der Antwort
|
||||
}
|
||||
}
|
||||
}
|
||||
32
Service/ServiceBehavior/JsonError/JsonErrorBehavior.cs
Normal file
32
Service/ServiceBehavior/JsonError/JsonErrorBehavior.cs
Normal file
@@ -0,0 +1,32 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.ServiceModel;
|
||||
using System.ServiceModel.Channels;
|
||||
using System.ServiceModel.Description;
|
||||
using System.ServiceModel.Dispatcher;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BeWo.Service.ServiceBehavior.JsonError
|
||||
{
|
||||
internal class JsonErrorBehavior : IEndpointBehavior
|
||||
{
|
||||
public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
|
||||
{
|
||||
}
|
||||
|
||||
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
|
||||
{
|
||||
}
|
||||
|
||||
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
|
||||
{
|
||||
endpointDispatcher.ChannelDispatcher.ErrorHandlers.Add(new JsonErrorHandler());
|
||||
}
|
||||
|
||||
public void Validate(ServiceEndpoint endpoint)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.ServiceModel.Configuration;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BeWo.Service.ServiceBehavior.JsonError
|
||||
{
|
||||
public class JsonErrorBehaviorExtension : BehaviorExtensionElement
|
||||
{
|
||||
public override Type BehaviorType => typeof(JsonErrorBehavior);
|
||||
|
||||
protected override object CreateBehavior()
|
||||
{
|
||||
return new JsonErrorBehavior();
|
||||
}
|
||||
}
|
||||
}
|
||||
100
Service/ServiceBehavior/JsonError/JsonErrorHandler.cs
Normal file
100
Service/ServiceBehavior/JsonError/JsonErrorHandler.cs
Normal file
@@ -0,0 +1,100 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Runtime.Serialization.Json;
|
||||
using System.ServiceModel.Channels;
|
||||
using System.ServiceModel.Dispatcher;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml;
|
||||
|
||||
namespace BeWo.Service.ServiceBehavior.JsonError
|
||||
{
|
||||
[DataContract]
|
||||
public class JsonError
|
||||
{
|
||||
[DataMember]
|
||||
public string Message { get; set; }
|
||||
|
||||
[DataMember]
|
||||
public string StackTrace { get; set; }
|
||||
|
||||
[DataMember]
|
||||
public string ExceptionType { get; set; }
|
||||
}
|
||||
|
||||
public class JsonErrorHandler : IErrorHandler
|
||||
{
|
||||
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
|
||||
{
|
||||
// Erstelle eine JSON-Fehlermeldung
|
||||
var jsonError = new JsonError
|
||||
{
|
||||
Message = error.Message,
|
||||
ExceptionType = error.GetType().Name
|
||||
};
|
||||
|
||||
// Fügt StackTrace hinzu (AppSettings)
|
||||
string val = ConfigurationManager.AppSettings["AdminServiceEnableStackTrace"];
|
||||
if(bool.TryParse(val, out bool res) && res)
|
||||
{
|
||||
jsonError.StackTrace = error.StackTrace;
|
||||
}
|
||||
|
||||
// Serialisiere das JSON-Objekt
|
||||
var serializer = new DataContractJsonSerializer(typeof(JsonError));
|
||||
using (var stream = new MemoryStream())
|
||||
{
|
||||
serializer.WriteObject(stream, jsonError);
|
||||
stream.Position = 0;
|
||||
using (var reader = new StreamReader(stream))
|
||||
{
|
||||
string jsonString = reader.ReadToEnd();
|
||||
fault = Message.CreateMessage(version, null, new JsonBodyWriter(jsonString));
|
||||
}
|
||||
}
|
||||
|
||||
// Setze den Content-Type auf application/json
|
||||
var webBodyFormat = WebBodyFormatMessageProperty.Name;
|
||||
if (!fault.Properties.ContainsKey(webBodyFormat))
|
||||
{
|
||||
fault.Properties.Add(webBodyFormat, new WebBodyFormatMessageProperty(WebContentFormat.Raw));
|
||||
}
|
||||
|
||||
var httpResponse = new HttpResponseMessageProperty
|
||||
{
|
||||
StatusCode = System.Net.HttpStatusCode.InternalServerError,
|
||||
StatusDescription = "Internal Server Error",
|
||||
};
|
||||
httpResponse.Headers["Content-Type"] = "application/json";
|
||||
fault.Properties.Add(HttpResponseMessageProperty.Name, httpResponse);
|
||||
}
|
||||
|
||||
public bool HandleError(Exception error)
|
||||
{
|
||||
// Gib an, ob der Fehler behandelt wurde
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public class JsonBodyWriter : BodyWriter
|
||||
{
|
||||
private readonly string _json;
|
||||
|
||||
public JsonBodyWriter(string json) : base(true)
|
||||
{
|
||||
_json = json;
|
||||
}
|
||||
|
||||
protected override void OnWriteBodyContents(System.Xml.XmlDictionaryWriter writer)
|
||||
{
|
||||
writer.WriteStartElement("Binary");
|
||||
byte[] jsonBytes = Encoding.UTF8.GetBytes(_json);
|
||||
writer.WriteBase64(jsonBytes, 0, jsonBytes.Length);
|
||||
writer.WriteEndElement();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -140,37 +140,5 @@ namespace BeWo.Service.ServiceContracts
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
void StorniereInvoiceBases(List<InvoiceBaseDC> invoices);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
GkvAbrechnungDC GetGkvAbrechnung(long oid);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
List<GkvAbrechnungDC> GetAllGkvAbrechnungen();
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
List<GkvAbrechnungDC> GetFilteredGkvAbrechnungen(GkvAbrechnungViewFilterDC gkvAbrechnungViewFilter);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
GkvAbrechnungCreateResponseDC CreateNewGkvAbrechnung(GkvAbrechnungCreateRequestDC request);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
GkvAbrechnungDC UpdateGkvAbrechnung(GkvAbrechnungDC abrechnung);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
void DeleteGkvAbrechnung(GkvAbrechnungDC abrechnung);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
GkvAbrechnungSendResponseDC SendNewGkvAbrechnung(GkvAbrechnungSendRequestDC req);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
GkvAbrechnungGetIKResponseDC SendGetIKRequest(GkvAbrechnungGetIKRequestDC req);
|
||||
}
|
||||
}
|
||||
30
Service/ServiceContracts/IAdminService.cs
Normal file
30
Service/ServiceContracts/IAdminService.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
using BS.Shared.Attributes;
|
||||
using BS.Shared.DataContracts.AdminService;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.ServiceModel;
|
||||
using System.ServiceModel.Web;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BeWo.Service.ServiceContracts
|
||||
{
|
||||
[ServiceContract]
|
||||
public interface IAdminService
|
||||
{
|
||||
[OperationContract]
|
||||
[WebGet(UriTemplate = "/Test", ResponseFormat = WebMessageFormat.Json)]
|
||||
[RequireNoTenant]
|
||||
string Test();
|
||||
|
||||
[OperationContract]
|
||||
[WebInvoke(UriTemplate = "/Echo/{echo}", Method ="POST", ResponseFormat = WebMessageFormat.Json)]
|
||||
[RequireNoTenant]
|
||||
string Echo(string echo);
|
||||
|
||||
[OperationContract]
|
||||
[WebInvoke(UriTemplate = "/GetGkvSum", Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
|
||||
object GetGkvAbrechnungSumme(AdminServiceSumReqDC request);
|
||||
}
|
||||
}
|
||||
63
Service/ServiceContracts/IGkvAccountingService.cs
Normal file
63
Service/ServiceContracts/IGkvAccountingService.cs
Normal file
@@ -0,0 +1,63 @@
|
||||
using BS.Shared;
|
||||
using BS.Shared.Attributes;
|
||||
using BS.Shared.DataContracts.GkvAbrechnung;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.ServiceModel;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BeWo.Service.ServiceContracts
|
||||
{
|
||||
[ServiceContract]
|
||||
public interface IGkvAccountingService
|
||||
{
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
[RequirePermission(UserRightType.Finance_Gkv_View)]
|
||||
GkvAbrechnungDC GetGkvAbrechnung(long oid);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
[RequirePermission(UserRightType.Finance_Gkv_View)]
|
||||
List<GkvAbrechnungDC> GetAllGkvAbrechnungen();
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
[RequirePermission(UserRightType.Finance_Gkv_View)]
|
||||
List<GkvAbrechnungDC> GetFilteredGkvAbrechnungen(GkvAbrechnungViewFilterDC gkvAbrechnungViewFilter);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
[RequirePermission(UserRightType.Finance_Gkv_View)]
|
||||
string GetProtokollRawDataString(long oid, GkvRawDataType gkvRawData);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
[RequirePermission(UserRightType.Finance_Gkv_Create)]
|
||||
GkvAbrechnungCreateResponseDC CreateNewGkvAbrechnung(GkvAbrechnungCreateRequestDC request);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
[RequirePermission(UserRightType.Finance_Gkv_Create)]
|
||||
GkvAbrechnungDC UpdateGkvAbrechnung(GkvAbrechnungDC abrechnung);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
[RequirePermission(UserRightType.Finance_Gkv_Delete)]
|
||||
void DeleteGkvAbrechnung(GkvAbrechnungDC abrechnung);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
[RequirePermission(UserRightType.Finance_Gkv_Send)]
|
||||
GkvAbrechnungSendResponseDC SendNewGkvAbrechnung(GkvAbrechnungSendRequestDC req);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
[RequirePermission(UserRightType.Finance_Gkv_View)]
|
||||
GkvAbrechnungGetIKResponseDC SendGetIKRequest(GkvAbrechnungGetIKRequestDC req);
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ using BeWo.Data.Entities;
|
||||
using BS.Shared.DataContracts;
|
||||
using BS.Shared.DataContracts.Compact;
|
||||
using BS.Shared;
|
||||
using BS.Shared.Attributes;
|
||||
|
||||
namespace BeWo.Service.ServiceContracts
|
||||
{
|
||||
@@ -21,31 +22,38 @@ namespace BeWo.Service.ServiceContracts
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
[RequirePermission(UserRightType.UserView_Delete)]
|
||||
void DeactivateUser(long pOid, long pVersion);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
[RequirePermission(UserRightType.UserGroupView_Delete)]
|
||||
void DeactivateUserGroup(long pOid, long pVersion);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
void DeactivateUsers(Dictionary<long, long> pOid2Version);
|
||||
[RequirePermission(UserRightType.UserView_Delete)]
|
||||
void DeactivateUsers(Dictionary<long, long> pOid2Version);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
void DeleteUser(long pOid, long pVersion);
|
||||
[RequirePermission(UserRightType.UserView_Delete)]
|
||||
void DeleteUser(long pOid, long pVersion);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
void DeleteUserGroup(long pOid, long pVersion);
|
||||
[RequirePermission(UserRightType.UserGroupView_Delete)]
|
||||
void DeleteUserGroup(long pOid, long pVersion);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
[RequirePermission(UserRightType.UserGroupView_Delete)]
|
||||
void DeleteUserGroups(Dictionary<long, long> pOid2Version);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
void DeleteUsers(Dictionary<long, long> pOid2Version);
|
||||
[RequirePermission(UserRightType.UserView_Delete)]
|
||||
void DeleteUsers(Dictionary<long, long> pOid2Version);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
@@ -69,10 +77,12 @@ namespace BeWo.Service.ServiceContracts
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
long InsertNewUser(UserDC pUser);
|
||||
[RequirePermission(UserRightType.UserGroupView_Create)]
|
||||
long InsertNewUser(UserDC pUser);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
[RequirePermission(UserRightType.UserGroupView_Create)]
|
||||
long InsertNewUserGroup(UserGroupDC pUserGroup);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
@@ -105,6 +115,7 @@ namespace BeWo.Service.ServiceContracts
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
[RequirePermission(UserRightType.UserGroupView_Edit, UserRightType.EditAll)]
|
||||
long UpdateUserGroup(UserGroupDC pUserGroup);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
|
||||
@@ -745,628 +745,5 @@ namespace BeWo.Service.ServiceImplementations
|
||||
throw Utils.CreateBeWoFaultException(e);
|
||||
}
|
||||
}
|
||||
|
||||
#region GKV
|
||||
public GkvAbrechnungDC GetGkvAbrechnung(long oid)
|
||||
{
|
||||
try
|
||||
{
|
||||
var gkv = DAOFactory.GenericDAO.GetByID<GkvAbrechnung>(oid);
|
||||
|
||||
var dc = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(gkv);
|
||||
|
||||
return dc;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw Utils.CreateBeWoFaultException(e);
|
||||
}
|
||||
}
|
||||
public List<GkvAbrechnungDC> GetFilteredGkvAbrechnungen(GkvAbrechnungViewFilterDC gkvAbrechnungViewFilter)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (gkvAbrechnungViewFilter == null || !gkvAbrechnungViewFilter.FilterTime)
|
||||
return GetAllGkvAbrechnungen();
|
||||
|
||||
var start = gkvAbrechnungViewFilter.Start;
|
||||
var end = gkvAbrechnungViewFilter.End;
|
||||
var filter = gkvAbrechnungViewFilter.FilterForInvoiceDate;
|
||||
|
||||
return GetGkvAbrechnungen(() => DAOFactory.SearchDAO.GetGkvAbrechnungen(start, end, filter));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw Utils.CreateBeWoFaultException(e);
|
||||
}
|
||||
}
|
||||
public List<GkvAbrechnungDC> GetAllGkvAbrechnungen()
|
||||
{
|
||||
try
|
||||
{
|
||||
return GetGkvAbrechnungen(() => DAOFactory.GenericDAO.GetAllActive<GkvAbrechnung>());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw Utils.CreateBeWoFaultException(e);
|
||||
}
|
||||
}
|
||||
private List<GkvAbrechnungDC> GetGkvAbrechnungen(Func<IEnumerable<GkvAbrechnung>> get_entities)
|
||||
{
|
||||
var entities = get_entities();
|
||||
|
||||
var dcs = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDCs(entities);
|
||||
|
||||
var updateables = dcs.Where(x => x.IsWaiting()).ToArray();
|
||||
|
||||
if (!updateables.Any())
|
||||
return dcs;
|
||||
|
||||
var isUpToDate = SendApp8GetStatusRequest(updateables);
|
||||
|
||||
if (isUpToDate)
|
||||
return dcs;
|
||||
|
||||
entities = get_entities();
|
||||
|
||||
dcs = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDCs(entities);
|
||||
|
||||
return dcs;
|
||||
}
|
||||
public List<CompactGkvAbrechnungDC> GetCompactGkvAbrechnungByTransferDateRange(DateTime? start, DateTime? end)
|
||||
{
|
||||
try
|
||||
{
|
||||
var entities = DAOFactory.SearchDAO.GetGkvTransferProtokollByDateRange(start, end);
|
||||
|
||||
var filter = entities.Where(x => x.SentDakotaSuccess);
|
||||
|
||||
var oids = filter.Select(x => x.GkvAbrechnungOid).Distinct();
|
||||
|
||||
if (!oids.Any())
|
||||
return null;
|
||||
|
||||
var list = new List<GkvAbrechnung>();
|
||||
|
||||
foreach (var oid in oids)
|
||||
{
|
||||
var abrechnung = DAOFactory.GenericDAO.LoadByID<GkvAbrechnung>(oid);
|
||||
list.Add(abrechnung);
|
||||
}
|
||||
|
||||
return MapperFactory.CompactGkvAbrechnungDC_GkvAbrechnung.MapToNewDCs(list);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw Utils.CreateBeWoFaultException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public GkvAbrechnungCreateResponseDC CreateNewGkvAbrechnung(GkvAbrechnungCreateRequestDC request)
|
||||
{
|
||||
var response = new GkvAbrechnungCreateResponseDC();
|
||||
|
||||
try
|
||||
{
|
||||
var invoice_bases = DAOFactory.GenericDAO.LoadByIDs<InvoiceBase>(request.SelectedInvoiceBases);
|
||||
|
||||
ValidatorExtended.ValidateGkvAbrechnung(request.GkvAbrechnungDC, invoice_bases);
|
||||
|
||||
var gkv_abrechnung = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewEntity(request.GkvAbrechnungDC);
|
||||
|
||||
if (gkv_abrechnung.AbrechnungsZeitraumEnde.Value.Hour == 0)
|
||||
{
|
||||
gkv_abrechnung.AbrechnungsZeitraumEnde = gkv_abrechnung.AbrechnungsZeitraumEnde.Value.Date.AddDays(1).AddMilliseconds(-1);
|
||||
}
|
||||
|
||||
var orga = gkv_abrechnung.Organisation;
|
||||
|
||||
gkv_abrechnung.Verfahrensstufe = orga.Verfahrensstufe;
|
||||
|
||||
decimal gesamt = 0;
|
||||
foreach (var invoicebase_oid in request.SelectedInvoiceBases)
|
||||
{
|
||||
var service = DAOFactory.SearchDAO.GetServiceInvoiceByInvoiceBaseOid(invoicebase_oid);
|
||||
|
||||
foreach (var peroid in service.ServiceInvoicePeriodList)
|
||||
{
|
||||
foreach (var invoice in peroid.InvoiceItemList)
|
||||
{
|
||||
gesamt += invoice.AmountTotal.Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gkv_abrechnung.Betrag = gesamt;
|
||||
gkv_abrechnung.Bezahlt = false;
|
||||
|
||||
gkv_abrechnung.ErstelltAm = DateTime.Now;
|
||||
|
||||
DAOFactory.GenericDAO.Insert(gkv_abrechnung);
|
||||
|
||||
var gkv_abrechnung_dc = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(gkv_abrechnung);
|
||||
|
||||
response.Success = true;
|
||||
response.GkvAbrechnungDC = gkv_abrechnung_dc;
|
||||
}
|
||||
catch (GkvException exc)
|
||||
{
|
||||
MailUtils.SendGkvModuleErrorMail("CreateNewGkvAbrechnung", exc, Tenant);
|
||||
|
||||
if (exc.Title.IsNotNullOrWhiteSpace())
|
||||
response.TitleMessage = exc.Title;
|
||||
response.Message = exc.Message;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MailUtils.SendGkvModuleErrorMail("CreateNewGkvAbrechnung", e, Tenant);
|
||||
|
||||
throw Utils.CreateBeWoFaultException(e);
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
public GkvAbrechnungDC UpdateGkvAbrechnung(GkvAbrechnungDC abrechnung)
|
||||
{
|
||||
try
|
||||
{
|
||||
var entity = DAOFactory.GenericDAO.GetByID<GkvAbrechnung>(abrechnung.GkvAbrechnungOid.Value);
|
||||
|
||||
MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MergeWithEntity(abrechnung, entity);
|
||||
|
||||
foreach (var invoice in entity.InvoiceBases)
|
||||
{
|
||||
invoice.IsPaid = entity.Bezahlt;
|
||||
}
|
||||
|
||||
DAOFactory.GenericDAO.Update(entity);
|
||||
|
||||
return MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(entity);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw Utils.CreateBeWoFaultException(e);
|
||||
}
|
||||
}
|
||||
public void DeleteGkvAbrechnung(GkvAbrechnungDC abrechnung)
|
||||
{
|
||||
try
|
||||
{
|
||||
ServiceLogic.SetActivationType<GkvAbrechnung>(abrechnung.GkvAbrechnungOid.Value, abrechnung.GkvAbrechnungVersion.Value, ActivationTypeId.Deleted);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw Utils.CreateBeWoFaultException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public GkvAbrechnungSendResponseDC SendNewGkvAbrechnung(GkvAbrechnungSendRequestDC req)
|
||||
{
|
||||
var response = new GkvAbrechnungSendResponseDC();
|
||||
|
||||
var oid = req.GkvAbrechnungOid;
|
||||
|
||||
var entity = DAOFactory.GenericDAO.LoadByID<GkvAbrechnung>(oid);
|
||||
|
||||
var state = entity.GetState();
|
||||
|
||||
if (entity.IsWaiting() || state == GkvState.Paid)
|
||||
{
|
||||
response.Message = "Validierung fehlgeschlagen";
|
||||
return response;
|
||||
}
|
||||
|
||||
var protokoll = CreateGkvTransferProtokoll(entity, out var error);
|
||||
if (error is object)
|
||||
{
|
||||
MailUtils.SendGkvModuleErrorMail("SendNewGkvAbrechnung - CreateGkvTransferProtokoll", error, Tenant);
|
||||
|
||||
response.TitleMessage = "Protokoll Erstellung";
|
||||
response.Message = error;
|
||||
return response;
|
||||
}
|
||||
|
||||
if (entity.GkvTransferProtokolle is null)
|
||||
entity.GkvTransferProtokolle = new List<GkvTransferProtokoll>();
|
||||
|
||||
entity.GkvTransferProtokolle.Add(protokoll);
|
||||
|
||||
// Protokoll braucht Oid
|
||||
DAOFactory.GenericDAO.Update(entity);
|
||||
|
||||
try
|
||||
{
|
||||
var app8_response = SendApp8SendNewRequest(protokoll);
|
||||
|
||||
var app8_protokoll = app8_response.GkvTransferProtokollDC;
|
||||
|
||||
MapperFactory.GkvTransferProtokollDC_GkvTransferprotokoll.MergeWithEntity(app8_protokoll, protokoll);
|
||||
|
||||
response.Success = app8_response.Success;
|
||||
response.Message = app8_response.Message;
|
||||
}
|
||||
catch (GkvException de)
|
||||
{
|
||||
protokoll.ResultType = GkvTransferResultType.FailSoft;
|
||||
protokoll.Fehlerdatum = DateTime.Now;
|
||||
protokoll.Fehlernachricht = de.Message;
|
||||
protokoll.Fehlertitel = de.Title ?? "Default";
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
protokoll.ResultType = GkvTransferResultType.FailFatal;
|
||||
protokoll.Fehlerdatum = DateTime.Now;
|
||||
protokoll.Fehlernachricht = e.ToString();
|
||||
protokoll.Fehlertitel = "Erstellung (kritisch)";
|
||||
}
|
||||
|
||||
DAOFactory.GenericDAO.Update(entity);
|
||||
|
||||
response.TransferProtokoll = MapperFactory.GkvTransferProtokollDC_GkvTransferprotokoll.MapToNewDC(protokoll);
|
||||
response.GkvAbrechnungDC = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(entity);
|
||||
|
||||
return response;
|
||||
}
|
||||
public GkvAbrechnungGetIKResponseDC SendGetIKRequest(GkvAbrechnungGetIKRequestDC req)
|
||||
{
|
||||
try
|
||||
{
|
||||
var app8req = new GkvServerGetIKRequestDC
|
||||
{
|
||||
IKKrankenkasse = req.IKKrankenkasse,
|
||||
Leistungserbringergruppe = req.Leistungserbringergruppe,
|
||||
Abrechnungscode = DakotaUtils.GetAbrechnungscode(req.Leistungserbringergruppe),
|
||||
Tarifkennzeichen = DakotaUtils.GetTarifkennzeichen(req.Leistungserbringergruppe)
|
||||
};
|
||||
|
||||
var app8res = SendApp8Request<GkvServerGetIKRequestDC, GkvServerGetIKResponseDC>(app8req);
|
||||
|
||||
// Erstelle Response
|
||||
var res = new GkvAbrechnungGetIKResponseDC
|
||||
{
|
||||
BezDatenannahmestelle = app8res.BezDatenannahmestelle,
|
||||
Gefunden = app8res.Gefunden,
|
||||
IKDatenannahmestelle = app8res.IKDatenannahmestelle,
|
||||
IKKostentrager = app8res.IKKostentrager,
|
||||
IKKrankenkasse = app8res.IKKrankenkasse,
|
||||
Message = app8res.Message,
|
||||
Success = app8res.Success
|
||||
};
|
||||
|
||||
// Schaue, ob IK Krankenkassen bereits bei einer anderen Organisation hinterlegt ist
|
||||
if (res.Gefunden)
|
||||
{
|
||||
// Holt alle Organisationen
|
||||
var orgas = DAOFactory.SearchDAO.GetAllOrganisationByIKKrankenkasse(req.IKKrankenkasse);
|
||||
|
||||
// Entfernt sich selber
|
||||
if (req.OrganisationOid is long oid)
|
||||
{
|
||||
orgas.RemoveAll(x => x.Oid == oid);
|
||||
}
|
||||
|
||||
if (orgas.Any())
|
||||
{
|
||||
res.BereitsEnthalten = true;
|
||||
res.BereitsEnthaltenBei = orgas.Select(x => x.Name).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw Utils.CreateBeWoFaultException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private GkvTransferProtokoll CreateGkvTransferProtokoll(GkvAbrechnung gkvAbrechnung, out string error)
|
||||
{
|
||||
var protokoll = new GkvTransferProtokoll
|
||||
{
|
||||
ErstelltAm = DateTime.Now,
|
||||
GkvAbrechnungOid = gkvAbrechnung.Oid.Value
|
||||
};
|
||||
|
||||
error = null;
|
||||
|
||||
try
|
||||
{
|
||||
ValidatorExtended.ValidateGkvAbrechnung(gkvAbrechnung, gkvAbrechnung.InvoiceBases);
|
||||
|
||||
var manager = new DakotaManager();
|
||||
var mandatordc = new OperationsServiceImp().GetMandator();
|
||||
|
||||
Validator.ValidateMandator(mandatordc);
|
||||
|
||||
var gkvAbrechnungDC = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(gkvAbrechnung);
|
||||
var orgadc = gkvAbrechnungDC.Organisation;
|
||||
|
||||
Validator.ValidateOrganisation(orgadc);
|
||||
|
||||
var datenannahmestelle = orgadc.IKDatenannahmestelle;
|
||||
var (datenaustauschreferenz, transfernummer) = GetNextDatenaustauschreferenzTransfernummer(gkvAbrechnung, datenannahmestelle);
|
||||
var (dat_short, tra_short) = ClearDatenaustauschreferenzTransfernummer(datenaustauschreferenz, transfernummer);
|
||||
|
||||
var first_cost = gkvAbrechnung.InvoiceBases.First().CostBearer2SupportConcept.SupportConcept.Customer;
|
||||
|
||||
var plugin = PluginLoader.FindClass<AccountingService>();
|
||||
var addressInfo = plugin.GetAddressInformation(first_cost.Oid);
|
||||
|
||||
foreach (var invoicebase in gkvAbrechnung.InvoiceBases)
|
||||
{
|
||||
var customer = invoicebase.CostBearer2SupportConcept.SupportConcept.Customer;
|
||||
|
||||
var addressInfo2 = plugin.GetAddressInformation(customer.Oid);
|
||||
|
||||
if (addressInfo.IKLeistungserbringer != addressInfo2.IKLeistungserbringer)
|
||||
{
|
||||
throw new GkvException($"Klient '{first_cost.Person.LastNameFirstName}' ({addressInfo.IKLeistungserbringer}) und '{customer.Person.LastNameFirstName}' ({addressInfo2.IKLeistungserbringer}) verweisen auf unterschiedliche Leistungserbringer.");
|
||||
}
|
||||
}
|
||||
|
||||
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 customerdc = MapperFactory.CustomerDC_Customer.MapToNewDC(customer);
|
||||
|
||||
Validator.ValidateCustomer(customerdc);
|
||||
|
||||
manager.Add(servicedc, orgadc, customerdc, addressInfo, dat_short, tra_short);
|
||||
}
|
||||
|
||||
manager.Apply();
|
||||
|
||||
if (manager.DakotaFileDict.Count != 1 || manager.DakotaFileDict.First().Value.GetKostenträgerCount() != 1)
|
||||
{
|
||||
var msg = "Unerwartete Anzahl an Dakota Files berechnet.";
|
||||
|
||||
throw new GkvException(msg);
|
||||
}
|
||||
|
||||
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 16,777,215 (224 − 1) characters.
|
||||
// The effective maximum length is less if the value contains multibyte characters.
|
||||
// Each MEDIUMTEXT value is stored using a 3-byte length prefix that indicates the number of bytes in the value.
|
||||
//
|
||||
// Type | Maximum length
|
||||
// -----------+-------------------------------------
|
||||
// TINYTEXT | 255(2^8−1) bytes
|
||||
// TEXT | 65,535(2^16−1) bytes = 64 KiB
|
||||
// MEDIUMTEXT | 16,777,215(2^24−1) bytes = 16 MiB
|
||||
// LONGTEXT | 4,294,967,295(2^32−1) bytes = 4 GiB
|
||||
if (nutzdatendatei.Length > 16777215)
|
||||
{
|
||||
var msg = $"nutzdatendatei - Länger als 16777215: {nutzdatendatei.Length}";
|
||||
|
||||
throw new GkvException(msg);
|
||||
}
|
||||
|
||||
protokoll.Datenaustauschreferenz = datenaustauschreferenz;
|
||||
protokoll.Transfernummer = transfernummer;
|
||||
|
||||
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 = "ownSoft GmbH";
|
||||
protokoll.EmpfangerBezeichnung = orgadc.BezDatenannahmestelle;
|
||||
|
||||
return protokoll;
|
||||
}
|
||||
catch (GkvException de)
|
||||
{
|
||||
error = de.ToString();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
error = e.ToString();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private Tuple<int, int> GetNextDatenaustauschreferenzTransfernummer(GkvAbrechnung gkvAbrechnung, string datenannahmestelle)
|
||||
{
|
||||
var datenaustauschref = DAOFactory.SearchDAO.GetNextDatenaustauschreferenz(datenannahmestelle);
|
||||
int transfernummer;
|
||||
|
||||
var state = gkvAbrechnung.GetState();
|
||||
|
||||
if (state == GkvState.NoSend)
|
||||
{
|
||||
transfernummer = DAOFactory.SearchDAO.GetNextTransfernummer(datenannahmestelle);
|
||||
}
|
||||
else if (state == GkvState.ErrorSoft || state == GkvState.ErrorFatal || state == GkvState.ErrorFolgefehler)
|
||||
{
|
||||
transfernummer = gkvAbrechnung.GkvTransferProtokolle.Last().Transfernummer;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArgumentException($"Versucht Transfernummer zu laden, invalid state: {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 GkvServerSendNewResponseDC SendApp8SendNewRequest(GkvTransferProtokoll protokoll)
|
||||
{
|
||||
var gkv_transfer_dc = MapperFactory.GkvTransferProtokollDC_GkvTransferprotokoll.MapToNewDC(protokoll);
|
||||
|
||||
var request_app8 = new GkvServerSendNewRequestDC
|
||||
{
|
||||
Protokoll = gkv_transfer_dc
|
||||
};
|
||||
|
||||
var response_app8 = SendApp8Request<GkvServerSendNewRequestDC, GkvServerSendNewResponseDC>(request_app8);
|
||||
|
||||
if (!response_app8.Success)
|
||||
throw new GkvException(response_app8.Message);
|
||||
|
||||
return response_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)
|
||||
{
|
||||
var updateables_len = updateables.Count();
|
||||
|
||||
var request = new GkvServerGetStatusRequestDC
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
GkvServerGetStatusResponseDC response_app8;
|
||||
try
|
||||
{
|
||||
response_app8 = SendApp8Request<GkvServerGetStatusRequestDC, GkvServerGetStatusResponseDC>(request);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MailUtils.SendGkvModuleErrorMail("GkvServerGetStatusRequest Error", e, Tenant);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!response_app8.Success)
|
||||
throw new GkvException("Success false - " + response_app8.Message);
|
||||
|
||||
if (response_app8.Results is null)
|
||||
throw new GkvException("Result null - " + response_app8.Message);
|
||||
|
||||
var results = response_app8.Results.Where(x => x is object);
|
||||
|
||||
if (!results.Any())
|
||||
return true;
|
||||
|
||||
HandleGkvServerResults(results);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public void HandleGkvServerResults(IEnumerable<GkvServerResultDC> results)
|
||||
{
|
||||
var protokolls = new List<GkvTransferProtokoll>();
|
||||
foreach (var result in results)
|
||||
{
|
||||
var protokoll = DAOFactory.GenericDAO.GetByID<GkvTransferProtokoll>(result.ProtokollOid);
|
||||
|
||||
protokoll.ResultType = result.ResultType;
|
||||
protokoll.Fehlertitel = result.Titel;
|
||||
protokoll.Fehlerdatum = result.Datum;
|
||||
protokoll.Fehlernachricht = result.Nachricht;
|
||||
|
||||
switch (result.ResultType)
|
||||
{
|
||||
case GkvTransferResultType.Success:
|
||||
protokoll.SentDakotaSuccess = true;
|
||||
break;
|
||||
case GkvTransferResultType.FailSoft:
|
||||
protokoll.SentApp8Success = false;
|
||||
break;
|
||||
case GkvTransferResultType.FailFatal:
|
||||
protokoll.SentApp8Success = false;
|
||||
break;
|
||||
case GkvTransferResultType.FailFollowUp:
|
||||
protokoll.SentApp8Success = false;
|
||||
break;
|
||||
}
|
||||
|
||||
protokolls.Add(protokoll);
|
||||
}
|
||||
|
||||
if (protokolls.Any())
|
||||
DAOFactory.GenericDAO.Update(protokolls);
|
||||
|
||||
var follows = results.Where(x => x.ResultType == GkvTransferResultType.FailFollowUp);
|
||||
|
||||
if (follows.Any())
|
||||
{
|
||||
foreach (var follow in follows)
|
||||
{
|
||||
var protokoll_oid = follow.ProtokollOid;
|
||||
var protokoll = DAOFactory.GenericDAO.LoadByID<GkvTransferProtokoll>(protokoll_oid);
|
||||
var abrechnung_oid = protokoll.GkvAbrechnungOid;
|
||||
|
||||
var new_req = new GkvAbrechnungSendRequestDC()
|
||||
{
|
||||
GkvAbrechnungOid = abrechnung_oid
|
||||
};
|
||||
|
||||
var res = SendNewGkvAbrechnung(new_req);
|
||||
|
||||
if (!res.Success)
|
||||
throw new GkvException("Success - " + res.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Res SendApp8Request<Req, Res>(Req request) where Req : GkvServerRequestDC where Res : GkvResponseDC
|
||||
{
|
||||
var user = LoggedInUserOperationContextExt.Current?.User ?? SessionFacade.LoggedInUser;
|
||||
if (user == null)
|
||||
{
|
||||
throw new GkvException("User unbekannt", "KundenApp");
|
||||
}
|
||||
|
||||
request.Username = user.LoginName;
|
||||
request.Password = user.BCryptPassword;
|
||||
request.Tenant = MultitenancyOperationContextExt.Current.Tenant;
|
||||
|
||||
if (request is GkvServerSendNewRequestDC send_new_req)
|
||||
{
|
||||
send_new_req.ApplicationUserOid = user.Oid.Value;
|
||||
}
|
||||
|
||||
return GkvSender.SendApp8Request<Req, Res>(request, request.Tenant);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
50
Service/ServiceImplementations/AdminServiceImp.cs
Normal file
50
Service/ServiceImplementations/AdminServiceImp.cs
Normal file
@@ -0,0 +1,50 @@
|
||||
using BeWo.Data.Access;
|
||||
using BeWo.Service.ServiceContracts;
|
||||
using BS.Shared.Core;
|
||||
using BS.Shared.DataContracts.AdminService;
|
||||
using DevExpress.Pdf.Native.BouncyCastle.Ocsp;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.ServiceModel;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BeWo.Service.ServiceImplementations
|
||||
{
|
||||
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)]
|
||||
public class AdminServiceImp : IAdminService
|
||||
{
|
||||
public string Test()
|
||||
{
|
||||
return "Test erfolgreich!";
|
||||
}
|
||||
|
||||
public string Echo(string echo)
|
||||
{
|
||||
return echo;
|
||||
}
|
||||
|
||||
public object GetGkvAbrechnungSumme(AdminServiceSumReqDC request)
|
||||
{
|
||||
if (request == null)
|
||||
{
|
||||
throw new ArgumentException("request darf nicht null sein");
|
||||
}
|
||||
|
||||
if(!Utils.TryParseISO8601(request.Start, out var start))
|
||||
{
|
||||
throw new ArgumentException("start entspricht nicht ISO8601 Norm.");
|
||||
}
|
||||
|
||||
if (!Utils.TryParseISO8601(request.End, out var end))
|
||||
{
|
||||
throw new ArgumentException("end entspricht nicht ISO8601 Norm.");
|
||||
}
|
||||
|
||||
var sum = DAOFactory.ScriptDAO.GetGkvSumByDateRange(start, end);
|
||||
|
||||
return sum?.ToString("0.00");
|
||||
}
|
||||
}
|
||||
}
|
||||
669
Service/ServiceImplementations/GkvAccountingServiceImp.cs
Normal file
669
Service/ServiceImplementations/GkvAccountingServiceImp.cs
Normal file
@@ -0,0 +1,669 @@
|
||||
using BeWo.Data;
|
||||
using BeWo.Data.Access;
|
||||
using BeWo.Data.Entities;
|
||||
using BeWo.Service.Core;
|
||||
using BeWo.Service.DCEntityMapper;
|
||||
using BeWo.Service.Plugins;
|
||||
using BeWo.Service.ServiceContracts;
|
||||
using BS.Shared;
|
||||
using BS.Shared.AppSender;
|
||||
using BS.Shared.Core;
|
||||
using BS.Shared.DataContracts.GkvAbrechnung;
|
||||
using BS.Shared.Exceptions;
|
||||
using BS.Shared.Extensions;
|
||||
using Dakota;
|
||||
using Dakota.Logic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.ServiceModel;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Utils = BeWo.Service.Core.Utils;
|
||||
|
||||
namespace BeWo.Service.ServiceImplementations
|
||||
{
|
||||
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)]
|
||||
public class GkvAccountingServiceImp : IGkvAccountingService
|
||||
{
|
||||
public string Tenant => MultitenancyOperationContextExt.Current?.Tenant;
|
||||
|
||||
public GkvAbrechnungDC GetGkvAbrechnung(long oid)
|
||||
{
|
||||
try
|
||||
{
|
||||
var gkv = DAOFactory.GenericDAO.GetByID<GkvAbrechnung>(oid);
|
||||
|
||||
var dc = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(gkv);
|
||||
|
||||
MapperFactory.GkvAbrechnungDC_GkvAbrechnung.ClearRawData(dc);
|
||||
|
||||
return dc;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw Utils.CreateBeWoFaultException(e);
|
||||
}
|
||||
}
|
||||
public List<GkvAbrechnungDC> GetFilteredGkvAbrechnungen(GkvAbrechnungViewFilterDC gkvAbrechnungViewFilter)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (gkvAbrechnungViewFilter == null || !gkvAbrechnungViewFilter.FilterTime)
|
||||
return GetAllGkvAbrechnungen();
|
||||
|
||||
var start = gkvAbrechnungViewFilter.Start;
|
||||
var end = gkvAbrechnungViewFilter.End;
|
||||
var filter = gkvAbrechnungViewFilter.FilterForInvoiceDate;
|
||||
|
||||
return GetGkvAbrechnungen(() => DAOFactory.SearchDAO.GetGkvAbrechnungen(start, end, filter));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw Utils.CreateBeWoFaultException(e);
|
||||
}
|
||||
}
|
||||
public List<GkvAbrechnungDC> GetAllGkvAbrechnungen()
|
||||
{
|
||||
try
|
||||
{
|
||||
return GetGkvAbrechnungen(() => DAOFactory.GenericDAO.GetAllActive<GkvAbrechnung>());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw Utils.CreateBeWoFaultException(e);
|
||||
}
|
||||
}
|
||||
private List<GkvAbrechnungDC> GetGkvAbrechnungen(Func<IEnumerable<GkvAbrechnung>> get_entities)
|
||||
{
|
||||
var entities = get_entities();
|
||||
|
||||
var dcs = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDCs(entities);
|
||||
|
||||
MapperFactory.GkvAbrechnungDC_GkvAbrechnung.ClearRawData(dcs);
|
||||
|
||||
var updateables = dcs.Where(x => x.IsWaiting()).ToArray();
|
||||
|
||||
if (!updateables.Any())
|
||||
return dcs;
|
||||
|
||||
var isUpToDate = SendApp8GetStatusRequest(updateables);
|
||||
|
||||
if (isUpToDate)
|
||||
return dcs;
|
||||
|
||||
entities = get_entities();
|
||||
|
||||
dcs = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDCs(entities);
|
||||
|
||||
MapperFactory.GkvAbrechnungDC_GkvAbrechnung.ClearRawData(dcs);
|
||||
|
||||
return dcs;
|
||||
}
|
||||
public string GetProtokollRawDataString(long oid, GkvRawDataType gkvRawData)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (oid <= 0)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(nameof(oid), $"oid \'{oid}\' nicht positiv");
|
||||
}
|
||||
|
||||
var str = DAOFactory.SearchDAO.GetGkvRawData(oid, gkvRawData);
|
||||
|
||||
return str;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw Utils.CreateBeWoFaultException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public GkvAbrechnungCreateResponseDC CreateNewGkvAbrechnung(GkvAbrechnungCreateRequestDC request)
|
||||
{
|
||||
var response = new GkvAbrechnungCreateResponseDC();
|
||||
|
||||
try
|
||||
{
|
||||
var invoice_bases = DAOFactory.GenericDAO.LoadByIDs<InvoiceBase>(request.SelectedInvoiceBases);
|
||||
|
||||
ValidatorExtended.ValidateGkvAbrechnung(request.GkvAbrechnungDC, invoice_bases);
|
||||
|
||||
var gkv_abrechnung = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewEntity(request.GkvAbrechnungDC);
|
||||
|
||||
if (gkv_abrechnung.AbrechnungsZeitraumEnde.Value.Hour == 0)
|
||||
{
|
||||
gkv_abrechnung.AbrechnungsZeitraumEnde = gkv_abrechnung.AbrechnungsZeitraumEnde.Value.Date.AddDays(1).AddMilliseconds(-1);
|
||||
}
|
||||
|
||||
var orga = gkv_abrechnung.Organisation;
|
||||
|
||||
gkv_abrechnung.Verfahrensstufe = orga.Verfahrensstufe;
|
||||
|
||||
decimal gesamt = 0;
|
||||
foreach (var invoicebase_oid in request.SelectedInvoiceBases)
|
||||
{
|
||||
var service = DAOFactory.SearchDAO.GetServiceInvoiceByInvoiceBaseOid(invoicebase_oid);
|
||||
|
||||
foreach (var peroid in service.ServiceInvoicePeriodList)
|
||||
{
|
||||
foreach (var invoice in peroid.InvoiceItemList)
|
||||
{
|
||||
gesamt += invoice.AmountTotal.Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gkv_abrechnung.Betrag = gesamt;
|
||||
gkv_abrechnung.Bezahlt = false;
|
||||
|
||||
gkv_abrechnung.ErstelltAm = DateTime.Now;
|
||||
|
||||
DAOFactory.GenericDAO.Insert(gkv_abrechnung);
|
||||
|
||||
var gkv_abrechnung_dc = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(gkv_abrechnung);
|
||||
|
||||
response.Success = true;
|
||||
response.GkvAbrechnungDC = gkv_abrechnung_dc;
|
||||
}
|
||||
catch (GkvException exc)
|
||||
{
|
||||
MailUtils.SendGkvModuleErrorMail("CreateNewGkvAbrechnung", exc, Tenant);
|
||||
|
||||
if (exc.Title.IsNotNullOrWhiteSpace())
|
||||
response.TitleMessage = exc.Title;
|
||||
response.Message = exc.Message;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MailUtils.SendGkvModuleErrorMail("CreateNewGkvAbrechnung", e, Tenant);
|
||||
|
||||
throw Utils.CreateBeWoFaultException(e);
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
public GkvAbrechnungDC UpdateGkvAbrechnung(GkvAbrechnungDC abrechnung)
|
||||
{
|
||||
try
|
||||
{
|
||||
var entity = DAOFactory.GenericDAO.GetByID<GkvAbrechnung>(abrechnung.GkvAbrechnungOid.Value);
|
||||
|
||||
if(entity.Notice != abrechnung.Notice)
|
||||
entity.Notice = abrechnung.Notice;
|
||||
|
||||
if (entity.UrbelegeGesendet != abrechnung.UrbelegeGesendet)
|
||||
entity.UrbelegeGesendet = abrechnung.UrbelegeGesendet;
|
||||
|
||||
if (entity.Bezahlt != abrechnung.Bezahlt)
|
||||
{
|
||||
entity.Bezahlt = abrechnung.Bezahlt;
|
||||
|
||||
foreach (var invoice in entity.InvoiceBases)
|
||||
{
|
||||
invoice.IsPaid = entity.Bezahlt;
|
||||
}
|
||||
}
|
||||
|
||||
DAOFactory.GenericDAO.Update(entity);
|
||||
|
||||
var dc = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(entity);
|
||||
|
||||
MapperFactory.GkvAbrechnungDC_GkvAbrechnung.ClearRawData(dc);
|
||||
|
||||
return dc;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw Utils.CreateBeWoFaultException(e);
|
||||
}
|
||||
}
|
||||
public void DeleteGkvAbrechnung(GkvAbrechnungDC abrechnung)
|
||||
{
|
||||
try
|
||||
{
|
||||
ServiceLogic.SetActivationType<GkvAbrechnung>(abrechnung.GkvAbrechnungOid.Value, abrechnung.GkvAbrechnungVersion.Value, ActivationTypeId.Deleted);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw Utils.CreateBeWoFaultException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Erstellt GkvTransferProtokoll
|
||||
/// </summary>
|
||||
/// <param name="req"></param>
|
||||
/// <returns></returns>
|
||||
public GkvAbrechnungSendResponseDC SendNewGkvAbrechnung(GkvAbrechnungSendRequestDC req)
|
||||
{
|
||||
var response = new GkvAbrechnungSendResponseDC();
|
||||
|
||||
var oid = req.GkvAbrechnungOid;
|
||||
|
||||
var entity = DAOFactory.GenericDAO.LoadByID<GkvAbrechnung>(oid);
|
||||
|
||||
var state = entity.GetState();
|
||||
|
||||
if (entity.IsWaiting() || state == GkvState.Paid)
|
||||
{
|
||||
response.Message = "Validierung fehlgeschlagen";
|
||||
return response;
|
||||
}
|
||||
|
||||
var protokoll = CreateGkvTransferProtokoll(entity, out var error);
|
||||
if (error is object)
|
||||
{
|
||||
MailUtils.SendGkvModuleErrorMail("SendNewGkvAbrechnung - CreateGkvTransferProtokoll", error, Tenant);
|
||||
|
||||
response.TitleMessage = "Protokoll Erstellung";
|
||||
response.Message = error;
|
||||
return response;
|
||||
}
|
||||
|
||||
if (entity.GkvTransferProtokolle is null)
|
||||
entity.GkvTransferProtokolle = new List<GkvTransferProtokoll>();
|
||||
|
||||
entity.GkvTransferProtokolle.Add(protokoll);
|
||||
|
||||
// Protokoll braucht Oid
|
||||
DAOFactory.GenericDAO.Update(entity);
|
||||
|
||||
try
|
||||
{
|
||||
var app8_response = SendApp8SendNewRequest(protokoll);
|
||||
|
||||
var app8_protokoll = app8_response.GkvTransferProtokollDC;
|
||||
|
||||
MapperFactory.GkvTransferProtokollDC_GkvTransferprotokoll.MergeWithEntity(app8_protokoll, protokoll);
|
||||
|
||||
response.Success = app8_response.Success;
|
||||
response.Message = app8_response.Message;
|
||||
}
|
||||
catch (GkvException de)
|
||||
{
|
||||
protokoll.ResultType = GkvTransferResultType.FailSoft;
|
||||
protokoll.Fehlerdatum = DateTime.Now;
|
||||
protokoll.Fehlernachricht = de.Message;
|
||||
protokoll.Fehlertitel = de.Title ?? "Default";
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
protokoll.ResultType = GkvTransferResultType.FailFatal;
|
||||
protokoll.Fehlerdatum = DateTime.Now;
|
||||
protokoll.Fehlernachricht = e.ToString();
|
||||
protokoll.Fehlertitel = "Erstellung (kritisch)";
|
||||
}
|
||||
|
||||
DAOFactory.GenericDAO.Update(entity);
|
||||
|
||||
response.TransferProtokoll = MapperFactory.GkvTransferProtokollDC_GkvTransferprotokoll.MapToNewDC(protokoll);
|
||||
response.GkvAbrechnungDC = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(entity);
|
||||
|
||||
MapperFactory.GkvTransferProtokollDC_GkvTransferprotokoll.ClearRawData(response.TransferProtokoll);
|
||||
MapperFactory.GkvAbrechnungDC_GkvAbrechnung.ClearRawData(response.GkvAbrechnungDC);
|
||||
|
||||
return response;
|
||||
}
|
||||
public GkvAbrechnungGetIKResponseDC SendGetIKRequest(GkvAbrechnungGetIKRequestDC req)
|
||||
{
|
||||
try
|
||||
{
|
||||
var app8req = new GkvServerGetIKRequestDC
|
||||
{
|
||||
IKKrankenkasse = req.IKKrankenkasse,
|
||||
Leistungserbringergruppe = req.Leistungserbringergruppe,
|
||||
Abrechnungscode = DakotaUtils.GetAbrechnungscode(req.Leistungserbringergruppe),
|
||||
Tarifkennzeichen = DakotaUtils.GetTarifkennzeichen(req.Leistungserbringergruppe)
|
||||
};
|
||||
|
||||
var app8res = SendApp8Request<GkvServerGetIKRequestDC, GkvServerGetIKResponseDC>(app8req);
|
||||
|
||||
// Erstelle Response
|
||||
var res = new GkvAbrechnungGetIKResponseDC
|
||||
{
|
||||
BezDatenannahmestelle = app8res.BezDatenannahmestelle,
|
||||
Gefunden = app8res.Gefunden,
|
||||
IKDatenannahmestelle = app8res.IKDatenannahmestelle,
|
||||
IKKostentrager = app8res.IKKostentrager,
|
||||
IKKrankenkasse = app8res.IKKrankenkasse,
|
||||
Message = app8res.Message,
|
||||
Success = app8res.Success
|
||||
};
|
||||
|
||||
// Schaue, ob IK Krankenkassen bereits bei einer anderen Organisation hinterlegt ist
|
||||
if (res.Gefunden)
|
||||
{
|
||||
// Holt alle Organisationen
|
||||
var orgas = DAOFactory.SearchDAO.GetAllOrganisationByIKKrankenkasse(req.IKKrankenkasse);
|
||||
|
||||
// Entfernt sich selber
|
||||
if (req.OrganisationOid is long oid)
|
||||
{
|
||||
orgas.RemoveAll(x => x.Oid == oid);
|
||||
}
|
||||
|
||||
if (orgas.Any())
|
||||
{
|
||||
res.BereitsEnthalten = true;
|
||||
res.BereitsEnthaltenBei = orgas.Select(x => x.Name).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw Utils.CreateBeWoFaultException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private GkvTransferProtokoll CreateGkvTransferProtokoll(GkvAbrechnung gkvAbrechnung, out string error)
|
||||
{
|
||||
var protokoll = new GkvTransferProtokoll
|
||||
{
|
||||
ErstelltAm = DateTime.Now,
|
||||
GkvAbrechnungOid = gkvAbrechnung.Oid.Value
|
||||
};
|
||||
|
||||
error = null;
|
||||
|
||||
try
|
||||
{
|
||||
ValidatorExtended.ValidateGkvAbrechnung(gkvAbrechnung, gkvAbrechnung.InvoiceBases);
|
||||
|
||||
var manager = new DakotaManager();
|
||||
var mandatordc = new OperationsServiceImp().GetMandator();
|
||||
|
||||
Validator.ValidateMandator(mandatordc);
|
||||
|
||||
var gkvAbrechnungDC = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(gkvAbrechnung);
|
||||
var orgadc = gkvAbrechnungDC.Organisation;
|
||||
|
||||
Validator.ValidateOrganisation(orgadc);
|
||||
|
||||
var datenannahmestelle = orgadc.IKDatenannahmestelle;
|
||||
var (datenaustauschreferenz, transfernummer) = GetNextDatenaustauschreferenzTransfernummer(gkvAbrechnung, datenannahmestelle);
|
||||
var (dat_short, tra_short) = ClearDatenaustauschreferenzTransfernummer(datenaustauschreferenz, transfernummer);
|
||||
|
||||
var first_cost = gkvAbrechnung.InvoiceBases.First().CostBearer2SupportConcept.SupportConcept.Customer;
|
||||
|
||||
var plugin = PluginLoader.FindClass<AccountingService>();
|
||||
var addressInfo = plugin.GetAddressInformation(first_cost.Oid);
|
||||
|
||||
foreach (var invoicebase in gkvAbrechnung.InvoiceBases)
|
||||
{
|
||||
var customer = invoicebase.CostBearer2SupportConcept.SupportConcept.Customer;
|
||||
|
||||
var addressInfo2 = plugin.GetAddressInformation(customer.Oid);
|
||||
|
||||
if (addressInfo.IKLeistungserbringer != addressInfo2.IKLeistungserbringer)
|
||||
{
|
||||
throw new GkvException($"Klient '{first_cost.Person.LastNameFirstName}' ({addressInfo.IKLeistungserbringer}) und '{customer.Person.LastNameFirstName}' ({addressInfo2.IKLeistungserbringer}) verweisen auf unterschiedliche Leistungserbringer.");
|
||||
}
|
||||
}
|
||||
|
||||
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 customerdc = MapperFactory.CustomerDC_Customer.MapToNewDC(customer);
|
||||
|
||||
Validator.ValidateCustomer(customerdc);
|
||||
|
||||
manager.Add(servicedc, orgadc, customerdc, addressInfo, dat_short, tra_short);
|
||||
}
|
||||
|
||||
manager.Apply();
|
||||
|
||||
if (manager.DakotaFileDict.Count != 1 || manager.DakotaFileDict.First().Value.GetKostenträgerCount() != 1)
|
||||
{
|
||||
var msg = "Unerwartete Anzahl an Dakota Files berechnet.";
|
||||
|
||||
throw new GkvException(msg);
|
||||
}
|
||||
|
||||
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 16,777,215 (224 − 1) characters.
|
||||
// The effective maximum length is less if the value contains multibyte characters.
|
||||
// Each MEDIUMTEXT value is stored using a 3-byte length prefix that indicates the number of bytes in the value.
|
||||
//
|
||||
// Type | Maximum length
|
||||
// -----------+-------------------------------------
|
||||
// TINYTEXT | 255(2^8−1) bytes
|
||||
// TEXT | 65,535(2^16−1) bytes = 64 KiB
|
||||
// MEDIUMTEXT | 16,777,215(2^24−1) bytes = 16 MiB
|
||||
// LONGTEXT | 4,294,967,295(2^32−1) bytes = 4 GiB
|
||||
if (nutzdatendatei.Length > 16777215)
|
||||
{
|
||||
var msg = $"nutzdatendatei - Länger als 16777215: {nutzdatendatei.Length}";
|
||||
|
||||
throw new GkvException(msg);
|
||||
}
|
||||
|
||||
protokoll.Datenaustauschreferenz = datenaustauschreferenz;
|
||||
protokoll.Transfernummer = transfernummer;
|
||||
|
||||
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 = "ownSoft GmbH";
|
||||
protokoll.EmpfangerBezeichnung = orgadc.BezDatenannahmestelle;
|
||||
|
||||
return protokoll;
|
||||
}
|
||||
catch (GkvException de)
|
||||
{
|
||||
error = de.ToString();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
error = e.ToString();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private Tuple<int, int> GetNextDatenaustauschreferenzTransfernummer(GkvAbrechnung gkvAbrechnung, string datenannahmestelle)
|
||||
{
|
||||
var datenaustauschref = DAOFactory.SearchDAO.GetNextDatenaustauschreferenz(datenannahmestelle);
|
||||
int transfernummer;
|
||||
|
||||
var state = gkvAbrechnung.GetState();
|
||||
|
||||
if (state == GkvState.NoSend)
|
||||
{
|
||||
transfernummer = DAOFactory.SearchDAO.GetNextTransfernummer(datenannahmestelle);
|
||||
}
|
||||
else if (state == GkvState.ErrorSoft || state == GkvState.ErrorFatal || state == GkvState.ErrorFolgefehler)
|
||||
{
|
||||
transfernummer = gkvAbrechnung.GkvTransferProtokolle.Last().Transfernummer;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArgumentException($"Versucht Transfernummer zu laden, invalid state: {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 GkvServerSendNewResponseDC SendApp8SendNewRequest(GkvTransferProtokoll protokoll)
|
||||
{
|
||||
var gkv_transfer_dc = MapperFactory.GkvTransferProtokollDC_GkvTransferprotokoll.MapToNewDC(protokoll);
|
||||
|
||||
var request_app8 = new GkvServerSendNewRequestDC
|
||||
{
|
||||
Protokoll = gkv_transfer_dc
|
||||
};
|
||||
|
||||
var response_app8 = SendApp8Request<GkvServerSendNewRequestDC, GkvServerSendNewResponseDC>(request_app8);
|
||||
|
||||
if (!response_app8.Success)
|
||||
throw new GkvException(response_app8.Message);
|
||||
|
||||
return response_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)
|
||||
{
|
||||
var updateables_len = updateables.Count();
|
||||
|
||||
var request = new GkvServerGetStatusRequestDC
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
GkvServerGetStatusResponseDC response_app8;
|
||||
try
|
||||
{
|
||||
response_app8 = SendApp8Request<GkvServerGetStatusRequestDC, GkvServerGetStatusResponseDC>(request);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MailUtils.SendGkvModuleErrorMail("GkvServerGetStatusRequest Error", e, Tenant);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!response_app8.Success)
|
||||
throw new GkvException("Success false - " + response_app8.Message);
|
||||
|
||||
if (response_app8.Results is null)
|
||||
throw new GkvException("Result null - " + response_app8.Message);
|
||||
|
||||
var results = response_app8.Results.Where(x => x is object);
|
||||
|
||||
if (!results.Any())
|
||||
return true;
|
||||
|
||||
HandleGkvServerResults(results);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public void HandleGkvServerResults(IEnumerable<GkvServerResultDC> results)
|
||||
{
|
||||
var protokolls = new List<GkvTransferProtokoll>();
|
||||
foreach (var result in results)
|
||||
{
|
||||
var protokoll = DAOFactory.GenericDAO.GetByID<GkvTransferProtokoll>(result.ProtokollOid);
|
||||
|
||||
protokoll.ResultType = result.ResultType;
|
||||
protokoll.Fehlertitel = result.Titel;
|
||||
protokoll.Fehlerdatum = result.Datum;
|
||||
protokoll.Fehlernachricht = result.Nachricht;
|
||||
|
||||
switch (result.ResultType)
|
||||
{
|
||||
case GkvTransferResultType.Success:
|
||||
protokoll.SentDakotaSuccess = true;
|
||||
break;
|
||||
case GkvTransferResultType.FailSoft:
|
||||
protokoll.SentApp8Success = false;
|
||||
break;
|
||||
case GkvTransferResultType.FailFatal:
|
||||
protokoll.SentApp8Success = false;
|
||||
break;
|
||||
case GkvTransferResultType.FailFollowUp:
|
||||
protokoll.SentApp8Success = false;
|
||||
break;
|
||||
}
|
||||
|
||||
protokolls.Add(protokoll);
|
||||
}
|
||||
|
||||
if (protokolls.Any())
|
||||
DAOFactory.GenericDAO.Update(protokolls);
|
||||
|
||||
var follows = results.Where(x => x.ResultType == GkvTransferResultType.FailFollowUp);
|
||||
|
||||
if (follows.Any())
|
||||
{
|
||||
foreach (var follow in follows)
|
||||
{
|
||||
var protokoll_oid = follow.ProtokollOid;
|
||||
var protokoll = DAOFactory.GenericDAO.LoadByID<GkvTransferProtokoll>(protokoll_oid);
|
||||
var abrechnung_oid = protokoll.GkvAbrechnungOid;
|
||||
|
||||
var new_req = new GkvAbrechnungSendRequestDC()
|
||||
{
|
||||
GkvAbrechnungOid = abrechnung_oid
|
||||
};
|
||||
|
||||
var res = SendNewGkvAbrechnung(new_req);
|
||||
|
||||
if (!res.Success)
|
||||
throw new GkvException("Success - " + res.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Res SendApp8Request<Req, Res>(Req request) where Req : GkvServerRequestDC where Res : GkvResponseDC
|
||||
{
|
||||
var user = LoggedInUserOperationContextExt.Current?.User ?? SessionFacade.LoggedInUser;
|
||||
if (user == null)
|
||||
{
|
||||
throw new GkvException("User unbekannt", "KundenApp");
|
||||
}
|
||||
|
||||
request.Username = user.LoginName;
|
||||
request.Password = user.BCryptPassword;
|
||||
request.Tenant = MultitenancyOperationContextExt.Current.Tenant;
|
||||
|
||||
if (request is GkvServerSendNewRequestDC send_new_req)
|
||||
{
|
||||
send_new_req.ApplicationUserOid = user.Oid.Value;
|
||||
}
|
||||
|
||||
return GkvSender.SendApp8Request<Req, Res>(request, request.Tenant);
|
||||
}
|
||||
}
|
||||
}
|
||||
82
Service/ServiceUtils/ServiceHelper.cs
Normal file
82
Service/ServiceUtils/ServiceHelper.cs
Normal file
@@ -0,0 +1,82 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IdentityModel.Claims;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.ServiceModel.Channels;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using BeWo.Service.ServiceContracts;
|
||||
using BS.Shared.Attributes;
|
||||
using BS.Shared.Extensions;
|
||||
using NHibernate.Hql.Ast.ANTLR.Tree;
|
||||
|
||||
namespace BeWo.Service.ServiceUtils
|
||||
{
|
||||
public static class ServiceHelper
|
||||
{
|
||||
public static T GetCustomAttribute<T>(Uri baseAddress, Uri request) where T : Attribute
|
||||
{
|
||||
// Hole Interface
|
||||
string lInterface = null;
|
||||
var segments = baseAddress.Segments;
|
||||
for (int i = 0; i < segments.Length; i++)
|
||||
{
|
||||
var seg = segments[i].Trim('/');
|
||||
|
||||
if (seg.EndsWith(".svc"))
|
||||
{
|
||||
lInterface = seg.Substring(0, seg.Length - 4);
|
||||
}
|
||||
}
|
||||
|
||||
// Falls kein Interface gefunden wird
|
||||
if (string.IsNullOrWhiteSpace(lInterface) )
|
||||
{
|
||||
throw new ArgumentException($"Zugriff verweigert. Interface unbekannt");
|
||||
}
|
||||
|
||||
// Wird für URLTemplate != Methodname verwendet
|
||||
var name = $"BeWo.Service.ServiceContracts.I{lInterface}";
|
||||
var t = Type.GetType(name);
|
||||
var resolver = new UriTemplateResolver(baseAddress, t);
|
||||
var method = resolver.ResolveMethod(request.AbsoluteUri);
|
||||
var methodInfo = t.GetMethod(method);
|
||||
|
||||
// Rückgabe
|
||||
return getCustomAttribute<T>(methodInfo);
|
||||
}
|
||||
|
||||
public static T GetCustomAttribute<T>(string pServiceInterface, string pMethodName) where T : Attribute
|
||||
{
|
||||
MethodInfo methodInfo = null;
|
||||
|
||||
try
|
||||
{
|
||||
// Hole entsprechende Methode
|
||||
var name = $"BeWo.Service.ServiceContracts.{pServiceInterface}";
|
||||
var t = Type.GetType(name);
|
||||
methodInfo = t.GetMethod(pMethodName);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
throw new ArgumentException($"Zugriff verweigert. Interface oder Methode unbekannt");
|
||||
}
|
||||
|
||||
return getCustomAttribute<T>(methodInfo);
|
||||
}
|
||||
|
||||
private static T getCustomAttribute<T>(MethodInfo methodInfo) where T : Attribute
|
||||
{
|
||||
if (methodInfo == null)
|
||||
{
|
||||
throw new ArgumentException($"Zugriff verweigert. Interface oder Methode unbekannt");
|
||||
}
|
||||
|
||||
// Hole Custome Attribute
|
||||
var attribute = methodInfo.GetCustomAttribute<T>();
|
||||
|
||||
return attribute;
|
||||
}
|
||||
}
|
||||
}
|
||||
46
Service/ServiceUtils/UriTemplateResolver.cs
Normal file
46
Service/ServiceUtils/UriTemplateResolver.cs
Normal file
@@ -0,0 +1,46 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.ServiceModel.Web;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BeWo.Service.ServiceUtils
|
||||
{
|
||||
public class UriTemplateResolver
|
||||
{
|
||||
private UriTemplateTable _uriTemplateTable;
|
||||
|
||||
public UriTemplateResolver(Uri baseAddress, Type serviceType)
|
||||
{
|
||||
_uriTemplateTable = new UriTemplateTable(baseAddress);
|
||||
|
||||
foreach (var method in serviceType.GetMethods())
|
||||
{
|
||||
var webGet = method.GetCustomAttribute<WebGetAttribute>();
|
||||
var webInvoke = method.GetCustomAttribute<WebInvokeAttribute>();
|
||||
|
||||
if (webGet != null)
|
||||
{
|
||||
_uriTemplateTable.KeyValuePairs.Add(new KeyValuePair<UriTemplate, object>(
|
||||
new UriTemplate(webGet.UriTemplate), method.Name));
|
||||
}
|
||||
else if (webInvoke != null)
|
||||
{
|
||||
_uriTemplateTable.KeyValuePairs.Add(new KeyValuePair<UriTemplate, object>(
|
||||
new UriTemplate(webInvoke.UriTemplate), method.Name));
|
||||
}
|
||||
}
|
||||
|
||||
_uriTemplateTable.MakeReadOnly(false);
|
||||
}
|
||||
|
||||
public string ResolveMethod(string requestUri)
|
||||
{
|
||||
var match = _uriTemplateTable.MatchSingle(new Uri(requestUri));
|
||||
return match?.Data as string;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -38,13 +38,14 @@ namespace BS.Shared.AppSender
|
||||
}
|
||||
}
|
||||
|
||||
public static Res Send<Req, Res>(Req request, string url, string tenant) where Req : AppRequestDC where Res : AppResponseDC
|
||||
public static Res Send<Req, Res>(Req request, string url, string tenant = null) where Req : AppRequestDC where Res : AppResponseDC
|
||||
{
|
||||
request.Tenant = tenant;
|
||||
if (tenant != null)
|
||||
request.Tenant = tenant;
|
||||
|
||||
var data = JsonConvert.SerializeObject(request);
|
||||
|
||||
var response_app8_str = Send(url, data, tenant);
|
||||
var response_app8_str = Send(url, data, request.Tenant);
|
||||
|
||||
if (string.IsNullOrEmpty(response_app8_str))
|
||||
return null;
|
||||
@@ -101,7 +102,7 @@ namespace BS.Shared.AppSender
|
||||
|
||||
response = await client.UploadStringTaskAsync(url, "POST", dataString);
|
||||
}
|
||||
|
||||
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
||||
17
Shared/Attributes/RequireNoTenantAttribute.cs
Normal file
17
Shared/Attributes/RequireNoTenantAttribute.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BS.Shared.Attributes
|
||||
{
|
||||
[AttributeUsage(AttributeTargets.Method, Inherited = true)]
|
||||
public class RequireNoTenantAttribute : Attribute
|
||||
{
|
||||
public RequireNoTenantAttribute()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
47
Shared/Attributes/RequirePermissionAttribute.cs
Normal file
47
Shared/Attributes/RequirePermissionAttribute.cs
Normal file
@@ -0,0 +1,47 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BS.Shared.Attributes
|
||||
{
|
||||
[AttributeUsage(AttributeTargets.Method, Inherited = true)]
|
||||
public class RequirePermissionAttribute : Attribute
|
||||
{
|
||||
public UserRightType[] Permissions { get; }
|
||||
|
||||
public RequirePermissionAttribute(params UserRightType[] permissions)
|
||||
{
|
||||
Permissions = permissions;
|
||||
}
|
||||
|
||||
public bool HasPermission(IEnumerable<UserRightType> rights)
|
||||
{
|
||||
if (Permissions is null || Permissions.Length == 0)
|
||||
return true;
|
||||
|
||||
foreach (var right in rights)
|
||||
{
|
||||
if (HasPermission(right))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool HasPermission(UserRightType right)
|
||||
{
|
||||
if (Permissions is null || Permissions.Length == 0)
|
||||
return true;
|
||||
|
||||
for (var i = 0; i < Permissions.Length; i++)
|
||||
{
|
||||
var permission = Permissions[i];
|
||||
if (right == permission) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1317,4 +1317,10 @@ namespace BS.Shared
|
||||
EmployeeMonthlySignature,
|
||||
BargeldkasseneinzahlungsSignature
|
||||
}
|
||||
|
||||
public enum GkvRawDataType
|
||||
{
|
||||
Auftragsdatei,
|
||||
Nutzdatendatei
|
||||
}
|
||||
}
|
||||
@@ -1160,6 +1160,11 @@ namespace BS.Shared.Core
|
||||
|
||||
return age;
|
||||
}
|
||||
|
||||
public static bool TryParseISO8601(string iso8601String, out DateTime date)
|
||||
{
|
||||
return DateTime.TryParse(iso8601String, out date);
|
||||
}
|
||||
}
|
||||
|
||||
public struct NullCompareResult
|
||||
|
||||
20
Shared/DataContracts/AdminService/AdminServiceSumReqDC.cs
Normal file
20
Shared/DataContracts/AdminService/AdminServiceSumReqDC.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BS.Shared.DataContracts.AdminService
|
||||
{
|
||||
[DataContract]
|
||||
public class AdminServiceSumReqDC : IAdminServiceDC
|
||||
{
|
||||
[DataMember(Name = "end", IsRequired = true)]
|
||||
public string End { get; set; }
|
||||
|
||||
[DataMember(Name = "start", IsRequired = true)]
|
||||
public string Start { get; set; }
|
||||
}
|
||||
}
|
||||
12
Shared/DataContracts/AdminService/IAdminServiceDC.cs
Normal file
12
Shared/DataContracts/AdminService/IAdminServiceDC.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BS.Shared.DataContracts.AdminService
|
||||
{
|
||||
public interface IAdminServiceDC : IDataContract
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -16,7 +16,7 @@ namespace BS.Shared.DataContracts.GkvAbrechnung
|
||||
|
||||
}
|
||||
|
||||
[JsonProperty("gkvinvoices")]
|
||||
[DataMember] public CompactGkvAbrechnungDC[] CompactGkvAbrechnungen { get; set; }
|
||||
[JsonProperty("sum")]
|
||||
[DataMember] public decimal Sum { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -133,6 +133,8 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AppSender\GkvSender.cs" />
|
||||
<Compile Include="Attributes\RequireNoTenantAttribute.cs" />
|
||||
<Compile Include="Attributes\RequirePermissionAttribute.cs" />
|
||||
<Compile Include="BeWoEntityEnums.cs" />
|
||||
<Compile Include="Core\AppSettingReader.cs" />
|
||||
<Compile Include="Core\ComplexWohnheimbuchungsRelationHelper.cs" />
|
||||
@@ -168,6 +170,8 @@
|
||||
<Compile Include="Core\ValidatorExtended.cs" />
|
||||
<Compile Include="Core\WohnheimbuchungsIntervall.cs" />
|
||||
<Compile Include="DataContracts\AbsenceOverviewFilterDC.cs" />
|
||||
<Compile Include="DataContracts\AdminService\IAdminServiceDC.cs" />
|
||||
<Compile Include="DataContracts\AdminService\AdminServiceSumReqDC.cs" />
|
||||
<Compile Include="DataContracts\AiSettingsDC.cs" />
|
||||
<Compile Include="DataContracts\AiChatDC.cs" />
|
||||
<Compile Include="DataContracts\AbwesenheitsInformationDC.cs" />
|
||||
@@ -539,6 +543,7 @@
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
|
||||
60
Tools/KTDReaderGUI/KTDReaderGUI.sln
Normal file
60
Tools/KTDReaderGUI/KTDReaderGUI.sln
Normal file
@@ -0,0 +1,60 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.35229.62
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KTDReaderGUI", "KTDReaderGUI\KTDReaderGUI.csproj", "{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dakota", "..\..\Dakota\Dakota.csproj", "{47331732-DD96-4075-869F-83AA9F3F9937}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BeWo.Styles", "..\..\BeWo.Styles\BeWo.Styles.csproj", "{9BAB16DE-E284-4B57-BD09-763FC5CE521A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shared", "..\..\Shared\Shared.csproj", "{2F50B83D-A3F0-4EC4-979A-3F9B7E3D8ED4}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Controls", "..\..\Controls\Controls.csproj", "{D5E53B0F-BF5A-41E8-93E2-0F32845FC729}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
DebugRemote|Any CPU = DebugRemote|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{47331732-DD96-4075-869F-83AA9F3F9937}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{47331732-DD96-4075-869F-83AA9F3F9937}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{47331732-DD96-4075-869F-83AA9F3F9937}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{47331732-DD96-4075-869F-83AA9F3F9937}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU
|
||||
{47331732-DD96-4075-869F-83AA9F3F9937}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{47331732-DD96-4075-869F-83AA9F3F9937}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9BAB16DE-E284-4B57-BD09-763FC5CE521A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9BAB16DE-E284-4B57-BD09-763FC5CE521A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9BAB16DE-E284-4B57-BD09-763FC5CE521A}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9BAB16DE-E284-4B57-BD09-763FC5CE521A}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9BAB16DE-E284-4B57-BD09-763FC5CE521A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9BAB16DE-E284-4B57-BD09-763FC5CE521A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2F50B83D-A3F0-4EC4-979A-3F9B7E3D8ED4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2F50B83D-A3F0-4EC4-979A-3F9B7E3D8ED4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2F50B83D-A3F0-4EC4-979A-3F9B7E3D8ED4}.DebugRemote|Any CPU.ActiveCfg = DebugRemote|Any CPU
|
||||
{2F50B83D-A3F0-4EC4-979A-3F9B7E3D8ED4}.DebugRemote|Any CPU.Build.0 = DebugRemote|Any CPU
|
||||
{2F50B83D-A3F0-4EC4-979A-3F9B7E3D8ED4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2F50B83D-A3F0-4EC4-979A-3F9B7E3D8ED4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D5E53B0F-BF5A-41E8-93E2-0F32845FC729}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D5E53B0F-BF5A-41E8-93E2-0F32845FC729}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D5E53B0F-BF5A-41E8-93E2-0F32845FC729}.DebugRemote|Any CPU.ActiveCfg = DebugRemote|Any CPU
|
||||
{D5E53B0F-BF5A-41E8-93E2-0F32845FC729}.DebugRemote|Any CPU.Build.0 = DebugRemote|Any CPU
|
||||
{D5E53B0F-BF5A-41E8-93E2-0F32845FC729}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D5E53B0F-BF5A-41E8-93E2-0F32845FC729}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {BDED1672-9A6A-498D-99CE-41528F6BA939}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
9
Tools/KTDReaderGUI/KTDReaderGUI/App.config
Normal file
9
Tools/KTDReaderGUI/KTDReaderGUI/App.config
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
|
||||
</startup>
|
||||
<appSettings>
|
||||
<add key="GkvKostentragerdateiFolderPath" value="C:\GkvAbrechnung\KTDatei\" />
|
||||
</appSettings>
|
||||
</configuration>
|
||||
8
Tools/KTDReaderGUI/KTDReaderGUI/App.xaml
Normal file
8
Tools/KTDReaderGUI/KTDReaderGUI/App.xaml
Normal file
@@ -0,0 +1,8 @@
|
||||
<Application
|
||||
x:Class="KTDReaderGUI.App"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:local="clr-namespace:KTDReaderGUI"
|
||||
StartupUri="MainWindow.xaml">
|
||||
<Application.Resources />
|
||||
</Application>
|
||||
17
Tools/KTDReaderGUI/KTDReaderGUI/App.xaml.cs
Normal file
17
Tools/KTDReaderGUI/KTDReaderGUI/App.xaml.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
|
||||
namespace KTDReaderGUI
|
||||
{
|
||||
/// <summary>
|
||||
/// Interaktionslogik für "App.xaml"
|
||||
/// </summary>
|
||||
public partial class App : Application
|
||||
{
|
||||
}
|
||||
}
|
||||
117
Tools/KTDReaderGUI/KTDReaderGUI/KTDReaderGUI.csproj
Normal file
117
Tools/KTDReaderGUI/KTDReaderGUI/KTDReaderGUI.csproj
Normal file
@@ -0,0 +1,117 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{F8EE2279-EDEA-4D4A-9D0F-89B7DA7E6AC2}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<RootNamespace>KTDReaderGUI</RootNamespace>
|
||||
<AssemblyName>KTDReaderGUI</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<Deterministic>true</Deterministic>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Configuration" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Xaml">
|
||||
<RequiredTargetFramework>4.0</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="WindowsBase" />
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="PresentationFramework" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ApplicationDefinition Include="App.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</ApplicationDefinition>
|
||||
<Page Include="MainWindow.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Compile Include="App.xaml.cs">
|
||||
<DependentUpon>App.xaml</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="MainWindow.xaml.cs">
|
||||
<DependentUpon>MainWindow.xaml</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Properties\AssemblyInfo.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Properties\Settings.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
</Compile>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\..\BeWo.Styles\BeWo.Styles.csproj">
|
||||
<Project>{9bab16de-e284-4b57-bd09-763fc5ce521a}</Project>
|
||||
<Name>BeWo.Styles</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\..\Controls\Controls.csproj">
|
||||
<Project>{d5e53b0f-bf5a-41e8-93e2-0f32845fc729}</Project>
|
||||
<Name>Controls</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\..\Dakota\Dakota.csproj">
|
||||
<Project>{47331732-DD96-4075-869F-83AA9F3F9937}</Project>
|
||||
<Name>Dakota</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\..\Shared\Shared.csproj">
|
||||
<Project>{2f50b83d-a3f0-4ec4-979a-3f9b7e3d8ed4}</Project>
|
||||
<Name>Shared</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
106
Tools/KTDReaderGUI/KTDReaderGUI/MainWindow.xaml
Normal file
106
Tools/KTDReaderGUI/KTDReaderGUI/MainWindow.xaml
Normal file
@@ -0,0 +1,106 @@
|
||||
<Window
|
||||
x:Class="KTDReaderGUI.MainWindow"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:local="clr-namespace:KTDReaderGUI"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
Title="Kostenträgerdatei Reader GUI"
|
||||
Width="500"
|
||||
Height="400"
|
||||
Background="{DynamicResource ApplicationBackground}"
|
||||
mc:Ignorable="d">
|
||||
<Window.Resources>
|
||||
<ResourceDictionary>
|
||||
<ResourceDictionary.MergedDictionaries>
|
||||
<!-- Common base theme -->
|
||||
<ResourceDictionary Source="pack://application:,,,/BeWo.Styles;component/ModernOrangeBlack.xaml" />
|
||||
</ResourceDictionary.MergedDictionaries>
|
||||
</ResourceDictionary>
|
||||
</Window.Resources>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="auto" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid Grid.Column="1" Margin="10">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="auto" />
|
||||
<ColumnDefinition Width="10" />
|
||||
<ColumnDefinition Width="auto" MinWidth="200" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="auto" />
|
||||
<RowDefinition Height="auto" />
|
||||
<RowDefinition Height="auto" />
|
||||
<RowDefinition Height="auto" />
|
||||
<RowDefinition Height="auto" />
|
||||
<RowDefinition Height="auto" />
|
||||
<RowDefinition Height="auto" />
|
||||
<RowDefinition Height="auto" />
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Label
|
||||
Grid.Row="0"
|
||||
Grid.Column="0"
|
||||
IsEnabled="False">
|
||||
Kostenträger Path
|
||||
</Label>
|
||||
<TextBox
|
||||
x:Name="input_file"
|
||||
Grid.Row="0"
|
||||
Grid.Column="2" />
|
||||
|
||||
<Label Grid.Row="1" Grid.Column="0">IK Krankenkasse</Label>
|
||||
<TextBox
|
||||
x:Name="input_krankenkasse"
|
||||
Grid.Row="1"
|
||||
Grid.Column="2" />
|
||||
|
||||
<Label Grid.Row="2" Grid.Column="0">Leistungserbringergruppe</Label>
|
||||
<TextBox
|
||||
x:Name="input_leistungsgruppe"
|
||||
Grid.Row="2"
|
||||
Grid.Column="2" />
|
||||
|
||||
<Button
|
||||
Grid.Row="3"
|
||||
Grid.ColumnSpan="3"
|
||||
Width="100"
|
||||
HorizontalAlignment="Center"
|
||||
Click="Button_Click">
|
||||
Ermitteln
|
||||
</Button>
|
||||
|
||||
<Label Grid.Row="4" Grid.Column="0">IK Krankenkasse</Label>
|
||||
<TextBox
|
||||
x:Name="out_ikkrankenkasse"
|
||||
Grid.Row="4"
|
||||
Grid.Column="2"
|
||||
IsEnabled="False" />
|
||||
|
||||
<Label Grid.Row="5" Grid.Column="0">IK Kostenträger</Label>
|
||||
<TextBox
|
||||
x:Name="out_ikkostentrager"
|
||||
Grid.Row="5"
|
||||
Grid.Column="2"
|
||||
IsEnabled="False" />
|
||||
|
||||
<Label Grid.Row="6" Grid.Column="0">IK Datenannahmestelle</Label>
|
||||
<TextBox
|
||||
x:Name="out_ikdatenannahmestelle"
|
||||
Grid.Row="6"
|
||||
Grid.Column="2"
|
||||
IsEnabled="False" />
|
||||
|
||||
<Label Grid.Row="7" Grid.Column="0">Bez Datenannahmestelle</Label>
|
||||
<TextBox
|
||||
x:Name="out_bezdatenannahmestelle"
|
||||
Grid.Row="7"
|
||||
Grid.Column="2"
|
||||
IsEnabled="False" />
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Window>
|
||||
95
Tools/KTDReaderGUI/KTDReaderGUI/MainWindow.xaml.cs
Normal file
95
Tools/KTDReaderGUI/KTDReaderGUI/MainWindow.xaml.cs
Normal file
@@ -0,0 +1,95 @@
|
||||
using Dakota.Logic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Data;
|
||||
using System.Windows.Documents;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Windows.Navigation;
|
||||
using System.Windows.Shapes;
|
||||
|
||||
namespace KTDReaderGUI
|
||||
{
|
||||
/// <summary>
|
||||
/// Interaktionslogik für MainWindow.xaml
|
||||
/// </summary>
|
||||
public partial class MainWindow : Window
|
||||
{
|
||||
private string KostentragerdateiFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvKostentragerdateiFolderPath");
|
||||
|
||||
private DakotaKTDReader Reader;
|
||||
|
||||
public MainWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
try
|
||||
{
|
||||
load();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private void load()
|
||||
{
|
||||
var path = KostentragerdateiFolderPath;
|
||||
|
||||
if (string.IsNullOrEmpty(path))
|
||||
{
|
||||
var root = Directory.GetCurrentDirectory();
|
||||
|
||||
path = System.IO.Path.Combine(root, "KTDatei");
|
||||
}
|
||||
|
||||
input_file.Text = path;
|
||||
|
||||
Reader = new DakotaKTDReader(path);
|
||||
}
|
||||
|
||||
private void Button_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
calc();
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private void calc()
|
||||
{
|
||||
var ikkrankenkasse = input_krankenkasse.Text;
|
||||
var leistungsgruppe = input_leistungsgruppe.Text;
|
||||
|
||||
if (ikkrankenkasse.Length != 9 || leistungsgruppe.Length != 7)
|
||||
return;
|
||||
|
||||
var rtn = Reader.Resolve(ikkrankenkasse, leistungsgruppe.Substring(0, 2), leistungsgruppe.Substring(2, 5));
|
||||
|
||||
if (rtn is null)
|
||||
{
|
||||
MessageBox.Show("Eingabe konnte nicht gefunden werden.");
|
||||
}
|
||||
else
|
||||
{
|
||||
out_ikkrankenkasse.Text = rtn.Item3;
|
||||
out_ikkostentrager.Text = rtn.Item2;
|
||||
out_ikdatenannahmestelle.Text = rtn.Item1;
|
||||
out_bezdatenannahmestelle.Text = rtn.Item4;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
55
Tools/KTDReaderGUI/KTDReaderGUI/Properties/AssemblyInfo.cs
Normal file
55
Tools/KTDReaderGUI/KTDReaderGUI/Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,55 @@
|
||||
using System.Reflection;
|
||||
using System.Resources;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Windows;
|
||||
|
||||
// Allgemeine Informationen über eine Assembly werden über die folgenden
|
||||
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
|
||||
// die einer Assembly zugeordnet sind.
|
||||
[assembly: AssemblyTitle("KTDReaderGUI")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("KTDReaderGUI")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2025")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
|
||||
// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
|
||||
// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
//Um mit dem Erstellen lokalisierbarer Anwendungen zu beginnen, legen Sie
|
||||
//<UICulture>ImCodeVerwendeteKultur</UICulture> in der .csproj-Datei
|
||||
//in einer <PropertyGroup> fest. Wenn Sie in den Quelldateien beispielsweise Deutsch
|
||||
//(Deutschland) verwenden, legen Sie <UICulture> auf \"de-DE\" fest. Heben Sie dann die Auskommentierung
|
||||
//des nachstehenden NeutralResourceLanguage-Attributs auf. Aktualisieren Sie "en-US" in der nachstehenden Zeile,
|
||||
//sodass es mit der UICulture-Einstellung in der Projektdatei übereinstimmt.
|
||||
|
||||
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
|
||||
|
||||
|
||||
[assembly: ThemeInfo(
|
||||
ResourceDictionaryLocation.None, //Speicherort der designspezifischen Ressourcenwörterbücher
|
||||
//(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
|
||||
// oder in den Anwendungsressourcen-Wörterbüchern nicht gefunden werden kann.)
|
||||
ResourceDictionaryLocation.SourceAssembly //Speicherort des generischen Ressourcenwörterbuchs
|
||||
//(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
|
||||
// designspezifischen Ressourcenwörterbuch nicht gefunden werden kann.)
|
||||
)]
|
||||
|
||||
|
||||
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
|
||||
//
|
||||
// Hauptversion
|
||||
// Nebenversion
|
||||
// Buildnummer
|
||||
// Revision
|
||||
//
|
||||
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
|
||||
// indem Sie "*" wie unten gezeigt eingeben:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
70
Tools/KTDReaderGUI/KTDReaderGUI/Properties/Resources.Designer.cs
generated
Normal file
70
Tools/KTDReaderGUI/KTDReaderGUI/Properties/Resources.Designer.cs
generated
Normal file
@@ -0,0 +1,70 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// Dieser Code wurde von einem Tool generiert.
|
||||
// Laufzeitversion: 4.0.30319.42000
|
||||
//
|
||||
// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
|
||||
// der Code erneut generiert wird.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
namespace KTDReaderGUI.Properties
|
||||
{
|
||||
/// <summary>
|
||||
/// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
|
||||
/// </summary>
|
||||
// Diese Klasse wurde von der StronglyTypedResourceBuilder-Klasse
|
||||
// über ein Tool wie ResGen oder Visual Studio automatisch generiert.
|
||||
// Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
|
||||
// mit der Option /str erneut aus, oder erstellen Sie Ihr VS-Projekt neu.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources
|
||||
{
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager
|
||||
{
|
||||
get
|
||||
{
|
||||
if ((resourceMan == null))
|
||||
{
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("KTDReaderGUI.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
|
||||
/// Ressourcenlookups, die diese stark typisierte Ressourcenklasse verwenden.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture
|
||||
{
|
||||
get
|
||||
{
|
||||
return resourceCulture;
|
||||
}
|
||||
set
|
||||
{
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
117
Tools/KTDReaderGUI/KTDReaderGUI/Properties/Resources.resx
Normal file
117
Tools/KTDReaderGUI/KTDReaderGUI/Properties/Resources.resx
Normal file
@@ -0,0 +1,117 @@
|
||||
<?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.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: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" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
</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" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
</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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
29
Tools/KTDReaderGUI/KTDReaderGUI/Properties/Settings.Designer.cs
generated
Normal file
29
Tools/KTDReaderGUI/KTDReaderGUI/Properties/Settings.Designer.cs
generated
Normal file
@@ -0,0 +1,29 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
namespace KTDReaderGUI.Properties
|
||||
{
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
|
||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
|
||||
{
|
||||
|
||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||
|
||||
public static Settings Default
|
||||
{
|
||||
get
|
||||
{
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
|
||||
<Profiles>
|
||||
<Profile Name="(Default)" />
|
||||
</Profiles>
|
||||
<Settings />
|
||||
</SettingsFile>
|
||||
Reference in New Issue
Block a user