Verbessertes Error Handling, Neuer Bericht für SHK Service, Änderungen an Vorlagen, Erweiterung Betreuungszeiten

This commit is contained in:
Christian
2024-09-17 21:10:47 +02:00
parent 6f75995c9b
commit 29bb0a7d96
34 changed files with 1126 additions and 240 deletions

View File

@@ -33,6 +33,7 @@ using ChatController.HauptKlassen;
using DevExpress.Xpf.Core; using DevExpress.Xpf.Core;
using DevExpress.Xpf.Grid; using DevExpress.Xpf.Grid;
using DevExpress.XtraScheduler; using DevExpress.XtraScheduler;
using System.ServiceModel;
namespace BeWo namespace BeWo
{ {
@@ -852,20 +853,21 @@ namespace BeWo
} }
} }
internal static void ShowError(string message, Exception ex, bool showDetails) internal static void ShowError(string message, Exception ex, bool showSupportForm, bool showStacktrace)
{ {
if (MainControl != null) if (MainControl != null)
{ {
MainControl.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action) (() => MainControl.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action) (() =>
{ {
MainControl.EndWaiting();
UserControl exControl = null; UserControl exControl = null;
if (showDetails && BeWoApp.LoggedOnUser != null && BeWoApp.LoggedOnUser.HasRight(BS.Shared.UserRightType.Support_View)) if (showSupportForm && BeWoApp.LoggedOnUser != null && BeWoApp.LoggedOnUser.HasRight(BS.Shared.UserRightType.Support_View))
{ {
exControl = new ExceptionMessageBoxWithSupportMail(ex); exControl = new ExceptionMessageBoxWithSupportMail(ex);
} }
else else
{ {
exControl = new ExceptionMessageBox(message, ex, showDetails); exControl = new ExceptionMessageBox(message, ex, showStacktrace);
} }
MainControl.ShowControlAsModalPopup(exControl); MainControl.ShowControlAsModalPopup(exControl);
@@ -873,7 +875,7 @@ namespace BeWo
} }
else if (LoginControl != null) else if (LoginControl != null)
{ {
LoginControl.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action) (() => LoginControl.ShowControlAsModalPopUp(new ExceptionMessageBox(message, ex, showDetails)))); LoginControl.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action) (() => LoginControl.ShowControlAsModalPopUp(new ExceptionMessageBox(message, ex, showStacktrace))));
} }
else else
{ {
@@ -931,7 +933,7 @@ namespace BeWo
&& !ex.Exception.ToString().Contains("DevExpress.Xpf.Grid.Native.SelectionStrategyCellBase.IsCellSelected"))) && !ex.Exception.ToString().Contains("DevExpress.Xpf.Grid.Native.SelectionStrategyCellBase.IsCellSelected")))
{ {
ShowError(null, ex.Exception, true); ShowErrorMessage(ex.Exception);
} }
ex.Handled = true; ex.Handled = true;
}; };
@@ -939,6 +941,86 @@ namespace BeWo
FrameworkElement.LanguageProperty.OverrideMetadata(typeof (FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag))); FrameworkElement.LanguageProperty.OverrideMetadata(typeof (FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
} }
public static void ShowErrorMessage(Exception e)
{
if (e is FaultException<BeWoFault>)
{
var lBeWoFault = (e as FaultException<BeWoFault>).Detail;
String rowUpdated = "Der Datensatz wurde in der Zwischenzeit von " + BS.Shared.Translation.Translator.Translate("einem anderen Benutzer") + " geändert. Ihre Änderungen konnten leider NICHT gespeichert werden. Das Problem tritt auf, wenn mehrere " + BS.Shared.Translation.Translator.Translate("BenutzerPlural") + " gleichzeitig den gleichen Datensatz bearbeiten.\n\nSie müssen den Datensatz schließen und erneut öffnen, um die Änderungen vornehmen zu können.";
switch (lBeWoFault.FaultType)
{
case BeWoFaultType.Concurrency:
BeWoApp.ShowError(rowUpdated, e, false, false);
break;
case BeWoFaultType.DeleteNotPossible:
MessageBox.Show(lBeWoFault.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Asterisk);
break;
case BeWoFaultType.LoginNameTaken:
MessageBox.Show(lBeWoFault.Message, "Warnung", MessageBoxButton.OK, MessageBoxImage.Asterisk);
return;
case BeWoFaultType.CustomWithoutDetails:
BeWoApp.ShowError(lBeWoFault.Message, e, false, false);
break;
default:
if (!String.IsNullOrEmpty(e.Message) && e.Message.IndexOf("Row was updated or deleted by another transaction") >= 0)
{
BeWoApp.ShowError(rowUpdated, e, false, false);
}
else if (!String.IsNullOrEmpty(lBeWoFault.Message) && lBeWoFault.Message.IndexOf("überschreitet") >= 0 && lBeWoFault.Message.IndexOf("erlaubte Größe") >= 0)
{
BeWoApp.ShowError(lBeWoFault.Message, e, false, false);
}
else
{
ShowDefaultErrorMessage(e, lBeWoFault.Message);
}
break;
}
}
else
{
ShowDefaultErrorMessage(e, String.Format("{0}", e));
}
}
private static void ShowDefaultErrorMessage(Exception e, string errormessage)
{
var displayMessage = errormessage;
var stacktrace = String.Format("{0}", e);
if (!String.IsNullOrEmpty(stacktrace))
{
bool showStackTrace = true;
bool showSupportForm = true;
if (stacktrace.IndexOf("Es war kein an https:") >= 0 && stacktrace.IndexOf("lauschender Endpunkt") >= 0)
{
displayMessage = "Es konnte leider keine Verbindung zum Server hergestellt werden. Bitte prüfen Sie Ihre Internetverbindung oder versuchen Sie es später erneut. Bei wiederholter Fehlermeldung schicken Sie bitte folgende Fehlermeldung an support@bewoplaner.de";
showSupportForm = false;
}
else if (stacktrace.IndexOf("Der Prozess kann nicht auf die Datei") >= 0 && stacktrace.IndexOf("von einem anderen Prozess verwendet") >= 0)
{
showStackTrace = false;
showSupportForm = false;
}
else if (stacktrace.IndexOf("GenericADOException") >= 0 && stacktrace.IndexOf("could not insert") >= 0 && stacktrace.IndexOf("Incorrect string value") >= 0)
{
displayMessage = "Ihre Eingabe enthält ungültige Zeichen. Wenn Sie einen Text aus einem anderen Programm kopiert haben, entfernen Sie bitte vor dem Speichern die ungültigen Zeichen oder geben Sie den Text manuell ein.";
showStackTrace = true;
showSupportForm = false;
}
BeWoApp.ShowError(displayMessage, e, showSupportForm, showStackTrace);
}
else
{
BeWoApp.ShowError(null, e, true, true);
}
}
private static void ReloadSettings(List<SettingsDC> settings) private static void ReloadSettings(List<SettingsDC> settings)
{ {
if (_LoggedOnUser != null) if (_LoggedOnUser != null)

View File

@@ -252,7 +252,7 @@ namespace BeWo.Core
} }
catch (Exception e) catch (Exception e)
{ {
BeWoApp.ShowError(null, e, true); BeWoApp.ShowErrorMessage(e);
BeWoApp.MainControl.EndWaiting(); BeWoApp.MainControl.EndWaiting();
} }
}, },

View File

@@ -26,7 +26,7 @@ namespace BeWo.Core.Config
private CustomerFilterEnum _CustomerFilterCustomers = CustomerFilterEnum.All; private CustomerFilterEnum _CustomerFilterCustomers = CustomerFilterEnum.All;
private bool _showExpiredSupportConcepts = true; private bool _showExpiredSupportConcepts = true;
private bool _showServiceRecordGridControl; private bool _showServiceRecordGridControl = true;
private bool _filterGroupServiceCategories = true; private bool _filterGroupServiceCategories = true;
private WindowStateType mWindowStateType = WindowStateType.Default; private WindowStateType mWindowStateType = WindowStateType.Default;

View File

@@ -875,70 +875,10 @@ namespace BeWo.ServiceProxy
private static void ShowErrorMessage(Exception e) private static void ShowErrorMessage(Exception e)
{ {
if (e is FaultException<BeWoFault>) BeWoApp.ShowErrorMessage(e);
{
var lBeWoFault = (e as FaultException<BeWoFault>).Detail;
String rowUpdated = "Der Datensatz wurde in der Zwischenzeit von " + BS.Shared.Translation.Translator.Translate("einem anderen Benutzer") + " geändert. Ihre Änderungen konnten leider NICHT gespeichert werden. Das Problem tritt auf, wenn mehrere " + BS.Shared.Translation.Translator.Translate("BenutzerPlural") + " gleichzeitig den gleichen Datensatz bearbeiten.\n\nSie müssen den Datensatz schließen und erneut öffnen, um die Änderungen vornehmen zu können.";
switch (lBeWoFault.FaultType)
{
case BeWoFaultType.Concurrency:
BeWoApp.ShowError(rowUpdated, e, false);
break;
case BeWoFaultType.DeleteNotPossible:
MessageBox.Show(lBeWoFault.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Asterisk);
break;
case BeWoFaultType.LoginNameTaken:
MessageBox.Show(lBeWoFault.Message, "Warnung", MessageBoxButton.OK, MessageBoxImage.Asterisk);
return;
case BeWoFaultType.CustomWithoutDetails:
BeWoApp.ShowError(lBeWoFault.Message, e, false);
break;
default:
if (!String.IsNullOrEmpty(e.Message) && e.Message.IndexOf("Row was updated or deleted by another transaction") >= 0)
{
BeWoApp.ShowError(rowUpdated, e, false);
}
else if (!String.IsNullOrEmpty(lBeWoFault.Message) && lBeWoFault.Message.IndexOf("überschreitet") >= 0 && lBeWoFault.Message.IndexOf("erlaubte Größe") >= 0)
{
BeWoApp.ShowError(lBeWoFault.Message, e, false);
}
else
{
if (!String.IsNullOrEmpty(lBeWoFault.Message))
{
BeWoApp.ShowError(lBeWoFault.Message, e, true);
}
else
{
BeWoApp.ShowError(null, e, true);
}
}
break;
}
}
else
{
String allMessage = String.Format("{0}", e);
if (!String.IsNullOrEmpty(allMessage) && allMessage.IndexOf("Es war kein an https://") >= 0 && allMessage.IndexOf("lauschender Endpunkt") >= 0)
{
String msg = "Es konnte leider keine Verbindung zum Server hergestellt werden. Bitte prüfen Sie Ihre Internetverbindung oder versuchen Sie es später erneut. Bei wiederholter Fehlermeldung schicken Sie bitte folgende Fehlermeldung an support@bewoplaner.de";
BeWoApp.ShowError(msg, e, true);
}
else if (!String.IsNullOrEmpty(e.Message) && e.Message.IndexOf("Der Prozess kann nicht auf die Datei") >= 0 && e.Message.IndexOf("von einem anderen Prozess verwendet") >= 0)
{
BeWoApp.ShowError(e.Message, e, false);
}
else
{
BeWoApp.ShowError(null, e, true);
}
}
} }
private static void StartWaiting() private static void StartWaiting()
{ {
Monitor.Enter(_Lock); Monitor.Enter(_Lock);
if ((++_RunningAsyncs) == 1 && BeWoApp.MainControl != null) if ((++_RunningAsyncs) == 1 && BeWoApp.MainControl != null)

View File

@@ -100,6 +100,14 @@ namespace BeWo.View.Detail
{ {
tabitem_documents.Visibility = Visibility.Collapsed; tabitem_documents.Visibility = Visibility.Collapsed;
} }
tabitem_grid_tasks.IsEnabled = false;
if (BeWoApp.LoggedOnUser.HasRight(UserRightType.SupportConcept_AllowEditTasks))
{
tabitem_grid_tasks.IsEnabled = true;
}
if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.SupportConceptView_Edit)) if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.SupportConceptView_Edit))
{ {
grid_details.IsEnabled = false; grid_details.IsEnabled = false;
@@ -110,18 +118,19 @@ namespace BeWo.View.Detail
grid_serviceaccountings.IsEnabled = false; grid_serviceaccountings.IsEnabled = false;
tabitem_grid_tasks.IsEnabled = false;
if (BeWoApp.LoggedOnUser.HasRight(UserRightType.SupportConcept_AllowEditTasks)) if (BeWoApp.LoggedOnUser.HasRight(UserRightType.SupportConcept_AllowEditTasks))
{ {
tabitem_grid_tasks.IsEnabled = true;
tabitem_tasks.IsSelected = true; tabitem_tasks.IsSelected = true;
} }
if (BeWoApp.LoggedOnUser.HasRight(UserRightType.SupportConcept_AllowEditGoals)) if (BeWoApp.LoggedOnUser.HasRight(UserRightType.SupportConcept_AllowEditGoals))
{ {
tabitem_goals.IsSelected = true; tabitem_goals.IsSelected = true;
} }
} }
if (pViewModel.VarFields == null || pViewModel.VarFields.VMList.Count == 0) if (pViewModel.VarFields == null || pViewModel.VarFields.VMList.Count == 0)
{ {
tabitem_varFields.Visibility = Visibility.Collapsed; tabitem_varFields.Visibility = Visibility.Collapsed;

View File

@@ -34,7 +34,7 @@
<RowDefinition Height="Auto" /> <!-- Textfeld 2 --> <RowDefinition Height="Auto" /> <!-- Textfeld 2 -->
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Label Grid.Column="0" Grid.Row="0" Content="Vorlagenname" /> <Label Grid.Column="0" Grid.Row="0" Content="Name" />
<Label Grid.Column="0" Grid.Row="1" Content="Beschreibung" /> <Label Grid.Column="0" Grid.Row="1" Content="Beschreibung" />
<dxe:TextEdit x:Name="TextEdit_Vorlagenname" Grid.Column="1" Grid.Row="0" Height="23" Margin="3,0,3,3" EditValueChanged="TextEdit_Vorlagenname_EditValueChanged"/> <dxe:TextEdit x:Name="TextEdit_Vorlagenname" Grid.Column="1" Grid.Row="0" Height="23" Margin="3,0,3,3" EditValueChanged="TextEdit_Vorlagenname_EditValueChanged"/>

View File

@@ -204,7 +204,7 @@ namespace BeWo.View.Detail
{ {
if(TextEdit_Vorlagenname.Text.Equals("")) if(TextEdit_Vorlagenname.Text.Equals(""))
{ {
MessageBox.Show("Der Volagenname darf nicht leer gelassen werden.", "BeWoPlaner", MessageBoxButton.OK, MessageBoxImage.Information); MessageBox.Show("Bitte geben sie einen Namen für die Vorlage ein.", "BeWoPlaner", MessageBoxButton.OK, MessageBoxImage.Information);
return; return;
} }

View File

@@ -1110,7 +1110,7 @@ namespace BeWo.View.Detail.Zeiterfassung
vm.DataContract.ServiceRecordOid = oids[idx++]; vm.DataContract.ServiceRecordOid = oids[idx++];
} }
} }
catch (Exception) catch (Exception e)
{ {
var newVMs = ViewModel.VMList.Where(vm => vm.IsNew).ToList(); var newVMs = ViewModel.VMList.Where(vm => vm.IsNew).ToList();
@@ -1121,7 +1121,7 @@ namespace BeWo.View.Detail.Zeiterfassung
this.Dispatch(() => ViewModel.RefreshServiceRecordsForSelectedTreeNode(true)); this.Dispatch(() => ViewModel.RefreshServiceRecordsForSelectedTreeNode(true));
throw; throw e;
} }
}); });
} }

