Zwischenstand DBH Rückkanal und Kleinigkeiten korrigiert

This commit is contained in:
Daniel Schick 2018-03-22 14:41:38 +00:00
parent a4070c5ecf
commit 8bddcb3af1
13 changed files with 71 additions and 1898 deletions

View File

@ -319,13 +319,13 @@ namespace ENI2.DetailViewControls
if (theHAZ == this.haz) if (theHAZ == this.haz)
{ {
if (!(this.checkBoxDangerousGoodsOnBoard.IsChecked ?? false)) this.checkBoxDangerousGoodsOnBoard.IsChecked = true; if (!(this.checkBoxDangerousGoodsOnBoard.IsChecked ?? false)) this.checkBoxDangerousGoodsOnBoard.IsChecked = true;
if (!(this.checkBoxDGManifestOnBoard.IsChecked ?? false)) this.checkBoxDGManifestOnBoard.IsChecked = true; // if (!(this.checkBoxDGManifestOnBoard.IsChecked ?? false)) this.checkBoxDGManifestOnBoard.IsChecked = true;
if (this.checkBoxMoUBaltic.IsChecked ?? true) this.checkBoxMoUBaltic.IsChecked = false; if (this.checkBoxMoUBaltic.IsChecked ?? true) this.checkBoxMoUBaltic.IsChecked = false;
} }
else else
{ {
theHAZ.NoDPGOnBoardOnArrival = false; theHAZ.NoDPGOnBoardOnArrival = false;
theHAZ.DPGManifestOnBoardOnArrival = true; // theHAZ.DPGManifestOnBoardOnArrival = true;
theHAZ.MOUBaltic = false; theHAZ.MOUBaltic = false;
} }
} }

View File

