Version 5.0.5
This commit is contained in:
parent
09c4e38513
commit
dccb6f178b
@ -26,12 +26,12 @@
|
|||||||
<value>1000</value>
|
<value>1000</value>
|
||||||
</setting>
|
</setting>
|
||||||
<setting name="LockingServerAddress" serializeAs="String">
|
<setting name="LockingServerAddress" serializeAs="String">
|
||||||
<value>http://192.168.2.4/LockingService/LockingService.svc</value>
|
<!--value>http://192.168.2.4/LockingService/LockingService.svc</value-->
|
||||||
<!--value>http://heupferd/bsmd.LockingService/LockingService.svc</value-->
|
<value>http://heupferd/bsmd.LockingService/LockingService.svc</value>
|
||||||
</setting>
|
</setting>
|
||||||
<setting name="ConnectionString" serializeAs="String">
|
<setting name="ConnectionString" serializeAs="String">
|
||||||
<value>Data Source=192.168.2.12;Initial Catalog=nsw;Uid=dfuser;Pwd=dfpasswd;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False</value>
|
<!--value>Data Source=192.168.2.12;Initial Catalog=nsw;Uid=dfuser;Pwd=dfpasswd;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False</value-->
|
||||||
<!--value>Data Source=(localdb)\Projects;Initial Catalog=nsw;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False</value-->
|
<value>Data Source=(localdb)\Projects;Initial Catalog=nsw;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False</value>
|
||||||
</setting>
|
</setting>
|
||||||
</ENI2.Properties.Settings>
|
</ENI2.Properties.Settings>
|
||||||
</applicationSettings>
|
</applicationSettings>
|
||||||
|
|||||||
@ -35,8 +35,8 @@
|
|||||||
<MinimumRequiredVersion>3.5.1.0</MinimumRequiredVersion>
|
<MinimumRequiredVersion>3.5.1.0</MinimumRequiredVersion>
|
||||||
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
|
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
|
||||||
<WebPage>publish.html</WebPage>
|
<WebPage>publish.html</WebPage>
|
||||||
<ApplicationRevision>1</ApplicationRevision>
|
<ApplicationRevision>0</ApplicationRevision>
|
||||||
<ApplicationVersion>5.0.4.%2a</ApplicationVersion>
|
<ApplicationVersion>5.0.5.%2a</ApplicationVersion>
|
||||||
<UseApplicationTrust>false</UseApplicationTrust>
|
<UseApplicationTrust>false</UseApplicationTrust>
|
||||||
<CreateDesktopShortcut>true</CreateDesktopShortcut>
|
<CreateDesktopShortcut>true</CreateDesktopShortcut>
|
||||||
<PublishWizardCompleted>true</PublishWizardCompleted>
|
<PublishWizardCompleted>true</PublishWizardCompleted>
|
||||||
|
|||||||
Binary file not shown.
@ -1110,7 +1110,9 @@ namespace bsmd.ReportGenerator
|
|||||||
if (LocalizedLookup.getVesselTypes().ContainsKey(value))
|
if (LocalizedLookup.getVesselTypes().ContainsKey(value))
|
||||||
result = string.Format("{0} - {1}", value, LocalizedLookup.getVesselTypes()[value]);
|
result = string.Format("{0} - {1}", value, LocalizedLookup.getVesselTypes()[value]);
|
||||||
break;
|
break;
|
||||||
|
case "INFShipClass":
|
||||||
case "INF-Ship-Class":
|
case "INF-Ship-Class":
|
||||||
|
case "INF - Ship - Class":
|
||||||
{
|
{
|
||||||
switch(value)
|
switch(value)
|
||||||
{
|
{
|
||||||
@ -1121,6 +1123,7 @@ namespace bsmd.ReportGenerator
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case "PackingGroup":
|
||||||
case "Packing Group":
|
case "Packing Group":
|
||||||
{
|
{
|
||||||
switch (value)
|
switch (value)
|
||||||
|
|||||||
@ -41,7 +41,7 @@ namespace bsmd.database
|
|||||||
|
|
||||||
[ShowReport]
|
[ShowReport]
|
||||||
[LookupName("AGNT.AgentStreetAndNumber")]
|
[LookupName("AGNT.AgentStreetAndNumber")]
|
||||||
[MaxLength(99)]
|
[MaxLength(99)]
|
||||||
[ENI2Validation]
|
[ENI2Validation]
|
||||||
public string AgentStreetAndNumber { get; set; }
|
public string AgentStreetAndNumber { get; set; }
|
||||||
|
|
||||||
|
|||||||
@ -264,6 +264,11 @@ namespace bsmd.database
|
|||||||
errors.Add(RuleEngine.CreateError(ValidationCode.IMPLAUSIBLE, "Flashpoint_CEL", null, this.Title, this.Identifier, this.HAZ.IsDeparture ? "HAZD" : "HAZA"));
|
errors.Add(RuleEngine.CreateError(ValidationCode.IMPLAUSIBLE, "Flashpoint_CEL", null, this.Title, this.Identifier, this.HAZ.IsDeparture ? "HAZD" : "HAZA"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!this.Hazards.HasValue)
|
||||||
|
{
|
||||||
|
violations.Add(RuleEngine.CreateViolation(ValidationCode.V810, "Hazards", null, this.Title, this.Identifier, this.HAZ.IsDeparture ? "HAZD" : "HAZA"));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@ -2,6 +2,6 @@
|
|||||||
|
|
||||||
[assembly: AssemblyCompany("schick Informatik")]
|
[assembly: AssemblyCompany("schick Informatik")]
|
||||||
[assembly: AssemblyProduct("BSMD NSW interface")]
|
[assembly: AssemblyProduct("BSMD NSW interface")]
|
||||||
[assembly: AssemblyInformationalVersion("5.0.4")]
|
[assembly: AssemblyInformationalVersion("5.0.5")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2014-2018 schick Informatik")]
|
[assembly: AssemblyCopyright("Copyright © 2014-2018 schick Informatik")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
@ -1,4 +1,4 @@
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
[assembly: AssemblyVersion("5.0.4.*")]
|
[assembly: AssemblyVersion("5.0.5.*")]
|
||||||
|
|
||||||
|
|||||||
@ -157,7 +157,11 @@ namespace bsmd.database
|
|||||||
// add "generic" validation properties to check list
|
// add "generic" validation properties to check list
|
||||||
props.AddRange(objType.GetProperties().Where(prop => Attribute.IsDefined(prop, typeof(ValidationAttribute))));
|
props.AddRange(objType.GetProperties().Where(prop => Attribute.IsDefined(prop, typeof(ValidationAttribute))));
|
||||||
// add "block" validation properties to check list
|
// add "block" validation properties to check list
|
||||||
props.AddRange(objType.GetProperties().Where( prop => Attribute.IsDefined(prop, attribType)) );
|
props.AddRange(objType.GetProperties().Where( prop => Attribute.IsDefined(prop, attribType)) );
|
||||||
|
// alle "MaxLength" Properties hinzufügen die sonst keine Validierung haben
|
||||||
|
props.AddRange(objType.GetProperties().Where(prop => (!Attribute.IsDefined(prop, typeof(ValidationAttribute)) &&
|
||||||
|
!Attribute.IsDefined(prop, attribType) &&
|
||||||
|
Attribute.IsDefined(prop, typeof(MaxLengthAttribute)))));
|
||||||
|
|
||||||
foreach (PropertyInfo property in props)
|
foreach (PropertyInfo property in props)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -79,6 +79,7 @@ namespace bsmd.database
|
|||||||
V807 = 807,
|
V807 = 807,
|
||||||
V808 = 808,
|
V808 = 808,
|
||||||
V809 = 809,
|
V809 = 809,
|
||||||
|
V810 = 810,
|
||||||
V821 = 821,
|
V821 = 821,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -21,7 +21,7 @@ namespace bsmd.dbh.ResponseService
|
|||||||
bsmd.dbh.response.RootReportingClassesPartial ReportingClassesPartial,
|
bsmd.dbh.response.RootReportingClassesPartial ReportingClassesPartial,
|
||||||
bsmd.dbh.response.RootReportingClassesError RootReportingClassesError,
|
bsmd.dbh.response.RootReportingClassesError RootReportingClassesError,
|
||||||
bsmd.dbh.response.RootReportingClassesResetted ReportingClassesResetted,
|
bsmd.dbh.response.RootReportingClassesResetted ReportingClassesResetted,
|
||||||
bsmd.dbh.response.Message[] Messages);
|
bsmd.dbh.response.RootMessage[] Messages);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -18,7 +18,7 @@ namespace bsmd.dbh.ResponseService
|
|||||||
bsmd.dbh.response.RootReportingClassesPartial ReportingClassesPartial,
|
bsmd.dbh.response.RootReportingClassesPartial ReportingClassesPartial,
|
||||||
bsmd.dbh.response.RootReportingClassesError RootReportingClassesError,
|
bsmd.dbh.response.RootReportingClassesError RootReportingClassesError,
|
||||||
bsmd.dbh.response.RootReportingClassesResetted ReportingClassesResetted,
|
bsmd.dbh.response.RootReportingClassesResetted ReportingClassesResetted,
|
||||||
bsmd.dbh.response.Message[] Messages)
|
bsmd.dbh.response.RootMessage[] Messages)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Der Fehler hier aktuell ist dass alles funktioniert, außer dass "Messages" nicht
|
// Der Fehler hier aktuell ist dass alles funktioniert, außer dass "Messages" nicht
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// <auto-generated>
|
// <auto-generated>
|
||||||
// Dieser Code wurde von einem Tool generiert.
|
// Dieser Code wurde von einem Tool generiert.
|
||||||
// Laufzeitversion:4.0.30319.34209
|
// Laufzeitversion:4.0.30319.42000
|
||||||
//
|
//
|
||||||
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
|
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
|
||||||
// der Code erneut generiert wird.
|
// der Code erneut generiert wird.
|
||||||
@ -11,13 +11,14 @@
|
|||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
//
|
//
|
||||||
// This source code was auto-generated by xsd, Version=4.0.30319.1.
|
// Dieser Quellcode wurde automatisch generiert von xsd, Version=4.6.1055.0.
|
||||||
//
|
//
|
||||||
|
|
||||||
namespace bsmd.dbh.response
|
namespace bsmd.dbh.response
|
||||||
{
|
{
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")]
|
||||||
[System.SerializableAttribute()]
|
[System.SerializableAttribute()]
|
||||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||||
@ -34,8 +35,12 @@ namespace bsmd.dbh.response
|
|||||||
|
|
||||||
private string transitIdField;
|
private string transitIdField;
|
||||||
|
|
||||||
|
private string[] sisNumbersField;
|
||||||
|
|
||||||
private System.DateTime timestampField;
|
private System.DateTime timestampField;
|
||||||
|
|
||||||
|
private string senderReferenceField;
|
||||||
|
|
||||||
private RootType typeField;
|
private RootType typeField;
|
||||||
|
|
||||||
private RootReportingClassesFull reportingClassesFullField;
|
private RootReportingClassesFull reportingClassesFullField;
|
||||||
@ -46,7 +51,7 @@ namespace bsmd.dbh.response
|
|||||||
|
|
||||||
private RootReportingClassesResetted reportingClassesResettedField;
|
private RootReportingClassesResetted reportingClassesResettedField;
|
||||||
|
|
||||||
private Message[] messagesField;
|
private RootMessage[] messagesField;
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
public string Version
|
public string Version
|
||||||
@ -100,6 +105,20 @@ namespace bsmd.dbh.response
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlArrayItemAttribute("SisNumber", IsNullable = false)]
|
||||||
|
public string[] SisNumbers
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.sisNumbersField;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.sisNumbersField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
public System.DateTime Timestamp
|
public System.DateTime Timestamp
|
||||||
{
|
{
|
||||||
@ -113,6 +132,19 @@ namespace bsmd.dbh.response
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public string SenderReference
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.senderReferenceField;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.senderReferenceField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
public RootType Type
|
public RootType Type
|
||||||
{
|
{
|
||||||
@ -180,7 +212,7 @@ namespace bsmd.dbh.response
|
|||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.Xml.Serialization.XmlArrayItemAttribute("Message", IsNullable = false)]
|
[System.Xml.Serialization.XmlArrayItemAttribute("Message", IsNullable = false)]
|
||||||
public Message[] Messages
|
public RootMessage[] Messages
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@ -194,7 +226,7 @@ namespace bsmd.dbh.response
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")]
|
||||||
[System.SerializableAttribute()]
|
[System.SerializableAttribute()]
|
||||||
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
|
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
|
||||||
public enum RootType
|
public enum RootType
|
||||||
@ -217,7 +249,7 @@ namespace bsmd.dbh.response
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")]
|
||||||
[System.SerializableAttribute()]
|
[System.SerializableAttribute()]
|
||||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||||
@ -225,11 +257,11 @@ namespace bsmd.dbh.response
|
|||||||
public partial class RootReportingClassesFull
|
public partial class RootReportingClassesFull
|
||||||
{
|
{
|
||||||
|
|
||||||
private RootReportingClassesFullReportingClass[] reportingClassField;
|
private ReportingClassCode[] reportingClassField;
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.Xml.Serialization.XmlElementAttribute("ReportingClass")]
|
[System.Xml.Serialization.XmlElementAttribute("ReportingClass")]
|
||||||
public RootReportingClassesFullReportingClass[] ReportingClass
|
public ReportingClassCode[] ReportingClass
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@ -243,10 +275,9 @@ namespace bsmd.dbh.response
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")]
|
||||||
[System.SerializableAttribute()]
|
[System.SerializableAttribute()]
|
||||||
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
|
public enum ReportingClassCode
|
||||||
public enum RootReportingClassesFullReportingClass
|
|
||||||
{
|
{
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
@ -261,6 +292,9 @@ namespace bsmd.dbh.response
|
|||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
SEC,
|
SEC,
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
AGNT,
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
POBA,
|
POBA,
|
||||||
|
|
||||||
@ -326,7 +360,7 @@ namespace bsmd.dbh.response
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")]
|
||||||
[System.SerializableAttribute()]
|
[System.SerializableAttribute()]
|
||||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||||
@ -334,11 +368,11 @@ namespace bsmd.dbh.response
|
|||||||
public partial class RootReportingClassesPartial
|
public partial class RootReportingClassesPartial
|
||||||
{
|
{
|
||||||
|
|
||||||
private RootReportingClassesPartialReportingClass[] reportingClassField;
|
private ReportingClassCode[] reportingClassField;
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.Xml.Serialization.XmlElementAttribute("ReportingClass")]
|
[System.Xml.Serialization.XmlElementAttribute("ReportingClass")]
|
||||||
public RootReportingClassesPartialReportingClass[] ReportingClass
|
public ReportingClassCode[] ReportingClass
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@ -352,90 +386,7 @@ namespace bsmd.dbh.response
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")]
|
||||||
[System.SerializableAttribute()]
|
|
||||||
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
|
|
||||||
public enum RootReportingClassesPartialReportingClass
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
NOA_NOD,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
ATA,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
ATD,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
SEC,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
POBA,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
POBD,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
NAME,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
TIEFA,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
TIEFD,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
BKRA,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
BKRD,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
STAT,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
LADG,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
INFO,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
SERV,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
PRE72H,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
MDH,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
WAS,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
CREW,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
PAS,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
BPOL,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
TOWA,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
TOWD,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
HAZA,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
HAZD,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
|
|
||||||
[System.SerializableAttribute()]
|
[System.SerializableAttribute()]
|
||||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||||
@ -443,11 +394,11 @@ namespace bsmd.dbh.response
|
|||||||
public partial class RootReportingClassesError
|
public partial class RootReportingClassesError
|
||||||
{
|
{
|
||||||
|
|
||||||
private RootReportingClassesErrorReportingClass[] reportingClassField;
|
private ReportingClassCode[] reportingClassField;
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.Xml.Serialization.XmlElementAttribute("ReportingClass")]
|
[System.Xml.Serialization.XmlElementAttribute("ReportingClass")]
|
||||||
public RootReportingClassesErrorReportingClass[] ReportingClass
|
public ReportingClassCode[] ReportingClass
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@ -461,90 +412,7 @@ namespace bsmd.dbh.response
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")]
|
||||||
[System.SerializableAttribute()]
|
|
||||||
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
|
|
||||||
public enum RootReportingClassesErrorReportingClass
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
NOA_NOD,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
ATA,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
ATD,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
SEC,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
POBA,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
POBD,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
NAME,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
TIEFA,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
TIEFD,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
BKRA,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
BKRD,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
STAT,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
LADG,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
INFO,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
SERV,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
PRE72H,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
MDH,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
WAS,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
CREW,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
PAS,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
BPOL,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
TOWA,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
TOWD,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
HAZA,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
HAZD,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
|
|
||||||
[System.SerializableAttribute()]
|
[System.SerializableAttribute()]
|
||||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||||
@ -552,11 +420,11 @@ namespace bsmd.dbh.response
|
|||||||
public partial class RootReportingClassesResetted
|
public partial class RootReportingClassesResetted
|
||||||
{
|
{
|
||||||
|
|
||||||
private RootReportingClassesResettedReportingClass[] reportingClassField;
|
private ReportingClassCode[] reportingClassField;
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.Xml.Serialization.XmlElementAttribute("ReportingClass")]
|
[System.Xml.Serialization.XmlElementAttribute("ReportingClass")]
|
||||||
public RootReportingClassesResettedReportingClass[] ReportingClass
|
public ReportingClassCode[] ReportingClass
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@ -570,95 +438,12 @@ namespace bsmd.dbh.response
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")]
|
||||||
[System.SerializableAttribute()]
|
|
||||||
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
|
|
||||||
public enum RootReportingClassesResettedReportingClass
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
NOA_NOD,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
ATA,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
ATD,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
SEC,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
POBA,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
POBD,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
NAME,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
TIEFA,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
TIEFD,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
BKRA,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
BKRD,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
STAT,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
LADG,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
INFO,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
SERV,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
PRE72H,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
MDH,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
WAS,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
CREW,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
PAS,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
BPOL,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
TOWA,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
TOWD,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
HAZA,
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
HAZD,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
|
|
||||||
[System.SerializableAttribute()]
|
[System.SerializableAttribute()]
|
||||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||||
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
|
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
|
||||||
public partial class Message
|
public partial class RootMessage
|
||||||
{
|
{
|
||||||
|
|
||||||
private string idField;
|
private string idField;
|
||||||
@ -723,7 +508,7 @@ namespace bsmd.dbh.response
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")]
|
||||||
[System.SerializableAttribute()]
|
[System.SerializableAttribute()]
|
||||||
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
|
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
|
||||||
public enum RootMessageType
|
public enum RootMessageType
|
||||||
@ -741,5 +526,4 @@ namespace bsmd.dbh.response
|
|||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
ERROR,
|
ERROR,
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1249,7 +1249,27 @@ namespace bsmd.dbh
|
|||||||
rootIMDG.GeneralCargoIBC = imdgPos.GeneralCargoIBC.Value ? DBHWebReference.RootSECValidISSCOnBoard.Y : DBHWebReference.RootSECValidISSCOnBoard.N;
|
rootIMDG.GeneralCargoIBC = imdgPos.GeneralCargoIBC.Value ? DBHWebReference.RootSECValidISSCOnBoard.Y : DBHWebReference.RootSECValidISSCOnBoard.N;
|
||||||
rootIMDG.ContainerNumber = imdgPos.ContainerNumber;
|
rootIMDG.ContainerNumber = imdgPos.ContainerNumber;
|
||||||
rootIMDG.VehicleLicenseNumber = imdgPos.VehicleLicenseNumber;
|
rootIMDG.VehicleLicenseNumber = imdgPos.VehicleLicenseNumber;
|
||||||
// rootIMDG.StowagePosition = imdgPos.StowagePosition;
|
|
||||||
|
if (imdgPos.StowagePosition.IsNullOrEmpty())
|
||||||
|
{
|
||||||
|
rootIMDG.Items = new string[3];
|
||||||
|
rootIMDG.ItemsElementName = new ItemsChoiceType4[3];
|
||||||
|
|
||||||
|
rootIMDG.Items[0] = imdgPos.Bay;
|
||||||
|
rootIMDG.ItemsElementName[0] = ItemsChoiceType4.Bay;
|
||||||
|
|
||||||
|
rootIMDG.Items[1] = imdgPos.Row;
|
||||||
|
rootIMDG.ItemsElementName[1] = ItemsChoiceType4.Row;
|
||||||
|
|
||||||
|
rootIMDG.Items[2] = imdgPos.Tier;
|
||||||
|
rootIMDG.ItemsElementName[2] = ItemsChoiceType4.Tier;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rootIMDG.Items = new string[1] { imdgPos.StowagePosition };
|
||||||
|
rootIMDG.ItemsElementName = new ItemsChoiceType4[1] { ItemsChoiceType4.StowagePosition };
|
||||||
|
}
|
||||||
|
|
||||||
rootIMDG.PortOfLoading = imdgPos.PortOfLoading;
|
rootIMDG.PortOfLoading = imdgPos.PortOfLoading;
|
||||||
rootIMDG.PortOfDischarge = imdgPos.PortOfDischarge;
|
rootIMDG.PortOfDischarge = imdgPos.PortOfDischarge;
|
||||||
rootIMDG.Remarks = imdgPos.Remarks;
|
rootIMDG.Remarks = imdgPos.Remarks;
|
||||||
@ -1482,7 +1502,27 @@ namespace bsmd.dbh
|
|||||||
rootIMDG.GeneralCargoIBC = imdgPos.GeneralCargoIBC.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N;
|
rootIMDG.GeneralCargoIBC = imdgPos.GeneralCargoIBC.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N;
|
||||||
rootIMDG.ContainerNumber = imdgPos.ContainerNumber;
|
rootIMDG.ContainerNumber = imdgPos.ContainerNumber;
|
||||||
rootIMDG.VehicleLicenseNumber = imdgPos.VehicleLicenseNumber;
|
rootIMDG.VehicleLicenseNumber = imdgPos.VehicleLicenseNumber;
|
||||||
//rootIMDG.StowagePosition = imdgPos.StowagePosition;
|
|
||||||
|
if (imdgPos.StowagePosition.IsNullOrEmpty())
|
||||||
|
{
|
||||||
|
rootIMDG.Items = new string[3];
|
||||||
|
rootIMDG.ItemsElementName = new ItemsChoiceType4[3];
|
||||||
|
|
||||||
|
rootIMDG.Items[0] = imdgPos.Bay;
|
||||||
|
rootIMDG.ItemsElementName[0] = ItemsChoiceType4.Bay;
|
||||||
|
|
||||||
|
rootIMDG.Items[1] = imdgPos.Row;
|
||||||
|
rootIMDG.ItemsElementName[1] = ItemsChoiceType4.Row;
|
||||||
|
|
||||||
|
rootIMDG.Items[2] = imdgPos.Tier;
|
||||||
|
rootIMDG.ItemsElementName[2] = ItemsChoiceType4.Tier;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rootIMDG.Items = new string[1] { imdgPos.StowagePosition };
|
||||||
|
rootIMDG.ItemsElementName = new ItemsChoiceType4[1] { ItemsChoiceType4.StowagePosition };
|
||||||
|
}
|
||||||
|
|
||||||
rootIMDG.PortOfLoading = imdgPos.PortOfLoading;
|
rootIMDG.PortOfLoading = imdgPos.PortOfLoading;
|
||||||
rootIMDG.PortOfDischarge = imdgPos.PortOfDischarge;
|
rootIMDG.PortOfDischarge = imdgPos.PortOfDischarge;
|
||||||
rootIMDG.Remarks = imdgPos.Remarks;
|
rootIMDG.Remarks = imdgPos.Remarks;
|
||||||
|
|||||||
@ -22,10 +22,10 @@ namespace bsmd.dbh
|
|||||||
private static ILog _log = LogManager.GetLogger("dbh Response");
|
private static ILog _log = LogManager.GetLogger("dbh Response");
|
||||||
|
|
||||||
public static void ProcessResponse(string VisitId, string TransitId, DateTime Timestamp,
|
public static void ProcessResponse(string VisitId, string TransitId, DateTime Timestamp,
|
||||||
string SenderReference, response.RootType Type, bsmd.dbh.response.Message[] Messages,
|
string SenderReference, response.RootType Type, bsmd.dbh.response.RootMessage[] Messages,
|
||||||
bsmd.dbh.response.RootReportingClassesFull ReportingClassesFull,
|
bsmd.dbh.response.RootReportingClassesFull ReportingClassesFull,
|
||||||
bsmd.dbh.response.RootReportingClassesPartial ReportingClassesPartial,
|
bsmd.dbh.response.RootReportingClassesPartial ReportingClassesPartial,
|
||||||
bsmd.dbh.response.RootReportingClassesError RootReportingClassesError,
|
bsmd.dbh.response.RootReportingClassesError ReportingClassesError,
|
||||||
bsmd.dbh.response.RootReportingClassesResetted ReportingClassesResetted,
|
bsmd.dbh.response.RootReportingClassesResetted ReportingClassesResetted,
|
||||||
string connectionString)
|
string connectionString)
|
||||||
{
|
{
|
||||||
@ -52,8 +52,14 @@ namespace bsmd.dbh
|
|||||||
}
|
}
|
||||||
|
|
||||||
DatabaseEntity dbEntity = DBManager.Instance.GetMessageById(messageId);
|
DatabaseEntity dbEntity = DBManager.Instance.GetMessageById(messageId);
|
||||||
if (dbEntity != null)
|
Message aMessage = dbEntity as Message;
|
||||||
|
|
||||||
|
if (aMessage != null)
|
||||||
|
{
|
||||||
_log.InfoFormat("Message type {0} found for SenderReference {1}", ((Message)dbEntity).MessageNotificationClassDisplay, messageId);
|
_log.InfoFormat("Message type {0} found for SenderReference {1}", ((Message)dbEntity).MessageNotificationClassDisplay, messageId);
|
||||||
|
foreach (MessageError existingError in aMessage.ErrorList)
|
||||||
|
DBManager.Instance.Delete(existingError);
|
||||||
|
}
|
||||||
|
|
||||||
MessageCore aCore = null;
|
MessageCore aCore = null;
|
||||||
if (dbEntity == null)
|
if (dbEntity == null)
|
||||||
@ -65,6 +71,7 @@ namespace bsmd.dbh
|
|||||||
aCore.BSMDStatusInternal = MessageCore.BSMDStatus.RESPONDED;
|
aCore.BSMDStatusInternal = MessageCore.BSMDStatus.RESPONDED;
|
||||||
aCore.Cancelled = true;
|
aCore.Cancelled = true;
|
||||||
DBManager.Instance.Save(aCore);
|
DBManager.Instance.Save(aCore);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,24 +85,28 @@ namespace bsmd.dbh
|
|||||||
{
|
{
|
||||||
_log.WarnFormat("SenderReference DB Entity Object is no MessageHeader, aborting ({0})", dbEntity.GetType());
|
_log.WarnFormat("SenderReference DB Entity Object is no MessageHeader, aborting ({0})", dbEntity.GetType());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Message aMessage = dbEntity as Message;
|
|
||||||
|
|
||||||
switch (Type)
|
switch (Type)
|
||||||
{
|
{
|
||||||
case dbh.response.RootType.VISIT:
|
case dbh.response.RootType.VISIT:
|
||||||
// neue VISIT - ID
|
_log.InfoFormat("Visit-Id received: {0}", VisitId ?? "??!");
|
||||||
if(!VisitId.IsNullOrEmpty())
|
if(!VisitId.IsNullOrEmpty())
|
||||||
aMessage.MessageCore.VisitId = VisitId;
|
aMessage.MessageCore.VisitId = VisitId;
|
||||||
aMessage.MessageCore.BSMDStatusInternal = MessageCore.BSMDStatus.PREPARE;
|
aMessage.MessageCore.BSMDStatusInternal = MessageCore.BSMDStatus.PREPARE;
|
||||||
aMessage.SendSuccess = true;
|
aMessage.SendSuccess = true;
|
||||||
DBManager.Instance.Save(aMessage.MessageCore);
|
DBManager.Instance.Save(aMessage.MessageCore);
|
||||||
|
aMessage.InternalStatus = Message.BSMDStatus.CONFIRMED;
|
||||||
|
DBManager.Instance.Save(aMessage);
|
||||||
break;
|
break;
|
||||||
case dbh.response.RootType.TRANSIT:
|
case dbh.response.RootType.TRANSIT:
|
||||||
|
_log.InfoFormat("Transit-Id received: {0}", TransitId ?? "??!");
|
||||||
aMessage.MessageCore.TransitId = TransitId;
|
aMessage.MessageCore.TransitId = TransitId;
|
||||||
aMessage.MessageCore.BSMDStatusInternal = MessageCore.BSMDStatus.PREPARE;
|
aMessage.MessageCore.BSMDStatusInternal = MessageCore.BSMDStatus.PREPARE;
|
||||||
aMessage.SendSuccess = true;
|
aMessage.SendSuccess = true;
|
||||||
DBManager.Instance.Save(aMessage.MessageCore);
|
DBManager.Instance.Save(aMessage.MessageCore);
|
||||||
|
aMessage.InternalStatus = Message.BSMDStatus.CONFIRMED;
|
||||||
|
DBManager.Instance.Save(aMessage);
|
||||||
break;
|
break;
|
||||||
case dbh.response.RootType.RESET:
|
case dbh.response.RootType.RESET:
|
||||||
// Die Liste ist auch bei erfolgtem RESET offenbar immer NULL...
|
// Die Liste ist auch bei erfolgtem RESET offenbar immer NULL...
|
||||||
@ -116,15 +127,48 @@ namespace bsmd.dbh
|
|||||||
aMessage.SendSuccess = true;
|
aMessage.SendSuccess = true;
|
||||||
aMessage.InternalStatus = Message.BSMDStatus.CONFIRMED;
|
aMessage.InternalStatus = Message.BSMDStatus.CONFIRMED;
|
||||||
aMessage.Status = Message.MessageStatus.ACCEPTED;
|
aMessage.Status = Message.MessageStatus.ACCEPTED;
|
||||||
_log.InfoFormat("CONFIRMED");
|
_log.InfoFormat("full message class accepted");
|
||||||
}
|
}
|
||||||
else
|
if ((ReportingClassesPartial != null) && (ReportingClassesPartial.ReportingClass.Length > 0))
|
||||||
{
|
{
|
||||||
_log.InfoFormat("no match");
|
// this was successful, save status to MessageHeader
|
||||||
|
aMessage.SendSuccess = true;
|
||||||
|
aMessage.InternalStatus = Message.BSMDStatus.ERROR;
|
||||||
|
aMessage.Status = Message.MessageStatus.ACCEPTED;
|
||||||
|
_log.InfoFormat("partial message class accepted");
|
||||||
}
|
}
|
||||||
|
if ((ReportingClassesError != null) && (ReportingClassesError.ReportingClass.Length > 0))
|
||||||
|
{
|
||||||
|
// this was successful, save status to MessageHeader
|
||||||
|
aMessage.SendSuccess = true;
|
||||||
|
aMessage.InternalStatus = Message.BSMDStatus.ERROR;
|
||||||
|
aMessage.Status = Message.MessageStatus.ACCEPTED;
|
||||||
|
_log.InfoFormat("message class accepted but error");
|
||||||
|
}
|
||||||
|
|
||||||
|
// check the whole thing for completion
|
||||||
|
MessageCore core = DBManager.Instance.GetMessageCoreById(aMessage.MessageCoreId.Value);
|
||||||
|
bool stillSomethingSent = false;
|
||||||
|
foreach(Message message in DBManager.Instance.GetMessagesForCore(core, DBManager.MessageLoad.ALL))
|
||||||
|
{
|
||||||
|
if (aMessage.Id.Value == message.Id.Value) continue;
|
||||||
|
if(message.InternalStatus == Message.BSMDStatus.SENT)
|
||||||
|
{
|
||||||
|
stillSomethingSent = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!stillSomethingSent && (core.BSMDStatusInternal == MessageCore.BSMDStatus.SENT))
|
||||||
|
{
|
||||||
|
core.BSMDStatusInternal = MessageCore.BSMDStatus.RESPONDED;
|
||||||
|
DBManager.Instance.Save(core);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (Messages != null)
|
if (Messages != null)
|
||||||
{
|
{
|
||||||
// Status zu den jeweiligen Nachrichten. Bei uns sollte die Anzahl hier immer 1 sein, da wir die Dinger
|
// Status zu den jeweiligen Nachrichten. Bei uns sollte die Anzahl hier immer 1 sein, da wir die Dinger
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user