Dynamische HomeViewPanels

This commit is contained in:
rene
2019-08-15 11:06:50 +02:00
parent ae11111bc6
commit 0f2ef3a075
14 changed files with 415 additions and 199 deletions

View File

@@ -6784,6 +6784,10 @@ namespace BeWo.ServiceProxy
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IReportService/SendTimeSheetMail", ReplyAction="http://tempuri.org/IReportService/SendTimeSheetMailResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IReportService/SendTimeSheetMailBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
string SendTimeSheetMail(BS.Shared.DataContracts.TimeSheetStatusItemDC item, bool saveMailToDatabase);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IReportService/CreateCustomReport", ReplyAction="http://tempuri.org/IReportService/CreateCustomReportResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IReportService/CreateCustomReportBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
System.IO.MemoryStream CreateCustomReport(long employeeOid, string reportName);
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
@@ -6854,6 +6858,11 @@ namespace BeWo.ServiceProxy
{
return base.Channel.SendTimeSheetMail(item, saveMailToDatabase);
}
public System.IO.MemoryStream CreateCustomReport(long employeeOid, string reportName)
{
return base.Channel.CreateCustomReport(employeeOid, reportName);
}
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]

View File

@@ -8,6 +8,9 @@
xmlns:viewModel="clr-namespace:BeWo.Scheduler.ViewModel"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
xmlns:security="clr-namespace:BeWo.Security"
xmlns:dxp="http://schemas.devexpress.com/winfx/2008/xaml/printing"
xmlns:dxb="http://schemas.devexpress.com/winfx/2008/xaml/bars"
xmlns:dxpbars="http://schemas.devexpress.com/winfx/2008/xaml/printing/bars"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Focusable="True">
<localView:BeWoView.Resources>
@@ -57,6 +60,45 @@
</Setter.Value>
</Setter>
</Style>
<blc:DragDockPanel x:Key="PanelReport">
<blc:DragDockPanel.Header>
<StackPanel Orientation="Horizontal">
<Image Source="..\Ressources\Icons\ChartBarDisabled.png" Stretch="Fill" StretchDirection="Both" />
<TextBlock Text="Report" TextWrapping="Wrap" FontSize="16" Foreground="#E0E0E0" VerticalAlignment="Bottom" Margin="5,0,0,5" Tag="Titel"/>
</StackPanel>
</blc:DragDockPanel.Header>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<dxp:DocumentPreviewControl CommandBarStyle="Bars">
<dxp:DocumentPreviewControl.CommandProvider>
<dxp:DocumentCommandProvider>
<dxp:DocumentCommandProvider.Actions>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.ExportCsv}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.ExportMht}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.ExportTxt}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.Open}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.DocumentMap}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.Watermark}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.Scale}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.PrintDirect}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.PageSetup}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.Save}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.Send}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.Parameters}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.Thumbnails}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.EditingFields}"/>
</dxp:DocumentCommandProvider.Actions>
</dxp:DocumentCommandProvider>
</dxp:DocumentPreviewControl.CommandProvider>
</dxp:DocumentPreviewControl>
</Grid>
</blc:DragDockPanel>
</localView:BeWoView.Resources>
@@ -102,12 +144,12 @@
<TextBlock x:Name="txtLastLoginTime" Text="Zuletzt angemeldet am: 08.01.2009 12:53" TextWrapping="Wrap" />
</StackPanel>
<blc:DragDockPanelHost x:Name="panelHost" Grid.Row="1">
<blc:DragDockPanel x:Name="Tasks">
<blc:DragDockPanelHost x:Name="PanelHost" Grid.Row="1">
<blc:DragDockPanel x:Name="PanelTasks">
<blc:DragDockPanel.Header>
<DockPanel>
<Image Source="..\Ressources\Icons\AlertsDisabled.png" />
<TextBlock Text="{t:Translate Aufgaben}" TextWrapping="Wrap" FontSize="16" Foreground="#E0E0E0" VerticalAlignment="Bottom" Margin="5,0,0,5" />
<TextBlock Text="{t:Translate Aufgaben}" TextWrapping="Wrap" FontSize="16" Foreground="#E0E0E0" VerticalAlignment="Bottom" Margin="5,0,0,5" Tag="Titel"/>
<TextBlock x:Name="RequestsTextBlock" VerticalAlignment="Center" HorizontalAlignment="Center">
<Hyperlink RequestNavigate="ShowAppointmentRequests" NavigateUri="#" x:Name="RequestsHyperlink" Foreground="CornflowerBlue">
<TextBlock x:Name="RequestsHyperLinkTextBlock" Foreground="CornflowerBlue" />
@@ -287,11 +329,11 @@
</Grid>
</blc:DragDockPanel>
<blc:DragDockPanel x:Name="ExpiringSupportConcepts">
<blc:DragDockPanel x:Name="PanelExpiringSupportConcepts">
<blc:DragDockPanel.Header>
<StackPanel Orientation="Horizontal">
<Image Source="..\Ressources\Icons\Light Bulb.png" Stretch="Fill" StretchDirection="Both" />
<TextBlock Text="{t:Translate Hinweise}" TextWrapping="Wrap" FontSize="16" Foreground="#E0E0E0" VerticalAlignment="Bottom" Margin="5,0,0,5" />
<TextBlock Text="{t:Translate Hinweise}" TextWrapping="Wrap" FontSize="16" Foreground="#E0E0E0" VerticalAlignment="Bottom" Margin="5,0,0,5" Tag="Titel"/>
</StackPanel>
</blc:DragDockPanel.Header>
<Grid>
@@ -364,11 +406,11 @@
</Grid>
</blc:DragDockPanel>
<blc:DragDockPanel x:Name="ConferenceDates">
<blc:DragDockPanel x:Name="PanelConferenceDates">
<blc:DragDockPanel.Header>
<StackPanel Orientation="Horizontal">
<Image Source="..\Ressources\Icons\Alarm.png" Stretch="Fill" StretchDirection="Both"></Image>
<TextBlock Text="{t:Translate Hilfeplankonferenzen}" TextWrapping="Wrap" FontSize="16" Foreground="#E0E0E0" VerticalAlignment="Bottom" Margin="5,0,0,5" />
<TextBlock Text="{t:Translate Hilfeplankonferenzen}" TextWrapping="Wrap" FontSize="16" Foreground="#E0E0E0" VerticalAlignment="Bottom" Margin="5,0,0,5" Tag="Titel"/>
</StackPanel>
</blc:DragDockPanel.Header>
<Grid>
@@ -438,11 +480,11 @@
</Grid>
</blc:DragDockPanel>
<blc:DragDockPanel x:Name="Birthdates">
<blc:DragDockPanel x:Name="PanelBirthdates">
<blc:DragDockPanel.Header>
<StackPanel Orientation="Horizontal">
<Image Source="..\Ressources\Icons\Calendar 1.png" Stretch="Fill" StretchDirection="Both" />
<TextBlock Text="{t:Translate Geburtstage}" TextWrapping="Wrap" FontSize="16" Foreground="#E0E0E0" VerticalAlignment="Bottom" Margin="5,0,0,5" />
<TextBlock Text="{t:Translate Geburtstage}" TextWrapping="Wrap" FontSize="16" Foreground="#E0E0E0" VerticalAlignment="Bottom" Margin="5,0,0,5" Tag="Titel"/>
</StackPanel>
</blc:DragDockPanel.Header>
<Grid>
@@ -501,11 +543,11 @@
</Grid>
</blc:DragDockPanel>
<blc:DragDockPanel x:Name="InternalNews">
<blc:DragDockPanel x:Name="PanelInternalNews">
<blc:DragDockPanel.Header>
<StackPanel Orientation="Horizontal">
<Image Source="..\Ressources\Icons\AlertsDisabled.png" Stretch="Fill" StretchDirection="Both" />
<TextBlock Text="{t:Translate Ankündigungen}" TextWrapping="Wrap" FontSize="16" Foreground="#E0E0E0" VerticalAlignment="Bottom" Margin="5,0,0,5" />
<TextBlock Text="{t:Translate Ankündigungen}" TextWrapping="Wrap" FontSize="16" Foreground="#E0E0E0" VerticalAlignment="Bottom" Margin="5,0,0,5" Tag="Titel"/>
</StackPanel>
</blc:DragDockPanel.Header>
<ScrollViewer VerticalScrollBarVisibility="Auto">
@@ -521,11 +563,11 @@
</ScrollViewer>
</blc:DragDockPanel>
<blc:DragDockPanel x:Name="BeWoNews">
<blc:DragDockPanel x:Name="PanelBeWoNews">
<blc:DragDockPanel.Header>
<StackPanel Orientation="Horizontal">
<Image Source="..\Ressources\Icons\RSS Newsfeed.png" Stretch="Fill" StretchDirection="Both" />
<TextBlock Text="{t:Translate BeWoPlaner News}" TextWrapping="Wrap" FontSize="16" Foreground="#E0E0E0" VerticalAlignment="Bottom" Margin="5,0,0,5" />
<TextBlock Text="{t:Translate BeWoPlaner News}" TextWrapping="Wrap" FontSize="16" Foreground="#E0E0E0" VerticalAlignment="Bottom" Margin="5,0,0,5" Tag="Titel"/>
</StackPanel>
</blc:DragDockPanel.Header>
<Grid>

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
@@ -31,12 +32,18 @@ using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions;
using BS.Shared.RSS;
using System.Text.RegularExpressions;
using System.Windows.Markup;
using System.Xml;
using BeWo.Annotations;
using BeWo.ownChat;
using BeWo.Scheduler.Utils;
using BeWo.Scheduler.View;
using BeWo.View.Master;
using ChatController.HauptKlassen;
using DevExpress.Data.Helpers;
using DevExpress.Xpf.Docking.VisualElements;
using DevExpress.Xpf.DocumentViewer;
using DevExpress.Xpf.Printing;
using DevExpress.XtraScheduler;
using DevExpress.XtraScheduler.Xml;
using Brushes = System.Windows.Media.Brushes;
@@ -56,7 +63,7 @@ namespace BeWo.View
public partial class HomeView : BeWoView, INotifyPropertyChanged
{
#region Constant Fields
private const int Datebuffer = 14;
#endregion
@@ -78,7 +85,7 @@ namespace BeWo.View
private bool _IsAllowedToSeeMitarbeitertermine;
private bool _IsShowingAppointments;
private bool _HasRightsToSeeAppointments;
#endregion
#region Constructors
@@ -89,17 +96,14 @@ namespace BeWo.View
DataContext = this;
txtHeader.Text = String.Format("{0} {1}", BeWoApp.LoggedOnUser.Employee.FirstName, BeWoApp.LoggedOnUser.Employee.LastName);
txtHeader.Text = $"{BeWoApp.LoggedOnUser.Employee.FirstName} {BeWoApp.LoggedOnUser.Employee.LastName}";
txtVersion.Text = BeWoApp.Version;
txtLoginTime.Text = string.Empty;
txtLastLoginTime.Text = string.Empty;
PasswortSchloss.Text = string.Join("", (from Match m in Regex.Matches("D83DDD12", @"\S{4}") select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray());
//PreparePanels();
InitPanels(null);
HyperlinkZuPasswortsicherheit.NavigateUri = new Uri("http://news.bewoplaner.de/?NewsType=3&NewsCount=1&NewsOID=373457455");
@@ -147,6 +151,8 @@ namespace BeWo.View
BewoChat.Visibility = PropertyChatBerechtigung ? Visibility.Visible : Visibility.Hidden;
PruefePasswortStaerke();
ServiceFacade.DoOperationsServiceAsync(s => s.GetHomeViewPanels(), r => Dispatcher?.Invoke(() => UpdatePanels(r)));
}
#endregion
@@ -169,7 +175,7 @@ namespace BeWo.View
private void HomeDragPanelViewLoaded(object o, RoutedEventArgs e)
{
InitContent();
//Warum klappt das bei Köln Ring nicht?=
if (BeWoApp.LoggedOnUser == null || BeWoApp.LoggedOnUser.ResetPasswordInfos == null)
{
@@ -303,7 +309,7 @@ namespace BeWo.View
{
Process.Start(new ProcessStartInfo((sender as Hyperlink).NavigateUri.ToString()));
}
private void PasswortAendernLinkOnRequestNavigate(object sender, RequestNavigateEventArgs e)
{
var pav = new PasswortAenderungsView();
@@ -314,7 +320,7 @@ namespace BeWo.View
{
Process.Start(new ProcessStartInfo((sender as Hyperlink)?.NavigateUri.ToString()));
}
private void BtnCreateNewsItem_OnClick(object sender, RoutedEventArgs e)
{
TeamNewsItemVM teamVm = ((Button)sender).Tag as TeamNewsItemVM;
@@ -595,7 +601,7 @@ namespace BeWo.View
var result = new List<DependencyObject>();
foreach (var item in panelHost.Children)
foreach (var item in PanelHost.Children)
{
var p = item as DragDockPanel;
@@ -680,50 +686,46 @@ namespace BeWo.View
private void PruefePasswortStaerke()
{
if (BeWoApp.PasswortStrength == PasswortSecurityStrength.SehrSchwach)
switch (BeWoApp.PasswortStrength)
{
PasswortSchloss.Foreground = new SolidColorBrush(Colors.Red);
case PasswortSecurityStrength.SehrSchwach:
PasswortSchloss.Foreground = new SolidColorBrush(Colors.Red);
this.Dispatcher.BeginInvoke(
DispatcherPriority.Normal,
(Action)delegate
{
if (BeWoApp.AppSettings.IsPasswordSecurityActiv)
{
MessageBox.Show("Sie benutzen ein sehr schwaches Passwort.\nBitte ändern Sie Ihr Passwort, indem Sie im Startbildschirm oben auf \"Passwort ändern\" klicken.", "Achtung!",
MessageBoxButton.OK, MessageBoxImage.Information);
}
});
this.Dispatcher.BeginInvoke(
DispatcherPriority.Normal,
(Action)delegate
{
if (BeWoApp.AppSettings.IsPasswordSecurityActiv)
{
MessageBox.Show("Sie benutzen ein sehr schwaches Passwort.\nBitte ändern Sie Ihr Passwort, indem Sie im Startbildschirm oben auf \"Passwort ändern\" klicken.", "Achtung!",
MessageBoxButton.OK, MessageBoxImage.Information);
}
});
break;
case PasswortSecurityStrength.Schwach:
PasswortSchloss.Foreground = new SolidColorBrush(Colors.OrangeRed);
this.Dispatcher.BeginInvoke(
DispatcherPriority.Normal,
(Action)delegate
{
if (BeWoApp.AppSettings.IsPasswordSecurityActiv)
{
MessageBox.Show("Sie benutzen ein schwaches Passwort.\nBitte ändern Sie Ihr Passwort, indem Sie im Startbildschirm oben auf \"Passwort ändern\" klicken.", "Achtung!",
MessageBoxButton.OK, MessageBoxImage.Information);
}
});
break;
case PasswortSecurityStrength.Mittelmass:
PasswortSchloss.Foreground = new SolidColorBrush(Colors.Yellow);
break;
case PasswortSecurityStrength.Stark:
case PasswortSecurityStrength.SehrStark:
PasswortSchloss.Foreground = new SolidColorBrush(Colors.Green);
break;
default:
throw new ArgumentOutOfRangeException();
}
else if (BeWoApp.PasswortStrength == PasswortSecurityStrength.Schwach)
{
PasswortSchloss.Foreground = new SolidColorBrush(Colors.OrangeRed);
this.Dispatcher.BeginInvoke(
DispatcherPriority.Normal,
(Action)delegate
{
if (BeWoApp.AppSettings.IsPasswordSecurityActiv)
{
MessageBox.Show("Sie benutzen ein schwaches Passwort.\nBitte ändern Sie Ihr Passwort, indem Sie im Startbildschirm oben auf \"Passwort ändern\" klicken.", "Achtung!",
MessageBoxButton.OK, MessageBoxImage.Information);
}
});
}
else if (BeWoApp.PasswortStrength == PasswortSecurityStrength.Mittelmass)
{
PasswortSchloss.Foreground = new SolidColorBrush(Colors.Yellow);
}
else if (BeWoApp.PasswortStrength == PasswortSecurityStrength.Stark)
{
PasswortSchloss.Foreground = new SolidColorBrush(Colors.Green);
}
else if (BeWoApp.PasswortStrength == PasswortSecurityStrength.SehrStark)
{
PasswortSchloss.Foreground = new SolidColorBrush(Colors.Green);
}
}
private void InitPanelsCallback(IList<UiElementDC> elements, object state)
@@ -743,6 +745,8 @@ namespace BeWo.View
InternalNewsGrid.Children.Clear();
ReorderPanels();
InitContent();
}
private void InitBewoNews()
@@ -771,17 +775,18 @@ namespace BeWo.View
private void InitContent()
{
SetMaximizedPanel();
InitLoginInfo();
InitExpiredSupportConcepts();
InitNextConferenceDates();
InitBewoNews();
InitBirthdays();
rb_open.IsChecked = true;
UpdateInternalNews();
InitTasks();
rb_open.IsChecked = true;
}
private void InitExpiredSupportConcepts()
@@ -794,6 +799,81 @@ namespace BeWo.View
ReloadExpiringSupportConcepts);
}
private void InitLoginInfo()
{
DateTime endOfWeek = DateTime.Now.GetNext(DayOfWeek.Sunday).Date;
ServiceFacade.DoAnalysisServiceAsync(s1 => s1.GetLastLogins(BeWoApp.LoggedOnUser.LoginName), ReloadLogins);
}
private void InitNextConferenceDates()
{
DateTime endOfWeek = DateTime.Now.GetNext(DayOfWeek.Sunday).Date;
DateTime endOfWeek2 = endOfWeek.AddDays(8);
ServiceFacade.DoAnalysisServiceAsync(
s1 => s1.GetSupportConceptsWithConferenceDate(BeWoApp.LoggedOnUser.Employee.EmployeeOid, endOfWeek2),
ReloadConferenceDates);
}
private void InitTasks()
{
var test = 0;
while (BeWoApp.LoggedOnEmployee == null && test < 50)
{
Thread.Sleep(100);
test++;
}
if (BeWoApp.LoggedOnEmployee != null)
{
var rights = new List<UserRightType> { UserRightType.KalenderAnsehen };
_HasRightsToSeeAppointments = BeWoUtils.HasRight(UserRightType.KalenderAnsehen) || BeWoUtils.HasRight(UserRightType.ViewAll);
var r2 = rights;
r2.Add(UserRightType.KalenderMitarbeitertermineAnsehen);
var r3 = rights;
r3.Add(UserRightType.KalenderKliententermineAlleAnsehen);
var r5 = rights;
r5.Add(UserRightType.KalenderRessourcentermineAnsehen);
_IsAllowedToSeeMitarbeitertermine = r2.All(BeWoUtils.HasRight) || BeWoUtils.HasRight(UserRightType.ViewAll);
_IsAllowedToSeeCustomerAppointments = r3.All(BeWoUtils.HasRight) || BeWoUtils.HasRight(UserRightType.ViewAll);
_IsAllowedToSeeResourceAppointments = r5.All(BeWoUtils.HasRight) || BeWoUtils.HasRight(UserRightType.ViewAll);
if (_HasRightsToSeeAppointments && _IsAllowedToSeeMitarbeitertermine)
{
#if DEBUG
TestTermineAnlegenButton.Visibility = Visibility.Visible;
TestTermineLoeschenButton.Visibility = Visibility.Visible;
#endif
employeeFilterBox.Visibility = Visibility.Visible;
ServiceFacade.DoEmployeeServiceAsync(s => s.GetAllActiveEmployeesCompact(), cb =>
{
this.Dispatch(delegate
{
EmployeesForAppointmentView = cb.OrderBy(o => o.LastName + ", " + o.FirstName).ToList();
employeeFilterBox.SelectedItem = BeWoApp.CompactLoggedOnEmployee;
});
});
}
else
{
EmployeesForAppointmentView = new List<CompactEmployeeDC> { BeWoApp.CompactLoggedOnEmployee };
employeeFilterBox.SelectedItem = BeWoApp.CompactLoggedOnEmployee;
}
ShowAppointments(false);
LoadTasksAndAppointments(true, true);
}
}
private void UpdateInternalNews()
{
if (InternalNewsGrid != null)
@@ -845,6 +925,155 @@ namespace BeWo.View
RefreshInternalNews);
}
private void UpdatePanels(List<HomeViewPanelDC> panels)
{
if (panels == null || panels.Count == 0) return;
PanelHost.Children.Clear();
var dict = new Dictionary<HomeViewPanelType, DragDockPanel>()
{
{HomeViewPanelType.BeWoNewsPanel, PanelBeWoNews},
{HomeViewPanelType.BirthdatesPanel, PanelBirthdates},
{HomeViewPanelType.ConferenceDatesPanel, PanelConferenceDates},
{HomeViewPanelType.ExpiringSupportConceptsPanel, PanelExpiringSupportConcepts},
{HomeViewPanelType.InternalNewsPanel, PanelInternalNews},
{HomeViewPanelType.TasksPanel, PanelTasks}
};
//panels.Add(new HomeViewPanelDC { HeaderTitel = "TestTask", PanelType = HomeViewPanelType.TasksPanel });
//panels.Add(new HomeViewPanelDC { HeaderTitel = "TestNews", PanelType = HomeViewPanelType.BeWoNewsPanel });
//panels.Add(new HomeViewPanelDC { HeaderTitel = "TestDates", PanelType = HomeViewPanelType.ExpiringSupportConceptsPanel });
//panels.Add(new HomeViewPanelDC { HeaderTitel = "Test", PanelType = HomeViewPanelType.TasksPanel });
foreach (var panelDC in panels)
{
if (dict.ContainsKey(panelDC.PanelType))
{
var panel = dict[panelDC.PanelType];
PanelHost.Children.Add(panel);
if (panelDC.HeaderTitel == null) continue;
foreach (var child in ((StackPanel)panel.Header).Children)
{
if (child is TextBlock textBlock && (string)textBlock.Tag == "Titel")
{
textBlock.Text = panelDC.HeaderTitel;
}
}
}
else if (panelDC.PanelType == HomeViewPanelType.CustomReportPanel)
{
PanelHost.Children.Add(CreateReportPanel(panelDC.HeaderTitel, panelDC.Value));
}
else if (panelDC.PanelType == HomeViewPanelType.CustomXamlPanel)
{
PanelHost.Children.Add(null);
}
else
{
throw new ArgumentOutOfRangeException();
}
}
InitPanels(null);
}
private DragDockPanel CreateReportPanel(string title, string reportName)
{
var panel = new DragDockPanel()
{
Tag = "CustomReport",
Name = title,
Header = new StackPanel()
{
Orientation = Orientation.Horizontal,
Children =
{
new Image()
{
Source = new BitmapImage(new Uri(@"..\Ressources\Icons\ChartBarDisabled.png", UriKind.Relative)),
Stretch = Stretch.Fill,
StretchDirection = StretchDirection.Both
},
new TextBlock()
{
Text = title ?? "Bericht",
TextWrapping = TextWrapping.Wrap,
FontSize = 16,
Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#E0E0E0")),
VerticalAlignment = VerticalAlignment.Bottom,
Margin = new Thickness(5,0,0,5),
Tag = "Titel"
}
}
}
};
panel.Loaded += (s, e) => LoadReport(reportName, title, panel);
return panel;
}
private DragDockPanel CreateXamlPanel(string title, string xamlString)
{
var panel = new DragDockPanel()
{
Tag = "CustomReport",
Name = title,
Header = new StackPanel()
{
Orientation = Orientation.Horizontal,
Children =
{
new Image()
{
Source = new BitmapImage(new Uri(@"..\Ressources\Icons\ChartBarDisabled.png", UriKind.Relative)),
Stretch = Stretch.Fill,
StretchDirection = StretchDirection.Both
},
new TextBlock()
{
Text = title ?? "Bericht",
TextWrapping = TextWrapping.Wrap,
FontSize = 16,
Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#E0E0E0")),
VerticalAlignment = VerticalAlignment.Bottom,
Margin = new Thickness(5,0,0,5),
Tag = "Titel"
}
}
},
Content = XamlReader.Load(XmlReader.Create(xamlString))
};
return panel;
}
private void LoadReport(string reportName, string title, DragDockPanel panel)
{
ServiceFacade.DoReportServiceAsync(s => s.CreateCustomReport(BeWoApp.LoggedOnEmployee.EmployeeOid.Value, reportName), ms => SetReportControl(ms, title, panel));
}
private void SetReportControl(MemoryStream ms, string title, DragDockPanel panel)
{
this.Dispatch(
delegate
{
var grid = new Grid();
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
var ctrl = new DocumentPreviewControl
{
CommandBarStyle = CommandBarStyle.None
};
grid.Children.Add(ctrl);
panel.Content = grid;
BeWoUtils.ShowReportWindow(ms, title, ctrl);
});
}
private void RefreshInternalNews(List<NewsItemDC> news)
{
this.Dispatch(delegate
@@ -929,7 +1158,7 @@ namespace BeWo.View
}
return sp;
}
private UIElement CreateInternalNewsTeamControl(TeamNewsItemVM teamNewsItemVm, bool initExpand)
{
var sp = new StackPanel();
@@ -1107,81 +1336,6 @@ namespace BeWo.View
return grid;
}
private void InitLoginInfo()
{
DateTime endOfWeek = DateTime.Now.GetNext(DayOfWeek.Sunday).Date;
ServiceFacade.DoAnalysisServiceAsync(s1 => s1.GetLastLogins(BeWoApp.LoggedOnUser.LoginName), ReloadLogins);
}
private void InitNextConferenceDates()
{
DateTime endOfWeek = DateTime.Now.GetNext(DayOfWeek.Sunday).Date;
DateTime endOfWeek2 = endOfWeek.AddDays(8);
ServiceFacade.DoAnalysisServiceAsync(
s1 => s1.GetSupportConceptsWithConferenceDate(BeWoApp.LoggedOnUser.Employee.EmployeeOid, endOfWeek2),
ReloadConferenceDates);
}
private void InitTasks()
{
var test = 0;
while (BeWoApp.LoggedOnEmployee == null && test < 50)
{
Thread.Sleep(100);
test++;
}
if (BeWoApp.LoggedOnEmployee != null)
{
var rights = new List<UserRightType> { UserRightType.KalenderAnsehen };
_HasRightsToSeeAppointments = BeWoUtils.HasRight(UserRightType.KalenderAnsehen) || BeWoUtils.HasRight(UserRightType.ViewAll);
var r2 = rights;
r2.Add(UserRightType.KalenderMitarbeitertermineAnsehen);
var r3 = rights;
r3.Add(UserRightType.KalenderKliententermineAlleAnsehen);
var r5 = rights;
r5.Add(UserRightType.KalenderRessourcentermineAnsehen);
_IsAllowedToSeeMitarbeitertermine = r2.All(BeWoUtils.HasRight) || BeWoUtils.HasRight(UserRightType.ViewAll);
_IsAllowedToSeeCustomerAppointments = r3.All(BeWoUtils.HasRight) || BeWoUtils.HasRight(UserRightType.ViewAll);
_IsAllowedToSeeResourceAppointments = r5.All(BeWoUtils.HasRight) || BeWoUtils.HasRight(UserRightType.ViewAll);
if (_HasRightsToSeeAppointments && _IsAllowedToSeeMitarbeitertermine)
{
#if DEBUG
TestTermineAnlegenButton.Visibility = Visibility.Visible;
TestTermineLoeschenButton.Visibility = Visibility.Visible;
#endif
employeeFilterBox.Visibility = Visibility.Visible;
ServiceFacade.DoEmployeeServiceAsync(s => s.GetAllActiveEmployeesCompact(), cb =>
{
this.Dispatch(delegate
{
EmployeesForAppointmentView = cb.OrderBy(o => o.LastName + ", " + o.FirstName).ToList();
employeeFilterBox.SelectedItem = BeWoApp.CompactLoggedOnEmployee;
});
});
}
else
{
EmployeesForAppointmentView = new List<CompactEmployeeDC> { BeWoApp.CompactLoggedOnEmployee };
employeeFilterBox.SelectedItem = BeWoApp.CompactLoggedOnEmployee;
}
ShowAppointments(false);
LoadTasksAndAppointments(true, true);
}
}
private void BuildRecurringAppointments(List<SchedulerAppointmentDC> pRecurringAppointments, DateTime pStartDate, DateTime pEndDate)
{
var patternToExceptions = new List<RecurringAppointment>();
@@ -1458,42 +1612,31 @@ namespace BeWo.View
public void ReorderPanels()
{
List<string> order = BeWoApp.AppSettings.StartupPanelOrder;
if (order != null && order.Count > 0)
var save = BeWoApp.AppSettings.StartupPanelOrder;
var actual = PanelHost.Children.Cast<DragDockPanel>().Select(item => item.Name).ToList();
if (save == null || save.Count != actual.Count || actual.Except(save).Any()) return;
var panels = new Dictionary<string, DragDockPanel>();
foreach (var item in PanelHost.Children)
{
var panels = new Dictionary<string, DragDockPanel>();
foreach (object item in panelHost.Children)
{
var p = item as DragDockPanel;
panels.Add(p.Name, p);
}
panelHost.Children.Clear();
foreach (string item in order)
{
if (panels.ContainsKey(item))
{
DragDockPanel p = panels[item];
panelHost.AddPanel(p); // Children.Add(p);
panels.Remove(item);
}
}
foreach (DragDockPanel item in panels.Values)
{
panelHost.AddPanel(item);
}
var p = item as DragDockPanel;
panels.Add(p.Name, p);
}
PanelHost.Children.Clear();
save.DoForEach(x => PanelHost.AddPanel(panels[x]));
SetMaximizedPanel();
}
private void SetMaximizedPanel()
{
if (!String.IsNullOrEmpty(BeWoApp.AppSettings.StartupPanelMaximized))
if (!string.IsNullOrEmpty(BeWoApp.AppSettings.StartupPanelMaximized))
{
foreach (object item in panelHost.Children)
foreach (object item in PanelHost.Children)
{
var p = item as DragDockPanel;
if (BeWoApp.AppSettings.StartupPanelMaximized.Equals(p.Name))
@@ -1502,9 +1645,8 @@ namespace BeWo.View
foreach (DependencyObject child in objekts)
{
if (child is ToggleButton)
if (child is ToggleButton btn)
{
var btn = child as ToggleButton;
btn.IsChecked = true;
}
}

View File

@@ -11,7 +11,7 @@ namespace BeWo.Data.Entities
{
private HomeViewPanelType _PanelType;
private string _HeaderTitel;
private string _ReportName;
private string _Value;
public HomeViewPanel()
{
@@ -38,13 +38,13 @@ namespace BeWo.Data.Entities
}
}
public virtual string ReportName
public virtual string Value
{
get => _ReportName;
get => _Value;
set
{
if (AreDifferent(_ReportName, value))
_ReportName = value;
if (AreDifferent(_Value, value))
_Value = value;
}
}
}

View File

@@ -16,6 +16,6 @@
<property column="PanelType" type="BS.Shared.HomeViewPanelType, BS.Shared" name="PanelType" />
<property column="HeaderTitel" type="String" name="HeaderTitel" length="1024" />
<property column="ReportName" type="String" name="ReportName" length="1024" />
<property column="Value" type="String" name="Value" length="1024" />
</class>
</hibernate-mapping>

View File

@@ -0,0 +1,2 @@
ALTER TABLE `bewodemo`.`homeviewpanel`
CHANGE COLUMN `ReportName` `Value` VARCHAR(1024) NULL DEFAULT NULL ;

View File

@@ -70,5 +70,7 @@ namespace BeWo.Report
public abstract XtraReport CreateSbdLeistungsnachweisForSingleCustomerReport(long customerOid, int month, int year, long orgaOid, long empOid, long serviceCategoryOid, int startDay, int endDay);
}
public abstract XtraReport CreateCustomReport(long employeeOid, String reportName);
}
}

View File

@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Data;
@@ -605,5 +606,14 @@ namespace BeWo.Report
return report as XtraReport;
}
public override XtraReport CreateCustomReport(long employeeOid, String reportName)
{
var report = FindReportImp<QueryRO>(null, reportName);
if (report == null)
{
return new XtraReport();
}
return report as XtraReport;
}
}
}