@ -38,13 +38,13 @@
<Label Content="{x:Static p:Resources.textTankerCondition}" Grid.Column="0" Grid.Row="2" HorizontalContentAlignment="Right" Margin="0,0,10,0"/> <Label Content="{x:Static p:Resources.textTankerCondition}" Grid.Column="0" Grid.Row="2" HorizontalContentAlignment="Right" Margin="0,0,10,0"/>
<ComboBox Grid.Row="2" Grid.Column="1" Name="comboBoxConditionCargoBallastTanks" Margin="2" SelectedIndex="{Binding ConditionCargoBallastTanks, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={util:ByteConverter}}" IsEnabled="{Binding ElementName=checkBoxTanker, Path=IsChecked}" ContextMenu="{DynamicResource ClearContextMenu}"/> <ComboBox Grid.Row="2" Grid.Column="1" Name="comboBoxConditionCargoBallastTanks" Margin="2" SelectedIndex="{Binding ConditionCargoBallastTanks, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={util:ByteConverter}}" IsEnabled="{Binding ElementName=checkBoxTanker, Path=IsChecked}" ContextMenu="{DynamicResource ClearContextMenu}"/>
<Label Content="{x:Static p:Resources.textTankerNatureOfCargo}" Grid.Column="0" Grid.Row="3" HorizontalContentAlignment="Right" Margin="0,0,10,0"/> <Label Content="{x:Static p:Resources.textTankerNatureOfCargo}" Grid.Column="0" Grid.Row="3" HorizontalContentAlignment="Right" Margin="0,0,10,0"/>
<TextBox Text="{Binding NatureOfCargo, Mode=TwoWay}" Name="textBoxNatureOfCargo" Grid.Column="1" Grid.Row="3" Margin="2,2,2,2" IsEnabled="{Binding ElementName=checkBoxTanker, Path=IsChecked}" VerticalContentAlignment="Center"/> <TextBox Text="{Binding NatureOfCargo, Mode=TwoWay}" Name="textBoxNatureOfCargo" Grid.Column="1" Grid.Row="3" Margin="2,2,2,2" IsEnabled="{Binding ElementName=checkBoxTanker, Path=IsChecked}" VerticalContentAlignment="Center" MaxLength="99" />
<Label Content="{x:Static p:Resources.textTankerVolumeOfCargo}" Grid.Column="0" Grid.Row="4" HorizontalContentAlignment="Right" Margin="0,0,10,0"/> <Label Content="{x:Static p:Resources.textTankerVolumeOfCargo}" Grid.Column="0" Grid.Row="4" HorizontalContentAlignment="Right" Margin="0,0,10,0"/>
<xctk:DoubleUpDown Grid.Row="4" Grid.Column="1" Name="doubleUpDownVolumeOfCargo" ShowButtonSpinner="False" ParsingNumberStyle="Any" Margin="2,2,2,2" FormatString="N3" Value="{Binding VolumeOfCargo, Mode=TwoWay}" IsEnabled="{Binding ElementName=checkBoxTanker, Path=IsChecked}" TextAlignment="Left"/> <xctk:DoubleUpDown Grid.Row="4" Grid.Column="1" Name="doubleUpDownVolumeOfCargo" ShowButtonSpinner="False" ParsingNumberStyle="Any" Margin="2,2,2,2" FormatString="N3" Value="{Binding VolumeOfCargo, Mode=TwoWay}" IsEnabled="{Binding ElementName=checkBoxTanker, Path=IsChecked}" TextAlignment="Left"/>
<Label Content="{x:Static p:Resources.textPlannedOperations}" Grid.Column="0" Grid.Row="5" HorizontalContentAlignment="Right" Margin="0,0,10,0"/> <Label Content="{x:Static p:Resources.textPlannedOperations}" Grid.Column="0" Grid.Row="5" HorizontalContentAlignment="Right" Margin="0,0,10,0"/>
<TextBox Text="{Binding PlannedOperations, Mode=TwoWay}" Name="textBoxPlannedOperations" Grid.Column="1" Grid.Row="5" Margin="2,2,2,2" VerticalContentAlignment="Center"/> <TextBox Text="{Binding PlannedOperations, Mode=TwoWay}" Name="textBoxPlannedOperations" Grid.Column="1" Grid.Row="5" Margin="2,2,2,2" VerticalContentAlignment="Center" MaxLength="99"/>
<Label Content="{x:Static p:Resources.textPlannedInspection}" Grid.Column="0" Grid.Row="6" HorizontalContentAlignment="Right" Margin="0,0,10,0"/> <Label Content="{x:Static p:Resources.textPlannedInspection}" Grid.Column="0" Grid.Row="6" HorizontalContentAlignment="Right" Margin="0,0,10,0"/>
<TextBox Text="{Binding PlannedWorks, Mode=TwoWay}" Name="textBoxPlannedWorks" Grid.Column="1" Grid.Row="6" Margin="2,2,2,2" /> <TextBox Text="{Binding PlannedWorks, Mode=TwoWay}" Name="textBoxPlannedWorks" Grid.Column="1" Grid.Row="6" Margin="2,2,2,2" MaxLength="255" />
<Label Content="{x:Static p:Resources.textLastExpandedInspection }" Grid.Column="0" Grid.Row="7" HorizontalContentAlignment="Right" Margin="0,0,10,0"/> <Label Content="{x:Static p:Resources.textLastExpandedInspection }" Grid.Column="0" Grid.Row="7" HorizontalContentAlignment="Right" Margin="0,0,10,0"/>
<DatePicker Grid.Column="1" Grid.Row="7" Name="datePickerLastExpandedInspection" VerticalAlignment="Center" SelectedDate="{Binding DateOfLastExpandedInspection, Mode=TwoWay}" Margin="2,2,2,2" /> <DatePicker Grid.Column="1" Grid.Row="7" Name="datePickerLastExpandedInspection" VerticalAlignment="Center" SelectedDate="{Binding DateOfLastExpandedInspection, Mode=TwoWay}" Margin="2,2,2,2" />
<Label Content="{x:Static p:Resources.textPlannedPeriodOfStay}" Grid.Column="0" Grid.Row="8" HorizontalContentAlignment="Right" Margin="0,0,10,0"/> <Label Content="{x:Static p:Resources.textPlannedPeriodOfStay}" Grid.Column="0" Grid.Row="8" HorizontalContentAlignment="Right" Margin="0,0,10,0"/>

Binary file not shown.

View File

@ -427,7 +427,7 @@ namespace bsmd.database
public override void Validate(List<MessageError> errors, List<MessageViolation> violations) public override void Validate(List<MessageError> errors, List<MessageViolation> violations)
{ {
if (this.NoDPGOnBoardOnArrival ?? false) // && this.MessageHeader.InternalStatus == Message.BSMDStatus.TOSEND) if ((this.NoDPGOnBoardOnArrival ?? false) && this.MessageHeader.InternalStatus == Message.BSMDStatus.TOSEND)
{ {
violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "No DPG on board set!", null, this.Title, null, this.Tablename)); violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "No DPG on board set!", null, this.Title, null, this.Tablename));
} }

