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}. - +