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

This commit is contained in:
2024-09-03 11:03:04 +02:00
76 changed files with 6468 additions and 2394 deletions

View File

@@ -16,7 +16,7 @@
<EnableSecurityDebugging>true</EnableSecurityDebugging>
<TargetZone>Internet</TargetZone>
<GenerateManifests>true</GenerateManifests>
<SignManifests>false</SignManifests>
<SignManifests>true</SignManifests>
<ManifestKeyFile>
</ManifestKeyFile>
<ManifestCertificateThumbprint>8CA4066C36C87B745E4016FDA715A6DB16FCFFA9</ManifestCertificateThumbprint>
@@ -43,12 +43,12 @@
<TargetCulture>de-DE</TargetCulture>
<ProductName>BeWoPlaner</ProductName>
<PublisherName>ownSoft GmbH</PublisherName>
<MinimumRequiredVersion>2.0.1.248</MinimumRequiredVersion>
<MinimumRequiredVersion>2.0.1.249</MinimumRequiredVersion>
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
<WebPage>publish.htm</WebPage>
<OpenBrowserOnPublish>false</OpenBrowserOnPublish>
<TrustUrlParameters>true</TrustUrlParameters>
<ApplicationRevision>249</ApplicationRevision>
<ApplicationRevision>250</ApplicationRevision>
<ApplicationVersion>2.0.1.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<CreateDesktopShortcut>true</CreateDesktopShortcut>

View File

@@ -50,7 +50,7 @@ namespace BeWo
public static MainControl MainControl;
public static string ShortVersion = "3.21";
public static string Version = "Version 3.21.4";
public static string Version = "Version 3.21.5";
public static int RenderTier = 0;

View File

@@ -244,15 +244,19 @@ namespace BeWo
//!!!!Wenn hier neue Keys hinzugefügt werden, muss das auch in der Klasse ChatController.HauptKlassen.Chat und im DatabaseTerminator gemacht werden!!
private static String PUB_KEY_X3 = "3082010A02820101009CD30CF05AE52E47B7725D3783B3686330EAD735261925E1BDBE35F170922FB7B84B4105ABA99E350858ECB12AC468870BA3E375E4E6F3A76271BA7981601FD7919A9FF3D0786771C8690E9591CFFEE699E9603C48CC7ECA4D7712249D471B5AEBB9EC1E37001C9CAC7BA705EACE4AEBBD41E53698B9CBFD6D3C9668DF232A42900C867467C87FA59AB8526114133F65E98287CBDBFA0E56F68689F3853F9786AFB0DC1AEF6B0D95167DC42BA065B299043675806BAC4AF31B9049782FA2964F2A20252904C674C0D031CD8F31389516BAA833B843F1B11FC3307FA27931133D2D36F8E3FCF2336AB93931C5AFC48D0D1D641633AAFA8429B6D40BC0D87DC3930203010001";
private static String PUB_KEY_X3 = "9CD30CF05AE52E47B7725D3783B3686330EAD735261925E1BDBE35F170922FB7B84B4105ABA99E350858ECB12AC468870BA3E375E4E6F3A76271BA7981601FD7919A9FF3D0786771C8690E9591CFFEE699E9603C48CC7ECA4D7712249D471B5AEBB9EC1E37001C9CAC7BA705EACE4AEBBD41E53698B9CBFD6D3C9668DF232A42900C867467C87FA59AB8526114133F65E98287CBDBFA0E56F68689F3853F9786AFB0DC1AEF6B0D95167DC42BA065B299043675806BAC4AF31B9049782FA2964F2A20252904C674C0D031CD8F31389516BAA833B843F1B11FC3307FA27931133D2D36F8E3FCF2336AB93931C5AFC48D0D1D641633AAFA8429B6D40BC0D87DC3930203010001";
private static String PUB_KEY_R3 = "3082010A0282010100BB021528CCF6A094D30F12EC8D5592C3F882F199A67A4288A75D26AAB52BB9C54CB1AF8E6BF975C8A3D70F4794145535578C9EA8A23919F5823C42A94E6EF53BC32EDB8DC0B05CF35938E7EDCF69F05A0B1BBEC094242587FA3771B313E71CACE19BEFDBE43B45524596A9C153CE34C852EEB5AEED8FDE6070E2A554ABB66D0E97A540346B2BD3BC66EB66347CFA6B8B8F572999F830175DBA726FFB81C5ADD286583D17C7E709BBF12BF786DCC1DA715DD446E3CCAD25C188BC60677566B3F118F7A25CE653FF3A88B647A5FF1318EA9809773F9D53F9CF01E5F5A6701714AF63A4FF99B3939DDC53A706FE48851DA169AE2575BB13CC5203F5ED51A18BDB150203010001";
private static String PUB_KEY_R3 = "BB021528CCF6A094D30F12EC8D5592C3F882F199A67A4288A75D26AAB52BB9C54CB1AF8E6BF975C8A3D70F4794145535578C9EA8A23919F5823C42A94E6EF53BC32EDB8DC0B05CF35938E7EDCF69F05A0B1BBEC094242587FA3771B313E71CACE19BEFDBE43B45524596A9C153CE34C852EEB5AEED8FDE6070E2A554ABB66D0E97A540346B2BD3BC66EB66347CFA6B8B8F572999F830175DBA726FFB81C5ADD286583D17C7E709BBF12BF786DCC1DA715DD446E3CCAD25C188BC60677566B3F118F7A25CE653FF3A88B647A5FF1318EA9809773F9D53F9CF01E5F5A6701714AF63A4FF99B3939DDC53A706FE48851DA169AE2575BB13CC5203F5ED51A18BDB150203010001";
private static String PUB_KEY_E1 = "04245C2DA22AFD1C4BA65D97732731ACB2A06962EF65E8A6B0F0AC4B9FFF1C0B700FD3982F4DFC0F009B37F074055732972E05EF2A4325A3FB6E342713F64F7E69D302995EEB244792C1249BE6B1218FC12481FC68CC1F69BA58F51922F774C616";
private static String PUB_KEY_E1 = "245c2da22afd1c4ba65d97732731acb2a06962ef65e8a6b0f0ac4b9fff1c0b700fd3982f4dfc0f009b37f074055732972e05ef2a4325a3fb6e342713f64f7e69d302995eeb244792c1249be6b1218fc12481fc68cc1f69ba58f51922f774c616";
private static String PUB_KEY_R11 = "3082010A0282010100BA87BC5C1B0039CBCA0ACDD46710F9013CA54EA561CB26CA52FB1501B7B928F5281EED27B324183967090C08ECE03AB03B770EBDF3E53954410C4EAE41D69974DE51DBEF7BFF58BDA8B713F6DE31D5F272C9726A0B8374959C4600641499F3B1D922D9CDA892AA1C267A3FFEEF58057B089581DB710F8EFBE33109BB09BE504D5F8F91763D5A9D9E83F2E9C466B3E106664348188065A037189A9B843297B1B2BDC4F815009D2788FBE26317966C9B27674BC4DB285E69C279F0495CE02450E1C4BCA105AC7B406D00B4C2413FA758B82FC55C9BA5BB099EF1FEEBB08539FDA80AEF45C478EB652AC2CF5F3CDEE35C4D1BF70B272BAA0B4277534F796A1D87D90203010001";
private static String PUB_KEY_E5 = "0d0b3a8a6b618eb6efdc5f58e7c6424554ab63f66661480a2e5975b481023750b73f1679dc98eca1289772201c2ccfd57c52204e54785b84146bc090ae85ecc051413c5a877f064dd4fe60d1fa6c2de17d951088a208540f991a4ce6ea0aacd8";
private static String PUB_KEY_R10 = "3082010A0282010100CF57E5E6C45412EDB447FEC92758764650288C1D3E88DF059DD5B51829BDDDB55ABFFAF6CEA3BEAF00214B625A5A3C012FC55803F689FF8E1143EBC1B5E01407968F6F1FD7E7BA8139097565B7C2AF185B372628E7A3F4072B6D1AFFAB58BC95AE40FFE9CB57C4B55B7F780D1861BC17E754C6BB4991CD6E18D18085EEA66536BC74EABC504CEAFC21F338169394BAB0D36B3806CD16127ACA5275C8AD76B2C29C5D98455C6F617BC62DEE3C13528601D957E6381CDF8DB51F92919AE74A1CCC45A87255F0B0E6A307ECFDA71B669E3F488B71847158C93AFAEF5EF25B442B3C74E78FB247C1076ACD9AB70D96F712812651540AEC61F6F7F5E2F28AC8950D8D0203010001";
private static String PUB_KEY_E6 = "d9f19e4687f8217160a826eba3fab9eada1db912a7d426d95114b1617c7596bf220b391fd5bed10a46aa2d3c4a09842ebe409555e91940376675ed324e770449f8707bc318e7cef77110feac74d800d4ed6d1c731633109c3ab2ea6c62f4bdb8";
private static String PUB_KEY_R10 = "CF57E5E6C45412EDB447FEC92758764650288C1D3E88DF059DD5B51829BDDDB55ABFFAF6CEA3BEAF00214B625A5A3C012FC55803F689FF8E1143EBC1B5E01407968F6F1FD7E7BA8139097565B7C2AF185B372628E7A3F4072B6D1AFFAB58BC95AE40FFE9CB57C4B55B7F780D1861BC17E754C6BB4991CD6E18D18085EEA66536BC74EABC504CEAFC21F338169394BAB0D36B3806CD16127ACA5275C8AD76B2C29C5D98455C6F617BC62DEE3C13528601D957E6381CDF8DB51F92919AE74A1CCC45A87255F0B0E6A307ECFDA71B669E3F488B71847158C93AFAEF5EF25B442B3C74E78FB247C1076ACD9AB70D96F712812651540AEC61F6F7F5E2F28AC8950D8D0203010001";
private static String PUB_KEY_R11 = "BA87BC5C1B0039CBCA0ACDD46710F9013CA54EA561CB26CA52FB1501B7B928F5281EED27B324183967090C08ECE03AB03B770EBDF3E53954410C4EAE41D69974DE51DBEF7BFF58BDA8B713F6DE31D5F272C9726A0B8374959C4600641499F3B1D922D9CDA892AA1C267A3FFEEF58057B089581DB710F8EFBE33109BB09BE504D5F8F91763D5A9D9E83F2E9C466B3E106664348188065A037189A9B843297B1B2BDC4F815009D2788FBE26317966C9B27674BC4DB285E69C279F0495CE02450E1C4BCA105AC7B406D00B4C2413FA758B82FC55C9BA5BB099EF1FEEBB08539FDA80AEF45C478EB652AC2CF5F3CDEE35C4D1BF70B272BAA0B4277534F796A1D87D90203010001";
private bool PinPublicKey(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslpolicyerrors)
@@ -263,15 +267,18 @@ namespace BeWo
return false;
bool chainContainsPk = false;
foreach (var element in chain.ChainElements)
{
String pk = element.Certificate.GetPublicKeyString();
String testx3 = PUB_KEY_X3;
String testr3 = PUB_KEY_R3;
String teste1 = PUB_KEY_E1;
String r11 = PUB_KEY_R11;
if (pk == PUB_KEY_X3 || pk == PUB_KEY_R3 || pk == PUB_KEY_E1 || pk == PUB_KEY_R11 || pk == PUB_KEY_R10)
String pk = element.Certificate.GetPublicKeyString().ToLower();
if (pk.Contains(PUB_KEY_X3.ToLower()) ||
pk.Contains(PUB_KEY_R3.ToLower()) ||
pk.Contains(PUB_KEY_E1.ToLower()) ||
pk.Contains(PUB_KEY_E5.ToLower()) ||
pk.Contains(PUB_KEY_E6.ToLower()) ||
pk.Contains(PUB_KEY_R10.ToLower()) ||
pk.Contains(PUB_KEY_R11.ToLower()))
{
chainContainsPk = true;
}

View File

@@ -65,7 +65,7 @@
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="TypeString" Header="Art der Rechnung" Width="150" />
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="CustomerName" Header="{markup:Translate Klient/in}" Width="100" />
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="AccountingPeriodString" SortFieldName="AccountingPeriodStart" Header="Zeitraum" Width="100" />
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="InvoiceNumber" Header="Nummer" />
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="InvoiceNumber" Header="Nummer" SortOrder="Ascending" />
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="InvoiceDate" Header="Datum" EditSettings="{dxe:DateSettings DisplayFormat=d}" MinWidth="70" />
<dxg:GridColumn ReadOnly="True" AllowEditing="False" FieldName="RecipientString" Header="{markup:Translate EmpfängerSingular}" />
<!--<dxg:GridColumn FieldName="AccountingPeriodString" Header="Abrechnungszeitraum" />-->

View File

@@ -82,10 +82,22 @@
<TextBox Grid.Column="1" Margin="1" VerticalContentAlignment="Center" Text="{Binding ViewModel.NewVM.Description, UpdateSourceTrigger=PropertyChanged}" />
<Button Grid.Column="2" Height="25" Content="Hinzufügen" Margin="3" Click="ZielHinzufuegenButton_Click" />
<Button Grid.Column="3" Height="25" Content="Icf Importieren" Margin="3" Click="IcfImport_Click" />
<ToggleButton Grid.Column="4" Height="25" Content="Bearbeiten" Margin="3" Checked="ToggleButton_Checked" Unchecked="ToggleButton_Unchecked" Visibility="Collapsed"/>
<StackPanel Orientation="Horizontal" Grid.Column="5" Grid.Row="0" Grid.ColumnSpan="10" HorizontalAlignment="Right" Visibility="Collapsed">
<Button x:Name="PrevButton" Height="25" Content="Prev" Margin="3" Click="PrevButton_Click" />
<Button x:Name="NextButton" Height="25" Content="Next" Margin="3" Click="NextButton_Click" />
<ToggleButton x:Name="EditToggleButton" Grid.Column="4" Width="157" Height="25" Content="Bearbeiten aktivieren" Margin="3" Checked="ToggleButton_Checked" Unchecked="ToggleButton_Unchecked" Visibility="Visible" ToolTip="Wenn der Bearbeiten Modus aktiviert ist, können Sie Elemente mit Drag und Drop verschieben"/>
<StackPanel Orientation="Horizontal" Grid.Column="5" Grid.Row="0" Grid.ColumnSpan="10" HorizontalAlignment="Right" Visibility="Visible">
<Button x:Name="PrevButton" Height="25" Width="25" Margin="3" Click="PrevButton_Click" ToolTip="Letzte Änderung rückgängig machen">
<Image Source="..\..\Ressources\Icons\Undo.png" Height="18" VerticalAlignment="Center" HorizontalAlignment="Center" Width="20" Margin="0,3,0,0" />
</Button>
<Button x:Name="NextButton" Height="25" Width="25" Margin="3" Click="NextButton_Click">
<Image Source="..\..\Ressources\Icons\Undo.png" Height="18" VerticalAlignment="Center" HorizontalAlignment="Center" Width="20" Margin="0,3,0,0" />
<Button.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="-1" />
<TranslateTransform X="25" />
</TransformGroup>
</Button.RenderTransform>
</Button>
</StackPanel>
</Grid>

View File

@@ -341,10 +341,12 @@ namespace BeWo.View.Detail
private void ToggleButton_Checked(object sender, RoutedEventArgs e)
{
Bearbeitungsmodus = true;
EditToggleButton.Content = "Bearbeiten deaktivieren";
}
private void ToggleButton_Unchecked(object sender, RoutedEventArgs e)
{
Bearbeitungsmodus = false;
EditToggleButton.Content = "Bearbeiten aktivieren";
}
private void StartCopyItem(SupportConceptGoalTreeItem _item, SupportConceptGoalTreeItem _copy)

View File

@@ -133,7 +133,7 @@
<dxg:GridColumn x:Name="column_interval" FieldName="AccountingInterval" Header="Abrechnungsintervall" Width="130" />
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView AutoWidth="true" ShowGroupPanel="False" ShowGroupedColumns="false" ShowTotalSummary="False" NavigationStyle="Cell" />
<dxg:TableView AutoWidth="True" ShowGroupPanel="False" ShowGroupedColumns="false" ShowTotalSummary="False" NavigationStyle="Cell" />
</dxg:GridControl.View>
</dxg:GridControl>
<Popup x:Name="popup_costrateperiods" StaysOpen="false" Placement="MousePoint">

View File

@@ -16,8 +16,8 @@
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
@@ -26,9 +26,8 @@
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="180" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
@@ -39,9 +38,9 @@
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label Grid.Column="0" Grid.Row="0">Bezeichnung</Label>
<TextBox Grid.Column="1" Grid.Row="0" Grid.ColumnSpan="2" Margin="3" Height="23" Text="{val:ValidationBinding Path=NewVM.Name, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Grid.Column="1" Grid.Row="0" Margin="3" Height="23" Text="{val:ValidationBinding Path=NewVM.Name, UpdateSourceTrigger=PropertyChanged}" />
<Label Grid.Column="0" Grid.Row="1">Kategorie</Label>
<controls:NullItemComboBox Name="combobox_categories" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="2" Height="23" ItemsSource="{Binding Path=PossibleCategories, Mode=OneWay}" Margin="3" SelectedItem="{val:ValidationBinding Path=NewVM.ServiceCategory}" SelectionChanged="Combobox_categories_OnSelected">
<controls:NullItemComboBox Name="combobox_categories" Grid.Column="1" Grid.Row="1" Height="23" ItemsSource="{Binding Path=PossibleCategories, Mode=OneWay}" Margin="3" SelectedItem="{val:ValidationBinding Path=NewVM.ServiceCategory}" SelectionChanged="Combobox_categories_OnSelected">
<ComboBox.Resources>
<DataTemplate x:Key="DropDownItemTemplate">
<Grid>
@@ -66,17 +65,17 @@
</ComboBox.ItemContainerStyle>
</controls:NullItemComboBox>
<Label Content="Position" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Left" Grid.ColumnSpan="2" />
<Label Content="Position" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Left" />
<dxe:SpinEdit EditValueType="{x:Type sys:Int32}" MinValue="0" Margin="3" IsFloatValue="False" Grid.Column="2" Grid.Row="2" Height="23" EditValue="{Binding Path=NewVM.Position, UpdateSourceTrigger=PropertyChanged}" />
<dxe:SpinEdit EditValueType="{x:Type sys:Int32}" MinValue="0" Margin="3" IsFloatValue="False" Grid.Column="1" Grid.Row="2" Height="23" EditValue="{Binding Path=NewVM.Position, UpdateSourceTrigger=PropertyChanged}" />
<Label Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="2" Content="{t:Translate Prozent Abrechenbar}"/>
<Label Grid.Column="0" Grid.Row="4" Grid.ColumnSpan="2" Content="{t:Translate Prozent Budget}"/>
<Label Grid.Column="0" Grid.Row="5" Grid.ColumnSpan="2" Content="{t:Translate Prozent Stundenkonto}"/>
<Label Grid.Column="0" Grid.Row="3" Content="{t:Translate Prozent Abrechenbar}"/>
<Label Grid.Column="0" Grid.Row="4" Content="{t:Translate Prozent Budget}"/>
<Label Grid.Column="0" Grid.Row="5" Content="{t:Translate Prozent Stundenkonto}"/>
<dxe:SpinEdit IsFloatValue="True" MinValue="0" MaxValue="100" Increment="10" Grid.Column="2" Grid.Row="3" Margin="3" Height="23" EditValue="{Binding Path=NewVM.ProzentAbrechenbar, UpdateSourceTrigger=PropertyChanged}" />
<dxe:SpinEdit IsFloatValue="True" MinValue="0" MaxValue="100" Increment="10" Grid.Column="2" Grid.Row="4" Margin="3" Height="23" EditValue="{Binding Path=NewVM.ProzentBudget, UpdateSourceTrigger=PropertyChanged}" />
<dxe:SpinEdit IsFloatValue="True" MinValue="0" MaxValue="100" Increment="10" Grid.Column="2" Grid.Row="5" Margin="3" Height="23" EditValue="{Binding Path=NewVM.ProzentStundenkonto, UpdateSourceTrigger=PropertyChanged}" />
<dxe:SpinEdit IsFloatValue="True" MinValue="0" MaxValue="100" Increment="10" Grid.Column="1" Grid.Row="3" Margin="3" Height="23" EditValue="{Binding Path=NewVM.ProzentAbrechenbar, UpdateSourceTrigger=PropertyChanged}" />
<dxe:SpinEdit IsFloatValue="True" MinValue="0" MaxValue="100" Increment="10" Grid.Column="1" Grid.Row="4" Margin="3" Height="23" EditValue="{Binding Path=NewVM.ProzentBudget, UpdateSourceTrigger=PropertyChanged}" />
<dxe:SpinEdit IsFloatValue="True" MinValue="0" MaxValue="100" Increment="10" Grid.Column="1" Grid.Row="5" Margin="3" Height="23" EditValue="{Binding Path=NewVM.ProzentStundenkonto, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
@@ -112,7 +111,7 @@
</Grid>
</Border>
<Button Name="button_addServiceDescription" Click="button_addServiceDescription_Click" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2" Height="25" Margin="3,3,3,3" Padding="5 0" IsDefault="True" HorizontalAlignment="Right">Hinzufügen</Button>
<dxg:GridControl x:Name="datagrid_descriptions" Margin="0,10,0,0" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="7" DataSource="{Binding VMList}">
<dxg:GridControl x:Name="datagrid_descriptions" Margin="0,10,0,0" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="3" DataSource="{Binding VMList}">
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="IsDeleteable" Header="" FixedWidth="True" Width="24" ReadOnly="True">
<dxg:GridColumn.CellTemplate>
@@ -140,7 +139,7 @@
<dxg:GridColumn FieldName="ProzentStundenkonto" Header="Prozent Stundenkonto" Width="130" EditSettings="{dxe:TextSettings DisplayFormat=0.##, Mask=f2, MaskType=Numeric}"/>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView AutoWidth="true" ShowGroupPanel="False" ShowGroupedColumns="false" ShowTotalSummary="False" NavigationStyle="Cell" />
<dxg:TableView AutoWidth="True" ShowGroupPanel="False" ShowGroupedColumns="false" ShowTotalSummary="False" NavigationStyle="Cell" />
</dxg:GridControl.View>
</dxg:GridControl>
<Popup x:Name="popup_costrateperiods" StaysOpen="false" Placement="MousePoint">

View File

@@ -57,28 +57,31 @@ namespace BeWo.View.Detail
}
private void _YearPicker_EditValueChanged(object sender, EditValueChangedEventArgs e)
{
if (_GridLeaveDays == null)
if (_YearPicker.SelectedItem != null)
{
_GridLeaveDays = rootGrid.Resources["datagrid_leavedays"] as GridControl;
WPFGridLeaveDays.Children.Add(_GridLeaveDays);
}
var urlaubskonto = ServiceFacade.DoEmployeeServiceSync(s => s.ErstelleUrlaubskontoDarstellung(DataContract, (int)_YearPicker.SelectedItem));
if (urlaubskonto == null)
{
urlaubskonto = new List<UrlaubskontoDarstellungDC>();
urlaubskonto.Add(new UrlaubskontoDarstellungDC()
if (_GridLeaveDays == null)
{
Erlaeuterung = "Es existiert kein Vertrag für ausgewähltes Jahr",
});
button_openLeaveDayDialogue.Visibility = Visibility.Collapsed;
}
else
button_openLeaveDayDialogue.Visibility = Visibility.Visible;
_GridLeaveDays = rootGrid.Resources["datagrid_leavedays"] as GridControl;
_GridLeaveDays.ItemsSource = urlaubskonto;
WPFGridLeaveDays.Children.Add(_GridLeaveDays);
}
var urlaubskonto = ServiceFacade.DoEmployeeServiceSync(s => s.ErstelleUrlaubskontoDarstellung(DataContract, (int)_YearPicker.SelectedItem));
if (urlaubskonto == null)
{
urlaubskonto = new List<UrlaubskontoDarstellungDC>();
urlaubskonto.Add(new UrlaubskontoDarstellungDC()
{
Erlaeuterung = "Es existiert kein Vertrag für ausgewähltes Jahr",
});
button_openLeaveDayDialogue.Visibility = Visibility.Collapsed;
}
else
button_openLeaveDayDialogue.Visibility = Visibility.Visible;
_GridLeaveDays.ItemsSource = urlaubskonto;
}
}
private void button_addLeaveDay_Click(object sender, RoutedEventArgs e)

