diff --git a/ENI2/Controls/MaerskListControl.xaml b/ENI2/Controls/MaerskListControl.xaml
index b6ab6887..acb952e8 100644
--- a/ENI2/Controls/MaerskListControl.xaml
+++ b/ENI2/Controls/MaerskListControl.xaml
@@ -26,18 +26,24 @@
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/ENI2/Controls/MaerskListControl.xaml.cs b/ENI2/Controls/MaerskListControl.xaml.cs
index 647297c7..648cf13e 100644
--- a/ENI2/Controls/MaerskListControl.xaml.cs
+++ b/ENI2/Controls/MaerskListControl.xaml.cs
@@ -14,6 +14,7 @@ using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
using bsmd.database;
+using ExcelDataReader;
namespace ENI2.Controls
{
@@ -36,6 +37,8 @@ namespace ENI2.Controls
{
InitializeComponent();
Loaded += POList_Loaded;
+ this.dateTimePickerFrom.Value = DateTime.Today.AddDays(-14);
+ this.dateTimePickerTo.Value = DateTime.Today.AddDays(14);
}
#endregion
@@ -111,68 +114,31 @@ namespace ENI2.Controls
private void PerformSearch()
{
this.dataGridPOCores.ItemsSource = null;
- this.filteredResult.Clear();
+ this.filteredResult.Clear();
- Dictionary filterDict = new Dictionary();
+ Dictionary filterDict = new Dictionary();
- DateTime start = DateTime.Now; // bsmd.database.Util.FirstDateOfWeekISO8601(DateTime.Now.Year, (int)this.doubleUpDownCalendarWeek.Value);
- DateTime end = start.Add(new TimeSpan(6, 23, 59, 59));
-
- // Die Suche findet in einem erweiterten Intervall statt, da später wenn möglich nach ATA gefiltert wird
- uint from = start.Subtract(new TimeSpan(10, 0, 0, 0)).ToUniversalTime().ToUnixTimeStamp();
- uint to = end.Add(new TimeSpan(5, 0, 0, 0)).ToUniversalTime().ToUnixTimeStamp();
- filterDict.Add(MessageCore.SearchFilterType.FILTER_ETA, string.Format("{0}:{1}", from.ToString() ?? "", to.ToString() ?? ""));
+ // Die Suche findet in dem eingestellten Intervall statt
+ uint from = this.dateTimePickerFrom.Value.Value.ToUniversalTime().ToUnixTimeStamp();
+ uint to = this.dateTimePickerTo.Value.Value.ToUniversalTime().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");
// suche auslösen
this.searchResult = DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).GetMessageCoresWithFilters(filterDict);
+
// alle anderen Häfen weg
this.searchResult.RemoveAll(item => (item.PoC == null) || (!item.PoC.Equals("DEBRV") && !item.PoC.Equals("DEWHV") && !item.PoC.Equals("DEWVN")));
- // rückwärts iterieren um nach ETA und ATA zu filtern
- if (this.searchResult.Count > 0)
- {
- for (int i = this.searchResult.Count - 1; i >= 0; i--)
- {
- MessageCore messageCore = this.searchResult[i];
- if (messageCore.ATA.HasValue)
- {
- if ((messageCore.ATA.Value < start) || (messageCore.ATA.Value > end))
- {
- this.searchResult.RemoveAt(i);
- }
- else
- {
- if(!messageCore.POATA.HasValue)
- {
- messageCore.POATA = messageCore.ATA;
- messageCore.IsDirty = true;
- // this.buttonSaveChanges.IsEnabled = true;
- }
- }
- }
- else
- {
- if ((messageCore.ETA.Value < start) || (messageCore.ETA.Value > end)) this.searchResult.RemoveAt(i);
- }
- }
- }
+ // sortieren nach ETA (kombiniert)
+ searchResult.Sort((x, y) => DateTime.Compare(x.ETADisplay ?? DateTime.MaxValue, y.ETADisplay ?? DateTime.MaxValue));
- searchResult.Sort((x, y) => DateTime.Compare(x.ATA ?? DateTime.MaxValue, y.ATA ?? DateTime.MaxValue));
-
this.dataGridPOCores.SelectedItem = null;
this.filteredResult.AddRange(searchResult);
this.dataGridPOCores.ItemsSource = this.filteredResult;
}
- private List GetNextNDayCoresFromList(List cores, int numDays = 3)
- {
- List result = new List();
-
- result.AddRange(cores.FindAll(x => (x.ETADisplay.Value - DateTime.Now).TotalHours < (numDays * 24)));
-
- return result;
- }
-
#endregion
#region button event handler
@@ -185,7 +151,75 @@ namespace ENI2.Controls
private void buttonImport_Click(object sender, RoutedEventArgs e)
{
+ OpenFileDialog ofd = new OpenFileDialog
+ {
+ Filter = "Excel Files|*.xls;*.xlsx"
+ };
+ if (ofd.ShowDialog() ?? false)
+ {
+ FileStream stream;
+ try
+ {
+ stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read);
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
+ return;
+ }
+ using (IExcelDataReader reader = ExcelReaderFactory.CreateReader(stream))
+ {
+ List importCores = new List();
+
+ try
+ {
+ do
+ {
+ while (reader.Read())
+ {
+ if (reader.FieldCount < 13)
+ {
+ throw new InvalidDataException("Sheet must have 13 columns of data");
+ }
+ MessageCore core = new MessageCore();
+ if (reader.IsDBNull(0) && reader.IsDBNull(1)) continue;
+ /*
+ if (!reader.IsDBNull(0)) crew.CrewMemberLastName = reader.GetString(0).Clean();
+
+ if (crew.CrewMemberLastName.Equals("Family Name") || (crew.CrewMemberLastName.Trim().Length == 0)) continue;
+ if (!reader.IsDBNull(1)) crew.CrewMemberFirstName = reader.GetString(1).Clean();
+ if (!reader.IsDBNull(2)) crew.CrewMemberGender = GlobalStructures.ParseGender(reader.GetString(2));
+ if (!reader.IsDBNull(3)) crew.CrewMemberDuty = reader.GetString(3).Clean();
+ if (!reader.IsDBNull(4)) crew.CrewMemberNationality = reader.GetString(4).Substring(0, 2).ToUpper();
+ if (!reader.IsDBNull(5)) crew.CrewMemberPlaceOfBirth = reader.GetString(5).Clean();
+ if (!reader.IsDBNull(6)) crew.CrewMemberCountryOfBirth = reader.GetString(6).Substring(0, 2).ToUpper();
+ if (!reader.IsDBNull(7)) crew.CrewMemberDateOfBirth = reader.GetDateTime(7);
+ if (!reader.IsDBNull(8)) crew.CrewMemberIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(reader.GetString(8));
+ if (!reader.IsDBNull(9)) crew.CrewMemberIdentityDocumentId = this.getValueAsString(reader, 9).Clean();
+ if (!reader.IsDBNull(10)) crew.CrewMemberIdentityDocumentIssuingState = reader.GetString(10).Substring(0, 2).ToUpper();
+ if (!reader.IsDBNull(11)) crew.CrewMemberIdentityDocumentExpiryDate = reader.GetDateTime(11);
+ if (!reader.IsDBNull(12)) crew.CrewMemberVisaNumber = this.getValueAsString(reader, 12).Clean();
+ */
+ importCores.Add(core);
+ }
+ } while (reader.NextResult());
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
+ }
+
+ // we only want cores for the next 3 days
+ if (importCores.Count > 0)
+ {
+
+
+ }
+ }
+
+ stream.Close();
+ }
}
private void buttonExport_Click(object sender, RoutedEventArgs e)
diff --git a/ENI2/EditControls/EditLADGDialog.xaml b/ENI2/EditControls/EditLADGDialog.xaml
index 457bc9b0..ba281ebc 100644
--- a/ENI2/EditControls/EditLADGDialog.xaml
+++ b/ENI2/EditControls/EditLADGDialog.xaml
@@ -11,7 +11,7 @@ Copyright (c) 2017 schick Informatik
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
xmlns:p="clr-namespace:ENI2.Properties"
mc:Ignorable="d"
- Title="{x:Static p:Resources.textLadg}" Height="246" Width="900" WindowStyle="SingleBorderWindow" Background="AliceBlue">
+ Title="{x:Static p:Resources.textLadg}" Height="300" Width="900" WindowStyle="SingleBorderWindow" Background="AliceBlue">
diff --git a/ENI2/Excel/ExcelReader.cs b/ENI2/Excel/ExcelReader.cs
index 06103366..ab6f628f 100644
--- a/ENI2/Excel/ExcelReader.cs
+++ b/ENI2/Excel/ExcelReader.cs
@@ -289,6 +289,15 @@ namespace ENI2.Excel
if (val.IndexOf("sbt", StringComparison.OrdinalIgnoreCase) >= 0) result = 1;
if (val.IndexOf("single", StringComparison.OrdinalIgnoreCase) >= 0) result = 0;
if (val.IndexOf("double", StringComparison.OrdinalIgnoreCase) >= 0) result = 2;
+
+ if (!result.HasValue)
+ {
+ if (int.TryParse(val, out int parsed))
+ {
+ if ((parsed < 4) && (parsed > 0))
+ result = (byte)parsed;
+ }
+ }
}
if (!result.HasValue)
@@ -347,6 +356,15 @@ namespace ENI2.Excel
if (val.IndexOf("full", StringComparison.OrdinalIgnoreCase) >= 0) result = 0;
if (val.IndexOf("empty", StringComparison.OrdinalIgnoreCase) >= 0) result = 1;
if (val.IndexOf("inerted", StringComparison.OrdinalIgnoreCase) >= 0) result = 2;
+
+ if (!result.HasValue)
+ {
+ if (int.TryParse(val, out int parsed))
+ {
+ if ((parsed < 4) && (parsed > 0))
+ result = (byte)parsed;
+ }
+ }
}
if (!result.HasValue)
diff --git a/bsmd.database/DBManager.cs b/bsmd.database/DBManager.cs
index 1deaf673..b10acfb1 100644
--- a/bsmd.database/DBManager.cs
+++ b/bsmd.database/DBManager.cs
@@ -34,7 +34,7 @@ namespace bsmd.database
private bool _closeConnectionAfterUse = false;
private readonly List truncatedFieldCollection = new List();
private Dictionary messageHistoryTypeDict;
- private SemaphoreSlim _asyncSemaphore = new SemaphoreSlim(1);
+ private readonly SemaphoreSlim _asyncSemaphore = new SemaphoreSlim(1);
#endregion
diff --git a/bsmd.database/Extensions.cs b/bsmd.database/Extensions.cs
index 87c4cea2..29b03dbb 100644
--- a/bsmd.database/Extensions.cs
+++ b/bsmd.database/Extensions.cs
@@ -84,7 +84,7 @@ namespace bsmd.database
foreach (char c in str)
{
if (!char.IsControl(c) || c == ' ' || c == '\t' || c == '\n')
- sb.Append(c);
+ sb.Append(c);
}
return sb.ToString();
}
diff --git a/bsmd.database/MDH.cs b/bsmd.database/MDH.cs
index 86c9acbd..f8ea80cf 100644
--- a/bsmd.database/MDH.cs
+++ b/bsmd.database/MDH.cs
@@ -606,6 +606,11 @@ namespace bsmd.database
(this.PlaceOfIssue.IsNullOrEmpty() || !this.DateOfIssue.HasValue))
violations.Add(RuleEngine.CreateViolation(ValidationCode.V765, "Cert. Place or Date of issue missing", null, this.Title, null, this.Tablename));
+ if( (!this.ValidSanitaryControlExemptionOrCertificateOnBoard.HasValue || (this.ValidSanitaryControlExemptionOrCertificateOnBoard.Value == false)) &&
+ ((!this.PlaceOfIssue.IsNullOrEmpty()) || this.DateOfIssue.HasValue))
+ violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Check sanitary control exemption or certificate", null, this.Title, null, this.Tablename));
+
+
if ((this.InfectedAreaVisited ?? false) && this.InfectedAreas.IsNullOrEmpty())
violations.Add(RuleEngine.CreateViolation(ValidationCode.V766, "Infected area date or port missing", null, this.Title, null, this.Tablename));
diff --git a/bsmd.database/MessageCore.cs b/bsmd.database/MessageCore.cs
index 758623e3..191ec9d0 100644
--- a/bsmd.database/MessageCore.cs
+++ b/bsmd.database/MessageCore.cs
@@ -85,7 +85,9 @@ namespace bsmd.database
FILTER_ETA,
FILTER_TICKETNO,
FILTER_LATESTIDS,
- FILTER_CREATEDBY
+ FILTER_CREATEDBY,
+ FILTER_FLAG_EQ,
+ FILTER_FLAG_NEQ
}
[Flags]
@@ -692,6 +694,22 @@ namespace bsmd.database
((SqlCommand)cmd).Parameters.AddWithValue("@DRPID", searchDict[key]);
break;
}
+ case SearchFilterType.FILTER_FLAG_EQ:
+ {
+ sb.Append(" MessageCore.Flags = @FLAG ");
+ int flag = 0;
+ int.TryParse(searchDict[key], out flag);
+ ((SqlCommand)cmd).Parameters.AddWithValue("@FLAG", flag);
+ break;
+ }
+ case SearchFilterType.FILTER_FLAG_NEQ:
+ {
+ sb.Append(" MessageCore.Flags <> @FLAG ");
+ int flag = 0;
+ int.TryParse(searchDict[key], out flag);
+ ((SqlCommand)cmd).Parameters.AddWithValue("@FLAG", flag);
+ break;
+ }
}
if (!moreThanOne) moreThanOne = true;
}
diff --git a/misc/db.sqlite b/misc/db.sqlite
index dc07251b..372a0ba0 100644
Binary files a/misc/db.sqlite and b/misc/db.sqlite differ