diff --git a/ENI2/Controls/MaerskListControl.xaml.cs b/ENI2/Controls/MaerskListControl.xaml.cs index 9fb80736..69920a4c 100644 --- a/ENI2/Controls/MaerskListControl.xaml.cs +++ b/ENI2/Controls/MaerskListControl.xaml.cs @@ -60,9 +60,12 @@ namespace ENI2.Controls md.Status = MaerskData.MDStatus.ID; md.ColM = core.VisitId; await DBManagerAsync.Save(md); + _dbWatchDog.UnRegister(core); this.Dispatcher.Invoke(() => { this.dataGridPOCores.Items.Refresh(); + if(_dbWatchDog.Idle) + busyControl.BusyState = Util.UIHelper.BusyStateEnum.NEUTRAL; }); } } @@ -205,9 +208,9 @@ namespace ENI2.Controls private async void PerformSearch() - { - - Dictionary filterDict = new Dictionary(); + { + busyControl.BusyState = Util.UIHelper.BusyStateEnum.BUSY; + Dictionary filterDict = new Dictionary(); // Die Suche findet in dem eingestellten Intervall statt uint from = this.dateTimePickerFrom.Value.Value.ToUniversalTime().ToUnixTimeStamp(); @@ -218,7 +221,7 @@ namespace ENI2.Controls // suche auslösen List searchResult = DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).GetMessageCoresWithFilters(filterDict); - + // alle anderen Häfen weg searchResult.RemoveAll(item => (item.PoC == null) || (!item.PoC.Equals(PortLocode))); @@ -237,6 +240,7 @@ namespace ENI2.Controls } this.dataGridPOCores.SelectedItem = null; + busyControl.BusyState = Util.UIHelper.BusyStateEnum.NEUTRAL; } private string ReadFieldAsString(IExcelDataReader reader, int fieldNum) @@ -306,7 +310,20 @@ namespace ENI2.Controls } MaerskData md = new MaerskData(); - md.ColA = ReadFieldAsString(reader, 0); + if (!reader.IsDBNull(0)) + { + if (reader.GetFieldType(0) == typeof(DateTime)) + { + md.ETA = reader.GetDateTime(0); + md.ColA = md.ETA.ToString(); + } + else + { + md.ColA = reader.GetString(0); + if (DateTime.TryParse(md.ColA, out DateTime aDateTime)) + md.ETA = aDateTime; + } + } if (!reader.IsDBNull(1)) md.ColB = ReadFieldAsString(reader, 1); if (!reader.IsDBNull(2)) md.ColC = ReadFieldAsString(reader, 2); if (!reader.IsDBNull(3)) md.ColD = ReadFieldAsString(reader, 3); @@ -322,19 +339,7 @@ namespace ENI2.Controls throw new InvalidOperationException($"{md.ColI} found in import to {PortLocode}, this is probably an error. Aborting import"); } if (!reader.IsDBNull(9)) md.ColJ = ReadFieldAsString(reader, 9); - if (!reader.IsDBNull(10)) { - if (reader.GetFieldType(10) == typeof(DateTime)) - { - md.ETA = reader.GetDateTime(10); - md.ColK = md.ETA.ToString(); - } - else - { - md.ColK = reader.GetString(10); - if (DateTime.TryParse(md.ColK, out DateTime aDateTime)) - md.ETA = aDateTime; - } - } + if (!reader.IsDBNull(10)) md.ColK = ReadFieldAsString(reader, 10); 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); @@ -362,7 +367,10 @@ namespace ENI2.Controls if (this.maerskDataList.Contains(md)) { // update record with imported record - MaerskData foundData = this.maerskDataList.First((m) => (m.ColF != null) && m.ColF.Equals(md.ColF) && (m.ColG != null) && m.ColG.Equals(md.ColG) && (md.ColH != null) && md.ColH.Equals(md.ColH)); + MaerskData foundData = this.maerskDataList.First((m) => (m.ColF != null) ? m.ColF.Equals(md.ColF) : (md.ColF == null) && + (m.ColG != null) ? m.ColG.Equals(md.ColG) : (md.ColG == null) && + (m.ColH != null) ? m.ColH.Equals(md.ColH) : (md.ColH == null)); + if(foundData.ETA.HasValue && ((foundData.ETA.Value - DateTime.Now).TotalSeconds > 0) && foundData.Update(md)) foundData.Status = MaerskData.MDStatus.UPDATED; } @@ -463,14 +471,16 @@ namespace ENI2.Controls MessageBox.Show("No valid rows selected", "Warning", MessageBoxButton.OK, MessageBoxImage.Exclamation); } else - { + { + busyControl.BusyState = Util.UIHelper.BusyStateEnum.BUSY; + foreach (MaerskData md in requestList) { md.Status = MaerskData.MDStatus.REQUESTING_ID; // create MessageCore and message classes md.MessageCore = new MessageCore(); - md.MessageCore.InitialHIS = Message.NSWProvider.DBH; + md.MessageCore.InitialHIS = Message.NSWProvider.DBH_MAERSK; md.MessageCore.IMO = md.ColF; md.MessageCore.ETA = md.ETA; md.MessageCore.IsTransit = false; diff --git a/ENI2/EditControls/CopyDeclarationDialog.xaml.cs b/ENI2/EditControls/CopyDeclarationDialog.xaml.cs index 4f6a6ec4..2c9e5592 100644 --- a/ENI2/EditControls/CopyDeclarationDialog.xaml.cs +++ b/ENI2/EditControls/CopyDeclarationDialog.xaml.cs @@ -97,6 +97,11 @@ namespace ENI2.EditControls private void LocodePoC_PropertyChanged(object sender, PropertyChangedEventArgs e) { this.CheckComplete(); + string locode = this.locodePoC.LocodeValue; + if ((locode != null) && (locode.Equals("DEBRV") || locode.Equals("DEBRE"))) + { + this.comboBoxInitialHIS.SelectedValue = Message.NSWProvider.DBH; + } } private void doubleUpDownIMO_ValueChanged(object sender, System.Windows.RoutedPropertyChangedEventArgs e) diff --git a/ENI2/EditControls/VisitIdDialog.xaml.cs b/ENI2/EditControls/VisitIdDialog.xaml.cs index cdddb4c4..f9c68776 100644 --- a/ENI2/EditControls/VisitIdDialog.xaml.cs +++ b/ENI2/EditControls/VisitIdDialog.xaml.cs @@ -96,6 +96,11 @@ namespace ENI2.EditControls private void LocodePoC_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { this.CheckComplete(); + string locode = this.locodePoC.LocodeValue; + if((locode != null) && (locode.Equals("DEBRV") || locode.Equals("DEBRE"))) + { + this.comboBoxInitialHIS.SelectedValue = Message.NSWProvider.DBH; + } } private void datePickerETA_SelectedDateChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) @@ -128,7 +133,7 @@ namespace ENI2.EditControls isComplete &= validLocode; - isComplete &= (comboBoxInitialHIS.SelectedValue != null); + isComplete &= comboBoxInitialHIS.SelectedValue != null; this.EnableOK(isComplete); } diff --git a/ENI2/Util/DatabaseEntityWatchdog.cs b/ENI2/Util/DatabaseEntityWatchdog.cs index 88de8eec..98f1e3b5 100644 --- a/ENI2/Util/DatabaseEntityWatchdog.cs +++ b/ENI2/Util/DatabaseEntityWatchdog.cs @@ -31,6 +31,8 @@ namespace ENI2.Util this.bgTimer.Interval = Properties.Settings.Default.changeTimerTimeout; } + public bool Idle => _watchedEntities.Count == 0; + private void BgTimer_Elapsed(object sender, ElapsedEventArgs e) { lock (this._entityLock) @@ -91,7 +93,7 @@ namespace ENI2.Util } public void UnRegister(MessageCore entity) - { + { lock (this._entityLock) { @@ -105,7 +107,7 @@ namespace ENI2.Util #region private / protected protected void OnDatabaseEntityChanged(DatabaseEntity entity) - { + { this.DatabaseEntityChanged?.Invoke(entity); } diff --git a/bsmd.database/MaerskData.cs b/bsmd.database/MaerskData.cs index d3a0bc6d..f7751bd2 100644 --- a/bsmd.database/MaerskData.cs +++ b/bsmd.database/MaerskData.cs @@ -177,7 +177,7 @@ namespace bsmd.database if (!reader.IsDBNull(15)) md.Remark = reader.GetString(15); // try parsing the column to datetime - if (DateTime.TryParse(md.ColK, out DateTime eta)) + if (DateTime.TryParse(md.ColA, out DateTime eta)) md.ETA = eta; } return md; @@ -244,10 +244,10 @@ namespace bsmd.database /// public bool Equals(MaerskData other) { - if (this.ColG == null) return false; - if (this.ColH == null) return false; - if (this.ColF == null) return false; if (other == null) return false; + if (this.ColG == null) return (other.ColG == null); + if (this.ColH == null) return (other.ColH == null); + if (this.ColF == null) return (other.ColF == null); return this.ColF.Equals(other.ColF) && this.ColG.Equals(other.ColG) && this.ColH.Equals(other.ColH); }