234 lines
9.7 KiB
C#
234 lines
9.7 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;
|
|
using ExcelDataReader;
|
|
|
|
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;
|
|
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<MessageCore.SearchFilterType, string> filterDict = new Dictionary<MessageCore.SearchFilterType, string>();
|
|
|
|
// 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<MessageCore> importCores = new List<MessageCore>();
|
|
|
|
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
|
|
|
|
}
|
|
}
|