2.3, Version vor Besuch in Bremen Sept 2015

This commit is contained in:
Daniel Schick 2015-09-26 19:14:37 +00:00
parent d280fd9570
commit 646f356053
24 changed files with 919 additions and 294 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -36,6 +36,7 @@ namespace SendNSWMessageService
this.EventLog.Log = "Application";
this.Init(args);
this.EventLog.WriteEntry("NSW Send Service started.", EventLogEntryType.Information);
_log.Info("NSW Send Service started");
this.DoOnce();
}
@ -100,6 +101,7 @@ namespace SendNSWMessageService
(message.InternalStatus == Message.BSMDStatus.PREPARE) ||
(message.InternalStatus == Message.BSMDStatus.TOSEND))
{
_log.Debug("Visit/Transit not found, SENDING VISIT/TRANSIT message");
if (message.HIS == Message.NSWProvider.UNDEFINED)
message.HIS = core.InitialHIS;
toSendMessageList.Add(message);
@ -109,14 +111,18 @@ namespace SendNSWMessageService
}
else // eine VISIT/TRANSIT Id ist vorhanden, die Daten können gesendet werden
{
// versendet werden nur die Nachrichten, die den Status "UNDEFINED", "PREPARE" und "TOSEND" haben
// diese wurden entweder von EU-NOAD angelegt oder durch den Melder bearbeitet
// Wichtig ist eine erfolgreich versendete Meldung nicht erneut zu versenden
// Änderung Sept 15: versendet werden alle Nachrichten, die *nicht* bestätigt sind
// also auch alles was auf in bearbeitung / Korrektur etc steht
// Einzig bleibt die Frage offen, was mit Nachrichten passiert, die über das UI
// nachträglich geändert werden. Ich denke hier muss in dashface ggf. der Status
// wieder auf PREPARE gesetzt werden
_log.Debug("Visit/Transit found, SENDING DATA messages");
foreach (Message message in messages)
{
if ((message.InternalStatus == Message.BSMDStatus.UNDEFINED) ||
(message.InternalStatus == Message.BSMDStatus.PREPARE) ||
(message.InternalStatus == Message.BSMDStatus.TOSEND))
// T
if (message.InternalStatus != Message.BSMDStatus.CONFIRMED)
//(message.InternalStatus == Message.BSMDStatus.PREPARE) ||
//(message.InternalStatus == Message.BSMDStatus.TOSEND))
{
if (message.HIS == Message.NSWProvider.UNDEFINED)
message.HIS = core.InitialHIS;
@ -177,6 +183,12 @@ namespace SendNSWMessageService
_log.ErrorFormat("SENDING message {0}: {1}", message.Id.ToString(), ex.Message);
}
}
if (toSendMessageList.Count > 0)
{
core.BSMDStatusInternal = MessageCore.BSMDStatus.SENT;
DBManager.Instance.Save(core);
}
}
}
@ -213,7 +225,8 @@ namespace SendNSWMessageService
protected override void OnStop()
{
this._timer.Enabled = false;
this.EventLog.WriteEntry("NSW Send Service stopped.", EventLogEntryType.Information);
this.EventLog.WriteEntry("NSW Send Service stopped.", EventLogEntryType.Information);
_log.Info("NSW Send Service stopped");
}
}
}

View File

@ -21,6 +21,8 @@ namespace bsmd.dakosy.ResponseService
new SFTPService()
};
log4net.Config.XmlConfigurator.Configure();
if (Debugger.IsAttached)
{
((SFTPService)ServicesToRun[0]).Init(null);

View File

@ -85,7 +85,6 @@
<ItemGroup>
<None Include="App.config" />
<None Include="..\bsmdKey.snk" />
<None Include="ClassDiagram1.cd" />
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>

View File

@ -25,7 +25,7 @@ namespace bsmd.database
#region Properties
[ShowReport]
[Validation(ValidationCode.DOUBLE_GT_ZERO)]
[Validation(ValidationCode.NOT_NULL)]
public DateTime? ATAPortOfCall { get; set; }
#endregion
@ -88,7 +88,7 @@ namespace bsmd.database
ATA ata = new ATA();
ata.id = reader.GetGuid(0);
if (!reader.IsDBNull(1)) ata.ATAPortOfCall = reader.GetDateTime(1);
if (!reader.IsDBNull(1)) ata.ATAPortOfCall = DateTime.SpecifyKind(reader.GetDateTime(1), DateTimeKind.Utc);
result.Add(ata);
}
reader.Close();

View File

@ -25,7 +25,7 @@ namespace bsmd.database
#region Properties
[ShowReport]
[Validation(ValidationCode.DOUBLE_GT_ZERO)]
[Validation(ValidationCode.NOT_NULL)]
public DateTime? ATDPortOfCall { get; set; }
#endregion
@ -88,7 +88,7 @@ namespace bsmd.database
ATD atd = new ATD();
atd.id = reader.GetGuid(0);
if (!reader.IsDBNull(1)) atd.ATDPortOfCall = reader.GetDateTime(1);
if (!reader.IsDBNull(1)) atd.ATDPortOfCall = DateTime.SpecifyKind(reader.GetDateTime(1), DateTimeKind.Utc);
result.Add(atd);
}
reader.Close();

View File

@ -65,7 +65,7 @@ namespace bsmd.database
public static DateTime? TryParseDateTime(string text)
{
DateTime date;
if(DateTime.TryParse(text, DateTimeFormatInfo.InvariantInfo,DateTimeStyles.AssumeUniversal, out date))
if(DateTime.TryParse(text, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.AssumeUniversal, out date))
{
return date;
}

View File

@ -52,7 +52,7 @@ namespace bsmd.database
public bool? DPGClassificationIMSBC { get; set; }
[ShowReport]
public bool DPGClassificationMARPOL_ANNEX_I { get; set; }
public bool? DPGClassificationMARPOL_ANNEX_I { get; set; }
public List<IMDGPosition> IMDGPositions { get { return this.imdgPositions; } }

View File

@ -12,7 +12,7 @@ namespace bsmd.database
/// <summary>
/// Basisklasse aller Nachrichtentypen, zentrale Klasse für die NSW App
/// </summary>
public class Message : DatabaseEntity, ISublistContainer
public class Message : DatabaseEntity, ISublistContainer, IComparable<Message>
{
#region Fields
@ -514,5 +514,17 @@ namespace bsmd.database
#endregion
#region IComparable implementation
/// <summary>
/// Sort messages by notification class
/// </summary>
public int CompareTo(Message other)
{
return this.MessageNotificationClass.CompareTo(other.MessageNotificationClass);
}
#endregion
}
}

View File

@ -82,14 +82,14 @@ namespace bsmd.database
{
NOA_NOD nn = new NOA_NOD();
nn.id = reader.GetGuid(0);
if (!reader.IsDBNull(1)) nn.ETAToPortOfCall = reader.GetDateTime(1);
if (!reader.IsDBNull(2)) nn.ETDFromPortOfCall = reader.GetDateTime(2);
if (!reader.IsDBNull(3)) nn.ETAToKielCanal = reader.GetDateTime(3);
if (!reader.IsDBNull(4)) nn.ETDFromKielCanal = reader.GetDateTime(4);
if (!reader.IsDBNull(1)) nn.ETAToPortOfCall = DateTime.SpecifyKind(reader.GetDateTime(1), DateTimeKind.Utc);
if (!reader.IsDBNull(2)) nn.ETDFromPortOfCall = DateTime.SpecifyKind(reader.GetDateTime(2), DateTimeKind.Utc);
if (!reader.IsDBNull(3)) nn.ETAToKielCanal = DateTime.SpecifyKind(reader.GetDateTime(3), DateTimeKind.Utc);
if (!reader.IsDBNull(4)) nn.ETDFromKielCanal = DateTime.SpecifyKind(reader.GetDateTime(4), DateTimeKind.Utc);
if (!reader.IsDBNull(5)) nn.LastPort = reader.GetString(5);
if (!reader.IsDBNull(6)) nn.ETDFromLastPort = reader.GetDateTime(6);
if (!reader.IsDBNull(6)) nn.ETDFromLastPort = DateTime.SpecifyKind(reader.GetDateTime(6), DateTimeKind.Utc);
if (!reader.IsDBNull(7)) nn.NextPort = reader.GetString(7);
if (!reader.IsDBNull(8)) nn.ETAToNextPort = reader.GetDateTime(8);
if (!reader.IsDBNull(8)) nn.ETAToNextPort = DateTime.SpecifyKind(reader.GetDateTime(8), DateTimeKind.Utc);
result.Add(nn);
}
reader.Close();
@ -182,14 +182,14 @@ namespace bsmd.database
errors.Add(RuleEngine.CreateError(ValidationCode.E123, "Departure time before arrival time!", null));
}
if(!this.LastPort.Equals("ZZUKN") && !this.ETDFromLastPort.HasValue)
if((this.LastPort != null) && !this.LastPort.Equals("ZZUKN") && !this.ETDFromLastPort.HasValue)
errors.Add(RuleEngine.CreateError(ValidationCode.E125, "ETD last port must be set!", null));
if (this.ETDFromPortOfCall.HasValue && this.ETAToNextPort.HasValue &&
this.ETAToNextPort < ETDFromPortOfCall)
errors.Add(RuleEngine.CreateError(ValidationCode.E122, "ETD PoC must be before ETA next port!", null));
if (!this.NextPort.Equals("ZZUKN") && !this.ETAToNextPort.HasValue)
if ((this.NextPort != null) && !this.NextPort.Equals("ZZUKN") && !this.ETAToNextPort.HasValue)
errors.Add(RuleEngine.CreateError(ValidationCode.E124, "ETA next port must be set!", null));
}

View File

@ -2,6 +2,6 @@
[assembly: AssemblyCompany("Informatikbüro Daniel Schick")]
[assembly: AssemblyProduct("BSMD NSW interface")]
[assembly: AssemblyInformationalVersion("2.2.0")]
[assembly: AssemblyInformationalVersion("2.3.0")]
[assembly: AssemblyCopyright("Copyright © 2014-2015 Informatikbüro Daniel Schick. All rights reserved.")]
[assembly: AssemblyTrademark("")]

