From d9e071b806f3fa3aa759fd02907376db5a2a9aa1 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Tue, 5 Feb 2019 17:21:58 +0000 Subject: [PATCH] 5.1.4 kleinere KOrrekturen --- .../WasteDetailControl.xaml.cs | 2 +- Stundensheet.xlsx | Bin 39674 -> 39729 bytes nsw/Source/bsmd.ExcelReadService/LocodeDB.cs | 34 +++-- nsw/Source/bsmd.ExcelReadService/Program.cs | 4 +- nsw/Source/bsmd.ExcelReadService/Util.cs | 138 ++++++++---------- nsw/Source/bsmd.database/DBManager.cs | 5 +- .../Properties/AssemblyProductInfo.cs | 4 +- .../Properties/AssemblyProjectInfo.cs | 2 +- nsw/Source/misc/db.sqlite | Bin 13103104 -> 13103104 bytes 9 files changed, 88 insertions(+), 101 deletions(-) diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/WasteDetailControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailViewControls/WasteDetailControl.xaml.cs index c8f4a6cf..d40d1e94 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/WasteDetailControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/DetailViewControls/WasteDetailControl.xaml.cs @@ -252,7 +252,7 @@ namespace ENI2.DetailViewControls int cnt = 0; object o = null; - while (reader.Read() && (cnt < 14)) + while (reader.Read() && (cnt < 15)) { if (((IExcelDataReader)reader).FieldCount < 10) { diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index ca0719e4f559498fa346c0e5611bbe29ceca1504..ed00b0d387a1181f2aeab1a55e9b1b5223a6b119 100644 GIT binary patch delta 21764 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 E7yd1>Z~y=R delta 21754 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 public static class LocodeDB { - private static SQLiteConnection _con; + private static readonly SQLiteConnection _con; private const string _locode_DB_NAME = "db.sqlite"; + private static readonly ILog _log = LogManager.GetLogger(typeof(LocodeDB)); + static LocodeDB() { _con = new SQLiteConnection(string.Format("data source={0}; Version=3;", _locode_DB_NAME)); @@ -148,17 +151,24 @@ namespace bsmd.ExcelReadService if (locode.Length != 5) return null; string result = null; - string query = string.Format("SELECT locodes.name_wo_diacritics FROM locodes JOIN countries ON locodes.country_id = countries.ID WHERE locodes.port='t' AND locodes.city_code = '{0}' AND countries.code = '{1}'", - locode.Substring(2), locode.Substring(0,2)); - SQLiteCommand cmd = new SQLiteCommand(query, _con); - IDataReader reader = cmd.ExecuteReader(); - while (reader.Read()) + try { - if(!reader.IsDBNull(0)) - result = reader.GetString(0); - break; + string query = string.Format("SELECT locodes.name_wo_diacritics FROM locodes JOIN countries ON locodes.country_id = countries.ID WHERE locodes.port='t' AND locodes.city_code = '{0}' AND countries.code = '{1}'", + locode.Substring(2), locode.Substring(0, 2)); + SQLiteCommand cmd = new SQLiteCommand(query, _con); + IDataReader reader = cmd.ExecuteReader(); + while (reader.Read()) + { + if (!reader.IsDBNull(0)) + result = reader.GetString(0); + break; + } + reader.Close(); + } + catch(Exception ex) + { + _log.WarnFormat("Error on locode lookup: {0}", ex.Message); } - reader.Close(); return result; } @@ -228,8 +238,8 @@ namespace bsmd.ExcelReadService public int CompareTo(object obj) { - if (obj is LocodeEntry) - return Locode.CompareTo(((LocodeEntry)obj).Locode); + if (obj is LocodeEntry locodeEntry) + return Locode.CompareTo((locodeEntry).Locode); else return 0; } diff --git a/nsw/Source/bsmd.ExcelReadService/Program.cs b/nsw/Source/bsmd.ExcelReadService/Program.cs index 6fab1939..101d33fa 100644 --- a/nsw/Source/bsmd.ExcelReadService/Program.cs +++ b/nsw/Source/bsmd.ExcelReadService/Program.cs @@ -7,12 +7,12 @@ using System.ServiceProcess; namespace bsmd.ExcelReadService { - static class Program + internal static class Program { /// /// The main entry point for the application. /// - static void Main() + private static void Main() { ServiceBase[] ServicesToRun; diff --git a/nsw/Source/bsmd.ExcelReadService/Util.cs b/nsw/Source/bsmd.ExcelReadService/Util.cs index 83f894c0..45fb80d9 100644 --- a/nsw/Source/bsmd.ExcelReadService/Util.cs +++ b/nsw/Source/bsmd.ExcelReadService/Util.cs @@ -219,7 +219,7 @@ namespace bsmd.ExcelReadService #region TIEFD - static void ScanTIEFD(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanTIEFD(List messages, MessageCore messageCore, ExcelReader reader) { Message tiefdMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.TIEFD); if(tiefdMessage.Elements.Count == 0) @@ -241,7 +241,7 @@ namespace bsmd.ExcelReadService #region NAME - static void ScanNAME(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanNAME(List messages, MessageCore messageCore, ExcelReader reader) { Message nameMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.NAME); if (nameMessage.Elements.Count == 0) @@ -260,7 +260,7 @@ namespace bsmd.ExcelReadService #region BPOL - static void ScanBPOL(List messages, MessageCore messageCore, ExcelReader reader) + private 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); @@ -323,7 +323,7 @@ namespace bsmd.ExcelReadService #region POBA - static void ScanPOBA(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanPOBA(List messages, MessageCore messageCore, ExcelReader reader) { Message pobaMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.POBA); if(pobaMessage.Elements.Count == 0) @@ -350,7 +350,7 @@ namespace bsmd.ExcelReadService #region POBD - static void ScanPOBD(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanPOBD(List messages, MessageCore messageCore, ExcelReader reader) { Message pobdMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.POBD); if(pobdMessage.Elements.Count == 0) @@ -378,7 +378,7 @@ namespace bsmd.ExcelReadService #region HAZA - static void ScanHAZA(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanHAZA(List messages, MessageCore messageCore, ExcelReader reader) { Message hazaMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.HAZA); if(hazaMessage.Elements.Count == 0) @@ -715,7 +715,7 @@ namespace bsmd.ExcelReadService #region HAZD - static void ScanHAZD(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanHAZD(List messages, MessageCore messageCore, ExcelReader reader) { Message hazdMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.HAZD); if (hazdMessage.Elements.Count == 0) @@ -1055,7 +1055,7 @@ namespace bsmd.ExcelReadService #region INFO - static void ScanINFO(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanINFO(List messages, MessageCore messageCore, ExcelReader reader) { Message infoMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.INFO); if(infoMessage.Elements.Count == 0) @@ -1078,7 +1078,7 @@ namespace bsmd.ExcelReadService #region STAT - static void ScanSTAT(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanSTAT(List messages, MessageCore messageCore, ExcelReader reader) { Message statMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.STAT); if(statMessage.Elements.Count == 0) @@ -1135,7 +1135,7 @@ namespace bsmd.ExcelReadService #region NOA_NOD - static void ScanNOA_NOD(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanNOA_NOD(List messages, MessageCore messageCore, ExcelReader reader) { Message noa_nodMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.NOA_NOD); if (noa_nodMessage.Elements.Count == 0) @@ -1177,8 +1177,7 @@ namespace bsmd.ExcelReadService if (!callPurposeCode.IsNullOrEmpty()) { - CallPurpose callPurpose = noa_nod.GetSublistElementWithIdentifier(i.ToString()) as CallPurpose; - if (callPurpose == null) + if (!(noa_nod.GetSublistElementWithIdentifier(i.ToString()) is CallPurpose callPurpose)) { callPurpose = new CallPurpose(); callPurpose.NOA_NOD = noa_nod; @@ -1219,18 +1218,21 @@ namespace bsmd.ExcelReadService reader.Conf.ConfirmText("NOA_NOD.LastPort", lastPort, noa_nod.LastPort.IsNullOrEmpty() ? ExcelReader.ReadState.WARN : ExcelReader.ReadState.OK); string nextPort = reader.ReadText("NOA_NOD.NextPort")?.Trim().ToUpper(); - bool? isValidSSNPort = false; + bool isValidSSNPort = false; if (!nextPort.IsNullOrEmpty()) { - if (noa_nod.NextPort.Length > 5) - noa_nod.NextPort = noa_nod.NextPort.Substring(0, 5); //trunc - isValidSSNPort = !LocodeDB.SSNPortNameFromLocode(noa_nod.NextPort).IsNullOrEmpty(); + if (nextPort.Length > 5) + nextPort = noa_nod.NextPort.Substring(0, 5); //trunc + else + isValidSSNPort = !LocodeDB.SSNPortNameFromLocode(nextPort).IsNullOrEmpty(); } - if(!isValidSSNPort.HasValue) + if(string.IsNullOrEmpty(nextPort)) reader.Conf.ConfirmText("NOA_NOD.NextPort", nextPort, ExcelReader.ReadState.WARN); else - reader.Conf.ConfirmText("NOA_NOD.NextPort", nextPort, isValidSSNPort.Value ? ExcelReader.ReadState.OK : ExcelReader.ReadState.FAIL); + reader.Conf.ConfirmText("NOA_NOD.NextPort", nextPort, isValidSSNPort ? ExcelReader.ReadState.OK : ExcelReader.ReadState.FAIL); + + noa_nod.NextPort = nextPort; if(messageCore.IsTransit) { @@ -1259,7 +1261,7 @@ namespace bsmd.ExcelReadService #region AGNT - static void ScanAGNT(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanAGNT(List messages, MessageCore messageCore, ExcelReader reader) { Message agntMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.AGNT); if(agntMessage.Elements.Count == 0) @@ -1280,7 +1282,7 @@ namespace bsmd.ExcelReadService #region WAS - static void ScanWAS(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanWAS(List messages, MessageCore messageCore, ExcelReader reader) { Message wasMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.WAS); if (wasMessage.Elements.Count == 0) @@ -1336,8 +1338,7 @@ namespace bsmd.ExcelReadService string amountGen = string.Format("WAS.WasteAmountGeneratedTillNextPort_MTQ_{0}", i); string wasteDis = string.Format("WAS.WasteDisposedAtLastPort_MTQ_{0}", i); - Waste waste = was.GetSublistElementWithIdentifier(i.ToString()) as Waste; - if(waste == null) + if (!(was.GetSublistElementWithIdentifier(i.ToString()) is Waste waste)) { waste = new Waste(); waste.Identifier = i.ToString(); @@ -1473,7 +1474,7 @@ namespace bsmd.ExcelReadService #region MDH - static void ScanMDH(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanMDH(List messages, MessageCore messageCore, ExcelReader reader) { Message mdhMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.MDH); if(mdhMessage.Elements.Count == 0) @@ -1509,8 +1510,7 @@ namespace bsmd.ExcelReadService int i = 1; foreach (LastTenPortFacilitiesCalled ltpfc in sec.LastTenPortFacilitesCalled) { - PortOfCallLast30Days poc30d = mdh.GetSublistElementWithIdentifier((i + 1).ToString()) as PortOfCallLast30Days; - if (poc30d == null) + if (!(mdh.GetSublistElementWithIdentifier((i + 1).ToString()) is PortOfCallLast30Days poc30d)) { poc30d = new PortOfCallLast30Days(); poc30d.Identifier = (i + 1).ToString(); @@ -1537,8 +1537,7 @@ namespace bsmd.ExcelReadService string crewName = string.Format("MDH.PortOfCallLast30DaysCrewJoinedShipName_{0}", i + 1); string depDate = string.Format("MDH.PortOfCallLast30DaysDateOfDeparture_{0}", i + 1); - PortOfCallLast30Days poc30d = mdh.GetSublistElementWithIdentifier((i + 1).ToString()) as PortOfCallLast30Days; - if (poc30d == null) + if (!(mdh.GetSublistElementWithIdentifier((i + 1).ToString()) is PortOfCallLast30Days poc30d)) { poc30d = new PortOfCallLast30Days(); poc30d.Identifier = (i + 1).ToString(); @@ -1567,8 +1566,7 @@ namespace bsmd.ExcelReadService ExcelReader.ReadState readState = ExcelReader.ReadState.OK; for (int j = 0; j < crew.Length; j++) { - PortOfCallLast30DaysCrewJoinedShip poc30dCrew = poc30d.GetSublistElementWithIdentifier((j + 1).ToString()) as PortOfCallLast30DaysCrewJoinedShip; - if (poc30dCrew == null) + if (!(poc30d.GetSublistElementWithIdentifier((j + 1).ToString()) is PortOfCallLast30DaysCrewJoinedShip poc30dCrew)) { poc30dCrew = new PortOfCallLast30DaysCrewJoinedShip(); poc30dCrew.Identifier = (j + 1).ToString(); @@ -1714,7 +1712,7 @@ namespace bsmd.ExcelReadService #region SEC - static void ScanSEC(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanSEC(List messages, MessageCore messageCore, ExcelReader reader) { Message secMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.SEC); if (secMessage.Elements.Count == 0) @@ -1786,8 +1784,7 @@ namespace bsmd.ExcelReadService string portGISISCode = string.Format("SEC.PortFacilityGISISCode_{0}", i); string portSecMatters = string.Format("SEC.PortFacilitySecurityMattersToReport_{0}", i); - LastTenPortFacilitiesCalled l10fc = sec.GetPortFacilityWithIdentifier(i.ToString()) as LastTenPortFacilitiesCalled; - if (l10fc == null) + if (!(sec.GetPortFacilityWithIdentifier(i.ToString()) is LastTenPortFacilitiesCalled l10fc)) { l10fc = new LastTenPortFacilitiesCalled(); l10fc.Identifier = i.ToString(); @@ -1853,10 +1850,9 @@ namespace bsmd.ExcelReadService string s2sToDate = string.Format("SEC.ShipToShipActivityDateTo_{0}", i); string s2sSec = string.Format("SEC.ShipToShipActivitySecurityMattersToReport_{0}", i); string s2sActivityString = string.Format("SEC.ShipToShipActivityType_{0}", i); - - ShipToShipActivitiesDuringLastTenPortFacilitiesCalled s2sActivity = sec.GetShipToShipWithIdentifier(i.ToString()) as ShipToShipActivitiesDuringLastTenPortFacilitiesCalled; - if (s2sActivity == null) + + if (!(sec.GetShipToShipWithIdentifier(i.ToString()) is ShipToShipActivitiesDuringLastTenPortFacilitiesCalled s2sActivity)) { s2sActivity = new ShipToShipActivitiesDuringLastTenPortFacilitiesCalled(); s2sActivity.Identifier = i.ToString(); @@ -1894,17 +1890,16 @@ namespace bsmd.ExcelReadService #region BKRA - static void ScanBKRA(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanBKRA(List messages, MessageCore messageCore, ExcelReader reader) { Message bkraMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.BKRA); bkraMessage.DeleteElements(); for (int i = 1; i <= bkraMessage.NumberOfExcelRows; i++) { string lnQuantity = string.Format("BKRA.BunkerFuelQuantity_TNE_{0}", i); - string lnType = string.Format("BKRA.BunkerFuelType_{0}", i); + string lnType = string.Format("BKRA.BunkerFuelType_{0}", i); - BRKA bkra = bkraMessage.GetSublistElementWithIdentifier((i).ToString()) as BRKA; - if (bkra == null) + if (!(bkraMessage.GetSublistElementWithIdentifier((i).ToString()) is BRKA bkra)) { bkra = new BRKA(); bkra.Identifier = (i).ToString(); @@ -1936,7 +1931,7 @@ namespace bsmd.ExcelReadService #region BKRD - static void ScanBKRD(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanBKRD(List messages, MessageCore messageCore, ExcelReader reader) { Message bkrdMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.BKRD); bkrdMessage.DeleteElements(); @@ -1944,8 +1939,7 @@ namespace bsmd.ExcelReadService { string lnQuantity = string.Format("BKRD.BunkerFuelQuantity_TNE_{0}", i); string lnType = string.Format("BKRD.BunkerFuelType_{0}", i); - BRKD bkrd = bkrdMessage.GetSublistElementWithIdentifier((i).ToString()) as BRKD; - if (bkrd == null) + if (!(bkrdMessage.GetSublistElementWithIdentifier((i).ToString()) is BRKD bkrd)) { bkrd = new BRKD(); bkrd.Identifier = (i).ToString(); @@ -1977,7 +1971,7 @@ namespace bsmd.ExcelReadService #region TOWA - static void ScanTOWA(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanTOWA(List messages, MessageCore messageCore, ExcelReader reader) { Message towaMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.TOWA); towaMessage.DeleteElements(); @@ -1995,8 +1989,7 @@ namespace bsmd.ExcelReadService string towageName = reader.ReadText(tName); if (towageName.IsNullOrEmpty()) continue; - TOWA towa = towaMessage.GetSublistElementWithIdentifier((i).ToString()) as TOWA; - if (towa == null) + if (!(towaMessage.GetSublistElementWithIdentifier((i).ToString()) is TOWA towa)) { towa = new TOWA(); towa.Identifier = (i).ToString(); @@ -2023,7 +2016,7 @@ namespace bsmd.ExcelReadService #region TOWD - static void ScanTOWD(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanTOWD(List messages, MessageCore messageCore, ExcelReader reader) { Message towdMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.TOWD); towdMessage.DeleteElements(); @@ -2040,8 +2033,7 @@ namespace bsmd.ExcelReadService string towageName = reader.ReadText(tName); if (towageName.IsNullOrEmpty()) continue; - TOWD towd = towdMessage.GetSublistElementWithIdentifier((i).ToString()) as TOWD; - if (towd == null) + if (!(towdMessage.GetSublistElementWithIdentifier((i).ToString()) is TOWD towd)) { towd = new TOWD(); towd.Identifier = (i).ToString(); @@ -2066,7 +2058,7 @@ namespace bsmd.ExcelReadService #region PRE72H - static void ScanPRE72H(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanPRE72H(List messages, MessageCore messageCore, ExcelReader reader) { Message pre72hMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.PRE72H); if (pre72hMessage.Elements.Count == 0) @@ -2088,7 +2080,7 @@ namespace bsmd.ExcelReadService #region SERV - static void ScanSERV(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanSERV(List messages, MessageCore messageCore, ExcelReader reader) { Message servMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.SERV); if(servMessage.Elements.Count == 0) @@ -2112,7 +2104,7 @@ namespace bsmd.ExcelReadService #region STO - static void ScanSTO(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanSTO(List messages, MessageCore messageCore, ExcelReader reader) { Message stoMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.STO); stoMessage.DeleteElements(); @@ -2124,8 +2116,8 @@ namespace bsmd.ExcelReadService string stoQuantityUnit = string.Format("STO.QuantityUnit_{0}", i + 1); string stoLocationOnBoard = string.Format("STO.LocationOnBoard_{0}", i + 1); string stoOfficialUse = string.Format("STO.OfficialUse_{0}", i + 1); - STO sto = stoMessage.GetSublistElementWithIdentifier((i + 1).ToString()) as STO; - if(sto == null) + + if (!(stoMessage.GetSublistElementWithIdentifier((i + 1).ToString()) is STO sto)) { sto = new STO(); sto.Identifier = (i + 1).ToString(); @@ -2153,7 +2145,7 @@ namespace bsmd.ExcelReadService #region LADG - static void ScanLADG(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanLADG(List messages, MessageCore messageCore, ExcelReader reader) { Message ladgMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.LADG); ladgMessage.DeleteElements(); @@ -2169,8 +2161,7 @@ namespace bsmd.ExcelReadService string lnLACode = string.Format("LADG.CargoLACode_{0}", i + 1); string lnZusatz = string.Format("LADG.CargoTypeZusatz_{0}", i + 1); - LADG ladg = ladgMessage.GetSublistElementWithIdentifier((i + 1).ToString()) as LADG; - if (ladg == null) + if (!(ladgMessage.GetSublistElementWithIdentifier((i + 1).ToString()) is LADG ladg)) { ladg = new LADG(); ladg.Identifier = (i + 1).ToString(); @@ -2187,8 +2178,9 @@ namespace bsmd.ExcelReadService continue; } - ladg.CargoCodeNST = reader.ReadText(lnType); + ladg.CargoCodeNST = reader.ReadText(lnType); // Cargo Type Freitext in DK + if(reader.Mode == ExcelReader.CountryMode.DK) { reader.Conf.ConfirmText(lnType, ladg.CargoCodeNST, ladg.CargoCodeNST.IsNullOrEmpty() ? ExcelReader.ReadState.WARN : ExcelReader.ReadState.OK); @@ -2235,18 +2227,8 @@ namespace bsmd.ExcelReadService ladg.CargoNumberOfItems = (int?) reader.ReadNumber(lnCNOI); ladg.CargoGrossQuantity_TNE = reader.ReadNumber(lnCGQ); - - ladg.PortOfLoading = reader.ReadText(lnLoad); - if (ladg.PortOfLoading.IsNullOrEmpty()) - reader.Conf.ConfirmText(lnLoad, null, ExcelReader.ReadState.FAIL); - else - reader.Conf.ConfirmText(lnLoad, ladg.PortOfLoading, (ladg.PortOfLoading.Length == 5) ? ExcelReader.ReadState.OK : ExcelReader.ReadState.WARN); - - ladg.PortOfDischarge = reader.ReadText(lnDis); - if (ladg.PortOfDischarge.IsNullOrEmpty()) - reader.Conf.ConfirmText(lnDis, null, ExcelReader.ReadState.FAIL); - else - reader.Conf.ConfirmText(lnDis, ladg.PortOfDischarge, (ladg.PortOfDischarge.Length == 5) ? ExcelReader.ReadState.OK : ExcelReader.ReadState.WARN); + ladg.PortOfLoading = reader.ReadLoCode(lnLoad); + ladg.PortOfDischarge = reader.ReadLoCode(lnDis); // dont save empty element if (ladg.IsNew && !ladg.CargoHandlingType.HasValue) @@ -2258,7 +2240,7 @@ namespace bsmd.ExcelReadService #region CREW - static void ScanCREW(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanCREW(List messages, MessageCore messageCore, ExcelReader reader) { Message crewMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.CREW); crewMessage.DeleteElements(); @@ -2281,8 +2263,7 @@ namespace bsmd.ExcelReadService if (!lastName.IsNullOrEmpty() || !firstName.IsNullOrEmpty()) { - CREW crew = crewMessage.GetSublistElementWithIdentifier((i + 1).ToString()) as CREW; - if (crew == null) + if (!(crewMessage.GetSublistElementWithIdentifier((i + 1).ToString()) is CREW crew)) { crew = new CREW(); crew.Identifier = (i + 1).ToString(); @@ -2332,8 +2313,7 @@ namespace bsmd.ExcelReadService string lastName = reader.ReadText(crewLastName); if (!lastName.IsNullOrEmpty()) { - CREWD crew = crewMessage.GetSublistElementWithIdentifier((i + 1).ToString()) as CREWD; - if (crew == null) + if (!(crewMessage.GetSublistElementWithIdentifier((i + 1).ToString()) is CREWD crew)) { crew = new CREWD(); crew.Identifier = (i + 1).ToString(); @@ -2371,7 +2351,7 @@ namespace bsmd.ExcelReadService #region PAS - static void ScanPAS(List messages, MessageCore messageCore, ExcelReader reader) + private static void ScanPAS(List messages, MessageCore messageCore, ExcelReader reader) { Message pasMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.PAS); pasMessage.DeleteElements(); @@ -2396,9 +2376,8 @@ namespace bsmd.ExcelReadService if (!lastName.IsNullOrEmpty() || !firstName.IsNullOrEmpty()) { - PAS pas = pasMessage.GetSublistElementWithIdentifier((i + 1).ToString()) as PAS; - if (pas == null) - { + if (!(pasMessage.GetSublistElementWithIdentifier((i + 1).ToString()) is PAS pas)) + { pas = new PAS(); pas.Identifier = (i + 1).ToString(); pas.MessageHeader = pasMessage; @@ -2448,8 +2427,7 @@ namespace bsmd.ExcelReadService string lastName = reader.ReadText(pasLastName); if (!lastName.IsNullOrEmpty()) { - PASD pas = pasMessage.GetSublistElementWithIdentifier((i + 1).ToString()) as PASD; - if (pas == null) + if (!(pasMessage.GetSublistElementWithIdentifier((i + 1).ToString()) is PASD pas)) { pas = new PASD(); pas.Identifier = (i + 1).ToString(); diff --git a/nsw/Source/bsmd.database/DBManager.cs b/nsw/Source/bsmd.database/DBManager.cs index 36a6ac47..e4bd52c8 100644 --- a/nsw/Source/bsmd.database/DBManager.cs +++ b/nsw/Source/bsmd.database/DBManager.cs @@ -95,7 +95,7 @@ namespace bsmd.database public bool IsConnected { - get { return (this._con?.State == ConnectionState.Open); } + get { return this._con?.State == ConnectionState.Open; } } @@ -346,8 +346,7 @@ namespace bsmd.database if (statMessage?.Elements.Count > 0) { - STAT stat = statMessage.Elements[0] as STAT; - if (stat != null) + if (statMessage.Elements[0] is STAT stat) return stat.ShipName; } return null; diff --git a/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs b/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs index 427dad81..941108b5 100644 --- a/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs +++ b/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs @@ -2,6 +2,6 @@ [assembly: AssemblyCompany("schick Informatik")] [assembly: AssemblyProduct("BSMD NSW interface")] -[assembly: AssemblyInformationalVersion("5.1.3")] -[assembly: AssemblyCopyright("Copyright © 2014-2018 schick Informatik")] +[assembly: AssemblyInformationalVersion("5.1.4")] +[assembly: AssemblyCopyright("Copyright © 2014-2019 schick Informatik")] [assembly: AssemblyTrademark("")] \ No newline at end of file diff --git a/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs b/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs index c3fff841..5eabc612 100644 --- a/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs +++ b/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs @@ -1,4 +1,4 @@ using System.Reflection; -[assembly: AssemblyVersion("5.1.3.*")] +[assembly: AssemblyVersion("5.1.4.*")] diff --git a/nsw/Source/misc/db.sqlite b/nsw/Source/misc/db.sqlite index acb65eabb8a2535d296a47d2dca8b1cf40dd9d1a..efdea21e6fce343354ca2db21e74f6f55a84f6b0 100644 GIT binary patch delta 735 zcmWm7XIl*b0EXe~7}+D6hLM%MN61L!P(~#}6#%f`;v|3rMtu|I$tDV)}>R@%WVy#YA zXRC|V)#_$-w|ZDTtzK4~6>lY2iB@l`kJZ=eXC+zvtpV0RYmhbAO16erL#<)faBGA$ z(i&xrw#Havt#Q_PYl1b=nq*D3QmiS~RBM`*YE8FhSTn6zR+=^2O1CnsOlyu6wB}m# ztSl?rnr|(z7Fvs}9BZ+)#9C_QT6xwoYk7@A>A}FhvS=`be5}AqtioytYp@pUupS$* z5u30XTd)<|upK+F6T47=-PnV@_MCT`(2?%*z}5Wzj%#{)dXBSi5SPw*7a@EkAj v60h(YZ}1k?c!&3>!3WghBR=6X>hJ|$@eSYc13yuZU-*p%G}cCge?rlJ#h6Kl delta 735 zcmWm5XIl*b0EXe~kO(Dvlo7I$Ejv-+$X;=**WP54b;2u@l)aC6%uq^3$cVq;r+9q0 zKi=WLk=QWGlLC>7R@%WI$52qE>>5oo0ViGTivZ5R!^&!m16a_`dEFfRI8uW-x^>Iv<6ve)?h2$8e$E# zhFQa{5!Og+lr`GQu*O(pt#Q_PYl1b=nq*~KldUXkiZ#{BwsNdoYnnCPnqdX4nO2@P z%bIP?vF2LytohagYoWEsT5K(`@~x%TvRZ|5gMp33(O?M6u>vcx3acTk!CI`tdThY| zvk9BA1zWKV+pz;Xu?q#*jXl_leb|o!IEX_yj6xj2Q5?f@oIn^wIEhm@4dV=oaTe!r z9wjKn1(e|;%29z!xQr{fifg!z8@P#ExQ#owi+hORJ|5s99^o;bAd07WhUa*Jmw1Ir vyv7^6MHQ;?4mGI7d(`0rKH?KTqaI)I72nW+@A!eA_=QINu8Ri$grffdr@Kja