7.9.0.4 Testversion, Status-Festlegung vereinheitlicht, Speichern Remark automatisch, kleinere Bugs beseitigt

This commit is contained in:
Daniel Schick 2023-02-22 09:40:34 +01:00
parent bcf4c33478
commit 521786002b
4 changed files with 96 additions and 42 deletions

View File

@ -45,7 +45,7 @@
<Label Content="To" Grid.Column="2" />
<xctk:DateTimePicker x:Name="dateTimePickerTo" Margin="2" Grid.Column="3" Format="ShortDate" />
<Button x:Name="buttonLoad" Grid.Column="4" Content="Load" Margin="2" Click="buttonLoad_Click" />
<Button x:Name="buttonSave" Grid.Column="5" Content="Save" Margin="2" Click="buttonSave_Click" />
<!--Button x:Name="buttonSave" Grid.Column="5" Content="Save" Margin="2" Click="buttonSave_Click" /-->
<Button x:Name="buttonRequestIds" Grid.Column="6" Content="Request marked Ids" Margin="2" Click="buttonRequestIds_Click" />
<Button x:Name="buttonRequestPlus3" Grid.Column="7" Content="Request +3" Margin="2" Click="buttonRequestIds_Click" />
<Button x:Name="buttonImport" Grid.Column="9" Margin="2" Content="Import" Click="buttonImport_Click" />
@ -67,6 +67,9 @@
<DataTrigger Binding="{Binding Status}" Value="{x:Static db:MaerskData+MDStatus.UPDATED}">
<Setter Property="Background" Value="LightYellow"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Status}" Value="{x:Static db:MaerskData+MDStatus.NO_ETA}">
<Setter Property="Background" Value="LightCoral"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Status}" Value="{x:Static db:MaerskData+MDStatus.REQUESTING_ID}">
<Setter Property="Background" Value="Yellow"></Setter>
</DataTrigger>
@ -94,7 +97,7 @@
<DataGridTextColumn Header="ETA" Binding="{Binding ColK}" IsReadOnly="True" />
<DataGridTextColumn Header="ETD" Binding="{Binding ColL}" IsReadOnly="True" />
<DataGridTextColumn Header="Id" Binding="{Binding ColM}" IsReadOnly="True" />
<DataGridTextColumn Header="Remark" Binding="{Binding Remark, Mode=TwoWay}" />
<DataGridTextColumn Header="Remark" Binding="{Binding Remark, Mode=TwoWay}" x:Name="gridColumnRemark" />
<!--DataGridTextColumn x:Name="gridColumnPONumber" Header="PO number" Binding="{Binding PONumber, Mode=TwoWay}" IsReadOnly="False" /-->
<!--DataGridComboBoxColumn x:Name="gridColumnGroup" Header="Group" IsReadOnly="False" SelectedValueBinding="{Binding Flags, Mode=TwoWay}"

View File

