// Copyright (c) 2017 schick Informatik // Description: Detailansicht NOA_NOD, AGNT // using System; using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using System.Diagnostics; using bsmd.database; using ENI2.EditControls; using ENI2.Util; namespace ENI2.DetailViewControls { /// /// Interaction logic for PortCallDetailControl.xaml /// public partial class PortCallDetailControl : DetailBaseControl { #region Fields private NOA_NOD _noa_nod; private AGNT _agnt; private static List _agntTemplates = null; private AGNT_Template _currentTemplate; private AGNT_Template _undoTemplate; #endregion #region Construction public PortCallDetailControl() { InitializeComponent(); this.Loaded += PortCallDetailControl_Loaded; } #endregion #region Loading / initialize private void PortCallDetailControl_Loaded(object sender, RoutedEventArgs e) { // NOA_NOD this.RegisterDateTimePickerChange(this.dateTimePicker_ETAToKielCanal, Message.NotificationClass.NOA_NOD); this.RegisterDateTimePickerChange(this.dateTimePicker_ETAToNextPort, Message.NotificationClass.NOA_NOD); this.RegisterDateTimePickerChange(this.dateTimePicker_ETAToPortOfCall, Message.NotificationClass.NOA_NOD); this.RegisterDateTimePickerChange(this.dateTimePicker_ETDFromKielCanal, Message.NotificationClass.NOA_NOD); this.RegisterDateTimePickerChange(this.dateTimePicker_ETDFromLastPort, Message.NotificationClass.NOA_NOD); this.RegisterDateTimePickerChange(this.dateTimePicker_ETDFromPortOfCall, Message.NotificationClass.NOA_NOD); this.RegisterLocodeChange(this.locodeControl_LastPort, Message.NotificationClass.NOA_NOD); this.RegisterLocodeChange(this.locodeControl_NextPort, Message.NotificationClass.NOA_NOD); this.RegisterCheckboxChange(this.checkBox_IsAnchored, Message.NotificationClass.NOA_NOD); // AGNT this.RegisterTextboxChange(this.textBox_AgentCity, Message.NotificationClass.AGNT); this.RegisterTextboxChange(this.textBox_AgentCompanyName, Message.NotificationClass.AGNT); this.RegisterTextboxChange(this.textBox_AgentEMail, Message.NotificationClass.AGNT); this.RegisterTextboxChange(this.textBox_AgentFax, Message.NotificationClass.AGNT); this.RegisterTextboxChange(this.textBox_AgentFirstName, Message.NotificationClass.AGNT); this.RegisterTextboxChange(this.textBox_AgentLastName, Message.NotificationClass.AGNT); this.RegisterTextboxChange(this.textBox_AgentPhone, Message.NotificationClass.AGNT); this.RegisterTextboxChange(this.textBox_AgentPostalCode, Message.NotificationClass.AGNT); this.RegisterTextboxChange(this.textBox_AgentStreetAndNumber, Message.NotificationClass.AGNT); this.RegisterTextboxChange(this.textBox_AgentCountry, Message.NotificationClass.AGNT); this.buttonSaveTemplate.IsEnabled = DBManager.Instance.GetReportingPartyDict()[App.UserId.Value].IsEditor; this.buttonDeleteTemplate.IsEnabled = DBManager.Instance.GetReportingPartyDict()[App.UserId.Value].IsEditor; } public async override void Initialize() { base.Initialize(); foreach (Message aMessage in this.Messages) { if (aMessage.MessageNotificationClass == Message.NotificationClass.NOA_NOD) { if (aMessage.Elements.Count > 0) _noa_nod = aMessage.Elements[0] as NOA_NOD; else _noa_nod = new NOA_NOD(); // TODO this.ControlMessages.Add(aMessage); } if(aMessage.MessageNotificationClass == Message.NotificationClass.AGNT) { if (aMessage.Elements.Count > 0) _agnt = aMessage.Elements[0] as AGNT; else _agnt = new AGNT(); this.ControlMessages.Add(aMessage); } } this.dateTimePicker_ETAToKielCanal.IsEnabled = this.Core.IsTransit; this.dateTimePicker_ETDFromKielCanal.IsEnabled = this.Core.IsTransit; this.dateTimePicker_ETAToPortOfCall.IsEnabled = !this.Core.IsTransit; this.dateTimePicker_ETDFromPortOfCall.IsEnabled = !this.Core.IsTransit; this.noaNodGroupBox.DataContext = _noa_nod; this.locodeControl_LastPort.DataContext = _noa_nod; this.locodeControl_NextPort.DataContext = _noa_nod; this.dataGridCallPurposes.Initialize(); this.dataGridCallPurposes.ItemsSource = _noa_nod.CallPurposes; this.dataGridCallPurposes.EditRequested += DataGridCallPurposes_EditRequested; this.dataGridCallPurposes.AddingNewItem += DataGridCallPurposes_AddingNewItem; this.dataGridCallPurposes.CreateRequested += DataGridCallPurposes_CreateRequested; this.dataGridCallPurposes.DeleteRequested += DataGridCallPurposes_DeleteRequested; this.agentGroupBox.DataContext = _agnt; this.dateTimePicker_ETAToKielCanal.DataContext = _noa_nod; this.dateTimePicker_ETAToNextPort.DataContext = _noa_nod; this.dateTimePicker_ETAToPortOfCall.DataContext = _noa_nod; this.dateTimePicker_ETDFromKielCanal.DataContext = _noa_nod; this.dateTimePicker_ETDFromLastPort.DataContext = _noa_nod; this.dateTimePicker_ETDFromPortOfCall.DataContext = _noa_nod; this.checkBox_IsAnchored.IsEnabled = this.Core.IsDK; if(_agntTemplates == null) { _agntTemplates = await DBManagerAsync.GetAGNTTemplatesAsync(); // inital full load _agntTemplates.Sort(); Trace.WriteLine(string.Format("{0} agent templates loaded", _agntTemplates.Count)); } this.comboBox_AgentTemplate.ItemsSource = _agntTemplates; } #endregion #region datagrid call purposes private void DataGridCallPurposes_DeleteRequested(DatabaseEntity obj) { if (obj is CallPurpose cp) { // are you sure dialog is in base class _noa_nod.CallPurposes.Remove(cp); DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Delete(cp); DatabaseEntity.ResetIdentifiers(new List(_noa_nod.CallPurposes)); this.SublistElementChanged(Message.NotificationClass.NOA_NOD); this.dataGridCallPurposes.Items.Refresh(); } } private void DataGridCallPurposes_CreateRequested() { EditCallPurposeDialog ecpd = new EditCallPurposeDialog(); ecpd.AddClicked += () => { ecpd.CopyValuesToEntity(); if (!_noa_nod.CallPurposes.Contains(ecpd.CallPurpose)) _noa_nod.CallPurposes.Add(ecpd.CallPurpose); this.dataGridCallPurposes.Items.Refresh(); ecpd.CallPurpose = new CallPurpose(); ecpd.CallPurpose.Identifier = CallPurpose.GetNewIdentifier(_noa_nod.CallPurposes); ecpd.CallPurpose.NOA_NOD = this._noa_nod; this.SublistElementChanged(Message.NotificationClass.NOA_NOD); }; ecpd.CallPurpose = new CallPurpose(); ecpd.CallPurpose.Identifier = CallPurpose.GetNewIdentifier(_noa_nod.CallPurposes); ecpd.CallPurpose.NOA_NOD = this._noa_nod; if(ecpd.ShowDialog() ?? false) { if(!_noa_nod.CallPurposes.Contains(ecpd.CallPurpose)) _noa_nod.CallPurposes.Add(ecpd.CallPurpose); this.dataGridCallPurposes.Items.Refresh(); // signal up this.SublistElementChanged(Message.NotificationClass.NOA_NOD); } } private void DataGridCallPurposes_AddingNewItem(object sender, AddingNewItemEventArgs e) { this.DataGridCallPurposes_CreateRequested(); } private void DataGridCallPurposes_EditRequested(DatabaseEntity obj) { EditCallPurposeDialog ecpd = new EditCallPurposeDialog(); ecpd.CallPurpose = obj as CallPurpose; ecpd.AddClicked += () => { ecpd.CopyValuesToEntity(); if (!_noa_nod.CallPurposes.Contains(ecpd.CallPurpose)) _noa_nod.CallPurposes.Add(ecpd.CallPurpose); this.dataGridCallPurposes.Items.Refresh(); ecpd.CallPurpose = new CallPurpose(); ecpd.CallPurpose.Identifier = CallPurpose.GetNewIdentifier(_noa_nod.CallPurposes); ecpd.CallPurpose.NOA_NOD = this._noa_nod; this.SublistElementChanged(Message.NotificationClass.NOA_NOD); }; if (ecpd.ShowDialog() ?? false) { if (!_noa_nod.CallPurposes.Contains(ecpd.CallPurpose)) _noa_nod.CallPurposes.Add(ecpd.CallPurpose); this.dataGridCallPurposes.Items.Refresh(); // signal up this.SublistElementChanged(Message.NotificationClass.NOA_NOD); } } #endregion #region Highlighting public override void HighlightErrorMessageContainer() { if (this._noa_nod.MessageHeader.HasErrors) { HighlightService.HighlightControl(this.portCallGroupBox, HighlightService.HighlightStyle.ERROR, this._noa_nod.MessageHeader); } if (this._agnt.MessageHeader.HasErrors) { HighlightService.HighlightControl(this.agentGroupBox, HighlightService.HighlightStyle.ERROR, this._agnt.MessageHeader); } } public override void HighlightViolationMessageContainer() { if (this._noa_nod.MessageHeader.HasViolations) { HighlightService.HighlightControl(this.portCallGroupBox, HighlightService.HighlightStyle.VIOLATION, this._noa_nod.MessageHeader); } if (this._agnt.MessageHeader.HasViolations) { HighlightService.HighlightControl(this.agentGroupBox, HighlightService.HighlightStyle.VIOLATION, this._agnt.MessageHeader); } } #endregion #region mouse wheel private void ScrollViewer_PreviewMouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e) { ScrollViewer scv = (ScrollViewer)sender; scv.ScrollToVerticalOffset(scv.VerticalOffset - e.Delta); e.Handled = true; } #endregion #region AGNT templates combo private void comboBox_AgentTemplate_SelectionChanged(object sender, SelectionChangedEventArgs e) { Trace.WriteLine("combo selection changed"); if (this.comboBox_AgentTemplate.SelectedItem is AGNT_Template at) { this.textBoxTemplateTitle.Text = at.AgentTitle; this.buttonDeleteTemplate.IsEnabled = true; this.buttonSetTemplate.IsEnabled = true; this._currentTemplate = at; } } private void buttonDeleteTemplate_Click(object sender, RoutedEventArgs e) { if (_currentTemplate != null) { if (MessageBox.Show("Delete this template?", "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.Yes) { this.comboBox_AgentTemplate.SelectedItem = null; this.comboBox_AgentTemplate.ItemsSource = null; DBManager.Instance.Delete(_currentTemplate); _agntTemplates.Remove(_currentTemplate); this.textBoxTemplateTitle.Text = null; this.buttonDeleteTemplate.IsEnabled = false; this.comboBox_AgentTemplate.ItemsSource = _agntTemplates; this.buttonSetTemplate.IsEnabled = false; } } } private void buttonSaveTemplate_Click(object sender, RoutedEventArgs e) { string title = this.textBoxTemplateTitle.Text.Trim(); if(title.IsNullOrEmpty()) { MessageBox.Show("Title may not be empty", "Error", MessageBoxButton.OK, MessageBoxImage.Error); return; } AGNT_Template existingTemplate = null; foreach(AGNT_Template anExistingTemplate in _agntTemplates) { if(anExistingTemplate.AgentTitle.Equals(title,StringComparison.OrdinalIgnoreCase)) { existingTemplate = anExistingTemplate; break; } } if(existingTemplate != null) { if (MessageBox.Show("A template with this name already exists, overwrite?", "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.No) return; } this._currentTemplate = createFromCurrentText(title, existingTemplate); DBManager.Instance.Save(this._currentTemplate); if(existingTemplate == null) { comboBox_AgentTemplate.ItemsSource = null; _agntTemplates.Add(this._currentTemplate); _agntTemplates.Sort(); comboBox_AgentTemplate.ItemsSource = _agntTemplates; } MessageBox.Show("Template saved", "OK", MessageBoxButton.OK, MessageBoxImage.Information); } private void buttonUndoTemplate_Click(object sender, RoutedEventArgs e) { this.textBox_AgentCity.Text = this._undoTemplate.AgentCity; this.textBox_AgentCity.GetBindingExpression(TextBox.TextProperty).UpdateSource(); this.textBox_AgentCompanyName.Text = this._undoTemplate.AgentCompanyName; this.textBox_AgentCompanyName.GetBindingExpression(TextBox.TextProperty).UpdateSource(); this.textBox_AgentCountry.Text = this._undoTemplate.AgentCountry; this.textBox_AgentCountry.GetBindingExpression(TextBox.TextProperty).UpdateSource(); this.textBox_AgentEMail.Text = this._undoTemplate.AgentEMail; this.textBox_AgentEMail.GetBindingExpression(TextBox.TextProperty).UpdateSource(); this.textBox_AgentFax.Text = this._undoTemplate.AgentFax; this.textBox_AgentFax.GetBindingExpression(TextBox.TextProperty).UpdateSource(); this.textBox_AgentFirstName.Text = this._undoTemplate.AgentFirstName; this.textBox_AgentFirstName.GetBindingExpression(TextBox.TextProperty).UpdateSource(); this.textBox_AgentLastName.Text = this._undoTemplate.AgentLastName; this.textBox_AgentLastName.GetBindingExpression(TextBox.TextProperty).UpdateSource(); this.textBox_AgentPhone.Text = this._undoTemplate.AgentPhone; this.textBox_AgentPhone.GetBindingExpression(TextBox.TextProperty).UpdateSource(); this.textBox_AgentPostalCode.Text = this._undoTemplate.AgentPostalCode; this.textBox_AgentPostalCode.GetBindingExpression(TextBox.TextProperty).UpdateSource(); this.textBox_AgentStreetAndNumber.Text = this._undoTemplate.AgentStreetAndNumber; this.textBox_AgentStreetAndNumber.GetBindingExpression(TextBox.TextProperty).UpdateSource(); this.buttonUndoTemplate.IsEnabled = false; // can't undo after undo } private void buttonSetTemplate_Click(object sender, RoutedEventArgs e) { if (this._currentTemplate == null) return; this._undoTemplate = createFromCurrentText(null, null); this.textBox_AgentCity.Text = this._currentTemplate.AgentCity; this.textBox_AgentCity.GetBindingExpression(TextBox.TextProperty).UpdateSource(); this.textBox_AgentCompanyName.Text = this._currentTemplate.AgentCompanyName; this.textBox_AgentCompanyName.GetBindingExpression(TextBox.TextProperty).UpdateSource(); this.textBox_AgentCountry.Text = this._currentTemplate.AgentCountry; this.textBox_AgentCountry.GetBindingExpression(TextBox.TextProperty).UpdateSource(); this.textBox_AgentEMail.Text = this._currentTemplate.AgentEMail; this.textBox_AgentEMail.GetBindingExpression(TextBox.TextProperty).UpdateSource(); this.textBox_AgentFax.Text = this._currentTemplate.AgentFax; this.textBox_AgentEMail.GetBindingExpression(TextBox.TextProperty).UpdateSource(); this.textBox_AgentFirstName.Text = this._currentTemplate.AgentFirstName; this.textBox_AgentFirstName.GetBindingExpression(TextBox.TextProperty).UpdateSource(); this.textBox_AgentLastName.Text = this._currentTemplate.AgentLastName; this.textBox_AgentLastName.GetBindingExpression(TextBox.TextProperty).UpdateSource(); this.textBox_AgentPhone.Text = this._currentTemplate.AgentPhone; this.textBox_AgentPhone.GetBindingExpression(TextBox.TextProperty).UpdateSource(); this.textBox_AgentPostalCode.Text = this._currentTemplate.AgentPostalCode; this.textBox_AgentPostalCode.GetBindingExpression(TextBox.TextProperty).UpdateSource(); this.textBox_AgentStreetAndNumber.Text = this._currentTemplate.AgentStreetAndNumber; this.textBox_AgentStreetAndNumber.GetBindingExpression(TextBox.TextProperty).UpdateSource(); this.buttonUndoTemplate.IsEnabled = true; this.buttonSetTemplate.IsEnabled = false; this.comboBox_AgentTemplate.SelectedItem = null; this.textBoxTemplateTitle.Text = ""; this._currentTemplate = null; } private AGNT_Template createFromCurrentText(string title, AGNT_Template existingTemplate) { AGNT_Template at = new AGNT_Template(); if (existingTemplate != null) at = existingTemplate; at.AgentTitle = title; at.AgentCity = this.textBox_AgentCity.Text; at.AgentCompanyName = this.textBox_AgentCompanyName.Text; at.AgentCountry = this.textBox_AgentCountry.Text; at.AgentEMail = this.textBox_AgentEMail.Text; at.AgentFax = this.textBox_AgentFax.Text; at.AgentFirstName = this.textBox_AgentFirstName.Text; at.AgentLastName = this.textBox_AgentLastName.Text; at.AgentPhone = this.textBox_AgentPhone.Text; at.AgentPostalCode = this.textBox_AgentPostalCode.Text; at.AgentStreetAndNumber = textBox_AgentStreetAndNumber.Text; return at; } #endregion } }