// Copyright (c) 2025 - schick Informatik // Description: Display control of formsheet Tab 3. Pre-Arrival // using bsmd.database; using ENI2.EditControls; using System; using System.Windows; using System.Windows.Controls; using System.Windows.Media.Imaging; namespace ENI2.SheetDisplayControls { /// /// Interaction logic for PreArrivalControl.xaml /// public partial class PreArrivalControl : DetailBaseControl { #region Fields private TIEFA _tiefa; private SEC _sec; private NOA_NOD _noa_nod; private POBA _poba; private Message _brkaMessage; private Message _brkdMessage; private HAZ _haz; private Message _towaMessage; private Message _towdMessage; private bool _ctxInitialized = false; #endregion #region Construction public PreArrivalControl() { InitializeComponent(); Loaded += PreArrivalControl_Loaded; } #endregion #region public override public override void Initialize() { base.Initialize(); foreach (Message aMessage in this.Messages) { if (aMessage.MessageNotificationClass == Message.NotificationClass.TIEFA) { this._tiefa = aMessage.Elements[0] as TIEFA; this.ControlMessages.Add(aMessage); } if (aMessage.MessageNotificationClass == Message.NotificationClass.SEC) { this._sec = aMessage.Elements[0] as SEC; this.ControlMessages.Add(aMessage); } if (aMessage.MessageNotificationClass == Message.NotificationClass.NOA_NOD) { this._noa_nod = aMessage.Elements[0] as NOA_NOD; this.ControlMessages.Add(aMessage); } if (aMessage.MessageNotificationClass == Message.NotificationClass.POBA) { this._poba = aMessage.Elements[0] as POBA; this.ControlMessages.Add(aMessage); } if (aMessage.MessageNotificationClass == Message.NotificationClass.BKRA) { this._brkaMessage = aMessage; this.ControlMessages.Add(aMessage); } if (aMessage.MessageNotificationClass == Message.NotificationClass.BKRD) { this._brkdMessage = aMessage; this.ControlMessages.Add(aMessage); } if (aMessage.MessageNotificationClass == Message.NotificationClass.HAZA) { this._haz = aMessage.Elements[0] as HAZ; this.ControlMessages.Add(aMessage); } if (aMessage.MessageNotificationClass == Message.NotificationClass.TOWA) { this._towaMessage = aMessage; this.ControlMessages.Add(aMessage); } if (aMessage.MessageNotificationClass == Message.NotificationClass.TOWD) { this._towdMessage = aMessage; this.ControlMessages.Add(aMessage); } } // 3.1 this.doubleUpDownDraught.DataContext = this._tiefa; this.comboBoxCurrentShipSecurityLevel.ItemsSource = Util.GlobalStructures.ShipSecurityLevels; this.comboBoxCurrentShipSecurityLevel.DataContext = this._sec; this.checkBox_IsAnchored.DataContext = this._noa_nod; this.checkBox_AreMatterToReport.DataContext = this._sec; this.textBoxMatterToReport.DataContext = this._sec; // 3.2 this.integerUpDownPersonsOnBoard.DataContext = this._poba; this.integerUpDownCrewMemberOnBoard.DataContext = this._poba; this.integerUpDownPassengersOnBoard.DataContext = this._poba; this.integerUpDownStowawaysOnBoard.DataContext = this._poba; // 3.3 this.dataGridBKRA.Initialize(); this.dataGridBKRA.ItemsSource = this._brkaMessage.Elements; this.dataGridBKRA.AddingNewItem += DataGridBKRA_AddingNewItem; this.dataGridBKRA.EditRequested += DataGridBKRA_EditRequested; this.dataGridBKRA.DeleteRequested += DataGridBKRA_DeleteRequested; this.dataGridBKRA.CreateRequested += DataGridBKRA_CreateRequested; // 3.4 this.checkBoxDangerousGoodsOnBoard.DataContext = this._haz; // 3.5 if (this._towaMessage == null) { this._towaMessage = this.Core.CreateMessage(Message.NotificationClass.TOWA); this.Messages.Add(this._towaMessage); } this.dataGridTowageOnArrival.Initialize(); this.dataGridTowageOnArrival.ItemsSource = this._towaMessage.Elements; this.dataGridTowageOnArrival.AddingNewItem += DataGridTowageOnArrival_AddingNewItem; this.dataGridTowageOnArrival.EditRequested += DataGridTowageOnArrival_EditRequested; this.dataGridTowageOnArrival.DeleteRequested += DataGridTowageOnArrival_DeleteRequested; this.dataGridTowageOnArrival.CreateRequested += DataGridTowageOnArrival_CreateRequested; } #endregion private void PreArrivalControl_Loaded(object sender, RoutedEventArgs e) { // 3.1 this.RegisterDoubleUpDownChange(this.doubleUpDownDraught, Message.NotificationClass.TIEFA); this.RegisterComboboxIndexChange(this.comboBoxCurrentShipSecurityLevel, Message.NotificationClass.SEC); this.RegisterCheckboxChange(this.checkBox_IsAnchored, Message.NotificationClass.NOA_NOD); this.RegisterCheckboxChange(this.checkBox_AreMatterToReport, Message.NotificationClass.SEC); this.RegisterTextboxChange(this.textBoxMatterToReport, Message.NotificationClass.SEC); // 3.2 this.RegisterIntegerUpDownChange(this.integerUpDownCrewMemberOnBoard, Message.NotificationClass.POBA); this.RegisterIntegerUpDownChange(this.integerUpDownPassengersOnBoard, Message.NotificationClass.POBA); this.RegisterIntegerUpDownChange(this.integerUpDownPersonsOnBoard, Message.NotificationClass.POBA); this.RegisterIntegerUpDownChange(this.integerUpDownStowawaysOnBoard, Message.NotificationClass.POBA); // 3.3 this.dataGridBKRA.CellEditEnding += (obj, ev) => { this.SublistElementChanged(Message.NotificationClass.BKRA); }; // Extra Menüpunkt um alle Bunker Positionen nach BKRD zu kopieren if (!_ctxInitialized) { this.dataGridBKRA.ContextMenu.Items.Add(new Separator()); MenuItem copyBKRItem = new MenuItem(); copyBKRItem.Header = Properties.Resources.textCopyToBKRD; copyBKRItem.Icon = new Image { Source = new BitmapImage(new Uri("pack://application:,,,/Resources/documents.png")) }; copyBKRItem.Click += this.copyBKR; this.dataGridBKRA.ContextMenu.Items.Add(copyBKRItem); } // 3.4 this.RegisterCheckboxChange(this.checkBoxDangerousGoodsOnBoard, Message.NotificationClass.HAZA); // 3.5 if (!_ctxInitialized) { this.dataGridTowageOnArrival.ContextMenu.Items.Add(new Separator()); MenuItem copyItem = new MenuItem(); copyItem.Header = string.Format(Properties.Resources.textCopyTo, "TOWD"); copyItem.Icon = new Image { Source = new BitmapImage(new Uri("pack://application:,,,/Resources/documents.png")) }; copyItem.Click += new RoutedEventHandler(this.copyTOWAItem); this.dataGridTowageOnArrival.ContextMenu.Items.Add(copyItem); } _ctxInitialized = true; } private void copyBKR(object sender, RoutedEventArgs e) { if (this.dataGridBKRA.SelectedItems != null) { foreach (BRKA brka in this.dataGridBKRA.SelectedItems) { BRKD copyBRKD = new BRKD(); copyBRKD.MessageHeader = this._brkdMessage; copyBRKD.CopyFromBKRA(brka); copyBRKD.Identifier = DatabaseEntity.GetNewIdentifier(this._brkdMessage.Elements); this._brkdMessage.Elements.Add(copyBRKD); this.SublistElementChanged(Message.NotificationClass.BKRD); } } } private void copyTOWAItem(object sender, RoutedEventArgs e) { // aus dem aktuell selektierten TOWA Element ein neues TOWD Element machen if (this.dataGridTowageOnArrival.SelectedItems != null) { foreach (TOWA selectedTOWA in this.dataGridTowageOnArrival.SelectedItems) { TOWD copyTOWD = new TOWD(); copyTOWD.MessageHeader = _towdMessage; copyTOWD.CopyFromTOWA(selectedTOWA); copyTOWD.Identifier = TOWD.GetNewIdentifier(this._towdMessage.Elements); this._towdMessage.Elements.Add(copyTOWD); this.SublistElementChanged(Message.NotificationClass.TOWD); } } } #region BKRA grid events private void DataGridBKRA_CreateRequested() { this.dataGridBKRA.CancelEdit(); this.dataGridBKRA.CancelEdit(); EditBKRDialog ebd = new EditBKRDialog(); ebd.BRKA = new BRKA(); ebd.BRKA.Identifier = BRKA.GetNewIdentifier(this._brkaMessage.Elements); ebd.BRKA.MessageHeader = _brkaMessage; ebd.IsDeparture = false; ebd.AddClicked += () => { ebd.CopyValuesToEntity(); if (!this._brkaMessage.Elements.Contains(ebd.BRKA)) this._brkaMessage.Elements.Add(ebd.BRKA); this.dataGridBKRA.Items.Refresh(); ebd.BRKA = new BRKA(); ebd.BRKA.Identifier = BRKA.GetNewIdentifier(this._brkaMessage.Elements); ebd.BRKA.MessageHeader = _brkaMessage; this.SublistElementChanged(Message.NotificationClass.BKRA); }; if (ebd.ShowDialog() ?? false) { if (!_brkaMessage.Elements.Contains(ebd.BRKA)) _brkaMessage.Elements.Add(ebd.BRKA); this.dataGridBKRA.Items.Refresh(); this.SublistElementChanged(Message.NotificationClass.BKRA); } } private void DataGridBKRA_DeleteRequested(DatabaseEntity obj) { if (obj is BRKA brka) { this.dataGridBKRA.CancelEdit(); this.dataGridBKRA.CancelEdit(); // are you sure dialog is in base class DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Delete(brka); this._brkaMessage.Elements.Remove(brka); DatabaseEntity.ResetIdentifiers(this._brkaMessage.Elements); this.SublistElementChanged(Message.NotificationClass.BKRA); this.dataGridBKRA.Items.Refresh(); } } private void DataGridBKRA_EditRequested(DatabaseEntity obj) { // I am not shitting you: this has to be called TWICE(!) in a row in order to work // see: https://stackoverflow.com/questions/20204592/wpf-datagrid-refresh-is-not-allowed-during-an-addnew-or-edititem-transaction-m this.dataGridBKRA.CancelEdit(DataGridEditingUnit.Row); this.dataGridBKRA.CommitEdit(DataGridEditingUnit.Row, true); EditBKRDialog eld = new EditBKRDialog(); eld.IsDeparture = false; eld.BRKA = obj as BRKA; eld.AddClicked += () => { eld.CopyValuesToEntity(); if (!_brkaMessage.Elements.Contains(eld.BRKA)) _brkaMessage.Elements.Add(eld.BRKA); this.dataGridBKRA.ItemsSource = null; this.dataGridBKRA.ItemsSource = this._brkaMessage.Elements; eld.BRKA = new BRKA(); eld.BRKA.Identifier = BRKA.GetNewIdentifier(this._brkaMessage.Elements); eld.BRKA.MessageHeader = _brkaMessage; this.SublistElementChanged(Message.NotificationClass.BKRA); }; if (eld.ShowDialog() ?? false) { if (!_brkaMessage.Elements.Contains(eld.BRKA)) _brkaMessage.Elements.Add(eld.BRKA); this.dataGridBKRA.ItemsSource = null; this.dataGridBKRA.ItemsSource = this._brkaMessage.Elements; this.SublistElementChanged(Message.NotificationClass.BKRA); } } private void DataGridBKRA_AddingNewItem(object sender, System.Windows.Controls.AddingNewItemEventArgs e) { this.DataGridBKRA_CreateRequested(); } #endregion #region TOWA grid private void DataGridTowageOnArrival_CreateRequested() { EditTOWDialog ebd = new EditTOWDialog(); ebd.IsDeparture = false; ebd.TOWA = new TOWA(); ebd.TOWA.Identifier = TOWA.GetNewIdentifier(this._towaMessage.Elements); ebd.TOWA.MessageHeader = this._towaMessage; ebd.AddClicked += () => { ebd.CopyValuesToEntity(); if (!this._towaMessage.Elements.Contains(ebd.TOWA)) this._towaMessage.Elements.Add(ebd.TOWA); this.dataGridTowageOnArrival.Items.Refresh(); ebd.TOWA = new TOWA(); ebd.TOWA.MessageHeader = _towaMessage; ebd.TOWA.Identifier = TOWA.GetNewIdentifier(this._towaMessage.Elements); this.SublistElementChanged(Message.NotificationClass.TOWA); }; if (ebd.ShowDialog() ?? false) { if (!this._towaMessage.Elements.Contains(ebd.TOWA)) _towaMessage.Elements.Add(ebd.TOWA); this.dataGridTowageOnArrival.Items.Refresh(); this.SublistElementChanged(Message.NotificationClass.TOWA); } } private void DataGridTowageOnArrival_DeleteRequested(DatabaseEntity obj) { if (obj is TOWA towa) { // are you sure dialog is in base class this._towaMessage.Elements.Remove(towa); DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Delete(towa); DatabaseEntity.ResetIdentifiers(this._towaMessage.Elements); this.SublistElementChanged(Message.NotificationClass.TOWA); this.dataGridTowageOnArrival.Items.Refresh(); } } private void DataGridTowageOnArrival_EditRequested(DatabaseEntity obj) { EditTOWDialog eld = new EditTOWDialog(); eld.IsDeparture = false; eld.TOWA = obj as TOWA; eld.AddClicked += () => { eld.CopyValuesToEntity(); if (!_towaMessage.Elements.Contains(eld.TOWA)) _towaMessage.Elements.Add(eld.TOWA); this.dataGridTowageOnArrival.Items.Refresh(); eld.TOWA = new TOWA(); eld.TOWA.Identifier = TOWA.GetNewIdentifier(this._towaMessage.Elements); eld.TOWA.MessageHeader = _towaMessage; this.SublistElementChanged(Message.NotificationClass.TOWA); }; if (eld.ShowDialog() ?? false) { if (!this._towaMessage.Elements.Contains(eld.TOWA)) this._towaMessage.Elements.Add(eld.TOWA); this.dataGridTowageOnArrival.Items.Refresh(); this.SublistElementChanged(Message.NotificationClass.TOWA); } } private void DataGridTowageOnArrival_AddingNewItem(object sender, System.Windows.Controls.AddingNewItemEventArgs e) { this.DataGridTowageOnArrival_CreateRequested(); } #endregion } }