95 lines
4.6 KiB
C#
95 lines
4.6 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. 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)
|
|
{
|
|
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))
|
|
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) 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)
|
|
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) return false;
|
|
if ((atd.ATDPortOfCall.Value - DateTime.UtcNow).TotalMinutes > 60) return false;
|
|
if ((DateTime.UtcNow - atd.ATDPortOfCall.Value).TotalDays > 7) 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) return false;
|
|
if ((DateTime.UtcNow - ata.ATAPortOfCall.Value).TotalDays > 7) return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
}
|