// // Class: XtraSendLogic // Current CLR: 4.0.30319.42000 // System: Microsoft Visual Studio 10.0 // Author: dani // Created: 11/30/2015 7:48:46 AM // // Copyright (c) 2015 Informatikbüro Daniel Schick. All rights reserved. using System; using System.Collections.Generic; namespace bsmd.database { public class XtraSendLogic { /// /// Diese Methode entscheidet, ob die Nachrichtenklasse versendet werden soll oder nicht /// Darin sind einige spezielle Festlegungen implementiert, die aus der Integrationsphase /// kommen /// /// true falls Nachricht versendet werden soll public static bool ShouldSendMessage(Message message) { // zurückgestellte Nachrichten werden ignoriert if (message.InternalStatus == Message.BSMDStatus.SUSPENDED) return false; if (message.InternalStatus == Message.BSMDStatus.UNDEFINED) return false; // Wenn das ein Transit ist, werden nicht erforderliche Meldeklassen übersprungen if (message.MessageCore.IsTransit) { if ((message.MessageNotificationClass == Message.NotificationClass.BKRD) || (message.MessageNotificationClass == Message.NotificationClass.PRE72H) || (message.MessageNotificationClass == Message.NotificationClass.TIEFD) || (message.MessageNotificationClass == Message.NotificationClass.NAME) || (message.MessageNotificationClass == Message.NotificationClass.INFO) || (message.MessageNotificationClass == Message.NotificationClass.ATA) || (message.MessageNotificationClass == Message.NotificationClass.ATD) || (message.MessageNotificationClass == Message.NotificationClass.LADG) || (message.MessageNotificationClass == Message.NotificationClass.SERV) || (message.MessageNotificationClass == Message.NotificationClass.WAS) || (message.MessageNotificationClass == Message.NotificationClass.TOWD) || (message.MessageNotificationClass == Message.NotificationClass.HAZD) || // hinzugefügt nach Trello Karte 26.6.18 (message.MessageNotificationClass == Message.NotificationClass.STO)) { message.StatusInfo = "Meldeklasse bei Transitmeldung nicht versandt"; return false; } } // 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) { if (message.Elements[0] is HAZ haz) { if (!haz.HasPositions) // 15.11.17: "Im Grunde müsste nicht das Feld NoDPG der Auslöser für Suspend sein, sondern wenn keine Position in einer der Tabellen enthalten ist." { message.StatusInfo = "Meldeklasse nicht versandt: Kein Gefahrgut deklariert"; return false; } // Diese Einstellung wird im EU-NOAD Tool gemacht, muss bei anderen Quellen überarbeitet werden! // if (haz.TransmissionType != "EU-NOAD") return false; // Schiffe nach Hamburg keine Gefahrgutmeldung, geht über GEGIS (26.11.2015) // Nach Rückmeldung vom Test ENI-2 wieder entfernt (16.8.2017) // if (message.MessageCore.PoC.Equals("DEHAM")) return false; } } } // 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) { message.StatusInfo = "ATD ohne Zeitpunkt wird nicht versandt"; return false; } if ((atd.ATDPortOfCall.Value - DateTime.UtcNow).TotalMinutes > 60) { message.StatusInfo = "ATD mehr als 60 Minuten in der Zukunft!"; return false; } /* RM Christin entfernt 17.8.17 if ((DateTime.UtcNow - atd.ATDPortOfCall.Value).TotalDays > 7) { message.StatusInfo = "ATD älter als eine Woche!"; return false; } */ } } // 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) { message.StatusInfo = "ATA ohne Zeitpunkt wird nicht versandt"; return false; } /* RM Christin entfernt 17.8.17 if ((DateTime.UtcNow - ata.ATAPortOfCall.Value).TotalDays > 7) { message.StatusInfo = "ATA älter als eine Woche!"; return false; } */ } } if (message.MessageNotificationClass == Message.NotificationClass.TIEFA) { if (message.Elements.Count > 0) { bsmd.database.TIEFA tiefa = message.Elements[0] as bsmd.database.TIEFA; if (!tiefa.DraughtUponArrival_DMT.HasValue) { message.StatusInfo = "TIEFA without value"; return false; } } } if (message.MessageNotificationClass == Message.NotificationClass.TIEFD) { if (message.Elements.Count > 0) { bsmd.database.TIEFD tiefd = message.Elements[0] as bsmd.database.TIEFD; if (!tiefd.DraughtUponDeparture_DMT.HasValue) { message.StatusInfo = "TIEFD without value"; return false; } } } if (Message.IsListClass(message.MessageNotificationClass) && (message.Elements.Count == 0) && (!message.Reset)) { message.StatusInfo = "empty list message type"; return false; } return true; } } }