View File

@@ -23,7 +23,7 @@
</Style.Triggers> </Style.Triggers>
</Style> </Style>
<ContextMenu x:Name="contextMenu" x:Key="cm" MenuItem.Click="ContextMenu_Click" Opened="ContextMenu_Opened"> <ContextMenu x:Name="contextMenu" x:Key="cm" MenuItem.Click="ContextMenu_Click" Opened="ContextMenu_Opened">
<MenuItem Header="Neu" > <MenuItem Header="Neuer Ordner" >
<MenuItem.Icon> <MenuItem.Icon>
<Image Source="..\Ressources\Icons\new.png"/> <Image Source="..\Ressources\Icons\new.png"/>
</MenuItem.Icon> </MenuItem.Icon>
@@ -43,7 +43,7 @@
<ContextMenu x:Name="TemplateContextMenu" x:Key="templatecm" MenuItem.Click="TemplateContextMenu_Click" Opened="TemplateContextMenu_Opened"> <ContextMenu x:Name="TemplateContextMenu" x:Key="templatecm" MenuItem.Click="TemplateContextMenu_Click" Opened="TemplateContextMenu_Opened">
<MenuItem Header="Neu" > <MenuItem Header="Neuer Ordner" >
<MenuItem.Icon> <MenuItem.Icon>
<Image Source="..\Ressources\Icons\Add24.png"/> <Image Source="..\Ressources\Icons\Add24.png"/>
</MenuItem.Icon> </MenuItem.Icon>
@@ -114,7 +114,7 @@
<Label Content="Suche" Margin="0,0,0,0" /> <Label Content="Suche" Margin="0,0,0,0" />
<TextBox Height="20" Grid.Column="1" x:Name="textbox_searchForFileName" Margin="3,2,0,5" HorizontalContentAlignment="Stretch" TabIndex="0" Template="{DynamicResource SearchTextBoxTemplate}" BorderThickness="0,0,0,0" KeyDown="TextBox_KeyDown"/> <TextBox Height="20" Grid.Column="1" x:Name="textbox_searchForFileName" Margin="3,2,0,5" HorizontalContentAlignment="Stretch" TabIndex="0" Template="{DynamicResource SearchTextBoxTemplate}" BorderThickness="0,0,0,0" KeyDown="TextBox_KeyDown"/>
<dxg:TreeListControl Grid.Row="1" Grid.ColumnSpan="2" x:Name="documents_treeview_control" Margin="0 0 0 0" VerticalAlignment="Stretch" dx:ThemeManager.ThemeName="Office2010Black"> <dxg:TreeListControl Grid.Row="1" Grid.ColumnSpan="2" x:Name="documents_treeview_control" Margin="0 0 2 4" VerticalAlignment="Stretch" dx:ThemeManager.ThemeName="Office2010Black">
<dxg:TreeListControl.Columns> <dxg:TreeListControl.Columns>
<dxg:TreeListColumn FieldName="Name" AllowSorting="False" Width="300"> <dxg:TreeListColumn FieldName="Name" AllowSorting="False" Width="300">
<!--<dxg:TreeListColumn.CellStyle> <!--<dxg:TreeListColumn.CellStyle>
@@ -132,7 +132,7 @@
<dxg:TreeListControl.View> <dxg:TreeListControl.View>
<dxg:TreeListView x:Name="DocumentsTreeView" PreviewMouseLeftButtonDown="DocumentsTreeView_PreviewMouseLeftButtonDown" ShowColumnHeaders="False" ShowIndicator="False" ShowHorizontalLines="False" ShowVerticalLines="False" <dxg:TreeListView x:Name="DocumentsTreeView" PreviewMouseLeftButtonDown="DocumentsTreeView_PreviewMouseLeftButtonDown" ShowColumnHeaders="False" ShowIndicator="False" ShowHorizontalLines="False" ShowVerticalLines="False"
FocusedRowChanged="DocumentsTreeView_FocusedRowChanged" LostFocus="DocumentsTreeView_LostFocus" FocusedRowChanged="DocumentsTreeView_FocusedRowChanged" LostFocus="DocumentsTreeView_LostFocus"
NodeExpanding="treeListView_NodeExpanding" AllowEditing="False" ShowNodeImages="True" PrintNodeImages="True" AutoWidth="True" NodeExpanding="DocumentsTreeView_NodeExpanding" AllowEditing="False" ShowNodeImages="True" PrintNodeImages="True" AutoWidth="True"
KeyFieldName="{Binding DocumentTreeItemVM.DocTreeItemOid}" ParentFieldName="Binding DocumentTreeItemVM.ParentOid" ContextMenu="{StaticResource cm}" VerticalScrollbarVisibility="Auto" HorizontalScrollbarVisibility="Auto"> KeyFieldName="{Binding DocumentTreeItemVM.DocTreeItemOid}" ParentFieldName="Binding DocumentTreeItemVM.ParentOid" ContextMenu="{StaticResource cm}" VerticalScrollbarVisibility="Auto" HorizontalScrollbarVisibility="Auto">
<!--<dxg:TreeListView.RowStyle> <!--<dxg:TreeListView.RowStyle>
<Style BasedOn="{StaticResource {dxgt:GridRowThemeKey ResourceKey=RowStyle}}" TargetType="dxg:rows"> <Style BasedOn="{StaticResource {dxgt:GridRowThemeKey ResourceKey=RowStyle}}" TargetType="dxg:rows">
@@ -291,27 +291,27 @@
<TabItem.Header> <TabItem.Header>
<TextBlock Text="{markup:Translate Vorlagen}" TextElement.FontSize="16" TextElement.Foreground="{StaticResource TabItemHotTextBrush}" TextElement.FontFamily="Microsoft Sans Serif" Padding="3"></TextBlock> <TextBlock Text="{markup:Translate Vorlagen}" TextElement.FontSize="16" TextElement.Foreground="{StaticResource TabItemHotTextBrush}" TextElement.FontFamily="Microsoft Sans Serif" Padding="3"></TextBlock>
</TabItem.Header> </TabItem.Header>
<dxlc:LayoutControl Orientation="Horizontal">
<Grid Margin="0,3,0,0" Grid.Row="0" Background="{StaticResource ObjectEditBackgroundBrush}"> <dxlc:LayoutGroup dxlc:LayoutControl.AllowHorizontalSizing="True" Width="300">
<Grid Margin="0,0,0,0" >
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="*" /> <RowDefinition Height="*" />
<RowDefinition Height="Auto" /> </Grid.RowDefinitions>
</Grid.RowDefinitions> <Grid.ColumnDefinitions>
<Grid.ColumnDefinitions> <ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="auto"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<dxg:TreeListControl x:Name="template_treeview_control" Grid.Column="0" DefaultSorting="Name" Margin="2,3,5,5" VerticalAlignment="Stretch" dx:ThemeManager.ThemeName="Office2010Black"> <dxg:TreeListControl x:Name="template_treeview_control" Grid.Column="0" DefaultSorting="Name" Margin="2,3,2,5" VerticalAlignment="Stretch" dx:ThemeManager.ThemeName="Office2010Black">
<dxg:TreeListControl.Columns> <dxg:TreeListControl.Columns>
<dxg:TreeListColumn FieldName="Name" AllowSorting="True"/> <dxg:TreeListColumn FieldName="Name" AllowSorting="True"/>
</dxg:TreeListControl.Columns> </dxg:TreeListControl.Columns>
<dxg:TreeListControl.View> <dxg:TreeListControl.View>
<dxg:TreeListView x:Name="TemplateTreeView" PreviewMouseLeftButtonDown="TemplateTreeView_PreviewMouseLeftButtonDown" ShowColumnHeaders="False" <dxg:TreeListView x:Name="TemplateTreeView" PreviewMouseLeftButtonDown="TemplateTreeView_PreviewMouseLeftButtonDown" ShowColumnHeaders="False" AutoWidth="True"
ShowIndicator="False" ShowHorizontalLines="False" ShowVerticalLines="False" FocusedRowChanged="TemplateTreeView_FocusedRowChanged" ShowIndicator="False" ShowHorizontalLines="False" ShowVerticalLines="False" FocusedRowChanged="TemplateTreeView_FocusedRowChanged"
LostFocus="TemplateTreeView_LostFocus" NodeExpanding="templateTreeListView_NodeExpanding" AllowEditing="False" ShowNodeImages="True" PrintNodeImages="True" LostFocus="TemplateTreeView_LostFocus" NodeExpanding="templateTreeListView_NodeExpanding" AllowEditing="False" ShowNodeImages="True" PrintNodeImages="True"
KeyFieldName="{Binding DocumentTreeItemVM.DocTreeItemOid}" ParentFieldName="Binding DocumentTreeItemVM.ParentOid" ContextMenu="{StaticResource templatecm}"> KeyFieldName="{Binding DocumentTreeItemVM.DocTreeItemOid}" ParentFieldName="Binding DocumentTreeItemVM.ParentOid" ContextMenu="{StaticResource templatecm}"
VerticalScrollbarVisibility="Auto" HorizontalScrollbarVisibility="Auto">
</dxg:TreeListView> </dxg:TreeListView>
</dxg:TreeListControl.View> </dxg:TreeListControl.View>
</dxg:TreeListControl> </dxg:TreeListControl>
@@ -378,37 +378,42 @@
</GroupBox> </GroupBox>
--> -->
<dxg:GridControl Grid.Row="0" Margin="2,3,5,5" DataSource="{Binding SelectedItem.Files, ElementName=treeview}" x:Name="datagrid_templates" Grid.Column="1">
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="FileName" Header="" FixedWidth="True" Width="24" ReadOnly="True">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<Button Content="r" FontFamily="Webdings" Click="TemplateDeleteButton_Click" Width="20" Height="20" VerticalAlignment="Center" Margin="1"/>
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
<dxg:GridColumn FieldName="Name" AllowEditing="False" Header="Dateiname" Width="*" />
<dxg:GridColumn FieldName="Beschreibung" AllowEditing="False" Header="Beschreibung" Width="*" />
<dxg:GridColumn FieldName="FileEdit" Header="" FixedWidth="True" Width="80" ReadOnly="True">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<Button Content="Bearbeiten" Click="EditTemplate_Click" Width="75" Height="20" VerticalAlignment="Center" />
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
<dxg:GridColumn FieldName="PrintFile" Header="" FixedWidth="True" Width="80" ReadOnly="True">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<Button Content="Drucken" FontSize="14" Click="PrintTemplate_Click" Width="75" Height="20" VerticalAlignment="Center" />
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView AutoWidth="false" ShowGroupPanel="False" ShowGroupedColumns="false" ShowTotalSummary="False" NavigationStyle="Cell" x:Name="TemplateTableView"/>
</dxg:GridControl.View>
</dxg:GridControl>
</Grid> </Grid>
</dxlc:LayoutGroup>
<dxlc:LayoutGroup dxlc:LayoutControl.AllowHorizontalSizing="True">
<dxg:GridControl Grid.Row="0" Margin="2,3,5,5" DataSource="{Binding SelectedItem.Files, ElementName=treeview}" x:Name="datagrid_templates" Grid.Column="1">
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="FileName" Header="" FixedWidth="True" Width="24" ReadOnly="True">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<Button Content="r" FontFamily="Webdings" Click="TemplateDeleteButton_Click" Width="20" Height="20" VerticalAlignment="Center" Margin="1"/>
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
<dxg:GridColumn FieldName="Name" AllowEditing="False" Header="Dateiname" Width="*" />
<dxg:GridColumn FieldName="Beschreibung" AllowEditing="False" Header="Beschreibung" Width="*" />
<dxg:GridColumn FieldName="FileEdit" Header="" FixedWidth="True" Width="80" ReadOnly="True">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<Button Content="Bearbeiten" Click="EditTemplate_Click" Width="75" Height="20" VerticalAlignment="Center" />
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
<dxg:GridColumn FieldName="PrintFile" Header="" FixedWidth="True" Width="80" ReadOnly="True">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<Button Content="Drucken" Click="PrintTemplate_Click" Width="75" Height="20" VerticalAlignment="Center" />
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView AutoWidth="false" ShowGroupPanel="False" ShowGroupedColumns="false" ShowTotalSummary="False" NavigationStyle="Cell" x:Name="TemplateTableView"/>
</dxg:GridControl.View>
</dxg:GridControl>
</dxlc:LayoutGroup>
</dxlc:LayoutControl>
</TabItem> </TabItem>
</TabControl> </TabControl>
</Grid> </Grid>

