From f45fe9178d36546054761e9cbd0b97fb8338cafd Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Fri, 21 Jun 2024 15:26:13 +0200 Subject: [PATCH 01/66] Added disclaimer and data security file (taken from Word doc) --- misc/disclaimer.html | 67 ++++++++++++++++++++++++++++++++ src/BreCalClient/MainWindow.xaml | 6 +-- 2 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 misc/disclaimer.html diff --git a/misc/disclaimer.html b/misc/disclaimer.html new file mode 100644 index 0000000..7341c15 --- /dev/null +++ b/misc/disclaimer.html @@ -0,0 +1,67 @@ + + + + Information gemäß Art. 13 und Art. 14 DSGVO für Auftraggeber Software BremenCalling + + + +

Information gemäß Art. 13 und Art. 14 DSGVO für Auftraggeber +Software BremenCalling

+
+Hier erhalten Sie Informationen gem. Art. 13 DSGVO über unseren Umgang mit Ihren Daten, wenn Sie die von uns betriebene Software „Bremen Calling“ nutzen. +

+Verantwortlicher: +

+ +

+BREMER SCHIFFSMELDEDIENST Kapt. P. Langbein e.K.
+Vertreten durch die Geschäftsführer Bastian Güttner und Benjamin Wiese
+Hafenkopf II / Überseetor 20, 28217 Bremen / Germany
+Tel. +49 (0) 421 38 48 27
+E-Mail : report@bsmd.de
+

+ +

Zweck der Datenverarbeitung:

+ +

Rechtsgrundlage für die Datenverarbeitung:

+Art. 6 Abs. 1 lit. b DSGVO (Vertrag, vorvertragliche Maßnahmen auf Anfrage der betroffenen Person) +

Berechtigte Interesse des Verantwortlichen:

+Hier nicht einschlägig. + +

Wozu benötigen wir Ihre Daten? („Hintergründe für die Bereitstellung der Daten“):

+Wenn Sie unsere Software nutzen möchten, müssen wir Sie als Benutzer einrichten. Dies geschieht auf der Grundlage Ihrer (firmenbezogenen) E-Mail-Adresse und Ihres Namens. +

Holen wir bei anderen Stellen außer bei Ihnen selber Informationen über Sie ein?

+Nein. +

Empfänger der Daten:

+Wir verarbeiten Ihre Daten nur innerhalb des BSMD. +

Übermittlung in Drittländer:

+Eine Übermittlung Ihrer Daten in Staaten außerhalb der EU findet nicht statt. +

Dauer der Speicherung:

+Wir speichern Ihre Daten, solange wie Ihr Vertrag zur Nutzung unserer Software mit Ihnen besteht. Nach dem Ende unserer Geschäftsbeziehung stellen wir Ihre Benutzerdaten inaktiv und löschen sie nach sechs Monaten. Wir erarbeiten derzeit ein Löschkonzept, das ein systematisches Löschen von personenbezogenen Daten ermöglicht. +

Ihre Rechte in Bezug auf Ihre Daten:

+

+Sie können von uns Auskunft verlangen ob wir persönliche Daten von Ihnen speichern, und wenn ja, welche das sind und was wir damit tun (Art. 15 DSGVO). +

+

+Sollten wir unrichtige oder unvollständige Daten von Ihnen haben, können Sie die Berichtigung dieser Daten verlangen (Art. 16 DSGVO). +

+

+Sie können auch die Löschung Ihrer Daten verlangen (Art. 17 DSGVO). Es kann jedoch Gründe geben, aus denen wir Ihre Daten trotz Ihres Wunsches nicht löschen dürfen oder löschen müssen. Diese Gründe bestimmt das Gesetz. Wenn Sie von uns die Löschung Ihrer Daten verlangen, werden wir prüfen, ob möglicherweise solche Gründe vorliegen. Wenn nicht, löschen wir Ihre Daten. Die Alternative zur Löschung Ihrer Daten ist in bestimmten Fällen die Einschränkung der Verarbeitung Ihrer personenbezogenen Daten (Art. 18 DSGVO). Auch dabei gilt: lassen Sie uns wissen, wie Sie verfahren wollen, dann prüfen wir die gesetzlichen Vorgaben und finden einen Weg, der Ihre und unsere Interessen ausgleicht. +

+

+Art. 20 DSGVO sieht vor, dass wir Ihnen in bestimmten Fällen Ihre persönlichen Daten in einem strukturierten, gängigen und maschinenlesbaren Format zur Verfügung stellen müssen, wenn Sie es wünschen. +

+

+Möchten Sie von Ihren hier beschriebenen Rechten Gebrauch machen, genügt eine E-Mail an bremencalling@bsmd.de. +

+

