Version 3.1.1 Korrekturen und

DB Erweiterung für ENI-2 (Historisierung)
This commit is contained in:
Daniel Schick 2016-05-26 08:12:25 +00:00
parent a52232cff1
commit f596558610
27 changed files with 360 additions and 147 deletions

Binary file not shown.

View File

@ -0,0 +1,8 @@
PRINT N'Altering [dbo].[MessageHeader]...';
GO
ALTER TABLE [dbo].[MessageHeader] ADD [CreatedBy] NVARCHAR(64) NULL;
GO
ALTER TABLE [dbo].[MessageHeader] ADD [ChangedBy] NVARCHAR(64) NULL;
GO

View File

@ -80,9 +80,10 @@ namespace SendNSWMessageService
foreach (MessageCore core in coresMarkedForSending) foreach (MessageCore core in coresMarkedForSending)
{ {
List<Message> messages = DBManager.Instance.GetMessagesForCore(core); // TODO: Hier sollten jeweils die "neuesten" Nachrichten geladen werden, wenn es mehrere geben sollte!!
List<Message> messages = DBManager.Instance.GetMessagesForCore(core, DBManager.MessageLoad.ALL);
// TODO: Das muss wieder entfernt werden wenn 3.0 funktional ist //
// if (core.InitialHIS != Message.NSWProvider.DBH_TEST) continue; // ignore everything else // if (core.InitialHIS != Message.NSWProvider.DBH_TEST) continue; // ignore everything else
if (core.InitialHIS == Message.NSWProvider.DUDR) if (core.InitialHIS == Message.NSWProvider.DUDR)

View File

@ -34,6 +34,18 @@
<setting name="TestMode" serializeAs="String"> <setting name="TestMode" serializeAs="String">
<value>True</value> <value>True</value>
</setting> </setting>
<setting name="ValidSender" serializeAs="Xml">
<value>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>report@bsmd.de</string>
<string>hsok@gmx.de</string>
<string>bald@puls200.de</string>
<string>d.schick@gmx.de</string>
<string>hollmann@bsmd.de</string>
</ArrayOfString>
</value>
</setting>
</bsmd.ExcelReadService.Properties.Settings> </bsmd.ExcelReadService.Properties.Settings>
</applicationSettings> </applicationSettings>
</configuration> </configuration>

View File

@ -40,7 +40,7 @@ namespace bsmd.ExcelReadService
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location); FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fvi.FileVersion; string version = fvi.FileVersion;
this._log.InfoFormat("Starting NSW Excel Read Service. v.{0}", version); this._log.InfoFormat("Starting NSW Excel Read Service. v.{0} -------------- ", version);
this.DoOnce(); this.DoOnce();
} }
@ -106,23 +106,42 @@ namespace bsmd.ExcelReadService
else else
{ {
// try to read/import attachment // only a valid sender gets a reply
using (ExcelReader reader = new ExcelReader(attachmentLocalPath)) bool isValidSender = false;
foreach (string aValidSender in Properties.Settings.Default.ValidSender)
{ {
readResult = Util.ProcessSheet(reader, out readMessage, out messageCore); if (mailSender.Equals(aValidSender, StringComparison.OrdinalIgnoreCase))
if (!readResult) {
_log.Error("Excel sheet could not be interpreted"); isValidSender = true;
break;
}
} }
// TODO: Quittung / set messagecore to createreport and let reportGenerator create a reply? if (!isValidSender)
{
_log.WarnFormat("ignored e-mail from illegal sender: {0}", mailSender);
}
else
{
// try to read/import attachment
using (ExcelReader reader = new ExcelReader(attachmentLocalPath))
{
readResult = Util.ProcessSheet(reader, out readMessage, out messageCore);
if (!readResult)
_log.Error("Excel sheet could not be interpreted");
}
// create a reply sheet (template + scanned highlighted content for verification // TODO: Quittung / set messagecore to createreport and let reportGenerator create a reply?
string confirmationExcelFilePath = Util.CreateConfirmationSheet(messageCore); // create a reply sheet (template + scanned highlighted content for verification
List<string> sendItems = new List<string>();
sendItems.Add(confirmationExcelFilePath); string confirmationExcelFilePath = Util.CreateConfirmationSheet(messageCore);
// send reply sheet back to sender List<string> sendItems = new List<string>();
BSMDMail.SendNSWReportWithAttachments(Properties.Settings.Default.SendEMailSubject, sendItems); sendItems.Add(confirmationExcelFilePath);
// send reply sheet back to sender
BSMDMail.SendNSWReportWithAttachments(Properties.Settings.Default.SendEMailSubject, sendItems);
}
// remove e-Mail // remove e-Mail
_log.InfoFormat("deleting mail with messageId {0}", messageId); _log.InfoFormat("deleting mail with messageId {0}", messageId);

View File

@ -94,5 +94,21 @@ namespace bsmd.ExcelReadService.Properties {
return ((bool)(this["TestMode"])); return ((bool)(this["TestMode"]));
} }
} }
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute(@"<?xml version=""1.0"" encoding=""utf-16""?>
<ArrayOfString xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
<string>report@bsmd.de</string>
<string>hsok@gmx.de</string>
<string>bald@puls200.de</string>
<string>d.schick@gmx.de</string>
<string>hollmann@bsmd.de</string>
</ArrayOfString>")]
public global::System.Collections.Specialized.StringCollection ValidSender {
get {
return ((global::System.Collections.Specialized.StringCollection)(this["ValidSender"]));
}
}
} }
} }

View File

@ -26,5 +26,15 @@
<Setting Name="TestMode" Type="System.Boolean" Scope="Application"> <Setting Name="TestMode" Type="System.Boolean" Scope="Application">
<Value Profile="(Default)">True</Value> <Value Profile="(Default)">True</Value>
</Setting> </Setting>
<Setting Name="ValidSender" Type="System.Collections.Specialized.StringCollection" Scope="Application">
<Value Profile="(Default)">&lt;?xml version="1.0" encoding="utf-16"?&gt;
&lt;ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
&lt;string&gt;report@bsmd.de&lt;/string&gt;
&lt;string&gt;hsok@gmx.de&lt;/string&gt;
&lt;string&gt;bald@puls200.de&lt;/string&gt;
&lt;string&gt;d.schick@gmx.de&lt;/string&gt;
&lt;string&gt;hollmann@bsmd.de&lt;/string&gt;
&lt;/ArrayOfString&gt;</Value>
</Setting>
</Settings> </Settings>
</SettingsFile> </SettingsFile>