@ -99,27 +99,26 @@ namespace ENI2.Controls
dataGridPOCores.ItemsSource = maerskDataList;
}
private void dataGridPOCores_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
private async void dataGridPOCores_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
/*
if (e.EditAction == DataGridEditAction.Commit)
{
if (e.Column == gridColumnPONumber)
if (e.Column == gridColumnRemark)
{
// validate for "true" number
MaerskData maerskData = this.maerskDataList[e.Row.GetIndex()];
var el = e.EditingElement as System.Windows.Controls.TextBox;
if (!el.Text.IsDigitsOnly())
if (el.Text.Length > 100)
{
el.Text = string.Empty;
e.Cancel = true;
}
else
{
// buttonSaveChanges.IsEnabled = true;
MessageCore editedCore = this.filteredResult[e.Row.GetIndex()];
editedCore.IsDirty = true;
el.Text = el.Text.Trim().Substring(0, 100);
}
maerskData.Remark = el.Text;
if (maerskData.MessageCore != null)
await DBManagerAsync.Save(maerskData);
}
/*
if(e.Column == gridColumnGroup)
{
var el = e.EditingElement as ComboBox;
@ -153,15 +152,58 @@ namespace ENI2.Controls
el.Text = string.Empty;
e.Cancel = true;
}
}
}
*/
}
*/
}
#endregion
#region private methods
/// <summary>
/// "Status" of a Maersk Data element is a momentary evaluation that is relevant for display purposes only
/// It is not saved
/// </summary>
private void UpdateStatus(MaerskData md)
{
// here we set the following: NO_ID, NO_ID_AND_DUE, ID, NO_ETA and DONE
// the other status are set during active processing
if(md.ETA.HasValue)
{
if((md.ETA.Value - DateTime.Now).TotalSeconds > 0) // future
{
if(!md.ColM.IsNullOrEmpty() || ((md.MessageCore != null) && (!md.MessageCore.VisitId.IsNullOrEmpty())))
{
md.Status = MaerskData.MDStatus.ID;
}
else
{
if(md.ETA.Value.IsNextXDays(3))
{
md.Status = MaerskData.MDStatus.NO_ID_AND_DUE;
}
else
{
md.Status = MaerskData.MDStatus.NO_ID;
}
}
}
else // past
{
md.Status = MaerskData.MDStatus.DONE;
}
}
else
{
// no ETA means done
md.Status = MaerskData.MDStatus.NO_ETA;
}
}
private async void PerformSearch()
{
@ -188,6 +230,7 @@ namespace ENI2.Controls
{
md.MessageCore = core;
md.MessageCoreId = core.Id.Value;
this.UpdateStatus(md);
if(!maerskDataList.Contains(md)) // DatabaseEntity implements IEquatable
this.maerskDataList.Add(md);
}
@ -250,6 +293,13 @@ namespace ENI2.Controls
{
while (reader.Read())
{
if (isFirstRow)
{
isFirstRow = false; // this must be a header row, skip
continue;
}
if (reader.FieldCount < 13)
{
throw new InvalidDataException("Sheet must have 13 columns of data");
@ -276,16 +326,14 @@ namespace ENI2.Controls
if (reader.GetFieldType(10) == typeof(DateTime))
{
md.ETA = reader.GetDateTime(10);
}
md.ColK = md.ETA.ToString();
}
else
{
if(isFirstRow)
{
isFirstRow = false; // this must be a header row, skip
continue;
}
}
md.ColK = md.ETA.ToString();
md.ColK = reader.GetString(10);
if (DateTime.TryParse(md.ColK, out DateTime aDateTime))
md.ETA = aDateTime;
}
}
if (!reader.IsDBNull(11)) md.ColL = ReadFieldAsString(reader, 11);
if (!reader.IsDBNull(12)) md.ColM = ReadFieldAsString(reader, 12);
@ -303,8 +351,7 @@ namespace ENI2.Controls
{
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
}
// we only want cores for the next 3 days
if (importData.Count > 0)
{
busyControl.BusyState = Util.UIHelper.BusyStateEnum.BUSY;
@ -314,24 +361,18 @@ namespace ENI2.Controls
{
if (this.maerskDataList.Contains(md))
{
// update record with imported record
MaerskData foundData = this.maerskDataList.First((m) => (m.ColF != null) && m.ColF.Equals(md.ColF) && (m.ColG != null) && m.ColG.Equals(md.ColG) && (md.ColH != null) && md.ColH.Equals(md.ColH));
if (foundData.Update(md))
if(foundData.ETA.HasValue && ((foundData.ETA.Value - DateTime.Now).TotalSeconds > 0) && foundData.Update(md))
foundData.Status = MaerskData.MDStatus.UPDATED;
}
else
{
md.Status = MaerskData.MDStatus.ID;
if (!md.ColM.IsNullOrEmpty())
{
md.MessageCore = await DBManagerAsync.LoadCoreByVisitIdAsync(md.ColM);
}
else
{
md.Status = MaerskData.MDStatus.NO_ID;
if (md.ETA.HasValue && md.ETA.Value.IsNextXDays(3))
md.Status = MaerskData.MDStatus.NO_ID_AND_DUE;
}
this.UpdateStatus(md);
maerskDataList.Add(md);
}
}
@ -371,6 +412,8 @@ namespace ENI2.Controls
}
}
/*
private async void buttonSave_Click(object sender, RoutedEventArgs e)
{
busyControl.BusyState = Util.UIHelper.BusyStateEnum.BUSY;
@ -387,6 +430,8 @@ namespace ENI2.Controls
busyControl.BusyState = Util.UIHelper.BusyStateEnum.NEUTRAL;
}
*/
private async void buttonRequestIds_Click(object sender, RoutedEventArgs e)
{
// find all entries from now until 3 days into the future and track parallel requests

View File

@ -36,7 +36,7 @@
<MinimumRequiredVersion>5.4.0.0</MinimumRequiredVersion>
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
<WebPage>publish.html</WebPage>
<ApplicationRevision>3</ApplicationRevision>
<ApplicationRevision>5</ApplicationRevision>
<ApplicationVersion>7.9.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<CreateDesktopShortcut>true</CreateDesktopShortcut>

View File

@ -34,7 +34,7 @@ namespace bsmd.database
public enum MDStatus
{
[Description("No id")]
[Description("No id and is in the future")]
NO_ID,
[Description("Updated")]
UPDATED,
@ -42,10 +42,15 @@ namespace bsmd.database
REQUESTING_ID,
[Description("Id assigned")]
ID_ASSIGNED,
[Description("upcoming without id")]
[Description("upcoming without an id")]
NO_ID_AND_DUE,
[Description("Has id")]
ID
[Description("Has id and is in the future")]
ID,
[Description("In the past, id or not")]
DONE,
[Description("no ETA found on data record")]
NO_ETA
}
#endregion
@ -112,6 +117,7 @@ namespace bsmd.database
/// </summary>
public string ColM { get; set; }
[MaxLength(100)]
public string Remark { get; set; }
#endregion
@ -172,7 +178,7 @@ namespace bsmd.database
// try parsing the column to datetime
if (DateTime.TryParse(md.ColK, out DateTime eta))
ETA = eta;
md.ETA = eta;
}
return md;
}