From c3be61d219acdf4991d4314fa87fcd69723d99bc Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Sun, 2 Jul 2017 16:46:01 +0000 Subject: [PATCH] 3.6.7 ENI. Jetzt mit ArrivalNotification und weiteren Fehlerkorrekturen --- ENI-2/ENI2/ENI2/App.config | 6 +- ENI-2/ENI2/ENI2/App.xaml | 18 ++ ENI-2/ENI2/ENI2/Controls/ClosableTabItem.cs | 2 +- ENI-2/ENI2/ENI2/DetailBaseControl.cs | 8 + ENI-2/ENI2/ENI2/DetailRootControl.xaml.cs | 16 +- .../ArrivalNotificationDetailControl.xaml | 75 ++++++- .../ArrivalNotificationDetailControl.xaml.cs | 187 +++++++++++++++-- ENI-2/ENI2/ENI2/ENI2.csproj | 11 +- .../ENI2/ENI2/EditControls/EditBKRDialog.xaml | 26 +++ .../ENI2/EditControls/EditBKRDialog.xaml.cs | 65 ++++++ .../ENI2/EditControls/EditSERVDialog.xaml.cs | 12 -- .../ENI2/Properties/Resources.Designer.cs | 198 ++++++++++++++++++ ENI-2/ENI2/ENI2/Properties/Resources.resx | 71 +++++++ ENI-2/ENI2/ENI2/SucheControl.xaml | 2 +- ENI-2/ENI2/ENI2/SucheControl.xaml.cs | 13 +- .../ENI2/ENI2/Util/DatabaseEntityWatchdog.cs | 16 +- Stundensheet.xlsx | Bin 31096 -> 31293 bytes .../bsmd.ExcelReadService/ExcelReadService.cs | 1 + nsw/Source/bsmd.ExcelReadService/Util.cs | 13 +- nsw/Source/bsmd.database/DatabaseEntity.cs | 8 +- nsw/Source/bsmd.database/Extensions.cs | 13 +- nsw/Source/bsmd.database/Message.cs | 7 + .../Properties/AssemblyProductInfo.cs | 2 +- .../Properties/AssemblyProjectInfo.cs | 2 +- 24 files changed, 718 insertions(+), 54 deletions(-) create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditBKRDialog.xaml create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditBKRDialog.xaml.cs diff --git a/ENI-2/ENI2/ENI2/App.config b/ENI-2/ENI2/ENI2/App.config index 4dbc9f08..9ff3f9c0 100644 --- a/ENI-2/ENI2/ENI2/App.config +++ b/ENI-2/ENI2/ENI2/App.config @@ -26,10 +26,12 @@ 1000 - http://192.168.2.4/LockingService/LockingService.svc + http://192.168.2.4/LockingService/LockingService.svc + - Data Source=192.168.2.12;Initial Catalog=nsw;Uid=dfuser;Pwd=dfpasswd;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False + Data Source=192.168.2.12;Initial Catalog=nsw;Uid=dfuser;Pwd=dfpasswd;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False + diff --git a/ENI-2/ENI2/ENI2/App.xaml b/ENI-2/ENI2/ENI2/App.xaml index f9bc5948..4538fad7 100644 --- a/ENI-2/ENI2/ENI2/App.xaml +++ b/ENI-2/ENI2/ENI2/App.xaml @@ -22,6 +22,24 @@ + + + + diff --git a/ENI-2/ENI2/ENI2/Controls/ClosableTabItem.cs b/ENI-2/ENI2/ENI2/Controls/ClosableTabItem.cs index c773b97a..142fae87 100644 --- a/ENI-2/ENI2/ENI2/Controls/ClosableTabItem.cs +++ b/ENI-2/ENI2/ENI2/Controls/ClosableTabItem.cs @@ -99,7 +99,7 @@ namespace ENI2.Controls this.textBlock = new TextBlock { Text = headerText }; this.textBlock.Foreground = new SolidColorBrush(Colors.Black); - this.textBlock.Background = lockedTab ? Brushes.LightGreen : Brushes.Orange; + // this.textBlock.Background = lockedTab ? Brushes.LightGreen : Brushes.Orange; // sie wollen die bunten Panels doch nicht this.textBlock.Margin = new Thickness(1); this.textBlock.VerticalAlignment = VerticalAlignment.Center; diff --git a/ENI-2/ENI2/ENI2/DetailBaseControl.cs b/ENI-2/ENI2/ENI2/DetailBaseControl.cs index f5ce8e7f..098f1b1d 100644 --- a/ENI-2/ENI2/ENI2/DetailBaseControl.cs +++ b/ENI-2/ENI2/ENI2/DetailBaseControl.cs @@ -26,6 +26,7 @@ namespace ENI2 private DependencyPropertyDescriptor _dpComboboxIndex; private DependencyPropertyDescriptor _dpComboboxValue; private DependencyPropertyDescriptor _dpNumericUpdown; + private DependencyPropertyDescriptor _dpIntUpdown; private Dictionary _controlClassDict = new Dictionary(); private Dictionary _typeMessageDict = new Dictionary(); private List _controlMessages = new List(); @@ -98,6 +99,7 @@ namespace ENI2 _dpComboboxIndex = DependencyPropertyDescriptor.FromProperty(ComboBox.SelectedIndexProperty, typeof(ComboBox)); _dpComboboxValue = DependencyPropertyDescriptor.FromProperty(ComboBox.SelectedValueProperty, typeof(ComboBox)); _dpNumericUpdown = DependencyPropertyDescriptor.FromProperty(Xceed.Wpf.Toolkit.DoubleUpDown.ValueProperty, typeof(Xceed.Wpf.Toolkit.DoubleUpDown)); + _dpIntUpdown = DependencyPropertyDescriptor.FromProperty(Xceed.Wpf.Toolkit.IntegerUpDown.ValueProperty, typeof(Xceed.Wpf.Toolkit.IntegerUpDown)); foreach(Message message in this.Messages) { @@ -164,6 +166,12 @@ namespace ENI2 this._controlClassDict[doubleUpDown] = notificationClass; } + protected void RegisterIntegerUpDownChange(Xceed.Wpf.Toolkit.IntegerUpDown intUpDown, Message.NotificationClass notificationClass) + { + this._dpIntUpdown.AddValueChanged(intUpDown, this.controlContentChanged); + this._controlClassDict[intUpDown] = notificationClass; + } + protected void SublistElementChanged(Message.NotificationClass notificationClass) { if (_typeMessageDict.ContainsKey(notificationClass)) diff --git a/ENI-2/ENI2/ENI2/DetailRootControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailRootControl.xaml.cs index 7c567be5..fa03433d 100644 --- a/ENI-2/ENI2/ENI2/DetailRootControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/DetailRootControl.xaml.cs @@ -73,7 +73,12 @@ namespace ENI2 this.listBoxMessages.ItemsSource = this._listBoxList; - _messages = DBManager.Instance.GetMessagesForCore(_core, DBManager.MessageLoad.ALL); + // Locking ergänzt. Ich habe den Eindruck, dass die DataReader Fehler beim BSMD daran liegen, dass das hier länger dauert als + // man eine neue Anmeldung anklickt -> paralleles Laden -> Autsch + lock (DBManager.Instance) + { + _messages = DBManager.Instance.GetMessagesForCore(_core, DBManager.MessageLoad.ALL); + } BindingOperations.EnableCollectionSynchronization(_messages, this.messageListLock); Dispatcher.BeginInvoke((Action)(() => this.listBoxMessages.SelectedIndex = 0)); } @@ -236,9 +241,12 @@ namespace ENI2 private void DetailControl_RequestReload() { /// core und messages neu laden - /// - this._core = DBManager.Instance.GetMessageCoreById(this.Core.Id.Value); - this._messages = DBManager.Instance.GetMessagesForCore(this._core, DBManager.MessageLoad.ALL); + /// + lock (DBManager.Instance) + { + this._core = DBManager.Instance.GetMessageCoreById(this.Core.Id.Value); + this._messages = DBManager.Instance.GetMessagesForCore(this._core, DBManager.MessageLoad.ALL); + } // clear existing controls this.detailView.Children.Clear(); diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/ArrivalNotificationDetailControl.xaml b/ENI-2/ENI2/ENI2/DetailViewControls/ArrivalNotificationDetailControl.xaml index 43c26a3c..7878b045 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/ArrivalNotificationDetailControl.xaml +++ b/ENI-2/ENI2/ENI2/DetailViewControls/ArrivalNotificationDetailControl.xaml @@ -3,11 +3,76 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:p="clr-namespace:ENI2.Properties" + xmlns:enictrl="clr-namespace:ENI2.Controls" + xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" xmlns:local="clr-namespace:ENI2.DetailViewControls" mc:Ignorable="d" - d:DesignHeight="300" d:DesignWidth="300"> - - - + d:DesignHeight="800" d:DesignWidth="1024"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/ArrivalNotificationDetailControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailViewControls/ArrivalNotificationDetailControl.xaml.cs index 5b306a3d..da65fdb2 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/ArrivalNotificationDetailControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/DetailViewControls/ArrivalNotificationDetailControl.xaml.cs @@ -1,21 +1,11 @@ // Copyright (c) 2017 schick Informatik -// Description: +// Description: Detailansicht für ATA, TIEFA, POBA, BKRA // -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Navigation; -using System.Windows.Shapes; + +using bsmd.database; +using ENI2.EditControls; namespace ENI2.DetailViewControls { @@ -24,9 +14,178 @@ namespace ENI2.DetailViewControls /// public partial class ArrivalNotificationDetailControl : DetailBaseControl { + + private Message _ataMessage; + private Message _tiefaMessage; + private Message _pobaMessage; + private Message _bkraMessage; + + public ArrivalNotificationDetailControl() { InitializeComponent(); + this.Loaded += ArrivalNotificationDetailControl_Loaded; } + + private void ArrivalNotificationDetailControl_Loaded(object sender, RoutedEventArgs e) + { + this.RegisterDateTimePickerChange(this.dateTimePickerATA, Message.NotificationClass.ATA); + this.RegisterDoubleUpDownChange(this.doubleUpDownDraught, Message.NotificationClass.TIEFA); + this.RegisterIntegerUpDownChange(this.integerUpDownCrewMemberOnBoard, Message.NotificationClass.POBA); + this.RegisterIntegerUpDownChange(this.integerUpDownPassengersOnBoard, Message.NotificationClass.POBA); + this.RegisterIntegerUpDownChange(this.integerUpDownPersonsOnBoard, Message.NotificationClass.POBA); + this.RegisterIntegerUpDownChange(this.integerUpDownStowawaysOnBoard, Message.NotificationClass.POBA); + } + + public override void Initialize() + { + base.Initialize(); + + foreach (Message aMessage in this.Messages) + { + if (aMessage.MessageNotificationClass == Message.NotificationClass.ATA) { this._ataMessage = aMessage; this.ControlMessages.Add(aMessage); } + if (aMessage.MessageNotificationClass == Message.NotificationClass.TIEFA) { this._tiefaMessage = aMessage; this.ControlMessages.Add(aMessage); } + if (aMessage.MessageNotificationClass == Message.NotificationClass.POBA) { this._pobaMessage = aMessage; this.ControlMessages.Add(aMessage); } + if (aMessage.MessageNotificationClass == Message.NotificationClass.BKRA) { this._bkraMessage = aMessage; this.ControlMessages.Add(aMessage); } + } + + #region ATA + + if (this._ataMessage == null) + { + this._ataMessage = this.Core.CreateMessage(Message.NotificationClass.ATA); + this.Messages.Add(this._ataMessage); + } + + ATA ata = null; + if (this._ataMessage.Elements.Count > 0) + ata = this._ataMessage.Elements[0] as ATA; + if (ata == null) + { + ata = new ATA(); + ata.MessageCore = this.Core; + ata.MessageHeader = this._ataMessage; + _ataMessage.Elements.Add(ata); + } + + this.ataGroupBox.DataContext = ata; + + #endregion + + #region TIEFA + + if (this._tiefaMessage == null) + { + this._tiefaMessage = this.Core.CreateMessage(Message.NotificationClass.TIEFA); + this.Messages.Add(this._tiefaMessage); + } + + TIEFA tiefa = null; + if (this._tiefaMessage.Elements.Count > 0) + tiefa = this._tiefaMessage.Elements[0] as TIEFA; + if (tiefa == null) + { + tiefa = new TIEFA(); + tiefa.MessageCore = this.Core; + tiefa.MessageHeader = this._tiefaMessage; + _tiefaMessage.Elements.Add(tiefa); + } + + this.tiefaGroupBox.DataContext = tiefa; + + #endregion + + #region POBA + + if (this._pobaMessage == null) + { + this._pobaMessage = this.Core.CreateMessage(Message.NotificationClass.POBA); + this.Messages.Add(this._pobaMessage); + } + + POBA poba = null; + if (this._pobaMessage.Elements.Count > 0) + poba = this._pobaMessage.Elements[0] as POBA; + if (poba == null) + { + poba = new POBA(); + poba.MessageCore = this.Core; + poba.MessageHeader = this._pobaMessage; + _pobaMessage.Elements.Add(poba); + } + + this.pobaGroupBox.DataContext = poba; + + #endregion + + #region BKRA + + if (this._bkraMessage == null) + { + this._bkraMessage = this.Core.CreateMessage(Message.NotificationClass.BKRA); + this.Messages.Add(this._bkraMessage); + } + + this.dataGridBKRA.Initialize(); + this.dataGridBKRA.ItemsSource = this._bkraMessage.Elements; + this.dataGridBKRA.AddingNewItem += DataGridBKRA_AddingNewItem; + this.dataGridBKRA.EditRequested += DataGridBKRA_EditRequested; + this.dataGridBKRA.DeleteRequested += DataGridBKRA_DeleteRequested; + this.dataGridBKRA.CreateRequested += DataGridBKRA_CreateRequested; + + #endregion + + } + + #region BKRA grid events + + private void DataGridBKRA_CreateRequested() + { + BRKA brka = new BRKA(); + EditBKRDialog ebd = new EditBKRDialog(); + ebd.BRKA = brka; + ebd.IsDeparture = false; + + if (ebd.ShowDialog() ?? false) + { + brka.MessageHeader = _bkraMessage; + _bkraMessage.Elements.Add(brka); + this.dataGridBKRA.Items.Refresh(); + this.SublistElementChanged(Message.NotificationClass.BKRA); + } + } + + private void DataGridBKRA_DeleteRequested(DatabaseEntity obj) + { + BRKA brka = obj as BRKA; + if (brka != null) + { + // are you sure dialog is in base class + this._bkraMessage.Elements.Remove(brka); + this.dataGridBKRA.Items.Refresh(); + } + } + + private void DataGridBKRA_EditRequested(DatabaseEntity obj) + { + BRKA brka = obj as BRKA; + if (brka != null) + { + EditBKRDialog eld = new EditBKRDialog(); + eld.IsDeparture = false; + eld.BRKA = brka; + if (eld.ShowDialog() ?? false) + this.dataGridBKRA.Items.Refresh(); + this.SublistElementChanged(Message.NotificationClass.BKRA); + } + } + + private void DataGridBKRA_AddingNewItem(object sender, System.Windows.Controls.AddingNewItemEventArgs e) + { + this.DataGridBKRA_CreateRequested(); + } + + #endregion + } } diff --git a/ENI-2/ENI2/ENI2/ENI2.csproj b/ENI-2/ENI2/ENI2/ENI2.csproj index ca9353ca..b3d97217 100644 --- a/ENI-2/ENI2/ENI2/ENI2.csproj +++ b/ENI-2/ENI2/ENI2/ENI2.csproj @@ -35,8 +35,8 @@ 3.5.1.0 true publish.html - 2 - 3.6.4.%2a + 1 + 3.6.7.%2a false true true @@ -212,6 +212,9 @@ WasteDetailControl.xaml + + EditBKRDialog.xaml + EditCallPurposeDialog.xaml @@ -309,6 +312,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/ENI-2/ENI2/ENI2/EditControls/EditBKRDialog.xaml b/ENI-2/ENI2/ENI2/EditControls/EditBKRDialog.xaml new file mode 100644 index 00000000..d12e1022 --- /dev/null +++ b/ENI-2/ENI2/ENI2/EditControls/EditBKRDialog.xaml @@ -0,0 +1,26 @@ + + + + + + + + + + + + diff --git a/ENI-2/ENI2/ENI2/EditControls/EditBKRDialog.xaml.cs b/ENI-2/ENI2/ENI2/EditControls/EditBKRDialog.xaml.cs new file mode 100644 index 00000000..3646c8e4 --- /dev/null +++ b/ENI-2/ENI2/ENI2/EditControls/EditBKRDialog.xaml.cs @@ -0,0 +1,65 @@ +// Copyright (c) 2017 schick Informatik +// Description: Dialog zum Bearbeiten von Bunker-Informationen +// + +using System.Windows; + +using bsmd.database; +using ENI2.Controls; + +namespace ENI2.EditControls +{ + /// + /// Interaction logic for EditBKRDialog.xaml + /// + public partial class EditBKRDialog : EditWindowBase + { + public EditBKRDialog() + { + InitializeComponent(); + Loaded += EditBKRDialog_Loaded; ; + } + + #region Properties + + public bool IsDeparture { get; set; } + + public BRKA BRKA { get; set; } + + public BRKD BRKD { get; set; } + + #endregion + + #region event handler + + private void EditBKRDialog_Loaded(object sender, RoutedEventArgs e) + { + this.OKClicked += EditBKRDialog_OKClicked; ; + + this.Title = this.IsDeparture ? Properties.Resources.textBunkerOnDeparture : Properties.Resources.textBunkerOnArrival; + + // copy into fields + this.textBoxBunkerType.Text = this.IsDeparture ? this.BRKD.BunkerFuelType : this.BRKA.BunkerFuelType; + this.doubleUpDownBunkerQuantity.Value = this.IsDeparture ? this.BRKD.BunkerFuelQuantity_TNE : this.BRKA.BunkerFuelQuantity_TNE; + this.OKClicked += EditBKRDialog_OKClicked; + } + + private void EditBKRDialog_OKClicked() + { + // copy back + if (this.IsDeparture) + { + this.BRKD.BunkerFuelType = this.textBoxBunkerType.Text.Trim(); + this.BRKD.BunkerFuelQuantity_TNE = this.doubleUpDownBunkerQuantity.Value; + } + else + { + this.BRKA.BunkerFuelType = this.textBoxBunkerType.Text.Trim(); + this.BRKA.BunkerFuelQuantity_TNE = this.doubleUpDownBunkerQuantity.Value; + } + } + + #endregion + + } +} diff --git a/ENI-2/ENI2/ENI2/EditControls/EditSERVDialog.xaml.cs b/ENI-2/ENI2/ENI2/EditControls/EditSERVDialog.xaml.cs index 90c477f5..f91e8b07 100644 --- a/ENI-2/ENI2/ENI2/EditControls/EditSERVDialog.xaml.cs +++ b/ENI-2/ENI2/ENI2/EditControls/EditSERVDialog.xaml.cs @@ -2,19 +2,7 @@ // Description: // -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Shapes; using bsmd.database; using ENI2.Controls; diff --git a/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs b/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs index 2b33b778..297ecb58 100644 --- a/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs +++ b/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs @@ -572,6 +572,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Beam overall in meter. + /// + public static string textBeamOverallInMeter { + get { + return ResourceManager.GetString("textBeamOverallInMeter", resourceCulture); + } + } + /// /// Looks up a localized string similar to Border Police. /// @@ -590,6 +599,42 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Bunker on arrival. + /// + public static string textBunkerOnArrival { + get { + return ResourceManager.GetString("textBunkerOnArrival", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Bunker on departure. + /// + public static string textBunkerOnDeparture { + get { + return ResourceManager.GetString("textBunkerOnDeparture", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Quantity of bunker fuel (t). + /// + public static string textBunkerQuantity { + get { + return ResourceManager.GetString("textBunkerQuantity", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Type of bunker fuel. + /// + public static string textBunkerType { + get { + return ResourceManager.GetString("textBunkerType", resourceCulture); + } + } + /// /// Looks up a localized string similar to Checking declaration status... /// @@ -761,6 +806,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Company name of the operator. + /// + public static string textCompanyNameOperator { + get { + return ResourceManager.GetString("textCompanyNameOperator", resourceCulture); + } + } + /// /// Looks up a localized string similar to Confirmation. /// @@ -806,6 +860,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Number of crew members on board. + /// + public static string textCrewMemberOnBoard { + get { + return ResourceManager.GetString("textCrewMemberOnBoard", resourceCulture); + } + } + /// /// Looks up a localized string similar to Declarations. /// @@ -887,6 +950,33 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Draught in decimetre. + /// + public static string textDraughtInDecimetre { + get { + return ResourceManager.GetString("textDraughtInDecimetre", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Draught on arrival. + /// + public static string textDraughtOnArrival { + get { + return ResourceManager.GetString("textDraughtOnArrival", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Draught on arrival in decimetre. + /// + public static string textDraughtOnArrivalLabel { + get { + return ResourceManager.GetString("textDraughtOnArrivalLabel", resourceCulture); + } + } + /// /// Looks up a localized string similar to _Edit. /// @@ -1004,6 +1094,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Flag. + /// + public static string textFlag { + get { + return ResourceManager.GetString("textFlag", resourceCulture); + } + } + /// /// Looks up a localized string similar to Fumigated bulk cargo. /// @@ -1013,6 +1112,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Gross tonnage. + /// + public static string textGrossTonnage { + get { + return ResourceManager.GetString("textGrossTonnage", resourceCulture); + } + } + /// /// Looks up a localized string similar to IMO number. /// @@ -1067,6 +1175,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Length overall in meter. + /// + public static string textLengthOverallInMeter { + get { + return ResourceManager.GetString("textLengthOverallInMeter", resourceCulture); + } + } + /// /// Looks up a localized string similar to Loading. /// @@ -1130,6 +1247,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Name. + /// + public static string textName { + get { + return ResourceManager.GetString("textName", resourceCulture); + } + } + /// /// Looks up a localized string similar to Name of master. /// @@ -1193,6 +1319,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Number of passengers on board. + /// + public static string textPassengersOnBoard { + get { + return ResourceManager.GetString("textPassengersOnBoard", resourceCulture); + } + } + /// /// Looks up a localized string similar to Password. /// @@ -1202,6 +1337,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Persons on board arrival. + /// + public static string textPersonOnBoardArrival { + get { + return ResourceManager.GetString("textPersonOnBoardArrival", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Number of persons on board. + /// + public static string textPersonsOnBoard { + get { + return ResourceManager.GetString("textPersonsOnBoard", resourceCulture); + } + } + /// /// Looks up a localized string similar to Phone. /// @@ -1274,6 +1427,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Purpose of call. + /// + public static string textPurposeOfCall { + get { + return ResourceManager.GetString("textPurposeOfCall", resourceCulture); + } + } + /// /// Looks up a localized string similar to Check status. /// @@ -1310,6 +1472,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Remarks. + /// + public static string textRemarks { + get { + return ResourceManager.GetString("textRemarks", resourceCulture); + } + } + /// /// Looks up a localized string similar to Requested position in port of call. /// @@ -1355,6 +1526,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to More than {0} ({1}) search matches found. The first {0} are shown. Please modify your search criteria to see more results.. + /// + public static string textSearchExceededMessage { + get { + return ResourceManager.GetString("textSearchExceededMessage", resourceCulture); + } + } + /// /// Looks up a localized string similar to {0} seconds elapsed. /// @@ -1508,6 +1688,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Number of stowaways on board. + /// + public static string textStowawaysOnBoard { + get { + return ResourceManager.GetString("textStowawaysOnBoard", resourceCulture); + } + } + /// /// Looks up a localized string similar to Street / number. /// @@ -1535,6 +1724,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Towage on arrival. + /// + public static string textTowageOnArrival { + get { + return ResourceManager.GetString("textTowageOnArrival", resourceCulture); + } + } + /// /// Looks up a localized string similar to Transit. /// diff --git a/ENI-2/ENI2/ENI2/Properties/Resources.resx b/ENI-2/ENI2/ENI2/Properties/Resources.resx index 62ddcc18..11b6375f 100644 --- a/ENI-2/ENI2/ENI2/Properties/Resources.resx +++ b/ENI-2/ENI2/ENI2/Properties/Resources.resx @@ -640,4 +640,75 @@ Send to NSW + + More than {0} ({1}) search matches found. The first {0} are shown. Please modify your search criteria to see more results. + + + Arrival notification + + + Draught on arrival + + + Draught on arrival in decimetre + + + Persons on board arrival + + + Number of crew members on board + + + Number of passengers on board + + + Number of stowaways on board + + + Number of persons on board + + + Bunker on arrival + + + Bunker on departure + + + Quantity of bunker fuel (t) + + + Type of bunker fuel + + + Towage on arrival + + + Name + + + Purpose of call + + + Flag + + + Draught in decimetre + + + Gross tonnage + + + Length overall in meter + + + Beam overall in meter + + + Remarks + + + Company name of the operator + + + \ No newline at end of file diff --git a/ENI-2/ENI2/ENI2/SucheControl.xaml b/ENI-2/ENI2/ENI2/SucheControl.xaml index 91aab83b..967b924f 100644 --- a/ENI-2/ENI2/ENI2/SucheControl.xaml +++ b/ENI-2/ENI2/ENI2/SucheControl.xaml @@ -70,7 +70,7 @@ - + diff --git a/ENI-2/ENI2/ENI2/SucheControl.xaml.cs b/ENI-2/ENI2/ENI2/SucheControl.xaml.cs index 58b41c9b..2c8002ca 100644 --- a/ENI-2/ENI2/ENI2/SucheControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/SucheControl.xaml.cs @@ -87,7 +87,11 @@ namespace ENI2 resultLimit = 100; // suche auslösen - this.anmeldungen = DBManager.Instance.GetMessageCoresWithFilters(filterDict, resultLimit); + lock (DBManager.Instance) + { + this.anmeldungen = DBManager.Instance.GetMessageCoresWithFilters(filterDict, resultLimit); + } + BindingOperations.EnableCollectionSynchronization(this.anmeldungen, this.searchLock); // prevent sync lock exceptions (trat bei Sandra auf) if (App.UserId.HasValue) @@ -114,6 +118,13 @@ namespace ENI2 this.dataGrid.ItemsSource = this.anmeldungen; this.searchResultLabel.Content = ((expectedResultNum ?? 0) > 0) ? string.Format("{0} results found, {1} displayed.", (expectedResultNum ?? 0), this.anmeldungen.Count) : "no results"; + if((expectedResultNum ?? 0) > 100) + { + // Messagebox damit es wirklich jeder merkt :\ + string searchMessage = string.Format(Properties.Resources.textSearchExceededMessage, 100, expectedResultNum.Value); + MessageBox.Show(searchMessage, Properties.Resources.textInfo, MessageBoxButton.OK, MessageBoxImage.Warning); + } + } private void etaValueChanged(object sender, EventArgs args) diff --git a/ENI-2/ENI2/ENI2/Util/DatabaseEntityWatchdog.cs b/ENI-2/ENI2/ENI2/Util/DatabaseEntityWatchdog.cs index dfceb402..bd5b0bdd 100644 --- a/ENI-2/ENI2/ENI2/Util/DatabaseEntityWatchdog.cs +++ b/ENI-2/ENI2/ENI2/Util/DatabaseEntityWatchdog.cs @@ -34,19 +34,21 @@ namespace ENI2.Util lock (this._entityLock) { List changedCores = new List(); - foreach (MessageCore watchedEntity in this._watchedEntities.Keys) + lock (DBManager.Instance) { - MessageCore entity = DBManager.Instance.GetMessageCoreById(watchedEntity.Id ?? Guid.Empty); - if (entity != null) + foreach (MessageCore watchedEntity in this._watchedEntities.Keys) { - if (entity.Changed.HasValue && (entity.Changed.Value > this._watchedEntities[watchedEntity])) + MessageCore entity = DBManager.Instance.GetMessageCoreById(watchedEntity.Id ?? Guid.Empty); + if (entity != null) { - OnDatabaseEntityChanged(entity); - changedCores.Add(entity); + if (entity.Changed.HasValue && (entity.Changed.Value > this._watchedEntities[watchedEntity])) + { + OnDatabaseEntityChanged(entity); + changedCores.Add(entity); + } } } } - foreach(MessageCore changedCore in changedCores) this._watchedEntities[changedCore] = DateTime.Now; // nur einmal auslösen } diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index ac760d7dc1a541b8f7ce34551f2fdfaf3fe5c87d..a4f0052f0a731b20f87a63bcb171fcc07e813c21 100644 GIT binary patch delta 20652 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 '9') + return false; + } + return true; + } + public static bool IsBoolean(this String str) { if (str == null) return false; @@ -126,6 +137,6 @@ namespace bsmd.database List result = new List(source.Split(splitDelimiter, StringSplitOptions.RemoveEmptyEntries)); return result; } - + } } diff --git a/nsw/Source/bsmd.database/Message.cs b/nsw/Source/bsmd.database/Message.cs index 23336482..24d3be61 100644 --- a/nsw/Source/bsmd.database/Message.cs +++ b/nsw/Source/bsmd.database/Message.cs @@ -684,6 +684,13 @@ namespace bsmd.database return this.MessageNotificationClass.CompareTo(other.MessageNotificationClass); } + /* + public override int GetHashCode() + { + return this.Id.GetHashCode() * 17 + this.messageCoreId.GetHashCode() * 17 + this.MessageNotificationClass.GetHashCode(); + } + */ + #endregion } diff --git a/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs b/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs index 981f9143..ddac88d7 100644 --- a/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs +++ b/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs @@ -2,6 +2,6 @@ [assembly: AssemblyCompany("Informatikbüro Daniel Schick")] [assembly: AssemblyProduct("BSMD NSW interface")] -[assembly: AssemblyInformationalVersion("3.6.5")] +[assembly: AssemblyInformationalVersion("3.6.7")] [assembly: AssemblyCopyright("Copyright © 2014-2017 Informatikbüro Daniel Schick. All rights reserved.")] [assembly: AssemblyTrademark("")] \ No newline at end of file diff --git a/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs b/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs index 336c2b05..66df411b 100644 --- a/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs +++ b/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs @@ -1,4 +1,4 @@ using System.Reflection; -[assembly: AssemblyVersion("3.6.5.*")] +[assembly: AssemblyVersion("3.6.7.*")]