View File

@ -40,7 +40,7 @@ namespace bsmd.database
[ShowReport] [ShowReport]
[LookupName("PRE72H.NaturOfCargo")] [LookupName("PRE72H.NaturOfCargo")]
[MaxLength(100)] [MaxLength(99)]
[ENI2Validation] [ENI2Validation]
public string NatureOfCargo { get; set; } public string NatureOfCargo { get; set; }
@ -52,7 +52,7 @@ namespace bsmd.database
[ShowReport] [ShowReport]
[Validation(ValidationCode.NOT_NULL)] [Validation(ValidationCode.NOT_NULL)]
[LookupName("PRE72H.PlannedOperations")] [LookupName("PRE72H.PlannedOperations")]
[MaxLength(100)] [MaxLength(99)]
[ENI2Validation] [ENI2Validation]
public string PlannedOperations { get; set; } public string PlannedOperations { get; set; }

View File

@ -15,12 +15,12 @@ namespace bsmd.dbh.ResponseService
/// </summary> /// </summary>
[OperationContract(Action = "http://tempuri.org/IResponseService/NSWResponse")] [OperationContract(Action = "http://tempuri.org/IResponseService/NSWResponse")]
[XmlSerializerFormatAttribute()] [XmlSerializerFormatAttribute()]
void root(string Version, string MessageId, string VisitId, string TransitId, DateTime Timestamp, void Root(string Version, string MessageId, string VisitId, string TransitId, DateTime Timestamp,
string SenderReference, bsmd.dbh.response.RootType Type, string SenderReference, bsmd.dbh.response.RootType Type,
List<bsmd.dbh.response.RootReportingClassesFull> ReportingClassesFull, bsmd.dbh.response.RootReportingClassesFull ReportingClassesFull,
List<bsmd.dbh.response.RootReportingClassesPartial> ReportingClassesPartial, bsmd.dbh.response.RootReportingClassesPartial ReportingClassesPartial,
List<bsmd.dbh.response.RootReportingClassesError> RootReportingClassesError, bsmd.dbh.response.RootReportingClassesError RootReportingClassesError,
List<bsmd.dbh.response.RootReportingClassesResetted> ReportingClassesResetted, bsmd.dbh.response.RootReportingClassesResetted ReportingClassesResetted,
List<bsmd.dbh.response.RootMessage> Messages); List<bsmd.dbh.response.RootMessage> Messages);
} }

View File

