200 lines
7.3 KiB
C#
200 lines
7.3 KiB
C#
// Copyright (c) 2017 schick Informatik
|
|
// Description: PO Nummer Übersicht. Ergänzung Nummern. Excel Export
|
|
//
|
|
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using Microsoft.Win32;
|
|
|
|
using Microsoft.Office.Interop.Excel;
|
|
using System.Runtime.InteropServices;
|
|
|
|
using bsmd.database;
|
|
|
|
namespace ENI2.Controls
|
|
{
|
|
/// <summary>
|
|
/// Interaction logic for MaerskListControl.xaml
|
|
/// </summary>
|
|
public partial class MaerskListControl : UserControl
|
|
{
|
|
|
|
#region Fields
|
|
|
|
private List<MessageCore> searchResult = new List<MessageCore>();
|
|
private readonly List<MessageCore> filteredResult = new List<MessageCore>();
|
|
|
|
#endregion
|
|
|
|
#region Construction
|
|
|
|
public MaerskListControl()
|
|
{
|
|
InitializeComponent();
|
|
Loaded += POList_Loaded;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region control event handler
|
|
|
|
private void POList_Loaded(object sender, RoutedEventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void dataGridPOCores_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
|
|
{
|
|
if (e.EditAction == DataGridEditAction.Commit)
|
|
{
|
|
if (e.Column == gridColumnPONumber)
|
|
{
|
|
// validate for "true" number
|
|
var el = e.EditingElement as System.Windows.Controls.TextBox;
|
|
if (!el.Text.IsDigitsOnly())
|
|
{
|
|
el.Text = string.Empty;
|
|
e.Cancel = true;
|
|
}
|
|
else
|
|
{
|
|
// buttonSaveChanges.IsEnabled = true;
|
|
MessageCore editedCore = this.filteredResult[e.Row.GetIndex()];
|
|
editedCore.IsDirty = true;
|
|
}
|
|
}
|
|
if(e.Column == gridColumnGroup)
|
|
{
|
|
var el = e.EditingElement as ComboBox;
|
|
DictionaryEntry selectedItem = (DictionaryEntry) el.SelectedItem;
|
|
MessageCore.CoreFlags coreFlag = (MessageCore.CoreFlags) Enum.Parse(typeof(MessageCore.CoreFlags), selectedItem.Value.ToString());
|
|
MessageCore editedCore = this.filteredResult[e.Row.GetIndex()];
|
|
// clear all first
|
|
editedCore.SetFlag(false, MessageCore.CoreFlags.MAERSK_BHV);
|
|
editedCore.SetFlag(false, MessageCore.CoreFlags.SEAGO_BHV);
|
|
editedCore.SetFlag(false, MessageCore.CoreFlags.SEAGO_WHV);
|
|
editedCore.SetFlag(false, MessageCore.CoreFlags.HOEGH);
|
|
if (coreFlag != MessageCore.CoreFlags.NONE)
|
|
{
|
|
editedCore.SetFlag(true, coreFlag);
|
|
}
|
|
// buttonSaveChanges.IsEnabled = true;
|
|
editedCore.IsDirty = true;
|
|
}
|
|
if(e.Column == gridColumnATA)
|
|
{
|
|
var el = e.EditingElement as System.Windows.Controls.TextBox;
|
|
if(DateTime.TryParse(el.Text, out DateTime localATA))
|
|
{
|
|
MessageCore editedCore = this.filteredResult[e.Row.GetIndex()];
|
|
editedCore.ATA = DateTime.SpecifyKind(localATA, DateTimeKind.Local).ToUniversalTime();
|
|
// buttonSaveChanges.IsEnabled = true;
|
|
editedCore.IsDirty = true;
|
|
}
|
|
else
|
|
{
|
|
el.Text = string.Empty;
|
|
e.Cancel = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region private methods
|
|
|
|
private void PerformSearch()
|
|
{
|
|
this.dataGridPOCores.ItemsSource = null;
|
|
this.filteredResult.Clear();
|
|
|
|
Dictionary<MessageCore.SearchFilterType, string> filterDict = new Dictionary<MessageCore.SearchFilterType, string>();
|
|
|
|
DateTime start = DateTime.Now; // bsmd.database.Util.FirstDateOfWeekISO8601(DateTime.Now.Year, (int)this.doubleUpDownCalendarWeek.Value);
|
|
DateTime end = start.Add(new TimeSpan(6, 23, 59, 59));
|
|
|
|
// Die Suche findet in einem erweiterten Intervall statt, da später wenn möglich nach ATA gefiltert wird
|
|
uint from = start.Subtract(new TimeSpan(10, 0, 0, 0)).ToUniversalTime().ToUnixTimeStamp();
|
|
uint to = end.Add(new TimeSpan(5, 0, 0, 0)).ToUniversalTime().ToUnixTimeStamp();
|
|
filterDict.Add(MessageCore.SearchFilterType.FILTER_ETA, string.Format("{0}:{1}", from.ToString() ?? "", to.ToString() ?? ""));
|
|
|
|
// suche auslösen
|
|
this.searchResult = DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).GetMessageCoresWithFilters(filterDict);
|
|
// alle anderen Häfen weg
|
|
this.searchResult.RemoveAll(item => (item.PoC == null) || (!item.PoC.Equals("DEBRV") && !item.PoC.Equals("DEWHV") && !item.PoC.Equals("DEWVN")));
|
|
|
|
// rückwärts iterieren um nach ETA und ATA zu filtern
|
|
if (this.searchResult.Count > 0)
|
|
{
|
|
for (int i = this.searchResult.Count - 1; i >= 0; i--)
|
|
{
|
|
MessageCore messageCore = this.searchResult[i];
|
|
if (messageCore.ATA.HasValue)
|
|
{
|
|
if ((messageCore.ATA.Value < start) || (messageCore.ATA.Value > end))
|
|
{
|
|
this.searchResult.RemoveAt(i);
|
|
}
|
|
else
|
|
{
|
|
if(!messageCore.POATA.HasValue)
|
|
{
|
|
messageCore.POATA = messageCore.ATA;
|
|
messageCore.IsDirty = true;
|
|
// this.buttonSaveChanges.IsEnabled = true;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ((messageCore.ETA.Value < start) || (messageCore.ETA.Value > end)) this.searchResult.RemoveAt(i);
|
|
}
|
|
}
|
|
}
|
|
|
|
searchResult.Sort((x, y) => DateTime.Compare(x.ATA ?? DateTime.MaxValue, y.ATA ?? DateTime.MaxValue));
|
|
|
|
this.dataGridPOCores.SelectedItem = null;
|
|
this.filteredResult.AddRange(searchResult);
|
|
this.dataGridPOCores.ItemsSource = this.filteredResult;
|
|
}
|
|
|
|
private List<MessageCore> GetNextNDayCoresFromList(List<MessageCore> cores, int numDays = 3)
|
|
{
|
|
List<MessageCore> result = new List<MessageCore>();
|
|
|
|
result.AddRange(cores.FindAll(x => (x.ETADisplay.Value - DateTime.Now).TotalHours < (numDays * 24)));
|
|
|
|
return result;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region button event handler
|
|
|
|
private void buttonLoad_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
Util.UIHelper.SetBusyState();
|
|
this.PerformSearch();
|
|
}
|
|
|
|
private void buttonImport_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void buttonExport_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
}
|