From 0ae6ec86059518c241e17b6fde1ebd0538143fc0 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Wed, 20 Apr 2016 05:43:36 +0000 Subject: [PATCH] 3.0.12 Korrekturen HIS Nord und Dakosy --- Stundensheet.xlsx | Bin 21567 -> 21700 bytes .../SendNSWMessageService/NSWSendService.cs | 62 ++-------- nsw/Source/bsmd.ExcelReadService/App.config | 3 + .../bsmd.ExcelReadService/ExcelReadService.cs | 116 ++++++++++-------- .../Properties/Settings.Designer.cs | 9 ++ .../Properties/Settings.settings | 3 + nsw/Source/bsmd.dakosy/Request.cs | 7 +- nsw/Source/bsmd.database/Message.cs | 7 +- nsw/Source/bsmd.database/MessageError.cs | 4 +- .../Properties/AssemblyProductInfo.cs | 2 +- .../Properties/AssemblyProjectInfo.cs | 2 +- nsw/Source/bsmd.database/XtraSendLogic.cs | 4 + nsw/Source/bsmd.hisnord/Request.cs | 73 +++++++---- nsw/Source/bsmd.hisnord/readme.txt | 7 +- 14 files changed, 166 insertions(+), 133 deletions(-) diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index 731f69a382aab1b08d73128d6f02cf7b26c9b9c5..ea1210b85a5072cf4742dd4acdf0b0c9da3cc355 100644 GIT binary patch delta 10803 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 delta 10610 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 HKfnJ2^sS5V diff --git a/nsw/Source/SendNSWMessageService/NSWSendService.cs b/nsw/Source/SendNSWMessageService/NSWSendService.cs index 96e19762..ee98edf3 100644 --- a/nsw/Source/SendNSWMessageService/NSWSendService.cs +++ b/nsw/Source/SendNSWMessageService/NSWSendService.cs @@ -87,7 +87,7 @@ namespace SendNSWMessageService if (core.InitialHIS == Message.NSWProvider.DUDR) { - // Rostocker: wir senden alle Nachrichten auf einmal + // HIS-NORD: alles auf einmal sendSucceeded = bsmd.hisnord.Request.Send(messages); if (!sendSucceeded) core.BSMDStatusInternal = MessageCore.BSMDStatus.FAILURE; @@ -133,9 +133,13 @@ namespace SendNSWMessageService foreach (Message message in messages) { + // Eine Nachricht mit dem Status "Suspended / Zurückgestellt" wird so lange nicht + // versendet, bis im ENI der Status wieder explizit zurückgesetzt wird (16.4.16) + if (message.InternalStatus == Message.BSMDStatus.SUSPENDED) continue; + // Wenn das ein Transit ist, werden nicht erforderliche Meldeklassen übersprungen if (core.IsTransit) - { + { if ((message.MessageNotificationClass == Message.NotificationClass.BKRD) || (message.MessageNotificationClass == Message.NotificationClass.PRE72H) || (message.MessageNotificationClass == Message.NotificationClass.TIEFD) || @@ -153,47 +157,7 @@ namespace SendNSWMessageService // Visit/Transit Meldeklassen werden nicht erneut übertragen if ((message.MessageNotificationClass == Message.NotificationClass.VISIT) || (message.MessageNotificationClass == Message.NotificationClass.TRANSIT)) - continue; - /* - // Wenn kein Gefahrgut gemeldet ist soll die Meldeklasse gar nicht gesendet werden - if((message.MessageNotificationClass == Message.NotificationClass.HAZA) || - (message.MessageNotificationClass == Message.NotificationClass.HAZD)) - { - if (message.Elements.Count > 0) - { - HAZ haz = message.Elements[0] as HAZ; - if (haz != null) - { - if (haz.NoDPGOnBoardOnArrival ?? false) continue; - if (haz.TransmissionType != "EU-NOAD") continue; - } - } - } - - // ATD wird nur gesendet, wenn weniger als 60 Minuten in der Zukunft - // und auch nicht älter als eine Woche - if(message.MessageNotificationClass == Message.NotificationClass.ATD) - { - if (message.Elements.Count > 0) - { - 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; - } - } - */ + continue; if ((message.InternalStatus != Message.BSMDStatus.CONFIRMED) && (message.InternalStatus != Message.BSMDStatus.SENT)) @@ -224,20 +188,20 @@ namespace SendNSWMessageService // switch über passendes HIS / Schnittstelle switch (message.HIS) - { - // TODO: Das muss wieder entfernt werden wenn 3.0 funktional geht + { case Message.NSWProvider.DBH: case Message.NSWProvider.DBH_TEST: sendSucceeded = bsmd.dbh.Request.SendMessage(message, (message.HIS == Message.NSWProvider.DBH_TEST)); if (!sendSucceeded) message.InternalStatus = Message.BSMDStatus.SEND_FAILED; break; - /* + case Message.NSWProvider.DAKOSY: - sendSucceeded = bsmd.dakosy.Request.Send(message); + case Message.NSWProvider.DAKOSY_TEST: + sendSucceeded = bsmd.dakosy.Request.Send(message, true); if (!sendSucceeded) message.InternalStatus = Message.BSMDStatus.SEND_FAILED; - break; - */ + break; + default: _log.WarnFormat("Initial HIS not specified for message {0}", message.Id); break; diff --git a/nsw/Source/bsmd.ExcelReadService/App.config b/nsw/Source/bsmd.ExcelReadService/App.config index 0e3620b0..695aa4fa 100644 --- a/nsw/Source/bsmd.ExcelReadService/App.config +++ b/nsw/Source/bsmd.ExcelReadService/App.config @@ -31,6 +31,9 @@ Reference Excel Sheet + + True + \ No newline at end of file diff --git a/nsw/Source/bsmd.ExcelReadService/ExcelReadService.cs b/nsw/Source/bsmd.ExcelReadService/ExcelReadService.cs index d2b9f12a..7eb65f00 100644 --- a/nsw/Source/bsmd.ExcelReadService/ExcelReadService.cs +++ b/nsw/Source/bsmd.ExcelReadService/ExcelReadService.cs @@ -66,64 +66,77 @@ namespace bsmd.ExcelReadService try { string messageId = ""; - string attachmentLocalPath = ""; + string attachmentLocalPath = null; string mailSender = ""; using (BSMDPopClient bsmdPopClient = new BSMDPopClient()) { - // if (!bsmdPopClient.IsConnected) - //{ - // _log.Error("cannot connect to pop3 server, aborting!"); - // this.Stop(); - //} - - // --- BEGIN ------------ TEST - - ExcelReader er = new ExcelReader(@"E:\work\bsmd\nsw\Source\bsmd.ExcelReadService\2016_01_08_BMSD - EUNoAD Tool Rev 3.0_mit Testdaten.xls"); - string amsg; - MessageCore aCore; - bool aReadResult = Util.ProcessSheet(er, out amsg, out aCore); - er.Dispose(); - - // --- END --------------- TEST - - // check and download next e-Mail, saving attachment - while (bsmdPopClient.ReceiveSingleMail(out attachmentLocalPath, out messageId, out mailSender)) + if (!bsmdPopClient.IsConnected) + { + _log.Error("cannot connect to pop3 server!"); + } + else { - bool readResult; - string readMessage = ""; - MessageCore messageCore = null; - // try to read/import attachment - using(ExcelReader reader = new ExcelReader(attachmentLocalPath)) + // --- BEGIN ------------ TEST + + /* + ExcelReader er = new ExcelReader(@"E:\work\bsmd\nsw\Source\bsmd.ExcelReadService\2016_01_08_BMSD - EUNoAD Tool Rev 3.0_mit Testdaten.xls"); + string amsg; + MessageCore aCore; + bool aReadResult = Util.ProcessSheet(er, out amsg, out aCore); + er.Dispose(); + */ + + // --- END --------------- TEST + + // check and download next e-Mail, saving attachment + while (bsmdPopClient.ReceiveSingleMail(out attachmentLocalPath, out messageId, out mailSender)) { - readResult = Util.ProcessSheet(reader, out readMessage, out messageCore); - if(!readResult) - _log.Error("Excel sheet could not be interpreted"); + + bool readResult; + string readMessage = ""; + MessageCore messageCore = null; + + if (attachmentLocalPath == null) + { + _log.WarnFormat("incoming E-Mail did not contain an Excel attachment!"); + } + else + { + + // try to read/import attachment + using (ExcelReader reader = new ExcelReader(attachmentLocalPath)) + { + readResult = Util.ProcessSheet(reader, out readMessage, out messageCore); + if (!readResult) + _log.Error("Excel sheet could not be interpreted"); + } + + // TODO: Quittung / set messagecore to createreport and let reportGenerator create a reply? + + // create a reply sheet (template + scanned highlighted content for verification + + string confirmationExcelFilePath = Util.CreateConfirmationSheet(messageCore); + List sendItems = new List(); + sendItems.Add(confirmationExcelFilePath); + // send reply sheet back to sender + BSMDMail.SendNSWReportWithAttachments(Properties.Settings.Default.SendEMailSubject, sendItems); + + // remove e-Mail + _log.InfoFormat("deleting mail with messageId {0}", messageId); + _log.InfoFormat("mail delete {0}", bsmdPopClient.DeleteMessageByMessageId(messageId) ? "successful" : "failed"); + + // remove attachment + _log.InfoFormat("removing local file {0}", attachmentLocalPath); + + if(!Properties.Settings.Default.TestMode) + File.Delete(attachmentLocalPath); + } + + attachmentLocalPath = null; } - - // TODO: Quittung / set messagecore to createreport and let reportGenerator create a reply? - - // create a reply sheet (template + scanned highlighted content for verification - - string confirmationExcelFilePath = Util.CreateConfirmationSheet(messageCore); - List sendItems = new List(); - sendItems.Add(confirmationExcelFilePath); - // send reply sheet back to sender - BSMDMail.SendNSWReportWithAttachments(Properties.Settings.Default.SendEMailSubject, sendItems); - - // remove e-Mail - _log.InfoFormat("deleting mail with messageId {0}", messageId); - _log.InfoFormat("mail delete {0}", bsmdPopClient.DeleteMessageByMessageId(messageId) ? "successful" : "failed"); - - // remove attachment - _log.InfoFormat("removing local file {0}", attachmentLocalPath); - // File.Delete(attachmentLocalPath); - - - - } } @@ -135,9 +148,8 @@ namespace bsmd.ExcelReadService } } else - { - this.EventLog.WriteEntry("ReportService stopped: DB connection failed", EventLogEntryType.Error); - this.Stop(); + { + _log.Error("DB Connection failure"); } lock (this._timerlock) diff --git a/nsw/Source/bsmd.ExcelReadService/Properties/Settings.Designer.cs b/nsw/Source/bsmd.ExcelReadService/Properties/Settings.Designer.cs index 1186b7da..21c75b48 100644 --- a/nsw/Source/bsmd.ExcelReadService/Properties/Settings.Designer.cs +++ b/nsw/Source/bsmd.ExcelReadService/Properties/Settings.Designer.cs @@ -85,5 +85,14 @@ namespace bsmd.ExcelReadService.Properties { return ((string)(this["SendEMailSubject"])); } } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool TestMode { + get { + return ((bool)(this["TestMode"])); + } + } } } diff --git a/nsw/Source/bsmd.ExcelReadService/Properties/Settings.settings b/nsw/Source/bsmd.ExcelReadService/Properties/Settings.settings index da840a0c..b387ba0c 100644 --- a/nsw/Source/bsmd.ExcelReadService/Properties/Settings.settings +++ b/nsw/Source/bsmd.ExcelReadService/Properties/Settings.settings @@ -23,5 +23,8 @@ Reference Excel Sheet + + True + \ No newline at end of file diff --git a/nsw/Source/bsmd.dakosy/Request.cs b/nsw/Source/bsmd.dakosy/Request.cs index 2a8641d5..a32edcac 100644 --- a/nsw/Source/bsmd.dakosy/Request.cs +++ b/nsw/Source/bsmd.dakosy/Request.cs @@ -23,7 +23,7 @@ namespace bsmd.dakosy #region send single message - public static bool Send(Message aMessage) + public static bool Send(Message aMessage, bool useTestSystem) { bool retval = true; try @@ -776,11 +776,10 @@ namespace bsmd.dakosy // call sftp client to send sftp.Put(fileName, - Properties.Settings.Default.TestMode ? - Properties.Settings.Default.RemoteTestIncomingDir : Properties.Settings.Default.RemoteProdIncomingDir); + useTestSystem ? Properties.Settings.Default.RemoteTestIncomingDir : Properties.Settings.Default.RemoteProdIncomingDir); // remove sent file if not test mode - if (!Properties.Settings.Default.TestMode) + if (!useTestSystem) File.Delete(fileName); } catch(Exception ex) diff --git a/nsw/Source/bsmd.database/Message.cs b/nsw/Source/bsmd.database/Message.cs index 86f8704b..62a1f873 100644 --- a/nsw/Source/bsmd.database/Message.cs +++ b/nsw/Source/bsmd.database/Message.cs @@ -142,7 +142,8 @@ namespace bsmd.database SEND_FAILED, CONFIRMED, VIOLATION, - ERROR, + ERROR, + SUSPENDED = 8 } /// @@ -154,7 +155,9 @@ namespace bsmd.database DBH, DAKOSY, DUDR, - DBH_TEST + DBH_TEST, + DAKOSY_TEST, + DUDR_TEST } #endregion diff --git a/nsw/Source/bsmd.database/MessageError.cs b/nsw/Source/bsmd.database/MessageError.cs index 7a068e13..f8d76274 100644 --- a/nsw/Source/bsmd.database/MessageError.cs +++ b/nsw/Source/bsmd.database/MessageError.cs @@ -42,8 +42,8 @@ namespace bsmd.database scmd.Parameters.AddWithValue("@MHID", this.MessageHeaderId); scmd.Parameters.AddWithValue("@VC", this.ErrorCode); - scmd.Parameters.AddWithValue("@VT", this.ErrorText); - scmd.Parameters.AddWithValue("@DEL", this.Deleted ? 1 : 0); + scmd.Parameters.AddWithValue("@VT", this.ErrorText ?? ""); + scmd.Parameters.AddWithValue("@DEL", this.Deleted ? 1 : 0); if (this.IsNew) { diff --git a/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs b/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs index 55bf2779..26fa7ac4 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.9")] +[assembly: AssemblyInformationalVersion("3.0.12")] [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 efed2f11..237a801a 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.9.*")] +[assembly: AssemblyVersion("3.0.12.*")] diff --git a/nsw/Source/bsmd.database/XtraSendLogic.cs b/nsw/Source/bsmd.database/XtraSendLogic.cs index 4e15dc70..34cbe5ad 100644 --- a/nsw/Source/bsmd.database/XtraSendLogic.cs +++ b/nsw/Source/bsmd.database/XtraSendLogic.cs @@ -23,6 +23,10 @@ namespace bsmd.database /// true falls Nachricht versendet werden soll public static bool ShouldSendMessage(Message message) { + // zurückgestellte Nachrichten werden ignoriert. Das kann ggf. ein Problem werden, wenn die + // Nachricht bei HIS-Nord ein wesentlicher Bestandteil ist. -> muss beobachtet werden + + if (message.InternalStatus == Message.BSMDStatus.SUSPENDED) return false; // Wenn das ein Transit ist, werden nicht erforderliche Meldeklassen übersprungen if (message.MessageCore.IsTransit) diff --git a/nsw/Source/bsmd.hisnord/Request.cs b/nsw/Source/bsmd.hisnord/Request.cs index 8ad3bac3..e5e42415 100644 --- a/nsw/Source/bsmd.hisnord/Request.cs +++ b/nsw/Source/bsmd.hisnord/Request.cs @@ -391,7 +391,19 @@ namespace bsmd.hisnord // abweichende Einträge hier eine Überschreibung verursachen if (!imdgPosition.StowagePosition.IsNullOrEmpty()) - _nsw.conveyance.GeneralCargo[0].LocationOnBoard = imdgPosition.StowagePosition; + _nsw.conveyance.GeneralCargo[0].Item = imdgPosition.StowagePosition; + else + { + if(!imdgPosition.Bay.IsNullOrEmpty() || !imdgPosition.Row.IsNullOrEmpty() || !imdgPosition.Tier.IsNullOrEmpty()) + { + stowagepositionbayrowtier spbr = new stowagepositionbayrowtier(); + spbr.Bay = imdgPosition.Bay; + spbr.Row = imdgPosition.Row; + spbr.Tier = imdgPosition.Tier; + _nsw.conveyance.GeneralCargo[0].Item = spbr; + } + } + if (!imdgPosition.PortOfLoading.IsNullOrEmpty()) _nsw.conveyance.GeneralCargo[0].PortOfLoadingLocode = imdgPosition.PortOfLoading; if (!imdgPosition.PortOfDischarge.IsNullOrEmpty()) @@ -431,9 +443,10 @@ namespace bsmd.hisnord if (ibcPosition.SpecRef15_19.HasValue) pi.SpecRef15_19 = ibcPosition.SpecRef15_19.Value ? yorntype.Y : yorntype.N; pi.Remarks = ibcPosition.Remarks; - + if (!ibcPosition.StowagePosition.IsNullOrEmpty()) - _nsw.conveyance.GeneralCargo[0].LocationOnBoard = ibcPosition.StowagePosition; + _nsw.conveyance.GeneralCargo[0].Item = ibcPosition.StowagePosition; + if (!ibcPosition.PortOfLoading.IsNullOrEmpty()) _nsw.conveyance.GeneralCargo[0].PortOfLoadingLocode = ibcPosition.PortOfLoading; if (!ibcPosition.PortOfDischarge.IsNullOrEmpty()) @@ -468,7 +481,8 @@ namespace bsmd.hisnord pi.Remarks = igcPosition.Remarks; if (!igcPosition.StowagePosition.IsNullOrEmpty()) - _nsw.conveyance.GeneralCargo[0].LocationOnBoard = igcPosition.StowagePosition; + _nsw.conveyance.GeneralCargo[0].Item = igcPosition.StowagePosition; + if (!igcPosition.PortOfLoading.IsNullOrEmpty()) _nsw.conveyance.GeneralCargo[0].PortOfLoadingLocode = igcPosition.PortOfLoading; if (!igcPosition.PortOfDischarge.IsNullOrEmpty()) @@ -502,9 +516,10 @@ namespace bsmd.hisnord if (imsbcPosition.Quantity_KGM.HasValue) pi.NetMassKGM = (float)imsbcPosition.Quantity_KGM.Value; pi.Remarks = imsbcPosition.Remarks; - + if (!imsbcPosition.StowagePosition.IsNullOrEmpty()) - _nsw.conveyance.GeneralCargo[0].LocationOnBoard = imsbcPosition.StowagePosition; + _nsw.conveyance.GeneralCargo[0].Item = imsbcPosition.StowagePosition; + if (!imsbcPosition.PortOfLoading.IsNullOrEmpty()) _nsw.conveyance.GeneralCargo[0].PortOfLoadingLocode = imsbcPosition.PortOfLoading; if (!imsbcPosition.PortOfDischarge.IsNullOrEmpty()) @@ -540,7 +555,8 @@ namespace bsmd.hisnord pi.Remarks = marpolPosition.Remarks; if (!marpolPosition.StowagePosition.IsNullOrEmpty()) - _nsw.conveyance.GeneralCargo[0].LocationOnBoard = marpolPosition.StowagePosition; + _nsw.conveyance.GeneralCargo[0].Item = marpolPosition.StowagePosition; + if (!marpolPosition.PortOfLoading.IsNullOrEmpty()) _nsw.conveyance.GeneralCargo[0].PortOfLoadingLocode = marpolPosition.PortOfLoading; if (!marpolPosition.PortOfDischarge.IsNullOrEmpty()) @@ -625,13 +641,18 @@ namespace bsmd.hisnord if (mdh.AwareOfFurtherInfections.HasValue) _mdh.AwareOfConditionsForFurtherInfections = mdh.AwareOfFurtherInfections.Value ? yorntype.Y : yorntype.N; - if (mdh.InfectedAreaDate.HasValue && !mdh.InfectedAreaPort.IsNullOrEmpty()) + if (mdh.InfectedAreas.Count > 0) { - _mdh.InfectedArea = new infectedarea(); - if (mdh.InfectedAreaDate.HasValue) - _mdh.InfectedArea.InfectedAreaDate = mdh.InfectedAreaDate.Value; - _mdh.InfectedArea.InfectedAreaPort = mdh.InfectedAreaPort; + _mdh.InfectedAreas = new infectedarea[mdh.InfectedAreas.Count]; + for (int i = 0; i < mdh.InfectedAreas.Count; i++) + { + _mdh.InfectedAreas[i] = new infectedarea(); + if (mdh.InfectedAreas[i].InfectedAreaDate.HasValue) + _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; if (mdh.MedicalConsulted.HasValue) @@ -670,13 +691,18 @@ 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; - if (mdh.SanitaryMeasuresDate.HasValue && !mdh.SanitaryMeasuresLocation.IsNullOrEmpty() && !mdh.SanitaryMeasuresType.IsNullOrEmpty()) + + if (mdh.SanitaryMeasuresDetails.Count > 0) { - _mdh.SanitaryMeasuresDetails = new sanitarydetails(); - if (mdh.SanitaryMeasuresDate.HasValue) - _mdh.SanitaryMeasuresDetails.SanitaryMeasuresDate = mdh.SanitaryMeasuresDate.Value; - _mdh.SanitaryMeasuresDetails.SanitaryMeasuresLocation = mdh.SanitaryMeasuresLocation; - _mdh.SanitaryMeasuresDetails.SanitaryMeasuresType = mdh.SanitaryMeasuresType; + _mdh.SanitaryMeasuresDetails = new sanitarydetail[mdh.SanitaryMeasuresDetails.Count]; + for (int i = 0; i < mdh.SanitaryMeasuresDetails.Count; i++) + { + _mdh.SanitaryMeasuresDetails[i] = new sanitarydetail(); + if (mdh.SanitaryMeasuresDetails[i].SanitaryMeasuresDate.HasValue) + _mdh.SanitaryMeasuresDetails[i].SanitaryMeasuresDate = mdh.SanitaryMeasuresDetails[i].SanitaryMeasuresDate.Value; + _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; @@ -684,9 +710,14 @@ namespace bsmd.hisnord _mdh.SickPersonOnBoard = mdh.SickPersonsOnBoard.Value ? yorntype.Y : yorntype.N; _mdh.StowawaysDetected = (mdh.StowawaysDetected ?? false) ? yorntype.Y : yorntype.N; - if(_mdh.StowawaysDetected == yorntype.Y) - _mdh.StowawayJoiningLocation = mdh.StowawaysJoiningLocation; - + 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; diff --git a/nsw/Source/bsmd.hisnord/readme.txt b/nsw/Source/bsmd.hisnord/readme.txt index 3d7533a5..e16f036b 100644 --- a/nsw/Source/bsmd.hisnord/readme.txt +++ b/nsw/Source/bsmd.hisnord/readme.txt @@ -1,4 +1,9 @@ -Spezialitäten bei HIS Nord (Stand 25.7.15) +Spezialitäten bei HIS Nord (Stand 17.4.16) + +Generell: Die Datenvorlage (XSD) wird per xsd.exe /classes aus den einzelnen Quelldateien generiert. Wir bekommen XSD 1.1 geliefert +(Java-Implementierung auf der Gegenseite), wofür es unter .NET keine Unterstützung gibt. Ich habe mich so beholfen, alle "ASSERT"s aus +dem XSD einfach zu löschen, damit funktioniert dann die Konvertierung. Allerdings verlieren wir dann die Validierung bei der Erzeugung. +-> Assert Prüfungen müssen in der zukünftigen Benutzerschnittstelle implementiert werden - "transmitter" wird verwendet um die erzeugten Daten an D&D zu schicken - eine Rückmeldung erfolgt direkt über das Transmitter-Tool (Verstoß gegen XSD) oder über Email an den Meldenden, das passiert