From 83722519bd451395fd8edefc345015710f4bc731 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Sun, 23 Jul 2017 14:15:04 +0000 Subject: [PATCH] Umsetzung Gefahrgutseite Zwischenstand --- ENI-2/ENI2/ENI2/App.config | 8 +- ENI-2/ENI2/ENI2/Controls/ENIDataGrid.cs | 11 +- ENI-2/ENI2/ENI2/Controls/EditWindowBase.cs | 36 ++ .../ENI2/ENI2/Controls/LocodeControl.xaml.cs | 2 +- ENI-2/ENI2/ENI2/DetailBaseControl.cs | 30 + ENI-2/ENI2/ENI2/DetailRootControl.xaml.cs | 3 + .../ArrivalNotificationDetailControl.xaml | 2 +- .../DangerousGoodsDetailControl.xaml | 99 +++- .../DangerousGoodsDetailControl.xaml.cs | 460 ++++++++++++++- ...aritimeHealthDeclarationDetailControl.xaml | 17 +- ...timeHealthDeclarationDetailControl.xaml.cs | 16 + .../SecurityDetailControl.xaml | 22 +- .../SecurityDetailControl.xaml.cs | 8 +- .../ShipDataDetailControl.xaml | 12 +- .../ShipDataDetailControl.xaml.cs | 3 + .../WasteDetailControl.xaml | 2 +- ENI-2/ENI2/ENI2/ENI2.csproj | 35 ++ .../ENI2/EditControls/EditCREWDialog.xaml | 6 +- .../ENI2/EditControls/EditCREWDialog.xaml.cs | 3 + .../ENI2/ENI2/EditControls/EditIBCDialog.xaml | 64 +++ .../ENI2/EditControls/EditIBCDialog.xaml.cs | 79 +++ .../ENI2/ENI2/EditControls/EditIGCDialog.xaml | 55 ++ .../ENI2/EditControls/EditIGCDialog.xaml.cs | 65 +++ .../ENI2/EditControls/EditIMDGDialog.xaml | 128 +++++ .../ENI2/EditControls/EditIMDGDialog.xaml.cs | 122 ++++ .../ENI2/EditControls/EditIMSBCDialog.xaml | 59 ++ .../ENI2/EditControls/EditIMSBCDialog.xaml.cs | 68 +++ .../ENI2/EditControls/EditMarpolDialog.xaml | 53 ++ .../EditControls/EditMarpolDialog.xaml.cs | 63 +++ .../ENI2/ENI2/EditControls/EditPasDialog.xaml | 6 +- .../ENI2/EditControls/EditPasDialog.xaml.cs | 3 + .../EditShip2ShipActivitiesDialog.xaml | 4 +- .../ENI2/ENI2/EditControls/EditTOWDialog.xaml | 54 +- .../ENI2/EditControls/EditTOWDialog.xaml.cs | 1 + .../ENI2/Properties/Resources.Designer.cs | 522 ++++++++++++++++++ ENI-2/ENI2/ENI2/Properties/Resources.resx | 174 ++++++ ENI-2/ENI2/ENI2/Util/GlobalStructures.cs | 38 +- Stundensheet.xlsx | Bin 31618 -> 31805 bytes nsw/Source/bsmd.ExcelReadService/Util.cs | 58 +- nsw/Source/bsmd.database/IMDGPosition.cs | 69 +++ .../Properties/AssemblyProductInfo.cs | 2 +- .../Properties/AssemblyProjectInfo.cs | 2 +- nsw/Source/bsmd.database/Waste.cs | 9 + 43 files changed, 2347 insertions(+), 126 deletions(-) create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditIBCDialog.xaml create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditIBCDialog.xaml.cs create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditIGCDialog.xaml create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditIGCDialog.xaml.cs create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditIMDGDialog.xaml create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditIMDGDialog.xaml.cs create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditIMSBCDialog.xaml create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditIMSBCDialog.xaml.cs create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditMarpolDialog.xaml create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditMarpolDialog.xaml.cs diff --git a/ENI-2/ENI2/ENI2/App.config b/ENI-2/ENI2/ENI2/App.config index 59067348..0a568992 100644 --- a/ENI-2/ENI2/ENI2/App.config +++ b/ENI-2/ENI2/ENI2/App.config @@ -26,12 +26,12 @@ 1000 - http://192.168.2.4/LockingService/LockingService.svc - + + http://heupferd/bsmd.LockingService/LockingService.svc - Data Source=192.168.2.12;Initial Catalog=nsw;Uid=dfuser;Pwd=dfpasswd;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False - + + Data Source=(localdb)\Projects;Initial Catalog=nsw;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False diff --git a/ENI-2/ENI2/ENI2/Controls/ENIDataGrid.cs b/ENI-2/ENI2/ENI2/Controls/ENIDataGrid.cs index a50a1566..96940938 100644 --- a/ENI-2/ENI2/ENI2/Controls/ENIDataGrid.cs +++ b/ENI-2/ENI2/ENI2/Controls/ENIDataGrid.cs @@ -120,12 +120,13 @@ namespace ENI2.Controls protected void addItem(object sender, RoutedEventArgs e) { - this.CreateRequested?.Invoke(); + if(!this.IsReadOnly) + this.CreateRequested?.Invoke(); } protected void deleteItem(object sender, RoutedEventArgs e) { - if((this.SelectedItems != null) && (this.SelectedItems.Count == 1)) + if((this.SelectedItems != null) && (this.SelectedItems.Count == 1) && !this.IsReadOnly) { MessageBoxResult result = MessageBox.Show(Properties.Resources.textAreYouSure, Properties.Resources.textCaptionDeleteConfirm, MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) @@ -140,7 +141,7 @@ namespace ENI2.Controls protected void editItem(object sender, RoutedEventArgs e) { - if((this.SelectedItems != null) && (this.SelectedItems.Count == 1)) + if((this.SelectedItems != null) && (this.SelectedItems.Count == 1) && !this.IsReadOnly) { DatabaseEntity selectedEntity = this.SelectedItems[0] as DatabaseEntity; if (selectedEntity != null) @@ -150,7 +151,7 @@ namespace ENI2.Controls protected void printItem(object sender, RoutedEventArgs e) { - if ((this.SelectedItems != null) && (this.SelectedItems.Count == 1)) + if ((this.SelectedItems != null) && (this.SelectedItems.Count == 1) ) { DatabaseEntity selectedEntity = this.SelectedItems[0] as DatabaseEntity; if (selectedEntity != null) @@ -183,7 +184,7 @@ namespace ENI2.Controls if (sender != null) { DataGrid grid = sender as DataGrid; - if ((grid != null) && (grid.SelectedItems != null) && (grid.SelectedItems.Count == 1)) + if ((grid != null) && (grid.SelectedItems != null) && (grid.SelectedItems.Count == 1) && !this.IsReadOnly) { DataGridRow dgr = grid.ItemContainerGenerator.ContainerFromItem(grid.SelectedItem) as DataGridRow; DatabaseEntity selectedEntity = grid.SelectedItem as DatabaseEntity; diff --git a/ENI-2/ENI2/ENI2/Controls/EditWindowBase.cs b/ENI-2/ENI2/ENI2/Controls/EditWindowBase.cs index 632b63e3..2b743070 100644 --- a/ENI-2/ENI2/ENI2/Controls/EditWindowBase.cs +++ b/ENI-2/ENI2/ENI2/Controls/EditWindowBase.cs @@ -6,6 +6,9 @@ using System; using System.Windows; using System.Windows.Controls; using System.ComponentModel; +using System.Windows.Data; +using System.Linq; +using bsmd.database; namespace ENI2.Controls { @@ -75,5 +78,38 @@ namespace ENI2.Controls OKClicked?.Invoke(); } + #region combobox content filtering + + protected void ComboBox_KeyUp(object sender, System.Windows.Input.KeyEventArgs e) + { + ComboBox cmb = sender as ComboBox; + if (cmb == null) return; + CollectionView itemsViewOriginal = (CollectionView)CollectionViewSource.GetDefaultView(cmb.ItemsSource); + + itemsViewOriginal.Filter = ((o) => + { + bool result = false; + if (String.IsNullOrEmpty(cmb.Text)) + { + result = true; + } + else + { + if(o is System.Collections.Generic.KeyValuePair) + if(((System.Collections.Generic.KeyValuePair)o).Value.StartsWith(cmb.Text, StringComparison.OrdinalIgnoreCase)) + result = true; + if(o is string) + if (((string)o).Contains(cmb.Text, StringComparison.OrdinalIgnoreCase)) result = true; + } + //System.Diagnostics.Trace.WriteLine(string.Format("{0} - {1} - {2}", o, cmb.Text, result)); + return result; + }); + + //System.Diagnostics.Trace.WriteLine("---"); + itemsViewOriginal.Refresh(); + } + + #endregion + } } diff --git a/ENI-2/ENI2/ENI2/Controls/LocodeControl.xaml.cs b/ENI-2/ENI2/ENI2/Controls/LocodeControl.xaml.cs index 3d713761..781a9a21 100644 --- a/ENI-2/ENI2/ENI2/Controls/LocodeControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/Controls/LocodeControl.xaml.cs @@ -54,7 +54,7 @@ namespace ENI2.Controls // Get instance of current control from sender // and property value from e.NewValue - if (e.NewValue != null) + if ((e.NewValue != null) && (e.NewValue.ToString().Trim() != "")) ((LocodeControl)sender).SelectedItem = e.NewValue.ToString();//.Substring(0,5); } diff --git a/ENI-2/ENI2/ENI2/DetailBaseControl.cs b/ENI-2/ENI2/ENI2/DetailBaseControl.cs index 8a58f5d7..f70ff10c 100644 --- a/ENI-2/ENI2/ENI2/DetailBaseControl.cs +++ b/ENI-2/ENI2/ENI2/DetailBaseControl.cs @@ -9,6 +9,7 @@ using System.Windows.Controls; using bsmd.database; using System.Windows.Media.Imaging; using System.ComponentModel; +using System.Windows.Data; namespace ENI2 { @@ -212,6 +213,35 @@ namespace ENI2 #endregion + #region combobox content filtering + + protected void ComboBox_KeyUp(object sender, System.Windows.Input.KeyEventArgs e) + { + ComboBox cmb = sender as ComboBox; + if (cmb == null) return; + CollectionView itemsViewOriginal = (CollectionView)CollectionViewSource.GetDefaultView(cmb.ItemsSource); + + itemsViewOriginal.Filter = ((o) => + { + bool result = false; + if (String.IsNullOrEmpty(cmb.Text)) + { + result = true; + } + else if(o is string) + { + if (((string)o).Contains(cmb.Text, StringComparison.OrdinalIgnoreCase)) result = true; + } + //System.Diagnostics.Trace.WriteLine(string.Format("{0} - {1} - {2}", o, cmb.Text, result)); + return result; + }); + + //System.Diagnostics.Trace.WriteLine("---"); + itemsViewOriginal.Refresh(); + } + + #endregion + #endregion diff --git a/ENI-2/ENI2/ENI2/DetailRootControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailRootControl.xaml.cs index 8f4a5c66..3d170931 100644 --- a/ENI-2/ENI2/ENI2/DetailRootControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/DetailRootControl.xaml.cs @@ -109,6 +109,9 @@ namespace ENI2 { // create control instance for display: DetailBaseControl detailControl = (DetailBaseControl)Activator.CreateInstance(mg.MessageGroupControlType); + // Spezial-Balkon für die Wiederverwendung von HAZD / HAZA als ein Control (es tut mir leid :D) + if (mg.MessageGroupName.Equals(Properties.Resources.textDGDeparture)) + ((DangerousGoodsDetailControl)detailControl).IsDeparture = true; detailControl.Core = _core; detailControl.Messages = _messages; detailControl.LockedByOtherUser = this.LockedByOtherUser; diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/ArrivalNotificationDetailControl.xaml b/ENI-2/ENI2/ENI2/DetailViewControls/ArrivalNotificationDetailControl.xaml index 44cb9895..7878b045 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/ArrivalNotificationDetailControl.xaml +++ b/ENI-2/ENI2/ENI2/DetailViewControls/ArrivalNotificationDetailControl.xaml @@ -29,7 +29,7 @@ - + diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/DangerousGoodsDetailControl.xaml b/ENI-2/ENI2/ENI2/DetailViewControls/DangerousGoodsDetailControl.xaml index 42fed0dc..9437e8f6 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/DangerousGoodsDetailControl.xaml +++ b/ENI-2/ENI2/ENI2/DetailViewControls/DangerousGoodsDetailControl.xaml @@ -5,9 +5,100 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:ENI2.DetailViewControls" + xmlns:p="clr-namespace:ENI2.Properties" + xmlns:enictrl="clr-namespace:ENI2.Controls" + xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" mc:Ignorable="d" - d:DesignHeight="300" d:DesignWidth="300"> - - - + d:DesignHeight="768" d:DesignWidth="1024"> + + + + + + + + + + + + + + + + + diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/DangerousGoodsDetailControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailViewControls/DangerousGoodsDetailControl.xaml.cs index 5861ae7e..5a83fdbd 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/DangerousGoodsDetailControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/DetailViewControls/DangerousGoodsDetailControl.xaml.cs @@ -2,20 +2,10 @@ // Description: Für Arrival / Departure // -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Navigation; -using System.Windows.Shapes; + +using bsmd.database; +using ENI2.EditControls; namespace ENI2.DetailViewControls { @@ -24,9 +14,453 @@ namespace ENI2.DetailViewControls /// public partial class DangerousGoodsDetailControl : DetailBaseControl { + + private Message _hazMessage; + private HAZ haz; + public DangerousGoodsDetailControl() { InitializeComponent(); + this.Loaded += DangerousGoodsDetailControl_Loaded; } + + private void DangerousGoodsDetailControl_Loaded(object sender, RoutedEventArgs e) + { + this.RegisterCheckboxChange(this.checkBoxDangerousGoodsOnBoard, this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + this.RegisterCheckboxChange(this.checkBoxDGManifestOnBoard, this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + this.RegisterCheckboxChange(this.checkBoxMoUBaltic, this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + this.RegisterComboboxIndexChange(this.comboBoxVesselClass, this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + } + + public bool IsDeparture { get; set; } + + public override void Initialize() + { + base.Initialize(); + + foreach (Message aMessage in this.Messages) + { + if(IsDeparture) + if (aMessage.MessageNotificationClass == Message.NotificationClass.HAZD) { this._hazMessage = aMessage; this.ControlMessages.Add(aMessage); } + else + if (aMessage.MessageNotificationClass == Message.NotificationClass.HAZA) { this._hazMessage = aMessage; this.ControlMessages.Add(aMessage); } + } + + #region HAZ + + if (this._hazMessage == null) + { + this._hazMessage = this.Core.CreateMessage(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + this.Messages.Add(this._hazMessage); + } + + HAZ haz = null; + if (this._hazMessage.Elements.Count > 0) + haz = this._hazMessage.Elements[0] as HAZ; + if (haz == null) + { + haz = new HAZ(); + haz.MessageCore = this.Core; + haz.MessageHeader = this._hazMessage; + _hazMessage.Elements.Add(haz); + } + + this.haz = haz; + this.groupBoxHAZ.DataContext = haz; + + this.dataGridIMDGItems.Initialize(); + this.dataGridIMDGItems.ItemsSource = this.haz.IMDGPositions; + this.dataGridIMDGItems.CreateRequested += DataGridIMDGItems_CreateRequested; + this.dataGridIMDGItems.AddingNewItem += DataGridIMDGItems_AddingNewItem; + this.dataGridIMDGItems.EditRequested += DataGridIMDGItems_EditRequested; + this.dataGridIMDGItems.DeleteRequested += DataGridIMDGItems_DeleteRequested; + + this.dataGridIBCItems.Initialize(); + this.dataGridIBCItems.ItemsSource = this.haz.IBCPositions; + this.dataGridIBCItems.CreateRequested += DataGridIBCItems_CreateRequested; + this.dataGridIBCItems.AddingNewItem += DataGridIBCItems_AddingNewItem; + this.dataGridIBCItems.EditRequested += DataGridIBCItems_EditRequested; + this.dataGridIBCItems.DeleteRequested += DataGridIBCItems_DeleteRequested; + + this.dataGridIGCItems.Initialize(); + this.dataGridIGCItems.ItemsSource = this.haz.IGCPositions; + this.dataGridIGCItems.CreateRequested += DataGridIGCItems_CreateRequested; + this.dataGridIGCItems.AddingNewItem += DataGridIGCItems_AddingNewItem; + this.dataGridIGCItems.EditRequested += DataGridIGCItems_EditRequested; + this.dataGridIGCItems.DeleteRequested += DataGridIGCItems_DeleteRequested; + + this.dataGridIMSBCItems.Initialize(); + this.dataGridIMSBCItems.ItemsSource = this.haz.IMSBCPositions; + this.dataGridIMSBCItems.CreateRequested += DataGridIMSBCItems_CreateRequested; + this.dataGridIMSBCItems.AddingNewItem += DataGridIMSBCItems_AddingNewItem; + this.dataGridIMSBCItems.EditRequested += DataGridIMSBCItems_EditRequested; + this.dataGridIMSBCItems.DeleteRequested += DataGridIMSBCItems_DeleteRequested; + + this.dataGridMARPOLItems.Initialize(); + this.dataGridMARPOLItems.ItemsSource = this.haz.MARPOLPositions; + this.dataGridMARPOLItems.CreateRequested += DataGridMARPOLItems_CreateRequested; + this.dataGridMARPOLItems.AddingNewItem += DataGridMARPOLItems_AddingNewItem; + this.dataGridMARPOLItems.EditRequested += DataGridMARPOLItems_EditRequested; + this.dataGridMARPOLItems.DeleteRequested += DataGridMARPOLItems_DeleteRequested; + + #endregion + + } + + #region MARPOL datagrid handlers + + private void DataGridMARPOLItems_DeleteRequested(DatabaseEntity obj) + { + MARPOL_Annex_I_Position marpol = obj as MARPOL_Annex_I_Position; + if (marpol != null) + { + // are you sure dialog is in base class + this.haz.MARPOLPositions.Remove(marpol); + this.dataGridMARPOLItems.Items.Refresh(); + } + } + + private void DataGridMARPOLItems_EditRequested(DatabaseEntity obj) + { + MARPOL_Annex_I_Position marpol = obj as MARPOL_Annex_I_Position; + if (marpol != null) + { + EditMarpolDialog eld = new EditMarpolDialog(); + eld.MARPOL = marpol; + + eld.AddClicked += () => + { + eld.CopyValuesToEntity(); + haz.MARPOLPositions.Add(eld.MARPOL); + this.dataGridMARPOLItems.Items.Refresh(); + eld.MARPOL = new MARPOL_Annex_I_Position(); + eld.MARPOL.HAZ = this.haz; + this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + }; + + if (eld.ShowDialog() ?? false) + { + this.dataGridMARPOLItems.Items.Refresh(); + this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + } + } + } + + private void DataGridMARPOLItems_AddingNewItem(object sender, System.Windows.Controls.AddingNewItemEventArgs e) + { + this.DataGridMARPOLItems_CreateRequested(); + } + + private void DataGridMARPOLItems_CreateRequested() + { + MARPOL_Annex_I_Position marpol = new MARPOL_Annex_I_Position(); + EditMarpolDialog ebd = new EditMarpolDialog(); + ebd.MARPOL = marpol; + + ebd.AddClicked += () => + { + ebd.CopyValuesToEntity(); + this.haz.MARPOLPositions.Add(ebd.MARPOL); + ebd.MARPOL.HAZ = this.haz; + this.dataGridMARPOLItems.Items.Refresh(); + ebd.MARPOL = new MARPOL_Annex_I_Position(); + this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + }; + + if (ebd.ShowDialog() ?? false) + { + marpol.HAZ = haz; + haz.MARPOLPositions.Add(marpol); + this.dataGridMARPOLItems.Items.Refresh(); + this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + } + } + + #endregion + + #region IMSBC datagrid handlers + + private void DataGridIMSBCItems_DeleteRequested(DatabaseEntity obj) + { + IMSBCPosition imsbc = obj as IMSBCPosition; + if (imsbc != null) + { + // are you sure dialog is in base class + this.haz.IMSBCPositions.Remove(imsbc); + this.dataGridIMSBCItems.Items.Refresh(); + } + } + + private void DataGridIMSBCItems_EditRequested(DatabaseEntity obj) + { + IMSBCPosition imsbc = obj as IMSBCPosition; + if (imsbc != null) + { + EditIMSBCDialog eld = new EditIMSBCDialog(); + eld.IMSBC = imsbc; + + eld.AddClicked += () => + { + eld.CopyValuesToEntity(); + haz.IMSBCPositions.Add(eld.IMSBC); + this.dataGridIMSBCItems.Items.Refresh(); + eld.IMSBC = new IMSBCPosition(); + eld.IMSBC.HAZ = this.haz; + this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + }; + + if (eld.ShowDialog() ?? false) + { + this.dataGridIMSBCItems.Items.Refresh(); + this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + } + } + } + + private void DataGridIMSBCItems_AddingNewItem(object sender, System.Windows.Controls.AddingNewItemEventArgs e) + { + this.DataGridIMSBCItems_CreateRequested(); + } + + private void DataGridIMSBCItems_CreateRequested() + { + IMSBCPosition imsbc = new IMSBCPosition(); + EditIMSBCDialog ebd = new EditIMSBCDialog(); + ebd.IMSBC = imsbc; + + ebd.AddClicked += () => + { + ebd.CopyValuesToEntity(); + this.haz.IMSBCPositions.Add(ebd.IMSBC); + ebd.IMSBC.HAZ = this.haz; + this.dataGridIMSBCItems.Items.Refresh(); + ebd.IMSBC = new IMSBCPosition(); + this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + }; + + if (ebd.ShowDialog() ?? false) + { + imsbc.HAZ = haz; + haz.IMSBCPositions.Add(imsbc); + this.dataGridIMSBCItems.Items.Refresh(); + this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + } + } + + #endregion + + #region IGC datagrid handlers + + private void DataGridIGCItems_DeleteRequested(DatabaseEntity obj) + { + IGCPosition igc = obj as IGCPosition; + if (igc != null) + { + // are you sure dialog is in base class + this.haz.IGCPositions.Remove(igc); + this.dataGridIGCItems.Items.Refresh(); + } + } + + private void DataGridIGCItems_EditRequested(DatabaseEntity obj) + { + IGCPosition igc = obj as IGCPosition; + if (igc != null) + { + EditIGCDialog eld = new EditIGCDialog(); + eld.IGC = igc; + + eld.AddClicked += () => + { + eld.CopyValuesToEntity(); + haz.IGCPositions.Add(eld.IGC); + this.dataGridIGCItems.Items.Refresh(); + eld.IGC = new IGCPosition(); + eld.IGC.HAZ = this.haz; + this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + }; + + if (eld.ShowDialog() ?? false) + { + this.dataGridIGCItems.Items.Refresh(); + this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + } + } + } + + private void DataGridIGCItems_AddingNewItem(object sender, System.Windows.Controls.AddingNewItemEventArgs e) + { + this.DataGridIGCItems_CreateRequested(); + } + + private void DataGridIGCItems_CreateRequested() + { + IGCPosition igc = new IGCPosition(); + EditIGCDialog ebd = new EditIGCDialog(); + ebd.IGC = igc; + + ebd.AddClicked += () => + { + ebd.CopyValuesToEntity(); + this.haz.IGCPositions.Add(ebd.IGC); + ebd.IGC.HAZ = this.haz; + this.dataGridIGCItems.Items.Refresh(); + ebd.IGC = new IGCPosition(); + this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + }; + + if (ebd.ShowDialog() ?? false) + { + igc.HAZ = haz; + haz.IGCPositions.Add(igc); + this.dataGridIGCItems.Items.Refresh(); + this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + } + } + + #endregion + + #region IBC datagrid handlers + + private void DataGridIBCItems_DeleteRequested(DatabaseEntity obj) + { + IBCPosition ibc = obj as IBCPosition; + if (ibc != null) + { + // are you sure dialog is in base class + this.haz.IBCPositions.Remove(ibc); + this.dataGridIBCItems.Items.Refresh(); + } + } + + private void DataGridIBCItems_EditRequested(DatabaseEntity obj) + { + IBCPosition ibc = obj as IBCPosition; + if (ibc != null) + { + EditIBCDialog eld = new EditIBCDialog(); + eld.IBC = ibc; + + eld.AddClicked += () => + { + eld.CopyValuesToEntity(); + haz.IBCPositions.Add(eld.IBC); + this.dataGridIBCItems.Items.Refresh(); + eld.IBC = new IBCPosition(); + eld.IBC.HAZ = this.haz; + this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + }; + + if (eld.ShowDialog() ?? false) + { + this.dataGridIBCItems.Items.Refresh(); + this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + } + } + } + + private void DataGridIBCItems_AddingNewItem(object sender, System.Windows.Controls.AddingNewItemEventArgs e) + { + this.DataGridIBCItems_CreateRequested(); + } + + private void DataGridIBCItems_CreateRequested() + { + IBCPosition ibc = new IBCPosition(); + EditIBCDialog ebd = new EditIBCDialog(); + ebd.IBC = ibc; + + ebd.AddClicked += () => + { + ebd.CopyValuesToEntity(); + this.haz.IBCPositions.Add(ebd.IBC); + ebd.IBC.HAZ = this.haz; + this.dataGridIBCItems.Items.Refresh(); + ebd.IBC = new IBCPosition(); + this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + }; + + if (ebd.ShowDialog() ?? false) + { + ibc.HAZ = haz; + haz.IBCPositions.Add(ibc); + this.dataGridIBCItems.Items.Refresh(); + this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + } + } + + #endregion + + #region IMDG datagrid handlers + + private void DataGridIMDGItems_DeleteRequested(DatabaseEntity obj) + { + IMDGPosition imdg = obj as IMDGPosition; + if (imdg != null) + { + // are you sure dialog is in base class + this.haz.IMDGPositions.Remove(imdg); + this.dataGridIMDGItems.Items.Refresh(); + } + } + + private void DataGridIMDGItems_EditRequested(DatabaseEntity obj) + { + IMDGPosition imdg = obj as IMDGPosition; + if (imdg != null) + { + EditIMDGDialog eld = new EditIMDGDialog(); + eld.IMDG = imdg; + + eld.AddClicked += () => + { + eld.CopyValuesToEntity(); + haz.IMDGPositions.Add(eld.IMDG); + this.dataGridIMDGItems.Items.Refresh(); + eld.IMDG = new IMDGPosition(); + eld.IMDG.HAZ = this.haz; + this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + }; + + if (eld.ShowDialog() ?? false) + { + this.dataGridIMDGItems.Items.Refresh(); + this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + } + } + } + + private void DataGridIMDGItems_AddingNewItem(object sender, System.Windows.Controls.AddingNewItemEventArgs e) + { + this.DataGridIMDGItems_CreateRequested(); + } + + private void DataGridIMDGItems_CreateRequested() + { + IMDGPosition imdg = new IMDGPosition(); + EditIMDGDialog ebd = new EditIMDGDialog(); + ebd.IMDG = imdg; + + ebd.AddClicked += () => + { + ebd.CopyValuesToEntity(); + this.haz.IMDGPositions.Add(ebd.IMDG); + ebd.IMDG.HAZ = this.haz; + this.dataGridIMDGItems.Items.Refresh(); + ebd.IMDG = new IMDGPosition(); + this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + }; + + if (ebd.ShowDialog() ?? false) + { + imdg.HAZ = haz; + haz.IMDGPositions.Add(imdg); + this.dataGridIMDGItems.Items.Refresh(); + this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA); + } + } + + #endregion + } } diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/MaritimeHealthDeclarationDetailControl.xaml b/ENI-2/ENI2/ENI2/DetailViewControls/MaritimeHealthDeclarationDetailControl.xaml index d5a12a3b..f4967ab8 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/MaritimeHealthDeclarationDetailControl.xaml +++ b/ENI-2/ENI2/ENI2/DetailViewControls/MaritimeHealthDeclarationDetailControl.xaml @@ -11,7 +11,7 @@ mc:Ignorable="d" d:DesignHeight="600" d:DesignWidth="1024"> - + @@ -96,7 +96,7 @@ SelectionMode="Single" AutoGenerateColumns="False" Margin="0,5,0,0"> - + @@ -106,7 +106,7 @@ - + @@ -117,16 +117,17 @@ - - + + + - diff --git a/ENI-2/ENI2/ENI2/EditControls/EditTOWDialog.xaml.cs b/ENI-2/ENI2/ENI2/EditControls/EditTOWDialog.xaml.cs index 86e386de..50f3d142 100644 --- a/ENI-2/ENI2/ENI2/EditControls/EditTOWDialog.xaml.cs +++ b/ENI-2/ENI2/ENI2/EditControls/EditTOWDialog.xaml.cs @@ -50,6 +50,7 @@ namespace ENI2.EditControls this.textBoxRemarks.Text = this.IsDeparture ? this.TOWD.TowageOnDepartureRemarks : this.TOWA.TowageOnArrivalRemarks; this.comboBoxFlag.ItemsSource = bsmd.database.CREW.NationalityDict; this.comboBoxFlag.SelectedValue = this.IsDeparture ? this.TOWD.TowageOnDepartureFlag : this.TOWA.TowageOnArrivalFlag; + this.comboBoxFlag.KeyUp += ComboBox_KeyUp; this.doubleUpDownBeam.Value = this.IsDeparture ? this.TOWD.TowageOnDepartureBeam_MTR : this.TOWA.TowageOnArrivalBeam_MTR; this.textBoxOperatorName.Text = this.IsDeparture ? this.TOWD.TowageOnDepartureOperatorCompanyName : this.TOWA.TowageOnArrivalOperatorCompanyName; diff --git a/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs b/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs index e4192837..c4e1bc18 100644 --- a/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs +++ b/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs @@ -671,6 +671,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Bulk cargo shipping name. + /// + public static string textBulkCargoShippingName { + get { + return ResourceManager.GetString("textBulkCargoShippingName", resourceCulture); + } + } + /// /// Looks up a localized string similar to Bunker on arrival. /// @@ -824,6 +833,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Cargo volume. + /// + public static string textCargoVolume { + get { + return ResourceManager.GetString("textCargoVolume", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Category. + /// + public static string textCategory { + get { + return ResourceManager.GetString("textCategory", resourceCulture); + } + } + /// /// Looks up a localized string similar to Changed. /// @@ -878,6 +905,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Columns "o" of OBC Code (value 15.19). + /// + public static string textColumsOfIBC { + get { + return ResourceManager.GetString("textColumsOfIBC", resourceCulture); + } + } + /// /// Looks up a localized string similar to Comment. /// @@ -932,6 +968,51 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Container No.. + /// + public static string textContainerNo { + get { + return ResourceManager.GetString("textContainerNo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Container position (Bay). + /// + public static string textContainerPositionBay { + get { + return ResourceManager.GetString("textContainerPositionBay", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Container position (Row). + /// + public static string textContainerPositionRow { + get { + return ResourceManager.GetString("textContainerPositionRow", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Container position (Tier). + /// + public static string textContainerPositionTier { + get { + return ResourceManager.GetString("textContainerPositionTier", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Control temperature. + /// + public static string textControlTemperature { + get { + return ResourceManager.GetString("textControlTemperature", resourceCulture); + } + } + /// /// Looks up a localized string similar to Copy data. /// @@ -1022,6 +1103,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Critical safety index (CSI). + /// + public static string textCriticalSafetyIndex { + get { + return ResourceManager.GetString("textCriticalSafetyIndex", resourceCulture); + } + } + /// /// Looks up a localized string similar to Cruise ship. /// @@ -1049,6 +1139,33 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Dangerous goods arrival. + /// + public static string textDangerousGoodsArrival { + get { + return ResourceManager.GetString("textDangerousGoodsArrival", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Dangerous goods departure. + /// + public static string textDangerousGoodsDeparture { + get { + return ResourceManager.GetString("textDangerousGoodsDeparture", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Dangerous goods on board. + /// + public static string textDangerousGoodsOnBoard { + get { + return ResourceManager.GetString("textDangerousGoodsOnBoard", resourceCulture); + } + } + /// /// Looks up a localized string similar to Date from. /// @@ -1157,6 +1274,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to DG manifest on board. + /// + public static string textDGManifestOnBoard { + get { + return ResourceManager.GetString("textDGManifestOnBoard", resourceCulture); + } + } + /// /// Looks up a localized string similar to Discharge. /// @@ -1247,6 +1373,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Emergency temperature. + /// + public static string textEmergencyTemperature { + get { + return ResourceManager.GetString("textEmergencyTemperature", resourceCulture); + } + } + /// /// Looks up a localized string similar to Empty. /// @@ -1328,6 +1463,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Excepted quantities. + /// + public static string textExceptedQuantities { + get { + return ResourceManager.GetString("textExceptedQuantities", resourceCulture); + } + } + /// /// Looks up a localized string similar to Exit. /// @@ -1382,6 +1526,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Flashpoint. + /// + public static string textFlashpoint { + get { + return ResourceManager.GetString("textFlashpoint", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Flashpoint information. + /// + public static string textFlashpointInformation { + get { + return ResourceManager.GetString("textFlashpointInformation", resourceCulture); + } + } + /// /// Looks up a localized string similar to Full. /// @@ -1409,6 +1571,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to General cargo. + /// + public static string textGeneralCargo { + get { + return ResourceManager.GetString("textGeneralCargo", resourceCulture); + } + } + /// /// Looks up a localized string similar to General cargo description. /// @@ -1427,6 +1598,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Gross quantity. + /// + public static string textGrossQuantity { + get { + return ResourceManager.GetString("textGrossQuantity", resourceCulture); + } + } + /// /// Looks up a localized string similar to Gross tonnage. /// @@ -1454,6 +1634,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to IBC item. + /// + public static string textIBCItem { + get { + return ResourceManager.GetString("textIBCItem", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IBC items. + /// + public static string textIBCItems { + get { + return ResourceManager.GetString("textIBCItems", resourceCulture); + } + } + /// /// Looks up a localized string similar to ID doc. number. /// @@ -1472,6 +1670,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Identifier. + /// + public static string textIdentifier { + get { + return ResourceManager.GetString("textIdentifier", resourceCulture); + } + } + /// /// Looks up a localized string similar to Identity card. /// @@ -1481,6 +1688,42 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to IGC item. + /// + public static string textIGCItem { + get { + return ResourceManager.GetString("textIGCItem", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IGC items. + /// + public static string textIGCItems { + get { + return ResourceManager.GetString("textIGCItems", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IMDG item. + /// + public static string textIMDGItem { + get { + return ResourceManager.GetString("textIMDGItem", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IMDG items. + /// + public static string textIMDGItems { + get { + return ResourceManager.GetString("textIMDGItems", resourceCulture); + } + } + /// /// Looks up a localized string similar to IMO number. /// @@ -1490,6 +1733,42 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to IMO class / division / (compatibility group). + /// + public static string textIMOClassDivision { + get { + return ResourceManager.GetString("textIMOClassDivision", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IMO class / subclass. + /// + public static string textIMOClassSubclass { + get { + return ResourceManager.GetString("textIMOClassSubclass", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IMSBC item. + /// + public static string textIMSBCItem { + get { + return ResourceManager.GetString("textIMSBCItem", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IMSBC items. + /// + public static string textIMSBCItems { + get { + return ResourceManager.GetString("textIMSBCItems", resourceCulture); + } + } + /// /// Looks up a localized string similar to Incoming journey to port of call - ETA NOK. /// @@ -1760,6 +2039,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Limited quantity. + /// + public static string textLimitedQuantity { + get { + return ResourceManager.GetString("textLimitedQuantity", resourceCulture); + } + } + /// /// Looks up a localized string similar to Loading. /// @@ -1868,6 +2156,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Marine pollutant. + /// + public static string textMarinePollutant { + get { + return ResourceManager.GetString("textMarinePollutant", resourceCulture); + } + } + /// /// Looks up a localized string similar to Maritime health declaration. /// @@ -1877,6 +2174,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to MARPOL Annex I item. + /// + public static string textMARPOLItem { + get { + return ResourceManager.GetString("textMARPOLItem", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to MARPOL Annex I items. + /// + public static string textMARPOLItems { + get { + return ResourceManager.GetString("textMARPOLItems", resourceCulture); + } + } + /// /// Looks up a localized string similar to Master. /// @@ -1886,6 +2201,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Material hazardous only in bulk. + /// + public static string textMaterialHazard { + get { + return ResourceManager.GetString("textMaterialHazard", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Max acitivity. + /// + public static string textMaxActivity { + get { + return ResourceManager.GetString("textMaxActivity", resourceCulture); + } + } + /// /// Looks up a localized string similar to Maritime health declaration. /// @@ -1913,6 +2246,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to MoU Baltic RoRo vessel. + /// + public static string textMoUBalticRoRo { + get { + return ResourceManager.GetString("textMoUBalticRoRo", resourceCulture); + } + } + /// /// Looks up a localized string similar to Muster book. /// @@ -1949,6 +2291,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Net explosive mass. + /// + public static string textNetExplosiveMass { + get { + return ResourceManager.GetString("textNetExplosiveMass", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Net quantity. + /// + public static string textNetQuantity { + get { + return ResourceManager.GetString("textNetQuantity", resourceCulture); + } + } + /// /// Looks up a localized string similar to Create new id. /// @@ -2003,6 +2363,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Number of packages. + /// + public static string textNumberOfPackages { + get { + return ResourceManager.GetString("textNumberOfPackages", resourceCulture); + } + } + /// /// Looks up a localized string similar to Operations. /// @@ -2057,6 +2426,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Package type. + /// + public static string textPackageType { + get { + return ResourceManager.GetString("textPackageType", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Packing group. + /// + public static string textPackingGroup { + get { + return ResourceManager.GetString("textPackingGroup", resourceCulture); + } + } + /// /// Looks up a localized string similar to Passenger. /// @@ -2192,6 +2579,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Pollution category. + /// + public static string textPollutionCategory { + get { + return ResourceManager.GetString("textPollutionCategory", resourceCulture); + } + } + /// /// Looks up a localized string similar to Port area. /// @@ -2264,6 +2660,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Port of discharge. + /// + public static string textPortOfDischarge { + get { + return ResourceManager.GetString("textPortOfDischarge", resourceCulture); + } + } + /// /// Looks up a localized string similar to Port of disembarkation. /// @@ -2300,6 +2705,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Port of loading. + /// + public static string textPortOfLoading { + get { + return ResourceManager.GetString("textPortOfLoading", resourceCulture); + } + } + /// /// Looks up a localized string similar to Port of registry. /// @@ -2354,6 +2768,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Product name. + /// + public static string textProductName { + get { + return ResourceManager.GetString("textProductName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Proper shipping name. + /// + public static string textProperShippingName { + get { + return ResourceManager.GetString("textProperShippingName", resourceCulture); + } + } + /// /// Looks up a localized string similar to PSC 72h. /// @@ -2372,6 +2804,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Quantity. + /// + public static string textQuantity { + get { + return ResourceManager.GetString("textQuantity", resourceCulture); + } + } + /// /// Looks up a localized string similar to Check status. /// @@ -2399,6 +2840,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Radionuclide name. + /// + public static string textRadioNuclideName { + get { + return ResourceManager.GetString("textRadioNuclideName", resourceCulture); + } + } + /// /// Looks up a localized string similar to Reason for invalid ISSC. /// @@ -2462,6 +2912,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Risks. + /// + public static string textRisks { + get { + return ResourceManager.GetString("textRisks", resourceCulture); + } + } + /// /// Looks up a localized string similar to Sanitary control exemption or certificate on board?. /// @@ -2813,6 +3272,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Stowage position. + /// + public static string textStowagePosition { + get { + return ResourceManager.GetString("textStowagePosition", resourceCulture); + } + } + /// /// Looks up a localized string similar to Stowaways on board. /// @@ -2849,6 +3317,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Subsidiary risks. + /// + public static string textSubsidiaryRisk { + get { + return ResourceManager.GetString("textSubsidiaryRisk", resourceCulture); + } + } + /// /// Looks up a localized string similar to Border police. /// @@ -2921,6 +3398,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Technical name. + /// + public static string textTechnicalName { + get { + return ResourceManager.GetString("textTechnicalName", resourceCulture); + } + } + /// /// Looks up a localized string similar to Ticket No. /// @@ -2984,6 +3470,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Transport index. + /// + public static string textTransportIndex { + get { + return ResourceManager.GetString("textTransportIndex", resourceCulture); + } + } + /// /// Looks up a localized string similar to Transport mode. /// @@ -3011,6 +3506,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to UN number. + /// + public static string textUNNumber { + get { + return ResourceManager.GetString("textUNNumber", resourceCulture); + } + } + /// /// Looks up a localized string similar to Username. /// @@ -3056,6 +3560,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Vehicle licence plate. + /// + public static string textVehicleLicensePlate { + get { + return ResourceManager.GetString("textVehicleLicensePlate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Vessel class. + /// + public static string textVesselClass { + get { + return ResourceManager.GetString("textVesselClass", resourceCulture); + } + } + /// /// Looks up a localized string similar to Vessel name. /// diff --git a/ENI-2/ENI2/ENI2/Properties/Resources.resx b/ENI-2/ENI2/ENI2/Properties/Resources.resx index 487c37d2..69c8448b 100644 --- a/ENI-2/ENI2/ENI2/Properties/Resources.resx +++ b/ENI-2/ENI2/ENI2/Properties/Resources.resx @@ -1165,4 +1165,178 @@ Towage on departure + + Bulk cargo shipping name + + + Cargo volume + + + Category + + + Columns "o" of OBC Code (value 15.19) + + + Container No. + + + Container position (Bay) + + + Container position (Row) + + + Container position (Tier) + + + Control temperature + + + Critical safety index (CSI) + + + Dangerous goods arrival + + + Dangerous goods departure + + + Dangerous goods on board + + + DG manifest on board + + + Emergency temperature + + + Excepted quantities + + + Flashpoint + + + Flashpoint information + + + General cargo + + + Gross quantity + + + IBC items + + + IGC items + + + IMDG items + + + IMO class / division / (compatibility group) + + + IMO class / subclass + + + IMSBC items + + + Limited quantity + + + Marine pollutant + + + MARPOL Annex I items + + + Material hazardous only in bulk + + + Max acitivity + + + MoU Baltic RoRo vessel + + + Net explosive mass + + + Net quantity + + + Number of packages + + + Package type + + + Packing group + + + Pollution category + + + Port of discharge + + + Port of loading + + + Product name + + + Proper shipping name + + + Quantity + + + Radionuclide name + + + Risks + + + Stowage position + + + Subsidiary risks + + + Technical name + + + Transport index + + + UN number + + + Vehicle licence plate + + + Vessel class + + + Identifier + + + IBC item + + + IGC item + + + IMDG item + + + IMSBC item + + + MARPOL Annex I item + \ No newline at end of file diff --git a/ENI-2/ENI2/ENI2/Util/GlobalStructures.cs b/ENI-2/ENI2/ENI2/Util/GlobalStructures.cs index 74d0921d..4fcb3db6 100644 --- a/ENI-2/ENI2/ENI2/Util/GlobalStructures.cs +++ b/ENI-2/ENI2/ENI2/Util/GlobalStructures.cs @@ -31,7 +31,7 @@ namespace ENI2.Util Properties.Resources.textOtherLegalIdentityDocument }; - public static string[] ShipSecurityLevels = { "1", "2", "3" }; + public static byte[] ShipSecurityLevels = { 1, 2, 3 }; public static string[] edifact8025Codes = { @@ -61,6 +61,42 @@ namespace ENI2.Util "Waste disposal" }; + public static string[] vesselClasses = + { + "INF1", + "INF2", + "INF3" + }; + + public static string[] packingGroups = + { + "NONE", + "I", + "II", + "III" + }; + + public static string[] pollutionCategories = + { + "X", + "Y", + "Z", + "OS" + }; + + public static string[] hazards = + { + "P", + "S", + "S/P" + }; + + public static string[] flashpointInformations = + { + "Not flammable", + "Above 60°", + "Less than 60°" + }; public static List EdiCodes { diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index 1845ae11c6039d2eebce471c5c01ad47254cedab..34441a54b2cfc9aa01d4db586aec12c99c23c6cb 100644 GIT binary patch delta 19701 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¬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 K2Ap^R0001`_o&GL delta 19489 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

