diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index 1c9643a7..6e7039fc 100644 Binary files a/Stundensheet.xlsx and b/Stundensheet.xlsx differ diff --git a/nsw/Source/SQL/Update_1.6_To_1.7.sql b/nsw/Source/SQL/Update_1.6_To_1.7.sql new file mode 100644 index 00000000..1422425e --- /dev/null +++ b/nsw/Source/SQL/Update_1.6_To_1.7.sql @@ -0,0 +1,59 @@ +CREATE TABLE [dbo].[CallPurpose] +( + [Id] UNIQUEIDENTIFIER CONSTRAINT [DF_CallPurpose_Id] DEFAULT (newid()) ROWGUIDCOL NOT NULL, + [NOA_NODId] UNIQUEIDENTIFIER NULL, + [CallPurposeCode] int NULL, + [CallPurposeDescription] NVARCHAR (100) NULL, + CONSTRAINT [PK_CallPurpose] PRIMARY KEY CLUSTERED ([Id] ASC), + CONSTRAINT [FK_CallPurpose_NOA_NOD] FOREIGN KEY ([NOA_NODId]) REFERENCES [dbo].[NOA_NOD] ([Id]) +) + +GO + +ALTER TABLE [dbo].[NOA_NOD] DROP COLUMN [CallPurposeCode], COLUMN [CallPurposeDescription]; +GO + +ALTER TABLE [dbo].[BKRA] ADD [Identifier] NVARCHAR (50) NULL; +GO +ALTER TABLE [dbo].[BKRD] ADD [Identifier] NVARCHAR (50) NULL; +GO +ALTER TABLE [dbo].[LADG] ADD [Identifier] NVARCHAR (50) NULL; +GO +ALTER TABLE [dbo].[CREW] ADD [Identifier] NVARCHAR (50) NULL; +GO +ALTER TABLE [dbo].[PAS] ADD [Identifier] NVARCHAR (50) NULL; +GO +ALTER TABLE [dbo].[SERV] ADD [Identifier] NVARCHAR (50) NULL; +GO +ALTER TABLE [dbo].[TOWA] ADD [Identifier] NVARCHAR (50) NULL; +GO +ALTER TABLE [dbo].[TOWD] ADD [Identifier] NVARCHAR (50) NULL; +GO +ALTER TABLE [dbo].[CallPurpose] ADD [Identifier] NVARCHAR (50) NULL; +GO +ALTER TABLE [dbo].[LastTenPortFacilitiesCalled] ADD [Identifier] NVARCHAR (50) NULL; +GO +ALTER TABLE [dbo].[PortOfCallLast30Days] ADD [Identifier] NVARCHAR (50) NULL; +GO +ALTER TABLE [dbo].[PortOfCallLast30DaysCrewJoinedShip] ADD [Identifier] NVARCHAR (50) NULL; +GO +ALTER TABLE [dbo].[PortOfItinerary] ADD [Identifier] NVARCHAR (50) NULL; +GO +ALTER TABLE [dbo].[ShipToShipActivitiesDuringLastTenPortFacilitiesCalled] ADD [Identifier] NVARCHAR (50) NULL; +GO +ALTER TABLE [dbo].[SubsidiaryRisks] ADD [Identifier] NVARCHAR (50) NULL; +GO +ALTER TABLE [dbo].[Waste] ADD [Identifier] NVARCHAR (50) NULL; +GO +ALTER TABLE [dbo].[WasteDisposalServiceProvider] ADD [Identifier] NVARCHAR (50) NULL; +GO + + +ALTER TABLE [dbo].[Waste] DROP CONSTRAINT [FK_Waste_WasteDisposalServiceProvider]; +GO + +ALTER TABLE [dbo].[MessageCore] ADD [ETAKielCanal] DATETIME NULL; +GO + +EXECUTE sp_rename @objname = N'[dbo].[TOWD].[TowageOnDepartureOperatorStreetAndNumber]', @newname = N'TowageOnDepartureOperatorStreetNameAndNumber', @objtype = N'COLUMN'; +GO diff --git a/nsw/Source/bsmd.database/BKRA.cs b/nsw/Source/bsmd.database/BKRA.cs index b4ff33ef..1c847d03 100644 --- a/nsw/Source/bsmd.database/BKRA.cs +++ b/nsw/Source/bsmd.database/BKRA.cs @@ -28,6 +28,8 @@ namespace bsmd.database public float? BunkerFuelQuantity_TNE { get; set; } + public string Identifier { get; set; } + #endregion #region DatabaseEntity implementation @@ -40,11 +42,12 @@ namespace bsmd.database scmd.Parameters.AddWithValue("@P1", this.MessageHeader.Id); scmd.Parameters.AddWithNullableValue("@P2", this.BunkerFuelType); scmd.Parameters.AddWithNullableValue("@P3", this.BunkerFuelQuantity_TNE); + scmd.Parameters.AddWithNullableValue("@P4", this.Identifier); if (this.IsNew) { - scmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, BunkerFuelType, BunkerFuelQuantity_TNE) " + - "VALUES ( @P1, @P2, @P3 )", this.Tablename); + scmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, BunkerFuelType, BunkerFuelQuantity_TNE, Identifier) " + + "VALUES ( @P1, @P2, @P3, @P4 )", this.Tablename); } else { @@ -55,7 +58,7 @@ namespace bsmd.database public override void PrepareLoadCommand(System.Data.IDbCommand cmd, Message.LoadFilter filter, params object[] criteria) { - string query = string.Format("SELECT Id, BunkerFuelType, BunkerFuelQuantity_TNE FROM {0}", this.Tablename); + string query = string.Format("SELECT Id, BunkerFuelType, BunkerFuelQuantity_TNE, Identifier FROM {0}", this.Tablename); switch (filter) { @@ -83,6 +86,7 @@ namespace bsmd.database bkra.id = reader.GetGuid(0); if (!reader.IsDBNull(1)) bkra.BunkerFuelType = reader.GetString(1); if (!reader.IsDBNull(2)) bkra.BunkerFuelQuantity_TNE = (float) reader.GetDouble(2); + if (!reader.IsDBNull(3)) bkra.Identifier = reader.GetString(3); result.Add(bkra); } reader.Close(); diff --git a/nsw/Source/bsmd.database/BPOL.cs b/nsw/Source/bsmd.database/BPOL.cs index d165ed15..8d264e56 100644 --- a/nsw/Source/bsmd.database/BPOL.cs +++ b/nsw/Source/bsmd.database/BPOL.cs @@ -14,7 +14,7 @@ using System.Collections.Generic; namespace bsmd.database { - public class BPOL : DatabaseEntity + public class BPOL : DatabaseEntity, ISublistContainer { private List poi = new List(); @@ -44,7 +44,9 @@ namespace bsmd.database if (this.IsNew) { - scmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, StowawaysOnBoard) VALUES ( @P1, @P2 )", + this.CreateId(); + scmd.Parameters.AddWithValue("@ID", this.Id); + scmd.CommandText = string.Format("INSERT INTO {0} (Id, MessageHeaderId, StowawaysOnBoard) VALUES ( @ID, @P1, @P2 )", this.Tablename); } else @@ -91,6 +93,18 @@ namespace bsmd.database #endregion + #region ISublistContainer implementation + + public ISublistElement GetSublistElementWithIdentifier(string identifier) + { + foreach (ISublistElement subElement in this.PortOfItineraries) + if (subElement.Identifier.Equals(identifier)) + return subElement; + return null; + } + + #endregion + } } diff --git a/nsw/Source/bsmd.database/BRKD.cs b/nsw/Source/bsmd.database/BRKD.cs index f43db3d9..682db2e5 100644 --- a/nsw/Source/bsmd.database/BRKD.cs +++ b/nsw/Source/bsmd.database/BRKD.cs @@ -28,6 +28,8 @@ namespace bsmd.database public float? BunkerFuelQuantity_TNE { get; set; } + public string Identifier { get; set; } + #endregion #region DatabaseEntity implementation @@ -40,11 +42,12 @@ namespace bsmd.database scmd.Parameters.AddWithValue("@P1", this.MessageHeader.Id); scmd.Parameters.AddWithNullableValue("@P2", this.BunkerFuelType); scmd.Parameters.AddWithNullableValue("@P3", this.BunkerFuelQuantity_TNE); + scmd.Parameters.AddWithNullableValue("@P4", this.Identifier); if (this.IsNew) { - scmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, BunkerFuelType, BunkerFuelQuantity_TNE) " + - "VALUES ( @P1, @P2, @P3 )", this.Tablename); + scmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, BunkerFuelType, BunkerFuelQuantity_TNE, Identifier) " + + "VALUES ( @P1, @P2, @P3, @P4 )", this.Tablename); } else { @@ -55,7 +58,7 @@ namespace bsmd.database public override void PrepareLoadCommand(System.Data.IDbCommand cmd, Message.LoadFilter filter, params object[] criteria) { - string query = string.Format("SELECT Id, BunkerFuelType, BunkerFuelQuantity_TNE FROM {0}", this.Tablename); + string query = string.Format("SELECT Id, BunkerFuelType, BunkerFuelQuantity_TNE, Identifier FROM {0}", this.Tablename); switch (filter) { @@ -83,6 +86,7 @@ namespace bsmd.database bkrd.id = reader.GetGuid(0); if (!reader.IsDBNull(1)) bkrd.BunkerFuelType = reader.GetString(1); if (!reader.IsDBNull(2)) bkrd.BunkerFuelQuantity_TNE = (float) reader.GetDouble(2); + if (!reader.IsDBNull(3)) bkrd.Identifier = reader.GetString(3); result.Add(bkrd); } reader.Close(); diff --git a/nsw/Source/bsmd.database/CREW.cs b/nsw/Source/bsmd.database/CREW.cs index 79e4de26..e4ea4a84 100644 --- a/nsw/Source/bsmd.database/CREW.cs +++ b/nsw/Source/bsmd.database/CREW.cs @@ -44,6 +44,8 @@ namespace bsmd.database public string CrewMemberDuty { get; set; } + public string Identifier { get; set; } + #endregion #region DatabaseEntity implementation @@ -64,13 +66,14 @@ namespace bsmd.database scmd.Parameters.AddWithNullableValue("@P9", this.CrewMemberIdentityDocumentId); scmd.Parameters.AddWithNullableValue("@P10", this.CrewMemberVisaNumber); scmd.Parameters.AddWithNullableValue("@P11", this.CrewMemberDuty); + scmd.Parameters.AddWithNullableValue("@P12", this.Identifier); if (this.IsNew) { scmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, CrewMemberLastName, CrewMemberFirstName, " + "CrewMemberPlaceOfBirth, CrewMemberDateOfBirth, CrewMemberGender, CrewMemberNationality,CrewMemberIdentityDocumentType, " + - "CrewMemberIdentityDocumentId, CrewMemberVisaNumber, CrewMemberDuty) " + - "VALUES ( @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11 )", this.Tablename); + "CrewMemberIdentityDocumentId, CrewMemberVisaNumber, CrewMemberDuty, Identifier) " + + "VALUES ( @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12 )", this.Tablename); } else { @@ -86,7 +89,7 @@ namespace bsmd.database { string query = string.Format("SELECT Id, CrewMemberLastName, CrewMemberFirstName, CrewMemberPlaceOfBirth, " + "CrewMemberDateOfBirth, CrewMemberGender, CrewMemberNationality, CrewMemberIdentityDocumentType, CrewMemberIdentityDocumentId, " + - "CrewMemberVisaNumber, CrewMemberDuty FROM {0}", this.Tablename); + "CrewMemberVisaNumber, CrewMemberDuty, Identifier FROM {0}", this.Tablename); switch (filter) { @@ -122,6 +125,7 @@ namespace bsmd.database if (!reader.IsDBNull(8)) crew.CrewMemberIdentityDocumentId = reader.GetString(8); if (!reader.IsDBNull(9)) crew.CrewMemberVisaNumber = reader.GetString(9); if (!reader.IsDBNull(10)) crew.CrewMemberDuty = reader.GetString(10); + if (!reader.IsDBNull(11)) crew.Identifier = reader.GetString(11); result.Add(crew); } reader.Close(); diff --git a/nsw/Source/bsmd.database/CallPurpose.cs b/nsw/Source/bsmd.database/CallPurpose.cs index 0d2a9eee..3d3ea7de 100644 --- a/nsw/Source/bsmd.database/CallPurpose.cs +++ b/nsw/Source/bsmd.database/CallPurpose.cs @@ -14,7 +14,7 @@ using System.Collections.Generic; namespace bsmd.database { - public class CallPurpose : DatabaseEntity + public class CallPurpose : DatabaseEntity, ISublistElement { public CallPurpose() @@ -30,6 +30,8 @@ namespace bsmd.database public string CallPurposeDescription { get; set; } + public string Identifier { get; set; } + #endregion #region DatabaseEntity implementation @@ -41,11 +43,12 @@ namespace bsmd.database scmd.Parameters.AddWithValue("@P1", this.NOA_NOD.Id); scmd.Parameters.AddWithNullableValue("@P2", this.CallPurposeCode); scmd.Parameters.AddWithNullableValue("@P3", this.CallPurposeDescription); + scmd.Parameters.AddWithNullableValue("@P4", this.Identifier); if (this.IsNew) { - scmd.CommandText = string.Format("INSERT INTO {0} (NOA_NODId, CallPurposeCode, CallPurposeDescription) " + - " VALUES ( @P1, @P2, @P3 )", this.Tablename); + scmd.CommandText = string.Format("INSERT INTO {0} (NOA_NODId, CallPurposeCode, CallPurposeDescription, Identifier) " + + " VALUES ( @P1, @P2, @P3, @P4 )", this.Tablename); } else { @@ -57,7 +60,7 @@ namespace bsmd.database public override void PrepareLoadCommand(System.Data.IDbCommand cmd, Message.LoadFilter filter, params object[] criteria) { - string query = string.Format("SELECT Id, CallPurposeCode, CallPurposeDescription FROM {0} ", this.Tablename); + string query = string.Format("SELECT Id, CallPurposeCode, CallPurposeDescription, Identifier FROM {0} ", this.Tablename); switch (filter) { @@ -85,6 +88,7 @@ namespace bsmd.database cp.id = reader.GetGuid(0); if (!reader.IsDBNull(1)) cp.CallPurposeCode = reader.GetInt32(1); if (!reader.IsDBNull(2)) cp.CallPurposeDescription = reader.GetString(2); + if (!reader.IsDBNull(3)) cp.Identifier = reader.GetString(3); result.Add(cp); } reader.Close(); diff --git a/nsw/Source/bsmd.database/DBManager.cs b/nsw/Source/bsmd.database/DBManager.cs index 82c895d4..1c7dde36 100644 --- a/nsw/Source/bsmd.database/DBManager.cs +++ b/nsw/Source/bsmd.database/DBManager.cs @@ -415,9 +415,9 @@ namespace bsmd.database } Waste waste = new Waste(); - waste.PrepareLoadCommand(cmd, Message.LoadFilter.WDSP_ID, was.Id); + waste.PrepareLoadCommand(cmd, Message.LoadFilter.WAS_ID, was.Id); SqlDataReader reader2 = this.PerformCommand(cmd); - List wastes = wdsp.LoadList(reader2); + List wastes = waste.LoadList(reader2); foreach (Waste aWaste in wastes) { was.Waste.Add(aWaste); diff --git a/nsw/Source/bsmd.database/ISublistContainer.cs b/nsw/Source/bsmd.database/ISublistContainer.cs new file mode 100644 index 00000000..8049bdae --- /dev/null +++ b/nsw/Source/bsmd.database/ISublistContainer.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace bsmd.database +{ + /// + /// Dieses Interface wird von DatabaseEntities implementiert, die 1:n Sublisten haben + /// + public interface ISublistContainer + { + ISublistElement GetSublistElementWithIdentifier(string identifier); + } + + /// + /// Dieses Interface kennzeichnet die Merkmale eines Sublisten-Elements + /// + public interface ISublistElement + { + string Identifier { get; set; } + } + +} diff --git a/nsw/Source/bsmd.database/LADG.cs b/nsw/Source/bsmd.database/LADG.cs index 02b05da3..355242f1 100644 --- a/nsw/Source/bsmd.database/LADG.cs +++ b/nsw/Source/bsmd.database/LADG.cs @@ -14,7 +14,7 @@ using System.Collections.Generic; namespace bsmd.database { - public class LADG : DatabaseEntity + public class LADG : DatabaseEntity, ISublistElement { public LADG() @@ -22,7 +22,7 @@ namespace bsmd.database this.tablename = "[dbo].[LADG]"; } - #region Properties + #region Properties public byte? CargoHandlingType { get; set; } @@ -32,6 +32,8 @@ namespace bsmd.database public float? CargoGrossQuantity_TNE { get; set; } + public string Identifier { get; set; } + #endregion #region DatabaseEntity implementation @@ -46,11 +48,12 @@ namespace bsmd.database scmd.Parameters.AddWithNullableValue("@P3", this.CargoCodeNST); scmd.Parameters.AddWithNullableValue("@P4", this.CargoNumberOfItems); scmd.Parameters.AddWithNullableValue("@P5", this.CargoGrossQuantity_TNE); + scmd.Parameters.AddWithNullableValue("@P6", this.Identifier); if (this.IsNew) { scmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, CargoHandlingType, CargoCodeNST, " + - "CargoNumberOfItems, CargoGrossQuantity_TNE) VALUES ( @P1, @P2, @P3, @P4, @P5 )", this.Tablename); + "CargoNumberOfItems, CargoGrossQuantity_TNE, Identifier) VALUES ( @P1, @P2, @P3, @P4, @P5, @P6 )", this.Tablename); } else { @@ -62,7 +65,7 @@ namespace bsmd.database public override void PrepareLoadCommand(System.Data.IDbCommand cmd, Message.LoadFilter filter, params object[] criteria) { - string query = string.Format("SELECT Id, CargoHandlingType, CargoCodeNST, CargoNumberOfItems, CargoGrossQuantity_TNE FROM {0}", + string query = string.Format("SELECT Id, CargoHandlingType, CargoCodeNST, CargoNumberOfItems, CargoGrossQuantity_TNE, Identifier FROM {0}", this.Tablename); switch (filter) @@ -93,6 +96,7 @@ namespace bsmd.database if (!reader.IsDBNull(2)) ladg.CargoCodeNST = reader.GetString(2); if (!reader.IsDBNull(3)) ladg.CargoNumberOfItems = reader.GetInt32(3); if (!reader.IsDBNull(4)) ladg.CargoGrossQuantity_TNE = (float) reader.GetDouble(4); + if (!reader.IsDBNull(5)) ladg.Identifier = reader.GetString(5); result.Add(ladg); } reader.Close(); diff --git a/nsw/Source/bsmd.database/LastTenPortFacilitiesCalled.cs b/nsw/Source/bsmd.database/LastTenPortFacilitiesCalled.cs index 28ee455c..439ebd1a 100644 --- a/nsw/Source/bsmd.database/LastTenPortFacilitiesCalled.cs +++ b/nsw/Source/bsmd.database/LastTenPortFacilitiesCalled.cs @@ -14,7 +14,7 @@ using System.Collections.Generic; namespace bsmd.database { - public class LastTenPortFacilitiesCalled : DatabaseEntity + public class LastTenPortFacilitiesCalled : DatabaseEntity, ISublistElement { public LastTenPortFacilitiesCalled() @@ -40,7 +40,9 @@ namespace bsmd.database public string PortFacilitySecurityMattersToReport { get; set; } - public string PortFacilityGISISCode { get; set; } + public string PortFacilityGISISCode { get; set; } + + public string Identifier { get; set; } #endregion @@ -59,13 +61,14 @@ namespace bsmd.database scmd.Parameters.AddWithNullableValue("@P6", this.PortFacilityDateOfDeparture); scmd.Parameters.AddWithNullableValue("@P7", this.PortFacilityShipSecurityLevel); scmd.Parameters.AddWithNullableValue("@P8", this.PortFacilitySecurityMattersToReport); - scmd.Parameters.AddWithNullableValue("@P9", this.PortFacilityGISISCode); + scmd.Parameters.AddWithNullableValue("@P9", this.PortFacilityGISISCode); + scmd.Parameters.AddWithNullableValue("@P10", this.Identifier); if (this.IsNew) { scmd.CommandText = string.Format("INSERT INTO {0} (SEC_Id, PortFacilityPortName, PortFacilityPortCountry, " + "PortFacilityPortLoCode, PortFacilityDateOfArrival, PortFacilityDateOfDeparture, PortFacilityShipSecurityLevel, " + - "PortFacilitySecurityMattersToReport, PortFacilityGISISCode) VALUES ( @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9)", + "PortFacilitySecurityMattersToReport, PortFacilityGISISCode, Identifier) VALUES ( @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10)", this.Tablename); } else @@ -73,7 +76,7 @@ namespace bsmd.database scmd.Parameters.AddWithValue(@"ID", this.Id); scmd.CommandText = string.Format("UPDATE {0} SET PortFacilityPortName = @P2, PortFacilityPortCountry = @P3, " + "PortFacilityPortLoCode = @P4, PortFacilityDateOfArrival = @P5, PortFacilityDateOfDeparture = @P6," + - "PortFacilityShipSecurityLevel = @P7, PortFacilitySecurityMattersToReport = @8, PortFacilityGISISCode = @P9 " + + "PortFacilityShipSecurityLevel = @P7, PortFacilitySecurityMattersToReport = @P8, PortFacilityGISISCode = @P9 " + " WHERE Id = @ID", this.Tablename); } } @@ -82,7 +85,7 @@ namespace bsmd.database { string query = string.Format("SELECT Id, PortFacilityPortName, PortFacilityPortCountry, PortFacilityPortLoCode, " + "PortFacilityDateOfArrival, PortFacilityDateOfDeparture, PortFacilityShipSecurityLevel, PortFacilitySecurityMattersToReport, " + - "PortFacilityGISISCode FROM {0} ", this.Tablename); + "PortFacilityGISISCode, Identifier FROM {0} ", this.Tablename); switch (filter) { @@ -117,7 +120,8 @@ namespace bsmd.database if (!reader.IsDBNull(5)) ltpfc.PortFacilityDateOfDeparture = reader.GetDateTime(5); if (!reader.IsDBNull(6)) ltpfc.PortFacilityShipSecurityLevel = reader.GetByte(6); if (!reader.IsDBNull(7)) ltpfc.PortFacilitySecurityMattersToReport = reader.GetString(7); - if (!reader.IsDBNull(8)) ltpfc.PortFacilityGISISCode = reader.GetString(8); + if (!reader.IsDBNull(8)) ltpfc.PortFacilityGISISCode = reader.GetString(8); + if (!reader.IsDBNull(9)) ltpfc.Identifier = reader.GetString(9); result.Add(ltpfc); } reader.Close(); diff --git a/nsw/Source/bsmd.database/MDH.cs b/nsw/Source/bsmd.database/MDH.cs index 323943e2..499a3495 100644 --- a/nsw/Source/bsmd.database/MDH.cs +++ b/nsw/Source/bsmd.database/MDH.cs @@ -14,7 +14,7 @@ using System.Collections.Generic; namespace bsmd.database { - public class MDH : DatabaseEntity + public class MDH : DatabaseEntity, ISublistContainer { private List portOfCallLast30Days = new List(); @@ -113,12 +113,14 @@ namespace bsmd.database if (this.IsNew) { - scmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, MDHSimplification, PortOfCallWhereCompleteMDHNotified, " + + this.CreateId(); + scmd.Parameters.AddWithValue("@ID", this.Id); + scmd.CommandText = string.Format("INSERT INTO {0} (Id, MessageHeaderId, MDHSimplification, PortOfCallWhereCompleteMDHNotified, " + "NonAccidentalDeathsDuringVoyage, NonAccidentalDeathsDuringVoyageCount, SuspisionInfectiousNature, NumberOfIllPersonsHigherThanExpected, " + "NumberOfIllPersons, SickPersonsOnBoard, MedicalConsulted, AwareOfFurtherInfections, SanitaryMeasuresApplied, SanitaryMeasuresType, " + "SanitaryMeasuresLocation, SanitaryMeasuresDate, StowawaysDetected, StowawaysJoiningLocation, SickAnimalOrPetOnBoard, " + "ValidSanitaryControlExemptionOrCertificateOnBoard, PlaceOfIssue, DateOfIssue, SanitaryControlReinspectionRequired, " + - "InfectedAreaVisited, InfectedAreaPort, InfectedAreaDate) VALUES (@P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12, " + + "InfectedAreaVisited, InfectedAreaPort, InfectedAreaDate) VALUES (@ID, @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12, " + "@P13, @P14, @P15, @P16, @P17, @P18, @P19, @P20, @P21, @P22, @P23, @P24, @P25)", this.Tablename); } else @@ -201,5 +203,18 @@ namespace bsmd.database #endregion + #region ISublistElement implementation + + public ISublistElement GetSublistElementWithIdentifier(string identifier) + { + foreach(ISublistElement sElem in this.PortOfCallLast30Days) + { + if (sElem.Identifier.Equals(identifier)) return sElem; + } + return null; + } + + #endregion + } } diff --git a/nsw/Source/bsmd.database/Message.cs b/nsw/Source/bsmd.database/Message.cs index 518e2fab..222b640f 100644 --- a/nsw/Source/bsmd.database/Message.cs +++ b/nsw/Source/bsmd.database/Message.cs @@ -11,7 +11,7 @@ namespace bsmd.database /// /// Basisklasse aller Nachrichtentypen, zentrale Klasse für die NSW App /// - public class Message : DatabaseEntity + public class Message : DatabaseEntity, ISublistContainer { private Guid? messageCoreId; private Guid? reportingPartyId; @@ -311,5 +311,23 @@ namespace bsmd.database #endregion + #region ISublistContainer implementation + + public ISublistElement GetSublistElementWithIdentifier(string identifier) + { + foreach (DatabaseEntity entity in this.Elements) + { + ISublistElement sublistElement = entity as ISublistElement; + if ((sublistElement != null ) && (sublistElement.Identifier != null)) + { + if (((ISublistElement)entity).Identifier.Equals(identifier)) + return entity as ISublistElement; + } + } + return null; + } + + #endregion + } } diff --git a/nsw/Source/bsmd.database/MessageCore.cs b/nsw/Source/bsmd.database/MessageCore.cs index 38d8dce0..87453e77 100644 --- a/nsw/Source/bsmd.database/MessageCore.cs +++ b/nsw/Source/bsmd.database/MessageCore.cs @@ -35,7 +35,9 @@ namespace bsmd.database public string Portname { get; set; } - public DateTime? ETA { get; set; } + public DateTime? ETA { get; set; } + + public DateTime? ETAKielCanal { get; set; } public bool IsTransit { get; set; } @@ -93,7 +95,7 @@ namespace bsmd.database scmd.Parameters.AddWithNullableValue("@P17", this.HerbergReportType); scmd.Parameters.AddWithNullableValue("@P18", this.HerbergEmailContactReportingVessel); scmd.Parameters.AddWithNullableValue("@P19", this.HerbergEmail24HrsContact); - + scmd.Parameters.AddWithNullableValue("@P20", this.ETAKielCanal); if (this.IsNew) { @@ -101,8 +103,8 @@ namespace bsmd.database scmd.Parameters.AddWithValue("@ID", this.Id); string query = string.Format("INSERT INTO {0} (Id, VisitId, TransitId, IMO, ENI, PoC, Portname, ETA, CustomerId, " + "Previous, Next, IsTransit, Wetris_zz_56_datensatz_id, BSMDStatus, InitialHIS, HerbergFormGuid, " + - "HerbergFormTemplateGuid, HerbergReportType, HerbergEmailcontactReportingVessel, HerbergEmail24HrsContact) VALUES " + - "(@ID, @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12, @P13, @P14, @P15, @P16, @P17, @P18, @P19)", + "HerbergFormTemplateGuid, HerbergReportType, HerbergEmailcontactReportingVessel, HerbergEmail24HrsContact, ETAKielCanal) VALUES " + + "(@ID, @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12, @P13, @P14, @P15, @P16, @P17, @P18, @P19, @P20)", this.Tablename); scmd.CommandText = query; } @@ -113,7 +115,7 @@ namespace bsmd.database "Portname = @P6, ETA = @P7, CustomerId = @P8, Previous = @P9, Next = @P10, IsTransit = @P11, " + "Wetris_zz_56_datensatz_id = @P12, BSMDStatus = @P13, InitialHIS = @P14, HerbergFormGuid = @P15, " + "HerbergFormTemplateGuid = @P16, HerbergReportType = @P17, HerbergEmailContactReportingVessel = @P18, " + - "HerbergEmail24HrsContact = @P19 WHERE Id = @ID", this.Tablename); + "HerbergEmail24HrsContact = @P19, ETAKielCanal = @P20 WHERE Id = @ID", this.Tablename); scmd.CommandText = query; } } @@ -122,8 +124,8 @@ namespace bsmd.database { string query = string.Format("SELECT Id, VisitId, TransitId, IMO, ENI, PoC, Portname, " + "ETA, CustomerId, Previous, Next, IsTransit, Wetris_zz_56_datensatz_id, BSMDStatus, InitialHIS, " + - "HerbergFormGuid, HerbergFormTemplateGuid, HerbergReportType, HerbergEmailContactReportingVessel, HerbergEmail24HrsContact FROM {0} ", - this.Tablename); + "HerbergFormGuid, HerbergFormTemplateGuid, HerbergReportType, HerbergEmailContactReportingVessel, " + + "HerbergEmail24HrsContact, ETAKielCanal FROM {0} ", this.Tablename); switch (filter) { @@ -173,6 +175,7 @@ namespace bsmd.database if (!reader.IsDBNull(17)) core.HerbergReportType = reader.GetString(17); if (!reader.IsDBNull(18)) core.HerbergEmailContactReportingVessel = reader.GetString(18); if (!reader.IsDBNull(19)) core.HerbergEmail24HrsContact = reader.GetString(19); + if (!reader.IsDBNull(20)) core.ETAKielCanal = reader.GetDateTime(20); result.Add(core); } diff --git a/nsw/Source/bsmd.database/NOA_NOD.cs b/nsw/Source/bsmd.database/NOA_NOD.cs index d75b4a60..cc51471b 100644 --- a/nsw/Source/bsmd.database/NOA_NOD.cs +++ b/nsw/Source/bsmd.database/NOA_NOD.cs @@ -14,7 +14,7 @@ using System.Collections.Generic; namespace bsmd.database { - public class NOA_NOD : DatabaseEntity + public class NOA_NOD : DatabaseEntity, ISublistContainer { List callPurposes = new List(); @@ -22,7 +22,7 @@ namespace bsmd.database public NOA_NOD() { this.tablename = "[dbo].[NOA_NOD]"; - } + } #region Properties @@ -77,12 +77,12 @@ namespace bsmd.database nn.id = reader.GetGuid(0); if (!reader.IsDBNull(1)) nn.ETAToPortOfCall = reader.GetDateTime(1); if (!reader.IsDBNull(2)) nn.ETDFromPortOfCall = reader.GetDateTime(2); - if (!reader.IsDBNull(3)) nn.ETAToKielCanal = reader.GetDateTime(5); - if (!reader.IsDBNull(4)) nn.ETDFromKielCanal = reader.GetDateTime(6); - if (!reader.IsDBNull(5)) nn.LastPort = reader.GetString(7); - if (!reader.IsDBNull(6)) nn.ETDFromLastPort = reader.GetDateTime(8); - if (!reader.IsDBNull(7)) nn.NextPort = reader.GetString(9); - if (!reader.IsDBNull(8)) nn.ETAToNextPort = reader.GetDateTime(10); + if (!reader.IsDBNull(3)) nn.ETAToKielCanal = reader.GetDateTime(3); + if (!reader.IsDBNull(4)) nn.ETDFromKielCanal = reader.GetDateTime(4); + if (!reader.IsDBNull(5)) nn.LastPort = reader.GetString(5); + if (!reader.IsDBNull(6)) nn.ETDFromLastPort = reader.GetDateTime(6); + if (!reader.IsDBNull(7)) nn.NextPort = reader.GetString(7); + if (!reader.IsDBNull(8)) nn.ETAToNextPort = reader.GetDateTime(8); result.Add(nn); } reader.Close(); @@ -105,15 +105,17 @@ namespace bsmd.database if (this.IsNew) { - cmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, ETAToPortOfCall, ETDFromPortOfCall, " + + this.CreateId(); + scmd.Parameters.AddWithValue("@ID", this.Id); + scmd.CommandText = string.Format("INSERT INTO {0} ( Id, MessageHeaderId, ETAToPortOfCall, ETDFromPortOfCall, " + "ETAToKielCanal, ETDFromKielCanal, LastPort, ETDFromLastPort, " + - "NextPort, ETAToNextPort) VALUES (@P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9) ", this.Tablename); + "NextPort, ETAToNextPort) VALUES (@ID, @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9) ", this.Tablename); } else { ((SqlCommand)cmd).Parameters.AddWithValue("@ID", this.Id); - cmd.CommandText = string.Format("UPDATE {0} SET ETAToPortOfCall = @P2, ETDFromPortOfCall = @P3, " + + scmd.CommandText = string.Format("UPDATE {0} SET ETAToPortOfCall = @P2, ETDFromPortOfCall = @P3, " + "ETAToKielCanal = @P4, ETDFromKielCanal = @P5, LastPort = @P6, ETDFromLastPort = @P7, " + "NextPort = @P8, ETAToNextPort = @P9 WHERE Id = @ID", this.Tablename); @@ -122,5 +124,16 @@ namespace bsmd.database #endregion + #region ISublistContainer implementation + + public ISublistElement GetSublistElementWithIdentifier(string identifier) + { + foreach (ISublistElement sublistElement in this.CallPurposes) + if (identifier.Equals(sublistElement.Identifier)) return sublistElement; + return null; + } + + #endregion + } } diff --git a/nsw/Source/bsmd.database/PAS.cs b/nsw/Source/bsmd.database/PAS.cs index b4b50c48..fd145da8 100644 --- a/nsw/Source/bsmd.database/PAS.cs +++ b/nsw/Source/bsmd.database/PAS.cs @@ -22,7 +22,7 @@ namespace bsmd.database this.tablename = "[dbo].[PAS]"; } - #region Properties + #region Properties public string PassengerLastName { get; set; } @@ -48,6 +48,8 @@ namespace bsmd.database public bool? PassengerInTransit { get; set; } + public string Identifier { get; set; } + #endregion #region DatabaseEntity implementation @@ -70,13 +72,14 @@ namespace bsmd.database scmd.Parameters.AddWithNullableValue("@P11", this.PassengerPortOfEmbarkation); scmd.Parameters.AddWithNullableValue("@P12", this.PassengerPortOfDisembarkation); scmd.Parameters.AddWithNullableValue("@P13", this.PassengerInTransit); + scmd.Parameters.AddWithNullableValue("@P14", this.Identifier); if (this.IsNew) { scmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, PassengerLastName, PassengerFirstName, " + "PassengerPlaceOfBirth, PassengerDateOfBirth, PassengerGender, PassengerNationality, PassengerIdentityDocumentType, " + "PassengerIdentityDocumentId, PassengerVisaNumber, PassengerPortOfEmbarkation, PassengerPortOfDisembarkation," + - "PassengerInTransit) VALUES ( @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12, @P13 )", + "PassengerInTransit, Identifier) VALUES ( @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12, @P13, @P14 )", this.Tablename); } else @@ -94,7 +97,7 @@ namespace bsmd.database { string query = string.Format("SELECT Id, PassengerLastName, PassengerFirstName, PassengerPlaceOfBirth, " + "PassengerDateOfBirth, PassengerGender, PassengerNationality, PassengerIdentityDocumentType, PassengerIdentityDocumentId, " + - "PassengerVisaNumber, PassengerPortOfEmbarkation, PassengerPortOfDisembarkation, PassengerInTransit FROM {0}", + "PassengerVisaNumber, PassengerPortOfEmbarkation, PassengerPortOfDisembarkation, PassengerInTransit, Identifier FROM {0}", this.Tablename); switch (filter) @@ -133,6 +136,7 @@ namespace bsmd.database if (!reader.IsDBNull(10)) pas.PassengerPortOfEmbarkation = reader.GetString(10); if (!reader.IsDBNull(11)) pas.PassengerPortOfDisembarkation = reader.GetString(11); if (!reader.IsDBNull(12)) pas.PassengerInTransit = reader.GetBoolean(12); + if (!reader.IsDBNull(13)) pas.Identifier = reader.GetString(13); result.Add(pas); } reader.Close(); diff --git a/nsw/Source/bsmd.database/PRE72H.cs b/nsw/Source/bsmd.database/PRE72H.cs index c67dac39..2042bb47 100644 --- a/nsw/Source/bsmd.database/PRE72H.cs +++ b/nsw/Source/bsmd.database/PRE72H.cs @@ -22,7 +22,7 @@ namespace bsmd.database this.tablename = "[dbo].[PRE72H]"; } - #region Properties + #region Properties public bool? Tanker { get; set; } @@ -74,7 +74,7 @@ namespace bsmd.database scmd.Parameters.AddWithValue(@"ID", this.Id); scmd.CommandText = string.Format("UPDATE {0} SET Tanker = @P2, TankerHullConfiguration = @P3, " + "ConditionCargoBallastTanks = @P4, NatureOfCargo = @P5, VolumeOfCargo = @P6," + - "PlannedOperations = @P7, PlannedWorks = @8, DateOfLastExpandedInspection = @P9, " + + "PlannedOperations = @P7, PlannedWorks = @P8, DateOfLastExpandedInspection = @P9, " + "PlannedPeriodOfStay_HUR = @P10 WHERE Id = @ID", this.Tablename); } } diff --git a/nsw/Source/bsmd.database/PortOfCallLast30Days.cs b/nsw/Source/bsmd.database/PortOfCallLast30Days.cs index 1acf553a..59cb3939 100644 --- a/nsw/Source/bsmd.database/PortOfCallLast30Days.cs +++ b/nsw/Source/bsmd.database/PortOfCallLast30Days.cs @@ -14,7 +14,7 @@ using System.Collections.Generic; namespace bsmd.database { - public class PortOfCallLast30Days : DatabaseEntity + public class PortOfCallLast30Days : DatabaseEntity, ISublistElement, ISublistContainer { private List poc30Crew = new List(); @@ -36,6 +36,8 @@ namespace bsmd.database public bool? PortOfCallLast30DaysCrewMembersJoined { get; set; } + public string Identifier { get; set; } + #endregion #region abstract class implementation @@ -48,11 +50,14 @@ namespace bsmd.database scmd.Parameters.AddWithNullableValue("@P2", this.PortOfCallLast30DaysLocode); scmd.Parameters.AddWithNullableValue("@P3", this.PortOfCallLast30DaysDateOfDeparture); scmd.Parameters.AddWithNullableValue("@P4", this.PortOfCallLast30DaysCrewMembersJoined); + scmd.Parameters.AddWithNullableValue("@P5", this.Identifier); if (this.IsNew) { - scmd.CommandText = string.Format("INSERT INTO {0} (MDH_Id, PortOfCallLast30DaysLocode, PortOfCallLast30DaysDateOfDeparture, " + - "PortOfCallLast30DaysCrewMembersJoined) VALUES (@P1, @P2, @P3, @P4)", this.Tablename); + this.CreateId(); + scmd.Parameters.AddWithValue("@ID", this.Id); + scmd.CommandText = string.Format("INSERT INTO {0} (Id, MDH_Id, PortOfCallLast30DaysLocode, PortOfCallLast30DaysDateOfDeparture, " + + "PortOfCallLast30DaysCrewMembersJoined, Identifier) VALUES (@ID, @P1, @P2, @P3, @P4, @P5)", this.Tablename); } else { @@ -66,7 +71,7 @@ namespace bsmd.database { string query = string.Format("SELECT Id, PortOfCallLast30DaysLocode, PortOfCallLast30DaysDateOfDeparture, " + - "PortOfCallLast30DaysCrewMembersJoined FROM {0} ", this.Tablename); + "PortOfCallLast30DaysCrewMembersJoined, Identifier FROM {0} ", this.Tablename); switch (filter) { @@ -93,6 +98,7 @@ namespace bsmd.database if (!reader.IsDBNull(1)) poc.PortOfCallLast30DaysLocode = reader.GetString(1); if (!reader.IsDBNull(2)) poc.PortOfCallLast30DaysDateOfDeparture = reader.GetDateTime(2); if (!reader.IsDBNull(3)) poc.PortOfCallLast30DaysCrewMembersJoined = reader.GetBoolean(3); + if (!reader.IsDBNull(4)) poc.Identifier = reader.GetString(4); result.Add(poc); } @@ -102,5 +108,17 @@ namespace bsmd.database #endregion + #region ISublistElement implementation + + public ISublistElement GetSublistElementWithIdentifier(string identifier) + { + foreach (ISublistElement sElem in this.CrewJoinedShip) + if (sElem.Identifier.Equals(identifier)) + return sElem; + return null; + } + + #endregion + } } diff --git a/nsw/Source/bsmd.database/PortOfCallLast30DaysCrewJoinedShip.cs b/nsw/Source/bsmd.database/PortOfCallLast30DaysCrewJoinedShip.cs index d98b5f49..fda532a9 100644 --- a/nsw/Source/bsmd.database/PortOfCallLast30DaysCrewJoinedShip.cs +++ b/nsw/Source/bsmd.database/PortOfCallLast30DaysCrewJoinedShip.cs @@ -14,7 +14,7 @@ using System.Collections.Generic; namespace bsmd.database { - public class PortOfCallLast30DaysCrewJoinedShip : DatabaseEntity + public class PortOfCallLast30DaysCrewJoinedShip : DatabaseEntity, ISublistElement { public PortOfCallLast30DaysCrewJoinedShip() @@ -28,6 +28,8 @@ namespace bsmd.database public string PortOfCallLast30DaysCrewJoinedShipName { get; set; } + public string Identifier { get; set; } + #endregion #region abstract class implementation @@ -38,11 +40,12 @@ namespace bsmd.database scmd.Parameters.AddWithValue("@P1", this.PortOfCallLast30Days.Id); scmd.Parameters.AddWithNullableValue("@P2", this.PortOfCallLast30DaysCrewJoinedShipName); + scmd.Parameters.AddWithNullableValue("@P3", this.Identifier); if (this.IsNew) { - cmd.CommandText = string.Format("INSERT INTO {0} (PortOfCallLast30DaysId = @P1, PortOfCallLast30DaysCrewJoinedShipName = @P2", - this.Tablename); + cmd.CommandText = string.Format("INSERT INTO {0} (PortOfCallLast30DaysId, PortOfCallLast30DaysCrewJoinedShipName, Identifier) " + + "VALUES (@P1, @P2, @P3)" , this.Tablename); } else { @@ -55,13 +58,14 @@ namespace bsmd.database public override void PrepareLoadCommand(IDbCommand cmd, Message.LoadFilter filter, params object[] criteria) { - string query = string.Format("SELECT Id, PortOfCallLast30DaysCrewJoinedShipName FROM {0}"); + string query = string.Format("SELECT Id, PortOfCallLast30DaysCrewJoinedShipName, Identifier FROM {0}", + this.Tablename); switch (filter) { case Message.LoadFilter.POC30_ID: - query += "WHERE MDH_Id = @MDHID"; - ((SqlCommand)cmd).Parameters.AddWithValue("@MHID", criteria[0]); + query += "WHERE PortOfCallLast30DaysId = @POC30ID"; + ((SqlCommand)cmd).Parameters.AddWithValue("@POC30ID", criteria[0]); break; case Message.LoadFilter.ALL: default: @@ -81,6 +85,7 @@ namespace bsmd.database PortOfCallLast30DaysCrewJoinedShip poc30 = new PortOfCallLast30DaysCrewJoinedShip(); poc30.id = reader.GetGuid(0); if (!reader.IsDBNull(1)) poc30.PortOfCallLast30DaysCrewJoinedShipName = reader.GetString(1); + if (!reader.IsDBNull(2)) poc30.Identifier = reader.GetString(2); result.Add(poc30); } diff --git a/nsw/Source/bsmd.database/PortOfItinerary.cs b/nsw/Source/bsmd.database/PortOfItinerary.cs index e496e639..5ef2c16d 100644 --- a/nsw/Source/bsmd.database/PortOfItinerary.cs +++ b/nsw/Source/bsmd.database/PortOfItinerary.cs @@ -14,7 +14,7 @@ using System.Collections.Generic; namespace bsmd.database { - public class PortOfItinerary : DatabaseEntity + public class PortOfItinerary : DatabaseEntity, ISublistElement { public PortOfItinerary() @@ -30,6 +30,8 @@ namespace bsmd.database public DateTime? PortOfItineraryETA { get; set; } + public string Identifier { get; set; } + #endregion #region DatabaseEntity implementation @@ -42,11 +44,12 @@ namespace bsmd.database scmd.Parameters.AddWithValue("@P1", this.BPOL.Id); scmd.Parameters.AddWithNullableValue("@P2", this.PortOfItineraryName); scmd.Parameters.AddWithNullableValue("@P3", this.PortOfItineraryETA); + scmd.Parameters.AddWithNullableValue("@P4", this.Identifier); if (this.IsNew) { - scmd.CommandText = string.Format("INSERT INTO {0} (BPOLId, PortOfItineraryName, PortOfItineraryETA) VALUES ( @P1, @P2, @P3 )", - this.Tablename); + scmd.CommandText = string.Format("INSERT INTO {0} (BPOLId, PortOfItineraryName, PortOfItineraryETA, Identifier) " + + "VALUES ( @P1, @P2, @P3, @P4 )", this.Tablename); } else { @@ -58,7 +61,7 @@ namespace bsmd.database public override void PrepareLoadCommand(System.Data.IDbCommand cmd, Message.LoadFilter filter, params object[] criteria) { - string query = string.Format("SELECT Id, PortOfItineraryName, PortOfItineraryETA FROM {0}", this.Tablename); + string query = string.Format("SELECT Id, PortOfItineraryName, PortOfItineraryETA, Identifier FROM {0}", this.Tablename); switch (filter) { @@ -86,6 +89,7 @@ namespace bsmd.database poi.id = reader.GetGuid(0); if (!reader.IsDBNull(1)) poi.PortOfItineraryName = reader.GetString(1); if (!reader.IsDBNull(2)) poi.PortOfItineraryETA = reader.GetDateTime(2); + if (!reader.IsDBNull(3)) poi.Identifier = reader.GetString(3); result.Add(poi); } reader.Close(); diff --git a/nsw/Source/bsmd.database/SEC.cs b/nsw/Source/bsmd.database/SEC.cs index ebf6a12d..406beda7 100644 --- a/nsw/Source/bsmd.database/SEC.cs +++ b/nsw/Source/bsmd.database/SEC.cs @@ -96,18 +96,20 @@ namespace bsmd.database if (this.IsNew) { - scmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, SECSimplification, PortOfCallWhereCompleteSECNotified, " + + this.CreateId(); + scmd.Parameters.AddWithValue("@ID", this.Id); + scmd.CommandText = string.Format("INSERT INTO {0} (Id, MessageHeaderId, SECSimplification, PortOfCallWhereCompleteSECNotified, " + "CSOLastName, CSOFirstName, CSOPhone, CSOEMail, ValidISSCOnBoard, ReasonsForNoValidISSC, " + "ISSCType, ISSCIssuerType, ISSCIssuerName,ISSCDateOfExpiration, ApprovedSecurityPlanOnBoard, " + "CurrentShipSecurityLevel, PortFacilityOfArrival, GeneralDescriptionOfCargo, CSOFax) " + - "VALUES ( @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12, @P13, @P14, @P15, @P16, @P17, @P18 )", this.Tablename); + "VALUES ( @ID, @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12, @P13, @P14, @P15, @P16, @P17, @P18 )", this.Tablename); } else { scmd.Parameters.AddWithValue(@"ID", this.Id); scmd.CommandText = string.Format("UPDATE {0} SET SECSimplification = @P2, PortOfCallWhereCompleteSECNotified = @P3, " + "CSOLastName = @P4, CSOFirstName = @P5, CSOPhone = @P6," + - "CSOEMail = @P7, ValidISSCOnBoard = @8, ReasonsForNoValidISSC = @P9, " + + "CSOEMail = @P7, ValidISSCOnBoard = @P8, ReasonsForNoValidISSC = @P9, " + "ISSCType = @P10, ISSCIssuerType = @P11, ISSCIssuerName = @P12, ISSCDateOfExpiration = @P13, " + "ApprovedSecurityPlanOnBoard = @P14, CurrentShipSecurityLevel = @P15, PortFacilityOfArrival = @P16, " + "GeneralDescriptionOfCargo = @P17, CSOFax = @P18 WHERE Id = @ID", this.Tablename); @@ -170,5 +172,28 @@ namespace bsmd.database #endregion + #region sublist lookup implementation + + public LastTenPortFacilitiesCalled GetPortFacilityWithIdentifier(string identifier) + { + foreach(ISublistElement lp in this.ltpfc) { + if (lp.Identifier.Equals(identifier)) + return lp as LastTenPortFacilitiesCalled; + } + return null; + } + + public ShipToShipActivitiesDuringLastTenPortFacilitiesCalled GetShipToShipWithIdentifier(string identifier) + { + foreach (ISublistElement lp in this.lsts) + { + if (lp.Identifier.Equals(identifier)) + return lp as ShipToShipActivitiesDuringLastTenPortFacilitiesCalled; + } + return null; + } + + #endregion + } } diff --git a/nsw/Source/bsmd.database/SERV.cs b/nsw/Source/bsmd.database/SERV.cs index 3872dbf8..4676a59a 100644 --- a/nsw/Source/bsmd.database/SERV.cs +++ b/nsw/Source/bsmd.database/SERV.cs @@ -14,7 +14,7 @@ using System.Collections.Generic; namespace bsmd.database { - public class SERV : DatabaseEntity + public class SERV : DatabaseEntity, ISublistElement { public SERV() @@ -22,7 +22,7 @@ namespace bsmd.database this.tablename = "[dbo].[SERV]"; } - #region Properties + #region Properties public string ServiceName { get; set; } @@ -30,6 +30,8 @@ namespace bsmd.database public string ServiceInvoiceRecipient { get; set; } + public string Identifier { get; set; } + #endregion #region DatabaseEntity implementation @@ -43,11 +45,12 @@ namespace bsmd.database scmd.Parameters.AddWithNullableValue("@P2", this.ServiceName); scmd.Parameters.AddWithNullableValue("@P3", this.ServiceBeneficiary); scmd.Parameters.AddWithNullableValue("@P4", this.ServiceInvoiceRecipient); + scmd.Parameters.AddWithNullableValue("@P5", this.Identifier); if (this.IsNew) { scmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, ServiceName, ServiceBeneficiary, " + - "ServiceInvoiceRecipient) VALUES ( @P1, @P2, @P3, @P4 )", this.Tablename); + "ServiceInvoiceRecipient, Identifier) VALUES ( @P1, @P2, @P3, @P4, @P5 )", this.Tablename); } else { @@ -59,7 +62,7 @@ namespace bsmd.database public override void PrepareLoadCommand(System.Data.IDbCommand cmd, Message.LoadFilter filter, params object[] criteria) { - string query = string.Format("SELECT Id, ServiceName, ServiceBeneficiary, ServiceInvoiceRecipient FROM {0}", this.Tablename); + string query = string.Format("SELECT Id, ServiceName, ServiceBeneficiary, ServiceInvoiceRecipient, Identifier FROM {0}", this.Tablename); switch (filter) { @@ -88,6 +91,7 @@ namespace bsmd.database if (!reader.IsDBNull(1)) serv.ServiceName = reader.GetString(1); if (!reader.IsDBNull(2)) serv.ServiceBeneficiary = reader.GetString(2); if (!reader.IsDBNull(3)) serv.ServiceInvoiceRecipient = reader.GetString(3); + if (!reader.IsDBNull(4)) serv.Identifier = reader.GetString(4); result.Add(serv); } reader.Close(); diff --git a/nsw/Source/bsmd.database/ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.cs b/nsw/Source/bsmd.database/ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.cs index 9fe98e66..fb916931 100644 --- a/nsw/Source/bsmd.database/ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.cs +++ b/nsw/Source/bsmd.database/ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.cs @@ -14,7 +14,7 @@ using System.Collections.Generic; namespace bsmd.database { - public class ShipToShipActivitiesDuringLastTenPortFacilitiesCalled : DatabaseEntity + public class ShipToShipActivitiesDuringLastTenPortFacilitiesCalled : DatabaseEntity, ISublistElement { public ShipToShipActivitiesDuringLastTenPortFacilitiesCalled() @@ -42,6 +42,8 @@ namespace bsmd.database public string ShipToShipActivitySecurityMattersToReport { get; set; } + public string Identifier { get; set; } + #endregion #region DatabaseEntity implementation @@ -60,12 +62,13 @@ namespace bsmd.database scmd.Parameters.AddWithNullableValue("@P7", this.ShipToShipActivityDateTo); scmd.Parameters.AddWithNullableValue("@P8", this.ShipToShipActivityType); scmd.Parameters.AddWithNullableValue("@P9", this.ShipToShipActivitySecurityMattersToReport); + scmd.Parameters.AddWithNullableValue("@P10", this.Identifier); if (this.IsNew) { scmd.CommandText = string.Format("INSERT INTO {0} (SEC_Id, ShipToShipActivityLocationName, ShipToShipActivityLocationLoCode, " + "ShipToShipActivityLocationCoordinatesLatitude, ShipToShipActivityLocationCoordinatesLongitude, ShipToShipActivityDateFrom, ShipToShipActivityDateTo, " + - "ShipToShipActivityType, ShipToShipActivitySecurityMattersToReport) VALUES ( @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9)", + "ShipToShipActivityType, ShipToShipActivitySecurityMattersToReport, Identifier) VALUES ( @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10)", this.Tablename); } else @@ -73,7 +76,7 @@ namespace bsmd.database scmd.Parameters.AddWithValue(@"ID", this.Id); scmd.CommandText = string.Format("UPDATE {0} SET ShipToShipActivityLocationName = @P2, ShipToShipActivityLocationLoCode = @P3, " + "ShipToShipActivityLocationCoordinatesLatitude = @P4, ShipToShipActivityLocationCoordinatesLongitude = @P5, ShipToShipActivityDateFrom = @P6," + - "ShipToShipActivityDateTo = @P7, ShipToShipActivityType = @8, ShipToShipActivitySecurityMattersToReport = @P9 " + + "ShipToShipActivityDateTo = @P7, ShipToShipActivityType = @P8, ShipToShipActivitySecurityMattersToReport = @P9 " + " WHERE Id = @ID", this.Tablename); } } @@ -82,7 +85,7 @@ namespace bsmd.database { string query = string.Format("SELECT Id, ShipToShipActivityLocationName, ShipToShipActivityLocationLoCode, ShipToShipActivityLocationCoordinatesLatitude, " + "ShipToShipActivityLocationCoordinatesLongitude, ShipToShipActivityDateFrom, ShipToShipActivityDateTo, ShipToShipActivityType, " + - "ShipToShipActivitySecurityMattersToReport FROM {0}", this.Tablename); + "ShipToShipActivitySecurityMattersToReport, Identifier FROM {0}", this.Tablename); switch (filter) { @@ -118,6 +121,7 @@ namespace bsmd.database if (!reader.IsDBNull(6)) sts.ShipToShipActivityDateTo = reader.GetDateTime(6); if (!reader.IsDBNull(7)) sts.ShipToShipActivityType = reader.GetString(7); if (!reader.IsDBNull(8)) sts.ShipToShipActivitySecurityMattersToReport = reader.GetString(8); + if (!reader.IsDBNull(9)) sts.Identifier = reader.GetString(9); result.Add(sts); } reader.Close(); diff --git a/nsw/Source/bsmd.database/TOWA.cs b/nsw/Source/bsmd.database/TOWA.cs index 6c58e902..809028e3 100644 --- a/nsw/Source/bsmd.database/TOWA.cs +++ b/nsw/Source/bsmd.database/TOWA.cs @@ -22,7 +22,7 @@ namespace bsmd.database this.tablename = "[dbo].[TOWA]"; } - #region Properties + #region Properties public string TowageOnArrivalName { get; set; } @@ -56,6 +56,7 @@ namespace bsmd.database public string TowageOnArrivalRemarks { get; set; } + public string Identifier { get; set; } #endregion @@ -83,6 +84,7 @@ namespace bsmd.database scmd.Parameters.AddWithNullableValue("@P15", this.TowageOnArrivalPurposeOfCall); scmd.Parameters.AddWithNullableValue("@P16", this.TowageOnArrivalDraught_DMT); scmd.Parameters.AddWithNullableValue("@P17", this.TowageOnArrivalRemarks); + scmd.Parameters.AddWithNullableValue("@P18", this.Identifier); if (this.IsNew) { @@ -91,8 +93,8 @@ namespace bsmd.database "TowageOnArrivalOperatorCity, TowageOnArrivalOperatorCountry, TowageOnArrivalOperatorPhone, " + "TowageOnArrivalOperatorFax, TowageOnArrivalOperatorEmail, TowageOnArrivalGrossTonnage, " + "TowageOnArrivalLengthOverall_MTR, TowageOnArrivalBeam_MTR, TowageOnArrivalPurposeOfCall, " + - "TowageOnArrivalDraught_DMT, TowageOnArrivalRemarks) VALUES ( @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, " + - "@P9, @P10, @P11, @P12, @P13, @P14, @P15, @P16, @P17 )", this.Tablename); + "TowageOnArrivalDraught_DMT, TowageOnArrivalRemarks, Identifier) VALUES ( @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, " + + "@P9, @P10, @P11, @P12, @P13, @P14, @P15, @P16, @P17, @P18 )", this.Tablename); } else { @@ -113,8 +115,8 @@ namespace bsmd.database "TowageOnArrivalOperatorStreetNameAndNumber, TowageOnArrivalOperatorPostalCode, TowageOnArrivalOperatorCity, " + "TowageOnArrivalOperatorCountry, TowageOnArrivalOperatorPhone, TowageOnArrivalOperatorFax, " + "TowageOnArrivalOperatorEmail, TowageOnArrivalGrossTonnage, TowageOnArrivalLengthOverall_MTR, " + - "TowageOnArrivalBeam_MTR, TowageOnArrivalPurposeOfCall, TowageOnArrivalDraught_DMT, TowageOnArrivalRemarks " + - "FROM {0}", this.Tablename); + "TowageOnArrivalBeam_MTR, TowageOnArrivalPurposeOfCall, TowageOnArrivalDraught_DMT, TowageOnArrivalRemarks, " + + "Identifier FROM {0}", this.Tablename); switch (filter) { @@ -156,6 +158,7 @@ namespace bsmd.database if (!reader.IsDBNull(14)) towa.TowageOnArrivalPurposeOfCall = reader.GetString(14); if (!reader.IsDBNull(15)) towa.TowageOnArrivalDraught_DMT = (float)reader.GetDouble(15); if (!reader.IsDBNull(16)) towa.TowageOnArrivalRemarks = reader.GetString(16); + if (!reader.IsDBNull(17)) towa.Identifier = reader.GetString(17); result.Add(towa); } diff --git a/nsw/Source/bsmd.database/TOWD.cs b/nsw/Source/bsmd.database/TOWD.cs index 823d32d7..625cafa2 100644 --- a/nsw/Source/bsmd.database/TOWD.cs +++ b/nsw/Source/bsmd.database/TOWD.cs @@ -42,20 +42,17 @@ namespace bsmd.database public string TowageOnDepartureOperatorFax { get; set; } - public string TowageOnDepartureOperatorEmail { get; set; } - - public int? TowageOnDepartureGrossTonnage { get; set; } + public string TowageOnDepartureOperatorEmail { get; set; } public float? TowageOnDepartureLengthOverall_MTR { get; set; } - public float? TowageOnDepartureBeam_MTR { get; set; } - - public string TowageOnDeparturePurposeOfCall { get; set; } + public float? TowageOnDepartureBeam_MTR { get; set; } public float? TowageOnDepartureDraught_DMT { get; set; } public string TowageOnDepartureRemarks { get; set; } + public string Identifier { get; set; } #endregion @@ -76,23 +73,22 @@ namespace bsmd.database scmd.Parameters.AddWithNullableValue("@P8", this.TowageOnDepartureOperatorCountry); scmd.Parameters.AddWithNullableValue("@P9", this.TowageOnDepartureOperatorPhone); scmd.Parameters.AddWithNullableValue("@P10", this.TowageOnDepartureOperatorFax); - scmd.Parameters.AddWithNullableValue("@P11", this.TowageOnDepartureOperatorEmail); - scmd.Parameters.AddWithNullableValue("@P12", this.TowageOnDepartureGrossTonnage); - scmd.Parameters.AddWithNullableValue("@P13", this.TowageOnDepartureLengthOverall_MTR); - scmd.Parameters.AddWithNullableValue("@P14", this.TowageOnDepartureBeam_MTR); - scmd.Parameters.AddWithNullableValue("@P15", this.TowageOnDeparturePurposeOfCall); - scmd.Parameters.AddWithNullableValue("@P16", this.TowageOnDepartureDraught_DMT); - scmd.Parameters.AddWithNullableValue("@P17", this.TowageOnDepartureRemarks); + scmd.Parameters.AddWithNullableValue("@P11", this.TowageOnDepartureOperatorEmail); + scmd.Parameters.AddWithNullableValue("@P12", this.TowageOnDepartureLengthOverall_MTR); + scmd.Parameters.AddWithNullableValue("@P13", this.TowageOnDepartureBeam_MTR); + scmd.Parameters.AddWithNullableValue("@P14", this.TowageOnDepartureDraught_DMT); + scmd.Parameters.AddWithNullableValue("@P15", this.TowageOnDepartureRemarks); + scmd.Parameters.AddWithNullableValue("@P16", this.Identifier); if (this.IsNew) { scmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, TowageOnDepartureName, TowageOnDepartureFlag, " + "TowageOnDepartureOperatorCompanyName, TowageOnDepartureOperatorStreetNameAndNumber, TowageOnDepartureOperatorPostalCode, " + "TowageOnDepartureOperatorCity, TowageOnDepartureOperatorCountry, TowageOnDepartureOperatorPhone, " + - "TowageOnDepartureOperatorFax, TowageOnDepartureOperatorEmail, TowageOnDepartureGrossTonnage, " + - "TowageOnDepartureLengthOverall_MTR, TowageOnDepartureBeam_MTR, TowageOnDeparturePurposeOfCall, " + - "TowageOnDepartureDraught_DMT, TowageOnDepartureRemarks) VALUES ( @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, " + - "@P9, @P10, @P11, @P12, @P13, @P14, @P15, @P16, @P17 )", this.Tablename); + "TowageOnDepartureOperatorFax, TowageOnDepartureOperatorEmail, " + + "TowageOnDepartureLengthOverall_MTR, TowageOnDepartureBeam_MTR, " + + "TowageOnDepartureDraught_DMT, TowageOnDepartureRemarks, Identifier) VALUES ( @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, " + + "@P9, @P10, @P11, @P12, @P13, @P14, @P15, @P16 )", this.Tablename); } else { @@ -101,9 +97,9 @@ namespace bsmd.database "TowageOnDepartureOperatorCompanyName = @P4, TowageOnDepartureOperatorStreetNameAndNumber = @P5, " + "TowageOnDepartureOperatorPostalCode = @P6, TowageOnDepartureOperatorCity = @P7, TowageOnDepartureOperatorCountry = @P8, " + "TowageOnDepartureOperatorPhone = @P9, TowageOnDepartureOperatorFax = @P10, TowageOnDepartureOperatorEmail = @P11, " + - "TowageOnDepartureGrossTonnage = @P12, TowageOnDepartureLengthOverall_MTR = @P13, " + - "TowageOnDepartureBeam_MTR = @P14, TowageOnDeparturePurposeOfCall = @P15, TowageOnDepartureDraught_DMT = @P16, " + - "TowageOnDepartureRemarks = @P17 WHERE Id = @ID", this.Tablename); + "TowageOnDepartureLengthOverall_MTR = @P12, " + + "TowageOnDepartureBeam_MTR = @P13, TowageOnDepartureDraught_DMT = @P14, " + + "TowageOnDepartureRemarks = @P15 WHERE Id = @ID", this.Tablename); } } @@ -112,9 +108,9 @@ namespace bsmd.database string query = string.Format("SELECT Id, TowageOnDepartureName, TowageOnDepartureFlag, TowageOnDepartureOperatorCompanyName, " + "TowageOnDepartureOperatorStreetNameAndNumber, TowageOnDepartureOperatorPostalCode, TowageOnDepartureOperatorCity, " + "TowageOnDepartureOperatorCountry, TowageOnDepartureOperatorPhone, TowageOnDepartureOperatorFax, " + - "TowageOnDepartureOperatorEmail, TowageOnDepartureGrossTonnage, TowageOnDepartureLengthOverall_MTR, " + - "TowageOnDepartureBeam_MTR, TowageOnDeparturePurposeOfCall, TowageOnDepartureDraught_DMT, TowageOnDepartureRemarks " + - "FROM {0}", this.Tablename); + "TowageOnDepartureOperatorEmail, TowageOnDepartureLengthOverall_MTR, " + + "TowageOnDepartureBeam_MTR, TowageOnDepartureDraught_DMT, TowageOnDepartureRemarks, " + + "Identifier FROM {0}", this.Tablename); switch (filter) { @@ -149,13 +145,12 @@ namespace bsmd.database if (!reader.IsDBNull(7)) towd.TowageOnDepartureOperatorCountry = reader.GetString(7); if (!reader.IsDBNull(8)) towd.TowageOnDepartureOperatorPhone = reader.GetString(8); if (!reader.IsDBNull(9)) towd.TowageOnDepartureOperatorFax = reader.GetString(9); - if (!reader.IsDBNull(10)) towd.TowageOnDepartureOperatorEmail = reader.GetString(10); - if (!reader.IsDBNull(11)) towd.TowageOnDepartureGrossTonnage = reader.GetInt32(11); - if (!reader.IsDBNull(12)) towd.TowageOnDepartureLengthOverall_MTR = (float) reader.GetDouble(12); - if (!reader.IsDBNull(13)) towd.TowageOnDepartureBeam_MTR = (float) reader.GetDouble(13); - if (!reader.IsDBNull(14)) towd.TowageOnDeparturePurposeOfCall = reader.GetString(14); - if (!reader.IsDBNull(15)) towd.TowageOnDepartureDraught_DMT = (float) reader.GetDouble(15); - if (!reader.IsDBNull(16)) towd.TowageOnDepartureRemarks = reader.GetString(16); + if (!reader.IsDBNull(10)) towd.TowageOnDepartureOperatorEmail = reader.GetString(10); + if (!reader.IsDBNull(11)) towd.TowageOnDepartureLengthOverall_MTR = (float) reader.GetDouble(11); + if (!reader.IsDBNull(12)) towd.TowageOnDepartureBeam_MTR = (float) reader.GetDouble(12); + if (!reader.IsDBNull(13)) towd.TowageOnDepartureDraught_DMT = (float) reader.GetDouble(13); + if (!reader.IsDBNull(14)) towd.TowageOnDepartureRemarks = reader.GetString(14); + if (!reader.IsDBNull(15)) towd.Identifier = reader.GetString(15); result.Add(towd); } diff --git a/nsw/Source/bsmd.database/WAS.cs b/nsw/Source/bsmd.database/WAS.cs index b2ea77ab..4ee84eb4 100644 --- a/nsw/Source/bsmd.database/WAS.cs +++ b/nsw/Source/bsmd.database/WAS.cs @@ -14,7 +14,7 @@ using System.Collections.Generic; namespace bsmd.database { - public class WAS : DatabaseEntity + public class WAS : DatabaseEntity, ISublistContainer { private List wdsp = new List(); @@ -60,9 +60,11 @@ namespace bsmd.database if (this.IsNew) { - scmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, WasteDisposalValidExemption, " + + this.CreateId(); + scmd.Parameters.AddWithValue("@ID", this.Id); + scmd.CommandText = string.Format("INSERT INTO {0} (Id, MessageHeaderId, WasteDisposalValidExemption, " + "LastWasteDisposalPort, ConfirmationOfCorrectness, LastWasteDisposalDate, WasteDisposalDelivery) " + - "VALUES ( @P1, @P2, @P3, @P4, @P5, @P6 )", this.Tablename); + "VALUES ( @ID, @P1, @P2, @P3, @P4, @P5, @P6 )", this.Tablename); } else { @@ -115,5 +117,19 @@ namespace bsmd.database #endregion + #region ISublistContainer implementation + + public ISublistElement GetSublistElementWithIdentifier(string identifier) + { + foreach (Waste waste in this.Waste) + { + if (waste.Identifier.Equals(identifier)) + return waste; + } + return null; + } + + #endregion + } } diff --git a/nsw/Source/bsmd.database/Waste.cs b/nsw/Source/bsmd.database/Waste.cs index 3b54e901..b5835bfe 100644 --- a/nsw/Source/bsmd.database/Waste.cs +++ b/nsw/Source/bsmd.database/Waste.cs @@ -14,7 +14,7 @@ using System.Collections.Generic; namespace bsmd.database { - public class Waste : DatabaseEntity + public class Waste : DatabaseEntity, ISublistElement { public Waste() @@ -40,6 +40,8 @@ namespace bsmd.database public float? WasteAmountGeneratedTillNextPort_MTQ { get; set; } + public string Identifier { get; set; } + #endregion #region DatabaseEntity implementation @@ -57,19 +59,21 @@ namespace bsmd.database scmd.Parameters.AddWithNullableValue("@P6", this.WasteAmountRetained_MTQ); scmd.Parameters.AddWithNullableValue("@P7", this.WasteDisposalPort); scmd.Parameters.AddWithNullableValue("@P8", this.WasteAmountGeneratedTillNextPort_MTQ); + scmd.Parameters.AddWithNullableValue("@P9", this.Identifier); if (this.IsNew) { scmd.CommandText = string.Format("INSERT INTO {0} (WASId, WasteType, WasteDescription, " + - "WasteDisposalAmount_MTQ, WasteCapacity_MTQ, WasteAmountRetained_MTQ, WasteDisposalPort, WasteAmountGeneratedTillNextPort_MTQ) " + - " VALUES ( @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8 )", this.Tablename); + "WasteDisposalAmount_MTQ, WasteCapacity_MTQ, WasteAmountRetained_MTQ, WasteDisposalPort, " + + "WasteAmountGeneratedTillNextPort_MTQ, Identifier) " + + " VALUES ( @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9 )", this.Tablename); } else { scmd.Parameters.AddWithValue(@"ID", this.Id); scmd.CommandText = string.Format("UPDATE {0} SET WasteType = @P2, WasteDescription = @P3, " + "WasteDisposalAmount_MTQ = @P4, WasteCapacity_MTQ = @P5, WasteAmountRetained_MTQ = @P6," + - "WasteDisposalPort = @P7, WasteAmountGeneratedTillNextPort_MTQ = @8 " + + "WasteDisposalPort = @P7, WasteAmountGeneratedTillNextPort_MTQ = @P8 " + "WHERE Id = @ID", this.Tablename); } } @@ -77,12 +81,12 @@ namespace bsmd.database public override void PrepareLoadCommand(System.Data.IDbCommand cmd, Message.LoadFilter filter, params object[] criteria) { string query = string.Format("SELECT Id, WasteType, WasteDescription, WasteDisposalAmount_MTQ, " + - "WasteCapacity_MTQ, WasteAmountRetained_MTQ, WasteDisposalPort, WasteAmountGeneratedTillNextPort_MTQ " + + "WasteCapacity_MTQ, WasteAmountRetained_MTQ, WasteDisposalPort, WasteAmountGeneratedTillNextPort_MTQ, Identifier " + " FROM {0} ", this.Tablename); switch (filter) { - case Message.LoadFilter.WDSP_ID: + case Message.LoadFilter.WAS_ID: query += " WHERE WASId = @WDID"; ((SqlCommand)cmd).Parameters.AddWithValue("@WDID", criteria[0]); break; @@ -110,7 +114,8 @@ namespace bsmd.database if (!reader.IsDBNull(4)) waste.WasteCapacity_MTQ = (float) reader.GetDouble(4); if (!reader.IsDBNull(5)) waste.WasteAmountRetained_MTQ = (float) reader.GetDouble(5); if (!reader.IsDBNull(6)) waste.WasteDisposalPort = reader.GetString(6); - if (!reader.IsDBNull(7)) waste.WasteAmountGeneratedTillNextPort_MTQ = (float) reader.GetDouble(4); + if (!reader.IsDBNull(7)) waste.WasteAmountGeneratedTillNextPort_MTQ = (float) reader.GetDouble(7); + if (!reader.IsDBNull(8)) waste.Identifier = reader.GetString(8); result.Add(waste); } reader.Close(); diff --git a/nsw/Source/bsmd.database/WasteDisposalServiceProvider.cs b/nsw/Source/bsmd.database/WasteDisposalServiceProvider.cs index c5d443f3..6e268505 100644 --- a/nsw/Source/bsmd.database/WasteDisposalServiceProvider.cs +++ b/nsw/Source/bsmd.database/WasteDisposalServiceProvider.cs @@ -22,13 +22,15 @@ namespace bsmd.database this.tablename = "[dbo].[WasteDisposalServiceProvider]"; } - #region Properties + #region Properties public WAS WAS { get; set; } public string WasteDisposalServiceProviderName { get; set; } - public byte? WasteDisposalDelivery { get; set; } + public byte? WasteDisposalDelivery { get; set; } + + public string Identifier { get; set; } #endregion @@ -41,12 +43,13 @@ namespace bsmd.database scmd.Parameters.AddWithValue("@P1", this.WAS.Id); scmd.Parameters.AddWithNullableValue("@P2", this.WasteDisposalServiceProviderName); - scmd.Parameters.AddWithNullableValue("@P3", this.WasteDisposalDelivery); + scmd.Parameters.AddWithNullableValue("@P3", this.WasteDisposalDelivery); + scmd.Parameters.AddWithNullableValue("@P4", this.Identifier); if (this.IsNew) { - scmd.CommandText = string.Format("INSERT INTO {0} (WASId, WasteDisposalServiceProviderName, WasteDisposalDelivery) " + - "VALUES ( @P1, @P2, @P3 )", this.Tablename); + scmd.CommandText = string.Format("INSERT INTO {0} (WASId, WasteDisposalServiceProviderName, WasteDisposalDelivery, Identifier) " + + "VALUES ( @P1, @P2, @P3, @P4 )", this.Tablename); } else { @@ -58,7 +61,7 @@ namespace bsmd.database public override void PrepareLoadCommand(System.Data.IDbCommand cmd, Message.LoadFilter filter, params object[] criteria) { - string query = string.Format("SELECT Id, WasteDisposalServiceProviderName, WasteDisposalDelivery FROM {0}", this.Tablename); + string query = string.Format("SELECT Id, WasteDisposalServiceProviderName, WasteDisposalDelivery, Identifier FROM {0}", this.Tablename); switch (filter) { @@ -86,6 +89,7 @@ namespace bsmd.database wdsp.id = reader.GetGuid(0); if (!reader.IsDBNull(1)) wdsp.WasteDisposalServiceProviderName = reader.GetString(1); if (!reader.IsDBNull(2)) wdsp.WasteDisposalDelivery = reader.GetByte(2); + if (!reader.IsDBNull(3)) wdsp.Identifier = reader.GetString(3); result.Add(wdsp); } reader.Close(); diff --git a/nsw/Source/bsmd.database/bsmd.database.csproj b/nsw/Source/bsmd.database/bsmd.database.csproj index fbb32104..c6482896 100644 --- a/nsw/Source/bsmd.database/bsmd.database.csproj +++ b/nsw/Source/bsmd.database/bsmd.database.csproj @@ -56,6 +56,7 @@ + diff --git a/nsw/Source/bsmd.herberg.FormService/Enums.cs b/nsw/Source/bsmd.herberg.FormService/Enums.cs new file mode 100644 index 00000000..1151875a --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Enums.cs @@ -0,0 +1,119 @@ +// +// Class: Enums +// Current CLR: 4.0.30319.34209 +// System: Microsoft Visual Studio 10.0 +// Author: dani +// Created: 5/22/2015 7:34:23 AM +// +// Copyright (c) 2015 Informatikbüro Daniel Schick. All rights reserved. + +using System; +using System.Collections.Generic; + +namespace bsmd.herberg.FormService +{ + public class Enums + { + public enum WasteDisposalDelivery : byte + { + ALL, + SOME, + NONE + } + + public static byte? ParseWasteType(string val) + { + if (string.IsNullOrWhiteSpace(val)) return 0; + if (val.Equals("1. WASTE_OILS-SLUDGE")) return 1; + if (val.Equals("2. WASTE_OILS-BILGE_WATER")) return 2; + if (val.Equals("3. WASTE_OILS-OTHERS")) return 3; + if (val.Equals("4. GARBAGE-FOOD_WASTE")) return 4; + if (val.Equals("5. GARBAGE-PLASTIC")) return 5; + if (val.Equals("6. GARBAGE-OTHER")) return 6; + if (val.Equals("7. SEWAGE")) return 7; + if (val.Equals("8. CARGO-ASSOSIATED_WASTE")) return 8; + if (val.Equals("9. CARGO-RESIDUES")) return 9; + + return null; + } + + public enum WasteType : byte + { + WASTE_OILSSLUDGE, + WASTE_OILSBILGE_WATER + } + + public enum CargoHandlingType : byte + { + LOAD, + DISCHARGE + } + + public enum ShippingArea : byte + { + NORTH_BALTIC_SEA, + EUROPE, + OVERSEAS + } + + public enum FumigatedBulkCargo : byte + { + Y, + N + } + + public enum TankerHullConfiguration : byte + { + SINGLE_HULL, + SINGLE_HULL_WITH_SBT, + DOUBLE_HULL + } + + public enum ConditionCargoBallastTanks : byte + { + FULL, + EMPTY, + INERTED + } + + public enum ISSCType : byte + { + FULL, + INTERIM + } + + public enum ISSCIssuerType : byte + { + ADMINISTRATION, + RSO + } + + public enum GeneralDescriptionOfCargo : byte + { + CONTAINER, + VEHICLES, + CONVENTIONAL_GENERAL_CARGO, + DRY_CARGO_IN_BULK, + LIQUID_CARGO_IN_BULK, + EMPTY + } + + public enum PassengerGender : byte + { + MALE, + FEMALE, + OTHER + } + + public enum PassengerIdentityDocumentType : byte + { + IDENTITY_CARD, + PASSPORT, + MUSTER_BOOK, + PICTURE_ID, + RESIDENTAL_PERMIT, + OTHER_LEGAL_IDENTITY_DOCUMENT + } + + } +} diff --git a/nsw/Source/bsmd.herberg.FormService/Util.cs b/nsw/Source/bsmd.herberg.FormService/Util.cs index 6f8afd36..c0fda206 100644 --- a/nsw/Source/bsmd.herberg.FormService/Util.cs +++ b/nsw/Source/bsmd.herberg.FormService/Util.cs @@ -10,6 +10,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Globalization; using log4net; using bsmd.database; @@ -32,19 +33,19 @@ namespace bsmd.herberg.FormService break; } } - + for (int i = 0; i < formResponse.formDatasets.Length; i++) { Dictionary> groupedVals = new Dictionary>(); Dictionary>> groupedRowVals = new Dictionary>>(); - + WebReference.FormDataset fds = formResponse.formDatasets[i]; if (fds.startPeriodSpecified) Trace.WriteLine(fds.startPeriod); Trace.WriteLine(string.Format("Dataset {0}", i)); - foreach(WebReference.FormData formData in fds.formData) + foreach (WebReference.FormData formData in fds.formData) { string[] nElems = formData.name.Split('.'); if (nElems.Length != 2) @@ -64,20 +65,22 @@ namespace bsmd.herberg.FormService if (formData.rowNoSpecified == false) { // "normale" Felder werden pro Nachrichtentyp in einem Dict abgespeichert - + groupedVals[nElems[0]][nElems[1]] = formData.value; } else { // "1:n" Felder (mit Zeilennummer) werden in einem Dict messages = Util.PrepareMessageDict(aMessageCore); + Dictionary messages = Util.PrepareMessageDict(aMessageCore); + + List saveMessages = new List(); // 1:n messages foreach (string messageType in groupedVals.Keys) { @@ -85,6 +88,8 @@ namespace bsmd.herberg.FormService Dictionary> nDict = groupedRowVals[messageType]; DatabaseEntity derivedMessage = null; + saveMessages.Clear(); + Message theMessage = null; if (!messages.ContainsKey(messageType.ToUpper())) { @@ -102,7 +107,7 @@ namespace bsmd.herberg.FormService continue; // das Zeug verhält sich wie eine Not. Class } - theMessage.MessageNotificationClass = (Message.NotificationClass) Enum.Parse(typeof(Message.NotificationClass), messageType, true); + theMessage.MessageNotificationClass = (Message.NotificationClass)Enum.Parse(typeof(Message.NotificationClass), messageType, true); theMessage.MessageCoreId = aMessageCore.Id; theMessage.MessageCore = aMessageCore; if (bsmdParty != null) @@ -116,6 +121,7 @@ namespace bsmd.herberg.FormService switch (messageType) { + #region ATA case "ATA": { if (theMessage.Elements.Count == 0) @@ -140,6 +146,9 @@ namespace bsmd.herberg.FormService } } break; + #endregion + + #region ATD case "ATD": { if (theMessage.Elements.Count == 0) @@ -155,7 +164,7 @@ namespace bsmd.herberg.FormService { try { - if(vDict.ContainsKey("ATDPortOfCall")) atd.ATDPortOfCall = DateTime.Parse(vDict["ATDPortOfCall"]); + if (vDict.ContainsKey("ATDPortOfCall")) atd.ATDPortOfCall = DateTime.Parse(vDict["ATDPortOfCall"]); } catch (Exception ex) { @@ -164,6 +173,36 @@ namespace bsmd.herberg.FormService } } break; + #endregion + + #region NAME + case "NAME": + { + if (theMessage.Elements.Count == 0) + { + NAME newName = new NAME(); + newName.MessageHeader = theMessage; + theMessage.MessageNotificationClass = Message.NotificationClass.NAME; + theMessage.Elements.Add(newName); + } + NAME name = theMessage.Elements[0] as NAME; + derivedMessage = name; + if (name != null) + { + try + { + if (vDict.ContainsKey("NameOfMaster")) name.NameOfMaster = vDict["NameOfMaster"]; + } + catch (Exception ex) + { + _log.ErrorFormat("Error reading NAME fields: {0}", ex.Message); + } + } + } + break; + #endregion + + #region NOA_NOD case "NOA_NOD": { if (theMessage.Elements.Count == 0) @@ -193,10 +232,22 @@ namespace bsmd.herberg.FormService if (vDict.ContainsKey("CountryCodeOfNextPort") && vDict.ContainsKey("NextPortCode")) noa_nod.NextPort = vDict["CountryCodeOfNextPort"] + vDict["NextPortCode"]; - foreach (int rowKey in nDict.Keys) + foreach (int key in nDict.Keys) { - Dictionary subvDict = nDict[rowKey]; + Dictionary subvDict = nDict[key]; + CallPurpose cp = noa_nod.GetSublistElementWithIdentifier(key.ToString()) as CallPurpose; + if (cp == null) + { + cp = new CallPurpose(); + cp.Identifier = key.ToString(); + cp.NOA_NOD = noa_nod; + noa_nod.CallPurposes.Add(cp); + } + if (subvDict.ContainsKey("CallPurposeCode")) cp.CallPurposeCode = Int32.Parse(subvDict["CallPurposeCode"]); + if (subvDict.ContainsKey("CallPurposeDescription")) cp.CallPurposeDescription = subvDict["CallPurposeDescription"]; + + saveMessages.Add(cp); } } @@ -207,16 +258,21 @@ namespace bsmd.herberg.FormService } } break; + #endregion + + #region STAT case "STAT": - if(theMessage.Elements.Count == 0) { + if (theMessage.Elements.Count == 0) + { STAT newStat = new STAT(); newStat.MessageHeader = theMessage; theMessage.MessageNotificationClass = Message.NotificationClass.STAT; - theMessage.Elements.Add(newStat); + theMessage.Elements.Add(newStat); } STAT stat = theMessage.Elements[0] as STAT; derivedMessage = stat; - if(stat != null) { + if (stat != null) + { try { if (vDict.ContainsKey("ShipName")) stat.ShipName = vDict["ShipName"]; @@ -238,7 +294,7 @@ namespace bsmd.herberg.FormService if (vDict.ContainsKey("ISMCompanyStreetAndNumber")) stat.ISMCompanyStreetAndNumber = vDict["ISMCompanyStreetAndNumber"]; if (vDict.ContainsKey("ISMCompanyPostalCode")) stat.ISMCompanyPostalCode = vDict["ISMCompanyPostalCode"]; if (vDict.ContainsKey("ISMCompanyCity")) stat.ISMCompanyCity = vDict["ISMCompanyCity"]; - if (vDict.ContainsKey("ISMCompanyCountry")) stat.ISMCompanyCountry = vDict["ISMCompanyCountry"]; + if (vDict.ContainsKey("ISMCompanyCountry")) stat.ISMCompanyCountry = vDict["ISMCompanyCountry"]; } catch (Exception ex) { @@ -246,6 +302,9 @@ namespace bsmd.herberg.FormService } } break; + #endregion + + #region MDH case "MDH": { if (theMessage.Elements.Count == 0) @@ -260,19 +319,74 @@ namespace bsmd.herberg.FormService if (mdh != null) { try - { - if (vDict.ContainsKey("SickAnimalOrPetOnBoard")) mdh.SickAnimalOrPetOnBoard = vDict["SickAnimalOrPetOnBoard"].Equals("Y"); + { if (vDict.ContainsKey("Simplification")) mdh.MDHSimplification = vDict["Simplification"].Equals("Y"); - if (vDict.ContainsKey("SanitaryMeasuresApplied")) mdh.SanitaryMeasuresApplied = vDict["SanitaryMeasuresApplied"].Equals("Y"); + if (vDict.ContainsKey("PortOfCallWhereCompleteMDHNotified")) mdh.PortOfCallWhereCompleteMDHNotified = vDict["PortOfCallWhereCompleteMDHNotified"]; if (vDict.ContainsKey("NonAccidentialDeathsDuringVoyage")) mdh.NonAccidentalDeathsDuringVoyage = vDict["NonAccidentialDeathsDuringVoyage"].Equals("Y"); + if (vDict.ContainsKey("NonAccidentialDeathsDuringVoyageCount")) mdh.NonAccidentalDeathsDuringVoyageCount = Int32.Parse(vDict["NonAccidentialDeathsDuringVoyageCount"]); if (vDict.ContainsKey("SuspisionInfectiousNature")) mdh.SuspisionInfectiousNature = vDict["SuspisionInfectiousNature"].Equals("Y"); if (vDict.ContainsKey("NumberOfIllPersonsHigherThanExpected")) mdh.NumberOfIllPersonsHigherThanExpected = vDict["NumberOfIllPersonsHigherThanExpected"].Equals("Y"); + if (vDict.ContainsKey("NumberOfIllPersons")) mdh.NumberOfIllPersons = Int32.Parse(vDict["NumberOfIllPersons"]); if (vDict.ContainsKey("SickPersonsOnBoard")) mdh.SickPersonsOnBoard = vDict["SickPersonsOnBoard"].Equals("Y"); if (vDict.ContainsKey("MedicalConsulted")) mdh.MedicalConsulted = vDict["MedicalConsulted"].Equals("Y"); if (vDict.ContainsKey("AwareOfConditionsForFurtherInfections")) mdh.AwareOfFurtherInfections = vDict["AwareOfConditionsForFurtherInfections"].Equals("Y"); + if (vDict.ContainsKey("SanitaryMeasuresApplied")) mdh.SanitaryMeasuresApplied = vDict["SanitaryMeasuresApplied"].Equals("Y"); + if (vDict.ContainsKey("SanitaryMeasuresType")) mdh.SanitaryMeasuresType = vDict["SanitaryMeasuresType"]; + if (vDict.ContainsKey("SanitaryMeasuresLocation")) mdh.SanitaryMeasuresLocation = vDict["SanitaryMeasuresLocation"]; + if (vDict.ContainsKey("SanitaryMeasuresDate")) mdh.SanitaryMeasuresDate = DateTime.Parse(vDict["SanitaryMeasuresDate"]); + if (vDict.ContainsKey("StowawaysDetected")) mdh.StowawaysDetected = vDict["StowawaysDetected"].Equals("Y"); + if (vDict.ContainsKey("StowawaysJoiningLocation")) mdh.StowawaysJoiningLocation = vDict["StowawaysJoiningLocation"]; + if (vDict.ContainsKey("SickAnimalOrPetOnBoard")) mdh.SickAnimalOrPetOnBoard = vDict["SickAnimalOrPetOnBoard"].Equals("Y"); if (vDict.ContainsKey("ValidSanitaryControlExemptionOrCertificateOnBoard")) mdh.ValidSanitaryControlExemptionOrCertificateOnBoard = vDict["ValidSanitaryControlExemptionOrCertificateOnBoard"].Equals("Y"); + if (vDict.ContainsKey("SanitaryControlCertPlaceOfIssue")) mdh.PlaceOfIssue = vDict["SanitaryControlCertPlaceOfIssue"]; + if (vDict.ContainsKey("SanitaryControlCertDateOfIssue")) mdh.DateOfIssue = DateTime.Parse(vDict["SanitaryControlCertDateOfIssue"]); if (vDict.ContainsKey("SanitaryControlReinspectionRequired")) mdh.SanitaryControlReinspectionRequired = vDict["SanitaryControlReinspectionRequired"].Equals("Y"); if (vDict.ContainsKey("InfectedAreaVisited")) mdh.InfectedAreaVisited = vDict["InfectedAreaVisited"].Equals("Y"); + if (vDict.ContainsKey("InfectedAreaPort")) mdh.InfectedAreaPort = vDict["InfectedAreaPort"]; + if (vDict.ContainsKey("InfectedAreaDate")) mdh.InfectedAreaDate = DateTime.Parse(vDict["InfectedAreaDate"]); + + // sublisten + foreach (int key in nDict.Keys) + { + Dictionary pDict = nDict[key]; + PortOfCallLast30Days poc30 = mdh.GetSublistElementWithIdentifier(key.ToString()) as PortOfCallLast30Days; + if (poc30 == null) + { + poc30 = new PortOfCallLast30Days(); + poc30.Identifier = key.ToString(); + mdh.PortOfCallLast30Days.Add(poc30); + poc30.MDH = mdh; + } + + if (pDict.ContainsKey("PortOfCallLast30DaysDateOfDeparture")) poc30.PortOfCallLast30DaysDateOfDeparture = DateTime.Parse(pDict["PortOfCallLast30DaysDateOfDeparture"]); + if (pDict.ContainsKey("PortOfCallLast30DaysCrewMembersJoined")) poc30.PortOfCallLast30DaysCrewMembersJoined = pDict["PortOfCallLast30DaysCrewMembersJoined"].Equals("Y"); + if (pDict.ContainsKey("PortOfCallLast30DaysPortCode") && pDict.ContainsKey("PortOfCallLast30DaysCountryCode")) + poc30.PortOfCallLast30DaysLocode = pDict["PortOfCallLast30DaysCountryCode"] + pDict["PortOfCallLast30DaysPortCode"]; + + + + saveMessages.Add(poc30); + + // lookup / crew members (Identifier hier der Name! (vereinfachung, ich habe keine rowid)) + if (pDict.ContainsKey("PortOfCallLast30DaysCrewMemberNamesJoined")) + { + string[] names = pDict["PortOfCallLast30DaysCrewMemberNamesJoined"].Split(','); + for (int k = 0; k < names.Length; k++) + { + string crewname = names[k].Trim(); + PortOfCallLast30DaysCrewJoinedShip poc30Crew = poc30.GetSublistElementWithIdentifier(crewname) as PortOfCallLast30DaysCrewJoinedShip; + if (poc30Crew == null) + { + poc30Crew = new PortOfCallLast30DaysCrewJoinedShip(); + poc30Crew.Identifier = crewname; + poc30Crew.PortOfCallLast30Days = poc30; + poc30Crew.PortOfCallLast30DaysCrewJoinedShipName = crewname; + poc30.CrewJoinedShip.Add(poc30Crew); + saveMessages.Add(poc30Crew); + } + } + } + } } catch (Exception ex) { @@ -281,6 +395,9 @@ namespace bsmd.herberg.FormService } } break; + #endregion + + #region POBA case "POBA": { if (theMessage.Elements.Count == 0) @@ -308,6 +425,9 @@ namespace bsmd.herberg.FormService } } break; + #endregion + + #region POBD case "POBD": { if (theMessage.Elements.Count == 0) @@ -335,84 +455,325 @@ namespace bsmd.herberg.FormService } } break; - case "BKRA": + #endregion + + #region BPOL + case "BPOL": { if (theMessage.Elements.Count == 0) { - BRKA newBRKA = new BRKA(); - newBRKA.MessageHeader = theMessage; - theMessage.MessageNotificationClass = Message.NotificationClass.BKRA; - theMessage.Elements.Add(newBRKA); + BPOL newBPOL = new BPOL(); + newBPOL.MessageHeader = theMessage; + theMessage.MessageNotificationClass = Message.NotificationClass.BPOL; + theMessage.Elements.Add(newBPOL); } - BRKA bkra = theMessage.Elements[0] as BRKA; - derivedMessage = bkra; - if (bkra != null) + BPOL bpol = theMessage.Elements[0] as BPOL; + derivedMessage = bpol; + if (bpol != null) { try { - if (vDict.ContainsKey("BunkerFuelType")) bkra.BunkerFuelType = vDict["BunkerFuelType"]; - if (vDict.ContainsKey("BunkerFuelQuantity_TNE")) bkra.BunkerFuelQuantity_TNE = (float)Double.Parse(vDict["BunkerFuelQuantity_TNE"]); + if (vDict.ContainsKey("StowawayOnBoard")) bpol.StowawaysOnBoard = vDict["StowawayOnBoard"].Equals("Y"); + foreach (int key in nDict.Keys) + { + PortOfItinerary poi = bpol.GetSublistElementWithIdentifier(key.ToString()) as PortOfItinerary; + Dictionary ppDict = nDict[key]; + if (poi == null) + { + poi = new PortOfItinerary(); + poi.Identifier = key.ToString(); + poi.BPOL = bpol; + bpol.PortOfItineraries.Add(poi); + } + + if (ppDict.ContainsKey("PortOfItineraryName")) poi.PortOfItineraryName = ppDict["PortOfItineraryName"]; + if (ppDict.ContainsKey("PortOfItineraryETA")) poi.PortOfItineraryETA = DateTime.Parse(ppDict["PortOfItineraryETA"]); + + saveMessages.Add(poi); + } + } + catch (Exception ex) + { + _log.ErrorFormat("Error reading BPOL fields: {0}", ex.Message); + } + } + } + break; + #endregion + + #region BKRA + case "BKRA": + { + foreach (int key in nDict.Keys) + { + Dictionary bDict = nDict[key]; + BRKA bkra = theMessage.GetSublistElementWithIdentifier(key.ToString()) as BRKA; + if (bkra == null) + { + bkra = new BRKA(); + bkra.MessageHeader = theMessage; + bkra.Identifier = key.ToString(); + theMessage.MessageNotificationClass = Message.NotificationClass.BKRA; + theMessage.Elements.Add(bkra); + } + + try + { + if (bDict.ContainsKey("BunkerFuelType")) bkra.BunkerFuelType = bDict["BunkerFuelType"]; + if (bDict.ContainsKey("BunkerFuelQuantity_TNE")) bkra.BunkerFuelQuantity_TNE = (float)Double.Parse(bDict["BunkerFuelQuantity_TNE"]); } catch (Exception ex) { _log.ErrorFormat("Error reading BKRA fields: {0}", ex.Message); } + saveMessages.Add(bkra); + } + } + break; + #endregion + + #region SERV + case "SERV": + { + foreach (int key in nDict.Keys) + { + Dictionary pDict = nDict[key]; + SERV serv = theMessage.GetSublistElementWithIdentifier(key.ToString()) as SERV; + if (serv == null) + { + serv = new SERV(); + serv.MessageHeader = theMessage; + serv.Identifier = key.ToString(); + theMessage.MessageNotificationClass = Message.NotificationClass.SERV; + theMessage.Elements.Add(serv); + } + try + { + if (pDict.ContainsKey("ServiceName")) serv.ServiceName = pDict["ServiceName"]; + if (pDict.ContainsKey("ServiceBenificiary")) serv.ServiceBeneficiary = pDict["ServiceBenificiary"]; + if (pDict.ContainsKey("ServiceInvoiceRecipient")) serv.ServiceInvoiceRecipient = pDict["ServiceInvoiceRecipient"]; + } + catch (Exception ex) + { + _log.ErrorFormat("Error reading SERV fields: {0}", ex.Message); + } + + saveMessages.Add(serv); } } break; + #endregion + + #region CREW case "CREW": { - if (theMessage.Elements.Count == 0) - { - CREW newCREW = new CREW(); - newCREW.MessageHeader = theMessage; - theMessage.MessageNotificationClass = Message.NotificationClass.CREW; - theMessage.Elements.Add(newCREW); - } - CREW crew = theMessage.Elements[0] as CREW; - derivedMessage = crew; - if (crew != null) + foreach (int key in nDict.Keys) { + Dictionary pDict = nDict[key]; + CREW crew = theMessage.GetSublistElementWithIdentifier(key.ToString()) as CREW; + if (crew == null) + { + crew = new CREW(); + crew.MessageHeader = theMessage; + crew.Identifier = key.ToString(); + theMessage.MessageNotificationClass = Message.NotificationClass.CREW; + theMessage.Elements.Add(crew); + } try { - //crew. - + if (pDict.ContainsKey("CrewMemberLastName")) crew.CrewMemberLastName = pDict["CrewMemberLastName"]; + if (pDict.ContainsKey("CrewMemberFirstName")) crew.CrewMemberFirstName = pDict["CrewMemberFirstName"]; + if (pDict.ContainsKey("CrewMemberPlaceOfBirth")) crew.CrewMemberPlaceOfBirth = pDict["CrewMemberPlaceOfBirth"]; + if (pDict.ContainsKey("CrewMemberDateOfBirth")) crew.CrewMemberDateOfBirth = DateTime.Parse(pDict["CrewMemberDateOfBirth"]); + if (pDict.ContainsKey("CrewMemberGender")) crew.CrewMemberGender = (byte)Enum.Parse(typeof(Enums.PassengerGender), pDict["CrewMemberGender"], true); + if (pDict.ContainsKey("CrewMemberNationalityCode")) crew.CrewMemberNationality = pDict["CrewMemberNationalityCode"]; + if (pDict.ContainsKey("CrewMemberIdentityDocumentType")) crew.CrewMemberIdentityDocumentType = (byte)Enum.Parse(typeof(Enums.PassengerIdentityDocumentType), pDict["CrewMemberIdentityDocumentType"], true); + if (pDict.ContainsKey("CrewMemberIdentityDocumentId")) crew.CrewMemberIdentityDocumentId = pDict["CrewMemberIdentityDocumentId"]; + if (pDict.ContainsKey("CrewMemberVisaNumber")) crew.CrewMemberVisaNumber = pDict["CrewMemberVisaNumber"]; + if (pDict.ContainsKey("CrewMemberDuty")) crew.CrewMemberDuty = pDict["CrewMemberDuty"]; } catch (Exception ex) { _log.ErrorFormat("Error reading CREW fields: {0}", ex.Message); } - } + + saveMessages.Add(crew); + } } break; + #endregion + + #region BKRD case "BKRD": { - if (theMessage.Elements.Count == 0) - { - BRKD newBRKD = new BRKD(); - newBRKD.MessageHeader = theMessage; - theMessage.MessageNotificationClass = Message.NotificationClass.BKRD; - theMessage.Elements.Add(newBRKD); - } - BRKD bkrd = theMessage.Elements[0] as BRKD; - derivedMessage = bkrd; - if (bkrd != null) + foreach (int key in nDict.Keys) { + Dictionary bDict = nDict[key]; + BRKD bkrd = theMessage.GetSublistElementWithIdentifier(key.ToString()) as BRKD; + if (bkrd == null) + { + bkrd = new BRKD(); + bkrd.MessageHeader = theMessage; + bkrd.Identifier = key.ToString(); + theMessage.MessageNotificationClass = Message.NotificationClass.BKRD; + theMessage.Elements.Add(bkrd); + } + try { - if (vDict.ContainsKey("BunkerFuelType")) bkrd.BunkerFuelType = vDict["BunkerFuelType"]; - if (vDict.ContainsKey("BunkerFuelQuantity_TNE")) bkrd.BunkerFuelQuantity_TNE = (float)Double.Parse(vDict["BunkerFuelQuantity_TNE"]); + if (bDict.ContainsKey("BunkerFuelType")) bkrd.BunkerFuelType = bDict["BunkerFuelType"]; + if (bDict.ContainsKey("BunkerFuelQuantity_TNE")) bkrd.BunkerFuelQuantity_TNE = (float)Double.Parse(bDict["BunkerFuelQuantity_TNE"]); } catch (Exception ex) { _log.ErrorFormat("Error reading BKRD fields: {0}", ex.Message); } + + saveMessages.Add(bkrd); } } break; - case "WAS": + #endregion + + #region INFO + case "INFO": { if(theMessage.Elements.Count == 0) + { + INFO newInfo = new INFO(); + newInfo.MessageHeader = theMessage; + theMessage.MessageNotificationClass = Message.NotificationClass.INFO; + theMessage.Elements.Add(newInfo); + } + INFO info = theMessage.Elements[0] as INFO; + derivedMessage = info; + if (info != null) + { + try + { + if (vDict.ContainsKey("ShippingArea")) info.ShippingArea = (byte) Enum.Parse(typeof(Enums.ShippingArea), vDict["ShippingArea"]); + if (vDict.ContainsKey("RequestedPositionInPortOfCall")) info.RequestedPositionInPortOfCall = vDict["RequestedPositionInPortOfCall"]; + if (vDict.ContainsKey("SpecialRequirementsOfShipAtBerth")) info.SpecialRequirementsOfShipAtBerth = vDict["SpecialRequirementsOfShipAtBerth"]; + if (vDict.ContainsKey("ConstructionCharacteristicsOfShip")) info.ConstructionCharacteristicsOfShip = vDict["ConstructionCharacteristicsOfShip"]; + if (vDict.ContainsKey("FumigatedBulkCargo")) info.FumigatedBulkCargo = (byte)Enum.Parse(typeof(Enums.FumigatedBulkCargo), vDict["FumigatedBulkCargo"]); + } + catch(Exception ex) + { + _log.ErrorFormat("Error reading INFO fields: {0}", ex.Message); + } + } + } + break; + #endregion + + #region PRE72H + case "PRE72H": + { + if (theMessage.Elements.Count == 0) + { + PRE72H newp = new PRE72H(); + newp.MessageHeader = theMessage; + theMessage.MessageNotificationClass = Message.NotificationClass.PRE72H; + theMessage.Elements.Add(newp); + } + PRE72H pre72h = theMessage.Elements[0] as PRE72H; + derivedMessage = pre72h; + if (pre72h != null) + { + try + { + if (vDict.ContainsKey("Tanker")) pre72h.Tanker = vDict["Tanker"].Equals("Y"); + if (vDict.ContainsKey("TankerHullConfiguration")) pre72h.TankerHullConfiguration = (byte)Enum.Parse(typeof(Enums.TankerHullConfiguration), vDict["TankerHullConfiguration"]); + if (vDict.ContainsKey("ConditionCargoBallastTanks")) pre72h.ConditionCargoBallastTanks = (byte)Enum.Parse(typeof(Enums.ConditionCargoBallastTanks), vDict["ConditionCargoBallastTanks"]); + if (vDict.ContainsKey("NatureOfCargo")) pre72h.NatureOfCargo = vDict["NatureOfCargo"]; + if (vDict.ContainsKey("VolumeOfCargo_TNE")) pre72h.VolumeOfCargo = (float)Double.Parse(vDict["VolumeOfCargo_TNE"]); + if (vDict.ContainsKey("PlannedOperations")) pre72h.PlannedOperations = vDict["PlannedOperations"]; + if (vDict.ContainsKey("PlannedWorks")) pre72h.PlannedWorks = vDict["PlannedWorks"]; + if (vDict.ContainsKey("DateOfLastExpandedInspection")) pre72h.DateOfLastExpandedInspection = DateTime.Parse(vDict["DateOfLastExpandedInspection"], DateTimeFormatInfo.InvariantInfo); + if (vDict.ContainsKey("PlannedPeriodOfStay_HUR")) pre72h.PlannedPeriodOfStay_HUR = (float)Double.Parse(vDict["PlannedPeriodOfStay_HUR"]); + } + catch (Exception ex) + { + _log.ErrorFormat("Error reading PRE72H fields: {0}", ex.Message); + } + } + } + break; + #endregion + + #region LADG + case "LADG": + { + foreach (int key in nDict.Keys) + { + Dictionary lDict = nDict[key]; + LADG ladg = theMessage.GetSublistElementWithIdentifier(key.ToString()) as LADG; + if (ladg == null) + { + ladg = new LADG(); + ladg.MessageHeader = theMessage; + ladg.Identifier = key.ToString(); + theMessage.MessageNotificationClass = Message.NotificationClass.LADG; + theMessage.Elements.Add(ladg); + } + if (lDict.ContainsKey("CargoGrossQuantity_TNE")) ladg.CargoGrossQuantity_TNE = (float)Double.Parse(lDict["CargoGrossQuantity_TNE"]); + if (lDict.ContainsKey("CargoNumberOfItems")) ladg.CargoNumberOfItems = Int32.Parse(lDict["CargoNumberOfItems"]); + if (lDict.ContainsKey("CargoCodeNST")) ladg.CargoCodeNST = lDict["CargoCodeNST"]; + if (lDict.ContainsKey("CargoHandlingType")) ladg.CargoHandlingType = (byte) Enum.Parse(typeof(Enums.CargoHandlingType), lDict["CargoHandlingType"]); + + saveMessages.Add(ladg); + } + } + break; + #endregion + + #region PAS + case "PAS": + { + foreach (int key in nDict.Keys) + { + Dictionary pDict = nDict[key]; + PAS pas = theMessage.GetSublistElementWithIdentifier(key.ToString()) as PAS; + if (pas == null) + { + pas = new PAS(); + pas.MessageHeader = theMessage; + pas.Identifier = key.ToString(); + theMessage.MessageNotificationClass = Message.NotificationClass.PAS; + theMessage.Elements.Add(pas); + } + try + { + if (pDict.ContainsKey("PassengerLastName")) pas.PassengerLastName = pDict["PassengerLastName"]; + if (pDict.ContainsKey("PassengerFirstName")) pas.PassengerFirstName = pDict["PassengerFirstName"]; + if (pDict.ContainsKey("PassengerPlaceOfBirth")) pas.PassengerPlaceOfBirth = pDict["PassengerPlaceOfBirth"]; + if (pDict.ContainsKey("PassengerDateOfBirth")) pas.PassengerDateOfBirth = DateTime.Parse(pDict["PassengerDateOfBirth"]); + if (pDict.ContainsKey("PassengerGender")) pas.PassengerGender = (byte)Enum.Parse(typeof(Enums.PassengerGender), pDict["PassengerGender"], true); + if (pDict.ContainsKey("PassengerNationalityCode")) pas.PassengerNationality = pDict["PassengerNationalityCode"]; + if (pDict.ContainsKey("PassengerIdentityDocumentType")) pas.PassengerIdentityDocumentType = (byte)Enum.Parse(typeof(Enums.PassengerIdentityDocumentType), pDict["PassengerIdentityDocumentType"]); + if (pDict.ContainsKey("PassengerIdentityDocumentId")) pas.PassengerIdentityDocumentId = pDict["PassengerIdentityDocumentId"]; + if (pDict.ContainsKey("PassengerVisaNumber")) pas.PassengerVisaNumber = pDict["PassengerVisaNumber"]; + if (pDict.ContainsKey("PassengerPortCodeOfEmbarkation") && pDict.ContainsKey("PassengerCountryCodeOfEmbarkation")) + pas.PassengerPortOfEmbarkation = pDict["PassengerCountryCodeOfEmbarkation"] + pDict["PassengerPortCodeOfEmbarkation"]; + if (pDict.ContainsKey("PassengerPortCodeOfDisembarkation") && pDict.ContainsKey("PassengerCountryCodeOfDisembarkation")) + pas.PassengerPortOfDisembarkation = pDict["PassengerCountryCodeOfEmbarkation"] + pDict["PassengerPortCodeOfDisembarkation"]; + if (pDict.ContainsKey("PassengerInTransit")) pas.PassengerInTransit = pDict["PassengerInTransit"].Equals("Y"); + } + catch (Exception ex) + { + _log.ErrorFormat("Error reading PAS fields: {0}", ex.Message); + } + + saveMessages.Add(pas); + } + } + break; + #endregion + + #region WAS + case "WAS": + { + if (theMessage.Elements.Count == 0) { WAS newWAS = new WAS(); newWAS.MessageHeader = theMessage; @@ -421,21 +782,168 @@ namespace bsmd.herberg.FormService } WAS was = theMessage.Elements[0] as WAS; derivedMessage = was; - if(was != null) + if (was != null) { try { if (vDict.ContainsKey("WasteDisposalValidExemption")) was.WasteDisposalValidExemption = vDict["WasteDisposalValidExemption"].Equals("Y"); if (vDict.ContainsKey("LastWasteDisposalDate")) was.LastWasteDisposalDate = DateTime.Parse(vDict["LastWasteDisposalDate"]); - if (vDict.ContainsKey("LastWasteDisposalPort")) was.LastWasteDisposalPort = vDict["LastWasteDisposalPort"]; + + if (vDict.ContainsKey("LastWasteDisposalPortCode") && vDict.ContainsKey("LastWasteDisposalCountryCode")) + was.LastWasteDisposalPort = vDict["LastWasteDisposalCountryCode"] + vDict["LastWasteDisposalPortCode"]; + if (vDict.ContainsKey("WasteDisposalDelivery")) was.WasteDisposalDelivery = (byte) Enum.Parse(typeof(Enums.WasteDisposalDelivery), vDict["WasteDisposalDelivery"], true); + if (vDict.ContainsKey("ConfirmationOfCorrectness")) was.ConfirmationOfCorrectness = vDict["ConfirmationOfCorrectness"].Equals("Y"); + + // parse given waste + foreach(int key in nDict.Keys) { + Dictionary wDict = nDict[key]; + Waste waste = was.GetSublistElementWithIdentifier(key.ToString()) as Waste; + if (waste == null) + { + waste = new Waste(); + waste.Identifier = key.ToString(); + waste.WAS = was; + was.Waste.Add(waste); + } + + if(wDict.ContainsKey("WasteAmountGeneratedTillNextPort_MTQ")) waste.WasteAmountGeneratedTillNextPort_MTQ = (float) Double.Parse(wDict["WasteAmountGeneratedTillNextPort_MTQ"]); + if(wDict.ContainsKey("WasteAmountRetained_MTQ")) waste.WasteAmountRetained_MTQ = (float) Double.Parse(wDict["WasteAmountRetained_MTQ"]); + if(wDict.ContainsKey("WasteCapacity_MTQ")) waste.WasteCapacity_MTQ = (float) Double.Parse(wDict["WasteCapacity_MTQ"]); + if(wDict.ContainsKey("WasteDisposalAmount_MTQ")) waste.WasteDisposalAmount_MTQ = (float) Double.Parse(wDict["WasteDisposalAmount_MTQ"]); + if(wDict.ContainsKey("WasteDescription")) waste.WasteDescription = wDict["WasteDescription"]; + if(wDict.ContainsKey("WasteType")) waste.WasteType = Enums.ParseWasteType(wDict["WasteType"]); + if(wDict.ContainsKey("WasteDisposalPort")) waste.WasteDisposalPort = wDict["WasteDisposalPort"]; + + saveMessages.Add(waste); + } + + if (vDict.ContainsKey("WasteDisposalServiceProviderName")) + { + WasteDisposalServiceProvider wdsp = null; + if (was.WasteDisposalServiceProvider.Count == 0) + { + wdsp = new WasteDisposalServiceProvider(); + wdsp.WAS = was; + was.WasteDisposalServiceProvider.Add(wdsp); + } + else + { + wdsp = was.WasteDisposalServiceProvider[0]; + } + wdsp.WasteDisposalServiceProviderName = vDict["WasteDisposalServiceProviderName"]; + saveMessages.Add(wdsp); + } + } - catch(Exception ex) + catch (Exception ex) { _log.ErrorFormat("Error reading WAS fields: {0}", ex.Message); } } } break; + #endregion + + #region SEC + case "SEC": + { + if (theMessage.Elements.Count == 0) + { + SEC newSEC = new SEC(); + newSEC.MessageHeader = theMessage; + theMessage.MessageNotificationClass = Message.NotificationClass.SEC; + theMessage.Elements.Add(newSEC); + } + SEC sec = theMessage.Elements[0] as SEC; + derivedMessage = sec; + if (sec != null) + { + try + { + if (vDict.ContainsKey("Simplification")) sec.SECSimplification = vDict["Simplification"].Equals("Y"); + if (vDict.ContainsKey("PortOfCallWhereCompleteSECNotified")) sec.PortOfCallWhereCompleteSECNotified = vDict["PortOfCallWhereCompleteSECNotified"]; + if (vDict.ContainsKey("CSOLastName")) sec.CSOLastName = vDict["CSOLastName"]; + if (vDict.ContainsKey("CSOFirstName")) sec.CSOFirstName = vDict["CSOFirstName"]; + if (vDict.ContainsKey("CSOPhone")) sec.CSOPhone = vDict["CSOPhone"]; + if (vDict.ContainsKey("CSOFax")) sec.CSOFax = vDict["CSOFax"]; + if (vDict.ContainsKey("CSOEMail")) sec.CSOEMail = vDict["CSOEMail"]; + if (vDict.ContainsKey("ValidISSCOnBoard")) sec.ValidISSCOnBoard = vDict["ValidISSCOnBoard"].Equals("Y"); + if (vDict.ContainsKey("ReasonsForNoValidISSC")) sec.ReasonsForNoValidISSC = vDict["ReasonsForNoValidISSC"]; + if (vDict.ContainsKey("ISSCType")) sec.ISSCType = (byte)Enum.Parse(typeof(Enums.ISSCType), vDict["ISSCType"]); + if (vDict.ContainsKey("ISSCIssuerType")) sec.ISSCIssuerType = (byte)Enum.Parse(typeof(Enums.ISSCIssuerType), vDict["ISSCIssuerType"]); + if (vDict.ContainsKey("ISSCIssuerName")) sec.ISSCIssuerName = vDict["ISSCIssuerName"]; + if (vDict.ContainsKey("ISSCDateOfExpiration")) sec.ISSCDateOfExpiration = DateTime.Parse(vDict["ISSCDateOfExpiration"]); + if (vDict.ContainsKey("ApprovedSecurityPlanOnBoard")) sec.ApprovedSecurityPlanOnBoard = vDict["ApprovedSecurityPlanOnBoard"].Equals("Y"); + if (vDict.ContainsKey("CurrentShipSecurityLevel")) sec.CurrentShipSecurityLevel = Byte.Parse(vDict["CurrentShipSecurityLevel"]); + if (vDict.ContainsKey("PortFacilityOfArrival")) sec.PortFacilityOfArrival = vDict["PortFacilityOfArrival"]; + if (vDict.ContainsKey("GeneralDescriptionOfCargo")) sec.GeneralDescriptionOfCargo = (byte)Enum.Parse(typeof(Enums.GeneralDescriptionOfCargo), vDict["GeneralDescriptionOfCargo"]); + + // process sublists + + foreach (int key in nDict.Keys) + { + Dictionary sDict = nDict[key]; + bool changedPfC = false; + bool changedStS = false; + + ShipToShipActivitiesDuringLastTenPortFacilitiesCalled sts = sec.GetShipToShipWithIdentifier(key.ToString()); + if(sts == null) + { + sts = new ShipToShipActivitiesDuringLastTenPortFacilitiesCalled(); + sts.SEC = sec; + sts.Identifier = key.ToString(); + sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.Add(sts); + } + + LastTenPortFacilitiesCalled poc = sec.GetPortFacilityWithIdentifier(key.ToString()); + if (poc == null) + { + poc = new LastTenPortFacilitiesCalled(); + poc.SEC = sec; + poc.Identifier = key.ToString(); + sec.LastTenPortFacilitesCalled.Add(poc); + } + + if (sDict.ContainsKey("PortFacilityPortName")) { poc.PortFacilityPortName = sDict["PortFacilityPortName"]; changedPfC = true; } + if (sDict.ContainsKey("PortFacilityPortCountry")) { poc.PortFacilityPortCountry = sDict["PortFacilityPortCountry"]; changedPfC = true; } + if (sDict.ContainsKey("PortFacilityPortLoCode") && sDict.ContainsKey("PortFacilityPortCountryCode")) + { + poc.PortFacilityPortLoCode = sDict["PortFacilityPortCountryCode"] + sDict["PortFacilityPortLoCode"]; + changedPfC = true; + } + if (sDict.ContainsKey("PortFacilityDateOfArrival")) { poc.PortFacilityDateOfArrival = DateTime.Parse(sDict["PortFacilityDateOfArrival"]); changedPfC = true; } + if (sDict.ContainsKey("PortFacilityDateOfDeparture")) { poc.PortFacilityDateOfDeparture = DateTime.Parse(sDict["PortFacilityDateOfDeparture"]); changedPfC = true; } + if (sDict.ContainsKey("PortFacilityShipSecurityLevel")) { poc.PortFacilityShipSecurityLevel = Byte.Parse(sDict["PortFacilityShipSecurityLevel"]); changedPfC = true; } + if (sDict.ContainsKey("PortFacilitySecurityMattersToReport")) { poc.PortFacilitySecurityMattersToReport = sDict["PortFacilitySecurityMattersToReport"]; changedPfC = true; } + if (sDict.ContainsKey("PortFacilityGISISCode")) { poc.PortFacilityGISISCode = sDict["PortFacilityGISISCode"]; changedPfC = true; } + + if (sDict.ContainsKey("ShipToShipActivityLocationName")) { sts.ShipToShipActivityLocationName = sDict["ShipToShipActivityLocationName"]; changedStS = true; } + if (sDict.ContainsKey("ShipToShipActivityLocationLoCode") && sDict.ContainsKey("ShipToShipActivityCountryCode")) + { + sts.ShipToShipActivityLocationLoCode = sDict["ShipToShipActivityCountryCode"] + sDict["ShipToShipActivityLocationLoCode"]; + changedStS = true; + } + if (sDict.ContainsKey("ShipToShipActivityLocationCoordinatesLatitude")) { sts.ShipToShipActivityLocationCoordinatesLatitude = Int32.Parse(sDict["ShipToShipActivityLocationCoordinatesLatitude"]); changedStS = true; } + if (sDict.ContainsKey("ShipToShipActivityLocationCoordinatesLongitude")) { sts.ShipToShipActivityLocationCoordinatesLongitude = Int32.Parse(sDict["ShipToShipActivityLocationCoordinatesLongitude"]); changedStS = true; } + if (sDict.ContainsKey("ShipToShipActivityDateFrom")) { sts.ShipToShipActivityDateFrom = DateTime.Parse(sDict["ShipToShipActivityDateFrom"]); changedStS = true; } + if (sDict.ContainsKey("ShipToShipActivityDateTo")) { sts.ShipToShipActivityDateTo = DateTime.Parse(sDict["ShipToShipActivityDateTo"]); changedStS = true; } + if (sDict.ContainsKey("ShipToShipActivityType")) { sts.ShipToShipActivityType = sDict["ShipToShipActivityType"]; changedStS = true; } + if (sDict.ContainsKey("ShipToShipActivitySecurityMattersToReport")) { sts.ShipToShipActivitySecurityMattersToReport = sDict["ShipToShipActivitySecurityMattersToReport"]; changedStS = true; } + + if (changedPfC) saveMessages.Add(poc); + if (changedStS) saveMessages.Add(sts); + } + } + catch (Exception ex) + { + _log.ErrorFormat("Error reading SEC fields: {0}", ex.Message); + } + } + } + break; + #endregion + + #region Visit case "Visit": { theMessage.MessageNotificationClass = Message.NotificationClass.VISIT; @@ -443,89 +951,103 @@ namespace bsmd.herberg.FormService if (vDict.ContainsKey("PortOfCall")) aMessageCore.PoC = "DE" + vDict["PortOfCall"]; if (vDict.ContainsKey("TransitKielCanal")) aMessageCore.IsTransit = vDict["TransitKielCanal"].Equals("Y"); if (vDict.ContainsKey("ETAPortOfCall")) aMessageCore.ETA = DateTime.Parse(vDict["ETAPortOfCall"]); - - + if (vDict.ContainsKey("ETAKielCanal")) aMessageCore.ETAKielCanal = DateTime.Parse(vDict["ETAKielCanal"]); } break; + #endregion + + #region Transit case "Transit": { theMessage.MessageNotificationClass = Message.NotificationClass.TRANSIT; + if (vDict.ContainsKey("ETAKielCanal")) aMessageCore.ETAKielCanal = DateTime.Parse(vDict["ETAKielCanal"]); + } + break; + #endregion - } - break; + #region TOWA case "TOWA": - if(theMessage.Elements.Count == 0) { - TOWA newTOWA = new TOWA(); - newTOWA.MessageHeader = theMessage; - theMessage.MessageNotificationClass = Message.NotificationClass.TOWA; - theMessage.Elements.Add(newTOWA); - } - TOWA towa = theMessage.Elements[0] as TOWA; - derivedMessage = towa; - if (towa != null) + foreach (int key in nDict.Keys) { + Dictionary pDict = nDict[key]; + TOWA towa = theMessage.GetSublistElementWithIdentifier(key.ToString()) as TOWA; + if (towa == null) + { + towa = new TOWA(); + towa.MessageHeader = theMessage; + towa.Identifier = key.ToString(); + theMessage.MessageNotificationClass = Message.NotificationClass.TOWA; + theMessage.Elements.Add(towa); + } try { - if (vDict.ContainsKey("TowageOnArrivalBeam_MTR")) towa.TowageOnArrivalBeam_MTR = (float)Double.Parse(vDict["TowageOnArrivalBeam_MTR"]); - if (vDict.ContainsKey("TowageOnArrivalDraught_DMT")) towa.TowageOnArrivalDraught_DMT = (float)Double.Parse(vDict["TowageOnArrivalDraught_DMT"]); - if (vDict.ContainsKey("TowageOnArrivalLengthOverall_MTR")) towa.TowageOnArrivalLengthOverall_MTR = (float)Double.Parse(vDict["TowageOnArrivalLengthOverall_MTR"]); - if (vDict.ContainsKey("TowageOnArrivalGrossTonnage")) towa.TowageOnArrivalGrossTonnage = Int32.Parse(vDict["TowageOnArrivalGrossTonnage"]); - if (vDict.ContainsKey("TowageOnArrivalOperatorCountry")) towa.TowageOnArrivalOperatorCountry = vDict["TowageOnArrivalOperatorCountry"]; - if (vDict.ContainsKey("TowageOnArrivalPurposeOfCall")) towa.TowageOnArrivalPurposeOfCall = vDict["TowageOnArrivalPurposeOfCall"]; - if (vDict.ContainsKey("TowageOnArrivalName")) towa.TowageOnArrivalName = vDict["TowageOnArrivalName"]; - if (vDict.ContainsKey("TowageOnArrivalFlag")) towa.TowageOnArrivalFlag = vDict["TowageOnArrivalFlag"]; - if (vDict.ContainsKey("TowageOnArrivalOperatorCompanyName")) towa.TowageOnArrivalOperatorCompanyName = vDict["TowageOnArrivalOperatorCompanyName"]; - if (vDict.ContainsKey("TowageOnArrivalOperatorStreetAndNumber")) towa.TowageOnArrivalOperatorStreetNameAndNumber = vDict["TowageOnArrivalOperatorStreetAndNumber"]; - if (vDict.ContainsKey("TowageOnArrivalOperatorPostalCode")) towa.TowageOnArrivalOperatorPostalCode = vDict["TowageOnArrivalOperatorPostalCode"]; - if (vDict.ContainsKey("TowageOnArrivalOperatorCity")) towa.TowageOnArrivalOperatorCity = vDict["TowageOnArrivalOperatorCity"]; - if (vDict.ContainsKey("TowageOnArrivalOperatorPhone")) towa.TowageOnArrivalOperatorPhone = vDict["TowageOnArrivalOperatorPhone"]; - if (vDict.ContainsKey("TowageOnArrivalOperatorFax")) towa.TowageOnArrivalOperatorFax = vDict["TowageOnArrivalOperatorFax"]; - if (vDict.ContainsKey("TowageOnArrivalOperatorEmail")) towa.TowageOnArrivalOperatorEmail = vDict["TowageOnArrivalOperatorEmail"]; - if (vDict.ContainsKey("TowageOnArrivalRemarks")) towa.TowageOnArrivalRemarks = vDict["TowageOnArrivalRemarks"]; + if (pDict.ContainsKey("TowageOnArrivalBeam_MTR")) towa.TowageOnArrivalBeam_MTR = (float)Double.Parse(pDict["TowageOnArrivalBeam_MTR"]); + if (pDict.ContainsKey("TowageOnArrivalDraught_DMT")) towa.TowageOnArrivalDraught_DMT = (float)Double.Parse(pDict["TowageOnArrivalDraught_DMT"]); + if (pDict.ContainsKey("TowageOnArrivalLengthOverall_MTR")) towa.TowageOnArrivalLengthOverall_MTR = (float)Double.Parse(pDict["TowageOnArrivalLengthOverall_MTR"]); + if (pDict.ContainsKey("TowageOnArrivalGrossTonnage")) towa.TowageOnArrivalGrossTonnage = Int32.Parse(pDict["TowageOnArrivalGrossTonnage"]); + if (pDict.ContainsKey("TowageOnArrivalOperatorCountry")) towa.TowageOnArrivalOperatorCountry = pDict["TowageOnArrivalOperatorCountry"]; + if (pDict.ContainsKey("TowageOnArrivalPurposeOfCall")) towa.TowageOnArrivalPurposeOfCall = pDict["TowageOnArrivalPurposeOfCall"]; + if (pDict.ContainsKey("TowageOnArrivalName")) towa.TowageOnArrivalName = pDict["TowageOnArrivalName"]; + if (pDict.ContainsKey("TowageOnArrivalFlag")) towa.TowageOnArrivalFlag = pDict["TowageOnArrivalFlag"]; + if (pDict.ContainsKey("TowageOnArrivalOperatorCompanyName")) towa.TowageOnArrivalOperatorCompanyName = pDict["TowageOnArrivalOperatorCompanyName"]; + if (pDict.ContainsKey("TowageOnArrivalOperatorStreetAndNumber")) towa.TowageOnArrivalOperatorStreetNameAndNumber = pDict["TowageOnArrivalOperatorStreetAndNumber"]; + if (pDict.ContainsKey("TowageOnArrivalOperatorPostalCode")) towa.TowageOnArrivalOperatorPostalCode = pDict["TowageOnArrivalOperatorPostalCode"]; + if (pDict.ContainsKey("TowageOnArrivalOperatorCity")) towa.TowageOnArrivalOperatorCity = pDict["TowageOnArrivalOperatorCity"]; + if (pDict.ContainsKey("TowageOnArrivalOperatorPhone")) towa.TowageOnArrivalOperatorPhone = pDict["TowageOnArrivalOperatorPhone"]; + if (pDict.ContainsKey("TowageOnArrivalOperatorFax")) towa.TowageOnArrivalOperatorFax = pDict["TowageOnArrivalOperatorFax"]; + if (pDict.ContainsKey("TowageOnArrivalOperatorEmail")) towa.TowageOnArrivalOperatorEmail = pDict["TowageOnArrivalOperatorEmail"]; + if (pDict.ContainsKey("TowageOnArrivalRemarks")) towa.TowageOnArrivalRemarks = pDict["TowageOnArrivalRemarks"]; } catch (Exception ex) { _log.ErrorFormat("Error reading TOWA fields: {0}", ex.Message); } + saveMessages.Add(towa); } break; + #endregion + + #region TOWD case "TOWD": - if (theMessage.Elements.Count == 0) - { - TOWD newTOWD = new TOWD(); - newTOWD.MessageHeader = theMessage; - theMessage.MessageNotificationClass = Message.NotificationClass.TOWD; - theMessage.Elements.Add(newTOWD); - } - TOWD towd = theMessage.Elements[0] as TOWD; - derivedMessage = towd; - if (towd != null) + foreach (int key in nDict.Keys) { + Dictionary pDict = nDict[key]; + TOWD towd = theMessage.GetSublistElementWithIdentifier(key.ToString()) as TOWD; + if (towd == null) + { + towd = new TOWD(); + towd.MessageHeader = theMessage; + towd.Identifier = key.ToString(); + theMessage.MessageNotificationClass = Message.NotificationClass.TOWD; + theMessage.Elements.Add(towd); + } try { - if (vDict.ContainsKey("TowageOnDepartureBeam_MTR")) towd.TowageOnDepartureBeam_MTR = (float)Double.Parse(vDict["TowageOnDepartureBeam_MTR"]); - if (vDict.ContainsKey("TowageOnDepartureDraught_DMT")) towd.TowageOnDepartureDraught_DMT = (float)Double.Parse(vDict["TowageOnDepartureDraught_DMT"]); - if (vDict.ContainsKey("TowageOnDepartureLengthOverall_MTR")) towd.TowageOnDepartureLengthOverall_MTR = (float)Double.Parse(vDict["TowageOnDepartureLengthOverall_MTR"]); - if (vDict.ContainsKey("TowageOnDepartureGrossTonnage")) towd.TowageOnDepartureGrossTonnage = Int32.Parse(vDict["TowageOnDepartureGrossTonnage"]); - if (vDict.ContainsKey("TowageOnDepartureOperatorCountry")) towd.TowageOnDepartureOperatorCountry = vDict["TowageOnDepartureOperatorCountry"]; - if (vDict.ContainsKey("TowageOnDeparturePurposeOfCall")) towd.TowageOnDeparturePurposeOfCall = vDict["TowageOnDeparturePurposeOfCall"]; - if (vDict.ContainsKey("TowageOnDepartureName")) towd.TowageOnDepartureName = vDict["TowageOnDepartureName"]; - if (vDict.ContainsKey("TowageOnDepartureFlag")) towd.TowageOnDepartureFlag = vDict["TowageOnDepartureFlag"]; - if (vDict.ContainsKey("TowageOnDepartureOperatorCompanyName")) towd.TowageOnDepartureOperatorCompanyName = vDict["TowageOnDepartureOperatorCompanyName"]; - if (vDict.ContainsKey("TowageOnDepartureOperatorStreetAndNumber")) towd.TowageOnDepartureOperatorStreetNameAndNumber = vDict["TowageOnDepartureOperatorStreetAndNumber"]; - if (vDict.ContainsKey("TowageOnDepartureOperatorPostalCode")) towd.TowageOnDepartureOperatorPostalCode = vDict["TowageOnDepartureOperatorPostalCode"]; - if (vDict.ContainsKey("TowageOnDepartureOperatorCity")) towd.TowageOnDepartureOperatorCity = vDict["TowageOnDepartureOperatorCity"]; - if (vDict.ContainsKey("TowageOnDepartureOperatorPhone")) towd.TowageOnDepartureOperatorPhone = vDict["TowageOnDepartureOperatorPhone"]; - if (vDict.ContainsKey("TowageOnDepartureOperatorFax")) towd.TowageOnDepartureOperatorFax = vDict["TowageOnDepartureOperatorFax"]; - if (vDict.ContainsKey("TowageOnDepartureOperatorEmail")) towd.TowageOnDepartureOperatorEmail = vDict["TowageOnDepartureOperatorEmail"]; - if (vDict.ContainsKey("TowageOnDepartureRemarks")) towd.TowageOnDepartureRemarks = vDict["TowageOnDepartureRemarks"]; + if (pDict.ContainsKey("TowageOnDepartureBeam_MTR")) towd.TowageOnDepartureBeam_MTR = (float)Double.Parse(pDict["TowageOnDepartureBeam_MTR"]); + if (pDict.ContainsKey("TowageOnDepartureDraught_DMT")) towd.TowageOnDepartureDraught_DMT = (float)Double.Parse(pDict["TowageOnDepartureDraught_DMT"]); + if (pDict.ContainsKey("TowageOnDepartureLengthOverall_MTR")) towd.TowageOnDepartureLengthOverall_MTR = (float)Double.Parse(pDict["TowageOnDepartureLengthOverall_MTR"]); + if (pDict.ContainsKey("TowageOnDepartureOperatorCountry")) towd.TowageOnDepartureOperatorCountry = pDict["TowageOnDepartureOperatorCountry"]; + if (pDict.ContainsKey("TowageOnDepartureName")) towd.TowageOnDepartureName = pDict["TowageOnDepartureName"]; + if (pDict.ContainsKey("TowageOnDepartureFlag")) towd.TowageOnDepartureFlag = pDict["TowageOnDepartureFlag"]; + if (pDict.ContainsKey("TowageOnDepartureOperatorCompanyName")) towd.TowageOnDepartureOperatorCompanyName = pDict["TowageOnDepartureOperatorCompanyName"]; + if (pDict.ContainsKey("TowageOnDepartureOperatorStreetAndNumber")) towd.TowageOnDepartureOperatorStreetNameAndNumber = pDict["TowageOnDepartureOperatorStreetAndNumber"]; + if (pDict.ContainsKey("TowageOnDepartureOperatorPostalCode")) towd.TowageOnDepartureOperatorPostalCode = pDict["TowageOnDepartureOperatorPostalCode"]; + if (pDict.ContainsKey("TowageOnDepartureOperatorCity")) towd.TowageOnDepartureOperatorCity = pDict["TowageOnDepartureOperatorCity"]; + if (pDict.ContainsKey("TowageOnDepartureOperatorPhone")) towd.TowageOnDepartureOperatorPhone = pDict["TowageOnDepartureOperatorPhone"]; + if (pDict.ContainsKey("TowageOnDepartureOperatorFax")) towd.TowageOnDepartureOperatorFax = pDict["TowageOnDepartureOperatorFax"]; + if (pDict.ContainsKey("TowageOnDepartureOperatorEmail")) towd.TowageOnDepartureOperatorEmail = pDict["TowageOnDepartureOperatorEmail"]; + if (pDict.ContainsKey("TowageOnDepartureRemarks")) towd.TowageOnDepartureRemarks = pDict["TowageOnDepartureRemarks"]; } catch (Exception ex) { _log.ErrorFormat("Error reading TOWA fields: {0}", ex.Message); } + saveMessages.Add(towd); } break; + #endregion + + #region TIEFA case "TIEFA": { if (theMessage.Elements.Count == 0) @@ -550,6 +1072,9 @@ namespace bsmd.herberg.FormService } break; } + #endregion + + #region TIEFD case "TIEFD": { if (theMessage.Elements.Count == 0) @@ -574,22 +1099,28 @@ namespace bsmd.herberg.FormService } break; } + #endregion + } // Die Logik dient dazu, dass bei "leeren" Nachrichten (also z.B. MDH ohne MDH Infos) nicht nur der // Header gespeichert wird und danach in der Luft hängt if ((theMessage.MessageNotificationClass == Message.NotificationClass.VISIT) || (theMessage.MessageNotificationClass == Message.NotificationClass.TRANSIT) || - (derivedMessage != null)) + (derivedMessage != null) || + (saveMessages.Count > 0) + ) { DBManager.Instance.Save(theMessage); if (derivedMessage != null) DBManager.Instance.Save(derivedMessage); + foreach (DatabaseEntity saveEntity in saveMessages) + DBManager.Instance.Save(saveEntity); } } DBManager.Instance.Save(aMessageCore); // warum? - } + } } /// @@ -615,7 +1146,7 @@ namespace bsmd.herberg.FormService { result[message.MessageNotificationClass.ToString()] = message; } - } + } } return result; } diff --git a/nsw/Source/bsmd.herberg.FormService/bsmd.herberg.FormService.csproj b/nsw/Source/bsmd.herberg.FormService/bsmd.herberg.FormService.csproj index d85fbfc5..4aa3bbc0 100644 --- a/nsw/Source/bsmd.herberg.FormService/bsmd.herberg.FormService.csproj +++ b/nsw/Source/bsmd.herberg.FormService/bsmd.herberg.FormService.csproj @@ -56,6 +56,7 @@ + Component