From dccb6f178bc361f2739ed4deaae2f48100f34d42 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Mon, 26 Mar 2018 18:53:32 +0000 Subject: [PATCH] Version 5.0.5 --- ENI-2/ENI2/ENI2/App.config | 8 +- ENI-2/ENI2/ENI2/ENI2.csproj | 4 +- Stundensheet.xlsx | Bin 37045 -> 37114 bytes .../bsmd.ReportGenerator/BSMDDocument.cs | 3 + nsw/Source/bsmd.database/AGNT.cs | 2 +- nsw/Source/bsmd.database/IBCPosition.cs | 5 + .../Properties/AssemblyProductInfo.cs | 2 +- .../Properties/AssemblyProjectInfo.cs | 2 +- nsw/Source/bsmd.database/RuleEngine.cs | 6 +- .../bsmd.database/ValidationAttribute.cs | 1 + .../IResponseService.cs | 2 +- .../ResponseService.svc.cs | 2 +- nsw/Source/bsmd.dbh/NSWResponse.cs | 332 +++--------------- nsw/Source/bsmd.dbh/Request.cs | 44 ++- nsw/Source/bsmd.dbh/Response.cs | 64 +++- 15 files changed, 179 insertions(+), 298 deletions(-) diff --git a/ENI-2/ENI2/ENI2/App.config b/ENI-2/ENI2/ENI2/App.config index 807056b9..860add5f 100644 --- a/ENI-2/ENI2/ENI2/App.config +++ b/ENI-2/ENI2/ENI2/App.config @@ -26,12 +26,12 @@ 1000 - http://192.168.2.4/LockingService/LockingService.svc - + + http://heupferd/bsmd.LockingService/LockingService.svc - Data Source=192.168.2.12;Initial Catalog=nsw;Uid=dfuser;Pwd=dfpasswd;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False - + + Data Source=(localdb)\Projects;Initial Catalog=nsw;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False diff --git a/ENI-2/ENI2/ENI2/ENI2.csproj b/ENI-2/ENI2/ENI2/ENI2.csproj index c3afdae6..659a745b 100644 --- a/ENI-2/ENI2/ENI2/ENI2.csproj +++ b/ENI-2/ENI2/ENI2/ENI2.csproj @@ -35,8 +35,8 @@ 3.5.1.0 true publish.html - 1 - 5.0.4.%2a + 0 + 5.0.5.%2a false true true diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index 7f01adb36bbba17ec118b1b8a4f6ebb921e001f7..abcf2888cab4831fd9f484af8d6d4f04be964f2b 100644 GIT binary patch delta 22283 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

