Highlighting erster Ansatz, immer weitere Korrekturen rund um HIS-Nord Versand
127 lines
5.8 KiB
C#
127 lines
5.8 KiB
C#
//
|
|
// 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
|
|
{
|
|
/// <summary>
|
|
/// Diese Methode entscheidet, ob die Nachrichtenklasse versendet werden soll oder nicht
|
|
/// Darin sind einige spezielle Festlegungen implementiert, die aus der Integrationsphase
|
|
/// kommen
|
|
/// </summary>
|
|
/// <returns>true falls Nachricht versendet werden soll</returns>
|
|
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.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)
|
|
{
|
|
HAZ haz = message.Elements[0] as HAZ;
|
|
if (haz != null)
|
|
{
|
|
if (haz.NoDPGOnBoardOnArrival ?? false)
|
|
{
|
|
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;
|
|
}
|
|
*/
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
}
|