Index: ActiviteitenOpvolging/ActiviteitenOpvolging/screens/employee/IEmployeeUserControl.vb =================================================================== diff -u -r1726 -r1727 --- ActiviteitenOpvolging/ActiviteitenOpvolging/screens/employee/IEmployeeUserControl.vb (.../IEmployeeUserControl.vb) (revision 1726) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/screens/employee/IEmployeeUserControl.vb (.../IEmployeeUserControl.vb) (revision 1727) @@ -1,4 +1,5 @@ Public Interface IEmployeeUserControl + inherits IRefreshableUserControl ''' ''' Triggered when the selected activity changes. ''' Index: ActiviteitenOpvolging/ActiviteitenOpvolging/ActiviteitenOpvolgingForm.resx =================================================================== diff -u -r1681 -r1727 --- ActiviteitenOpvolging/ActiviteitenOpvolging/ActiviteitenOpvolgingForm.resx (.../ActiviteitenOpvolgingForm.resx) (revision 1681) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/ActiviteitenOpvolgingForm.resx (.../ActiviteitenOpvolgingForm.resx) (revision 1727) @@ -117,4 +117,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + \ No newline at end of file Index: ActiviteitenOpvolging/ActiviteitenOpvolging/ActiviteitenOpvolgingForm.Designer.vb =================================================================== diff -u -r1725 -r1727 --- ActiviteitenOpvolging/ActiviteitenOpvolging/ActiviteitenOpvolgingForm.Designer.vb (.../ActiviteitenOpvolgingForm.Designer.vb) (revision 1725) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/ActiviteitenOpvolgingForm.Designer.vb (.../ActiviteitenOpvolgingForm.Designer.vb) (revision 1727) @@ -22,12 +22,13 @@ 'Do not modify it using the code editor. _ Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() Me.DatagridViewControlsFlowLayoutPanel = New System.Windows.Forms.FlowLayoutPanel() Me.GridLabel = New System.Windows.Forms.Label() - Me.RefreshButton = New System.Windows.Forms.Button() Me.RefreshTimeLabel = New System.Windows.Forms.Label() Me.RefreshFailedLabel = New System.Windows.Forms.Label() Me.EmployeesControlsFlowLayoutPanel = New System.Windows.Forms.FlowLayoutPanel() + Me.RefreshTimer = New System.Windows.Forms.Timer(Me.components) Me.SuspendLayout ' 'DatagridViewControlsFlowLayoutPanel @@ -51,34 +52,25 @@ Me.GridLabel.TabIndex = 2 Me.GridLabel.Text = "Grid label" ' - 'RefreshButton - ' - Me.RefreshButton.Location = New System.Drawing.Point(696, 9) - Me.RefreshButton.Name = "RefreshButton" - Me.RefreshButton.Size = New System.Drawing.Size(75, 23) - Me.RefreshButton.TabIndex = 3 - Me.RefreshButton.Text = "Refresh" - Me.RefreshButton.UseVisualStyleBackColor = true - ' 'RefreshTimeLabel ' Me.RefreshTimeLabel.AutoSize = true - Me.RefreshTimeLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0,Byte)) - Me.RefreshTimeLabel.Location = New System.Drawing.Point(1203, 16) + Me.RefreshTimeLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 12!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0,Byte)) + Me.RefreshTimeLabel.Location = New System.Drawing.Point(1174, 18) Me.RefreshTimeLabel.Name = "RefreshTimeLabel" - Me.RefreshTimeLabel.Size = New System.Drawing.Size(0, 16) + Me.RefreshTimeLabel.Size = New System.Drawing.Size(0, 20) Me.RefreshTimeLabel.TabIndex = 4 ' 'RefreshFailedLabel ' Me.RefreshFailedLabel.AutoSize = true - Me.RefreshFailedLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0,Byte)) + Me.RefreshFailedLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 12!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0,Byte)) Me.RefreshFailedLabel.ForeColor = System.Drawing.Color.Maroon - Me.RefreshFailedLabel.Location = New System.Drawing.Point(969, 16) + Me.RefreshFailedLabel.Location = New System.Drawing.Point(807, 18) Me.RefreshFailedLabel.Name = "RefreshFailedLabel" - Me.RefreshFailedLabel.Size = New System.Drawing.Size(228, 16) + Me.RefreshFailedLabel.Size = New System.Drawing.Size(361, 20) Me.RefreshFailedLabel.TabIndex = 5 - Me.RefreshFailedLabel.Text = "Refresh failed. Latest refresh at:" + Me.RefreshFailedLabel.Text = "Refresh failed. Latest successful refresh at:" Me.RefreshFailedLabel.Visible = false ' 'EmployeesControlsFlowLayoutPanel @@ -91,6 +83,9 @@ Me.EmployeesControlsFlowLayoutPanel.Size = New System.Drawing.Size(1240, 310) Me.EmployeesControlsFlowLayoutPanel.TabIndex = 6 ' + 'RefreshTimer + ' + ' 'ActiviteitenOpvolgingForm ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6!, 13!) @@ -99,7 +94,6 @@ Me.Controls.Add(Me.EmployeesControlsFlowLayoutPanel) Me.Controls.Add(Me.RefreshFailedLabel) Me.Controls.Add(Me.RefreshTimeLabel) - Me.Controls.Add(Me.RefreshButton) Me.Controls.Add(Me.GridLabel) Me.Controls.Add(Me.DatagridViewControlsFlowLayoutPanel) Me.Name = "ActiviteitenOpvolgingForm" @@ -111,8 +105,8 @@ Friend WithEvents DatagridViewControlsFlowLayoutPanel As FlowLayoutPanel Friend WithEvents GridLabel As Label - Friend WithEvents RefreshButton As Button Friend WithEvents RefreshTimeLabel As Label Friend WithEvents RefreshFailedLabel As Label Friend WithEvents EmployeesControlsFlowLayoutPanel As FlowLayoutPanel + Friend WithEvents RefreshTimer As Timer End Class Index: ActiviteitenOpvolging/ActiviteitenOpvolging/domain/classes/implementations/Activity.vb =================================================================== diff -u -r1725 -r1727 --- ActiviteitenOpvolging/ActiviteitenOpvolging/domain/classes/implementations/Activity.vb (.../Activity.vb) (revision 1725) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/domain/classes/implementations/Activity.vb (.../Activity.vb) (revision 1727) @@ -4,11 +4,12 @@ Public Property QuantityToProduce As Integer Implements IActivity.QuantityToProduce Public Property Label As String Implements IActivity.Label Public Property Status As ActivityStateEnum Implements IActivity.Status - Public Property User As String Implements IActivity.User Public Property IsReadOnly As Boolean Implements IActivity.IsReadOnly Public Property StartBeforeTimestamp As DateTime Implements IActivity.StartBeforeTimestamp Public Property StartAlmostTimeStamp As DateTime Implements IActivity.StartAlmostTimeStamp Public Property StartTimeStamp As DateTime Implements IActivity.StartTimeStamp + Public Property EmployeeInitials As String Implements IActivity.EmployeeInitials + Public Property WorkItem As IWorkItem Implements IActivity.WorkItem End Class Index: ActiviteitenOpvolging/ActiviteitenOpvolging/ActiviteitenOpvolgingForm.vb =================================================================== diff -u -r1726 -r1727 --- ActiviteitenOpvolging/ActiviteitenOpvolging/ActiviteitenOpvolgingForm.vb (.../ActiviteitenOpvolgingForm.vb) (revision 1726) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/ActiviteitenOpvolgingForm.vb (.../ActiviteitenOpvolgingForm.vb) (revision 1727) @@ -29,12 +29,40 @@ 'Load the user controls with the employees. LoadEmployeeUserControls() + + 'Load all the data. Not done with the general method, because we want to catch the exceptions. + RefreshAllData() + + 'Set the timer's value in miliseconds. + RefreshTimer.Interval = ConfigsLoader.RefreshIntervalSeconds * 1000 + 'Start the times. + RefreshTimer.Start() Catch ex As Exception MessageBox.Show(ex.Message, "An error occured...", MessageBoxButtons.OK, MessageBoxIcon.Error) Application.Exit() End Try End Sub + 'Refreshes all data. If fails, updates label with last timestamp of refresh. + Private Sub RefreshAllData() + dim allSuccessfulRefresh = RefreshUserGridsData() + allSuccessfulRefresh = allSuccessfulRefresh And RefreshEmployeesData() + 'Check if refresh was successful. + If allSuccessfulRefresh Then + 'Update latest refresh time label with current time. + RefreshTimeLabel.Text = TimeOfDay.ToString("HH:mm") + RefreshFailedLabel.Visible = False + Else + RefreshFailedLabel.Visible = True + End If + End Sub + + 'Refreshes at specified interval. + Private Sub RefreshTimer_Tick(sender As Object, e As EventArgs) Handles RefreshTimer.Tick + 'Refresh all the data. + RefreshAllData() + End Sub + #Region "Data grids" ''' @@ -56,8 +84,6 @@ 'Add to layout panel. DatagridViewControlsFlowLayoutPanel.Controls.Add(userControl) Next - 'Refresh all user grids. - RefreshUserGridsData() Catch ex As Exception Throw New Exception($"Could not load data grid user controls.{vbNewLine}{ex.Message}") End Try @@ -93,32 +119,17 @@ Return _selectedActivity End Function - Private Sub RefreshButton_Click(sender As Object, e As EventArgs) Handles RefreshButton.Click - RefreshButton.Enabled = False - RefreshUserGridsData() - RefreshButton.Enabled = True - End Sub - ''' - ''' Try to reshresh all user grids and register time of latest refresh. + ''' Try to refresh all user grids and register time of latest refresh. ''' - Private Sub RefreshUserGridsData() - Dim allSuccessfulRefresh As Boolean + Private Function RefreshUserGridsData() As Boolean Try 'Refresh every user control. Register whether or not all refreshes were successful. - allSuccessfulRefresh = _datagridViewUserControls.All(Function(userControl) userControl.RefreshData()) + Return _datagridViewUserControls.All(Function(userControl) userControl.RefreshData()) Catch ex As Exception - allSuccessfulRefresh = False + Return False End Try - 'Check if refresh was successful. - If allSuccessfulRefresh Then - 'Update latest refresh time label with current time. - RefreshTimeLabel.Text = TimeOfDay.ToString("HH:mm") - RefreshFailedLabel.Visible = False - Else - RefreshFailedLabel.Visible = True - End If - End Sub + End Function #End Region #Region "Employees" @@ -146,6 +157,19 @@ End Try End Sub + ''' + ''' Refresh the employee controls with employee data. + ''' + ''' + Private Function RefreshEmployeesData() As Boolean + Try + 'Refresh every user control. Register whether or not all refreshes were successful. + Return _employeeUserControls.All(Function(userControl) userControl.RefreshData()) + Catch ex As Exception + Return False + End Try + End Function + ''' Public Function GetAllEmployees() As ICollection(Of IEmployee) Implements IEmployeesMainForm.GetAllEmployees Return _domainController.GetAvailableEmployees() Index: ActiviteitenOpvolging/ActiviteitenOpvolging/screens/employee/EmployeeUserControl.vb =================================================================== diff -u -r1726 -r1727 --- ActiviteitenOpvolging/ActiviteitenOpvolging/screens/employee/EmployeeUserControl.vb (.../EmployeeUserControl.vb) (revision 1726) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/screens/employee/EmployeeUserControl.vb (.../EmployeeUserControl.vb) (revision 1727) @@ -61,6 +61,31 @@ e.Graphics.DrawRectangle(New Pen(borderColor, borderThickness), borderRectangle) End Sub + ''' + ''' Switch to another user control on the screen. + ''' + ''' Must be a refreshable user control + ''' + Private Sub SwitchUserControl(Of T As {IRefreshableUserControl, UserControl})(userControl As T) + 'Set current user control. + _currentUserControl = userControl + 'Remove the current user control from the screen. + UserControlPanel.Controls.Clear() + 'Set the properties of the user control. + With userControl + 'Make it exactly as big as the panel it will go into. + .Size = UserControlPanel.Size + End With + 'Add it onto the panel. + UserControlPanel.Controls.Add(userControl) + End Sub + + ''' + Public Function RefreshData() As Boolean Implements IRefreshableUserControl.RefreshData + 'Update the current user control. + Return _currentUserControl.RefreshData() + End Function + #Region "Employee picking" ''' Public Function GetAllEmployees() As ICollection(Of IEmployee) Implements IEmployeePickerParentUserControl.GetAllEmployees @@ -127,7 +152,7 @@ ''' Public Function GetCurrentlySelectedActivity() As IActivity Implements IEmployeeDetailParentUserControl.GetCurrentlySelectedActivity - Return _parentForm.GetCurrentlySelectedActivity() + Return _parentForm.GetCurrentlySelectedActivity() End Function ''' @@ -146,23 +171,4 @@ End Sub #End Region - ''' - ''' Switch to another user control on the screen. - ''' - ''' Must be a refreshable user control - ''' - Private Sub SwitchUserControl(Of T As {IRefreshableUserControl, UserControl})(userControl As T) - 'Set current user control. - _currentUserControl = userControl - 'Remove the current user control from the screen. - UserControlPanel.Controls.Clear() - 'Set the properties of the user control. - With userControl - 'Make it exactly as big as the panel it will go into. - .Size = UserControlPanel.Size - End With - 'Add it onto the panel. - UserControlPanel.Controls.Add(userControl) - End Sub - End Class