View File

@@ -55,7 +55,7 @@ namespace BeWo.View.Master
public DokumenteView() public DokumenteView()
{ {
InitializeComponent(); InitializeComponent();
//InitDocumentMenuItems(); InitDocumentMenuItems();
InitTemplateMenuItems(); InitTemplateMenuItems();
progressbar_upload.Visibility = Visibility.Collapsed; progressbar_upload.Visibility = Visibility.Collapsed;
@@ -135,7 +135,7 @@ namespace BeWo.View.Master
return list; return list;
} }
private void treeListView_NodeExpanding(object sender, TreeListNodeAllowEventArgs e) private void DocumentsTreeView_NodeExpanding(object sender, TreeListNodeAllowEventArgs e)
{ {
try try
{ {
@@ -235,10 +235,10 @@ namespace BeWo.View.Master
GenerateFolderStructureForSelectedNode(node, folderDCs); GenerateFolderStructureForSelectedNode(node, folderDCs, false);
} }
private void GenerateFolderStructureForSelectedNode(TreeListNode node, List<BeWoFolderDC> folderDCs) private void GenerateFolderStructureForSelectedNode(TreeListNode node, List<BeWoFolderDC> folderDCs, bool hideAlleOrdner)
{ {
if (node.Nodes.Count == 0) if (node.Nodes.Count == 0)
{ {
@@ -246,37 +246,50 @@ namespace BeWo.View.Master
foreach (var folder in folderDCs) foreach (var folder in folderDCs)
{ {
DocumentTreeItemDC folder_dc = new DocumentTreeItemDC() TreeListNode newNode_folder = null;
if (folder.BeWoFolderOid.HasValue || !hideAlleOrdner)
{ {
DocTreeItemOid = folder.BeWoFolderOid, DocumentTreeItemDC folder_dc = new DocumentTreeItemDC()
ParentOid = content.DocTreeItemOid,
Name = folder.Name,
FilesInFolder = new List<FileAttachmentDC>(),
BeWoFolderDC = folder,
Table = content.DataContract.Table,
ObjectOid = content.DataContract.ObjectOid
};
if (folder.Files.Count != 0)
{
foreach (var file in folder.Files)
{ {
folder_dc.FilesInFolder.Add(file); DocTreeItemOid = folder.BeWoFolderOid,
ParentOid = content.DocTreeItemOid,
Name = folder.Name,
FilesInFolder = new List<FileAttachmentDC>(),
BeWoFolderDC = folder,
Table = content.DataContract.Table,
ObjectOid = content.DataContract.ObjectOid
};
if (folder.Files.Count != 0)
{
foreach (var file in folder.Files)
{
folder_dc.FilesInFolder.Add(file);
}
} }
DocumentTreeItemVM folder_vm = new DocumentTreeItemVM(folder_dc);
newNode_folder = new TreeListNode()
{
Content = folder_vm,
IsExpandButtonVisible = DefaultBoolean.True,
Tag = false,
Image = LoadFolderImage()
};
folder_dc.Node = newNode_folder;
node.Nodes.Add(newNode_folder);
} }
DocumentTreeItemVM folder_vm = new DocumentTreeItemVM(folder_dc); else
TreeListNode newNode_folder = new TreeListNode()
{ {
Content = folder_vm, newNode_folder = node;
IsExpandButtonVisible = DefaultBoolean.True, if (content.DataContract.BeWoFolderDC == null)
Tag = false, {
Image = LoadFolderImage() content.DataContract.BeWoFolderDC = folder;
}; }
folder_dc.Node = newNode_folder;
node.Nodes.Add(newNode_folder); }
if (folder.SubFolders.Count != 0) if (folder.SubFolders.Count != 0)
{ {
GenerateFolderStructureForSelectedNode(newNode_folder, folder.SubFolders); GenerateFolderStructureForSelectedNode(newNode_folder, folder.SubFolders, hideAlleOrdner);
} }
} }
} }
@@ -682,11 +695,11 @@ namespace BeWo.View.Master
{ {
MenuItem menuitem = item as MenuItem; MenuItem menuitem = item as MenuItem;
if (treeviewitem.DataContract.BeWoFolderDC != null && BeWoApp.LoggedOnUser.HasRight(UserRightType.DocumentsEditFolders)) if (treeviewitem != null && treeviewitem.DataContract.BeWoFolderDC != null && BeWoApp.LoggedOnUser.HasRight(UserRightType.DocumentsEditFolders))
{ {
if (treeviewitem.Name.Equals("Alle Ordner")) if (treeviewitem.Name.Equals("Alle Ordner"))
{ {
if (menuitem.Header.Equals("Neu")) if (menuitem.Header.Equals("Neuer Ordner"))
menuitem.IsEnabled = true; menuitem.IsEnabled = true;
else else
menuitem.IsEnabled = false; menuitem.IsEnabled = false;
@@ -714,7 +727,7 @@ namespace BeWo.View.Master
var row = DocumentsTreeView.SelectedRows[0] as DocumentTreeItemVM; var row = DocumentsTreeView.SelectedRows[0] as DocumentTreeItemVM;
var twi = e.OriginalSource as MenuItem; var twi = e.OriginalSource as MenuItem;
if (twi.Header.Equals("Neu")) if (twi.Header.Equals("Neuer Ordner"))
{ {
TreeListNode node = new TreeListNode(); TreeListNode node = new TreeListNode();
node.IsExpandButtonVisible = DefaultBoolean.True; node.IsExpandButtonVisible = DefaultBoolean.True;
@@ -1268,13 +1281,16 @@ namespace BeWo.View.Master
ParentOid = null, ParentOid = null,
Name = table.Tabellenname, Name = table.Tabellenname,
Table = TableID.Vorlagentabelle, Table = TableID.Vorlagentabelle,
ObjectOid = table.VorlagentabelleOid ObjectOid = table.VorlagentabelleOid,
BeWoFolderDC = new BeWoFolderDC { Name = "RootFolder", SubFolders = new List<BeWoFolderDC>() }
}; };
DocumentTreeItemVM vm = new DocumentTreeItemVM(dc); DocumentTreeItemVM vm = new DocumentTreeItemVM(dc);
node.Content = vm; node.Content = vm;
TemplateTreeView.Nodes.Add(node); TemplateTreeView.Nodes.Add(node);
node.IsExpandButtonVisible = DefaultBoolean.True; node.IsExpandButtonVisible = DefaultBoolean.True;
node.Image = LoadImage(iconNames[counter - 1]); node.Image = LoadImage(table.ImageName);
counter++; counter++;
} }
template_treeview_control.EndDataUpdate(); template_treeview_control.EndDataUpdate();
@@ -1296,14 +1312,17 @@ namespace BeWo.View.Master
TreeListNode node = e.Node; TreeListNode node = e.Node;
var vm = node.Content as DocumentTreeItemVM; var vm = node.Content as DocumentTreeItemVM;
if (vm.Name.Equals("Hilfepläne") || vm.Name.Equals("Klienten") || vm.Name.Equals("Mitarbeiter")) //if (vm.Name.Equals("Hilfepläne") || vm.Name.Equals("Klienten") || vm.Name.Equals("Mitarbeiter"))
{ //{
List<BeWoFolderDC> folderDCs = new List<BeWoFolderDC>(); List<BeWoFolderDC> folderDCs = new List<BeWoFolderDC>();
if (vm.DocTreeItemOid.HasValue)
{
folderDCs = VMFactory.CreateFolderList(TableID.Vorlagentabelle, (long)vm.DocTreeItemOid); folderDCs = VMFactory.CreateFolderList(TableID.Vorlagentabelle, (long)vm.DocTreeItemOid);
GenerateFolderStructureForSelectedNode(node, folderDCs); GenerateFolderStructureForSelectedNode(node, folderDCs, true);
} }
//}
@@ -1347,23 +1366,24 @@ namespace BeWo.View.Master
if (item is MenuItem) if (item is MenuItem)
{ {
MenuItem menuitem = item as MenuItem; MenuItem menuitem = item as MenuItem;
menuitem.IsEnabled = false;
if (treeviewitem?.DataContract?.BeWoFolderDC != null && BeWoApp.LoggedOnUser.HasRight(UserRightType.DocumentsEditFolders)) if (treeviewitem?.DataContract != null && BeWoApp.LoggedOnUser.HasRight(UserRightType.DocumentsEditFolders))
{ {
if (treeviewitem.Name.Equals("Alle Ordner")) if (menuitem.Header.Equals("Neuer Ordner"))
{
if (menuitem.Header.Equals("Neu"))
menuitem.IsEnabled = true;
else
menuitem.IsEnabled = false;
}
else
{ {
menuitem.IsEnabled = true; menuitem.IsEnabled = true;
} }
else
{
if (treeviewitem?.DataContract?.BeWoFolderDC != null && treeviewitem.DataContract.BeWoFolderDC.BeWoFolderOid.HasValue)
{
menuitem.IsEnabled = true;
}
}
} }
else
menuitem.IsEnabled = false;
} }
@@ -1377,7 +1397,7 @@ namespace BeWo.View.Master
var row = TemplateTreeView.SelectedRows[0] as DocumentTreeItemVM; var row = TemplateTreeView.SelectedRows[0] as DocumentTreeItemVM;
var twi = e.OriginalSource as MenuItem; var twi = e.OriginalSource as MenuItem;
if (twi.Header.Equals("Neu")) if (twi.Header.Equals("Neuer Ordner"))
{ {
TreeListNode node = new TreeListNode(); TreeListNode node = new TreeListNode();
node.IsExpandButtonVisible = DefaultBoolean.True; node.IsExpandButtonVisible = DefaultBoolean.True;
@@ -1386,7 +1406,7 @@ namespace BeWo.View.Master
BeWoFolderDC folderDC = new BeWoFolderDC() BeWoFolderDC folderDC = new BeWoFolderDC()
{ {
Name = "Neuer Ordner", Name = "Neuer Ordner",
ParentBeWoFolderOid = row.DataContract.BeWoFolderDC.BeWoFolderOid, ParentBeWoFolderOid = row.DataContract.BeWoFolderDC?.BeWoFolderOid,
ObjectOid = row.DataContract.ObjectOid, ObjectOid = row.DataContract.ObjectOid,
ObjectTid = row.DataContract.Table, ObjectTid = row.DataContract.Table,
Files = new List<FileAttachmentDC>(), Files = new List<FileAttachmentDC>(),
@@ -1573,7 +1593,7 @@ namespace BeWo.View.Master
{ {
var selected = source.SelectedRows[0] as DocumentTreeItemVM; var selected = source.SelectedRows[0] as DocumentTreeItemVM;
if (selected == null || selected.Name.Equals("Alle Ordner")) if (selected == null || selected.DataContract.BeWoFolderDC.Name == "RootFolder")
{ {
datagrid_templates.ItemsSource = new List<DokumentvorlageVM>(); datagrid_templates.ItemsSource = new List<DokumentvorlageVM>();
return; return;

View File

@@ -206,8 +206,8 @@
</ControlTemplate> </ControlTemplate>
</dxg:GridColumn.EditTemplate> </dxg:GridColumn.EditTemplate>
</dxg:GridColumn> </dxg:GridColumn>
<dxg:GridColumn Header="Bemerkungen" FieldName="Notice" /> <dxg:GridColumn Header="Bemerkungen" FieldName="Notice" Width="150"/>
<dxg:GridColumn Header="" FieldName="Infos" AllowEditing="False" AllowSorting="False" Width="150"/> <dxg:GridColumn Header="" FieldName="Infos" AllowEditing="False" AllowSorting="False" Width="150" />
</dxg:GridControl.Columns> </dxg:GridControl.Columns>
<dxg:GridControl.View> <dxg:GridControl.View>
<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:TableView NavigationStyle="Cell" Margin="2,2,2,2" AllowBestFit="True" BestFitMode="AllRows" ShowGroupPanel="False" ShowGroupedColumns="False" ShowTotalSummary="False" HorizontalContentAlignment="Left" ShowingEditor="GridViewBase_OnShowingEditor" />

View File

@@ -385,7 +385,7 @@ namespace BeWo.ViewModel
} }
else if (protokoll.Fehlerlevel == GkvTransferFehlerlevel.Fatal) else if (protokoll.Fehlerlevel == GkvTransferFehlerlevel.Fatal)
{ {
BeWoApp.ShowError(protokoll.Fehlertitel + ": " + protokoll.Fehlernachricht, null, false); BeWoApp.ShowError(protokoll.Fehlertitel + ": " + protokoll.Fehlernachricht, null, false, false);
} }
else else
{ {

View File

@@ -30,6 +30,10 @@ namespace BeWo.Data.Entities
_ObjectTid = value; _ObjectTid = value;
} }
} }
public virtual string ImageName
{
get; set;
}
public Vorlagentabelle() public Vorlagentabelle()
{ {

View File

@@ -15,6 +15,7 @@
<property column="SystemEntryID" type="BS.Shared.SystemEntryID, BS.Shared" name="SystemEntryID" /> <property column="SystemEntryID" type="BS.Shared.SystemEntryID, BS.Shared" name="SystemEntryID" />
<property column="Tabellenname" type="String" name="Tabellenname"/> <property column="Tabellenname" type="String" name="Tabellenname"/>
<property column="ImageName" type="String" name="ImageName"/>
<property column="ObjectTid" type="Int64" name="ObjectTid"/> <property column="ObjectTid" type="Int64" name="ObjectTid"/>
</class> </class>

View File

@@ -0,0 +1,3 @@
ALTER TABLE `vorlagentabelle`
ADD COLUMN `ImageName` VARCHAR(128) NULL AFTER `Tabellenname`;

View File

@@ -1074,3 +1074,6 @@ ALTER TABLE `servicerecordhistory`
ADD INDEX `cb2scIdx` (`CostBearer2SupportConceptOid` ASC); ADD INDEX `cb2scIdx` (`CostBearer2SupportConceptOid` ASC);
ALTER TABLE `vorlagentabelle`
ADD COLUMN `ImageName` VARCHAR(128) NULL AFTER `Tabellenname`;

View File

@@ -44,7 +44,7 @@ namespace BeWo.Report.DefaultReports
sd.Notice5 = "GR"; sd.Notice5 = "GR";
hatGruppen = true; hatGruppen = true;
} }
if (sd.ServiceDescription.ToLower().Contains("fehlkontakt") || sd.ServiceCategory.ToLower().Contains("fehlkontakt")) if (sd.ServiceDescription.ToLower().Contains("fehlkontakt") || sd.ServiceCategory.ToLower().Contains("fehlkontakt") || (sd.ProzentAbrechenbar < 100))
{ {
sd.Notice5 = "F"; sd.Notice5 = "F";
} }

View File

@@ -30,7 +30,7 @@ namespace BeWo.Report.DefaultReports
{ {
if (sd.IsBillable || sd.ServiceDescription.ToLower().Contains("fehlkontakt") || sd.ServiceCategory.ToLower().Contains("fehlkontakt")) if (sd.IsBillable || sd.ServiceDescription.ToLower().Contains("fehlkontakt") || sd.ServiceCategory.ToLower().Contains("fehlkontakt"))
{ {
if (sd.ServiceDescription.ToLower().Contains("fehlkontakt") || sd.ServiceCategory.ToLower().Contains("fehlkontakt")) if (sd.ServiceDescription.ToLower().Contains("fehlkontakt") || sd.ServiceCategory.ToLower().Contains("fehlkontakt") || (sd.ProzentAbrechenbar < 100))
sd.Notice5 = "F"; sd.Notice5 = "F";
else if (sd.IsGroup) else if (sd.IsGroup)
sd.Notice5 = "GR"; sd.Notice5 = "GR";

View File

@@ -11,9 +11,14 @@ namespace AachenerLaienhelfer.Reporting
{ {
public class CustomMitarbeiterstundenkontoBerechnung : MitarbeiterstundenkontoBerechnung public class CustomMitarbeiterstundenkontoBerechnung : MitarbeiterstundenkontoBerechnung
{ {
public override bool IstAnrechenbareAbsenceTime(AbsenceTime item) protected override bool SchneideZuvieleAbwesenheitsstundenAb()
{
return false;
}
public override bool IstAnrechenbareAbsenceTime(AbsenceTime item)
{ {
if (item.AbsenceReason.Description.Contains("Überstun den") && item.AbsenceReason.Description.Contains("Abbau")) if (item.AbsenceReason.Description.Contains("Überstunden") && item.AbsenceReason.Description.Contains("Abbau"))
{ {
return false; return false;
} }

View File

@@ -43,7 +43,7 @@ namespace DomizielAnsbach.Service
if (srList.Count == 0) if (srList.Count == 0)
{ {
srList = ErstelleStundenplanEintraege(span.StartDateTime.Date, span.EndDate.Date, c2s, vs); srList = ErstelleStundenplanEintraege(span.StartDateTime.Date, span.EndDate.Date, c2s, vs, null);
DAOFactory.GenericDAO.Insert(srList); DAOFactory.GenericDAO.Insert(srList);
@@ -70,7 +70,7 @@ namespace DomizielAnsbach.Service
} }
else else
{ {
srList = ErstelleStundenplanEintraege(span.StartDateTime.Date, span.EndDate.Date, c2s, vs); srList = ErstelleStundenplanEintraege(span.StartDateTime.Date, span.EndDate.Date, c2s, vs, null);
DAOFactory.GenericDAO.Insert(srList); DAOFactory.GenericDAO.Insert(srList);
@@ -82,15 +82,6 @@ namespace DomizielAnsbach.Service
return ReturnMessage; return ReturnMessage;
} }
//public override List<ServiceRecord> ErstelleStundenplanEintraege(DateTime start, DateTime ende, CostBearer2SupportConcept c2s, VacationService vs)
// {
// return base.ErstelleStundenplanEintraege(start, ende, c2s, vs);
// }
protected override IList<ServiceRecord> CreateServiceRecords(Arbeitszeit arbeitszeit, DateTime datum, CostBearer2SupportConcept c2s, ServiceDescription defaultSd)
{
return base.CreateServiceRecords(arbeitszeit, datum, c2s, defaultSd);
}
public override ServiceRecord CreateServiceRecord(ArbeitszeitEintrag ae, DateTime datum, CostBearer2SupportConcept c2s, ServiceDescription defaultSd) public override ServiceRecord CreateServiceRecord(ArbeitszeitEintrag ae, DateTime datum, CostBearer2SupportConcept c2s, ServiceDescription defaultSd)
{ {
var sr = base.CreateServiceRecord(ae, datum, c2s, standardLeistung); var sr = base.CreateServiceRecord(ae, datum, c2s, standardLeistung);

View File

@@ -1029,7 +1029,21 @@ namespace LebenshilfeFrankfurtOder
Monat monat; Monat monat;
Enum.TryParse(ro.AccountingPeriodStart.Month.ToString(), out monat); Enum.TryParse(ro.AccountingPeriodStart.Month.ToString(), out monat);
var region = DAOFactory.GenericDAO.LoadByID<AdditionalServiceRegion>(24); //OID für EFH long regionOid = 24;
//Prüfe ob Pool 2:
foreach (var sip in ro.ServiceInvoicePeriods)
{
foreach (var item in sip.ServiceInvoiceItems)
{
if (!String.IsNullOrEmpty(item.ServiceDescription) && item.ServiceDescription.Contains("Pool 2"))
{
regionOid = 28;
}
}
}
var region = DAOFactory.GenericDAO.LoadByID<AdditionalServiceRegion>(regionOid); //OID für EFH
var asbro = AdditionalServiceBookingRO.Create(region, monat, ro.AccountingPeriodStart.Year); var asbro = AdditionalServiceBookingRO.Create(region, monat, ro.AccountingPeriodStart.Year);
var anhang2 = new AnwesenheitSbdPool(); var anhang2 = new AnwesenheitSbdPool();

View File

@@ -179,7 +179,7 @@ namespace SHKServiceSBD
DateTime dt = start; DateTime dt = start;
while (dt <= ende) while (dt <= ende)
{ {
if (dt == new DateTime(2024, 2, 19)) if (dt == new DateTime(2024, 6, 18))
{ {
int test = 0; int test = 0;
} }

View File

@@ -96,7 +96,7 @@ namespace SHKServiceSBD.Reports
QueryRO.Row row = new QueryRO.Row(); QueryRO.Row row = new QueryRO.Row();
row.Field1 = String.Format("{0}", abw.Employee.Person.FirstNameLastName); row.Field1 = String.Format("{0}", abw.Employee.Person.LastNameFirstName);
row.Field2 = String.Format("{0}", abw.Employee.PersonnelNumber); row.Field2 = String.Format("{0}", abw.Employee.PersonnelNumber);
row.Field3 = String.Format("{0:dd.MM.yyyy} Keine Arbeitszeit eingetragen", abw.Datum); row.Field3 = String.Format("{0:dd.MM.yyyy} Keine Arbeitszeit eingetragen", abw.Datum);
if (abw.ArbeitszeitStart > DateTime.MinValue && abw.ArbeitszeitEnde > DateTime.MinValue) if (abw.ArbeitszeitStart > DateTime.MinValue && abw.ArbeitszeitEnde > DateTime.MinValue)

View File

@@ -54,7 +54,7 @@ namespace SHKServiceSBD.Reports
{ {
if (dt < DateTime.MaxValue.Date) if (dt < DateTime.MaxValue.Date)
{ {
ende = dt; ende = dt.Date.AddTicks(-1);
} }
} }
} }
@@ -71,11 +71,8 @@ namespace SHKServiceSBD.Reports
row.Field1 = String.Format("{0:dd.MM.yyyy}", aus.Datum); row.Field1 = String.Format("{0:dd.MM.yyyy}", aus.Datum);
row.Field2 = String.Format("{0}", aus.Employee.Person.LastNameFirstName); row.Field2 = aus.Employee;
if (aus.Customer != null) row.Field3 = aus.Customer;
{
row.Field3 = String.Format("{0}", aus.Customer.Person.FirstNameLastName);
}
double betreuungszeitMinuten = 0; double betreuungszeitMinuten = 0;
double arbeitszeitMinuten = 0; double arbeitszeitMinuten = 0;
@@ -87,12 +84,18 @@ namespace SHKServiceSBD.Reports
} }
if (aus.ArbeitszeitStart.HasValue && aus.ArbeitszeitEnde.HasValue) if (aus.ArbeitszeitStart.HasValue && aus.ArbeitszeitEnde.HasValue)
{ {
arbeitszeitMinuten = aus.ArbeitszeitEnde.Value.Subtract(aus.ArbeitszeitStart.Value).TotalMinutes; //arbeitszeitMinuten = aus.ArbeitszeitEnde.Value.Subtract(aus.ArbeitszeitStart.Value).TotalMinutes;
row.Field5 = String.Format("{0:0}", arbeitszeitMinuten); row.Field5 = String.Format("{0:0}", aus.ArbeitszeitMinuten);
} }
if (aus.ArbeitszeitMinuten > 0)
{
//row.Field5 = String.Format("{0:0}", aus.ArbeitszeitMinuten);
}
row.Field6 = String.Format("{0:0.##}", arbeitszeitMinuten - betreuungszeitMinuten); row.Field6 = String.Format("{0:0.##}", arbeitszeitMinuten - betreuungszeitMinuten);
row.Field9 = String.Format("{0:yyyyMMdd}, {1}, ", aus.Datum, row.Field2); // zum Sortieren row.Field9 = String.Format("{0}, {1:yyyyMMdd}", row.Field2, aus.Datum); // zum Sortieren
newQueryRo.Rows.Add(row); newQueryRo.Rows.Add(row);
} }
@@ -121,6 +124,7 @@ namespace SHKServiceSBD.Reports
var oid2BetreuteKlienten = new Dictionary<long, List<Customer>>(); var oid2BetreuteKlienten = new Dictionary<long, List<Customer>>();
var customer2Hauptbetreuer = new Dictionary<long, List<Employee>>(); var customer2Hauptbetreuer = new Dictionary<long, List<Employee>>();
//sortiere alle ServiceRecords nach Mitarbeiter
foreach (var sr in allRecords) foreach (var sr in allRecords)
{ {
if (sr.EmployeeOid.HasValue) if (sr.EmployeeOid.HasValue)
@@ -138,6 +142,7 @@ namespace SHKServiceSBD.Reports
var employeeAbsenceTimes = absenceTimes.Where(absenceTime => absenceTime.EmployeeOid.HasValue).ToList(); var employeeAbsenceTimes = absenceTimes.Where(absenceTime => absenceTime.EmployeeOid.HasValue).ToList();
var customerAbsenceTimes = absenceTimes.Where(absenceTime => absenceTime.CustomerOid.HasValue).ToList(); var customerAbsenceTimes = absenceTimes.Where(absenceTime => absenceTime.CustomerOid.HasValue).ToList();
//Prüfe für jeden Tag alle abwesenden Kinder, ob deren Betreuer auch abwesend ist //Prüfe für jeden Tag alle abwesenden Kinder, ob deren Betreuer auch abwesend ist
var dtIter = start.Date; var dtIter = start.Date;
while (dtIter <= ende.Date) while (dtIter <= ende.Date)
@@ -175,11 +180,16 @@ namespace SHKServiceSBD.Reports
DateTime azStart = DateTime.MaxValue; DateTime azStart = DateTime.MaxValue;
DateTime azEnde = DateTime.MinValue; DateTime azEnde = DateTime.MinValue;
String kindImEinsatz = null;
if (empOid2Records.ContainsKey(emp.Oid.Value)) if (empOid2Records.ContainsKey(emp.Oid.Value))
{ {
var azRecordList = empOid2Records[emp.Oid.Value].Where(r => !r.CostBearer2SupportConceptOid.HasValue && r.Start.Value.Date == dtIter).ToList(); var azRecordList = empOid2Records[emp.Oid.Value].Where(r => !r.CostBearer2SupportConceptOid.HasValue && r.Start.Value.Date == dtIter).ToList();
foreach (var sr in azRecordList) foreach (var sr in azRecordList)
{ {
if (sr.Customer != null)
{
kindImEinsatz = sr.Customer.Person.FirstNameLastName;
}
arbeitszeitMinuten += sr.RoundedDuration; arbeitszeitMinuten += sr.RoundedDuration;
if (sr.Start < azStart) if (sr.Start < azStart)
{ {
@@ -191,19 +201,29 @@ namespace SHKServiceSBD.Reports
} }
} }
} }
if (String.IsNullOrEmpty(kindImEinsatz))
{
var vlist = vertretungsitems.Where(v => v.Vertreter != null && v.Vertreter.EmployeeOid == emp.Oid && v.Datum.Date == dtIter && v.Customer != null).ToList();
if (vlist.Count > 0)
{
kindImEinsatz = String.Format("{0} {1}", vlist[0].Customer.FirstName, vlist[0].Customer.LastName);
}
}
//Prüfe geplante Betreuungszeit des Kindes für diesen Tag //Prüfe geplante Betreuungszeit des Kindes für diesen Tag
var bzspan = ReportHelper.GetArbeitszeitFuerTag(customer, dtIter); var bzspan = ReportHelper.GetArbeitszeitFuerTag(customer, dtIter);
decimal geplanteBz = (decimal)bzspan.EndDateTime.Subtract(bzspan.StartDateTime).TotalMinutes; decimal geplanteBz = (decimal)bzspan.EndDateTime.Subtract(bzspan.StartDateTime).TotalMinutes;
if (geplanteBz > 0 && geplanteBz != arbeitszeitMinuten) if (geplanteBz > 0 && geplanteBz != arbeitszeitMinuten)
{ {
var row = new AusgleichsRow var row = new AusgleichsRow
{ {
Employee = emp, Employee = emp.Person.LastNameFirstName,
Customer = customer, Customer = kindImEinsatz,
BetreuungszeitStart = bzspan.StartDateTime, BetreuungszeitStart = bzspan.StartDateTime,
BetreuungszeitEnde = bzspan.EndDateTime, BetreuungszeitEnde = bzspan.EndDateTime,
ArbeitszeitMinuten = arbeitszeitMinuten,
Datum = dtIter Datum = dtIter
}; };
@@ -215,6 +235,7 @@ namespace SHKServiceSBD.Reports
{ {
row.ArbeitszeitEnde = azEnde; row.ArbeitszeitEnde = azEnde;
} }
result.Add(row); result.Add(row);
} }
} }
@@ -245,29 +266,18 @@ namespace SHKServiceSBD.Reports
return hauptbetreuer; return hauptbetreuer;
} }
class TagInfo
{
public DateTime Datum { get; set; }
public Employee Employee { get; internal set; }
public Employee Customer { get; internal set; }
public IList<ServiceRecord> ArbeitszeitRecords { get; set; }
public IList<ServiceRecord> KlientenRecords { get; internal set; }
}
class AusgleichsRow class AusgleichsRow
{ {
public DateTime Datum { get; set; } public DateTime Datum { get; set; }
public Employee Employee { get; set; } public String Employee { get; set; }
public Customer Customer { get; set; } public String Customer { get; set; }
public DateTime? BetreuungszeitStart { get; set; } public DateTime? BetreuungszeitStart { get; set; }
public DateTime? BetreuungszeitEnde { get; set; } public DateTime? BetreuungszeitEnde { get; set; }
public DateTime? ArbeitszeitStart { get; set; } public DateTime? ArbeitszeitStart { get; set; }
public DateTime? ArbeitszeitEnde { get; set; } public DateTime? ArbeitszeitEnde { get; set; }
public decimal ArbeitszeitMinuten { get; set; }
} }
} }
} }

View File

@@ -13,10 +13,21 @@ namespace SHKServiceSBD.Reports
{ {
public static Arbeitszeit GetArbeitszeit(Customer customer, DateTime start, DateTime ende) public static Arbeitszeit GetArbeitszeit(Customer customer, DateTime start, DateTime ende)
{ {
if (customer.Arbeitszeiten != null && customer.Arbeitszeiten.Count > 0) return GetArbeitszeiten(customer.Arbeitszeiten, start, ende);
{
foreach (var az in customer.Arbeitszeiten) }
public static Arbeitszeit GetArbeitszeit(Organisation org, DateTime start, DateTime ende)
{
return GetArbeitszeiten(org.Arbeitszeiten, start, ende);
}
private static Arbeitszeit GetArbeitszeiten(IList<Arbeitszeit> arbeitszeiten, DateTime start, DateTime ende)
{
if (arbeitszeiten != null)
{
foreach (var az in arbeitszeiten)
{ {
if ((!az.GueltigVon.HasValue || az.GueltigVon.Value <= ende) && if ((!az.GueltigVon.HasValue || az.GueltigVon.Value <= ende) &&
(!az.GueltigBis.HasValue || az.GueltigBis.Value >= start)) (!az.GueltigBis.HasValue || az.GueltigBis.Value >= start))
@@ -24,13 +35,11 @@ namespace SHKServiceSBD.Reports
return az; return az;
} }
} }
} }
return null; return null;
} }
public static DateTimeSpan GetArbeitszeitFuerTag(Customer customer, DateTime tag) public static DateTimeSpan GetArbeitszeitFuerTag(Customer customer, DateTime tag)
{ {
DateTimeSpan span = new DateTimeSpan(); DateTimeSpan span = new DateTimeSpan();
span.StartDateTime = DateTime.MaxValue; span.StartDateTime = DateTime.MaxValue;

View File

@@ -0,0 +1,198 @@
using System;
using System.Linq;
using BeWo.Report;
using BeWo.Report.ReportObjects;
using BeWo.Data.Entities;
using BeWo.Data.Access;
using System.Collections.Generic;
using BS.Shared;
using BS.Shared.Core;
using DevExpress.XtraPrinting;
using SHKServiceSBD.Service;
namespace SHKServiceSBD.Reports
{
public partial class VergleichArbeitszeitStundenplanReport : DevExpress.XtraReports.UI.XtraReport, IBeWoReport<QueryRO>
{
public VergleichArbeitszeitStundenplanReport()
{
InitializeComponent();
}
public void SetReportDataSource(QueryRO pRO)
{
this.bindingSource1.DataSource = CreateDataSource(pRO);
}
private QueryRO CreateDataSource(QueryRO ro)
{
QueryRO newQueryRo = new QueryRO();
DateTime datum = DateTime.Now.Date;
if (ro.Rows != null && ro.Rows.Count > 0)
{
if (ro.Rows[0].Field1 != null)
{
if (DateTime.TryParse(ro.Rows[0].Field1.ToString(), out var dt))
{
if (dt > DateTime.MinValue)
{
datum = dt;
}
}
}
}
lblZeitraum.Text = String.Format("Stichtag {0:dd.MM.yyyy}", datum);
var alleRows = ErstelleRows(datum);
foreach (var aus in alleRows)
{
QueryRO.Row row = new QueryRO.Row();
row.Field1 = aus.Employee;
row.Field2 = aus.Customer;
row.Field3 = String.Format("{0:0.00}", aus.BetreuungszeitKind);
row.Field4 = String.Format("{0:0.00}", aus.WochenstundenVertrag);
row.Field5 = String.Format("{0:0.00}", aus.BetreuungszeitKind - aus.WochenstundenVertrag);
newQueryRo.Rows.Add(row);
}
newQueryRo.Rows.Sort((a, b) => a.Field1.ToString().CompareTo(b.Field1));
return newQueryRo;
}
private List<VergleichRow> ErstelleRows(DateTime datum)
{
var result = new List<VergleichRow>();
var martinsschule = SucheMartinsschule();
var teamMartinsschule = SucheTeamMartinsschule();
var allEmployees = DAOFactory.GenericDAO.GetAllActive<Employee>();
foreach (var emp in allEmployees)
{
var row = new VergleichRow();
row.Employee = String.Format("{0}", emp.Person.LastNameFirstName);
var c = GetBetreutesKind(emp, datum);
if (c != null)
{
row.Customer = String.Format("{0} {1}", c.Person.FirstName, c.Person.LastName);
row.BetreuungszeitKind = GetStundenplanStunden(c, datum);
}
if (IstMartinsschule(emp, datum, teamMartinsschule))
{
row.Customer = "Martinsschule";
row.BetreuungszeitKind = GetStundenplanStunden(martinsschule, datum);
}
row.WochenstundenVertrag = GetWochenstundenAusVertrag(emp, datum);
result.Add(row);
}
return result;
}
private decimal GetWochenstundenAusVertrag(Employee emp, DateTime datum)
{
var c = emp.GetValidContractForDate(datum);
if (c != null)
{
return c.WeeklyTotalHours ?? 0;
}
return 0;
}
private Organisation SucheMartinsschule()
{
return DAOFactory.SearchDAO.FindOrganisation("Martinsschule", false).FirstOrDefault();
}
private Team SucheTeamMartinsschule()
{
return DAOFactory.GenericDAO.GetAllActive<Team>().FirstOrDefault(t => t.Name.Contains("Martinsschule"));
}
private bool IstMartinsschule(Employee emp, DateTime datum, Team teamMartinsschule)
{
var c = emp.GetValidContractForDate(datum);
if (c != null && c.ContractTypeValueListEntry != null && c.ContractTypeValueListEntry.Value.Contains("Martinsschule"))
{
return true;
}
return teamMartinsschule.MemberList.Any(e => e.Oid == emp.Oid);
}
private decimal GetStundenplanStunden(Customer c, DateTime datum)
{
decimal stunden = 0;
var az = ReportHelper.GetArbeitszeit(c, datum, datum);
if (az != null)
{
foreach (var item in az.ArbeitszeitEintraege)
{
stunden += item.BerechneStunden();
}
}
return stunden;
}
private decimal GetStundenplanStunden(Organisation o, DateTime datum)
{
decimal stunden = 0;
var az = ReportHelper.GetArbeitszeit(o, datum, datum);
if (az != null)
{
foreach (var item in az.ArbeitszeitEintraege)
{
stunden += item.BerechneStunden();
}
}
return stunden;
}
private Customer GetBetreutesKind(Employee emp, DateTime datum)
{
foreach (var e2c in emp.Employee2CustomerList.Where(e => e.IsActive == ActivationTypeId.Active
&& (!e.StartDate.HasValue || e.StartDate.Value.Date <= datum)
&& (!e.EndDate.HasValue || e.EndDate.Value.Date >= datum)
&& e.ValueList.Any(v => v.Entry.Type == ValueListEntryType.StaffRoleType && v.Entry.Value.Contains("Hauptbetreu"))))
{
return e2c.Customer;
}
return null;
}
class VergleichRow
{
public String Employee { get; set; }
public String Customer { get; set; }
public decimal BetreuungszeitKind { get; set; }
public decimal WochenstundenVertrag { get; set; }
}
}
}

View File

@@ -0,0 +1,435 @@
using BeWo.Report.ReportObjects;
namespace SHKServiceSBD.Reports
{
partial class VergleichArbeitszeitStundenplanReport
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
DevExpress.XtraReports.UI.XRWatermark xrWatermark1 = new DevExpress.XtraReports.UI.XRWatermark();
this.Detail = new DevExpress.XtraReports.UI.DetailBand();
this.Detail1 = new DevExpress.XtraReports.UI.DetailBand();
this.xrTable2 = new DevExpress.XtraReports.UI.XRTable();
this.xrTableRow2 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell6 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell3 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell12 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell5 = new DevExpress.XtraReports.UI.XRTableCell();
this.lblTitel = new DevExpress.XtraReports.UI.XRLabel();
this.DetailReport = new DevExpress.XtraReports.UI.DetailReportBand();
this.GroupHeader2 = new DevExpress.XtraReports.UI.GroupHeaderBand();
this.xrTable1 = new DevExpress.XtraReports.UI.XRTable();
this.xrTableRow1 = new DevExpress.XtraReports.UI.XRTableRow();
this.cellHeader2 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell2 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell4 = new DevExpress.XtraReports.UI.XRTableCell();
this.cellHeaderUhrzeit2 = new DevExpress.XtraReports.UI.XRTableCell();
this.ReportHeader = new DevExpress.XtraReports.UI.ReportHeaderBand();
this.lblZeitraum = new DevExpress.XtraReports.UI.XRLabel();
this.pageFooterBand1 = new DevExpress.XtraReports.UI.PageFooterBand();
this.xrPageInfo2 = new DevExpress.XtraReports.UI.XRPageInfo();
this.xrPageInfo1 = new DevExpress.XtraReports.UI.XRPageInfo();
this.Title = new DevExpress.XtraReports.UI.XRControlStyle();
this.FieldCaption = new DevExpress.XtraReports.UI.XRControlStyle();
this.PageInfo = new DevExpress.XtraReports.UI.XRControlStyle();
this.DataField = new DevExpress.XtraReports.UI.XRControlStyle();
this.fieldFLS = new DevExpress.XtraReports.UI.CalculatedField();
this.topMarginBand1 = new DevExpress.XtraReports.UI.TopMarginBand();
this.bottomMarginBand1 = new DevExpress.XtraReports.UI.BottomMarginBand();
this.xrTableCell1 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell7 = new DevExpress.XtraReports.UI.XRTableCell();
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.bindingSource1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this)).BeginInit();
//
// Detail
//
this.Detail.Expanded = false;
this.Detail.HeightF = 0F;
this.Detail.Name = "Detail";
this.Detail.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F);
this.Detail.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
//
// Detail1
//
this.Detail1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.xrTable2});
this.Detail1.Font = new DevExpress.Drawing.DXFont("Arial", 9F);
this.Detail1.HeightF = 25F;
this.Detail1.KeepTogetherWithDetailReports = true;
this.Detail1.Name = "Detail1";
this.Detail1.StylePriority.UseFont = false;
//
// xrTable2
//
this.xrTable2.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right)
| DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrTable2.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
this.xrTable2.Name = "xrTable2";
this.xrTable2.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 3, 0, 0, 100F);
this.xrTable2.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
this.xrTableRow2});
this.xrTable2.SizeF = new System.Drawing.SizeF(726.9999F, 25F);
this.xrTable2.StylePriority.UseBorders = false;
this.xrTable2.StylePriority.UseFont = false;
this.xrTable2.StylePriority.UsePadding = false;
this.xrTable2.StylePriority.UseTextAlignment = false;
this.xrTable2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
//
// xrTableRow2
//
this.xrTableRow2.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
this.xrTableCell6,
this.xrTableCell7,
this.xrTableCell3,
this.xrTableCell12,
this.xrTableCell5});
this.xrTableRow2.Name = "xrTableRow2";
this.xrTableRow2.Weight = 1D;
//
// xrTableCell6
//
this.xrTableCell6.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "Rows.Field1")});
this.xrTableCell6.Multiline = true;
this.xrTableCell6.Name = "xrTableCell6";
this.xrTableCell6.StylePriority.UseTextAlignment = false;
this.xrTableCell6.Text = "Klient/in";
this.xrTableCell6.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
this.xrTableCell6.Weight = 1.0611941412447414D;
//
// xrTableCell3
//
this.xrTableCell3.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "Rows.Field3")});
this.xrTableCell3.Name = "xrTableCell3";
this.xrTableCell3.StylePriority.UseTextAlignment = false;
this.xrTableCell3.Text = "xrTableCell3";
this.xrTableCell3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell3.Weight = 0.63671648756094823D;
//
// xrTableCell12
//
this.xrTableCell12.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "Rows.Field4")});
this.xrTableCell12.Name = "xrTableCell12";
this.xrTableCell12.StylePriority.UseTextAlignment = false;
this.xrTableCell12.Text = "xrTableCell12";
this.xrTableCell12.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell12.Weight = 0.58365678813901489D;
//
// xrTableCell5
//
this.xrTableCell5.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "Rows.Field5")});
this.xrTableCell5.Name = "xrTableCell5";
this.xrTableCell5.StylePriority.UseTextAlignment = false;
this.xrTableCell5.Text = "xrTableCell5";
this.xrTableCell5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell5.Weight = 0.51467883792747049D;
//
// lblTitel
//
this.lblTitel.Font = new DevExpress.Drawing.DXFont("Arial", 12F, DevExpress.Drawing.DXFontStyle.Bold);
this.lblTitel.LocationFloat = new DevExpress.Utils.PointFloat(0F, 10.00001F);
this.lblTitel.Name = "lblTitel";
this.lblTitel.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.lblTitel.SizeF = new System.Drawing.SizeF(666.9999F, 23F);
this.lblTitel.StylePriority.UseFont = false;
this.lblTitel.Text = "Vergleich Arbeitszeit / Stundenplan";
//
// DetailReport
//
this.DetailReport.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {
this.Detail1,
this.GroupHeader2});
this.DetailReport.DataMember = "Rows";
this.DetailReport.DataSource = this.bindingSource1;
this.DetailReport.Level = 0;
this.DetailReport.Name = "DetailReport";
//
// GroupHeader2
//
this.GroupHeader2.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.xrTable1});
this.GroupHeader2.HeightF = 40F;
this.GroupHeader2.Name = "GroupHeader2";
this.GroupHeader2.RepeatEveryPage = true;
//
// xrTable1
//
this.xrTable1.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top)
| DevExpress.XtraPrinting.BorderSide.Right)
| DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrTable1.Font = new DevExpress.Drawing.DXFont("Arial", 9F, DevExpress.Drawing.DXFontStyle.Bold);
this.xrTable1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
this.xrTable1.Name = "xrTable1";
this.xrTable1.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 3, 0, 0, 100F);
this.xrTable1.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
this.xrTableRow1});
this.xrTable1.SizeF = new System.Drawing.SizeF(726.9999F, 40F);
this.xrTable1.StylePriority.UseBorders = false;
this.xrTable1.StylePriority.UseFont = false;
this.xrTable1.StylePriority.UsePadding = false;
this.xrTable1.StylePriority.UseTextAlignment = false;
this.xrTable1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
//
// xrTableRow1
//
this.xrTableRow1.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
this.cellHeader2,
this.xrTableCell1,
this.xrTableCell2,
this.xrTableCell4,
this.cellHeaderUhrzeit2});
this.xrTableRow1.Name = "xrTableRow1";
this.xrTableRow1.Weight = 1.1162794658854165D;
//
// cellHeader2
//
this.cellHeader2.Name = "cellHeader2";
this.cellHeader2.Text = "Mitarbeiter/in";
this.cellHeader2.Weight = 1.061194141244741D;
//
// xrTableCell2
//
this.xrTableCell2.Multiline = true;
this.xrTableCell2.Name = "xrTableCell2";
this.xrTableCell2.StylePriority.UseTextAlignment = false;
this.xrTableCell2.Text = "Betreuungszeiten\r\nKind in Stunden";
this.xrTableCell2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell2.Weight = 0.63671648756094812D;
//
// xrTableCell4
//
this.xrTableCell4.Multiline = true;
this.xrTableCell4.Name = "xrTableCell4";
this.xrTableCell4.StylePriority.UseTextAlignment = false;
this.xrTableCell4.Text = "Stunden pro Woche\r\naus Vertrag";
this.xrTableCell4.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell4.Weight = 0.58365678813901511D;
//
// cellHeaderUhrzeit2
//
this.cellHeaderUhrzeit2.Name = "cellHeaderUhrzeit2";
this.cellHeaderUhrzeit2.StylePriority.UseTextAlignment = false;
this.cellHeaderUhrzeit2.Text = "Differenz";
this.cellHeaderUhrzeit2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.cellHeaderUhrzeit2.Weight = 0.51467883792747D;
//
// ReportHeader
//
this.ReportHeader.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.lblZeitraum,
this.lblTitel});
this.ReportHeader.HeightF = 80F;
this.ReportHeader.Name = "ReportHeader";
//
// lblZeitraum
//
this.lblZeitraum.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
this.lblZeitraum.LocationFloat = new DevExpress.Utils.PointFloat(0F, 32.99998F);
this.lblZeitraum.Name = "lblZeitraum";
this.lblZeitraum.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.lblZeitraum.SizeF = new System.Drawing.SizeF(666.9999F, 23F);
this.lblZeitraum.StylePriority.UseFont = false;
//
// pageFooterBand1
//
this.pageFooterBand1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.xrPageInfo2,
this.xrPageInfo1});
this.pageFooterBand1.HeightF = 48F;
this.pageFooterBand1.Name = "pageFooterBand1";
//
// xrPageInfo2
//
this.xrPageInfo2.Font = new DevExpress.Drawing.DXFont("Arial", 8F);
this.xrPageInfo2.LocationFloat = new DevExpress.Utils.PointFloat(630F, 25F);
this.xrPageInfo2.Name = "xrPageInfo2";
this.xrPageInfo2.SizeF = new System.Drawing.SizeF(96.99994F, 23F);
this.xrPageInfo2.StyleName = "PageInfo";
this.xrPageInfo2.StylePriority.UseFont = false;
this.xrPageInfo2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
this.xrPageInfo2.TextFormatString = "Seite {0} von {1}";
//
// xrPageInfo1
//
this.xrPageInfo1.Font = new DevExpress.Drawing.DXFont("Arial", 8F);
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(200F, 23F);
this.xrPageInfo1.StyleName = "PageInfo";
this.xrPageInfo1.StylePriority.UseFont = false;
//
// Title
//
this.Title.BackColor = System.Drawing.Color.White;
this.Title.BorderColor = System.Drawing.SystemColors.ControlText;
this.Title.Borders = DevExpress.XtraPrinting.BorderSide.None;
this.Title.BorderWidth = 1F;
this.Title.Font = new DevExpress.Drawing.DXFont("Times New Roman", 24F);
this.Title.ForeColor = System.Drawing.Color.Black;
this.Title.Name = "Title";
//
// FieldCaption
//
this.FieldCaption.BackColor = System.Drawing.Color.White;
this.FieldCaption.BorderColor = System.Drawing.SystemColors.ControlText;
this.FieldCaption.Borders = DevExpress.XtraPrinting.BorderSide.None;
this.FieldCaption.BorderWidth = 1F;
this.FieldCaption.Font = new DevExpress.Drawing.DXFont("Times New Roman", 10F, DevExpress.Drawing.DXFontStyle.Bold);
this.FieldCaption.ForeColor = System.Drawing.Color.Black;
this.FieldCaption.Name = "FieldCaption";
//
// PageInfo
//
this.PageInfo.BackColor = System.Drawing.Color.White;
this.PageInfo.BorderColor = System.Drawing.SystemColors.ControlText;
this.PageInfo.Borders = DevExpress.XtraPrinting.BorderSide.None;
this.PageInfo.BorderWidth = 1F;
this.PageInfo.Font = new DevExpress.Drawing.DXFont("Times New Roman", 8F);
this.PageInfo.ForeColor = System.Drawing.Color.Black;
this.PageInfo.Name = "PageInfo";
//
// DataField
//
this.DataField.BackColor = System.Drawing.Color.White;
this.DataField.BorderColor = System.Drawing.SystemColors.ControlText;
this.DataField.Borders = DevExpress.XtraPrinting.BorderSide.None;
this.DataField.BorderWidth = 1F;
this.DataField.Font = new DevExpress.Drawing.DXFont("Times New Roman", 8F);
this.DataField.ForeColor = System.Drawing.SystemColors.ControlText;
this.DataField.Name = "DataField";
//
// fieldFLS
//
this.fieldFLS.DataMember = "FLSReportGroups";
this.fieldFLS.DataSource = this.bindingSource1;
this.fieldFLS.Expression = "[TotalFLM] / 60";
this.fieldFLS.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal;
this.fieldFLS.Name = "fieldFLS";
//
// topMarginBand1
//
this.topMarginBand1.HeightF = 50F;
this.topMarginBand1.Name = "topMarginBand1";
//
// bottomMarginBand1
//
this.bottomMarginBand1.HeightF = 30F;
this.bottomMarginBand1.Name = "bottomMarginBand1";
//
// xrTableCell1
//
this.xrTableCell1.Multiline = true;
this.xrTableCell1.Name = "xrTableCell1";
this.xrTableCell1.Text = "Kind";
this.xrTableCell1.Weight = 1.0611941464523085D;
//
// xrTableCell7
//
this.xrTableCell7.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "Rows.Field2")});
this.xrTableCell7.Multiline = true;
this.xrTableCell7.Name = "xrTableCell7";
this.xrTableCell7.Text = "xrTableCell7";
this.xrTableCell7.Weight = 1.0611941464523085D;
//
// bindingSource1
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.QueryRO);
//
// VergleichArbeitszeitStundenplanReport
//
this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {
this.Detail,
this.DetailReport,
this.ReportHeader,
this.pageFooterBand1,
this.topMarginBand1,
this.bottomMarginBand1});
this.DataSource = this.bindingSource1;
this.DisplayName = "VergleichArbeitszeitStundenplanReport";
this.Margins = new DevExpress.Drawing.DXMargins(60F, 40F, 50F, 30F);
this.PageHeight = 1169;
this.PageWidth = 827;
this.PaperKind = DevExpress.Drawing.Printing.DXPaperKind.A4;
this.StyleSheet.AddRange(new DevExpress.XtraReports.UI.XRControlStyle[] {
this.Title,
this.FieldCaption,
this.PageInfo,
this.DataField});
this.Version = "23.2";
xrWatermark1.Id = "Watermark1";
this.Watermarks.Add(xrWatermark1);
((System.ComponentModel.ISupportInitialize)(this.xrTable2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this)).EndInit();
}
#endregion
private DevExpress.XtraReports.UI.DetailBand Detail;
private System.Windows.Forms.BindingSource bindingSource1;
private DevExpress.XtraReports.UI.DetailBand Detail1;
private DevExpress.XtraReports.UI.DetailReportBand DetailReport;
private DevExpress.XtraReports.UI.ReportHeaderBand ReportHeader;
private DevExpress.XtraReports.UI.PageFooterBand pageFooterBand1;
private DevExpress.XtraReports.UI.XRPageInfo xrPageInfo2;
private DevExpress.XtraReports.UI.XRPageInfo xrPageInfo1;
private DevExpress.XtraReports.UI.XRControlStyle Title;
private DevExpress.XtraReports.UI.XRControlStyle FieldCaption;
private DevExpress.XtraReports.UI.XRControlStyle PageInfo;
private DevExpress.XtraReports.UI.XRControlStyle DataField;
private DevExpress.XtraReports.UI.CalculatedField fieldFLS;
private DevExpress.XtraReports.UI.TopMarginBand topMarginBand1;
private DevExpress.XtraReports.UI.BottomMarginBand bottomMarginBand1;
private DevExpress.XtraReports.UI.XRLabel lblTitel;
private DevExpress.XtraReports.UI.XRTable xrTable2;
private DevExpress.XtraReports.UI.XRTableRow xrTableRow2;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell6;
private DevExpress.XtraReports.UI.XRTable xrTable1;
private DevExpress.XtraReports.UI.XRTableRow xrTableRow1;
private DevExpress.XtraReports.UI.XRTableCell cellHeader2;
private DevExpress.XtraReports.UI.GroupHeaderBand GroupHeader2;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell3;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell5;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell2;
private DevExpress.XtraReports.UI.XRTableCell cellHeaderUhrzeit2;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell12;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell4;
private DevExpress.XtraReports.UI.XRLabel lblZeitraum;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell7;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell1;
}
}

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

