415 lines
19 KiB
C#
415 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);
|
|
|
|
this.buttonSaveTemplate.IsEnabled = DBManager.Instance.GetReportingPartyDict()[App.UserId.Value].IsEditor;
|
|
}
|
|
|
|
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
|
|
|
|
}
|
|
}
|