View File

@ -29,7 +29,7 @@ namespace bsmd.ExcelReadService
if (messageCore == null) return false; // cannot work with this sheet or create one if (messageCore == null) return false; // cannot work with this sheet or create one
// load messages if already present // load messages if already present
List<Message> messages = DBManager.Instance.GetMessagesForCore(messageCore); List<Message> messages = DBManager.Instance.GetMessagesForCore(messageCore, DBManager.MessageLoad.EXCEL);
// start parsing fields // start parsing fields
if (messageCore.IsTransit) if (messageCore.IsTransit)
@ -134,10 +134,9 @@ namespace bsmd.ExcelReadService
foreach(Message message in messages) foreach(Message message in messages)
{ {
message.CreatedBy = "EXCEL";
DBManager.Instance.Save(message); DBManager.Instance.Save(message);
message.SaveElements(); message.SaveElements();
} }
return true; return true;

View File

@ -11,6 +11,8 @@
<AssemblyName>bsmd.ExcelReadService</AssemblyName> <AssemblyName>bsmd.ExcelReadService</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion> <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
@ -46,8 +48,9 @@
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Configuration.Install" /> <Reference Include="System.Configuration.Install" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Data.SQLite"> <Reference Include="System.Data.SQLite, Version=1.0.101.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\System.Data.SQLite.Core.1.0.99.0\lib\net45\System.Data.SQLite.dll</HintPath> <HintPath>..\packages\System.Data.SQLite.Core.1.0.101.0\lib\net45\System.Data.SQLite.dll</HintPath>
<Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Drawing" /> <Reference Include="System.Drawing" />
<Reference Include="System.Management" /> <Reference Include="System.Management" />
@ -125,7 +128,13 @@
<WCFMetadata Include="Service References\" /> <WCFMetadata Include="Service References\" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\packages\System.Data.SQLite.Core.1.0.99.0\build\net45\System.Data.SQLite.Core.targets" Condition="Exists('..\packages\System.Data.SQLite.Core.1.0.99.0\build\net45\System.Data.SQLite.Core.targets')" /> <Import Project="..\packages\System.Data.SQLite.Core.1.0.101.0\build\net45\System.Data.SQLite.Core.targets" Condition="Exists('..\packages\System.Data.SQLite.Core.1.0.101.0\build\net45\System.Data.SQLite.Core.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\System.Data.SQLite.Core.1.0.101.0\build\net45\System.Data.SQLite.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\System.Data.SQLite.Core.1.0.101.0\build\net45\System.Data.SQLite.Core.targets'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild"> <Target Name="BeforeBuild">

View File

@ -2,5 +2,5 @@
<packages> <packages>
<package id="log4net" version="2.0.5" targetFramework="net45" /> <package id="log4net" version="2.0.5" targetFramework="net45" />
<package id="OpenPop.NET" version="2.0.6.1120" targetFramework="net45" /> <package id="OpenPop.NET" version="2.0.6.1120" targetFramework="net45" />
<package id="System.Data.SQLite.Core" version="1.0.99.0" targetFramework="net45" /> <package id="System.Data.SQLite.Core" version="1.0.101.0" targetFramework="net45" />
</packages> </packages>

View File

