diff --git a/ENI2/Controls/HazardMaterialControl.xaml b/ENI2/Controls/HazardMaterialControl.xaml
new file mode 100644
index 00000000..63179853
--- /dev/null
+++ b/ENI2/Controls/HazardMaterialControl.xaml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ENI2/Controls/HazardMaterialControl.xaml.cs b/ENI2/Controls/HazardMaterialControl.xaml.cs
new file mode 100644
index 00000000..ef3e890d
--- /dev/null
+++ b/ENI2/Controls/HazardMaterialControl.xaml.cs
@@ -0,0 +1,133 @@
+using bsmd.database;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+
+namespace ENI2.Controls
+{
+ ///
+ /// Interaction logic for HazardMaterialControl.xaml
+ ///
+ public partial class HazardMaterialControl : UserControl
+ {
+ public HazardMaterialControl()
+ {
+ InitializeComponent();
+ this.dataGridHazardMaterial.ItemsSource = HAZPosTemplate.Templates;
+ var view = CollectionViewSource.GetDefaultView(HAZPosTemplate.Templates);
+ view.SortDescriptions.Add(new SortDescription(nameof(HAZPosTemplate.Description), ListSortDirection.Ascending));
+ _ = HAZPosTemplate.EnsureLoadedAsync();
+
+ this.columnHazard.ItemsSource = BuildEnumItems(IBCPosition.hazards);
+ this.columnFlashpoint.ItemsSource = BuildEnumItems(IBCPosition.flashpointInformations);
+ this.columnPollution.ItemsSource = BuildEnumItems(IBCPosition.pollutionCategories);
+ this.columnIMSBC_HAZ.ItemsSource = BuildEnumItems(IMSBCPosition.hazardClass);
+ this.columnTemplateType.ItemsSource = Enum.GetValues(typeof(HAZPosTemplate.SublistType));
+
+ this.dataGridHazardMaterial.ContextMenu = new ContextMenu();
+ MenuItem addItem = new MenuItem
+ {
+ Header = Properties.Resources.textAdd,
+ Icon = new System.Windows.Controls.Image { Source = new System.Windows.Media.Imaging.BitmapImage(new Uri("pack://application:,,,/Resources/add.png")) }
+ };
+ addItem.Click += AddItem_Click;
+ this.dataGridHazardMaterial.ContextMenu.Items.Add(addItem);
+
+ MenuItem delItem = new MenuItem
+ {
+ Header = Properties.Resources.textDelete,
+ Icon = new System.Windows.Controls.Image { Source = new System.Windows.Media.Imaging.BitmapImage(new Uri("pack://application:,,,/Resources/delete.png")) }
+ };
+ delItem.Click += DelItem_Click;
+ this.dataGridHazardMaterial.ContextMenu.Items.Add(delItem);
+ }
+
+ private void buttonSave_Click(object sender, RoutedEventArgs e)
+ {
+ _ = SaveTemplatesAsync();
+ }
+
+ private void buttonAdd_Click(object sender, RoutedEventArgs e)
+ {
+ AddNewTemplate();
+ }
+
+ private void dataGridHazardMaterial_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
+ {
+ if (e.Row?.Item is HAZPosTemplate template)
+ {
+ template.IsDirty = true;
+ }
+ }
+
+ private void AddItem_Click(object sender, RoutedEventArgs e)
+ {
+ AddNewTemplate();
+ }
+
+ private async void DelItem_Click(object sender, RoutedEventArgs e)
+ {
+ if (this.dataGridHazardMaterial.SelectedItems.Count > 0)
+ {
+ if (MessageBox.Show("Are you sure to delete the selected values?", Properties.Resources.textConfirmation, MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) ==
+ MessageBoxResult.Yes)
+ {
+ var selectedItems = new List();
+ foreach (HAZPosTemplate item in this.dataGridHazardMaterial.SelectedItems)
+ selectedItems.Add(item);
+
+ foreach (HAZPosTemplate item in selectedItems)
+ {
+ int result = await DBManagerAsync.DeleteAsync(item);
+ if (result == 1 || item.IsNew)
+ {
+ HAZPosTemplate.Templates.Remove(item);
+ }
+ }
+ }
+ }
+ }
+
+ private void AddNewTemplate()
+ {
+ var template = new HAZPosTemplate
+ {
+ TemplateType = HAZPosTemplate.SublistType.IMSBC,
+ IsDirty = true
+ };
+ HAZPosTemplate.Templates.Add(template);
+ this.dataGridHazardMaterial.SelectedItem = template;
+ this.dataGridHazardMaterial.ScrollIntoView(template);
+ }
+
+ private async Task SaveTemplatesAsync()
+ {
+ int totalSaves = 0;
+ foreach (var template in HAZPosTemplate.Templates)
+ {
+ if (template.IsNew || template.IsDirty)
+ {
+ totalSaves += await DBManagerAsync.SaveAsync(template);
+ }
+ }
+ if (totalSaves > 0)
+ {
+ MessageBox.Show($"{totalSaves} hazard materials saved", "Success", MessageBoxButton.OK, MessageBoxImage.Information);
+ }
+ }
+
+ private static List> BuildEnumItems(IReadOnlyList values)
+ {
+ var items = new List>(values.Count);
+ for (int i = 0; i < values.Count; i++)
+ {
+ items.Add(new KeyValuePair(i, values[i]));
+ }
+ return items;
+ }
+ }
+}
diff --git a/ENI2/DetailViewControls/DangerousGoodsDetailControl.xaml.cs b/ENI2/DetailViewControls/DangerousGoodsDetailControl.xaml.cs
index a25253a0..0bfcaafb 100644
--- a/ENI2/DetailViewControls/DangerousGoodsDetailControl.xaml.cs
+++ b/ENI2/DetailViewControls/DangerousGoodsDetailControl.xaml.cs
@@ -835,12 +835,12 @@ namespace ENI2.DetailViewControls
case HAZPosTemplate.SublistType.IBC:
this.tabControlPositions.SelectedIndex = 1;
IBCPosition ibcPos = new IBCPosition();
- ibcPos.FlashpointInformation = selectedTemplate.Flashpoint;
+ ibcPos.FlashpointInformation = (byte) selectedTemplate.Flashpoint;
ibcPos.Flashpoint_CEL = selectedTemplate.FP_IBC;
ibcPos.SpecRef15_19 = selectedTemplate.SpecRef15_19;
- ibcPos.Hazards = selectedTemplate.Hazard;
+ ibcPos.Hazards = (byte) selectedTemplate.Hazard;
ibcPos.Identifier = DatabaseEntity.GetNewIdentifier(haz.IBCPositions, "IBC-");
- ibcPos.PollutionCategory = selectedTemplate.PollutionCategory;
+ ibcPos.PollutionCategory = (byte) selectedTemplate.PollutionCategory;
ibcPos.HAZ = haz;
haz.IBCPositions.Add(ibcPos);
this.dataGridIBCItems.Items.Refresh();
@@ -861,7 +861,7 @@ namespace ENI2.DetailViewControls
this.tabControlPositions.SelectedIndex = 3;
IMSBCPosition imsbcPos = new IMSBCPosition();
imsbcPos.Identifier = DatabaseEntity.GetNewIdentifier(haz.IMSBCPositions, "IMSBC-");
- imsbcPos.IMOHazardClass = selectedTemplate.IMSBC_HAZ;
+ imsbcPos.IMOHazardClass = (byte) selectedTemplate.IMSBC_HAZ;
imsbcPos.UNNumber = selectedTemplate.UNNr;
imsbcPos.IMOClass = selectedTemplate.IMOClass;
imsbcPos.MHB = selectedTemplate.MHB ?? false;
@@ -873,7 +873,7 @@ namespace ENI2.DetailViewControls
case HAZPosTemplate.SublistType.MARPOL:
this.tabControlPositions.SelectedIndex = 4;
MARPOL_Annex_I_Position marpolPos = new MARPOL_Annex_I_Position();
- marpolPos.FlashpointInformation = selectedTemplate.Flashpoint;
+ marpolPos.FlashpointInformation = (byte) selectedTemplate.Flashpoint;
marpolPos.Identifier = DatabaseEntity.GetNewIdentifier(haz.MARPOLPositions, "MARPOL-");
marpolPos.HAZ = haz;
haz.MARPOLPositions.Add(marpolPos);
diff --git a/ENI2/ENI2.csproj b/ENI2/ENI2.csproj
index a8f738e4..d0b724af 100644
--- a/ENI2/ENI2.csproj
+++ b/ENI2/ENI2.csproj
@@ -36,8 +36,8 @@
5.4.0.0
true
publish.html
- 2
- 7.2.15.0
+ 1
+ 7.2.15.1
false
true
true
@@ -327,12 +327,15 @@
MaerskOverviewControl.xaml
-
- ValueMappingsControl.xaml
-
-
- WASExemptionsControl.xaml
-
+
+ ValueMappingsControl.xaml
+
+
+ HazardMaterialControl.xaml
+
+
+ WASExemptionsControl.xaml
+
ChangePasswordDialog.xaml
@@ -648,14 +651,18 @@
Designer
MSBuild:Compile
-
- Designer
- MSBuild:Compile
-
-
- Designer
- MSBuild:Compile
-
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
@@ -1251,4 +1258,4 @@
-->
-
\ No newline at end of file
+
diff --git a/ENI2/EditControls/NewDGItemDialog.xaml.cs b/ENI2/EditControls/NewDGItemDialog.xaml.cs
index 79847091..c1c849e6 100644
--- a/ENI2/EditControls/NewDGItemDialog.xaml.cs
+++ b/ENI2/EditControls/NewDGItemDialog.xaml.cs
@@ -7,6 +7,7 @@ using ENI2.Controls;
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
@@ -33,10 +34,10 @@ namespace ENI2.EditControls
}
}
- private void EditWindowBase_Loaded(object sender, RoutedEventArgs e)
+ private async void EditWindowBase_Loaded(object sender, RoutedEventArgs e)
{
// load combo boxes
- _data = LocalizedLookup.LoadHAZTemplates();
+ _data = await DBManagerAsync.LoadHAZTemplatesAsync();
this.listBoxDescription.ItemsSource = _data;
this.comboBoxType.ItemsSource = Enum.GetValues(typeof(HAZPosTemplate.SublistType));
this.OkVisible = false;
diff --git a/ENI2/LocalizedLookup.cs b/ENI2/LocalizedLookup.cs
index cadb97eb..f5c0cf86 100644
--- a/ENI2/LocalizedLookup.cs
+++ b/ENI2/LocalizedLookup.cs
@@ -263,15 +263,6 @@ namespace ENI2
return results;
}
- public static List LoadHAZTemplates()
- {
- SQLiteCommand cmd = new SQLiteCommand(HAZPosTemplate.GetQuery(), _con);
- IDataReader reader = cmd.ExecuteReader();
- List result = HAZPosTemplate.LoadList(reader);
- reader.Close();
- return result;
- }
-
public static List> GetNST2007List()
{
List> result = new List>();
diff --git a/ENI2/MainWindow.xaml b/ENI2/MainWindow.xaml
index 94750ceb..9cd58c13 100644
--- a/ENI2/MainWindow.xaml
+++ b/ENI2/MainWindow.xaml
@@ -103,6 +103,11 @@
+
diff --git a/ENI2/MainWindow.xaml.cs b/ENI2/MainWindow.xaml.cs
index 089bc403..63b75180 100644
--- a/ENI2/MainWindow.xaml.cs
+++ b/ENI2/MainWindow.xaml.cs
@@ -39,8 +39,9 @@ namespace ENI2
private ServerStatusControl statusControl;
private readonly SucheControl sucheControl;
private CompareExcelDialog compareExcelDialog;
- private EasyPeasyControl easyPeasyControl;
- private WASExemptionsControl wasExemptionsControl;
+ private EasyPeasyControl easyPeasyControl;
+ private WASExemptionsControl wasExemptionsControl;
+ private HazardMaterialControl hazardMaterialControl;
private bool dbConnected;
private readonly ScaleTransform _transform = new ScaleTransform(1.0, 1.0);
@@ -334,14 +335,22 @@ namespace ENI2
}
this.rootContainer.Children.Add(this.easyPeasyControl);
}
- else if (sender == this.menuItemWASExemptions)
- {
- if(this.wasExemptionsControl == null)
- {
- this.wasExemptionsControl = new WASExemptionsControl();
- }
- this.rootContainer.Children.Add(this.wasExemptionsControl);
- }
+ else if (sender == this.menuItemWASExemptions)
+ {
+ if(this.wasExemptionsControl == null)
+ {
+ this.wasExemptionsControl = new WASExemptionsControl();
+ }
+ this.rootContainer.Children.Add(this.wasExemptionsControl);
+ }
+ else if (sender == this.menuItemHazardMaterials)
+ {
+ if (this.hazardMaterialControl == null)
+ {
+ this.hazardMaterialControl = new HazardMaterialControl();
+ }
+ this.rootContainer.Children.Add(this.hazardMaterialControl);
+ }
}
private void buttonCompareSheets_Click(object sender, RoutedEventArgs ev)
diff --git a/ENI2/SheetDisplayControls/DangerousCargoControl.xaml.cs b/ENI2/SheetDisplayControls/DangerousCargoControl.xaml.cs
index 104dc11c..454c82c4 100644
--- a/ENI2/SheetDisplayControls/DangerousCargoControl.xaml.cs
+++ b/ENI2/SheetDisplayControls/DangerousCargoControl.xaml.cs
@@ -368,12 +368,12 @@ namespace ENI2.SheetDisplayControls
{
case HAZPosTemplate.SublistType.IBC:
IBCPosition ibcPos = new IBCPosition();
- ibcPos.FlashpointInformation = selectedTemplate.Flashpoint;
+ ibcPos.FlashpointInformation = (byte) selectedTemplate.Flashpoint;
ibcPos.Flashpoint_CEL = selectedTemplate.FP_IBC;
ibcPos.SpecRef15_19 = selectedTemplate.SpecRef15_19;
- ibcPos.Hazards = selectedTemplate.Hazard;
+ ibcPos.Hazards = (byte)selectedTemplate.Hazard;
ibcPos.Identifier = DatabaseEntity.GetNewIdentifier(haz.IBCPositions, "IBC-");
- ibcPos.PollutionCategory = selectedTemplate.PollutionCategory;
+ ibcPos.PollutionCategory = (byte?)selectedTemplate.PollutionCategory;
ibcPos.HAZ = haz;
haz.IBCPositions.Add(ibcPos);
this.dataGridIBCItems.Items.Refresh();
@@ -392,7 +392,7 @@ namespace ENI2.SheetDisplayControls
case HAZPosTemplate.SublistType.IMSBC:
IMSBCPosition imsbcPos = new IMSBCPosition();
imsbcPos.Identifier = DatabaseEntity.GetNewIdentifier(haz.IMSBCPositions, "IMSBC-");
- imsbcPos.IMOHazardClass = selectedTemplate.IMSBC_HAZ;
+ imsbcPos.IMOHazardClass = (int?)selectedTemplate.IMSBC_HAZ;
imsbcPos.UNNumber = selectedTemplate.UNNr;
imsbcPos.IMOClass = selectedTemplate.IMOClass;
imsbcPos.MHB = selectedTemplate.MHB ?? false;
@@ -403,7 +403,7 @@ namespace ENI2.SheetDisplayControls
break;
case HAZPosTemplate.SublistType.MARPOL:
MARPOL_Annex_I_Position marpolPos = new MARPOL_Annex_I_Position();
- marpolPos.FlashpointInformation = selectedTemplate.Flashpoint;
+ marpolPos.FlashpointInformation = (byte?) selectedTemplate.Flashpoint;
marpolPos.Identifier = DatabaseEntity.GetNewIdentifier(haz.MARPOLPositions, "MARPOL-");
marpolPos.HAZ = haz;
haz.MARPOLPositions.Add(marpolPos);
diff --git a/SQL/Update_To_7.2.15.sql b/SQL/Update_To_7.2.15.sql
index 8762adb0..b11bd0de 100644
--- a/SQL/Update_To_7.2.15.sql
+++ b/SQL/Update_To_7.2.15.sql
@@ -16,3 +16,54 @@ BEGIN
PRINT N'Table [dbo].[WASExemption] created.';
END
GO
+
+
+PRINT N'Creating [dbo].[HazardMaterial] if missing...';
+GO
+IF OBJECT_ID(N'dbo.HazardMaterial', N'U') IS NULL
+BEGIN
+ CREATE TABLE [dbo].[HazardMaterial] (
+ [Id] UNIQUEIDENTIFIER NOT NULL,
+ [Description] NVARCHAR (100) NULL,
+ [Hazard_Enum] INT NULL,
+ [FP] NVARCHAR (100) NULL,
+ [FP_Enum] INT NULL,
+ [15_19] NVARCHAR (100) NULL,
+ [Typ] NVARCHAR (100) NULL,
+ [IMSBC] NVARCHAR (100) NULL,
+ [MHB] NVARCHAR (100) NULL,
+ [IMSBC_MHB] INT NULL,
+ [Group] NVARCHAR (100) NULL,
+ [IMSBC_HAZ] INT NULL,
+ [UN_Nr] NVARCHAR (100) NULL,
+ [IMO_CL] NVARCHAR (100) NULL,
+ [IBC] NVARCHAR (100) NULL,
+ [Pollution_Category_Enum] INT NULL,
+ [MARPOL] NVARCHAR (100) NULL,
+ [IGC] NVARCHAR (100) NULL,
+ [FP_IBC] NVARCHAR (100) NULL,
+ [Remarks] NVARCHAR (255) NULL,
+ PRIMARY KEY CLUSTERED ([Id] ASC)
+ );
+ PRINT N'Table [dbo].[HazardMaterial] created.';
+END
+GO
+
+PRINT N'Creating [dbo].[PortAreaHelper] if missing...';
+GO
+IF OBJECT_ID(N'dbo.PortAreaHelper', N'U') IS NULL
+BEGIN
+ CREATE TABLE [dbo].[PortAreaHelper] (
+ [Id] UNIQUEIDENTIFIER NOT NULL,
+ [Locode] NCHAR (5) NOT NULL,
+ [Agency] NVARCHAR (100) NULL,
+ [Ships] NVARCHAR (100) NULL,
+ [Berth] NVARCHAR (100) NULL,
+ [PortArea] NVARCHAR (100) NULL,
+ [PortArea_Code] NVARCHAR (10) NULL,
+ [Remarks] NVARCHAR (255) NULL,
+ PRIMARY KEY CLUSTERED ([Id] ASC)
+ );
+ PRINT N'Table [dbo].[PortAreaHelper] created.';
+END
+GO
\ No newline at end of file
diff --git a/bsmd.database/DBManagerAsync.cs b/bsmd.database/DBManagerAsync.cs
index af18f105..0727fa77 100644
--- a/bsmd.database/DBManagerAsync.cs
+++ b/bsmd.database/DBManagerAsync.cs
@@ -112,6 +112,15 @@ namespace bsmd.database
return (await was.LoadListAsync(reader)).ConvertAll(x => (WASExemption)x);
}
+ public static async Task> LoadHAZTemplatesAsync()
+ {
+ SqlCommand cmd = new SqlCommand();
+ HAZPosTemplate hpt = new HAZPosTemplate();
+ hpt.PrepareLoadCommand(cmd, Message.LoadFilter.ALL);
+ SqlDataReader reader = await PerformCommandAsync(cmd);
+ return (await hpt.LoadListAsync(reader)).ConvertAll(x => (HAZPosTemplate)x);
+ }
+
public static async Task> GetAGNTTemplatesAsync()
{
SqlCommand cmd = new SqlCommand();
diff --git a/bsmd.database/HAZPosTemplate.cs b/bsmd.database/HAZPosTemplate.cs
index 44184668..506e794c 100644
--- a/bsmd.database/HAZPosTemplate.cs
+++ b/bsmd.database/HAZPosTemplate.cs
@@ -1,9 +1,14 @@
-// Copyright (c) 2020-present schick Informatik
+// Copyright (c) 2020-present schick Informatik
// Description: Container for HAZA subclass templates
using System;
using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
using System.Data;
+using System.Data.SqlClient;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
namespace bsmd.database
{
@@ -12,7 +17,7 @@ namespace bsmd.database
/// Instances of this class will be offered to users as templates and respective DG entries created on them:
/// IGC, IMSBC, IBC and MARPOL (not! IMDG)
///
- public class HAZPosTemplate
+ public class HAZPosTemplate : DatabaseEntityAsync, IComparable
{
#region enums
@@ -25,114 +30,379 @@ namespace bsmd.database
MARPOL
}
+ public enum PollutionCategoryEnum
+ {
+ X = 0,
+ Y,
+ Z,
+ OS
+ }
+
+ public enum HazardsEnum
+ {
+ P = 0,
+ S,
+ S_P
+ }
+
+ public enum FlashpointEnum
+ {
+ NF = 0,
+ GT60CEL,
+ LE60CEL
+ }
+
+ public enum IMO_HAZ_ClassEnum
+ {
+ A = 0,
+ B,
+ A_B
+ }
+
#endregion
#region Properties
+ private static ObservableCollection _templates;
+ private static Task _loadTask;
+
+ public static ObservableCollection Templates
+ {
+ get
+ {
+ if (_templates == null)
+ {
+ _templates = new ObservableCollection();
+ _ = EnsureLoadedAsync();
+ }
+ return _templates;
+ }
+ }
+
public string Description { get; set; }
- public byte? Hazard { get; set; }
+ public HazardsEnum? Hazard { get; set; }
- public byte? Flashpoint { get; set; }
+ [JsonIgnore]
+ [Browsable(false)]
+ public int? HazardIndex
+ {
+ get { return this.Hazard.HasValue ? (int)this.Hazard.Value : (int?)null; }
+ set { this.Hazard = value.HasValue ? (HazardsEnum?)value.Value : null; }
+ }
+
+ public string FP { get; set; }
+
+ public FlashpointEnum? Flashpoint { get; set; }
+
+ [JsonIgnore]
+ [Browsable(false)]
+ public int? FlashpointIndex
+ {
+ get { return this.Flashpoint.HasValue ? (int)this.Flashpoint.Value : (int?)null; }
+ set { this.Flashpoint = value.HasValue ? (FlashpointEnum?)value.Value : null; }
+ }
public bool? SpecRef15_19 { get; set; } = false;
+ public string IMSBC { get; set; }
+
public bool? MHB { get; set; }
- public byte? IMSBC_HAZ { get; set; }
+ public int? IMSBC_MHB { get; set; }
+ public string Group { get; set; }
+
+ public IMO_HAZ_ClassEnum? IMSBC_HAZ { get; set; }
+
+ [JsonIgnore]
+ [Browsable(false)]
+ public int? IMSBC_HAZ_Index
+ {
+ get { return this.IMSBC_HAZ.HasValue ? (int)this.IMSBC_HAZ.Value : (int?)null; }
+ set { this.IMSBC_HAZ = value.HasValue ? (IMO_HAZ_ClassEnum?)value.Value : null; }
+ }
public string UNNr { get; set; }
- public string IMOClass { get; set; }
+ public string IMOClass { get; set; }
+
+ public string IBC { get; set; }
public string Comment { get; set; }
public SublistType TemplateType { get; set; }
- public byte? PollutionCategory { get; set; }
+ public PollutionCategoryEnum? PollutionCategory { get; set; }
+
+ [JsonIgnore]
+ [Browsable(false)]
+ public int? PollutionCategoryIndex
+ {
+ get { return this.PollutionCategory.HasValue ? (int)this.PollutionCategory.Value : (int?)null; }
+ set { this.PollutionCategory = value.HasValue ? (PollutionCategoryEnum?)value.Value : null; }
+ }
+ public string MARPOL { get; set; }
+
+ public string IGC { get; set; }
public string FP_IBC { get; set; }
#endregion
- #region static storage helper classes
+ #region DatabaseEntity implementation
- public static string GetQuery()
+ public HAZPosTemplate()
{
- return "SELECT Beschreibung, HAZARD_ENUM, FP_ENUM, \"15.19?\", Typ, MHB, IMSBC_HAZ, \"UN-Nr.\", \"IMO-Cl.\", POLLUTION_CATEGORY_ENUM, Bemerkung, FP_IBC FROM GEFAHRGUTLISTE ORDER BY Beschreibung";
+ this.tablename = "[dbo].[HazardMaterial]";
}
- public static List LoadList(IDataReader reader)
+ public override void PrepareSave(IDbCommand cmd)
{
- List result = new List();
+ SqlCommand scmd = cmd as SqlCommand;
- while(reader.Read())
+ scmd.Parameters.AddWithNullableValue("@P1", this.Description);
+ scmd.Parameters.AddWithNullableValue("@P2", this.Hazard.HasValue ? (int?)this.Hazard.Value : null);
+ scmd.Parameters.AddWithNullableValue("@P3", this.FP);
+ scmd.Parameters.AddWithNullableValue("@P4", this.Flashpoint.HasValue ? (int?)this.Flashpoint.Value : null);
+ scmd.Parameters.AddWithNullableValue("@P5", this.SpecRef15_19.HasValue ? (this.SpecRef15_19.Value ? "Yes" : "No") : null);
+ scmd.Parameters.AddWithNullableValue("@P6", this.TemplateType.ToString());
+ scmd.Parameters.AddWithNullableValue("@P7", this.IMSBC);
+ scmd.Parameters.AddWithNullableValue("@P8", this.MHB.HasValue ? (this.MHB.Value ? "y" : "n") : null);
+ scmd.Parameters.AddWithNullableValue("@P9", this.IMSBC_MHB);
+ scmd.Parameters.AddWithNullableValue("@P10", this.Group);
+ scmd.Parameters.AddWithNullableValue("@P11", this.IMSBC_HAZ.HasValue ? (int?)this.IMSBC_HAZ.Value : null);
+ scmd.Parameters.AddWithNullableValue("@P12", this.UNNr);
+ scmd.Parameters.AddWithNullableValue("@P13", this.IMOClass);
+ scmd.Parameters.AddWithNullableValue("@P14", this.IBC);
+ scmd.Parameters.AddWithNullableValue("@P15", this.PollutionCategory.HasValue ? (int?)this.PollutionCategory.Value : null);
+ scmd.Parameters.AddWithNullableValue("@P16", this.MARPOL);
+ scmd.Parameters.AddWithNullableValue("@P17", this.IGC);
+ scmd.Parameters.AddWithNullableValue("@P18", this.FP_IBC);
+ scmd.Parameters.AddWithNullableValue("@P19", this.Comment);
+
+ if (this.IsNew)
{
- string type = "";
- if (!reader.IsDBNull(4))
- type = reader.GetString(4);
+ this.CreateId();
+ scmd.Parameters.AddWithValue("@ID", this.Id);
+ cmd.CommandText = string.Format(
+ "INSERT INTO {0} (Id, Description, Hazard_Enum, FP, FP_Enum, [15_19], Typ, IMSBC, MHB, IMSBC_MHB, [Group], IMSBC_HAZ, UN_Nr, IMO_CL, IBC, Pollution_Category_Enum, MARPOL, IGC, FP_IBC, Remarks) " +
+ "VALUES (@ID, @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12, @P13, @P14, @P15, @P16, @P17, @P18, @P19)",
+ this.Tablename);
+ }
+ else
+ {
+ cmd.CommandText = string.Format(
+ "UPDATE {0} SET Description = @P1, Hazard_Enum = @P2, FP = @P3, FP_Enum = @P4, [15_19] = @P5, Typ = @P6, " +
+ "IMSBC = @P7, MHB = @P8, IMSBC_MHB = @P9, [Group] = @P10, IMSBC_HAZ = @P11, UN_Nr = @P12, IMO_CL = @P13, " +
+ "IBC = @P14, Pollution_Category_Enum = @P15, MARPOL = @P16, IGC = @P17, FP_IBC = @P18, Remarks = @P19 WHERE Id = @ID",
+ this.Tablename);
+ scmd.Parameters.AddWithValue("@ID", this.Id);
+ }
+ }
+ public override void PrepareLoadCommand(IDbCommand cmd, Message.LoadFilter filter, params object[] criteria)
+ {
+ string query = string.Format(
+ "SELECT Id, Description, Hazard_Enum, FP, FP_Enum, [15_19], Typ, IMSBC, MHB, IMSBC_MHB, [Group], IMSBC_HAZ, UN_Nr, IMO_CL, IBC, Pollution_Category_Enum, MARPOL, IGC, FP_IBC, Remarks FROM {0}",
+ this.Tablename);
+
+ switch (filter)
+ {
+ case Message.LoadFilter.ALL:
+ default:
+ break;
+ }
+
+ cmd.CommandText = query;
+ }
+
+ public override List LoadList(IDataReader reader)
+ {
+ List result = new List();
+
+ while (reader.Read())
+ {
HAZPosTemplate hpt = new HAZPosTemplate();
- hpt.Description = reader.GetString(0);
+ hpt.id = reader.GetGuid(0);
if (!reader.IsDBNull(1))
- hpt.Hazard = (byte) reader.GetByte(1);
+ hpt.Description = reader.GetString(1);
if (!reader.IsDBNull(2))
- hpt.Flashpoint = (byte) reader.GetByte(2);
+ hpt.Hazard = (HazardsEnum)reader.GetInt32(2);
if (!reader.IsDBNull(3))
+ hpt.FP = reader.GetString(3);
+ if (!reader.IsDBNull(4))
+ hpt.Flashpoint = (FlashpointEnum)reader.GetInt32(4);
+ if (!reader.IsDBNull(5))
{
- string specRefString = reader.GetString(3);
+ string specRefString = reader.GetString(5);
if (specRefString.Equals("JA", StringComparison.OrdinalIgnoreCase) || specRefString.Equals("Yes", StringComparison.OrdinalIgnoreCase)) hpt.SpecRef15_19 = true;
if (specRefString.Equals("NEIN", StringComparison.OrdinalIgnoreCase) || specRefString.Equals("No", StringComparison.OrdinalIgnoreCase)) hpt.SpecRef15_19 = false;
}
-
- switch(type)
+ if (!reader.IsDBNull(6) && Enum.TryParse(reader.GetString(6), out SublistType templateType))
{
- case "IBC": hpt.TemplateType = SublistType.IBC; break;
- case "IGC": hpt.TemplateType = SublistType.IGC; break;
- case "IMSBC": hpt.TemplateType = SublistType.IMSBC ; break;
- case "MARPOL": hpt.TemplateType = SublistType.MARPOL; break;
- default:
- break;
+ hpt.TemplateType = templateType;
}
-
- if(!reader.IsDBNull(5))
+ if (!reader.IsDBNull(7))
+ hpt.IMSBC = reader.GetString(7);
+ if (!reader.IsDBNull(8))
{
- string mhbstring = reader.GetString(5);
+ string mhbstring = reader.GetString(8);
if (mhbstring.Equals("y", StringComparison.OrdinalIgnoreCase))
hpt.MHB = true;
+ else if (mhbstring.Equals("n", StringComparison.OrdinalIgnoreCase))
+ hpt.MHB = false;
}
-
- if (!reader.IsDBNull(6))
- hpt.IMSBC_HAZ = (byte)reader.GetByte(6);
- if (!reader.IsDBNull(7))
- hpt.UNNr = reader.GetString(7);
- if(!reader.IsDBNull(8))
- hpt.IMOClass = reader.GetString(8);
if (!reader.IsDBNull(9))
- hpt.PollutionCategory = (byte)reader.GetByte(9);
+ hpt.IMSBC_MHB = reader.GetInt32(9);
if (!reader.IsDBNull(10))
- hpt.Comment = reader.GetString(10);
+ hpt.Group = reader.GetString(10);
if (!reader.IsDBNull(11))
- hpt.FP_IBC = reader.GetString(11);
+ hpt.IMSBC_HAZ = (IMO_HAZ_ClassEnum)reader.GetInt32(11);
+ if (!reader.IsDBNull(12))
+ hpt.UNNr = reader.GetString(12);
+ if (!reader.IsDBNull(13))
+ hpt.IMOClass = reader.GetString(13);
+ if (!reader.IsDBNull(14))
+ hpt.IBC = reader.GetString(14);
+ if (!reader.IsDBNull(15))
+ hpt.PollutionCategory = (PollutionCategoryEnum)reader.GetInt32(15);
+ if (!reader.IsDBNull(16))
+ hpt.MARPOL = reader.GetString(16);
+ if (!reader.IsDBNull(17))
+ hpt.IGC = reader.GetString(17);
+ if (!reader.IsDBNull(18))
+ hpt.FP_IBC = reader.GetString(18);
+ if (!reader.IsDBNull(19))
+ hpt.Comment = reader.GetString(19);
result.Add(hpt);
}
+ reader.Close();
return result;
}
+ protected override DatabaseEntityAsync ReadRowFromReader(IDataReader reader)
+ {
+ HAZPosTemplate hpt = null;
+ if (reader != null)
+ {
+ hpt = new HAZPosTemplate();
+ hpt.id = reader.GetGuid(0);
+ if (!reader.IsDBNull(1))
+ hpt.Description = reader.GetString(1);
+ if (!reader.IsDBNull(2))
+ hpt.Hazard = (HazardsEnum)reader.GetInt32(2);
+ if (!reader.IsDBNull(3))
+ hpt.FP = reader.GetString(3);
+ if (!reader.IsDBNull(4))
+ hpt.Flashpoint = (FlashpointEnum)reader.GetInt32(4);
+ if (!reader.IsDBNull(5))
+ {
+ string specRefString = reader.GetString(5);
+ if (specRefString.Equals("JA", StringComparison.OrdinalIgnoreCase) || specRefString.Equals("Yes", StringComparison.OrdinalIgnoreCase)) hpt.SpecRef15_19 = true;
+ if (specRefString.Equals("NEIN", StringComparison.OrdinalIgnoreCase) || specRefString.Equals("No", StringComparison.OrdinalIgnoreCase)) hpt.SpecRef15_19 = false;
+ }
+ if (!reader.IsDBNull(6) && Enum.TryParse(reader.GetString(6), out SublistType templateType))
+ {
+ hpt.TemplateType = templateType;
+ }
+ if (!reader.IsDBNull(7))
+ hpt.IMSBC = reader.GetString(7);
+ if (!reader.IsDBNull(8))
+ {
+ string mhbstring = reader.GetString(8);
+ if (mhbstring.Equals("y", StringComparison.OrdinalIgnoreCase))
+ hpt.MHB = true;
+ else if (mhbstring.Equals("n", StringComparison.OrdinalIgnoreCase))
+ hpt.MHB = false;
+ }
+ if (!reader.IsDBNull(9))
+ hpt.IMSBC_MHB = reader.GetInt32(9);
+ if (!reader.IsDBNull(10))
+ hpt.Group = reader.GetString(10);
+ if (!reader.IsDBNull(11))
+ hpt.IMSBC_HAZ = (IMO_HAZ_ClassEnum)reader.GetInt32(11);
+ if (!reader.IsDBNull(12))
+ hpt.UNNr = reader.GetString(12);
+ if (!reader.IsDBNull(13))
+ hpt.IMOClass = reader.GetString(13);
+ if (!reader.IsDBNull(14))
+ hpt.IBC = reader.GetString(14);
+ if (!reader.IsDBNull(15))
+ hpt.PollutionCategory = (PollutionCategoryEnum)reader.GetInt32(15);
+ if (!reader.IsDBNull(16))
+ hpt.MARPOL = reader.GetString(16);
+ if (!reader.IsDBNull(17))
+ hpt.IGC = reader.GetString(17);
+ if (!reader.IsDBNull(18))
+ hpt.FP_IBC = reader.GetString(18);
+ if (!reader.IsDBNull(19))
+ hpt.Comment = reader.GetString(19);
+ }
+ return hpt;
+ }
+
+ #endregion
+
+ #region Static loading
+
+ public static async Task EnsureLoadedAsync()
+ {
+ if (_templates == null)
+ {
+ _templates = new ObservableCollection();
+ }
+
+ if (_loadTask != null)
+ {
+ await _loadTask;
+ return;
+ }
+
+ _loadTask = LoadInternalAsync();
+ await _loadTask;
+ }
+
+ private static async Task LoadInternalAsync()
+ {
+ var list = await DBManagerAsync.LoadHAZTemplatesAsync();
+ _templates.Clear();
+ foreach (var item in list)
+ {
+ _templates.Add(item);
+ }
+ }
+
#endregion
#region overrides
public override string ToString()
{
+ if(string.IsNullOrEmpty(this.Description))
+ return base.ToString();
+
if (this.Description.Length > 75)
return string.Format("{0}...", this.Description.Substring(0, 75));
+
return Description;
}
#endregion
+ #region IComparable implementation
+
+ public int CompareTo(object obj)
+ {
+ if (obj is HAZPosTemplate other)
+ {
+ return this.Description?.CompareTo(other.Description ?? "") ?? 0;
+ }
+ return 0;
+ }
+
+ #endregion
+
}
}
diff --git a/bsmd.database/bsmd.database.csproj b/bsmd.database/bsmd.database.csproj
index e7cae5ee..9917f83c 100644
--- a/bsmd.database/bsmd.database.csproj
+++ b/bsmd.database/bsmd.database.csproj
@@ -120,8 +120,8 @@
-
-
+
+