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 @@