diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/DangerousGoodsDetailControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailViewControls/DangerousGoodsDetailControl.xaml.cs
index 69215603..c4c480e5 100644
--- a/ENI-2/ENI2/ENI2/DetailViewControls/DangerousGoodsDetailControl.xaml.cs
+++ b/ENI-2/ENI2/ENI2/DetailViewControls/DangerousGoodsDetailControl.xaml.cs
@@ -314,7 +314,7 @@ namespace ENI2.DetailViewControls
haz.MARPOLPositions.Add(eld.MARPOL);
this.dataGridMARPOLItems.Items.Refresh();
eld.MARPOL = new MARPOL_Annex_I_Position();
- eld.MARPOL.Identifier = DatabaseEntity.GetNewIdentifier(haz.MARPOLPositions, "MARPOL-");
+ eld.Identifier = DatabaseEntity.GetNewIdentifier(haz.MARPOLPositions, "MARPOL-");
eld.MARPOL.HAZ = this.haz;
this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA);
};
@@ -349,7 +349,7 @@ namespace ENI2.DetailViewControls
this.dataGridMARPOLItems.Items.Refresh();
ebd.MARPOL = new MARPOL_Annex_I_Position();
ebd.MARPOL.HAZ = this.haz;
- ebd.MARPOL.Identifier = DatabaseEntity.GetNewIdentifier(this.haz.MARPOLPositions, "MARPOL-");
+ ebd.Identifier = DatabaseEntity.GetNewIdentifier(this.haz.MARPOLPositions, "MARPOL-");
this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA);
};
@@ -392,7 +392,7 @@ namespace ENI2.DetailViewControls
haz.IMSBCPositions.Add(eld.IMSBC);
this.dataGridIMSBCItems.Items.Refresh();
eld.IMSBC = new IMSBCPosition();
- eld.IMSBC.Identifier = DatabaseEntity.GetNewIdentifier(this.haz.IMSBCPositions, "IMSBC-");
+ eld.Identifier = DatabaseEntity.GetNewIdentifier(this.haz.IMSBCPositions, "IMSBC-");
eld.IMSBC.HAZ = this.haz;
this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA);
};
@@ -426,7 +426,7 @@ namespace ENI2.DetailViewControls
this.dataGridIMSBCItems.Items.Refresh();
ebd.IMSBC = new IMSBCPosition();
ebd.IMSBC.HAZ = this.haz;
- ebd.IMSBC.Identifier = DatabaseEntity.GetNewIdentifier(this.haz.IMSBCPositions, "IMSBC-");
+ ebd.Identifier = DatabaseEntity.GetNewIdentifier(this.haz.IMSBCPositions, "IMSBC-");
this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA);
};
@@ -469,7 +469,7 @@ namespace ENI2.DetailViewControls
haz.IGCPositions.Add(eld.IGC);
this.dataGridIGCItems.Items.Refresh();
eld.IGC = new IGCPosition();
- eld.IGC.Identifier = DatabaseEntity.GetNewIdentifier(this.haz.IGCPositions, "IGC-");
+ eld.Identifier = DatabaseEntity.GetNewIdentifier(this.haz.IGCPositions, "IGC-");
eld.IGC.HAZ = this.haz;
this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA);
};
@@ -503,7 +503,7 @@ namespace ENI2.DetailViewControls
this.dataGridIGCItems.Items.Refresh();
ebd.IGC = new IGCPosition();
ebd.IGC.HAZ = this.haz;
- ebd.IGC.Identifier = DatabaseEntity.GetNewIdentifier(this.haz.IGCPositions, "IGC-");
+ ebd.Identifier = DatabaseEntity.GetNewIdentifier(this.haz.IGCPositions, "IGC-");
this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA);
};
@@ -546,7 +546,7 @@ namespace ENI2.DetailViewControls
haz.IBCPositions.Add(eld.IBC);
this.dataGridIBCItems.Items.Refresh();
eld.IBC = new IBCPosition();
- eld.IBC.Identifier = DatabaseEntity.GetNewIdentifier(this.haz.IBCPositions, "IBC-");
+ eld.Identifier = DatabaseEntity.GetNewIdentifier(this.haz.IBCPositions, "IBC-");
eld.IBC.HAZ = this.haz;
this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA);
};
@@ -580,7 +580,7 @@ namespace ENI2.DetailViewControls
this.dataGridIBCItems.Items.Refresh();
ebd.IBC = new IBCPosition();
ebd.IBC.HAZ = this.haz;
- ebd.IBC.Identifier = DatabaseEntity.GetNewIdentifier(this.haz.IBCPositions, "IBC-");
+ ebd.Identifier = DatabaseEntity.GetNewIdentifier(this.haz.IBCPositions, "IBC-");
this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA);
};
@@ -623,7 +623,7 @@ namespace ENI2.DetailViewControls
haz.IMDGPositions.Add(eld.IMDG);
this.dataGridIMDGItems.Items.Refresh();
eld.IMDG = new IMDGPosition();
- eld.IMDG.Identifier = DatabaseEntity.GetNewIdentifier(this.haz.IMDGPositions, "IMDG-");
+ eld.Identifier = DatabaseEntity.GetNewIdentifier(this.haz.IMDGPositions, "IMDG-");
eld.IMDG.HAZ = this.haz;
this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA);
};
@@ -657,7 +657,7 @@ namespace ENI2.DetailViewControls
this.dataGridIMDGItems.Items.Refresh();
ebd.IMDG = new IMDGPosition();
ebd.IMDG.HAZ = this.haz;
- ebd.IMDG.Identifier = DatabaseEntity.GetNewIdentifier(this.haz.IMDGPositions, "IMDG-");
+ ebd.Identifier = DatabaseEntity.GetNewIdentifier(this.haz.IMDGPositions, "IMDG-");
this.SublistElementChanged(this.IsDeparture ? Message.NotificationClass.HAZD : Message.NotificationClass.HAZA);
};
diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/MaritimeHealthDeclarationDetailControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailViewControls/MaritimeHealthDeclarationDetailControl.xaml.cs
index b26f0e91..8c8258be 100644
--- a/ENI-2/ENI2/ENI2/DetailViewControls/MaritimeHealthDeclarationDetailControl.xaml.cs
+++ b/ENI-2/ENI2/ENI2/DetailViewControls/MaritimeHealthDeclarationDetailControl.xaml.cs
@@ -232,6 +232,7 @@ namespace ENI2.DetailViewControls
((DateTime.Now - l10fc.PortFacilityDateOfDeparture.Value).TotalDays < 31))
{
PortOfCallLast30Days poc30 = new PortOfCallLast30Days();
+ poc30.Identifier = PortOfCallLast30Days.GetNewIdentifier(this._mdh.PortOfCallLast30Days);
poc30.PortOfCallLast30DaysCrewMembersJoined = false;
poc30.PortOfCallLast30DaysDateOfDeparture = l10fc.PortFacilityDateOfDeparture;
poc30.PortOfCallLast30DaysLocode = l10fc.PortFacilityPortLoCode;
diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/WasteDetailControl.xaml b/ENI-2/ENI2/ENI2/DetailViewControls/WasteDetailControl.xaml
index 4aed0479..73be64e5 100644
--- a/ENI-2/ENI2/ENI2/DetailViewControls/WasteDetailControl.xaml
+++ b/ENI-2/ENI2/ENI2/DetailViewControls/WasteDetailControl.xaml
@@ -102,18 +102,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
@@ -126,6 +114,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/WasteDetailControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailViewControls/WasteDetailControl.xaml.cs
index 25839566..80d1d8ff 100644
--- a/ENI-2/ENI2/ENI2/DetailViewControls/WasteDetailControl.xaml.cs
+++ b/ENI-2/ENI2/ENI2/DetailViewControls/WasteDetailControl.xaml.cs
@@ -58,21 +58,20 @@ namespace ENI2.DetailViewControls
private void buttonAddMissingEntries_Click(object sender, RoutedEventArgs e)
{
- bool changedWaste = false;
// Convenience Methode, die fehlende Waste Einträge ergänzt (interessant bei "manuellen" Anmeldungen)
- foreach(int wasteCode in WAS.DKWasteCodes)
+ foreach (int wasteCode in WAS.DKWasteCodes)
{
- bool codeFound = false;
- foreach(Waste waste in this._was.Waste)
+ Waste foundWaste = null;
+ foreach (Waste waste in this._was.Waste)
{
- if(waste.WasteType.HasValue && waste.WasteType.Value == wasteCode)
+ if (waste.WasteType.HasValue && waste.WasteType.Value == wasteCode)
{
- codeFound = true;
+ foundWaste = waste;
break;
}
}
- if(!codeFound)
+ if (foundWaste == null)
{
Waste newWaste = new Waste();
newWaste.Identifier = DatabaseEntity.GetNewIdentifier(this._was.Waste);
@@ -80,20 +79,28 @@ namespace ENI2.DetailViewControls
newWaste.WasteAmountGeneratedTillNextPort_MTQ = 0;
newWaste.WasteAmountRetained_MTQ = 0;
newWaste.WasteCapacity_MTQ = 0;
- newWaste.WasteDescription = "";
+ newWaste.WasteDescription = (wasteCode == 1300) ? "-" : "";
newWaste.WasteDisposalAmount_MTQ = 0;
newWaste.WasteDisposalPort = "ZZUKN";
newWaste.WasteDisposedAtLastPort_MTQ = 0;
newWaste.WasteType = wasteCode;
this._was.Waste.Add(newWaste);
- changedWaste = true;
+ }
+ else
+ {
+ if (!foundWaste.WasteAmountGeneratedTillNextPort_MTQ.HasValue) foundWaste.WasteAmountGeneratedTillNextPort_MTQ = 0;
+ if (!foundWaste.WasteAmountRetained_MTQ.HasValue) foundWaste.WasteAmountRetained_MTQ = 0;
+ if (!foundWaste.WasteCapacity_MTQ.HasValue) foundWaste.WasteCapacity_MTQ = 0;
+ if ((wasteCode == 1300) && foundWaste.WasteDescription.IsNullOrEmpty()) foundWaste.WasteDescription = "-";
+ if (!foundWaste.WasteDisposalAmount_MTQ.HasValue) foundWaste.WasteDisposalAmount_MTQ = 0;
+ if (foundWaste.WasteDisposalPort.IsNullOrEmpty()) foundWaste.WasteDisposalPort = "ZZUKN";
+ if (!foundWaste.WasteDisposedAtLastPort_MTQ.HasValue) foundWaste.WasteDisposedAtLastPort_MTQ = 0;
}
}
- if(changedWaste)
- {
- this.SublistElementChanged(Message.NotificationClass.WAS);
- this.dataGridWaste.Items.Refresh();
- }
+
+ this.SublistElementChanged(Message.NotificationClass.WAS);
+ this.dataGridWaste.Items.Refresh();
+
}
public override void Initialize()
diff --git a/ENI-2/ENI2/ENI2/ENI2.csproj b/ENI-2/ENI2/ENI2/ENI2.csproj
index f352e1d1..7f7bcd1a 100644
--- a/ENI-2/ENI2/ENI2/ENI2.csproj
+++ b/ENI-2/ENI2/ENI2/ENI2.csproj
@@ -36,7 +36,7 @@
true
publish.html
0
- 3.7.4.%2a
+ 3.7.5.%2a
false
true
true
diff --git a/ENI-2/ENI2/ENI2/EditControls/EditIBCDialog.xaml.cs b/ENI-2/ENI2/ENI2/EditControls/EditIBCDialog.xaml.cs
index 0bf70f6f..da4bbcac 100644
--- a/ENI-2/ENI2/ENI2/EditControls/EditIBCDialog.xaml.cs
+++ b/ENI-2/ENI2/ENI2/EditControls/EditIBCDialog.xaml.cs
@@ -24,6 +24,8 @@ namespace ENI2.EditControls
public IBCPosition IBC { get; set; }
+ public string Identifier { get { return this.textBoxIdentifier.Text; } set { this.textBoxIdentifier.Text = value; } }
+
private void EditIBCDialog_Loaded(object sender, RoutedEventArgs e)
{
this.textBoxFlashpoint.Text = this.IBC.Flashpoint_CEL;
diff --git a/ENI-2/ENI2/ENI2/EditControls/EditIGCDialog.xaml.cs b/ENI-2/ENI2/ENI2/EditControls/EditIGCDialog.xaml.cs
index d063d1bb..340a3d28 100644
--- a/ENI-2/ENI2/ENI2/EditControls/EditIGCDialog.xaml.cs
+++ b/ENI-2/ENI2/ENI2/EditControls/EditIGCDialog.xaml.cs
@@ -24,6 +24,8 @@ namespace ENI2.EditControls
public IGCPosition IGC { get; set; }
+ public string Identifier { get { return this.textBoxIdentifier.Text; } set { this.textBoxIdentifier.Text = value; } }
+
private void EditIGCDialog_Loaded(object sender, RoutedEventArgs e)
{
this.textBoxIdentifier.Text = this.IGC.Identifier;
diff --git a/ENI-2/ENI2/ENI2/EditControls/EditIMDGDialog.xaml.cs b/ENI-2/ENI2/ENI2/EditControls/EditIMDGDialog.xaml.cs
index 0c24d75c..a85a9fea 100644
--- a/ENI-2/ENI2/ENI2/EditControls/EditIMDGDialog.xaml.cs
+++ b/ENI-2/ENI2/ENI2/EditControls/EditIMDGDialog.xaml.cs
@@ -24,6 +24,8 @@ namespace ENI2.EditControls
public IMDGPosition IMDG { get; set; }
+ public string Identifier { get { return this.textBoxIdentifier.Text; } set { this.textBoxIdentifier.Text = value; } }
+
private void EditIMDGDialog_Loaded(object sender, RoutedEventArgs e)
{
this.textBoxClass7NuclideName.Text = this.IMDG.Class7NuclideName;
diff --git a/ENI-2/ENI2/ENI2/EditControls/EditIMSBCDialog.xaml.cs b/ENI-2/ENI2/ENI2/EditControls/EditIMSBCDialog.xaml.cs
index 5e486549..31ac39e1 100644
--- a/ENI-2/ENI2/ENI2/EditControls/EditIMSBCDialog.xaml.cs
+++ b/ENI-2/ENI2/ENI2/EditControls/EditIMSBCDialog.xaml.cs
@@ -24,6 +24,8 @@ namespace ENI2.EditControls
public IMSBCPosition IMSBC { get; set; }
+ public string Identifier { get { return this.textBoxIdentifier.Text; } set { this.textBoxIdentifier.Text = value; } }
+
private void EditIMSBCDialog_Loaded(object sender, RoutedEventArgs e)
{
this.textBoxBulkCargoShippingName.Text = this.IMSBC.BulkCargoShippingName;
diff --git a/ENI-2/ENI2/ENI2/EditControls/EditMarpolDialog.xaml.cs b/ENI-2/ENI2/ENI2/EditControls/EditMarpolDialog.xaml.cs
index 8ad483fb..bec085b6 100644
--- a/ENI-2/ENI2/ENI2/EditControls/EditMarpolDialog.xaml.cs
+++ b/ENI-2/ENI2/ENI2/EditControls/EditMarpolDialog.xaml.cs
@@ -24,6 +24,8 @@ namespace ENI2.EditControls
public MARPOL_Annex_I_Position MARPOL { get; set; }
+ public string Identifier { get { return this.textBoxIdentifier.Text; } set { this.textBoxIdentifier.Text = value; } }
+
private void EditMarpolDialog_Loaded(object sender, RoutedEventArgs e)
{
this.textBoxFlashpoint.Text = this.MARPOL.Flashpoint_CEL;
diff --git a/ENI-2/ENI2/ENI2/EditControls/VisitIdDialog.xaml.cs b/ENI-2/ENI2/ENI2/EditControls/VisitIdDialog.xaml.cs
index bc88fb11..49f6ab0a 100644
--- a/ENI-2/ENI2/ENI2/EditControls/VisitIdDialog.xaml.cs
+++ b/ENI-2/ENI2/ENI2/EditControls/VisitIdDialog.xaml.cs
@@ -29,6 +29,8 @@ namespace ENI2.EditControls
this.OKClicked += VisitIdDialog_OKClicked;
List> comboDataSource = new List>()
{
+ new KeyValuePair( Message.NSWProvider.DBH, "DBH live" ),
+ new KeyValuePair( Message.NSWProvider.DBH_TEST, "DBH Testsystem" ),
new KeyValuePair( Message.NSWProvider.DUDR, "HIS-Nord live" ),
new KeyValuePair( Message.NSWProvider.DUDR_TEST, "HIS-Nord Testsystem" )
};
diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx
index 6409aba2..a8059a94 100644
Binary files a/Stundensheet.xlsx and b/Stundensheet.xlsx differ
diff --git a/nsw/Source/SendNSWMessageService/NSWSendService.cs b/nsw/Source/SendNSWMessageService/NSWSendService.cs
index c997f2db..449e3b69 100644
--- a/nsw/Source/SendNSWMessageService/NSWSendService.cs
+++ b/nsw/Source/SendNSWMessageService/NSWSendService.cs
@@ -82,56 +82,190 @@ namespace SendNSWMessageService
if (DBManager.Instance.Connect(Properties.Settings.Default.ConnectionString))
{
// Datenbank auf zu sendende Objekte überprüfen und laden
-
List coresMarkedForSending = DBManager.Instance.GetMessageCoresByStatus(MessageCore.BSMDStatus.TOSEND);
foreach (MessageCore core in coresMarkedForSending)
{
- // TODO: Hier sollten jeweils die "neuesten" Nachrichten geladen werden, wenn es mehrere geben sollte!!
List messages = DBManager.Instance.GetMessagesForCore(core, DBManager.MessageLoad.ALL);
+ List toSendMessageList = new List();
- //
- // if (core.InitialHIS != Message.NSWProvider.DBH_TEST) continue; // ignore everything else
+ bool coreSendSucceeded = true;
+ bool didSendSomething = false;
- if ((core.InitialHIS == Message.NSWProvider.DUDR) || (core.InitialHIS == Message.NSWProvider.DUDR_TEST))
+
+ // Wenn es noch keine Visit-ID gibt können keine Meldeklassen versendet werden. Die Visit/Transit Meldung wird daher dann
+ // "leer" versendet
+
+ if ((core.IsTransit && core.TransitId.IsNullOrEmpty()) || (!core.IsTransit && core.VisitId.IsNullOrEmpty()))
{
- // HIS-NORD: alles auf einmal
-
- // Um Fehlern vorzubeugen wird jetzt nicht eine Datei erzeugt sondern für jede Meldeklasse eine einzelne
- // (Wunsch CH vom 6.10.17).
- bool sendSucceeded = true;
- bool didSendSomething = false;
-
- // Fall: keine Meldeklasse aber trotzdem auf TO_SEND. Entweder beim Beantragen von Visit-Id's oder beim Storno der gesamten
- // Anmeldung
- if ((core.DisplayId.Length == 0) || (core.Cancelled ?? false))
+ foreach (Message message in messages)
{
- sendSucceeded = bsmd.hisnord.Request.CreateSendFile(core, messages, (core.InitialHIS == Message.NSWProvider.DUDR_TEST)) ?? false;
- }
- else
- {
- foreach (Message message in messages)
+ if (((message.MessageNotificationClass == Message.NotificationClass.VISIT) && (!core.IsTransit)) ||
+ ((message.MessageNotificationClass == Message.NotificationClass.TRANSIT) && (core.IsTransit)))
{
- bool? sendResult = bsmd.hisnord.Request.CreateSendFile(core, messages, (core.InitialHIS == Message.NSWProvider.DUDR_TEST));
- if (sendResult.HasValue)
+ if ((message.InternalStatus == Message.BSMDStatus.UNDEFINED) ||
+ (message.InternalStatus == Message.BSMDStatus.PREPARE) ||
+ (message.InternalStatus == Message.BSMDStatus.TOSEND))
{
- didSendSomething = true;
- if (!sendResult.Value) sendSucceeded = false;
- }
+ _log.Debug("Visit/Transit not found, sending VISIT/TRANSIT message");
+ if (message.HIS == Message.NSWProvider.UNDEFINED)
+ message.HIS = core.InitialHIS;
+ if (core.DefaultReportingPartyId.HasValue) message.ReportingPartyId = core.DefaultReportingPartyId;
+ toSendMessageList.Add(message);
+ }
}
- }
-
- if (!didSendSomething) core.BSMDStatusInternal = MessageCore.BSMDStatus.PREPARE; // zurück zu neutral
- else
- {
- if (!sendSucceeded) core.BSMDStatusInternal = MessageCore.BSMDStatus.FAILURE;
- else core.BSMDStatusInternal = MessageCore.BSMDStatus.SENT;
}
-
- _log.InfoFormat("HIS-Nord Send: Core {0} [{1}] new Status {2}", core.Id, core.IMO, core.BSMDStatusInternal.ToString());
-
- DBManager.Instance.Save(core);
}
+ else
+ {
+ // VISIT / TRANSIT Id vorhanden, Daten können übertragen werden
+
+ foreach (Message message in messages)
+ {
+ // Update 5.10.17: Alles was nicht explizit auf "TOSEND" steht wird nicht verschickt!
+ if (message.InternalStatus != Message.BSMDStatus.TOSEND) continue;
+
+ // "Virtuelle" Meldeklassen (bisher: DK) werden hier nicht versendet!
+ if ((message.MessageNotificationClass == Message.NotificationClass.STO) ||
+ (message.MessageNotificationClass == Message.NotificationClass.CREWD) ||
+ (message.MessageNotificationClass == Message.NotificationClass.PASD))
+ continue;
+
+ if ((message.MessageNotificationClass == Message.NotificationClass.VISIT) ||
+ (message.MessageNotificationClass == Message.NotificationClass.TRANSIT))
+ continue;
+
+ if (!XtraSendLogic.ShouldSendMessage(message))
+ {
+ message.InternalStatus = Message.BSMDStatus.SUSPENDED;
+ DBManager.Instance.Save(message);
+ continue;
+ }
+
+ if (core.DefaultReportingPartyId.HasValue)
+ {
+ message.ReportingPartyId = core.DefaultReportingPartyId; // Referenz umbiegen
+ if (DBManager.Instance.GetReportingPartyDict().ContainsKey(core.DefaultReportingPartyId.Value)) // geladenes Objekt ersetzen
+ message.ReportingParty = DBManager.Instance.GetReportingPartyDict()[core.DefaultReportingPartyId.Value];
+ }
+
+ toSendMessageList.Add(message);
+ }
+ }
+
+ foreach (Message message in toSendMessageList)
+ {
+ try
+ {
+ bool sendSucceeded = false;
+
+ message.HIS = core.InitialHIS;
+ _log.InfoFormat("Sending {0} message to {1}",
+ message.MessageNotificationClass.ToString(), message.HIS.ToString());
+
+ // switch über passendes HIS / Schnittstelle
+ switch (message.HIS)
+ {
+
+ case Message.NSWProvider.DBH:
+ case Message.NSWProvider.DBH_TEST:
+ sendSucceeded = bsmd.dbh.Request.SendMessage(message, (message.HIS == Message.NSWProvider.DBH_TEST));
+ if (!sendSucceeded)
+ message.InternalStatus = Message.BSMDStatus.SEND_FAILED;
+ else
+ didSendSomething = true;
+ break;
+ case Message.NSWProvider.DAKOSY:
+ case Message.NSWProvider.DAKOSY_TEST:
+ sendSucceeded = bsmd.dakosy.Request.Send(message, true);
+ if (!sendSucceeded) message.InternalStatus = Message.BSMDStatus.SEND_FAILED;
+ else didSendSomething = true;
+ break;
+ case Message.NSWProvider.DUDR:
+ case Message.NSWProvider.DUDR_TEST:
+ bool? sendResult = bsmd.hisnord.Request.CreateSendFile(core, message, (core.InitialHIS == Message.NSWProvider.DUDR_TEST));
+ if (sendResult.HasValue)
+ {
+ didSendSomething = true;
+ sendSucceeded = sendResult.Value;
+ }
+ break;
+ default:
+ _log.WarnFormat("Initial HIS not specified for message {0}", message.Id);
+ break;
+ }
+
+ coreSendSucceeded &= sendSucceeded;
+
+ if(sendSucceeded)
+ {
+ message.ChangedBy = ""; // Leeren nach RS mit CH: Sie möchte das Feld als Indikator "zu versenden" verwenden (ich war dagegen ;-)
+ message.InternalStatus = Message.BSMDStatus.SENT;
+ }
+ else
+ {
+ message.InternalStatus = Message.BSMDStatus.SEND_FAILED;
+ }
+ message.StatusInfo = "";
+ message.SentAt = DateTime.Now;
+ DBManager.Instance.DeleteSystemErrors(message);
+ DBManager.Instance.Save(message);
+ }
+ catch (Exception ex)
+ {
+ _log.ErrorFormat("SENDING message {0}: {1}", message.Id.ToString(), ex.Message);
+ }
+ }
+
+ if (didSendSomething)
+ {
+ // falls nur eine Nachricht gescheitert ist geht der Core auf SEND_FAILED, sonst FAILURE
+ core.BSMDStatusInternal = coreSendSucceeded ? MessageCore.BSMDStatus.SENT : MessageCore.BSMDStatus.FAILURE;
+ }
+ else
+ {
+ core.BSMDStatusInternal = MessageCore.BSMDStatus.PREPARE; // aus irgendwelchen Gründen wurde nichts verschickt -> zurück auf PREPARE
+ }
+ DBManager.Instance.Save(core);
+
+
+ /*
+ if ((core.InitialHIS == Message.NSWProvider.DUDR) || (core.InitialHIS == Message.NSWProvider.DUDR_TEST))
+ {
+
+ bool sendSucceeded = true;
+ bool didSendSomething = false;
+
+ // Fall: keine Meldeklasse aber trotzdem auf TO_SEND. Entweder beim Beantragen von Visit-Id's oder beim Storno der gesamten
+ // Anmeldung
+ if ((core.DisplayId.Length == 0) || (core.Cancelled ?? false))
+ {
+ sendSucceeded = bsmd.hisnord.Request.CreateSendFile(core, messages, (core.InitialHIS == Message.NSWProvider.DUDR_TEST)) ?? false;
+ }
+ else
+ {
+ foreach (Message message in messages)
+ {
+ bool? sendResult = bsmd.hisnord.Request.CreateSendFile(core, message, (core.InitialHIS == Message.NSWProvider.DUDR_TEST));
+ if (sendResult.HasValue)
+ {
+ didSendSomething = true;
+ if (!sendResult.Value) sendSucceeded = false;
+ }
+ }
+ }
+
+ if (!didSendSomething) core.BSMDStatusInternal = MessageCore.BSMDStatus.PREPARE; // zurück zu neutral
+ else
+ {
+ if (!sendSucceeded) core.BSMDStatusInternal = MessageCore.BSMDStatus.FAILURE;
+ else core.BSMDStatusInternal = MessageCore.BSMDStatus.SENT;
+ }
+
+ _log.InfoFormat("HIS-Nord Send: Core {0} [{1}] new Status {2}", core.Id, core.IMO, core.BSMDStatusInternal.ToString());
+
+ DBManager.Instance.Save(core);
+ }
else
{
@@ -250,7 +384,7 @@ namespace SendNSWMessageService
if (!sendSucceeded)
message.InternalStatus = Message.BSMDStatus.SEND_FAILED;
}
-
+
break;
case Message.NSWProvider.DAKOSY:
@@ -302,16 +436,18 @@ namespace SendNSWMessageService
}
}
+ */
+
+ }
bsmd.hisnord.transmitter.CallTransmitter(true);
// bsmd.hisnord.transmitter.CallTransmitter(false); // wird aktuell nicht funktionieren
// ob test oder nicht ist in stat. dict gespeicher
- bsmd.hisnord.Request.ReadResponseFiles();
- bsmd.hisnord.Request.Clear();
+ bsmd.hisnord.Request.ReadResponseFiles();
bsmd.hisnord.Response.ReadAnswers(true);
- bsmd.hisnord.Response.ReadAnswers(false);
+ // bsmd.hisnord.Response.ReadAnswers(false);
List coresMarkedForStatusQuery = DBManager.Instance.GetMessageCoresWithNSWStatusFlag();
diff --git a/nsw/Source/bsmd.ExcelReadService/LocodeDB.cs b/nsw/Source/bsmd.ExcelReadService/LocodeDB.cs
index b4300d1d..55f09ed5 100644
--- a/nsw/Source/bsmd.ExcelReadService/LocodeDB.cs
+++ b/nsw/Source/bsmd.ExcelReadService/LocodeDB.cs
@@ -96,8 +96,9 @@ namespace bsmd.ExcelReadService
results.Add(entry);
}
}
- string query = string.Format("SELECT locodes.name, city_code, countries.code FROM locodes JOIN countries ON locodes.country_id = countries.ID WHERE locodes.port='t' AND (locodes.name like '{0}' OR locodes.name_wo_diacritics like '{0}')", city);
+ string query = "SELECT locodes.name, city_code, countries.code FROM locodes JOIN countries ON locodes.country_id = countries.ID WHERE locodes.port='t' AND (locodes.name like $PAR OR locodes.name_wo_diacritics like $PAR)";
SQLiteCommand cmd = new SQLiteCommand(query, _con);
+ cmd.Parameters.AddWithValue("$PAR", city);
IDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
diff --git a/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs b/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs
index 49319a95..e0806c49 100644
--- a/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs
+++ b/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs
@@ -2,6 +2,6 @@
[assembly: AssemblyCompany("Informatikbüro Daniel Schick")]
[assembly: AssemblyProduct("BSMD NSW interface")]
-[assembly: AssemblyInformationalVersion("3.7.4")]
+[assembly: AssemblyInformationalVersion("3.7.5")]
[assembly: AssemblyCopyright("Copyright © 2014-2017 Informatikbüro Daniel Schick. All rights reserved.")]
[assembly: AssemblyTrademark("")]
\ No newline at end of file
diff --git a/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs b/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs
index ed9e9c48..42a7ed3a 100644
--- a/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs
+++ b/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs
@@ -1,4 +1,4 @@
using System.Reflection;
-[assembly: AssemblyVersion("3.7.4.*")]
+[assembly: AssemblyVersion("3.7.5.*")]
diff --git a/nsw/Source/bsmd.database/SystemError.cs b/nsw/Source/bsmd.database/SystemError.cs
index fd60bae9..c16fa5a3 100644
--- a/nsw/Source/bsmd.database/SystemError.cs
+++ b/nsw/Source/bsmd.database/SystemError.cs
@@ -100,14 +100,16 @@ namespace bsmd.database
switch (filter)
{
case Message.LoadFilter.BY_CORE:
- query += "WHERE MessageCoreId = @COREID";
+ query += "WHERE MessageCoreId = @COREID AND Deleted = 0";
((SqlCommand)cmd).Parameters.AddWithValue("@COREID", criteria[0]);
break;
case Message.LoadFilter.MESSAGEHEADER:
- query += "WHERE MessageHeaderId = @MHID";
+ query += "WHERE MessageHeaderId = @MHID AND Deleted = 0";
((SqlCommand)cmd).Parameters.AddWithValue("@MHID", criteria[0]);
break;
case Message.LoadFilter.ALL:
+ query += "WHERE Deleted = 0";
+ break;
default:
break;
}
diff --git a/nsw/Source/bsmd.dbh/Request.cs b/nsw/Source/bsmd.dbh/Request.cs
index 10c892ba..302c71b6 100644
--- a/nsw/Source/bsmd.dbh/Request.cs
+++ b/nsw/Source/bsmd.dbh/Request.cs
@@ -42,8 +42,8 @@ namespace bsmd.dbh
return false;
}
- message.StatusInfo = ""; // zurücksetzen analog zu HIS-Nord (5.10.17)
- message.ChangedBy = "";
+ // message.StatusInfo = ""; // zurücksetzen analog zu HIS-Nord (5.10.17)
+ // message.ChangedBy = "";
// map message to dbh NSWRequest object
Dbh_Osis_Answ_Ws client = new Dbh_Osis_Answ_Ws();
diff --git a/nsw/Source/bsmd.hisnord/Request.cs b/nsw/Source/bsmd.hisnord/Request.cs
index 1480aec5..147882f4 100644
--- a/nsw/Source/bsmd.hisnord/Request.cs
+++ b/nsw/Source/bsmd.hisnord/Request.cs
@@ -21,9 +21,9 @@ namespace bsmd.hisnord
{
private static ILog _log = LogManager.GetLogger(typeof(Request));
private static Dictionary _reportingPartyDict = null;
- private static Dictionary coreFilenameDict = new Dictionary();
+ private static Dictionary> coreFilenameDict = new Dictionary>();
private static Dictionary coreUseTestDict = new Dictionary();
- private static Dictionary noteMessageDict = new Dictionary();
+ //private static Dictionary noteMessageDict = new Dictionary();
internal static Dictionary ReportingPartyDict
{
@@ -35,105 +35,53 @@ namespace bsmd.hisnord
}
return _reportingPartyDict;
}
- }
-
- public static void Clear()
- {
- coreFilenameDict.Clear();
- coreUseTestDict.Clear();
- }
+ }
public static void ReadResponseFiles()
{
foreach (MessageCore core in coreFilenameDict.Keys)
- {
- transmitter.result theResult = transmitter.GetResult(coreFilenameDict[core], coreUseTestDict[core]);
- if (theResult != null)
- {
- _log.InfoFormat("Result: Code {0} Detail {1} Message {2}", theResult.code, theResult.detail, theResult.message);
-
- if (theResult.code > 0)
- {
- core.BSMDStatusInternal = MessageCore.BSMDStatus.FAILURE;
-
- Message helperRefMessage = null;
- if (core.IsTransit)
- helperRefMessage = DBManager.Instance.GetMessage(core, Message.NotificationClass.TRANSIT);
- else
- helperRefMessage = DBManager.Instance.GetMessage(core, Message.NotificationClass.VISIT);
-
- SystemError se = new SystemError();
- se.ErrorCode = theResult.code;
- se.ErrorMessage = theResult.message.Truncate(255);
- se.ErrorDescription = theResult.detail.Truncate(255);
- se.ErrorAt = DateTime.Now;
- se.MessageCoreId = core.Id.Value;
- if (helperRefMessage != null)
- se.MessageHeaderId = helperRefMessage.Id;
-
- DBManager.Instance.Save(se);
- }
- else
- {
- core.BSMDStatusInternal = MessageCore.BSMDStatus.SENT;
- }
- DBManager.Instance.Save(core);
- }
- }
- }
-
- ///
- /// Passende Nachricht (unter bestimmten Voraussetzungen) aus dem Sende-Dict holen (aber nur wenn sie wirklich
- /// in die Nachricht serialisiert werden darf)
- ///
- private static Message GetSendMessage(Message.NotificationClass notificationClass)
- {
- Message result = null;
-
- if (noteMessageDict.ContainsKey(notificationClass))
{
- if (noteMessageDict[notificationClass].InternalStatus == Message.BSMDStatus.TOSEND)
+ List responseList = new List();
+
+ foreach (Message message in coreFilenameDict[core].Keys)
{
- // "leere" Nachrichten mit Listenelementen ausfiltern!
- if (Message.IsListClass(notificationClass) && (noteMessageDict[notificationClass].Elements.Count == 0))
+ transmitter.result theResult = transmitter.GetResult(coreFilenameDict[core][message], coreUseTestDict[core]);
+ if (theResult != null)
{
- _log.DebugFormat("skipping empty list class {0},", noteMessageDict[notificationClass].MessageNotificationClassDisplay);
- noteMessageDict[notificationClass].StatusInfo = "Meldeklasse ist leer";
- noteMessageDict[notificationClass].InternalStatus = Message.BSMDStatus.SUSPENDED;
- }
- else
- {
- if (!XtraSendLogic.ShouldSendMessage(noteMessageDict[notificationClass]))
+ _log.InfoFormat("Result: Code {0} Detail {1} Message {2}", theResult.code, theResult.detail, theResult.message);
+
+ if (theResult.code > 0)
{
- _log.DebugFormat("skipping {0}", noteMessageDict[notificationClass].MessageNotificationClassDisplay);
- noteMessageDict[notificationClass].InternalStatus = Message.BSMDStatus.SUSPENDED;
- }
- else
- {
- _log.DebugFormat("preparing {0}", noteMessageDict[notificationClass].MessageNotificationClassDisplay);
- noteMessageDict[notificationClass].StatusInfo = "";
- noteMessageDict[notificationClass].ChangedBy = ""; // Leeren nach RS mit CH: Sie möchte das Feld als Indikator "zu versenden" verwenden (ich war dagegen ;-)
- noteMessageDict[notificationClass].InternalStatus = Message.BSMDStatus.SENT;
- noteMessageDict[notificationClass].SentAt = DateTime.Now;
- DBManager.Instance.DeleteSystemErrors(noteMessageDict[notificationClass]);
- result = noteMessageDict[notificationClass];
+ core.BSMDStatusInternal = MessageCore.BSMDStatus.FAILURE;
+ DBManager.Instance.Save(core);
+ message.InternalStatus = Message.BSMDStatus.SEND_FAILED;
+ DBManager.Instance.Save(message);
+
+ SystemError se = new SystemError();
+ se.ErrorCode = theResult.code;
+ se.ErrorMessage = theResult.message.Truncate(255);
+ se.ErrorDescription = theResult.detail.Truncate(255);
+ se.ErrorAt = DateTime.Now;
+ se.MessageCoreId = core.Id.Value;
+ se.MessageHeaderId = message.Id;
+
+ DBManager.Instance.Save(se);
}
+
+
+ responseList.Add(message);
}
- DBManager.Instance.Save(noteMessageDict[notificationClass]);
}
+
+ foreach (Message removeMessage in responseList)
+ coreFilenameDict[core].Remove(removeMessage);
+
}
- return result;
- }
+ }
- public static bool? CreateSendFile(MessageCore core, List messages, bool useTest)
+ public static bool? CreateSendFile(MessageCore core, Message message, bool useTest)
{
- bool? retval = null;
- bool containsData = false;
-
- // dieses Dict wird benötigt, da die Meldeklassen in der richtigen Reihenfolge hinzugefügt werden müssen
- Request.noteMessageDict.Clear();
- foreach (Message message in messages)
- noteMessageDict[message.MessageNotificationClass] = message;
+ bool? retval = null;
try
{
@@ -202,17 +150,13 @@ namespace bsmd.hisnord
_nsw.conveyance.Items[2] = core.PoC;
_nsw.conveyance.ItemsElementName[2] = ItemsChoiceType.PortOfCall;
_nsw.conveyance.Items[3] = core.IsTransit ? core.ETAKielCanal : core.ETA; // TODO Datum konvertieren?
- _nsw.conveyance.ItemsElementName[3] = ItemsChoiceType.ETAPortOfCall;
- containsData = true;
+ _nsw.conveyance.ItemsElementName[3] = ItemsChoiceType.ETAPortOfCall;
}
#endregion
#region NSW message area
- Message visitTransitHeader = null;
- Message message = null;
-
// wir wissen noch nicht wieviele es werden, von daher erstmal eine Liste!
List items1ChoiceType = new List();
List