2.3, Version vor Besuch in Bremen Sept 2015
This commit is contained in:
parent
d280fd9570
commit
646f356053
Binary file not shown.
BIN
nsw/GISIS_Codes_DE-Häfen_150915.xls
Normal file
BIN
nsw/GISIS_Codes_DE-Häfen_150915.xls
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -36,6 +36,7 @@ namespace SendNSWMessageService
|
|||||||
this.EventLog.Log = "Application";
|
this.EventLog.Log = "Application";
|
||||||
this.Init(args);
|
this.Init(args);
|
||||||
this.EventLog.WriteEntry("NSW Send Service started.", EventLogEntryType.Information);
|
this.EventLog.WriteEntry("NSW Send Service started.", EventLogEntryType.Information);
|
||||||
|
_log.Info("NSW Send Service started");
|
||||||
this.DoOnce();
|
this.DoOnce();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,6 +101,7 @@ namespace SendNSWMessageService
|
|||||||
(message.InternalStatus == Message.BSMDStatus.PREPARE) ||
|
(message.InternalStatus == Message.BSMDStatus.PREPARE) ||
|
||||||
(message.InternalStatus == Message.BSMDStatus.TOSEND))
|
(message.InternalStatus == Message.BSMDStatus.TOSEND))
|
||||||
{
|
{
|
||||||
|
_log.Debug("Visit/Transit not found, SENDING VISIT/TRANSIT message");
|
||||||
if (message.HIS == Message.NSWProvider.UNDEFINED)
|
if (message.HIS == Message.NSWProvider.UNDEFINED)
|
||||||
message.HIS = core.InitialHIS;
|
message.HIS = core.InitialHIS;
|
||||||
toSendMessageList.Add(message);
|
toSendMessageList.Add(message);
|
||||||
@ -109,14 +111,18 @@ namespace SendNSWMessageService
|
|||||||
}
|
}
|
||||||
else // eine VISIT/TRANSIT Id ist vorhanden, die Daten können gesendet werden
|
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
|
// Änderung Sept 15: versendet werden alle Nachrichten, die *nicht* bestätigt sind
|
||||||
// diese wurden entweder von EU-NOAD angelegt oder durch den Melder bearbeitet
|
// also auch alles was auf in bearbeitung / Korrektur etc steht
|
||||||
// Wichtig ist eine erfolgreich versendete Meldung nicht erneut zu versenden
|
// 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)
|
foreach (Message message in messages)
|
||||||
{
|
{
|
||||||
if ((message.InternalStatus == Message.BSMDStatus.UNDEFINED) ||
|
// T
|
||||||
(message.InternalStatus == Message.BSMDStatus.PREPARE) ||
|
if (message.InternalStatus != Message.BSMDStatus.CONFIRMED)
|
||||||
(message.InternalStatus == Message.BSMDStatus.TOSEND))
|
//(message.InternalStatus == Message.BSMDStatus.PREPARE) ||
|
||||||
|
//(message.InternalStatus == Message.BSMDStatus.TOSEND))
|
||||||
{
|
{
|
||||||
if (message.HIS == Message.NSWProvider.UNDEFINED)
|
if (message.HIS == Message.NSWProvider.UNDEFINED)
|
||||||
message.HIS = core.InitialHIS;
|
message.HIS = core.InitialHIS;
|
||||||
@ -177,6 +183,12 @@ namespace SendNSWMessageService
|
|||||||
_log.ErrorFormat("SENDING message {0}: {1}", message.Id.ToString(), ex.Message);
|
_log.ErrorFormat("SENDING message {0}: {1}", message.Id.ToString(), ex.Message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (toSendMessageList.Count > 0)
|
||||||
|
{
|
||||||
|
core.BSMDStatusInternal = MessageCore.BSMDStatus.SENT;
|
||||||
|
DBManager.Instance.Save(core);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,6 +226,7 @@ namespace SendNSWMessageService
|
|||||||
{
|
{
|
||||||
this._timer.Enabled = false;
|
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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,6 +21,8 @@ namespace bsmd.dakosy.ResponseService
|
|||||||
new SFTPService()
|
new SFTPService()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
log4net.Config.XmlConfigurator.Configure();
|
||||||
|
|
||||||
if (Debugger.IsAttached)
|
if (Debugger.IsAttached)
|
||||||
{
|
{
|
||||||
((SFTPService)ServicesToRun[0]).Init(null);
|
((SFTPService)ServicesToRun[0]).Init(null);
|
||||||
|
|||||||
@ -85,7 +85,6 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="App.config" />
|
<None Include="App.config" />
|
||||||
<None Include="..\bsmdKey.snk" />
|
<None Include="..\bsmdKey.snk" />
|
||||||
<None Include="ClassDiagram1.cd" />
|
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
<None Include="Properties\Settings.settings">
|
<None Include="Properties\Settings.settings">
|
||||||
<Generator>SettingsSingleFileGenerator</Generator>
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
|
|||||||
@ -25,7 +25,7 @@ namespace bsmd.database
|
|||||||
#region Properties
|
#region Properties
|
||||||
|
|
||||||
[ShowReport]
|
[ShowReport]
|
||||||
[Validation(ValidationCode.DOUBLE_GT_ZERO)]
|
[Validation(ValidationCode.NOT_NULL)]
|
||||||
public DateTime? ATAPortOfCall { get; set; }
|
public DateTime? ATAPortOfCall { get; set; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@ -88,7 +88,7 @@ namespace bsmd.database
|
|||||||
ATA ata = new ATA();
|
ATA ata = new ATA();
|
||||||
|
|
||||||
ata.id = reader.GetGuid(0);
|
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);
|
result.Add(ata);
|
||||||
}
|
}
|
||||||
reader.Close();
|
reader.Close();
|
||||||
|
|||||||
@ -25,7 +25,7 @@ namespace bsmd.database
|
|||||||
#region Properties
|
#region Properties
|
||||||
|
|
||||||
[ShowReport]
|
[ShowReport]
|
||||||
[Validation(ValidationCode.DOUBLE_GT_ZERO)]
|
[Validation(ValidationCode.NOT_NULL)]
|
||||||
public DateTime? ATDPortOfCall { get; set; }
|
public DateTime? ATDPortOfCall { get; set; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@ -88,7 +88,7 @@ namespace bsmd.database
|
|||||||
ATD atd = new ATD();
|
ATD atd = new ATD();
|
||||||
|
|
||||||
atd.id = reader.GetGuid(0);
|
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);
|
result.Add(atd);
|
||||||
}
|
}
|
||||||
reader.Close();
|
reader.Close();
|
||||||
|
|||||||
@ -65,7 +65,7 @@ namespace bsmd.database
|
|||||||
public static DateTime? TryParseDateTime(string text)
|
public static DateTime? TryParseDateTime(string text)
|
||||||
{
|
{
|
||||||
DateTime date;
|
DateTime date;
|
||||||
if(DateTime.TryParse(text, DateTimeFormatInfo.InvariantInfo,DateTimeStyles.AssumeUniversal, out date))
|
if(DateTime.TryParse(text, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.AssumeUniversal, out date))
|
||||||
{
|
{
|
||||||
return date;
|
return date;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -52,7 +52,7 @@ namespace bsmd.database
|
|||||||
public bool? DPGClassificationIMSBC { get; set; }
|
public bool? DPGClassificationIMSBC { get; set; }
|
||||||
|
|
||||||
[ShowReport]
|
[ShowReport]
|
||||||
public bool DPGClassificationMARPOL_ANNEX_I { get; set; }
|
public bool? DPGClassificationMARPOL_ANNEX_I { get; set; }
|
||||||
|
|
||||||
public List<IMDGPosition> IMDGPositions { get { return this.imdgPositions; } }
|
public List<IMDGPosition> IMDGPositions { get { return this.imdgPositions; } }
|
||||||
|
|
||||||
|
|||||||
@ -12,7 +12,7 @@ namespace bsmd.database
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Basisklasse aller Nachrichtentypen, zentrale Klasse für die NSW App
|
/// Basisklasse aller Nachrichtentypen, zentrale Klasse für die NSW App
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class Message : DatabaseEntity, ISublistContainer
|
public class Message : DatabaseEntity, ISublistContainer, IComparable<Message>
|
||||||
{
|
{
|
||||||
|
|
||||||
#region Fields
|
#region Fields
|
||||||
@ -514,5 +514,17 @@ namespace bsmd.database
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region IComparable implementation
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sort messages by notification class
|
||||||
|
/// </summary>
|
||||||
|
public int CompareTo(Message other)
|
||||||
|
{
|
||||||
|
return this.MessageNotificationClass.CompareTo(other.MessageNotificationClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -82,14 +82,14 @@ namespace bsmd.database
|
|||||||
{
|
{
|
||||||
NOA_NOD nn = new NOA_NOD();
|
NOA_NOD nn = new NOA_NOD();
|
||||||
nn.id = reader.GetGuid(0);
|
nn.id = reader.GetGuid(0);
|
||||||
if (!reader.IsDBNull(1)) nn.ETAToPortOfCall = reader.GetDateTime(1);
|
if (!reader.IsDBNull(1)) nn.ETAToPortOfCall = DateTime.SpecifyKind(reader.GetDateTime(1), DateTimeKind.Utc);
|
||||||
if (!reader.IsDBNull(2)) nn.ETDFromPortOfCall = reader.GetDateTime(2);
|
if (!reader.IsDBNull(2)) nn.ETDFromPortOfCall = DateTime.SpecifyKind(reader.GetDateTime(2), DateTimeKind.Utc);
|
||||||
if (!reader.IsDBNull(3)) nn.ETAToKielCanal = reader.GetDateTime(3);
|
if (!reader.IsDBNull(3)) nn.ETAToKielCanal = DateTime.SpecifyKind(reader.GetDateTime(3), DateTimeKind.Utc);
|
||||||
if (!reader.IsDBNull(4)) nn.ETDFromKielCanal = reader.GetDateTime(4);
|
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(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(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);
|
result.Add(nn);
|
||||||
}
|
}
|
||||||
reader.Close();
|
reader.Close();
|
||||||
@ -182,14 +182,14 @@ namespace bsmd.database
|
|||||||
errors.Add(RuleEngine.CreateError(ValidationCode.E123, "Departure time before arrival time!", null));
|
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));
|
errors.Add(RuleEngine.CreateError(ValidationCode.E125, "ETD last port must be set!", null));
|
||||||
|
|
||||||
if (this.ETDFromPortOfCall.HasValue && this.ETAToNextPort.HasValue &&
|
if (this.ETDFromPortOfCall.HasValue && this.ETAToNextPort.HasValue &&
|
||||||
this.ETAToNextPort < ETDFromPortOfCall)
|
this.ETAToNextPort < ETDFromPortOfCall)
|
||||||
errors.Add(RuleEngine.CreateError(ValidationCode.E122, "ETD PoC must be before ETA next port!", null));
|
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));
|
errors.Add(RuleEngine.CreateError(ValidationCode.E124, "ETA next port must be set!", null));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,6 +2,6 @@
|
|||||||
|
|
||||||
[assembly: AssemblyCompany("Informatikbüro Daniel Schick")]
|
[assembly: AssemblyCompany("Informatikbüro Daniel Schick")]
|
||||||
[assembly: AssemblyProduct("BSMD NSW interface")]
|
[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: AssemblyCopyright("Copyright © 2014-2015 Informatikbüro Daniel Schick. All rights reserved.")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
@ -4,6 +4,6 @@
|
|||||||
// by using the '*' as shown below:
|
// by using the '*' as shown below:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
|
||||||
[assembly: AssemblyVersion("2.2.0.*")]
|
[assembly: AssemblyVersion("2.3.0.*")]
|
||||||
// wenn das nicht auskommentiert wird erhalten wir eine Warnung
|
// wenn das nicht auskommentiert wird erhalten wir eine Warnung
|
||||||
// [assembly: AssemblyFileVersion("1.0.0.*")]
|
// [assembly: AssemblyFileVersion("1.0.0.*")]
|
||||||
|
|||||||
@ -20,6 +20,84 @@ namespace bsmd.database
|
|||||||
{
|
{
|
||||||
public class RuleEngine
|
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 ILog log = LogManager.GetLogger(typeof(RuleEngine));
|
||||||
private static Dictionary<int, string> errorTextList = null;
|
private static Dictionary<int, string> errorTextList = null;
|
||||||
private static Dictionary<int, string> violationTextList = null;
|
private static Dictionary<int, string> violationTextList = null;
|
||||||
@ -67,6 +145,8 @@ namespace bsmd.database
|
|||||||
object propValue = property.GetValue(entity, null);
|
object propValue = property.GetValue(entity, null);
|
||||||
string value = (propValue == null) ? string.Empty : propValue.ToString();
|
string value = (propValue == null) ? string.Empty : propValue.ToString();
|
||||||
ValidationCode validationCode = ValidationCode.NONE;
|
ValidationCode validationCode = ValidationCode.NONE;
|
||||||
|
int maxlen = 0;
|
||||||
|
|
||||||
if (Attribute.IsDefined(property, attribType))
|
if (Attribute.IsDefined(property, attribType))
|
||||||
{
|
{
|
||||||
if (entity.GetValidationBlock() == DatabaseEntity.ValidationBlock.BLOCK1)
|
if (entity.GetValidationBlock() == DatabaseEntity.ValidationBlock.BLOCK1)
|
||||||
@ -89,6 +169,7 @@ namespace bsmd.database
|
|||||||
ValidationAttribute validationAttribute = Attribute.GetCustomAttribute(property, typeof(ValidationAttribute))
|
ValidationAttribute validationAttribute = Attribute.GetCustomAttribute(property, typeof(ValidationAttribute))
|
||||||
as ValidationAttribute;
|
as ValidationAttribute;
|
||||||
validationCode = validationAttribute.Code;
|
validationCode = validationAttribute.Code;
|
||||||
|
maxlen = validationAttribute.MaxLen;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,9 +188,8 @@ namespace bsmd.database
|
|||||||
break;
|
break;
|
||||||
case ValidationCode.LOCODE_GER:
|
case ValidationCode.LOCODE_GER:
|
||||||
{
|
{
|
||||||
// TODO: Jan nach der Liste anhauen
|
if(!RuleEngine.gerLocodeList.Contains(value))
|
||||||
Regex rgx = new Regex("[A-Z]{2}[A-Z0-9]{3}");
|
errors.Add(RuleEngine.CreateError(validationCode, property.Name, value));
|
||||||
if (!rgx.IsMatch(value)) errors.Add(RuleEngine.CreateError(validationCode, property.Name, value));
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ValidationCode.INT_GT_ZERO:
|
case ValidationCode.INT_GT_ZERO:
|
||||||
@ -144,6 +224,18 @@ namespace bsmd.database
|
|||||||
if (!rgx.IsMatch(value)) errors.Add(RuleEngine.CreateError(validationCode, property.Name, value));
|
if (!rgx.IsMatch(value)) errors.Add(RuleEngine.CreateError(validationCode, property.Name, value));
|
||||||
}
|
}
|
||||||
break;
|
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:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -191,6 +283,17 @@ namespace bsmd.database
|
|||||||
log.InfoFormat("Msg Id {0} Type {1} has {2} errors and {3} violations",
|
log.InfoFormat("Msg Id {0} Type {1} has {2} errors and {3} violations",
|
||||||
entity.Id, entity.MessageNotificationClass, errors.Count, violations.Count);
|
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
|
#endregion
|
||||||
|
|||||||
@ -67,6 +67,7 @@ namespace bsmd.database
|
|||||||
public string ISMCompanyName { get; set; }
|
public string ISMCompanyName { get; set; }
|
||||||
|
|
||||||
[ShowReport]
|
[ShowReport]
|
||||||
|
[Validation(ValidationCode.STRING_EXACT_LEN, 7)]
|
||||||
public string ISMCompanyId { get; set; }
|
public string ISMCompanyId { get; set; }
|
||||||
|
|
||||||
[ShowReport]
|
[ShowReport]
|
||||||
|
|||||||
@ -27,6 +27,8 @@ namespace bsmd.database
|
|||||||
DOUBLE_GT_ZERO,
|
DOUBLE_GT_ZERO,
|
||||||
FLAG_CODE,
|
FLAG_CODE,
|
||||||
TWO_DIGIT,
|
TWO_DIGIT,
|
||||||
|
STRING_MAXLEN,
|
||||||
|
STRING_EXACT_LEN,
|
||||||
E121 = 121,
|
E121 = 121,
|
||||||
E122 = 122,
|
E122 = 122,
|
||||||
E123 = 123,
|
E123 = 123,
|
||||||
@ -68,12 +70,25 @@ namespace bsmd.database
|
|||||||
public class ValidationAttribute : Attribute
|
public class ValidationAttribute : Attribute
|
||||||
{
|
{
|
||||||
private ValidationCode validationCode;
|
private ValidationCode validationCode;
|
||||||
|
private int maxlen;
|
||||||
|
|
||||||
public ValidationAttribute(ValidationCode code)
|
public ValidationAttribute(ValidationCode code)
|
||||||
{
|
{
|
||||||
this.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
|
public ValidationCode Code
|
||||||
{
|
{
|
||||||
get { return this.validationCode; }
|
get { return this.validationCode; }
|
||||||
|
|||||||
35
nsw/Source/bsmd.dbh.ResponseService/Properties/Settings.Designer.cs
generated
Normal file
35
nsw/Source/bsmd.dbh.ResponseService/Properties/Settings.Designer.cs
generated
Normal 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"]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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>
|
||||||
@ -81,6 +81,9 @@ namespace bsmd.herberg.FormService
|
|||||||
if (aMessageCore.HerbergReportType.Equals("Pre-Departure Notification Update") ||
|
if (aMessageCore.HerbergReportType.Equals("Pre-Departure Notification Update") ||
|
||||||
aMessageCore.HerbergReportType.Equals("Departure Notification Update"))
|
aMessageCore.HerbergReportType.Equals("Departure Notification Update"))
|
||||||
isDeparture = true;
|
isDeparture = true;
|
||||||
|
|
||||||
|
aMessageCore.Incoming = !isDeparture;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "EmailContactReportingVessel":
|
case "EmailContactReportingVessel":
|
||||||
aMessageCore.HerbergEmailContactReportingVessel = formData.value;
|
aMessageCore.HerbergEmailContactReportingVessel = formData.value;
|
||||||
@ -301,19 +304,22 @@ namespace bsmd.herberg.FormService
|
|||||||
foreach (int key in nDict.Keys)
|
foreach (int key in nDict.Keys)
|
||||||
{
|
{
|
||||||
Dictionary<string, string> subvDict = nDict[key];
|
Dictionary<string, string> subvDict = nDict[key];
|
||||||
CallPurpose cp = noa_nod.GetSublistElementWithIdentifier(key.ToString()) as CallPurpose;
|
if (subvDict.Count > 0)
|
||||||
if (cp == null)
|
|
||||||
{
|
{
|
||||||
cp = new CallPurpose();
|
CallPurpose cp = noa_nod.GetSublistElementWithIdentifier(key.ToString()) as CallPurpose;
|
||||||
cp.Identifier = key.ToString();
|
if (cp == null)
|
||||||
cp.NOA_NOD = noa_nod;
|
{
|
||||||
noa_nod.CallPurposes.Add(cp);
|
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,43 +421,49 @@ namespace bsmd.herberg.FormService
|
|||||||
if (vDict.ContainsKey("InfectedAreaDate")) mdh.InfectedAreaDate = Extensions.TryParseDateTime(vDict["InfectedAreaDate"]);
|
if (vDict.ContainsKey("InfectedAreaDate")) mdh.InfectedAreaDate = Extensions.TryParseDateTime(vDict["InfectedAreaDate"]);
|
||||||
|
|
||||||
// sublisten
|
// sublisten
|
||||||
foreach (int key in nDict.Keys)
|
if (!mdh.MDHSimplification ?? true)
|
||||||
{
|
{
|
||||||
Dictionary<string, string> pDict = nDict[key];
|
foreach (int key in nDict.Keys)
|
||||||
PortOfCallLast30Days poc30 = mdh.GetSublistElementWithIdentifier(key.ToString()) as PortOfCallLast30Days;
|
|
||||||
if (poc30 == null)
|
|
||||||
{
|
{
|
||||||
poc30 = new PortOfCallLast30Days();
|
Dictionary<string, string> pDict = nDict[key];
|
||||||
poc30.Identifier = key.ToString();
|
if (pDict.Count > 0)
|
||||||
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();
|
PortOfCallLast30Days poc30 = mdh.GetSublistElementWithIdentifier(key.ToString()) as PortOfCallLast30Days;
|
||||||
PortOfCallLast30DaysCrewJoinedShip poc30Crew = poc30.GetSublistElementWithIdentifier(crewname) as PortOfCallLast30DaysCrewJoinedShip;
|
if (poc30 == null)
|
||||||
if (poc30Crew == null)
|
|
||||||
{
|
{
|
||||||
poc30Crew = new PortOfCallLast30DaysCrewJoinedShip();
|
poc30 = new PortOfCallLast30Days();
|
||||||
poc30Crew.Identifier = crewname;
|
poc30.Identifier = key.ToString();
|
||||||
poc30Crew.PortOfCallLast30Days = poc30;
|
mdh.PortOfCallLast30Days.Add(poc30);
|
||||||
poc30Crew.PortOfCallLast30DaysCrewJoinedShipName = crewname;
|
poc30.MDH = mdh;
|
||||||
poc30.CrewJoinedShip.Add(poc30Crew);
|
}
|
||||||
saveMessages.Add(poc30Crew);
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -547,18 +559,21 @@ namespace bsmd.herberg.FormService
|
|||||||
{
|
{
|
||||||
PortOfItinerary poi = bpol.GetSublistElementWithIdentifier(key.ToString()) as PortOfItinerary;
|
PortOfItinerary poi = bpol.GetSublistElementWithIdentifier(key.ToString()) as PortOfItinerary;
|
||||||
Dictionary<string, string> ppDict = nDict[key];
|
Dictionary<string, string> ppDict = nDict[key];
|
||||||
if (poi == null)
|
if (ppDict.Count > 0)
|
||||||
{
|
{
|
||||||
poi = new PortOfItinerary();
|
if (poi == null)
|
||||||
poi.Identifier = key.ToString();
|
{
|
||||||
poi.BPOL = bpol;
|
poi = new PortOfItinerary();
|
||||||
bpol.PortOfItineraries.Add(poi);
|
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)
|
catch (Exception ex)
|
||||||
@ -954,60 +969,63 @@ namespace bsmd.herberg.FormService
|
|||||||
foreach (int key in nDict.Keys)
|
foreach (int key in nDict.Keys)
|
||||||
{
|
{
|
||||||
Dictionary<string, string> sDict = nDict[key];
|
Dictionary<string, string> sDict = nDict[key];
|
||||||
bool changedPfC = false;
|
if (sDict.Count > 0)
|
||||||
bool changedStS = false;
|
|
||||||
|
|
||||||
ShipToShipActivitiesDuringLastTenPortFacilitiesCalled sts = sec.GetShipToShipWithIdentifier(key.ToString());
|
|
||||||
if(sts == null)
|
|
||||||
{
|
{
|
||||||
sts = new ShipToShipActivitiesDuringLastTenPortFacilitiesCalled();
|
bool changedPfC = false;
|
||||||
sts.SEC = sec;
|
bool changedStS = false;
|
||||||
sts.Identifier = key.ToString();
|
|
||||||
sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.Add(sts);
|
|
||||||
}
|
|
||||||
|
|
||||||
LastTenPortFacilitiesCalled poc = sec.GetPortFacilityWithIdentifier(key.ToString());
|
ShipToShipActivitiesDuringLastTenPortFacilitiesCalled sts = sec.GetShipToShipWithIdentifier(key.ToString());
|
||||||
if (poc == null)
|
if (sts == null)
|
||||||
{
|
{
|
||||||
poc = new LastTenPortFacilitiesCalled();
|
sts = new ShipToShipActivitiesDuringLastTenPortFacilitiesCalled();
|
||||||
poc.SEC = sec;
|
sts.SEC = sec;
|
||||||
poc.Identifier = key.ToString();
|
sts.Identifier = key.ToString();
|
||||||
sec.LastTenPortFacilitesCalled.Add(poc);
|
sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.Add(sts);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sDict.ContainsKey("PortFacilityPortName")) { poc.PortFacilityPortName = sDict["PortFacilityPortName"]; changedPfC = true; }
|
LastTenPortFacilitiesCalled poc = sec.GetPortFacilityWithIdentifier(key.ToString());
|
||||||
if (sDict.ContainsKey("PortFacilityPortCountry")) { poc.PortFacilityPortCountry = sDict["PortFacilityPortCountry"]; changedPfC = true; }
|
if (poc == null)
|
||||||
if (sDict.ContainsKey("PortFacilityPortLoCode") && sDict.ContainsKey("PortFacilityPortCountryCode") && (sDict["PortFacilityPortLoCode"].Length < 4))
|
{
|
||||||
{
|
poc = new LastTenPortFacilitiesCalled();
|
||||||
poc.PortFacilityPortLoCode = sDict["PortFacilityPortCountryCode"] + sDict["PortFacilityPortLoCode"];
|
poc.SEC = sec;
|
||||||
changedPfC = true;
|
poc.Identifier = key.ToString();
|
||||||
}
|
sec.LastTenPortFacilitesCalled.Add(poc);
|
||||||
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 (sDict.ContainsKey("ShipToShipActivityLocationName")) { sts.ShipToShipActivityLocationName = sDict["ShipToShipActivityLocationName"]; changedStS = true; }
|
if (sDict.ContainsKey("PortFacilityPortName")) { poc.PortFacilityPortName = sDict["PortFacilityPortName"]; changedPfC = true; }
|
||||||
if (sDict.ContainsKey("ShipToShipActivityLocationLoCode") && sDict.ContainsKey("ShipToShipActivityCountryCode") && (sDict["ShipToShipActivityLocationLoCode"].Length < 4))
|
if (sDict.ContainsKey("PortFacilityPortCountry")) { poc.PortFacilityPortCountry = sDict["PortFacilityPortCountry"]; changedPfC = true; }
|
||||||
{
|
if (sDict.ContainsKey("PortFacilityPortLoCode") && sDict.ContainsKey("PortFacilityPortCountryCode") && (sDict["PortFacilityPortLoCode"].Length < 4))
|
||||||
sts.ShipToShipActivityLocationLoCode = sDict["ShipToShipActivityCountryCode"] + sDict["ShipToShipActivityLocationLoCode"];
|
{
|
||||||
changedStS = true;
|
poc.PortFacilityPortLoCode = sDict["PortFacilityPortCountryCode"] + sDict["PortFacilityPortLoCode"];
|
||||||
}
|
changedPfC = 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("PortFacilityDateOfArrival")) { poc.PortFacilityDateOfArrival = Extensions.TryParseDateTime(sDict["PortFacilityDateOfArrival"]); changedPfC = true; }
|
||||||
if (sDict.ContainsKey("ShipToShipActivityDateFrom")) { sts.ShipToShipActivityDateFrom = Extensions.TryParseDateTime(sDict["ShipToShipActivityDateFrom"]); changedStS = true; }
|
if (sDict.ContainsKey("PortFacilityDateOfDeparture")) { poc.PortFacilityDateOfDeparture = Extensions.TryParseDateTime(sDict["PortFacilityDateOfDeparture"]); changedPfC = true; }
|
||||||
if (sDict.ContainsKey("ShipToShipActivityDateTo")) { sts.ShipToShipActivityDateTo = Extensions.TryParseDateTime(sDict["ShipToShipActivityDateTo"]); changedStS = true; }
|
if (sDict.ContainsKey("PortFacilityShipSecurityLevel")) { poc.PortFacilityShipSecurityLevel = Byte.Parse(sDict["PortFacilityShipSecurityLevel"]); changedPfC = true; }
|
||||||
if (sDict.ContainsKey("ShipToShipActivityType")) { sts.ShipToShipActivityType = sDict["ShipToShipActivityType"]; changedStS = true; }
|
if (sDict.ContainsKey("PortFacilitySecurityMattersToReport")) { poc.PortFacilitySecurityMattersToReport = sDict["PortFacilitySecurityMattersToReport"]; changedPfC = true; }
|
||||||
if (sDict.ContainsKey("ShipToShipActivitySecurityMattersToReport")) { sts.ShipToShipActivitySecurityMattersToReport = sDict["ShipToShipActivitySecurityMattersToReport"]; changedStS = 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 (sDict.ContainsKey("ShipToShipActivityLocationName")) { sts.ShipToShipActivityLocationName = sDict["ShipToShipActivityLocationName"]; changedStS = true; }
|
||||||
if (changedStS) saveMessages.Add(sts);
|
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)
|
catch (Exception ex)
|
||||||
@ -1209,67 +1227,69 @@ namespace bsmd.herberg.FormService
|
|||||||
foreach (int key in subDict.Keys)
|
foreach (int key in subDict.Keys)
|
||||||
{
|
{
|
||||||
Dictionary<string, string> aDict = subDict[key];
|
Dictionary<string, string> aDict = subDict[key];
|
||||||
IMDGPosition imdgPosition = haz.GetIMDGPositionWithIdentifier(key.ToString());
|
if (aDict.Count > 0)
|
||||||
if (imdgPosition == null)
|
|
||||||
{
|
{
|
||||||
imdgPosition = new IMDGPosition();
|
IMDGPosition imdgPosition = haz.GetIMDGPositionWithIdentifier(key.ToString());
|
||||||
imdgPosition.Identifier = key.ToString();
|
if (imdgPosition == null)
|
||||||
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();
|
imdgPosition = new IMDGPosition();
|
||||||
newSRisk.IMDGPosition = imdgPosition;
|
imdgPosition.Identifier = key.ToString();
|
||||||
imdgPosition.SubsidiaryRiskList.Add(newSRisk);
|
haz.IMDGPositions.Add(imdgPosition);
|
||||||
|
imdgPosition.HAZ = haz;
|
||||||
}
|
}
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1279,33 +1299,36 @@ namespace bsmd.herberg.FormService
|
|||||||
foreach (int key in subDict.Keys)
|
foreach (int key in subDict.Keys)
|
||||||
{
|
{
|
||||||
Dictionary<string, string> aDict = subDict[key];
|
Dictionary<string, string> aDict = subDict[key];
|
||||||
IBCPosition ibcPosition = haz.GetIBCPositionWithIdentifier(key.ToString());
|
if (aDict.Count > 0)
|
||||||
if (ibcPosition == null)
|
|
||||||
{
|
{
|
||||||
ibcPosition = new IBCPosition();
|
IBCPosition ibcPosition = haz.GetIBCPositionWithIdentifier(key.ToString());
|
||||||
ibcPosition.Identifier = key.ToString();
|
if (ibcPosition == null)
|
||||||
haz.IBCPositions.Add(ibcPosition);
|
{
|
||||||
ibcPosition.HAZ = haz;
|
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("ProductName")) ibcPosition.ProductName = aDict["ProductName"];
|
||||||
if (aDict.ContainsKey("PollutionCategory")) ibcPosition.PollutionCategory = (byte)Enum.Parse(typeof(Enums.PollutionCategory), aDict["PollutionCategory"], true);
|
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("Hazards")) ibcPosition.Hazards = Enums.ParseHazardType(aDict["Hazards"]);
|
||||||
if (aDict.ContainsKey("FlashpointInformation")) ibcPosition.FlashpointInformation = Enums.ParseFlashpointInformation(aDict["FlashpointInformation"]);
|
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("Quantity_KGM")) ibcPosition.Quantity_KGM = Extensions.TryParseDouble(aDict["Quantity_KGM"]);
|
||||||
if (aDict.ContainsKey("StowagePosition")) ibcPosition.StowagePosition = aDict["StowagePosition"];
|
if (aDict.ContainsKey("StowagePosition")) ibcPosition.StowagePosition = aDict["StowagePosition"];
|
||||||
if (aDict.ContainsKey("PortCodeOfLoading") && aDict.ContainsKey("CountryCodeOfLoading"))
|
if (aDict.ContainsKey("PortCodeOfLoading") && aDict.ContainsKey("CountryCodeOfLoading"))
|
||||||
ibcPosition.PortOfLoading = aDict["CountryCodeOfLoading"] + aDict["PortCodeOfLoading"];
|
ibcPosition.PortOfLoading = aDict["CountryCodeOfLoading"] + aDict["PortCodeOfLoading"];
|
||||||
if (aDict.ContainsKey("PortCodeOfDischarge") && aDict.ContainsKey("CountryCodeOfDischarge"))
|
if (aDict.ContainsKey("PortCodeOfDischarge") && aDict.ContainsKey("CountryCodeOfDischarge"))
|
||||||
ibcPosition.PortOfDischarge = aDict["CountryCodeOfDischarge"] + aDict["PortCodeOfDischarge"];
|
ibcPosition.PortOfDischarge = aDict["CountryCodeOfDischarge"] + aDict["PortCodeOfDischarge"];
|
||||||
if (aDict.ContainsKey("Remarks")) ibcPosition.Remarks = aDict["Remarks"];
|
if (aDict.ContainsKey("Remarks")) ibcPosition.Remarks = aDict["Remarks"];
|
||||||
if (aDict.ContainsKey("Identifier"))
|
if (aDict.ContainsKey("Identifier"))
|
||||||
{
|
{
|
||||||
_log.InfoFormat("Igoring IMDGPosition identifer {0}, using row number {1} instead",
|
_log.InfoFormat("Igoring IMDGPosition identifer {0}, using row number {1} instead",
|
||||||
aDict["Identifier"], key);
|
aDict["Identifier"], key);
|
||||||
}
|
}
|
||||||
|
|
||||||
saveMessages.Add(ibcPosition);
|
saveMessages.Add(ibcPosition);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1315,33 +1338,36 @@ namespace bsmd.herberg.FormService
|
|||||||
foreach (int key in subDict.Keys)
|
foreach (int key in subDict.Keys)
|
||||||
{
|
{
|
||||||
Dictionary<string, string> aDict = subDict[key];
|
Dictionary<string, string> aDict = subDict[key];
|
||||||
|
if (aDict.Count > 0)
|
||||||
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",
|
IGCPosition igcPosition = haz.GetIGCPositionWithIdentifier(key.ToString());
|
||||||
aDict["Identifier"], key);
|
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)
|
foreach (int key in subDict.Keys)
|
||||||
{
|
{
|
||||||
Dictionary<string, string> aDict = subDict[key];
|
Dictionary<string, string> aDict = subDict[key];
|
||||||
IMSBCPosition imsbcPosition = haz.GetIMSBCPositionWithIdentifier(key.ToString());
|
if (aDict.Count > 0)
|
||||||
if (imsbcPosition == null)
|
|
||||||
{
|
{
|
||||||
imsbcPosition = new IMSBCPosition();
|
IMSBCPosition imsbcPosition = haz.GetIMSBCPositionWithIdentifier(key.ToString());
|
||||||
imsbcPosition.Identifier = key.ToString();
|
if (imsbcPosition == null)
|
||||||
imsbcPosition.HAZ = haz;
|
{
|
||||||
haz.IMSBCPositions.Add(imsbcPosition);
|
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("BulkCargoShippingName")) imsbcPosition.BulkCargoShippingName = aDict["BulkCargoShippingName"];
|
||||||
if (aDict.ContainsKey("MHB")) imsbcPosition.MHB = aDict["MHB"].Equals("Y");
|
if (aDict.ContainsKey("MHB")) imsbcPosition.MHB = aDict["MHB"].Equals("Y");
|
||||||
if (aDict.ContainsKey("UNNumber")) imsbcPosition.UNNumber = aDict["UNNumber"];
|
if (aDict.ContainsKey("UNNumber")) imsbcPosition.UNNumber = aDict["UNNumber"];
|
||||||
if (aDict.ContainsKey("IMOClass")) imsbcPosition.IMOClass = aDict["IMOClass"];
|
if (aDict.ContainsKey("IMOClass")) imsbcPosition.IMOClass = aDict["IMOClass"];
|
||||||
if (aDict.ContainsKey("Quantity_KGM")) imsbcPosition.Quantity_KGM = Extensions.TryParseDouble(aDict["Quantity_KGM"]);
|
if (aDict.ContainsKey("Quantity_KGM")) imsbcPosition.Quantity_KGM = Extensions.TryParseDouble(aDict["Quantity_KGM"]);
|
||||||
if (aDict.ContainsKey("StowagePosition")) imsbcPosition.StowagePosition = aDict["StowagePosition"];
|
if (aDict.ContainsKey("StowagePosition")) imsbcPosition.StowagePosition = aDict["StowagePosition"];
|
||||||
if (aDict.ContainsKey("PortCodeOfLoading") && aDict.ContainsKey("CountryCodeOfLoading"))
|
if (aDict.ContainsKey("PortCodeOfLoading") && aDict.ContainsKey("CountryCodeOfLoading"))
|
||||||
imsbcPosition.PortOfLoading = aDict["CountryCodeOfLoading"] + aDict["PortCodeOfLoading"];
|
imsbcPosition.PortOfLoading = aDict["CountryCodeOfLoading"] + aDict["PortCodeOfLoading"];
|
||||||
if (aDict.ContainsKey("PortCodeOfDischarge") && aDict.ContainsKey("CountryCodeOfDischarge"))
|
if (aDict.ContainsKey("PortCodeOfDischarge") && aDict.ContainsKey("CountryCodeOfDischarge"))
|
||||||
imsbcPosition.PortOfDischarge = aDict["CountryCodeOfDischarge"] + aDict["PortCodeOfDischarge"];
|
imsbcPosition.PortOfDischarge = aDict["CountryCodeOfDischarge"] + aDict["PortCodeOfDischarge"];
|
||||||
if (aDict.ContainsKey("Remarks")) imsbcPosition.Remarks = aDict["Remarks"];
|
if (aDict.ContainsKey("Remarks")) imsbcPosition.Remarks = aDict["Remarks"];
|
||||||
if (aDict.ContainsKey("Identifier"))
|
if (aDict.ContainsKey("Identifier"))
|
||||||
{
|
{
|
||||||
_log.InfoFormat("Igoring IMDGPosition identifer {0}, using row number {1} instead",
|
_log.InfoFormat("Igoring IMDGPosition identifer {0}, using row number {1} instead",
|
||||||
aDict["Identifier"], key);
|
aDict["Identifier"], key);
|
||||||
}
|
}
|
||||||
|
|
||||||
saveMessages.Add(imsbcPosition);
|
saveMessages.Add(imsbcPosition);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1387,33 +1416,35 @@ namespace bsmd.herberg.FormService
|
|||||||
foreach (int key in subDict.Keys)
|
foreach (int key in subDict.Keys)
|
||||||
{
|
{
|
||||||
Dictionary<string, string> aDict = subDict[key];
|
Dictionary<string, string> aDict = subDict[key];
|
||||||
MARPOL_Annex_I_Position marpolPosition = haz.GetMARPOLPositionWithIdentifier(key.ToString());
|
if (aDict.Count > 0)
|
||||||
if (marpolPosition == null)
|
|
||||||
{
|
{
|
||||||
marpolPosition = new MARPOL_Annex_I_Position();
|
MARPOL_Annex_I_Position marpolPosition = haz.GetMARPOLPositionWithIdentifier(key.ToString());
|
||||||
marpolPosition.Identifier = key.ToString();
|
if (marpolPosition == null)
|
||||||
marpolPosition.HAZ = haz;
|
{
|
||||||
haz.MARPOLPositions.Add(marpolPosition);
|
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -25,6 +25,8 @@ namespace bsmd.hisnord
|
|||||||
{
|
{
|
||||||
bool retval = true;
|
bool retval = true;
|
||||||
|
|
||||||
|
messages.Sort();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
nsw _nsw = new nsw();
|
nsw _nsw = new nsw();
|
||||||
@ -257,10 +259,301 @@ namespace bsmd.hisnord
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
case Message.NotificationClass.HAZA:
|
case Message.NotificationClass.HAZA:
|
||||||
// abh. von LADG!
|
|
||||||
break;
|
|
||||||
case Message.NotificationClass.HAZD:
|
case Message.NotificationClass.HAZD:
|
||||||
// abh. von LADG!
|
// 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;
|
break;
|
||||||
|
|
||||||
#region INFO
|
#region INFO
|
||||||
@ -399,6 +692,11 @@ namespace bsmd.hisnord
|
|||||||
if (message.MessageCore.IsTransit)
|
if (message.MessageCore.IsTransit)
|
||||||
{
|
{
|
||||||
transit _transit = _nsw.conveyance.Item as transit;
|
transit _transit = _nsw.conveyance.Item as transit;
|
||||||
|
if (_transit == null)
|
||||||
|
{
|
||||||
|
_transit = new transit();
|
||||||
|
_nsw.conveyance.Item = _transit;
|
||||||
|
}
|
||||||
|
|
||||||
_transit.LastPort = new lastport();
|
_transit.LastPort = new lastport();
|
||||||
if (noa_nod.ETDFromLastPort.HasValue)
|
if (noa_nod.ETDFromLastPort.HasValue)
|
||||||
@ -415,6 +713,12 @@ namespace bsmd.hisnord
|
|||||||
else if (message.MessageCore.Incoming) // einlaufend
|
else if (message.MessageCore.Incoming) // einlaufend
|
||||||
{
|
{
|
||||||
import _import = _nsw.conveyance.Item as import;
|
import _import = _nsw.conveyance.Item as import;
|
||||||
|
if (_import == null)
|
||||||
|
{
|
||||||
|
_import = new import();
|
||||||
|
_nsw.conveyance.Item = _import;
|
||||||
|
}
|
||||||
|
|
||||||
_import.LastPort = new lastport();
|
_import.LastPort = new lastport();
|
||||||
if (noa_nod.ETDFromLastPort.HasValue)
|
if (noa_nod.ETDFromLastPort.HasValue)
|
||||||
_import.LastPort.ETD = noa_nod.ETDFromLastPort.Value;
|
_import.LastPort.ETD = noa_nod.ETDFromLastPort.Value;
|
||||||
@ -431,6 +735,12 @@ namespace bsmd.hisnord
|
|||||||
else // auslaufend
|
else // auslaufend
|
||||||
{
|
{
|
||||||
export _export = _nsw.conveyance.Item as export;
|
export _export = _nsw.conveyance.Item as export;
|
||||||
|
if (_export == null)
|
||||||
|
{
|
||||||
|
_export = new export();
|
||||||
|
_nsw.conveyance.Item = _export;
|
||||||
|
}
|
||||||
|
|
||||||
_export.NextPort = new nextporthazmat();
|
_export.NextPort = new nextporthazmat();
|
||||||
if (noa_nod.ETAToNextPort.HasValue)
|
if (noa_nod.ETAToNextPort.HasValue)
|
||||||
_export.NextPort.ETA = noa_nod.ETAToNextPort.Value;
|
_export.NextPort.ETA = noa_nod.ETAToNextPort.Value;
|
||||||
|
|||||||
94
nsw/Source/bsmd.hisnord/VisitId.cs
Normal file
94
nsw/Source/bsmd.hisnord/VisitId.cs
Normal 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
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -31,6 +31,7 @@ namespace bsmd.hisnord
|
|||||||
process.StartInfo.RedirectStandardError = true;
|
process.StartInfo.RedirectStandardError = true;
|
||||||
process.StartInfo.RedirectStandardOutput = true;
|
process.StartInfo.RedirectStandardOutput = true;
|
||||||
process.StartInfo.RedirectStandardInput = false;
|
process.StartInfo.RedirectStandardInput = false;
|
||||||
|
process.StartInfo.UseShellExecute = false;
|
||||||
// der Transmitter schickt alles was im Ausgabe-Verzeichnis ist
|
// der Transmitter schickt alles was im Ausgabe-Verzeichnis ist
|
||||||
// damit das gut geht schicken wir die Nachrichten einzeln und arbeiten jeweils das
|
// damit das gut geht schicken wir die Nachrichten einzeln und arbeiten jeweils das
|
||||||
// Ergebnis ab
|
// Ergebnis ab
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user