View File

@ -4,6 +4,6 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.2.0.*")]
[assembly: AssemblyVersion("2.3.0.*")]
// wenn das nicht auskommentiert wird erhalten wir eine Warnung
// [assembly: AssemblyFileVersion("1.0.0.*")]

View File

@ -20,13 +20,91 @@ namespace bsmd.database
{
public class RuleEngine
{
#region german LOCODE's static definition
private static List<string> gerLocodeList = new List<string>() {
"DE001",
"DEAND",
"DEBDF",
"DEBZR",
"DEBMK",
"DEBKE",
"DEBRE",
"DEBRV",
"DEBRB",
"DE651",
"DEBUM",
"DEBUZ",
"DECUX",
"DEDMG",
"DEDTM",
"DEDUI",
"DEDUS",
"DEECK",
"DEELS",
"DEEME",
"DEEMM",
"DEFLF",
"DEGEK",
"DEGLU",
"DEGRD",
"DEHAM",
"DEHHF",
"DEHGL",
"DEHUS",
"DEITZ",
"DEKEL",
"DE136",
"DEKCH",
"DEKLE",
"DECGN",
"DEKRE",
"DE241",
"DELEE",
"DELEW",
"DELIS",
"DELBC",
"DELBM",
"DE002",
"DEMHG",
"DEMOZ",
"DEMUK",
"DEMUH",
"DENSS",
"DENHO",
"DENHA",
"DEOLO",
"DETRD",
"DEPAP",
"DEPEF",
"DEPUT",
"DEREC",
"DEREN",
"DERHB",
"DERSK",
"DESAS",
"DESTL",
"DEUCK",
"DE585",
"DEVRD",
"DEWED",
"DEWVN",
"DEWIS",
"DE003",
"DEWOL",
"DEWYK"
};
#endregion
private static ILog log = LogManager.GetLogger(typeof(RuleEngine));
private static Dictionary<int, string> errorTextList = null;
private static Dictionary<int, string> violationTextList = null;
private Dictionary<DatabaseEntity, List<MessageError>> errorDict = new Dictionary<DatabaseEntity, List<MessageError>>();
private Dictionary<DatabaseEntity, List<MessageViolation>> violationDict = new Dictionary<DatabaseEntity, List<MessageViolation>>();
private Dictionary<DatabaseEntity, List<MessageViolation>> violationDict = new Dictionary<DatabaseEntity, List<MessageViolation>>();
public RuleEngine()
{
if (RuleEngine.errorTextList == null)
@ -67,6 +145,8 @@ namespace bsmd.database
object propValue = property.GetValue(entity, null);
string value = (propValue == null) ? string.Empty : propValue.ToString();
ValidationCode validationCode = ValidationCode.NONE;
int maxlen = 0;
if (Attribute.IsDefined(property, attribType))
{
if (entity.GetValidationBlock() == DatabaseEntity.ValidationBlock.BLOCK1)
@ -89,6 +169,7 @@ namespace bsmd.database
ValidationAttribute validationAttribute = Attribute.GetCustomAttribute(property, typeof(ValidationAttribute))
as ValidationAttribute;
validationCode = validationAttribute.Code;
maxlen = validationAttribute.MaxLen;
}
}
@ -107,9 +188,8 @@ namespace bsmd.database
break;
case ValidationCode.LOCODE_GER:
{
// TODO: Jan nach der Liste anhauen
Regex rgx = new Regex("[A-Z]{2}[A-Z0-9]{3}");
if (!rgx.IsMatch(value)) errors.Add(RuleEngine.CreateError(validationCode, property.Name, value));
if(!RuleEngine.gerLocodeList.Contains(value))
errors.Add(RuleEngine.CreateError(validationCode, property.Name, value));
}
break;
case ValidationCode.INT_GT_ZERO:
@ -144,6 +224,18 @@ namespace bsmd.database
if (!rgx.IsMatch(value)) errors.Add(RuleEngine.CreateError(validationCode, property.Name, value));
}
break;
case ValidationCode.STRING_EXACT_LEN:
{
if (value.Length != maxlen)
errors.Add(RuleEngine.CreateError(validationCode, property.Name, value));
}
break;
case ValidationCode.STRING_MAXLEN:
{
if (value.Length > maxlen)
errors.Add(RuleEngine.CreateError(validationCode, property.Name, value));
}
break;
default:
break;
}
@ -191,6 +283,17 @@ namespace bsmd.database
log.InfoFormat("Msg Id {0} Type {1} has {2} errors and {3} violations",
entity.Id, entity.MessageNotificationClass, errors.Count, violations.Count);
if (errors.Count > 0)
{
((Message)entity).InternalStatus = Message.BSMDStatus.ERROR;
DBManager.Instance.Save(entity);
}
else if (violations.Count > 0)
{
((Message)entity).InternalStatus = Message.BSMDStatus.VIOLATION;
DBManager.Instance.Save(entity);
}
}
#endregion

View File

@ -67,6 +67,7 @@ namespace bsmd.database
public string ISMCompanyName { get; set; }
[ShowReport]
[Validation(ValidationCode.STRING_EXACT_LEN, 7)]
public string ISMCompanyId { get; set; }
[ShowReport]

View File

@ -27,6 +27,8 @@ namespace bsmd.database
DOUBLE_GT_ZERO,
FLAG_CODE,
TWO_DIGIT,
STRING_MAXLEN,
STRING_EXACT_LEN,
E121 = 121,
E122 = 122,
E123 = 123,
@ -68,12 +70,25 @@ namespace bsmd.database
public class ValidationAttribute : Attribute
{
private ValidationCode validationCode;
private int maxlen;
public ValidationAttribute(ValidationCode code)
{
this.validationCode = code;
}
public ValidationAttribute(ValidationCode code, int maxlen)
{
this.maxlen = maxlen;
this.validationCode = code;
}
public int MaxLen
{
get { return this.maxlen; }
set { this.maxlen = value; }
}
public ValidationCode Code
{
get { return this.validationCode; }

View File

@ -0,0 +1,35 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.34209
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace bsmd.dbh.ResponseService.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("replace me!")]
public string DBConnectionString {
get {
return ((string)(this["DBConnectionString"]));
}
}
}
}

View File