@ -25,7 +25,7 @@ namespace bsmd.Tool
if (core != null) if (core != null)
{ {
// get messges // get messges
List<Message> messages = DBManager.Instance.GetMessagesForCore(core); List<Message> messages = DBManager.Instance.GetMessagesForCore(core, DBManager.MessageLoad.ALL);
RuleEngine ruleEngine = new RuleEngine(); RuleEngine ruleEngine = new RuleEngine();
foreach(Message message in messages) { foreach(Message message in messages) {

View File

@ -41,8 +41,9 @@
<Reference Include="CommandLine"> <Reference Include="CommandLine">
<HintPath>..\packages\CommandLineParser.1.9.71\lib\net45\CommandLine.dll</HintPath> <HintPath>..\packages\CommandLineParser.1.9.71\lib\net45\CommandLine.dll</HintPath>
</Reference> </Reference>
<Reference Include="log4net"> <Reference Include="log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.3\lib\net40-full\log4net.dll</HintPath> <HintPath>..\packages\log4net.2.0.5\lib\net45-full\log4net.dll</HintPath>
<Private>True</Private>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="CommandLineParser" version="1.9.71" targetFramework="net45" /> <package id="CommandLineParser" version="1.9.71" targetFramework="net45" />
<package id="log4net" version="2.0.3" targetFramework="net45" /> <package id="log4net" version="2.0.5" targetFramework="net45" />
</packages> </packages>

View File

@ -772,13 +772,25 @@ namespace bsmd.dakosy
string fileName = string.Format(".{0}.xml", Guid.NewGuid().ToString()); string fileName = string.Format(".{0}.xml", Guid.NewGuid().ToString());
string filePath = string.Format(@"{0}\{1}", Properties.Settings.Default.SFTPOutDir, fileName); string filePath = string.Format(@"{0}\{1}", Properties.Settings.Default.SFTPOutDir, fileName);
XmlSerializer serializer = new XmlSerializer(typeof(eDeclarationMessage)); XmlSerializer serializer = new XmlSerializer(typeof(eDeclarationMessage));
using(TextWriter tw = new StreamWriter(filePath)) { bool serializationFailed = false;
serializer.Serialize(tw, edm);
}
// call sftp client to send using(TextWriter tw = new StreamWriter(filePath)) {
sftp.Put(fileName, try
useTestSystem ? Properties.Settings.Default.RemoteTestIncomingDir : Properties.Settings.Default.RemoteProdIncomingDir); {
serializer.Serialize(tw, edm);
} catch (Exception serEx)
{
_log.ErrorFormat("serialization problem: {0}", serEx.ToString());
serializationFailed = true;
}
}
if (!serializationFailed)
{
// call sftp client to send
sftp.Put(fileName,
useTestSystem ? Properties.Settings.Default.RemoteTestIncomingDir : Properties.Settings.Default.RemoteProdIncomingDir);
}
// remove sent file if not test mode // remove sent file if not test mode
if (!useTestSystem) if (!useTestSystem)
@ -887,15 +899,15 @@ namespace bsmd.dakosy
reqList.RequestId[0].MessageHeader.MessageSender.ParticipantCode.AgencyID = "DAK"; reqList.RequestId[0].MessageHeader.MessageSender.ParticipantCode.AgencyID = "DAK";
reqList.RequestId[0].MessageHeader.MessageSender.ParticipantCode.Value = "BSM"; // TODO -> Absprache! reqList.RequestId[0].MessageHeader.MessageSender.ParticipantCode.Value = "BSM"; // TODO -> Absprache!
reqList.RequestId[0].ReportingParty = new ReportingParty(); reqList.RequestId[0].ReportingParty = new ReportingParty();
reqList.RequestId[0].ReportingParty.City = aMessage.ReportingParty.City; reqList.RequestId[0].ReportingParty.City = aMessage.ReportingParty.City ?? "";
reqList.RequestId[0].ReportingParty.Country = aMessage.ReportingParty.Country; reqList.RequestId[0].ReportingParty.Country = aMessage.ReportingParty.Country ?? "";
reqList.RequestId[0].ReportingParty.EMail = aMessage.ReportingParty.EMail; reqList.RequestId[0].ReportingParty.EMail = aMessage.ReportingParty.EMail ?? "";
reqList.RequestId[0].ReportingParty.Fax = aMessage.ReportingParty.Fax; reqList.RequestId[0].ReportingParty.Fax = aMessage.ReportingParty.Fax ?? "";
reqList.RequestId[0].ReportingParty.FirstName = aMessage.ReportingParty.FirstName; reqList.RequestId[0].ReportingParty.FirstName = aMessage.ReportingParty.FirstName ?? "";
reqList.RequestId[0].ReportingParty.LastName = aMessage.ReportingParty.LastName; reqList.RequestId[0].ReportingParty.LastName = aMessage.ReportingParty.LastName ?? "";
reqList.RequestId[0].ReportingParty.Name = aMessage.ReportingParty.Name; reqList.RequestId[0].ReportingParty.Name = aMessage.ReportingParty.Name ?? "";
reqList.RequestId[0].ReportingParty.Phone = aMessage.ReportingParty.Phone; reqList.RequestId[0].ReportingParty.Phone = aMessage.ReportingParty.Phone ?? "";
reqList.RequestId[0].ReportingParty.PostalCode = aMessage.ReportingParty.PostalCode; reqList.RequestId[0].ReportingParty.PostalCode = aMessage.ReportingParty.PostalCode ?? "";
if (!aMessage.ReportingParty.StreetAndNumber.IsNullOrEmpty()) if (!aMessage.ReportingParty.StreetAndNumber.IsNullOrEmpty())
{ {
int lastBlank = aMessage.ReportingParty.StreetAndNumber.LastIndexOf(' '); int lastBlank = aMessage.ReportingParty.StreetAndNumber.LastIndexOf(' ');
@ -911,17 +923,17 @@ namespace bsmd.dakosy
if (aMessage.MessageNotificationClass == Message.NotificationClass.TRANSIT) if (aMessage.MessageNotificationClass == Message.NotificationClass.TRANSIT)
{ {
reqList.RequestId[0].REG_TRANSIT = new REG_TRANSIT(); reqList.RequestId[0].REG_TRANSIT = new REG_TRANSIT();
reqList.RequestId[0].REG_TRANSIT.EniNumber = aMessage.MessageCore.ENI; reqList.RequestId[0].REG_TRANSIT.EniNumber = aMessage.MessageCore.ENI ?? "";
reqList.RequestId[0].REG_TRANSIT.EtaKielCanal = aMessage.MessageCore.ETA.Value; reqList.RequestId[0].REG_TRANSIT.EtaKielCanal = aMessage.MessageCore.ETA ?? DateTime.Now; // DEBUG: der Fallback sollte nie passieren
reqList.RequestId[0].REG_TRANSIT.ImoNumber = aMessage.MessageCore.IMO; reqList.RequestId[0].REG_TRANSIT.ImoNumber = aMessage.MessageCore.IMO ?? "";
} }
else else
{ {
reqList.RequestId[0].REG_VISIT = new REG_VISIT(); reqList.RequestId[0].REG_VISIT = new REG_VISIT();
reqList.RequestId[0].REG_VISIT.EniNumber = aMessage.MessageCore.ENI; reqList.RequestId[0].REG_VISIT.EniNumber = aMessage.MessageCore.ENI ?? "";
reqList.RequestId[0].REG_VISIT.EtaPortOfCall = aMessage.MessageCore.ETA.Value; reqList.RequestId[0].REG_VISIT.EtaPortOfCall = aMessage.MessageCore.ETA ?? DateTime.Now; // DEBUG: der Fallback sollte nie passieren
reqList.RequestId[0].REG_VISIT.ImoNumber = aMessage.MessageCore.IMO; reqList.RequestId[0].REG_VISIT.ImoNumber = aMessage.MessageCore.IMO ?? "";
reqList.RequestId[0].REG_VISIT.PortOfCall = aMessage.MessageCore.PoC; reqList.RequestId[0].REG_VISIT.PortOfCall = aMessage.MessageCore.PoC ?? "";
} }
} }

View File

@ -28,6 +28,18 @@ namespace bsmd.database
#endregion #endregion
#region Enums
public enum MessageLoad
{
ALL,
EXCEL,
HE,
ENI
}
#endregion
#region Properties #region Properties
public static DBManager Instance public static DBManager Instance
@ -141,11 +153,21 @@ namespace bsmd.database
return result; return result;
} }
public List<Message> GetMessagesForCore(MessageCore core) public List<Message> GetMessagesForCore(MessageCore core, MessageLoad loadType)
{ {
Message aMessage = new Message(); Message aMessage = new Message();
SqlCommand cmd = new SqlCommand(); SqlCommand cmd = new SqlCommand();
aMessage.PrepareLoadCommand(cmd, Message.LoadFilter.BY_CORE, core.Id);
Message.LoadFilter loadFilter = Message.LoadFilter.BY_CORE;
switch(loadType)
{
case MessageLoad.ENI: loadFilter = Message.LoadFilter.BY_CORE_ENI; break;
case MessageLoad.EXCEL: loadFilter = Message.LoadFilter.BY_CORE_EXCEL; break;
case MessageLoad.HE: loadFilter = Message.LoadFilter.BY_CORE_HE; break;
}
aMessage.PrepareLoadCommand(cmd, loadFilter, core.Id);
IDataReader reader = this.PerformCommand(cmd); IDataReader reader = this.PerformCommand(cmd);
List<DatabaseEntity> messages = aMessage.LoadList(reader); List<DatabaseEntity> messages = aMessage.LoadList(reader);

View File

@ -127,7 +127,10 @@ namespace bsmd.database
REPORTSTATUS, REPORTSTATUS,
IMO_ETA_POC, IMO_ETA_POC,
BY_VISITID, BY_VISITID,
BY_TRANSITID BY_TRANSITID,
BY_CORE_ENI,
BY_CORE_EXCEL,
BY_CORE_HE
} }
/// <summary> /// <summary>
@ -250,6 +253,16 @@ namespace bsmd.database
/// </summary> /// </summary>
public Guid? ReportingPartyId { get { return this.reportingPartyId; } set { this.reportingPartyId = value; } } public Guid? ReportingPartyId { get { return this.reportingPartyId; } set { this.reportingPartyId = value; } }
/// <summary>
/// Urheber der Nachricht (Excel oder HE)
/// </summary>
public string CreatedBy { get; set; }
/// <summary>
/// Bearbeiter für Änderungshistorie (=Name des angemeldeten Melders), wird vom ENI-2 Speicherprozess befüllt
/// </summary>
public string ChangedBy { get; set; }
#endregion #endregion
#region IDatabaseEntity implementation #region IDatabaseEntity implementation
@ -289,14 +302,16 @@ namespace bsmd.database
cmd.Parameters.AddWithNullableValue("@REPORTINGPARTYID", this.reportingPartyId); cmd.Parameters.AddWithNullableValue("@REPORTINGPARTYID", this.reportingPartyId);
cmd.Parameters.AddWithValue("@BSMDSTATUS", this.InternalStatus); cmd.Parameters.AddWithValue("@BSMDSTATUS", this.InternalStatus);
cmd.Parameters.AddWithValue("@HIS", this.HIS); cmd.Parameters.AddWithValue("@HIS", this.HIS);
cmd.Parameters.AddWithNullableValue("@CREATEDBY", this.CreatedBy);
cmd.Parameters.AddWithNullableValue("@CHANGEDBY", this.ChangedBy);
if (this.IsNew) if (this.IsNew)
{ {
this.CreateId(); this.CreateId();
cmd.Parameters.AddWithValue("@ID", this.Id); cmd.Parameters.AddWithValue("@ID", this.Id);
string query = string.Format("INSERT INTO {0} (Id, ClientRequestId, MessageCoreId, MessageId, SentAt, ReceivedAt, RequestedAt, NotificationClass, Reset, Cancel, Status, ReportingPartyId, BSMDStatus, HIS) " + string query = string.Format("INSERT INTO {0} (Id, ClientRequestId, MessageCoreId, MessageId, SentAt, ReceivedAt, RequestedAt, NotificationClass, Reset, Cancel, Status, ReportingPartyId, BSMDStatus, HIS, CreatedBy, ChangedBy) " +
"VALUES (@ID, @CLIENTREQUESTID, @MESSAGECOREID, @MESSAGEID, @SENTAT, @RECEIVEDAT, @REQUESTEDAT, @NOTIFICATIONCLASS, @RESET, @CANCEL, @STATUS, @REPORTINGPARTYID, @BSMDSTATUS, @HIS)", "VALUES (@ID, @CLIENTREQUESTID, @MESSAGECOREID, @MESSAGEID, @SENTAT, @RECEIVEDAT, @REQUESTEDAT, @NOTIFICATIONCLASS, @RESET, @CANCEL, @STATUS, @REPORTINGPARTYID, @BSMDSTATUS, @HIS, @CREATEDBY, @CHANGEDBY)",
this.Tablename); this.Tablename);
cmd.CommandText = query; cmd.CommandText = query;
} }
@ -304,8 +319,8 @@ namespace bsmd.database
{ {
cmd.Parameters.AddWithValue("@ID", this.Id); cmd.Parameters.AddWithValue("@ID", this.Id);
cmd.CommandText = string.Format("UPDATE {0} SET ClientRequestId = @CLIENTREQUESTID, MessageId = @MESSAGEID, SentAt = @SENTAT, ReceivedAt = @RECEIVEDAT, RequestedAt = @REQUESTEDAT, " + cmd.CommandText = string.Format("UPDATE {0} SET ClientRequestId = @CLIENTREQUESTID, MessageId = @MESSAGEID, SentAt = @SENTAT, ReceivedAt = @RECEIVEDAT, RequestedAt = @REQUESTEDAT, " +
"NotificationClass = @NOTIFICATIONCLASS, Reset = @RESET, Cancel = @CANCEL, Status = @STATUS, ReportingPartyId = @REPORTINGPARTYID, BSMDStatus = @BSMDSTATUS, HIS = @HIS " + "NotificationClass = @NOTIFICATIONCLASS, Reset = @RESET, Cancel = @CANCEL, Status = @STATUS, ReportingPartyId = @REPORTINGPARTYID, BSMDStatus = @BSMDSTATUS, HIS = @HIS, " +
"WHERE Id = @ID", this.Tablename); "CreatedBy = @CREATEDBY, ChangedBy = @CHANGEDBY WHERE Id = @ID", this.Tablename);
} }
} }
@ -313,7 +328,7 @@ namespace bsmd.database
public override void PrepareLoadCommand(IDbCommand cmd, LoadFilter filter, params object[] criteria ) public override void PrepareLoadCommand(IDbCommand cmd, LoadFilter filter, params object[] criteria )
{ {
string query = string.Format("SELECT Id, ClientRequestId, MessageCoreId, MessageId, SentAt, ReceivedAt, RequestedAt, NotificationClass, " + string query = string.Format("SELECT Id, ClientRequestId, MessageCoreId, MessageId, SentAt, ReceivedAt, RequestedAt, NotificationClass, " +
"Reset, Cancel, Status, ReportingPartyId, BSMDStatus, HIS, Created FROM {0} ", this.Tablename); "Reset, Cancel, Status, ReportingPartyId, BSMDStatus, HIS, Created, CreatedBy, ChangedBy FROM {0} ", this.Tablename);
switch (filter) switch (filter)
{ {
@ -335,12 +350,30 @@ namespace bsmd.database
((SqlCommand)cmd).Parameters.AddWithValue("@ID", criteria[0]); ((SqlCommand)cmd).Parameters.AddWithValue("@ID", criteria[0]);
break; break;
} }
case LoadFilter.BY_CORE: case LoadFilter.BY_CORE:
{ {
query += "WHERE MessageCoreId = @COREID"; query += "WHERE MessageCoreId = @COREID";
((SqlCommand)cmd).Parameters.AddWithValue("@COREID", criteria[0]); ((SqlCommand)cmd).Parameters.AddWithValue("@COREID", criteria[0]);
break; break;
} }
case LoadFilter.BY_CORE_ENI:
{
query += "WHERE MessageCoreId = @COREID AND ChangedBy IS NOT NULL";
((SqlCommand)cmd).Parameters.AddWithValue("@COREID", criteria[0]);
break;
}
case LoadFilter.BY_CORE_EXCEL:
{
query += "WHERE MessageCoreId = @COREID AND CreatedBy = 'EXCEL'";
((SqlCommand)cmd).Parameters.AddWithValue("@COREID", criteria[0]);
break;
}
case LoadFilter.BY_CORE_HE:
{
query += "WHERE MessageCoreId = @COREID AND (CreatedBy = 'HE' OR CreatedBy IS NULL)"; // TODO: letzte Bedingung nach Übergangsphase entfernen
((SqlCommand)cmd).Parameters.AddWithValue("@COREID", criteria[0]);
break;
}
case LoadFilter.ALL: case LoadFilter.ALL:
default: default:
break; break;
@ -370,6 +403,8 @@ namespace bsmd.database
if (!reader.IsDBNull(12)) msg.InternalStatus = (BSMDStatus)Enum.ToObject(typeof(BSMDStatus), reader.GetByte(12)); if (!reader.IsDBNull(12)) msg.InternalStatus = (BSMDStatus)Enum.ToObject(typeof(BSMDStatus), reader.GetByte(12));
if (!reader.IsDBNull(13)) msg.HIS = (NSWProvider)Enum.ToObject(typeof(NSWProvider), reader.GetByte(13)); if (!reader.IsDBNull(13)) msg.HIS = (NSWProvider)Enum.ToObject(typeof(NSWProvider), reader.GetByte(13));
if (!reader.IsDBNull(14)) msg.created = reader.GetDateTime(14); if (!reader.IsDBNull(14)) msg.created = reader.GetDateTime(14);
if (!reader.IsDBNull(15)) msg.CreatedBy = reader.GetString(15);
if (!reader.IsDBNull(16)) msg.ChangedBy = reader.GetString(16);
result.Add(msg); result.Add(msg);
} }
reader.Close(); reader.Close();

