From a5ed1b776396fd3512e29fe1f408662bdb64ba0b Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Sun, 4 Dec 2016 19:35:27 +0000 Subject: [PATCH] Implementierung ExcelReader: Erweiterung neues Erfassungssheet (inkl. DK!) --- Stundensheet.xlsx | Bin 24713 -> 24965 bytes nsw/Source/SQL/Update_3.1.3_To_3.5.sql | 4 +- .../bsmd.ExcelReadService/ExcelReader.cs | 23 +++ nsw/Source/bsmd.ExcelReadService/Util.cs | 98 ++++++++++++- nsw/Source/bsmd.database/BPOL.cs | 2 + nsw/Source/bsmd.database/DBManager.cs | 1 + nsw/Source/bsmd.database/Message.cs | 9 +- nsw/Source/bsmd.database/STO.cs | 133 ++++++++++++++++++ nsw/Source/bsmd.database/XtraSendLogic.cs | 3 +- nsw/Source/bsmd.database/bsmd.database.csproj | 1 + 10 files changed, 264 insertions(+), 10 deletions(-) create mode 100644 nsw/Source/bsmd.database/STO.cs diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index fcbf57f274b611e44c8922a645dba6aeafd2cfad..e6b4cd14adb390fd53e114841ef0f281c339fc04 100644 GIT binary patch delta 21560 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 delta 21395 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

