547 lines
37 KiB
C#
547 lines
37 KiB
C#
//
|
|
// Class: Util
|
|
// Current CLR: 4.0.30319.34209
|
|
// System: Microsoft Visual Studio 10.0
|
|
// Author: dani
|
|
// Created: 4/13/2015 10:42:13 PM
|
|
//
|
|
// Copyright (c) 2015 Informatikbüro Daniel Schick. All rights reserved.
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using log4net;
|
|
|
|
using bsmd.database;
|
|
|
|
namespace bsmd.herberg.FormService
|
|
{
|
|
public static class Util
|
|
{
|
|
private static ILog _log = LogManager.GetLogger(typeof(Util));
|
|
|
|
internal static void UpdateFormCore(MessageCore aMessageCore, WebReference.GetFormDataResponseData formResponse)
|
|
{
|
|
ReportingParty bsmdParty = null;
|
|
Dictionary<Guid, ReportingParty> repDict = DBManager.Instance.GetReportingPartyDict();
|
|
foreach (Guid key in repDict.Keys)
|
|
{
|
|
if (repDict[key].Name.Equals("BSMD"))
|
|
{
|
|
bsmdParty = repDict[key];
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
for (int i = 0; i < formResponse.formDatasets.Length; i++)
|
|
{
|
|
Dictionary<string, Dictionary<string, string>> groupedVals = new Dictionary<string, Dictionary<string, string>>();
|
|
WebReference.FormDataset fds = formResponse.formDatasets[i];
|
|
|
|
if (fds.startPeriodSpecified)
|
|
Trace.WriteLine(fds.startPeriod);
|
|
Trace.WriteLine(string.Format("Dataset {0}", i));
|
|
foreach(WebReference.FormData formData in fds.formData)
|
|
{
|
|
string[] nElems = formData.name.Split('.');
|
|
if (nElems.Length != 2)
|
|
{
|
|
_log.WarnFormat("Field name {0} has wrong format!", formData.name);
|
|
continue;
|
|
}
|
|
Trace.WriteLine(string.Format("Set:{0} Type:{1} Name:{2} Value:{3}", i, nElems[0], nElems[1], formData.value));
|
|
if (!groupedVals.ContainsKey(nElems[0]))
|
|
groupedVals[nElems[0]] = new Dictionary<string, string>();
|
|
groupedVals[nElems[0]][nElems[1]] = formData.value;
|
|
}
|
|
|
|
// jetzt können wir die Felder nach Nachrichtentyp abarbeiten
|
|
Dictionary<string, Message> messages = Util.PrepareMessageDict(aMessageCore);
|
|
|
|
foreach (string messageType in groupedVals.Keys)
|
|
{
|
|
Dictionary<string, string> vDict = groupedVals[messageType];
|
|
DatabaseEntity derivedMessage = null;
|
|
Message theMessage = null;
|
|
if (!messages.ContainsKey(messageType.ToUpper()))
|
|
{
|
|
theMessage = new Message();
|
|
if (messageType.Equals("HAZ")) continue; // HE spezial, sollte HAZA o. HAZD sein
|
|
if (messageType.Equals("Agency"))
|
|
{
|
|
if (aMessageCore.Customer == null) aMessageCore.Customer = new Customer();
|
|
|
|
if (vDict.ContainsKey("Name")) aMessageCore.Customer.Name = vDict["Name"];
|
|
if (vDict.ContainsKey("Phone")) aMessageCore.Customer.Phone = vDict["Phone"];
|
|
if (vDict.ContainsKey("Email")) aMessageCore.Customer.Email = vDict["Email"];
|
|
if (vDict.ContainsKey("ContactFirstName")) aMessageCore.Customer.ContactFirstName = vDict["ContactFirstName"];
|
|
if (vDict.ContainsKey("ContactLastName")) aMessageCore.Customer.ContactLastName = vDict["ContactLastName"];
|
|
|
|
continue; // das Zeug verhält sich wie eine Not. Class
|
|
}
|
|
theMessage.MessageNotificationClass = (Message.NotificationClass) Enum.Parse(typeof(Message.NotificationClass), messageType, true);
|
|
theMessage.MessageCoreId = aMessageCore.Id;
|
|
theMessage.MessageCore = aMessageCore;
|
|
if (bsmdParty != null)
|
|
theMessage.ReportingParty = bsmdParty;
|
|
}
|
|
else
|
|
{
|
|
_log.InfoFormat("found message type {0}", messageType);
|
|
theMessage = messages[messageType.ToUpper()];
|
|
}
|
|
|
|
switch (messageType)
|
|
{
|
|
case "ATA":
|
|
{
|
|
if (theMessage.Elements.Count == 0)
|
|
{
|
|
ATA newATA = new ATA();
|
|
newATA.MessageHeader = theMessage;
|
|
theMessage.MessageNotificationClass = Message.NotificationClass.ATA;
|
|
theMessage.Elements.Add(newATA);
|
|
}
|
|
ATA ata = theMessage.Elements[0] as ATA;
|
|
derivedMessage = ata;
|
|
if (ata != null)
|
|
{
|
|
try
|
|
{
|
|
if (vDict.ContainsKey("ATAPortOfCall")) ata.ATAPortOfCall = DateTime.Parse(vDict["ATAPortOfCall"]);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_log.ErrorFormat("Error reading ATA fields: {0}", ex.Message);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "ATD":
|
|
{
|
|
if (theMessage.Elements.Count == 0)
|
|
{
|
|
ATD newATD = new ATD();
|
|
newATD.MessageHeader = theMessage;
|
|
theMessage.MessageNotificationClass = Message.NotificationClass.ATD;
|
|
theMessage.Elements.Add(newATD);
|
|
}
|
|
ATD atd = theMessage.Elements[0] as ATD;
|
|
derivedMessage = atd;
|
|
if (atd != null)
|
|
{
|
|
try
|
|
{
|
|
if(vDict.ContainsKey("ATDPortOfCall")) atd.ATDPortOfCall = DateTime.Parse(vDict["ATDPortOfCall"]);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_log.ErrorFormat("Error reading ATD fields: {0}", ex.Message);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "NOA_NOD":
|
|
{
|
|
if (theMessage.Elements.Count == 0)
|
|
{
|
|
NOA_NOD newNOA_NOD = new NOA_NOD();
|
|
newNOA_NOD.MessageHeader = theMessage;
|
|
theMessage.MessageNotificationClass = Message.NotificationClass.NOA_NOD;
|
|
theMessage.Elements.Add(newNOA_NOD);
|
|
}
|
|
NOA_NOD noa_nod = theMessage.Elements[0] as NOA_NOD;
|
|
derivedMessage = noa_nod;
|
|
if (noa_nod != null)
|
|
{
|
|
try
|
|
{
|
|
if (vDict.ContainsKey("CallPurposeCode")) noa_nod.CallPurposeCode = Int32.Parse(vDict["CallPurposeCode"]);
|
|
if (vDict.ContainsKey("ETAToNextPort")) noa_nod.ETAToNextPort = DateTime.Parse(vDict["ETAToNextPort"]);
|
|
if (vDict.ContainsKey("ETDFromLastPort")) noa_nod.ETDFromLastPort = DateTime.Parse(vDict["ETDFromLastPort"]);
|
|
if (vDict.ContainsKey("ETAToPortOfCall")) noa_nod.ETAToPortOfCall = DateTime.Parse(vDict["ETAToPortOfCall"]);
|
|
if (vDict.ContainsKey("ETDFromPortOfCall")) noa_nod.ETDFromPortOfCall = DateTime.Parse(vDict["ETDFromPortOfCall"]);
|
|
if (vDict.ContainsKey("CallPurposeDescription")) noa_nod.CallPurposeDescription = vDict["CallPurposeDescription"];
|
|
// if(vDict.ContainsKey("CountryOfNextPort")) noa_nod. nicht relevant
|
|
if (vDict.ContainsKey("ETAToKielCanal")) noa_nod.ETAToKielCanal = DateTime.Parse(vDict["ETAToKielCanal"]);
|
|
if (vDict.ContainsKey("ETDFromKielCanal")) noa_nod.ETDFromKielCanal = DateTime.Parse(vDict["ETDFromKielCanal"]);
|
|
if (vDict.ContainsKey("CountryCodeOfLastPort") && vDict.ContainsKey("LastPortCode"))
|
|
noa_nod.LastPort = vDict["CountryCodeOfLastPort"] + vDict["LastPortCode"];
|
|
if (vDict.ContainsKey("CountryCodeOfNextPort") && vDict.ContainsKey("NextPortCode"))
|
|
noa_nod.NextPort = vDict["CountryCodeOfNextPort"] + vDict["NextPortCode"];
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_log.ErrorFormat("Error reading NOA_NOD fields: {0}", ex.Message);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "STAT":
|
|
if(theMessage.Elements.Count == 0) {
|
|
STAT newStat = new STAT();
|
|
newStat.MessageHeader = theMessage;
|
|
theMessage.MessageNotificationClass = Message.NotificationClass.STAT;
|
|
theMessage.Elements.Add(newStat);
|
|
}
|
|
STAT stat = theMessage.Elements[0] as STAT;
|
|
derivedMessage = stat;
|
|
if(stat != null) {
|
|
try
|
|
{
|
|
if (vDict.ContainsKey("ShipName")) stat.ShipName = vDict["ShipName"];
|
|
if (vDict.ContainsKey("CallSign")) stat.CallSign = vDict["CallSign"];
|
|
if (vDict.ContainsKey("MMSINumber")) stat.MMSINumber = vDict["MMSINumber"];
|
|
if (vDict.ContainsKey("Flag")) stat.Flag = vDict["Flag"];
|
|
if (vDict.ContainsKey("ShipType")) stat.ShipType = vDict["ShipType"];
|
|
if (vDict.ContainsKey("LengthOverall_MTR")) stat.LengthOverall_MTR = (float)Double.Parse(vDict["LengthOverall_MTR"]);
|
|
if (vDict.ContainsKey("Beam_MTR")) stat.Beam_MTR = (float)Double.Parse(vDict["Beam_MTR"]);
|
|
if (vDict.ContainsKey("GrossTonnage")) stat.GrossTonnage = Int32.Parse(vDict["GrossTonnage"]);
|
|
// if (vDict.ContainsKey("PortNameOfRegistry")) stat.PortOfRegistry = vDict["PortNameOfRegistry"]; // existiert nicht
|
|
if (vDict.ContainsKey("InmarsatCallNumber")) stat.InmarsatCallNumber = vDict["InmarsatCallNumber"];
|
|
// if(vDict.ContainsKey("CountryOfRegistry")) stat.r // existiert nicht in spec
|
|
if (vDict.ContainsKey("PortCodeOfRegistry") && vDict.ContainsKey("CountryCodeOfRegistry"))
|
|
stat.PortOfRegistry = vDict["CountryCodeOfRegistry"] + vDict["PortCodeOfRegistry"];
|
|
if (vDict.ContainsKey("ShipTypeCode")) stat.ShipType = vDict["ShipTypeCode"];
|
|
if (vDict.ContainsKey("ISMCompanyName")) stat.ISMCompanyName = vDict["ISMCompanyName"];
|
|
if (vDict.ContainsKey("ISMCompanyId")) stat.ISMCompanyId = vDict["ISMCompanyId"];
|
|
if (vDict.ContainsKey("ISMCompanyStreetAndNumber")) stat.ISMCompanyStreetAndNumber = vDict["ISMCompanyStreetAndNumber"];
|
|
if (vDict.ContainsKey("ISMCompanyPostalCode")) stat.ISMCompanyPostalCode = vDict["ISMCompanyPostalCode"];
|
|
if (vDict.ContainsKey("ISMCompanyCity")) stat.ISMCompanyCity = vDict["ISMCompanyCity"];
|
|
if (vDict.ContainsKey("ISMCompanyCountry")) stat.ISMCompanyCountry = vDict["ISMCompanyCountry"];
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_log.ErrorFormat("Error reading STAT fields: {0}", ex.Message);
|
|
}
|
|
}
|
|
break;
|
|
case "MDH":
|
|
{
|
|
if (theMessage.Elements.Count == 0)
|
|
{
|
|
MDH newMDH = new MDH();
|
|
newMDH.MessageHeader = theMessage;
|
|
theMessage.MessageNotificationClass = Message.NotificationClass.MDH;
|
|
theMessage.Elements.Add(newMDH);
|
|
}
|
|
MDH mdh = theMessage.Elements[0] as MDH;
|
|
derivedMessage = mdh;
|
|
if (mdh != null)
|
|
{
|
|
try
|
|
{
|
|
if (vDict.ContainsKey("SickAnimalOrPetOnBoard")) mdh.SickAnimalOrPetOnBoard = vDict["SickAnimalOrPetOnBoard"].Equals("Y");
|
|
if (vDict.ContainsKey("Simplification")) mdh.MDHSimplification = vDict["Simplification"].Equals("Y");
|
|
if (vDict.ContainsKey("SanitaryMeasuresApplied")) mdh.SanitaryMeasuresApplied = vDict["SanitaryMeasuresApplied"].Equals("Y");
|
|
if (vDict.ContainsKey("NonAccidentialDeathsDuringVoyage")) mdh.NonAccidentalDeathsDuringVoyage = vDict["NonAccidentialDeathsDuringVoyage"].Equals("Y");
|
|
if (vDict.ContainsKey("SuspisionInfectiousNature")) mdh.SuspisionInfectiousNature = vDict["SuspisionInfectiousNature"].Equals("Y");
|
|
if (vDict.ContainsKey("NumberOfIllPersonsHigherThanExpected")) mdh.NumberOfIllPersonsHigherThanExpected = vDict["NumberOfIllPersonsHigherThanExpected"].Equals("Y");
|
|
if (vDict.ContainsKey("SickPersonsOnBoard")) mdh.SickPersonsOnBoard = vDict["SickPersonsOnBoard"].Equals("Y");
|
|
if (vDict.ContainsKey("MedicalConsulted")) mdh.MedicalConsulted = vDict["MedicalConsulted"].Equals("Y");
|
|
if (vDict.ContainsKey("AwareOfConditionsForFurtherInfections")) mdh.AwareOfFurtherInfections = vDict["AwareOfConditionsForFurtherInfections"].Equals("Y");
|
|
if (vDict.ContainsKey("ValidSanitaryControlExemptionOrCertificateOnBoard")) mdh.ValidSanitaryControlExemptionOrCertificateOnBoard = vDict["ValidSanitaryControlExemptionOrCertificateOnBoard"].Equals("Y");
|
|
if (vDict.ContainsKey("SanitaryControlReinspectionRequired")) mdh.SanitaryControlReinspectionRequired = vDict["SanitaryControlReinspectionRequired"].Equals("Y");
|
|
if (vDict.ContainsKey("InfectedAreaVisited")) mdh.InfectedAreaVisited = vDict["InfectedAreaVisited"].Equals("Y");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_log.ErrorFormat("Error reading MDH fields: {0}", ex.Message);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "POBA":
|
|
{
|
|
if (theMessage.Elements.Count == 0)
|
|
{
|
|
POBA newPOBA = new POBA();
|
|
newPOBA.MessageHeader = theMessage;
|
|
theMessage.MessageNotificationClass = Message.NotificationClass.POBA;
|
|
theMessage.Elements.Add(newPOBA);
|
|
}
|
|
POBA poba = theMessage.Elements[0] as POBA;
|
|
derivedMessage = poba;
|
|
if (poba != null)
|
|
{
|
|
try
|
|
{
|
|
if (vDict.ContainsKey("TotalPersonsOnBoardUponArrival")) poba.TotalPersonsOnBoardUponArrival = Int32.Parse(vDict["TotalPersonsOnBoardUponArrival"]);
|
|
if (vDict.ContainsKey("TotalCrewMembersOnBoardUponArrival")) poba.TotalCrewMembersOnBoardUponArrival = Int32.Parse(vDict["TotalCrewMembersOnBoardUponArrival"]);
|
|
if (vDict.ContainsKey("TotalPassengersOnBoardUponArrival")) poba.TotalPassengersOnBoardUponArrival = Int32.Parse(vDict["TotalPassengersOnBoardUponArrival"]);
|
|
if (vDict.ContainsKey("TotalStowawaysOnBoardUponArrival")) poba.TotalStowawaysOnBoardUponArrival = Int32.Parse(vDict["TotalStowawaysOnBoardUponArrival"]);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_log.ErrorFormat("Error reading POBA fields: {0}", ex.Message);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "POBD":
|
|
{
|
|
if (theMessage.Elements.Count == 0)
|
|
{
|
|
POBD newPOBD = new POBD();
|
|
newPOBD.MessageHeader = theMessage;
|
|
theMessage.MessageNotificationClass = Message.NotificationClass.POBD;
|
|
theMessage.Elements.Add(newPOBD);
|
|
}
|
|
POBD pobd = theMessage.Elements[0] as POBD;
|
|
derivedMessage = pobd;
|
|
if (pobd != null)
|
|
{
|
|
try
|
|
{
|
|
if (vDict.ContainsKey("TotalPersonsOnBoardUponDeparture")) pobd.TotalPersonsOnBoardUponDeparture = Int32.Parse(vDict["TotalPersonsOnBoardUponDeparture"]);
|
|
if (vDict.ContainsKey("TotalCrewMembersOnBoardUponDeparture")) pobd.TotalCrewMembersOnBoardUponDeparture = Int32.Parse(vDict["TotalCrewMembersOnBoardUponDeparture"]);
|
|
if (vDict.ContainsKey("TotalPassengersOnBoardUponDeparture")) pobd.TotalPassengersOnBoardUponDeparture = Int32.Parse(vDict["TotalPassengersOnBoardUponDeparture"]);
|
|
if (vDict.ContainsKey("TotalStowawaysOnBoardUponDeparture")) pobd.TotalStowawaysOnBoardUponDeparture = Int32.Parse(vDict["TotalStowawaysOnBoardUponDeparture"]);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_log.ErrorFormat("Error reading POBA fields: {0}", ex.Message);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "BKRA":
|
|
{
|
|
if (theMessage.Elements.Count == 0)
|
|
{
|
|
BRKA newBRKA = new BRKA();
|
|
newBRKA.MessageHeader = theMessage;
|
|
theMessage.MessageNotificationClass = Message.NotificationClass.BKRA;
|
|
theMessage.Elements.Add(newBRKA);
|
|
}
|
|
BRKA bkra = theMessage.Elements[0] as BRKA;
|
|
derivedMessage = bkra;
|
|
if (bkra != null)
|
|
{
|
|
try
|
|
{
|
|
if (vDict.ContainsKey("BunkerFuelType")) bkra.BunkerFuelType = vDict["BunkerFuelType"];
|
|
if (vDict.ContainsKey("BunkerFuelQuantity_TNE")) bkra.BunkerFuelQuantity_TNE = (float)Double.Parse(vDict["BunkerFuelQuantity_TNE"]);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_log.ErrorFormat("Error reading BKRA fields: {0}", ex.Message);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "BKRD":
|
|
{
|
|
if (theMessage.Elements.Count == 0)
|
|
{
|
|
BRKD newBRKD = new BRKD();
|
|
newBRKD.MessageHeader = theMessage;
|
|
theMessage.MessageNotificationClass = Message.NotificationClass.BKRD;
|
|
theMessage.Elements.Add(newBRKD);
|
|
}
|
|
BRKD bkrd = theMessage.Elements[0] as BRKD;
|
|
derivedMessage = bkrd;
|
|
if (bkrd != null)
|
|
{
|
|
try
|
|
{
|
|
if (vDict.ContainsKey("BunkerFuelType")) bkrd.BunkerFuelType = vDict["BunkerFuelType"];
|
|
if (vDict.ContainsKey("BunkerFuelQuantity_TNE")) bkrd.BunkerFuelQuantity_TNE = (float)Double.Parse(vDict["BunkerFuelQuantity_TNE"]);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_log.ErrorFormat("Error reading BKRD fields: {0}", ex.Message);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "WAS":
|
|
|
|
break;
|
|
case "Visit":
|
|
{
|
|
theMessage.MessageNotificationClass = Message.NotificationClass.VISIT;
|
|
if (vDict.ContainsKey("PortNameOfCall")) aMessageCore.Portname = vDict["PortNameOfCall"];
|
|
if (vDict.ContainsKey("PortOfCall")) aMessageCore.PoC = "DE" + vDict["PortOfCall"];
|
|
if (vDict.ContainsKey("TransitKielCanal")) aMessageCore.IsTransit = vDict["TransitKielCanal"].Equals("Y");
|
|
if (vDict.ContainsKey("ETAPortOfCall")) aMessageCore.ETA = DateTime.Parse(vDict["ETAPortOfCall"]);
|
|
|
|
|
|
}
|
|
break;
|
|
case "Transit":
|
|
{
|
|
theMessage.MessageNotificationClass = Message.NotificationClass.TRANSIT;
|
|
|
|
}
|
|
break;
|
|
case "TOWA":
|
|
if(theMessage.Elements.Count == 0) {
|
|
TOWA newTOWA = new TOWA();
|
|
newTOWA.MessageHeader = theMessage;
|
|
theMessage.MessageNotificationClass = Message.NotificationClass.TOWA;
|
|
theMessage.Elements.Add(newTOWA);
|
|
}
|
|
TOWA towa = theMessage.Elements[0] as TOWA;
|
|
derivedMessage = towa;
|
|
if (towa != null)
|
|
{
|
|
try
|
|
{
|
|
if (vDict.ContainsKey("TowageOnArrivalBeam_MTR")) towa.TowageOnArrivalBeam_MTR = (float)Double.Parse(vDict["TowageOnArrivalBeam_MTR"]);
|
|
if (vDict.ContainsKey("TowageOnArrivalDraught_DMT")) towa.TowageOnArrivalDraught_DMT = (float)Double.Parse(vDict["TowageOnArrivalDraught_DMT"]);
|
|
if (vDict.ContainsKey("TowageOnArrivalLengthOverall_MTR")) towa.TowageOnArrivalLengthOverall_MTR = (float)Double.Parse(vDict["TowageOnArrivalLengthOverall_MTR"]);
|
|
if (vDict.ContainsKey("TowageOnArrivalGrossTonnage")) towa.TowageOnArrivalGrossTonnage = Int32.Parse(vDict["TowageOnArrivalGrossTonnage"]);
|
|
if (vDict.ContainsKey("TowageOnArrivalOperatorCountry")) towa.TowageOnArrivalOperatorCountry = vDict["TowageOnArrivalOperatorCountry"];
|
|
if (vDict.ContainsKey("TowageOnArrivalPurposeOfCall")) towa.TowageOnArrivalPurposeOfCall = vDict["TowageOnArrivalPurposeOfCall"];
|
|
if (vDict.ContainsKey("TowageOnArrivalName")) towa.TowageOnArrivalName = vDict["TowageOnArrivalName"];
|
|
if (vDict.ContainsKey("TowageOnArrivalFlag")) towa.TowageOnArrivalFlag = vDict["TowageOnArrivalFlag"];
|
|
if (vDict.ContainsKey("TowageOnArrivalOperatorCompanyName")) towa.TowageOnArrivalOperatorCompanyName = vDict["TowageOnArrivalOperatorCompanyName"];
|
|
if (vDict.ContainsKey("TowageOnArrivalOperatorStreetAndNumber")) towa.TowageOnArrivalOperatorStreetNameAndNumber = vDict["TowageOnArrivalOperatorStreetAndNumber"];
|
|
if (vDict.ContainsKey("TowageOnArrivalOperatorPostalCode")) towa.TowageOnArrivalOperatorPostalCode = vDict["TowageOnArrivalOperatorPostalCode"];
|
|
if (vDict.ContainsKey("TowageOnArrivalOperatorCity")) towa.TowageOnArrivalOperatorCity = vDict["TowageOnArrivalOperatorCity"];
|
|
if (vDict.ContainsKey("TowageOnArrivalOperatorPhone")) towa.TowageOnArrivalOperatorPhone = vDict["TowageOnArrivalOperatorPhone"];
|
|
if (vDict.ContainsKey("TowageOnArrivalOperatorFax")) towa.TowageOnArrivalOperatorFax = vDict["TowageOnArrivalOperatorFax"];
|
|
if (vDict.ContainsKey("TowageOnArrivalOperatorEmail")) towa.TowageOnArrivalOperatorEmail = vDict["TowageOnArrivalOperatorEmail"];
|
|
if (vDict.ContainsKey("TowageOnArrivalRemarks")) towa.TowageOnArrivalRemarks = vDict["TowageOnArrivalRemarks"];
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_log.ErrorFormat("Error reading TOWA fields: {0}", ex.Message);
|
|
}
|
|
}
|
|
break;
|
|
case "TOWD":
|
|
if (theMessage.Elements.Count == 0)
|
|
{
|
|
TOWD newTOWD = new TOWD();
|
|
newTOWD.MessageHeader = theMessage;
|
|
theMessage.MessageNotificationClass = Message.NotificationClass.TOWD;
|
|
theMessage.Elements.Add(newTOWD);
|
|
}
|
|
TOWD towd = theMessage.Elements[0] as TOWD;
|
|
derivedMessage = towd;
|
|
if (towd != null)
|
|
{
|
|
try
|
|
{
|
|
if (vDict.ContainsKey("TowageOnDepartureBeam_MTR")) towd.TowageOnDepartureBeam_MTR = (float)Double.Parse(vDict["TowageOnDepartureBeam_MTR"]);
|
|
if (vDict.ContainsKey("TowageOnDepartureDraught_DMT")) towd.TowageOnDepartureDraught_DMT = (float)Double.Parse(vDict["TowageOnDepartureDraught_DMT"]);
|
|
if (vDict.ContainsKey("TowageOnDepartureLengthOverall_MTR")) towd.TowageOnDepartureLengthOverall_MTR = (float)Double.Parse(vDict["TowageOnDepartureLengthOverall_MTR"]);
|
|
if (vDict.ContainsKey("TowageOnDepartureGrossTonnage")) towd.TowageOnDepartureGrossTonnage = Int32.Parse(vDict["TowageOnDepartureGrossTonnage"]);
|
|
if (vDict.ContainsKey("TowageOnDepartureOperatorCountry")) towd.TowageOnDepartureOperatorCountry = vDict["TowageOnDepartureOperatorCountry"];
|
|
if (vDict.ContainsKey("TowageOnDeparturePurposeOfCall")) towd.TowageOnDeparturePurposeOfCall = vDict["TowageOnDeparturePurposeOfCall"];
|
|
if (vDict.ContainsKey("TowageOnDepartureName")) towd.TowageOnDepartureName = vDict["TowageOnDepartureName"];
|
|
if (vDict.ContainsKey("TowageOnDepartureFlag")) towd.TowageOnDepartureFlag = vDict["TowageOnDepartureFlag"];
|
|
if (vDict.ContainsKey("TowageOnDepartureOperatorCompanyName")) towd.TowageOnDepartureOperatorCompanyName = vDict["TowageOnDepartureOperatorCompanyName"];
|
|
if (vDict.ContainsKey("TowageOnDepartureOperatorStreetAndNumber")) towd.TowageOnDepartureOperatorStreetNameAndNumber = vDict["TowageOnDepartureOperatorStreetAndNumber"];
|
|
if (vDict.ContainsKey("TowageOnDepartureOperatorPostalCode")) towd.TowageOnDepartureOperatorPostalCode = vDict["TowageOnDepartureOperatorPostalCode"];
|
|
if (vDict.ContainsKey("TowageOnDepartureOperatorCity")) towd.TowageOnDepartureOperatorCity = vDict["TowageOnDepartureOperatorCity"];
|
|
if (vDict.ContainsKey("TowageOnDepartureOperatorPhone")) towd.TowageOnDepartureOperatorPhone = vDict["TowageOnDepartureOperatorPhone"];
|
|
if (vDict.ContainsKey("TowageOnDepartureOperatorFax")) towd.TowageOnDepartureOperatorFax = vDict["TowageOnDepartureOperatorFax"];
|
|
if (vDict.ContainsKey("TowageOnDepartureOperatorEmail")) towd.TowageOnDepartureOperatorEmail = vDict["TowageOnDepartureOperatorEmail"];
|
|
if (vDict.ContainsKey("TowageOnDepartureRemarks")) towd.TowageOnDepartureRemarks = vDict["TowageOnDepartureRemarks"];
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_log.ErrorFormat("Error reading TOWA fields: {0}", ex.Message);
|
|
}
|
|
}
|
|
break;
|
|
case "TIEFA":
|
|
{
|
|
if (theMessage.Elements.Count == 0)
|
|
{
|
|
TIEFA newTIEFA = new TIEFA();
|
|
newTIEFA.MessageHeader = theMessage;
|
|
theMessage.MessageNotificationClass = Message.NotificationClass.TIEFA;
|
|
theMessage.Elements.Add(newTIEFA);
|
|
}
|
|
TIEFA tiefa = theMessage.Elements[0] as TIEFA;
|
|
derivedMessage = tiefa;
|
|
if (tiefa != null)
|
|
{
|
|
try
|
|
{
|
|
if (vDict.ContainsKey("DraughtUponArrival_DMT")) tiefa.DraughtUponArrival_DMT = (float)Double.Parse(vDict["DraughtUponArrival_DMT"]);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_log.ErrorFormat("Error reading TIEFA fields: {0}", ex.Message);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case "TIEFD":
|
|
{
|
|
if (theMessage.Elements.Count == 0)
|
|
{
|
|
TIEFD newTIEFD = new TIEFD();
|
|
newTIEFD.MessageHeader = theMessage;
|
|
theMessage.MessageNotificationClass = Message.NotificationClass.TIEFD;
|
|
theMessage.Elements.Add(newTIEFD);
|
|
}
|
|
TIEFD tiefd = theMessage.Elements[0] as TIEFD;
|
|
derivedMessage = tiefd;
|
|
if (tiefd != null)
|
|
{
|
|
try
|
|
{
|
|
if (vDict.ContainsKey("DraughtUponDeparture_DMT")) tiefd.DraughtUponDeparture_DMT = (float)Double.Parse(vDict["DraughtUponDeparture_DMT"]);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_log.ErrorFormat("Error reading TIEFD fields: {0}", ex.Message);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Die Logik dient dazu, dass bei "leeren" Nachrichten (also z.B. MDH ohne MDH Infos) nicht nur der
|
|
// Header gespeichert wird und danach in der Luft hängt
|
|
if ((theMessage.MessageNotificationClass == Message.NotificationClass.VISIT) ||
|
|
(theMessage.MessageNotificationClass == Message.NotificationClass.TRANSIT) ||
|
|
(derivedMessage != null))
|
|
{
|
|
DBManager.Instance.Save(theMessage);
|
|
if (derivedMessage != null)
|
|
DBManager.Instance.Save(derivedMessage);
|
|
}
|
|
}
|
|
|
|
DBManager.Instance.Save(aMessageCore); // warum?
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Aufbereitung eines Dictionaries: Nachrichtentyp (aus Feld-Präfixen) zu eigentlichen Nachrichten
|
|
/// </summary>
|
|
private static Dictionary<string, Message> PrepareMessageDict(MessageCore aMessageCore)
|
|
{
|
|
List<Message> messages = DBManager.Instance.GetMessagesForCore(aMessageCore);
|
|
Dictionary<string, Message> result = new Dictionary<string, Message>();
|
|
_log.InfoFormat("Core has {0} messages", messages.Count);
|
|
foreach (Message message in messages)
|
|
{
|
|
if (!result.ContainsKey(message.MessageNotificationClass.ToString()))
|
|
{
|
|
result.Add(message.MessageNotificationClass.ToString(), message);
|
|
}
|
|
else
|
|
{
|
|
// es gibt schon einen Nachricht mit diesem Typ.
|
|
// Das kann nur der Fall sein wenn es schon eine Cancel/Reset Nachricht gegeben hat. In diesem Fall wird eine
|
|
// Nachricht überschrieben, wenn beide Flags nicht gesetzt sind
|
|
if (!message.Reset && !message.Cancel)
|
|
{
|
|
result[message.MessageNotificationClass.ToString()] = message;
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
}
|