View File

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

View File

@ -1,4 +1,4 @@
using System.Reflection; using System.Reflection;
[assembly: AssemblyVersion("3.0.15.*")] [assembly: AssemblyVersion("3.1.1.*")]

View File

@ -19,73 +19,53 @@ using System.Net.Security;
namespace bsmd.email namespace bsmd.email
{ {
public class BSMDMail public class BSMDMail : IDisposable
{ {
public static void SendNSWReportWithAttachments(string subject, List<string> filenameList) private SmtpClient client;
ILog log = LogManager.GetLogger(typeof(BSMDMail));
internal BSMDMail()
{ {
ILog log = LogManager.GetLogger(typeof(BSMDMail)); this.client = new SmtpClient();
SmtpClient smtpClient = new SmtpClient();
NetworkCredential basicCredential = new NetworkCredential(Properties.Settings.Default.SMTPUser, NetworkCredential basicCredential = new NetworkCredential(Properties.Settings.Default.SMTPUser,
Properties.Settings.Default.SMTPPassword); Properties.Settings.Default.SMTPPassword);
foreach (string recipient in Properties.Settings.Default.Recipient) // setup up the host, increase the timeout to 5 minutes
this.client.Host = Properties.Settings.Default.SMTPServer;
this.client.UseDefaultCredentials = false;
this.client.Credentials = basicCredential;
this.client.Timeout = (60 * 5 * 1000);
this.client.EnableSsl = true;
// evil workaround for invalid BSMD E-Mail certificate!
ServicePointManager.ServerCertificateValidationCallback = delegate (object s, X509Certificate certificate, X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{ return true; };
}
internal void Send(MailMessage message)
{
// doch nicht asynchron, da nur eine Nachricht gleichzeitig geschickt werden kann und ich so den sync code spare
try
{ {
MailMessage message = new MailMessage(); this.client.Send(message);
MailAddress fromAddress = new MailAddress(Properties.Settings.Default.Sender); log.InfoFormat("Email sending to {0} successful.", message.To.ToString());
}
// setup up the host, increase the timeout to 5 minutes catch (SmtpException smtpException)
smtpClient.Host = Properties.Settings.Default.SMTPServer; {
smtpClient.UseDefaultCredentials = false; log.ErrorFormat("SMTP error while sending e-mail:{0}", smtpException.Message);
smtpClient.Credentials = basicCredential; }
smtpClient.Timeout = (60 * 5 * 1000); catch (Exception ex)
smtpClient.EnableSsl = true; {
log.ErrorFormat("other error while sending e-mail:{0}", ex.Message);
// evil workaround for invalid BSMD E-Mail certificate!
ServicePointManager.ServerCertificateValidationCallback = delegate (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{ return true; };
message.From = fromAddress;
message.Subject = string.Format(subject);
message.IsBodyHtml = false;
message.Body = "see attachment";
message.To.Add(recipient);
foreach(string filename in filenameList)
{
Attachment attachment = new Attachment(filename, MediaTypeNames.Application.Octet);
ContentDisposition disposition = attachment.ContentDisposition;
disposition.CreationDate = File.GetCreationTime(filename);
disposition.ModificationDate = File.GetLastWriteTime(filename);
disposition.ReadDate = File.GetLastAccessTime(filename);
disposition.FileName = Path.GetFileName(filename);
disposition.Size = new FileInfo(filename).Length;
disposition.DispositionType = DispositionTypeNames.Attachment;
message.Attachments.Add(attachment);
}
// doch nicht asynchron, da nur eine Nachricht gleichzeitig geschickt werden kann und ich so den sync code spare
try
{
smtpClient.Send(message);
log.InfoFormat("Email sending to {0} successful.", recipient);
}
catch (SmtpException smtpException)
{
log.ErrorFormat("SMTP error while sending e-mail:{0}", smtpException.Message);
}
catch (Exception ex)
{
log.ErrorFormat("other error while sending e-mail:{0}", ex.Message);
}
message.Dispose();
} }
smtpClient.Dispose();
// http://stackoverflow.com/questions/7276375/what-are-best-practices-for-using-smtpclient-sendasync-and-dispose-under-net-4 // http://stackoverflow.com/questions/7276375/what-are-best-practices-for-using-smtpclient-sendasync-and-dispose-under-net-4
// asynchron schicken und wenn's erledigt ist gleich disposen (wichtig!) // asynchron schicken und wenn's erledigt ist gleich disposen (wichtig!)
// in meinem Fall nicht so recht wirksam, da eine Mail meist an mehrere Empfänger geschickt wird
/* /*
smtpClient.SendCompleted += (s, e) => smtpClient.SendCompleted += (s, e) =>
{ {
@ -95,6 +75,70 @@ namespace bsmd.email
smtpClient.SendAsync(message, null); smtpClient.SendAsync(message, null);
*/ */
}
public static void SendNSWReportWithAttachments(string subject, List<string> filenameList)
{
using (BSMDMail mailer = new BSMDMail())
{
foreach (string recipient in Properties.Settings.Default.Recipient)
{
MailMessage message = new MailMessage();
MailAddress fromAddress = new MailAddress(Properties.Settings.Default.Sender);
message.From = fromAddress;
message.Subject = string.Format(subject);
message.IsBodyHtml = false;
message.Body = "see attachment";
message.To.Add(recipient);
foreach (string filename in filenameList)
{
Attachment attachment = new Attachment(filename, MediaTypeNames.Application.Octet);
ContentDisposition disposition = attachment.ContentDisposition;
disposition.CreationDate = File.GetCreationTime(filename);
disposition.ModificationDate = File.GetLastWriteTime(filename);
disposition.ReadDate = File.GetLastAccessTime(filename);
disposition.FileName = Path.GetFileName(filename);
disposition.Size = new FileInfo(filename).Length;
disposition.DispositionType = DispositionTypeNames.Attachment;
message.Attachments.Add(attachment);
}
mailer.Send(message);
message.Dispose();
}
}
}
public static void SendSystemInfo(string subject, string body, string recipient)
{
using (BSMDMail mailer = new BSMDMail())
{
MailMessage message = new MailMessage();
MailAddress fromAddress = new MailAddress(Properties.Settings.Default.Sender);
message.From = fromAddress;
message.Subject = subject;
message.IsBodyHtml = false;
message.Body = body;
message.To.Add(recipient);
MailAddress adminAddress = new MailAddress(Properties.Settings.Default.AdminEmail);
message.CC.Add(adminAddress);
mailer.Send(message);
}
}
public void Dispose()
{
this.client.Dispose();
} }
} }
} }

View File

@ -1,7 +1,7 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
// Runtime Version:4.0.30319.34209 // Runtime Version:4.0.30319.42000
// //
// Changes to this file may cause incorrect behavior and will be lost if // Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. // the code is regenerated.
@ -12,7 +12,7 @@ namespace bsmd.email.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
@ -106,5 +106,14 @@ namespace bsmd.email.Properties {
return ((string)(this["Sender"])); return ((string)(this["Sender"]));
} }
} }
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("nsw@textbausteine.net")]
public string AdminEmail {
get {
return ((string)(this["AdminEmail"]));
}
}
} }
} }

