diff --git a/ENI2/Controls/MaerskListControl.xaml b/ENI2/Controls/MaerskListControl.xaml
index c45a235f..76833c23 100644
--- a/ENI2/Controls/MaerskListControl.xaml
+++ b/ENI2/Controls/MaerskListControl.xaml
@@ -78,6 +78,9 @@
+
+
+
diff --git a/ENI2/Controls/MaerskListControl.xaml.cs b/ENI2/Controls/MaerskListControl.xaml.cs
index b7410ee6..bf334d66 100644
--- a/ENI2/Controls/MaerskListControl.xaml.cs
+++ b/ENI2/Controls/MaerskListControl.xaml.cs
@@ -18,6 +18,7 @@ using ENI2.Locode;
using ENI2.Util;
using System.Diagnostics;
using System.Linq;
+using System.Threading.Tasks;
namespace ENI2.Controls
{
@@ -29,8 +30,7 @@ namespace ENI2.Controls
#region Fields
- private readonly ObservableCollection maerskDataList = new ObservableCollection();
- private const uint MAX_EMPTY_ROWS_ON_IMPORT = 3; // import breaks if more than this count of empty rows have been read
+ private readonly ObservableCollection maerskDataList = new ObservableCollection();
private readonly DatabaseEntityWatchdog _dbWatchDog;
#endregion
@@ -73,7 +73,16 @@ namespace ENI2.Controls
md.MessageCore = core;
md.Status = MaerskData.MDStatus.ID;
md.ColM = core.VisitId;
- await DBManagerAsync.Save(md);
+ if (core.PoC.Equals("DEBRE") && md.ColJ.Equals("MSK"))
+ core.Flags = 1;
+ if (core.PoC.Equals("DEWVN") && md.ColJ.Equals("MSK"))
+ core.Flags = 1;
+ if (core.PoC.Equals("DEBRE") && md.ColJ.Equals("SGL"))
+ core.Flags = 2;
+ if (core.PoC.Equals("DEWVN") && md.ColJ.Equals("SGL"))
+ core.Flags = 3;
+ await DBManagerAsync.SaveAsync(core);
+ await DBManagerAsync.SaveAsync(md);
_dbWatchDog.UnRegister(core);
this.Dispatcher.Invoke(() =>
{
@@ -150,7 +159,7 @@ namespace ENI2.Controls
maerskData.Remark = el.Text;
if (maerskData.MessageCore != null)
- await DBManagerAsync.Save(maerskData);
+ await DBManagerAsync.SaveAsync(maerskData);
}
/*
if(e.Column == gridColumnGroup)
@@ -235,6 +244,11 @@ namespace ENI2.Controls
// no ETA means done
md.Status = MaerskData.MDStatus.NO_ETA;
}
+
+ // if there is an declaration and it has been cancelled.. override the state to CANCELLED
+ if (md.MessageCore != null && (md.MessageCore.Cancelled ?? false))
+ md.Status = MaerskData.MDStatus.CANCELLED;
+
}
@@ -247,9 +261,7 @@ namespace ENI2.Controls
uint from = this.dateTimePickerFrom.SelectedDate.Value.ToUniversalTime().ToUnixTimeStamp();
DateTime toDate = this.dateTimePickerTo.SelectedDate.Value.ToUniversalTime().Add(new TimeSpan(23, 59, 59));
uint to = toDate.ToUnixTimeStamp();
- filterDict.Add(MessageCore.SearchFilterType.FILTER_ETA, string.Format("{0}:{1}", from.ToString() ?? "", to.ToString() ?? ""));
- // eingeschränkt auf flags
- filterDict.Add(MessageCore.SearchFilterType.FILTER_FLAG_EQ, "0");
+ filterDict.Add(MessageCore.SearchFilterType.FILTER_ETA, string.Format("{0}:{1}", from.ToString() ?? "", to.ToString() ?? ""));
// suche auslösen
List searchResult = DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).GetMessageCoresWithFilters(filterDict);
@@ -266,8 +278,15 @@ namespace ENI2.Controls
md.MessageCore = core;
md.MessageCoreId = core.Id.Value;
this.UpdateStatus(md);
- if(!maerskDataList.Contains(md)) // DatabaseEntity implements IEquatable
+ if (!maerskDataList.Contains(md)) // DatabaseEntity implements IEquatable
+ {
this.maerskDataList.Add(md);
+ if(!core.VisitId.IsNullOrEmpty() && md.ColM.IsNullOrEmpty())
+ {
+ md.ColM = core.VisitId; // this can happen if client is closed before an Id has been returned, so we have to manually set it here
+ Task saveResult = DBManagerAsync.SaveAsync(md); // actually we do not need to await this
+ }
+ }
}
}
this.TimeFilterItemSource();
@@ -286,8 +305,7 @@ namespace ENI2.Controls
if (reader.GetFieldType(fieldNum) == typeof(int))
return reader.GetInt32(fieldNum).ToString();
if (reader.GetFieldType(fieldNum) == typeof(double))
- return ((int) reader.GetDouble(fieldNum)).ToString();
- Type theType = reader.GetFieldType(fieldNum);
+ return ((int) reader.GetDouble(fieldNum)).ToString();
return null;
}
@@ -355,17 +373,20 @@ namespace ENI2.Controls
using (IExcelDataReader reader = ExcelReaderFactory.CreateReader(stream))
{
List importData = new List();
- uint emptyRowCnt = 0;
+
bool isFirstRow = true;
+ int currentRow = 0;
+ bool imosAreOkay = true;
try
{
while (reader.Read())
{
+ currentRow++;
if (isFirstRow)
{
- isFirstRow = false; // this must be a header row, skip
+ isFirstRow = false; // this must be a header row, skip
continue;
}
@@ -410,13 +431,35 @@ namespace ENI2.Controls
if (!reader.IsDBNull(11)) md.ColL = ReadFieldAsString(reader, 11);
if (!reader.IsDBNull(12)) md.ColM = ReadFieldAsString(reader, 12);
if (!reader.IsDBNull(13)) md.Remark = ReadFieldAsString(reader, 13);
-
- if (!md.ColF.IsNullOrEmpty()) // only add this if IMO is set
- importData.Add(md);
+
+ if(!md.ColF.IsNullOrEmpty())
+ {
+ if (Int32.TryParse(md.ColF, out int imo))
+ {
+ if ((imo < 1000000) || (imo > 9999999))
+ {
+ imosAreOkay = false;
+ }
+ }
+ else
+ {
+ imosAreOkay = false;
+ }
+ }
else
- emptyRowCnt++;
- if (emptyRowCnt > MAX_EMPTY_ROWS_ON_IMPORT) break;
- if (isFirstRow) isFirstRow = false;
+ {
+ imosAreOkay = false;
+ }
+
+ if (!imosAreOkay)
+ {
+ MessageBox.Show($"Invalid IMO in row {currentRow}, aborting import", Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
+ break;
+ }
+
+ importData.Add(md);
+
+ if (isFirstRow) isFirstRow = false;
}
}
catch (Exception ex)
@@ -424,7 +467,7 @@ namespace ENI2.Controls
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
}
- if (importData.Count > 0)
+ if (imosAreOkay && importData.Count > 0)
{
busyControl.BusyState = Util.UIHelper.BusyStateEnum.BUSY;
@@ -453,9 +496,9 @@ namespace ENI2.Controls
this.TimeFilterItemSource();
// this.SortItemSource();
busyControl.BusyState = Util.UIHelper.BusyStateEnum.NEUTRAL;
- }
- this.dataGridPOCores.Items.Refresh();
+ this.dataGridPOCores.Items.Refresh();
+ }
}
stream.Close();
@@ -557,9 +600,9 @@ namespace ENI2.Controls
md.MessageCore.BSMDStatusInternal = MessageCore.BSMDStatus.TOSEND;
md.MessageCore.Incoming = true;
md.MessageCore.DefaultReportingPartyId = App.UserId.Value;
- await DBManagerAsync.Save(md.MessageCore);
+ await DBManagerAsync.SaveAsync(md.MessageCore);
md.MessageCoreId = md.MessageCore.Id.Value;
- await DBManagerAsync.Save(md);
+ await DBManagerAsync.SaveAsync(md);
// Meldeklassen für neuen Anlauf erzeugen
// TODO: pre-set certain fields taken from Maersk data
diff --git a/ENI2/ENI2.csproj b/ENI2/ENI2.csproj
index 8448c5a0..efd719f2 100644
--- a/ENI2/ENI2.csproj
+++ b/ENI2/ENI2.csproj
@@ -36,8 +36,8 @@
5.4.0.0
true
publish.html
- 11
- 7.9.0.%2a
+ 8
+ 7.10.0.%2a
false
true
true
@@ -137,11 +137,11 @@
packages\ExcelDataReader.3.6.0\lib\net45\ExcelDataReader.dll
-
- packages\log4net.2.0.14\lib\net45\log4net.dll
+
+ packages\log4net.2.0.15\lib\net45\log4net.dll
- packages\Microsoft.Office.Interop.Excel.15.0.4795.1000\lib\net20\Microsoft.Office.Interop.Excel.dll
+ packages\Microsoft.Office.Interop.Excel.15.0.4795.1001\lib\net20\Microsoft.Office.Interop.Excel.dll
True
@@ -162,8 +162,8 @@
-
- packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.115.0\lib\net46\System.Data.SQLite.dll
+
+ packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.117.0\lib\net46\System.Data.SQLite.dll
@@ -1009,12 +1009,12 @@
"$(SignToolPath)signtool.exe" sign /f $(ProjectDir)\..\misc\codesigning.pfx /p t5bj2dk9ifdIWBPhPra4U $(TargetPath)
-
+
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}.
-
+