View File

@@ -13,11 +13,27 @@ namespace BeWo.View.Detail.Zeiterfassung
{
public partial class ServiceRecordCreationView
{
private DateTime _StartDatum;
private DateTime _EndDatum;
public DateTime StartDatum { get; set; }
public DateTime StartDatum
{
get { return _StartDatum; }
set
{
_StartDatum = value;
UpdateSelectedArbeitszeitVm();
}
}
public DateTime EndDatum { get; set; }
public DateTime EndDatum {
get { return _EndDatum; }
set
{
_EndDatum = value;
UpdateSelectedArbeitszeitVm();
}
}
public SupportConceptCostBearerRelDC SupportConceptCostBearerRel { get; set; }
@@ -44,7 +60,13 @@ namespace BeWo.View.Detail.Zeiterfassung
private void UpdateSelectedArbeitszeitVm()
{
SelectedArbeitszeitVM = ArbeitszeitListVM.VMList[0];
foreach (var item in ArbeitszeitListVM.VMList)
{
if ((!item.GueltigVon.HasValue || item.GueltigVon <= EndDatum) && (!item.GueltigBis.HasValue || item.GueltigBis >= StartDatum))
{
SelectedArbeitszeitVM = item;
}
}
}

View File

@@ -54,7 +54,8 @@ namespace BeWo.View.Navigation
{
textblock_link.Visibility = Visibility.Collapsed;
}
//###CB SERIENBRIEF mainNavigationView.MailMergeButton.Visibility = Visibility.Collapsed;
mainNavigationView.chkShowDeleted.Visibility = Visibility.Collapsed;
//###CB SERIENBRIEF mainNavigationView.MailMergeButton.Visibility = Visibility.Collapsed;
}
private void OnLoaded(object sender, RoutedEventArgs e)

View File

@@ -99,9 +99,13 @@
<dxe:DateEdit MaskType="DateTimeAdvancingCaret" AllowNullInput="True" Grid.Column="1" Grid.Row="0" Margin="3" Width="125" Height="23" EditValue="{Binding Path=GueltigVon, UpdateSourceTrigger=PropertyChanged}" />
<dxe:DateEdit MaskType="DateTimeAdvancingCaret" AllowNullInput="True" Grid.Column="3" Grid.Row="0" Margin="3" Width="125" Height="23" EditValue="{Binding Path=GueltigBis, UpdateSourceTrigger=PropertyChanged}" />
<Button Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Content="{markup:Translate Neuen Eintrag hinzufügen}" HorizontalAlignment="Left" Click="AddArbeitszeitToView_Click" Height="23" Margin="0,10,0,0" />
<StackPanel Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="5" Orientation="Horizontal">
<Button Content="{markup:Translate Neuen Eintrag hinzufügen}" HorizontalAlignment="Left" Click="AddArbeitszeitToView_Click" Height="23" Margin="0,10,0,0" />
<Button Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" Content="{markup:Translate Gesamte Betreuungszeiten kopieren}" HorizontalAlignment="Left" Click="CopyArbeitszeit_Click" Height="23" Margin="10,10,0,0" />
<controls:PopupNonTopmost x:Name="popup_newArbeitszeitEintrag" Placement="MousePoint" StaysOpen="True">
</StackPanel>
<controls:PopupNonTopmost x:Name="popup_newArbeitszeitEintrag" Placement="MousePoint" StaysOpen="True">
<Border Background="White" Padding="3" BorderThickness="1" BorderBrush="Gray">
<GroupBox Name="groupbox_newArbeistzeit" Header="Neuen Eintrag hinzufügen" Style="{DynamicResource ObjectEditGroupBox}">
<Grid>
@@ -203,9 +207,10 @@
</dxg:GridColumn.EditTemplate>
</dxg:GridColumn>
<dxg:GridColumn Header="Bemerkungen" FieldName="Notice" />
</dxg:GridControl.Columns>
<dxg:GridColumn Header="" FieldName="Infos" AllowEditing="False" AllowSorting="False" Width="150"/>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView NavigationStyle="Cell" Margin="2,2,2,2" AllowBestFit="True" BestFitMode="AllRows" AutoWidth="True" ShowGroupPanel="False" ShowGroupedColumns="False" ShowTotalSummary="False" HorizontalContentAlignment="Left" ShowingEditor="GridViewBase_OnShowingEditor" />
<dxg:TableView NavigationStyle="Cell" Margin="2,2,2,2" AllowBestFit="True" BestFitMode="AllRows" ShowGroupPanel="False" ShowGroupedColumns="False" ShowTotalSummary="False" HorizontalContentAlignment="Left" ShowingEditor="GridViewBase_OnShowingEditor" />
</dxg:GridControl.View>
</dxg:GridControl>
</GroupBox>

View File

@@ -11,6 +11,8 @@ using BS.Shared.Core;
using BS.Shared.DataContracts.Compact;
using DevExpress.Xpf.Grid;
using System;
using BS.Shared.DataContracts;
using System.Collections.Generic;
namespace BeWo.View
{
@@ -114,11 +116,11 @@ namespace BeWo.View
private void AddArbeitszeitToView_Click(object sender, RoutedEventArgs e)
{
var popup = tabcontrol_Arbeitszeit.GetAllChildren().OfType<PopupNonTopmost>();
var popup = tabcontrol_Arbeitszeit.GetAllChildren().OfType<PopupNonTopmost>();
var popup_NewArbeitszeitEintrag = popup.First(x => x.Name.Equals("popup_newArbeitszeitEintrag"));
var popup_NewArbeitszeitEintrag = popup.First(x => x.Name.Equals("popup_newArbeitszeitEintrag"));
popup_NewArbeitszeitEintrag.IsOpen = true;
popup_NewArbeitszeitEintrag.IsOpen = true;
}
private void PopupArbeitszeitClose_Click(object sender, RoutedEventArgs e)
@@ -163,6 +165,33 @@ namespace BeWo.View
grid_ArbeitszeitEintrag.RefreshData();
}
private void CopyArbeitszeit_Click(object sender, RoutedEventArgs e)
{
var arbeitszeit = tabcontrol_Arbeitszeit.SelectedItem as ArbeitszeitVM;
var dc = new ArbeitszeitDC();
if (arbeitszeit.GueltigBis.HasValue)
{
dc.GueltigVon = arbeitszeit.GueltigBis.Value.AddDays(1);
}
dc.Eintraege = new List<ArbeitszeitEintragDC>();
foreach (var ae in arbeitszeit.ArbeitszeitEintraege.VMList)
{
var copy = new ArbeitszeitEintragDC();
copy.Tag = ae.Tag;
copy.UhrzeitVon = ae.UhrzeitVon;
copy.UhrzeitBis = ae.UhrzeitBis;
copy.Notice = ae.Notice;
copy.Employee = ae.Employee;
dc.Eintraege.Add(copy);
}
var copyVm = new ArbeitszeitVM(dc);
ViewModel.VMList.Add(copyVm);
tabcontrol_Arbeitszeit.SelectedIndex = tabcontrol_Arbeitszeit.Items.Count - 1;
}
private void GridControl_OnCustomColumnSort(object sender, CustomColumnSortEventArgs e)
{
var comparer = new WochentagComparerClass();

View File

@@ -2,6 +2,7 @@ using BS.Shared;
using BS.Shared.DataContracts;
using BeWo.Validation;
using BS.Shared.DataContracts.Compact;
using System;
namespace BeWo.ViewModel
{
@@ -49,6 +50,7 @@ namespace BeWo.ViewModel
_UhrzeitVon = value;
StoreDirtyInformation(AreDifferent(DataContract.UhrzeitVon, value), PropertyName_UhrzeitVon);
FirePropertyChanged(PropertyName_UhrzeitVon);
FirePropertyChanged("Infos");
}
}
}
@@ -64,7 +66,7 @@ namespace BeWo.ViewModel
{
_UhrzeitBis = value;
StoreDirtyInformation(AreDifferent(DataContract.UhrzeitBis, value), PropertyName_UhrzeitBis);
FirePropertyChanged(PropertyName_UhrzeitBis);
FirePropertyChanged("Infos");
}
}
}
@@ -101,6 +103,30 @@ namespace BeWo.ViewModel
}
}
public string Infos
{
get
{
if (!string.IsNullOrEmpty(UhrzeitVon) && !string.IsNullOrEmpty(UhrzeitVon))
{
String dateStr1 = String.Format("{0:dd.MM.yyyy} {1}", DateTime.Now, UhrzeitVon);
String dateStr2 = String.Format("{0:dd.MM.yyyy} {1}", DateTime.Now, UhrzeitBis);
DateTime date1;
DateTime date2;
if (DateTime.TryParse(dateStr1, out date1) && DateTime.TryParse(dateStr2, out date2))
{
return String.Format("Gesamtstunden: {0:0.00}", date2.Subtract(date1).TotalHours);
}
}
return "";
}
}
public string Klient => _CompactCustomer?.FullName;
public CompactCustomerDC CompactCustomer

View File