View File

@ -33,5 +33,8 @@
<Setting Name="Sender" Type="System.String" Scope="Application"> <Setting Name="Sender" Type="System.String" Scope="Application">
<Value Profile="(Default)">donotreply@bsmd.de</Value> <Value Profile="(Default)">donotreply@bsmd.de</Value>
</Setting> </Setting>
<Setting Name="AdminEmail" Type="System.String" Scope="Application">
<Value Profile="(Default)">nsw@textbausteine.net</Value>
</Setting>
</Settings> </Settings>
</SettingsFile> </SettingsFile>

View File

@ -40,6 +40,9 @@
<setting name="Sender" serializeAs="String"> <setting name="Sender" serializeAs="String">
<value>donotreply@bsmd.de</value> <value>donotreply@bsmd.de</value>
</setting> </setting>
<setting name="AdminEmail" serializeAs="String">
<value>nsw@textbausteine.net</value>
</setting>
</bsmd.email.Properties.Settings> </bsmd.email.Properties.Settings>
</applicationSettings> </applicationSettings>
</configuration> </configuration>

View File

@ -43,8 +43,8 @@
<HintPath>..\packages\log4net.2.0.5\lib\net45-full\log4net.dll</HintPath> <HintPath>..\packages\log4net.2.0.5\lib\net45-full\log4net.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="OpenPop, Version=2.0.6.1119, Culture=neutral, PublicKeyToken=6bdb97f144b7efc8, processorArchitecture=MSIL"> <Reference Include="OpenPop, Version=2.0.6.1120, Culture=neutral, PublicKeyToken=6bdb97f144b7efc8, processorArchitecture=MSIL">
<HintPath>..\packages\OpenPop.NET.2.0.6.1119\lib\net40\OpenPop.dll</HintPath> <HintPath>..\packages\OpenPop.NET.2.0.6.1120\lib\net40\OpenPop.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="log4net" version="2.0.5" targetFramework="net45" /> <package id="log4net" version="2.0.5" targetFramework="net45" />
<package id="OpenPop.NET" version="2.0.6.1119" targetFramework="net45" /> <package id="OpenPop.NET" version="2.0.6.1120" targetFramework="net45" />
</packages> </packages>