@ -0,0 +1,9 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="bsmd.dbh.ResponseService.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="DBConnectionString" Type="System.String" Scope="Application">
<Value Profile="(Default)">replace me!</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@ -79,8 +79,11 @@ namespace bsmd.herberg.FormService
aMessageCore.HerbergReportType = formData.value;
if (aMessageCore.HerbergReportType.Equals("Pre-Departure Notification Update") ||
aMessageCore.HerbergReportType.Equals("Departure Notification Update"))
isDeparture = true;
aMessageCore.HerbergReportType.Equals("Departure Notification Update"))
isDeparture = true;
aMessageCore.Incoming = !isDeparture;
break;
case "EmailContactReportingVessel":
aMessageCore.HerbergEmailContactReportingVessel = formData.value;
@ -301,19 +304,22 @@ namespace bsmd.herberg.FormService
foreach (int key in nDict.Keys)
{
Dictionary<string, string> subvDict = nDict[key];
CallPurpose cp = noa_nod.GetSublistElementWithIdentifier(key.ToString()) as CallPurpose;
if (cp == null)
if (subvDict.Count > 0)
{
cp = new CallPurpose();
cp.Identifier = key.ToString();
cp.NOA_NOD = noa_nod;
noa_nod.CallPurposes.Add(cp);
CallPurpose cp = noa_nod.GetSublistElementWithIdentifier(key.ToString()) as CallPurpose;
if (cp == null)
{
cp = new CallPurpose();
cp.Identifier = key.ToString();
cp.NOA_NOD = noa_nod;
noa_nod.CallPurposes.Add(cp);
}
if (subvDict.ContainsKey("CallPurposeCode")) cp.CallPurposeCode = Int32.Parse(subvDict["CallPurposeCode"]);
if (subvDict.ContainsKey("CallPurposeDescription")) cp.CallPurposeDescription = subvDict["CallPurposeDescription"];
saveMessages.Add(cp);
}
if (subvDict.ContainsKey("CallPurposeCode")) cp.CallPurposeCode = Int32.Parse(subvDict["CallPurposeCode"]);
if (subvDict.ContainsKey("CallPurposeDescription")) cp.CallPurposeDescription = subvDict["CallPurposeDescription"];
saveMessages.Add(cp);
}
}
@ -415,45 +421,51 @@ namespace bsmd.herberg.FormService
if (vDict.ContainsKey("InfectedAreaDate")) mdh.InfectedAreaDate = Extensions.TryParseDateTime(vDict["InfectedAreaDate"]);
// sublisten
foreach (int key in nDict.Keys)
if (!mdh.MDHSimplification ?? true)
{
Dictionary<string, string> pDict = nDict[key];
PortOfCallLast30Days poc30 = mdh.GetSublistElementWithIdentifier(key.ToString()) as PortOfCallLast30Days;
if (poc30 == null)
foreach (int key in nDict.Keys)
{
poc30 = new PortOfCallLast30Days();
poc30.Identifier = key.ToString();
mdh.PortOfCallLast30Days.Add(poc30);
poc30.MDH = mdh;
}
if (pDict.ContainsKey("PortOfCallLast30DaysDateOfDeparture")) poc30.PortOfCallLast30DaysDateOfDeparture = Extensions.TryParseDateTime(pDict["PortOfCallLast30DaysDateOfDeparture"]);
if (pDict.ContainsKey("PortOfCallLast30DaysCrewMembersJoined")) poc30.PortOfCallLast30DaysCrewMembersJoined = pDict["PortOfCallLast30DaysCrewMembersJoined"].Equals("Y");
if (pDict.ContainsKey("PortOfCallLast30DaysPortCode") && pDict.ContainsKey("PortOfCallLast30DaysCountryCode"))
poc30.PortOfCallLast30DaysLocode = pDict["PortOfCallLast30DaysCountryCode"] + pDict["PortOfCallLast30DaysPortCode"];
saveMessages.Add(poc30);
// lookup / crew members (Identifier hier der Name! (vereinfachung, ich habe keine rowid))
if (pDict.ContainsKey("PortOfCallLast30DaysCrewMemberNamesJoined"))
{
string[] names = pDict["PortOfCallLast30DaysCrewMemberNamesJoined"].Split(',');
for (int k = 0; k < names.Length; k++)
Dictionary<string, string> pDict = nDict[key];
if (pDict.Count > 0)
{
string crewname = names[k].Trim();
PortOfCallLast30DaysCrewJoinedShip poc30Crew = poc30.GetSublistElementWithIdentifier(crewname) as PortOfCallLast30DaysCrewJoinedShip;
if (poc30Crew == null)
PortOfCallLast30Days poc30 = mdh.GetSublistElementWithIdentifier(key.ToString()) as PortOfCallLast30Days;
if (poc30 == null)
{
poc30Crew = new PortOfCallLast30DaysCrewJoinedShip();
poc30Crew.Identifier = crewname;
poc30Crew.PortOfCallLast30Days = poc30;
poc30Crew.PortOfCallLast30DaysCrewJoinedShipName = crewname;
poc30.CrewJoinedShip.Add(poc30Crew);
saveMessages.Add(poc30Crew);
poc30 = new PortOfCallLast30Days();
poc30.Identifier = key.ToString();
mdh.PortOfCallLast30Days.Add(poc30);
poc30.MDH = mdh;
}
}
if (pDict.ContainsKey("PortOfCallLast30DaysDateOfDeparture")) poc30.PortOfCallLast30DaysDateOfDeparture = Extensions.TryParseDateTime(pDict["PortOfCallLast30DaysDateOfDeparture"]);
if (pDict.ContainsKey("PortOfCallLast30DaysCrewMembersJoined")) poc30.PortOfCallLast30DaysCrewMembersJoined = pDict["PortOfCallLast30DaysCrewMembersJoined"].Equals("Y");
if (pDict.ContainsKey("PortOfCallLast30DaysPortCode") && pDict.ContainsKey("PortOfCallLast30DaysCountryCode"))
poc30.PortOfCallLast30DaysLocode = pDict["PortOfCallLast30DaysCountryCode"] + pDict["PortOfCallLast30DaysPortCode"];
saveMessages.Add(poc30);
// lookup / crew members (Identifier hier der Name! (vereinfachung, ich habe keine rowid))
if (pDict.ContainsKey("PortOfCallLast30DaysCrewMemberNamesJoined"))
{
string[] names = pDict["PortOfCallLast30DaysCrewMemberNamesJoined"].Split(',');
for (int k = 0; k < names.Length; k++)
{
string crewname = names[k].Trim();
PortOfCallLast30DaysCrewJoinedShip poc30Crew = poc30.GetSublistElementWithIdentifier(crewname) as PortOfCallLast30DaysCrewJoinedShip;
if (poc30Crew == null)
{
poc30Crew = new PortOfCallLast30DaysCrewJoinedShip();
poc30Crew.Identifier = crewname;
poc30Crew.PortOfCallLast30Days = poc30;
poc30Crew.PortOfCallLast30DaysCrewJoinedShipName = crewname;
poc30.CrewJoinedShip.Add(poc30Crew);
saveMessages.Add(poc30Crew);
}
}
}
}
}
}
}
@ -542,23 +554,26 @@ namespace bsmd.herberg.FormService
{
try
{
if (vDict.ContainsKey("StowawayOnBoard")) bpol.StowawaysOnBoard = vDict["StowawayOnBoard"].Equals("Y");
if (vDict.ContainsKey("StowawayOnBoard")) bpol.StowawaysOnBoard = vDict["StowawayOnBoard"].Equals("Y");
foreach (int key in nDict.Keys)
{
PortOfItinerary poi = bpol.GetSublistElementWithIdentifier(key.ToString()) as PortOfItinerary;
Dictionary<string, string> ppDict = nDict[key];
if (poi == null)
if (ppDict.Count > 0)
{
poi = new PortOfItinerary();
poi.Identifier = key.ToString();
poi.BPOL = bpol;
bpol.PortOfItineraries.Add(poi);
if (poi == null)
{
poi = new PortOfItinerary();
poi.Identifier = key.ToString();
poi.BPOL = bpol;
bpol.PortOfItineraries.Add(poi);
}
if (ppDict.ContainsKey("PortOfItineraryName")) poi.PortOfItineraryName = ppDict["PortOfItineraryName"];
if (ppDict.ContainsKey("PortOfItineraryETA")) poi.PortOfItineraryETA = Extensions.TryParseDateTime(ppDict["PortOfItineraryETA"]);
saveMessages.Add(poi);
}
if (ppDict.ContainsKey("PortOfItineraryName")) poi.PortOfItineraryName = ppDict["PortOfItineraryName"];
if (ppDict.ContainsKey("PortOfItineraryETA")) poi.PortOfItineraryETA = Extensions.TryParseDateTime(ppDict["PortOfItineraryETA"]);
saveMessages.Add(poi);
}
}
catch (Exception ex)
@ -954,60 +969,63 @@ namespace bsmd.herberg.FormService
foreach (int key in nDict.Keys)
{
Dictionary<string, string> sDict = nDict[key];
bool changedPfC = false;
bool changedStS = false;
ShipToShipActivitiesDuringLastTenPortFacilitiesCalled sts = sec.GetShipToShipWithIdentifier(key.ToString());
if(sts == null)
if (sDict.Count > 0)
{
sts = new ShipToShipActivitiesDuringLastTenPortFacilitiesCalled();
sts.SEC = sec;
sts.Identifier = key.ToString();
sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.Add(sts);
}
bool changedPfC = false;
bool changedStS = false;
LastTenPortFacilitiesCalled poc = sec.GetPortFacilityWithIdentifier(key.ToString());
if (poc == null)
{
poc = new LastTenPortFacilitiesCalled();
poc.SEC = sec;
poc.Identifier = key.ToString();
sec.LastTenPortFacilitesCalled.Add(poc);
}
ShipToShipActivitiesDuringLastTenPortFacilitiesCalled sts = sec.GetShipToShipWithIdentifier(key.ToString());
if (sts == null)
{
sts = new ShipToShipActivitiesDuringLastTenPortFacilitiesCalled();
sts.SEC = sec;
sts.Identifier = key.ToString();
sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.Add(sts);
}
if (sDict.ContainsKey("PortFacilityPortName")) { poc.PortFacilityPortName = sDict["PortFacilityPortName"]; changedPfC = true; }
if (sDict.ContainsKey("PortFacilityPortCountry")) { poc.PortFacilityPortCountry = sDict["PortFacilityPortCountry"]; changedPfC = true; }
if (sDict.ContainsKey("PortFacilityPortLoCode") && sDict.ContainsKey("PortFacilityPortCountryCode") && (sDict["PortFacilityPortLoCode"].Length < 4))
{
poc.PortFacilityPortLoCode = sDict["PortFacilityPortCountryCode"] + sDict["PortFacilityPortLoCode"];
changedPfC = true;
}
if (sDict.ContainsKey("PortFacilityDateOfArrival")) { poc.PortFacilityDateOfArrival = Extensions.TryParseDateTime(sDict["PortFacilityDateOfArrival"]); changedPfC = true; }
if (sDict.ContainsKey("PortFacilityDateOfDeparture")) { poc.PortFacilityDateOfDeparture = Extensions.TryParseDateTime(sDict["PortFacilityDateOfDeparture"]); changedPfC = true; }
if (sDict.ContainsKey("PortFacilityShipSecurityLevel")) { poc.PortFacilityShipSecurityLevel = Byte.Parse(sDict["PortFacilityShipSecurityLevel"]); changedPfC = true; }
if (sDict.ContainsKey("PortFacilitySecurityMattersToReport")) { poc.PortFacilitySecurityMattersToReport = sDict["PortFacilitySecurityMattersToReport"]; changedPfC = true; }
if (sDict.ContainsKey("PortFacilityGISISCode"))
{
poc.PortFacilityGISISCode = sDict["PortFacilityGISISCode"]; changedPfC = true;
if (poc.PortFacilityGISISCode.Length > 4)
poc.PortFacilityGISISCode = poc.PortFacilityGISISCode.Substring(0, 4);
}
LastTenPortFacilitiesCalled poc = sec.GetPortFacilityWithIdentifier(key.ToString());
if (poc == null)
{
poc = new LastTenPortFacilitiesCalled();
poc.SEC = sec;
poc.Identifier = key.ToString();
sec.LastTenPortFacilitesCalled.Add(poc);
}
if (sDict.ContainsKey("ShipToShipActivityLocationName")) { sts.ShipToShipActivityLocationName = sDict["ShipToShipActivityLocationName"]; changedStS = true; }
if (sDict.ContainsKey("ShipToShipActivityLocationLoCode") && sDict.ContainsKey("ShipToShipActivityCountryCode") && (sDict["ShipToShipActivityLocationLoCode"].Length < 4))
{
sts.ShipToShipActivityLocationLoCode = sDict["ShipToShipActivityCountryCode"] + sDict["ShipToShipActivityLocationLoCode"];
changedStS = true;
}
if (sDict.ContainsKey("ShipToShipActivityLocationCoordinatesLatitude")) { sts.ShipToShipActivityLocationCoordinatesLatitude = Int32.Parse(sDict["ShipToShipActivityLocationCoordinatesLatitude"]); changedStS = true; }
if (sDict.ContainsKey("ShipToShipActivityLocationCoordinatesLongitude")) { sts.ShipToShipActivityLocationCoordinatesLongitude = Int32.Parse(sDict["ShipToShipActivityLocationCoordinatesLongitude"]); changedStS = true; }
if (sDict.ContainsKey("ShipToShipActivityDateFrom")) { sts.ShipToShipActivityDateFrom = Extensions.TryParseDateTime(sDict["ShipToShipActivityDateFrom"]); changedStS = true; }
if (sDict.ContainsKey("ShipToShipActivityDateTo")) { sts.ShipToShipActivityDateTo = Extensions.TryParseDateTime(sDict["ShipToShipActivityDateTo"]); changedStS = true; }
if (sDict.ContainsKey("ShipToShipActivityType")) { sts.ShipToShipActivityType = sDict["ShipToShipActivityType"]; changedStS = true; }
if (sDict.ContainsKey("ShipToShipActivitySecurityMattersToReport")) { sts.ShipToShipActivitySecurityMattersToReport = sDict["ShipToShipActivitySecurityMattersToReport"]; changedStS = true; }
if (sDict.ContainsKey("PortFacilityPortName")) { poc.PortFacilityPortName = sDict["PortFacilityPortName"]; changedPfC = true; }
if (sDict.ContainsKey("PortFacilityPortCountry")) { poc.PortFacilityPortCountry = sDict["PortFacilityPortCountry"]; changedPfC = true; }
if (sDict.ContainsKey("PortFacilityPortLoCode") && sDict.ContainsKey("PortFacilityPortCountryCode") && (sDict["PortFacilityPortLoCode"].Length < 4))
{
poc.PortFacilityPortLoCode = sDict["PortFacilityPortCountryCode"] + sDict["PortFacilityPortLoCode"];
changedPfC = true;
}
if (sDict.ContainsKey("PortFacilityDateOfArrival")) { poc.PortFacilityDateOfArrival = Extensions.TryParseDateTime(sDict["PortFacilityDateOfArrival"]); changedPfC = true; }
if (sDict.ContainsKey("PortFacilityDateOfDeparture")) { poc.PortFacilityDateOfDeparture = Extensions.TryParseDateTime(sDict["PortFacilityDateOfDeparture"]); changedPfC = true; }
if (sDict.ContainsKey("PortFacilityShipSecurityLevel")) { poc.PortFacilityShipSecurityLevel = Byte.Parse(sDict["PortFacilityShipSecurityLevel"]); changedPfC = true; }
if (sDict.ContainsKey("PortFacilitySecurityMattersToReport")) { poc.PortFacilitySecurityMattersToReport = sDict["PortFacilitySecurityMattersToReport"]; changedPfC = true; }
if (sDict.ContainsKey("PortFacilityGISISCode"))
{
poc.PortFacilityGISISCode = sDict["PortFacilityGISISCode"]; changedPfC = true;
if (poc.PortFacilityGISISCode.Length > 4)
poc.PortFacilityGISISCode = poc.PortFacilityGISISCode.Substring(0, 4);
}
if (changedPfC) saveMessages.Add(poc);
if (changedStS) saveMessages.Add(sts);
if (sDict.ContainsKey("ShipToShipActivityLocationName")) { sts.ShipToShipActivityLocationName = sDict["ShipToShipActivityLocationName"]; changedStS = true; }
if (sDict.ContainsKey("ShipToShipActivityLocationLoCode") && sDict.ContainsKey("ShipToShipActivityCountryCode") && (sDict["ShipToShipActivityLocationLoCode"].Length < 4))
{
sts.ShipToShipActivityLocationLoCode = sDict["ShipToShipActivityCountryCode"] + sDict["ShipToShipActivityLocationLoCode"];
changedStS = true;
}
if (sDict.ContainsKey("ShipToShipActivityLocationCoordinatesLatitude")) { sts.ShipToShipActivityLocationCoordinatesLatitude = Int32.Parse(sDict["ShipToShipActivityLocationCoordinatesLatitude"]); changedStS = true; }
if (sDict.ContainsKey("ShipToShipActivityLocationCoordinatesLongitude")) { sts.ShipToShipActivityLocationCoordinatesLongitude = Int32.Parse(sDict["ShipToShipActivityLocationCoordinatesLongitude"]); changedStS = true; }
if (sDict.ContainsKey("ShipToShipActivityDateFrom")) { sts.ShipToShipActivityDateFrom = Extensions.TryParseDateTime(sDict["ShipToShipActivityDateFrom"]); changedStS = true; }
if (sDict.ContainsKey("ShipToShipActivityDateTo")) { sts.ShipToShipActivityDateTo = Extensions.TryParseDateTime(sDict["ShipToShipActivityDateTo"]); changedStS = true; }
if (sDict.ContainsKey("ShipToShipActivityType")) { sts.ShipToShipActivityType = sDict["ShipToShipActivityType"]; changedStS = true; }
if (sDict.ContainsKey("ShipToShipActivitySecurityMattersToReport")) { sts.ShipToShipActivitySecurityMattersToReport = sDict["ShipToShipActivitySecurityMattersToReport"]; changedStS = true; }
if (changedPfC) saveMessages.Add(poc);
if (changedStS) saveMessages.Add(sts);
}
}
}
catch (Exception ex)
@ -1209,67 +1227,69 @@ namespace bsmd.herberg.FormService
foreach (int key in subDict.Keys)
{
Dictionary<string, string> aDict = subDict[key];
IMDGPosition imdgPosition = haz.GetIMDGPositionWithIdentifier(key.ToString());
if (imdgPosition == null)
if (aDict.Count > 0)
{
imdgPosition = new IMDGPosition();
imdgPosition.Identifier = key.ToString();
haz.IMDGPositions.Add(imdgPosition);
imdgPosition.HAZ = haz;
}
saveMessages.Add(imdgPosition);
if (aDict.ContainsKey("UNNumber")) imdgPosition.UNNumber = aDict["UNNumber"];
if (aDict.ContainsKey("PackingGroup")) imdgPosition.PackingGroup = (byte)Enum.Parse(typeof(Enums.PackingGroup), aDict["PackingGroup"], true);
if (aDict.ContainsKey("ProperShippingName")) imdgPosition.ProperShippingName = aDict["ProperShippingName"];
if (aDict.ContainsKey("IMOClass")) imdgPosition.IMOClass = aDict["IMOClass"];
if (aDict.ContainsKey("CompatibilityGroup")) imdgPosition.CompatibilityGroup = aDict["CompatibilityGroup"];
if (aDict.ContainsKey("TechnicalName")) imdgPosition.TechnicalName = aDict["TechnicalName"];
if (aDict.ContainsKey("NetExplosiveMass_KGM")) imdgPosition.NetExplosiveMass_KGM = Extensions.TryParseDouble(aDict["NetExplosiveMass_KGM"]);
if (aDict.ContainsKey("Flashpoint_CEL")) imdgPosition.Flashpoint_CEL = aDict["Flashpoint_CEL"];
if (aDict.ContainsKey("Class7NuclideName")) imdgPosition.Class7NuclideName = aDict["Class7NuclideName"];
if (aDict.ContainsKey("Class7MaxActivity_BQL")) imdgPosition.Class7MaxActivity_BQL = Extensions.TryParseDouble(aDict["Class7MaxActivity_BQL"]);
if (aDict.ContainsKey("Class7Category")) imdgPosition.Class7Category = Int32.Parse(aDict["Class7Category"], NumberFormatInfo.InvariantInfo);
if (aDict.ContainsKey("Class7TransportIndex")) imdgPosition.Class7TransportIndex = Extensions.TryParseDouble(aDict["Class7TransportIndex"]);
if (aDict.ContainsKey("Class7CSI")) imdgPosition.Class7CSI = Int32.Parse(aDict["Class7CSI"]);
if (aDict.ContainsKey("ControlTemperature_CEL")) imdgPosition.ControlTemperature_CEL = Extensions.TryParseDouble(aDict["ControlTemperature_CEL"]);
if (aDict.ContainsKey("EmergencyTemperature_CEL")) imdgPosition.EmergencyTemperature_CEL = Extensions.TryParseDouble(aDict["EmergencyTemperature_CEL"]);
if (aDict.ContainsKey("SubsidiaryRisk"))
{
if (imdgPosition.SubsidiaryRiskList.Count == 0)
IMDGPosition imdgPosition = haz.GetIMDGPositionWithIdentifier(key.ToString());
if (imdgPosition == null)
{
SubsidiaryRisks newSRisk = new SubsidiaryRisks();
newSRisk.IMDGPosition = imdgPosition;
imdgPosition.SubsidiaryRiskList.Add(newSRisk);
imdgPosition = new IMDGPosition();
imdgPosition.Identifier = key.ToString();
haz.IMDGPositions.Add(imdgPosition);
imdgPosition.HAZ = haz;
}
saveMessages.Add(imdgPosition);
if (aDict.ContainsKey("UNNumber")) imdgPosition.UNNumber = aDict["UNNumber"];
if (aDict.ContainsKey("PackingGroup")) imdgPosition.PackingGroup = (byte)Enum.Parse(typeof(Enums.PackingGroup), aDict["PackingGroup"], true);
if (aDict.ContainsKey("ProperShippingName")) imdgPosition.ProperShippingName = aDict["ProperShippingName"];
if (aDict.ContainsKey("IMOClass")) imdgPosition.IMOClass = aDict["IMOClass"];
if (aDict.ContainsKey("CompatibilityGroup")) imdgPosition.CompatibilityGroup = aDict["CompatibilityGroup"];
if (aDict.ContainsKey("TechnicalName")) imdgPosition.TechnicalName = aDict["TechnicalName"];
if (aDict.ContainsKey("NetExplosiveMass_KGM")) imdgPosition.NetExplosiveMass_KGM = Extensions.TryParseDouble(aDict["NetExplosiveMass_KGM"]);
if (aDict.ContainsKey("Flashpoint_CEL")) imdgPosition.Flashpoint_CEL = aDict["Flashpoint_CEL"];
if (aDict.ContainsKey("Class7NuclideName")) imdgPosition.Class7NuclideName = aDict["Class7NuclideName"];
if (aDict.ContainsKey("Class7MaxActivity_BQL")) imdgPosition.Class7MaxActivity_BQL = Extensions.TryParseDouble(aDict["Class7MaxActivity_BQL"]);
if (aDict.ContainsKey("Class7Category")) imdgPosition.Class7Category = Int32.Parse(aDict["Class7Category"], NumberFormatInfo.InvariantInfo);
if (aDict.ContainsKey("Class7TransportIndex")) imdgPosition.Class7TransportIndex = Extensions.TryParseDouble(aDict["Class7TransportIndex"]);
if (aDict.ContainsKey("Class7CSI")) imdgPosition.Class7CSI = Int32.Parse(aDict["Class7CSI"]);
if (aDict.ContainsKey("ControlTemperature_CEL")) imdgPosition.ControlTemperature_CEL = Extensions.TryParseDouble(aDict["ControlTemperature_CEL"]);
if (aDict.ContainsKey("EmergencyTemperature_CEL")) imdgPosition.EmergencyTemperature_CEL = Extensions.TryParseDouble(aDict["EmergencyTemperature_CEL"]);
if (aDict.ContainsKey("SubsidiaryRisk"))
{
if (imdgPosition.SubsidiaryRiskList.Count == 0)
{
SubsidiaryRisks newSRisk = new SubsidiaryRisks();
newSRisk.IMDGPosition = imdgPosition;
imdgPosition.SubsidiaryRiskList.Add(newSRisk);
}
SubsidiaryRisks sRisks = imdgPosition.SubsidiaryRiskList[0];
sRisks.SubsidiaryRisk = aDict["SubsidiaryRisk"];
saveMessages.Add(sRisks);
}
if (aDict.ContainsKey("MarinePollutant")) imdgPosition.MarinePollutant = aDict["MarinePollutant"].Equals("Y");
if (aDict.ContainsKey("NumberOfPackages")) imdgPosition.NumberOfPackages = Int32.Parse(aDict["NumberOfPackages"]);
if (aDict.ContainsKey("PackageType")) imdgPosition.PackageType = aDict["PackageType"];
if (aDict.ContainsKey("LimitedQuantities")) imdgPosition.LimitedQuantities = aDict["LimitedQuantities"].Equals("Y");
if (aDict.ContainsKey("ExceptedQuantities")) imdgPosition.ExceptedQuantities = aDict["ExceptedQuantities"].Equals("Y");
if (aDict.ContainsKey("NetQuantity_KGM")) imdgPosition.NetQuantity_KGM = Extensions.TryParseDouble(aDict["NetQuantity_KGM"]);
if (aDict.ContainsKey("GrossQuantity_KGM")) imdgPosition.GrossQuantity_KGM = Extensions.TryParseDouble(aDict["GrossQuantity_KGM"]);
if (aDict.ContainsKey("Volume_MTQ")) imdgPosition.Volume_MTQ = Extensions.TryParseDouble(aDict["Volume_MTQ"]);
if (aDict.ContainsKey("GeneralCargoIBC")) imdgPosition.GeneralCargoIBC = aDict["GeneralCargoIBC"].Equals("Y");
if (aDict.ContainsKey("ContainerNumber")) imdgPosition.ContainerNumber = aDict["ContainerNumber"];
if (aDict.ContainsKey("VehicleLicenseNumber")) imdgPosition.VehicleLicenseNumber = aDict["VehicleLicenseNumber"];
if (aDict.ContainsKey("StowagePosition")) imdgPosition.StowagePosition = aDict["StowagePosition"];
if (aDict.ContainsKey("PortCodeOfLoading") && aDict.ContainsKey("CountryCodeOfLoading"))
imdgPosition.PortOfLoading = aDict["CountryCodeOfLoading"] + aDict["PortCodeOfLoading"];
if (aDict.ContainsKey("PortCodeOfDischarge") && aDict.ContainsKey("CountryCodeOfDischarge"))
imdgPosition.PortOfDischarge = aDict["CountryCodeOfDischarge"] + aDict["PortCodeOfDischarge"];
if (aDict.ContainsKey("Remarks")) imdgPosition.Remarks = aDict["Remarks"];
if (aDict.ContainsKey("Identifier"))
{
_log.InfoFormat("Igoring IMDGPosition identifer {0}, using row number {1} instead",
aDict["Identifier"], key);
}
SubsidiaryRisks sRisks = imdgPosition.SubsidiaryRiskList[0];
sRisks.SubsidiaryRisk = aDict["SubsidiaryRisk"];
saveMessages.Add(sRisks);
}
if (aDict.ContainsKey("MarinePollutant")) imdgPosition.MarinePollutant = aDict["MarinePollutant"].Equals("Y");
if (aDict.ContainsKey("NumberOfPackages")) imdgPosition.NumberOfPackages = Int32.Parse(aDict["NumberOfPackages"]);
if (aDict.ContainsKey("PackageType")) imdgPosition.PackageType = aDict["PackageType"];
if (aDict.ContainsKey("LimitedQuantities")) imdgPosition.LimitedQuantities = aDict["LimitedQuantities"].Equals("Y");
if (aDict.ContainsKey("ExceptedQuantities")) imdgPosition.ExceptedQuantities = aDict["ExceptedQuantities"].Equals("Y");
if (aDict.ContainsKey("NetQuantity_KGM")) imdgPosition.NetQuantity_KGM = Extensions.TryParseDouble(aDict["NetQuantity_KGM"]);
if (aDict.ContainsKey("GrossQuantity_KGM")) imdgPosition.GrossQuantity_KGM = Extensions.TryParseDouble(aDict["GrossQuantity_KGM"]);
if (aDict.ContainsKey("Volume_MTQ")) imdgPosition.Volume_MTQ = Extensions.TryParseDouble(aDict["Volume_MTQ"]);
if (aDict.ContainsKey("GeneralCargoIBC")) imdgPosition.GeneralCargoIBC = aDict["GeneralCargoIBC"].Equals("Y");
if (aDict.ContainsKey("ContainerNumber")) imdgPosition.ContainerNumber = aDict["ContainerNumber"];
if (aDict.ContainsKey("VehicleLicenseNumber")) imdgPosition.VehicleLicenseNumber = aDict["VehicleLicenseNumber"];
if (aDict.ContainsKey("StowagePosition")) imdgPosition.StowagePosition = aDict["StowagePosition"];
if (aDict.ContainsKey("PortCodeOfLoading") && aDict.ContainsKey("CountryCodeOfLoading"))
imdgPosition.PortOfLoading = aDict["CountryCodeOfLoading"] + aDict["PortCodeOfLoading"];
if (aDict.ContainsKey("PortCodeOfDischarge") && aDict.ContainsKey("CountryCodeOfDischarge"))
imdgPosition.PortOfDischarge = aDict["CountryCodeOfDischarge"] + aDict["PortCodeOfDischarge"];
if (aDict.ContainsKey("Remarks")) imdgPosition.Remarks = aDict["Remarks"];
if (aDict.ContainsKey("Identifier"))
{
_log.InfoFormat("Igoring IMDGPosition identifer {0}, using row number {1} instead",
aDict["Identifier"], key);
}
}
}
@ -1279,33 +1299,36 @@ namespace bsmd.herberg.FormService
foreach (int key in subDict.Keys)
{
Dictionary<string, string> aDict = subDict[key];
IBCPosition ibcPosition = haz.GetIBCPositionWithIdentifier(key.ToString());
if (ibcPosition == null)
if (aDict.Count > 0)
{
ibcPosition = new IBCPosition();
ibcPosition.Identifier = key.ToString();
haz.IBCPositions.Add(ibcPosition);
ibcPosition.HAZ = haz;
}
IBCPosition ibcPosition = haz.GetIBCPositionWithIdentifier(key.ToString());
if (ibcPosition == null)
{
ibcPosition = new IBCPosition();
ibcPosition.Identifier = key.ToString();
haz.IBCPositions.Add(ibcPosition);
ibcPosition.HAZ = haz;
}
if (aDict.ContainsKey("ProductName")) ibcPosition.ProductName = aDict["ProductName"];
if (aDict.ContainsKey("PollutionCategory")) ibcPosition.PollutionCategory = (byte)Enum.Parse(typeof(Enums.PollutionCategory), aDict["PollutionCategory"], true);
if (aDict.ContainsKey("Hazards")) ibcPosition.Hazards = Enums.ParseHazardType(aDict["Hazards"]);
if (aDict.ContainsKey("FlashpointInformation")) ibcPosition.FlashpointInformation = Enums.ParseFlashpointInformation(aDict["FlashpointInformation"]);
if (aDict.ContainsKey("Quantity_KGM")) ibcPosition.Quantity_KGM = Extensions.TryParseDouble(aDict["Quantity_KGM"]);
if (aDict.ContainsKey("StowagePosition")) ibcPosition.StowagePosition = aDict["StowagePosition"];
if (aDict.ContainsKey("PortCodeOfLoading") && aDict.ContainsKey("CountryCodeOfLoading"))
ibcPosition.PortOfLoading = aDict["CountryCodeOfLoading"] + aDict["PortCodeOfLoading"];
if (aDict.ContainsKey("PortCodeOfDischarge") && aDict.ContainsKey("CountryCodeOfDischarge"))
ibcPosition.PortOfDischarge = aDict["CountryCodeOfDischarge"] + aDict["PortCodeOfDischarge"];
if (aDict.ContainsKey("Remarks")) ibcPosition.Remarks = aDict["Remarks"];
if (aDict.ContainsKey("Identifier"))
{
_log.InfoFormat("Igoring IMDGPosition identifer {0}, using row number {1} instead",
aDict["Identifier"], key);
}
if (aDict.ContainsKey("ProductName")) ibcPosition.ProductName = aDict["ProductName"];
if (aDict.ContainsKey("PollutionCategory")) ibcPosition.PollutionCategory = (byte)Enum.Parse(typeof(Enums.PollutionCategory), aDict["PollutionCategory"], true);
if (aDict.ContainsKey("Hazards")) ibcPosition.Hazards = Enums.ParseHazardType(aDict["Hazards"]);
if (aDict.ContainsKey("FlashpointInformation")) ibcPosition.FlashpointInformation = Enums.ParseFlashpointInformation(aDict["FlashpointInformation"]);
if (aDict.ContainsKey("Quantity_KGM")) ibcPosition.Quantity_KGM = Extensions.TryParseDouble(aDict["Quantity_KGM"]);
if (aDict.ContainsKey("StowagePosition")) ibcPosition.StowagePosition = aDict["StowagePosition"];
if (aDict.ContainsKey("PortCodeOfLoading") && aDict.ContainsKey("CountryCodeOfLoading"))
ibcPosition.PortOfLoading = aDict["CountryCodeOfLoading"] + aDict["PortCodeOfLoading"];
if (aDict.ContainsKey("PortCodeOfDischarge") && aDict.ContainsKey("CountryCodeOfDischarge"))
ibcPosition.PortOfDischarge = aDict["CountryCodeOfDischarge"] + aDict["PortCodeOfDischarge"];
if (aDict.ContainsKey("Remarks")) ibcPosition.Remarks = aDict["Remarks"];
if (aDict.ContainsKey("Identifier"))
{
_log.InfoFormat("Igoring IMDGPosition identifer {0}, using row number {1} instead",
aDict["Identifier"], key);
}
saveMessages.Add(ibcPosition);
saveMessages.Add(ibcPosition);
}
}
}
@ -1315,33 +1338,36 @@ namespace bsmd.herberg.FormService
foreach (int key in subDict.Keys)
{
Dictionary<string, string> aDict = subDict[key];
IGCPosition igcPosition = haz.GetIGCPositionWithIdentifier(key.ToString());
if(igcPosition == null) {
igcPosition = new IGCPosition();
igcPosition.Identifier = key.ToString();
haz.IGCPositions.Add(igcPosition);
igcPosition.HAZ = haz;
}
if (aDict.ContainsKey("UNNumber")) igcPosition.UNNumber = aDict["UNNumber"];
if (aDict.ContainsKey("IMOClass")) igcPosition.IMOClass = aDict["IMOClass"];
if (aDict.ContainsKey("ProductName")) igcPosition.ProductName = aDict["ProductName"];
if (aDict.ContainsKey("Quantity_KGM")) igcPosition.Quantity_KGM = Extensions.TryParseDouble(aDict["Quantity_KGM"]);
if (aDict.ContainsKey("StowagePosition")) igcPosition.StowagePosition = aDict["StowagePosition"];
if (aDict.ContainsKey("PortCodeOfLoading") && aDict.ContainsKey("CountryCodeOfLoading"))
igcPosition.PortOfLoading = aDict["CountryCodeOfLoading"] + aDict["PortCodeOfLoading"];
if (aDict.ContainsKey("PortCodeOfDischarge") && aDict.ContainsKey("CountryCodeOfDischarge"))
igcPosition.PortOfDischarge = aDict["CountryCodeOfDischarge"] + aDict["PortCodeOfDischarge"];
if (aDict.ContainsKey("Remarks")) igcPosition.Remarks = aDict["Remarks"];
if (aDict.ContainsKey("Identifier"))
if (aDict.Count > 0)
{
_log.InfoFormat("Igoring IMDGPosition identifer {0}, using row number {1} instead",
aDict["Identifier"], key);
IGCPosition igcPosition = haz.GetIGCPositionWithIdentifier(key.ToString());
if (igcPosition == null)
{
igcPosition = new IGCPosition();
igcPosition.Identifier = key.ToString();
haz.IGCPositions.Add(igcPosition);
igcPosition.HAZ = haz;
}
if (aDict.ContainsKey("UNNumber")) igcPosition.UNNumber = aDict["UNNumber"];
if (aDict.ContainsKey("IMOClass")) igcPosition.IMOClass = aDict["IMOClass"];
if (aDict.ContainsKey("ProductName")) igcPosition.ProductName = aDict["ProductName"];
if (aDict.ContainsKey("Quantity_KGM")) igcPosition.Quantity_KGM = Extensions.TryParseDouble(aDict["Quantity_KGM"]);
if (aDict.ContainsKey("StowagePosition")) igcPosition.StowagePosition = aDict["StowagePosition"];
if (aDict.ContainsKey("PortCodeOfLoading") && aDict.ContainsKey("CountryCodeOfLoading"))
igcPosition.PortOfLoading = aDict["CountryCodeOfLoading"] + aDict["PortCodeOfLoading"];
if (aDict.ContainsKey("PortCodeOfDischarge") && aDict.ContainsKey("CountryCodeOfDischarge"))
igcPosition.PortOfDischarge = aDict["CountryCodeOfDischarge"] + aDict["PortCodeOfDischarge"];
if (aDict.ContainsKey("Remarks")) igcPosition.Remarks = aDict["Remarks"];
if (aDict.ContainsKey("Identifier"))
{
_log.InfoFormat("Igoring IMDGPosition identifer {0}, using row number {1} instead",
aDict["Identifier"], key);
}
saveMessages.Add(igcPosition);
}
saveMessages.Add(igcPosition);
}
}
@ -1351,33 +1377,36 @@ namespace bsmd.herberg.FormService
foreach (int key in subDict.Keys)
{
Dictionary<string, string> aDict = subDict[key];
IMSBCPosition imsbcPosition = haz.GetIMSBCPositionWithIdentifier(key.ToString());
if (imsbcPosition == null)
if (aDict.Count > 0)
{
imsbcPosition = new IMSBCPosition();
imsbcPosition.Identifier = key.ToString();
imsbcPosition.HAZ = haz;
haz.IMSBCPositions.Add(imsbcPosition);
}
IMSBCPosition imsbcPosition = haz.GetIMSBCPositionWithIdentifier(key.ToString());
if (imsbcPosition == null)
{
imsbcPosition = new IMSBCPosition();
imsbcPosition.Identifier = key.ToString();
imsbcPosition.HAZ = haz;
haz.IMSBCPositions.Add(imsbcPosition);
}
if (aDict.ContainsKey("BulkCargoShippingName")) imsbcPosition.BulkCargoShippingName = aDict["BulkCargoShippingName"];
if (aDict.ContainsKey("MHB")) imsbcPosition.MHB = aDict["MHB"].Equals("Y");
if (aDict.ContainsKey("UNNumber")) imsbcPosition.UNNumber = aDict["UNNumber"];
if (aDict.ContainsKey("IMOClass")) imsbcPosition.IMOClass = aDict["IMOClass"];
if (aDict.ContainsKey("Quantity_KGM")) imsbcPosition.Quantity_KGM = Extensions.TryParseDouble(aDict["Quantity_KGM"]);
if (aDict.ContainsKey("StowagePosition")) imsbcPosition.StowagePosition = aDict["StowagePosition"];
if (aDict.ContainsKey("PortCodeOfLoading") && aDict.ContainsKey("CountryCodeOfLoading"))
imsbcPosition.PortOfLoading = aDict["CountryCodeOfLoading"] + aDict["PortCodeOfLoading"];
if (aDict.ContainsKey("PortCodeOfDischarge") && aDict.ContainsKey("CountryCodeOfDischarge"))
imsbcPosition.PortOfDischarge = aDict["CountryCodeOfDischarge"] + aDict["PortCodeOfDischarge"];
if (aDict.ContainsKey("Remarks")) imsbcPosition.Remarks = aDict["Remarks"];
if (aDict.ContainsKey("Identifier"))
{
_log.InfoFormat("Igoring IMDGPosition identifer {0}, using row number {1} instead",
aDict["Identifier"], key);
}
if (aDict.ContainsKey("BulkCargoShippingName")) imsbcPosition.BulkCargoShippingName = aDict["BulkCargoShippingName"];
if (aDict.ContainsKey("MHB")) imsbcPosition.MHB = aDict["MHB"].Equals("Y");
if (aDict.ContainsKey("UNNumber")) imsbcPosition.UNNumber = aDict["UNNumber"];
if (aDict.ContainsKey("IMOClass")) imsbcPosition.IMOClass = aDict["IMOClass"];
if (aDict.ContainsKey("Quantity_KGM")) imsbcPosition.Quantity_KGM = Extensions.TryParseDouble(aDict["Quantity_KGM"]);
if (aDict.ContainsKey("StowagePosition")) imsbcPosition.StowagePosition = aDict["StowagePosition"];
if (aDict.ContainsKey("PortCodeOfLoading") && aDict.ContainsKey("CountryCodeOfLoading"))
imsbcPosition.PortOfLoading = aDict["CountryCodeOfLoading"] + aDict["PortCodeOfLoading"];
if (aDict.ContainsKey("PortCodeOfDischarge") && aDict.ContainsKey("CountryCodeOfDischarge"))
imsbcPosition.PortOfDischarge = aDict["CountryCodeOfDischarge"] + aDict["PortCodeOfDischarge"];
if (aDict.ContainsKey("Remarks")) imsbcPosition.Remarks = aDict["Remarks"];
if (aDict.ContainsKey("Identifier"))
{
_log.InfoFormat("Igoring IMDGPosition identifer {0}, using row number {1} instead",
aDict["Identifier"], key);
}
saveMessages.Add(imsbcPosition);
saveMessages.Add(imsbcPosition);
}
}
}
@ -1387,33 +1416,35 @@ namespace bsmd.herberg.FormService
foreach (int key in subDict.Keys)
{
Dictionary<string, string> aDict = subDict[key];
MARPOL_Annex_I_Position marpolPosition = haz.GetMARPOLPositionWithIdentifier(key.ToString());
if (marpolPosition == null)
if (aDict.Count > 0)
{
marpolPosition = new MARPOL_Annex_I_Position();
marpolPosition.Identifier = key.ToString();
marpolPosition.HAZ = haz;
haz.MARPOLPositions.Add(marpolPosition);
MARPOL_Annex_I_Position marpolPosition = haz.GetMARPOLPositionWithIdentifier(key.ToString());
if (marpolPosition == null)
{
marpolPosition = new MARPOL_Annex_I_Position();
marpolPosition.Identifier = key.ToString();
marpolPosition.HAZ = haz;
haz.MARPOLPositions.Add(marpolPosition);
}
if (aDict.ContainsKey("Name")) marpolPosition.Name = aDict["Name"];
if (aDict.ContainsKey("FlashpointInformation")) marpolPosition.FlashpointInformation = Enums.ParseFlashpointInformation(aDict["FlashpointInformation"]);
if (aDict.ContainsKey("Flashpoint_CEL")) marpolPosition.Flashpoint_CEL = aDict["Flashpoint_CEL"];
if (aDict.ContainsKey("Quantity_KGM")) marpolPosition.Quantity_KGM = Extensions.TryParseDouble(aDict["Quantity_KGM"]);
if (aDict.ContainsKey("StowagePosition")) marpolPosition.StowagePosition = aDict["StowagePosition"];
if (aDict.ContainsKey("PortCodeOfLoading") && aDict.ContainsKey("CountryCodeOfLoading"))
marpolPosition.PortOfLoading = aDict["CountryCodeOfLoading"] + aDict["PortCodeOfLoading"];
if (aDict.ContainsKey("PortCodeOfDischarge") && aDict.ContainsKey("CountryCodeOfDischarge"))
marpolPosition.PortOfDischarge = aDict["CountryCodeOfDischarge"] + aDict["PortCodeOfDischarge"];
if (aDict.ContainsKey("Remarks")) marpolPosition.Remarks = aDict["Remarks"];
if (aDict.ContainsKey("Identifier"))
{
_log.InfoFormat("Igoring IMDGPosition identifer {0}, using row number {1} instead",
aDict["Identifier"], key);
}
saveMessages.Add(marpolPosition);
}
if (aDict.ContainsKey("Name")) marpolPosition.Name = aDict["Name"];
if (aDict.ContainsKey("FlashpointInformation")) marpolPosition.FlashpointInformation = Enums.ParseFlashpointInformation(aDict["FlashpointInformation"]);
if (aDict.ContainsKey("Flashpoint_CEL")) marpolPosition.Flashpoint_CEL = aDict["Flashpoint_CEL"];
if (aDict.ContainsKey("Quantity_KGM")) marpolPosition.Quantity_KGM = Extensions.TryParseDouble(aDict["Quantity_KGM"]);
if (aDict.ContainsKey("StowagePosition")) marpolPosition.StowagePosition = aDict["StowagePosition"];
if (aDict.ContainsKey("PortCodeOfLoading") && aDict.ContainsKey("CountryCodeOfLoading"))
marpolPosition.PortOfLoading = aDict["CountryCodeOfLoading"] + aDict["PortCodeOfLoading"];
if (aDict.ContainsKey("PortCodeOfDischarge") && aDict.ContainsKey("CountryCodeOfDischarge"))
marpolPosition.PortOfDischarge = aDict["CountryCodeOfDischarge"] + aDict["PortCodeOfDischarge"];
if (aDict.ContainsKey("Remarks")) marpolPosition.Remarks = aDict["Remarks"];
if (aDict.ContainsKey("Identifier"))
{
_log.InfoFormat("Igoring IMDGPosition identifer {0}, using row number {1} instead",
aDict["Identifier"], key);
}
saveMessages.Add(marpolPosition);
}
}
}

