// 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 { /// /// Interaction logic for MaerskListControl.xaml /// public partial class MaerskListControl : UserControl { #region Fields private List searchResult = new List(); private readonly List filteredResult = new List(); #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 filterDict = new Dictionary(); 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 GetNextNDayCoresFromList(List cores, int numDays = 3) { List result = new List(); 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 } }