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