@@ -18,12 +18,6 @@ namespace BeWoDatabaseTerminator
{
internal class Program
{
private const string PubKeyX3 = "3082010A02820101009CD30CF05AE52E47B7725D3783B3686330EAD735261925E1BDBE35F170922FB7B84B4105ABA99E350858ECB12AC468870BA3E375E4E6F3A76271BA7981601FD7919A9FF3D0786771C8690E9591CFFEE699E9603C48CC7ECA4D7712249D471B5AEBB9EC1E37001C9CAC7BA705EACE4AEBBD41E53698B9CBFD6D3C9668DF232A42900C867467C87FA59AB8526114133F65E98287CBDBFA0E56F68689F3853F9786AFB0DC1AEF6B0D95167DC42BA065B299043675806BAC4AF31B9049782FA2964F2A20252904C674C0D031CD8F31389516BAA833B843F1B11FC3307FA27931133D2D36F8E3FCF2336AB93931C5AFC48D0D1D641633AAFA8429B6D40BC0D87DC3930203010001";
private const string PubKeyR3 = "3082010A0282010100BB021528CCF6A094D30F12EC8D5592C3F882F199A67A4288A75D26AAB52BB9C54CB1AF8E6BF975C8A3D70F4794145535578C9EA8A23919F5823C42A94E6EF53BC32EDB8DC0B05CF35938E7EDCF69F05A0B1BBEC094242587FA3771B313E71CACE19BEFDBE43B45524596A9C153CE34C852EEB5AEED8FDE6070E2A554ABB66D0E97A540346B2BD3BC66EB66347CFA6B8B8F572999F830175DBA726FFB81C5ADD286583D17C7E709BBF12BF786DCC1DA715DD446E3CCAD25C188BC60677566B3F118F7A25CE653FF3A88B647A5FF1318EA9809773F9D53F9CF01E5F5A6701714AF63A4FF99B3939DDC53A706FE48851DA169AE2575BB13CC5203F5ED51A18BDB150203010001";
private const string PubKeyE1 = "04245C2DA22AFD1C4BA65D97732731ACB2A06962EF65E8A6B0F0AC4B9FFF1C0B700FD3982F4DFC0F009B37F074055732972E05EF2A4325A3FB6E342713F64F7E69D302995EEB244792C1249BE6B1218FC12481FC68CC1F69BA58F51922F774C616";
private const String PUB_KEY_R11 = "3082010A0282010100BA87BC5C1B0039CBCA0ACDD46710F9013CA54EA561CB26CA52FB1501B7B928F5281EED27B324183967090C08ECE03AB03B770EBDF3E53954410C4EAE41D69974DE51DBEF7BFF58BDA8B713F6DE31D5F272C9726A0B8374959C4600641499F3B1D922D9CDA892AA1C267A3FFEEF58057B089581DB710F8EFBE33109BB09BE504D5F8F91763D5A9D9E83F2E9C466B3E106664348188065A037189A9B843297B1B2BDC4F815009D2788FBE26317966C9B27674BC4DB285E69C279F0495CE02450E1C4BCA105AC7B406D00B4C2413FA758B82FC55C9BA5BB099EF1FEEBB08539FDA80AEF45C478EB652AC2CF5F3CDEE35C4D1BF70B272BAA0B4277534F796A1D87D90203010001";
private const String PUB_KEY_R10 = "3082010A0282010100CF57E5E6C45412EDB447FEC92758764650288C1D3E88DF059DD5B51829BDDDB55ABFFAF6CEA3BEAF00214B625A5A3C012FC55803F689FF8E1143EBC1B5E01407968F6F1FD7E7BA8139097565B7C2AF185B372628E7A3F4072B6D1AFFAB58BC95AE40FFE9CB57C4B55B7F780D1861BC17E754C6BB4991CD6E18D18085EEA66536BC74EABC504CEAFC21F338169394BAB0D36B3806CD16127ACA5275C8AD76B2C29C5D98455C6F617BC62DEE3C13528601D957E6381CDF8DB51F92919AE74A1CCC45A87255F0B0E6A307ECFDA71B669E3F488B71847158C93AFAEF5EF25B442B3C74E78FB247C1076ACD9AB70D96F712812651540AEC61F6F7F5E2F28AC8950D8D0203010001";
private const string APIKEY = "CwjlSCbNqctEsofpGY64Z4aO6pShNYAdGtjMqHsjO64FuK23qoRDUqIjUC0P";
private static string _ConnectionStringServer;
@@ -49,36 +43,57 @@ namespace BeWoDatabaseTerminator
ServicePointManager.ServerCertificateValidationCallback = PinPublicKey;
}
private const String PUB_KEY_X3 = "9CD30CF05AE52E47B7725D3783B3686330EAD735261925E1BDBE35F170922FB7B84B4105ABA99E350858ECB12AC468870BA3E375E4E6F3A76271BA7981601FD7919A9FF3D0786771C8690E9591CFFEE699E9603C48CC7ECA4D7712249D471B5AEBB9EC1E37001C9CAC7BA705EACE4AEBBD41E53698B9CBFD6D3C9668DF232A42900C867467C87FA59AB8526114133F65E98287CBDBFA0E56F68689F3853F9786AFB0DC1AEF6B0D95167DC42BA065B299043675806BAC4AF31B9049782FA2964F2A20252904C674C0D031CD8F31389516BAA833B843F1B11FC3307FA27931133D2D36F8E3FCF2336AB93931C5AFC48D0D1D641633AAFA8429B6D40BC0D87DC3930203010001";
private const String PUB_KEY_R3 = "BB021528CCF6A094D30F12EC8D5592C3F882F199A67A4288A75D26AAB52BB9C54CB1AF8E6BF975C8A3D70F4794145535578C9EA8A23919F5823C42A94E6EF53BC32EDB8DC0B05CF35938E7EDCF69F05A0B1BBEC094242587FA3771B313E71CACE19BEFDBE43B45524596A9C153CE34C852EEB5AEED8FDE6070E2A554ABB66D0E97A540346B2BD3BC66EB66347CFA6B8B8F572999F830175DBA726FFB81C5ADD286583D17C7E709BBF12BF786DCC1DA715DD446E3CCAD25C188BC60677566B3F118F7A25CE653FF3A88B647A5FF1318EA9809773F9D53F9CF01E5F5A6701714AF63A4FF99B3939DDC53A706FE48851DA169AE2575BB13CC5203F5ED51A18BDB150203010001";
private const String PUB_KEY_E1 = "245c2da22afd1c4ba65d97732731acb2a06962ef65e8a6b0f0ac4b9fff1c0b700fd3982f4dfc0f009b37f074055732972e05ef2a4325a3fb6e342713f64f7e69d302995eeb244792c1249be6b1218fc12481fc68cc1f69ba58f51922f774c616";
private const String PUB_KEY_E5 = "0d0b3a8a6b618eb6efdc5f58e7c6424554ab63f66661480a2e5975b481023750b73f1679dc98eca1289772201c2ccfd57c52204e54785b84146bc090ae85ecc051413c5a877f064dd4fe60d1fa6c2de17d951088a208540f991a4ce6ea0aacd8";
private const String PUB_KEY_E6 = "d9f19e4687f8217160a826eba3fab9eada1db912a7d426d95114b1617c7596bf220b391fd5bed10a46aa2d3c4a09842ebe409555e91940376675ed324e770449f8707bc318e7cef77110feac74d800d4ed6d1c731633109c3ab2ea6c62f4bdb8";
private const String PUB_KEY_R10 = "CF57E5E6C45412EDB447FEC92758764650288C1D3E88DF059DD5B51829BDDDB55ABFFAF6CEA3BEAF00214B625A5A3C012FC55803F689FF8E1143EBC1B5E01407968F6F1FD7E7BA8139097565B7C2AF185B372628E7A3F4072B6D1AFFAB58BC95AE40FFE9CB57C4B55B7F780D1861BC17E754C6BB4991CD6E18D18085EEA66536BC74EABC504CEAFC21F338169394BAB0D36B3806CD16127ACA5275C8AD76B2C29C5D98455C6F617BC62DEE3C13528601D957E6381CDF8DB51F92919AE74A1CCC45A87255F0B0E6A307ECFDA71B669E3F488B71847158C93AFAEF5EF25B442B3C74E78FB247C1076ACD9AB70D96F712812651540AEC61F6F7F5E2F28AC8950D8D0203010001";
private const String PUB_KEY_R11 = "BA87BC5C1B0039CBCA0ACDD46710F9013CA54EA561CB26CA52FB1501B7B928F5281EED27B324183967090C08ECE03AB03B770EBDF3E53954410C4EAE41D69974DE51DBEF7BFF58BDA8B713F6DE31D5F272C9726A0B8374959C4600641499F3B1D922D9CDA892AA1C267A3FFEEF58057B089581DB710F8EFBE33109BB09BE504D5F8F91763D5A9D9E83F2E9C466B3E106664348188065A037189A9B843297B1B2BDC4F815009D2788FBE26317966C9B27674BC4DB285E69C279F0495CE02450E1C4BCA105AC7B406D00B4C2413FA758B82FC55C9BA5BB099EF1FEEBB08539FDA80AEF45C478EB652AC2CF5F3CDEE35C4D1BF70B272BAA0B4277534F796A1D87D90203010001";
private static bool PinPublicKey(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslpolicyerrors)
{
try
{
if(certificate is null || chain is null)
{
if (certificate == null || chain == null)
return false;
}
var chainContainsPublicKey = false;
bool chainContainsPk = false;
foreach(var element in chain.ChainElements)
foreach (var element in chain.ChainElements)
{
var pk = element.Certificate.GetPublicKeyString();
if((pk?.Equals(PubKeyX3) ?? false) || (pk?.Equals(PubKeyR3) ?? false) || (pk?.Equals(PubKeyE1) ?? false) || pk == PUB_KEY_R11 || pk == PUB_KEY_R10)
String pk = element.Certificate.GetPublicKeyString().ToLower();
if (pk.Contains(PUB_KEY_X3.ToLower()) ||
pk.Contains(PUB_KEY_R3.ToLower()) ||
pk.Contains(PUB_KEY_E1.ToLower()) ||
pk.Contains(PUB_KEY_E5.ToLower()) ||
pk.Contains(PUB_KEY_E6.ToLower()) ||
pk.Contains(PUB_KEY_R10.ToLower()) ||
pk.Contains(PUB_KEY_R11.ToLower()))
{
chainContainsPublicKey = true;
chainContainsPk = true;
}
}
var subjectAccepted = certificate.Subject.Trim().ToLower().EndsWith(".bewoplaner.de") || certificate.Subject.Trim().ToLower().EndsWith(".ownchat.de");
return chainContainsPublicKey && subjectAccepted;
bool subjectAccepted = certificate.Subject.Trim().ToLower().EndsWith(".bewoplaner.de") ||
certificate.Subject.Trim().ToLower().EndsWith(".ownchat.de");
return chainContainsPk && subjectAccepted;
}
catch(Exception)
catch (Exception e)
{
return false;
}
}
private static async Task Main(string[] args)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

View File

@@ -17,6 +17,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReportingService", "ReportS
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dakota", "Dakota\Dakota.csproj", "{47331732-DD96-4075-869F-83AA9F3F9937}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Kundenprojekte", "Kundenprojekte", "{30DD24EE-2ED9-4E31-BCB5-AD995E8541BD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SynpraxReports", "ReportImp\SynpraxReports\SynpraxReports.csproj", "{FC9F4E38-977B-4877-9E05-D04068D3C807}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -66,10 +70,19 @@ Global
{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
{FC9F4E38-977B-4877-9E05-D04068D3C807}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FC9F4E38-977B-4877-9E05-D04068D3C807}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FC9F4E38-977B-4877-9E05-D04068D3C807}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU
{FC9F4E38-977B-4877-9E05-D04068D3C807}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU
{FC9F4E38-977B-4877-9E05-D04068D3C807}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FC9F4E38-977B-4877-9E05-D04068D3C807}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{FC9F4E38-977B-4877-9E05-D04068D3C807} = {30DD24EE-2ED9-4E31-BCB5-AD995E8541BD}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {75267284-7070-4045-9FC8-0FC3C56C1AD3}
EndGlobalSection

View File

@@ -696,7 +696,7 @@
<VisualStudio>
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
<WebProjectProperties>
<UseIIS>True</UseIIS>
<UseIIS>False</UseIIS>
<AutoAssignPort>False</AutoAssignPort>
<DevelopmentServerPort>8808</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>

View File

@@ -24,5 +24,6 @@
<property column="ChangeType" type="BS.Shared.StatementType, BS.Shared" name="ChangeType" />
<property name="SupportConcept_CustomerOid" type="Int64" />
<property name="SupportConcept_EmployeeOid" type="Int64" />
<property name="SupportConceptOid" type="Int64" />
</class>
</hibernate-mapping>

View File

@@ -3,14 +3,14 @@
<PropertyGroup>
<NameOfLastUsedPublishProfile>BeWo2.0</NameOfLastUsedPublishProfile>
<UseIISExpress>true</UseIISExpress>
<LastActiveSolutionConfig>Debug|Any CPU</LastActiveSolutionConfig>
<LastActiveSolutionConfig>Release|Any CPU</LastActiveSolutionConfig>
<Use64BitIISExpress>false</Use64BitIISExpress>
<IISExpressSSLPort />
<IISExpressAnonymousAuthentication />
<IISExpressWindowsAuthentication />
<IISExpressUseClassicPipelineMode />
<UseGlobalApplicationHostFile />
<ProjectView>ShowAllFiles</ProjectView>
<ProjectView>ProjectFiles</ProjectView>
</PropertyGroup>
<ProjectExtensions>
<VisualStudio>

View File

