From e33b11569cf5dbdca4eee45ee7e9cf9622071e2d Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Sun, 9 Jul 2017 17:00:01 +0000 Subject: [PATCH] Neuer Stand mit SEC, MDH, Departure usw. ;-) --- ENI-2/ENI2/ENI2/App.config | 4 +- ENI-2/ENI2/ENI2/App.xaml.cs | 4 +- .../ArrivalNotificationDetailControl.xaml | 2 +- .../BorderPoliceDetailControl.xaml.cs | 6 +- .../DepartureNotificationDetailControl.xaml | 73 +- ...DepartureNotificationDetailControl.xaml.cs | 212 +++- ...aritimeHealthDeclarationDetailControl.xaml | 156 ++- ...timeHealthDeclarationDetailControl.xaml.cs | 307 +++++- .../PortCallDetailControl.xaml.cs | 2 +- .../PortNotificationDetailControl.xaml.cs | 4 +- .../SecurityDetailControl.xaml | 137 ++- .../SecurityDetailControl.xaml.cs | 290 +++++- .../ShipDataDetailControl.xaml | 97 +- .../ShipDataDetailControl.xaml.cs | 81 +- .../WasteDetailControl.xaml | 125 ++- .../WasteDetailControl.xaml.cs | 155 ++- ENI-2/ENI2/ENI2/ENI2.csproj | 44 +- .../EditCallPurposeDialog.xaml.cs | 51 +- .../EditControls/EditInfectedAreaDialog.xaml | 25 + .../EditInfectedAreaDialog.xaml.cs | 45 + .../EditLast10PortFacilitiesDialog.xaml | 48 + .../EditLast10PortFacilitiesDialog.xaml.cs | 63 ++ .../EditPortOfCallLast30DaysDialog.xaml | 32 + .../EditPortOfCallLast30DaysDialog.xaml.cs | 53 + .../EditSanitaryMeasureDialog.xaml | 28 + .../EditSanitaryMeasureDialog.xaml.cs | 47 + .../EditShip2ShipActivitiesDialog.xaml | 47 + .../EditShip2ShipActivitiesDialog.xaml.cs | 72 ++ .../ENI2/EditControls/EditWasteDialog.xaml | 56 ++ .../ENI2/EditControls/EditWasteDialog.xaml.cs | 70 ++ ENI-2/ENI2/ENI2/LocalizedLookup.cs | 40 +- .../ENI2/Properties/Resources.Designer.cs | 927 ++++++++++++++++++ ENI-2/ENI2/ENI2/Properties/Resources.resx | 309 ++++++ ENI-2/ENI2/ENI2/Util/GlobalStructures.cs | 47 + Stundensheet.xlsx | Bin 31424 -> 31532 bytes nsw/Source/bsmd.database/DBManager.cs | 12 +- .../bsmd.database/PortOfCallLast30Days.cs | 69 ++ nsw/Source/bsmd.database/STAT.cs | 4 + nsw/Source/bsmd.database/Util.cs | 18 + nsw/Source/bsmd.database/WAS.cs | 71 +- nsw/Source/misc/db.sqlite | Bin 12046336 -> 12062720 bytes 41 files changed, 3681 insertions(+), 152 deletions(-) create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditInfectedAreaDialog.xaml create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditInfectedAreaDialog.xaml.cs create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditLast10PortFacilitiesDialog.xaml create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditLast10PortFacilitiesDialog.xaml.cs create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditPortOfCallLast30DaysDialog.xaml create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditPortOfCallLast30DaysDialog.xaml.cs create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditSanitaryMeasureDialog.xaml create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditSanitaryMeasureDialog.xaml.cs create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditShip2ShipActivitiesDialog.xaml create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditShip2ShipActivitiesDialog.xaml.cs create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditWasteDialog.xaml create mode 100644 ENI-2/ENI2/ENI2/EditControls/EditWasteDialog.xaml.cs diff --git a/ENI-2/ENI2/ENI2/App.config b/ENI-2/ENI2/ENI2/App.config index b657c69b..59067348 100644 --- a/ENI-2/ENI2/ENI2/App.config +++ b/ENI-2/ENI2/ENI2/App.config @@ -27,11 +27,11 @@ 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 - + diff --git a/ENI-2/ENI2/ENI2/App.xaml.cs b/ENI-2/ENI2/ENI2/App.xaml.cs index 8df0fa91..56433f4b 100644 --- a/ENI-2/ENI2/ENI2/App.xaml.cs +++ b/ENI-2/ENI2/ENI2/App.xaml.cs @@ -66,7 +66,9 @@ namespace ENI2 EventManager.RegisterClassHandler(typeof(DatePicker), DatePicker.PreviewKeyDownEvent, new KeyEventHandler(this.DatePicker_PreviewKeyDown)); CREW.NationalityDict = LocalizedLookup.getNationalities(); - + STAT.VesselTypeDict = LocalizedLookup.getVesselTypes(); + STAT.TransportModeDict = LocalizedLookup.getTransportModes(); + // Connect to locking service (if enabled) try diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/ArrivalNotificationDetailControl.xaml b/ENI-2/ENI2/ENI2/DetailViewControls/ArrivalNotificationDetailControl.xaml index 7878b045..44cb9895 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/ArrivalNotificationDetailControl.xaml +++ b/ENI-2/ENI2/ENI2/DetailViewControls/ArrivalNotificationDetailControl.xaml @@ -29,7 +29,7 @@ - + diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml.cs index 9629503c..c5fc14d3 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml.cs @@ -148,7 +148,7 @@ namespace ENI2.DetailViewControls { // are you sure dialog is in base class _bpol.PortOfItineraries.Remove(poi); - // DBManager.Instance.Delete(serv); // not yet + DBManager.Instance.Delete(poi); this.dataGridPortOfItinerary.Items.Refresh(); } } @@ -220,7 +220,7 @@ namespace ENI2.DetailViewControls { // are you sure dialog is in base class _pasMessage.Elements.Remove(pas); - // DBManager.Instance.Delete(serv); // not yet + DBManager.Instance.Delete(pas); this.dataGridPassengerList.Items.Refresh(); } } @@ -292,7 +292,7 @@ namespace ENI2.DetailViewControls { // are you sure dialog is in base class _crewMessage.Elements.Remove(crew); - // DBManager.Instance.Delete(serv); // not yet + DBManager.Instance.Delete(crew); this.dataGridCrewList.Items.Refresh(); } } diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/DepartureNotificationDetailControl.xaml b/ENI-2/ENI2/ENI2/DetailViewControls/DepartureNotificationDetailControl.xaml index d51f0517..24823205 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/DepartureNotificationDetailControl.xaml +++ b/ENI-2/ENI2/ENI2/DetailViewControls/DepartureNotificationDetailControl.xaml @@ -4,10 +4,75 @@ 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: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/DepartureNotificationDetailControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailViewControls/DepartureNotificationDetailControl.xaml.cs index ec2cd917..d6623093 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/DepartureNotificationDetailControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/DetailViewControls/DepartureNotificationDetailControl.xaml.cs @@ -1,32 +1,214 @@ // Copyright (c) 2017 schick Informatik -// Description: +// Description: Detailansicht für ATD, TIEFD, POBD, BKRD // -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 { /// - /// Interaction logic for DepartureNotificationDetailControl.xaml + /// Interaction logic for ArrivalNotificationDetailControl.xaml /// public partial class DepartureNotificationDetailControl : DetailBaseControl { + + private Message _atdMessage; + private Message _tiefdMessage; + private Message _pobdMessage; + private Message _bkrdMessage; + + public DepartureNotificationDetailControl() { InitializeComponent(); + this.Loaded += ArrivalNotificationDetailControl_Loaded; } + + private void ArrivalNotificationDetailControl_Loaded(object sender, RoutedEventArgs e) + { + this.RegisterDateTimePickerChange(this.dateTimePickerATD, Message.NotificationClass.ATD); + this.RegisterDoubleUpDownChange(this.doubleUpDownDraught, Message.NotificationClass.TIEFD); + this.RegisterIntegerUpDownChange(this.integerUpDownCrewMemberOnBoard, Message.NotificationClass.POBD); + this.RegisterIntegerUpDownChange(this.integerUpDownPassengersOnBoard, Message.NotificationClass.POBD); + this.RegisterIntegerUpDownChange(this.integerUpDownPersonsOnBoard, Message.NotificationClass.POBD); + this.RegisterIntegerUpDownChange(this.integerUpDownStowawaysOnBoard, Message.NotificationClass.POBD); + } + + public override void Initialize() + { + base.Initialize(); + + foreach (Message aMessage in this.Messages) + { + if (aMessage.MessageNotificationClass == Message.NotificationClass.ATD) { this._atdMessage = aMessage; this.ControlMessages.Add(aMessage); } + if (aMessage.MessageNotificationClass == Message.NotificationClass.TIEFD) { this._tiefdMessage = aMessage; this.ControlMessages.Add(aMessage); } + if (aMessage.MessageNotificationClass == Message.NotificationClass.POBD) { this._pobdMessage = aMessage; this.ControlMessages.Add(aMessage); } + if (aMessage.MessageNotificationClass == Message.NotificationClass.BKRD) { this._bkrdMessage = aMessage; this.ControlMessages.Add(aMessage); } + } + + #region ATD + + if (this._atdMessage == null) + { + this._atdMessage = this.Core.CreateMessage(Message.NotificationClass.ATD); + this.Messages.Add(this._atdMessage); + } + + ATD atd = null; + if (this._atdMessage.Elements.Count > 0) + atd = this._atdMessage.Elements[0] as ATD; + if (atd == null) + { + atd = new ATD(); + atd.MessageCore = this.Core; + atd.MessageHeader = this._atdMessage; + _atdMessage.Elements.Add(atd); + } + + this.atdGroupBox.DataContext = atd; + + #endregion + + #region TIEFD + + if (this._tiefdMessage == null) + { + this._tiefdMessage = this.Core.CreateMessage(Message.NotificationClass.TIEFD); + this.Messages.Add(this._tiefdMessage); + } + + TIEFD tiefd = null; + if (this._tiefdMessage.Elements.Count > 0) + tiefd = this._tiefdMessage.Elements[0] as TIEFD; + if (tiefd == null) + { + tiefd = new TIEFD(); + tiefd.MessageCore = this.Core; + tiefd.MessageHeader = this._tiefdMessage; + _tiefdMessage.Elements.Add(tiefd); + } + + this.tiefdGroupBox.DataContext = tiefd; + + #endregion + + #region POBD + + if (this._pobdMessage == null) + { + this._pobdMessage = this.Core.CreateMessage(Message.NotificationClass.POBD); + this.Messages.Add(this._pobdMessage); + } + + POBD pobd = null; + if (this._pobdMessage.Elements.Count > 0) + pobd = this._pobdMessage.Elements[0] as POBD; + if (pobd == null) + { + pobd = new POBD(); + pobd.MessageCore = this.Core; + pobd.MessageHeader = this._pobdMessage; + _pobdMessage.Elements.Add(pobd); + } + + this.pobdGroupBox.DataContext = pobd; + + #endregion + + #region BKRD + + if (this._bkrdMessage == null) + { + this._bkrdMessage = this.Core.CreateMessage(Message.NotificationClass.BKRD); + this.Messages.Add(this._bkrdMessage); + } + + this.dataGridBKRD.Initialize(); + this.dataGridBKRD.ItemsSource = this._bkrdMessage.Elements; + this.dataGridBKRD.AddingNewItem += DataGridBKRD_AddingNewItem; + this.dataGridBKRD.EditRequested += DataGridBKRD_EditRequested; + this.dataGridBKRD.DeleteRequested += DataGridBKRD_DeleteRequested; + this.dataGridBKRD.CreateRequested += DataGridBKRD_CreateRequested; + + #endregion + + } + + #region BKRD grid events + + private void DataGridBKRD_CreateRequested() + { + BRKD brkd = new BRKD(); + EditBKRDialog ebd = new EditBKRDialog(); + ebd.BRKD = brkd; + ebd.IsDeparture = true; + + ebd.AddClicked += () => + { + ebd.CopyValuesToEntity(); + this._bkrdMessage.Elements.Add(ebd.BRKD); + ebd.BRKD.MessageHeader = _bkrdMessage; + this.dataGridBKRD.Items.Refresh(); + ebd.BRKD = new BRKD(); + this.SublistElementChanged(Message.NotificationClass.BKRD); + }; + + if (ebd.ShowDialog() ?? false) + { + brkd.MessageHeader = _bkrdMessage; + _bkrdMessage.Elements.Add(brkd); + this.dataGridBKRD.Items.Refresh(); + this.SublistElementChanged(Message.NotificationClass.BKRD); + } + } + + private void DataGridBKRD_DeleteRequested(DatabaseEntity obj) + { + BRKD brkd = obj as BRKD; + if (brkd != null) + { + // are you sure dialog is in base class + this._bkrdMessage.Elements.Remove(brkd); + this.dataGridBKRD.Items.Refresh(); + } + } + + private void DataGridBKRD_EditRequested(DatabaseEntity obj) + { + BRKD brkd = obj as BRKD; + if (brkd != null) + { + EditBKRDialog eld = new EditBKRDialog(); + eld.IsDeparture = true; + eld.BRKD = brkd; + + eld.AddClicked += () => + { + eld.CopyValuesToEntity(); + _bkrdMessage.Elements.Add(eld.BRKD); + this.dataGridBKRD.Items.Refresh(); + eld.BRKD = new BRKD(); + eld.BRKD.MessageHeader = _bkrdMessage; + this.SublistElementChanged(Message.NotificationClass.BKRD); + }; + + if (eld.ShowDialog() ?? false) + { + this.dataGridBKRD.Items.Refresh(); + this.SublistElementChanged(Message.NotificationClass.BKRD); + } + } + } + + private void DataGridBKRD_AddingNewItem(object sender, System.Windows.Controls.AddingNewItemEventArgs e) + { + this.DataGridBKRD_CreateRequested(); + } + + #endregion + } } diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/MaritimeHealthDeclarationDetailControl.xaml b/ENI-2/ENI2/ENI2/DetailViewControls/MaritimeHealthDeclarationDetailControl.xaml index 2073d26a..d5a12a3b 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/MaritimeHealthDeclarationDetailControl.xaml +++ b/ENI-2/ENI2/ENI2/DetailViewControls/MaritimeHealthDeclarationDetailControl.xaml @@ -5,9 +5,157 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:ENI2.DetailViewControls" + xmlns:enictrl="clr-namespace:ENI2.Controls" + xmlns:p="clr-namespace:ENI2.Properties" + xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" mc:Ignorable="d" - d:DesignHeight="300" d:DesignWidth="300"> - - - + d:DesignHeight="600" d:DesignWidth="1024"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/MaritimeHealthDeclarationDetailControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailViewControls/MaritimeHealthDeclarationDetailControl.xaml.cs index d4f02ed1..860a133a 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/MaritimeHealthDeclarationDetailControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/DetailViewControls/MaritimeHealthDeclarationDetailControl.xaml.cs @@ -1,21 +1,13 @@ // Copyright (c) 2017 schick Informatik -// Description: +// Description: MDH Meldung Bearbeitungsseite // -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 ENI2.EditControls; + +using bsmd.database; + namespace ENI2.DetailViewControls { @@ -24,9 +16,298 @@ namespace ENI2.DetailViewControls /// public partial class MaritimeHealthDeclarationDetailControl : DetailBaseControl { + private Message _mdhMessage; + private MDH _mdh; + public MaritimeHealthDeclarationDetailControl() { InitializeComponent(); + Loaded += MaritimeHealthDeclarationDetailControl_Loaded; } + + public override void Initialize() + { + base.Initialize(); + + foreach (Message aMessage in this.Messages) + { + if (aMessage.MessageNotificationClass == Message.NotificationClass.MDH) { this._mdhMessage = aMessage; this.ControlMessages.Add(aMessage); } + } + + #region init MDH + + if (this._mdhMessage == null) + { + this._mdhMessage = this.Core.CreateMessage(Message.NotificationClass.MDH); + this.Messages.Add(this._mdhMessage); + } + + MDH mdh = null; + if (this._mdhMessage.Elements.Count > 0) + mdh = this._mdhMessage.Elements[0] as MDH; + if (mdh == null) + { + mdh = new MDH(); + mdh.MessageCore = this.Core; + mdh.MessageHeader = this._mdhMessage; + _mdhMessage.Elements.Add(mdh); + } + + this.portCallGroupBox.DataContext = mdh; + this._mdh = mdh; + + this.dataGridPortOfCallLast30Days.Initialize(); + this.dataGridPortOfCallLast30Days.ItemsSource = mdh.PortOfCallLast30Days; + this.dataGridPortOfCallLast30Days.AddingNewItem += DataGridPortOfCallLast30Days_AddingNewItem; + this.dataGridPortOfCallLast30Days.EditRequested += DataGridPortOfCallLast30Days_EditRequested; + this.dataGridPortOfCallLast30Days.DeleteRequested += DataGridPortOfCallLast30Days_DeleteRequested; + this.dataGridPortOfCallLast30Days.CreateRequested += DataGridPortOfCallLast30Days_CreateRequested; + + this.dataGridInfectedAreas.Initialize(); + this.dataGridInfectedAreas.ItemsSource = mdh.InfectedAreas; + this.dataGridInfectedAreas.AddingNewItem += DataGridInfectedAreas_AddingNewItem; + this.dataGridInfectedAreas.EditRequested += DataGridInfectedAreas_EditRequested; + this.dataGridInfectedAreas.DeleteRequested += DataGridInfectedAreas_DeleteRequested; + this.dataGridInfectedAreas.CreateRequested += DataGridInfectedAreas_CreateRequested; + + this.dataGridSanitaryMeasures.Initialize(); + this.dataGridSanitaryMeasures.ItemsSource = mdh.SanitaryMeasuresDetails; + this.dataGridSanitaryMeasures.AddingNewItem += DataGridSanitaryMeasures_AddingNewItem; + this.dataGridSanitaryMeasures.EditRequested += DataGridSanitaryMeasures_EditRequested; + this.dataGridSanitaryMeasures.DeleteRequested += DataGridSanitaryMeasures_DeleteRequested; + this.dataGridSanitaryMeasures.CreateRequested += DataGridSanitaryMeasures_CreateRequested; + + #endregion + + } + + private void MaritimeHealthDeclarationDetailControl_Loaded(object sender, RoutedEventArgs e) + { + + this.RegisterCheckboxChange(this.checkBoxAwareOfConditions, Message.NotificationClass.MDH); + this.RegisterCheckboxChange(this.checkBoxHasShipVisited, Message.NotificationClass.MDH); + this.RegisterCheckboxChange(this.checkBoxHavePersonsDied, Message.NotificationClass.MDH); + this.RegisterCheckboxChange(this.checkBoxIsSuspectedInfectious, Message.NotificationClass.MDH); + this.RegisterCheckboxChange(this.checkBoxReinspectionSanitary, Message.NotificationClass.MDH); + this.RegisterCheckboxChange(this.checkBoxSanitaryControlExemption, Message.NotificationClass.MDH); + this.RegisterCheckboxChange(this.checkBoxSanitaryMeasuresApplied, Message.NotificationClass.MDH); + this.RegisterCheckboxChange(this.checkBoxSickAnimalsOrPets, Message.NotificationClass.MDH); + this.RegisterCheckboxChange(this.checkBoxSickPersonsOnBoard, Message.NotificationClass.MDH); + this.RegisterCheckboxChange(this.checkBoxStowawaysOnBoard, Message.NotificationClass.MDH); + this.RegisterCheckboxChange(this.checkBoxTotalNumberSickHigherThan, Message.NotificationClass.MDH); + this.RegisterCheckboxChange(this.checkBoxWasMedicalConsulted, Message.NotificationClass.MDH); + this.RegisterCheckboxChange(this.checkSimplification, Message.NotificationClass.MDH); + this.RegisterLocodeChange(this.locodePortWhereHealthDeclarationWasGiven, Message.NotificationClass.MDH); + this.RegisterIntegerUpDownChange(this.integerUpDownNumberOfDeaths, Message.NotificationClass.MDH); + this.RegisterIntegerUpDownChange(this.integerUpDownNumberOfIllPersons, Message.NotificationClass.MDH); + this.RegisterTextboxChange(this.textBoxPlaceOfIssue, Message.NotificationClass.MDH); + this.RegisterTextboxChange(this.textBoxStowawaysJoiningLocation, Message.NotificationClass.MDH); + + } + + #region SanitaryMeasures Grid + + private void DataGridSanitaryMeasures_CreateRequested() + { + SanitaryMeasuresDetail smDetail = new SanitaryMeasuresDetail(); + EditSanitaryMeasureDialog epd = new EditSanitaryMeasureDialog(); + epd.SanitaryMeasureDetail = smDetail; + + epd.AddClicked += () => + { + epd.CopyValuesToEntity(); + epd.SanitaryMeasureDetail.MDH = this._mdh; + this._mdh.SanitaryMeasuresDetails.Add(epd.SanitaryMeasureDetail); + this.dataGridSanitaryMeasures.Items.Refresh(); + epd.SanitaryMeasureDetail = new SanitaryMeasuresDetail(); + this.SublistElementChanged(Message.NotificationClass.MDH); + }; + + if (epd.ShowDialog() ?? false) + { + _mdh.SanitaryMeasuresDetails.Add(epd.SanitaryMeasureDetail); + epd.SanitaryMeasureDetail.MDH = this._mdh; + this.dataGridSanitaryMeasures.Items.Refresh(); + this.SublistElementChanged(Message.NotificationClass.MDH); + } + } + + private void DataGridSanitaryMeasures_DeleteRequested(DatabaseEntity obj) + { + SanitaryMeasuresDetail smd = obj as SanitaryMeasuresDetail; + if (smd != null) + { + // are you sure dialog is in base class + _mdh.SanitaryMeasuresDetails.Remove(smd); + DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Delete(smd); + this.dataGridSanitaryMeasures.Items.Refresh(); + } + } + + private void DataGridSanitaryMeasures_EditRequested(DatabaseEntity obj) + { + EditSanitaryMeasureDialog ecpd = new EditSanitaryMeasureDialog(); + ecpd.SanitaryMeasureDetail = obj as SanitaryMeasuresDetail; + ecpd.AddClicked += () => + { + ecpd.CopyValuesToEntity(); + if (!_mdh.SanitaryMeasuresDetails.Contains(ecpd.SanitaryMeasureDetail)) + _mdh.SanitaryMeasuresDetails.Add(ecpd.SanitaryMeasureDetail); + this.dataGridSanitaryMeasures.Items.Refresh(); + ecpd.SanitaryMeasureDetail = new SanitaryMeasuresDetail(); + }; + if (ecpd.ShowDialog() ?? false) + { + if (!_mdh.SanitaryMeasuresDetails.Contains(ecpd.SanitaryMeasureDetail)) + _mdh.SanitaryMeasuresDetails.Add(ecpd.SanitaryMeasureDetail); + this.dataGridSanitaryMeasures.Items.Refresh(); + // signal up + this.SublistElementChanged(Message.NotificationClass.MDH); + } + } + + private void DataGridSanitaryMeasures_AddingNewItem(object sender, AddingNewItemEventArgs e) + { + this.DataGridSanitaryMeasures_CreateRequested(); + } + + #endregion + + #region InfectedAreas Grid + + private void DataGridInfectedAreas_CreateRequested() + { + InfectedArea ia = new InfectedArea(); + EditInfectedAreaDialog epd = new EditInfectedAreaDialog(); + epd.InfectedArea = ia; + + epd.AddClicked += () => + { + epd.CopyValuesToEntity(); + epd.InfectedArea.MDH = this._mdh; + this._mdh.InfectedAreas.Add(epd.InfectedArea); + this.dataGridInfectedAreas.Items.Refresh(); + epd.InfectedArea = new InfectedArea(); + this.SublistElementChanged(Message.NotificationClass.MDH); + }; + + if (epd.ShowDialog() ?? false) + { + _mdh.InfectedAreas.Add(epd.InfectedArea); + epd.InfectedArea.MDH = this._mdh; + this.dataGridInfectedAreas.Items.Refresh(); + this.SublistElementChanged(Message.NotificationClass.MDH); + } + } + + private void DataGridInfectedAreas_DeleteRequested(DatabaseEntity obj) + { + InfectedArea ia = obj as InfectedArea; + if (ia != null) + { + // are you sure dialog is in base class + _mdh.InfectedAreas.Remove(ia); + DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Delete(ia); + this.dataGridInfectedAreas.Items.Refresh(); + } + } + + private void DataGridInfectedAreas_EditRequested(DatabaseEntity obj) + { + EditInfectedAreaDialog ecpd = new EditInfectedAreaDialog(); + ecpd.InfectedArea = obj as InfectedArea; + ecpd.AddClicked += () => + { + ecpd.CopyValuesToEntity(); + if (!_mdh.InfectedAreas.Contains(ecpd.InfectedArea)) + _mdh.InfectedAreas.Add(ecpd.InfectedArea); + this.dataGridInfectedAreas.Items.Refresh(); + ecpd.InfectedArea= new InfectedArea(); + }; + if (ecpd.ShowDialog() ?? false) + { + if (!_mdh.InfectedAreas.Contains(ecpd.InfectedArea)) + _mdh.InfectedAreas.Add(ecpd.InfectedArea); + this.dataGridInfectedAreas.Items.Refresh(); + // signal up + this.SublistElementChanged(Message.NotificationClass.MDH); + } + } + + private void DataGridInfectedAreas_AddingNewItem(object sender, AddingNewItemEventArgs e) + { + this.DataGridInfectedAreas_CreateRequested(); + } + + #endregion + + #region PortOfCallLast30Days grid + + private void DataGridPortOfCallLast30Days_CreateRequested() + { + PortOfCallLast30Days poc30 = new PortOfCallLast30Days(); + EditPortOfCallLast30DaysDialog epd = new EditPortOfCallLast30DaysDialog(); + epd.PocLast30Days = poc30; + + epd.AddClicked += () => + { + epd.CopyValuesToEntity(); + epd.PocLast30Days.MDH = this._mdh; + this._mdh.PortOfCallLast30Days.Add(epd.PocLast30Days); + this.dataGridPortOfCallLast30Days.Items.Refresh(); + epd.PocLast30Days = new PortOfCallLast30Days(); + this.SublistElementChanged(Message.NotificationClass.MDH); + }; + + if (epd.ShowDialog() ?? false) + { + _mdh.PortOfCallLast30Days.Add(epd.PocLast30Days); + epd.PocLast30Days.MDH = this._mdh; + this.dataGridPortOfCallLast30Days.Items.Refresh(); + this.SublistElementChanged(Message.NotificationClass.MDH); + } + } + + private void DataGridPortOfCallLast30Days_DeleteRequested(DatabaseEntity obj) + { + PortOfCallLast30Days poc30d = obj as PortOfCallLast30Days; + if (poc30d != null) + { + // are you sure dialog is in base class + _mdh.PortOfCallLast30Days.Remove(poc30d); + DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Delete(poc30d); + this.dataGridPortOfCallLast30Days.Items.Refresh(); + } + } + + private void DataGridPortOfCallLast30Days_EditRequested(DatabaseEntity obj) + { + EditPortOfCallLast30DaysDialog ecpd = new EditPortOfCallLast30DaysDialog(); + ecpd.PocLast30Days = obj as PortOfCallLast30Days; + ecpd.AddClicked += () => + { + ecpd.CopyValuesToEntity(); + if (!_mdh.PortOfCallLast30Days.Contains(ecpd.PocLast30Days)) + _mdh.PortOfCallLast30Days.Add(ecpd.PocLast30Days); + this.dataGridPortOfCallLast30Days.Items.Refresh(); + ecpd.PocLast30Days = new PortOfCallLast30Days(); + }; + if (ecpd.ShowDialog() ?? false) + { + if (!_mdh.PortOfCallLast30Days.Contains(ecpd.PocLast30Days)) + _mdh.PortOfCallLast30Days.Add(ecpd.PocLast30Days); + this.dataGridPortOfCallLast30Days.Items.Refresh(); + // signal up + this.SublistElementChanged(Message.NotificationClass.MDH); + } + } + + private void DataGridPortOfCallLast30Days_AddingNewItem(object sender, AddingNewItemEventArgs e) + { + this.DataGridPortOfCallLast30Days_CreateRequested(); + } + + #endregion + } } diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/PortCallDetailControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailViewControls/PortCallDetailControl.xaml.cs index 77979efe..4f3d7254 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.GetSingleCon(Properties.Settings.Default.ConnectionString).Delete(cp); // not yet + DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Delete(cp); 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 c13434f2..8ecb2fa8 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.GetSingleCon(Properties.Settings.Default.ConnectionString).Delete(ladg); // not yet + DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Delete(ladg); this.dataGridLADG.Items.Refresh(); } } @@ -216,7 +216,7 @@ namespace ENI2.DetailViewControls { // are you sure dialog is in base class _servMessage.Elements.Remove(serv); - // DBManager.Instance.Delete(serv); // not yet + DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Delete(serv); this.dataGridSERV.Items.Refresh(); } } diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/SecurityDetailControl.xaml b/ENI-2/ENI2/ENI2/DetailViewControls/SecurityDetailControl.xaml index 77009c9e..6d88c1e1 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/SecurityDetailControl.xaml +++ b/ENI-2/ENI2/ENI2/DetailViewControls/SecurityDetailControl.xaml @@ -3,11 +3,138 @@ 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:enictrl="clr-namespace:ENI2.Controls" + xmlns:p="clr-namespace:ENI2.Properties" + 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="600" d:DesignWidth="1024"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/SecurityDetailControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailViewControls/SecurityDetailControl.xaml.cs index f9af75f2..e3cf6e01 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/SecurityDetailControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/DetailViewControls/SecurityDetailControl.xaml.cs @@ -1,21 +1,12 @@ // Copyright (c) 2017 schick Informatik -// Description: +// Description: SEC Meldung Bearbeitungsseite // -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 ENI2.EditControls; + +using bsmd.database; namespace ENI2.DetailViewControls { @@ -24,9 +15,282 @@ namespace ENI2.DetailViewControls /// public partial class SecurityDetailControl : DetailBaseControl { + private Message _secMessage; + private SEC _sec; + + private static string[] isscTypes = { "Final", "Preliminary" }; + private static string[] isscIssuerTypes = { "Authority", "RSO (Recognized security org.)" }; + private static string[] cargoDescriptions = { + "Container", + "Vehicles", + "Conventional general cargo", + "Dry bulk cargo", + "Liquid bulk cargo", + "In ballast" + }; + public SecurityDetailControl() { InitializeComponent(); + Loaded += SecurityDetailControl_Loaded; } + + public override void Initialize() + { + base.Initialize(); + + foreach (Message aMessage in this.Messages) + { + if (aMessage.MessageNotificationClass == Message.NotificationClass.SEC) { this._secMessage = aMessage; this.ControlMessages.Add(aMessage); } + } + + #region init SEC + + if (this._secMessage == null) + { + this._secMessage = this.Core.CreateMessage(Message.NotificationClass.SEC); + this.Messages.Add(this._secMessage); + } + + SEC sec = null; + if (this._secMessage.Elements.Count > 0) + sec = this._secMessage.Elements[0] as SEC; + if (sec == null) + { + sec = new SEC(); + sec.MessageCore = this.Core; + sec.MessageHeader = this._secMessage; + _secMessage.Elements.Add(sec); + } + + this.portCallGroupBox.DataContext = sec; + this._sec = sec; + + this.comboBoxCurrentShipSecurityLevel.ItemsSource = Util.GlobalStructures.ShipSecurityLevels; + this.comboBoxISSCType.ItemsSource = isscTypes; + this.comboBoxISSCIssuerType.ItemsSource = isscIssuerTypes; + this.comboBoxGeneralDescriptionOfCargo.ItemsSource = cargoDescriptions; + + this.dataGridLast10PortFacilities.Initialize(); + this.dataGridLast10PortFacilities.ItemsSource = sec.LastTenPortFacilitesCalled; + + this.dataGridLast10PortFacilities.AddingNewItem += DataGridLast10PortFacilities_AddingNewItem; + this.dataGridLast10PortFacilities.EditRequested += DataGridLast10PortFacilities_EditRequested; + this.dataGridLast10PortFacilities.DeleteRequested += DataGridLast10PortFacilities_DeleteRequested; + this.dataGridLast10PortFacilities.CreateRequested += DataGridLast10PortFacilities_CreateRequested; + + this.dataGridShip2ShipActivities.Initialize(); + this.dataGridShip2ShipActivities.ItemsSource = sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled; + this.dataGridShip2ShipActivities.AddingNewItem += DataGridShip2ShipActivities_AddingNewItem; + this.dataGridShip2ShipActivities.EditRequested += DataGridShip2ShipActivities_EditRequested; + this.dataGridShip2ShipActivities.DeleteRequested += DataGridShip2ShipActivities_DeleteRequested; + this.dataGridShip2ShipActivities.CreateRequested += DataGridShip2ShipActivities_CreateRequested; + + #endregion + + } + + #region data grid ship 2 ship activities + + private void DataGridShip2ShipActivities_CreateRequested() + { + ShipToShipActivitiesDuringLastTenPortFacilitiesCalled s2s = new ShipToShipActivitiesDuringLastTenPortFacilitiesCalled(); + EditShip2ShipActivitiesDialog epd = new EditShip2ShipActivitiesDialog(); + epd.ShipToShipActivity = s2s; + + epd.AddClicked += () => + { + epd.CopyValuesToEntity(); + epd.ShipToShipActivity.SEC = this._sec; + this._sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.Add(epd.ShipToShipActivity); + this.dataGridShip2ShipActivities.Items.Refresh(); + epd.ShipToShipActivity = new ShipToShipActivitiesDuringLastTenPortFacilitiesCalled(); + this.SublistElementChanged(Message.NotificationClass.SEC); + }; + + if (epd.ShowDialog() ?? false) + { + _sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.Add(epd.ShipToShipActivity); + epd.ShipToShipActivity.SEC = this._sec; + this.dataGridShip2ShipActivities.Items.Refresh(); + this.SublistElementChanged(Message.NotificationClass.SEC); + } + } + + private void DataGridShip2ShipActivities_DeleteRequested(DatabaseEntity obj) + { + ShipToShipActivitiesDuringLastTenPortFacilitiesCalled s2s = obj as ShipToShipActivitiesDuringLastTenPortFacilitiesCalled; + if (s2s != null) + { + // are you sure dialog is in base class + _sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.Remove(s2s); + DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Delete(s2s); + this.dataGridShip2ShipActivities.Items.Refresh(); + } + } + + private void DataGridShip2ShipActivities_EditRequested(DatabaseEntity obj) + { + EditShip2ShipActivitiesDialog ecpd = new EditShip2ShipActivitiesDialog(); + ecpd.ShipToShipActivity = obj as ShipToShipActivitiesDuringLastTenPortFacilitiesCalled; + ecpd.AddClicked += () => + { + ecpd.CopyValuesToEntity(); + if (!_sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.Contains(ecpd.ShipToShipActivity)) + _sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.Add(ecpd.ShipToShipActivity); + this.dataGridShip2ShipActivities.Items.Refresh(); + ecpd.ShipToShipActivity = new ShipToShipActivitiesDuringLastTenPortFacilitiesCalled(); + }; + if (ecpd.ShowDialog() ?? false) + { + if (!_sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.Contains(ecpd.ShipToShipActivity)) + _sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.Add(ecpd.ShipToShipActivity); + this.dataGridShip2ShipActivities.Items.Refresh(); + // signal up + this.SublistElementChanged(Message.NotificationClass.SEC); + } + } + + private void DataGridShip2ShipActivities_AddingNewItem(object sender, AddingNewItemEventArgs e) + { + this.DataGridShip2ShipActivities_CreateRequested(); + } + + #endregion + + #region data grid last 10 port facilities + + private void DataGridLast10PortFacilities_CreateRequested() + { + LastTenPortFacilitiesCalled l10c = new LastTenPortFacilitiesCalled(); + EditLast10PortFacilitiesDialog epd = new EditLast10PortFacilitiesDialog(); + epd.LastTenPortFacilitiesCalled = l10c; + + epd.AddClicked += () => + { + epd.CopyValuesToEntity(); + epd.LastTenPortFacilitiesCalled.SEC = this._sec; + this._sec.LastTenPortFacilitesCalled.Add(epd.LastTenPortFacilitiesCalled); + this.dataGridLast10PortFacilities.Items.Refresh(); + epd.LastTenPortFacilitiesCalled = new LastTenPortFacilitiesCalled(); + this.SublistElementChanged(Message.NotificationClass.SEC); + }; + + if (epd.ShowDialog() ?? false) + { + _sec.LastTenPortFacilitesCalled.Add(epd.LastTenPortFacilitiesCalled); + epd.LastTenPortFacilitiesCalled.SEC = this._sec; + this.dataGridLast10PortFacilities.Items.Refresh(); + this.SublistElementChanged(Message.NotificationClass.SEC); + } + } + + private void DataGridLast10PortFacilities_DeleteRequested(DatabaseEntity obj) + { + LastTenPortFacilitiesCalled l10c = obj as LastTenPortFacilitiesCalled; + if (l10c != null) + { + // are you sure dialog is in base class + _sec.LastTenPortFacilitesCalled.Remove(l10c); + DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Delete(l10c); + this.dataGridLast10PortFacilities.Items.Refresh(); + } + } + + private void DataGridLast10PortFacilities_EditRequested(DatabaseEntity obj) + { + EditLast10PortFacilitiesDialog ecpd = new EditLast10PortFacilitiesDialog(); + ecpd.LastTenPortFacilitiesCalled = obj as LastTenPortFacilitiesCalled; + ecpd.AddClicked += () => + { + ecpd.CopyValuesToEntity(); + if (!_sec.LastTenPortFacilitesCalled.Contains(ecpd.LastTenPortFacilitiesCalled)) + _sec.LastTenPortFacilitesCalled.Add(ecpd.LastTenPortFacilitiesCalled); + this.dataGridLast10PortFacilities.Items.Refresh(); + ecpd.LastTenPortFacilitiesCalled = new LastTenPortFacilitiesCalled(); + }; + if (ecpd.ShowDialog() ?? false) + { + if (!_sec.LastTenPortFacilitesCalled.Contains(ecpd.LastTenPortFacilitiesCalled)) + _sec.LastTenPortFacilitesCalled.Add(ecpd.LastTenPortFacilitiesCalled); + this.dataGridLast10PortFacilities.Items.Refresh(); + // signal up + this.SublistElementChanged(Message.NotificationClass.SEC); + } + } + + private void DataGridLast10PortFacilities_AddingNewItem(object sender, AddingNewItemEventArgs e) + { + this.DataGridLast10PortFacilities_CreateRequested(); + } + + #endregion + + private void SecurityDetailControl_Loaded(object sender, RoutedEventArgs e) + { + + this.RegisterTextboxChange(this.textBoxCSOEMailName, Message.NotificationClass.SEC); + this.RegisterTextboxChange(this.textBoxCSOFaxName, Message.NotificationClass.SEC); + this.RegisterTextboxChange(this.textBoxCSOFirstName, Message.NotificationClass.SEC); + this.RegisterTextboxChange(this.textBoxCSOLastName, Message.NotificationClass.SEC); + this.RegisterTextboxChange(this.textBoxCSOPhoneName, Message.NotificationClass.SEC); + this.RegisterTextboxChange(this.textBoxISSCIssuerName, Message.NotificationClass.SEC); + this.RegisterTextboxChange(this.textBoxPortFacilityOfArrival, Message.NotificationClass.SEC); + this.RegisterTextboxChange(this.textBoxReasonsForNoValidISSC, Message.NotificationClass.SEC); + + this.RegisterComboboxIndexChange(this.comboBoxCurrentShipSecurityLevel, Message.NotificationClass.SEC); + this.RegisterComboboxIndexChange(this.comboBoxGeneralDescriptionOfCargo, Message.NotificationClass.SEC); + this.RegisterComboboxIndexChange(this.comboBoxISSCIssuerType, Message.NotificationClass.SEC); + this.RegisterComboboxIndexChange(this.comboBoxISSCType, Message.NotificationClass.SEC); + + this.RegisterDatePickerChange(this.datePickerISSCDateOfExpiration, Message.NotificationClass.SEC); + this.RegisterDateTimePickerChange(this.dateTimePickerKielCanalPassagePlannedIncomming, Message.NotificationClass.SEC); + this.RegisterDateTimePickerChange(this.dateTimePickerKielCanalPassagePlannedOutgoing, Message.NotificationClass.SEC); + + this.RegisterCheckboxChange(this.checkBoxApprovedSecurityPlanOnBoard, Message.NotificationClass.SEC); + this.RegisterCheckboxChange(this.checkBoxKielCanalPassagePlanned, Message.NotificationClass.SEC); + this.RegisterCheckboxChange(this.checkBoxSECSimplification, Message.NotificationClass.SEC); + this.RegisterCheckboxChange(this.checkBoxValidISSCOnBoard, Message.NotificationClass.SEC); + + this.RegisterLocodeChange(this.locodePortOfCallWhereCompleteSECNotified, Message.NotificationClass.SEC); + + this.checkBoxSECSimplification.Checked += CheckBoxSECSimplification_Checked; + this.checkBoxKielCanalPassagePlanned.Checked += CheckBoxKielCanalPassagePlanned_Checked; + } + + #region enable / disable controls + + private void CheckBoxKielCanalPassagePlanned_Checked(object sender, RoutedEventArgs e) + { + this.dateTimePickerKielCanalPassagePlannedIncomming.IsEnabled = this.checkBoxKielCanalPassagePlanned.IsChecked ?? false; + this.dateTimePickerKielCanalPassagePlannedOutgoing.IsEnabled = this.checkBoxKielCanalPassagePlanned.IsChecked ?? false; + } + + private void CheckBoxSECSimplification_Checked(object sender, RoutedEventArgs e) + { + this.locodePortOfCallWhereCompleteSECNotified.IsEnabled = this.checkBoxSECSimplification.IsChecked ?? false; + bool enable = !(this.checkBoxSECSimplification.IsChecked ?? false); + + this.textBoxCSOEMailName.IsEnabled = enable; + this.textBoxCSOFaxName.IsEnabled = enable; + this.textBoxCSOFirstName.IsEnabled = enable; + this.textBoxCSOLastName.IsEnabled = enable; + this.textBoxCSOPhoneName.IsEnabled = enable; + this.textBoxISSCIssuerName.IsEnabled = enable; + this.textBoxPortFacilityOfArrival.IsEnabled = enable; + this.textBoxReasonsForNoValidISSC.IsEnabled = enable; + + this.checkBoxApprovedSecurityPlanOnBoard.IsEnabled = enable; + this.checkBoxValidISSCOnBoard.IsEnabled = enable; + + this.comboBoxGeneralDescriptionOfCargo.IsEnabled = enable; + this.comboBoxISSCIssuerType.IsEnabled = enable; + this.comboBoxISSCType.IsEnabled = enable; + + this.datePickerISSCDateOfExpiration.IsEnabled = enable; + } + + #endregion + } } diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/ShipDataDetailControl.xaml b/ENI-2/ENI2/ENI2/DetailViewControls/ShipDataDetailControl.xaml index d4418424..b7e9f6f5 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/ShipDataDetailControl.xaml +++ b/ENI-2/ENI2/ENI2/DetailViewControls/ShipDataDetailControl.xaml @@ -4,10 +4,101 @@ 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:enictrl="clr-namespace:ENI2.Controls" + xmlns:p="clr-namespace:ENI2.Properties" + 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="600" d:DesignWidth="800"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/ShipDataDetailControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailViewControls/ShipDataDetailControl.xaml.cs index 97d4178e..4a287aaa 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/ShipDataDetailControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/DetailViewControls/ShipDataDetailControl.xaml.cs @@ -1,21 +1,11 @@ // Copyright (c) 2017 schick Informatik -// Description: +// Description: Bearbeitungsmaske STAT // -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,72 @@ namespace ENI2.DetailViewControls /// public partial class ShipDataDetailControl : DetailBaseControl { + private Message _statMessage; + public ShipDataDetailControl() { InitializeComponent(); + Loaded += ShipDataDetailControl_Loaded; + } + + private void ShipDataDetailControl_Loaded(object sender, RoutedEventArgs e) + { + this.RegisterTextboxChange(this.textBoxVesselName, Message.NotificationClass.STAT); + this.RegisterComboboxValueChange(this.comboBoxVesselType, Message.NotificationClass.STAT); + this.RegisterComboboxValueChange(this.comboBoxTransportMode, Message.NotificationClass.STAT); + this.RegisterComboboxValueChange(this.comboBoxFlag, Message.NotificationClass.STAT); + this.RegisterIntegerUpDownChange(this.integerUpDownGrossTonnage, Message.NotificationClass.STAT); + this.RegisterDoubleUpDownChange(this.doubleUpDownLength, Message.NotificationClass.STAT); + this.RegisterTextboxChange(this.textBoxMMSI, Message.NotificationClass.STAT); + this.RegisterTextboxChange(this.textBoxCallsign, Message.NotificationClass.STAT); + this.RegisterLocodeChange(this.locodePortOfRegistry, Message.NotificationClass.STAT); + this.RegisterDoubleUpDownChange(this.doubleUpDownBeam, Message.NotificationClass.STAT); + this.RegisterTextboxChange(this.textBoxInmarsatCallNumber, Message.NotificationClass.STAT); + + this.RegisterTextboxChange(this.textBoxCompanyName, Message.NotificationClass.STAT); + this.RegisterTextboxChange(this.textBoxStreetNumber, Message.NotificationClass.STAT); + this.RegisterTextboxChange(this.textBoxPostalCode, Message.NotificationClass.STAT); + this.RegisterTextboxChange(this.textBoxCountry, Message.NotificationClass.STAT); + this.RegisterTextboxChange(this.textBoxCompanyId, Message.NotificationClass.STAT); + this.RegisterTextboxChange(this.textBoxCity, Message.NotificationClass.STAT); + + } + + public override void Initialize() + { + base.Initialize(); + + foreach (Message aMessage in this.Messages) + { + if (aMessage.MessageNotificationClass == Message.NotificationClass.STAT) { this._statMessage = aMessage; this.ControlMessages.Add(aMessage); } + } + + #region STAT + + if (this._statMessage == null) + { + this._statMessage = this.Core.CreateMessage(Message.NotificationClass.STAT); + this.Messages.Add(this._statMessage); + } + + STAT stat = null; + if (this._statMessage.Elements.Count > 0) + stat = this._statMessage.Elements[0] as STAT; + if (stat == null) + { + stat = new STAT(); + stat.MessageCore = this.Core; + stat.MessageHeader = this._statMessage; + _statMessage.Elements.Add(stat); + } + + this.comboBoxFlag.ItemsSource = CREW.NationalityDict; + this.comboBoxVesselType.ItemsSource = STAT.VesselTypeDict; + this.comboBoxTransportMode.ItemsSource = STAT.TransportModeDict; + this.shipDataGroupBox.DataContext = stat; + + #endregion + } } } diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/WasteDetailControl.xaml b/ENI-2/ENI2/ENI2/DetailViewControls/WasteDetailControl.xaml index f24e17ce..08c1bebb 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/WasteDetailControl.xaml +++ b/ENI-2/ENI2/ENI2/DetailViewControls/WasteDetailControl.xaml @@ -5,9 +5,126 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:ENI2.DetailViewControls" + xmlns:enictrl="clr-namespace:ENI2.Controls" + xmlns:p="clr-namespace:ENI2.Properties" + xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" mc:Ignorable="d" - d:DesignHeight="300" d:DesignWidth="300"> - - - + d:DesignHeight="600" d:DesignWidth="800"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/WasteDetailControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailViewControls/WasteDetailControl.xaml.cs index 9b65b42e..26f63b7a 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/WasteDetailControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/DetailViewControls/WasteDetailControl.xaml.cs @@ -1,21 +1,13 @@ // Copyright (c) 2017 schick Informatik -// Description: +// Description: Detailansicht Müllmeldung // -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 ENI2.EditControls; + +using bsmd.database; namespace ENI2.DetailViewControls { @@ -24,9 +16,148 @@ namespace ENI2.DetailViewControls /// public partial class WasteDetailControl : DetailBaseControl { + + private Message _wasMessage; + private WAS _was; + + private static string[] _wasteDeliveryList = + { + "ALL", + "SOME", + "NONE" + }; + public WasteDetailControl() { InitializeComponent(); + Loaded += WasteDetailControl_Loaded; } + + private void WasteDetailControl_Loaded(object sender, RoutedEventArgs e) + { + this.RegisterLocodeChange(this.locodeCtrlLastWastePort, Message.NotificationClass.WAS); + this.RegisterCheckboxChange(this.checkBoxAccurateCorrectDetails, Message.NotificationClass.WAS); + this.RegisterCheckboxChange(this.checkBoxValidExemption, Message.NotificationClass.WAS); + this.RegisterDatePickerChange(this.datePickerDateLastDisposal, Message.NotificationClass.WAS); + this.RegisterComboboxIndexChange(this.comboBoxWasteDisposal, Message.NotificationClass.WAS); + this.RegisterTextboxChange(this.textBoxWasteDisposalServiceProviders, Message.NotificationClass.WAS); + } + + public override void Initialize() + { + base.Initialize(); + + foreach (Message aMessage in this.Messages) + { + if (aMessage.MessageNotificationClass == Message.NotificationClass.WAS) { this._wasMessage = aMessage; this.ControlMessages.Add(aMessage); } + } + + #region init WAS + + if (this._wasMessage == null) + { + this._wasMessage = this.Core.CreateMessage(Message.NotificationClass.WAS); + this.Messages.Add(this._wasMessage); + } + + WAS was = null; + if (this._wasMessage.Elements.Count > 0) + was = this._wasMessage.Elements[0] as WAS; + if (was == null) + { + was = new WAS(); + was.MessageCore = this.Core; + was.MessageHeader = this._wasMessage; + _wasMessage.Elements.Add(was); + } + + this.portCallGroupBox.DataContext = was; + this._was = was; + + this.dataGridWaste.Initialize(); + this.dataGridWaste.ItemsSource = was.Waste; + this.comboBoxWasteDisposal.ItemsSource = _wasteDeliveryList; + this.dataGridWaste.AddingNewItem += DataGridWaste_AddingNewItem; + this.dataGridWaste.EditRequested += DataGridWaste_EditRequested; + this.dataGridWaste.DeleteRequested += DataGridWaste_DeleteRequested; + this.dataGridWaste.CreateRequested += DataGridWaste_CreateRequested; + + + #endregion + + } + + #region Waste grid event handler + + private void DataGridWaste_CreateRequested() + { + Waste waste = new Waste(); + EditWasteDialog epd = new EditWasteDialog(); + epd.Waste = waste; + + epd.AddClicked += () => + { + epd.CopyValuesToEntity(); + epd.Waste.WAS = this._was; + this._was.Waste.Add(epd.Waste); + this.dataGridWaste.Items.Refresh(); + epd.Waste = new Waste(); + this.SublistElementChanged(Message.NotificationClass.WAS); + }; + + if (epd.ShowDialog() ?? false) + { + _was.Waste.Add(epd.Waste); + epd.Waste.WAS = this._was; + this.dataGridWaste.Items.Refresh(); + this.SublistElementChanged(Message.NotificationClass.WAS); + } + } + + private void DataGridWaste_DeleteRequested(DatabaseEntity obj) + { + Waste waste = obj as Waste; + if (waste != null) + { + // are you sure dialog is in base class + _was.Waste.Remove(waste); + DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Delete(waste); + this.dataGridWaste.Items.Refresh(); + } + } + + private void DataGridWaste_EditRequested(DatabaseEntity obj) + { + Waste waste = obj as Waste; + if (waste != null) + { + EditWasteDialog epd = new EditWasteDialog(); + epd.Waste = waste; + + epd.AddClicked += () => + { + epd.CopyValuesToEntity(); + _was.Waste.Add(epd.Waste); + this.dataGridWaste.Items.Refresh(); + epd.Waste = new Waste(); + epd.Waste.WAS = _was; + this.SublistElementChanged(Message.NotificationClass.WAS); + }; + + if (epd.ShowDialog() ?? false) + { + this.dataGridWaste.Items.Refresh(); + this.SublistElementChanged(Message.NotificationClass.WAS); + } + } + } + + private void DataGridWaste_AddingNewItem(object sender, AddingNewItemEventArgs e) + { + this.DataGridWaste_CreateRequested(); + } + + #endregion + } } diff --git a/ENI-2/ENI2/ENI2/ENI2.csproj b/ENI-2/ENI2/ENI2/ENI2.csproj index 44aadcf9..982ea1e7 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 - 2 + 3 3.6.7.%2a false true @@ -221,18 +221,36 @@ EditCREWDialog.xaml + + EditInfectedAreaDialog.xaml + EditLADGDialog.xaml + + EditLast10PortFacilitiesDialog.xaml + EditPASDialog.xaml + + EditPortOfCallLast30DaysDialog.xaml + EditPortOfItineraryDialog.xaml + + EditSanitaryMeasureDialog.xaml + EditSERVDialog.xaml + + EditShip2ShipActivitiesDialog.xaml + + + EditWasteDialog.xaml + SimplePropertyViewDialog.xaml @@ -334,22 +352,46 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + MSBuild:Compile Designer + + Designer + MSBuild:Compile + Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile + + Designer + MSBuild:Compile + MSBuild:Compile Designer + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/ENI-2/ENI2/ENI2/EditControls/EditCallPurposeDialog.xaml.cs b/ENI-2/ENI2/ENI2/EditControls/EditCallPurposeDialog.xaml.cs index dc108bf3..f554a000 100644 --- a/ENI-2/ENI2/ENI2/EditControls/EditCallPurposeDialog.xaml.cs +++ b/ENI-2/ENI2/ENI2/EditControls/EditCallPurposeDialog.xaml.cs @@ -14,37 +14,7 @@ namespace ENI2.EditControls /// Interaction logic for EditCallPurposeDialog.xaml /// public partial class EditCallPurposeDialog : EditWindowBase - { - - private static string[] edifact8025Codes = - { - "", - "Cargo operations", - "Passenger movement", - "Taking bunkers", - "Changing crew", - "Goodwill visit", - "Taking supplies", - "Repair", - "Laid-up", - "Awaiting orders", - "Miscellaneous", - "Crew movement", - "Cruise, leisure and recreation", - "Under government order", - "Quarantine inspection", - "Refuge", - "Unloading cargo", - "Loading cargo", - "Repair in dry dock", - "Repair in wet dock", - "Cargo tank cleaning", - "Means of transport customs clearance", - "De-gassing", - "Waste disposal" - }; - - private List itemList = null; + { public EditCallPurposeDialog() { @@ -56,20 +26,7 @@ namespace ENI2.EditControls public CallPurpose CallPurpose { get; set; } - public List EdiCodes - { - get - { - if(itemList == null) - { - this.itemList = new List(); - this.itemList.Add(""); - for (int i = 1; i < edifact8025Codes.Length; i++) - this.itemList.Add(string.Format("{0} - {1}", i, edifact8025Codes[i])); - } - return itemList; - } - } + public void CopyValuesToEntity() { @@ -82,7 +39,7 @@ namespace ENI2.EditControls this.OKClicked += EditCallPurposeDialog_OKClicked; this.AddVisible = true; - this.comboBoxCode.ItemsSource = this.EdiCodes; + this.comboBoxCode.ItemsSource = Util.GlobalStructures.EdiCodes; if((this.CallPurpose != null) && (this.CallPurpose.CallPurposeCode != 0)) { this.comboBoxCode.SelectedIndex = this.CallPurpose.CallPurposeCode; @@ -99,7 +56,7 @@ namespace ENI2.EditControls { if (this.comboBoxCode.SelectedIndex != this.CallPurpose.CallPurposeCode) { - this.textBoxDescription.Text = edifact8025Codes[this.comboBoxCode.SelectedIndex]; + this.textBoxDescription.Text = Util.GlobalStructures.edifact8025Codes[this.comboBoxCode.SelectedIndex]; this.textBoxDescription.Focus(); // this.OnOkClicked(); // doch nicht gleich zu } diff --git a/ENI-2/ENI2/ENI2/EditControls/EditInfectedAreaDialog.xaml b/ENI-2/ENI2/ENI2/EditControls/EditInfectedAreaDialog.xaml new file mode 100644 index 00000000..f38d18e5 --- /dev/null +++ b/ENI-2/ENI2/ENI2/EditControls/EditInfectedAreaDialog.xaml @@ -0,0 +1,25 @@ + + + + + + + + + + + + diff --git a/ENI-2/ENI2/ENI2/EditControls/EditInfectedAreaDialog.xaml.cs b/ENI-2/ENI2/ENI2/EditControls/EditInfectedAreaDialog.xaml.cs new file mode 100644 index 00000000..1756786c --- /dev/null +++ b/ENI-2/ENI2/ENI2/EditControls/EditInfectedAreaDialog.xaml.cs @@ -0,0 +1,45 @@ +// Copyright (c) 2017 schick Informatik +// Description: Infected Area Bearbeitungsdialog +// + +using System.Windows; + +using ENI2.Controls; +using bsmd.database; + +namespace ENI2.EditControls +{ + /// + /// Interaction logic for EditInfectedAreaDialog.xaml + /// + public partial class EditInfectedAreaDialog : EditWindowBase + { + public EditInfectedAreaDialog() + { + InitializeComponent(); + this.Loaded += EditInfectedAreaDialog_Loaded; + } + + public InfectedArea InfectedArea { get; set; } + + private void EditInfectedAreaDialog_Loaded(object sender, RoutedEventArgs e) + { + this.textBoxInfectedAreaPort.Text = this.InfectedArea.InfectedAreaPort; + this.datePickerInfectedAreaDate.SelectedDate = this.InfectedArea.InfectedAreaDate; + + this.AddVisible = true; + this.OKClicked += EditInfectedAreaDialog_OKClicked; + } + + public void CopyValuesToEntity() + { + this.InfectedArea.InfectedAreaPort = this.textBoxInfectedAreaPort.Text; + this.InfectedArea.InfectedAreaDate = this.datePickerInfectedAreaDate.SelectedDate; + } + + private void EditInfectedAreaDialog_OKClicked() + { + this.CopyValuesToEntity(); + } + } +} diff --git a/ENI-2/ENI2/ENI2/EditControls/EditLast10PortFacilitiesDialog.xaml b/ENI-2/ENI2/ENI2/EditControls/EditLast10PortFacilitiesDialog.xaml new file mode 100644 index 00000000..8da9f474 --- /dev/null +++ b/ENI-2/ENI2/ENI2/EditControls/EditLast10PortFacilitiesDialog.xaml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/ENI-2/ENI2/ENI2/EditControls/EditLast10PortFacilitiesDialog.xaml.cs b/ENI-2/ENI2/ENI2/EditControls/EditLast10PortFacilitiesDialog.xaml.cs new file mode 100644 index 00000000..ffee74a3 --- /dev/null +++ b/ENI-2/ENI2/ENI2/EditControls/EditLast10PortFacilitiesDialog.xaml.cs @@ -0,0 +1,63 @@ +// Copyright (c) 2017 schick Informatik +// Description: Last 10 port facilities Detailansicht +// + +using System.Windows; + +using bsmd.database; +using ENI2.Controls; +using ENI2.Util; + +namespace ENI2.EditControls +{ + /// + /// Interaction logic for EditLast10PortFacilitiesDialog.xaml + /// + public partial class EditLast10PortFacilitiesDialog : EditWindowBase + { + public EditLast10PortFacilitiesDialog() + { + InitializeComponent(); + Loaded += EditLast10PortFacilitiesDialog_Loaded; + AddClicked += () => { this.locodePort.Focus(); }; + } + + public LastTenPortFacilitiesCalled LastTenPortFacilitiesCalled { get; set; } + + private void EditLast10PortFacilitiesDialog_Loaded(object sender, RoutedEventArgs e) + { + this.locodePort.LocodeValue = this.LastTenPortFacilitiesCalled.PortFacilityPortLoCode; + this.textBoxPortName.Text = this.LastTenPortFacilitiesCalled.PortFacilityPortName; + this.textBoxPortCountry.Text = this.LastTenPortFacilitiesCalled.PortFacilityPortCountry; + this.datePickerATA.SelectedDate = this.LastTenPortFacilitiesCalled.PortFacilityDateOfArrival; + this.datePickerATD.SelectedDate = this.LastTenPortFacilitiesCalled.PortFacilityDateOfDeparture; + this.comboBoxShipSecurityLevel.ItemsSource = GlobalStructures.ShipSecurityLevels; + this.comboBoxShipSecurityLevel.SelectedIndex = this.LastTenPortFacilitiesCalled.PortFacilityShipSecurityLevel ?? -1; + this.textBoxGisisCode.Text = this.LastTenPortFacilitiesCalled.PortFacilityGISISCode; + this.textBoxSecurityMatters.Text = this.LastTenPortFacilitiesCalled.PortFacilitySecurityMattersToReport; + + this.AddVisible = true; + this.OKClicked += EditLast10PortFacilitiesDialog_OKClicked; + } + + public void CopyValuesToEntity() + { + this.LastTenPortFacilitiesCalled.PortFacilityPortLoCode = this.locodePort.LocodeValue; + this.LastTenPortFacilitiesCalled.PortFacilityPortName = this.textBoxPortName.Text; + this.LastTenPortFacilitiesCalled.PortFacilityPortCountry = this.textBoxPortCountry.Text; + this.LastTenPortFacilitiesCalled.PortFacilityDateOfArrival = this.datePickerATA.SelectedDate; + this.LastTenPortFacilitiesCalled.PortFacilityDateOfDeparture = this.datePickerATD.SelectedDate; + this.LastTenPortFacilitiesCalled.PortFacilityGISISCode = this.textBoxGisisCode.Text; + if (this.comboBoxShipSecurityLevel.SelectedIndex == -1) + this.LastTenPortFacilitiesCalled.PortFacilityShipSecurityLevel = null; + else + this.LastTenPortFacilitiesCalled.PortFacilityShipSecurityLevel = ((byte)this.comboBoxShipSecurityLevel.SelectedIndex); + this.LastTenPortFacilitiesCalled.PortFacilitySecurityMattersToReport = this.textBoxSecurityMatters.Text; + } + + private void EditLast10PortFacilitiesDialog_OKClicked() + { + this.CopyValuesToEntity(); + } + } +} diff --git a/ENI-2/ENI2/ENI2/EditControls/EditPortOfCallLast30DaysDialog.xaml b/ENI-2/ENI2/ENI2/EditControls/EditPortOfCallLast30DaysDialog.xaml new file mode 100644 index 00000000..2e937a16 --- /dev/null +++ b/ENI-2/ENI2/ENI2/EditControls/EditPortOfCallLast30DaysDialog.xaml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + diff --git a/ENI-2/ENI2/ENI2/EditControls/EditPortOfCallLast30DaysDialog.xaml.cs b/ENI-2/ENI2/ENI2/EditControls/EditPortOfCallLast30DaysDialog.xaml.cs new file mode 100644 index 00000000..616bff64 --- /dev/null +++ b/ENI-2/ENI2/ENI2/EditControls/EditPortOfCallLast30DaysDialog.xaml.cs @@ -0,0 +1,53 @@ +// Copyright (c) 2017 schick Informatik +// Description: +// + +using System.Windows; +using ENI2.Controls; + +using bsmd.database; + +namespace ENI2.EditControls +{ + /// + /// Interaction logic for EditPortOfCallLast30Days.xaml + /// + public partial class EditPortOfCallLast30DaysDialog : EditWindowBase + { + public EditPortOfCallLast30DaysDialog() + { + InitializeComponent(); + Loaded += EditPortOfCallLast30DaysDialog_Loaded; + AddClicked += () => { this.locodeControlPortName.Focus(); }; + } + + public PortOfCallLast30Days PocLast30Days { get; set; } + + private void EditPortOfCallLast30DaysDialog_Loaded(object sender, RoutedEventArgs e) + { + this.OKClicked += EditPortOfCallLast30DaysDialog_OKClicked; + + // copy into fields + this.locodeControlPortName.LocodeValue = this.PocLast30Days.PortOfCallLast30DaysLocode; + this.datePickerATAPortOfCall.SelectedDate = this.PocLast30Days.PortOfCallLast30DaysDateOfDeparture; + this.checkBoxCrewMembersJoined.IsChecked = this.PocLast30Days.PortOfCallLast30DaysCrewMembersJoined; + this.textBoxCrewMemberNames.Text = this.PocLast30Days.CrewMembersJoinedText; + this.AddVisible = true; + } + + public void CopyValuesToEntity() + { + // copy back + this.PocLast30Days.PortOfCallLast30DaysLocode = this.locodeControlPortName.LocodeValue; + this.PocLast30Days.PortOfCallLast30DaysDateOfDeparture = this.datePickerATAPortOfCall.SelectedDate; + this.PocLast30Days.PortOfCallLast30DaysCrewMembersJoined = this.checkBoxCrewMembersJoined.IsChecked; + this.PocLast30Days.CrewMembersJoinedText = this.textBoxCrewMemberNames.Text; + + } + + private void EditPortOfCallLast30DaysDialog_OKClicked() + { + this.CopyValuesToEntity(); + } + } +} diff --git a/ENI-2/ENI2/ENI2/EditControls/EditSanitaryMeasureDialog.xaml b/ENI-2/ENI2/ENI2/EditControls/EditSanitaryMeasureDialog.xaml new file mode 100644 index 00000000..24260fb8 --- /dev/null +++ b/ENI-2/ENI2/ENI2/EditControls/EditSanitaryMeasureDialog.xaml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + diff --git a/ENI-2/ENI2/ENI2/EditControls/EditSanitaryMeasureDialog.xaml.cs b/ENI-2/ENI2/ENI2/EditControls/EditSanitaryMeasureDialog.xaml.cs new file mode 100644 index 00000000..f5662462 --- /dev/null +++ b/ENI-2/ENI2/ENI2/EditControls/EditSanitaryMeasureDialog.xaml.cs @@ -0,0 +1,47 @@ +// Copyright (c) 2017 schick Informatik +// Description: SanitaryMeasure Bearbeitungsdialog +// + +using System.Windows; + +using ENI2.Controls; +using bsmd.database; + +namespace ENI2.EditControls +{ + /// + /// Interaction logic for EditSanitaryMeasureDialog.xaml + /// + public partial class EditSanitaryMeasureDialog : EditWindowBase + { + public EditSanitaryMeasureDialog() + { + InitializeComponent(); + this.Loaded += EditSanitaryMeasureDialog_Loaded; + } + + public SanitaryMeasuresDetail SanitaryMeasureDetail { get; set; } + + private void EditSanitaryMeasureDialog_Loaded(object sender, RoutedEventArgs e) + { + this.textBoxSanitaryMeasureKind.Text = this.SanitaryMeasureDetail.SanitaryMeasuresType; + this.textBoxSanitaryMeasurePlace.Text = this.SanitaryMeasureDetail.SanitaryMeasuresLocation; + this.datePickerSanitaryMeasureDate.SelectedDate = this.SanitaryMeasureDetail.SanitaryMeasuresDate; + this.OKClicked += EditSanitaryMeasureDialog_OKClicked; + this.AddVisible = true; + } + + public void CopyValuesToEntity() + { + this.SanitaryMeasureDetail.SanitaryMeasuresType = this.textBoxSanitaryMeasureKind.Text.Trim(); + this.SanitaryMeasureDetail.SanitaryMeasuresLocation = this.textBoxSanitaryMeasurePlace.Text.Trim(); + this.SanitaryMeasureDetail.SanitaryMeasuresDate = this.datePickerSanitaryMeasureDate.SelectedDate; + + } + + private void EditSanitaryMeasureDialog_OKClicked() + { + this.CopyValuesToEntity(); + } + } +} diff --git a/ENI-2/ENI2/ENI2/EditControls/EditShip2ShipActivitiesDialog.xaml b/ENI-2/ENI2/ENI2/EditControls/EditShip2ShipActivitiesDialog.xaml new file mode 100644 index 00000000..ab95e362 --- /dev/null +++ b/ENI-2/ENI2/ENI2/EditControls/EditShip2ShipActivitiesDialog.xaml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ENI-2/ENI2/ENI2/EditControls/EditShip2ShipActivitiesDialog.xaml.cs b/ENI-2/ENI2/ENI2/EditControls/EditShip2ShipActivitiesDialog.xaml.cs new file mode 100644 index 00000000..a370d824 --- /dev/null +++ b/ENI-2/ENI2/ENI2/EditControls/EditShip2ShipActivitiesDialog.xaml.cs @@ -0,0 +1,72 @@ +// Copyright (c) 2017 schick Informatik +// Description: Ship-2-Ship Detailansicht +// + +using System.Windows; + +using bsmd.database; +using ENI2.Controls; +using ENI2.Util; + + +namespace ENI2.EditControls +{ + /// + /// Interaction logic for EditShip2ShipActivitiesDialog.xaml + /// + public partial class EditShip2ShipActivitiesDialog : EditWindowBase + { + public EditShip2ShipActivitiesDialog() + { + InitializeComponent(); + this.Loaded += EditShip2ShipActivitiesDialog_Loaded; + AddClicked += () => { this.textBoxLocationName.Focus(); }; + } + + public ShipToShipActivitiesDuringLastTenPortFacilitiesCalled ShipToShipActivity { get; set; } + + private void EditShip2ShipActivitiesDialog_Loaded(object sender, RoutedEventArgs e) + { + this.textBoxLocationName.Text = this.ShipToShipActivity.ShipToShipActivityLocationName; + this.locodeLocation.LocodeValue = this.ShipToShipActivity.ShipToShipActivityLocationLoCode; + this.doubleUpDownLatitudeDegrees.Value = bsmd.database.Util.NSWToDecimalDegrees(this.ShipToShipActivity.ShipToShipActivityLocationCoordinatesLatitude ?? 0); + this.doubleUpDownLongitudeDegrees.Value = bsmd.database.Util.NSWToDecimalDegrees(this.ShipToShipActivity.ShipToShipActivityLocationCoordinatesLongitude ?? 0); + this.datePickerFrom.SelectedDate = this.ShipToShipActivity.ShipToShipActivityDateFrom; + this.datePickerTo.SelectedDate = this.ShipToShipActivity.ShipToShipActivityDateTo; + this.textBoxActivityType.Text = this.ShipToShipActivity.ShipToShipActivityType; + this.textBoxSecurityMatters.Text = this.ShipToShipActivity.ShipToShipActivitySecurityMattersToReport; + + this.comboBoxActivityType.ItemsSource = Util.GlobalStructures.EdiCodes; + this.comboBoxActivityType.SelectionChanged += ComboBoxActivityType_SelectionChanged; + + this.AddVisible = true; + this.OKClicked += EditShip2ShipActivitiesDialog_OKClicked; ; + } + + private void ComboBoxActivityType_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) + { + if(this.comboBoxActivityType.SelectedIndex >= 0) + { + this.textBoxActivityType.Text = Util.GlobalStructures.edifact8025Codes[this.comboBoxActivityType.SelectedIndex]; + } + } + + public void CopyValuesToEntity() + { + this.ShipToShipActivity.ShipToShipActivityLocationName = this.textBoxLocationName.Text.Trim(); + this.ShipToShipActivity.ShipToShipActivityLocationLoCode = this.locodeLocation.LocodeValue; + this.ShipToShipActivity.ShipToShipActivityLocationCoordinatesLatitude = bsmd.database.Util.DecimalDegreesToNSW(this.doubleUpDownLatitudeDegrees.Value ?? 0); + this.ShipToShipActivity.ShipToShipActivityLocationCoordinatesLongitude = bsmd.database.Util.DecimalDegreesToNSW(this.doubleUpDownLongitudeDegrees.Value ?? 0); + this.ShipToShipActivity.ShipToShipActivityDateFrom = this.datePickerFrom.SelectedDate; + this.ShipToShipActivity.ShipToShipActivityDateTo = this.datePickerTo.SelectedDate; + this.ShipToShipActivity.ShipToShipActivityType = this.textBoxActivityType.Text.Trim(); ; + this.ShipToShipActivity.ShipToShipActivitySecurityMattersToReport = this.textBoxSecurityMatters.Text.Trim(); + } + + + private void EditShip2ShipActivitiesDialog_OKClicked() + { + this.CopyValuesToEntity(); + } + } +} diff --git a/ENI-2/ENI2/ENI2/EditControls/EditWasteDialog.xaml b/ENI-2/ENI2/ENI2/EditControls/EditWasteDialog.xaml new file mode 100644 index 00000000..8de61fde --- /dev/null +++ b/ENI-2/ENI2/ENI2/EditControls/EditWasteDialog.xaml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/ENI-2/ENI2/ENI2/EditControls/EditWasteDialog.xaml.cs b/ENI-2/ENI2/ENI2/EditControls/EditWasteDialog.xaml.cs new file mode 100644 index 00000000..193afd6d --- /dev/null +++ b/ENI-2/ENI2/ENI2/EditControls/EditWasteDialog.xaml.cs @@ -0,0 +1,70 @@ +// Copyright (c) 2017 schick Informatik +// Description: Waste Bearbeitungsdialog +// + +using System.Windows; +using System.Collections.Generic; + +using bsmd.database; +using ENI2.Controls; +using ENI2.Util; + +namespace ENI2.EditControls +{ + /// + /// Interaction logic for EditWasteDialog.xaml + /// + public partial class EditWasteDialog : EditWindowBase + { + public EditWasteDialog() + { + InitializeComponent(); + Loaded += EditWasteDialog_Loaded; + AddClicked += () => { this.comboBoxWasteCode.Focus(); }; + } + + public Waste Waste { get; set; } + + private void EditWasteDialog_Loaded(object sender, RoutedEventArgs e) + { + Dictionary codeDict = new Dictionary(); + for (int i = 0; i < WAS.DKWasteCodes.Length; i++) + { + codeDict[WAS.DKWasteCodes[i]] = string.Format("{0} - {1}", WAS.DKWasteCodes[i], WAS.DKWasteTypes[i]); + } + this.comboBoxWasteCode.ItemsSource = codeDict; + this.comboBoxWasteCode.SelectedValue = this.Waste.WasteType; + this.textBoxDescription.Text = this.Waste.WasteDescription; + this.doubleUpDownAmountWasteDischargedLastPort.Value = this.Waste.WasteDisposedAtLastPort_MTQ; + this.doubleUpDownAmountDisposed.Value = this.Waste.WasteDisposalAmount_MTQ; + this.doubleUpDownAmountGeneratedTilNextPort.Value = this.Waste.WasteAmountGeneratedTillNextPort_MTQ; + this.doubleUpDownAmountRetained.Value = this.Waste.WasteAmountRetained_MTQ; + this.doubleUpDownMaxCapacity.Value = this.Waste.WasteCapacity_MTQ; + this.locodePortOfDeliveryRemainingWaste.LocodeValue = this.Waste.WasteDisposalPort; + + OKClicked += EditWasteDialog_OKClicked; + this.AddVisible = true; + } + public void CopyValuesToEntity() + { + // copy back + if (this.comboBoxWasteCode.SelectedValue != null) + this.Waste.WasteType = (int)this.comboBoxWasteCode.SelectedValue; + else + this.Waste.WasteType = null; + this.Waste.WasteDescription = this.textBoxDescription.Text?.Trim(); + this.Waste.WasteDisposedAtLastPort_MTQ = this.doubleUpDownAmountWasteDischargedLastPort.Value; + this.Waste.WasteDisposalAmount_MTQ = this.doubleUpDownAmountDisposed.Value; + this.Waste.WasteAmountGeneratedTillNextPort_MTQ = this.doubleUpDownAmountGeneratedTilNextPort.Value; + this.Waste.WasteAmountRetained_MTQ = this.doubleUpDownAmountRetained.Value; + this.Waste.WasteCapacity_MTQ = this.doubleUpDownMaxCapacity.Value; + this.Waste.WasteDisposalPort = this.locodePortOfDeliveryRemainingWaste.LocodeValue; + } + + private void EditWasteDialog_OKClicked() + { + this.CopyValuesToEntity(); + } + } + +} diff --git a/ENI-2/ENI2/ENI2/LocalizedLookup.cs b/ENI-2/ENI2/ENI2/LocalizedLookup.cs index 1e934eb4..b6343c46 100644 --- a/ENI-2/ENI2/ENI2/LocalizedLookup.cs +++ b/ENI-2/ENI2/ENI2/LocalizedLookup.cs @@ -72,12 +72,50 @@ namespace ENI2 if (!reader.IsDBNull(0)) code = reader.GetString(0); if (!reader.IsDBNull(1)) name = reader.GetString(1); if((code != null) && (name != null)) - result[code] = name; + result[code] = string.Format("{0} {1}", code, name); } reader.Close(); return result; } + public static Dictionary getVesselTypes() + { + Dictionary result = new Dictionary(); + string query = string.Format("SELECT Code, Name FROM VesselType ORDER BY Code"); + SQLiteCommand cmd = new SQLiteCommand(query, _con); + IDataReader reader = cmd.ExecuteReader(); + while (reader.Read()) + { + string code = null; + string name = null; + if (!reader.IsDBNull(0)) code = reader.GetString(0); + if (!reader.IsDBNull(1)) name = reader.GetString(1); + if ((code != null) && (name != null)) + result[code] = string.Format("{0} {1}", code, name); + } + reader.Close(); + return result; + } + + + public static Dictionary getTransportModes() + { + Dictionary result = new Dictionary(); + string query = string.Format("SELECT Code, Name FROM TransportMode ORDER BY Code"); + SQLiteCommand cmd = new SQLiteCommand(query, _con); + IDataReader reader = cmd.ExecuteReader(); + while (reader.Read()) + { + string code = null; + string name = null; + if (!reader.IsDBNull(0)) code = reader.GetString(0); + if (!reader.IsDBNull(1)) name = reader.GetString(1); + if ((code != null) && (name != null)) + result[code] = string.Format("{0} {1}", code, name); + } + reader.Close(); + return result; + } } } diff --git a/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs b/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs index 1d357e4f..92455f93 100644 --- a/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs +++ b/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs @@ -500,6 +500,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Accurate and correct details given?. + /// + public static string textAccurateDetailsGiven { + get { + return ResourceManager.GetString("textAccurateDetailsGiven", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Activity type. + /// + public static string textActivityType { + get { + return ResourceManager.GetString("textActivityType", resourceCulture); + } + } + /// /// Looks up a localized string similar to _Add. /// @@ -518,6 +536,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Amount of planned waste disposal. + /// + public static string textAmountOfPlannedWasteDisposal { + get { + return ResourceManager.GetString("textAmountOfPlannedWasteDisposal", resourceCulture); + } + } + /// /// Looks up a localized string similar to Anchored. /// @@ -527,6 +554,33 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Any sanitary measures applied?. + /// + public static string textAnySanitaryMeasures { + get { + return ResourceManager.GetString("textAnySanitaryMeasures", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Any sanitary measures applied?. + /// + public static string textAnySanitaryMeasuresApplied { + get { + return ResourceManager.GetString("textAnySanitaryMeasuresApplied", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Approved security plan on board?. + /// + public static string textApprovedSecPlan { + get { + return ResourceManager.GetString("textApprovedSecPlan", resourceCulture); + } + } + /// /// Looks up a localized string similar to Are you sure?. /// @@ -572,6 +626,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Are you aware of any condition on board which may lead to further infections?. + /// + public static string textAwareofConditionInfectious { + get { + return ResourceManager.GetString("textAwareofConditionInfectious", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Beam over all. + /// + public static string textBeamOverAll { + get { + return ResourceManager.GetString("textBeamOverAll", resourceCulture); + } + } + /// /// Looks up a localized string similar to Beam overall in meter. /// @@ -653,6 +725,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Call sign. + /// + public static string textCallsign { + get { + return ResourceManager.GetString("textCallsign", resourceCulture); + } + } + /// /// Looks up a localized string similar to Cancel declaration. /// @@ -761,6 +842,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Chief security officer (CSO). + /// + public static string textChiefSecurityOfficer { + get { + return ResourceManager.GetString("textChiefSecurityOfficer", resourceCulture); + } + } + /// /// Looks up a localized string similar to City. /// @@ -797,6 +887,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Company Id. + /// + public static string textCompanyId { + get { + return ResourceManager.GetString("textCompanyId", resourceCulture); + } + } + /// /// Looks up a localized string similar to Company name. /// @@ -842,6 +941,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Country. + /// + public static string textCountry { + get { + return ResourceManager.GetString("textCountry", resourceCulture); + } + } + /// /// Looks up a localized string similar to Created. /// @@ -878,6 +986,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Did any crew members join the ship at this port?. + /// + public static string textCrewMemberJoinTheShip { + get { + return ResourceManager.GetString("textCrewMemberJoinTheShip", resourceCulture); + } + } + /// /// Looks up a localized string similar to Number of crew members on board. /// @@ -887,6 +1004,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Crew members joined (comma separated). + /// + public static string textCrewMembersJoined { + get { + return ResourceManager.GetString("textCrewMembersJoined", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Names of joined crew members. + /// + public static string textCrewMembersJoinedGrid { + get { + return ResourceManager.GetString("textCrewMembersJoinedGrid", resourceCulture); + } + } + /// /// Looks up a localized string similar to Cruise ship. /// @@ -896,6 +1031,33 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to cbm. + /// + public static string textCubicMeters { + get { + return ResourceManager.GetString("textCubicMeters", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Current ship security level. + /// + public static string textCurrentShipSecLevel { + get { + return ResourceManager.GetString("textCurrentShipSecLevel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Date from. + /// + public static string textDateFrom { + get { + return ResourceManager.GetString("textDateFrom", resourceCulture); + } + } + /// /// Looks up a localized string similar to Date of birth. /// @@ -905,6 +1067,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Date of issue. + /// + public static string textDateOfIssue { + get { + return ResourceManager.GetString("textDateOfIssue", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Date to. + /// + public static string textDateTo { + get { + return ResourceManager.GetString("textDateTo", resourceCulture); + } + } + /// /// Looks up a localized string similar to Declarations. /// @@ -986,6 +1166,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Is there on board or has there been during the international voyage any case of disease which you suspect to be of an infectious nature?. + /// + public static string textDiseaseInfectiousNature { + get { + return ResourceManager.GetString("textDiseaseInfectiousNature", resourceCulture); + } + } + /// /// Looks up a localized string similar to Double hull. /// @@ -1022,6 +1211,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Draught on departure. + /// + public static string textDraughtOnDeparture { + get { + return ResourceManager.GetString("textDraughtOnDeparture", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Draught on departure in decimetre. + /// + public static string textDraughtOnDepartureLabel { + get { + return ResourceManager.GetString("textDraughtOnDepartureLabel", resourceCulture); + } + } + /// /// Looks up a localized string similar to _Edit. /// @@ -1202,6 +1409,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to General cargo description. + /// + public static string textGeneralCargoDescription { + get { + return ResourceManager.GetString("textGeneralCargoDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to GISIS code of the port facility according to ISPS. + /// + public static string textGISISCode { + get { + return ResourceManager.GetString("textGISISCode", resourceCulture); + } + } + /// /// Looks up a localized string similar to Gross tonnage. /// @@ -1220,6 +1445,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Waste residue notification. + /// + public static string textGroupBoxWasteCargo { + get { + return ResourceManager.GetString("textGroupBoxWasteCargo", resourceCulture); + } + } + /// /// Looks up a localized string similar to ID doc. number. /// @@ -1256,6 +1490,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Incoming journey to port of call - ETA NOK. + /// + public static string textIncomingETANOK { + get { + return ResourceManager.GetString("textIncomingETANOK", resourceCulture); + } + } + /// /// Looks up a localized string similar to Inert. /// @@ -1265,6 +1508,42 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Has the ship visited an infected area (WHO)?. + /// + public static string textInfecteAreaVisited { + get { + return ResourceManager.GetString("textInfecteAreaVisited", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Infected area date. + /// + public static string textInfectedAreaDate { + get { + return ResourceManager.GetString("textInfectedAreaDate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Infected area port. + /// + public static string textInfectedAreaPort { + get { + return ResourceManager.GetString("textInfectedAreaPort", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Infected area visited. + /// + public static string textInfectedAreaVisited { + get { + return ResourceManager.GetString("textInfectedAreaVisited", resourceCulture); + } + } + /// /// Looks up a localized string similar to Info. /// @@ -1274,6 +1553,69 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Inmarsat call number. + /// + public static string textInmarsatCallNumber { + get { + return ResourceManager.GetString("textInmarsatCallNumber", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ISM company. + /// + public static string textISMCompany { + get { + return ResourceManager.GetString("textISMCompany", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ISSC. + /// + public static string textISSC { + get { + return ResourceManager.GetString("textISSC", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ISSC expiration date. + /// + public static string textISSCExpirationDate { + get { + return ResourceManager.GetString("textISSCExpirationDate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ISSC issuer name. + /// + public static string textISSCIssuerName { + get { + return ResourceManager.GetString("textISSCIssuerName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ISSC issuer type. + /// + public static string textISSCIssuerType { + get { + return ResourceManager.GetString("textISSCIssuerType", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ISSC type. + /// + public static string textISSCType { + get { + return ResourceManager.GetString("textISSCType", resourceCulture); + } + } + /// /// Looks up a localized string similar to Itinerary port. /// @@ -1283,6 +1625,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Joining location (separated by comma). + /// + public static string textJoiningLocation { + get { + return ResourceManager.GetString("textJoiningLocation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Kiel Canal passage planned?. + /// + public static string textKielPassagePlanned { + get { + return ResourceManager.GetString("textKielPassagePlanned", resourceCulture); + } + } + /// /// Looks up a localized string similar to LA Code. /// @@ -1301,6 +1661,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Last 10 port facilities called. + /// + public static string textLast10PortFacilities { + get { + return ResourceManager.GetString("textLast10PortFacilities", resourceCulture); + } + } + /// /// Looks up a localized string similar to Date of last expanded inspection. /// @@ -1328,6 +1697,60 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Last port where waste or cargo residues where discharged. + /// + public static string textLastPortWasteDischarge { + get { + return ResourceManager.GetString("textLastPortWasteDischarge", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Latitude decimal. + /// + public static string textLatitudeDecimal { + get { + return ResourceManager.GetString("textLatitudeDecimal", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Latitude degrees. + /// + public static string textLatitudeDegrees { + get { + return ResourceManager.GetString("textLatitudeDegrees", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Latitude minutes. + /// + public static string textLatitudeMinutes { + get { + return ResourceManager.GetString("textLatitudeMinutes", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Latitude seconds. + /// + public static string textLatitudeSeconds { + get { + return ResourceManager.GetString("textLatitudeSeconds", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Length over all. + /// + public static string textLengthOverAll { + get { + return ResourceManager.GetString("textLengthOverAll", resourceCulture); + } + } + /// /// Looks up a localized string similar to Length overall in meter. /// @@ -1346,6 +1769,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Location UNLOCODE. + /// + public static string textLocationLocode { + get { + return ResourceManager.GetString("textLocationLocode", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Location name. + /// + public static string textLocationName { + get { + return ResourceManager.GetString("textLocationName", resourceCulture); + } + } + /// /// Looks up a localized string similar to Lock. /// @@ -1382,6 +1823,42 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Longitude decimal. + /// + public static string textLongitudeDecimal { + get { + return ResourceManager.GetString("textLongitudeDecimal", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Longitude degrees. + /// + public static string textLongitudeDegrees { + get { + return ResourceManager.GetString("textLongitudeDegrees", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Longitude minutes. + /// + public static string textLongitudeMinutes { + get { + return ResourceManager.GetString("textLongitudeMinutes", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Longitude seconds. + /// + public static string textLongitudeSeconds { + get { + return ResourceManager.GetString("textLongitudeSeconds", resourceCulture); + } + } + /// /// Looks up a localized string similar to Male. /// @@ -1391,6 +1868,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Maritime health declaration. + /// + public static string textMaritimeHealthDeclaration { + get { + return ResourceManager.GetString("textMaritimeHealthDeclaration", resourceCulture); + } + } + /// /// Looks up a localized string similar to Master. /// @@ -1409,6 +1895,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Was a medical practitioner consulted?. + /// + public static string textMedicalPractitionerConsulted { + get { + return ResourceManager.GetString("textMedicalPractitionerConsulted", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to MMSI number. + /// + public static string textMMSI { + get { + return ResourceManager.GetString("textMMSI", resourceCulture); + } + } + /// /// Looks up a localized string similar to Muster book. /// @@ -1481,6 +1985,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Number of deaths. + /// + public static string textNumberOfDeaths { + get { + return ResourceManager.GetString("textNumberOfDeaths", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Number of ill persons. + /// + public static string textNumberOfIl { + get { + return ResourceManager.GetString("textNumberOfIl", resourceCulture); + } + } + /// /// Looks up a localized string similar to Operations. /// @@ -1508,6 +2030,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Outgoing journey from port of call - ETA NOK. + /// + public static string textOutgoingETANOK { + get { + return ResourceManager.GetString("textOutgoingETANOK", resourceCulture); + } + } + /// /// Looks up a localized string similar to Overview. /// @@ -1553,6 +2084,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Has any person died on board during the voyage otherwise than as a result of accident?. + /// + public static string textPersonDiedOnBoard { + get { + return ResourceManager.GetString("textPersonDiedOnBoard", resourceCulture); + } + } + /// /// Looks up a localized string similar to Persons on board arrival. /// @@ -1562,6 +2102,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Persons on board departure. + /// + public static string textPersonOnBoardDeparture { + get { + return ResourceManager.GetString("textPersonOnBoardDeparture", resourceCulture); + } + } + /// /// Looks up a localized string similar to Number of persons on board. /// @@ -1598,6 +2147,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Place of issue. + /// + public static string textPlaceOfIssue { + get { + return ResourceManager.GetString("textPlaceOfIssue", resourceCulture); + } + } + /// /// Looks up a localized string similar to Planned inspection / works. /// @@ -1643,6 +2201,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Port country. + /// + public static string textPortCountry { + get { + return ResourceManager.GetString("textPortCountry", resourceCulture); + } + } + /// /// Looks up a localized string similar to Port facility. /// @@ -1652,6 +2219,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Port facility of arrival. + /// + public static string textPortFacilityOfArrival { + get { + return ResourceManager.GetString("textPortFacilityOfArrival", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Port UNLOCODE. + /// + public static string textPortLocode { + get { + return ResourceManager.GetString("textPortLocode", resourceCulture); + } + } + /// /// Looks up a localized string similar to Port name. /// @@ -1688,6 +2273,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Port where health declaration was given. + /// + public static string textPortOfHealth { + get { + return ResourceManager.GetString("textPortOfHealth", resourceCulture); + } + } + /// /// Looks up a localized string similar to Port of itinerary. /// @@ -1697,6 +2291,33 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Port of registry. + /// + public static string textPortOfRegistry { + get { + return ResourceManager.GetString("textPortOfRegistry", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Ports of call of the last 30 days. + /// + public static string textPortsOfCallLast30Days { + get { + return ResourceManager.GetString("textPortsOfCallLast30Days", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Port where security declaration was given. + /// + public static string textPortWhereSimplWasGiven { + get { + return ResourceManager.GetString("textPortWhereSimplWasGiven", resourceCulture); + } + } + /// /// Looks up a localized string similar to Postalcode. /// @@ -1769,6 +2390,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Reason for invalid ISSC. + /// + public static string textReasonForInvalidISSC { + get { + return ResourceManager.GetString("textReasonForInvalidISSC", resourceCulture); + } + } + /// /// Looks up a localized string similar to Refresh. /// @@ -1778,6 +2408,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Reinspection sanitary control required?. + /// + public static string textReinspectionSanitaryControl { + get { + return ResourceManager.GetString("textReinspectionSanitaryControl", resourceCulture); + } + } + /// /// Looks up a localized string similar to Remarks. /// @@ -1814,6 +2453,60 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Sanitary control exemption or certificate on board?. + /// + public static string textSanitaryControlExemption { + get { + return ResourceManager.GetString("textSanitaryControlExemption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Date of sanitary measure. + /// + public static string textSanitaryMeasureDate { + get { + return ResourceManager.GetString("textSanitaryMeasureDate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Details of sanitary measure. + /// + public static string textSanitaryMeasureDetails { + get { + return ResourceManager.GetString("textSanitaryMeasureDetails", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Kind of sanitary measure. + /// + public static string textSanitaryMeasureKind { + get { + return ResourceManager.GetString("textSanitaryMeasureKind", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Place of sanitary measure. + /// + public static string textSanitaryMeasurePlace { + get { + return ResourceManager.GetString("textSanitaryMeasurePlace", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Kind of sanitary measures applied on board. + /// + public static string textSanitaryMeasuresApplied { + get { + return ResourceManager.GetString("textSanitaryMeasuresApplied", resourceCulture); + } + } + /// /// Looks up a localized string similar to Save. /// @@ -1850,6 +2543,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to SEC - Security. + /// + public static string textSEC { + get { + return ResourceManager.GetString("textSEC", resourceCulture); + } + } + /// /// Looks up a localized string similar to {0} seconds elapsed. /// @@ -1868,6 +2570,24 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Security matters. + /// + public static string textSecurityMatters { + get { + return ResourceManager.GetString("textSecurityMatters", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Security notification. + /// + public static string textSecurityNotification { + get { + return ResourceManager.GetString("textSecurityNotification", resourceCulture); + } + } + /// /// Looks up a localized string similar to Send to NSW. /// @@ -1913,6 +2633,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Ship-to-ship activity. + /// + public static string textShip2ShipActivity { + get { + return ResourceManager.GetString("textShip2ShipActivity", resourceCulture); + } + } + /// /// Looks up a localized string similar to Ship data. /// @@ -1958,6 +2687,33 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Ship security level. + /// + public static string textShipSecLevel { + get { + return ResourceManager.GetString("textShipSecLevel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Ship-to-ship acitivities. + /// + public static string textShipToShip { + get { + return ResourceManager.GetString("textShipToShip", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Has the ship visited an infected area (WHO)?. + /// + public static string textShipVisitedInfectedArea { + get { + return ResourceManager.GetString("textShipVisitedInfectedArea", resourceCulture); + } + } + /// /// Looks up a localized string similar to _Show as text. /// @@ -1967,6 +2723,33 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Sick animals or pets on board?. + /// + public static string textSickAnimalsOrPets { + get { + return ResourceManager.GetString("textSickAnimalsOrPets", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Sick persons on board?. + /// + public static string textSickPersonsOnBoard { + get { + return ResourceManager.GetString("textSickPersonsOnBoard", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Simplification available. + /// + public static string textSimplificationAvailable { + get { + return ResourceManager.GetString("textSimplificationAvailable", resourceCulture); + } + } + /// /// Looks up a localized string similar to Single hull. /// @@ -2039,6 +2822,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Street, number. + /// + public static string textStreetAndNumber { + get { + return ResourceManager.GetString("textStreetAndNumber", resourceCulture); + } + } + /// /// Looks up a localized string similar to Street / number. /// @@ -2129,6 +2921,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Total number of ill passengers greater than normal / expected?. + /// + public static string textTotalNumberIllHigherThanExpected { + get { + return ResourceManager.GetString("textTotalNumberIllHigherThanExpected", resourceCulture); + } + } + /// /// Looks up a localized string similar to Towage. /// @@ -2165,6 +2966,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Transport mode. + /// + public static string textTransportMode { + get { + return ResourceManager.GetString("textTransportMode", resourceCulture); + } + } + /// /// Looks up a localized string similar to Type for Locode.... /// @@ -2210,6 +3020,42 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Valid exemption. + /// + public static string textValidExemption { + get { + return ResourceManager.GetString("textValidExemption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Valid ISSC on board?. + /// + public static string textValidISSCOnBoard { + get { + return ResourceManager.GetString("textValidISSCOnBoard", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Vessel name. + /// + public static string textVesselName { + get { + return ResourceManager.GetString("textVesselName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Vessel type. + /// + public static string textVesselType { + get { + return ResourceManager.GetString("textVesselType", resourceCulture); + } + } + /// /// Looks up a localized string similar to Visa number. /// @@ -2219,6 +3065,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Visits of infected areas as declared by the WHO. + /// + public static string textVisitsInfectedAreas { + get { + return ResourceManager.GetString("textVisitsInfectedAreas", resourceCulture); + } + } + /// /// Looks up a localized string similar to Visit / transit. /// @@ -2246,6 +3101,78 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Amount of waste of this type that has been discharged at the last port of disposal. + /// + public static string textWasteAmountDischargedLastPort { + get { + return ResourceManager.GetString("textWasteAmountDischargedLastPort", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Amount to be disposed. + /// + public static string textWasteAmountToBeDisposed { + get { + return ResourceManager.GetString("textWasteAmountToBeDisposed", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Date of last disposal. + /// + public static string textWasteDateLastDisposal { + get { + return ResourceManager.GetString("textWasteDateLastDisposal", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Waste disposal service providers. + /// + public static string textWasteDisposalServiceProviders { + get { + return ResourceManager.GetString("textWasteDisposalServiceProviders", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Estimated waste/cargo residues amount generated between port of call and next port. + /// + public static string textWasteGeneratedUntilNextPort { + get { + return ResourceManager.GetString("textWasteGeneratedUntilNextPort", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Max.waste capacity on board. + /// + public static string textWasteMaxCapacity { + get { + return ResourceManager.GetString("textWasteMaxCapacity", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Port of delivery of remaining waste. + /// + public static string textWastePortOfDelivery { + get { + return ResourceManager.GetString("textWastePortOfDelivery", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Waste amount retained on board. + /// + public static string textWasteRetained { + get { + return ResourceManager.GetString("textWasteRetained", resourceCulture); + } + } + /// /// Looks up a localized string similar to Password is wrong!. /// diff --git a/ENI-2/ENI2/ENI2/Properties/Resources.resx b/ENI-2/ENI2/ENI2/Properties/Resources.resx index 791120bc..c51df2b7 100644 --- a/ENI-2/ENI2/ENI2/Properties/Resources.resx +++ b/ENI-2/ENI2/ENI2/Properties/Resources.resx @@ -850,4 +850,313 @@ Passenger + + Waste residue notification + + + Accurate and correct details given? + + + Amount of planned waste disposal + + + cbm + + + Last port where waste or cargo residues where discharged + + + Valid exemption + + + Amount of waste of this type that has been discharged at the last port of disposal + + + Amount to be disposed + + + Date of last disposal + + + Waste disposal service providers + + + Estimated waste/cargo residues amount generated between port of call and next port + + + Max.waste capacity on board + + + Port of delivery of remaining waste + + + Waste amount retained on board + + + Beam over all + + + Call sign + + + Company Id + + + Country + + + Inmarsat call number + + + ISM company + + + Length over all + + + MMSI number + + + Port of registry + + + Street, number + + + Transport mode + + + Vessel name + + + Vessel type + + + Activity type + + + Approved security plan on board? + + + Chief security officer (CSO) + + + Current ship security level + + + Date from + + + Date to + + + General cargo description + + + GISIS code of the port facility according to ISPS + + + Incoming journey to port of call - ETA NOK + + + ISSC + + + ISSC expiration date + + + ISSC issuer name + + + ISSC issuer type + + + ISSC type + + + Kiel Canal passage planned? + + + Last 10 port facilities called + + + Latitude decimal + + + Latitude degrees + + + Latitude minutes + + + Latitude seconds + + + Location UNLOCODE + + + Location name + + + Longitude decimal + + + Longitude degrees + + + Longitude minutes + + + Longitude seconds + + + Outgoing journey from port of call - ETA NOK + + + Port country + + + Port facility of arrival + + + Port UNLOCODE + + + Port where security declaration was given + + + Reason for invalid ISSC + + + SEC - Security + + + Security matters + + + Security notification + + + Ship security level + + + Ship-to-ship acitivities + + + Simplification available + + + Valid ISSC on board? + + + Ship-to-ship activity + + + Any sanitary measures applied? + + + Are you aware of any condition on board which may lead to further infections? + + + Is there on board or has there been during the international voyage any case of disease which you suspect to be of an infectious nature? + + + Draught on departure + + + Draught on departure in decimetre + + + Joining location (separated by comma) + + + Maritime health declaration + + + Was a medical practitioner consulted? + + + Number of deaths + + + Number of ill persons + + + Has any person died on board during the voyage otherwise than as a result of accident? + + + Persons on board departure + + + Port where health declaration was given + + + Ports of call of the last 30 days + + + Reinspection sanitary control required? + + + Sanitary control exemption or certificate on board? + + + Kind of sanitary measures applied on board + + + Has the ship visited an infected area (WHO)? + + + Sick animals or pets on board? + + + Sick persons on board? + + + Total number of ill passengers greater than normal / expected? + + + Visits of infected areas as declared by the WHO + + + Place of issue + + + Date of issue + + + Did any crew members join the ship at this port? + + + Crew members joined (comma separated) + + + Names of joined crew members + + + Any sanitary measures applied? + + + Has the ship visited an infected area (WHO)? + + + Infected area date + + + Infected area port + + + Date of sanitary measure + + + Kind of sanitary measure + + + Place of sanitary measure + + + Infected area visited + + + Details of sanitary measure + \ No newline at end of file diff --git a/ENI-2/ENI2/ENI2/Util/GlobalStructures.cs b/ENI-2/ENI2/ENI2/Util/GlobalStructures.cs index ce724bd7..74d0921d 100644 --- a/ENI-2/ENI2/ENI2/Util/GlobalStructures.cs +++ b/ENI-2/ENI2/ENI2/Util/GlobalStructures.cs @@ -12,6 +12,7 @@ namespace ENI2.Util { class GlobalStructures { + private static List itemList = null; public static string[] GenderList = { @@ -30,5 +31,51 @@ namespace ENI2.Util Properties.Resources.textOtherLegalIdentityDocument }; + public static string[] ShipSecurityLevels = { "1", "2", "3" }; + + public static string[] edifact8025Codes = + { + "", + "Cargo operations", + "Passenger movement", + "Taking bunkers", + "Changing crew", + "Goodwill visit", + "Taking supplies", + "Repair", + "Laid-up", + "Awaiting orders", + "Miscellaneous", + "Crew movement", + "Cruise, leisure and recreation", + "Under government order", + "Quarantine inspection", + "Refuge", + "Unloading cargo", + "Loading cargo", + "Repair in dry dock", + "Repair in wet dock", + "Cargo tank cleaning", + "Means of transport customs clearance", + "De-gassing", + "Waste disposal" + }; + + + public static List EdiCodes + { + get + { + if (itemList == null) + { + itemList = new List(); + itemList.Add(""); + for (int i = 1; i < Util.GlobalStructures.edifact8025Codes.Length; i++) + itemList.Add(string.Format("{0} - {1}", i, Util.GlobalStructures.edifact8025Codes[i])); + } + return itemList; + } + } + } } diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index 133da522fa44cb5de99f1ab2f448e4ee4d6fa04e..5b12652f2fee60fe222e08d2e8a28318c69a991c 100644 GIT binary patch delta 19246 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 delta 19087 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
sKtHJIna%XJHpZ5EojCL zA5uT}(L5LsdSm4_D#)O1(tO?VvuZPRc+p%MVGVS03^I2^TMy`}5g(YS&=^RfoFQ`H zfiA=DVH2kny2YjshWB&Rhq4Wa)9~m&{K&o5Bdkts3M_0>^Gs$_QPnppl(zbBn8a6 z4OCxOzLl^POlG?xQ09=SFB^hFXVewK9`zrzF*Icvzl#&C~L z$yEIfz|n8@*ku39uogpQ_e1P~cmMRKc_`o!YLj1$=vm<%;e3PDBLCwbFo>2AfC~_C zM`Zy-fLMQG1<~8w$Ko;-8a4=S2srEgjoc~=7k|H8QYmP@pKejb9gW$QO^%jt8E2VN zo@RDE9k@{JP}HuezgB+~HT$_8o1qz>_4Sp&>`Sff!-DyMD0(LY%AAx()SirXGZI;8 z2~v`JC`YAGZ}z3AVS+k>!J!ln;h*9}(*}`W$_Vjh4J5s=26d_8Ndw-3>!erNG>xC3 zp8C5?;o>stPkZ;!VCeTLU*5M`}N5Pz2z01s| zS^MjiHwvJCjion7_}qh5Q}WNn_Ozg&V*E908ahZW=uP~y&LB=L6i0T(s;8__^VlO6 zV3;FgxhLFiI|>FIU9fdC46nk}K7H$!dX2FtIaHe*vl*OV`lF(;VW1Gu-gLBW2}y}t zsq%q_c8Vd33~N+x&>jnoLuO`{Vx>X`=5dhGEPJ$idHeoE{2p)l*-P;x1JZ5fWUvBJ zV8Jt-NrSxBsuf}a^>by^?Jg)uG1XS(lx2%d)fZf=AP3O=Y{274(J#Q}=b#_1gZH

-g3Rbhf--4|{b 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 diff --git a/nsw/Source/bsmd.database/DBManager.cs b/nsw/Source/bsmd.database/DBManager.cs index 210b59d9..0470777d 100644 --- a/nsw/Source/bsmd.database/DBManager.cs +++ b/nsw/Source/bsmd.database/DBManager.cs @@ -532,11 +532,13 @@ namespace bsmd.database public void Delete(DatabaseEntity entity) { - SqlCommand cmd = new SqlCommand(); - entity.PrepareDelete(cmd); - int queryResult = this.PerformNonQuery(cmd); - this.LogNonQueryResult(cmd.CommandText, queryResult); - + if (!entity.IsNew) + { + SqlCommand cmd = new SqlCommand(); + entity.PrepareDelete(cmd); + int queryResult = this.PerformNonQuery(cmd); + this.LogNonQueryResult(cmd.CommandText, queryResult); + } if (this._closeConnectionAfterUse) this.Disconnect(); } diff --git a/nsw/Source/bsmd.database/PortOfCallLast30Days.cs b/nsw/Source/bsmd.database/PortOfCallLast30Days.cs index af014f68..9566f8af 100644 --- a/nsw/Source/bsmd.database/PortOfCallLast30Days.cs +++ b/nsw/Source/bsmd.database/PortOfCallLast30Days.cs @@ -9,6 +9,7 @@ using System; using System.Data; +using System.Text; using System.Data.SqlClient; using System.Collections.Generic; @@ -44,6 +45,74 @@ namespace bsmd.database public string Identifier { get; set; } + ///

+ /// Hilfsproperty, um eine kommaseparierte Liste von Crew (analog ANSW) im ENI-2 anzuzeigen, + /// + public string CrewMembersJoinedText + { + get + { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < this.CrewJoinedShip.Count; i++) + { + if (i > 0) + sb.Append(", "); + sb.Append(this.CrewJoinedShip[i].PortOfCallLast30DaysCrewJoinedShipName); + } + return sb.ToString(); + } + set + { + if (value.IsNullOrEmpty()) + { + foreach (PortOfCallLast30DaysCrewJoinedShip wdsp in this.CrewJoinedShip) + DBManager.Instance.Delete(wdsp); + this.CrewJoinedShip.Clear(); + } + else + { + string[] crewNames = value.Split(','); + List foundList = new List(); + + for (int i = 0; i < crewNames.Length; i++) + { + string crewName = crewNames[i].Trim(); + if (crewName.Length > 0) + { + PortOfCallLast30DaysCrewJoinedShip matchingCrew = null; + foreach (PortOfCallLast30DaysCrewJoinedShip wdsp in this.CrewJoinedShip) + { + if (wdsp.PortOfCallLast30DaysCrewJoinedShipName.Equals(crewName, StringComparison.OrdinalIgnoreCase)) + { + matchingCrew = wdsp; + break; + } + } + if (matchingCrew != null) + { + foundList.Add(matchingCrew); + this.CrewJoinedShip.Remove(matchingCrew); + } + else + { + PortOfCallLast30DaysCrewJoinedShip newPoC30Crew = new PortOfCallLast30DaysCrewJoinedShip(); + newPoC30Crew.PortOfCallLast30Days = this; + newPoC30Crew.PortOfCallLast30DaysCrewJoinedShipName = crewName; + foundList.Add(newPoC30Crew); + } + } + } + + // remove remaining crew (no longer valid) + foreach (PortOfCallLast30DaysCrewJoinedShip remainingCrew in this.CrewJoinedShip) + DBManager.Instance.Delete(remainingCrew); + this.CrewJoinedShip.Clear(); + // add existing and new crew + this.CrewJoinedShip.AddRange(foundList); + } + } + } + #endregion #region abstract class implementation diff --git a/nsw/Source/bsmd.database/STAT.cs b/nsw/Source/bsmd.database/STAT.cs index d8294a6d..99d92cd4 100644 --- a/nsw/Source/bsmd.database/STAT.cs +++ b/nsw/Source/bsmd.database/STAT.cs @@ -145,6 +145,10 @@ namespace bsmd.database [MaxLength(35)] public string CertificateOfRegistryNumber { get; set; } + public static Dictionary VesselTypeDict { get; set; } + + public static Dictionary TransportModeDict { get; set; } + #endregion #region abstract class implementation diff --git a/nsw/Source/bsmd.database/Util.cs b/nsw/Source/bsmd.database/Util.cs index f354d9eb..b19f2c8f 100644 --- a/nsw/Source/bsmd.database/Util.cs +++ b/nsw/Source/bsmd.database/Util.cs @@ -165,5 +165,23 @@ namespace bsmd.database return result; } + #region CoordinateTransformation + + public static double NSWToDecimalDegrees(int nswCoordinate) + { + double result = Math.Floor(nswCoordinate / 600000.0); + result += (double) (nswCoordinate % 600000.0) / 600000.0; + return result; + } + + public static int DecimalDegreesToNSW(double decimalDegree) + { + int result = ((int)decimalDegree) * 600000; + result += (int) ((decimalDegree - (int)decimalDegree) * 600000); + return result; + } + + #endregion + } } diff --git a/nsw/Source/bsmd.database/WAS.cs b/nsw/Source/bsmd.database/WAS.cs index 257cd959..ca6dc908 100644 --- a/nsw/Source/bsmd.database/WAS.cs +++ b/nsw/Source/bsmd.database/WAS.cs @@ -8,7 +8,7 @@ // Copyright (c) 2015 Informatikbüro Daniel Schick. All rights reserved. using System; -using System.Data; +using System.Text; using System.Data.SqlClient; using System.Collections.Generic; @@ -65,6 +65,75 @@ namespace bsmd.database public List WasteDisposalServiceProvider { get { return this.wdsp; } } + /// + /// Hilfsproperty, um eine kommaseparierte Liste von WasteDisposalServiceProvider (analog ANSW) im ENI-2 anzuzeigen, + /// bzw im Setter um eine kommaseparierte Liste mit den WasteDisposalServiceProvider Entitäten abzugleichen + /// + public string WasteDisposalServiceProviderText + { + get + { + StringBuilder sb = new StringBuilder(); + for(int i=0;i 0) + sb.Append(", "); + sb.Append(this.WasteDisposalServiceProvider[i].WasteDisposalServiceProviderName); + } + return sb.ToString(); + } + set + { + if (value.IsNullOrEmpty()) + { + foreach (WasteDisposalServiceProvider wdsp in this.WasteDisposalServiceProvider) + DBManager.Instance.Delete(wdsp); + this.WasteDisposalServiceProvider.Clear(); + } + else + { + string[] serviceProviderNames = value.Split(','); + List foundList = new List(); + + for (int i=0;i 0) + { + WasteDisposalServiceProvider matchingServiceProvider = null; + foreach(WasteDisposalServiceProvider wdsp in this.WasteDisposalServiceProvider) + { + if(wdsp.WasteDisposalServiceProviderName.Equals(serviceProviderName, StringComparison.OrdinalIgnoreCase)) + { + matchingServiceProvider = wdsp; + break; + } + } + if(matchingServiceProvider != null) + { + foundList.Add(matchingServiceProvider); + this.WasteDisposalServiceProvider.Remove(matchingServiceProvider); + } + else + { + WasteDisposalServiceProvider newWDSP = new WasteDisposalServiceProvider(); + newWDSP.WAS = this; + newWDSP.WasteDisposalServiceProviderName = serviceProviderName; + foundList.Add(newWDSP); + } + } + } + + // remove remaining service provider (no longer valid) + foreach (WasteDisposalServiceProvider remainingProvider in this.WasteDisposalServiceProvider) + DBManager.Instance.Delete(remainingProvider); + this.WasteDisposalServiceProvider.Clear(); + // add existing and new providers + this.WasteDisposalServiceProvider.AddRange(foundList); + } + } + } + #endregion #region DatabaseEntity implementation diff --git a/nsw/Source/misc/db.sqlite b/nsw/Source/misc/db.sqlite index adb5f4365b4cc41bec9090a308c0c3102ad58b39..ebf2a3d54801215bf418e2882f0134da46c66f55 100644 GIT binary patch delta 25896 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