git_bsmd/nsw/Source/bsmd.database/XtraSendLogic.cs
Daniel Schick a9594e7702 Version 2.3.6.13:
Highlighting erster Ansatz, immer weitere Korrekturen rund um HIS-Nord Versand
2017-08-24 16:54:40 +00:00

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;
}
}
}