git_bsmd/ENI2/DetailViewControls/PortCallDetailControl.xaml.cs

413 lines
19 KiB
C#

// 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
{
/// <summary>
/// Interaction logic for PortCallDetailControl.xaml
/// </summary>
public partial class PortCallDetailControl : DetailBaseControl
{
#region Fields
private NOA_NOD _noa_nod;
private AGNT _agnt;
private static List<AGNT_Template> _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);
}
public 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 = DBManager.Instance.GetAGNTTemplates(); // 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)
{
CallPurpose cp = obj as CallPurpose;
if (cp != null)
{
// 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<DatabaseEntity>(_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");
AGNT_Template at = this.comboBox_AgentTemplate.SelectedItem as AGNT_Template;
if(at != null)
{
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
}
}