From d2bab6e2c2f6ebcd333989a18c1c18467652d7a6 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Tue, 17 Sep 2024 08:04:26 +0200 Subject: [PATCH 1/4] only allow saving if ETA time is greater than ETD time when shifting --- src/BreCalClient/EditShipcallControl.xaml.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/BreCalClient/EditShipcallControl.xaml.cs b/src/BreCalClient/EditShipcallControl.xaml.cs index 65ae975..745151b 100644 --- a/src/BreCalClient/EditShipcallControl.xaml.cs +++ b/src/BreCalClient/EditShipcallControl.xaml.cs @@ -222,6 +222,8 @@ namespace BreCalClient isEnabled &= (this.datePickerETD.Value.Value > DateTime.Now); if (this.datePickerETA.Value.HasValue) isEnabled &= (this.datePickerETA.Value.Value > DateTime.Now); + if (this.datePickerETA.Value.HasValue && this.datePickerETD.Value.HasValue) + isEnabled &= (this.datePickerETA.Value.Value > this.datePickerETD.Value.Value); break; } } From 081995990f2bab337b5e526f68f238b930d5a51b Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Tue, 17 Sep 2024 08:26:39 +0200 Subject: [PATCH 2/4] Only allow editing (OK-Button enabled) for the assigned owner of the times record --- src/BreCalClient/EditTimesControl.xaml.cs | 1 + src/BreCalClient/EditTimesTerminalControl.xaml.cs | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/BreCalClient/EditTimesControl.xaml.cs b/src/BreCalClient/EditTimesControl.xaml.cs index b6c23a0..8deaae6 100644 --- a/src/BreCalClient/EditTimesControl.xaml.cs +++ b/src/BreCalClient/EditTimesControl.xaml.cs @@ -236,6 +236,7 @@ namespace BreCalClient if (this.Times.ParticipantId != App.Participant.Id) { this.buttonFixedOrder.IsEnabled = false; + this.buttonOK.IsEnabled = false; return; // if this is not "my" entry, there is no editing! } diff --git a/src/BreCalClient/EditTimesTerminalControl.xaml.cs b/src/BreCalClient/EditTimesTerminalControl.xaml.cs index 6e9af6a..92732f4 100644 --- a/src/BreCalClient/EditTimesTerminalControl.xaml.cs +++ b/src/BreCalClient/EditTimesTerminalControl.xaml.cs @@ -208,7 +208,11 @@ namespace BreCalClient private void EnableControls() { - if (this.Times.ParticipantId != App.Participant.Id) return; + if (this.Times.ParticipantId != App.Participant.Id) + { + this.buttonOK.IsEnabled = false; + return; + } this.datePickerOperationStart.IsEnabled = ShipcallModel.Shipcall?.Type == ShipcallType.Arrival; this.datePickerOperationStart_End.IsEnabled = ShipcallModel.Shipcall?.Type == ShipcallType.Arrival; From 470110ef5bb3ddca49ba233741c3f159accbb40e Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Tue, 17 Sep 2024 08:47:43 +0200 Subject: [PATCH 3/4] Ensure both or none of the tidal window times are set when leaving the agency dialogs --- src/BreCalClient/EditTimesAgencyIncomingControl.xaml.cs | 6 ++++++ src/BreCalClient/EditTimesAgencyOutgoingControl.xaml.cs | 6 ++++++ src/BreCalClient/EditTimesAgencyShiftingControl.xaml.cs | 6 ++++++ src/BreCalClient/Resources/Resources.Designer.cs | 9 +++++++++ src/BreCalClient/Resources/Resources.de.resx | 3 +++ src/BreCalClient/Resources/Resources.resx | 3 +++ 6 files changed, 33 insertions(+) diff --git a/src/BreCalClient/EditTimesAgencyIncomingControl.xaml.cs b/src/BreCalClient/EditTimesAgencyIncomingControl.xaml.cs index b1eba3b..e259adf 100644 --- a/src/BreCalClient/EditTimesAgencyIncomingControl.xaml.cs +++ b/src/BreCalClient/EditTimesAgencyIncomingControl.xaml.cs @@ -133,6 +133,12 @@ namespace BreCalClient return false; } + if((this.datePickerTidalWindowFrom.Value.HasValue && !this.datePickerTidalWindowTo.Value.HasValue) || (!this.datePickerTidalWindowFrom.Value.HasValue && this.datePickerTidalWindowTo.Value.HasValue)) + { + message = BreCalClient.Resources.Resources.textTidalBothValues; + return false; + } + return true; } diff --git a/src/BreCalClient/EditTimesAgencyOutgoingControl.xaml.cs b/src/BreCalClient/EditTimesAgencyOutgoingControl.xaml.cs index 7258006..615236a 100644 --- a/src/BreCalClient/EditTimesAgencyOutgoingControl.xaml.cs +++ b/src/BreCalClient/EditTimesAgencyOutgoingControl.xaml.cs @@ -143,6 +143,12 @@ namespace BreCalClient return false; } + if ((this.datePickerTidalWindowFrom.Value.HasValue && !this.datePickerTidalWindowTo.Value.HasValue) || (!this.datePickerTidalWindowFrom.Value.HasValue && this.datePickerTidalWindowTo.Value.HasValue)) + { + message = BreCalClient.Resources.Resources.textTidalBothValues; + return false; + } + return true; } diff --git a/src/BreCalClient/EditTimesAgencyShiftingControl.xaml.cs b/src/BreCalClient/EditTimesAgencyShiftingControl.xaml.cs index e8398ce..aa34817 100644 --- a/src/BreCalClient/EditTimesAgencyShiftingControl.xaml.cs +++ b/src/BreCalClient/EditTimesAgencyShiftingControl.xaml.cs @@ -151,6 +151,12 @@ namespace BreCalClient return false; } + if ((this.datePickerTidalWindowFrom.Value.HasValue && !this.datePickerTidalWindowTo.Value.HasValue) || (!this.datePickerTidalWindowFrom.Value.HasValue && this.datePickerTidalWindowTo.Value.HasValue)) + { + message = BreCalClient.Resources.Resources.textTidalBothValues; + return false; + } + return true; } diff --git a/src/BreCalClient/Resources/Resources.Designer.cs b/src/BreCalClient/Resources/Resources.Designer.cs index aeada56..2cc1e8c 100644 --- a/src/BreCalClient/Resources/Resources.Designer.cs +++ b/src/BreCalClient/Resources/Resources.Designer.cs @@ -1208,6 +1208,15 @@ namespace BreCalClient.Resources { } } + /// + /// Looks up a localized string similar to For a tidal window both values must be set. + /// + public static string textTidalBothValues { + get { + return ResourceManager.GetString("textTidalBothValues", resourceCulture); + } + } + /// /// Looks up a localized string similar to Tidal window. /// diff --git a/src/BreCalClient/Resources/Resources.de.resx b/src/BreCalClient/Resources/Resources.de.resx index 18947eb..cdd4e08 100644 --- a/src/BreCalClient/Resources/Resources.de.resx +++ b/src/BreCalClient/Resources/Resources.de.resx @@ -541,4 +541,7 @@ Zeit Reviereintritt liegt in der Vergangenheit + + Für das Tidenfenster müssen beide Zeiten angegeben werden + \ No newline at end of file diff --git a/src/BreCalClient/Resources/Resources.resx b/src/BreCalClient/Resources/Resources.resx index 14cf0f9..28af8fe 100644 --- a/src/BreCalClient/Resources/Resources.resx +++ b/src/BreCalClient/Resources/Resources.resx @@ -487,6 +487,9 @@ Terminal + + For a tidal window both values must be set + Tidal window From 8c23df8cdaebc96b1b0d800de8c91588753d0820 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Tue, 17 Sep 2024 09:40:36 +0200 Subject: [PATCH 4/4] Added extra too far in the future validation on the client-side --- src/BreCalClient/EditShipcallControl.xaml.cs | 4 ++++ .../EditTimesAgencyIncomingControl.xaml.cs | 6 ++++++ .../EditTimesAgencyOutgoingControl.xaml.cs | 6 ++++++ .../EditTimesAgencyShiftingControl.xaml.cs | 7 +++++++ src/BreCalClient/EditTimesControl.xaml.cs | 10 +++++++++- src/BreCalClient/EditTimesTerminalControl.xaml.cs | 6 ++++++ src/BreCalClient/Extensions.cs | 13 +++++++++++-- src/BreCalClient/Resources/Resources.Designer.cs | 9 +++++++++ src/BreCalClient/Resources/Resources.de.resx | 3 +++ src/BreCalClient/Resources/Resources.resx | 3 +++ 10 files changed, 64 insertions(+), 3 deletions(-) diff --git a/src/BreCalClient/EditShipcallControl.xaml.cs b/src/BreCalClient/EditShipcallControl.xaml.cs index 745151b..fd42086 100644 --- a/src/BreCalClient/EditShipcallControl.xaml.cs +++ b/src/BreCalClient/EditShipcallControl.xaml.cs @@ -207,12 +207,14 @@ namespace BreCalClient isEnabled &= this.datePickerETD.Value.HasValue; if(this.datePickerETD.Value.HasValue) isEnabled &= (this.datePickerETD.Value.Value > DateTime.Now); + isEnabled &= !this.datePickerETD.Value.IsTooFar(); break; case ShipcallType.Arrival: isEnabled &= this.comboBoxArrivalBerth.SelectedItem != null; isEnabled &= this.datePickerETA.Value.HasValue; if(this.datePickerETA.Value.HasValue) isEnabled &= (this.datePickerETA.Value.Value > DateTime.Now); + isEnabled &= !this.datePickerETA.Value.IsTooFar(); break; case ShipcallType.Shifting: isEnabled &= ((this.comboBoxDepartureBerth.SelectedItem != null) && (this.comboBoxArrivalBerth.SelectedItem != null)); @@ -224,6 +226,8 @@ namespace BreCalClient isEnabled &= (this.datePickerETA.Value.Value > DateTime.Now); if (this.datePickerETA.Value.HasValue && this.datePickerETD.Value.HasValue) isEnabled &= (this.datePickerETA.Value.Value > this.datePickerETD.Value.Value); + isEnabled &= !this.datePickerETD.Value.IsTooFar(); + isEnabled &= !this.datePickerETA.Value.IsTooFar(); break; } } diff --git a/src/BreCalClient/EditTimesAgencyIncomingControl.xaml.cs b/src/BreCalClient/EditTimesAgencyIncomingControl.xaml.cs index e259adf..db03b11 100644 --- a/src/BreCalClient/EditTimesAgencyIncomingControl.xaml.cs +++ b/src/BreCalClient/EditTimesAgencyIncomingControl.xaml.cs @@ -139,6 +139,12 @@ namespace BreCalClient return false; } + if(this.datePickerETA.Value.IsTooFar() || this.datePickerETA_End.Value.IsTooFar() || this.datePickerTidalWindowFrom.Value.IsTooFar() || this.datePickerTidalWindowTo.Value.IsTooFar()) + { + message = BreCalClient.Resources.Resources.textTooFarInTheFuture; + return false; + } + return true; } diff --git a/src/BreCalClient/EditTimesAgencyOutgoingControl.xaml.cs b/src/BreCalClient/EditTimesAgencyOutgoingControl.xaml.cs index 615236a..b05ec49 100644 --- a/src/BreCalClient/EditTimesAgencyOutgoingControl.xaml.cs +++ b/src/BreCalClient/EditTimesAgencyOutgoingControl.xaml.cs @@ -149,6 +149,12 @@ namespace BreCalClient return false; } + if (this.datePickerETD.Value.IsTooFar() || this.datePickerETD_End.Value.IsTooFar() || this.datePickerTidalWindowFrom.Value.IsTooFar() || this.datePickerTidalWindowTo.Value.IsTooFar()) + { + message = BreCalClient.Resources.Resources.textTooFarInTheFuture; + return false; + } + return true; } diff --git a/src/BreCalClient/EditTimesAgencyShiftingControl.xaml.cs b/src/BreCalClient/EditTimesAgencyShiftingControl.xaml.cs index aa34817..fdf8619 100644 --- a/src/BreCalClient/EditTimesAgencyShiftingControl.xaml.cs +++ b/src/BreCalClient/EditTimesAgencyShiftingControl.xaml.cs @@ -157,6 +157,13 @@ namespace BreCalClient return false; } + if (this.datePickerETA.Value.IsTooFar() || this.datePickerETA_End.Value.IsTooFar() || this.datePickerTidalWindowFrom.Value.IsTooFar() || this.datePickerTidalWindowTo.Value.IsTooFar() || + this.datePickerETD.Value.IsTooFar() || this.datePickerETD_End.Value.IsTooFar()) + { + message = BreCalClient.Resources.Resources.textTooFarInTheFuture; + return false; + } + return true; } diff --git a/src/BreCalClient/EditTimesControl.xaml.cs b/src/BreCalClient/EditTimesControl.xaml.cs index 8deaae6..3ce8417 100644 --- a/src/BreCalClient/EditTimesControl.xaml.cs +++ b/src/BreCalClient/EditTimesControl.xaml.cs @@ -5,6 +5,7 @@ using BreCalClient.misc.Model; using System; +using System.Runtime.Serialization; using System.Windows; using System.Windows.Media.Imaging; using Xceed.Wpf.Toolkit; @@ -125,7 +126,14 @@ namespace BreCalClient { message = BreCalClient.Resources.Resources.textZoneEntryInThePast; return false; - } + } + + if(this.datePickerATA.Value.IsTooFar() || this.datePickerATD.Value.IsTooFar() || this.datePickerETABerth.Value.IsTooFar() || this.datePickerETABerth_End.Value.IsTooFar() || + this.datePickerETDBerth.Value.IsTooFar() || this.datePickerETDBerth_End.Value.IsTooFar() || this.datePickerLockTime.Value.IsTooFar() || this.datePickerZoneEntry.Value.IsTooFar()) + { + message = BreCalClient.Resources.Resources.textTooFarInTheFuture; + return false; + } return true; } diff --git a/src/BreCalClient/EditTimesTerminalControl.xaml.cs b/src/BreCalClient/EditTimesTerminalControl.xaml.cs index 92732f4..1b43b18 100644 --- a/src/BreCalClient/EditTimesTerminalControl.xaml.cs +++ b/src/BreCalClient/EditTimesTerminalControl.xaml.cs @@ -144,6 +144,12 @@ namespace BreCalClient return false; } + if(this.datePickerOperationEnd.Value.IsTooFar() || this.datePickerOperationEnd_End.Value.IsTooFar() || this.datePickerOperationStart.Value.IsTooFar() || this.datePickerOperationStart_End.Value.IsTooFar()) + { + message = BreCalClient.Resources.Resources.textTooFarInTheFuture; + return false; + } + return true; } diff --git a/src/BreCalClient/Extensions.cs b/src/BreCalClient/Extensions.cs index f341598..54fedb3 100644 --- a/src/BreCalClient/Extensions.cs +++ b/src/BreCalClient/Extensions.cs @@ -3,10 +3,8 @@ // using BreCalClient.misc.Model; -using Newtonsoft.Json.Linq; using System; using System.ComponentModel; -using System.Runtime.CompilerServices; namespace BreCalClient { @@ -60,6 +58,17 @@ namespace BreCalClient #region public helper + public static bool IsTooFar(this DateTime datetime) + { + return datetime > DateTime.Now.AddYears(1); + } + + public static bool IsTooFar(this DateTime? datetime) + { + if (datetime == null) return false; + return datetime > DateTime.Now.AddYears(1); + } + public static bool IsTypeFlagSet(this Participant participant, ParticipantType flag) { return (participant.Type & (uint)flag) != 0; diff --git a/src/BreCalClient/Resources/Resources.Designer.cs b/src/BreCalClient/Resources/Resources.Designer.cs index 2cc1e8c..3537740 100644 --- a/src/BreCalClient/Resources/Resources.Designer.cs +++ b/src/BreCalClient/Resources/Resources.Designer.cs @@ -1253,6 +1253,15 @@ namespace BreCalClient.Resources { } } + /// + /// Looks up a localized string similar to A time value is too far in the future. + /// + public static string textTooFarInTheFuture { + get { + return ResourceManager.GetString("textTooFarInTheFuture", resourceCulture); + } + } + /// /// Looks up a localized string similar to Set as a fixed order. /// diff --git a/src/BreCalClient/Resources/Resources.de.resx b/src/BreCalClient/Resources/Resources.de.resx index cdd4e08..5cf59e7 100644 --- a/src/BreCalClient/Resources/Resources.de.resx +++ b/src/BreCalClient/Resources/Resources.de.resx @@ -544,4 +544,7 @@ Für das Tidenfenster müssen beide Zeiten angegeben werden + + Eine Zeiteingabe ist zu weit in der Zukunft + \ No newline at end of file diff --git a/src/BreCalClient/Resources/Resources.resx b/src/BreCalClient/Resources/Resources.resx index 28af8fe..0b1de64 100644 --- a/src/BreCalClient/Resources/Resources.resx +++ b/src/BreCalClient/Resources/Resources.resx @@ -502,6 +502,9 @@ to + + A time value is too far in the future + Set as a fixed order