@@ -102,6 +102,7 @@ namespace BeWo.Report.DefaultReports
this.xrTableCell57 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell58 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell26 = new DevExpress.XtraReports.UI.XRTableCell();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
this.Title = new DevExpress.XtraReports.UI.XRControlStyle();
this.FieldCaption = new DevExpress.XtraReports.UI.XRControlStyle();
this.PageInfo = new DevExpress.XtraReports.UI.XRControlStyle();
@@ -120,7 +121,6 @@ namespace BeWo.Report.DefaultReports
this.fieldIstArbeitszeit = new DevExpress.XtraReports.UI.CalculatedField();
this.fieldUeberstundenGesamt = new DevExpress.XtraReports.UI.CalculatedField();
this.fieldTatsSoll = new DevExpress.XtraReports.UI.CalculatedField();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
((System.ComponentModel.ISupportInitialize)(this.xrTableDetail)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTableHeader)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable2)).BeginInit();
@@ -808,7 +808,7 @@ namespace BeWo.Report.DefaultReports
this.xrTableCell51.StylePriority.UseFont = false;
this.xrTableCell51.StylePriority.UsePadding = false;
this.xrTableCell51.StylePriority.UseTextAlignment = false;
this.xrTableCell51.Text = "davon ausbezahlt:";
this.xrTableCell51.Text = "Anpassung Überstunden:";
this.xrTableCell51.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell51.Weight = 0.22133303497678214D;
//
@@ -891,6 +891,10 @@ namespace BeWo.Report.DefaultReports
this.xrTableCell26.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell26.Weight = 0.11143081848591821D;
//
// bindingSource1
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.MitarbeiterstundenkontoRO);
//
// Title
//
this.Title.BackColor = System.Drawing.Color.White;
@@ -1027,10 +1031,6 @@ namespace BeWo.Report.DefaultReports
this.fieldTatsSoll.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal;
this.fieldTatsSoll.Name = "fieldTatsSoll";
//
// bindingSource1
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.MitarbeiterstundenkontoRO);
//
// Mitarbeiterarbeitszeitkonto
//
this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {

View File

@@ -1719,7 +1719,7 @@ namespace BeWo.Report.ReportObjects
{
if (dd.Feiertag != null)
{
dd.MinutesTotal = dd.SollStunden * 60;
dd.MinutesTotal = dd.SollStunden * 60 * GetFeiertagsFaktor(dd.Date);
TimeSpan tspan = TimeSpan.FromMinutes((double)dd.MinutesTotal);
dd.TimeTotal = String.Format("{0:00}:{1:00}", tspan.Hours, tspan.Minutes);
}

View File

@@ -578,17 +578,18 @@ where scap2e.EmployeeOid = {0} and scap.Start <= '{1:yyyy-MM-dd}' and scap.EndDa
foreach (AbsenceTime at in c.AbsenceTimes.OrderBy(a => a.Start))
{
if (at.AbsenceReason.Description.Contains("<24h") || at.AbsenceReason.Description.Contains(">24h") || at.AbsenceReason.Description.StartsWith("S_Abwesenheit nicht abrechenbar") || at.AbsenceReason.Description.StartsWith("S_JA"))
if (at.AbsenceReason.Description.Contains("<24h") || at.AbsenceReason.Description.Contains(">24h") || at.AbsenceReason.Description.Contains("Abwesenheit nicht abrechenbar") || at.AbsenceReason.Description.StartsWith("S_JA") ||
at.AbsenceReason.Description.StartsWith("SozA") || at.AbsenceReason.Description.StartsWith("S_Abwesenheit nicht abrechenbar") || at.AbsenceReason.Description.StartsWith("JugA"))
{
if (at.Start >= startSchuljahr && at.Start <= endeSchuljahr && (at.End == null || at.End >= startSchuljahr))
{
var maxAnzahlIntern = maxAnzahl;
if (at.AbsenceReason.Description.Contains("<24h_SA"))
if (at.AbsenceReason.Description.Contains("<24h_SA") || at.AbsenceReason.Description.Contains("unter 24"))
{
maxAnzahlIntern = Int32.MaxValue; // Dürfen immer abgerechnet werden
}
else if ((at.AbsenceReason.Description.Contains(">24h") && istJugendamt) || at.AbsenceReason.Description.StartsWith("S_Abwesenheit nicht abrechenbar"))
else if ((at.AbsenceReason.Description.Contains(">24h") && istJugendamt) || at.AbsenceReason.Description.Contains("Abwesenheit nicht abrechenbar"))
{
maxAnzahlIntern = 0; // Darf beim Jugendamt nie abgerechnet werden
}

View File

@@ -43,6 +43,8 @@ namespace BeWo.AssistenzaReports
this.DetailReport = new DevExpress.XtraReports.UI.DetailReportBand();
this.DetailReport1 = new DevExpress.XtraReports.UI.DetailReportBand();
this.Detail2 = new DevExpress.XtraReports.UI.DetailBand();
this.xrLabel14 = new DevExpress.XtraReports.UI.XRLabel();
this.lblAufteilungLeistungen = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel8 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel9 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel6 = new DevExpress.XtraReports.UI.XRLabel();
@@ -83,9 +85,7 @@ namespace BeWo.AssistenzaReports
this.fieldGroupFLS = new DevExpress.XtraReports.UI.CalculatedField();
this.topMarginBand1 = new DevExpress.XtraReports.UI.TopMarginBand();
this.bottomMarginBand1 = new DevExpress.XtraReports.UI.BottomMarginBand();
this.lblAufteilungLeistungen = new DevExpress.XtraReports.UI.XRLabel();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
this.xrLabel14 = new DevExpress.XtraReports.UI.XRLabel();
((System.ComponentModel.ISupportInitialize)(this.xrTable1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable4)).BeginInit();
@@ -151,14 +151,14 @@ namespace BeWo.AssistenzaReports
this.xrLabel13.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "FLSReportGroups.TotalFLM", "{0:0.##}")});
this.xrLabel13.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
this.xrLabel13.LocationFloat = new DevExpress.Utils.PointFloat(110F, 58F);
this.xrLabel13.LocationFloat = new DevExpress.Utils.PointFloat(160F, 57.99999F);
this.xrLabel13.Name = "xrLabel13";
this.xrLabel13.SizeF = new System.Drawing.SizeF(50F, 25F);
this.xrLabel13.StylePriority.UseFont = false;
this.xrLabel13.StylePriority.UsePadding = false;
this.xrLabel13.StylePriority.UseTextAlignment = false;
this.xrLabel13.Text = "xrLabel13";
this.xrLabel13.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
this.xrLabel13.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
//
// xrLabel12
//
@@ -175,7 +175,7 @@ namespace BeWo.AssistenzaReports
this.xrLabel11.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "FLSReportGroups.fieldGroupFLS", "{0:0.00} FLS")});
this.xrLabel11.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
this.xrLabel11.LocationFloat = new DevExpress.Utils.PointFloat(230F, 58F);
this.xrLabel11.LocationFloat = new DevExpress.Utils.PointFloat(280F, 57.99999F);
this.xrLabel11.Name = "xrLabel11";
this.xrLabel11.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel11.SizeF = new System.Drawing.SizeF(203F, 25F);
@@ -185,7 +185,7 @@ namespace BeWo.AssistenzaReports
// xrLabel10
//
this.xrLabel10.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
this.xrLabel10.LocationFloat = new DevExpress.Utils.PointFloat(160F, 58F);
this.xrLabel10.LocationFloat = new DevExpress.Utils.PointFloat(210F, 57.99999F);
this.xrLabel10.Name = "xrLabel10";
this.xrLabel10.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel10.SizeF = new System.Drawing.SizeF(70F, 25F);
@@ -230,12 +230,38 @@ namespace BeWo.AssistenzaReports
this.Detail2.KeepTogetherWithDetailReports = true;
this.Detail2.Name = "Detail2";
//
// xrLabel14
//
this.xrLabel14.CanShrink = true;
this.xrLabel14.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "FLSReportGroups.FLSReportDetails.CustomValue2")});
this.xrLabel14.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
this.xrLabel14.LocationFloat = new DevExpress.Utils.PointFloat(160F, 75F);
this.xrLabel14.Multiline = true;
this.xrLabel14.Name = "xrLabel14";
this.xrLabel14.SizeF = new System.Drawing.SizeF(160F, 25F);
this.xrLabel14.StylePriority.UseFont = false;
this.xrLabel14.StylePriority.UsePadding = false;
//
// lblAufteilungLeistungen
//
this.lblAufteilungLeistungen.CanShrink = true;
this.lblAufteilungLeistungen.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "FLSReportGroups.FLSReportDetails.CustomValue1")});
this.lblAufteilungLeistungen.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
this.lblAufteilungLeistungen.LocationFloat = new DevExpress.Utils.PointFloat(0F, 75F);
this.lblAufteilungLeistungen.Multiline = true;
this.lblAufteilungLeistungen.Name = "lblAufteilungLeistungen";
this.lblAufteilungLeistungen.SizeF = new System.Drawing.SizeF(160F, 25F);
this.lblAufteilungLeistungen.StylePriority.UseFont = false;
this.lblAufteilungLeistungen.StylePriority.UsePadding = false;
//
// xrLabel8
//
this.xrLabel8.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "FLSReportGroups.FLSReportDetails.fieldFLS", "{0:0.00} FLS")});
this.xrLabel8.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
this.xrLabel8.LocationFloat = new DevExpress.Utils.PointFloat(230F, 50F);
this.xrLabel8.LocationFloat = new DevExpress.Utils.PointFloat(280F, 50F);
this.xrLabel8.Name = "xrLabel8";
this.xrLabel8.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel8.SizeF = new System.Drawing.SizeF(203F, 25F);
@@ -245,7 +271,7 @@ namespace BeWo.AssistenzaReports
// xrLabel9
//
this.xrLabel9.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
this.xrLabel9.LocationFloat = new DevExpress.Utils.PointFloat(160F, 50F);
this.xrLabel9.LocationFloat = new DevExpress.Utils.PointFloat(210F, 50F);
this.xrLabel9.Name = "xrLabel9";
this.xrLabel9.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel9.SizeF = new System.Drawing.SizeF(70F, 25F);
@@ -259,14 +285,14 @@ namespace BeWo.AssistenzaReports
this.xrLabel6.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "FLSReportGroups.FLSReportDetails.TotalFLM", "{0:0.##}")});
this.xrLabel6.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
this.xrLabel6.LocationFloat = new DevExpress.Utils.PointFloat(110F, 50F);
this.xrLabel6.LocationFloat = new DevExpress.Utils.PointFloat(160F, 50F);
this.xrLabel6.Name = "xrLabel6";
this.xrLabel6.SizeF = new System.Drawing.SizeF(50F, 25F);
this.xrLabel6.StylePriority.UseFont = false;
this.xrLabel6.StylePriority.UsePadding = false;
this.xrLabel6.StylePriority.UseTextAlignment = false;
this.xrLabel6.Text = "xrLabel6";
this.xrLabel6.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
this.xrLabel6.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
//
// xrLabel7
//
@@ -553,7 +579,7 @@ namespace BeWo.AssistenzaReports
// xrPageInfo1
//
this.xrPageInfo1.Font = new DevExpress.Drawing.DXFont("Arial", 8F);
this.xrPageInfo1.LocationFloat = new DevExpress.Utils.PointFloat(7.999929F, 25F);
this.xrPageInfo1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 25F);
this.xrPageInfo1.Name = "xrPageInfo1";
this.xrPageInfo1.PageInfo = DevExpress.XtraPrinting.PageInfo.DateTime;
this.xrPageInfo1.SizeF = new System.Drawing.SizeF(439.7083F, 23F);
@@ -624,36 +650,10 @@ namespace BeWo.AssistenzaReports
this.bottomMarginBand1.HeightF = 50F;
this.bottomMarginBand1.Name = "bottomMarginBand1";
//
// lblAufteilungLeistungen
//
this.lblAufteilungLeistungen.CanShrink = true;
this.lblAufteilungLeistungen.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "FLSReportGroups.FLSReportDetails.CustomValue1")});
this.lblAufteilungLeistungen.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
this.lblAufteilungLeistungen.LocationFloat = new DevExpress.Utils.PointFloat(0F, 75F);
this.lblAufteilungLeistungen.Multiline = true;
this.lblAufteilungLeistungen.Name = "lblAufteilungLeistungen";
this.lblAufteilungLeistungen.SizeF = new System.Drawing.SizeF(160F, 25F);
this.lblAufteilungLeistungen.StylePriority.UseFont = false;
this.lblAufteilungLeistungen.StylePriority.UsePadding = false;
//
// bindingSource1
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.FLSReportRO);
//
// xrLabel14
//
this.xrLabel14.CanShrink = true;
this.xrLabel14.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "FLSReportGroups.FLSReportDetails.CustomValue2")});
this.xrLabel14.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
this.xrLabel14.LocationFloat = new DevExpress.Utils.PointFloat(160F, 75F);
this.xrLabel14.Multiline = true;
this.xrLabel14.Name = "xrLabel14";
this.xrLabel14.SizeF = new System.Drawing.SizeF(160F, 25F);
this.xrLabel14.StylePriority.UseFont = false;
this.xrLabel14.StylePriority.UsePadding = false;
//
// FLSAuswertung
//
this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {

View File

@@ -18,7 +18,6 @@ namespace BeWo.AssistenzaReports
{
foreach (var group in pRO.FLSReportGroups)
{
Dictionary<string, decimal> leistungenZuMinuten = new Dictionary<string, decimal>();
FLSReportRO.FLSReportDetail sonstigesAlt = null;
FLSReportRO.FLSReportDetail fahrzeiten = null;
@@ -29,6 +28,8 @@ namespace BeWo.AssistenzaReports
{
foreach (var detail in group.FLSReportDetails)
{
Dictionary<string, decimal> leistungenZuMinuten = new Dictionary<string, decimal>();
if (detail.ServiceRecords != null)
{
foreach (var sr in detail.ServiceRecords)
@@ -44,6 +45,7 @@ namespace BeWo.AssistenzaReports
{
// Hier DictValues rein
detail.CustomValue1 = "";
detail.CustomValue2 = "";
foreach (var item in leistungenZuMinuten)
{

View File

@@ -32,6 +32,7 @@ namespace BetreuWoWesel
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RechnungFud));
this.Detail = new DevExpress.XtraReports.UI.DetailBand();
this.ReportHeader = new DevExpress.XtraReports.UI.ReportHeaderBand();
this.lblGpNummer = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel7 = new DevExpress.XtraReports.UI.XRLabel();
this.lblGebAz = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel();
@@ -85,7 +86,6 @@ namespace BetreuWoWesel
this.xrTableCell23 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrLabel18 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel22 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel4 = new DevExpress.XtraReports.UI.XRLabel();
((System.ComponentModel.ISupportInitialize)(this.xrTable3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrRichText1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrRichText5)).BeginInit();
@@ -105,7 +105,7 @@ namespace BetreuWoWesel
// ReportHeader
//
this.ReportHeader.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.xrLabel4,
this.lblGpNummer,
this.xrLabel7,
this.lblGebAz,
this.xrLabel1,
@@ -121,6 +121,21 @@ namespace BetreuWoWesel
this.ReportHeader.Name = "ReportHeader";
this.ReportHeader.StylePriority.UseFont = false;
//
// lblGpNummer
//
this.lblGpNummer.BackColor = System.Drawing.Color.Transparent;
this.lblGpNummer.CanShrink = true;
this.lblGpNummer.LocationFloat = new DevExpress.Utils.PointFloat(419.795F, 365.2083F);
this.lblGpNummer.Name = "lblGpNummer";
this.lblGpNummer.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.lblGpNummer.SizeF = new System.Drawing.SizeF(255.2083F, 20F);
this.lblGpNummer.StylePriority.UseBackColor = false;
this.lblGpNummer.StylePriority.UseFont = false;
this.lblGpNummer.StylePriority.UseTextAlignment = false;
this.lblGpNummer.Text = "Geschäftsnummer: 2000256442";
this.lblGpNummer.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
this.lblGpNummer.WordWrap = false;
//
// xrLabel7
//
this.xrLabel7.BackColor = System.Drawing.Color.Transparent;
@@ -727,21 +742,6 @@ namespace BetreuWoWesel
"egebene Konto. Vielen Dank für Ihr Vertrauen";
this.xrLabel22.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
//
// xrLabel4
//
this.xrLabel4.BackColor = System.Drawing.Color.Transparent;
this.xrLabel4.CanShrink = true;
this.xrLabel4.LocationFloat = new DevExpress.Utils.PointFloat(419.795F, 365.2083F);
this.xrLabel4.Name = "xrLabel4";
this.xrLabel4.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel4.SizeF = new System.Drawing.SizeF(255.2083F, 20F);
this.xrLabel4.StylePriority.UseBackColor = false;
this.xrLabel4.StylePriority.UseFont = false;
this.xrLabel4.StylePriority.UseTextAlignment = false;
this.xrLabel4.Text = "Geschäftsnummer: 2000256442";
this.xrLabel4.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
this.xrLabel4.WordWrap = false;
//
// RechnungFud
//
this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {
@@ -828,6 +828,6 @@ namespace BetreuWoWesel
private DevExpress.XtraReports.UI.XRLabel xrLabel22;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell13;
private DevExpress.XtraReports.UI.XRRichText xrRichText5;
private DevExpress.XtraReports.UI.XRLabel xrLabel4;
private DevExpress.XtraReports.UI.XRLabel lblGpNummer;
}
}

View File

@@ -1,9 +1,6 @@
using System;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Report;
using BeWo.Report.ReportObjects;
using BS.Shared;
using BS.Shared.Core;
using DevExpress.XtraReports.UI;
@@ -28,19 +25,19 @@ namespace BetreuWoWesel
pRO.RecipientOrganisation = pRO.RecipientOrganisation.Replace(" ALS", "").Trim();
lblGebAz.Text = lblGebAz.Text.Replace("Vers.-Nr.:", "AZ:");
}
if (!pRO.RecipientOrganisation.ToLower().Contains("lvr"))
{
lblGpNummer.Visible = false;
}
}
if (!String.IsNullOrEmpty(pRO.CustomerSalutation) && pRO.CustomerSalutation.ToLower() == "herr")
}
if (!String.IsNullOrEmpty(pRO.CustomerSalutation) && pRO.CustomerSalutation.ToLower() == "herr")
pRO.CustomerSalutation = "Herrn";
this.bindingSource1.DataSource = pRO;
}
}
}

View File

@@ -34,6 +34,7 @@ namespace BetreuWoWesel.Alt
DevExpress.XtraReports.UI.XRWatermark xrWatermark1 = new DevExpress.XtraReports.UI.XRWatermark();
this.Detail = new DevExpress.XtraReports.UI.DetailBand();
this.ReportHeader = new DevExpress.XtraReports.UI.ReportHeaderBand();
this.lblGpNummer = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel8 = new DevExpress.XtraReports.UI.XRLabel();
this.xrRichText1 = new DevExpress.XtraReports.UI.XRRichText();
this.xrLabel9 = new DevExpress.XtraReports.UI.XRLabel();
@@ -104,7 +105,6 @@ namespace BetreuWoWesel.Alt
this.xrRichText5 = new DevExpress.XtraReports.UI.XRRichText();
this.xrRichText4 = new DevExpress.XtraReports.UI.XRRichText();
this.xrPictureBox1 = new DevExpress.XtraReports.UI.XRPictureBox();
this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
((System.ComponentModel.ISupportInitialize)(this.xrRichText1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable1)).BeginInit();
@@ -125,7 +125,7 @@ namespace BetreuWoWesel.Alt
// ReportHeader
//
this.ReportHeader.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.xrLabel1,
this.lblGpNummer,
this.xrLabel8,
this.xrRichText1,
this.xrLabel9,
@@ -141,6 +141,23 @@ namespace BetreuWoWesel.Alt
this.ReportHeader.Name = "ReportHeader";
this.ReportHeader.StylePriority.UseFont = false;
//
// lblGpNummer
//
this.lblGpNummer.BackColor = System.Drawing.Color.Transparent;
this.lblGpNummer.CanShrink = true;
this.lblGpNummer.Font = new DevExpress.Drawing.DXFont("Arial", 10F, DevExpress.Drawing.DXFontStyle.Bold);
this.lblGpNummer.LocationFloat = new DevExpress.Utils.PointFloat(460.42F, 289.9167F);
this.lblGpNummer.Multiline = true;
this.lblGpNummer.Name = "lblGpNummer";
this.lblGpNummer.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.lblGpNummer.SizeF = new System.Drawing.SizeF(214.5836F, 17F);
this.lblGpNummer.StylePriority.UseBackColor = false;
this.lblGpNummer.StylePriority.UseFont = false;
this.lblGpNummer.StylePriority.UseTextAlignment = false;
this.lblGpNummer.Text = "Geschäftsnummer: 2000256442";
this.lblGpNummer.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
this.lblGpNummer.WordWrap = false;
//
// xrLabel8
//
this.xrLabel8.CanShrink = true;
@@ -893,23 +910,6 @@ namespace BetreuWoWesel.Alt
this.xrPictureBox1.SizeF = new System.Drawing.SizeF(139.1942F, 65.97227F);
this.xrPictureBox1.Sizing = DevExpress.XtraPrinting.ImageSizeMode.ZoomImage;
//
// xrLabel1
//
this.xrLabel1.BackColor = System.Drawing.Color.Transparent;
this.xrLabel1.CanShrink = true;
this.xrLabel1.Font = new DevExpress.Drawing.DXFont("Arial", 10F, DevExpress.Drawing.DXFontStyle.Bold);
this.xrLabel1.LocationFloat = new DevExpress.Utils.PointFloat(460.42F, 289.9167F);
this.xrLabel1.Multiline = true;
this.xrLabel1.Name = "xrLabel1";
this.xrLabel1.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel1.SizeF = new System.Drawing.SizeF(214.5836F, 17F);
this.xrLabel1.StylePriority.UseBackColor = false;
this.xrLabel1.StylePriority.UseFont = false;
this.xrLabel1.StylePriority.UseTextAlignment = false;
this.xrLabel1.Text = "Geschäftsnummer: 2000256442";
this.xrLabel1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
this.xrLabel1.WordWrap = false;
//
// bindingSource1
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.SettlementRO);
@@ -1021,6 +1021,6 @@ namespace BetreuWoWesel.Alt
private DevExpress.XtraReports.UI.XRRichText xrRichText4;
private DevExpress.XtraReports.UI.XRPictureBox xrPictureBox1;
private DevExpress.XtraReports.UI.XRRichText xrRichText5;
private DevExpress.XtraReports.UI.XRLabel xrLabel1;
private DevExpress.XtraReports.UI.XRLabel lblGpNummer;
}
}

View File

@@ -13,6 +13,12 @@ namespace BetreuWoWesel.Alt
public void SetReportDataSource(SettlementRO pRO)
{
string orga = pRO.RecipientOrganisation;
if (pRO.RecipientOrganisation != null && !pRO.RecipientOrganisation.ToLower().Contains("lvr"))
{
lblGpNummer.Visible = false;
}
if (!String.IsNullOrEmpty(pRO.CustomerBirthdayString))
{
xrLabel3.Text += ", geb. " + pRO.CustomerBirthdayString;

View File

@@ -71,6 +71,7 @@ namespace BetreuWoWesel
this.xrRichText4 = new DevExpress.XtraReports.UI.XRRichText();
this.xrPictureBox1 = new DevExpress.XtraReports.UI.XRPictureBox();
this.GroupHeader1 = new DevExpress.XtraReports.UI.GroupHeaderBand();
this.lblGpNummer = new DevExpress.XtraReports.UI.XRLabel();
this.xrTable1 = new DevExpress.XtraReports.UI.XRTable();
this.xrTableRow9 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell19 = new DevExpress.XtraReports.UI.XRTableCell();
@@ -121,7 +122,6 @@ namespace BetreuWoWesel
this.xrTableRow37 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell59 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell60 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrLabel7 = new DevExpress.XtraReports.UI.XRLabel();
((System.ComponentModel.ISupportInitialize)(this.xrTable3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrRichText5)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrRichText4)).BeginInit();
@@ -502,7 +502,7 @@ namespace BetreuWoWesel
// GroupHeader1
//
this.GroupHeader1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.xrLabel7,
this.lblGpNummer,
this.xrTable1,
this.xrRichText1,
this.xrLabel9,
@@ -522,6 +522,23 @@ namespace BetreuWoWesel
this.GroupHeader1.Name = "GroupHeader1";
this.GroupHeader1.StylePriority.UseFont = false;
//
// lblGpNummer
//
this.lblGpNummer.BackColor = System.Drawing.Color.Transparent;
this.lblGpNummer.CanShrink = true;
this.lblGpNummer.Font = new DevExpress.Drawing.DXFont("Arial", 10F, DevExpress.Drawing.DXFontStyle.Bold);
this.lblGpNummer.LocationFloat = new DevExpress.Utils.PointFloat(460.42F, 268.5F);
this.lblGpNummer.Multiline = true;
this.lblGpNummer.Name = "lblGpNummer";
this.lblGpNummer.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.lblGpNummer.SizeF = new System.Drawing.SizeF(214.5836F, 17F);
this.lblGpNummer.StylePriority.UseBackColor = false;
this.lblGpNummer.StylePriority.UseFont = false;
this.lblGpNummer.StylePriority.UseTextAlignment = false;
this.lblGpNummer.Text = "Geschäftsnummer: 2000256442";
this.lblGpNummer.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
this.lblGpNummer.WordWrap = false;
//
// xrTable1
//
this.xrTable1.BorderColor = System.Drawing.SystemColors.ControlLight;
@@ -1078,23 +1095,6 @@ namespace BetreuWoWesel
this.xrTableCell60.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
this.xrTableCell60.Weight = 0.2553230872521034D;
//
// xrLabel7
//
this.xrLabel7.BackColor = System.Drawing.Color.Transparent;
this.xrLabel7.CanShrink = true;
this.xrLabel7.Font = new DevExpress.Drawing.DXFont("Arial", 10F, DevExpress.Drawing.DXFontStyle.Bold);
this.xrLabel7.LocationFloat = new DevExpress.Utils.PointFloat(460.42F, 268.5F);
this.xrLabel7.Multiline = true;
this.xrLabel7.Name = "xrLabel7";
this.xrLabel7.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel7.SizeF = new System.Drawing.SizeF(214.5836F, 17F);
this.xrLabel7.StylePriority.UseBackColor = false;
this.xrLabel7.StylePriority.UseFont = false;
this.xrLabel7.StylePriority.UseTextAlignment = false;
this.xrLabel7.Text = "Geschäftsnummer: 2000256442";
this.xrLabel7.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
this.xrLabel7.WordWrap = false;
//
// Spitzabrechnung
//
this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {
@@ -1220,6 +1220,6 @@ namespace BetreuWoWesel
private DevExpress.XtraReports.UI.XRTableCell xrTableCell30;
private DevExpress.XtraReports.UI.XRTableRow xrTableRow24;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell31;
private DevExpress.XtraReports.UI.XRLabel xrLabel7;
private DevExpress.XtraReports.UI.XRLabel lblGpNummer;
}
}

View File

