Erweiterung für HeFormReader Zusatzfelder für Dänemark
This commit is contained in:
parent
0bd6dca8b9
commit
c3dd32ed53
Binary file not shown.
@ -26,9 +26,15 @@ User: Administrator
|
||||
PW: $chegVAN99!
|
||||
hallo12345
|
||||
|
||||
daniel.schick#
|
||||
bsmd\daniel.schick#
|
||||
yycYYC321
|
||||
|
||||
SVN:
|
||||
daniel.schick
|
||||
kersten.gevers
|
||||
michael.kuehn
|
||||
URL: https://SMDEV01.bsmd.local/svn/BSMD
|
||||
|
||||
|
||||
daniel.schick#
|
||||
Winter2015
|
||||
|
||||
18
nsw/Source/SQL/Update_3.5.1_To_4.0.sql
Normal file
18
nsw/Source/SQL/Update_3.5.1_To_4.0.sql
Normal file
@ -0,0 +1,18 @@
|
||||
PRINT N'Altering [dbo].[LADG]...';
|
||||
|
||||
|
||||
GO
|
||||
ALTER TABLE [dbo].[LADG] ADD [CargoLACode] INT NULL;
|
||||
|
||||
GO
|
||||
|
||||
|
||||
PRINT N'Altering [dbo].[SEC]...';
|
||||
|
||||
|
||||
GO
|
||||
ALTER TABLE [dbo].[SEC] ADD [AreMatterToReport] bit NULL;
|
||||
|
||||
GO
|
||||
|
||||
-- bis hierhin schon aktualisiert
|
||||
@ -39,9 +39,9 @@
|
||||
//
|
||||
// nswSendServiceInstaller
|
||||
//
|
||||
this.nswSendServiceInstaller.Description = "Sending NSW requests to HIS";
|
||||
this.nswSendServiceInstaller.DisplayName = "NSW Send Service";
|
||||
this.nswSendServiceInstaller.ServiceName = "NSWSendService";
|
||||
this.nswSendServiceInstaller.Description = "Sending Testing-NSW requests to HIS";
|
||||
this.nswSendServiceInstaller.DisplayName = "NSW Test Send Service";
|
||||
this.nswSendServiceInstaller.ServiceName = "NSWTestSendService";
|
||||
//
|
||||
// ProjectInstaller
|
||||
//
|
||||
|
||||
@ -118,7 +118,7 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="nswSendServiceProcessInstaller.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
<value>17, 56</value>
|
||||
</metadata>
|
||||
<metadata name="nswSendServiceInstaller.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>196, 17</value>
|
||||
|
||||
4
nsw/Source/SendNSWMessageService/packages.config
Normal file
4
nsw/Source/SendNSWMessageService/packages.config
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="log4net" version="2.0.7" targetFramework="net45" />
|
||||
</packages>
|
||||
@ -1,7 +1,10 @@
|
||||
using log4net;
|
||||
// Copyright (c) 2017 Informatikbüro Daniel Schick
|
||||
//
|
||||
|
||||
|
||||
using log4net;
|
||||
using Microsoft.Office.Interop.Excel;
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
|
||||
@ -1,4 +1,7 @@
|
||||
using bsmd.database;
|
||||
// Copyright (c) 2017 Informatikbüro Daniel Schick
|
||||
//
|
||||
|
||||
using bsmd.database;
|
||||
using bsmd.email;
|
||||
using log4net;
|
||||
using System;
|
||||
|
||||
@ -1,4 +1,8 @@
|
||||
using System.Diagnostics;
|
||||
// Copyright (c) 2017 Informatikbüro Daniel Schick
|
||||
//
|
||||
|
||||
|
||||
using System.Diagnostics;
|
||||
using System.ServiceProcess;
|
||||
|
||||
namespace bsmd.ExcelReadService
|
||||
|
||||
@ -1,4 +1,8 @@
|
||||
using System;
|
||||
// Copyright (c) 2017 Informatikbüro Daniel Schick
|
||||
//
|
||||
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
|
||||
@ -101,6 +101,7 @@
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="App.config" />
|
||||
<None Include="bsmd.ExcelReadService.licenseheader" />
|
||||
<None Include="packages.config" />
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
|
||||
@ -0,0 +1,16 @@
|
||||
extensions: designer.cs generated.cs
|
||||
extensions: .cs .cpp .h
|
||||
// Copyright (c) 2017 Informatikbüro Daniel Schick
|
||||
//
|
||||
|
||||
|
||||
extensions: .aspx .ascx
|
||||
<%--
|
||||
Copyright (c) 2017 Informatikbüro Daniel Schick
|
||||
--%>
|
||||
extensions: .vb
|
||||
'Sample license text.
|
||||
extensions: .xml .config .xsd
|
||||
<!--
|
||||
Sample license text.
|
||||
-->
|
||||
4
nsw/Source/bsmd.dakosy/packages.config
Normal file
4
nsw/Source/bsmd.dakosy/packages.config
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="log4net" version="2.0.7" targetFramework="net45" />
|
||||
</packages>
|
||||
@ -17,6 +17,34 @@ namespace bsmd.database
|
||||
public class LADG : DatabaseEntity, ISublistElement
|
||||
{
|
||||
|
||||
#region LACodes static definition
|
||||
|
||||
private static Lazy<Dictionary<int, string>> laCodes =
|
||||
new Lazy<Dictionary<int, string>>(() => new Dictionary<int, string>
|
||||
{
|
||||
{ 10, "unverpacktes Flüssiggut" },
|
||||
{ 20, "unverpacktes Schüttgut" },
|
||||
{ 30, "unverpacktes oder konventionell verpacktes Stückgut (Stückgut nicht in Containern >= 20 Fuß und nicht auf Ro-Ro-Einheiten)" },
|
||||
{ 31, "Kfz als Handelsgüter" },
|
||||
{ 32, "lebende Tiere als Handelsgüter" },
|
||||
{ 41, "20-Fuß-Container" },
|
||||
{ 42, "40-Fuß-Container" },
|
||||
{ 43, "Container zwischen 20 und 40 Fuß" },
|
||||
{ 44, "Container größer als 40 Fuß" },
|
||||
{ 51, "Straßengüterfahrzeuge einschl. deren Anhänger" },
|
||||
{ 52, "Pkw einschl. deren Anhänger, Krafträder" },
|
||||
{ 53, "Omnibusse" },
|
||||
{ 61, "Anhänger / Sattelauflieger für Straßengüterfahrzeuge" },
|
||||
{ 62, "Sonstige Anhänger von Straßenfahrzeugen (ohne Zugmaschine) und nicht selbstfahrende Straßenfahrzeuge" },
|
||||
{ 63, "Rolltrailer (Anhänger für die Güterbeförderung auf See)" },
|
||||
{ 64, "Trägerschiffsleichter" },
|
||||
{ 65, "Wechselbrücken / -behälter" },
|
||||
{ 66, "Eisenbahngüterwagen" },
|
||||
{ 67, "Reisezugwagen und Triebwagen" }
|
||||
});
|
||||
|
||||
#endregion
|
||||
|
||||
public LADG()
|
||||
{
|
||||
this.tablename = "[dbo].[LADG]";
|
||||
@ -33,6 +61,9 @@ namespace bsmd.database
|
||||
[MaxLength(5)]
|
||||
public string CargoCodeNST { get; set; }
|
||||
|
||||
[ShowReport]
|
||||
public int? CargoLACode { get; set; }
|
||||
|
||||
[ShowReport]
|
||||
public int? CargoNumberOfItems { get; set; }
|
||||
|
||||
@ -50,6 +81,14 @@ namespace bsmd.database
|
||||
|
||||
public string Identifier { get; set; }
|
||||
|
||||
public static Lazy<Dictionary<int, string>> LACodes
|
||||
{
|
||||
get
|
||||
{
|
||||
return laCodes;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region DatabaseEntity implementation
|
||||
@ -75,25 +114,26 @@ namespace bsmd.database
|
||||
scmd.Parameters.AddWithNullableValue("@P6", this.PortOfLoading);
|
||||
scmd.Parameters.AddWithNullableValue("@P7", this.PortOfDischarge);
|
||||
scmd.Parameters.AddWithNullableValue("@P8", this.Identifier);
|
||||
scmd.Parameters.AddWithNullableValue("@P9", this.CargoLACode);
|
||||
|
||||
if (this.IsNew)
|
||||
{
|
||||
scmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, CargoHandlingType, CargoCodeNST, " +
|
||||
"CargoNumberOfItems, CargoGrossQuantity_TNE, PortOfLoading, PortOfDischarge, Identifier) VALUES " +
|
||||
"( @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8 )", this.Tablename);
|
||||
"CargoNumberOfItems, CargoGrossQuantity_TNE, PortOfLoading, PortOfDischarge, Identifier, CargoLACode) VALUES " +
|
||||
"( @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9 )", this.Tablename);
|
||||
}
|
||||
else
|
||||
{
|
||||
scmd.Parameters.AddWithValue(@"ID", this.Id);
|
||||
scmd.CommandText = string.Format("UPDATE {0} SET CargoHandlingType = @P2, CargoCodeNST = @P3, CargoNumberOfItems = @P4, " +
|
||||
"CargoGrossQuantity_TNE = @P5, PortOfLoading = @P6, PortOfDischarge = @P7 WHERE Id = @ID", this.Tablename);
|
||||
"CargoGrossQuantity_TNE = @P5, PortOfLoading = @P6, PortOfDischarge = @P7, CargoLACode = @P9 WHERE Id = @ID", this.Tablename);
|
||||
}
|
||||
}
|
||||
|
||||
public override void PrepareLoadCommand(System.Data.IDbCommand cmd, Message.LoadFilter filter, params object[] criteria)
|
||||
{
|
||||
string query = string.Format("SELECT Id, CargoHandlingType, CargoCodeNST, CargoNumberOfItems, CargoGrossQuantity_TNE, " +
|
||||
"PortOfLoading, PortOfDischarge, Identifier FROM {0}",
|
||||
"PortOfLoading, PortOfDischarge, Identifier, CargoLACode FROM {0}",
|
||||
this.Tablename);
|
||||
|
||||
switch (filter)
|
||||
@ -127,6 +167,7 @@ namespace bsmd.database
|
||||
if (!reader.IsDBNull(5)) ladg.PortOfLoading = reader.GetString(5);
|
||||
if (!reader.IsDBNull(6)) ladg.PortOfDischarge = reader.GetString(6);
|
||||
if (!reader.IsDBNull(7)) ladg.Identifier = reader.GetString(7);
|
||||
if (!reader.IsDBNull(8)) ladg.CargoLACode = reader.GetInt32(8);
|
||||
result.Add(ladg);
|
||||
}
|
||||
reader.Close();
|
||||
|
||||
@ -253,7 +253,7 @@ namespace bsmd.database
|
||||
/// eingetragen)
|
||||
/// </summary>
|
||||
/// <returns>Code nach NSW Spec, null on failure</returns>
|
||||
public int? getCallPurposeCodeFromDescription(string description)
|
||||
public static int? getCallPurposeCodeFromDescription(string description)
|
||||
{
|
||||
if (description.IsNullOrEmpty()) return null;
|
||||
|
||||
|
||||
@ -2,6 +2,6 @@
|
||||
|
||||
[assembly: AssemblyCompany("Informatikbüro Daniel Schick")]
|
||||
[assembly: AssemblyProduct("BSMD NSW interface")]
|
||||
[assembly: AssemblyInformationalVersion("3.3.14")]
|
||||
[assembly: AssemblyInformationalVersion("3.4.0")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2014-2017 Informatikbüro Daniel Schick. All rights reserved.")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
@ -1,4 +1,4 @@
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: AssemblyVersion("3.3.14.*")]
|
||||
[assembly: AssemblyVersion("3.4.0.*")]
|
||||
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
//
|
||||
// In order to sign your assembly you must specify a key to use. Refer to the
|
||||
@ -26,6 +25,6 @@ using System.Runtime.CompilerServices;
|
||||
// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
|
||||
// documentation for more information on this.
|
||||
//
|
||||
// [assembly: AssemblyDelaySign(false)]
|
||||
// [assembly: AssemblyKeyFile("..\bsmdKey.snk")]
|
||||
// [assembly: AssemblyKeyName("")]
|
||||
[assembly: AssemblyDelaySign(false)]
|
||||
[assembly: AssemblyKeyFile("..\\bsmdKey.snk")]
|
||||
[assembly: AssemblyKeyName("")]
|
||||
@ -117,6 +117,9 @@ namespace bsmd.database
|
||||
[Validation2(ValidationCode.NOT_NULL)]
|
||||
public byte? GeneralDescriptionOfCargo { get; set; }
|
||||
|
||||
|
||||
public bool? AreMatterToReport { get; set; }
|
||||
|
||||
[LookupName("SEC.MatterToReport")]
|
||||
[MaxLength(1024)]
|
||||
public string MatterToReport { get; set; }
|
||||
@ -162,6 +165,7 @@ namespace bsmd.database
|
||||
scmd.Parameters.AddWithNullableValue("@P20", this.KielCanalPassagePlanned);
|
||||
scmd.Parameters.AddWithNullableValue("@P21", this.KielCanalPassagePlannedIncomming);
|
||||
scmd.Parameters.AddWithNullableValue("@P22", this.KielCanalPassagePlannedOutgoing);
|
||||
scmd.Parameters.AddWithNullableValue("@P23", this.AreMatterToReport);
|
||||
|
||||
if (this.IsNew)
|
||||
{
|
||||
@ -171,9 +175,9 @@ namespace bsmd.database
|
||||
"CSOLastName, CSOFirstName, CSOPhone, CSOEMail, ValidISSCOnBoard, ReasonsForNoValidISSC, " +
|
||||
"ISSCType, ISSCIssuerType, ISSCIssuerName,ISSCDateOfExpiration, ApprovedSecurityPlanOnBoard, " +
|
||||
"CurrentShipSecurityLevel, PortFacilityOfArrival, GeneralDescriptionOfCargo, CSOFax, MatterToReport, " +
|
||||
"KielCanalPassagePlanned, KielCanalPassagePlannedIncomming, KielCanalPassagePlannedOutgoing) " +
|
||||
"KielCanalPassagePlanned, KielCanalPassagePlannedIncomming, KielCanalPassagePlannedOutgoing, AreMatterToReport) " +
|
||||
"VALUES ( @ID, @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12, @P13, @P14, @P15, @P16, " +
|
||||
"@P17, @P18, @P19, @P20, @P21, @P22 )", this.Tablename);
|
||||
"@P17, @P18, @P19, @P20, @P21, @P22, @P23 )", this.Tablename);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -184,7 +188,8 @@ namespace bsmd.database
|
||||
"ISSCType = @P10, ISSCIssuerType = @P11, ISSCIssuerName = @P12, ISSCDateOfExpiration = @P13, " +
|
||||
"ApprovedSecurityPlanOnBoard = @P14, CurrentShipSecurityLevel = @P15, PortFacilityOfArrival = @P16, " +
|
||||
"GeneralDescriptionOfCargo = @P17, CSOFax = @P18, MatterToReport = @P19, KielCanalPassagePlanned = @P20, " +
|
||||
"KielCanalPassagePlannedIncomming = @P21, KielCanalPassagePlannedOutgoing = @P22 WHERE Id = @ID", this.Tablename);
|
||||
"KielCanalPassagePlannedIncomming = @P21, KielCanalPassagePlannedOutgoing = @P22, AreMatterToReport = @P23 " +
|
||||
"WHERE Id = @ID", this.Tablename);
|
||||
}
|
||||
}
|
||||
|
||||
@ -194,7 +199,8 @@ namespace bsmd.database
|
||||
"CSOFirstName, CSOPhone, CSOEMail, ValidISSCOnBoard, ReasonsForNoValidISSC, " +
|
||||
"ISSCType, ISSCIssuerType, ISSCIssuerName, ISSCDateOfExpiration, ApprovedSecurityPlanOnBoard, " +
|
||||
"CurrentShipSecurityLevel, PortFacilityOfArrival, GeneralDescriptionOfCargo, CSOFax, MatterToReport, " +
|
||||
"KielCanalPassagePlanned, KielCanalPassagePlannedIncomming, KielCanalPassagePlannedOutgoing FROM {0}", this.Tablename);
|
||||
"KielCanalPassagePlanned, KielCanalPassagePlannedIncomming, KielCanalPassagePlannedOutgoing, AreMatterToReport " +
|
||||
"FROM {0}", this.Tablename);
|
||||
|
||||
switch (filter)
|
||||
{
|
||||
@ -241,6 +247,7 @@ namespace bsmd.database
|
||||
if (!reader.IsDBNull(19)) sec.KielCanalPassagePlanned = reader.GetBoolean(19);
|
||||
if (!reader.IsDBNull(20)) sec.KielCanalPassagePlannedIncomming = reader.GetDateTime(20);
|
||||
if (!reader.IsDBNull(21)) sec.KielCanalPassagePlannedOutgoing = reader.GetDateTime(21);
|
||||
if (!reader.IsDBNull(22)) sec.AreMatterToReport = reader.GetBoolean(22);
|
||||
|
||||
result.Add(sec);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -25,7 +25,7 @@ namespace bsmd.dbh
|
||||
{
|
||||
if (message == null) return false;
|
||||
|
||||
DBHWebReference.RootType rootType = DBHWebReference.RootType.DATA;
|
||||
RootType rootType = RootType.DATA;
|
||||
|
||||
if (message.ReportingParty == null)
|
||||
{
|
||||
@ -49,7 +49,7 @@ namespace bsmd.dbh
|
||||
if (useTest)
|
||||
client.Url = "https://edi-gate.dbh.de/test/bsmd-soap";
|
||||
|
||||
bsmd.dbh.DBHWebReference.ReportingParty rp = new bsmd.dbh.DBHWebReference.ReportingParty();
|
||||
DBHWebReference.ReportingParty rp = new DBHWebReference.ReportingParty();
|
||||
rp.RPCity = message.ReportingParty.City;
|
||||
rp.RPCountry = message.ReportingParty.Country;
|
||||
rp.RPEMail = message.ReportingParty.EMail;
|
||||
@ -62,14 +62,14 @@ namespace bsmd.dbh
|
||||
rp.RPStreetAndNumber = message.ReportingParty.StreetAndNumber;
|
||||
rp.RPTypeSpecified = message.ReportingParty.ReportingPartyType.HasValue;
|
||||
if (rp.RPTypeSpecified)
|
||||
rp.RPType = (DBHWebReference.ReportingPartyRPType) message.ReportingParty.ReportingPartyType.Value;
|
||||
rp.RPType = (ReportingPartyRPType) message.ReportingParty.ReportingPartyType.Value;
|
||||
|
||||
DateTime timestamp = DateTime.Now;
|
||||
string version = "3.0";
|
||||
object item = null;
|
||||
string senderReference = message.Id.Value.ToString("N");
|
||||
|
||||
DBHWebReference.ItemChoiceType2 itemChoiceType2 = DBHWebReference.ItemChoiceType2.Visit;
|
||||
ItemChoiceType2 itemChoiceType2 = ItemChoiceType2.Visit;
|
||||
|
||||
switch (message.MessageNotificationClass)
|
||||
{
|
||||
@ -265,6 +265,19 @@ namespace bsmd.dbh
|
||||
|
||||
rootSEC.CurrentShipSecurityLevel = (int)sec.CurrentShipSecurityLevel.Value;
|
||||
|
||||
if(!message.MessageCore.IsTransit)
|
||||
{
|
||||
if(sec.KielCanalPassagePlanned ?? false)
|
||||
{
|
||||
rootSEC.KielCanalPassage = new RootSECKielCanalPassage();
|
||||
rootSEC.KielCanalPassage.KielCanalPassagePlanned = "Y";
|
||||
if (sec.KielCanalPassagePlannedIncomming.HasValue)
|
||||
rootSEC.KielCanalPassage.KielCanalPassagePlannedIncoming = sec.KielCanalPassagePlannedIncomming.Value.ToDBHDateString();
|
||||
if (sec.KielCanalPassagePlannedOutgoing.HasValue)
|
||||
rootSEC.KielCanalPassage.KielCanalPassagePlannedOutgoing = sec.KielCanalPassagePlannedOutgoing.Value.ToDBHDateString();
|
||||
}
|
||||
}
|
||||
|
||||
if (sec.SECSimplification ?? false)
|
||||
{
|
||||
choiceType1s.Add(ItemsChoiceType1.SECSimplification);
|
||||
@ -346,7 +359,11 @@ namespace bsmd.dbh
|
||||
s2s.ShipToShipActivityDateFrom = sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled[i].ShipToShipActivityDateFrom.Value;
|
||||
if (sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled[i].ShipToShipActivityDateTo.HasValue)
|
||||
s2s.ShipToShipActivityDateTo = sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled[i].ShipToShipActivityDateTo.Value;
|
||||
s2s.ShipToShipActivityType = sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled[i].ShipToShipActivityType;
|
||||
|
||||
int activityType;
|
||||
if (!Int32.TryParse(sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled[i].ShipToShipActivityType, out activityType))
|
||||
activityType = NOA_NOD.getCallPurposeCodeFromDescription(sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled[i].ShipToShipActivityType) ?? 0;
|
||||
s2s.ShipToShipActivityType = activityType;
|
||||
s2s.ShipToShipActivitySecurityMattersToReport = sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled[i].ShipToShipActivitySecurityMattersToReport;
|
||||
}
|
||||
}
|
||||
@ -601,12 +618,39 @@ namespace bsmd.dbh
|
||||
if (ladg.CargoHandlingType > 1) continue;
|
||||
cargo.CargoHandlingType = (HandlingType)(ladg.CargoHandlingType);
|
||||
}
|
||||
|
||||
if (!ladg.CargoCodeNST.IsNullOrEmpty())
|
||||
{
|
||||
if (cargo.CargoCodeNST.Length > 2)
|
||||
{
|
||||
cargo.CargoCodeNST = ladg.CargoCodeNST.Substring(0, 2);
|
||||
cargo.CargoCodeNST_3 = ladg.CargoCodeNST[3].ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
cargo.CargoCodeNST = ladg.CargoCodeNST;
|
||||
}
|
||||
}
|
||||
|
||||
if (ladg.CargoLACode.HasValue)
|
||||
cargo.CargoLACode = ladg.CargoLACode.Value;
|
||||
|
||||
if (ladg.CargoGrossQuantity_TNE.HasValue)
|
||||
cargo.CargoGrossQuantity_TNE = Decimal.Round((decimal) ladg.CargoGrossQuantity_TNE.Value, 3);
|
||||
cargo.CargoNumberOfItemsSpecified = ladg.CargoNumberOfItems.HasValue;
|
||||
if (ladg.CargoNumberOfItems.HasValue)
|
||||
cargo.CargoNumberOfItems = ladg.CargoNumberOfItems.Value;
|
||||
|
||||
if (ladg.PortOfLoading.IsNullOrEmpty())
|
||||
cargo.CargoPortOfLoading = "ZZUKN";
|
||||
else
|
||||
cargo.CargoPortOfLoading = ladg.PortOfLoading;
|
||||
|
||||
if (ladg.PortOfDischarge.IsNullOrEmpty())
|
||||
cargo.CargoPortOfDischarge = "ZZUKN";
|
||||
else
|
||||
cargo.CargoPortOfDischarge = ladg.PortOfDischarge;
|
||||
|
||||
cargoList.Add(cargo);
|
||||
}
|
||||
rootLADG.Cargo = cargoList.ToArray();
|
||||
@ -678,9 +722,9 @@ namespace bsmd.dbh
|
||||
if (pre72h.ConditionCargoBallastTanks.HasValue)
|
||||
rootPre.TankerDetails.ConditionCargoBallastTanks = (TankCondition)pre72h.ConditionCargoBallastTanks.Value;
|
||||
rootPre.TankerDetails.NatureOfCargo = pre72h.NatureOfCargo;
|
||||
rootPre.TankerDetails.VolumeOfCargo_Cargo_TNESpecified = pre72h.VolumeOfCargo.HasValue;
|
||||
rootPre.TankerDetails.VolumeOfCargo_TNESpecified = pre72h.VolumeOfCargo.HasValue;
|
||||
if (pre72h.VolumeOfCargo.HasValue)
|
||||
rootPre.TankerDetails.VolumeOfCargo_Cargo_TNE = Decimal.Round((decimal)(pre72h.VolumeOfCargo.Value), 3);
|
||||
rootPre.TankerDetails.VolumeOfCargo_TNE = Decimal.Round((decimal)(pre72h.VolumeOfCargo.Value), 3);
|
||||
|
||||
}
|
||||
rootPre.PlannedOperations = pre72h.PlannedOperations;
|
||||
@ -863,7 +907,7 @@ namespace bsmd.dbh
|
||||
List<object> wasteItems = new List<object>();
|
||||
List<ItemsChoiceType3> choiceType3s = new List<ItemsChoiceType3>();
|
||||
|
||||
choiceType3s.Add(ItemsChoiceType3.ConfirmationOfCorrectness);
|
||||
choiceType3s.Add(ItemsChoiceType3.ConfirmationOfCorrectnessAndSufficiency);
|
||||
wasteItems.Add(was.ConfirmationOfCorrectness ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N);
|
||||
|
||||
if (was.LastWasteDisposalDate.HasValue)
|
||||
@ -900,10 +944,11 @@ namespace bsmd.dbh
|
||||
wasteItems.Add(rww);
|
||||
|
||||
Waste waste = was.Waste[j];
|
||||
rww.WasteType = new RootWASWasteWasteType();
|
||||
rww.WasteType.WasteCode = waste.WasteType ?? 0;
|
||||
rww.WasteType.WasteDescription = waste.WasteDescription;
|
||||
|
||||
rww.WasteDescription = waste.WasteDescription;
|
||||
if (waste.WasteType.HasValue)
|
||||
rww.WasteType = (WasteType)(waste.WasteType.Value - 1); // in unserer DB 1-basiert(!) im dbh Struct nicht
|
||||
rww.WasteDisposedAtLastPort_MTQ = decimal.Round((decimal) (waste.WasteDisposedAtLastPort_MTQ ?? 0), 3);
|
||||
rww.WasteDisposalAmount_MTQ = decimal.Round((decimal)(waste.WasteDisposalAmount_MTQ ?? 0), 3);
|
||||
|
||||
rww.WasteDetails = new RootWASWasteWasteDetails();
|
||||
@ -912,7 +957,6 @@ namespace bsmd.dbh
|
||||
rww.WasteDetails.WasteAmountGeneratedTillNextPort_MTQ = decimal.Round((decimal)(waste.WasteAmountGeneratedTillNextPort_MTQ ?? 0), 3);
|
||||
rww.WasteDetails.WasteDisposalPort = waste.WasteDisposalPort;
|
||||
if (rww.WasteDetails.WasteDisposalPort.IsNullOrEmpty()) rww.WasteDetails.WasteDisposalPort = "ZZUKN";
|
||||
|
||||
}
|
||||
|
||||
rootWAS.ItemsElementName = choiceType3s.ToArray();
|
||||
@ -1019,7 +1063,7 @@ namespace bsmd.dbh
|
||||
|
||||
rootHAZA.ItemsElementName[1] = ItemsChoiceType5.DPGOnArrival;
|
||||
|
||||
RootHAZADPGOnArrival dpgOnArrival = new RootHAZADPGOnArrival();
|
||||
DBHWebReference.RootHAZADPGOnArrival dpgOnArrival = new DBHWebReference.RootHAZADPGOnArrival();
|
||||
|
||||
#region IMDG
|
||||
if (haz.IMDGPositions.Count > 0)
|
||||
@ -1032,7 +1076,7 @@ namespace bsmd.dbh
|
||||
|
||||
rootIMDG.UNNumber = imdgPos.UNNumber;
|
||||
if (imdgPos.PackingGroup.HasValue)
|
||||
rootIMDG.PackingGroup = (PackingGroupType)imdgPos.PackingGroup.Value;
|
||||
rootIMDG.PackingGroup = (DBHWebReference.PackingGroupType) imdgPos.PackingGroup.Value;
|
||||
rootIMDG.ProperShippingName = imdgPos.ProperShippingName;
|
||||
rootIMDG.IMOClass = imdgPos.IMOClass;
|
||||
// rootIMDG.CompatibilityGroup = imdgPos.CompatibilityGroup;
|
||||
@ -1067,14 +1111,14 @@ namespace bsmd.dbh
|
||||
rootIMDG.SubsidiaryRisks[sCount] = imdgPos.SubsidiaryRiskList[sCount].SubsidiaryRisk;
|
||||
}
|
||||
if (imdgPos.MarinePollutant.HasValue)
|
||||
rootIMDG.MarinePollutant = imdgPos.MarinePollutant.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N;
|
||||
rootIMDG.MarinePollutant = imdgPos.MarinePollutant.Value ? DBHWebReference.RootSECValidISSCOnBoard.Y : DBHWebReference.RootSECValidISSCOnBoard.N;
|
||||
if (imdgPos.NumberOfPackages.HasValue)
|
||||
rootIMDG.NumberOfPackages = imdgPos.NumberOfPackages.Value;
|
||||
rootIMDG.PackageType = imdgPos.PackageType;
|
||||
if (imdgPos.LimitedQuantities.HasValue)
|
||||
rootIMDG.LimitedQuantities = imdgPos.LimitedQuantities.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N;
|
||||
rootIMDG.LimitedQuantities = imdgPos.LimitedQuantities.Value ? DBHWebReference.RootSECValidISSCOnBoard.Y : DBHWebReference.RootSECValidISSCOnBoard.N;
|
||||
if (imdgPos.ExceptedQuantities.HasValue)
|
||||
rootIMDG.ExceptedQuantities = imdgPos.ExceptedQuantities.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N;
|
||||
rootIMDG.ExceptedQuantities = imdgPos.ExceptedQuantities.Value ? DBHWebReference.RootSECValidISSCOnBoard.Y : DBHWebReference.RootSECValidISSCOnBoard.N;
|
||||
rootIMDG.NetQuantity_KGMSpecified = imdgPos.NetQuantity_KGM.HasValue;
|
||||
if (imdgPos.NetQuantity_KGM.HasValue)
|
||||
rootIMDG.NetQuantity_KGM = decimal.Round((decimal)imdgPos.NetQuantity_KGM.Value, 3);
|
||||
@ -1086,7 +1130,7 @@ namespace bsmd.dbh
|
||||
rootIMDG.Volume_MTQ = decimal.Round((decimal)imdgPos.Volume_MTQ.Value, 3);
|
||||
rootIMDG.GeneralCargoIBCSpecified = imdgPos.GeneralCargoIBC.HasValue;
|
||||
if (imdgPos.GeneralCargoIBC.HasValue)
|
||||
rootIMDG.GeneralCargoIBC = imdgPos.GeneralCargoIBC.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N;
|
||||
rootIMDG.GeneralCargoIBC = imdgPos.GeneralCargoIBC.Value ? DBHWebReference.RootSECValidISSCOnBoard.Y : DBHWebReference.RootSECValidISSCOnBoard.N;
|
||||
rootIMDG.ContainerNumber = imdgPos.ContainerNumber;
|
||||
rootIMDG.VehicleLicenseNumber = imdgPos.VehicleLicenseNumber;
|
||||
// rootIMDG.StowagePosition = imdgPos.StowagePosition;
|
||||
@ -1110,12 +1154,12 @@ namespace bsmd.dbh
|
||||
|
||||
rootIBC.ProductName = ibcPos.ProductName;
|
||||
if (ibcPos.PollutionCategory.HasValue)
|
||||
rootIBC.PollutionCategory = (PollutionCategoryType)ibcPos.PollutionCategory.Value;
|
||||
rootIBC.PollutionCategory = (DBHWebReference.PollutionCategoryType)ibcPos.PollutionCategory.Value;
|
||||
rootIBC.HazardsSpecified = ibcPos.Hazards.HasValue;
|
||||
if (ibcPos.Hazards.HasValue)
|
||||
rootIBC.Hazards = (HazardType)ibcPos.Hazards.Value;
|
||||
rootIBC.Hazards = (DBHWebReference.HazardType) ibcPos.Hazards.Value;
|
||||
if (ibcPos.FlashpointInformation.HasValue)
|
||||
rootIBC.FlashpointInformation = (FlashpointInfoType)ibcPos.FlashpointInformation.Value;
|
||||
rootIBC.FlashpointInformation = (DBHWebReference.FlashpointInfoType) ibcPos.FlashpointInformation.Value;
|
||||
rootIBC.Flashpoint_CEL = ibcPos.Flashpoint_CEL;
|
||||
if (ibcPos.Quantity_KGM.HasValue)
|
||||
rootIBC.Quantity_KGM = decimal.Round((decimal)ibcPos.Quantity_KGM.Value, 3);
|
||||
@ -1124,7 +1168,7 @@ namespace bsmd.dbh
|
||||
rootIBC.PortOfDischarge = ibcPos.PortOfDischarge;
|
||||
rootIBC.SpecRef15_19Specified = ibcPos.SpecRef15_19.HasValue;
|
||||
if (ibcPos.SpecRef15_19.HasValue)
|
||||
rootIBC.SpecRef15_19 = ibcPos.SpecRef15_19.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N;
|
||||
rootIBC.SpecRef15_19 = ibcPos.SpecRef15_19.Value ? DBHWebReference.RootSECValidISSCOnBoard.Y : DBHWebReference.RootSECValidISSCOnBoard.N;
|
||||
rootIBC.Remarks = ibcPos.Remarks;
|
||||
|
||||
dpgOnArrival.DPGItemIBC[i] = rootIBC;
|
||||
@ -1167,7 +1211,7 @@ namespace bsmd.dbh
|
||||
|
||||
rootIMSBC.BulkCargoShippingName = imsbcPos.BulkCargoShippingName;
|
||||
if (imsbcPos.MHB.HasValue)
|
||||
rootIMSBC.MHB = imsbcPos.MHB.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N;
|
||||
rootIMSBC.MHB = imsbcPos.MHB.Value ? DBHWebReference.RootSECValidISSCOnBoard.Y : DBHWebReference.RootSECValidISSCOnBoard.N;
|
||||
rootIMSBC.UNNumber = imsbcPos.UNNumber;
|
||||
rootIMSBC.IMOClass = imsbcPos.IMOClass;
|
||||
if (imsbcPos.Quantity_KGM.HasValue)
|
||||
@ -1185,15 +1229,15 @@ namespace bsmd.dbh
|
||||
#region MARPOL_ANNEX_I
|
||||
if (haz.MARPOLPositions.Count > 0)
|
||||
{
|
||||
dpgOnArrival.DPGItemMARPOLAnnexI = new MARPOLPosition[haz.MARPOLPositions.Count];
|
||||
dpgOnArrival.DPGItemMARPOLAnnexI = new DBHWebReference.MARPOLPosition[haz.MARPOLPositions.Count];
|
||||
for (int i = 0; i < haz.MARPOLPositions.Count; i++)
|
||||
{
|
||||
MARPOLPosition rootMarpol = new MARPOLPosition();
|
||||
DBHWebReference.MARPOLPosition rootMarpol = new DBHWebReference.MARPOLPosition();
|
||||
MARPOL_Annex_I_Position marpolPos = haz.MARPOLPositions[i];
|
||||
|
||||
rootMarpol.Name = marpolPos.Name;
|
||||
if (marpolPos.FlashpointInformation.HasValue)
|
||||
rootMarpol.FlashpointInformation = (FlashpointInfoType)marpolPos.FlashpointInformation.Value;
|
||||
rootMarpol.FlashpointInformation = (DBHWebReference.FlashpointInfoType) marpolPos.FlashpointInformation.Value;
|
||||
rootMarpol.Flashpoint_CEL = marpolPos.Flashpoint_CEL;
|
||||
if (marpolPos.Quantity_KGM.HasValue)
|
||||
rootMarpol.Quantity_KGM = decimal.Round((decimal)marpolPos.Quantity_KGM.Value, 3);
|
||||
@ -1495,7 +1539,10 @@ namespace bsmd.dbh
|
||||
|
||||
_log.InfoFormat("Send Url: {0}", client.Url);
|
||||
|
||||
RootVersion rootVersion = RootVersion.Item40;
|
||||
|
||||
string result = client.Root(
|
||||
rootVersion,
|
||||
version,
|
||||
timestamp,
|
||||
Properties.Settings.Default.Sender, // BSMD sender Kennung (festverdrahtet)
|
||||
|
||||
@ -6,17 +6,24 @@
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element minOccurs="0" name="Version">
|
||||
<xs:element minOccurs="1" maxOccurs="1" name="Version">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Version number of schema</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:minLength value="1" />
|
||||
<xs:maxLength value="5" />
|
||||
<xs:enumeration value="4.0" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="SourceDocumentVersion">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Version information of the source (e.g. file or document) from which the data of this message originates</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string" />
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="Timestamp" type="xs:dateTime">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Timestamp, when the message is sent</xs:documentation>
|
||||
@ -177,7 +184,7 @@
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="ReportingParty" type="ReportingParty" />
|
||||
<xs:element minOccurs="0" name="ReportingParty" type="ReportingParty" />
|
||||
<xs:element name="AgentCompanyName" type="String99">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Name of ship agency</xs:documentation>
|
||||
@ -185,8 +192,7 @@
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="AgentStreetAndNumber" type="String99">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Street, Number
|
||||
</xs:documentation>
|
||||
<xs:documentation>Street, Number</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="AgentPostalCode" type="String24">
|
||||
@ -340,7 +346,8 @@
|
||||
<xs:element name="ATAPortOfCall" type="NswDateTime">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Actual Time of Arrival (ATA) at first port facility in port of call (YYYY-MM-DDThh:mm:ssTZD).
|
||||
The provided value must not be more than 15 minutes in the future, otherwise Violation 141 will occur.</xs:documentation>
|
||||
The provided value must not be more than 15 minutes in the future, otherwise Violation 141 will occur.
|
||||
If ATA is notified before any voyage information was provided via NOA_NOD, Violation 861 will occur.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
@ -360,7 +367,9 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
<xs:element name="ATDPortOfCall" type="NswDateTime">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Actual Time of Departure (ATD) from last port facility in port of call (YYYY-MM-DDThh:mm:ssTZD).
|
||||
The provided value must not be more than 15 minutes in the future, otherwise Violation 141 will occur.</xs:documentation>
|
||||
The provided value must not be more than 15 minutes in the future, otherwise Violation 141 will occur.
|
||||
If ATD is notified before any voyage information was provided via NOA_NOD, Violation 881 will occur.
|
||||
If ATD is notified before ATA was provided, Violation 882 will occur.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
@ -377,6 +386,36 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
<xs:documentation>Reporter data</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="KielCanalPassage">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Information about a planned Kiel Canal Passage.
|
||||
This attribute is only applicable for a port call (VISIT). If it is provided for a TRANSIT, Violation 705 occurs.</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="KielCanalPassagePlanned" type="FixedStringY">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Identification for a planned Kiel-Canal passage (fixed value Y)</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="KielCanalPassagePlannedIncoming" type="NswDateTime">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Estimated Time of Arrival at Kiel-Canal Lock (ETA-NOK) - Date incoming journey to PortOfCall. Mandatory if KielCanalPassagePlanned=Y and KielCanalPassagePlannedOutgoing is empty.
|
||||
If neither KielCanalPassagePlannedIncoming nor KielCanalPassagePlannedOutgoing is provided, Violation 706 occurs.
|
||||
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="KielCanalPassagePlannedOutgoing" type="NswDateTime">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Estimated Time of Arrival at Kiel-Canal Lock (ETA-NOK) - Date outgoing journey from PortOfCall. Mandatory if KielCanalPassagePlanned=Y and KielCanalPassagePlannedIncoming is empty.
|
||||
If neither KielCanalPassagePlannedIncoming nor KielCanalPassagePlannedOutgoing is provided, Violation 706 occurs.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="CurrentShipSecurityLevel" type="ShipSecurityLevel">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Current ship security level (1-3)</xs:documentation>
|
||||
@ -525,7 +564,7 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" maxOccurs="unbounded" name="ShipToShipActivities">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Ship-to-ship acitivities</xs:documentation>
|
||||
<xs:documentation>List of ship-to-ship acitivities</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
@ -574,7 +613,18 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
<xs:documentation>Date to (YYYY-MM-DD in GMT)</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element name="ShipToShipActivityType" type="String255" />
|
||||
<xs:element name="ShipToShipActivityType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Ship-to-ship-activity, coded.
|
||||
Use one of the codes specifying the purpose of the conveyance call declared in UN/EDIFACT DataElement 8025 (http://www.unece.org/trade/untdid/d01a/tred/tred8025.htm).</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:minInclusive value="1" />
|
||||
<xs:maxInclusive value="23" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="ShipToShipActivitySecurityMattersToReport" type="String255" />
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
@ -976,9 +1026,20 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
<xs:documentation>Cargo handling type (load or discharge)</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="CargoLACode">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Cargo type code according to the key list of cargo types and units</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:minInclusive value="10" />
|
||||
<xs:maxInclusive value="99" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="CargoCodeNST">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Cargo code according to Cargo catalogue Attachment 1 - NST2007</xs:documentation>
|
||||
<xs:documentation>Division code of cargo according to NST-2007</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
@ -986,6 +1047,16 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="CargoCodeNST_3">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Group code of cargo according to NST-2007 (3rd digit after the "." (dot) of the group code only!)</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="[0-9AB]{1}" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="CargoNumberOfItems">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Cargo quantity. Required if CargoCodeNST equals 11, 12, 16 or 19 (see Cargo catalogue Attachment 1 - NST2007). Throws Violation 721 if field is omitted of empty.</xs:documentation>
|
||||
@ -1001,6 +1072,16 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
<xs:documentation>Gross quantity in tons (TNE)</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="CargoPortOfLoading" type="UnLoCode">
|
||||
<xs:annotation>
|
||||
<xs:documentation>LoCode of port where the cargo was loaded on board (UNECE LOCODE) or ZZUKN if unknown</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="CargoPortOfDischarge" type="UnLoCode">
|
||||
<xs:annotation>
|
||||
<xs:documentation>LoCode of port where the cargo will be discharged (UNECE LOCODE) or ZZUKN if unknown</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
@ -1147,7 +1228,7 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
<xs:documentation>Nature of cargo</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="VolumeOfCargo_Cargo_TNE" type="DecimalPositive3">
|
||||
<xs:element minOccurs="0" name="VolumeOfCargo_TNE" type="DecimalPositive3">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Volume of cargo in tons (TNE)</xs:documentation>
|
||||
</xs:annotation>
|
||||
@ -1449,25 +1530,46 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
<xs:documentation>Waste disposal order type (all, some, none)</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="9" maxOccurs="9" name="Waste">
|
||||
<xs:element minOccurs="0" maxOccurs="unbounded" name="Waste">
|
||||
<xs:annotation>
|
||||
<xs:documentation>For each type of waste (see field WasteType) exactly one element is mandatory. This format simplification is only used to simplify transfer between information systems (see also Directive RL2000/59 Art. 6 of Annex II). Results in Violation 783 if one or more waste types are omitted.</xs:documentation>
|
||||
<xs:documentation>All waste types provided in Directive 2015/2087 Annex II must be provided (except for Sewage) at least once. Results in Violation 783 if one or more mandatory waste types are omitted.</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="WasteType" type="WasteType">
|
||||
<xs:element name="WasteType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Waste/Cargo residues type to be disposed: waste oils (sludge), waste oils (bilge water), other waste oils, food waste, plastic garbage, sewage, cargo-associated waste, and cargo residues.</xs:documentation>
|
||||
<xs:documentation>Type of waste to be disposed</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="WasteCode">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Waste code according to Waste Type Codes list. Results in Violation 784 if an invalid waste code is provided.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:minInclusive value="1000" />
|
||||
<xs:maxInclusive value="9999" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="WasteDescription" type="String99">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Description for type 3, 8, and 9. Required for those type. Will otherwise result in Violation 781.</xs:documentation>
|
||||
<xs:documentation>Textual description, required for those waste types marked in the Waste Type Codes list. Will otherwise result in Violation 781.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="WasteDisposalAmount_MTQ" type="DecimalZeroPositive3">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Amount of this type to be disposed in cubic meters (MTQ)</xs:documentation>
|
||||
<xs:documentation>Amount of waste of this waste type to be disposed in cubic meters (MTQ)</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element name="WasteDisposedAtLastPort_MTQ" type="DecimalZeroPositive3">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Amount of waste of this type that has been discharged at the last port of disposal in cubic meters (MTQ)</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="WasteDetails">
|
||||
@ -1478,12 +1580,12 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
<xs:sequence>
|
||||
<xs:element name="WasteCapacity_MTQ" type="DecimalZeroPositive3">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Maximum dedicated storage capacity of this type on board in cubic meters (MTQ)</xs:documentation>
|
||||
<xs:documentation>Maximum dedicated storage capacity of waste of this type on board in cubic meters (MTQ)</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element name="WasteAmountRetained_MTQ" type="DecimalZeroPositive3">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Amount of this type retained on board in cubic meters (MTQ)</xs:documentation>
|
||||
<xs:documentation>Amount of waste of this type retained on board in cubic meters (MTQ)</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element name="WasteDisposalPort" type="UnLoCode">
|
||||
@ -1493,7 +1595,7 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
</xs:element>
|
||||
<xs:element name="WasteAmountGeneratedTillNextPort_MTQ" type="DecimalZeroPositive3">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Estimated waste/cargo residues amount of each type generated between port of call and next port in cubic meters (MTQ)</xs:documentation>
|
||||
<xs:documentation>Estimated waste/cargo residues amount of waste of this type generated between port of call and next port in cubic meters (MTQ)</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
@ -1502,9 +1604,9 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="ConfirmationOfCorrectness" type="YesOrNo">
|
||||
<xs:element name="ConfirmationOfCorrectnessAndSufficiency" type="FixedStringY">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Accurate and correct details given? (y/n)</xs:documentation>
|
||||
<xs:documentation>Confirmation that the above details are accurate and correct, and there is sufficient dedicated onboard capacity to store all waste generated between notification and the next port at which waste will be delivered (fixed value Y).</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -63,7 +63,6 @@
|
||||
<Compile Include="..\bsmd.database\Properties\AssemblyProjectKeyInfo.cs">
|
||||
<Link>Properties\AssemblyProjectKeyInfo.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="NSWRequest.cs" />
|
||||
<Compile Include="NSWResponse.designer.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Properties\Settings.Designer.cs">
|
||||
|
||||
@ -46,7 +46,8 @@ namespace bsmd.herberg.FormService
|
||||
public enum CargoHandlingType : byte
|
||||
{
|
||||
LOAD,
|
||||
DISCHARGE
|
||||
DISCHARGE,
|
||||
TRANSIT
|
||||
}
|
||||
|
||||
public enum ShippingArea : byte
|
||||
|
||||
@ -365,7 +365,7 @@ namespace bsmd.herberg.FormService
|
||||
noa_nod.LastPort = vDict["CountryCodeOfLastPort"] + vDict["LastPortCode"];
|
||||
if (vDict.ContainsKey("CountryCodeOfNextPort") && vDict.ContainsKey("NextPortCode"))
|
||||
noa_nod.NextPort = vDict["CountryCodeOfNextPort"] + vDict["NextPortCode"];
|
||||
|
||||
if (vDict.ContainsKey("IsAnchored")) noa_nod.IsAnchored = vDict["IsAnchored"].Equals("Y");
|
||||
foreach (int key in nDict.Keys)
|
||||
{
|
||||
Dictionary<string, string> subvDict = nDict[key];
|
||||
@ -444,6 +444,9 @@ namespace bsmd.herberg.FormService
|
||||
if (stat.Flag.IsNullOrEmpty() && vDict.ContainsKey("CountryCodeOfRegistry"))
|
||||
stat.Flag = vDict["CountryCodeOfRegistry"];
|
||||
if (vDict.ContainsKey("TransportMode")) stat.TransportMode = vDict["TransportMode"];
|
||||
if (vDict.ContainsKey("NetTonnage")) stat.NetTonnage = Extensions.TryParseDouble(vDict["NetTonnage"]);
|
||||
if (vDict.ContainsKey("RegistryDate")) stat.RegistryDate = Extensions.TryParseDateTime(vDict["RegistryDate"]);
|
||||
if (vDict.ContainsKey("CertificateOfRegistryNumber")) stat.CertificateOfRegistryNumber = vDict["CertificateOfRegistryNumber"];
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -940,6 +943,7 @@ namespace bsmd.herberg.FormService
|
||||
if (vDict.ContainsKey("BowThrusterPower")) info.BowThrusterPower = vDict["BowThrusterPower"];
|
||||
if (vDict.ContainsKey("SternThrusterPower")) info.SternThrusterPower = vDict["SternThrusterPower"];
|
||||
if (vDict.ContainsKey("DeadWeightSummer_TNE")) info.DeplacementSummerDraught_TNE = Extensions.TryParseDouble(vDict["DeadWeightSummer_TNE"]);
|
||||
if (vDict.ContainsKey("PortFacility")) info.PortFacility = vDict["PortFacility"];
|
||||
|
||||
}
|
||||
catch(Exception ex)
|
||||
@ -977,6 +981,8 @@ namespace bsmd.herberg.FormService
|
||||
if (vDict.ContainsKey("PlannedWorks")) pre72h.PlannedWorks = vDict["PlannedWorks"];
|
||||
if (vDict.ContainsKey("DateOfLastExpandedInspection")) pre72h.DateOfLastExpandedInspection = Extensions.TryParseDateTime(vDict["DateOfLastExpandedInspection"]);
|
||||
if (vDict.ContainsKey("PlannedPeriodOfStay_HUR")) pre72h.PlannedPeriodOfStay_HUR = Extensions.TryParseDouble(vDict["PlannedPeriodOfStay_HUR"]);
|
||||
if (vDict.ContainsKey("IsDueToInspection")) pre72h.IsDueToInspection = vDict["IsDueToInspection"].Equals("Y");
|
||||
if (vDict.ContainsKey("PossibleAnchorage")) pre72h.PossibleAnchorage = vDict["PossibleAnchorage"].Equals("Y");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -1008,6 +1014,8 @@ namespace bsmd.herberg.FormService
|
||||
if (lDict.ContainsKey("CargoNumberOfItems")) ladg.CargoNumberOfItems = Int32.Parse(lDict["CargoNumberOfItems"]);
|
||||
if (lDict.ContainsKey("CargoCodeNST")) ladg.CargoCodeNST = lDict["CargoCodeNST"];
|
||||
if (lDict.ContainsKey("CargoHandlingType")) ladg.CargoHandlingType = (byte) Enum.Parse(typeof(Enums.CargoHandlingType), lDict["CargoHandlingType"].ToUpper());
|
||||
if (lDict.ContainsKey("CargoPortOfLoading")) ladg.PortOfLoading = lDict["CargoPortOfLoading"];
|
||||
if (lDict.ContainsKey("CargoPortOfDischarge")) ladg.PortOfDischarge = lDict["CargoPortOfDischarge"];
|
||||
|
||||
saveMessages.Add(ladg);
|
||||
}
|
||||
@ -1026,6 +1034,35 @@ namespace bsmd.herberg.FormService
|
||||
break;
|
||||
#endregion
|
||||
|
||||
#region STO
|
||||
case "STO":
|
||||
{
|
||||
Dictionary<string, string> keysInMessage = new Dictionary<string, string>();
|
||||
foreach (int key in nDict.Keys)
|
||||
{
|
||||
Dictionary<string, string> lDict = nDict[key];
|
||||
keysInMessage.Add(key.ToString(), key.ToString());
|
||||
STO sto = theMessage.GetSublistElementWithIdentifier(key.ToString()) as STO;
|
||||
if (sto == null)
|
||||
{
|
||||
sto = new STO();
|
||||
sto.MessageHeader = theMessage;
|
||||
sto.Identifier = key.ToString();
|
||||
theMessage.MessageNotificationClass = Message.NotificationClass.STO;
|
||||
theMessage.Elements.Add(sto);
|
||||
}
|
||||
if (lDict.ContainsKey("Name")) sto.Name = lDict["Name"];
|
||||
if (lDict.ContainsKey("Quantity")) sto.Quantity = Int32.Parse(lDict["Quantity"]);
|
||||
if (lDict.ContainsKey("QuantityUnit")) sto.QuantityUnit = lDict["QuantityUnit"];
|
||||
if (lDict.ContainsKey("LocationOnBoard")) sto.LocationOnBoard = lDict["LocationOnBoard"];
|
||||
if (lDict.ContainsKey("OfficialUse")) sto.OfficialUse = lDict["OfficialUse"];
|
||||
|
||||
saveMessages.Add(sto);
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endregion
|
||||
|
||||
#region PAS
|
||||
case "PAS":
|
||||
{
|
||||
@ -1283,6 +1320,8 @@ namespace bsmd.herberg.FormService
|
||||
if (vDict.ContainsKey("CurrentShipSecurityLevel ")) sec.CurrentShipSecurityLevel = Byte.Parse(vDict["CurrentShipSecurityLevel "]);
|
||||
if (vDict.ContainsKey("PortFacilityOfArrival")) sec.PortFacilityOfArrival = vDict["PortFacilityOfArrival"];
|
||||
if (vDict.ContainsKey("GeneralDescriptionOfCargo")) sec.GeneralDescriptionOfCargo = (byte)Enum.Parse(typeof(Enums.GeneralDescriptionOfCargo), vDict["GeneralDescriptionOfCargo"], true);
|
||||
if (vDict.ContainsKey("AreMatterToReport")) sec.AreMatterToReport = vDict["AreMatterToReport"].Equals("Y");
|
||||
if (vDict.ContainsKey("MatterToReport")) sec.MatterToReport = vDict["MatterToReport"];
|
||||
|
||||
// process sublists
|
||||
|
||||
@ -1577,6 +1616,8 @@ namespace bsmd.herberg.FormService
|
||||
{
|
||||
_log.DebugFormat("TransmissionType: {0}", vDict["TransmissionType"]);
|
||||
}
|
||||
if (vDict.ContainsKey("DPGContactPhone")) haz.DPGContactPhone = vDict["DPGContactPhone"];
|
||||
if (vDict.ContainsKey("DPGContactFamilyName")) haz.DPGContactFamilyName = vDict["DPGContactFamilyName"];
|
||||
|
||||
Dictionary<int, Dictionary<string, string>> subDict = null;
|
||||
|
||||
|
||||
4
nsw/Source/bsmd.hisnord/packages.config
Normal file
4
nsw/Source/bsmd.hisnord/packages.config
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="log4net" version="2.0.7" targetFramework="net45" />
|
||||
</packages>
|
||||
@ -7,17 +7,24 @@
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element minOccurs="0" name="Version">
|
||||
<xs:element minOccurs="1" maxOccurs="1" name="Version">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Version number of schema</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:minLength value="1" />
|
||||
<xs:maxLength value="5" />
|
||||
<xs:enumeration value="4.0" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="SourceDocumentVersion">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Version information of the source (e.g. file or document) from which the data of this message originates</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string" />
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="Timestamp" type="xs:dateTime">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Timestamp, when the message is sent</xs:documentation>
|
||||
@ -178,7 +185,7 @@
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="ReportingParty" type="ReportingParty" />
|
||||
<xs:element minOccurs="0" name="ReportingParty" type="ReportingParty" />
|
||||
<xs:element name="AgentCompanyName" type="String99">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Name of ship agency</xs:documentation>
|
||||
@ -186,8 +193,7 @@
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="AgentStreetAndNumber" type="String99">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Street, Number
|
||||
</xs:documentation>
|
||||
<xs:documentation>Street, Number</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="AgentPostalCode" type="String24">
|
||||
@ -341,7 +347,8 @@
|
||||
<xs:element name="ATAPortOfCall" type="NswDateTime">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Actual Time of Arrival (ATA) at first port facility in port of call (YYYY-MM-DDThh:mm:ssTZD).
|
||||
The provided value must not be more than 15 minutes in the future, otherwise Violation 141 will occur.</xs:documentation>
|
||||
The provided value must not be more than 15 minutes in the future, otherwise Violation 141 will occur.
|
||||
If ATA is notified before any voyage information was provided via NOA_NOD, Violation 861 will occur.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
@ -361,7 +368,9 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
<xs:element name="ATDPortOfCall" type="NswDateTime">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Actual Time of Departure (ATD) from last port facility in port of call (YYYY-MM-DDThh:mm:ssTZD).
|
||||
The provided value must not be more than 15 minutes in the future, otherwise Violation 141 will occur.</xs:documentation>
|
||||
The provided value must not be more than 15 minutes in the future, otherwise Violation 141 will occur.
|
||||
If ATD is notified before any voyage information was provided via NOA_NOD, Violation 881 will occur.
|
||||
If ATD is notified before ATA was provided, Violation 882 will occur.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
@ -378,6 +387,36 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
<xs:documentation>Reporter data</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="KielCanalPassage">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Information about a planned Kiel Canal Passage.
|
||||
This attribute is only applicable for a port call (VISIT). If it is provided for a TRANSIT, Violation 705 occurs.</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="KielCanalPassagePlanned" type="FixedStringY">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Identification for a planned Kiel-Canal passage (fixed value Y)</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="KielCanalPassagePlannedIncoming" type="NswDateTime">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Estimated Time of Arrival at Kiel-Canal Lock (ETA-NOK) - Date incoming journey to PortOfCall. Mandatory if KielCanalPassagePlanned=Y and KielCanalPassagePlannedOutgoing is empty.
|
||||
If neither KielCanalPassagePlannedIncoming nor KielCanalPassagePlannedOutgoing is provided, Violation 706 occurs.
|
||||
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="KielCanalPassagePlannedOutgoing" type="NswDateTime">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Estimated Time of Arrival at Kiel-Canal Lock (ETA-NOK) - Date outgoing journey from PortOfCall. Mandatory if KielCanalPassagePlanned=Y and KielCanalPassagePlannedIncoming is empty.
|
||||
If neither KielCanalPassagePlannedIncoming nor KielCanalPassagePlannedOutgoing is provided, Violation 706 occurs.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="CurrentShipSecurityLevel" type="ShipSecurityLevel">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Current ship security level (1-3)</xs:documentation>
|
||||
@ -526,7 +565,7 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" maxOccurs="unbounded" name="ShipToShipActivities">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Ship-to-ship acitivities</xs:documentation>
|
||||
<xs:documentation>List of ship-to-ship acitivities</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
@ -575,7 +614,18 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
<xs:documentation>Date to (YYYY-MM-DD in GMT)</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element name="ShipToShipActivityType" type="String255" />
|
||||
<xs:element name="ShipToShipActivityType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Ship-to-ship-activity, coded.
|
||||
Use one of the codes specifying the purpose of the conveyance call declared in UN/EDIFACT DataElement 8025 (http://www.unece.org/trade/untdid/d01a/tred/tred8025.htm).</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:minInclusive value="1" />
|
||||
<xs:maxInclusive value="23" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="ShipToShipActivitySecurityMattersToReport" type="String255" />
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
@ -977,9 +1027,20 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
<xs:documentation>Cargo handling type (load or discharge)</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="CargoLACode">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Cargo type code according to the key list of cargo types and units</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:minInclusive value="10" />
|
||||
<xs:maxInclusive value="99" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="CargoCodeNST">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Cargo code according to Cargo catalogue Attachment 1 - NST2007</xs:documentation>
|
||||
<xs:documentation>Division code of cargo according to NST-2007</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
@ -987,6 +1048,16 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="CargoCodeNST_3">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Group code of cargo according to NST-2007 (3rd digit after the "." (dot) of the group code only!)</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="[0-9AB]{1}" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="CargoNumberOfItems">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Cargo quantity. Required if CargoCodeNST equals 11, 12, 16 or 19 (see Cargo catalogue Attachment 1 - NST2007). Throws Violation 721 if field is omitted of empty.</xs:documentation>
|
||||
@ -1002,6 +1073,16 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
<xs:documentation>Gross quantity in tons (TNE)</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="CargoPortOfLoading" type="UnLoCode">
|
||||
<xs:annotation>
|
||||
<xs:documentation>LoCode of port where the cargo was loaded on board (UNECE LOCODE) or ZZUKN if unknown</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="CargoPortOfDischarge" type="UnLoCode">
|
||||
<xs:annotation>
|
||||
<xs:documentation>LoCode of port where the cargo will be discharged (UNECE LOCODE) or ZZUKN if unknown</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
@ -1148,7 +1229,7 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
<xs:documentation>Nature of cargo</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="VolumeOfCargo_Cargo_TNE" type="DecimalPositive3">
|
||||
<xs:element minOccurs="0" name="VolumeOfCargo_TNE" type="DecimalPositive3">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Volume of cargo in tons (TNE)</xs:documentation>
|
||||
</xs:annotation>
|
||||
@ -1450,25 +1531,46 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
<xs:documentation>Waste disposal order type (all, some, none)</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="9" maxOccurs="9" name="Waste">
|
||||
<xs:element minOccurs="0" maxOccurs="unbounded" name="Waste">
|
||||
<xs:annotation>
|
||||
<xs:documentation>For each type of waste (see field WasteType) exactly one element is mandatory. This format simplification is only used to simplify transfer between information systems (see also Directive RL2000/59 Art. 6 of Annex II). Results in Violation 783 if one or more waste types are omitted.</xs:documentation>
|
||||
<xs:documentation>All waste types provided in Directive 2015/2087 Annex II must be provided (except for Sewage) at least once. Results in Violation 783 if one or more mandatory waste types are omitted.</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="WasteType" type="WasteType">
|
||||
<xs:element name="WasteType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Waste/Cargo residues type to be disposed: waste oils (sludge), waste oils (bilge water), other waste oils, food waste, plastic garbage, sewage, cargo-associated waste, and cargo residues.</xs:documentation>
|
||||
<xs:documentation>Type of waste to be disposed</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="WasteCode">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Waste code according to Waste Type Codes list. Results in Violation 784 if an invalid waste code is provided.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:minInclusive value="1000" />
|
||||
<xs:maxInclusive value="9999" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="WasteDescription" type="String99">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Description for type 3, 8, and 9. Required for those type. Will otherwise result in Violation 781.</xs:documentation>
|
||||
<xs:documentation>Textual description, required for those waste types marked in the Waste Type Codes list. Will otherwise result in Violation 781.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="WasteDisposalAmount_MTQ" type="DecimalZeroPositive3">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Amount of this type to be disposed in cubic meters (MTQ)</xs:documentation>
|
||||
<xs:documentation>Amount of waste of this waste type to be disposed in cubic meters (MTQ)</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element name="WasteDisposedAtLastPort_MTQ" type="DecimalZeroPositive3">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Amount of waste of this type that has been discharged at the last port of disposal in cubic meters (MTQ)</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="WasteDetails">
|
||||
@ -1479,12 +1581,12 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
<xs:sequence>
|
||||
<xs:element name="WasteCapacity_MTQ" type="DecimalZeroPositive3">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Maximum dedicated storage capacity of this type on board in cubic meters (MTQ)</xs:documentation>
|
||||
<xs:documentation>Maximum dedicated storage capacity of waste of this type on board in cubic meters (MTQ)</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element name="WasteAmountRetained_MTQ" type="DecimalZeroPositive3">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Amount of this type retained on board in cubic meters (MTQ)</xs:documentation>
|
||||
<xs:documentation>Amount of waste of this type retained on board in cubic meters (MTQ)</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element name="WasteDisposalPort" type="UnLoCode">
|
||||
@ -1494,7 +1596,7 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
</xs:element>
|
||||
<xs:element name="WasteAmountGeneratedTillNextPort_MTQ" type="DecimalZeroPositive3">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Estimated waste/cargo residues amount of each type generated between port of call and next port in cubic meters (MTQ)</xs:documentation>
|
||||
<xs:documentation>Estimated waste/cargo residues amount of waste of this type generated between port of call and next port in cubic meters (MTQ)</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
@ -1503,9 +1605,9 @@ The provided value must not be more than 15 minutes in the future, otherwise Vio
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="ConfirmationOfCorrectness" type="YesOrNo">
|
||||
<xs:element name="ConfirmationOfCorrectnessAndSufficiency" type="FixedStringY">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Accurate and correct details given? (y/n)</xs:documentation>
|
||||
<xs:documentation>Confirmation that the above details are accurate and correct, and there is sufficient dedicated onboard capacity to store all waste generated between notification and the next port at which waste will be delivered (fixed value Y).</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
|
||||
@ -15,7 +15,11 @@
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="MessageId" type="xs:string" />
|
||||
<xs:element name="MessageId" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Unique message identifier.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="VisitId">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Required when TransitId is missing and field "Type" is not "VISIT or "TRANSIT"</xs:documentation>
|
||||
@ -38,11 +42,41 @@
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="SisNumbers">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of SIS numbers. An empty list means that all sent numbers will be deleted. Sending a new list overwrites existing ones completely.</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element minOccurs="0" maxOccurs="unbounded" name="SisNumber">
|
||||
<xs:annotation>
|
||||
<xs:documentation>One SIS number</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="[A-Z0-9]{4}" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="Timestamp" type="xs:dateTime">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Timestamp, when the message is sent</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="SenderReference">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A customer reference that can be freely filled and will be send back in the following response. No checks are made on this field. When a new Visit- or TransitId is obtained, it should be used as a reference to match the response to its corresponding request.</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:maxLength value="35" />
|
||||
<xs:minLength value="0" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="Type">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The message type (should be the same as in the request message):
|
||||
@ -68,39 +102,10 @@
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:sequence minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:element name="ReportingClass">
|
||||
<xs:element name="ReportingClass" type="ReportingClassCode">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The code of a reporting class.</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="NOA_NOD" />
|
||||
<xs:enumeration value="ATA" />
|
||||
<xs:enumeration value="ATD" />
|
||||
<xs:enumeration value="SEC" />
|
||||
<xs:enumeration value="POBA" />
|
||||
<xs:enumeration value="POBD" />
|
||||
<xs:enumeration value="NAME" />
|
||||
<xs:enumeration value="TIEFA" />
|
||||
<xs:enumeration value="TIEFD" />
|
||||
<xs:enumeration value="BKRA" />
|
||||
<xs:enumeration value="BKRD" />
|
||||
<xs:enumeration value="STAT" />
|
||||
<xs:enumeration value="LADG" />
|
||||
<xs:enumeration value="INFO" />
|
||||
<xs:enumeration value="SERV" />
|
||||
<xs:enumeration value="PRE72H" />
|
||||
<xs:enumeration value="MDH" />
|
||||
<xs:enumeration value="WAS" />
|
||||
<xs:enumeration value="CREW" />
|
||||
<xs:enumeration value="PAS" />
|
||||
<xs:enumeration value="BPOL" />
|
||||
<xs:enumeration value="TOWA" />
|
||||
<xs:enumeration value="TOWD" />
|
||||
<xs:enumeration value="HAZA" />
|
||||
<xs:enumeration value="HAZD" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
@ -111,39 +116,10 @@
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:sequence minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:element name="ReportingClass">
|
||||
<xs:element name="ReportingClass" type="ReportingClassCode">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The code of a reporting class.</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="NOA_NOD" />
|
||||
<xs:enumeration value="ATA" />
|
||||
<xs:enumeration value="ATD" />
|
||||
<xs:enumeration value="SEC" />
|
||||
<xs:enumeration value="POBA" />
|
||||
<xs:enumeration value="POBD" />
|
||||
<xs:enumeration value="NAME" />
|
||||
<xs:enumeration value="TIEFA" />
|
||||
<xs:enumeration value="TIEFD" />
|
||||
<xs:enumeration value="BKRA" />
|
||||
<xs:enumeration value="BKRD" />
|
||||
<xs:enumeration value="STAT" />
|
||||
<xs:enumeration value="LADG" />
|
||||
<xs:enumeration value="INFO" />
|
||||
<xs:enumeration value="SERV" />
|
||||
<xs:enumeration value="PRE72H" />
|
||||
<xs:enumeration value="MDH" />
|
||||
<xs:enumeration value="WAS" />
|
||||
<xs:enumeration value="CREW" />
|
||||
<xs:enumeration value="PAS" />
|
||||
<xs:enumeration value="BPOL" />
|
||||
<xs:enumeration value="TOWA" />
|
||||
<xs:enumeration value="TOWD" />
|
||||
<xs:enumeration value="HAZA" />
|
||||
<xs:enumeration value="HAZD" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
@ -154,39 +130,10 @@
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:sequence minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:element name="ReportingClass">
|
||||
<xs:element name="ReportingClass" type="ReportingClassCode">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The code of a reporting class.</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="NOA_NOD" />
|
||||
<xs:enumeration value="ATA" />
|
||||
<xs:enumeration value="ATD" />
|
||||
<xs:enumeration value="SEC" />
|
||||
<xs:enumeration value="POBA" />
|
||||
<xs:enumeration value="POBD" />
|
||||
<xs:enumeration value="NAME" />
|
||||
<xs:enumeration value="TIEFA" />
|
||||
<xs:enumeration value="TIEFD" />
|
||||
<xs:enumeration value="BKRA" />
|
||||
<xs:enumeration value="BKRD" />
|
||||
<xs:enumeration value="STAT" />
|
||||
<xs:enumeration value="LADG" />
|
||||
<xs:enumeration value="INFO" />
|
||||
<xs:enumeration value="SERV" />
|
||||
<xs:enumeration value="PRE72H" />
|
||||
<xs:enumeration value="MDH" />
|
||||
<xs:enumeration value="WAS" />
|
||||
<xs:enumeration value="CREW" />
|
||||
<xs:enumeration value="PAS" />
|
||||
<xs:enumeration value="BPOL" />
|
||||
<xs:enumeration value="TOWA" />
|
||||
<xs:enumeration value="TOWD" />
|
||||
<xs:enumeration value="HAZA" />
|
||||
<xs:enumeration value="HAZD" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
@ -197,39 +144,10 @@
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:sequence minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:element name="ReportingClass">
|
||||
<xs:element name="ReportingClass" type="ReportingClassCode">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The code of a reporting class.</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="NOA_NOD" />
|
||||
<xs:enumeration value="ATA" />
|
||||
<xs:enumeration value="ATD" />
|
||||
<xs:enumeration value="SEC" />
|
||||
<xs:enumeration value="POBA" />
|
||||
<xs:enumeration value="POBD" />
|
||||
<xs:enumeration value="NAME" />
|
||||
<xs:enumeration value="TIEFA" />
|
||||
<xs:enumeration value="TIEFD" />
|
||||
<xs:enumeration value="BKRA" />
|
||||
<xs:enumeration value="BKRD" />
|
||||
<xs:enumeration value="STAT" />
|
||||
<xs:enumeration value="LADG" />
|
||||
<xs:enumeration value="INFO" />
|
||||
<xs:enumeration value="SERV" />
|
||||
<xs:enumeration value="PRE72H" />
|
||||
<xs:enumeration value="MDH" />
|
||||
<xs:enumeration value="WAS" />
|
||||
<xs:enumeration value="CREW" />
|
||||
<xs:enumeration value="PAS" />
|
||||
<xs:enumeration value="BPOL" />
|
||||
<xs:enumeration value="TOWA" />
|
||||
<xs:enumeration value="TOWD" />
|
||||
<xs:enumeration value="HAZA" />
|
||||
<xs:enumeration value="HAZD" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
@ -250,8 +168,8 @@
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:minLength value="3" />
|
||||
<xs:maxLength value="6" />
|
||||
<xs:pattern value="([A-Z]{0,3}[1-9][0-9]{2})" />
|
||||
<xs:maxLength value="4" />
|
||||
<xs:pattern value="([1-9][0-9]{2,3})" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
@ -293,4 +211,34 @@
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:simpleType name="ReportingClassCode">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="NOA_NOD" />
|
||||
<xs:enumeration value="ATA" />
|
||||
<xs:enumeration value="ATD" />
|
||||
<xs:enumeration value="SEC" />
|
||||
<xs:enumeration value="AGNT" />
|
||||
<xs:enumeration value="POBA" />
|
||||
<xs:enumeration value="POBD" />
|
||||
<xs:enumeration value="NAME" />
|
||||
<xs:enumeration value="TIEFA" />
|
||||
<xs:enumeration value="TIEFD" />
|
||||
<xs:enumeration value="BKRA" />
|
||||
<xs:enumeration value="BKRD" />
|
||||
<xs:enumeration value="STAT" />
|
||||
<xs:enumeration value="LADG" />
|
||||
<xs:enumeration value="INFO" />
|
||||
<xs:enumeration value="SERV" />
|
||||
<xs:enumeration value="PRE72H" />
|
||||
<xs:enumeration value="MDH" />
|
||||
<xs:enumeration value="WAS" />
|
||||
<xs:enumeration value="CREW" />
|
||||
<xs:enumeration value="PAS" />
|
||||
<xs:enumeration value="BPOL" />
|
||||
<xs:enumeration value="TOWA" />
|
||||
<xs:enumeration value="TOWD" />
|
||||
<xs:enumeration value="HAZA" />
|
||||
<xs:enumeration value="HAZD" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:schema>
|
||||
Loading…
Reference in New Issue
Block a user