View File

@ -25,6 +25,8 @@ namespace bsmd.hisnord
{
bool retval = true;
messages.Sort();
try
{
nsw _nsw = new nsw();
@ -257,10 +259,301 @@ namespace bsmd.hisnord
#endregion
case Message.NotificationClass.HAZA:
// abh. von LADG!
break;
case Message.NotificationClass.HAZD:
// abh. von LADG!
{
HAZ haz = message.Elements[0] as HAZ;
#region HAZ header area
List<object> flagItems = new List<object>();
if (haz.NoDPGOnBoardOnArrival ?? false)
{
flagItems.Add(ytype.Y);
}
else
{
if(haz.DPGManifestOnBoardOnArrival ?? false)
flagItems.Add(yorntype.Y);
else
flagItems.Add(yorntype.N);
if (haz.INFShipClass.HasValue)
{
flagItems.Add((infclasstype)haz.INFShipClass.Value);
}
dgcodes _dgCodes = new dgcodes();
List<dgcodetype> _dgCodeTypes = new List<dgcodetype>();
if (haz.DPGClassificationIBC ?? false)
_dgCodeTypes.Add(dgcodetype.IBC);
if (haz.DPGClassificationIGC ?? false)
_dgCodeTypes.Add(dgcodetype.IGC);
if (haz.DPGClassificationIMDG ?? false)
_dgCodeTypes.Add(dgcodetype.IMDG);
// was ist das? dgcodetype.IMDG_MoU
if (haz.DPGClassificationIMSBC ?? false)
_dgCodeTypes.Add(dgcodetype.IMSBC);
if (haz.DPGClassificationMARPOL_ANNEX_I ?? false)
_dgCodeTypes.Add(dgcodetype.MARPOL_ANNEX_I);
_dgCodes.DGCode = _dgCodeTypes.ToArray();
flagItems.Add(_dgCodes);
}
_nsw.conveyance.Items1 = flagItems.ToArray();
#endregion
// Durch Sortierung nach NotificationClass kommt LADG vor HAZ, daher sollte das Feld
// GeneralCargo nicht leer sein
if (_nsw.conveyance.GeneralCargo == null)
{
_log.Warn("LADG (conveyance.GeneralCargo) is empty. Cannot add HAZ information!");
}
else
{
List<object> dgList = new List<object>();
#region IMDGPositions
if (haz.IMDGPositions.Count > 0)
{
positionimdg[] imdgPositions = new positionimdg[haz.IMDGPositions.Count];
for (int i = 0; i < haz.IMDGPositions.Count; i++)
{
IMDGPosition imdgPosition = haz.IMDGPositions[i];
positionimdg pi = new positionimdg();
pi.UNNumber = imdgPosition.UNNumber;
if(imdgPosition.PackingGroup.HasValue)
pi.PackingGroup = (packinggrouptype)imdgPosition.PackingGroup;
pi.ProperShippingName = imdgPosition.ProperShippingName;
pi.IMOClass = imdgPosition.IMOClass;
pi.CompatibilityGroup = imdgPosition.CompatibilityGroup;
pi.TechnicalName = imdgPosition.TechnicalName;
pi.NetMassKGMSpecified = imdgPosition.NetExplosiveMass_KGM.HasValue;
if (imdgPosition.NetExplosiveMass_KGM.HasValue)
pi.NetMassKGM = (float) imdgPosition.NetExplosiveMass_KGM.Value;
pi.FlashpointCEL = imdgPosition.Flashpoint_CEL;
pi.Class7NuclideName = imdgPosition.Class7NuclideName;
pi.Class7MaxActivityBQLSpecified = imdgPosition.Class7MaxActivity_BQL.HasValue;
if (imdgPosition.Class7MaxActivity_BQL.HasValue)
pi.Class7MaxActivityBQL = (float)imdgPosition.Class7MaxActivity_BQL.Value;
pi.Class7CategorySpecified = imdgPosition.Class7Category.HasValue;
if (imdgPosition.Class7Category.HasValue)
pi.Class7Category = (class7cattype)imdgPosition.Class7Category.Value;
pi.Class7TISpecified = imdgPosition.Class7TransportIndex.HasValue;
if (imdgPosition.Class7TransportIndex.HasValue)
pi.Class7TI = (float)imdgPosition.Class7TransportIndex.Value;
pi.Class7CSI = imdgPosition.Class7CSI.HasValue ? imdgPosition.Class7CSI.Value.ToString() : "";
pi.ControlTempCELSpecified = imdgPosition.ControlTemperature_CEL.HasValue;
if (imdgPosition.ControlTemperature_CEL.HasValue)
pi.ControlTempCEL = (float)imdgPosition.ControlTemperature_CEL.Value;
pi.EmergencyTempCELSpecified = imdgPosition.EmergencyTemperature_CEL.HasValue;
if (imdgPosition.EmergencyTemperature_CEL.HasValue)
pi.EmergencyTempCEL = (float)imdgPosition.EmergencyTemperature_CEL.Value;
if (imdgPosition.SubsidiaryRiskList.Count > 0)
{
pi.SubsidiaryRisks = new string[imdgPosition.SubsidiaryRiskList.Count];
for (int j = 0; j < imdgPosition.SubsidiaryRiskList.Count; j++)
{
pi.SubsidiaryRisks[j] = imdgPosition.SubsidiaryRiskList[j].SubsidiaryRisk;
}
}
pi.MarinePollutant = (imdgPosition.MarinePollutant ?? false) ? yorntype.Y : yorntype.N;
pi.NumberOfPackages = imdgPosition.NumberOfPackages.HasValue ? imdgPosition.NumberOfPackages.Value.ToString() : "";
// pi.PackageType = ?? feld nicht vorhanden
pi.LimitedQuantities = (imdgPosition.LimitedQuantities ?? false) ? yorntype.Y : yorntype.N;
pi.ExceptedQuantities = (imdgPosition.ExceptedQuantities ?? false) ? yorntype.Y : yorntype.N;
// pi.NetQuantity ?? feld nicht vorhanden odér ist das NetMassKGM ?
pi.GrossMassKGMSpecified = imdgPosition.GrossQuantity_KGM.HasValue;
if (imdgPosition.GrossQuantity_KGM.HasValue)
pi.GrossMassKGM = (float)imdgPosition.GrossQuantity_KGM.Value;
// pi.Volume_MTQ ?? feld nicht vorhanden
pi.GeneralCargoIBCSpecified = imdgPosition.GeneralCargoIBC.HasValue;
if (imdgPosition.GeneralCargoIBC.HasValue)
pi.GeneralCargoIBC = (imdgPosition.GeneralCargoIBC.Value) ? yorntype.Y : yorntype.N;
pi.ContainerNumber = imdgPosition.ContainerNumber;
pi.VehicleLicenseNumber = imdgPosition.VehicleLicenseNumber;
pi.Remarks = imdgPosition.Remarks;
// hier fehlt auch StowagePosition, PortOfLoading, PortOfDischarge
// das ist eine Ebene höher und damit ist die Zuordnung falsch, weil es nicht 1:n ist sondern nachfolgende
// abweichende Einträge hier eine Überschreibung verursachen
if(!imdgPosition.StowagePosition.IsNullOrEmpty())
_nsw.conveyance.GeneralCargo[0].LocationOnBoard = imdgPosition.StowagePosition;
if (!imdgPosition.PortOfLoading.IsNullOrEmpty())
_nsw.conveyance.GeneralCargo[0].PortOfLoadingLocode = imdgPosition.PortOfLoading;
if (!imdgPosition.PortOfDischarge.IsNullOrEmpty())
_nsw.conveyance.GeneralCargo[0].PortOfDischargeLocode = imdgPosition.PortOfDischarge;
pi.Index = imdgPosition.Identifier;
imdgPositions[i] = pi;
}
dgList.Add(imdgPositions);
}
#endregion
#region IBCPositions
if (haz.IBCPositions.Count > 0)
{
positionibc[] ibcPositions = new positionibc[haz.IBCPositions.Count];
for (int i = 0; i < haz.IBCPositions.Count;i++)
{
positionibc pi = new positionibc();
IBCPosition ibcPosition = haz.IBCPositions[i];
pi.Name = ibcPosition.ProductName;
if(ibcPosition.PollutionCategory.HasValue)
pi.PollutionCategory = (polcattype)ibcPosition.PollutionCategory.Value;
pi.HazardsSpecified = ibcPosition.Hazards.HasValue;
if (ibcPosition.Hazards.HasValue)
pi.Hazards = (hazardtype)ibcPosition.Hazards.Value;
if (ibcPosition.FlashpointInformation.HasValue)
pi.FlashpointInfo = (flashpointinfotype)ibcPosition.FlashpointInformation.Value;
pi.FlashpointCEL = ibcPosition.Flashpoint_CEL;
if (ibcPosition.Quantity_KGM.HasValue)
pi.NetMassKGM = (float)ibcPosition.Quantity_KGM.Value;
pi.SpecRef15_19Specified = ibcPosition.SpecRef15_19.HasValue;
if (ibcPosition.SpecRef15_19.HasValue)
pi.SpecRef15_19 = ibcPosition.SpecRef15_19.Value ? yorntype.Y : yorntype.N;
pi.Remarks = ibcPosition.Remarks;
if (!ibcPosition.StowagePosition.IsNullOrEmpty())
_nsw.conveyance.GeneralCargo[0].LocationOnBoard = ibcPosition.StowagePosition;
if (!ibcPosition.PortOfLoading.IsNullOrEmpty())
_nsw.conveyance.GeneralCargo[0].PortOfLoadingLocode = ibcPosition.PortOfLoading;
if (!ibcPosition.PortOfDischarge.IsNullOrEmpty())
_nsw.conveyance.GeneralCargo[0].PortOfDischargeLocode = ibcPosition.PortOfDischarge;
pi.Index = ibcPosition.Identifier;
ibcPositions[i] = pi;
}
dgList.Add(ibcPositions);
}
#endregion
#region IGCPositions
if (haz.IGCPositions.Count > 0)
{
positionigc[] igcPositions = new positionigc[haz.IGCPositions.Count];
for (int i = 0; i < haz.IGCPositions.Count; i++)
{
positionigc pi = new positionigc();
IGCPosition igcPosition = haz.IGCPositions[i];
pi.UNNumber = igcPosition.UNNumber;
pi.IMOClass = igcPosition.IMOClass;
pi.Name = igcPosition.ProductName;
if (igcPosition.Quantity_KGM.HasValue)
pi.NetMassKGM = (float)igcPosition.Quantity_KGM.Value;
pi.Remarks = igcPosition.Remarks;
if (!igcPosition.StowagePosition.IsNullOrEmpty())
_nsw.conveyance.GeneralCargo[0].LocationOnBoard = igcPosition.StowagePosition;
if (!igcPosition.PortOfLoading.IsNullOrEmpty())
_nsw.conveyance.GeneralCargo[0].PortOfLoadingLocode = igcPosition.PortOfLoading;
if (!igcPosition.PortOfDischarge.IsNullOrEmpty())
_nsw.conveyance.GeneralCargo[0].PortOfDischargeLocode = igcPosition.PortOfDischarge;
pi.Index = igcPosition.Identifier;
igcPositions[i] = pi;
}
dgList.Add(igcPositions);
}
#endregion
#region IMSBCPositions
if (haz.IMSBCPositions.Count > 0)
{
positionimsbc[] imsbcPositions = new positionimsbc[haz.IMSBCPositions.Count];
for (int i = 0; i < haz.IMSBCPositions.Count;i++ )
{
positionimsbc pi = new positionimsbc();
IMSBCPosition imsbcPosition = haz.IMSBCPositions[i];
pi.Name = imsbcPosition.BulkCargoShippingName;
pi.MHB = (imsbcPosition.MHB ?? false) ? yorntype.Y : yorntype.N;
pi.UNNumber = imsbcPosition.UNNumber;
pi.IMOClass = imsbcPosition.IMOClass;
if (imsbcPosition.Quantity_KGM.HasValue)
pi.NetMassKGM = (float)imsbcPosition.Quantity_KGM.Value;
pi.Remarks = imsbcPosition.Remarks;
if (!imsbcPosition.StowagePosition.IsNullOrEmpty())
_nsw.conveyance.GeneralCargo[0].LocationOnBoard = imsbcPosition.StowagePosition;
if (!imsbcPosition.PortOfLoading.IsNullOrEmpty())
_nsw.conveyance.GeneralCargo[0].PortOfLoadingLocode = imsbcPosition.PortOfLoading;
if (!imsbcPosition.PortOfDischarge.IsNullOrEmpty())
_nsw.conveyance.GeneralCargo[0].PortOfDischargeLocode = imsbcPosition.PortOfDischarge;
pi.Index = imsbcPosition.Identifier;
imsbcPositions[i] = pi;
}
dgList.Add(imsbcPositions);
}
#endregion
#region IMDGPositions
if (haz.MARPOLPositions.Count > 0)
{
positionmarpol[] marpolPositions = new positionmarpol[haz.MARPOLPositions.Count];
for (int i = 0; i < haz.MARPOLPositions.Count;i++)
{
positionmarpol pi = new positionmarpol();
MARPOL_Annex_I_Position marpolPosition = haz.MARPOLPositions[i];
pi.Name = marpolPosition.Name;
if (marpolPosition.FlashpointInformation.HasValue)
pi.FlashpointInformation = (flashpointinfotype) marpolPosition.FlashpointInformation.Value;
pi.Flashpoint_CEL = marpolPosition.Flashpoint_CEL;
if (marpolPosition.Quantity_KGM.HasValue)
pi.NetMassKGM = (float)marpolPosition.Quantity_KGM.Value;
pi.Remarks = marpolPosition.Remarks;
if (!marpolPosition.StowagePosition.IsNullOrEmpty())
_nsw.conveyance.GeneralCargo[0].LocationOnBoard = marpolPosition.StowagePosition;
if (!marpolPosition.PortOfLoading.IsNullOrEmpty())
_nsw.conveyance.GeneralCargo[0].PortOfLoadingLocode = marpolPosition.PortOfLoading;
if (!marpolPosition.PortOfDischarge.IsNullOrEmpty())
_nsw.conveyance.GeneralCargo[0].PortOfDischargeLocode = marpolPosition.PortOfDischarge;
pi.Index = marpolPosition.Identifier;
marpolPositions[i] = pi;
}
dgList.Add(marpolPositions);
}
#endregion
// HACK! Die erste "vorhandene" Liste. Dieses Format hier setzt voraus dass man immer nur einen Listentyp
// haben kann, das steht aber nirgends im NSW
// alles andere wird bis zur Klärung hier erst einmal ignoriert
_nsw.conveyance.GeneralCargo[0].DGList = (object[]) dgList[0]; //.ToArray();
}
}
break;
#region INFO
@ -399,6 +692,11 @@ namespace bsmd.hisnord
if (message.MessageCore.IsTransit)
{
transit _transit = _nsw.conveyance.Item as transit;
if (_transit == null)
{
_transit = new transit();
_nsw.conveyance.Item = _transit;
}
_transit.LastPort = new lastport();
if (noa_nod.ETDFromLastPort.HasValue)
@ -415,6 +713,12 @@ namespace bsmd.hisnord
else if (message.MessageCore.Incoming) // einlaufend
{
import _import = _nsw.conveyance.Item as import;
if (_import == null)
{
_import = new import();
_nsw.conveyance.Item = _import;
}
_import.LastPort = new lastport();
if (noa_nod.ETDFromLastPort.HasValue)
_import.LastPort.ETD = noa_nod.ETDFromLastPort.Value;
@ -431,6 +735,12 @@ namespace bsmd.hisnord
else // auslaufend
{
export _export = _nsw.conveyance.Item as export;
if (_export == null)
{
_export = new export();
_nsw.conveyance.Item = _export;
}
_export.NextPort = new nextporthazmat();
if (noa_nod.ETAToNextPort.HasValue)
_export.NextPort.ETA = noa_nod.ETAToNextPort.Value;

View File

@ -0,0 +1,94 @@
//
// Class: VisitId
// Current CLR: 4.0.30319.34209
// System: Microsoft Visual Studio 10.0
// Author: dani
// Created: 8/12/2015 8:27:03 AM
//
// Copyright (c) 2015 Informatikbüro Daniel Schick. All rights reserved.
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using log4net;
namespace bsmd.hisnord
{
[Serializable]
public class VisitId
{
private string _visitId = null;
private static ILog _log = LogManager.GetLogger(typeof(bsmd.hisnord.VisitId));
#region Construction
public VisitId(string visitId)
{
this._visitId = visitId;
}
public VisitId() { }
#endregion
#region Properties
[XmlAttribute]
public string ConveyanceCode { get; set; }
[XmlText]
public string Value { get; set; }
/// <summary>
/// Extract Guid aus ConveyanceCode
/// </summary>
public Guid? MessageCoreId
{
get
{
Guid? result = null;
if (this.ConveyanceCode != null)
{
int startIndex = this.ConveyanceCode.IndexOf('-');
if (startIndex > 0)
{
Guid tmpGuid;
if (Guid.TryParse(this.ConveyanceCode.Substring(startIndex + 1), out tmpGuid))
result = tmpGuid;
}
}
return result;
}
}
#endregion
#region Deserialization
public static VisitId ReadVisitId(string filename)
{
VisitId aVisitId = null;
try
{
XmlSerializer serializer = new XmlSerializer(typeof(bsmd.hisnord.VisitId));
using (FileStream fs = new FileStream(filename, FileMode.Open))
{
aVisitId = (VisitId)serializer.Deserialize(fs);
}
}
catch (Exception ex)
{
_log.ErrorFormat("Exception occurred during deserialization: {0}", ex.Message);
}
return aVisitId;
}
#endregion
}
}

View File

@ -31,6 +31,7 @@ namespace bsmd.hisnord
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardInput = false;
process.StartInfo.UseShellExecute = false;
// der Transmitter schickt alles was im Ausgabe-Verzeichnis ist
// damit das gut geht schicken wir die Nachrichten einzeln und arbeiten jeweils das
// Ergebnis ab