From bd4b5b4d393df196cad81a81e865718c578401ac Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Wed, 18 Nov 2015 07:11:29 +0000 Subject: [PATCH] aktueller Stand 2.4.11.* --- Stundensheet.xlsx | Bin 18539 -> 18691 bytes nsw/HIS-NORD/Transmitter-Tool/client.log | 143 +++++ .../SendNSWMessageService/NSWSendService.cs | 30 +- nsw/Source/bsmd.database/Message.cs | 29 +- .../Properties/AssemblyProductInfo.cs | 2 +- .../Properties/AssemblyProjectInfo.cs | 7 +- nsw/Source/bsmd.dbh/Request.cs | 76 +-- .../bsmd.herberg.FormService/FormService.cs | 2 +- nsw/Source/bsmd.herberg.FormService/Util.cs | 34 +- nsw/Source/bsmd.hisnord/Request.cs | 585 ++++++++++-------- nsw/Source/bsmd.hisnord/transmitter.cs | 1 + 11 files changed, 582 insertions(+), 327 deletions(-) diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index fc07fd90d651ab3e60348784e0fa4e1eed180c47..270108f010dec704751814e8ba2b37aadd7642ba 100644 GIT binary patch delta 8466 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 delta 8312 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 0) @@ -174,13 +174,24 @@ namespace SendNSWMessageService bsmd.database.ATD atd = message.Elements[0] as bsmd.database.ATD; if (!atd.ATDPortOfCall.HasValue) continue; if ((atd.ATDPortOfCall.Value - DateTime.UtcNow).TotalMinutes > 60) continue; + if ((DateTime.UtcNow - atd.ATDPortOfCall.Value).TotalDays > 7) continue; + } + } + + // ATA älter als eine Woche wird auch nicht versendet + if(message.MessageNotificationClass == Message.NotificationClass.ATA) + { + if(message.Elements.Count > 0) + { + bsmd.database.ATA ata = message.Elements[0] as bsmd.database.ATA; + if (!ata.ATAPortOfCall.HasValue) continue; + if ((DateTime.UtcNow - ata.ATAPortOfCall.Value).TotalDays > 7) continue; } } - if (message.InternalStatus != Message.BSMDStatus.CONFIRMED) - //(message.InternalStatus == Message.BSMDStatus.PREPARE) || - //(message.InternalStatus == Message.BSMDStatus.TOSEND)) + if ((message.InternalStatus != Message.BSMDStatus.CONFIRMED) && + (message.InternalStatus != Message.BSMDStatus.SENT)) { if (message.HIS == Message.NSWProvider.UNDEFINED) message.HIS = core.InitialHIS; @@ -246,12 +257,15 @@ namespace SendNSWMessageService _log.ErrorFormat("SENDING message {0}: {1}", message.Id.ToString(), ex.Message); } } + if (toSendMessageList.Count > 0) { - core.BSMDStatusInternal = MessageCore.BSMDStatus.SENT; - DBManager.Instance.Save(core); + core.BSMDStatusInternal = MessageCore.BSMDStatus.SENT; + } else { + core.BSMDStatusInternal = MessageCore.BSMDStatus.PREPARE; } - + DBManager.Instance.Save(core); + } } diff --git a/nsw/Source/bsmd.database/Message.cs b/nsw/Source/bsmd.database/Message.cs index 36ed8ea1..4333a5fb 100644 --- a/nsw/Source/bsmd.database/Message.cs +++ b/nsw/Source/bsmd.database/Message.cs @@ -67,8 +67,33 @@ namespace bsmd.database /// public enum NotificationClass { - VISIT, TRANSIT, NOA_NOD, ATA, ATD, SEC, POBA, POBD, NAME, TIEFA, TIEFD, - BKRA, BKRD, STAT, LADG, INFO, SERV, PRE72H, MDH, WAS, CREW, PAS, BPOL, TOWA, TOWD, HAZA, HAZD + VISIT, // 0 + TRANSIT, // 1 + NOA_NOD, // 2 + ATA, + ATD, + SEC, // 5 + POBA, + POBD, + NAME, + TIEFA, + TIEFD, // 10 + BKRA, + BKRD, + STAT, + LADG, + INFO, // 15 + SERV, + PRE72H, + MDH, + WAS, + CREW, // 20 + PAS, + BPOL, + TOWA, + TOWD, + HAZA, // 25 + HAZD } public enum MessageStatus diff --git a/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs b/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs index fb991122..2a23f5f9 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("2.4.7")] +[assembly: AssemblyInformationalVersion("2.4.11")] [assembly: AssemblyCopyright("Copyright © 2014-2015 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 a5907571..6d1a1d12 100644 --- a/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs +++ b/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs @@ -1,9 +1,4 @@ using System.Reflection; -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("2.4.11.*")] -[assembly: AssemblyVersion("2.4.7.*")] -// wenn das nicht auskommentiert wird erhalten wir eine Warnung -// [assembly: AssemblyFileVersion("1.0.0.*")] diff --git a/nsw/Source/bsmd.dbh/Request.cs b/nsw/Source/bsmd.dbh/Request.cs index 5677ee84..fde9629c 100644 --- a/nsw/Source/bsmd.dbh/Request.cs +++ b/nsw/Source/bsmd.dbh/Request.cs @@ -64,7 +64,7 @@ namespace bsmd.dbh object item = null; string senderReference = message.Id.Value.ToString("N"); - ItemChoiceType2 itemChoiceType2 = ItemChoiceType2.Visit; // ? + ItemChoiceType2 itemChoiceType2 = ItemChoiceType2.Visit; switch (message.MessageNotificationClass) { @@ -99,6 +99,7 @@ namespace bsmd.dbh { RootTransit rootTransit = new RootTransit(); rootType = RootType.TRANSIT; + itemChoiceType2 = ItemChoiceType2.Transit; if (message.MessageCore.IMO != null) { @@ -135,46 +136,51 @@ namespace bsmd.dbh rootNoaNod.ETDFromLastPortSpecified = noa_nod.ETDFromLastPort.HasValue; rootNoaNod.LastPort = noa_nod.LastPort; - rootNoaNod.NextPort = noa_nod.NextPort; + rootNoaNod.NextPort = noa_nod.NextPort; - int numItems = 2 + noa_nod.CallPurposes.Count; + List choiceList = new List(); + List choices = new List(); - ItemsChoiceType[] choiceArray = new ItemsChoiceType[numItems]; - object[] choices = new object[numItems]; - - if (noa_nod.ETAToKielCanal.HasValue) + if (message.MessageCore.IsTransit) { - choiceArray[0] = ItemsChoiceType.ETAToKielCanal; - choices[0] = noa_nod.ETAToKielCanal.Value; - } - if (noa_nod.ETAToPortOfCall.HasValue) - { - choiceArray[0] = ItemsChoiceType.ETAToPortOfCall; - choices[0] = noa_nod.ETAToPortOfCall.Value; - } - if (noa_nod.ETDFromKielCanal.HasValue) - { - choiceArray[1] = ItemsChoiceType.ETDFromKielCanal; - choices[1] = noa_nod.ETDFromKielCanal.Value; - } - if (noa_nod.ETDFromPortOfCall.HasValue) - { - choiceArray[1] = ItemsChoiceType.ETDFromPortOfCall; - choices[1] = noa_nod.ETDFromPortOfCall.Value; - } + if (noa_nod.ETAToKielCanal.HasValue) + { + choiceList.Add(ItemsChoiceType.ETAToKielCanal); + choices.Add(noa_nod.ETAToKielCanal.Value); + } - for (int i = 0; i < noa_nod.CallPurposes.Count; i++) - { - - choiceArray[i + 2] = ItemsChoiceType.CallPurpose; - RootNOA_NODCallPurpose rnncp = new RootNOA_NODCallPurpose(); - rnncp.CallPurposeCode = noa_nod.CallPurposes[i].CallPurposeCode; - rnncp.CallPurposeDescription = noa_nod.CallPurposes[i].CallPurposeDescription; - choices[i+2] = rnncp; + if (noa_nod.ETDFromKielCanal.HasValue) + { + choiceList.Add(ItemsChoiceType.ETDFromKielCanal); + choices.Add(noa_nod.ETDFromKielCanal.Value); + } } + else + { + if (noa_nod.ETAToPortOfCall.HasValue) + { + choiceList.Add(ItemsChoiceType.ETAToPortOfCall); + choices.Add(noa_nod.ETAToPortOfCall.Value); + } - rootNoaNod.Items = choices; - rootNoaNod.ItemsElementName = choiceArray; + if (noa_nod.ETDFromPortOfCall.HasValue) + { + choiceList.Add(ItemsChoiceType.ETDFromPortOfCall); + choices.Add(noa_nod.ETDFromPortOfCall.Value); + } + + for (int i = 0; i < noa_nod.CallPurposes.Count; i++) + { + choiceList.Add(ItemsChoiceType.CallPurpose); + RootNOA_NODCallPurpose rnncp = new RootNOA_NODCallPurpose(); + rnncp.CallPurposeCode = noa_nod.CallPurposes[i].CallPurposeCode; + rnncp.CallPurposeDescription = noa_nod.CallPurposes[i].CallPurposeDescription; + choices.Add(rnncp); + } + } + + rootNoaNod.Items = choices.ToArray(); + rootNoaNod.ItemsElementName = choiceList.ToArray(); item = rootNoaNod; } diff --git a/nsw/Source/bsmd.herberg.FormService/FormService.cs b/nsw/Source/bsmd.herberg.FormService/FormService.cs index 74def239..f47756de 100644 --- a/nsw/Source/bsmd.herberg.FormService/FormService.cs +++ b/nsw/Source/bsmd.herberg.FormService/FormService.cs @@ -135,7 +135,7 @@ namespace bsmd.herberg.FormService } catch (Exception ex) { - _log.ErrorFormat("Exception reading formBody: {0}", ex.ToString()); + _log.ErrorFormat("Exception reading body of form {0}: {1}", dataSet.formGuid, ex.ToString()); successfulGet = false; } if (successfulGet && formResponse.success) diff --git a/nsw/Source/bsmd.herberg.FormService/Util.cs b/nsw/Source/bsmd.herberg.FormService/Util.cs index aed3a222..7c2ec4d9 100644 --- a/nsw/Source/bsmd.herberg.FormService/Util.cs +++ b/nsw/Source/bsmd.herberg.FormService/Util.cs @@ -48,9 +48,13 @@ namespace bsmd.herberg.FormService // nur zum debuggen for (int n = 0; n < formResponse.formDatasets[i].formData.Length; n++) { + _log.Debug(formResponse.formDatasets[i].formData[n].name); + _log.Debug(formResponse.formDatasets[i].formData[n].value); + if (formResponse.formDatasets[i].formData[n].name.Contains("Transmission")) { _log.Info("foundit"); + } } @@ -81,6 +85,7 @@ namespace bsmd.herberg.FormService { case "REGISTRATION_TYPE": _log.InfoFormat("REGISTRATION_TYPE: {0}", formData.value); + aMessageCore.IsTransit = formData.value.Equals("Transit"); // !!! break; case "REPORT_TYPE": @@ -329,10 +334,19 @@ namespace bsmd.herberg.FormService noa_nod.CallPurposes.Add(cp); } - if (subvDict.ContainsKey("CallPurposeCode")) cp.CallPurposeCode = Int32.Parse(subvDict["CallPurposeCode"]); if (subvDict.ContainsKey("CallPurposeDescription")) cp.CallPurposeDescription = subvDict["CallPurposeDescription"]; - saveMessages.Add(cp); + // Code ist Pflichtfeld, daher wird ein Eintrag nur bei vorhandenem Code gespeichert + if (subvDict.ContainsKey("CallPurposeCode")) + { + cp.CallPurposeCode = Int32.Parse(subvDict["CallPurposeCode"]); + saveMessages.Add(cp); + } + else + { + noa_nod.CallPurposes.Remove(cp); + } + } } @@ -1025,7 +1039,15 @@ namespace bsmd.herberg.FormService if (((waste.WasteType ?? 0) == 9) && waste.WasteDescription.IsNullOrEmpty()) waste.WasteDescription = "-"; - saveMessages.Add(waste); + if (waste.WasteType.HasValue) + { + saveMessages.Add(waste); + } + else + { + // wenn nichtmal der WasteType gesetzt ist verwenden wir lieber den default und speichern das nicht + was.Waste.Remove(waste); + } } // fehlende Waste Meldungen als "leer" hinzufügen, der Identifier muss dann zur Kennzeichnung leer sein @@ -1195,8 +1217,7 @@ namespace bsmd.herberg.FormService if (vDict.ContainsKey("PortOfCall")) aMessageCore.PoC = "DE" + vDict["PortOfCall"]; // if (vDict.ContainsKey("TransitKielCanal")) aMessageCore.IsTransit = vDict["TransitKielCanal"].Equals("Y"); if (vDict.ContainsKey("ETAPortOfCall")) aMessageCore.ETA = Extensions.TryParseDateTime(vDict["ETAPortOfCall"]); - if (vDict.ContainsKey("ETAKielCanal")) aMessageCore.ETAKielCanal = Extensions.TryParseDateTime(vDict["ETAKielCanal"]); - aMessageCore.IsTransit = false; + if (vDict.ContainsKey("ETAKielCanal")) aMessageCore.ETAKielCanal = Extensions.TryParseDateTime(vDict["ETAKielCanal"]); } break; #endregion @@ -1205,8 +1226,7 @@ namespace bsmd.herberg.FormService case "Transit": { theMessage.MessageNotificationClass = Message.NotificationClass.TRANSIT; - if (vDict.ContainsKey("ETAKielCanal")) aMessageCore.ETAKielCanal = Extensions.TryParseDateTime(vDict["ETAKielCanal"]); - aMessageCore.IsTransit = true; + if (vDict.ContainsKey("ETAKielCanal")) aMessageCore.ETAKielCanal = Extensions.TryParseDateTime(vDict["ETAKielCanal"]); } break; #endregion diff --git a/nsw/Source/bsmd.hisnord/Request.cs b/nsw/Source/bsmd.hisnord/Request.cs index e58f0de0..216c4a4f 100644 --- a/nsw/Source/bsmd.hisnord/Request.cs +++ b/nsw/Source/bsmd.hisnord/Request.cs @@ -86,16 +86,18 @@ namespace bsmd.hisnord #region NSW message area + Message visitTransitHeader = null; + foreach (Message message in messages) { switch (message.MessageNotificationClass) { case Message.NotificationClass.VISIT: - + if (!messages[0].MessageCore.IsTransit) visitTransitHeader = message; break; case Message.NotificationClass.TRANSIT: - + if (messages[0].MessageCore.IsTransit) visitTransitHeader = message; break; #region ATA/ATD @@ -258,304 +260,312 @@ namespace bsmd.hisnord break; #endregion + #region HAZ + case Message.NotificationClass.HAZA: case Message.NotificationClass.HAZD: // abh. von LADG! { - HAZ haz = message.Elements[0] as HAZ; - - #region HAZ header area - - List flagItems = new List(); - if (haz.NoDPGOnBoardOnArrival ?? false) + if (message.Elements.Count > 0) { - flagItems.Add(ytype.Y); - } - else - { - if(haz.DPGManifestOnBoardOnArrival ?? false) - flagItems.Add(yorntype.Y); - else - flagItems.Add(yorntype.N); - if (haz.INFShipClass.HasValue) + HAZ haz = message.Elements[0] as HAZ; + + #region HAZ header area + + List flagItems = new List(); + if (haz.NoDPGOnBoardOnArrival ?? false) { - flagItems.Add((infclasstype)haz.INFShipClass.Value); + flagItems.Add(ytype.Y); + } + else + { + if (haz.DPGManifestOnBoardOnArrival ?? false) + flagItems.Add(yorntype.Y); + else + flagItems.Add(yorntype.N); + if (haz.INFShipClass.HasValue) + { + flagItems.Add((infclasstype)haz.INFShipClass.Value); + } + + dgcodes _dgCodes = new dgcodes(); + List _dgCodeTypes = new List(); + if (haz.DPGClassificationIBC ?? false) + _dgCodeTypes.Add(dgcodetype.IBC); + if (haz.DPGClassificationIGC ?? false) + _dgCodeTypes.Add(dgcodetype.IGC); + if (haz.DPGClassificationIMDG ?? false) + _dgCodeTypes.Add(dgcodetype.IMDG); + // was ist das? dgcodetype.IMDG_MoU + if (haz.DPGClassificationIMSBC ?? false) + _dgCodeTypes.Add(dgcodetype.IMSBC); + if (haz.DPGClassificationMARPOL_ANNEX_I ?? false) + _dgCodeTypes.Add(dgcodetype.MARPOL_ANNEX_I); + _dgCodes.DGCode = _dgCodeTypes.ToArray(); + + flagItems.Add(_dgCodes); + } - dgcodes _dgCodes = new dgcodes(); - List _dgCodeTypes = new List(); - if (haz.DPGClassificationIBC ?? false) - _dgCodeTypes.Add(dgcodetype.IBC); - if (haz.DPGClassificationIGC ?? false) - _dgCodeTypes.Add(dgcodetype.IGC); - if (haz.DPGClassificationIMDG ?? false) - _dgCodeTypes.Add(dgcodetype.IMDG); - // was ist das? dgcodetype.IMDG_MoU - if (haz.DPGClassificationIMSBC ?? false) - _dgCodeTypes.Add(dgcodetype.IMSBC); - if (haz.DPGClassificationMARPOL_ANNEX_I ?? false) - _dgCodeTypes.Add(dgcodetype.MARPOL_ANNEX_I); - _dgCodes.DGCode = _dgCodeTypes.ToArray(); + _nsw.conveyance.Items1 = flagItems.ToArray(); - flagItems.Add(_dgCodes); + #endregion - } - - _nsw.conveyance.Items1 = flagItems.ToArray(); - - #endregion - - // Durch Sortierung nach NotificationClass kommt LADG vor HAZ, daher sollte das Feld - // GeneralCargo nicht leer sein - if (_nsw.conveyance.GeneralCargo == null) - { - _log.Warn("LADG (conveyance.GeneralCargo) is empty. Cannot add HAZ information!"); - } - else - { - List dgList = new List(); - - #region IMDGPositions - - if (haz.IMDGPositions.Count > 0) + // Durch Sortierung nach NotificationClass kommt LADG vor HAZ, daher sollte das Feld + // GeneralCargo nicht leer sein + if (_nsw.conveyance.GeneralCargo == null) { - positionimdg[] imdgPositions = new positionimdg[haz.IMDGPositions.Count]; - for (int i = 0; i < haz.IMDGPositions.Count; i++) - { - IMDGPosition imdgPosition = haz.IMDGPositions[i]; - positionimdg pi = new positionimdg(); + _log.Warn("LADG (conveyance.GeneralCargo) is empty. Cannot add HAZ information!"); + } + else + { + List dgList = new List(); - pi.UNNumber = imdgPosition.UNNumber; - if(imdgPosition.PackingGroup.HasValue) - pi.PackingGroup = (packinggrouptype)imdgPosition.PackingGroup; - pi.ProperShippingName = imdgPosition.ProperShippingName; - pi.IMOClass = imdgPosition.IMOClass; - pi.CompatibilityGroup = imdgPosition.CompatibilityGroup; - pi.TechnicalName = imdgPosition.TechnicalName; - pi.NetMassKGMSpecified = imdgPosition.NetExplosiveMass_KGM.HasValue; - if (imdgPosition.NetExplosiveMass_KGM.HasValue) - pi.NetMassKGM = (float) imdgPosition.NetExplosiveMass_KGM.Value; - pi.FlashpointCEL = imdgPosition.Flashpoint_CEL; - pi.Class7NuclideName = imdgPosition.Class7NuclideName; - pi.Class7MaxActivityBQLSpecified = imdgPosition.Class7MaxActivity_BQL.HasValue; - if (imdgPosition.Class7MaxActivity_BQL.HasValue) - pi.Class7MaxActivityBQL = (float)imdgPosition.Class7MaxActivity_BQL.Value; - pi.Class7CategorySpecified = imdgPosition.Class7Category.HasValue; - if (imdgPosition.Class7Category.HasValue) - pi.Class7Category = (class7cattype)imdgPosition.Class7Category.Value; - pi.Class7TISpecified = imdgPosition.Class7TransportIndex.HasValue; - if (imdgPosition.Class7TransportIndex.HasValue) - pi.Class7TI = (float)imdgPosition.Class7TransportIndex.Value; - pi.Class7CSI = imdgPosition.Class7CSI.HasValue ? imdgPosition.Class7CSI.Value.ToString() : ""; - pi.ControlTempCELSpecified = imdgPosition.ControlTemperature_CEL.HasValue; - if (imdgPosition.ControlTemperature_CEL.HasValue) - pi.ControlTempCEL = (float)imdgPosition.ControlTemperature_CEL.Value; - pi.EmergencyTempCELSpecified = imdgPosition.EmergencyTemperature_CEL.HasValue; - if (imdgPosition.EmergencyTemperature_CEL.HasValue) - pi.EmergencyTempCEL = (float)imdgPosition.EmergencyTemperature_CEL.Value; - if (imdgPosition.SubsidiaryRiskList.Count > 0) + #region IMDGPositions + + if (haz.IMDGPositions.Count > 0) + { + positionimdg[] imdgPositions = new positionimdg[haz.IMDGPositions.Count]; + for (int i = 0; i < haz.IMDGPositions.Count; i++) { - pi.SubsidiaryRisks = new string[imdgPosition.SubsidiaryRiskList.Count]; - for (int j = 0; j < imdgPosition.SubsidiaryRiskList.Count; j++) + IMDGPosition imdgPosition = haz.IMDGPositions[i]; + positionimdg pi = new positionimdg(); + + pi.UNNumber = imdgPosition.UNNumber; + if (imdgPosition.PackingGroup.HasValue) + pi.PackingGroup = (packinggrouptype)imdgPosition.PackingGroup; + pi.ProperShippingName = imdgPosition.ProperShippingName; + pi.IMOClass = imdgPosition.IMOClass; + pi.CompatibilityGroup = imdgPosition.CompatibilityGroup; + pi.TechnicalName = imdgPosition.TechnicalName; + pi.NetMassKGMSpecified = imdgPosition.NetExplosiveMass_KGM.HasValue; + if (imdgPosition.NetExplosiveMass_KGM.HasValue) + pi.NetMassKGM = (float)imdgPosition.NetExplosiveMass_KGM.Value; + pi.FlashpointCEL = imdgPosition.Flashpoint_CEL; + pi.Class7NuclideName = imdgPosition.Class7NuclideName; + pi.Class7MaxActivityBQLSpecified = imdgPosition.Class7MaxActivity_BQL.HasValue; + if (imdgPosition.Class7MaxActivity_BQL.HasValue) + pi.Class7MaxActivityBQL = (float)imdgPosition.Class7MaxActivity_BQL.Value; + pi.Class7CategorySpecified = imdgPosition.Class7Category.HasValue; + if (imdgPosition.Class7Category.HasValue) + pi.Class7Category = (class7cattype)imdgPosition.Class7Category.Value; + pi.Class7TISpecified = imdgPosition.Class7TransportIndex.HasValue; + if (imdgPosition.Class7TransportIndex.HasValue) + pi.Class7TI = (float)imdgPosition.Class7TransportIndex.Value; + pi.Class7CSI = imdgPosition.Class7CSI.HasValue ? imdgPosition.Class7CSI.Value.ToString() : ""; + pi.ControlTempCELSpecified = imdgPosition.ControlTemperature_CEL.HasValue; + if (imdgPosition.ControlTemperature_CEL.HasValue) + pi.ControlTempCEL = (float)imdgPosition.ControlTemperature_CEL.Value; + pi.EmergencyTempCELSpecified = imdgPosition.EmergencyTemperature_CEL.HasValue; + if (imdgPosition.EmergencyTemperature_CEL.HasValue) + pi.EmergencyTempCEL = (float)imdgPosition.EmergencyTemperature_CEL.Value; + if (imdgPosition.SubsidiaryRiskList.Count > 0) { - pi.SubsidiaryRisks[j] = imdgPosition.SubsidiaryRiskList[j].SubsidiaryRisk; + pi.SubsidiaryRisks = new string[imdgPosition.SubsidiaryRiskList.Count]; + for (int j = 0; j < imdgPosition.SubsidiaryRiskList.Count; j++) + { + pi.SubsidiaryRisks[j] = imdgPosition.SubsidiaryRiskList[j].SubsidiaryRisk; + } } + pi.MarinePollutant = (imdgPosition.MarinePollutant ?? false) ? yorntype.Y : yorntype.N; + pi.NumberOfPackages = imdgPosition.NumberOfPackages.HasValue ? imdgPosition.NumberOfPackages.Value.ToString() : ""; + // pi.PackageType = ?? feld nicht vorhanden + pi.LimitedQuantities = (imdgPosition.LimitedQuantities ?? false) ? yorntype.Y : yorntype.N; + pi.ExceptedQuantities = (imdgPosition.ExceptedQuantities ?? false) ? yorntype.Y : yorntype.N; + // pi.NetQuantity ?? feld nicht vorhanden odér ist das NetMassKGM ? + pi.GrossMassKGMSpecified = imdgPosition.GrossQuantity_KGM.HasValue; + if (imdgPosition.GrossQuantity_KGM.HasValue) + pi.GrossMassKGM = (float)imdgPosition.GrossQuantity_KGM.Value; + // pi.Volume_MTQ ?? feld nicht vorhanden + pi.GeneralCargoIBCSpecified = imdgPosition.GeneralCargoIBC.HasValue; + if (imdgPosition.GeneralCargoIBC.HasValue) + pi.GeneralCargoIBC = (imdgPosition.GeneralCargoIBC.Value) ? yorntype.Y : yorntype.N; + pi.ContainerNumber = imdgPosition.ContainerNumber; + pi.VehicleLicenseNumber = imdgPosition.VehicleLicenseNumber; + pi.Remarks = imdgPosition.Remarks; + + // hier fehlt auch StowagePosition, PortOfLoading, PortOfDischarge + // das ist eine Ebene höher und damit ist die Zuordnung falsch, weil es nicht 1:n ist sondern nachfolgende + // abweichende Einträge hier eine Überschreibung verursachen + + if (!imdgPosition.StowagePosition.IsNullOrEmpty()) + _nsw.conveyance.GeneralCargo[0].LocationOnBoard = imdgPosition.StowagePosition; + if (!imdgPosition.PortOfLoading.IsNullOrEmpty()) + _nsw.conveyance.GeneralCargo[0].PortOfLoadingLocode = imdgPosition.PortOfLoading; + if (!imdgPosition.PortOfDischarge.IsNullOrEmpty()) + _nsw.conveyance.GeneralCargo[0].PortOfDischargeLocode = imdgPosition.PortOfDischarge; + + pi.Index = imdgPosition.Identifier; + + imdgPositions[i] = pi; } - pi.MarinePollutant = (imdgPosition.MarinePollutant ?? false) ? yorntype.Y : yorntype.N; - pi.NumberOfPackages = imdgPosition.NumberOfPackages.HasValue ? imdgPosition.NumberOfPackages.Value.ToString() : ""; - // pi.PackageType = ?? feld nicht vorhanden - pi.LimitedQuantities = (imdgPosition.LimitedQuantities ?? false) ? yorntype.Y : yorntype.N; - pi.ExceptedQuantities = (imdgPosition.ExceptedQuantities ?? false) ? yorntype.Y : yorntype.N; - // pi.NetQuantity ?? feld nicht vorhanden odér ist das NetMassKGM ? - pi.GrossMassKGMSpecified = imdgPosition.GrossQuantity_KGM.HasValue; - if (imdgPosition.GrossQuantity_KGM.HasValue) - pi.GrossMassKGM = (float)imdgPosition.GrossQuantity_KGM.Value; - // pi.Volume_MTQ ?? feld nicht vorhanden - pi.GeneralCargoIBCSpecified = imdgPosition.GeneralCargoIBC.HasValue; - if (imdgPosition.GeneralCargoIBC.HasValue) - pi.GeneralCargoIBC = (imdgPosition.GeneralCargoIBC.Value) ? yorntype.Y : yorntype.N; - pi.ContainerNumber = imdgPosition.ContainerNumber; - pi.VehicleLicenseNumber = imdgPosition.VehicleLicenseNumber; - pi.Remarks = imdgPosition.Remarks; - - // hier fehlt auch StowagePosition, PortOfLoading, PortOfDischarge - // das ist eine Ebene höher und damit ist die Zuordnung falsch, weil es nicht 1:n ist sondern nachfolgende - // abweichende Einträge hier eine Überschreibung verursachen - - if(!imdgPosition.StowagePosition.IsNullOrEmpty()) - _nsw.conveyance.GeneralCargo[0].LocationOnBoard = imdgPosition.StowagePosition; - if (!imdgPosition.PortOfLoading.IsNullOrEmpty()) - _nsw.conveyance.GeneralCargo[0].PortOfLoadingLocode = imdgPosition.PortOfLoading; - if (!imdgPosition.PortOfDischarge.IsNullOrEmpty()) - _nsw.conveyance.GeneralCargo[0].PortOfDischargeLocode = imdgPosition.PortOfDischarge; - - pi.Index = imdgPosition.Identifier; - - imdgPositions[i] = pi; + dgList.Add(imdgPositions); } - dgList.Add(imdgPositions); - } - #endregion + #endregion - #region IBCPositions + #region IBCPositions - if (haz.IBCPositions.Count > 0) - { - positionibc[] ibcPositions = new positionibc[haz.IBCPositions.Count]; - - for (int i = 0; i < haz.IBCPositions.Count;i++) + if (haz.IBCPositions.Count > 0) { - positionibc pi = new positionibc(); - IBCPosition ibcPosition = haz.IBCPositions[i]; - pi.Name = ibcPosition.ProductName; - if(ibcPosition.PollutionCategory.HasValue) - pi.PollutionCategory = (polcattype)ibcPosition.PollutionCategory.Value; - pi.HazardsSpecified = ibcPosition.Hazards.HasValue; - if (ibcPosition.Hazards.HasValue) - pi.Hazards = (hazardtype)ibcPosition.Hazards.Value; - if (ibcPosition.FlashpointInformation.HasValue) - pi.FlashpointInfo = (flashpointinfotype)ibcPosition.FlashpointInformation.Value; - pi.FlashpointCEL = ibcPosition.Flashpoint_CEL; - if (ibcPosition.Quantity_KGM.HasValue) - pi.NetMassKGM = (float)ibcPosition.Quantity_KGM.Value; - pi.SpecRef15_19Specified = ibcPosition.SpecRef15_19.HasValue; - if (ibcPosition.SpecRef15_19.HasValue) - pi.SpecRef15_19 = ibcPosition.SpecRef15_19.Value ? yorntype.Y : yorntype.N; - pi.Remarks = ibcPosition.Remarks; + positionibc[] ibcPositions = new positionibc[haz.IBCPositions.Count]; - if (!ibcPosition.StowagePosition.IsNullOrEmpty()) - _nsw.conveyance.GeneralCargo[0].LocationOnBoard = ibcPosition.StowagePosition; - if (!ibcPosition.PortOfLoading.IsNullOrEmpty()) - _nsw.conveyance.GeneralCargo[0].PortOfLoadingLocode = ibcPosition.PortOfLoading; - if (!ibcPosition.PortOfDischarge.IsNullOrEmpty()) - _nsw.conveyance.GeneralCargo[0].PortOfDischargeLocode = ibcPosition.PortOfDischarge; + for (int i = 0; i < haz.IBCPositions.Count; i++) + { + positionibc pi = new positionibc(); + IBCPosition ibcPosition = haz.IBCPositions[i]; + pi.Name = ibcPosition.ProductName; + if (ibcPosition.PollutionCategory.HasValue) + pi.PollutionCategory = (polcattype)ibcPosition.PollutionCategory.Value; + pi.HazardsSpecified = ibcPosition.Hazards.HasValue; + if (ibcPosition.Hazards.HasValue) + pi.Hazards = (hazardtype)ibcPosition.Hazards.Value; + if (ibcPosition.FlashpointInformation.HasValue) + pi.FlashpointInfo = (flashpointinfotype)ibcPosition.FlashpointInformation.Value; + pi.FlashpointCEL = ibcPosition.Flashpoint_CEL; + if (ibcPosition.Quantity_KGM.HasValue) + pi.NetMassKGM = (float)ibcPosition.Quantity_KGM.Value; + pi.SpecRef15_19Specified = ibcPosition.SpecRef15_19.HasValue; + if (ibcPosition.SpecRef15_19.HasValue) + pi.SpecRef15_19 = ibcPosition.SpecRef15_19.Value ? yorntype.Y : yorntype.N; + pi.Remarks = ibcPosition.Remarks; - pi.Index = ibcPosition.Identifier; + if (!ibcPosition.StowagePosition.IsNullOrEmpty()) + _nsw.conveyance.GeneralCargo[0].LocationOnBoard = ibcPosition.StowagePosition; + if (!ibcPosition.PortOfLoading.IsNullOrEmpty()) + _nsw.conveyance.GeneralCargo[0].PortOfLoadingLocode = ibcPosition.PortOfLoading; + if (!ibcPosition.PortOfDischarge.IsNullOrEmpty()) + _nsw.conveyance.GeneralCargo[0].PortOfDischargeLocode = ibcPosition.PortOfDischarge; - ibcPositions[i] = pi; + pi.Index = ibcPosition.Identifier; + + ibcPositions[i] = pi; + } + + dgList.Add(ibcPositions); } - dgList.Add(ibcPositions); - } + #endregion - #endregion + #region IGCPositions - #region IGCPositions - - if (haz.IGCPositions.Count > 0) - { - positionigc[] igcPositions = new positionigc[haz.IGCPositions.Count]; - - for (int i = 0; i < haz.IGCPositions.Count; i++) + if (haz.IGCPositions.Count > 0) { - positionigc pi = new positionigc(); - IGCPosition igcPosition = haz.IGCPositions[i]; + positionigc[] igcPositions = new positionigc[haz.IGCPositions.Count]; - pi.UNNumber = igcPosition.UNNumber; - pi.IMOClass = igcPosition.IMOClass; - pi.Name = igcPosition.ProductName; - if (igcPosition.Quantity_KGM.HasValue) - pi.NetMassKGM = (float)igcPosition.Quantity_KGM.Value; - pi.Remarks = igcPosition.Remarks; + for (int i = 0; i < haz.IGCPositions.Count; i++) + { + positionigc pi = new positionigc(); + IGCPosition igcPosition = haz.IGCPositions[i]; - if (!igcPosition.StowagePosition.IsNullOrEmpty()) - _nsw.conveyance.GeneralCargo[0].LocationOnBoard = igcPosition.StowagePosition; - if (!igcPosition.PortOfLoading.IsNullOrEmpty()) - _nsw.conveyance.GeneralCargo[0].PortOfLoadingLocode = igcPosition.PortOfLoading; - if (!igcPosition.PortOfDischarge.IsNullOrEmpty()) - _nsw.conveyance.GeneralCargo[0].PortOfDischargeLocode = igcPosition.PortOfDischarge; + pi.UNNumber = igcPosition.UNNumber; + pi.IMOClass = igcPosition.IMOClass; + pi.Name = igcPosition.ProductName; + if (igcPosition.Quantity_KGM.HasValue) + pi.NetMassKGM = (float)igcPosition.Quantity_KGM.Value; + pi.Remarks = igcPosition.Remarks; - pi.Index = igcPosition.Identifier; + if (!igcPosition.StowagePosition.IsNullOrEmpty()) + _nsw.conveyance.GeneralCargo[0].LocationOnBoard = igcPosition.StowagePosition; + if (!igcPosition.PortOfLoading.IsNullOrEmpty()) + _nsw.conveyance.GeneralCargo[0].PortOfLoadingLocode = igcPosition.PortOfLoading; + if (!igcPosition.PortOfDischarge.IsNullOrEmpty()) + _nsw.conveyance.GeneralCargo[0].PortOfDischargeLocode = igcPosition.PortOfDischarge; - igcPositions[i] = pi; + pi.Index = igcPosition.Identifier; + + igcPositions[i] = pi; + } + + dgList.Add(igcPositions); } - dgList.Add(igcPositions); - } + #endregion - #endregion + #region IMSBCPositions - #region IMSBCPositions - - if (haz.IMSBCPositions.Count > 0) - { - positionimsbc[] imsbcPositions = new positionimsbc[haz.IMSBCPositions.Count]; - - for (int i = 0; i < haz.IMSBCPositions.Count;i++ ) + if (haz.IMSBCPositions.Count > 0) { - positionimsbc pi = new positionimsbc(); - IMSBCPosition imsbcPosition = haz.IMSBCPositions[i]; + positionimsbc[] imsbcPositions = new positionimsbc[haz.IMSBCPositions.Count]; - pi.Name = imsbcPosition.BulkCargoShippingName; - pi.MHB = (imsbcPosition.MHB ?? false) ? yorntype.Y : yorntype.N; - pi.UNNumber = imsbcPosition.UNNumber; - pi.IMOClass = imsbcPosition.IMOClass; - if (imsbcPosition.Quantity_KGM.HasValue) - pi.NetMassKGM = (float)imsbcPosition.Quantity_KGM.Value; - pi.Remarks = imsbcPosition.Remarks; + for (int i = 0; i < haz.IMSBCPositions.Count; i++) + { + positionimsbc pi = new positionimsbc(); + IMSBCPosition imsbcPosition = haz.IMSBCPositions[i]; - if (!imsbcPosition.StowagePosition.IsNullOrEmpty()) - _nsw.conveyance.GeneralCargo[0].LocationOnBoard = imsbcPosition.StowagePosition; - if (!imsbcPosition.PortOfLoading.IsNullOrEmpty()) - _nsw.conveyance.GeneralCargo[0].PortOfLoadingLocode = imsbcPosition.PortOfLoading; - if (!imsbcPosition.PortOfDischarge.IsNullOrEmpty()) - _nsw.conveyance.GeneralCargo[0].PortOfDischargeLocode = imsbcPosition.PortOfDischarge; + pi.Name = imsbcPosition.BulkCargoShippingName; + pi.MHB = (imsbcPosition.MHB ?? false) ? yorntype.Y : yorntype.N; + pi.UNNumber = imsbcPosition.UNNumber; + pi.IMOClass = imsbcPosition.IMOClass; + if (imsbcPosition.Quantity_KGM.HasValue) + pi.NetMassKGM = (float)imsbcPosition.Quantity_KGM.Value; + pi.Remarks = imsbcPosition.Remarks; - pi.Index = imsbcPosition.Identifier; + if (!imsbcPosition.StowagePosition.IsNullOrEmpty()) + _nsw.conveyance.GeneralCargo[0].LocationOnBoard = imsbcPosition.StowagePosition; + if (!imsbcPosition.PortOfLoading.IsNullOrEmpty()) + _nsw.conveyance.GeneralCargo[0].PortOfLoadingLocode = imsbcPosition.PortOfLoading; + if (!imsbcPosition.PortOfDischarge.IsNullOrEmpty()) + _nsw.conveyance.GeneralCargo[0].PortOfDischargeLocode = imsbcPosition.PortOfDischarge; - imsbcPositions[i] = pi; + pi.Index = imsbcPosition.Identifier; + + imsbcPositions[i] = pi; + } + + dgList.Add(imsbcPositions); } - dgList.Add(imsbcPositions); - } + #endregion - #endregion + #region IMDGPositions - #region IMDGPositions - - if (haz.MARPOLPositions.Count > 0) - { - positionmarpol[] marpolPositions = new positionmarpol[haz.MARPOLPositions.Count]; - - for (int i = 0; i < haz.MARPOLPositions.Count;i++) + if (haz.MARPOLPositions.Count > 0) { - positionmarpol pi = new positionmarpol(); - MARPOL_Annex_I_Position marpolPosition = haz.MARPOLPositions[i]; + positionmarpol[] marpolPositions = new positionmarpol[haz.MARPOLPositions.Count]; - pi.Name = marpolPosition.Name; - if (marpolPosition.FlashpointInformation.HasValue) - pi.FlashpointInformation = (flashpointinfotype) marpolPosition.FlashpointInformation.Value; - pi.Flashpoint_CEL = marpolPosition.Flashpoint_CEL; - if (marpolPosition.Quantity_KGM.HasValue) - pi.NetMassKGM = (float)marpolPosition.Quantity_KGM.Value; - pi.Remarks = marpolPosition.Remarks; + for (int i = 0; i < haz.MARPOLPositions.Count; i++) + { + positionmarpol pi = new positionmarpol(); + MARPOL_Annex_I_Position marpolPosition = haz.MARPOLPositions[i]; - if (!marpolPosition.StowagePosition.IsNullOrEmpty()) - _nsw.conveyance.GeneralCargo[0].LocationOnBoard = marpolPosition.StowagePosition; - if (!marpolPosition.PortOfLoading.IsNullOrEmpty()) - _nsw.conveyance.GeneralCargo[0].PortOfLoadingLocode = marpolPosition.PortOfLoading; - if (!marpolPosition.PortOfDischarge.IsNullOrEmpty()) - _nsw.conveyance.GeneralCargo[0].PortOfDischargeLocode = marpolPosition.PortOfDischarge; + pi.Name = marpolPosition.Name; + if (marpolPosition.FlashpointInformation.HasValue) + pi.FlashpointInformation = (flashpointinfotype)marpolPosition.FlashpointInformation.Value; + pi.Flashpoint_CEL = marpolPosition.Flashpoint_CEL; + if (marpolPosition.Quantity_KGM.HasValue) + pi.NetMassKGM = (float)marpolPosition.Quantity_KGM.Value; + pi.Remarks = marpolPosition.Remarks; - pi.Index = marpolPosition.Identifier; + if (!marpolPosition.StowagePosition.IsNullOrEmpty()) + _nsw.conveyance.GeneralCargo[0].LocationOnBoard = marpolPosition.StowagePosition; + if (!marpolPosition.PortOfLoading.IsNullOrEmpty()) + _nsw.conveyance.GeneralCargo[0].PortOfLoadingLocode = marpolPosition.PortOfLoading; + if (!marpolPosition.PortOfDischarge.IsNullOrEmpty()) + _nsw.conveyance.GeneralCargo[0].PortOfDischargeLocode = marpolPosition.PortOfDischarge; - marpolPositions[i] = pi; + pi.Index = marpolPosition.Identifier; + + marpolPositions[i] = pi; + } + + dgList.Add(marpolPositions); } - dgList.Add(marpolPositions); + #endregion + + // HACK! Die erste "vorhandene" Liste. Dieses Format hier setzt voraus dass man immer nur einen Listentyp + // haben kann, das steht aber nirgends im NSW + // alles andere wird bis zur Klärung hier erst einmal ignoriert + if(dgList.Count > 0) + _nsw.conveyance.GeneralCargo[0].DGList = (object[])dgList[0]; //.ToArray(); } - - #endregion - - // HACK! Die erste "vorhandene" Liste. Dieses Format hier setzt voraus dass man immer nur einen Listentyp - // haben kann, das steht aber nirgends im NSW - // alles andere wird bis zur Klärung hier erst einmal ignoriert - _nsw.conveyance.GeneralCargo[0].DGList = (object[]) dgList[0]; //.ToArray(); } } break; + #endregion + #region INFO case Message.NotificationClass.INFO: INFO info = message.Elements[0] as INFO; @@ -610,10 +620,14 @@ namespace bsmd.hisnord mdh _mdh = new mdh(); if (mdh.AwareOfFurtherInfections.HasValue) _mdh.AwareOfConditionsForFurtherInfections = mdh.AwareOfFurtherInfections.Value ? yorntype.Y : yorntype.N; - _mdh.InfectedArea = new infectedarea(); - if (mdh.InfectedAreaDate.HasValue) - _mdh.InfectedArea.InfectedAreaDate = mdh.InfectedAreaDate.Value; - _mdh.InfectedArea.InfectedAreaPort = mdh.InfectedAreaPort; + + if (mdh.InfectedAreaDate.HasValue && !mdh.InfectedAreaPort.IsNullOrEmpty()) + { + _mdh.InfectedArea = new infectedarea(); + if (mdh.InfectedAreaDate.HasValue) + _mdh.InfectedArea.InfectedAreaDate = mdh.InfectedAreaDate.Value; + _mdh.InfectedArea.InfectedAreaPort = mdh.InfectedAreaPort; + } if (mdh.InfectedAreaVisited.HasValue) _mdh.InfectedAreaVisited = mdh.InfectedAreaVisited.Value ? yorntype.Y : yorntype.N; if (mdh.MedicalConsulted.HasValue) @@ -632,7 +646,7 @@ namespace bsmd.hisnord for (int i = 0; i < mdh.PortOfCallLast30Days.Count; i++) { _mdh.PortsOfCallLast30Days[i] = new portofcallmdh(); - _mdh.PortsOfCallLast30Days[i].Index = i.ToString(); + _mdh.PortsOfCallLast30Days[i].Index = (i+1).ToString(); // POSINT = 1-basiert if (mdh.PortOfCallLast30Days[i].CrewJoinedShip.Count > 0) { _mdh.PortsOfCallLast30Days[i].PortOfCallLast30DaysCrewJoinedShip = new string[mdh.PortOfCallLast30Days[i].CrewJoinedShip.Count]; @@ -652,11 +666,14 @@ namespace bsmd.hisnord _mdh.SanitaryControlReinspectionRequired = mdh.SanitaryControlReinspectionRequired.Value ? yorntype.Y : yorntype.N; if (mdh.SanitaryMeasuresApplied.HasValue) _mdh.SanitaryMeasuresApplied = mdh.SanitaryMeasuresApplied.Value ? yorntype.Y : yorntype.N; - _mdh.SanitaryMeasuresDetails = new sanitarydetails(); - if (mdh.SanitaryMeasuresDate.HasValue) - _mdh.SanitaryMeasuresDetails.SanitaryMeasuresDate = mdh.SanitaryMeasuresDate.Value; - _mdh.SanitaryMeasuresDetails.SanitaryMeasuresLocation = mdh.SanitaryMeasuresLocation; - _mdh.SanitaryMeasuresDetails.SanitaryMeasuresType = mdh.SanitaryMeasuresType; + if (mdh.SanitaryMeasuresDate.HasValue && !mdh.SanitaryMeasuresLocation.IsNullOrEmpty() && !mdh.SanitaryMeasuresType.IsNullOrEmpty()) + { + _mdh.SanitaryMeasuresDetails = new sanitarydetails(); + if (mdh.SanitaryMeasuresDate.HasValue) + _mdh.SanitaryMeasuresDetails.SanitaryMeasuresDate = mdh.SanitaryMeasuresDate.Value; + _mdh.SanitaryMeasuresDetails.SanitaryMeasuresLocation = mdh.SanitaryMeasuresLocation; + _mdh.SanitaryMeasuresDetails.SanitaryMeasuresType = mdh.SanitaryMeasuresType; + } if (mdh.SickAnimalOrPetOnBoard.HasValue) _mdh.SickAnimalOrPetOnBoard = mdh.SickAnimalOrPetOnBoard.Value ? yorntype.Y : yorntype.N; if (mdh.SickPersonsOnBoard.HasValue) @@ -836,17 +853,25 @@ namespace bsmd.hisnord if (pre72h.PlannedPeriodOfStay_HUR.HasValue) _nsw.conveyance.Pre72H.PlannedPeriodOfStay_HUR = (float)pre72h.PlannedPeriodOfStay_HUR.Value; _nsw.conveyance.Pre72H.PlannedWorks = pre72h.PlannedWorks; - if (pre72h.Tanker.HasValue) - _nsw.conveyance.Pre72H.Tanker = pre72h.Tanker.Value ? yorntype.Y : yorntype.N; - _nsw.conveyance.Pre72H.TankerDetails = new tankerdetails(); - if (pre72h.ConditionCargoBallastTanks.HasValue) - _nsw.conveyance.Pre72H.TankerDetails.ConditionCargoBallastTanks = (cargoconditiontype)pre72h.ConditionCargoBallastTanks.Value; - _nsw.conveyance.Pre72H.TankerDetails.NatureOfCargo = pre72h.NatureOfCargo; - if (pre72h.TankerHullConfiguration.HasValue) - _nsw.conveyance.Pre72H.TankerDetails.TankerHullConfiguration = (hullconfigtype)pre72h.TankerHullConfiguration.Value; - if (pre72h.VolumeOfCargo.HasValue) - _nsw.conveyance.Pre72H.TankerDetails.VolumeOfCargo_TNE = (float)pre72h.VolumeOfCargo.Value; - _nsw.conveyance.Pre72H.TankerDetails.VolumeOfCargo_TNESpecified = pre72h.VolumeOfCargo.HasValue; + + _nsw.conveyance.Pre72H.Tanker = (pre72h.Tanker ?? false) ? yorntype.Y : yorntype.N; + + if (pre72h.Tanker ?? false) + { + _nsw.conveyance.Pre72H.TankerDetails = new tankerdetails(); + if (pre72h.ConditionCargoBallastTanks.HasValue) + _nsw.conveyance.Pre72H.TankerDetails.ConditionCargoBallastTanks = (cargoconditiontype)pre72h.ConditionCargoBallastTanks.Value; + _nsw.conveyance.Pre72H.TankerDetails.NatureOfCargo = pre72h.NatureOfCargo; + if (pre72h.TankerHullConfiguration.HasValue) + _nsw.conveyance.Pre72H.TankerDetails.TankerHullConfiguration = (hullconfigtype)pre72h.TankerHullConfiguration.Value; + if (pre72h.VolumeOfCargo.HasValue) + _nsw.conveyance.Pre72H.TankerDetails.VolumeOfCargo_TNE = (float)pre72h.VolumeOfCargo.Value; + _nsw.conveyance.Pre72H.TankerDetails.VolumeOfCargo_TNESpecified = pre72h.VolumeOfCargo.HasValue; + } + else + { + _nsw.conveyance.Pre72H.TankerDetails = null; + } break; #endregion @@ -893,7 +918,7 @@ namespace bsmd.hisnord for (int i = 0; i < sec.LastTenPortFacilitesCalled.Count; i++) { _sec.Last10Ports[i] = new last10port(); - _sec.Last10Ports[i].Index = i.ToString(); + _sec.Last10Ports[i].Index = (i+1).ToString(); if (sec.LastTenPortFacilitesCalled[i].PortFacilityDateOfArrival.HasValue) _sec.Last10Ports[i].PortFacilityDateOfArrival = sec.LastTenPortFacilitesCalled[i].PortFacilityDateOfArrival.Value; if (sec.LastTenPortFacilitesCalled[i].PortFacilityDateOfDeparture.HasValue) @@ -1111,7 +1136,12 @@ namespace bsmd.hisnord for (int i = 0; i < was.Waste.Count; i++) { waste _aWaste = new waste(); - _aWaste.WasteDescription = was.Waste[i].WasteDescription; + string tempWasteType = was.Waste[i].WasteTypeDisplay ?? ""; + // im Gegensatz zu Spec gibt überfl. Description einen Parse-Fehler :( + if (tempWasteType.Equals("WASTE_OILS-OTHERS") || tempWasteType.Equals("GARBAGE-OTHER") || tempWasteType.Equals("CARGO-RESIDUES") || tempWasteType.Equals("CARGO-ASSOSIATED_WASTE")) + _aWaste.WasteDescription = was.Waste[i].WasteDescription; + else + _aWaste.WasteDescription = null; _aWaste.WasteDetails = new wastedetails(); _aWaste.WasteDetails.WasteAmountGeneratedTillNextPort_MTQSpecified = was.Waste[i].WasteAmountGeneratedTillNextPort_MTQ.HasValue; if (was.Waste[i].WasteAmountGeneratedTillNextPort_MTQ.HasValue) @@ -1126,7 +1156,7 @@ namespace bsmd.hisnord if (was.Waste[i].WasteDisposalAmount_MTQ.HasValue) _aWaste.WasteDisposalAmount_MTQ = (float)was.Waste[i].WasteDisposalAmount_MTQ.Value; if (was.Waste[i].WasteType.HasValue) - _aWaste.WasteType = (wastetype)was.Waste[i].WasteType.Value; + _aWaste.WasteType = (wastetype)(was.Waste[i].WasteType.Value - 1); // im XSD scheint das 0-basiert zu sein (falsch?) _waste.Wastes[i] = _aWaste; } } @@ -1155,7 +1185,28 @@ namespace bsmd.hisnord #region send message and store result - transmitter.result theResult = transmitter.UseHisNordTransmitter(filePath); + transmitter.result theResult = transmitter.UseHisNordTransmitter(filePath); + if (theResult != null) + { + _log.InfoFormat("Result: Code {0} Detail {1} Message {2}", theResult.code, theResult.detail, theResult.message); + + if (visitTransitHeader != null) + { + if (theResult.code > 0) + { + MessageError error = new MessageError(); + error.MessageHeaderId = visitTransitHeader.Id.Value; + error.ErrorCode = theResult.code; + + if ((theResult.detail != null) && (theResult.detail.Length > 255)) + error.ErrorText = theResult.detail.Substring(0, 255); + else + error.ErrorText = theResult.detail; + + DBManager.Instance.Save(error); + } + } + } #endregion diff --git a/nsw/Source/bsmd.hisnord/transmitter.cs b/nsw/Source/bsmd.hisnord/transmitter.cs index e856b938..35d52d4f 100644 --- a/nsw/Source/bsmd.hisnord/transmitter.cs +++ b/nsw/Source/bsmd.hisnord/transmitter.cs @@ -28,6 +28,7 @@ namespace bsmd.hisnord { Process process = new Process(); process.StartInfo.FileName = Properties.Settings.Default.Transmitter; + process.StartInfo.WorkingDirectory = Path.GetDirectoryName(Properties.Settings.Default.Transmitter); process.StartInfo.RedirectStandardError = true; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.RedirectStandardInput = false;