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.Grid;
using DevExpress.XtraScheduler;
using System.ServiceModel;
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)
{
MainControl.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action) (() =>
{
MainControl.EndWaiting();
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);
}
else
{
exControl = new ExceptionMessageBox(message, ex, showDetails);
exControl = new ExceptionMessageBox(message, ex, showStacktrace);
}
MainControl.ShowControlAsModalPopup(exControl);
@@ -873,7 +875,7 @@ namespace BeWo
}
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
{
@@ -931,7 +933,7 @@ namespace BeWo
&& !ex.Exception.ToString().Contains("DevExpress.Xpf.Grid.Native.SelectionStrategyCellBase.IsCellSelected")))
{
ShowError(null, ex.Exception, true);
ShowErrorMessage(ex.Exception);
}
ex.Handled = true;
};
@@ -939,6 +941,86 @@ namespace BeWo
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)
{
if (_LoggedOnUser != null)

View File

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

View File

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

View File

@@ -875,70 +875,10 @@ namespace BeWo.ServiceProxy
private 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);
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);
}
}
BeWoApp.ShowErrorMessage(e);
}
private static void StartWaiting()
private static void StartWaiting()
{
Monitor.Enter(_Lock);
if ((++_RunningAsyncs) == 1 && BeWoApp.MainControl != null)

View File

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

View File

@@ -34,7 +34,7 @@
<RowDefinition Height="Auto" /> <!-- Textfeld 2 -->
</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" />
<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(""))
{
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;
}

View File

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

View File

@@ -23,7 +23,7 @@
</Style.Triggers>
</Style>
<ContextMenu x:Name="contextMenu" x:Key="cm" MenuItem.Click="ContextMenu_Click" Opened="ContextMenu_Opened">
<MenuItem Header="Neu" >
<MenuItem Header="Neuer Ordner" >
<MenuItem.Icon>
<Image Source="..\Ressources\Icons\new.png"/>
</MenuItem.Icon>
@@ -43,7 +43,7 @@
<ContextMenu x:Name="TemplateContextMenu" x:Key="templatecm" MenuItem.Click="TemplateContextMenu_Click" Opened="TemplateContextMenu_Opened">
<MenuItem Header="Neu" >
<MenuItem Header="Neuer Ordner" >
<MenuItem.Icon>
<Image Source="..\Ressources\Icons\Add24.png"/>
</MenuItem.Icon>
@@ -114,7 +114,7 @@
<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"/>
<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:TreeListColumn FieldName="Name" AllowSorting="False" Width="300">
<!--<dxg:TreeListColumn.CellStyle>
@@ -132,7 +132,7 @@
<dxg:TreeListControl.View>
<dxg:TreeListView x:Name="DocumentsTreeView" PreviewMouseLeftButtonDown="DocumentsTreeView_PreviewMouseLeftButtonDown" ShowColumnHeaders="False" ShowIndicator="False" ShowHorizontalLines="False" ShowVerticalLines="False"
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">
<!--<dxg:TreeListView.RowStyle>
<Style BasedOn="{StaticResource {dxgt:GridRowThemeKey ResourceKey=RowStyle}}" TargetType="dxg:rows">
@@ -291,27 +291,27 @@
<TabItem.Header>
<TextBlock Text="{markup:Translate Vorlagen}" TextElement.FontSize="16" TextElement.Foreground="{StaticResource TabItemHotTextBrush}" TextElement.FontFamily="Microsoft Sans Serif" Padding="3"></TextBlock>
</TabItem.Header>
<Grid Margin="0,3,0,0" Grid.Row="0" Background="{StaticResource ObjectEditBackgroundBrush}">
<dxlc:LayoutControl Orientation="Horizontal">
<dxlc:LayoutGroup dxlc:LayoutControl.AllowHorizontalSizing="True" Width="300">
<Grid Margin="0,0,0,0" >
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
</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:TreeListColumn FieldName="Name" AllowSorting="True"/>
</dxg:TreeListControl.Columns>
<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"
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:TreeListControl.View>
</dxg:TreeListControl>
@@ -378,37 +378,42 @@
</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>
</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>
</TabControl>
</Grid>

View File