@ -1,10 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using log4net; using log4net;
using bsmd.database; using bsmd.database;
@ -17,19 +12,42 @@ namespace bsmd.dbh.ResponseService
{ {
private ILog _log = LogManager.GetLogger("dbh ResponseService"); private ILog _log = LogManager.GetLogger("dbh ResponseService");
public void root(string Version, string MessageId, string VisitId, string TransitId, DateTime Timestamp, public void Root(string Version, string MessageId, string VisitId, string TransitId, DateTime Timestamp,
string SenderReference, bsmd.dbh.response.RootType Type, string SenderReference, bsmd.dbh.response.RootType Type,
List<bsmd.dbh.response.RootReportingClassesFull> ReportingClassesFull, bsmd.dbh.response.RootReportingClassesFull ReportingClassesFull,
List<bsmd.dbh.response.RootReportingClassesPartial> ReportingClassesPartial, bsmd.dbh.response.RootReportingClassesPartial ReportingClassesPartial,
List<bsmd.dbh.response.RootReportingClassesError> RootReportingClassesError, bsmd.dbh.response.RootReportingClassesError RootReportingClassesError,
List<bsmd.dbh.response.RootReportingClassesResetted> ReportingClassesResetted, bsmd.dbh.response.RootReportingClassesResetted ReportingClassesResetted,
List<bsmd.dbh.response.RootMessage> Messages) List<bsmd.dbh.response.RootMessage> Messages)
{ {
// Der Fehler hier aktuell ist dass alles funktioniert, außer dass "Messages" nicht
// richtig deserialisiert wird und immer in eine leere Collection mündet. Die anderen
// Parameter sind richtig gesetzt. Per trial and error sowohl List<RootMessage> als auch
// RootMessage[] Messages ausprobiert. Element ist immer da, aber leer! (müsste aber ein Element haben!)
_log.Info("dbh response received");
if (ReportingClassesFull == null) _log.InfoFormat("ReportingClassesFull null");
if (ReportingClassesPartial == null) _log.InfoFormat("ReportingClassesPartial null");
if (RootReportingClassesError == null) _log.InfoFormat("ReportingClassesError null");
if (ReportingClassesResetted == null) _log.InfoFormat("ReportingClassesResetted null");
if (Messages == null) { _log.InfoFormat("Messages null"); }
else
{
_log.InfoFormat(Messages.GetType().ToString());
_log.InfoFormat("{0} RootMessage elements received", (Messages.Count));
}
if (Version != null) if (Version != null)
_log.InfoFormat("Version: {0}", Version); _log.InfoFormat("Version: {0}", Version);
else
_log.Warn("Version is null");
if (MessageId != null) if (MessageId != null)
_log.InfoFormat("MessageId: {0}", MessageId); _log.InfoFormat("MessageId: {0}", MessageId);
else
_log.Warn("MessageId is null");
if (!VisitId.IsNullOrEmpty()) if (!VisitId.IsNullOrEmpty())
_log.InfoFormat("Visit-Id: {0}", VisitId); _log.InfoFormat("Visit-Id: {0}", VisitId);
if (!TransitId.IsNullOrEmpty()) if (!TransitId.IsNullOrEmpty())
@ -38,8 +56,9 @@ namespace bsmd.dbh.ResponseService
_log.InfoFormat("Timestamp: {0}", Timestamp); _log.InfoFormat("Timestamp: {0}", Timestamp);
if (SenderReference != null) if (SenderReference != null)
_log.InfoFormat("Sender-Reference: {0}", SenderReference); _log.InfoFormat("Sender-Reference: {0}", SenderReference);
_log.InfoFormat("Type: {0}", Type); _log.InfoFormat("Type: {0}", Type);
/*
if (Messages != null) if (Messages != null)
{ {
foreach (bsmd.dbh.response.RootMessage rootMessage in Messages) foreach (bsmd.dbh.response.RootMessage rootMessage in Messages)
@ -47,13 +66,12 @@ namespace bsmd.dbh.ResponseService
_log.InfoFormat("Message type {0}: {1}", rootMessage.Type, rootMessage.Text); _log.InfoFormat("Message type {0}: {1}", rootMessage.Type, rootMessage.Text);
} }
} }
*/
if (SenderReference.IsNullOrEmpty()) if (SenderReference.IsNullOrEmpty())
{ {
_log.ErrorFormat("No sender reference, cannot process message"); _log.ErrorFormat("No sender reference, cannot process message");
return; return;
} }
_log.DebugFormat("processing {0}..", MessageId ?? "?"); _log.DebugFormat("processing {0}..", MessageId ?? "?");
Response.ProcessResponse(VisitId, TransitId, Timestamp, SenderReference, Type, Messages, Response.ProcessResponse(VisitId, TransitId, Timestamp, SenderReference, Type, Messages,

View File

@ -124,6 +124,9 @@
<Name>bsmd.dbh</Name> <Name>bsmd.dbh</Name>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup>
<WCFMetadata Include="Service References\" />
</ItemGroup>
<PropertyGroup> <PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion> <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>

File diff suppressed because it is too large Load Diff

View File

@ -1,244 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML Studio - FREE Community Edition 7.0.3.780 (http://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" 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:restriction>
</xs:simpleType>
</xs:element>
<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>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="(DE)([A-Z]{3})-([0-9]{4})-([A-Z]{6})" />
<xs:length value="17" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element minOccurs="0" name="TransitId">
<xs:annotation>
<xs:documentation>Required when VisitId is missing and field "Type" is not "VISIT or "TRANSIT"</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="(ZZNOK)-([0-9]{4})-([A-Z]{6})" />
<xs:length value="17" />
</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):
- VISIT: Creates a new declaration with the application for a VisitId. It's allowed to send further data in one or more reporting classes
- TRANSIT: same with TransitId
- DATA: Only data for one or more reporting classes are included
- RESET: The data of one or more reporting classes are deleted
- CANCEL: The whole declaration is cancelled</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="VISIT" />
<xs:enumeration value="TRANSIT" />
<xs:enumeration value="DATA" />
<xs:enumeration value="RESET" />
<xs:enumeration value="CANCEL" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element minOccurs="0" name="ReportingClassesFull">
<xs:annotation>
<xs:documentation>Reporting classes that are received with all necessary data.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="ReportingClass" type="ReportingClassCode">
<xs:annotation>
<xs:documentation>The code of a reporting class.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="ReportingClassesPartial">
<xs:annotation>
<xs:documentation>Reporting classes that are received with some data missing (see Messages for errors/violations).</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="ReportingClass" type="ReportingClassCode">
<xs:annotation>
<xs:documentation>The code of a reporting class.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="ReportingClassesError">
<xs:annotation>
<xs:documentation>Reporting classes that are received with some data missing (see Messages for errors/violations).</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="ReportingClass" type="ReportingClassCode">
<xs:annotation>
<xs:documentation>The code of a reporting class.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="ReportingClassesResetted">
<xs:annotation>
<xs:documentation>Reporting classes that are resetted (due to a message with Type RESET).</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="ReportingClass" type="ReportingClassCode">
<xs:annotation>
<xs:documentation>The code of a reporting class.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Messages">
<xs:annotation>
<xs:documentation>Errors, Violations, etc.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Message">
<xs:complexType>
<xs:sequence>
<xs:element name="ID">
<xs:annotation>
<xs:documentation>ID (given from NSW)</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="3" />
<xs:maxLength value="4" />
<xs:pattern value="([1-9][0-9]{2,3})" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Type">
<xs:annotation>
<xs:documentation>Type of Message (functional error, process error in report, process error in message basket, process error during status request, or violation)</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="INFO" />
<xs:enumeration value="WARNING" />
<xs:enumeration value="VIOLATION" />
<xs:enumeration value="ERROR" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Location">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1" />
<xs:maxLength value="32" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Text">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1" />
<xs:maxLength value="255" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</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>

View File

@ -84,7 +84,7 @@ namespace bsmd.dbh
timestamp, timestamp,
Properties.Settings.Default.Sender, // BSMD sender Kennung (festverdrahtet) Properties.Settings.Default.Sender, // BSMD sender Kennung (festverdrahtet)
senderReference, senderReference,
rootType, (bsmd.dbh.DBHWebReference.RootType) rootType,
item, item,
itemChoiceType2, itemChoiceType2,
null, // sisnumbers (weglassen) null, // sisnumbers (weglassen)
@ -163,7 +163,7 @@ namespace bsmd.dbh
case Message.NotificationClass.VISIT: case Message.NotificationClass.VISIT:
{ {
DBHWebReference.RootVisit rootVisit = new DBHWebReference.RootVisit(); DBHWebReference.RootVisit rootVisit = new DBHWebReference.RootVisit();
rootType = DBHWebReference.RootType.VISIT; rootType = RootType.VISIT;
if (!message.MessageCore.IMO.IsNullOrEmpty()) if (!message.MessageCore.IMO.IsNullOrEmpty())
{ {
@ -192,7 +192,7 @@ namespace bsmd.dbh
case Message.NotificationClass.TRANSIT: case Message.NotificationClass.TRANSIT:
{ {
DBHWebReference.RootTransit rootTransit = new DBHWebReference.RootTransit(); DBHWebReference.RootTransit rootTransit = new DBHWebReference.RootTransit();
rootType = DBHWebReference.RootType.TRANSIT; rootType = RootType.TRANSIT;
itemChoiceType2 = DBHWebReference.ItemChoiceType2.Transit; itemChoiceType2 = DBHWebReference.ItemChoiceType2.Transit;
if (!message.MessageCore.IMO.IsNullOrEmpty()) if (!message.MessageCore.IMO.IsNullOrEmpty())
@ -206,8 +206,8 @@ namespace bsmd.dbh
rootTransit.Item = message.MessageCore.ENI; rootTransit.Item = message.MessageCore.ENI;
} }
if (message.MessageCore.ETA.HasValue) if (message.MessageCore.ETAKielCanal.HasValue)
rootTransit.ETAKielCanal = message.MessageCore.ETA.Value.ToDBHDateString(); rootTransit.ETAKielCanal = message.MessageCore.ETAKielCanal.Value.ToDBHDateString();
else else
rootTransit.ETAKielCanal = null; rootTransit.ETAKielCanal = null;
item = rootTransit; item = rootTransit;
@ -1634,7 +1634,7 @@ namespace bsmd.dbh
try try
{ {
object[] items = null; object[] items = null;
if ((rootType == DBHWebReference.RootType.CANCEL) || (rootType == DBHWebReference.RootType.DATA) || (rootType == DBHWebReference.RootType.RESET)) if ((rootType == RootType.CANCEL) || (rootType == RootType.DATA) || (rootType == RootType.RESET))
{ {
items = new object[1]; items = new object[1];
items[0] = item; items[0] = item;
@ -1661,7 +1661,7 @@ namespace bsmd.dbh
timestamp, timestamp,
Properties.Settings.Default.Sender, // BSMD sender Kennung (festverdrahtet) Properties.Settings.Default.Sender, // BSMD sender Kennung (festverdrahtet)
senderReference, senderReference,
rootType, (bsmd.dbh.DBHWebReference.RootType) rootType,
item, item,
itemChoiceType2, itemChoiceType2,
null, // sisnumbers (weglassen) null, // sisnumbers (weglassen)

View File

@ -22,11 +22,11 @@ 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, List<response.RootMessage> Messages, string SenderReference, response.RootType Type, List<bsmd.dbh.response.RootMessage> Messages,
List<bsmd.dbh.response.RootReportingClassesFull> ReportingClassesFull, bsmd.dbh.response.RootReportingClassesFull ReportingClassesFull,
List<bsmd.dbh.response.RootReportingClassesPartial> ReportingClassesPartial, bsmd.dbh.response.RootReportingClassesPartial ReportingClassesPartial,
List<bsmd.dbh.response.RootReportingClassesError> RootReportingClassesError, bsmd.dbh.response.RootReportingClassesError RootReportingClassesError,
List<bsmd.dbh.response.RootReportingClassesResetted> ReportingClassesResetted, bsmd.dbh.response.RootReportingClassesResetted ReportingClassesResetted,
string connectionString) string connectionString)
{ {
@ -43,7 +43,7 @@ namespace bsmd.dbh
if (DBManager.Instance.Connect(connectionString)) if (DBManager.Instance.Connect(connectionString))
{ {
_log.Debug("Start PROCESS");
Guid messageId; Guid messageId;
if (!Guid.TryParseExact(SenderReference, "N", out messageId)) if (!Guid.TryParseExact(SenderReference, "N", out messageId))
{ {
@ -52,6 +52,9 @@ namespace bsmd.dbh
} }
DatabaseEntity dbEntity = DBManager.Instance.GetMessageById(messageId); DatabaseEntity dbEntity = DBManager.Instance.GetMessageById(messageId);
if (dbEntity != null)
_log.InfoFormat("Message type {0} found for SenderReference {1}", ((Message)dbEntity).MessageNotificationClassDisplay, messageId);
MessageCore aCore = null; MessageCore aCore = null;
if (dbEntity == null) if (dbEntity == null)
{ {
@ -107,13 +110,17 @@ namespace bsmd.dbh
//} //}
break; break;
case dbh.response.RootType.DATA: case dbh.response.RootType.DATA:
if((ReportingClassesFull != null) && (ReportingClassesFull.Count > 0) && if((ReportingClassesFull != null) && (ReportingClassesFull.ReportingClass.Length > 0))
(int) ReportingClassesFull[0].ReportingClass[0] == (int)aMessage.MessageNotificationClass)
{ {
// this was successful, save status to MessageHeader // this was successful, save status to MessageHeader
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");
}
else
{
_log.InfoFormat("no match");
} }
break; break;
} }

View File

@ -63,7 +63,7 @@
<Compile Include="..\bsmd.database\Properties\AssemblyProjectKeyInfo.cs"> <Compile Include="..\bsmd.database\Properties\AssemblyProjectKeyInfo.cs">
<Link>Properties\AssemblyProjectKeyInfo.cs</Link> <Link>Properties\AssemblyProjectKeyInfo.cs</Link>
</Compile> </Compile>
<Compile Include="NSWResponse.designer.cs" /> <Compile Include="NSWResponse.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Settings.Designer.cs"> <Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
@ -87,9 +87,6 @@
<ItemGroup> <ItemGroup>
<None Include="..\bsmdKey.snk" /> <None Include="..\bsmdKey.snk" />
<None Include="app.config" /> <None Include="app.config" />
<None Include="NSWResponse.xsd">
<SubType>Designer</SubType>
</None>
<None Include="packages.config" /> <None Include="packages.config" />
<None Include="Properties\Settings.settings"> <None Include="Properties\Settings.settings">
<Generator>PublicSettingsSingleFileGenerator</Generator> <Generator>PublicSettingsSingleFileGenerator</Generator>