diff --git a/ENI2/Controls/MaerskListControl.xaml.cs b/ENI2/Controls/MaerskListControl.xaml.cs index c41b3386..b9a50030 100644 --- a/ENI2/Controls/MaerskListControl.xaml.cs +++ b/ENI2/Controls/MaerskListControl.xaml.cs @@ -279,8 +279,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(); @@ -370,6 +377,7 @@ namespace ENI2.Controls List importData = new List(); uint emptyRowCnt = 0; bool isFirstRow = true; + int currentRow = 1; try { @@ -424,12 +432,29 @@ namespace ENI2.Controls 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 + bool imoIsOkay = false; + if(!md.ColF.IsNullOrEmpty()) + { + if (Int32.TryParse(md.ColF, out int imo)) + { + if ((imo > 1000000) && (imo < 9999999)) + { + imoIsOkay = true; + } + } + if(!imoIsOkay) + { + MessageBox.Show($"Invalid IMO in row {currentRow}, skipping entry", Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error); + } + } + + if (imoIsOkay) importData.Add(md); else emptyRowCnt++; if (emptyRowCnt > MAX_EMPTY_ROWS_ON_IMPORT) break; if (isFirstRow) isFirstRow = false; + currentRow++; } } catch (Exception ex)