From d96979a93944d3cbf98125c9d216c69485dd4fae Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Tue, 11 Oct 2022 08:53:58 +0200 Subject: [PATCH] fixed CREW/PAS import for variable locode selection --- ENI2/EditControls/FixImportDialog.xaml | 2 +- ENI2/EditControls/FixImportDialog.xaml.cs | 13 ++++- ENI2/Excel/ExcelUtil.cs | 68 ++++++++++++++--------- 3 files changed, 54 insertions(+), 29 deletions(-) diff --git a/ENI2/EditControls/FixImportDialog.xaml b/ENI2/EditControls/FixImportDialog.xaml index a800d12e..2ea7b38a 100644 --- a/ENI2/EditControls/FixImportDialog.xaml +++ b/ENI2/EditControls/FixImportDialog.xaml @@ -25,7 +25,7 @@ bla bla - + diff --git a/ENI2/EditControls/FixImportDialog.xaml.cs b/ENI2/EditControls/FixImportDialog.xaml.cs index e9912466..d961e383 100644 --- a/ENI2/EditControls/FixImportDialog.xaml.cs +++ b/ENI2/EditControls/FixImportDialog.xaml.cs @@ -15,13 +15,24 @@ namespace ENI2.EditControls { public FixImportDialog() { - InitializeComponent(); + InitializeComponent(); + } + + public bool LocodeMode + { + get { return this.locodeControl.Visibility == Visibility.Visible; } + set + { + this.locodeControl.Visibility = value ? Visibility.Visible : Visibility.Hidden; + this.comboBoxValues.Visibility = value ? Visibility.Hidden : Visibility.Visible; + } } public string SelectedValue { get { + if (LocodeMode) return this.locodeControl.LocodeValue; return this.comboBoxValues.SelectedValue as string; } } diff --git a/ENI2/Excel/ExcelUtil.cs b/ENI2/Excel/ExcelUtil.cs index cb743f6e..b2079f95 100644 --- a/ENI2/Excel/ExcelUtil.cs +++ b/ENI2/Excel/ExcelUtil.cs @@ -2521,47 +2521,61 @@ namespace ENI2.Excel val = val.ToUpper(); + if (val.IsNullOrEmpty()) return val; + + // check if this is a legitimate Locode if (!LocodeDB.LocationNameFromLocode(val).IsNullOrEmpty()) return val; - string portName = LocodeDB.PortNameFromLocode(val); - if (portName.IsNullOrEmpty()) - { - // _log.WarnFormat("unknown Locode {0}", val); - // reverse search: if this is a name lookup port code - List possibleLocodes = LocodeDB.AllLocodesForCityName(val); + // check if it is a port that we already know + + // _log.WarnFormat("unknown Locode {0}", val); + // reverse search: if this is a name lookup port code + List possibleLocodes = LocodeDB.AllLocodesForCityName(val); - if(possibleLocodes.Count > 1) + if(possibleLocodes.Count > 1) + { + if (!_locodeImportDict.ContainsKey(val)) { - if (!_locodeImportDict.ContainsKey(val)) + FixImportDialog fid = new FixImportDialog(); + fid.Value = val; + fid.ValueType = "Locode"; + Dictionary ld = new Dictionary(); + foreach (string locode in possibleLocodes) + ld[locode] = locode; + fid.SelectionValues = ld; + if (fid.ShowDialog() ?? false) { - FixImportDialog fid = new FixImportDialog(); - fid.Value = val; - fid.ValueType = "Locode"; - Dictionary ld = new Dictionary(); - foreach (string locode in possibleLocodes) - ld[locode] = locode; - fid.SelectionValues = ld; - if (fid.ShowDialog() ?? false) - { - _locodeImportDict[val] = fid.SelectedValue; - } + _locodeImportDict[val] = fid.SelectedValue; } + } + if(_locodeImportDict.ContainsKey(val)) result = _locodeImportDict[val]; - } - else if(possibleLocodes.Count == 1) + } + else if(possibleLocodes.Count == 1) + { + result = possibleLocodes[0]; + } + else + { + if (!_locodeImportDict.ContainsKey(val)) { - result = possibleLocodes[0]; - } - else - { - // nothing found + // nothing found, let the user pick a locode by himself + FixImportDialog fid = new FixImportDialog(); + fid.Value = val; + fid.ValueType = "Locode"; + fid.LocodeMode = true; + if (fid.ShowDialog() ?? false) + { + _locodeImportDict[val] = fid.SelectedValue; + } } + if (_locodeImportDict.ContainsKey(val)) + result = _locodeImportDict[val]; } return result; } #endregion - } }