git_bsmd/ENI2/SheetDisplayControls/PreArrivalControl.xaml.cs

372 lines
16 KiB
C#

// 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
{
/// <summary>
/// Interaction logic for PreArrivalControl.xaml
/// </summary>
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
#region mouse wheel
private void ScrollViewer_PreviewMouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e)
{
ScrollViewer scv = (ScrollViewer)sender;
scv.ScrollToVerticalOffset(scv.VerticalOffset - e.Delta);
e.Handled = true;
}
#endregion
}
}