View File

@ -824,6 +824,8 @@ namespace bsmd.herberg.FormService
if (pDict.ContainsKey("CrewMemberDateOfBirth")) crew.CrewMemberDateOfBirth = Extensions.TryParseDateTime(pDict["CrewMemberDateOfBirth"]); if (pDict.ContainsKey("CrewMemberDateOfBirth")) crew.CrewMemberDateOfBirth = Extensions.TryParseDateTime(pDict["CrewMemberDateOfBirth"]);
if (pDict.ContainsKey("CrewMemberGender")) crew.CrewMemberGender = Enums.ParseGender(pDict["CrewMemberGender"]); if (pDict.ContainsKey("CrewMemberGender")) crew.CrewMemberGender = Enums.ParseGender(pDict["CrewMemberGender"]);
if (pDict.ContainsKey("CrewMemberNationalityCode")) crew.CrewMemberNationality = pDict["CrewMemberNationalityCode"]; if (pDict.ContainsKey("CrewMemberNationalityCode")) crew.CrewMemberNationality = pDict["CrewMemberNationalityCode"];
if ((crew.CrewMemberNationality != null) && (crew.CrewMemberNationality.Length > 2))
crew.CrewMemberNationality = crew.CrewMemberNationality.Substring(0, 2);
if (pDict.ContainsKey("CrewMemberIdentityDocumentType")) crew.CrewMemberIdentityDocumentType = (byte)Enum.Parse(typeof(Enums.PassengerIdentityDocumentType), pDict["CrewMemberIdentityDocumentType"], true); if (pDict.ContainsKey("CrewMemberIdentityDocumentType")) crew.CrewMemberIdentityDocumentType = (byte)Enum.Parse(typeof(Enums.PassengerIdentityDocumentType), pDict["CrewMemberIdentityDocumentType"], true);
if (pDict.ContainsKey("CrewMemberIdentityDocumentId")) crew.CrewMemberIdentityDocumentId = pDict["CrewMemberIdentityDocumentId"]; if (pDict.ContainsKey("CrewMemberIdentityDocumentId")) crew.CrewMemberIdentityDocumentId = pDict["CrewMemberIdentityDocumentId"];
if (pDict.ContainsKey("CrewMemberVisaNumber")) crew.CrewMemberVisaNumber = pDict["CrewMemberVisaNumber"]; if (pDict.ContainsKey("CrewMemberVisaNumber")) crew.CrewMemberVisaNumber = pDict["CrewMemberVisaNumber"];
@ -914,11 +916,13 @@ namespace bsmd.herberg.FormService
if (vDict.ContainsKey("ShippingArea")) info.ShippingArea = (byte) Enum.Parse(typeof(Enums.ShippingArea), vDict["ShippingArea"]); if (vDict.ContainsKey("ShippingArea")) info.ShippingArea = (byte) Enum.Parse(typeof(Enums.ShippingArea), vDict["ShippingArea"]);
if (vDict.ContainsKey("RequestedPositionInPortOfCall")) info.RequestedPositionInPortOfCall = vDict["RequestedPositionInPortOfCall"]; if (vDict.ContainsKey("RequestedPositionInPortOfCall")) info.RequestedPositionInPortOfCall = vDict["RequestedPositionInPortOfCall"];
if (vDict.ContainsKey("SpecialRequirementsOfShipAtBerth")) info.SpecialRequirementsOfShipAtBerth = vDict["SpecialRequirementsOfShipAtBerth"]; if (vDict.ContainsKey("SpecialRequirementsOfShipAtBerth")) info.SpecialRequirementsOfShipAtBerth = vDict["SpecialRequirementsOfShipAtBerth"];
if (info.SpecialRequirementsOfShipAtBerth.IsNullOrEmpty()) if (info.SpecialRequirementsOfShipAtBerth.IsNullOrEmpty() && (aMessageCore.Customer != null))
{
info.SpecialRequirementsOfShipAtBerth = aMessageCore.Customer.Name; info.SpecialRequirementsOfShipAtBerth = aMessageCore.Customer.Name;
}
else else
{ {
if((aMessageCore.Customer != null) && (aMessageCore.Customer.Name != null) && !info.SpecialRequirementsOfShipAtBerth.Contains("- Agent: ")) if ((aMessageCore.Customer != null) && (aMessageCore.Customer.Name != null) && !info.SpecialRequirementsOfShipAtBerth.Contains("- Agent: "))
info.SpecialRequirementsOfShipAtBerth = string.Format("{0} - Agent: {1}", info.SpecialRequirementsOfShipAtBerth, aMessageCore.Customer.Name); info.SpecialRequirementsOfShipAtBerth = string.Format("{0} - Agent: {1}", info.SpecialRequirementsOfShipAtBerth, aMessageCore.Customer.Name);
} }
if (vDict.ContainsKey("ConstructionCharacteristicsOfShip")) info.ConstructionCharacteristicsOfShip = vDict["ConstructionCharacteristicsOfShip"]; if (vDict.ContainsKey("ConstructionCharacteristicsOfShip")) info.ConstructionCharacteristicsOfShip = vDict["ConstructionCharacteristicsOfShip"];
@ -1850,6 +1854,9 @@ namespace bsmd.herberg.FormService
{ {
DBManager.Instance.DeleteMessageErrors(theMessage); DBManager.Instance.DeleteMessageErrors(theMessage);
DBManager.Instance.DeleteMessageViolations(theMessage); DBManager.Instance.DeleteMessageViolations(theMessage);
} else
{
theMessage.CreatedBy = "HE";
} }
DBManager.Instance.Save(theMessage); DBManager.Instance.Save(theMessage);
@ -1875,7 +1882,7 @@ namespace bsmd.herberg.FormService
/// </summary> /// </summary>
private static Dictionary<string, Message> PrepareMessageDict(MessageCore aMessageCore) private static Dictionary<string, Message> PrepareMessageDict(MessageCore aMessageCore)
{ {
List<Message> messages = DBManager.Instance.GetMessagesForCore(aMessageCore); List<Message> messages = DBManager.Instance.GetMessagesForCore(aMessageCore, DBManager.MessageLoad.HE);
Dictionary<string, Message> result = new Dictionary<string, Message>(); Dictionary<string, Message> result = new Dictionary<string, Message>();
_log.DebugFormat("Core has {0} messages", messages.Count); _log.DebugFormat("Core has {0} messages", messages.Count);
foreach (Message message in messages) foreach (Message message in messages)

View File

@ -713,35 +713,38 @@ namespace bsmd.hisnord
// } // }
if (mdh.SanitaryControlReinspectionRequired.HasValue) if (mdh.SanitaryControlReinspectionRequired.HasValue)
_mdh.SanitaryControlReinspectionRequired = mdh.SanitaryControlReinspectionRequired.Value ? yorntype.Y : yorntype.N; _mdh.SanitaryControlReinspectionRequired = mdh.SanitaryControlReinspectionRequired.Value ? yorntype.Y : yorntype.N;
if (mdh.SanitaryMeasuresApplied.HasValue)
_mdh.SanitaryMeasuresApplied = mdh.SanitaryMeasuresApplied.Value ? yorntype.Y : yorntype.N; // 26.05.2016 09:44:13 XML Document has Error:truecvc - assertion.3.13.4.1: Asserti
// on evaluation('if (SanitaryMeasuresApplied eq 'Y') then SanitaryMeasuresDetails
// if (mdh.SanitaryMeasuresDetails.Count > 0) // else empty(SanitaryMeasuresDetails)') for element 'MDH' with type 'mdh' did not
// { // succeed.
_mdh.SanitaryMeasuresDetails = new sanitarydetail[mdh.SanitaryMeasuresDetails.Count];
for (int i = 0; i < mdh.SanitaryMeasuresDetails.Count; i++) _mdh.SanitaryMeasuresApplied = (mdh.SanitaryMeasuresApplied ?? false) ? yorntype.Y : yorntype.N;
{
_mdh.SanitaryMeasuresDetails[i] = new sanitarydetail(); _mdh.SanitaryMeasuresDetails = new sanitarydetail[mdh.SanitaryMeasuresDetails.Count];
if (mdh.SanitaryMeasuresDetails[i].SanitaryMeasuresDate.HasValue) for (int i = 0; i < mdh.SanitaryMeasuresDetails.Count; i++)
_mdh.SanitaryMeasuresDetails[i].SanitaryMeasuresDate = mdh.SanitaryMeasuresDetails[i].SanitaryMeasuresDate.Value; {
_mdh.SanitaryMeasuresDetails[i].SanitaryMeasuresLocation = mdh.SanitaryMeasuresDetails[i].SanitaryMeasuresLocation; _mdh.SanitaryMeasuresDetails[i] = new sanitarydetail();
_mdh.SanitaryMeasuresDetails[i].SanitaryMeasuresType = mdh.SanitaryMeasuresDetails[i].SanitaryMeasuresType; if (mdh.SanitaryMeasuresDetails[i].SanitaryMeasuresDate.HasValue)
} _mdh.SanitaryMeasuresDetails[i].SanitaryMeasuresDate = mdh.SanitaryMeasuresDetails[i].SanitaryMeasuresDate.Value;
// } _mdh.SanitaryMeasuresDetails[i].SanitaryMeasuresLocation = mdh.SanitaryMeasuresDetails[i].SanitaryMeasuresLocation;
_mdh.SanitaryMeasuresDetails[i].SanitaryMeasuresType = mdh.SanitaryMeasuresDetails[i].SanitaryMeasuresType;
}
if (mdh.SickAnimalOrPetOnBoard.HasValue) if (mdh.SickAnimalOrPetOnBoard.HasValue)
_mdh.SickAnimalOrPetOnBoard = mdh.SickAnimalOrPetOnBoard.Value ? yorntype.Y : yorntype.N; _mdh.SickAnimalOrPetOnBoard = mdh.SickAnimalOrPetOnBoard.Value ? yorntype.Y : yorntype.N;
if (mdh.SickPersonsOnBoard.HasValue) if (mdh.SickPersonsOnBoard.HasValue)
_mdh.SickPersonOnBoard = mdh.SickPersonsOnBoard.Value ? yorntype.Y : yorntype.N; _mdh.SickPersonOnBoard = mdh.SickPersonsOnBoard.Value ? yorntype.Y : yorntype.N;
_mdh.StowawaysDetected = (mdh.StowawaysDetected ?? false) ? yorntype.Y : yorntype.N; _mdh.StowawaysDetected = (mdh.StowawaysDetected ?? false) ? yorntype.Y : yorntype.N;
// if ((_mdh.StowawaysDetected == yorntype.Y) && (mdh.StowawaysJoiningLocations.Count > 0)) if (_mdh.StowawaysDetected == yorntype.Y)
// { {
_mdh.StowawayJoiningLocations = new string[mdh.StowawaysJoiningLocations.Count]; _mdh.StowawayJoiningLocations = new string[mdh.StowawaysJoiningLocations.Count];
for (int i = 0; i < mdh.StowawaysJoiningLocations.Count; i++) for (int i = 0; i < mdh.StowawaysJoiningLocations.Count; i++)
{ {
_mdh.StowawayJoiningLocations[i] = mdh.StowawaysJoiningLocations[i].StowawayJoiningLocation; _mdh.StowawayJoiningLocations[i] = mdh.StowawaysJoiningLocations[i].StowawayJoiningLocation;
} }
// } }
if (mdh.SuspisionInfectiousNature.HasValue) if (mdh.SuspisionInfectiousNature.HasValue)
_mdh.SuspisionInfectiousNature = mdh.SuspisionInfectiousNature.Value ? yorntype.Y : yorntype.N; _mdh.SuspisionInfectiousNature = mdh.SuspisionInfectiousNature.Value ? yorntype.Y : yorntype.N;

View File

@ -40,14 +40,14 @@ namespace bsmd.hisnord
int timeout = Properties.Settings.Default.BatchTimeoutMins * 1000 * 60; // convert to ms int timeout = Properties.Settings.Default.BatchTimeoutMins * 1000 * 60; // convert to ms
process.WaitForExit((timeout == 0) ? int.MaxValue : timeout); process.WaitForExit((timeout == 0) ? int.MaxValue : timeout);
_log.Error(process.StandardError.ReadToEnd()); _log.ErrorFormat("HIS-Nord transmitter error: {0}", process.StandardError.ReadToEnd());
process.WaitForExit(); process.WaitForExit();
_log.Info(process.StandardOutput.ReadToEnd()); _log.InfoFormat("HIS-Nord transmitter: {0}", process.StandardOutput.ReadToEnd());
process.WaitForExit(); process.WaitForExit();
// now we should read the response message... // now we should read the response message...
string resultFilename = string.Format("{0}.result.xml", Path.GetFileName(filenameFullPath)); string resultFilename = string.Format("{0}.result", Path.GetFileName(filenameFullPath)); // hier war früher noch ein .xml dran am Ende
string resultFullPath = Path.Combine(Properties.Settings.Default.ResultDir, resultFilename); string resultFullPath = Path.Combine(Properties.Settings.Default.ResultDir, resultFilename);
return result.ReadResult(resultFullPath); return result.ReadResult(resultFullPath);