From dbf15539d9fea5b947472628416c4ef98a3d5043 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Sat, 4 Oct 2025 09:18:35 +0200 Subject: [PATCH] Added ref to ClosedXML lib and replaced usage of ExcelDataReader in PAS/CREW manual import --- ENI2/App.config | 4 + .../BorderPoliceDetailControl.xaml.cs | 485 +++++++++--------- ENI2/ENI2.csproj | 24 + ENI2/packages.config | 8 + 4 files changed, 266 insertions(+), 255 deletions(-) diff --git a/ENI2/App.config b/ENI2/App.config index 902864d7..25c82edd 100644 --- a/ENI2/App.config +++ b/ENI2/App.config @@ -123,6 +123,10 @@ + + + + diff --git a/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml.cs b/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml.cs index 7aecb28e..91608b6f 100644 --- a/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml.cs +++ b/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml.cs @@ -11,7 +11,7 @@ using System.Windows.Controls; using ENI2.EditControls; using ENI2.Util; using ENI2.Locode; -using ExcelDataReader; +using ClosedXML.Excel; using bsmd.database; using System.Windows.Media.Imaging; using System.Linq; @@ -1049,72 +1049,67 @@ namespace ENI2.DetailViewControls }; if (ofd.ShowDialog() ?? false) { - FileStream stream; try { - stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read); + using (var workbook = new XLWorkbook(ofd.FileName)) + { + var worksheet = workbook.Worksheet(1); // Get first worksheet + var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present + + List importCrew = new List(); + + foreach (var row in rows) + { + if (row.RowNumber() > worksheet.RangeUsed().RowCount()) break; + + // Check if we have at least 13 columns + if (worksheet.RangeUsed().ColumnCount() < 13) + { + throw new InvalidDataException("Sheet must have 13 columns of data"); + } + + CREW crew = new CREW(); + + // Check if first two cells are empty + if (row.Cell(1).IsEmpty() && row.Cell(2).IsEmpty()) continue; + + if (!row.Cell(1).IsEmpty()) crew.CrewMemberLastName = row.Cell(1).GetString().Clean(); + if (crew.CrewMemberLastName?.Equals("Family Name") == true || string.IsNullOrWhiteSpace(crew.CrewMemberLastName)) continue; + + if (!row.Cell(2).IsEmpty()) crew.CrewMemberFirstName = row.Cell(2).GetString().Clean(); + if (!row.Cell(3).IsEmpty()) crew.CrewMemberGender = GlobalStructures.ParseGender(row.Cell(3).GetString()); + if (!row.Cell(4).IsEmpty()) crew.CrewMemberDuty = row.Cell(4).GetString().Clean(); + if (!row.Cell(5).IsEmpty()) crew.CrewMemberNationality = row.Cell(5).GetString().Substring(0, 2).ToUpper(); + if (!row.Cell(6).IsEmpty()) crew.CrewMemberPlaceOfBirth = row.Cell(6).GetString().Clean(); + if (!row.Cell(7).IsEmpty()) crew.CrewMemberCountryOfBirth = row.Cell(7).GetString().Substring(0, 2).ToUpper(); + if (!row.Cell(8).IsEmpty()) crew.CrewMemberDateOfBirth = row.Cell(8).GetDateTime(); + if (!row.Cell(9).IsEmpty()) crew.CrewMemberIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(row.Cell(9).GetString()); + if (!row.Cell(10).IsEmpty()) crew.CrewMemberIdentityDocumentId = row.Cell(10).GetString().Clean(); + if (!row.Cell(11).IsEmpty()) crew.CrewMemberIdentityDocumentIssuingState = row.Cell(11).GetString().Substring(0, 2).ToUpper(); + if (!row.Cell(12).IsEmpty()) crew.CrewMemberIdentityDocumentExpiryDate = row.Cell(12).GetDateTime(); + if (!row.Cell(13).IsEmpty()) crew.CrewMemberVisaNumber = row.Cell(13).GetString().Clean(); + + crew.MessageHeader = this._crewMessage; + crew.IsDirty = true; + crew.Identifier = CREW.GetNewIdentifier(this._crewMessage.Elements); + this._crewMessage.Elements.Add(crew); + importCrew.Add(crew); + } + + if (importCrew.Count > 0) + { + this.dataGridCrewList.Items.Refresh(); + this.SublistElementChanged(Message.NotificationClass.CREWA); + MessageBox.Show(String.Format(Properties.Resources.textCrewImported, importCrew.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information); + } + } } catch (Exception ex) { - MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); - return; + MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error); } - - using (IExcelDataReader reader = ExcelReaderFactory.CreateReader(stream)) - { - List importCrew = new List(); - - try - { - do - { - while (reader.Read()) - { - if(reader.FieldCount < 13) - { - throw new InvalidDataException("Sheet must have 13 columns of data"); - } - CREW crew = new CREW(); - 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 = reader.ReadAsString(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 = reader.ReadAsString(12).Clean(); - - crew.MessageHeader = this._crewMessage; - crew.IsDirty = true; - crew.Identifier = CREW.GetNewIdentifier(this._crewMessage.Elements); - this._crewMessage.Elements.Add(crew); - importCrew.Add(crew); - } - } while (reader.NextResult()); - } - catch (Exception ex) - { - MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error); - } - - if (importCrew.Count > 0) - { - this.dataGridCrewList.Items.Refresh(); - this.SublistElementChanged(Message.NotificationClass.CREWA); - MessageBox.Show(String.Format(Properties.Resources.textCrewImported, importCrew.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information); - } - } - - stream.Close(); } - } + } private void buttonImportExcelCrewDeparture_Click(object sender, RoutedEventArgs e) { @@ -1124,74 +1119,68 @@ namespace ENI2.DetailViewControls }; if (ofd.ShowDialog() ?? false) { - FileStream stream; try { - stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read); + using (var workbook = new XLWorkbook(ofd.FileName)) + { + var worksheet = workbook.Worksheet(1); // Get first worksheet + var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present + + List importCrew = new List(); + + foreach (var row in rows) + { + if (row.RowNumber() > worksheet.RangeUsed().RowCount()) break; + + // Check if we have at least 13 columns + if (worksheet.RangeUsed().ColumnCount() < 13) + { + throw new InvalidDataException("Sheet must have 13 columns of data"); + } + + CREWD crew = new CREWD(); + crew.IsDeparture = true; + + // Check if first two cells are empty + if (row.Cell(1).IsEmpty() && row.Cell(2).IsEmpty()) continue; + + if (!row.Cell(1).IsEmpty()) crew.CrewMemberLastName = row.Cell(1).GetString().Clean(); + if (crew.CrewMemberLastName?.Equals("Family Name") == true || string.IsNullOrWhiteSpace(crew.CrewMemberLastName)) continue; + + if (!row.Cell(2).IsEmpty()) crew.CrewMemberFirstName = row.Cell(2).GetString().Clean(); + if (!row.Cell(3).IsEmpty()) crew.CrewMemberGender = GlobalStructures.ParseGender(row.Cell(3).GetString()); + if (!row.Cell(4).IsEmpty()) crew.CrewMemberDuty = row.Cell(4).GetString().Clean(); + if (!row.Cell(5).IsEmpty()) crew.CrewMemberNationality = row.Cell(5).GetString().Substring(0, 2).ToUpper(); + if (!row.Cell(6).IsEmpty()) crew.CrewMemberPlaceOfBirth = row.Cell(6).GetString().Clean(); + if (!row.Cell(7).IsEmpty()) crew.CrewMemberCountryOfBirth = row.Cell(7).GetString().Substring(0, 2).ToUpper(); + if (!row.Cell(8).IsEmpty()) crew.CrewMemberDateOfBirth = row.Cell(8).GetDateTime(); + if (!row.Cell(9).IsEmpty()) crew.CrewMemberIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(row.Cell(9).GetString()); + if (!row.Cell(10).IsEmpty()) crew.CrewMemberIdentityDocumentId = row.Cell(10).GetString().Clean(); + if (!row.Cell(11).IsEmpty()) crew.CrewMemberIdentityDocumentIssuingState = row.Cell(11).GetString().Substring(0, 2).ToUpper(); + if (!row.Cell(12).IsEmpty()) crew.CrewMemberIdentityDocumentExpiryDate = row.Cell(12).GetDateTime(); + if (!row.Cell(13).IsEmpty()) crew.CrewMemberVisaNumber = row.Cell(13).GetString().Clean(); + + crew.MessageHeader = this._crewdMessage; + crew.IsDirty = true; + crew.Identifier = CREWD.GetNewIdentifier(this._crewdMessage.Elements); + this._crewdMessage.Elements.Add(crew); + importCrew.Add(crew); + } + + if (importCrew.Count > 0) + { + this.dataGridCrewListDeparture.Items.Refresh(); + this.SublistElementChanged(Message.NotificationClass.CREWD); + MessageBox.Show(String.Format(Properties.Resources.textCrewImported, importCrew.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information); + } + } } catch (Exception ex) { - MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); - return; + MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error); } - - using (IExcelDataReader reader = ExcelReaderFactory.CreateReader(stream)) - { - List importCrew = new List(); - - try - { - do - { - while (reader.Read()) - { - if (reader.FieldCount < 13) - { - throw new InvalidDataException("Sheet must have 13 columns of data"); - } - CREWD crew = new CREWD(); - crew.IsDeparture = true; - - if (reader.IsDBNull(0) && reader.IsDBNull(1)) continue; - if (!reader.IsDBNull(0)) crew.CrewMemberLastName = reader.GetString(0); - if (crew.CrewMemberLastName.Equals("Family Name") || (crew.CrewMemberLastName.Trim().Length == 0)) continue; - if (!reader.IsDBNull(1)) crew.CrewMemberFirstName = reader.GetString(1); - 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); - 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 = reader.ReadAsString(9); - 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 = reader.ReadAsString(12); - - crew.MessageHeader = this._crewdMessage; - crew.IsDirty = true; - crew.Identifier = CREWD.GetNewIdentifier(this._crewdMessage.Elements); - this._crewdMessage.Elements.Add(crew); - importCrew.Add(crew); - } - } while (reader.NextResult()); - } - catch (Exception ex) - { - MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error); - } - - if (importCrew.Count > 0) - { - this.dataGridCrewListDeparture.Items.Refresh(); - this.SublistElementChanged(Message.NotificationClass.CREWD); - MessageBox.Show(String.Format(Properties.Resources.textCrewImported, importCrew.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information); - } - } - - stream.Close(); } - } + } private void buttonImportExcelPassenger_Click(object sender, RoutedEventArgs e) { @@ -1201,80 +1190,73 @@ namespace ENI2.DetailViewControls }; if (ofd.ShowDialog() ?? false) { - FileStream stream; try { - stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read); + using (var workbook = new XLWorkbook(ofd.FileName)) + { + var worksheet = workbook.Worksheet(1); + var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present + + List importPassenger = new List(); + + foreach (var row in rows) + { + if (row.RowNumber() > worksheet.RangeUsed().RowCount()) break; + + if (worksheet.RangeUsed().ColumnCount() < 17) + { + throw new InvalidDataException("Sheet must have 17 columns of data"); + } + + PAS pas = new PAS(); + + if (row.Cell(1).IsEmpty() && row.Cell(2).IsEmpty()) continue; + + if (!row.Cell(1).IsEmpty()) pas.PassengerLastName = row.Cell(1).GetString().Clean(); + if (pas.PassengerLastName?.Equals("Family Name") == true || string.IsNullOrWhiteSpace(pas.PassengerLastName)) continue; + + if (!row.Cell(2).IsEmpty()) pas.PassengerFirstName = row.Cell(2).GetString().Clean(); + if (!row.Cell(3).IsEmpty()) pas.PassengerGender = GlobalStructures.ParseGender(row.Cell(3).GetString()); + if (!row.Cell(4).IsEmpty()) pas.PassengerPortOfEmbarkation = row.Cell(4).GetString().Clean(); + if (LocodeDB.PortNameFromLocode(pas.PassengerPortOfEmbarkation) == null) + pas.PassengerPortOfEmbarkation = null; + if (!row.Cell(5).IsEmpty()) pas.PassengerPortOfDisembarkation = row.Cell(5).GetString().Clean(); + if (LocodeDB.PortNameFromLocode(pas.PassengerPortOfDisembarkation) == null) + pas.PassengerPortOfDisembarkation = null; + if (!row.Cell(6).IsEmpty()) pas.PassengerInTransit = GlobalStructures.ReadBoolean(row.Cell(6).GetString()); + if (!row.Cell(7).IsEmpty()) pas.PassengerNationality = row.Cell(7).GetString().Substring(0, 2).ToUpper(); + if (!row.Cell(8).IsEmpty()) pas.PassengerPlaceOfBirth = row.Cell(8).GetString().Clean(); + if (!row.Cell(9).IsEmpty()) pas.PassengerCountryOfBirth = row.Cell(9).GetString().Substring(0, 2).ToUpper().Clean(); + if (!row.Cell(10).IsEmpty()) pas.PassengerDateOfBirth = row.Cell(10).GetDateTime(); + if (!row.Cell(11).IsEmpty()) pas.PassengerIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(row.Cell(11).GetString()); + if (!row.Cell(12).IsEmpty()) pas.PassengerIdentityDocumentId = row.Cell(12).GetString().Clean(); + if (!row.Cell(13).IsEmpty()) pas.PassengerIdentityDocumentIssuingState = row.Cell(13).GetString().Substring(0, 2).ToUpper(); + if (!row.Cell(14).IsEmpty()) pas.PassengerIdentityDocumentExpiryDate = row.Cell(14).GetDateTime(); + if (!row.Cell(15).IsEmpty()) pas.PassengerVisaNumber = row.Cell(15).GetString().Clean(); + if (!row.Cell(16).IsEmpty()) pas.EmergencyCare = row.Cell(16).GetString().Clean(); + if (!row.Cell(17).IsEmpty()) pas.EmergencyContactNumber = row.Cell(17).GetString().Clean(); + + pas.MessageHeader = this._pasMessage; + pas.IsDirty = true; + pas.Identifier = PAS.GetNewIdentifier(this._pasMessage.Elements); + this._pasMessage.Elements.Add(pas); + importPassenger.Add(pas); + } + + if (importPassenger.Count > 0) + { + this.dataGridPassengerList.Items.Refresh(); + this.SublistElementChanged(Message.NotificationClass.PASA); + MessageBox.Show(String.Format(Properties.Resources.textPassengerImported, importPassenger.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information); + } + } } catch (Exception ex) { - MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); - return; + MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error); } - - using (var reader = ExcelReaderFactory.CreateReader(stream)) - { - List importPassenger = new List(); - - try - { - do - { - while (reader.Read()) - { - if (((IExcelDataReader)reader).FieldCount < 17) - { - throw new InvalidDataException("Sheet must have 17 columns of data"); - } - - PAS pas = new PAS(); - if (reader.IsDBNull(0) && reader.IsDBNull(1)) continue; - if (!reader.IsDBNull(0)) pas.PassengerLastName = reader.GetValue(0).ToString().Clean(); - if (pas.PassengerLastName.Equals("Family Name") || (pas.PassengerLastName.Trim().Length == 0)) continue; - if (!reader.IsDBNull(1)) pas.PassengerFirstName = reader.GetValue(1).ToString().Clean(); - if (!reader.IsDBNull(2)) pas.PassengerGender = GlobalStructures.ParseGender(reader.GetString(2)); - if (!reader.IsDBNull(3)) pas.PassengerPortOfEmbarkation = reader.GetString(3).Clean(); - if (LocodeDB.PortNameFromLocode(pas.PassengerPortOfEmbarkation) == null) - pas.PassengerPortOfEmbarkation = null; - if (!reader.IsDBNull(4)) pas.PassengerPortOfDisembarkation = reader.GetString(4).Clean(); - if (LocodeDB.PortNameFromLocode(pas.PassengerPortOfDisembarkation) == null) - pas.PassengerPortOfDisembarkation = null; - if (!reader.IsDBNull(5)) pas.PassengerInTransit = GlobalStructures.ReadBoolean(reader.GetString(5)); - if (!reader.IsDBNull(6)) pas.PassengerNationality = reader.GetString(6).Substring(0, 2).ToUpper(); - if (!reader.IsDBNull(7)) pas.PassengerPlaceOfBirth = reader.GetString(7).Clean(); - if (!reader.IsDBNull(8)) pas.PassengerCountryOfBirth = reader.GetString(8).Substring(0, 2).ToUpper().Clean(); - if (!reader.IsDBNull(9)) pas.PassengerDateOfBirth = reader.GetDateTime(9); - if (!reader.IsDBNull(10)) pas.PassengerIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(reader.GetString(10)); - if (!reader.IsDBNull(11)) pas.PassengerIdentityDocumentId = reader.ReadAsString(11).Clean(); - if (!reader.IsDBNull(12)) pas.PassengerIdentityDocumentIssuingState = reader.GetString(12).Substring(0, 2).ToUpper(); - if (!reader.IsDBNull(13)) pas.PassengerIdentityDocumentExpiryDate = reader.GetDateTime(13); - if (!reader.IsDBNull(14)) pas.PassengerVisaNumber = reader.ReadAsString(14).Clean(); - if (!reader.IsDBNull(15)) pas.EmergencyCare = reader.GetString(15).Clean(); - if (!reader.IsDBNull(16)) pas.EmergencyContactNumber = reader.ReadAsString(16).Clean(); - - pas.MessageHeader = this._pasMessage; - pas.IsDirty = true; - pas.Identifier = PAS.GetNewIdentifier(this._pasMessage.Elements); - this._pasMessage.Elements.Add(pas); - importPassenger.Add(pas); - } - } while (reader.NextResult()); - } - catch (Exception ex) - { - MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error); - } - - if (importPassenger.Count > 0) - { - this.dataGridPassengerList.Items.Refresh(); - this.SublistElementChanged(Message.NotificationClass.PASA); - MessageBox.Show(String.Format(Properties.Resources.textPassengerImported, importPassenger.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information); - } - } - stream.Close(); } - } + } private void buttonImportExcelPassengerDeparture_Click(object sender, RoutedEventArgs e) { @@ -1284,80 +1266,73 @@ namespace ENI2.DetailViewControls }; if (ofd.ShowDialog() ?? false) { - FileStream stream; try { - stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read); + using (var workbook = new XLWorkbook(ofd.FileName)) + { + var worksheet = workbook.Worksheet(1); + var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present + + List importPassenger = new List(); + + foreach (var row in rows) + { + if (row.RowNumber() > worksheet.RangeUsed().RowCount()) break; + + if (worksheet.RangeUsed().ColumnCount() < 17) + { + throw new InvalidDataException("Sheet must have 17 columns of data"); + } + + PASD pas = new PASD(); + + if (row.Cell(1).IsEmpty() && row.Cell(2).IsEmpty()) continue; + + if (!row.Cell(1).IsEmpty()) pas.PassengerLastName = row.Cell(1).GetString().Clean(); + if (pas.PassengerLastName?.Equals("Family Name") == true || string.IsNullOrWhiteSpace(pas.PassengerLastName)) continue; + + if (!row.Cell(2).IsEmpty()) pas.PassengerFirstName = row.Cell(2).GetString().Clean(); + if (!row.Cell(3).IsEmpty()) pas.PassengerGender = GlobalStructures.ParseGender(row.Cell(3).GetString()); + if (!row.Cell(4).IsEmpty()) pas.PassengerPortOfEmbarkation = row.Cell(4).GetString().Clean(); + if (LocodeDB.PortNameFromLocode(pas.PassengerPortOfEmbarkation) == null) + pas.PassengerPortOfEmbarkation = null; + if (!row.Cell(5).IsEmpty()) pas.PassengerPortOfDisembarkation = row.Cell(5).GetString().Clean(); + if (LocodeDB.PortNameFromLocode(pas.PassengerPortOfDisembarkation) == null) + pas.PassengerPortOfDisembarkation = null; + if (!row.Cell(6).IsEmpty()) pas.PassengerInTransit = GlobalStructures.ReadBoolean(row.Cell(6).GetString()); + if (!row.Cell(7).IsEmpty()) pas.PassengerNationality = row.Cell(7).GetString().Substring(0, 2).ToUpper(); + if (!row.Cell(8).IsEmpty()) pas.PassengerPlaceOfBirth = row.Cell(8).GetString().Clean(); + if (!row.Cell(9).IsEmpty()) pas.PassengerCountryOfBirth = row.Cell(9).GetString().Substring(0, 2).ToUpper(); + if (!row.Cell(10).IsEmpty()) pas.PassengerDateOfBirth = row.Cell(10).GetDateTime(); + if (!row.Cell(11).IsEmpty()) pas.PassengerIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(row.Cell(11).GetString()); + if (!row.Cell(12).IsEmpty()) pas.PassengerIdentityDocumentId = row.Cell(12).GetString().Clean(); + if (!row.Cell(13).IsEmpty()) pas.PassengerIdentityDocumentIssuingState = row.Cell(13).GetString().Substring(0, 2).ToUpper(); + if (!row.Cell(14).IsEmpty()) pas.PassengerIdentityDocumentExpiryDate = row.Cell(14).GetDateTime(); + if (!row.Cell(15).IsEmpty()) pas.PassengerVisaNumber = row.Cell(15).GetString().Clean(); + if (!row.Cell(16).IsEmpty()) pas.EmergencyCare = row.Cell(16).GetString().Clean(); + if (!row.Cell(17).IsEmpty()) pas.EmergencyContactNumber = row.Cell(17).GetString().Clean(); + + pas.MessageHeader = this._pasdMessage; + pas.IsDirty = true; + pas.Identifier = PASD.GetNewIdentifier(this._pasdMessage.Elements); + this._pasdMessage.Elements.Add(pas); + importPassenger.Add(pas); + } + + if (importPassenger.Count > 0) + { + this.dataGridPassengerListDeparture.Items.Refresh(); + this.SublistElementChanged(Message.NotificationClass.PASD); + MessageBox.Show(String.Format(Properties.Resources.textPassengerImported, importPassenger.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information); + } + } } catch (Exception ex) { - MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); - return; + MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error); } - - using (var reader = ExcelReaderFactory.CreateReader(stream)) - { - List importPassenger = new List(); - - try - { - do - { - while (reader.Read()) - { - if (((IExcelDataReader)reader).FieldCount < 17) - { - throw new InvalidDataException("Sheet must have 17 columns of data"); - } - - PASD pas = new PASD(); - if (reader.IsDBNull(0) && reader.IsDBNull(1)) continue; - if (!reader.IsDBNull(0)) pas.PassengerLastName = reader.GetValue(0).ToString(); - if (pas.PassengerLastName.Equals("Family Name") || (pas.PassengerLastName.Trim().Length == 0)) continue; - if (!reader.IsDBNull(1)) pas.PassengerFirstName = reader.GetValue(1).ToString(); - if (!reader.IsDBNull(2)) pas.PassengerGender = GlobalStructures.ParseGender(reader.GetString(2)); - if (!reader.IsDBNull(3)) pas.PassengerPortOfEmbarkation = reader.GetString(3); - if (LocodeDB.PortNameFromLocode(pas.PassengerPortOfEmbarkation) == null) - pas.PassengerPortOfEmbarkation = null; - if (!reader.IsDBNull(4)) pas.PassengerPortOfDisembarkation = reader.GetString(4); - if (LocodeDB.PortNameFromLocode(pas.PassengerPortOfDisembarkation) == null) - pas.PassengerPortOfDisembarkation = null; - if (!reader.IsDBNull(5)) pas.PassengerInTransit = GlobalStructures.ReadBoolean(reader.GetString(5)); - if (!reader.IsDBNull(6)) pas.PassengerNationality = reader.GetString(6).Substring(0, 2).ToUpper(); - if (!reader.IsDBNull(7)) pas.PassengerPlaceOfBirth = reader.GetString(7); - if (!reader.IsDBNull(8)) pas.PassengerCountryOfBirth = reader.GetString(8).Substring(0, 2).ToUpper(); - if (!reader.IsDBNull(9)) pas.PassengerDateOfBirth = reader.GetDateTime(9); - if (!reader.IsDBNull(10)) pas.PassengerIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(reader.GetString(10)); - if (!reader.IsDBNull(11)) pas.PassengerIdentityDocumentId = reader.ReadAsString(11); - if (!reader.IsDBNull(12)) pas.PassengerIdentityDocumentIssuingState = reader.GetString(12).Substring(0, 2).ToUpper(); - if (!reader.IsDBNull(13)) pas.PassengerIdentityDocumentExpiryDate = reader.GetDateTime(13); - if (!reader.IsDBNull(14)) pas.PassengerVisaNumber = reader.ReadAsString(14); - if (!reader.IsDBNull(15)) pas.EmergencyCare = reader.GetString(15); - if (!reader.IsDBNull(16)) pas.EmergencyContactNumber = reader.ReadAsString(16); - - pas.MessageHeader = this._pasMessage; - pas.IsDirty = true; - pas.Identifier = PASD.GetNewIdentifier(this._pasdMessage.Elements); - this._pasdMessage.Elements.Add(pas); - importPassenger.Add(pas); - } - } while (reader.NextResult()); - } - catch (Exception ex) - { - MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error); - } - - if (importPassenger.Count > 0) - { - this.dataGridPassengerListDeparture.Items.Refresh(); - this.SublistElementChanged(Message.NotificationClass.PASD); - MessageBox.Show(String.Format(Properties.Resources.textPassengerImported, importPassenger.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information); - } - } - stream.Close(); } - } + } #endregion diff --git a/ENI2/ENI2.csproj b/ENI2/ENI2.csproj index 0d005756..165b7209 100644 --- a/ENI2/ENI2.csproj +++ b/ENI2/ENI2.csproj @@ -134,9 +134,24 @@ ..\code.ruleset + + packages\ClosedXML.0.105.0\lib\netstandard2.0\ClosedXML.dll + + + packages\ClosedXML.Parser.2.0.0\lib\netstandard2.0\ClosedXML.Parser.dll + + + packages\DocumentFormat.OpenXml.3.1.1\lib\net46\DocumentFormat.OpenXml.dll + + + packages\DocumentFormat.OpenXml.Framework.3.1.1\lib\net46\DocumentFormat.OpenXml.Framework.dll + packages\ExcelDataReader.3.8.0\lib\net462\ExcelDataReader.dll + + packages\ExcelNumberFormat.1.1.0\lib\net20\ExcelNumberFormat.dll + packages\log4net.3.2.0\lib\net462\log4net.dll @@ -146,6 +161,9 @@ packages\Microsoft.Bcl.Cryptography.9.0.9\lib\net462\Microsoft.Bcl.Cryptography.dll + + packages\Microsoft.Bcl.HashCode.1.1.1\lib\net461\Microsoft.Bcl.HashCode.dll + packages\Microsoft.Extensions.DependencyInjection.9.0.9\lib\net462\Microsoft.Extensions.DependencyInjection.dll @@ -204,6 +222,12 @@ packages\PDFsharp.6.2.2\lib\netstandard2.0\PdfSharp.WPFonts.dll + + packages\RBush.Signed.4.0.0\lib\net47\RBush.dll + + + packages\SixLabors.Fonts.1.0.0\lib\netstandard2.0\SixLabors.Fonts.dll + packages\System.Buffers.4.6.1\lib\net462\System.Buffers.dll diff --git a/ENI2/packages.config b/ENI2/packages.config index a5639ee8..a7fde4a9 100644 --- a/ENI2/packages.config +++ b/ENI2/packages.config @@ -1,10 +1,16 @@  + + + + + + @@ -14,6 +20,8 @@ + +