@@ -122,6 +122,12 @@
<Compile Include="Reports\AbweichungenArbeitszeitReport.designer.cs"> <Compile Include="Reports\AbweichungenArbeitszeitReport.designer.cs">
<DependentUpon>AbweichungenArbeitszeitReport.cs</DependentUpon> <DependentUpon>AbweichungenArbeitszeitReport.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="Reports\VergleichArbeitszeitStundenplanReport.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Reports\VergleichArbeitszeitStundenplanReport.designer.cs">
<DependentUpon>VergleichArbeitszeitStundenplanReport.cs</DependentUpon>
</Compile>
<Compile Include="Reports\AusgleichsberichtReport.cs"> <Compile Include="Reports\AusgleichsberichtReport.cs">
<SubType>Component</SubType> <SubType>Component</SubType>
</Compile> </Compile>
@@ -202,6 +208,9 @@
<EmbeddedResource Include="Reports\AbweichungenArbeitszeitReport.resx"> <EmbeddedResource Include="Reports\AbweichungenArbeitszeitReport.resx">
<DependentUpon>AbweichungenArbeitszeitReport.cs</DependentUpon> <DependentUpon>AbweichungenArbeitszeitReport.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Reports\VergleichArbeitszeitStundenplanReport.resx">
<DependentUpon>VergleichArbeitszeitStundenplanReport.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Reports\AusgleichsberichtReport.resx"> <EmbeddedResource Include="Reports\AusgleichsberichtReport.resx">
<DependentUpon>AusgleichsberichtReport.cs</DependentUpon> <DependentUpon>AusgleichsberichtReport.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>

