Version 3.2.4: Korrekturen für Einlesen Excel (viele), Testing mit Christin

This commit is contained in:
Daniel Schick 2016-09-22 18:17:07 +00:00
parent 04068510bb
commit 51fe38fda3
14 changed files with 122 additions and 38 deletions

Binary file not shown.

View File

@ -113,7 +113,7 @@ namespace bsmd.ExcelReadService
if (!isValidSender) 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); _log.Warn(receiptText);
} }
else else

View File

@ -463,7 +463,7 @@ namespace bsmd.ExcelReadService
this.HighlightLookup(lookup, ReadState.OK); 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 true;
return false; return false;
} }

View File

@ -96,9 +96,28 @@ namespace bsmd.ExcelReadService
} }
reader.Close(); reader.Close();
return result; return result;
} }
/// <summary>
/// Get Portname from LOCODE
/// </summary>
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() public static void CloseDB()
{ {
_con.Close(); _con.Close();

View File

@ -344,30 +344,55 @@ namespace bsmd.ExcelReadService
else { else {
noa_nod.ETAToPortOfCall = messageCore.ETA; noa_nod.ETAToPortOfCall = messageCore.ETA;
string callPurposeDescription = reader.ReadText("NOA_NOD.CallPuposeDescription"); for (int i = 1; i <= noa_nod.NumberOfExcelRows; i++)
if (!callPurposeDescription.IsNullOrEmpty())
{ {
CallPurpose callPurpose = new CallPurpose(); string callPurposeDescriptionKey = string.Format("NOA_NOD.CallPuposeDescription_{0}", i);
callPurpose.NOA_NOD = noa_nod; string callPurposeCodeKey = string.Format("NOA_NOD.CallPurposeCode_{0}", i);
callPurpose.CallPurposeCode = noa_nod.getCallPurposeCodeFromDescription(callPurposeDescription) ?? 0; string callPurposeDescription = reader.ReadText(callPurposeDescriptionKey);
callPurpose.CallPurposeDescription = callPurposeDescription; string callPurposeCode = reader.ReadText(callPurposeCodeKey);
noa_nod.CallPurposes.Add(callPurpose);
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(); string lastPort = reader.ReadText("NOA_NOD.LastPort").Trim();
List<string> lastPorts = LocodeDB.AllLocodesForCityName(lastPort);
if (lastPorts.Count == 1) if (LocodeDB.PortNameFromLocode(lastPort) != null)
noa_nod.LastPort = lastPorts[0]; {
noa_nod.LastPort = lastPort;
}
else else
_log.WarnFormat("{0} results in {1} possible LOCODES", lastPort, lastPorts.Count); {
List<string> 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(); string nextPort = reader.ReadText("NOA_NOD.NextPort").Trim();
List<string> nextPorts = LocodeDB.AllLocodesForCityName(nextPort);
if (nextPorts.Count == 1) if (LocodeDB.PortNameFromLocode(nextPort) != null)
noa_nod.NextPort = nextPorts[0]; {
noa_nod.NextPort = nextPort;
}
else else
_log.WarnFormat("{0} results in {1} possible LOCODES", nextPort, nextPorts.Count); {
List<string> 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.ETDFromPortOfCall = reader.ReadDateTime("NOA_NOD.ETDDateFromPortOfCall", "NOA_NOD.ETDTimeFromPortOfCall");
noa_nod.ETDFromLastPort = reader.ReadDateTime("NOA_NOD.ETDDateFromLastPort", "NOA_NOD.ETDTimeFromLastPort"); 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; WAS was = wasMessage.Elements[0] as WAS;
Util.ScanMessage(was, reader); Util.ScanMessage(was, reader);
was.WasteDisposalDelivery = reader.ReadDelivery("WAS.WasteDisposalDelivery"); was.WasteDisposalDelivery = reader.ReadDelivery("WAS.WasteDisposalDelivery");
List<string> deliveryLocodes = LocodeDB.AllLocodesForCityName(reader.ReadText("WAS.LastWasteDisposalPort")); if ((was.LastWasteDisposalPort != null) && (was.LastWasteDisposalPort.Length > 5))
if (deliveryLocodes.Count == 1) {
was.LastWasteDisposalPort = deliveryLocodes[0]; string lastWasteDisposalPort = reader.ReadText("WAS.LastWasteDisposalPort");
List<string> deliveryLocodes = LocodeDB.AllLocodesForCityName(lastWasteDisposalPort);
if (deliveryLocodes.Count == 1)
was.LastWasteDisposalPort = deliveryLocodes[0];
}
// Waste 1 - 9 // Waste 1 - 9
for (int i = 1; i <= was.NumberOfExcelRows; i++) for (int i = 1; i <= was.NumberOfExcelRows; i++)
@ -478,7 +507,7 @@ namespace bsmd.ExcelReadService
poc30d.Identifier = (i + 1).ToString(); poc30d.Identifier = (i + 1).ToString();
poc30d.MDH = mdh; poc30d.MDH = mdh;
mdh.PortOfCallLast30Days.Add(poc30d); mdh.PortOfCallLast30Days.Add(poc30d);
} }
poc30d.PortOfCallLast30DaysDateOfDeparture = reader.ReadDate(depDate); poc30d.PortOfCallLast30DaysDateOfDeparture = reader.ReadDate(depDate);
poc30d.PortOfCallLast30DaysLocode = reader.ReadTextNoWhitespace(locode); poc30d.PortOfCallLast30DaysLocode = reader.ReadTextNoWhitespace(locode);
@ -534,6 +563,15 @@ namespace bsmd.ExcelReadService
SEC sec = secMessage.Elements[0] as SEC; SEC sec = secMessage.Elements[0] as SEC;
Util.ScanMessage(sec, reader); 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 // Last10PortFacilitesCalled
for (int i = 1; i <= 10; i++) for (int i = 1; i <= 10; i++)
{ {
@ -544,6 +582,7 @@ namespace bsmd.ExcelReadService
string portDateOfDeparture = string.Format("SEC.PortFacilityDateOfDeparture_{0}", i); string portDateOfDeparture = string.Format("SEC.PortFacilityDateOfDeparture_{0}", i);
string portShipSecLevel = string.Format("SEC.PortFacilityShipSecurityLevel_{0}", i); string portShipSecLevel = string.Format("SEC.PortFacilityShipSecurityLevel_{0}", i);
string portGISISCode = string.Format("SEC.PortFacilityGISISCode_{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; LastTenPortFacilitiesCalled l10fc = sec.GetPortFacilityWithIdentifier(i.ToString()) as LastTenPortFacilitiesCalled;
if (l10fc == null) if (l10fc == null)
@ -561,6 +600,7 @@ namespace bsmd.ExcelReadService
l10fc.PortFacilityDateOfDeparture = reader.ReadDate(portDateOfDeparture); l10fc.PortFacilityDateOfDeparture = reader.ReadDate(portDateOfDeparture);
l10fc.PortFacilityShipSecurityLevel = (byte) reader.ReadNumber(portShipSecLevel); l10fc.PortFacilityShipSecurityLevel = (byte) reader.ReadNumber(portShipSecLevel);
l10fc.PortFacilityGISISCode = reader.ReadTextNoWhitespace(portGISISCode); 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 s2sFromDate = string.Format("SEC.ShipToShipActivityDateFrom_{0}", i);
string s2sToDate = string.Format("SEC.ShipToShipActivityDateTo_{0}", i); string s2sToDate = string.Format("SEC.ShipToShipActivityDateTo_{0}", i);
string s2sActivityString = string.Format("SEC.ShipToShipActivityType_{0}", i); string s2sActivityString = string.Format("SEC.ShipToShipActivityType_{0}", i);
ShipToShipActivitiesDuringLastTenPortFacilitiesCalled s2sActivity = sec.GetShipToShipWithIdentifier(i.ToString()) as ShipToShipActivitiesDuringLastTenPortFacilitiesCalled; ShipToShipActivitiesDuringLastTenPortFacilitiesCalled s2sActivity = sec.GetShipToShipWithIdentifier(i.ToString()) as ShipToShipActivitiesDuringLastTenPortFacilitiesCalled;
if (s2sActivity == null) if (s2sActivity == null)
@ -816,6 +857,7 @@ namespace bsmd.ExcelReadService
crew.CrewMemberFirstName = reader.ReadText(crewFirstName); crew.CrewMemberFirstName = reader.ReadText(crewFirstName);
crew.CrewMemberGender = reader.ReadGender(crewGender); crew.CrewMemberGender = reader.ReadGender(crewGender);
crew.CrewMemberDuty = reader.ReadText(crewDuty); crew.CrewMemberDuty = reader.ReadText(crewDuty);
crew.CrewMemberNationality = reader.ReadText(crewNationality);
crew.CrewMemberPlaceOfBirth = reader.ReadText(crewPlaceOfBirth); crew.CrewMemberPlaceOfBirth = reader.ReadText(crewPlaceOfBirth);
crew.CrewMemberDateOfBirth = reader.ReadDate(crewDateOfBirth); crew.CrewMemberDateOfBirth = reader.ReadDate(crewDateOfBirth);
crew.CrewMemberIdentityDocumentType = reader.ReadIdentityDocumentType(crewIdentDocType); crew.CrewMemberIdentityDocumentType = reader.ReadIdentityDocumentType(crewIdentDocType);
@ -912,8 +954,16 @@ namespace bsmd.ExcelReadService
string sheetValue = reader.ReadText(lookupNameAttribute.LookupName); string sheetValue = reader.ReadText(lookupNameAttribute.LookupName);
if (sheetValue != null) if (sheetValue != null)
property.SetValue(dbEntity, sheetValue); 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) if (poc != null)
{ {
// Prüfen auf Transit // Prüfen auf Transit
if (poc.ToUpper().Contains("CANAL")) if (poc.ToUpper().Contains("CANAL") || poc.ToUpper().Equals("ZZNOK"))
{ {
poc = "ZZNOK"; poc = "ZZNOK";
isTransit = true; isTransit = true;
@ -980,7 +1030,7 @@ namespace bsmd.ExcelReadService
else else
{ {
// somehow lookup LOCODE from the port's name! // 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.IsTransit = isTransit;
result.ReportStatus = MessageCore.ReportStatusEnum.COMPLETE; result.ReportStatus = MessageCore.ReportStatusEnum.COMPLETE;
result.BSMDStatusInternal = MessageCore.BSMDStatus.PREPARE; result.BSMDStatusInternal = MessageCore.BSMDStatus.PREPARE;
result.Portname = poc; result.PoC = poc;
result.Portname = LocodeDB.PortNameFromLocode(poc);
result.ETA = eta; result.ETA = eta;
if (result.IMO.Length > 7) if (result.IMO.Length > 7)
{ {
@ -1041,10 +1093,10 @@ namespace bsmd.ExcelReadService
if(visitTransitId != null) if(visitTransitId != null)
{ {
if (bsmd.database.Util.IsVisitId(visitTransitId)) if (bsmd.database.Util.IsTransitId(visitTransitId))
result.VisitId = visitTransitId;
else
result.TransitId = visitTransitId; result.TransitId = visitTransitId;
else
result.VisitId = visitTransitId;
} }
DBManager.Instance.Save(result); DBManager.Instance.Save(result);

View File

@ -34,10 +34,12 @@ namespace bsmd.database
public string RequestedPositionInPortOfCall { get; set; } public string RequestedPositionInPortOfCall { get; set; }
[ShowReport] [ShowReport]
[LookupName("INFO.SpecialRequirementsOfShipAtBerth")]
[MaxLength(255)] [MaxLength(255)]
public string SpecialRequirementsOfShipAtBerth { get; set; } public string SpecialRequirementsOfShipAtBerth { get; set; }
[ShowReport] [ShowReport]
[LookupName("INFO.ConstructionCharacteristicsOfShip")]
[MaxLength(100)] [MaxLength(100)]
public string ConstructionCharacteristicsOfShip { get; set; } public string ConstructionCharacteristicsOfShip { get; set; }
@ -47,6 +49,7 @@ namespace bsmd.database
public byte? FumigatedBulkCargo { get; set; } public byte? FumigatedBulkCargo { get; set; }
[ShowReport] [ShowReport]
[LookupName("INFO.DeadWeightSummer_TNE")]
public double? DeplacementSummerDraught_TNE { get; set; } public double? DeplacementSummerDraught_TNE { get; set; }
[ShowReport] [ShowReport]

View File

@ -295,7 +295,7 @@ namespace bsmd.database
public int NumberOfExcelRows public int NumberOfExcelRows
{ {
get { return 15; } get { return 37; }
} }
public void SaveElements() public void SaveElements()

View File

@ -152,7 +152,7 @@ namespace bsmd.database
public int NumberOfExcelRows public int NumberOfExcelRows
{ {
get { return 1; } get { return 3; }
} }
public void SaveElements() public void SaveElements()
@ -236,6 +236,8 @@ namespace bsmd.database
/// <summary> /// <summary>
/// Hilfsmethode (Heuristik) wenn nur der Text verfügbar ist (Excel) /// Hilfsmethode (Heuristik) wenn nur der Text verfügbar ist (Excel)
/// Quelle: http://www.unece.org/trade/untdid/d01a/tred/tred8025.htm /// 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)
/// </summary> /// </summary>
/// <returns>Code nach NSW Spec, null on failure</returns> /// <returns>Code nach NSW Spec, null on failure</returns>
public int? getCallPurposeCodeFromDescription(string description) public int? getCallPurposeCodeFromDescription(string description)

View File

@ -2,6 +2,6 @@
[assembly: AssemblyCompany("Informatikbüro Daniel Schick")] [assembly: AssemblyCompany("Informatikbüro Daniel Schick")]
[assembly: AssemblyProduct("BSMD NSW interface")] [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: AssemblyCopyright("Copyright © 2014-2016 Informatikbüro Daniel Schick. All rights reserved.")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]

View File

@ -1,4 +1,4 @@
using System.Reflection; using System.Reflection;
[assembly: AssemblyVersion("3.2.2.*")] [assembly: AssemblyVersion("3.2.4.*")]

View File

@ -44,6 +44,7 @@ namespace bsmd.database
public string CSOLastName { get; set; } public string CSOLastName { get; set; }
[ShowReport] [ShowReport]
[LookupName("SEC.CSOFirstName")]
[MaxLength(100)] [MaxLength(100)]
public string CSOFirstName { get; set; } public string CSOFirstName { get; set; }
@ -54,10 +55,12 @@ namespace bsmd.database
public string CSOPhone { get; set; } public string CSOPhone { get; set; }
[ShowReport] [ShowReport]
[LookupName("SEC.CSOFax")]
[MaxLength(100)] [MaxLength(100)]
public string CSOFax { get; set; } public string CSOFax { get; set; }
[ShowReport] [ShowReport]
[LookupName("SEC.CSOEMail")]
[MaxLength(100)] [MaxLength(100)]
public string CSOEMail { get; set; } public string CSOEMail { get; set; }
@ -71,11 +74,10 @@ namespace bsmd.database
[MaxLength(255)] [MaxLength(255)]
public string ReasonsForNoValidISSC { get; set; } public string ReasonsForNoValidISSC { get; set; }
[Validation2(ValidationCode.NOT_NULL)] [Validation2(ValidationCode.NOT_NULL)]
[LookupName("SEC.ISSCType")]
public byte? ISSCType { get; set; } public byte? ISSCType { get; set; }
[ShowReport] [ShowReport]
[ReportDisplayName("ISSC type")] [ReportDisplayName("ISSC type")]
public string ISSCTypeDisplay { get { return Util.GetISSCTypeDisplay(this.ISSCType); } } public string ISSCTypeDisplay { get { return Util.GetISSCTypeDisplay(this.ISSCType); } }

View File

@ -70,6 +70,7 @@ namespace bsmd.database
public string PortOfRegistry { get; set; } public string PortOfRegistry { get; set; }
[ShowReport] [ShowReport]
[LookupName("STAT.InmarsatCallNumber")]
[MaxLength(100)] [MaxLength(100)]
public string InmarsatCallNumber { get; set; } public string InmarsatCallNumber { get; set; }
@ -112,18 +113,22 @@ namespace bsmd.database
public string ISMCompanyId { get; set; } public string ISMCompanyId { get; set; }
[ShowReport] [ShowReport]
[LookupName("STAT.ISMCompanyStreetAndNumber")]
[MaxLength(100)] [MaxLength(100)]
public string ISMCompanyStreetAndNumber { get; set; } public string ISMCompanyStreetAndNumber { get; set; }
[ShowReport] [ShowReport]
[LookupName("STAT.ISMCompanyPostalCode")]
[MaxLength(24)] [MaxLength(24)]
public string ISMCompanyPostalCode { get; set; } public string ISMCompanyPostalCode { get; set; }
[ShowReport] [ShowReport]
[LookupName("STAT.ISMCompanyCity")]
[MaxLength(100)] [MaxLength(100)]
public string ISMCompanyCity { get; set; } public string ISMCompanyCity { get; set; }
[ShowReport] [ShowReport]
[LookupName("STAT.ISMCompanyCountry")]
[MaxLength(100)] [MaxLength(100)]
public string ISMCompanyCountry { get; set; } public string ISMCompanyCountry { get; set; }

View File

@ -33,6 +33,7 @@ namespace bsmd.database
[ShowReport] [ShowReport]
[Validation2(ValidationCode.NOT_NULL)] [Validation2(ValidationCode.NOT_NULL)]
[LookupName("WAS.LastWasteDisposalPort")]
[MaxLength(5)] [MaxLength(5)]
public string LastWasteDisposalPort { get; set; } public string LastWasteDisposalPort { get; set; }

View File

@ -66,7 +66,7 @@ namespace bsmd.database
[ShowReport] [ShowReport]
public double? WasteAmountRetained_MTQ { get; set; } public double? WasteAmountRetained_MTQ { get; set; }
[ShowReport] [ShowReport]
[MaxLength(5)] [MaxLength(5)]
public string WasteDisposalPort { get; set; } public string WasteDisposalPort { get; set; }