@@ -15,6 +15,11 @@ namespace BetreuWoWesel
public void SetReportDataSource(Settlement2RO pRO)
{
if (pRO.RecipientOrganisation != null && !pRO.RecipientOrganisation.ToLower().Contains("lvr"))
{
lblGpNummer.Visible = false;
}
if (pRO.CustomerBirthday != null)
{
xrLabel3.Text += String.Format(", geb. {0:dd.MM.yyyy}", pRO.CustomerBirthday);

View File

@@ -57,6 +57,19 @@
<ItemGroup>
<Compile Include="CustomMitarbeiterstundenkontoBerechnung.cs" />
<Compile Include="CustomMitarbeiterstundenkontoBerechnungMonate.cs" />
<Compile Include="CustomReportCreator.cs" />
<Compile Include="LeistungsnachweisAnlage5.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="LeistungsnachweisAnlage5.Designer.cs">
<DependentUpon>LeistungsnachweisAnlage5.cs</DependentUpon>
</Compile>
<Compile Include="LeistungsnachweisAnlage4.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="LeistungsnachweisAnlage4.Designer.cs">
<DependentUpon>LeistungsnachweisAnlage4.cs</DependentUpon>
</Compile>
<Compile Include="Mitarbeiterarbeitszeitkonto.cs">
<SubType>Component</SubType>
</Compile>
@@ -104,6 +117,12 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="LeistungsnachweisAnlage5.resx">
<DependentUpon>LeistungsnachweisAnlage5.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="LeistungsnachweisAnlage4.resx">
<DependentUpon>LeistungsnachweisAnlage4.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Mitarbeiterarbeitszeitkonto.resx">
<DependentUpon>Mitarbeiterarbeitszeitkonto.cs</DependentUpon>
</EmbeddedResource>
@@ -115,6 +134,7 @@
<DependentUpon>MitarbeiterstundenkontoJahr.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Properties\licenses.licx" />
<EmbeddedResource Include="Teamstundenkonto.resx">
<DependentUpon>Teamstundenkonto.cs</DependentUpon>
</EmbeddedResource>

View File

@@ -0,0 +1,161 @@
using System.Collections.Generic;
using System.Linq;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Report;
using BeWo.Report.ReportObjects;
using BeWo.Service.DCEntityMapper;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;
using DevExpress.XtraReports.UI;
namespace CaritasverbandKelheim
{
public class CustomReportCreator : DefaultReportCreator
{
public override XtraReport CreateServiceOverviewAllCustomersReport(int month, int year, long orgaOid, long empOid, long? serviceCategoryOid, int startDay, int endDay)
{
List<ServicesOverviewRO> lROs = ServicesOverviewRO.Create(month, year, orgaOid, empOid, startDay, endDay, serviceCategoryOid, false);
if (lROs.Count > 0)
{
var rootReport = CreateServicesOverviewReportForRo(lROs[0], serviceCategoryOid);
if (rootReport.Pages.Count == 0)
{
rootReport.CreateDocument();
}
for (int i = 1; i < lROs.Count; i++)
{
var lNext = CreateServicesOverviewReportForRo(lROs[i], serviceCategoryOid);
if (lNext.Pages.Count == 0)
{
lNext.CreateDocument();
}
rootReport.Pages.AddRange(lNext.Pages);
}
return rootReport;
}
return new XtraReport();
}
public override XtraReport CreateServiceOverviewSingleCustomerReport(long customerOid, int month, int year, long orgaOid, long empOid, long? serviceCategoryOid, int startDay, int endDay)
{
var ro = ServicesOverviewRO.Create(customerOid, month, year, false, orgaOid, empOid, startDay, endDay, serviceCategoryOid);
return CreateServicesOverviewReportForRo(ro, serviceCategoryOid);
}
public override XtraReport CreateServiceOverviewReportForCustomers(IList<long> customerOids, int month, int year, long? orgaOid, long? empOid, long? serviceCategoryOid, int startDay, int endDay, bool nurFehlende)
{
var roList = new List<ServicesOverviewRO>();
foreach (var coid in customerOids)
{
var ro = ServicesOverviewRO.Create(coid, month, year, true, orgaOid ?? 0, empOid ?? 0, startDay, endDay, serviceCategoryOid);
if (ro != null)
{
roList.Add(ro);
}
}
if (roList.Count > 0)
{
var rootReport = CreateServicesOverviewReportForRo(roList[0], serviceCategoryOid);
rootReport.CreateDocument();
for (int i = 1; i < roList.Count; i++)
{
var lNext = CreateServicesOverviewReportForRo(roList[i], serviceCategoryOid);
lNext.CreateDocument();
rootReport.Pages.AddRange(lNext.Pages);
}
return rootReport;
}
return new XtraReport();
}
private XtraReport CreateServicesOverviewReportForRo(ServicesOverviewRO ro, long? serviceCategoryOid)
{
if (ro.Services != null && ro.Services.Count > 0)
{
var employeeDict = new Dictionary<long?, bool>();
var employeeDCs = MapperFactory.EmployeeDC_Employee.MapToNewDCs(DAOFactory.GenericDAO.GetActiveByIDs<Employee>(ro.Services.Select(s => s.EmployeeOid).Distinct().ToList()));
foreach (var emp in employeeDCs)
employeeDict.Add(emp.EmployeeOid, emp.IsQualified.HasValue ? emp.IsQualified.Value : false);
foreach (ServicesOverviewRO.ServiceDetail s in ro.Services)
{
ServicesOverviewRO.CreateSignatureString(s);
// Notice 2 Einzeltermin FK
// Notice 3 Einzeltermin HK
// Notice 4 Gruppentermin FK
// Notice 5 Gruppentermin HK
bool qualified = employeeDict[s.EmployeeOid];
if (!s.IsGroup)
{
if (qualified)
s.Notice2 = string.Format("{0:0.00}", s.Minutes / 60);
else
s.Notice3 = string.Format("{0:0.00}", s.Minutes / 60);
}
else
{
if (qualified)
s.Notice4 = string.Format("{0:0.00}", s.Minutes / 60);
else
s.Notice5 = string.Format("{0:0.00}", s.Minutes / 60);
}
}
}
XtraReport report = null;
report = AddReportToReport<LeistungsnachweisAnlage4>(report, ro);
report = AddReportToReport<LeistungsnachweisAnlage5>(report, ro);
if (report == null)
report = new XtraReport();
return report;
}
public override XtraReport CreateReportForServicesOverviewRo(ServicesOverviewRO ro, string reportId)
{
return CreateServicesOverviewReportForRo(ro, null);
}
private XtraReport AddReportToReport<T>(XtraReport report, ServicesOverviewRO ro) where T : XtraReport, IBeWoReport<ServicesOverviewRO>, new()
{
if (ro.Services.Count > 0)
{
if (report == null)
{
report = new T();
((T)report).SetReportDataSource(ro);
}
else
{
if (report.Pages.Count == 0)
{
report.CreateDocument();
}
XtraReport newReport = new T();
((T)newReport).SetReportDataSource(ro);
newReport.CreateDocument();
report.Pages.AddRange(newReport.Pages);
}
}
return report;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,96 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using BeWo.Report;
using BeWo.Report.ReportObjects;
using BS.Shared.Core;
using BS.Shared.Extensions;
using DevExpress.XtraReports.UI;
namespace CaritasverbandKelheim
{
public partial class LeistungsnachweisAnlage4 : XtraReport, IBeWoReport<ServicesOverviewRO>
{
public LeistungsnachweisAnlage4()
{
InitializeComponent();
}
public void SetReportDataSource(ServicesOverviewRO pRO)
{
// Get calling method name
//StackTrace stackTrace = new StackTrace();
//Debug.WriteLine(stackTrace.GetFrame(1).GetMethod().Name);
bool hatGruppen = false;
//if (pRO == null)
// return;
if (pRO.Services != null)
{
List<ServicesOverviewRO.ServiceDetail> servicesBillable = new List<ServicesOverviewRO.ServiceDetail>();
decimal gesamtEinzelFK = 0;
decimal gesamtEinzelHK = 0;
decimal gesamtGruppeFK = 0;
decimal gesamtGruppeHK = 0;
foreach (var sd in pRO.Services)
{
if (sd.IsBillable || sd.ServiceDescription.ToLower().Contains("fehlkontakt") || sd.ServiceCategory.ToLower().Contains("fehlkontakt"))
{
if (!sd.Notice2.IsNullOrEmpty())
gesamtEinzelFK += Convert.ToDecimal(sd.Notice2);
if (!sd.Notice3.IsNullOrEmpty())
gesamtEinzelHK += Convert.ToDecimal(sd.Notice3);
if (!sd.Notice4.IsNullOrEmpty())
gesamtGruppeFK += Convert.ToDecimal(sd.Notice4);
if (!sd.Notice5.IsNullOrEmpty())
gesamtGruppeHK += Convert.ToDecimal(sd.Notice5);
servicesBillable.Add(sd);
}
}
lblEinzelFK.Text = string.Format("{0:0.00}", gesamtEinzelFK);
lblEinzelHK.Text = string.Format("{0:0.00}", gesamtEinzelHK);
lblGruppeFK.Text = string.Format("{0:0.00}", gesamtGruppeFK);
lblGruppeHK.Text = string.Format("{0:0.00}", gesamtGruppeHK);
}
bindingSource1.DataSource = pRO;
}
private void picSignature_BeforePrint(object sender, System.ComponentModel.CancelEventArgs e)
{
XRPictureBox xrBox = sender as XRPictureBox;
//var test = this.GetCurrent
string base64String = xrBox.Tag as string;
if (!String.IsNullOrWhiteSpace(base64String))
{
var base64Data = Regex.Match(base64String, @"data:image/(?<type>.+?),(?<data>.+)").Groups["data"].Value;
var binData = Convert.FromBase64String(base64Data);
Image img = ByteArrayToImage(binData);
xrBox.Image = Utils.CropImage(img);
}
else
{
xrBox.Image = null;
}
}
public Image ByteArrayToImage(byte[] byteArrayIn)
{
using(var memoryStream = new MemoryStream(byteArrayIn))
{
return Image.FromStream(memoryStream);
}
}
}
}

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,100 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using BeWo.Report;
using BeWo.Report.ReportObjects;
using BS.Shared.Core;
using BS.Shared.Extensions;
using DevExpress.XtraReports.UI;
namespace CaritasverbandKelheim
{
public partial class LeistungsnachweisAnlage5 : XtraReport, IBeWoReport<ServicesOverviewRO>
{
public LeistungsnachweisAnlage5()
{
InitializeComponent();
}
public void SetReportDataSource(ServicesOverviewRO pRO)
{
// Get calling method name
//StackTrace stackTrace = new StackTrace();
//Debug.WriteLine(stackTrace.GetFrame(1).GetMethod().Name);
bool hatGruppen = false;
//if (pRO == null)
// return;
if (pRO.Services != null)
{
List<ServicesOverviewRO.ServiceDetail> servicesBillable = new List<ServicesOverviewRO.ServiceDetail>();
var empOids = pRO.Services.Select(s => s.EmployeeOid);
decimal gesamtEinzelFK = 0;
decimal gesamtEinzelHK = 0;
decimal gesamtGruppeFK = 0;
decimal gesamtGruppeHK = 0;
foreach (var sd in pRO.Services)
{
if (sd.IsBillable || sd.ServiceDescription.ToLower().Contains("fehlkontakt") || sd.ServiceCategory.ToLower().Contains("fehlkontakt"))
{
if (!sd.Notice2.IsNullOrEmpty())
gesamtEinzelFK += Convert.ToDecimal(sd.Notice2);
if (!sd.Notice3.IsNullOrEmpty())
gesamtEinzelHK += Convert.ToDecimal(sd.Notice3);
if (!sd.Notice4.IsNullOrEmpty())
gesamtGruppeFK += Convert.ToDecimal(sd.Notice4);
if (!sd.Notice5.IsNullOrEmpty())
gesamtGruppeHK += Convert.ToDecimal(sd.Notice5);
servicesBillable.Add(sd);
}
}
lblEinzelFK.Text = string.Format("{0:0.00}", gesamtEinzelFK);
lblEinzelHK.Text = string.Format("{0:0.00}", gesamtEinzelHK);
lblGruppeFK.Text = string.Format("{0:0.00}", gesamtGruppeFK);
lblGruppeHK.Text = string.Format("{0:0.00}", gesamtGruppeHK);
pRO.Services = servicesBillable;
}
bindingSource1.DataSource = pRO;
}
private void picSignature_BeforePrint(object sender, System.ComponentModel.CancelEventArgs e)
{
XRPictureBox xrBox = sender as XRPictureBox;
//var test = this.GetCurrent
string base64String = xrBox.Tag as string;
if (!String.IsNullOrWhiteSpace(base64String))
{
var base64Data = Regex.Match(base64String, @"data:image/(?<type>.+?),(?<data>.+)").Groups["data"].Value;
var binData = Convert.FromBase64String(base64Data);
Image img = ByteArrayToImage(binData);
xrBox.Image = Utils.CropImage(img);
}
else
{
xrBox.Image = null;
}
}
public Image ByteArrayToImage(byte[] byteArrayIn)
{
using(var memoryStream = new MemoryStream(byteArrayIn))
{
return Image.FromStream(memoryStream);
}
}
}
}

View File

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

View File

@@ -0,0 +1 @@
DevExpress.XtraReports.UI.XtraReport, DevExpress.XtraReports.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

View File

@@ -12,25 +12,13 @@ namespace BeWo.Service.Invoicing
{
internal class Club74SettlementInvoiceCreation : LWLSettlementInvoiceCreation
{
private decimal totalFLS = 0;
public override List<InvoiceItemDC> CreateInvoiceItems(Settlement2DC si, IList<ApprovalPeriod> apList)
{
var items = base.CreateInvoiceItems(si, apList, true);
var temp = base.CreateInvoiceItems(si, apList, false);
totalFLS = temp.Sum(ii => (ii.UnitCount ?? 0)); // * rf; //eigentlich falsch dass netto = brutto ist.
return items;
}
public override bool SchneideBeiErreichenDesBudgetsAb { get { return true; } }
public override void CreateInvoiceDetailsTheOldWay(Settlement2DC si, CostBearer2SupportConcept c2s)
{
base.CreateInvoiceDetailsTheOldWay(si, c2s);
si.RecordedBillableFLSNetto = totalFLS;
si.RecordedBillableFLSNetto = si.RecordedMinutesTotal / 60;
}
}
}

View File

@@ -18,7 +18,7 @@ namespace DieBrueckeHilfeUndHalt.Service
var stats = base.CreateSupportConceptStatisticsImpl(costBearer2SupportConceptOid, statisticsDate, ignoreServiceRecordOid);
var cb = MapperFactory.SupportConceptCostBearerRelDC_CostBearer2SupportConcept.MapToNewDC(DAOFactory.GenericDAO.GetByID<CostBearer2SupportConcept>(costBearer2SupportConceptOid));
if (!cb.CostBearer.Function.ToLower().Contains("neue vereinbarung"))
if (cb == null || cb.CostBearer.Function == null || !cb.CostBearer.Function.ToLower().Contains("neue vereinbarung"))
return stats;
decimal factor = 1.2m;

View File

@@ -132,7 +132,8 @@ namespace Fortis
if (ro.MinutenProWocheUnterStufe < 0)
{
ro.Hinweise = "Vorsicht: Rückforderung droht!";
//ro.Hinweise = "Vorsicht: Rückforderung droht!";
ro.Hinweise = "";
}

View File

@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using BeWo.Service.Plugins;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Services;
namespace HphBersenbrueck
{
public class CustomGroupDurationCalculator : GroupDurationCalculator
{
public override GroupDurationDC CalculateGroupDuration(int personCount, int employeeCount, decimal totalDuration)
{
return new GroupDurationDC()
{
SingleDuration = Math.Round((totalDuration / personCount) * employeeCount, 2, MidpointRounding.AwayFromZero),
TotalDuration = totalDuration
};
}
}
}

View File

@@ -64,6 +64,7 @@
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="Calculations\CustomGroupDurationCalculator.cs" />
<Compile Include="Calculations\HPHBCalculations.cs" />
<Compile Include="CustomerDataReport.cs">
<SubType>Component</SubType>

View File

@@ -19,7 +19,7 @@ namespace HPHBersenbrueck.Invoicing
{
protected DateTime? accountingPeriodStart = null;
protected DateTime? accountingPeriodEnd = null;
private Dictionary<long, bool> groupOidDict = null;
public override void SetInvoiceId(ServiceInvoice invoice)
{
@@ -29,6 +29,8 @@ namespace HPHBersenbrueck.Invoicing
public override List<ServiceInvoiceDC> GenerateServiceInvoices(long costBearerOid, DateTimeSpan invoicePeriod, Dictionary<CompactSupportConceptDC, List<ServiceRecordDC>> supportConcepts2ServiceRecords)
{
groupOidDict = new Dictionary<long, bool>();
var invoices = base.GenerateServiceInvoices(costBearerOid, invoicePeriod, supportConcepts2ServiceRecords);
foreach (var i in invoices)
@@ -65,14 +67,27 @@ namespace HPHBersenbrueck.Invoicing
{
return null;
}
var ii = base.CreateInvoiceItem(iServiceRecord, scap, calc);
ii.ItemDescription = iServiceRecord.ServiceDescription.CategoryName;
if (ii.ItemDescription.StartsWith("Neu "))
if (!iServiceRecord.GroupOid.HasValue || !groupOidDict.ContainsKey(iServiceRecord.GroupOid.Value))
{
ii.ItemDescription = ii.ItemDescription.Replace("Neu ", "");
var ii = base.CreateInvoiceItem(iServiceRecord, scap, calc);
if (iServiceRecord.GroupOid.HasValue)
{
ii.UnitCount = ((iServiceRecord.GroupRoundedDuration / iServiceRecord.GroupPersonCount) * iServiceRecord.GroupEmployeeCount) / 60;
}
ii.UnitCount = Math.Round(ii.UnitCount.Value * 1.2m, 2, MidpointRounding.AwayFromZero);
ii.ItemDescription = iServiceRecord.ServiceDescription.CategoryName;
if (ii.ItemDescription.StartsWith("Neu "))
{
ii.ItemDescription = ii.ItemDescription.Replace("Neu ", "");
}
if (iServiceRecord.GroupOid.HasValue)
{
groupOidDict.Add(iServiceRecord.GroupOid.Value, true);
}
return ii;
}
return ii;
return null;
}
public override IList<InvoiceItem> CreateInvoiceItems(List<ServiceRecordDC> serviceRecordsInPeriod, DateTimeSpan invoicePeriod, SupportConceptApprovalPeriod scap, BS.Shared.Services.Calculations calc)
@@ -83,7 +98,7 @@ namespace HPHBersenbrueck.Invoicing
{
if (item.UnitCount.HasValue)
{
item.UnitCount = Math.Round(item.UnitCount.Value * 1.2m, 2, MidpointRounding.AwayFromZero);
item.AmountTotal = item.AmountPerUnit * item.UnitCount;
item.GrossAmountTotal = item.AmountTotal;

View File

@@ -47,32 +47,44 @@ namespace BeWo.HPHBersenbrueck
List<ServicesOverviewRO.ServiceDetail> servicesBillable = new List<ServicesOverviewRO.ServiceDetail>();
int summeWegepauschalen = 0;
int summeAusfallstunden = 0;
decimal summeAbrWegePauschalen = 0;
foreach (var sd in pRO.Services)
{
if (!sd.ServiceCategory.Contains("Fahrt"))
{
sd.FLSQualified = sd.Minutes / 50;
minuten += sd.Minutes;
ServicesOverviewRO.CreateSignatureString(sd);
sd.FLSQualified = sd.Minutes / 50;
if (sd.IsGroup)
{
//sd.Notice5 = String.Format("{0} Teilnehmer", sd.CustomerCount);
hatGruppen = true;
sd.Notice3 = "1";
sd.Minutes = sd.GroupMinutes;
sd.FLSQualified = Math.Round((sd.GroupMinutes / sd.CustomerCount / 50) * sd.EmployeeCount, 2, MidpointRounding.AwayFromZero);
}
else
sd.Notice3 = "";
{
sd.FLSQualified = sd.Minutes / 50;
}
minuten += sd.Minutes;
// Felder für Wegepauschale setzen (Wenn FLS FaceToFace, dann ja)
sd.Notice3 = "";
sd.Notice4 = "";
if (!String.IsNullOrWhiteSpace(sd.GefahreneKilometer) && Decimal.TryParse(sd.GefahreneKilometer, out var k))
{
if (k > 0)
{
sd.Notice4 = "1";
sd.Notice3 = "1";
sd.Notice4 = String.Format("{0:0.00}", 1m / sd.CustomerCount);
summeAbrWegePauschalen += Math.Round(1m / sd.CustomerCount, 2, MidpointRounding.AwayFromZero);
summeWegepauschalen++;
}
}
@@ -92,6 +104,7 @@ namespace BeWo.HPHBersenbrueck
pRO.Services = servicesBillable;
lblSummeWegepauschalen.Text = string.Format("{0:0}", summeWegepauschalen);
lblSummeAusfallstunden.Text = string.Format("{0:0}", summeAusfallstunden);
lblSummeAbrWegepauschalen.Text = string.Format("{0:0.00}", summeAbrWegePauschalen);
}
lblBewilligtFls.Text = String.Format("{0:0.00}", pRO.ApprovedFLSPerWeek);

View File

@@ -47,35 +47,44 @@ namespace BeWo.HPHBersenbrueck
List<ServicesOverviewRO.ServiceDetail> servicesBillable = new List<ServicesOverviewRO.ServiceDetail>();
int summeWegepauschalen = 0;
int summeAusfallstunden = 0;
decimal summeAbrWegePauschalen = 0;
foreach (var sd in pRO.Services)
{
sd.IsBillable = sd.ServiceDescription.Contains("50 direkt") || sd.ServiceDescription.Contains("Ausfall");
if (sd.IsBillable && !sd.ServiceCategory.Contains("Fahrt"))
{
sd.FLSQualified = sd.Minutes / 50;
minuten += sd.Minutes;
ServicesOverviewRO.CreateSignatureString(sd);
if (sd.IsGroup)
{
//sd.Notice5 = String.Format("{0} Teilnehmer", sd.CustomerCount);
hatGruppen = true;
sd.Notice3 = "1";
sd.Minutes = sd.GroupMinutes;
sd.FLSQualified = Math.Round((sd.GroupMinutes / sd.CustomerCount / 50) * sd.EmployeeCount, 2, MidpointRounding.AwayFromZero);
}
else
sd.Notice3 = "";
{
sd.FLSQualified = sd.Minutes / 50;
}
minuten += sd.Minutes;
// Felder für Wegepauschale setzen (Wenn FLS FaceToFace, dann ja)
sd.Notice3 = "";
sd.Notice4 = "";
if (!String.IsNullOrWhiteSpace(sd.GefahreneKilometer) && Decimal.TryParse(sd.GefahreneKilometer, out var k))
{
if (k > 0)
{
sd.Notice4 = "1";
sd.Notice3 = "1";
sd.Notice4 = String.Format("{0:0.00}", 1m / sd.CustomerCount);
summeAbrWegePauschalen += Math.Round(1m / sd.CustomerCount, 2, MidpointRounding.AwayFromZero);
summeWegepauschalen++;
}
}
@@ -95,6 +104,7 @@ namespace BeWo.HPHBersenbrueck
pRO.Services = servicesBillable;
lblSummeWegepauschalen.Text = string.Format("{0:0}", summeWegepauschalen);
lblSummeAusfallstunden.Text = string.Format("{0:0}", summeAusfallstunden);
lblSummeAbrWegepauschalen.Text = string.Format("{0:0.00}", summeAbrWegePauschalen);
}
lblBewilligtFls.Text = String.Format("{0:0.00}", pRO.ApprovedFLSPerWeek);

View File

@@ -56,11 +56,12 @@ namespace HphBersenbrueck.Service
if (stats != null)
{
var allStats = new List<SupportConceptPeriodStatisticsDC>();
foreach (var pdc in stats.PeriodStatistics.OrderByDescending(s => s.SupportConceptApprovalPeriod != null ? s.SupportConceptApprovalPeriod.StartDate : DateTime.MinValue))
{
if (pdc.SupportConceptApprovalPeriod != null && pdc.SupportConceptApprovalPeriod.ServiceCategory != null && pdc.SupportConceptApprovalPeriod.ServiceCategory.Name == NEUE_QA_KATEGORIE)
{
ErstelleAlleStatistikenFuerNeueQA(statisticsDate, dc, stats, pdc);
BerechneAlleStatistikenFuerNeueQA(statisticsDate, dc, stats, pdc, allStats);
}
else
{
@@ -88,14 +89,18 @@ namespace HphBersenbrueck.Service
}
dc.PeriodStatisticInfos.Add(CreateServiceRecordPeriodStatisticsInfo(stats, pdc, header));
}
}
if (allStats.Count > 0)
{
ErstelleStatistikenFuerDieAnzeige(dc, stats, allStats);
}
}
return dc;
}
private void ErstelleAlleStatistikenFuerNeueQA(DateTime statisticsDate, ServiceRecordStatisticsInfoDC dc, SupportConceptStatisticsDC stats, SupportConceptPeriodStatisticsDC pdc)
private void BerechneAlleStatistikenFuerNeueQA(DateTime statisticsDate, ServiceRecordStatisticsInfoDC dc, SupportConceptStatisticsDC stats, SupportConceptPeriodStatisticsDC pdc, List<SupportConceptPeriodStatisticsDC> allStats)
{
//Eine Stunden der neuen QA wird unterteilt in 50 Min direkt, 10 Min Mittelbar, 6 Min indirekt und 15 Min Fahrtzeit
var statsDirekt = new SupportConceptPeriodStatisticsDC();
@@ -108,6 +113,8 @@ namespace HphBersenbrueck.Service
statsDirekt.ApprovedMinutesTillNow = pdc.ApprovedMinutesTillNow; // / 1.2m;
statsDirekt.SupportConceptApprovalPeriod = pdc.SupportConceptApprovalPeriod;
//statsMittelbar.MinutesApprovedPerWeek = pdc.MinutesApprovedPerWeek / 6m; //60 min. bewilligt sind 10 min. mittelbar
//statsMittelbar.MinutesApprovedTotal = pdc.MinutesApprovedTotal / 6m;
//statsMittelbar.ApprovedMinutesTillNow = pdc.ApprovedMinutesTillNow / 6m;
@@ -128,15 +135,47 @@ namespace HphBersenbrueck.Service
BerechneGeleisteteStunden(statisticsDate, statsIndirekt, "6 indirekte Leistung");
BerechneGeleisteteStunden(statisticsDate, statsFahrtzeit, "15 Fahrzeit");
String zeitraum = "";
if (stats.PeriodStatistics.Count > 1 && pdc.SupportConceptApprovalPeriod != null)
if (allStats.Count >= 3)
{
zeitraum = String.Format(" ({0:dd.MM.yyyy} - {1:dd.MM.yyyy})", pdc.SupportConceptApprovalPeriod.StartDate, pdc.SupportConceptApprovalPeriod.EndDate);
//Addiere Stunden der letzten Bewilligung auf die aktuelle Bewilligung
var letzteDirekt = allStats[0];
var letzteIndirekt = allStats[1];
var letzteFahrtzeit = allStats[2];
letzteDirekt.MinutesApprovedTotal += statsDirekt.MinutesApprovedTotal;
letzteDirekt.MinutesProvidedTotalRounded += statsDirekt.MinutesProvidedTotalRounded;
}
dc.PeriodStatisticInfos.Add(CreateServiceRecordPeriodStatisticsInfo(stats, statsDirekt, " 50 direkte Leistung" + zeitraum));
//dc.PeriodStatisticInfos.Add(CreateServiceRecordPeriodStatisticsInfo(stats, statsMittelbar, " 10 direkte Leistung"));
dc.PeriodStatisticInfos.Add(CreateServiceRecordPeriodStatisticsInfo(stats, statsIndirekt, " 6 indirekte Leistung"));
dc.PeriodStatisticInfos.Add(CreateServiceRecordPeriodStatisticsInfo(stats, statsFahrtzeit, " 15 Fahrzeit "));
allStats.Add(statsDirekt);
allStats.Add(statsIndirekt);
allStats.Add(statsFahrtzeit);
}
private void ErstelleStatistikenFuerDieAnzeige(ServiceRecordStatisticsInfoDC dc, SupportConceptStatisticsDC stats, List<SupportConceptPeriodStatisticsDC> allStats)
{
for (int i = 0; i < allStats.Count; i += 3)
{
var statsDirekt = allStats[i];
var statsIndirekt = allStats[i + 1];
var statsFahrtzeit = allStats[i + 2];
String zeitraum = "";
if (allStats.Count > 3 && statsDirekt.SupportConceptApprovalPeriod != null)
{
zeitraum = String.Format(" ({0:dd.MM.yyyy} - {1:dd.MM.yyyy})", statsDirekt.SupportConceptApprovalPeriod.StartDate, statsDirekt.SupportConceptApprovalPeriod.EndDate);
}
dc.PeriodStatisticInfos.Add(CreateServiceRecordPeriodStatisticsInfo(stats, statsDirekt, " 50 direkte Leistung" + zeitraum));
//dc.PeriodStatisticInfos.Add(CreateServiceRecordPeriodStatisticsInfo(stats, statsMittelbar, " 10 direkte Leistung"));
dc.PeriodStatisticInfos.Add(CreateServiceRecordPeriodStatisticsInfo(stats, statsIndirekt, " 6 indirekte Leistung"));
dc.PeriodStatisticInfos.Add(CreateServiceRecordPeriodStatisticsInfo(stats, statsFahrtzeit, " 15 Fahrzeit "));
}
}
private void BerechneGeleisteteStunden(DateTime statisticsDate, SupportConceptPeriodStatisticsDC pdc, string leistung)

View File

@@ -565,7 +565,7 @@ namespace LebenshilfeFrankfurtOder
{
var invoices4 = CreateAbrechnungSbdPool(start, start.AddMonths(1).AddTicks(-1), customerOid, serviceCategoryOid);
invoices.AddRange(invoices4);
}
}
}
else if (abrechnungsArt == AbrechnungsEnum.Einzelfallhilfe)
{
@@ -1325,7 +1325,17 @@ namespace LebenshilfeFrankfurtOder
{
var invoicePeriod = new DateTimeSpan(start, end);
IList<CompactSupportConceptDC> supportConcepts = GetSupportConcepts(start, end, "Familienentlastender Dienst", "pool", customerOid, 24);
long? regionOid = null;
if (serviceCategoryOid == 77)
{
regionOid = 24;
}
else
{
regionOid = 28;
}
IList<CompactSupportConceptDC> supportConcepts = GetSupportConcepts(start, end, "Familienentlastender Dienst", "pool", customerOid, regionOid);
var supportConcepts2ServiceRecords = new Dictionary<CompactSupportConceptDC, List<ServiceRecordDC>>();

File diff suppressed because it is too large Load Diff

View File

@@ -55,17 +55,18 @@ namespace PariSozial
sb.AppendLine(pRO.RecipientPostCodeAndTown);
}
lblAdresse.Text = sb.ToString();
DateTime start = pRO.AccountingPeriodStart;
DateTime end = pRO.AccountingPeriodEnd;
if (start.Month == end.Month && start.Year == end.Year)
{
//lblAbrechnungszeitraum.Text = String.Format("hiermit berechnen wir für den Monat {0:MMMM yyyy} folgende erbrachte Tätigkeiten:", start);
}
else
{
//lblAbrechnungszeitraum.Text = String.Format("hiermit berechnen wir für den Zeitraum {0:MMMM yyyy} - {1:MMMM yyyy} folgende erbrachte Tätigkeiten:", start, end);
lblAdresse.Text = sb.ToString();
string gpNummer = "";
if (pRO.RecipientOrganisation != null && pRO.RecipientOrganisation.Equals("Landschaftsverband Rheinland"))
{
gpNummer = "GP-Nummer: 20000217071";
}
lblKontaktdaten.Text = lblKontaktdaten.Text.Replace("[GP-Nummer]", gpNummer);
if (!String.IsNullOrEmpty(pRO.Notice))
{
lblNotice.Text = "Bemerkung:\n" + pRO.Notice;
}
lblHinweise.Text = lblHinweise.Text.Replace("xxxxx", String.Format("{0:dd.MM.yyyy}", pRO.InvoiceDateTime.Value.AddDays(14))).Replace("rrrrr", pRO.InvoiceNumber);

View File

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

View File

@@ -50,7 +50,7 @@ namespace PariSozial
this.xrLabel4 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel3 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel2 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel13 = new DevExpress.XtraReports.UI.XRLabel();
this.lblKontaktdaten = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel7 = new DevExpress.XtraReports.UI.XRLabel();
this.fieldApprovedFLSWithFactor = new DevExpress.XtraReports.UI.CalculatedField();
this.DetailReport = new DevExpress.XtraReports.UI.DetailReportBand();
@@ -71,7 +71,9 @@ namespace PariSozial
this.xrTableCell5 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell4 = new DevExpress.XtraReports.UI.XRTableCell();
this.Zwischensumme = new DevExpress.XtraReports.UI.GroupFooterBand();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
this.GroupFooter1 = new DevExpress.XtraReports.UI.GroupFooterBand();
this.lblNotice = new DevExpress.XtraReports.UI.XRLabel();
this.xrTable3 = new DevExpress.XtraReports.UI.XRTable();
this.xrTableRow3 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell12 = new DevExpress.XtraReports.UI.XRTableCell();
@@ -100,12 +102,10 @@ namespace PariSozial
this.xrTableCell28 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell30 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell31 = new DevExpress.XtraReports.UI.XRTableCell();
this.lblNotice = new DevExpress.XtraReports.UI.XRLabel();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
((System.ComponentModel.ISupportInitialize)(this.xrTable2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this)).BeginInit();
//
// Detail
@@ -199,7 +199,7 @@ namespace PariSozial
this.xrLabel4,
this.xrLabel3,
this.xrLabel2,
this.xrLabel13,
this.lblKontaktdaten,
this.xrLabel7,
this.lblAdresse,
this.xrLabel8});
@@ -298,18 +298,18 @@ namespace PariSozial
this.xrLabel2.Text = "Leistungsabrechnung";
this.xrLabel2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopCenter;
//
// xrLabel13
// lblKontaktdaten
//
this.xrLabel13.LocationFloat = new DevExpress.Utils.PointFloat(348.0001F, 34.00004F);
this.xrLabel13.Multiline = true;
this.xrLabel13.Name = "xrLabel13";
this.xrLabel13.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel13.ProcessNullValues = DevExpress.XtraReports.UI.ValueSuppressType.SuppressAndShrink;
this.xrLabel13.SizeF = new System.Drawing.SizeF(292F, 122F);
this.xrLabel13.StylePriority.UseFont = false;
this.xrLabel13.StylePriority.UseTextAlignment = false;
this.xrLabel13.Text = resources.GetString("xrLabel13.Text");
this.xrLabel13.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
this.lblKontaktdaten.LocationFloat = new DevExpress.Utils.PointFloat(348.0001F, 34.00004F);
this.lblKontaktdaten.Multiline = true;
this.lblKontaktdaten.Name = "lblKontaktdaten";
this.lblKontaktdaten.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.lblKontaktdaten.ProcessNullValues = DevExpress.XtraReports.UI.ValueSuppressType.SuppressAndShrink;
this.lblKontaktdaten.SizeF = new System.Drawing.SizeF(292F, 122F);
this.lblKontaktdaten.StylePriority.UseFont = false;
this.lblKontaktdaten.StylePriority.UseTextAlignment = false;
this.lblKontaktdaten.Text = resources.GetString("lblKontaktdaten.Text");
this.lblKontaktdaten.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
//
// xrLabel7
//
@@ -561,6 +561,10 @@ namespace PariSozial
this.Zwischensumme.HeightF = 0F;
this.Zwischensumme.Name = "Zwischensumme";
//
// bindingSource1
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.Settlement2RO);
//
// GroupFooter1
//
this.GroupFooter1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
@@ -571,6 +575,17 @@ namespace PariSozial
this.GroupFooter1.Name = "GroupFooter1";
this.GroupFooter1.StylePriority.UseFont = false;
//
// lblNotice
//
this.lblNotice.CanShrink = true;
this.lblNotice.LocationFloat = new DevExpress.Utils.PointFloat(0F, 176.0417F);
this.lblNotice.Multiline = true;
this.lblNotice.Name = "lblNotice";
this.lblNotice.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.lblNotice.ProcessNullValues = DevExpress.XtraReports.UI.ValueSuppressType.SuppressAndShrink;
this.lblNotice.SizeF = new System.Drawing.SizeF(640.0001F, 29.08337F);
this.lblNotice.StylePriority.UseFont = false;
//
// xrTable3
//
this.xrTable3.BorderColor = System.Drawing.Color.Black;
@@ -972,21 +987,6 @@ namespace PariSozial
this.xrTableCell31.TextFormatString = "{0:c}";
this.xrTableCell31.Weight = 0.14186548034377122D;
//
// lblNotice
//
this.lblNotice.CanShrink = true;
this.lblNotice.LocationFloat = new DevExpress.Utils.PointFloat(0F, 176.0417F);
this.lblNotice.Multiline = true;
this.lblNotice.Name = "lblNotice";
this.lblNotice.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.lblNotice.ProcessNullValues = DevExpress.XtraReports.UI.ValueSuppressType.SuppressAndShrink;
this.lblNotice.SizeF = new System.Drawing.SizeF(640.0001F, 29.08337F);
this.lblNotice.StylePriority.UseFont = false;
//
// bindingSource1
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.Settlement2RO);
//
// Spitzabrechnung
//
this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {
@@ -1014,8 +1014,8 @@ namespace PariSozial
this.Watermarks.Add(xrWatermark1);
((System.ComponentModel.ISupportInitialize)(this.xrTable2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable3)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable3)).EndInit();
((System.ComponentModel.ISupportInitialize)(this)).EndInit();
}
@@ -1040,7 +1040,7 @@ namespace PariSozial
private DevExpress.XtraReports.UI.XRLabel xrLabel9;
private DevExpress.XtraReports.UI.GroupHeaderBand GroupHeader2;
private DevExpress.XtraReports.UI.XRLabel xrLabel7;
private DevExpress.XtraReports.UI.XRLabel xrLabel13;
private DevExpress.XtraReports.UI.XRLabel lblKontaktdaten;
private DevExpress.XtraReports.UI.XRLabel xrLabel2;
private DevExpress.XtraReports.UI.XRLabel xrLabel3;
private DevExpress.XtraReports.UI.XRLabel xrLabel6;

View File

@@ -54,6 +54,13 @@ namespace PariSozial
lblAdresse.Text = sb.ToString();
string gpNummer = "";
if (pRO.RecipientOrganisation != null && pRO.RecipientOrganisation.Equals("Landschaftsverband Rheinland"))
{
gpNummer = "GP-Nummer: 20000217071";
}
lblKontaktdaten.Text = lblKontaktdaten.Text.Replace("[GP-Nummer]", gpNummer);
if (!String.IsNullOrEmpty(pRO.Notice))
{
lblNotice.Text = "Bemerkung:\n" + pRO.Notice;

View File

@@ -123,7 +123,7 @@ Bitte überweisen Sie innerhalb von 14 Tagen (bis zum xxxxx)
unter Angabe der Rechnungsnummer (rrrrr)
auf das Geschäftskonto bei der Bank für Sozialwirtschaft Köln</value>
</data>
<data name="xrLabel13.Text" xml:space="preserve">
<data name="lblKontaktdaten.Text" xml:space="preserve">
<value>Friedhofstr. 39
41236 Mönchengladbach
Telefon: 02166-9239-35
@@ -131,7 +131,7 @@ Telefax: 02166-9239-19
Rückfragen an: Herrn Gabriel Kasaboglu
E-Mail: kasaboglu@pariteam-mg.de
Steuer Nr. 131/5951/0051
GP-Nummer: 20000217071
[GP-Nummer]
</value>
</data>
</root>

View File

@@ -246,5 +246,18 @@ namespace SHKService
{
return true;
}
public override decimal GetFeiertagsFaktor(DateTime start)
{
if (start.Month == 12)
{
if (start.Day == 24 || start.Day == 31)
{
return 0.5m;
}
}
return base.GetFeiertagsFaktor(start);
}
}
}

View File

@@ -133,6 +133,7 @@
</Compile>
<Compile Include="Service\CustomCustomerService.cs" />
<Compile Include="Service\CustomSupportConceptAnalysisCreator.cs" />
<Compile Include="Service\CustomVacationService.cs" />
<Compile Include="Teamstundenkonto.cs">
<SubType>Component</SubType>
</Compile>

View File

@@ -0,0 +1,30 @@
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.Plugins;
using BS.Shared;
using BS.Shared.DataContracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace SHKServiceSBD.Service
{
public class CustomVacationService : VacationService
{
public override List<FeiertagDC> GetFeiertage(int year, String bundesland)
{
List<FeiertagDC> list = base.GetFeiertage(year, bundesland);
if (year >= 2024)
{
list.Add(new FeiertagDC { Datum = new DateTime(year, 12, 31), Name = "Silvester" });
}
return list;
}
}
}

View File

@@ -375,7 +375,7 @@ namespace SHKServiceSBD
var faktor = GetFeiertagsFaktor(dd.Date);
if (faktor > 0)
{
if (at.AbsenceReason.Description.ToLower().Contains("krankengeld") || at.AbsenceReason.Description.ToLower().Contains("krank ohne lohnfortzahlung"))
if (at.AbsenceReason.Description.ToLower().Contains("krankengeld") || at.AbsenceReason.Description.ToLower().Contains("elternzeit") || at.AbsenceReason.Description.ToLower().Contains("krank ohne lohnfortzahlung"))
{
feiertagAnrechnen = false;
dd.HoursSick = sollProTag;
@@ -429,6 +429,7 @@ namespace SHKServiceSBD
if (feiertagAnrechnen && HatVertrag(ed, dd.Date))
{
var soll = BerechneSollAmTag(ed, dd.Date) * 60;
soll *= GetFeiertagsFaktor(dd.Date);
if (dd.MinutesTotal <= soll)
{
dd.MinutesTotal = soll;
@@ -565,7 +566,7 @@ namespace SHKServiceSBD
{
foreach (var at in emp.AbsenceTimes)
{
if (at.AbsenceReason.Description.ToLower().Contains("unbezahlter urlaub") || at.AbsenceReason.Description.ToLower().Contains("krankengeld"))
if (at.AbsenceReason.Description.ToLower().Contains("unbezahlter urlaub") || at.AbsenceReason.Description.ToLower().Contains("krankengeld") || at.AbsenceReason.Description.ToLower().Contains("elternzeit"))
{
if (at.Start.Value <= start && (!at.End.HasValue || at.End.Value >= start))
{
@@ -636,6 +637,13 @@ namespace SHKServiceSBD
//{
// return 1;
//}
if (start.Month == 12)
{
if (start.Day == 24 || start.Day == 31)
{
return 0.5m;
}
}
return base.GetFeiertagsFaktor(start);
}
@@ -649,5 +657,6 @@ namespace SHKServiceSBD
{
return vacationService.GetFerien(start, vacationService.Bundesland);
}
}
}

View File

@@ -66,7 +66,8 @@ namespace SHKServiceSBD
}
if (dd.AbsenceTimes != null && dd.AbsenceTimes.Count > 0 &&
(dd.AbsenceTimes[0].AbsenceReason.Description.Contains("Krankengeld") ||
(dd.AbsenceTimes[0].AbsenceReason.Description.Contains("Krankengeld") ||
dd.AbsenceTimes[0].AbsenceReason.Description.Contains("Elternzeit") ||
dd.AbsenceTimes[0].AbsenceReason.Description.Contains("ohne Lohnfortzahlung")))
{
ed.StundenSollMax -= dd.HoursSick;

View File

@@ -117,6 +117,7 @@
</Compile>
<Compile Include="Service\CustomCustomerService.cs" />
<Compile Include="Service\CustomOperationService.cs" />
<Compile Include="Service\CustomVacationService.cs" />
<Compile Include="Service\CustomVertretungsManager.cs" />
</ItemGroup>
<ItemGroup>

View File

@@ -0,0 +1,30 @@
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.Plugins;
using BS.Shared;
using BS.Shared.DataContracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace SHKServiceSBD.Service
{
public class CustomVacationService : VacationService
{
public override List<FeiertagDC> GetFeiertage(int year, String bundesland)
{
List<FeiertagDC> list = base.GetFeiertage(year, bundesland);
if (year >= 2024)
{
list.Add(new FeiertagDC { Datum = new DateTime(year, 12, 31), Name = "Silvester" });
}
return list;
}
}
}

View File

@@ -15,6 +15,16 @@ namespace VSDHammReports
internal class CustomSettlementInvoiceCreation : LWLSettlementInvoiceCreation
{
public override bool SchneideBeiErreichenDesBudgetsAb { get { return true; } }
public override void CreateInvoiceDetailsTheOldWay(Settlement2DC si, CostBearer2SupportConcept c2s)
{
base.CreateInvoiceDetailsTheOldWay(si, c2s);
}
public override List<InvoiceItemDC> CreateInvoiceItems(Settlement2DC si, IList<ApprovalPeriod> apList, bool schneideBeiMaxAb)
{
//var items = base.CreateInvoiceItems(si, apList, true);
@@ -44,8 +54,6 @@ namespace VSDHammReports
list.Add(ap);
}
decimal maxApprovedFls = si.ApprovedFLS ?? 0;
decimal totalHours = 0;
foreach (var key in apsByHourlyRate.Keys)
{
IList<ApprovalPeriod> list = apsByHourlyRate[key];
@@ -64,6 +72,7 @@ namespace VSDHammReports
{
minutesTotal += approvalPeriod.RecordedMinutes;
minutesTotalBudget += approvalPeriod.BudgetMinutes;
if (approvalPeriod.PeriodStartDate < start)
start = approvalPeriod.PeriodStartDate;
if (approvalPeriod.PeriodEndDate > end)
@@ -92,22 +101,6 @@ namespace VSDHammReports
hoursBudget *= (100 + rf) / 100;
hoursBudget = Math.Round(hoursBudget, 2, MidpointRounding.AwayFromZero);
if (schneideBeiMaxAb)
{
if (totalHours + hoursBudget > maxApprovedFls)
{
hoursBudget = maxApprovedFls - totalHours;
if (hoursBudget < 0)
{
hoursBudget = 0;
}
if (hours > hoursBudget)
{
hours = hoursBudget;
}
}
}
totalHours += hoursBudget;
ii.UnitCount = hours;
ii.UnitCountBudget = hoursBudget;

View File

@@ -39,7 +39,7 @@ namespace BeWo.Service.Import.AvisImport
while (index < lines.Length)
{
var datumTa = LvrAvisTextAbschnitt.LeseBisDatum(lines, index, false);
var datumTa = LvrAvisTextAbschnittReader.LeseBisDatum(lines, index, false);
if (datumTa.Success)
{
index = datumTa.ZeilenIndex;
@@ -47,7 +47,7 @@ namespace BeWo.Service.Import.AvisImport
StringBuilder textBereich = new StringBuilder();
var monatTa = LvrAvisTextAbschnitt.LeseBisText(lines, index, "Monat:");
var monatTa = LvrAvisTextAbschnittReader.LeseBisText(lines, index, "Monat:");
if (monatTa.Success)
{
textBereich.Append(monatTa.Text);
@@ -79,11 +79,11 @@ namespace BeWo.Service.Import.AvisImport
int index = 0;
var ta = LvrAvisTextAbschnitt.LeseBisText(lines, index, Aktenzeichen);
var ta = LvrAvisTextAbschnittReader.LeseBisText(lines, index, Aktenzeichen);
index = ta.ZeilenIndex;
//Prüfe ob zuerst der Sachbearbeiter oder der Klientenname im Text steht. Der Sachbearbeiter beginnt mit dem Text "Sachbearbeiter:", der Klient endet mit dem Text "Aktenzeichen"
var sbTest = LvrAvisTextAbschnitt.LeseBisText(lines, index, "Sachbearbeiter");
var azTest = LvrAvisTextAbschnitt.LeseBisText(lines, index, "Aktenzeichen");
var sbTest = LvrAvisTextAbschnittReader.LeseBisText(lines, index, "Sachbearbeiter");
var azTest = LvrAvisTextAbschnittReader.LeseBisText(lines, index, "Aktenzeichen");
if (sbTest.Success && azTest.Success)
{
@@ -96,7 +96,7 @@ namespace BeWo.Service.Import.AvisImport
klientenZeile = azTest.Text;
//Sachbearbeiter steht hinter Klient
ta = LvrAvisTextAbschnitt.LeseBisDatum(lines, index, false);
ta = LvrAvisTextAbschnittReader.LeseBisDatum(lines, index, false);
sbZeile = ta.Text;
}
else
@@ -104,7 +104,7 @@ namespace BeWo.Service.Import.AvisImport
index = sbTest.ZeilenIndex + 1;
sbZeile = sbTest.Text;
//Suche Klient hinter Sachbearbeiter
ta = LvrAvisTextAbschnitt.LeseBisDatum(lines, index, false);
ta = LvrAvisTextAbschnittReader.LeseBisDatum(lines, index, false);
klientenZeile = ta.Text;
}

View File

@@ -39,9 +39,9 @@ namespace BeWo.Service.Import.AvisImport
//Suche Rechnungspositionen anhand des Euro Zeichens
//Prüfe ob ein neues Datum, eine Rechnungsposition oder die Gesamtsumme als nächstes kommt
var datumTa = LvrAvisTextAbschnitt.LeseBisDatum(lines, index, true);
var betragTa = LvrAvisTextAbschnitt.LeseBisText(lines, datumTa.ZeilenIndex, "€");
var gesamtTa = LvrAvisTextAbschnitt.LeseBisText(lines, betragTa.ZeilenIndex, "Gesamtsumme");
var datumTa = LvrAvisTextAbschnittReader.LeseBisDatum(lines, index, true);
var betragTa = LvrAvisTextAbschnittReader.LeseBisText(lines, datumTa.ZeilenIndex, "€");
var gesamtTa = LvrAvisTextAbschnittReader.LeseBisText(lines, betragTa.ZeilenIndex, "Gesamtsumme");
if (datumTa.Success)
{
@@ -54,7 +54,7 @@ namespace BeWo.Service.Import.AvisImport
while (betragTa.Success && betragTa.ZeilenIndex < gesamtTa.ZeilenIndex && index < lines.Length)
{
var line = lines[betragTa.ZeilenIndex];
decimal? betrag = LvrAvisTextAbschnitt.LeseBetrag(line);
decimal? betrag = LvrAvisTextAbschnittReader.LeseBetrag(line);
if (betrag.HasValue)
{
var neuerAvis = new Avis();
@@ -78,7 +78,7 @@ namespace BeWo.Service.Import.AvisImport
letzterAvis.Verwendungszweck = String.Format("{0}\n{1}", letzterAvis.Verwendungszweck, line);
}
betragTa = LvrAvisTextAbschnitt.LeseBisText(lines, betragTa.ZeilenIndex + 1, "€");
betragTa = LvrAvisTextAbschnittReader.LeseBisText(lines, betragTa.ZeilenIndex + 1, "€");
}

View File

@@ -1,4 +1,5 @@
using DevExpress.Pdf;
using BeWo.Service.Import;
using DevExpress.Pdf;
using System;
using System.Collections.Generic;
using System.IO;
@@ -9,42 +10,18 @@ using System.Threading.Tasks;
namespace BeWo.Service.Import.AvisImport
{
public class LvrAvisTextAbschnitt
public class LvrAvisTextAbschnittReader
{
public String Text { get; set; }
public int ZeilenIndex { get; set; }
public bool Success { get; set; }
public static LvrAvisTextAbschnitt LeseBisText(string[] lines, int index, String suchText)
public static TextAbschnitt LeseBisText(string[] lines, int zeilenIndex, string suchText)
{
var ta = new LvrAvisTextAbschnitt();
StringBuilder sb = new StringBuilder();
ta.ZeilenIndex = index;
while (index < lines.Length)
{
String line = lines[index];
sb.AppendLine(line);
if (line.Contains(suchText))
{
ta.Success = true;
ta.ZeilenIndex = index;
ta.Text = sb.ToString();
return ta;
}
index++;
}
return ta;
return TextAbschnittReader.LeseBisText(lines, zeilenIndex, suchText, false, true, false);
}
public static LvrAvisTextAbschnitt LeseBisDatum(string[] lines, int index, bool addDatumsZeile)
public static TextAbschnitt LeseBisDatum(string[] lines, int index, bool addDatumsZeile)
{
var ta = new LvrAvisTextAbschnitt();
var ta = new TextAbschnitt();
StringBuilder sb = new StringBuilder();
while (index < lines.Length)
@@ -89,6 +66,7 @@ namespace BeWo.Service.Import.AvisImport
}
return null;
}
}
}

View File

@@ -17,51 +17,230 @@ namespace BeWo.Service.Import.Perseh
HilfeplanImportDC result = new HilfeplanImportDC();
result.Gruppen = new List<HilfeplanImportItemDC>();
var gruppe1 = new HilfeplanImportItemDC { Label = "Leistungssuchende oder leistungsberechtigte Person", Items = new List<HilfeplanImportItemDC>() };
gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Name", Content = "Bäurle", FieldName = "LastName" });
gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Vorname", Content = "Christian", FieldName = "FirstName" });
gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Geburtsdatum", Content = "08.04.1972", FieldName = "Birthdate" });
gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Nationalität", Content = "deutsch" });
gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Beruf", Content = "Wirt" });
gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "GP-Nummer/Az", Content = "73.20-2100009313-01" });
gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Erstellt von der\nleistungssuchenden oder\nleistungsberechtigten Person\nmit Behinderung unter", Content = "Max Mustermann (Bezugsbetreuer)\nMaria Musterfrau (Sozialarbeiterin)" });
//var gruppe1 = new HilfeplanImportItemDC { Label = "Leistungssuchende oder leistungsberechtigte Person", Items = new List<HilfeplanImportItemDC>() };
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Name", Content = "Bäurle", FieldName = "LastName" });
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Vorname", Content = "Christian", FieldName = "FirstName" });
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Geburtsdatum", Content = "08.04.1972", FieldName = "Birthdate" });
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Nationalität", Content = "deutsch" });
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Beruf", Content = "Wirt" });
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "GP-Nummer/Az", Content = "73.20-2100009313-01" });
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Erstellt von der\nleistungssuchenden oder\nleistungsberechtigten Person\nmit Behinderung unter", Content = "Max Mustermann (Bezugsbetreuer)\nMaria Musterfrau (Sozialarbeiterin)" });
result.Gruppen.Add(gruppe1);
//result.Gruppen.Add(gruppe1);
gruppe1 = new HilfeplanImportItemDC { Label = "Gruppe 2", Items = new List<HilfeplanImportItemDC>() };
gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Name", Content = "Bäurle", FieldName = "LastName" });
gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Vorname", Content = "Christian", FieldName = "FirstName" });
gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Geburtsdatum", Content = "08.04.1972", FieldName = "Birthdate" });
gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Nationalität", Content = "deutsch" });
gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Beruf", Content = "Wirt" });
gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "GP-Nummer/Az", Content = "73.20-2100009313-01" });
gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Erstellt von der\nleistungssuchenden oder\nleistungsberechtigten Person\nmit Behinderung unter", Content = "Max Mustermann (Bezugsbetreuer)\nMaria Musterfrau (Sozialarbeiterin)" });
//gruppe1 = new HilfeplanImportItemDC { Label = "Gruppe 2", Items = new List<HilfeplanImportItemDC>() };
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Name", Content = "Bäurle", FieldName = "LastName" });
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Vorname", Content = "Christian", FieldName = "FirstName" });
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Geburtsdatum", Content = "08.04.1972", FieldName = "Birthdate" });
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Nationalität", Content = "deutsch" });
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Beruf", Content = "Wirt" });
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "GP-Nummer/Az", Content = "73.20-2100009313-01" });
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Erstellt von der\nleistungssuchenden oder\nleistungsberechtigten Person\nmit Behinderung unter", Content = "Max Mustermann (Bezugsbetreuer)\nMaria Musterfrau (Sozialarbeiterin)" });
result.Gruppen.Add(gruppe1);
//result.Gruppen.Add(gruppe1);
result.Ziele = new List<HilfeplanImportZielDC>();
result.Ziele.Add(new HilfeplanImportZielDC { Bereich = "Lernen und Wissensanwendung", ZielName = "Ziel 1", ZielBeschreibung = "Herr Sowieso hat eine seinen Bedürfnissen entsprechende und ihn stabilisierende Tagesstruktur mit einer regelmäßigen, genesungsfördernden Beschäftigung(z.B.Ergotherapie) entwickelt." });
result.Ziele.Add(new HilfeplanImportZielDC { Bereich = "Lernen und Wissensanwendung", ZielName = "Ziel 2", ZielBeschreibung = "Herr Sowieso hat Angstbewältigungsstrategien sowie Stabilisierungstechniken erlernt und kann diese in Alltagssituationen anwenden" });
//result.Ziele.Add(new HilfeplanImportZielDC { Bereich = "Lernen und Wissensanwendung", ZielName = "Ziel 1", ZielBeschreibung = "Herr Sowieso hat eine seinen Bedürfnissen entsprechende und ihn stabilisierende Tagesstruktur mit einer regelmäßigen, genesungsfördernden Beschäftigung(z.B.Ergotherapie) entwickelt." });
//result.Ziele.Add(new HilfeplanImportZielDC { Bereich = "Lernen und Wissensanwendung", ZielName = "Ziel 2", ZielBeschreibung = "Herr Sowieso hat Angstbewältigungsstrategien sowie Stabilisierungstechniken erlernt und kann diese in Alltagssituationen anwenden" });
result.Ziele.Add(new HilfeplanImportZielDC { Bereich = "Allgemeine Aufgaben und Anforderungen", ZielName = "Ziel 1", ZielBeschreibung = "Herr Sowieso hat eine seinen Bedürfnissen entsprechende und ihn stabilisierende Tagesstruktur mit einer regelmäßigen, genesungsfördernden Beschäftigung(z.B.Ergotherapie) entwickelt." });
result.Ziele.Add(new HilfeplanImportZielDC { Bereich = "Allgemeine Aufgaben und Anforderungen", ZielName = "Ziel 2", ZielBeschreibung = "Herr Sowieso hat Angstbewältigungsstrategien sowie Stabilisierungstechniken erlernt und kann diese in Alltagssituationen anwenden" });
//result.Ziele.Add(new HilfeplanImportZielDC { Bereich = "Allgemeine Aufgaben und Anforderungen", ZielName = "Ziel 1", ZielBeschreibung = "Herr Sowieso hat eine seinen Bedürfnissen entsprechende und ihn stabilisierende Tagesstruktur mit einer regelmäßigen, genesungsfördernden Beschäftigung(z.B.Ergotherapie) entwickelt." });
//result.Ziele.Add(new HilfeplanImportZielDC { Bereich = "Allgemeine Aufgaben und Anforderungen", ZielName = "Ziel 2", ZielBeschreibung = "Herr Sowieso hat Angstbewältigungsstrategien sowie Stabilisierungstechniken erlernt und kann diese in Alltagssituationen anwenden" });
//using (var processor = new PdfDocumentProcessor())
//{
// using (var ms = new MemoryStream(daten))
// {
// processor.LoadDocument(ms);
using (var processor = new PdfDocumentProcessor())
{
using (var ms = new MemoryStream(daten))
{
processor.LoadDocument(ms);
// var pdfText = processor.Text;
var pdfText = processor.Text;
// }
//}
var customerGruppe = ErstelleKlientenStammdatenGruppe(pdfText);
if (customerGruppe != null)
{
result.Gruppen.Add(customerGruppe);
}
result.Ziele = ErstelleAlleZiele(pdfText);
}
}
return result;
}
private IList<HilfeplanImportZielDC> ErstelleAlleZiele(string pdfText)
{
var ziele = new List<HilfeplanImportZielDC>();
//Suche Zeile "Zielplanung". So beginnt hinten im Dokument der Bereich mit der Zusammenfassung der Ziele
var zeilen = pdfText.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
var startIdx = -1;
var endIdx = -1;
StringBuilder gesamtTextMitZielen = new StringBuilder();
for (int i = zeilen.Length - 1; i >= 0; i--)
{
var z = zeilen[i];
if (z == "Zielplanung")
{
startIdx = i;
}
if (z.StartsWith("Übersicht der Leistungsplanung "))
{
endIdx = i;
}
}
if (startIdx >= 0)
{
for (int i = startIdx; i < endIdx; i++)
{
gesamtTextMitZielen.AppendLine(zeilen[i]);
}
zeilen = gesamtTextMitZielen.ToString().Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
startIdx = 0;
while (startIdx >= 0)
{
var ta = TextAbschnittReader.LeseBisText(zeilen, startIdx, "Lebensbereich ", true, false, false);
if (ta.Success)
{
ziele.AddRange(ErstelleBereichMitZielen(zeilen, ta));
startIdx = ta.ZeilenIndex + 1;
}
else
{
startIdx = -1;
}
}
}
return ziele;
}
private IList<HilfeplanImportZielDC> ErstelleBereichMitZielen(string[] zeilen, TextAbschnitt ta)
{
var ziele = new List<HilfeplanImportZielDC>();
String bereich = zeilen[ta.ZeilenIndex];
int idxBereichStart = ta.ZeilenIndex + 1;
int idxBereichtEnde = zeilen.Length;
var taEnde = TextAbschnittReader.LeseBisText(zeilen, ta.ZeilenIndex + 1, "Lebensbereich ", true, false, false);
if (taEnde.Success)
{
idxBereichtEnde = taEnde.ZeilenIndex;
}
HilfeplanImportZielDC ziel = null;
for (int i = idxBereichStart; i < idxBereichtEnde; i++)
{
String zeile = zeilen[i];
if (zeile.StartsWith("Ziele • ") || zeile.StartsWith("• "))
{
ziel = new HilfeplanImportZielDC();
ziel.Bereich = bereich;
ziel.ZielName = zeile.Replace("Ziele • ", "").Replace("• ", "").Trim();
ziele.Add(ziel);
}
else if (ziel != null)
{
if (!IgnoriereZeile(zeile))
{
ziel.ZielName += " " + zeile.Trim();
}
}
}
return ziele;
}
private bool IgnoriereZeile(string zeile)
{
if (zeile.StartsWith("(c) Landschaftsverband") || zeile.StartsWith("Gesprächsleitfaden - "))
{
return true;
}
if (zeile.StartsWith("V1") || zeile.StartsWith("V2") || zeile.StartsWith("V3"))
{
return true;
}
return false;
}
private HilfeplanImportItemDC ErstelleKlientenStammdatenGruppe(string pdfText)
{
if (pdfText.Contains("Individuelle Bedarfsermittlung - Element Basisdaten"))
{
var customerGruppe = new HilfeplanImportItemDC { Label = "Stammdaten", Items = new List<HilfeplanImportItemDC>() };
customerGruppe.Items = LeseKlientenStammdaten(pdfText);
return customerGruppe;
}
return null;
}
private List<HilfeplanImportItemDC> LeseKlientenStammdaten(string pdfText)
{
var liste = new List<HilfeplanImportItemDC>();
var zeilen = pdfText.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
var ta = TextAbschnittReader.LeseBisText(zeilen, 0, "BEI_NRW für den Zeitraum vom ", true, false, false);
if (ta.Success)
{
var idx = ta.ZeilenIndex;
liste.Add(ErstelleStammdatenFeld("BEI_NRW für den Zeitraum vom", "ApprovalPeriod", zeilen, idx, out idx));
liste.Add(ErstelleStammdatenFeld("GP-Nummer/Az", "CustomerReferenceNumber", zeilen, idx, out idx));
liste.Add(ErstelleStammdatenFeld("Name", "Lastname", zeilen, idx, out idx));
liste.Add(ErstelleStammdatenFeld("Vorname", "Firstname", zeilen, idx, out idx));
liste.Add(ErstelleStammdatenFeld("Titel", "Titel", zeilen, idx, out idx));
liste.Add(ErstelleStammdatenFeld("Geburtsdatum", "Birthdate", zeilen, idx, out idx));
liste.Add(ErstelleStammdatenFeld("Geschlecht", "Sex", zeilen, idx, out idx));
liste.Add(ErstelleStammdatenFeld("Nationalität", "Nationality", zeilen, idx, out idx));
liste.Add(ErstelleStammdatenFeld("Beruf", "Job", zeilen, idx, out idx));
liste.Add(ErstelleStammdatenFeld("Familienstand", "FamilyStatus", zeilen, idx, out idx));
liste.Add(ErstelleStammdatenFeld("Anzahl und Alter der Kinder", "Children", zeilen, idx, out idx));
liste.Add(ErstelleStammdatenFeld("PLZ", "PostalCode", zeilen, idx, out idx));
liste.Add(ErstelleStammdatenFeld("Ort", "Town", zeilen, idx, out idx));
liste.Add(ErstelleStammdatenFeld("Straße", "Street", zeilen, idx, out idx));
liste.Add(ErstelleStammdatenFeld("Telefon", "Phone", zeilen, idx, out idx));
liste.Add(ErstelleStammdatenFeld("Fax", "Fax", zeilen, idx, out idx));
liste.Add(ErstelleStammdatenFeld("E-Mail", "EMail", zeilen, idx, out idx));
}
return liste;
}
private HilfeplanImportItemDC ErstelleStammdatenFeld(string label, string fieldname, string[] zeilen, int startIndex, out int foundIdx)
{
var item = new HilfeplanImportItemDC { Label = label, FieldName = fieldname };
var ta = TextAbschnittReader.LeseBisText(zeilen, startIndex, label, true, false, false);
foundIdx = 0;
if (ta.Success)
{
item.Content = zeilen[ta.ZeilenIndex].Replace(label, "").Trim();
if (item.Label.Contains("_"))
{
item.Label = label.Replace("_", "__");
}
foundIdx = ta.ZeilenIndex;
}
return item;
}
}
}

View File

@@ -0,0 +1,23 @@
using DevExpress.Pdf;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace BeWo.Service.Import
{
public class TextAbschnitt
{
public String Text { get; set; }
public int ZeilenIndex { get; set; }
public bool Success { get; set; }
}
}

View File

@@ -0,0 +1,42 @@
using DevExpress.Pdf;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace BeWo.Service.Import
{
public class TextAbschnittReader
{
public static TextAbschnitt LeseBisText(string[] lines, int index, String suchText, bool sucheAmZeilenAnfang, bool sucheInnerhalbDerZeile, bool sucheAmZeilenEnde)
{
var ta = new TextAbschnitt();
StringBuilder sb = new StringBuilder();
ta.ZeilenIndex = index;
while (index < lines.Length)
{
String line = lines[index];
sb.AppendLine(line);
if ((sucheAmZeilenAnfang && line.StartsWith(suchText)) || (sucheInnerhalbDerZeile && line.Contains(suchText)) || (sucheAmZeilenEnde && line.EndsWith(suchText)))
{
ta.Success = true;
ta.ZeilenIndex = index;
ta.Text = sb.ToString();
return ta;
}
index++;
}
return ta;
}
}
}

View File

@@ -102,8 +102,8 @@ namespace BeWo.Service.Invoicing
//decimal flmCleared = 0;
records = records.OrderBy<ServiceRecord, DateTime>(sr => sr.Start.HasValue ? sr.Start.Value : DateTime.MinValue).ToList<ServiceRecord>();
decimal maxApprovedMinutes = ((si.ApprovedFLS ?? 0) * 60) / rf;
decimal totalMinutes = 0;
decimal maxApprovedMinutes = (si.ApprovedFLS ?? 0) * 60;
decimal totalMinutesGeleistet = 0;
foreach (var iRecord in records)
{
if (iRecord.ServiceDescription.ServiceCategory.IsBillable)
@@ -159,14 +159,16 @@ namespace BeWo.Service.Invoicing
if (ap != null)
{
//Christian wars:-)
if (SchneideBeiErreichenDesBudgetsAb)
//Christian wars:-)
var dauerBudgetMitRf = dauerBudget * ((ap.RateFactor ?? 0) + 100) / 100;
if (SchneideBeiErreichenDesBudgetsAb)
{
if (totalMinutes + dauerBudget > maxApprovedMinutes)
if (totalMinutesGeleistet + dauerBudgetMitRf > maxApprovedMinutes)
{
dauerBudget = maxApprovedMinutes - totalMinutes;
if (dauerBudget < 0)
dauerBudget = maxApprovedMinutes - totalMinutesGeleistet;
dauerBudget /= ((ap.RateFactor ?? 0) + 100) / 100;
if (dauerBudget < 0)
{
dauerBudget = 0;
}
@@ -175,8 +177,12 @@ namespace BeWo.Service.Invoicing
dauerAbrechenbar = dauerBudget;
}
}
}
totalMinutes += dauerBudget;
}
totalMinutesGeleistet += dauerBudgetMitRf;
ap.RecordedMinutes += dauerAbrechenbar;
ap.BudgetMinutes += dauerBudget;
}
@@ -190,7 +196,8 @@ namespace BeWo.Service.Invoicing
}
}
si.RecordedMinutesTotal = totalMinutesGeleistet;
//decimal? maxAmount = CalculateMaxAmount(si, apList);
var gesamtListe = new List<ApprovalPeriod>();
gesamtListe.AddRange(apListFLS.Where(a => a.RecordedMinutes > 0));

