From a09d4ae34d7b864c935b32351432e6f01ac4f52d Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Tue, 4 Jul 2017 18:29:04 +0000 Subject: [PATCH] ENI-2 kleines Update (PSC72, DBManager neue Connection pro Aufruf) --- ENI-2/ENI2/ENI2/App.config | 8 +- ENI-2/ENI2/ENI2/DetailBaseControl.cs | 13 +- ENI-2/ENI2/ENI2/DetailRootControl.xaml.cs | 19 +-- .../ArrivalNotificationDetailControl.xaml.cs | 17 ++ .../OverViewDetailControl.xaml.cs | 4 +- .../PSC72hDetailControl.xaml | 49 +++++- .../PSC72hDetailControl.xaml.cs | 88 +++++++++-- .../PortCallDetailControl.xaml.cs | 2 +- .../PortNotificationDetailControl.xaml.cs | 2 +- ENI-2/ENI2/ENI2/ENI2.csproj | 2 +- .../ENI2/EditControls/EditBKRDialog.xaml.cs | 13 +- ENI-2/ENI2/ENI2/MainWindow.xaml.cs | 2 +- .../ENI2/Properties/Resources.Designer.cs | 146 +++++++++++++++++- ENI-2/ENI2/ENI2/Properties/Resources.resx | 55 ++++++- ENI-2/ENI2/ENI2/SucheControl.xaml.cs | 8 +- .../ENI2/ENI2/Util/DatabaseEntityWatchdog.cs | 19 ++- Stundensheet.xlsx | Bin 31293 -> 31364 bytes nsw/Source/bsmd.database/DBManager.cs | 64 +++++++- nsw/Source/bsmd.hisnord/Request.cs | 6 +- 19 files changed, 443 insertions(+), 74 deletions(-) diff --git a/ENI-2/ENI2/ENI2/App.config b/ENI-2/ENI2/ENI2/App.config index 9ff3f9c0..77790c5b 100644 --- a/ENI-2/ENI2/ENI2/App.config +++ b/ENI-2/ENI2/ENI2/App.config @@ -26,12 +26,12 @@ 1000 - http://192.168.2.4/LockingService/LockingService.svc - + + http://heupferd/bsmd.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=(localdb)\Projects;Initial Catalog=nsw;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False diff --git a/ENI-2/ENI2/ENI2/DetailBaseControl.cs b/ENI-2/ENI2/ENI2/DetailBaseControl.cs index 098f1b1d..8a58f5d7 100644 --- a/ENI-2/ENI2/ENI2/DetailBaseControl.cs +++ b/ENI-2/ENI2/ENI2/DetailBaseControl.cs @@ -20,6 +20,7 @@ namespace ENI2 protected bool _initialized = false; private DependencyPropertyDescriptor _dpTextBox; + private DependencyPropertyDescriptor _dpDateTimePicker; private DependencyPropertyDescriptor _dpDatePicker; private DependencyPropertyDescriptor _dpLocode; private DependencyPropertyDescriptor _dpCheckbox; @@ -93,13 +94,15 @@ namespace ENI2 public virtual void Initialize() { _dpTextBox = DependencyPropertyDescriptor.FromProperty(TextBox.TextProperty, typeof(TextBox)); - _dpDatePicker = DependencyPropertyDescriptor.FromProperty(Xceed.Wpf.Toolkit.DateTimePicker.ValueProperty, typeof(Xceed.Wpf.Toolkit.DateTimePicker)); + _dpDateTimePicker = DependencyPropertyDescriptor.FromProperty(Xceed.Wpf.Toolkit.DateTimePicker.ValueProperty, typeof(Xceed.Wpf.Toolkit.DateTimePicker)); + _dpDatePicker = DependencyPropertyDescriptor.FromProperty(DatePicker.SelectedDateProperty, typeof(DatePicker)); _dpLocode = DependencyPropertyDescriptor.FromProperty(Controls.LocodeControl.LocodeValueProperty, typeof(Controls.LocodeControl)); _dpCheckbox = DependencyPropertyDescriptor.FromProperty(CheckBox.IsCheckedProperty, typeof(CheckBox)); _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) { @@ -132,10 +135,16 @@ namespace ENI2 protected void RegisterDateTimePickerChange(Xceed.Wpf.Toolkit.DateTimePicker dateTimePicker, Message.NotificationClass notificationClass) { - this._dpDatePicker.AddValueChanged(dateTimePicker, this.controlContentChanged); + this._dpDateTimePicker.AddValueChanged(dateTimePicker, this.controlContentChanged); this._controlClassDict[dateTimePicker] = notificationClass; } + protected void RegisterDatePickerChange(DatePicker datePicker, Message.NotificationClass notificationClass) + { + this._dpDatePicker.AddValueChanged(datePicker, this.controlContentChanged); + this._controlClassDict[datePicker] = notificationClass; + } + protected void RegisterLocodeChange(Controls.LocodeControl locodeControl, Message.NotificationClass notificationClass) { this._dpLocode.AddValueChanged(locodeControl, this.controlContentChanged); diff --git a/ENI-2/ENI2/ENI2/DetailRootControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailRootControl.xaml.cs index fa03433d..8f4a5c66 100644 --- a/ENI-2/ENI2/ENI2/DetailRootControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/DetailRootControl.xaml.cs @@ -75,10 +75,9 @@ namespace ENI2 // 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); - } + + _messages = DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).GetMessagesForCore(_core, DBManager.MessageLoad.ALL); + BindingOperations.EnableCollectionSynchronization(_messages, this.messageListLock); Dispatcher.BeginInvoke((Action)(() => this.listBoxMessages.SelectedIndex = 0)); } @@ -164,7 +163,7 @@ namespace ENI2 { if (message.IsDirty) { - DBManager.Instance.Save(message); + DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Save(message); message.SaveElements(); message.IsDirty = false; } @@ -185,7 +184,7 @@ namespace ENI2 { if (message.IsDirty) { - DBManager.Instance.Save(message); + DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Save(message); message.SaveElements(); message.IsDirty = false; this.buttonSaveAll.Visibility = Visibility.Hidden; @@ -242,11 +241,9 @@ namespace ENI2 { /// core und messages neu laden /// - lock (DBManager.Instance) - { - this._core = DBManager.Instance.GetMessageCoreById(this.Core.Id.Value); - this._messages = DBManager.Instance.GetMessagesForCore(this._core, DBManager.MessageLoad.ALL); - } + + this._core = DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).GetMessageCoreById(this.Core.Id.Value); + this._messages = DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).GetMessagesForCore(this._core, DBManager.MessageLoad.ALL); // clear existing controls this.detailView.Children.Clear(); diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/ArrivalNotificationDetailControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailViewControls/ArrivalNotificationDetailControl.xaml.cs index da65fdb2..f1b84bf2 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/ArrivalNotificationDetailControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/DetailViewControls/ArrivalNotificationDetailControl.xaml.cs @@ -146,6 +146,14 @@ namespace ENI2.DetailViewControls ebd.BRKA = brka; ebd.IsDeparture = false; + ebd.AddClicked += () => + { + ebd.CopyValuesToEntity(); + this._bkraMessage.Elements.Add(ebd.BRKA); + this.dataGridBKRA.Items.Refresh(); + ebd.BRKA = new BRKA(); + }; + if (ebd.ShowDialog() ?? false) { brka.MessageHeader = _bkraMessage; @@ -174,6 +182,15 @@ namespace ENI2.DetailViewControls EditBKRDialog eld = new EditBKRDialog(); eld.IsDeparture = false; eld.BRKA = brka; + + eld.AddClicked += () => + { + eld.CopyValuesToEntity(); + _bkraMessage.Elements.Add(eld.BRKA); + this.dataGridBKRA.Items.Refresh(); + eld.BRKA = new BRKA(); + }; + if (eld.ShowDialog() ?? false) this.dataGridBKRA.Items.Refresh(); this.SublistElementChanged(Message.NotificationClass.BKRA); diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/OverViewDetailControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailViewControls/OverViewDetailControl.xaml.cs index ea8d0c34..4f17e77b 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/OverViewDetailControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/DetailViewControls/OverViewDetailControl.xaml.cs @@ -371,7 +371,7 @@ namespace ENI2.DetailViewControls this.Core.QueryNSWStatus = true; this.Core.StatusCheckErrorCode = string.Empty; this.Core.StatusCheckErrorMessage = string.Empty; - DBManager.Instance.Save(this.Core); + DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Save(this.Core); this.busyIndicator.IsBusy = true; @@ -391,7 +391,7 @@ namespace ENI2.DetailViewControls private void _checkStatusTimer_Elapsed(object sender, ElapsedEventArgs e) { - bool? statusFlag = DBManager.Instance.GetMessageCoreQueryStatusFlag(this.Core.Id.Value); + bool? statusFlag = DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).GetMessageCoreQueryStatusFlag(this.Core.Id.Value); if (statusFlag ?? true) { double elapsedSec = (DateTime.Now - _startStatusCheck).TotalSeconds; diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/PSC72hDetailControl.xaml b/ENI-2/ENI2/ENI2/DetailViewControls/PSC72hDetailControl.xaml index 2368ec80..c41a4380 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/PSC72hDetailControl.xaml +++ b/ENI-2/ENI2/ENI2/DetailViewControls/PSC72hDetailControl.xaml @@ -3,11 +3,50 @@ 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/PSC72hDetailControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailViewControls/PSC72hDetailControl.xaml.cs index 4df9bcc0..c02f49e1 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/PSC72hDetailControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/DetailViewControls/PSC72hDetailControl.xaml.cs @@ -1,21 +1,11 @@ // Copyright (c) 2017 schick Informatik -// Description: +// Description: Detailansicht für PRE72H // -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,79 @@ namespace ENI2.DetailViewControls /// public partial class PSC72hDetailControl : DetailBaseControl { + + private Message _pre72hMessage; + + private static string[] hullConfiguration = { + Properties.Resources.textSingleHull, + Properties.Resources.textSingleHullBallast, + Properties.Resources.textDoubleHull + }; + + private static string[] conditionCargoTanks = + { + Properties.Resources.textFull, + Properties.Resources.textEmpty, + Properties.Resources.textInert + }; + public PSC72hDetailControl() { InitializeComponent(); + this.Loaded += PSC72hDetailControl_Loaded; } + + private void PSC72hDetailControl_Loaded(object sender, RoutedEventArgs e) + { + this.RegisterCheckboxChange(this.checkBoxTanker, Message.NotificationClass.PRE72H); + this.RegisterComboboxIndexChange(this.comboBoxTankerHullConfig, Message.NotificationClass.PRE72H); + this.RegisterComboboxIndexChange(this.comboBoxConditionCargoBallastTanks, Message.NotificationClass.PRE72H); + this.RegisterTextboxChange(this.textBoxNatureOfCargo, Message.NotificationClass.PRE72H); + this.RegisterDoubleUpDownChange(this.doubleUpDownVolumeOfCargo, Message.NotificationClass.PRE72H); + this.RegisterTextboxChange(this.textBoxPlannedOperations, Message.NotificationClass.PRE72H); + this.RegisterTextboxChange(this.textBoxPlannedWorks, Message.NotificationClass.PRE72H); + this.RegisterDatePickerChange(this.datePickerLastExpandedInspection, Message.NotificationClass.PRE72H); + this.RegisterIntegerUpDownChange(this.integerUpDownPlannedPeriodOfStay, Message.NotificationClass.PRE72H); + } + + public override void Initialize() + { + base.Initialize(); + + foreach (Message aMessage in this.Messages) + { + if (aMessage.MessageNotificationClass == Message.NotificationClass.PRE72H) { this._pre72hMessage = aMessage; this.ControlMessages.Add(aMessage); } + } + + + #region PRE72H + + if (this._pre72hMessage == null) + { + this._pre72hMessage = this.Core.CreateMessage(Message.NotificationClass.PRE72H); + this.Messages.Add(this._pre72hMessage); + } + + PRE72H pre72h = null; + if (this._pre72hMessage.Elements.Count > 0) + pre72h = this._pre72hMessage.Elements[0] as PRE72H; + if (pre72h == null) + { + pre72h = new PRE72H(); + pre72h.MessageCore = this.Core; + pre72h.MessageHeader = this._pre72hMessage; + _pre72hMessage.Elements.Add(pre72h); + } + + this.comboBoxTankerHullConfig.ItemsSource = hullConfiguration; + this.comboBoxConditionCargoBallastTanks.ItemsSource = conditionCargoTanks; + + this.groupBoxPre72H.DataContext = pre72h; + + #endregion + + } + } + } diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/PortCallDetailControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailViewControls/PortCallDetailControl.xaml.cs index 9795f5e4..77979efe 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/PortCallDetailControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/DetailViewControls/PortCallDetailControl.xaml.cs @@ -109,7 +109,7 @@ namespace ENI2.DetailViewControls { // are you sure dialog is in base class _noa_nod.CallPurposes.Remove(cp); - // DBManager.Instance.Delete(cp); // not yet + // DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Delete(cp); // not yet this.dataGridCallPurposes.Items.Refresh(); } } diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/PortNotificationDetailControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailViewControls/PortNotificationDetailControl.xaml.cs index 02d0ac4e..c13434f2 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/PortNotificationDetailControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/DetailViewControls/PortNotificationDetailControl.xaml.cs @@ -172,7 +172,7 @@ namespace ENI2.DetailViewControls { // are you sure dialog is in base class this._ladgMessage.Elements.Remove(ladg); - // DBManager.Instance.Delete(ladg); // not yet + // DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Delete(ladg); // not yet this.dataGridLADG.Items.Refresh(); } } diff --git a/ENI-2/ENI2/ENI2/ENI2.csproj b/ENI-2/ENI2/ENI2/ENI2.csproj index b3d97217..df1b8b7c 100644 --- a/ENI-2/ENI2/ENI2/ENI2.csproj +++ b/ENI-2/ENI2/ENI2/ENI2.csproj @@ -35,7 +35,7 @@ 3.5.1.0 true publish.html - 1 + 2 3.6.7.%2a false true diff --git a/ENI-2/ENI2/ENI2/EditControls/EditBKRDialog.xaml.cs b/ENI-2/ENI2/ENI2/EditControls/EditBKRDialog.xaml.cs index 3646c8e4..4836fc67 100644 --- a/ENI-2/ENI2/ENI2/EditControls/EditBKRDialog.xaml.cs +++ b/ENI-2/ENI2/ENI2/EditControls/EditBKRDialog.xaml.cs @@ -17,7 +17,8 @@ namespace ENI2.EditControls public EditBKRDialog() { InitializeComponent(); - Loaded += EditBKRDialog_Loaded; ; + Loaded += EditBKRDialog_Loaded; + AddClicked += () => { this.textBoxBunkerType.Focus(); }; } #region Properties @@ -42,9 +43,10 @@ namespace ENI2.EditControls 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; - } + this.AddVisible = true; + } - private void EditBKRDialog_OKClicked() + public void CopyValuesToEntity() { // copy back if (this.IsDeparture) @@ -59,6 +61,11 @@ namespace ENI2.EditControls } } + private void EditBKRDialog_OKClicked() + { + this.CopyValuesToEntity(); + } + #endregion } diff --git a/ENI-2/ENI2/ENI2/MainWindow.xaml.cs b/ENI-2/ENI2/ENI2/MainWindow.xaml.cs index c6a3ecdc..2366c649 100644 --- a/ENI-2/ENI2/ENI2/MainWindow.xaml.cs +++ b/ENI-2/ENI2/ENI2/MainWindow.xaml.cs @@ -250,7 +250,7 @@ namespace ENI2 closedDialog.Core.InitialHIS = Message.NSWProvider.DUDR_TEST; } closedDialog.Core.DefaultReportingPartyId = this.userEntity.Id; - DBManager.Instance.Save(closedDialog.Core); + DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Save(closedDialog.Core); // Meldeklassen für neuen Anlauf erzeugen: bsmd.database.Util.CreateMessagesForCore(closedDialog.Core); diff --git a/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs b/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs index 297ecb58..8f2936fe 100644 --- a/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs +++ b/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs @@ -950,6 +950,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Double hull. + /// + public static string textDoubleHull { + get { + return ResourceManager.GetString("textDoubleHull", resourceCulture); + } + } + /// /// Looks up a localized string similar to Draught in decimetre. /// @@ -995,6 +1004,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Empty. + /// + public static string textEmpty { + get { + return ResourceManager.GetString("textEmpty", resourceCulture); + } + } + /// /// Looks up a localized string similar to ENI number. /// @@ -1103,6 +1121,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Full. + /// + public static string textFull { + get { + return ResourceManager.GetString("textFull", resourceCulture); + } + } + /// /// Looks up a localized string similar to Fumigated bulk cargo. /// @@ -1130,6 +1157,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Inert. + /// + public static string textInert { + get { + return ResourceManager.GetString("textInert", resourceCulture); + } + } + /// /// Looks up a localized string similar to Info. /// @@ -1157,6 +1193,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Date of last expanded inspection. + /// + public static string textLastExpandedInspection { + get { + return ResourceManager.GetString("textLastExpandedInspection", resourceCulture); + } + } + /// /// Looks up a localized string similar to Last name. /// @@ -1364,6 +1409,33 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Planned inspection / works. + /// + public static string textPlannedInspection { + get { + return ResourceManager.GetString("textPlannedInspection", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Planned operations at port of call. + /// + public static string textPlannedOperations { + get { + return ResourceManager.GetString("textPlannedOperations", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Planned period of stay (hours). + /// + public static string textPlannedPeriodOfStay { + get { + return ResourceManager.GetString("textPlannedPeriodOfStay", resourceCulture); + } + } + /// /// Looks up a localized string similar to Port area. /// @@ -1409,6 +1481,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to PRE72H - 72 hour preannouncement. + /// + public static string textPre72hGroupBox { + get { + return ResourceManager.GetString("textPre72hGroupBox", resourceCulture); + } + } + /// /// Looks up a localized string similar to _Print. /// @@ -1527,7 +1608,7 @@ 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.. + /// 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 limit the results.. /// public static string textSearchExceededMessage { get { @@ -1652,6 +1733,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Single hull. + /// + public static string textSingleHull { + get { + return ResourceManager.GetString("textSingleHull", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Single hull with separate ballast tanks. + /// + public static string textSingleHullBallast { + get { + return ResourceManager.GetString("textSingleHullBallast", resourceCulture); + } + } + /// /// Looks up a localized string similar to Special requirements. /// @@ -1706,6 +1805,51 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Tanker. + /// + public static string textTanker { + get { + return ResourceManager.GetString("textTanker", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Condition of cargo and ballast tanks. + /// + public static string textTankerCondition { + get { + return ResourceManager.GetString("textTankerCondition", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Tanker hull configuration. + /// + public static string textTankerHullConfig { + get { + return ResourceManager.GetString("textTankerHullConfig", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Nature of cargo. + /// + public static string textTankerNatureOfCargo { + get { + return ResourceManager.GetString("textTankerNatureOfCargo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Volume of cargo (t). + /// + public static string textTankerVolumeOfCargo { + get { + return ResourceManager.GetString("textTankerVolumeOfCargo", resourceCulture); + } + } + /// /// Looks up a localized string similar to Ticket No. /// diff --git a/ENI-2/ENI2/ENI2/Properties/Resources.resx b/ENI-2/ENI2/ENI2/Properties/Resources.resx index 11b6375f..1f7867c0 100644 --- a/ENI-2/ENI2/ENI2/Properties/Resources.resx +++ b/ENI-2/ENI2/ENI2/Properties/Resources.resx @@ -641,10 +641,7 @@ 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 + More than {0} ({1}) search matches found. The first {0} are shown. Please modify your search criteria to limit the results. Draught on arrival @@ -709,6 +706,52 @@ Company name of the operator - - + + PRE72H - 72 hour preannouncement + + + Tanker + + + Tanker hull configuration + + + Condition of cargo and ballast tanks + + + Nature of cargo + + + Volume of cargo (t) + + + Planned operations at port of call + + + Planned inspection / works + + + Date of last expanded inspection + + + Planned period of stay (hours) + + + Single hull + + + Single hull with separate ballast tanks + + + Double hull + + + Full + + + Empty + + + Inert + \ No newline at end of file diff --git a/ENI-2/ENI2/ENI2/SucheControl.xaml.cs b/ENI-2/ENI2/ENI2/SucheControl.xaml.cs index 2c8002ca..78747a05 100644 --- a/ENI-2/ENI2/ENI2/SucheControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/SucheControl.xaml.cs @@ -82,15 +82,13 @@ namespace ENI2 // menge suchen int? resultLimit = null; - int? expectedResultNum = DBManager.Instance.GetNumCoresWithFilters(filterDict); + int? expectedResultNum = DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).GetNumCoresWithFilters(filterDict); if ((expectedResultNum ?? 0) > 100) resultLimit = 100; // suche auslösen - lock (DBManager.Instance) - { - this.anmeldungen = DBManager.Instance.GetMessageCoresWithFilters(filterDict, resultLimit); - } + + this.anmeldungen = DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).GetMessageCoresWithFilters(filterDict, resultLimit); BindingOperations.EnableCollectionSynchronization(this.anmeldungen, this.searchLock); // prevent sync lock exceptions (trat bei Sandra auf) diff --git a/ENI-2/ENI2/ENI2/Util/DatabaseEntityWatchdog.cs b/ENI-2/ENI2/ENI2/Util/DatabaseEntityWatchdog.cs index bd5b0bdd..00039679 100644 --- a/ENI-2/ENI2/ENI2/Util/DatabaseEntityWatchdog.cs +++ b/ENI-2/ENI2/ENI2/Util/DatabaseEntityWatchdog.cs @@ -34,22 +34,21 @@ namespace ENI2.Util lock (this._entityLock) { List changedCores = new List(); - lock (DBManager.Instance) + + foreach (MessageCore watchedEntity in this._watchedEntities.Keys) { - foreach (MessageCore watchedEntity in this._watchedEntities.Keys) + MessageCore entity = DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).GetMessageCoreById(watchedEntity.Id ?? Guid.Empty); + if (entity != null) { - MessageCore entity = DBManager.Instance.GetMessageCoreById(watchedEntity.Id ?? Guid.Empty); - if (entity != null) + if (entity.Changed.HasValue && (entity.Changed.Value > this._watchedEntities[watchedEntity])) { - if (entity.Changed.HasValue && (entity.Changed.Value > this._watchedEntities[watchedEntity])) - { - OnDatabaseEntityChanged(entity); - changedCores.Add(entity); - } + OnDatabaseEntityChanged(entity); + changedCores.Add(entity); } } } - foreach(MessageCore changedCore in changedCores) + + foreach (MessageCore changedCore in changedCores) this._watchedEntities[changedCore] = DateTime.Now; // nur einmal auslösen } } diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index a4f0052f0a731b20f87a63bcb171fcc07e813c21..b073358e41174bc2ba09eeeae931311e35e9a13e 100644 GIT binary patch delta 20578 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 K2IF=B0002U192n( delta 20507 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 diff --git a/nsw/Source/bsmd.database/DBManager.cs b/nsw/Source/bsmd.database/DBManager.cs index 2dd246c3..210b59d9 100644 --- a/nsw/Source/bsmd.database/DBManager.cs +++ b/nsw/Source/bsmd.database/DBManager.cs @@ -27,6 +27,7 @@ namespace bsmd.database private static Dictionary allReportingParties; private static Dictionary allPortAreas; private object _lock = new object(); + private bool _closeConnectionAfterUse = false; #endregion @@ -54,6 +55,17 @@ namespace bsmd.database } } + public static DBManager GetSingleCon(string dbConnectionString) + { + DBManager aDBManager = new DBManager(); + if (aDBManager.Connect(dbConnectionString)) + { + aDBManager._closeConnectionAfterUse = true; + return aDBManager; + } + return null; + } + public string ConnectionString { get; set; } #endregion @@ -105,6 +117,9 @@ namespace bsmd.database this.LoadCustomer(core); result.Add(core); } + + if (this._closeConnectionAfterUse) this.Disconnect(); + return result; } @@ -122,6 +137,9 @@ namespace bsmd.database this.LoadCustomer(core); result.Add(core); } + + if (this._closeConnectionAfterUse) this.Disconnect(); + return result; } @@ -139,6 +157,9 @@ namespace bsmd.database this.LoadCustomer(core); result.Add(core); } + + if (this._closeConnectionAfterUse) this.Disconnect(); + return result; } @@ -151,6 +172,9 @@ namespace bsmd.database List result = new List(); foreach (ImportHeader existingHeader in ih.LoadList(reader)) result.Add(existingHeader); + + if (this._closeConnectionAfterUse) this.Disconnect(); + return result; } @@ -163,6 +187,9 @@ namespace bsmd.database List result = new List(); foreach (ImportValue existingValue in iv.LoadList(reader)) result.Add(existingValue); + + if (this._closeConnectionAfterUse) this.Disconnect(); + return result; } @@ -180,6 +207,9 @@ namespace bsmd.database this.LoadCustomer(core); result.Add(core); } + + if (this._closeConnectionAfterUse) this.Disconnect(); + return result; } @@ -190,6 +220,9 @@ namespace bsmd.database aMessageCore.PrepareCountCmd(cmd, Message.LoadFilter.SEARCH_CORE_FILTERS, filters); int? result = this.PerformReadIntQuery(cmd); + + if (this._closeConnectionAfterUse) this.Disconnect(); + return result; } @@ -211,6 +244,10 @@ namespace bsmd.database this.LoadSTATShipName(core); result.Add(core); } + + + if (this._closeConnectionAfterUse) this.Disconnect(); + return result; } @@ -235,6 +272,9 @@ namespace bsmd.database result = (MessageCore)cores[0]; this.LoadCustomer(result); } + + if (this._closeConnectionAfterUse) this.Disconnect(); + return result; } @@ -263,6 +303,9 @@ namespace bsmd.database messageList.Add(message); } this.LoadMessageDependencies(messageList); + + if (this._closeConnectionAfterUse) this.Disconnect(); + return messageList; } @@ -366,6 +409,9 @@ namespace bsmd.database result.Customer = customers[0] as Customer; } } + + if (this._closeConnectionAfterUse) this.Disconnect(); + return result; } @@ -479,7 +525,9 @@ namespace bsmd.database SqlCommand cmd = new SqlCommand(); entity.PrepareSave(cmd); int queryResult = this.PerformNonQuery(cmd); - this.LogNonQueryResult(cmd.CommandText, queryResult); + this.LogNonQueryResult(cmd.CommandText, queryResult); + + if (this._closeConnectionAfterUse) this.Disconnect(); } public void Delete(DatabaseEntity entity) @@ -487,7 +535,9 @@ namespace bsmd.database SqlCommand cmd = new SqlCommand(); entity.PrepareDelete(cmd); int queryResult = this.PerformNonQuery(cmd); - this.LogNonQueryResult(cmd.CommandText, queryResult); + this.LogNonQueryResult(cmd.CommandText, queryResult); + + if (this._closeConnectionAfterUse) this.Disconnect(); } public void DeleteMessageErrors(Message message) @@ -519,14 +569,20 @@ namespace bsmd.database SqlCommand cmd = new SqlCommand(); core.PrepareSave(cmd); int queryResult = this.PerformNonQuery(cmd); - this.LogNonQueryResult(cmd.CommandText, queryResult); + this.LogNonQueryResult(cmd.CommandText, queryResult); + + if (this._closeConnectionAfterUse) this.Disconnect(); } public bool? GetMessageCoreQueryStatusFlag(Guid messageCoreId) { SqlCommand cmd = new SqlCommand(); cmd.CommandText = string.Format("SELECT QueryNSWStatus FROM MessageCore WHERE Id = '{0}'", messageCoreId); - return this.PerformReadFlagQuery(cmd); + bool? result = this.PerformReadFlagQuery(cmd); + + if (this._closeConnectionAfterUse) this.Disconnect(); + + return result; } #endregion diff --git a/nsw/Source/bsmd.hisnord/Request.cs b/nsw/Source/bsmd.hisnord/Request.cs index 40db33ff..fe5592d0 100644 --- a/nsw/Source/bsmd.hisnord/Request.cs +++ b/nsw/Source/bsmd.hisnord/Request.cs @@ -61,7 +61,7 @@ namespace bsmd.hisnord } _nsw.conveyance.owner_sender.name_short = @"BSMD"; - _nsw.conveyance.owner_sender.name_long = rp.Name; // messages[0].MessageCore.Customer.Name; + _nsw.conveyance.owner_sender.name_long = @"BSMD";// rp.Name; // messages[0].MessageCore.Customer.Name; _nsw.conveyance.owner_sender.address = new addresstype(); @@ -71,9 +71,9 @@ namespace bsmd.hisnord // das hier ist der e-mail(!) Empfänger für Error/Violation Meldungen _nsw.conveyance.owner_sender.contact = new contacts(); - _nsw.conveyance.owner_sender.contact.name = rp.LastName; + _nsw.conveyance.owner_sender.contact.name = @"BSMD"; // rp.LastName; _nsw.conveyance.owner_sender.contact.email = rp.EMail; - _nsw.conveyance.owner_sender.contact.firstname = rp.FirstName; + _nsw.conveyance.owner_sender.contact.firstname = string.Format("{0} {1}", rp.FirstName, rp.LastName); _nsw.conveyance.owner_sender.contact.phone = rp.Phone; _nsw.conveyance.owner_sender.contact.fax = rp.Fax;