n0$Y3MhK7*&D#E%Gyin; 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 slfREW0 Attribute.IsDefined(prop, typeof(ValidationAttribute)))); // add "block" validation properties to check list - props.AddRange(objType.GetProperties().Where( prop => Attribute.IsDefined(prop, attribType)) ); + props.AddRange(objType.GetProperties().Where( prop => Attribute.IsDefined(prop, attribType)) ); + // alle "MaxLength" Properties hinzufügen die sonst keine Validierung haben + props.AddRange(objType.GetProperties().Where(prop => (!Attribute.IsDefined(prop, typeof(ValidationAttribute)) && + !Attribute.IsDefined(prop, attribType) && + Attribute.IsDefined(prop, typeof(MaxLengthAttribute))))); foreach (PropertyInfo property in props) { diff --git a/nsw/Source/bsmd.database/ValidationAttribute.cs b/nsw/Source/bsmd.database/ValidationAttribute.cs index 32e61b65..01906dcc 100644 --- a/nsw/Source/bsmd.database/ValidationAttribute.cs +++ b/nsw/Source/bsmd.database/ValidationAttribute.cs @@ -79,6 +79,7 @@ namespace bsmd.database V807 = 807, V808 = 808, V809 = 809, + V810 = 810, V821 = 821, } diff --git a/nsw/Source/bsmd.dbh.ResponseService/IResponseService.cs b/nsw/Source/bsmd.dbh.ResponseService/IResponseService.cs index 8ef2c266..e5ebb5f7 100644 --- a/nsw/Source/bsmd.dbh.ResponseService/IResponseService.cs +++ b/nsw/Source/bsmd.dbh.ResponseService/IResponseService.cs @@ -21,7 +21,7 @@ namespace bsmd.dbh.ResponseService bsmd.dbh.response.RootReportingClassesPartial ReportingClassesPartial, bsmd.dbh.response.RootReportingClassesError RootReportingClassesError, bsmd.dbh.response.RootReportingClassesResetted ReportingClassesResetted, - bsmd.dbh.response.Message[] Messages); + bsmd.dbh.response.RootMessage[] Messages); } diff --git a/nsw/Source/bsmd.dbh.ResponseService/ResponseService.svc.cs b/nsw/Source/bsmd.dbh.ResponseService/ResponseService.svc.cs index 5c3354b0..5e7a73cf 100644 --- a/nsw/Source/bsmd.dbh.ResponseService/ResponseService.svc.cs +++ b/nsw/Source/bsmd.dbh.ResponseService/ResponseService.svc.cs @@ -18,7 +18,7 @@ namespace bsmd.dbh.ResponseService bsmd.dbh.response.RootReportingClassesPartial ReportingClassesPartial, bsmd.dbh.response.RootReportingClassesError RootReportingClassesError, bsmd.dbh.response.RootReportingClassesResetted ReportingClassesResetted, - bsmd.dbh.response.Message[] Messages) + bsmd.dbh.response.RootMessage[] Messages) { // Der Fehler hier aktuell ist dass alles funktioniert, außer dass "Messages" nicht diff --git a/nsw/Source/bsmd.dbh/NSWResponse.cs b/nsw/Source/bsmd.dbh/NSWResponse.cs index 57a3f1e1..8394e93b 100644 --- a/nsw/Source/bsmd.dbh/NSWResponse.cs +++ b/nsw/Source/bsmd.dbh/NSWResponse.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // Dieser Code wurde von einem Tool generiert. -// Laufzeitversion:4.0.30319.34209 +// Laufzeitversion:4.0.30319.42000 // // Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn // der Code erneut generiert wird. @@ -11,13 +11,14 @@ using System.Xml.Serialization; // -// This source code was auto-generated by xsd, Version=4.0.30319.1. +// Dieser Quellcode wurde automatisch generiert von xsd, Version=4.6.1055.0. // + namespace bsmd.dbh.response { /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] @@ -34,8 +35,12 @@ namespace bsmd.dbh.response private string transitIdField; + private string[] sisNumbersField; + private System.DateTime timestampField; + private string senderReferenceField; + private RootType typeField; private RootReportingClassesFull reportingClassesFullField; @@ -46,7 +51,7 @@ namespace bsmd.dbh.response private RootReportingClassesResetted reportingClassesResettedField; - private Message[] messagesField; + private RootMessage[] messagesField; /// public string Version @@ -100,6 +105,20 @@ namespace bsmd.dbh.response } } + /// + [System.Xml.Serialization.XmlArrayItemAttribute("SisNumber", IsNullable = false)] + public string[] SisNumbers + { + get + { + return this.sisNumbersField; + } + set + { + this.sisNumbersField = value; + } + } + /// public System.DateTime Timestamp { @@ -113,6 +132,19 @@ namespace bsmd.dbh.response } } + /// + public string SenderReference + { + get + { + return this.senderReferenceField; + } + set + { + this.senderReferenceField = value; + } + } + /// public RootType Type { @@ -180,7 +212,7 @@ namespace bsmd.dbh.response /// [System.Xml.Serialization.XmlArrayItemAttribute("Message", IsNullable = false)] - public Message[] Messages + public RootMessage[] Messages { get { @@ -194,7 +226,7 @@ namespace bsmd.dbh.response } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] public enum RootType @@ -217,7 +249,7 @@ namespace bsmd.dbh.response } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] @@ -225,11 +257,11 @@ namespace bsmd.dbh.response public partial class RootReportingClassesFull { - private RootReportingClassesFullReportingClass[] reportingClassField; + private ReportingClassCode[] reportingClassField; /// [System.Xml.Serialization.XmlElementAttribute("ReportingClass")] - public RootReportingClassesFullReportingClass[] ReportingClass + public ReportingClassCode[] ReportingClass { get { @@ -243,10 +275,9 @@ namespace bsmd.dbh.response } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] - public enum RootReportingClassesFullReportingClass + public enum ReportingClassCode { /// @@ -261,6 +292,9 @@ namespace bsmd.dbh.response /// SEC, + /// + AGNT, + /// POBA, @@ -326,7 +360,7 @@ namespace bsmd.dbh.response } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] @@ -334,11 +368,11 @@ namespace bsmd.dbh.response public partial class RootReportingClassesPartial { - private RootReportingClassesPartialReportingClass[] reportingClassField; + private ReportingClassCode[] reportingClassField; /// [System.Xml.Serialization.XmlElementAttribute("ReportingClass")] - public RootReportingClassesPartialReportingClass[] ReportingClass + public ReportingClassCode[] ReportingClass { get { @@ -352,90 +386,7 @@ namespace bsmd.dbh.response } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] - public enum RootReportingClassesPartialReportingClass - { - - /// - 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, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] @@ -443,11 +394,11 @@ namespace bsmd.dbh.response public partial class RootReportingClassesError { - private RootReportingClassesErrorReportingClass[] reportingClassField; + private ReportingClassCode[] reportingClassField; /// [System.Xml.Serialization.XmlElementAttribute("ReportingClass")] - public RootReportingClassesErrorReportingClass[] ReportingClass + public ReportingClassCode[] ReportingClass { get { @@ -461,90 +412,7 @@ namespace bsmd.dbh.response } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] - public enum RootReportingClassesErrorReportingClass - { - - /// - 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, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] @@ -552,11 +420,11 @@ namespace bsmd.dbh.response public partial class RootReportingClassesResetted { - private RootReportingClassesResettedReportingClass[] reportingClassField; + private ReportingClassCode[] reportingClassField; /// [System.Xml.Serialization.XmlElementAttribute("ReportingClass")] - public RootReportingClassesResettedReportingClass[] ReportingClass + public ReportingClassCode[] ReportingClass { get { @@ -570,95 +438,12 @@ namespace bsmd.dbh.response } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] - public enum RootReportingClassesResettedReportingClass - { - - /// - 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, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] - public partial class Message + public partial class RootMessage { private string idField; @@ -723,7 +508,7 @@ namespace bsmd.dbh.response } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] public enum RootMessageType @@ -741,5 +526,4 @@ namespace bsmd.dbh.response /// ERROR, } - } \ No newline at end of file diff --git a/nsw/Source/bsmd.dbh/Request.cs b/nsw/Source/bsmd.dbh/Request.cs index 420eabbe..0c38b3fe 100644 --- a/nsw/Source/bsmd.dbh/Request.cs +++ b/nsw/Source/bsmd.dbh/Request.cs @@ -1249,7 +1249,27 @@ namespace bsmd.dbh rootIMDG.GeneralCargoIBC = imdgPos.GeneralCargoIBC.Value ? DBHWebReference.RootSECValidISSCOnBoard.Y : DBHWebReference.RootSECValidISSCOnBoard.N; rootIMDG.ContainerNumber = imdgPos.ContainerNumber; rootIMDG.VehicleLicenseNumber = imdgPos.VehicleLicenseNumber; - // rootIMDG.StowagePosition = imdgPos.StowagePosition; + + if (imdgPos.StowagePosition.IsNullOrEmpty()) + { + rootIMDG.Items = new string[3]; + rootIMDG.ItemsElementName = new ItemsChoiceType4[3]; + + rootIMDG.Items[0] = imdgPos.Bay; + rootIMDG.ItemsElementName[0] = ItemsChoiceType4.Bay; + + rootIMDG.Items[1] = imdgPos.Row; + rootIMDG.ItemsElementName[1] = ItemsChoiceType4.Row; + + rootIMDG.Items[2] = imdgPos.Tier; + rootIMDG.ItemsElementName[2] = ItemsChoiceType4.Tier; + } + else + { + rootIMDG.Items = new string[1] { imdgPos.StowagePosition }; + rootIMDG.ItemsElementName = new ItemsChoiceType4[1] { ItemsChoiceType4.StowagePosition }; + } + rootIMDG.PortOfLoading = imdgPos.PortOfLoading; rootIMDG.PortOfDischarge = imdgPos.PortOfDischarge; rootIMDG.Remarks = imdgPos.Remarks; @@ -1482,7 +1502,27 @@ namespace bsmd.dbh rootIMDG.GeneralCargoIBC = imdgPos.GeneralCargoIBC.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; rootIMDG.ContainerNumber = imdgPos.ContainerNumber; rootIMDG.VehicleLicenseNumber = imdgPos.VehicleLicenseNumber; - //rootIMDG.StowagePosition = imdgPos.StowagePosition; + + if (imdgPos.StowagePosition.IsNullOrEmpty()) + { + rootIMDG.Items = new string[3]; + rootIMDG.ItemsElementName = new ItemsChoiceType4[3]; + + rootIMDG.Items[0] = imdgPos.Bay; + rootIMDG.ItemsElementName[0] = ItemsChoiceType4.Bay; + + rootIMDG.Items[1] = imdgPos.Row; + rootIMDG.ItemsElementName[1] = ItemsChoiceType4.Row; + + rootIMDG.Items[2] = imdgPos.Tier; + rootIMDG.ItemsElementName[2] = ItemsChoiceType4.Tier; + } + else + { + rootIMDG.Items = new string[1] { imdgPos.StowagePosition }; + rootIMDG.ItemsElementName = new ItemsChoiceType4[1] { ItemsChoiceType4.StowagePosition }; + } + rootIMDG.PortOfLoading = imdgPos.PortOfLoading; rootIMDG.PortOfDischarge = imdgPos.PortOfDischarge; rootIMDG.Remarks = imdgPos.Remarks; diff --git a/nsw/Source/bsmd.dbh/Response.cs b/nsw/Source/bsmd.dbh/Response.cs index 299cd481..e69653f0 100644 --- a/nsw/Source/bsmd.dbh/Response.cs +++ b/nsw/Source/bsmd.dbh/Response.cs @@ -22,10 +22,10 @@ namespace bsmd.dbh private static ILog _log = LogManager.GetLogger("dbh Response"); public static void ProcessResponse(string VisitId, string TransitId, DateTime Timestamp, - string SenderReference, response.RootType Type, bsmd.dbh.response.Message[] Messages, + string SenderReference, response.RootType Type, bsmd.dbh.response.RootMessage[] Messages, bsmd.dbh.response.RootReportingClassesFull ReportingClassesFull, bsmd.dbh.response.RootReportingClassesPartial ReportingClassesPartial, - bsmd.dbh.response.RootReportingClassesError RootReportingClassesError, + bsmd.dbh.response.RootReportingClassesError ReportingClassesError, bsmd.dbh.response.RootReportingClassesResetted ReportingClassesResetted, string connectionString) { @@ -52,8 +52,14 @@ namespace bsmd.dbh } DatabaseEntity dbEntity = DBManager.Instance.GetMessageById(messageId); - if (dbEntity != null) + Message aMessage = dbEntity as Message; + + if (aMessage != null) + { _log.InfoFormat("Message type {0} found for SenderReference {1}", ((Message)dbEntity).MessageNotificationClassDisplay, messageId); + foreach (MessageError existingError in aMessage.ErrorList) + DBManager.Instance.Delete(existingError); + } MessageCore aCore = null; if (dbEntity == null) @@ -65,6 +71,7 @@ namespace bsmd.dbh aCore.BSMDStatusInternal = MessageCore.BSMDStatus.RESPONDED; aCore.Cancelled = true; DBManager.Instance.Save(aCore); + return; } } @@ -78,24 +85,28 @@ namespace bsmd.dbh { _log.WarnFormat("SenderReference DB Entity Object is no MessageHeader, aborting ({0})", dbEntity.GetType()); return; - } - Message aMessage = dbEntity as Message; + } switch (Type) { - case dbh.response.RootType.VISIT: - // neue VISIT - ID + case dbh.response.RootType.VISIT: + _log.InfoFormat("Visit-Id received: {0}", VisitId ?? "??!"); if(!VisitId.IsNullOrEmpty()) aMessage.MessageCore.VisitId = VisitId; aMessage.MessageCore.BSMDStatusInternal = MessageCore.BSMDStatus.PREPARE; aMessage.SendSuccess = true; DBManager.Instance.Save(aMessage.MessageCore); + aMessage.InternalStatus = Message.BSMDStatus.CONFIRMED; + DBManager.Instance.Save(aMessage); break; case dbh.response.RootType.TRANSIT: + _log.InfoFormat("Transit-Id received: {0}", TransitId ?? "??!"); aMessage.MessageCore.TransitId = TransitId; aMessage.MessageCore.BSMDStatusInternal = MessageCore.BSMDStatus.PREPARE; aMessage.SendSuccess = true; DBManager.Instance.Save(aMessage.MessageCore); + aMessage.InternalStatus = Message.BSMDStatus.CONFIRMED; + DBManager.Instance.Save(aMessage); break; case dbh.response.RootType.RESET: // Die Liste ist auch bei erfolgtem RESET offenbar immer NULL... @@ -116,15 +127,48 @@ namespace bsmd.dbh aMessage.SendSuccess = true; aMessage.InternalStatus = Message.BSMDStatus.CONFIRMED; aMessage.Status = Message.MessageStatus.ACCEPTED; - _log.InfoFormat("CONFIRMED"); + _log.InfoFormat("full message class accepted"); } - else + if ((ReportingClassesPartial != null) && (ReportingClassesPartial.ReportingClass.Length > 0)) { - _log.InfoFormat("no match"); + // this was successful, save status to MessageHeader + aMessage.SendSuccess = true; + aMessage.InternalStatus = Message.BSMDStatus.ERROR; + aMessage.Status = Message.MessageStatus.ACCEPTED; + _log.InfoFormat("partial message class accepted"); } + if ((ReportingClassesError != null) && (ReportingClassesError.ReportingClass.Length > 0)) + { + // this was successful, save status to MessageHeader + aMessage.SendSuccess = true; + aMessage.InternalStatus = Message.BSMDStatus.ERROR; + aMessage.Status = Message.MessageStatus.ACCEPTED; + _log.InfoFormat("message class accepted but error"); + } + + // check the whole thing for completion + MessageCore core = DBManager.Instance.GetMessageCoreById(aMessage.MessageCoreId.Value); + bool stillSomethingSent = false; + foreach(Message message in DBManager.Instance.GetMessagesForCore(core, DBManager.MessageLoad.ALL)) + { + if (aMessage.Id.Value == message.Id.Value) continue; + if(message.InternalStatus == Message.BSMDStatus.SENT) + { + stillSomethingSent = true; + break; + } + } + if(!stillSomethingSent && (core.BSMDStatusInternal == MessageCore.BSMDStatus.SENT)) + { + core.BSMDStatusInternal = MessageCore.BSMDStatus.RESPONDED; + DBManager.Instance.Save(core); + } + break; } + + if (Messages != null) { // Status zu den jeweiligen Nachrichten. Bei uns sollte die Anzahl hier immer 1 sein, da wir die Dinger