380 lines
15 KiB
C#
380 lines
15 KiB
C#
// Copyright (c) 2025 - schick Informatik
|
|
// Description: Display control of formsheet Tab 7. Crew data departure
|
|
//
|
|
|
|
using bsmd.database;
|
|
using ENI2.EditControls;
|
|
using ENI2.Util;
|
|
using ExcelDataReader;
|
|
using Microsoft.Win32;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Media.Imaging;
|
|
|
|
namespace ENI2.SheetDisplayControls
|
|
{
|
|
/// <summary>
|
|
/// Interaction logic for CrewDepartureControl.xaml
|
|
/// </summary>
|
|
public partial class CrewDepartureControl : DetailBaseControl
|
|
{
|
|
|
|
#region Fields
|
|
|
|
private Message _crewaMessage;
|
|
private Message _crewdMessage;
|
|
|
|
#endregion
|
|
|
|
#region Construction
|
|
|
|
public CrewDepartureControl()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region public overrides
|
|
|
|
public override void Initialize()
|
|
{
|
|
base.Initialize();
|
|
|
|
foreach (Message aMessage in this.Messages)
|
|
{
|
|
if (aMessage.MessageNotificationClass == Message.NotificationClass.CREWA) { this._crewaMessage = aMessage; this.ControlMessages.Add(aMessage); }
|
|
if (aMessage.MessageNotificationClass == Message.NotificationClass.CREWD) { this._crewdMessage = aMessage; this.ControlMessages.Add(aMessage); }
|
|
}
|
|
|
|
#region init CREWD
|
|
|
|
if (this._crewdMessage == null)
|
|
{
|
|
this._crewdMessage = this.Core.CreateMessage(Message.NotificationClass.CREWD);
|
|
this.Messages.Add(this._crewdMessage);
|
|
}
|
|
|
|
this.dataGridCrewListDeparture.Initialize();
|
|
this.dataGridCrewListDeparture.ItemsSource = this._crewdMessage.Elements;
|
|
this.dataGridCrewListDeparture.AddingNewItem += DataGridCrewListDeparture_AddingNewItem;
|
|
this.dataGridCrewListDeparture.EditRequested += DataGridCrewListDeparture_EditRequested;
|
|
this.dataGridCrewListDeparture.DeleteRequested += DataGridCrewListDeparture_DeleteRequested;
|
|
this.dataGridCrewListDeparture.CreateRequested += DataGridCrewListDeparture_CreateRequested;
|
|
this.dataGridCrewListDeparture.RefreshGrid += DataGridCrewListDeparture_RefreshGrid;
|
|
this.dataGridCrewListDeparture.MultiEditRequested += DataGridCrewListDeparture_MultiEditRequested;
|
|
|
|
if (this._crewdMessage.Elements.Count > 0)
|
|
{
|
|
this.checkBoxCrewNotificationSchengenDeparture.IsChecked = ((CREWD)this._crewdMessage.Elements[0]).NotificationSchengen;
|
|
this.checkBoxCrewNotificationPAXDeparture.IsChecked = ((CREWD)this._crewdMessage.Elements[0]).NotificationPAX;
|
|
}
|
|
|
|
// extra menu copy to CREWA
|
|
{
|
|
this.dataGridCrewListDeparture.ContextMenu.Items.Add(new Separator());
|
|
MenuItem copyCREWDItem = new MenuItem();
|
|
copyCREWDItem.Header = Properties.Resources.textCopyToCREWA;
|
|
copyCREWDItem.Icon = new Image { Source = new BitmapImage(new Uri("pack://application:,,,/Resources/documents.png")) };
|
|
copyCREWDItem.Click += CopyCREWDItem_Click; ;
|
|
this.dataGridCrewListDeparture.ContextMenu.Items.Add(copyCREWDItem);
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
public override void SetEnabled(bool enabled)
|
|
{
|
|
base.SetEnabled(enabled);
|
|
this.crewDepartureGroupBox.IsEnabled = enabled;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region event handler
|
|
|
|
private void checkBoxCrewNotificationSchengenDeparture_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
foreach (CREWD crewd in _crewdMessage.Elements.Cast<CREWD>())
|
|
{
|
|
crewd.NotificationSchengen = checkBoxCrewNotificationSchengenDeparture.IsChecked;
|
|
}
|
|
this.SublistElementChanged(Message.NotificationClass.CREWD);
|
|
}
|
|
|
|
private void checkBoxCrewNotificationPAXDeparture_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
foreach (CREWD crewd in _crewdMessage.Elements.Cast<CREWD>())
|
|
{
|
|
crewd.NotificationSchengen = checkBoxCrewNotificationSchengenDeparture.IsChecked;
|
|
}
|
|
this.SublistElementChanged(Message.NotificationClass.CREWD);
|
|
}
|
|
|
|
private void buttonImportExcelCrewDeparture_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<CREWD> importCrew = new List<CREWD>();
|
|
|
|
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 async void buttonDeleteAllCrewD_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
if (MessageBox.Show(Properties.Resources.textConfimDeleteAllEntries, Properties.Resources.textConfirmation, MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.Yes)
|
|
{
|
|
foreach (CREWD crewd in this._crewdMessage.Elements.Cast<CREWD>())
|
|
{
|
|
await DBManagerAsync.DeleteAsync(crewd);
|
|
}
|
|
this._crewdMessage.Elements.Clear();
|
|
this.dataGridCrewListDeparture.Items.Refresh();
|
|
this.SublistElementChanged(Message.NotificationClass.CREWD);
|
|
}
|
|
}
|
|
|
|
private void CopyCREWDItem_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
if (this.dataGridCrewListDeparture.SelectedItems != null)
|
|
{
|
|
foreach (CREWD crewd in this.dataGridCrewListDeparture.SelectedItems)
|
|
{
|
|
CREW crewa = new CREW();
|
|
crewa.MessageHeader = this._crewaMessage;
|
|
crewa.CopyFromCREW(crewd);
|
|
crewa.IsDeparture = false;
|
|
crewa.Identifier = DatabaseEntity.GetNewIdentifier(this._crewaMessage.Elements);
|
|
this._crewaMessage.Elements.Add(crewa);
|
|
this.SublistElementChanged(Message.NotificationClass.CREWA);
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region crew grid departure
|
|
|
|
private void DataGridCrewListDeparture_CreateRequested()
|
|
{
|
|
EditCREWDialog ecd = new EditCREWDialog
|
|
{
|
|
CREW = new CREWD()
|
|
};
|
|
ecd.CREW.IsDeparture = true;
|
|
ecd.CREW.Identifier = CREWD.GetNewIdentifier(_crewdMessage.Elements);
|
|
ecd.CREW.MessageHeader = this._crewdMessage;
|
|
|
|
ecd.AddClicked += () =>
|
|
{
|
|
ecd.CopyValuesToEntity();
|
|
if (!this._crewdMessage.Elements.Contains(ecd.CREW))
|
|
{
|
|
this._crewdMessage.Elements.Add(ecd.CREW);
|
|
this.CheckCREWD();
|
|
}
|
|
this.dataGridCrewListDeparture.Items.Refresh();
|
|
ecd.CREW = new CREWD
|
|
{
|
|
IsDeparture = true,
|
|
MessageHeader = this._crewdMessage,
|
|
Identifier = CREWD.GetNewIdentifier(_crewdMessage.Elements)
|
|
};
|
|
this.SublistElementChanged(Message.NotificationClass.CREWD);
|
|
};
|
|
|
|
if (ecd.ShowDialog() ?? false)
|
|
{
|
|
if (!this._crewdMessage.Elements.Contains(ecd.CREW))
|
|
{
|
|
_crewdMessage.Elements.Add(ecd.CREW);
|
|
this.CheckCREWD();
|
|
}
|
|
this.dataGridCrewListDeparture.Items.Refresh();
|
|
this.SublistElementChanged(Message.NotificationClass.CREWD);
|
|
}
|
|
}
|
|
|
|
private void DataGridCrewListDeparture_DeleteRequested(DatabaseEntity obj)
|
|
{
|
|
if (obj is CREWD crewd)
|
|
{
|
|
// are you sure dialog is in base class
|
|
_crewdMessage.Elements.Remove(crewd);
|
|
DBManager.Instance.Delete(crewd);
|
|
}
|
|
}
|
|
|
|
private void DataGridCrewListDeparture_RefreshGrid()
|
|
{
|
|
DatabaseEntity.ResetIdentifiers(_crewdMessage.Elements);
|
|
this.SublistElementChanged(Message.NotificationClass.CREWD);
|
|
this.dataGridCrewListDeparture.Items.Refresh();
|
|
}
|
|
|
|
private void DataGridCrewListDeparture_EditRequested(DatabaseEntity obj)
|
|
{
|
|
EditCREWDialog ecd = new EditCREWDialog
|
|
{
|
|
CREW = obj as CREWD
|
|
};
|
|
|
|
ecd.AddClicked += () =>
|
|
{
|
|
ecd.CopyValuesToEntity();
|
|
if (!_crewdMessage.Elements.Contains(ecd.CREW))
|
|
{
|
|
_crewdMessage.Elements.Add(ecd.CREW);
|
|
this.CheckCREWD();
|
|
}
|
|
this.dataGridCrewListDeparture.Items.Refresh();
|
|
ecd.CREW = new CREWD
|
|
{
|
|
IsDeparture = true,
|
|
Identifier = CREWD.GetNewIdentifier(_crewdMessage.Elements),
|
|
MessageHeader = _crewdMessage
|
|
};
|
|
this.SublistElementChanged(Message.NotificationClass.CREWD);
|
|
};
|
|
|
|
if (ecd.ShowDialog() ?? false)
|
|
{
|
|
if (!_crewdMessage.Elements.Contains(ecd.CREW))
|
|
{
|
|
_crewdMessage.Elements.Add(ecd.CREW);
|
|
this.CheckCREWD();
|
|
}
|
|
ecd.CREW.IsDirty = true;
|
|
this.dataGridCrewListDeparture.Items.Refresh();
|
|
this.SublistElementChanged(Message.NotificationClass.CREWD);
|
|
}
|
|
}
|
|
|
|
private void DataGridCrewListDeparture_AddingNewItem(object sender, AddingNewItemEventArgs e)
|
|
{
|
|
this.DataGridCrewListDeparture_CreateRequested();
|
|
}
|
|
|
|
private void DataGridCrewListDeparture_MultiEditRequested(List<DatabaseEntity> databaseEntities)
|
|
{
|
|
List<CREW> crewList = new List<CREW>();
|
|
foreach (CREW acrew in databaseEntities.Cast<CREW>())
|
|
crewList.Add(acrew);
|
|
|
|
// write common values of all CREW entities to template entity
|
|
CREW crew = CREW.CreateCommon(crewList);
|
|
|
|
EditCREWDialog dialog = new EditCREWDialog();
|
|
dialog.CREW = crew;
|
|
dialog.AddVisible = false;
|
|
if (dialog.ShowDialog() ?? false)
|
|
{
|
|
// write back changed values from crew to all entities and mark them as changed
|
|
CREW.WriteTemplateToList(crew, crewList);
|
|
|
|
this.SublistElementChanged(Message.NotificationClass.CREWD);
|
|
this.dataGridCrewListDeparture.Items.Refresh();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region private methods
|
|
|
|
private void CheckCREWD()
|
|
{
|
|
if (this._crewdMessage.Elements.Count == 0) return;
|
|
CREWD firstCREW = this._crewdMessage.Elements[0] as CREWD;
|
|
if (this._crewdMessage.Elements.Count == 1)
|
|
{
|
|
firstCREW.NotificationSchengen = true;
|
|
this.checkBoxCrewNotificationSchengenDeparture.IsChecked = true;
|
|
}
|
|
else
|
|
{
|
|
for (int i = 1; i < this._crewdMessage.Elements.Count; i++)
|
|
{
|
|
((CREWD)this._crewdMessage.Elements[i]).NotificationSchengen = firstCREW.NotificationSchengen;
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
}
|
|
}
|