// 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; using ExcelDataReader; 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; this.dateTimePickerFrom.Value = DateTime.Today.AddDays(-14); this.dateTimePickerTo.Value = DateTime.Today.AddDays(14); } #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(); // Die Suche findet in dem eingestellten Intervall statt uint from = this.dateTimePickerFrom.Value.Value.ToUniversalTime().ToUnixTimeStamp(); uint to = this.dateTimePickerTo.Value.Value.ToUniversalTime().ToUnixTimeStamp(); filterDict.Add(MessageCore.SearchFilterType.FILTER_ETA, string.Format("{0}:{1}", from.ToString() ?? "", to.ToString() ?? "")); // eingeschränkt auf flags filterDict.Add(MessageCore.SearchFilterType.FILTER_FLAG_EQ, "0"); // 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"))); // sortieren nach ETA (kombiniert) searchResult.Sort((x, y) => DateTime.Compare(x.ETADisplay ?? DateTime.MaxValue, y.ETADisplay ?? DateTime.MaxValue)); this.dataGridPOCores.SelectedItem = null; this.filteredResult.AddRange(searchResult); this.dataGridPOCores.ItemsSource = this.filteredResult; } #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) { OpenFileDialog ofd = new OpenFileDialog { Filter = "Excel Files|*.xls;*.xlsx" }; if (ofd.ShowDialog() ?? false) { FileStream stream; try { stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); return; } using (IExcelDataReader reader = ExcelReaderFactory.CreateReader(stream)) { List importCores = new List(); try { do { while (reader.Read()) { if (reader.FieldCount < 13) { throw new InvalidDataException("Sheet must have 13 columns of data"); } MessageCore core = new MessageCore(); if (reader.IsDBNull(0) && reader.IsDBNull(1)) continue; /* if (!reader.IsDBNull(0)) crew.CrewMemberLastName = reader.GetString(0).Clean(); if (crew.CrewMemberLastName.Equals("Family Name") || (crew.CrewMemberLastName.Trim().Length == 0)) continue; if (!reader.IsDBNull(1)) crew.CrewMemberFirstName = reader.GetString(1).Clean(); if (!reader.IsDBNull(2)) crew.CrewMemberGender = GlobalStructures.ParseGender(reader.GetString(2)); if (!reader.IsDBNull(3)) crew.CrewMemberDuty = reader.GetString(3).Clean(); if (!reader.IsDBNull(4)) crew.CrewMemberNationality = reader.GetString(4).Substring(0, 2).ToUpper(); if (!reader.IsDBNull(5)) crew.CrewMemberPlaceOfBirth = reader.GetString(5).Clean(); if (!reader.IsDBNull(6)) crew.CrewMemberCountryOfBirth = reader.GetString(6).Substring(0, 2).ToUpper(); if (!reader.IsDBNull(7)) crew.CrewMemberDateOfBirth = reader.GetDateTime(7); if (!reader.IsDBNull(8)) crew.CrewMemberIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(reader.GetString(8)); if (!reader.IsDBNull(9)) crew.CrewMemberIdentityDocumentId = this.getValueAsString(reader, 9).Clean(); if (!reader.IsDBNull(10)) crew.CrewMemberIdentityDocumentIssuingState = reader.GetString(10).Substring(0, 2).ToUpper(); if (!reader.IsDBNull(11)) crew.CrewMemberIdentityDocumentExpiryDate = reader.GetDateTime(11); if (!reader.IsDBNull(12)) crew.CrewMemberVisaNumber = this.getValueAsString(reader, 12).Clean(); */ importCores.Add(core); } } while (reader.NextResult()); } catch (Exception ex) { MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error); } // we only want cores for the next 3 days if (importCores.Count > 0) { } } stream.Close(); } } private void buttonExport_Click(object sender, RoutedEventArgs e) { } #endregion } }