@@ -55,7 +55,7 @@ namespace BeWo.View.Master
public DokumenteView()
{
InitializeComponent();
//InitDocumentMenuItems();
InitDocumentMenuItems();
InitTemplateMenuItems();
progressbar_upload.Visibility = Visibility.Collapsed;
@@ -135,7 +135,7 @@ namespace BeWo.View.Master
return list;
}
private void treeListView_NodeExpanding(object sender, TreeListNodeAllowEventArgs e)
private void DocumentsTreeView_NodeExpanding(object sender, TreeListNodeAllowEventArgs e)
{
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)
{
@@ -246,37 +246,50 @@ namespace BeWo.View.Master
foreach (var folder in folderDCs)
{
DocumentTreeItemDC folder_dc = new DocumentTreeItemDC()
TreeListNode newNode_folder = null;
if (folder.BeWoFolderOid.HasValue || !hideAlleOrdner)
{
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)
DocumentTreeItemDC folder_dc = new DocumentTreeItemDC()
{
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);
TreeListNode newNode_folder = new TreeListNode()
else
{
Content = folder_vm,
IsExpandButtonVisible = DefaultBoolean.True,
Tag = false,
Image = LoadFolderImage()
};
folder_dc.Node = newNode_folder;
node.Nodes.Add(newNode_folder);
newNode_folder = node;
if (content.DataContract.BeWoFolderDC == null)
{
content.DataContract.BeWoFolderDC = folder;
}
}
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;
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 (menuitem.Header.Equals("Neu"))
if (menuitem.Header.Equals("Neuer Ordner"))
menuitem.IsEnabled = true;
else
menuitem.IsEnabled = false;
@@ -714,7 +727,7 @@ namespace BeWo.View.Master
var row = DocumentsTreeView.SelectedRows[0] as DocumentTreeItemVM;
var twi = e.OriginalSource as MenuItem;
if (twi.Header.Equals("Neu"))
if (twi.Header.Equals("Neuer Ordner"))
{
TreeListNode node = new TreeListNode();
node.IsExpandButtonVisible = DefaultBoolean.True;
@@ -1268,13 +1281,16 @@ namespace BeWo.View.Master
ParentOid = null,
Name = table.Tabellenname,
Table = TableID.Vorlagentabelle,
ObjectOid = table.VorlagentabelleOid
ObjectOid = table.VorlagentabelleOid,
BeWoFolderDC = new BeWoFolderDC { Name = "RootFolder", SubFolders = new List<BeWoFolderDC>() }
};
DocumentTreeItemVM vm = new DocumentTreeItemVM(dc);
node.Content = vm;
TemplateTreeView.Nodes.Add(node);
node.IsExpandButtonVisible = DefaultBoolean.True;
node.Image = LoadImage(iconNames[counter - 1]);
node.Image = LoadImage(table.ImageName);
counter++;
}
template_treeview_control.EndDataUpdate();
@@ -1296,14 +1312,17 @@ namespace BeWo.View.Master
TreeListNode node = e.Node;
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>();
if (vm.DocTreeItemOid.HasValue)
{
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)
{
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("Neu"))
menuitem.IsEnabled = true;
else
menuitem.IsEnabled = false;
}
else
if (menuitem.Header.Equals("Neuer Ordner"))
{
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 twi = e.OriginalSource as MenuItem;
if (twi.Header.Equals("Neu"))
if (twi.Header.Equals("Neuer Ordner"))
{
TreeListNode node = new TreeListNode();
node.IsExpandButtonVisible = DefaultBoolean.True;
@@ -1386,7 +1406,7 @@ namespace BeWo.View.Master
BeWoFolderDC folderDC = new BeWoFolderDC()
{
Name = "Neuer Ordner",
ParentBeWoFolderOid = row.DataContract.BeWoFolderDC.BeWoFolderOid,
ParentBeWoFolderOid = row.DataContract.BeWoFolderDC?.BeWoFolderOid,
ObjectOid = row.DataContract.ObjectOid,
ObjectTid = row.DataContract.Table,
Files = new List<FileAttachmentDC>(),
@@ -1573,7 +1593,7 @@ namespace BeWo.View.Master
{
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>();
return;

View File

@@ -206,8 +206,8 @@
</ControlTemplate>
</dxg:GridColumn.EditTemplate>
</dxg:GridColumn>
<dxg:GridColumn Header="Bemerkungen" FieldName="Notice" />
<dxg:GridColumn Header="" FieldName="Infos" AllowEditing="False" AllowSorting="False" Width="150"/>
<dxg:GridColumn Header="Bemerkungen" FieldName="Notice" Width="150"/>
<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" 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)
{
BeWoApp.ShowError(protokoll.Fehlertitel + ": " + protokoll.Fehlernachricht, null, false);
BeWoApp.ShowError(protokoll.Fehlertitel + ": " + protokoll.Fehlernachricht, null, false, false);
}
else
{

View File

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

View File

@@ -15,6 +15,7 @@
<property column="SystemEntryID" type="BS.Shared.SystemEntryID, BS.Shared" name="SystemEntryID" />
<property column="Tabellenname" type="String" name="Tabellenname"/>
<property column="ImageName" type="String" name="ImageName"/>
<property column="ObjectTid" type="Int64" name="ObjectTid"/>
</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);
ALTER TABLE `vorlagentabelle`
ADD COLUMN `ImageName` VARCHAR(128) NULL AFTER `Tabellenname`;

View File

@@ -44,7 +44,7 @@ namespace BeWo.Report.DefaultReports
sd.Notice5 = "GR";
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";
}

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.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";
else if (sd.IsGroup)
sd.Notice5 = "GR";

View File

@@ -11,9 +11,14 @@ namespace AachenerLaienhelfer.Reporting
{
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;
}

View File

@@ -43,7 +43,7 @@ namespace DomizielAnsbach.Service
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);
@@ -70,7 +70,7 @@ namespace DomizielAnsbach.Service
}
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);
@@ -82,15 +82,6 @@ namespace DomizielAnsbach.Service
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)
{
var sr = base.CreateServiceRecord(ae, datum, c2s, standardLeistung);

View File

@@ -1029,7 +1029,21 @@ namespace LebenshilfeFrankfurtOder
Monat 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 anhang2 = new AnwesenheitSbdPool();

View File

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

View File

@@ -96,7 +96,7 @@ namespace SHKServiceSBD.Reports
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.Field3 = String.Format("{0:dd.MM.yyyy} Keine Arbeitszeit eingetragen", abw.Datum);
if (abw.ArbeitszeitStart > DateTime.MinValue && abw.ArbeitszeitEnde > DateTime.MinValue)

View File

@@ -54,7 +54,7 @@ namespace SHKServiceSBD.Reports
{
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.Field2 = String.Format("{0}", aus.Employee.Person.LastNameFirstName);
if (aus.Customer != null)
{
row.Field3 = String.Format("{0}", aus.Customer.Person.FirstNameLastName);
}
row.Field2 = aus.Employee;
row.Field3 = aus.Customer;
double betreuungszeitMinuten = 0;
double arbeitszeitMinuten = 0;
@@ -87,12 +84,18 @@ namespace SHKServiceSBD.Reports
}
if (aus.ArbeitszeitStart.HasValue && aus.ArbeitszeitEnde.HasValue)
{
arbeitszeitMinuten = aus.ArbeitszeitEnde.Value.Subtract(aus.ArbeitszeitStart.Value).TotalMinutes;
row.Field5 = String.Format("{0:0}", arbeitszeitMinuten);
//arbeitszeitMinuten = aus.ArbeitszeitEnde.Value.Subtract(aus.ArbeitszeitStart.Value).TotalMinutes;
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.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);
}
@@ -121,6 +124,7 @@ namespace SHKServiceSBD.Reports
var oid2BetreuteKlienten = new Dictionary<long, List<Customer>>();
var customer2Hauptbetreuer = new Dictionary<long, List<Employee>>();
//sortiere alle ServiceRecords nach Mitarbeiter
foreach (var sr in allRecords)
{
if (sr.EmployeeOid.HasValue)
@@ -138,6 +142,7 @@ namespace SHKServiceSBD.Reports
var employeeAbsenceTimes = absenceTimes.Where(absenceTime => absenceTime.EmployeeOid.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
var dtIter = start.Date;
while (dtIter <= ende.Date)
@@ -175,11 +180,16 @@ namespace SHKServiceSBD.Reports
DateTime azStart = DateTime.MaxValue;
DateTime azEnde = DateTime.MinValue;
String kindImEinsatz = null;
if (empOid2Records.ContainsKey(emp.Oid.Value))
{
var azRecordList = empOid2Records[emp.Oid.Value].Where(r => !r.CostBearer2SupportConceptOid.HasValue && r.Start.Value.Date == dtIter).ToList();
foreach (var sr in azRecordList)
{
if (sr.Customer != null)
{
kindImEinsatz = sr.Customer.Person.FirstNameLastName;
}
arbeitszeitMinuten += sr.RoundedDuration;
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
var bzspan = ReportHelper.GetArbeitszeitFuerTag(customer, dtIter);
decimal geplanteBz = (decimal)bzspan.EndDateTime.Subtract(bzspan.StartDateTime).TotalMinutes;
if (geplanteBz > 0 && geplanteBz != arbeitszeitMinuten)
{
var row = new AusgleichsRow
{
Employee = emp,
Customer = customer,
Employee = emp.Person.LastNameFirstName,
Customer = kindImEinsatz,
BetreuungszeitStart = bzspan.StartDateTime,
BetreuungszeitEnde = bzspan.EndDateTime,
ArbeitszeitMinuten = arbeitszeitMinuten,
Datum = dtIter
};
@@ -215,6 +235,7 @@ namespace SHKServiceSBD.Reports
{
row.ArbeitszeitEnde = azEnde;
}
result.Add(row);
}
}
@@ -245,29 +266,18 @@ namespace SHKServiceSBD.Reports
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
{
public DateTime Datum { get; set; }
public Employee Employee { get; set; }
public Customer Customer { get; set; }
public String Employee { get; set; }
public String Customer { get; set; }
public DateTime? BetreuungszeitStart { get; set; }
public DateTime? BetreuungszeitEnde { get; set; }
public DateTime? ArbeitszeitStart { 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)
{
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) &&
(!az.GueltigBis.HasValue || az.GueltigBis.Value >= start))
@@ -24,13 +35,11 @@ namespace SHKServiceSBD.Reports
return az;
}
}
}
return null;
}
public static DateTimeSpan GetArbeitszeitFuerTag(Customer customer, DateTime tag)
public static DateTimeSpan GetArbeitszeitFuerTag(Customer customer, DateTime tag)
{
DateTimeSpan span = new DateTimeSpan();
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">
<DependentUpon>AbweichungenArbeitszeitReport.cs</DependentUpon>
</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">
<SubType>Component</SubType>
</Compile>
@@ -202,6 +208,9 @@
<EmbeddedResource Include="Reports\AbweichungenArbeitszeitReport.resx">
<DependentUpon>AbweichungenArbeitszeitReport.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Reports\VergleichArbeitszeitStundenplanReport.resx">
<DependentUpon>VergleichArbeitszeitStundenplanReport.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Reports\AusgleichsberichtReport.resx">
<DependentUpon>AusgleichsberichtReport.cs</DependentUpon>
</EmbeddedResource>

View File

@@ -21,10 +21,8 @@ namespace DomizielAnsbach.Service
private ServiceDescription leistungSonderzeit;
private ServiceDescription leistungBusbegleitung;
protected override IList<ServiceRecord> CreateServiceRecords(Arbeitszeit arbeitszeit, DateTime datum, CostBearer2SupportConcept c2s, ServiceDescription defaultSd)
{
return base.CreateServiceRecords(arbeitszeit, datum, c2s, defaultSd);
}
protected override bool CreateServiceRecordsIfAnyExistInDateRange { get { return true; } }
public override ServiceRecord CreateServiceRecord(ArbeitszeitEintrag ae, DateTime datum, CostBearer2SupportConcept c2s, ServiceDescription defaultSd)
{
var leistung = GetLeistungSonderzeit();
@@ -51,6 +49,13 @@ namespace DomizielAnsbach.Service
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)
{

View File

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

View File

@@ -18,6 +18,8 @@ namespace BeWo.Service.Plugins
{
protected String ReturnMessage { get; set; }
protected virtual bool CreateServiceRecordsIfAnyExistInDateRange { get { return false; } }
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();
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)
{
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
{
@@ -64,7 +66,7 @@ namespace BeWo.Service.Plugins
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;
@@ -86,7 +88,7 @@ namespace BeWo.Service.Plugins
//if (ferien == null && ft == null)
if (ft == null && !HatAbwesenheit(start, customer))
{
var newServiceRecords = CreateServiceRecords(stundenplan, start, c2s, defaultSd);
var newServiceRecords = CreateServiceRecords(stundenplan, start, c2s, defaultSd, existingList);
serviceRecords.AddRange(newServiceRecords);
@@ -110,7 +112,7 @@ namespace BeWo.Service.Plugins
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>();
@@ -120,9 +122,12 @@ namespace BeWo.Service.Plugins
{
if (IsSameWeekday(ae, datum.DayOfWeek))
{
var sr = CreateServiceRecord(ae, datum, c2s, defaultSd);
records.Add(sr);
if (existingList == null || existingList.Count(s => s.Start.Value.Date == datum.Date) == 0)
{
var sr = CreateServiceRecord(ae, datum, c2s, defaultSd);
records.Add(sr);
}
}
}
@@ -145,6 +150,11 @@ namespace BeWo.Service.Plugins
sr.Employee = ae.Employee;
}
else
{
sr.Employee = GetHauptbetreuung(c2s.SupportConcept.Customer, datum);
}
if (sr.Employee == null)
{
sr.Employee = LoggedInUserOperationContextExt.Current.User.Employee;
}
@@ -163,6 +173,14 @@ namespace BeWo.Service.Plugins
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)
{
foreach (var ap in c2s.ApprovalPeriodList)

View File

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

View File

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