From ad7417f03c66631eb9c07f9c90ea96625bb35d55 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Sat, 17 Mar 2018 11:40:16 +0000 Subject: [PATCH] Version 5.0.3, Validierung und die neue "Copy" Funktion --- .../ENI2/ENI2/Controls/LocodeControl.xaml.cs | 15 +- ENI-2/ENI2/ENI2/DetailBaseControl.cs | 10 ++ ENI-2/ENI2/ENI2/DetailRootControl.xaml.cs | 55 ++++++- .../OverViewDetailControl.xaml | 2 +- .../OverViewDetailControl.xaml.cs | 2 +- ENI-2/ENI2/ENI2/ENI2.csproj | 14 +- .../EditControls/CopyDeclarationDialog.xaml | 65 ++++++++ .../CopyDeclarationDialog.xaml.cs | 155 ++++++++++++++++++ .../EditPortOfCallLast30DaysDialog.xaml | 6 +- .../ENI2/EditControls/NewWithIdDialog.xaml | 2 +- .../ENI2/ENI2/EditControls/VisitIdDialog.xaml | 2 +- ENI-2/ENI2/ENI2/MainWindow.xaml.cs | 4 + .../ENI2/Properties/Resources.Designer.cs | 39 +++++ ENI-2/ENI2/ENI2/Properties/Resources.resx | 12 ++ ENI-2/ENI2/ENI2/Resources/id_card_add.ico | Bin 0 -> 26694 bytes ENI-2/ENI2/ENI2/Resources/id_card_new.ico | Bin 0 -> 26694 bytes ENI-2/ENI2/ENI2/Resources/id_cards.ico | Bin 0 -> 26694 bytes Stundensheet.xlsx | Bin 36705 -> 36831 bytes nsw/Source/bsmd.database/BPOL.cs | 16 ++ nsw/Source/bsmd.database/DatabaseEntity.cs | 13 +- nsw/Source/bsmd.database/HAZ.cs | 39 ++++- nsw/Source/bsmd.database/IBCPosition.cs | 7 +- nsw/Source/bsmd.database/IMDGPosition.cs | 32 +++- .../LastTenPortFacilitiesCalled.cs | 12 +- .../bsmd.database/MARPOL_Annex_I_Position.cs | 9 +- nsw/Source/bsmd.database/MDH.cs | 28 ++++ nsw/Source/bsmd.database/Message.cs | 20 +++ nsw/Source/bsmd.database/NOA_NOD.cs | 16 ++ .../bsmd.database/PortOfCallLast30Days.cs | 16 ++ .../Properties/AssemblyProductInfo.cs | 2 +- .../Properties/AssemblyProjectInfo.cs | 2 +- nsw/Source/bsmd.database/SEC.cs | 21 +++ nsw/Source/bsmd.database/WAS.cs | 21 +++ nsw/Source/bsmd.dbh/Request.cs | 2 + nsw/Source/bsmd.hisnord/Request.cs | 2 + 35 files changed, 608 insertions(+), 33 deletions(-) create mode 100644 ENI-2/ENI2/ENI2/EditControls/CopyDeclarationDialog.xaml create mode 100644 ENI-2/ENI2/ENI2/EditControls/CopyDeclarationDialog.xaml.cs create mode 100644 ENI-2/ENI2/ENI2/Resources/id_card_add.ico create mode 100644 ENI-2/ENI2/ENI2/Resources/id_card_new.ico create mode 100644 ENI-2/ENI2/ENI2/Resources/id_cards.ico diff --git a/ENI-2/ENI2/ENI2/Controls/LocodeControl.xaml.cs b/ENI-2/ENI2/ENI2/Controls/LocodeControl.xaml.cs index 31f2df4a..23315ba9 100644 --- a/ENI-2/ENI2/ENI2/Controls/LocodeControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/Controls/LocodeControl.xaml.cs @@ -79,16 +79,24 @@ namespace ENI2.Controls public string LocodeValue { get { return (string)GetValue(LocodeValueProperty); } - set { SetValue(LocodeValueProperty, value); } + set { SetValue(LocodeValueProperty, value); } } + private static object LocodeValue_CoerceValue(DependencyObject dobj, object Value) + { + //called whenever dependency property value is reevaluated. The return value is the + //latest value set to the dependency property + // MessageBox.Show(string.Format("CoerceValue is fired : Value {0}", Value)); + return Value; + } + + public RuleEngine.LocodeMode LocodeSource { get; set; } #region static methods public static readonly DependencyProperty LocodeValueProperty = DependencyProperty.Register("LocodeValue", typeof(string), typeof(LocodeControl), - new UIPropertyMetadata(LocodeValueChangedHandler)); - + new UIPropertyMetadata(null, LocodeValueChangedHandler, LocodeValue_CoerceValue)); public static void LocodeValueChangedHandler(DependencyObject sender, DependencyPropertyChangedEventArgs e) { @@ -209,6 +217,7 @@ namespace ENI2.Controls this.LocodeValue = this.SelectedItem; } } + this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("LocodeList")); } #endregion diff --git a/ENI-2/ENI2/ENI2/DetailBaseControl.cs b/ENI-2/ENI2/ENI2/DetailBaseControl.cs index 1732693b..a3633167 100644 --- a/ENI-2/ENI2/ENI2/DetailBaseControl.cs +++ b/ENI-2/ENI2/ENI2/DetailBaseControl.cs @@ -76,6 +76,11 @@ namespace ENI2 /// public event Action RequestDisable; + /// + /// Damit kann aus einer Anmeldung heraus die Kopier-Logik ausgelöst werden + /// + public event Action RequestCopy; + /// /// Eine in der Detailansicht enthaltene Meldeklasse hat sich geändert /// @@ -165,6 +170,11 @@ namespace ENI2 this.RequestDisable?.Invoke(); } + protected virtual void OnRequestCopy() + { + this.RequestCopy?.Invoke(); + } + protected virtual void OnControlCacheReset(string messageGroupName) { this.ResetControlCache?.Invoke(messageGroupName); diff --git a/ENI-2/ENI2/ENI2/DetailRootControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailRootControl.xaml.cs index 207e8b7c..8efd70de 100644 --- a/ENI-2/ENI2/ENI2/DetailRootControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/DetailRootControl.xaml.cs @@ -50,6 +50,8 @@ namespace ENI2 internal event DatabaseEntityWatchdog.DatabaseEntityChangedHandler HighlightReset; + internal event Action OpenNewCoreRequested; + public bool HasUnsavedChanges { get { return (this.buttonSave.Visibility == Visibility.Visible); } // schwach aber es wird's tun @@ -159,6 +161,7 @@ namespace ENI2 detailControl.ResetControlCache += DetailControl_ResetControlCache; detailControl.RequestValidate += DetailControl_RequestValidate; detailControl.RequestDisable += DetailControl_RequestDisable; + detailControl.RequestCopy += DetailControl_RequestCopy; detailControl.RequestSendValidation += DetailControl_RequestSendValidation; detailControl.Initialize(); @@ -192,7 +195,52 @@ namespace ENI2 detailView.Children.Add(controlCache[mg.MessageGroupName]); } - } + } + + private void DetailControl_RequestCopy() + { + CopyDeclarationDialog cdd = new CopyDeclarationDialog(); + MessageCore newCore = new MessageCore(); + cdd.NewCore = newCore; + cdd.OldCore = this.Core; + + cdd.IsModal = false; + cdd.Closed += (senderDialog, closeArgs) => + { + CopyDeclarationDialog closedDialog = senderDialog as CopyDeclarationDialog; + if (closedDialog.IsOK) + { + if (!closedDialog.NewCore.IsDK && closedDialog.NewCore.VisitId.IsNullOrEmpty() && closedDialog.NewCore.TransitId.IsNullOrEmpty()) + { + // deutsche Häfen fordern eine Visit-Id an, für DK erfolgt hier nur die Anlage eines Datensatzes + closedDialog.NewCore.BSMDStatusInternal = MessageCore.BSMDStatus.TOSEND; + } + + if (closedDialog.NewCore.PoC.Equals("ZZNOK")) + closedDialog.NewCore.IsTransit = true; + + closedDialog.NewCore.Incoming = true; + closedDialog.NewCore.DefaultReportingPartyId = this.LockedBy.Id; + DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Save(newCore); + + // Meldeklassen für neuen Anlauf erzeugen + List newMessages = new List(); + foreach (Message oldMessage in this._messages) + { + Message newMessage = oldMessage.Clone() as Message; + newMessage.MessageCore = newCore; + newMessage.MessageCoreId = newCore.Id; + DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Save(newMessage); + newMessage.SaveElements(); + } + // + + + this.OnOpenNewCoreRequested(newCore); + } + }; + cdd.Show(); + } private void DetailControl_RequestDisable() { @@ -604,6 +652,11 @@ namespace ENI2 this.HighlightReset?.Invoke(this.Core); } + protected virtual void OnOpenNewCoreRequested(MessageCore newCore) + { + this.OpenNewCoreRequested?.Invoke(newCore); + } + private DependencyObject GetContainerForMessageGroupName(string messageGroupName) { if (controlCache.ContainsKey(messageGroupName)) diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/OverViewDetailControl.xaml b/ENI-2/ENI2/ENI2/DetailViewControls/OverViewDetailControl.xaml index ccb12adc..91421d0f 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/OverViewDetailControl.xaml +++ b/ENI-2/ENI2/ENI2/DetailViewControls/OverViewDetailControl.xaml @@ -79,7 +79,7 @@