+Wenn Sie der Meinung sind, dass wir die Datenschutzvorgaben für die Verarbeitung Ihrer Daten auf diesen Webseiten nicht einhalten, können Sie sich bei einer Datenschutz-Aufsichtsbehörde beschweren. Eine Liste der in Deutschland zuständigen Datenschutz-Aufsichtsbehörden finden Sie hier: +https://www.bfdi.bund.de/DE/Infothek/Anschriften_Links/anschriften_links-node.html. +

+
+

+Stand dieser Datenschutzinformationen: April 2024 +

+ \ No newline at end of file diff --git a/src/BreCalClient/MainWindow.xaml b/src/BreCalClient/MainWindow.xaml index b05c5e8..b1b3a6a 100644 --- a/src/BreCalClient/MainWindow.xaml +++ b/src/BreCalClient/MainWindow.xaml @@ -43,9 +43,9 @@ diff --git a/src/BreCalClient/SearchFilterControl.xaml.cs b/src/BreCalClient/SearchFilterControl.xaml.cs index c176c27..73f8b83 100644 --- a/src/BreCalClient/SearchFilterControl.xaml.cs +++ b/src/BreCalClient/SearchFilterControl.xaml.cs @@ -212,6 +212,13 @@ namespace BreCalClient { this._model.MineOnly = this.checkBoxOwn.IsChecked; SearchFilterChanged?.Invoke(); + } + + private void toggleButton24Hrs_Click(object sender, System.Windows.RoutedEventArgs e) + { + this.datePickerETAFrom.SelectedDate = DateTime.Now; + this.datePickerETATo.SelectedDate = DateTime.Now.AddDays(1); + SearchFilterChanged?.Invoke(); } #endregion From bc6a9e95ea9db6b41ab658fa63867d70ecbe327b Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Mon, 24 Jun 2024 15:27:09 +0200 Subject: [PATCH 07/66] Removed compiler message --- src/BreCalClient/EditTimesAgencyIncomingControl.xaml.cs | 2 +- src/BreCalClient/EditTimesAgencyOutgoingControl.xaml.cs | 2 +- src/BreCalClient/EditTimesAgencyShiftingControl.xaml.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/BreCalClient/EditTimesAgencyIncomingControl.xaml.cs b/src/BreCalClient/EditTimesAgencyIncomingControl.xaml.cs index 58cbac4..82b033c 100644 --- a/src/BreCalClient/EditTimesAgencyIncomingControl.xaml.cs +++ b/src/BreCalClient/EditTimesAgencyIncomingControl.xaml.cs @@ -94,7 +94,7 @@ namespace BreCalClient if (this.comboBoxPierside.SelectedIndex >= 0) { - this.ShipcallModel.Shipcall.PierSide = (this.comboBoxPierside.SelectedIndex == 0) ? true : false; + this.ShipcallModel.Shipcall.PierSide = (this.comboBoxPierside.SelectedIndex == 0); } else { diff --git a/src/BreCalClient/EditTimesAgencyOutgoingControl.xaml.cs b/src/BreCalClient/EditTimesAgencyOutgoingControl.xaml.cs index fcc4d7d..94748c1 100644 --- a/src/BreCalClient/EditTimesAgencyOutgoingControl.xaml.cs +++ b/src/BreCalClient/EditTimesAgencyOutgoingControl.xaml.cs @@ -104,7 +104,7 @@ namespace BreCalClient if (this.comboBoxPierside.SelectedIndex >= 0) { - this.ShipcallModel.Shipcall.PierSide = (this.comboBoxPierside.SelectedIndex == 0) ? true : false; + this.ShipcallModel.Shipcall.PierSide = (this.comboBoxPierside.SelectedIndex == 0); } else { diff --git a/src/BreCalClient/EditTimesAgencyShiftingControl.xaml.cs b/src/BreCalClient/EditTimesAgencyShiftingControl.xaml.cs index 5837881..c7b588c 100644 --- a/src/BreCalClient/EditTimesAgencyShiftingControl.xaml.cs +++ b/src/BreCalClient/EditTimesAgencyShiftingControl.xaml.cs @@ -98,7 +98,7 @@ namespace BreCalClient this.ShipcallModel.Shipcall.DepartureBerthId = (int)this.comboBoxDepartureBerth.SelectedValue; if (this.comboBoxPiersideArrival.SelectedIndex >= 0) { - this.ShipcallModel.Shipcall.PierSide = (this.comboBoxPiersideArrival.SelectedIndex == 0) ? true : false; + this.ShipcallModel.Shipcall.PierSide = (this.comboBoxPiersideArrival.SelectedIndex == 0); } else { From 36e853fcda53977ee044d66dd62d215095be195a Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Tue, 25 Jun 2024 08:22:25 +0200 Subject: [PATCH 08/66] Enter Agency Time as highlighted suggestion for other participants (not terminal) --- src/BreCalClient/EditTimesControl.xaml.cs | 22 +++++++++++++++++++--- src/BreCalClient/MainWindow.xaml.cs | 4 ++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/BreCalClient/EditTimesControl.xaml.cs b/src/BreCalClient/EditTimesControl.xaml.cs index b09a40e..09d421d 100644 --- a/src/BreCalClient/EditTimesControl.xaml.cs +++ b/src/BreCalClient/EditTimesControl.xaml.cs @@ -7,6 +7,7 @@ using BreCalClient.misc.Model; using System; using System.Windows; using System.Windows.Media.Imaging; +using Xceed.Wpf.Toolkit; namespace BreCalClient { @@ -27,7 +28,9 @@ namespace BreCalClient #region Properties - public Times Times { get; set; } = new(); + public Times Times { get; set; } = new(); + + public Times? AgencyTimes { get; set; } = new(); public ShipcallControlModel ShipcallModel { get; set; } = new(); @@ -36,9 +39,9 @@ namespace BreCalClient #region event handler private void Window_Loaded(object sender, RoutedEventArgs e) - { - this.CopyToControls(); + { this.EnableControls(); + this.CopyToControls(); } private void buttonOK_Click(object sender, RoutedEventArgs e) @@ -93,7 +96,20 @@ namespace BreCalClient { this.textBoxRemarks.Text = this.Times.Remarks; this.datePickerETABerth.Value = this.Times.EtaBerth; + if(this.datePickerETABerth.IsEnabled && (this.Times.EtaBerth == null) && (this.AgencyTimes?.EtaBerth != null) && (ShipcallModel.Shipcall?.Type == ShipcallType.Arrival)) + { + this.datePickerETABerth.Value = this.AgencyTimes.EtaBerth; + WatermarkTextBox? tb = this.datePickerETABerth.Template.FindName("PART_TextBox", this.datePickerETABerth) as WatermarkTextBox; + if (tb != null) { tb.Focus(); tb.SelectAll(); } + } this.datePickerETDBerth.Value = this.Times.EtdBerth; + if(this.datePickerETDBerth.IsEnabled && (this.Times.EtdBerth == null) && (this.AgencyTimes?.EtdBerth != null) && ((ShipcallModel.Shipcall?.Type == ShipcallType.Departure) || (ShipcallModel.Shipcall?.Type == ShipcallType.Shifting))) + { + this.datePickerETDBerth.Value = this.AgencyTimes.EtdBerth; + WatermarkTextBox? tb = this.datePickerETDBerth.Template.FindName("PART_TextBox", this.datePickerETDBerth) as WatermarkTextBox; + if (tb != null) tb.SelectAll(); + } + this.datePickerLockTime.Value = this.Times.LockTime; this.datePickerZoneEntry.Value = this.Times.ZoneEntry; this.datePickerATA.Value = this.Times.Ata; diff --git a/src/BreCalClient/MainWindow.xaml.cs b/src/BreCalClient/MainWindow.xaml.cs index 38aa748..8c79de2 100644 --- a/src/BreCalClient/MainWindow.xaml.cs +++ b/src/BreCalClient/MainWindow.xaml.cs @@ -854,10 +854,14 @@ namespace BreCalClient if( obj.ShipcallControlModel == null) { return; } if (!obj.ShipcallControlModel.AssignedParticipants.ContainsKey(participantType)) return; // no assigment means no dialog my friend + Times? agencyTimes = obj.ShipcallControlModel.GetTimesForParticipantType(ParticipantType.AGENCY); + // show a dialog that lets the user create / update times for the given shipcall IEditTimesControl etc = (participantType == ParticipantType.TERMINAL) ? new EditTimesTerminalControl() : new EditTimesControl(); etc.Title = obj.ShipcallControlModel.Title; etc.ShipcallModel = obj.ShipcallControlModel; + if (etc is EditTimesControl control) + control.AgencyTimes = agencyTimes; bool wasEdit = false; if (times != null) From 71a8b445329e0558b8b3040d69d787074257eb53 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Thu, 27 Jun 2024 16:41:33 +0200 Subject: [PATCH 09/66] fixed bug in search filter where time component wasnt cut of (as expected) --- src/BreCalClient/SearchFilterControl.xaml | 2 +- src/BreCalClient/SearchFilterControl.xaml.cs | 11 +++-------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/BreCalClient/SearchFilterControl.xaml b/src/BreCalClient/SearchFilterControl.xaml index e964861..b2a941a 100644 --- a/src/BreCalClient/SearchFilterControl.xaml +++ b/src/BreCalClient/SearchFilterControl.xaml @@ -8,7 +8,7 @@ xmlns:api="clr-namespace:BreCalClient.misc.Model" xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" mc:Ignorable="d" - d:DesignHeight="56" d:DesignWidth="800" Loaded="UserControl_Loaded"> + d:DesignHeight="56" d:DesignWidth="800"> diff --git a/src/BreCalClient/SearchFilterControl.xaml.cs b/src/BreCalClient/SearchFilterControl.xaml.cs index 73f8b83..92ac773 100644 --- a/src/BreCalClient/SearchFilterControl.xaml.cs +++ b/src/BreCalClient/SearchFilterControl.xaml.cs @@ -128,22 +128,17 @@ namespace BreCalClient private void logoImage_MouseUp(object sender, MouseButtonEventArgs e) { LogoImageClicked?.Invoke(); - } - - private void UserControl_Loaded(object sender, System.Windows.RoutedEventArgs e) - { - - } + } private void datePickerETAFrom_SelectedDateChanged(object sender, SelectionChangedEventArgs e) { - this._model.EtaFrom = this.datePickerETAFrom.SelectedDate; + this._model.EtaFrom = this.datePickerETAFrom.SelectedDate?.Date; SearchFilterChanged?.Invoke(); } private void datePickerETATo_SelectedDateChanged(object sender, SelectionChangedEventArgs e) { - this._model.EtaTo = datePickerETATo.SelectedDate; + this._model.EtaTo = datePickerETATo.SelectedDate?.Date; SearchFilterChanged?.Invoke(); } From bb956d479266574ff05ba9421903ac33579b1c82 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Thu, 27 Jun 2024 16:47:09 +0200 Subject: [PATCH 10/66] include last minute for day filter --- src/BreCalClient/MainWindow.xaml.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/BreCalClient/MainWindow.xaml.cs b/src/BreCalClient/MainWindow.xaml.cs index 8c79de2..c564a67 100644 --- a/src/BreCalClient/MainWindow.xaml.cs +++ b/src/BreCalClient/MainWindow.xaml.cs @@ -513,7 +513,7 @@ namespace BreCalClient this.FilterShipcalls(); await uiLock.WaitAsync(); - this.UpdateUI(); + this.UpdateUI(); } } catch(Exception ex) @@ -707,7 +707,7 @@ namespace BreCalClient _ = this._visibleControlModels.RemoveAll(x => { Times? t = x.GetTimesForParticipantType(ParticipantType.AGENCY); - DateTime refValue = sfm.EtaTo.Value.AddMinutes(1439); // 23:59 + DateTime refValue = sfm.EtaTo.Value.AddMinutes(1440); // including 23:59 switch (x.Shipcall?.Type) { case ShipcallType.Arrival: From 570a227b783b7bd09d0a1f99c3359347643f7967 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Fri, 28 Jun 2024 10:46:15 +0200 Subject: [PATCH 11/66] Simplified input text filtering: If user enters 10 digits, then these are split up for the date --- src/BreCalClient/DateTimePickerExt.cs | 11 +++++ .../EditTimesAgencyOutgoingControl.xaml | 2 +- .../EditTimesAgencyOutgoingControl.xaml.cs | 45 +------------------ 3 files changed, 14 insertions(+), 44 deletions(-) diff --git a/src/BreCalClient/DateTimePickerExt.cs b/src/BreCalClient/DateTimePickerExt.cs index e448d34..a86fd47 100644 --- a/src/BreCalClient/DateTimePickerExt.cs +++ b/src/BreCalClient/DateTimePickerExt.cs @@ -15,6 +15,15 @@ namespace BreCalClient string text = this.Text + e.Text; if (this.Template.FindName("PART_TextBox", this) is not WatermarkTextBox tb) return; + if (Regex.IsMatch(text, @"^\d{10}")) + { + e.Handled = true; + tb.Text = Regex.Replace(text, @"(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})", "$1.$2.20$3 $4:$5"); + tb.CaretIndex = tb.Text.Length; + tb.SelectedText = ""; + } + + /* if (Regex.IsMatch(text, @"^\d{3}")) { e.Handled = true; @@ -39,6 +48,8 @@ namespace BreCalClient tb.Text = Regex.Replace(text, @"(\d{2}\.\d{2}\.\d{4} \d{2})(\d)", "$1:$2"); tb.CaretIndex = tb.Text.Length; } + */ + } } } diff --git a/src/BreCalClient/EditTimesAgencyOutgoingControl.xaml b/src/BreCalClient/EditTimesAgencyOutgoingControl.xaml index 92c0ed8..5de2857 100644 --- a/src/BreCalClient/EditTimesAgencyOutgoingControl.xaml +++ b/src/BreCalClient/EditTimesAgencyOutgoingControl.xaml @@ -45,7 +45,7 @@ - +