View File

@@ -41,7 +41,12 @@ namespace ReportingService.ServiceContracts
[FaultContract(typeof(BeWoFault))]
[OperationContract]
String SendTimeSheetMail(TimeSheetStatusItemDC item, bool saveMailToDatabase);
string SendTimeSheetMail(TimeSheetStatusItemDC item, bool saveMailToDatabase);
}
[FaultContract(typeof(BeWoFault))]
[OperationContract]
MemoryStream CreateCustomReport(long employeeOid, string reportName);
}
}

View File

@@ -106,6 +106,13 @@ namespace ReportingService.ServiceImplementations
}
}
public MemoryStream CreateCustomReport(long employeeOid, String reportName)
{
var reportCreator = GetReportCreator();
return CreateReportStream(reportCreator.CreateCustomReport(employeeOid, reportName));
}
private static MemoryStream CreateReportStream(XtraReport pReport)
{
pReport.CreateDocument();

View File

@@ -16,7 +16,7 @@ namespace BeWo.Service.DCEntityMapper
pDataContract.Oid = pEntity.Oid;
pDataContract.HeaderTitel = pEntity.HeaderTitel;
pDataContract.PanelType = pEntity.PanelType;
pDataContract.ReportName = pEntity.ReportName;
pDataContract.Value = pEntity.Value;
return pDataContract;
}
@@ -26,7 +26,7 @@ namespace BeWo.Service.DCEntityMapper
pEntity.Oid = pDataContract.Oid;
pEntity.HeaderTitel = pDataContract.HeaderTitel;
pEntity.PanelType = pDataContract.PanelType;
pEntity.ReportName = pDataContract.ReportName;
pEntity.Value = pDataContract.Value;
return pEntity;
}

View File

@@ -1026,6 +1026,7 @@ namespace BS.Shared
BirthdatesPanel,
InternalNewsPanel,
BeWoNewsPanel,
CustomReportPanel
CustomReportPanel,
CustomXamlPanel
}
}

View File

@@ -2,19 +2,15 @@
namespace BS.Shared.DataContracts
{
[DataContract]
public class HomeViewPanelDC : IDataContract
{
[DataMember]
public long? Oid { get; set; }
[DataContract]
public class HomeViewPanelDC : IDataContract
{
[DataMember] public long? Oid { get; set; }
[DataMember]
public HomeViewPanelType PanelType { get; set; }
[DataMember] public HomeViewPanelType PanelType { get; set; }
[DataMember]
public string HeaderTitel { get; set; }
[DataMember] public string HeaderTitel { get; set; }
[DataMember]
public string ReportName { get; set; }
}
[DataMember] public string Value { get; set; }
}
}