View File

@@ -21,10 +21,8 @@ namespace DomizielAnsbach.Service
private ServiceDescription leistungSonderzeit; private ServiceDescription leistungSonderzeit;
private ServiceDescription leistungBusbegleitung; private ServiceDescription leistungBusbegleitung;
protected override IList<ServiceRecord> CreateServiceRecords(Arbeitszeit arbeitszeit, DateTime datum, CostBearer2SupportConcept c2s, ServiceDescription defaultSd) protected override bool CreateServiceRecordsIfAnyExistInDateRange { get { return true; } }
{
return base.CreateServiceRecords(arbeitszeit, datum, c2s, defaultSd);
}
public override ServiceRecord CreateServiceRecord(ArbeitszeitEintrag ae, DateTime datum, CostBearer2SupportConcept c2s, ServiceDescription defaultSd) public override ServiceRecord CreateServiceRecord(ArbeitszeitEintrag ae, DateTime datum, CostBearer2SupportConcept c2s, ServiceDescription defaultSd)
{ {
var leistung = GetLeistungSonderzeit(); var leistung = GetLeistungSonderzeit();
@@ -51,6 +49,13 @@ namespace DomizielAnsbach.Service
return sr; return sr;
} }
public override Employee GetHauptbetreuung(Customer customer, DateTime date)
{
return customer.Employee2CustomerList.FirstOrDefault(e2c => e2c.IsActive == ActivationTypeId.Active &&
(!e2c.StartDate.HasValue || e2c.StartDate.Value.Date <= date) && (!e2c.EndDate.HasValue || e2c.EndDate.Value.Date >= date) &&
e2c.ValueList.Any(b => b.Entry.Type.Equals(ValueListEntryType.StaffRoleType) &&
b.Entry.Value.Contains("Hauptbetreuung")))?.Employee;
}
public override ServiceDescription GetDefaultServiceDescription(CostBearer2SupportConcept c2s) public override ServiceDescription GetDefaultServiceDescription(CostBearer2SupportConcept c2s)
{ {

View File

@@ -22,6 +22,7 @@ namespace BeWo.Service.DCEntityMapper
pDataContract.VorlagentabelleUdpUser = pEntity.UdpUser; pDataContract.VorlagentabelleUdpUser = pEntity.UdpUser;
pDataContract.VorlagentabelleSystemEntryID = pEntity.SystemEntryID; pDataContract.VorlagentabelleSystemEntryID = pEntity.SystemEntryID;
pDataContract.Tabellenname = pEntity.Tabellenname; pDataContract.Tabellenname = pEntity.Tabellenname;
pDataContract.ImageName = pEntity.ImageName;
return pDataContract; return pDataContract;
} }
@@ -38,6 +39,7 @@ namespace BeWo.Service.DCEntityMapper
pEntity.UdpUser = pDataContract.VorlagentabelleUdpUser; pEntity.UdpUser = pDataContract.VorlagentabelleUdpUser;
pEntity.SystemEntryID = pDataContract.VorlagentabelleSystemEntryID; pEntity.SystemEntryID = pDataContract.VorlagentabelleSystemEntryID;
pEntity.Tabellenname = pDataContract.Tabellenname; pEntity.Tabellenname = pDataContract.Tabellenname;
pEntity.ImageName = pDataContract.ImageName;
return pEntity; return pEntity;
} }

