diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index ea1210b8..b93f4b40 100644 Binary files a/Stundensheet.xlsx and b/Stundensheet.xlsx differ diff --git a/nsw/Source/bsmd.dakosy/Request.cs b/nsw/Source/bsmd.dakosy/Request.cs index a32edcac..c79328cc 100644 --- a/nsw/Source/bsmd.dakosy/Request.cs +++ b/nsw/Source/bsmd.dakosy/Request.cs @@ -128,17 +128,20 @@ namespace bsmd.dakosy vList.Visit[0].AGNT = new AGNT(); vList.Visit[0].AGNT.CompanyName = agnt.AgentCompanyName; - int lastBlank = agnt.AgentStreetAndNumber.LastIndexOf(' '); - string number = (lastBlank > 0) ? agnt.AgentStreetAndNumber.Substring(lastBlank) : ""; - if ((lastBlank > 0) && (number.Length > 0) && (Char.IsNumber(number[0]))) + if (agnt.AgentStreetAndNumber != null) { - vList.Visit[0].AGNT.StreetName = agnt.AgentStreetAndNumber.Substring(0, lastBlank); - vList.Visit[0].AGNT.StreetNumber = agnt.AgentStreetAndNumber.Substring(lastBlank); - } - else - { - vList.Visit[0].AGNT.StreetName = agnt.AgentStreetAndNumber; - vList.Visit[0].AGNT.StreetNumber = ""; + int lastBlank = agnt.AgentStreetAndNumber.LastIndexOf(' '); + string number = (lastBlank > 0) ? agnt.AgentStreetAndNumber.Substring(lastBlank) : ""; + if ((lastBlank > 0) && (number.Length > 0) && (Char.IsNumber(number[0]))) + { + vList.Visit[0].AGNT.StreetName = agnt.AgentStreetAndNumber.Substring(0, lastBlank); + vList.Visit[0].AGNT.StreetNumber = agnt.AgentStreetAndNumber.Substring(lastBlank); + } + else + { + vList.Visit[0].AGNT.StreetName = agnt.AgentStreetAndNumber; + vList.Visit[0].AGNT.StreetNumber = ""; + } } vList.Visit[0].AGNT.PostalCode = agnt.AgentPostalCode; @@ -282,11 +285,11 @@ namespace bsmd.dakosy vList.Visit[0].CREW[i].FirstName = crew.CrewMemberFirstName; vList.Visit[0].CREW[i].GenderSpecified = crew.CrewMemberGender.HasValue; byte gender = crew.CrewMemberGender ?? 0; - vList.Visit[0].CREW[i].Gender = (GenderType)gender; + vList.Visit[0].CREW[i].Gender = (gender == 1) ? GenderType.FEMALE : GenderType.MALE; vList.Visit[0].CREW[i].IdentityDocumentId = crew.CrewMemberIdentityDocumentId; vList.Visit[0].CREW[i].IdentityDocumentTypeSpecified = crew.CrewMemberIdentityDocumentType.HasValue; byte dType = crew.CrewMemberIdentityDocumentType ?? 0; - vList.Visit[0].CREW[i].IdentityDocumentType = (IdentityDocumentType)dType; + vList.Visit[0].CREW[i].IdentityDocumentType = CrewDocumentFromNSWEnumeration(dType); vList.Visit[0].CREW[i].LastName = crew.CrewMemberLastName; vList.Visit[0].CREW[i].Nationality = crew.CrewMemberNationality; vList.Visit[0].CREW[i].PlaceOfBirth = crew.CrewMemberPlaceOfBirth; @@ -433,11 +436,11 @@ namespace bsmd.dakosy vList.Visit[0].PAS[i].FirstName = pas.PassengerFirstName; vList.Visit[0].PAS[i].GenderSpecified = pas.PassengerGender.HasValue; if (pas.PassengerGender.HasValue) - vList.Visit[0].PAS[i].Gender = (GenderType)pas.PassengerGender.Value; + vList.Visit[0].PAS[i].Gender = (pas.PassengerGender.Value == 1) ? GenderType.FEMALE : GenderType.MALE; vList.Visit[0].PAS[i].IdentityDocumentId = pas.PassengerIdentityDocumentId; vList.Visit[0].PAS[i].IdentityDocumentTypeSpecified = pas.PassengerIdentityDocumentType.HasValue; if (pas.PassengerIdentityDocumentType.HasValue) - vList.Visit[0].PAS[i].IdentityDocumentType = (IdentityDocumentType)pas.PassengerIdentityDocumentType.Value; + vList.Visit[0].PAS[i].IdentityDocumentType = CrewDocumentFromNSWEnumeration(pas.PassengerIdentityDocumentType.Value); vList.Visit[0].PAS[i].InTransitSpecified = pas.PassengerInTransit.HasValue; if (pas.PassengerInTransit.HasValue) vList.Visit[0].PAS[i].InTransit = pas.PassengerInTransit.Value; @@ -536,8 +539,7 @@ namespace bsmd.dakosy vList.Visit[0].SEC.PortFacilityOfArrival = sec.PortFacilityOfArrival; vList.Visit[0].SEC.GeneralDescriptionOfCargoSpecified = sec.GeneralDescriptionOfCargo.HasValue; byte gdc = sec.GeneralDescriptionOfCargo ?? 0; - vList.Visit[0].SEC.GeneralDescriptionOfCargo = (GeneralCargoType)gdc; - if (sec.LastTenPortFacilitesCalled.Count > 0) + vList.Visit[0].SEC.GeneralDescriptionOfCargo = CargoTypeFromNSWEnumeration(gdc); if (sec.LastTenPortFacilitesCalled.Count > 0) { vList.Visit[0].SEC.LastTenPortFacilitiesCalled = new LastTenPortFacilitiesCalled[sec.LastTenPortFacilitesCalled.Count]; for (int i = 0; i < sec.LastTenPortFacilitesCalled.Count; i++) @@ -950,5 +952,34 @@ namespace bsmd.dakosy #endregion + static IdentityDocumentType CrewDocumentFromNSWEnumeration(byte nswValue) + { + switch(nswValue) + { + case 0: return IdentityDocumentType.IDENTITY_CARD; + case 1: return IdentityDocumentType.PASSPORT; + case 2: return IdentityDocumentType.MUSTER_BOOK; + case 3: return IdentityDocumentType.PICTURE_ID; + case 4: return IdentityDocumentType.RESIDENTAL_PERMIT; + default: + return IdentityDocumentType.OTHER_LEGAL_IDENTITY_DOCUMENT; + } + } + + static GeneralCargoType CargoTypeFromNSWEnumeration(byte nswValue) + { + switch(nswValue) + { + case 0: return GeneralCargoType.CONTAINER; + case 1: return GeneralCargoType.VEHICLES; + case 2: return GeneralCargoType.CONVENTIONAL_GENERAL_CARGO; + case 3: return GeneralCargoType.DRY_CARGO_IN_BULK; + case 4: return GeneralCargoType.LIQUID_CARGO_IN_BULK; + case 5: + default: + return GeneralCargoType.EMPTY; + } + } + } } diff --git a/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs b/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs index 26fa7ac4..9c96b24d 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.0.12")] +[assembly: AssemblyInformationalVersion("3.0.14")] [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 237a801a..05350d34 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.0.12.*")] +[assembly: AssemblyVersion("3.0.14.*")] diff --git a/nsw/Source/bsmd.hisnord/Request.cs b/nsw/Source/bsmd.hisnord/Request.cs index e5e42415..e30860f3 100644 --- a/nsw/Source/bsmd.hisnord/Request.cs +++ b/nsw/Source/bsmd.hisnord/Request.cs @@ -102,6 +102,28 @@ namespace bsmd.hisnord if (messages[0].MessageCore.IsTransit) visitTransitHeader = message; break; + #region AGNT + + case Message.NotificationClass.AGNT: + if (message.Elements.Count > 0) + { + AGNT agnt = message.Elements[0] as AGNT; + _nsw.conveyance.AGNT = new global::agnt(); + _nsw.conveyance.AGNT.AgentCity = agnt.AgentCity; + _nsw.conveyance.AGNT.AgentCompanyName = agnt.AgentCompanyName; + _nsw.conveyance.AGNT.AgentCountry = agnt.AgentCountry; + _nsw.conveyance.AGNT.AgentEMail = agnt.AgentEMail; + _nsw.conveyance.AGNT.AgentFax = agnt.AgentFax; + _nsw.conveyance.AGNT.AgentFirstName = agnt.AgentFirstName; + _nsw.conveyance.AGNT.AgentLastName = agnt.AgentLastName; + _nsw.conveyance.AGNT.AgentPhone = agnt.AgentPhone; + _nsw.conveyance.AGNT.AgentPostalCode = agnt.AgentPostalCode; + _nsw.conveyance.AGNT.AgentStreetAndNumber = agnt.AgentStreetAndNumber; + } + break; + + #endregion + #region ATA/ATD case Message.NotificationClass.ATA: if (message.MessageCore.Incoming) @@ -596,6 +618,7 @@ namespace bsmd.hisnord _nsw.conveyance.Info.FumigatedBulkCargo = (info.FumigatedBulkCargo.Value == 1) ? yorntype.Y : yorntype.N; else _nsw.conveyance.Info.FumigatedBulkCargo = yorntype.N; + _nsw.conveyance.Info.PortArea = info.PortArea; _nsw.conveyance.Info.RequestedPositionInPortOfCall = info.RequestedPositionInPortOfCall; if (info.ShippingArea.HasValue) _nsw.conveyance.Info.ShippingArea = (shippingareatype)info.ShippingArea.Value; @@ -641,8 +664,8 @@ namespace bsmd.hisnord if (mdh.AwareOfFurtherInfections.HasValue) _mdh.AwareOfConditionsForFurtherInfections = mdh.AwareOfFurtherInfections.Value ? yorntype.Y : yorntype.N; - if (mdh.InfectedAreas.Count > 0) - { + // if (mdh.InfectedAreas.Count > 0) + // { _mdh.InfectedAreas = new infectedarea[mdh.InfectedAreas.Count]; for (int i = 0; i < mdh.InfectedAreas.Count; i++) { @@ -651,10 +674,12 @@ namespace bsmd.hisnord _mdh.InfectedAreas[i].InfectedAreaDate = mdh.InfectedAreas[i].InfectedAreaDate.Value; _mdh.InfectedAreas[i].InfectedAreaPort = mdh.InfectedAreas[i].InfectedAreaPort; } - } + // } if (mdh.InfectedAreaVisited.HasValue) - _mdh.InfectedAreaVisited = mdh.InfectedAreaVisited.Value ? yorntype.Y : yorntype.N; + _mdh.InfectedAreaVisited = mdh.InfectedAreaVisited ?? false ? yorntype.Y : yorntype.N; + + if (mdh.MedicalConsulted.HasValue) _mdh.MedicalConsulted = mdh.MedicalConsulted.Value ? yorntype.Y : yorntype.N; if (mdh.NonAccidentalDeathsDuringVoyage.HasValue) @@ -665,8 +690,8 @@ namespace bsmd.hisnord _mdh.NumberOfIllPersons = mdh.NumberOfIllPersons.Value.ToString(); if (mdh.NumberOfIllPersonsHigherThanExpected.HasValue) _mdh.NumberOfIllPersonsHigherThanExpected = mdh.NumberOfIllPersonsHigherThanExpected.Value ? yorntype.Y : yorntype.N; - if (mdh.PortOfCallLast30Days.Count > 0) - { + // if (mdh.PortOfCallLast30Days.Count > 0) + // { _mdh.PortsOfCallLast30Days = new portofcallmdh[mdh.PortOfCallLast30Days.Count]; for (int i = 0; i < mdh.PortOfCallLast30Days.Count; i++) { @@ -686,14 +711,14 @@ namespace bsmd.hisnord _mdh.PortsOfCallLast30Days[i].PortOfCallLast30DaysDateOfDeparture = mdh.PortOfCallLast30Days[i].PortOfCallLast30DaysDateOfDeparture.Value; _mdh.PortsOfCallLast30Days[i].PortOfCallLast30DaysLocode = mdh.PortOfCallLast30Days[i].PortOfCallLast30DaysLocode; } - } + // } if (mdh.SanitaryControlReinspectionRequired.HasValue) _mdh.SanitaryControlReinspectionRequired = mdh.SanitaryControlReinspectionRequired.Value ? yorntype.Y : yorntype.N; if (mdh.SanitaryMeasuresApplied.HasValue) _mdh.SanitaryMeasuresApplied = mdh.SanitaryMeasuresApplied.Value ? yorntype.Y : yorntype.N; - if (mdh.SanitaryMeasuresDetails.Count > 0) - { + // if (mdh.SanitaryMeasuresDetails.Count > 0) + // { _mdh.SanitaryMeasuresDetails = new sanitarydetail[mdh.SanitaryMeasuresDetails.Count]; for (int i = 0; i < mdh.SanitaryMeasuresDetails.Count; i++) { @@ -703,21 +728,21 @@ namespace bsmd.hisnord _mdh.SanitaryMeasuresDetails[i].SanitaryMeasuresLocation = mdh.SanitaryMeasuresDetails[i].SanitaryMeasuresLocation; _mdh.SanitaryMeasuresDetails[i].SanitaryMeasuresType = mdh.SanitaryMeasuresDetails[i].SanitaryMeasuresType; } - } + // } if (mdh.SickAnimalOrPetOnBoard.HasValue) _mdh.SickAnimalOrPetOnBoard = mdh.SickAnimalOrPetOnBoard.Value ? yorntype.Y : yorntype.N; if (mdh.SickPersonsOnBoard.HasValue) _mdh.SickPersonOnBoard = mdh.SickPersonsOnBoard.Value ? yorntype.Y : yorntype.N; _mdh.StowawaysDetected = (mdh.StowawaysDetected ?? false) ? yorntype.Y : yorntype.N; - if ((_mdh.StowawaysDetected == yorntype.Y) && (mdh.StowawaysJoiningLocations.Count > 0)) - { + // if ((_mdh.StowawaysDetected == yorntype.Y) && (mdh.StowawaysJoiningLocations.Count > 0)) + // { _mdh.StowawayJoiningLocations = new string[mdh.StowawaysJoiningLocations.Count]; for (int i = 0; i < mdh.StowawaysJoiningLocations.Count; i++) { _mdh.StowawayJoiningLocations[i] = mdh.StowawaysJoiningLocations[i].StowawayJoiningLocation; } - } + // } if (mdh.SuspisionInfectiousNature.HasValue) _mdh.SuspisionInfectiousNature = mdh.SuspisionInfectiousNature.Value ? yorntype.Y : yorntype.N; @@ -1072,6 +1097,7 @@ namespace bsmd.hisnord _nsw.conveyance.vessel.MMSINumber = stat.MMSINumber; _nsw.conveyance.vessel.PortOfRegistry = stat.PortOfRegistry; _nsw.conveyance.vessel.ShipName = stat.ShipName; + _nsw.conveyance.vessel.TransportMode = stat.TransportMode; _nsw.conveyance.vessel.ShipType = stat.ShipType; break; #endregion diff --git a/nsw/Source/bsmd.hisnord/readme.txt b/nsw/Source/bsmd.hisnord/readme.txt index e16f036b..6b2bd0a8 100644 --- a/nsw/Source/bsmd.hisnord/readme.txt +++ b/nsw/Source/bsmd.hisnord/readme.txt @@ -100,12 +100,12 @@ o Falls was beim Import in unsere Datenbank bzw. beim Senden an das NSW schief · Grundsätzlich orientiert sich das an Ihnen überreichte XML-Schema an diesen Vorgaben mit folgenden Abweichungen Meldetypen - + Abweichungen NOA_NOD - In IMPORT, EXPORT, TRANSIT vorkommend, + In IMPORT, EXPORT, TRANSIT vorkommend, wobei zusätzlich Hafengebiet oder GISIS-Code gemeldet werden kann, ansonsten wird das Standard-Hafengebiet genommen, z.B. ÜSH für Überseehafen Rostock ATA/ATD