View File

@@ -484,9 +484,9 @@ namespace BeWo.Service.Invoicing
}
}
si.ApprovedFLSWithActualHourlyRate = Math.Round(si.ApprovedFLSWithActualHourlyRate, 4, MidpointRounding.AwayFromZero);
si.ApprovedFLSWithHourlyRate3 = Math.Round(si.ApprovedFLSWithHourlyRate3, 4, MidpointRounding.AwayFromZero);
si.ApprovedFLSWithOldHourlyRate = Math.Round(si.ApprovedFLSWithOldHourlyRate, 4, MidpointRounding.AwayFromZero);
si.ApprovedFLSWithActualHourlyRate = Math.Round(si.ApprovedFLSWithActualHourlyRate, 2, MidpointRounding.AwayFromZero);
si.ApprovedFLSWithHourlyRate3 = Math.Round(si.ApprovedFLSWithHourlyRate3, 2, MidpointRounding.AwayFromZero);
si.ApprovedFLSWithOldHourlyRate = Math.Round(si.ApprovedFLSWithOldHourlyRate, 2, MidpointRounding.AwayFromZero);
decimal rf = 1;
if (si.RateFactor.HasValue && si.RateFactor.Value != 0)
@@ -903,17 +903,19 @@ namespace BeWo.Service.Invoicing
{
if (ii.UnitCount.HasValue)
{
var unitCountBudget = Math.Round(ii.UnitCountBudget ?? ii.UnitCount ?? 0, 2, MidpointRounding.AwayFromZero);
var unitCountBudget = Math.Round(ii.UnitCountBudget ?? ii.UnitCount ?? 0, 2, MidpointRounding.AwayFromZero);
if (maxApprovedFls < unitCountBudget)
unitCountBudget = maxApprovedFls;
maxApprovedFls -= unitCountBudget;
ii.UnitCount = Math.Round(ii.UnitCount.Value, 2, MidpointRounding.AwayFromZero);
//if (unitCountBudget < ii.UnitCount)
//{
// ii.UnitCount = unitCountBudget;
//}
if (ii.AmountPerUnit.HasValue)
if (ii.AmountPerUnit.HasValue)
{
if (!String.IsNullOrEmpty(ii.ItemDescription) && ii.ItemDescription == "Fehlkontakte" && ii.ProzentAbrechenbar.HasValue)
{

View File

@@ -40,7 +40,7 @@ namespace BeWo.Service.Plugins
//t = "9098141768"; // Fib e.V. Marburg
//t = "1505148718"; // VSD Hamm
//t = "5926081834"; // Spektrum
//t = "1378137009"; // BeWo Direkt+
//t = "1378137009"; // BeWo Direkt
//t = "3010479871"; // Aachener Verein
//t = "3849764093"; // Club 74
//t = "5805202339"; // Wegweiser Betreuungsdienst

View File

@@ -386,11 +386,13 @@
<Compile Include="Import\AvisImport\AviseImporter.cs" />
<Compile Include="Import\AvisImport\HilfeplanInfo.cs" />
<Compile Include="Import\AvisImport\LvrAvisTextReader.cs" />
<Compile Include="Import\AvisImport\LvrAvisTextAbschnitt.cs" />
<Compile Include="Import\AvisImport\LvrAvisTextAbschnittReader.cs" />
<Compile Include="Import\AvisImport\LvrAvisMonatGesamt.cs" />
<Compile Include="Import\AvisImport\LvrAvisKlientGesamt.cs" />
<Compile Include="Import\AvisImport\LvrAvisPdfReader.cs" />
<Compile Include="Import\AvisImport\Avis.cs" />
<Compile Include="Import\TextAbschnittReader.cs" />
<Compile Include="Import\TextAbschnitt.cs" />
<Compile Include="Import\Perseh\PersehReader.cs" />
<Compile Include="Invoicing\ApprovalPeriod.cs" />
<Compile Include="Invoicing\GeneralInvoiceCreation.cs" />

View File

@@ -168,6 +168,9 @@ namespace BS.Shared.DataContracts
[DataMember]
public decimal RecordedBillableFLSNetto { get; set; }
[DataMember]
public decimal RecordedMinutesTotal { get; set; }
[DataMember]
public decimal RecordedBillableFLSNotBillableCustomerAbsent { get; set; }