Version 3.2.4: Korrekturen für Einlesen Excel (viele), Testing mit Christin
This commit is contained in:
parent
04068510bb
commit
51fe38fda3
Binary file not shown.
@ -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
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -96,9 +96,28 @@ namespace bsmd.ExcelReadService
|
||||
}
|
||||
reader.Close();
|
||||
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()
|
||||
{
|
||||
_con.Close();
|
||||
|
||||
@ -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<string> 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<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();
|
||||
List<string> 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<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.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<string> 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<string> 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);
|
||||
|
||||
@ -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]
|
||||
|
||||
@ -295,7 +295,7 @@ namespace bsmd.database
|
||||
|
||||
public int NumberOfExcelRows
|
||||
{
|
||||
get { return 15; }
|
||||
get { return 37; }
|
||||
}
|
||||
|
||||
public void SaveElements()
|
||||
|
||||
@ -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
|
||||
/// <summary>
|
||||
/// 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)
|
||||
/// </summary>
|
||||
/// <returns>Code nach NSW Spec, null on failure</returns>
|
||||
public int? getCallPurposeCodeFromDescription(string description)
|
||||
|
||||
@ -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("")]
|
||||
@ -1,4 +1,4 @@
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: AssemblyVersion("3.2.2.*")]
|
||||
[assembly: AssemblyVersion("3.2.4.*")]
|
||||
|
||||
|
||||
@ -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); } }
|
||||
|
||||
|
||||
@ -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; }
|
||||
|
||||
|
||||
@ -33,6 +33,7 @@ namespace bsmd.database
|
||||
|
||||
[ShowReport]
|
||||
[Validation2(ValidationCode.NOT_NULL)]
|
||||
[LookupName("WAS.LastWasteDisposalPort")]
|
||||
[MaxLength(5)]
|
||||
public string LastWasteDisposalPort { get; set; }
|
||||
|
||||
|
||||
@ -66,7 +66,7 @@ namespace bsmd.database
|
||||
[ShowReport]
|
||||
public double? WasteAmountRetained_MTQ { get; set; }
|
||||
|
||||
[ShowReport]
|
||||
[ShowReport]
|
||||
[MaxLength(5)]
|
||||
public string WasteDisposalPort { get; set; }
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user