5f2a}u^}4r*RjAWQP-1e_S2 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 F{{U{Ue-i)z diff --git a/nsw/Source/SQL/Update_3.1.3_To_3.5.sql b/nsw/Source/SQL/Update_3.1.3_To_3.5.sql index abd510c6..6b82d173 100644 --- a/nsw/Source/SQL/Update_3.1.3_To_3.5.sql +++ b/nsw/Source/SQL/Update_3.1.3_To_3.5.sql @@ -47,7 +47,7 @@ GO PRINT N'Creating [dbo].[STO]..'; GO CREATE TABLE [dbo].[STO] ( - [Id] UNIQUEIDENTIFIER CONSTRAINT [PK_PortArea_Id] DEFAULT (newid()) ROWGUIDCOL NOT NULL , + [Id] UNIQUEIDENTIFIER CONSTRAINT [PK_STO_Id] DEFAULT (newid()) ROWGUIDCOL NOT NULL , [MessageHeaderId] [uniqueidentifier] NULL, [Name] [NVARCHAR] (255) NULL, [Quantity] [INT] NULL, @@ -57,3 +57,5 @@ CREATE TABLE [dbo].[STO] ( ); GO +PRINT N'Update complete.'; +GO diff --git a/nsw/Source/bsmd.ExcelReadService/ExcelReader.cs b/nsw/Source/bsmd.ExcelReadService/ExcelReader.cs index 6c5c49b2..3e84d75c 100644 --- a/nsw/Source/bsmd.ExcelReadService/ExcelReader.cs +++ b/nsw/Source/bsmd.ExcelReadService/ExcelReader.cs @@ -16,6 +16,7 @@ using System.Drawing; using System.Globalization; using System.Linq; using System.Runtime.InteropServices; +using bsmd.database; namespace bsmd.ExcelReadService { @@ -128,6 +129,28 @@ namespace bsmd.ExcelReadService return new string(val.Where(c => !Char.IsWhiteSpace(c)).ToArray()); } + internal string ReadLoCode(string lookup) + { + string val = this.ReadText(lookup); + if(!val.IsNullOrEmpty()) + { + string portName = LocodeDB.PortNameFromLocode(val); + if(portName == null) + { + this.HighlightLookup(lookup, ReadState.WARN); + } + else + { + this.HighlightLookup(lookup, ReadState.OK); + } + } + else + { + this.HighlightLookup(lookup, ReadState.FAIL); + } + return val; + } + internal byte? ReadGender(string lookup) { byte? result = null; diff --git a/nsw/Source/bsmd.ExcelReadService/Util.cs b/nsw/Source/bsmd.ExcelReadService/Util.cs index 94910fb3..755987b1 100644 --- a/nsw/Source/bsmd.ExcelReadService/Util.cs +++ b/nsw/Source/bsmd.ExcelReadService/Util.cs @@ -99,6 +99,8 @@ namespace bsmd.ExcelReadService ScanLADG(messages, messageCore, reader); + ScanSTO(messages, messageCore, reader); + ScanINFO(messages, messageCore, reader); ScanSERV(messages, messageCore, reader); @@ -112,8 +114,8 @@ namespace bsmd.ExcelReadService ScanCREW(messages, messageCore, reader); ScanPAS(messages, messageCore, reader); - - // BPOL nicht im Sheet + + ScanBPOL(messages, messageCore, reader); ScanTOWA(messages, messageCore, reader); @@ -237,6 +239,55 @@ namespace bsmd.ExcelReadService #endregion + #region BPOL + + static void ScanBPOL(List messages, MessageCore messageCore, ExcelReader reader) + { + // Die Verarbeitung dieser Nachricht aktuell nur für + Message bpolMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.BPOL); + if (bpolMessage.Elements.Count == 0) + { + BPOL newBPOL = new BPOL(); + newBPOL.MessageHeader = bpolMessage; + bpolMessage.Elements.Add(newBPOL); + } + + BPOL bpol = bpolMessage.Elements[0] as BPOL; + Util.ScanMessage(bpol, reader); + + + // PortOfItinerary + for (int i = 1; i <= 10; i++) + { + string bpolName = string.Format("BPOL.PortOfItineraryName_{0}", i); + string bpolLocode = string.Format("BPOL.PortOfItineraryLoCode_{0}", i); + string bpolETA = string.Format("BPOL.PortOfItineraryETA_{0}", i); + + string bpolNameValue = reader.ReadText(bpolName)?.Trim(); + if (!bpolNameValue.IsNullOrEmpty()) + { + PortOfItinerary poi = bpol.GetSublistElementWithIdentifier(i.ToString()) as PortOfItinerary; + if (poi == null) + { + poi = new PortOfItinerary(); + poi.BPOL = bpol; + poi.Identifier = i.ToString(); + bpol.PortOfItineraries.Add(poi); + } + poi.PortOfItineraryName = bpolNameValue; + poi.PortOfItineraryLocode = reader.ReadLoCode(bpolLocode); + if (!poi.PortOfItineraryLocode.IsNullOrEmpty() && (poi.PortOfItineraryLocode.Length > 5)) + { + reader.HighlightLookup(bpolLocode, ExcelReader.ReadState.WARN); + } + poi.PortOfItineraryETA = reader.ReadDate(bpolETA); + + } + } + } + + #endregion + #region POBA static void ScanPOBA(List messages, MessageCore messageCore, ExcelReader reader) @@ -429,6 +480,8 @@ namespace bsmd.ExcelReadService noa_nod.ETDFromPortOfCall = reader.ReadDateTime("NOA_NOD.ETDDateFromPortOfCall", "NOA_NOD.ETDTimeFromPortOfCall"); noa_nod.ETDFromLastPort = reader.ReadDateTime("NOA_NOD.ETDDateFromLastPort", "NOA_NOD.ETDTimeFromLastPort"); noa_nod.ETAToNextPort = reader.ReadDateTime("NOA_NOD.ETADateToNextPort", "NOA_NOD.ETATimeToNextPort"); + // DK + noa_nod.IsAnchored = reader.ReadBoolean("NOA_NOD.IsAnchored"); } @@ -602,7 +655,7 @@ namespace bsmd.ExcelReadService } poc30d.PortOfCallLast30DaysDateOfDeparture = reader.ReadDate(depDate); - poc30d.PortOfCallLast30DaysLocode = reader.ReadTextNoWhitespace(locode); + poc30d.PortOfCallLast30DaysLocode = reader.ReadLoCode(locode); poc30d.PortOfCallLast30DaysCrewMembersJoined = reader.ReadBoolean(crewJoined); if (poc30d.PortOfCallLast30DaysCrewMembersJoined ?? false) @@ -714,7 +767,7 @@ namespace bsmd.ExcelReadService l10fc.PortFacilityPortName = reader.ReadText(portName); l10fc.PortFacilityPortCountry = reader.ReadText(portCountry); - l10fc.PortFacilityPortLoCode = reader.ReadTextNoWhitespace(portLocode); + l10fc.PortFacilityPortLoCode = reader.ReadLoCode(portLocode); l10fc.PortFacilityDateOfArrival = reader.ReadDate(portDateOfArrival); l10fc.PortFacilityDateOfDeparture = reader.ReadDate(portDateOfDeparture); l10fc.PortFacilityShipSecurityLevel = (byte?) reader.ReadNumber(portShipSecLevel); @@ -758,7 +811,7 @@ namespace bsmd.ExcelReadService continue; } - s2sActivity.ShipToShipActivityLocationLoCode = reader.ReadTextNoWhitespace(s2sLocode); + s2sActivity.ShipToShipActivityLocationLoCode = reader.ReadLoCode(s2sLocode); s2sActivity.ShipToShipActivityLocationCoordinatesLatitude = (int?)reader.ReadNumber(s2sLatitude); // keine "0" (d.h. fehlerhafte Koordinaten) ins ANSW übergeben falls im Sheet nichts ist aber der Reader das aus irgendeinem Grund liest if (s2sActivity.ShipToShipActivityLocationCoordinatesLatitude.HasValue && s2sActivity.ShipToShipActivityLocationCoordinatesLatitude.Value == 0) @@ -919,6 +972,41 @@ namespace bsmd.ExcelReadService #endregion + #region STO + + static void ScanSTO(List messages, MessageCore messageCore, ExcelReader reader) + { + Message stoMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.STO); + for(int i=0;i messages, MessageCore messageCore, ExcelReader reader) diff --git a/nsw/Source/bsmd.database/BPOL.cs b/nsw/Source/bsmd.database/BPOL.cs index 66559db7..1262ea93 100644 --- a/nsw/Source/bsmd.database/BPOL.cs +++ b/nsw/Source/bsmd.database/BPOL.cs @@ -30,6 +30,8 @@ namespace bsmd.database [Validation(ValidationCode.NOT_NULL)] public bool? StowawaysOnBoard { get; set; } + + [LookupName("BPOL.CruiseShip")] public bool? CruiseShip { get; set; } public List PortOfItineraries { get { return this.poi; } } diff --git a/nsw/Source/bsmd.database/DBManager.cs b/nsw/Source/bsmd.database/DBManager.cs index c5f0a8cf..fec3722d 100644 --- a/nsw/Source/bsmd.database/DBManager.cs +++ b/nsw/Source/bsmd.database/DBManager.cs @@ -531,6 +531,7 @@ namespace bsmd.database case Message.NotificationClass.HAZA: result = new HAZ(); break; case Message.NotificationClass.HAZD: result = new HAZ(); ((HAZ)result).IsDeparture = true; break; case Message.NotificationClass.AGNT: result = new AGNT(); break; + case Message.NotificationClass.STO: result = new STO(); break; default: break; // VISIT, TRANSIT diff --git a/nsw/Source/bsmd.database/Message.cs b/nsw/Source/bsmd.database/Message.cs index a5c47958..fb170caf 100644 --- a/nsw/Source/bsmd.database/Message.cs +++ b/nsw/Source/bsmd.database/Message.cs @@ -56,7 +56,8 @@ namespace bsmd.database NotificationClass.WAS, NotificationClass.ATA, NotificationClass.ATD, - NotificationClass.AGNT + NotificationClass.AGNT, + NotificationClass.STO }); #endregion @@ -95,7 +96,8 @@ namespace bsmd.database TOWD, HAZA, // 25 HAZD, - AGNT + AGNT, + STO // DK - only } public enum MessageStatus @@ -203,7 +205,7 @@ namespace bsmd.database ///

/// Vorwärts-Referenzen auf die von diesem Header-Element abhängigen speziellen Nachrichten-Datensätzen /// Folgende Objekte können pro Nachricht n-fach vorkommen - /// BRKA, BRKD, LADG, CREW, PAS, SERV, TOWA, TOWD + /// BRKA, BRKD, LADG, CREW, PAS, SERV, TOWA, TOWD, STO /// sonst hat die Liste immer ein Element /// public List Elements { get { return this.elements; } } @@ -464,6 +466,7 @@ namespace bsmd.database case NotificationClass.PAS: return 30; case NotificationClass.TOWA: return 1; case NotificationClass.TOWD: return 1; + case NotificationClass.STO: return 10; default: return 0; diff --git a/nsw/Source/bsmd.database/STO.cs b/nsw/Source/bsmd.database/STO.cs new file mode 100644 index 00000000..ab8a3495 --- /dev/null +++ b/nsw/Source/bsmd.database/STO.cs @@ -0,0 +1,133 @@ +// +// Class: STO +// Current CLR: 4.0.30319.34209 +// System: Microsoft Visual Studio 10.0 +// Author: dani +// Created: 12/3/2016 6:48:58 PM +// +// Copyright (c) 2016 Informatikbüro Daniel Schick. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Data.SqlClient; +using System.Data; + +namespace bsmd.database +{ + + /// + /// Diese Meldeklasse ist bislang DK-Only und wird in den meisten Tools nicht berücksichtigt! + /// + public class STO : DatabaseEntity, ISublistElement + { + + public STO() + { + this.tablename = "[dbo].[STO]"; + } + + #region Properties + + + /// + /// ISublistElement implementation + /// + public string Identifier { get; set; } + + [LookupName("STO.Name")] + public string Name { get; set; } + + [LookupName("STO.Quantity")] + public int? Quantity { get; set; } + + [LookupName("STO.QuantityUnit")] + public string QuantityUnit { get; set; } + + [LookupName("STO.LocationOnBoard")] + public string LocationOnBoard { get; set; } + + [LookupName("STO.OfficialUse")] + public string OfficialUse { get; set; } + + #endregion + + #region DatabaseEntity implementation + + public override string Subtitle + { + get + { + return "Storage information"; + } + } + + public override List LoadList(IDataReader reader) + { + List result = new List(); + + while (reader.Read()) + { + STO sto = new STO(); + + sto.id = reader.GetGuid(0); + if (!reader.IsDBNull(1)) sto.Name = reader.GetString(1); + if (!reader.IsDBNull(2)) sto.Quantity = reader.GetInt32(2); + if (!reader.IsDBNull(3)) sto.QuantityUnit = reader.GetString(3); + if (!reader.IsDBNull(4)) sto.LocationOnBoard = reader.GetString(4); + if (!reader.IsDBNull(5)) sto.OfficialUse = reader.GetString(5); + if (!reader.IsDBNull(6)) sto.Identifier = reader.GetString(6); + result.Add(sto); + } + reader.Close(); + return result; + } + + public override void PrepareLoadCommand(IDbCommand cmd, Message.LoadFilter filter, params object[] criteria) + { + string query = string.Format("SELECT Id, Name, Quantity, QuantityUnit, LocationOnBoard, OfficialUse, Identifier FROM {0}", + this.Tablename); + + switch (filter) + { + case Message.LoadFilter.MESSAGEHEADER: + query += "WHERE MessageHeaderId = @MHID"; + ((SqlCommand)cmd).Parameters.AddWithValue("@MHID", criteria[0]); + break; + case Message.LoadFilter.ALL: + default: + + break; + } + + cmd.CommandText = query; + } + + public override void PrepareSave(IDbCommand cmd) + { + SqlCommand scmd = cmd as SqlCommand; + + scmd.Parameters.AddWithValue("@P1", this.MessageHeader.Id); + scmd.Parameters.AddWithNullableValue("@P2", this.Name); + scmd.Parameters.AddWithNullableValue("@P3", this.Quantity); + scmd.Parameters.AddWithNullableValue("@P4", this.QuantityUnit); + scmd.Parameters.AddWithNullableValue("@P5", this.LocationOnBoard); + scmd.Parameters.AddWithNullableValue("@P6", this.OfficialUse); + scmd.Parameters.AddWithNullableValue("@P7", this.Identifier); + + if (this.IsNew) + { + scmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, Name, Quantity, " + + "QuantityUnit, LocationOnBoard, OfficialUse, Identifier) VALUES ( @P1, @P2, @P3, @P4, @P5, @P6, @P7 )", this.Tablename); + } + else + { + scmd.Parameters.AddWithValue(@"ID", this.Id); + scmd.CommandText = string.Format("UPDATE {0} SET Name = @P2, Quantity = @P3, QuantityUnit = @P4, " + + "LocationOnBoard = @P5, OfficialUse = @P6 WHERE Id = @ID", this.Tablename); + } + } + + #endregion + + } +} diff --git a/nsw/Source/bsmd.database/XtraSendLogic.cs b/nsw/Source/bsmd.database/XtraSendLogic.cs index 34cbe5ad..3114e15e 100644 --- a/nsw/Source/bsmd.database/XtraSendLogic.cs +++ b/nsw/Source/bsmd.database/XtraSendLogic.cs @@ -41,7 +41,8 @@ namespace bsmd.database (message.MessageNotificationClass == Message.NotificationClass.LADG) || (message.MessageNotificationClass == Message.NotificationClass.SERV) || (message.MessageNotificationClass == Message.NotificationClass.WAS) || - (message.MessageNotificationClass == Message.NotificationClass.TOWD)) + (message.MessageNotificationClass == Message.NotificationClass.TOWD) || + (message.MessageNotificationClass == Message.NotificationClass.STO)) return false; } diff --git a/nsw/Source/bsmd.database/bsmd.database.csproj b/nsw/Source/bsmd.database/bsmd.database.csproj index 55a8d790..23298b61 100644 --- a/nsw/Source/bsmd.database/bsmd.database.csproj +++ b/nsw/Source/bsmd.database/bsmd.database.csproj @@ -108,6 +108,7 @@ +