View File

@@ -18,6 +18,8 @@ namespace BeWo.Service.Plugins
{ {
protected String ReturnMessage { get; set; } protected String ReturnMessage { get; set; }
protected virtual bool CreateServiceRecordsIfAnyExistInDateRange { get { return false; } }
public virtual String CreateDefaultCustomerServiceRecords(DateTime start, DateTime end, IList<long> cb2scOids) public virtual String CreateDefaultCustomerServiceRecords(DateTime start, DateTime end, IList<long> cb2scOids)
{ {
@@ -34,16 +36,16 @@ namespace BeWo.Service.Plugins
{ {
var srList = DAOFactory.SearchDAO.FindServiceRecordsInSpan(c2s.Oid.Value, span).ToList(); var srList = DAOFactory.SearchDAO.FindServiceRecordsInSpan(c2s.Oid.Value, span).ToList();
if (srList.Count == 0) if (srList.Count == 0 || CreateServiceRecordsIfAnyExistInDateRange)
{ {
srList = ErstelleStundenplanEintraege(span.StartDateTime.Date, span.EndDate.Date, c2s, vs); var newSrList = ErstelleStundenplanEintraege(span.StartDateTime.Date, span.EndDate.Date, c2s, vs, srList);
DAOFactory.GenericDAO.Insert(srList); DAOFactory.GenericDAO.Insert(newSrList);
if (ReturnMessage.Length > 0) if (ReturnMessage.Length > 0)
{ {
ReturnMessage += "\n"; ReturnMessage += "\n";
} }
ReturnMessage += String.Format("Es wurden {0} Einträge erstellt.", srList.Count); ReturnMessage += String.Format("Es wurden {0} Einträge erstellt.", newSrList.Count);
} }
else else
{ {
@@ -64,7 +66,7 @@ namespace BeWo.Service.Plugins
return ReturnMessage; return ReturnMessage;
} }
public virtual List<ServiceRecord> ErstelleStundenplanEintraege(DateTime start, DateTime ende, CostBearer2SupportConcept c2s, VacationService vs) public virtual List<ServiceRecord> ErstelleStundenplanEintraege(DateTime start, DateTime ende, CostBearer2SupportConcept c2s, VacationService vs, List<ServiceRecord> existingList)
{ {
var customer = c2s.SupportConcept.Customer; var customer = c2s.SupportConcept.Customer;
@@ -86,7 +88,7 @@ namespace BeWo.Service.Plugins
//if (ferien == null && ft == null) //if (ferien == null && ft == null)
if (ft == null && !HatAbwesenheit(start, customer)) if (ft == null && !HatAbwesenheit(start, customer))
{ {
var newServiceRecords = CreateServiceRecords(stundenplan, start, c2s, defaultSd); var newServiceRecords = CreateServiceRecords(stundenplan, start, c2s, defaultSd, existingList);
serviceRecords.AddRange(newServiceRecords); serviceRecords.AddRange(newServiceRecords);
@@ -110,7 +112,7 @@ namespace BeWo.Service.Plugins
return false; return false;
} }
protected virtual IList<ServiceRecord> CreateServiceRecords(Arbeitszeit arbeitszeit, DateTime datum, CostBearer2SupportConcept c2s, ServiceDescription defaultSd) protected virtual IList<ServiceRecord> CreateServiceRecords(Arbeitszeit arbeitszeit, DateTime datum, CostBearer2SupportConcept c2s, ServiceDescription defaultSd, List<ServiceRecord> existingList)
{ {
var records = new List<ServiceRecord>(); var records = new List<ServiceRecord>();
@@ -120,9 +122,12 @@ namespace BeWo.Service.Plugins
{ {
if (IsSameWeekday(ae, datum.DayOfWeek)) if (IsSameWeekday(ae, datum.DayOfWeek))
{ {
var sr = CreateServiceRecord(ae, datum, c2s, defaultSd); if (existingList == null || existingList.Count(s => s.Start.Value.Date == datum.Date) == 0)
{
records.Add(sr); var sr = CreateServiceRecord(ae, datum, c2s, defaultSd);
records.Add(sr);
}
} }
} }
@@ -145,6 +150,11 @@ namespace BeWo.Service.Plugins
sr.Employee = ae.Employee; sr.Employee = ae.Employee;
} }
else else
{
sr.Employee = GetHauptbetreuung(c2s.SupportConcept.Customer, datum);
}
if (sr.Employee == null)
{ {
sr.Employee = LoggedInUserOperationContextExt.Current.User.Employee; sr.Employee = LoggedInUserOperationContextExt.Current.User.Employee;
} }
@@ -163,6 +173,14 @@ namespace BeWo.Service.Plugins
return sr; return sr;
} }
public virtual Employee GetHauptbetreuung(Customer customer, DateTime date)
{
return customer.Employee2CustomerList.FirstOrDefault(e2c => e2c.IsActive == ActivationTypeId.Active &&
(!e2c.StartDate.HasValue || e2c.StartDate.Value.Date <= date) && (!e2c.EndDate.HasValue || e2c.EndDate.Value.Date >= date) &&
e2c.ValueList.Any(b => b.Entry.Type.Equals(ValueListEntryType.StaffRoleType) &&
b.Entry.SystemEntryID.HasValue && b.Entry.SystemEntryID.Value == SystemEntryID.EmployeeRoleMainAttendant))?.Employee;
}
public virtual ServiceDescription GetDefaultServiceDescription(CostBearer2SupportConcept c2s) public virtual ServiceDescription GetDefaultServiceDescription(CostBearer2SupportConcept c2s)
{ {
foreach (var ap in c2s.ApprovalPeriodList) foreach (var ap in c2s.ApprovalPeriodList)

View File

@@ -51,7 +51,7 @@ namespace BeWo.Service.Plugins
//t = "4950382346"; // Holsinger //t = "4950382346"; // Holsinger
//t = "5973016645"; // Verein Lebensgestaltung Hanau //t = "5973016645"; // Verein Lebensgestaltung Hanau
//t = "7375324044"; // Diakonie KK Kleve //t = "7375324044"; // Diakonie KK Kleve
t = "1441747891"; // BeWo Mobil Köln //t = "1441747891"; // BeWo Mobil Köln
//t = "5120047701"; // Trialog //t = "5120047701"; // Trialog
//t = "3629696651"; // Soziale Dienste Niederrhein (SDN) //t = "3629696651"; // Soziale Dienste Niederrhein (SDN)
//t = "9893557471"; // Caritas Frankfurt //t = "9893557471"; // Caritas Frankfurt
@@ -167,7 +167,7 @@ namespace BeWo.Service.Plugins
//t = "7803602698"; // Taubblindendienst //t = "7803602698"; // Taubblindendienst
//t = "5518600303"; // Wetterleuchten e.V. //t = "5518600303"; // Wetterleuchten e.V.
//t = "4096649015"; // AWO Dortmund //t = "4096649015"; // AWO Dortmund
t = "3614251071"; // Pusteblume //t = "3614251071"; // Pusteblume
//t = "7755740484"; // Sawo //t = "7755740484"; // Sawo
//t = "8275654834"; // Twg Jonathan //t = "8275654834"; // Twg Jonathan
//t = "6586058528"; // Freundeskreis Suchtkrankenhilfe e.V. (FFS) //t = "6586058528"; // Freundeskreis Suchtkrankenhilfe e.V. (FFS)
@@ -223,7 +223,7 @@ namespace BeWo.Service.Plugins
//t = "7817461089"; // FAB e.V. (Familienarbeit und Beratung e.V.) //t = "7817461089"; // FAB e.V. (Familienarbeit und Beratung e.V.)
//t = "5207911843"; // Pro Balance //t = "5207911843"; // Pro Balance
//t = "8619663355"; // HSH Cologne //t = "8619663355"; // HSH Cologne
//t = "1652658918"; // LH Frankfurt Oder t = "1652658918"; // LH Frankfurt Oder
//t = "7696927868"; // Kuhring Betreuung //t = "7696927868"; // Kuhring Betreuung
//t = "6251348980"; // BeWo Gün //t = "6251348980"; // BeWo Gün
//t = "6782533512"; // LH Dorsten //t = "6782533512"; // LH Dorsten
@@ -393,6 +393,7 @@ namespace BeWo.Service.Plugins
//t = "5000000000"; //t = "5000000000";
//t = "3788859817"; // Zukunft Leben (Stephan Hekermann) //t = "3788859817"; // Zukunft Leben (Stephan Hekermann)
//t = "2663321234"; // Aachener Laienhelfer Initiative e.V. //t = "2663321234"; // Aachener Laienhelfer Initiative e.V.
return t; return t;
#else #else
if (MultitenancyOperationContextExt.Current != null) if (MultitenancyOperationContextExt.Current != null)

View File

@@ -29,6 +29,8 @@ namespace BS.Shared.DataContracts
public SystemEntryID? VorlagentabelleSystemEntryID { get; set; } public SystemEntryID? VorlagentabelleSystemEntryID { get; set; }
[DataMember] [DataMember]
public string Tabellenname { get; set; } public string Tabellenname { get; set; }
[DataMember]
public string ImageName { get; set; }
public override bool Equals(object obj) public override bool Equals(object obj)
{ {