K?7A--^ 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 H00000)R6b} diff --git a/nsw/Source/bsmd.ExcelReadService/Util.cs b/nsw/Source/bsmd.ExcelReadService/Util.cs index 04cfeb8e..761869f7 100644 --- a/nsw/Source/bsmd.ExcelReadService/Util.cs +++ b/nsw/Source/bsmd.ExcelReadService/Util.cs @@ -2201,12 +2201,12 @@ namespace bsmd.ExcelReadService } crew.CrewMemberLastName = lastName; - reader.Conf.ConfirmText(crewLastName, lastName, crew.CrewMemberLastName.IsNullOrEmpty() ? ExcelReader.ReadState.WARN : ExcelReader.ReadState.OK); + reader.Conf.ConfirmText(crewLastName, lastName, crew.CrewMemberLastName.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); crew.CrewMemberFirstName = firstName; - reader.Conf.ConfirmText(crewFirstName, crew.CrewMemberFirstName, crew.CrewMemberFirstName.IsNullOrEmpty() ? ExcelReader.ReadState.WARN : ExcelReader.ReadState.OK); + reader.Conf.ConfirmText(crewFirstName, crew.CrewMemberFirstName, crew.CrewMemberFirstName.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); crew.CrewMemberGender = reader.ReadGender(crewGender); crew.CrewMemberDuty = reader.ReadText(crewDuty); - reader.Conf.ConfirmText(crewDuty, crew.CrewMemberDuty, ExcelReader.ReadState.OK); + reader.Conf.ConfirmText(crewDuty, crew.CrewMemberDuty, crew.CrewMemberDuty.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); crew.CrewMemberNationality = reader.ReadNationality(crewNationality); crew.CrewMemberPlaceOfBirth = reader.ReadText(crewPlaceOfBirth); @@ -2216,10 +2216,10 @@ namespace bsmd.ExcelReadService crew.CrewMemberIdentityDocumentType = reader.ReadIdentityDocumentType(crewIdentDocType); crew.CrewMemberIdentityDocumentId = reader.ReadText(crewIdentDocId); - reader.Conf.ConfirmText(crewIdentDocId, crew.CrewMemberIdentityDocumentId, ExcelReader.ReadState.OK); + reader.Conf.ConfirmText(crewIdentDocId, crew.CrewMemberIdentityDocumentId, crew.CrewMemberIdentityDocumentId.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); crew.CrewMemberVisaNumber = reader.ReadText(crewVisaNo); - reader.Conf.ConfirmText(crewVisaNo, crew.CrewMemberVisaNumber, ExcelReader.ReadState.OK); + reader.Conf.ConfirmText(crewVisaNo, crew.CrewMemberVisaNumber, crew.CrewMemberVisaNumber.IsNullOrEmpty() ? ExcelReader.ReadState.WARN : ExcelReader.ReadState.OK); } } @@ -2253,12 +2253,12 @@ namespace bsmd.ExcelReadService crew.IsDeparture = true; crew.CrewMemberLastName = lastName; - reader.Conf.ConfirmText(crewLastName, lastName, ExcelReader.ReadState.OK); + reader.Conf.ConfirmText(crewLastName, lastName, lastName.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); crew.CrewMemberFirstName = reader.ReadText(crewFirstName); reader.Conf.ConfirmText(crewFirstName, crew.CrewMemberFirstName, crew.CrewMemberFirstName.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); crew.CrewMemberGender = reader.ReadGender(crewGender); crew.CrewMemberDuty = reader.ReadText(crewDuty); - reader.Conf.ConfirmText(crewDuty, crew.CrewMemberDuty, ExcelReader.ReadState.OK); + reader.Conf.ConfirmText(crewDuty, crew.CrewMemberDuty, crew.CrewMemberDuty.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); crew.CrewMemberNationality = reader.ReadNationality(crewNationality); crew.CrewMemberPlaceOfBirth = reader.ReadText(crewPlaceOfBirth); @@ -2268,10 +2268,10 @@ namespace bsmd.ExcelReadService crew.CrewMemberIdentityDocumentType = reader.ReadIdentityDocumentType(crewIdentDocType); crew.CrewMemberIdentityDocumentId = reader.ReadText(crewIdentDocId); - reader.Conf.ConfirmText(crewIdentDocId, crew.CrewMemberIdentityDocumentId, ExcelReader.ReadState.OK); + reader.Conf.ConfirmText(crewIdentDocId, crew.CrewMemberIdentityDocumentId, crew.CrewMemberIdentityDocumentId.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); crew.CrewMemberVisaNumber = reader.ReadText(crewVisaNo); - reader.Conf.ConfirmText(crewVisaNo, crew.CrewMemberVisaNumber, ExcelReader.ReadState.OK); + reader.Conf.ConfirmText(crewVisaNo, crew.CrewMemberVisaNumber, crew.CrewMemberVisaNumber.IsNullOrEmpty() ? ExcelReader.ReadState.WARN : ExcelReader.ReadState.OK); } } @@ -2316,25 +2316,25 @@ namespace bsmd.ExcelReadService } pas.PassengerLastName = lastName; - reader.Conf.ConfirmText(pasLastName, lastName, lastName.IsNullOrEmpty() ? ExcelReader.ReadState.WARN : ExcelReader.ReadState.OK); + reader.Conf.ConfirmText(pasLastName, lastName, lastName.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); pas.PassengerFirstName = firstName; - reader.Conf.ConfirmText(pasFirstName, pas.PassengerFirstName, pas.PassengerFirstName.IsNullOrEmpty() ? ExcelReader.ReadState.WARN : ExcelReader.ReadState.OK); + reader.Conf.ConfirmText(pasFirstName, pas.PassengerFirstName, pas.PassengerFirstName.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); pas.PassengerGender = reader.ReadGender(pasGender); pas.PassengerNationality = reader.ReadNationality(pasNationality); // TODO: Nicht klar ob hier LOCODEs kommen oder nicht pas.PassengerPortOfEmbarkation = reader.ReadTextNoWhitespace(pasEmbarkation); - reader.Conf.ConfirmText(pasEmbarkation, pas.PassengerPortOfEmbarkation, ExcelReader.ReadState.OK); + reader.Conf.ConfirmText(pasEmbarkation, pas.PassengerPortOfEmbarkation, pas.PassengerPortOfEmbarkation.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); pas.PassengerPortOfDisembarkation = reader.ReadTextNoWhitespace(pasDebarkation); - reader.Conf.ConfirmText(pasDebarkation, pas.PassengerPortOfDisembarkation, ExcelReader.ReadState.OK); + reader.Conf.ConfirmText(pasDebarkation, pas.PassengerPortOfDisembarkation, pas.PassengerPortOfDisembarkation.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); pas.PassengerInTransit = reader.ReadBoolean(pasTransit); pas.PassengerPlaceOfBirth = reader.ReadText(pasPlaceOfBirth); - reader.Conf.ConfirmText(pasPlaceOfBirth, pas.PassengerPlaceOfBirth, ExcelReader.ReadState.OK); + reader.Conf.ConfirmText(pasPlaceOfBirth, pas.PassengerPlaceOfBirth, pas.PassengerPlaceOfBirth.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL: ExcelReader.ReadState.OK); pas.PassengerDateOfBirth = reader.ReadBirthDate(pasDateOfBirth); pas.PassengerIdentityDocumentType = reader.ReadIdentityDocumentType(pasIdentDocType); pas.PassengerIdentityDocumentId = reader.ReadText(pasIdentDocId); - reader.Conf.ConfirmText(pasIdentDocId, pas.PassengerIdentityDocumentId, ExcelReader.ReadState.OK); + reader.Conf.ConfirmText(pasIdentDocId, pas.PassengerIdentityDocumentId, pas.PassengerIdentityDocumentId.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); pas.PassengerVisaNumber = reader.ReadText(pasVisaNo); - reader.Conf.ConfirmText(pasVisaNo, pas.PassengerVisaNumber, ExcelReader.ReadState.OK); + reader.Conf.ConfirmText(pasVisaNo, pas.PassengerVisaNumber, pas.PassengerVisaNumber.IsNullOrEmpty() ? ExcelReader.ReadState.WARN :ExcelReader.ReadState.OK); } } @@ -2377,18 +2377,18 @@ namespace bsmd.ExcelReadService pas.PassengerNationality = reader.ReadNationality(pasNationality); // TODO: Nicht klar ob hier LOCODEs kommen oder nicht pas.PassengerPortOfEmbarkation = reader.ReadTextNoWhitespace(pasEmbarkation); - reader.Conf.ConfirmText(pasEmbarkation, pas.PassengerPortOfEmbarkation, ExcelReader.ReadState.OK); + reader.Conf.ConfirmText(pasEmbarkation, pas.PassengerPortOfEmbarkation, pas.PassengerPortOfEmbarkation.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); pas.PassengerPortOfDisembarkation = reader.ReadTextNoWhitespace(pasDebarkation); - reader.Conf.ConfirmText(pasDebarkation, pas.PassengerPortOfDisembarkation, ExcelReader.ReadState.OK); + reader.Conf.ConfirmText(pasDebarkation, pas.PassengerPortOfDisembarkation, pas.PassengerPortOfDisembarkation.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); pas.PassengerInTransit = reader.ReadBoolean(pasTransit); pas.PassengerPlaceOfBirth = reader.ReadText(pasPlaceOfBirth); - reader.Conf.ConfirmText(pasPlaceOfBirth, pas.PassengerPlaceOfBirth, ExcelReader.ReadState.OK); + reader.Conf.ConfirmText(pasPlaceOfBirth, pas.PassengerPlaceOfBirth, pas.PassengerPlaceOfBirth.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); pas.PassengerDateOfBirth = reader.ReadBirthDate(pasDateOfBirth); pas.PassengerIdentityDocumentType = reader.ReadIdentityDocumentType(pasIdentDocType); pas.PassengerIdentityDocumentId = reader.ReadText(pasIdentDocId); - reader.Conf.ConfirmText(pasIdentDocId, pas.PassengerIdentityDocumentId, ExcelReader.ReadState.OK); + reader.Conf.ConfirmText(pasIdentDocId, pas.PassengerIdentityDocumentId, pas.PassengerIdentityDocumentId.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); pas.PassengerVisaNumber = reader.ReadText(pasVisaNo); - reader.Conf.ConfirmText(pasVisaNo, pas.PassengerVisaNumber, ExcelReader.ReadState.OK); + reader.Conf.ConfirmText(pasVisaNo, pas.PassengerVisaNumber, pas.PassengerVisaNumber.IsNullOrEmpty() ? ExcelReader.ReadState.WARN : ExcelReader.ReadState.OK); } } @@ -2715,21 +2715,7 @@ namespace bsmd.ExcelReadService return result; } - #endregion - - /* - private static DateTime ConstructDate(string etaDateString, string etaTime) - { - DateTime result = DateTime.Now; - if (DateTime.TryParse(etaDateString, out result)) - { - TimeSpan sp; - if (TimeSpan.TryParse(etaTime, out sp)) - result += sp; - } - return result; - } - */ + #endregion #region GetMessageWithType diff --git a/nsw/Source/bsmd.database/IMDGPosition.cs b/nsw/Source/bsmd.database/IMDGPosition.cs index 54aa095b..6d5732fb 100644 --- a/nsw/Source/bsmd.database/IMDGPosition.cs +++ b/nsw/Source/bsmd.database/IMDGPosition.cs @@ -11,6 +11,7 @@ using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; +using System.Text; namespace bsmd.database { @@ -154,6 +155,74 @@ namespace bsmd.database public List SubsidiaryRiskList { get { return this.subsidiaryRisksList; } } + ///

