From 51fe38fda320502f56f833a77e4cf923cde790ce Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Thu, 22 Sep 2016 18:17:07 +0000 Subject: [PATCH] =?UTF-8?q?Version=203.2.4:=20Korrekturen=20f=C3=BCr=20Ein?= =?UTF-8?q?lesen=20Excel=20(viele),=20Testing=20mit=20Christin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Stundensheet.xlsx | Bin 23421 -> 23493 bytes .../bsmd.ExcelReadService/ExcelReadService.cs | 2 +- .../bsmd.ExcelReadService/ExcelReader.cs | 2 +- nsw/Source/bsmd.ExcelReadService/LocodeDB.cs | 21 +++- nsw/Source/bsmd.ExcelReadService/Util.cs | 106 +++++++++++++----- nsw/Source/bsmd.database/INFO.cs | 3 + nsw/Source/bsmd.database/MDH.cs | 2 +- nsw/Source/bsmd.database/NOA_NOD.cs | 4 +- .../Properties/AssemblyProductInfo.cs | 2 +- .../Properties/AssemblyProjectInfo.cs | 2 +- nsw/Source/bsmd.database/SEC.cs | 8 +- nsw/Source/bsmd.database/STAT.cs | 5 + nsw/Source/bsmd.database/WAS.cs | 1 + nsw/Source/bsmd.database/Waste.cs | 2 +- 14 files changed, 122 insertions(+), 38 deletions(-) diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index 25929d8c579b6294cca3d50908ef2c6a16d63222..ef924ff4d36012a888136dd860e30ce17ef1c333 100644 GIT binary patch delta 12586 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

C$MDfO6-5C9 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 C9A&ov diff --git a/nsw/Source/bsmd.ExcelReadService/ExcelReadService.cs b/nsw/Source/bsmd.ExcelReadService/ExcelReadService.cs index b7a2c77e..608cf041 100644 --- a/nsw/Source/bsmd.ExcelReadService/ExcelReadService.cs +++ b/nsw/Source/bsmd.ExcelReadService/ExcelReadService.cs @@ -113,7 +113,7 @@ namespace bsmd.ExcelReadService if (!isValidSender) { - receiptText = string.Format("ignored e - mail from illegal sender: { 0}", mailSender); + receiptText = string.Format("ignored e - mail from illegal sender: {0}", mailSender); _log.Warn(receiptText); } else diff --git a/nsw/Source/bsmd.ExcelReadService/ExcelReader.cs b/nsw/Source/bsmd.ExcelReadService/ExcelReader.cs index 086433bc..68e044bb 100644 --- a/nsw/Source/bsmd.ExcelReadService/ExcelReader.cs +++ b/nsw/Source/bsmd.ExcelReadService/ExcelReader.cs @@ -463,7 +463,7 @@ namespace bsmd.ExcelReadService this.HighlightLookup(lookup, ReadState.OK); - if ((val == "y") || (val == "Y") || (val == "yes") || (val == "YES") || (val == "1") || (val == "x") || (val == "X")) + if ((val == "y") || (val == "Y") || val.Equals("yes", StringComparison.OrdinalIgnoreCase) || (val == "1") || (val == "x") || (val == "X")) return true; return false; } diff --git a/nsw/Source/bsmd.ExcelReadService/LocodeDB.cs b/nsw/Source/bsmd.ExcelReadService/LocodeDB.cs index e881f7c9..b1916d50 100644 --- a/nsw/Source/bsmd.ExcelReadService/LocodeDB.cs +++ b/nsw/Source/bsmd.ExcelReadService/LocodeDB.cs @@ -96,9 +96,28 @@ namespace bsmd.ExcelReadService } reader.Close(); return result; - } + ///

+ /// Get Portname from LOCODE + /// + public static string PortNameFromLocode(string locode) + { + string result = null; + string query = string.Format("SELECT locodes.name 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()) + { + result = reader.GetString(0); + break; + } + reader.Close(); + return result; + } + + public static void CloseDB() { _con.Close(); diff --git a/nsw/Source/bsmd.ExcelReadService/Util.cs b/nsw/Source/bsmd.ExcelReadService/Util.cs index af5a0f0e..3c3070c3 100644 --- a/nsw/Source/bsmd.ExcelReadService/Util.cs +++ b/nsw/Source/bsmd.ExcelReadService/Util.cs @@ -344,30 +344,55 @@ namespace bsmd.ExcelReadService else { noa_nod.ETAToPortOfCall = messageCore.ETA; - string callPurposeDescription = reader.ReadText("NOA_NOD.CallPuposeDescription"); - if (!callPurposeDescription.IsNullOrEmpty()) + for (int i = 1; i <= noa_nod.NumberOfExcelRows; i++) { - CallPurpose callPurpose = new CallPurpose(); - callPurpose.NOA_NOD = noa_nod; - callPurpose.CallPurposeCode = noa_nod.getCallPurposeCodeFromDescription(callPurposeDescription) ?? 0; - callPurpose.CallPurposeDescription = callPurposeDescription; - noa_nod.CallPurposes.Add(callPurpose); + string callPurposeDescriptionKey = string.Format("NOA_NOD.CallPuposeDescription_{0}", i); + string callPurposeCodeKey = string.Format("NOA_NOD.CallPurposeCode_{0}", i); + string callPurposeDescription = reader.ReadText(callPurposeDescriptionKey); + string callPurposeCode = reader.ReadText(callPurposeCodeKey); + + if (!callPurposeCode.IsNullOrEmpty()) + { + CallPurpose callPurpose = new CallPurpose(); + callPurpose.NOA_NOD = noa_nod; + callPurpose.CallPurposeCode = ((int?) reader.ReadNumber(callPurposeCodeKey)) ?? 0; + callPurpose.CallPurposeDescription = callPurposeDescription; + noa_nod.CallPurposes.Add(callPurpose); + } + } + } string lastPort = reader.ReadText("NOA_NOD.LastPort").Trim(); - List lastPorts = LocodeDB.AllLocodesForCityName(lastPort); - if (lastPorts.Count == 1) - noa_nod.LastPort = lastPorts[0]; + + if (LocodeDB.PortNameFromLocode(lastPort) != null) + { + noa_nod.LastPort = lastPort; + } else - _log.WarnFormat("{0} results in {1} possible LOCODES", lastPort, lastPorts.Count); + { + List lastPorts = LocodeDB.AllLocodesForCityName(lastPort); + if (lastPorts.Count == 1) + noa_nod.LastPort = lastPorts[0]; + else + _log.WarnFormat("{0} results in {1} possible LOCODES", lastPort, lastPorts.Count); + } string nextPort = reader.ReadText("NOA_NOD.NextPort").Trim(); - List nextPorts = LocodeDB.AllLocodesForCityName(nextPort); - if (nextPorts.Count == 1) - noa_nod.NextPort = nextPorts[0]; + + if (LocodeDB.PortNameFromLocode(nextPort) != null) + { + noa_nod.NextPort = nextPort; + } else - _log.WarnFormat("{0} results in {1} possible LOCODES", nextPort, nextPorts.Count); + { + List nextPorts = LocodeDB.AllLocodesForCityName(nextPort); + if (nextPorts.Count == 1) + noa_nod.NextPort = nextPorts[0]; + else + _log.WarnFormat("{0} results in {1} possible LOCODES", nextPort, nextPorts.Count); + } noa_nod.ETDFromPortOfCall = reader.ReadDateTime("NOA_NOD.ETDDateFromPortOfCall", "NOA_NOD.ETDTimeFromPortOfCall"); noa_nod.ETDFromLastPort = reader.ReadDateTime("NOA_NOD.ETDDateFromLastPort", "NOA_NOD.ETDTimeFromLastPort"); @@ -409,9 +434,13 @@ namespace bsmd.ExcelReadService WAS was = wasMessage.Elements[0] as WAS; Util.ScanMessage(was, reader); was.WasteDisposalDelivery = reader.ReadDelivery("WAS.WasteDisposalDelivery"); - List deliveryLocodes = LocodeDB.AllLocodesForCityName(reader.ReadText("WAS.LastWasteDisposalPort")); - if (deliveryLocodes.Count == 1) - was.LastWasteDisposalPort = deliveryLocodes[0]; + if ((was.LastWasteDisposalPort != null) && (was.LastWasteDisposalPort.Length > 5)) + { + string lastWasteDisposalPort = reader.ReadText("WAS.LastWasteDisposalPort"); + List deliveryLocodes = LocodeDB.AllLocodesForCityName(lastWasteDisposalPort); + if (deliveryLocodes.Count == 1) + was.LastWasteDisposalPort = deliveryLocodes[0]; + } // Waste 1 - 9 for (int i = 1; i <= was.NumberOfExcelRows; i++) @@ -478,7 +507,7 @@ namespace bsmd.ExcelReadService poc30d.Identifier = (i + 1).ToString(); poc30d.MDH = mdh; mdh.PortOfCallLast30Days.Add(poc30d); - } + } poc30d.PortOfCallLast30DaysDateOfDeparture = reader.ReadDate(depDate); poc30d.PortOfCallLast30DaysLocode = reader.ReadTextNoWhitespace(locode); @@ -534,6 +563,15 @@ namespace bsmd.ExcelReadService SEC sec = secMessage.Elements[0] as SEC; Util.ScanMessage(sec, reader); + string isscType = reader.ReadText("SEC.ISSCType"); + if(isscType != null) + { + if (isscType.Equals("full", StringComparison.OrdinalIgnoreCase)) + sec.ISSCType = 0; + if (isscType.Equals("interim", StringComparison.OrdinalIgnoreCase)) + sec.ISSCType = 1; + } + // Last10PortFacilitesCalled for (int i = 1; i <= 10; i++) { @@ -544,6 +582,7 @@ namespace bsmd.ExcelReadService string portDateOfDeparture = string.Format("SEC.PortFacilityDateOfDeparture_{0}", i); string portShipSecLevel = string.Format("SEC.PortFacilityShipSecurityLevel_{0}", i); 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) @@ -561,6 +600,7 @@ namespace bsmd.ExcelReadService l10fc.PortFacilityDateOfDeparture = reader.ReadDate(portDateOfDeparture); l10fc.PortFacilityShipSecurityLevel = (byte) reader.ReadNumber(portShipSecLevel); l10fc.PortFacilityGISISCode = reader.ReadTextNoWhitespace(portGISISCode); + l10fc.PortFacilitySecurityMattersToReport = reader.ReadText(portSecMatters); } @@ -574,6 +614,7 @@ namespace bsmd.ExcelReadService string s2sFromDate = string.Format("SEC.ShipToShipActivityDateFrom_{0}", i); string s2sToDate = string.Format("SEC.ShipToShipActivityDateTo_{0}", i); string s2sActivityString = string.Format("SEC.ShipToShipActivityType_{0}", i); + ShipToShipActivitiesDuringLastTenPortFacilitiesCalled s2sActivity = sec.GetShipToShipWithIdentifier(i.ToString()) as ShipToShipActivitiesDuringLastTenPortFacilitiesCalled; if (s2sActivity == null) @@ -816,6 +857,7 @@ namespace bsmd.ExcelReadService crew.CrewMemberFirstName = reader.ReadText(crewFirstName); crew.CrewMemberGender = reader.ReadGender(crewGender); crew.CrewMemberDuty = reader.ReadText(crewDuty); + crew.CrewMemberNationality = reader.ReadText(crewNationality); crew.CrewMemberPlaceOfBirth = reader.ReadText(crewPlaceOfBirth); crew.CrewMemberDateOfBirth = reader.ReadDate(crewDateOfBirth); crew.CrewMemberIdentityDocumentType = reader.ReadIdentityDocumentType(crewIdentDocType); @@ -912,8 +954,16 @@ namespace bsmd.ExcelReadService string sheetValue = reader.ReadText(lookupNameAttribute.LookupName); if (sheetValue != null) property.SetValue(dbEntity, sheetValue); - } else { - + } + else if(property.PropertyType == typeof(int?)) + { + double? sheetValue = reader.ReadNumber(lookupNameAttribute.LookupName); + if (sheetValue.HasValue) + property.SetValue(dbEntity, (int)sheetValue.Value); + } + else + { + _log.DebugFormat("unhandled property type: {0}", property.PropertyType); } } @@ -958,7 +1008,7 @@ namespace bsmd.ExcelReadService if (poc != null) { // Prüfen auf Transit - if (poc.ToUpper().Contains("CANAL")) + if (poc.ToUpper().Contains("CANAL") || poc.ToUpper().Equals("ZZNOK")) { poc = "ZZNOK"; isTransit = true; @@ -980,7 +1030,7 @@ namespace bsmd.ExcelReadService else { // somehow lookup LOCODE from the port's name! - poc = LocodeDB.LocodeGERFromCity(aGermanPortName); + poc = LocodeDB.LocodeGERFromCity(aGermanPortName); } } } @@ -1031,7 +1081,9 @@ namespace bsmd.ExcelReadService result.IsTransit = isTransit; result.ReportStatus = MessageCore.ReportStatusEnum.COMPLETE; result.BSMDStatusInternal = MessageCore.BSMDStatus.PREPARE; - result.Portname = poc; + result.PoC = poc; + result.Portname = LocodeDB.PortNameFromLocode(poc); + result.ETA = eta; if (result.IMO.Length > 7) { @@ -1041,10 +1093,10 @@ namespace bsmd.ExcelReadService if(visitTransitId != null) { - if (bsmd.database.Util.IsVisitId(visitTransitId)) - result.VisitId = visitTransitId; - else + if (bsmd.database.Util.IsTransitId(visitTransitId)) result.TransitId = visitTransitId; + else + result.VisitId = visitTransitId; } DBManager.Instance.Save(result); diff --git a/nsw/Source/bsmd.database/INFO.cs b/nsw/Source/bsmd.database/INFO.cs index 1c4c6c5e..e48080f2 100644 --- a/nsw/Source/bsmd.database/INFO.cs +++ b/nsw/Source/bsmd.database/INFO.cs @@ -34,10 +34,12 @@ namespace bsmd.database public string RequestedPositionInPortOfCall { get; set; } [ShowReport] + [LookupName("INFO.SpecialRequirementsOfShipAtBerth")] [MaxLength(255)] public string SpecialRequirementsOfShipAtBerth { get; set; } [ShowReport] + [LookupName("INFO.ConstructionCharacteristicsOfShip")] [MaxLength(100)] public string ConstructionCharacteristicsOfShip { get; set; } @@ -47,6 +49,7 @@ namespace bsmd.database public byte? FumigatedBulkCargo { get; set; } [ShowReport] + [LookupName("INFO.DeadWeightSummer_TNE")] public double? DeplacementSummerDraught_TNE { get; set; } [ShowReport] diff --git a/nsw/Source/bsmd.database/MDH.cs b/nsw/Source/bsmd.database/MDH.cs index e53650ff..0b45dfd4 100644 --- a/nsw/Source/bsmd.database/MDH.cs +++ b/nsw/Source/bsmd.database/MDH.cs @@ -295,7 +295,7 @@ namespace bsmd.database public int NumberOfExcelRows { - get { return 15; } + get { return 37; } } public void SaveElements() diff --git a/nsw/Source/bsmd.database/NOA_NOD.cs b/nsw/Source/bsmd.database/NOA_NOD.cs index 1165eaff..4ba1060d 100644 --- a/nsw/Source/bsmd.database/NOA_NOD.cs +++ b/nsw/Source/bsmd.database/NOA_NOD.cs @@ -152,7 +152,7 @@ namespace bsmd.database public int NumberOfExcelRows { - get { return 1; } + get { return 3; } } public void SaveElements() @@ -236,6 +236,8 @@ namespace bsmd.database /// /// Hilfsmethode (Heuristik) wenn nur der Text verfügbar ist (Excel) /// Quelle: http://www.unece.org/trade/untdid/d01a/tred/tred8025.htm + /// Nach Nachricht von Christin doch nicht erforderlich, da der Code führend ist (wird vom Melder + /// eingetragen) /// /// Code nach NSW Spec, null on failure public int? getCallPurposeCodeFromDescription(string description) diff --git a/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs b/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs index a70f98fd..81926017 100644 --- a/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs +++ b/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs @@ -2,6 +2,6 @@ [assembly: AssemblyCompany("Informatikbüro Daniel Schick")] [assembly: AssemblyProduct("BSMD NSW interface")] -[assembly: AssemblyInformationalVersion("3.2.2")] +[assembly: AssemblyInformationalVersion("3.2.4")] [assembly: AssemblyCopyright("Copyright © 2014-2016 Informatikbüro Daniel Schick. All rights reserved.")] [assembly: AssemblyTrademark("")] \ No newline at end of file diff --git a/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs b/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs index c1ad8c62..ea4c06b2 100644 --- a/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs +++ b/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs @@ -1,4 +1,4 @@ using System.Reflection; -[assembly: AssemblyVersion("3.2.2.*")] +[assembly: AssemblyVersion("3.2.4.*")] diff --git a/nsw/Source/bsmd.database/SEC.cs b/nsw/Source/bsmd.database/SEC.cs index ede5a286..1f968393 100644 --- a/nsw/Source/bsmd.database/SEC.cs +++ b/nsw/Source/bsmd.database/SEC.cs @@ -44,6 +44,7 @@ namespace bsmd.database public string CSOLastName { get; set; } [ShowReport] + [LookupName("SEC.CSOFirstName")] [MaxLength(100)] public string CSOFirstName { get; set; } @@ -54,10 +55,12 @@ namespace bsmd.database public string CSOPhone { get; set; } [ShowReport] + [LookupName("SEC.CSOFax")] [MaxLength(100)] public string CSOFax { get; set; } [ShowReport] + [LookupName("SEC.CSOEMail")] [MaxLength(100)] public string CSOEMail { get; set; } @@ -71,11 +74,10 @@ namespace bsmd.database [MaxLength(255)] public string ReasonsForNoValidISSC { get; set; } - [Validation2(ValidationCode.NOT_NULL)] - [LookupName("SEC.ISSCType")] + [Validation2(ValidationCode.NOT_NULL)] public byte? ISSCType { get; set; } - [ShowReport] + [ShowReport] [ReportDisplayName("ISSC type")] public string ISSCTypeDisplay { get { return Util.GetISSCTypeDisplay(this.ISSCType); } } diff --git a/nsw/Source/bsmd.database/STAT.cs b/nsw/Source/bsmd.database/STAT.cs index 294d34d5..292f517e 100644 --- a/nsw/Source/bsmd.database/STAT.cs +++ b/nsw/Source/bsmd.database/STAT.cs @@ -70,6 +70,7 @@ namespace bsmd.database public string PortOfRegistry { get; set; } [ShowReport] + [LookupName("STAT.InmarsatCallNumber")] [MaxLength(100)] public string InmarsatCallNumber { get; set; } @@ -112,18 +113,22 @@ namespace bsmd.database public string ISMCompanyId { get; set; } [ShowReport] + [LookupName("STAT.ISMCompanyStreetAndNumber")] [MaxLength(100)] public string ISMCompanyStreetAndNumber { get; set; } [ShowReport] + [LookupName("STAT.ISMCompanyPostalCode")] [MaxLength(24)] public string ISMCompanyPostalCode { get; set; } [ShowReport] + [LookupName("STAT.ISMCompanyCity")] [MaxLength(100)] public string ISMCompanyCity { get; set; } [ShowReport] + [LookupName("STAT.ISMCompanyCountry")] [MaxLength(100)] public string ISMCompanyCountry { get; set; } diff --git a/nsw/Source/bsmd.database/WAS.cs b/nsw/Source/bsmd.database/WAS.cs index 8754a345..6142b500 100644 --- a/nsw/Source/bsmd.database/WAS.cs +++ b/nsw/Source/bsmd.database/WAS.cs @@ -33,6 +33,7 @@ namespace bsmd.database [ShowReport] [Validation2(ValidationCode.NOT_NULL)] + [LookupName("WAS.LastWasteDisposalPort")] [MaxLength(5)] public string LastWasteDisposalPort { get; set; } diff --git a/nsw/Source/bsmd.database/Waste.cs b/nsw/Source/bsmd.database/Waste.cs index 7c88dcd3..bb1d1878 100644 --- a/nsw/Source/bsmd.database/Waste.cs +++ b/nsw/Source/bsmd.database/Waste.cs @@ -66,7 +66,7 @@ namespace bsmd.database [ShowReport] public double? WasteAmountRetained_MTQ { get; set; } - [ShowReport] + [ShowReport] [MaxLength(5)] public string WasteDisposalPort { get; set; }