+ /// Hilfsproperty, um subsidiary risks als kommaseparierte Liste anzuzeigen (ENI-2) + /// + public string SubsidiaryRiskText + { + get + { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < this.subsidiaryRisksList.Count; i++) + { + if (i > 0) + sb.Append(", "); + sb.Append(this.subsidiaryRisksList[i].SubsidiaryRisk); + } + return sb.ToString(); + } + set + { + if (value.IsNullOrEmpty()) + { + foreach (SubsidiaryRisks sr in this.SubsidiaryRiskList) + DBManager.Instance.Delete(sr); + this.SubsidiaryRiskList.Clear(); + } + else + { + string[] risks = value.Split(','); + List foundList = new List(); + + for (int i = 0; i < risks.Length; i++) + { + string risk = risks[i].Trim(); + if (risk.Length > 0) + { + SubsidiaryRisks matchingRisk = null; + foreach (SubsidiaryRisks sr in this.SubsidiaryRiskList) + { + if (sr.SubsidiaryRisk.Equals(risk, StringComparison.OrdinalIgnoreCase)) + { + matchingRisk = sr; + break; + } + } + if (matchingRisk != null) + { + foundList.Add(matchingRisk); + this.SubsidiaryRiskList.Remove(matchingRisk); + } + else + { + SubsidiaryRisks newRisk = new SubsidiaryRisks(); + newRisk.IMDGPosition = this; + newRisk.SubsidiaryRisk = risk; + foundList.Add(newRisk); + } + } + } + + // remove remaining risk (no longer valid) + foreach (SubsidiaryRisks remainingRisk in this.SubsidiaryRiskList) + DBManager.Instance.Delete(remainingRisk); + this.subsidiaryRisksList.Clear(); + // add existing and new risk + this.subsidiaryRisksList.AddRange(foundList); + } + } + } + public string Identifier { get; set; } #endregion diff --git a/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs b/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs index ddac88d7..49a5bc15 100644 --- a/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs +++ b/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs @@ -2,6 +2,6 @@ [assembly: AssemblyCompany("Informatikbüro Daniel Schick")] [assembly: AssemblyProduct("BSMD NSW interface")] -[assembly: AssemblyInformationalVersion("3.6.7")] +[assembly: AssemblyInformationalVersion("3.6.8")] [assembly: AssemblyCopyright("Copyright © 2014-2017 Informatikbüro Daniel Schick. All rights reserved.")] [assembly: AssemblyTrademark("")] \ No newline at end of file diff --git a/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs b/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs index 66df411b..41122445 100644 --- a/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs +++ b/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs @@ -1,4 +1,4 @@ using System.Reflection; -[assembly: AssemblyVersion("3.6.7.*")] +[assembly: AssemblyVersion("3.6.8.*")] diff --git a/nsw/Source/bsmd.database/Waste.cs b/nsw/Source/bsmd.database/Waste.cs index 4090bbcc..8a744757 100644 --- a/nsw/Source/bsmd.database/Waste.cs +++ b/nsw/Source/bsmd.database/Waste.cs @@ -75,6 +75,14 @@ namespace bsmd.database } } } + + public string WasteTypeDisplayGrid + { + get + { + return string.Format("{0} {1}", WasteType, WasteTypeDisplayV4); + } + } [Validation(ValidationCode.NOT_NULL)] public int? WasteType { get; set; } @@ -160,6 +168,7 @@ namespace bsmd.database break; } + query += " ORDER BY WasteType"; cmd.CommandText = query; }