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" /> <Label Content="To" Grid.Column="2" />
<xctk:DateTimePicker x:Name="dateTimePickerTo" Margin="2" Grid.Column="3" Format="ShortDate" /> <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="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="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="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" /> <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}"> <DataTrigger Binding="{Binding Status}" Value="{x:Static db:MaerskData+MDStatus.UPDATED}">
<Setter Property="Background" Value="LightYellow"></Setter> <Setter Property="Background" Value="LightYellow"></Setter>
</DataTrigger> </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}"> <DataTrigger Binding="{Binding Status}" Value="{x:Static db:MaerskData+MDStatus.REQUESTING_ID}">
<Setter Property="Background" Value="Yellow"></Setter> <Setter Property="Background" Value="Yellow"></Setter>
</DataTrigger> </DataTrigger>
@ -94,7 +97,7 @@
<DataGridTextColumn Header="ETA" Binding="{Binding ColK}" IsReadOnly="True" /> <DataGridTextColumn Header="ETA" Binding="{Binding ColK}" IsReadOnly="True" />
<DataGridTextColumn Header="ETD" Binding="{Binding ColL}" IsReadOnly="True" /> <DataGridTextColumn Header="ETD" Binding="{Binding ColL}" IsReadOnly="True" />
<DataGridTextColumn Header="Id" Binding="{Binding ColM}" 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" /--> <!--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}" <!--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; 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.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; var el = e.EditingElement as System.Windows.Controls.TextBox;
if (!el.Text.IsDigitsOnly()) if (el.Text.Length > 100)
{ {
el.Text = string.Empty; el.Text = el.Text.Trim().Substring(0, 100);
e.Cancel = true;
}
else
{
// buttonSaveChanges.IsEnabled = true;
MessageCore editedCore = this.filteredResult[e.Row.GetIndex()];
editedCore.IsDirty = true;
} }
maerskData.Remark = el.Text;
if (maerskData.MessageCore != null)
await DBManagerAsync.Save(maerskData);
} }
/*
if(e.Column == gridColumnGroup) if(e.Column == gridColumnGroup)
{ {
var el = e.EditingElement as ComboBox; var el = e.EditingElement as ComboBox;
@ -154,14 +153,57 @@ namespace ENI2.Controls
e.Cancel = true; e.Cancel = true;
} }
} }
}
*/ */
} }
}
#endregion #endregion
#region private methods #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() private async void PerformSearch()
{ {
@ -188,6 +230,7 @@ namespace ENI2.Controls
{ {
md.MessageCore = core; md.MessageCore = core;
md.MessageCoreId = core.Id.Value; md.MessageCoreId = core.Id.Value;
this.UpdateStatus(md);
if(!maerskDataList.Contains(md)) // DatabaseEntity implements IEquatable if(!maerskDataList.Contains(md)) // DatabaseEntity implements IEquatable
this.maerskDataList.Add(md); this.maerskDataList.Add(md);
} }
@ -250,6 +293,13 @@ namespace ENI2.Controls
{ {
while (reader.Read()) while (reader.Read())
{ {
if (isFirstRow)
{
isFirstRow = false; // this must be a header row, skip
continue;
}
if (reader.FieldCount < 13) if (reader.FieldCount < 13)
{ {
throw new InvalidDataException("Sheet must have 13 columns of data"); throw new InvalidDataException("Sheet must have 13 columns of data");
@ -276,17 +326,15 @@ namespace ENI2.Controls
if (reader.GetFieldType(10) == typeof(DateTime)) if (reader.GetFieldType(10) == typeof(DateTime))
{ {
md.ETA = reader.GetDateTime(10); md.ETA = reader.GetDateTime(10);
md.ColK = md.ETA.ToString();
} }
else else
{ {
if(isFirstRow) md.ColK = reader.GetString(10);
{ if (DateTime.TryParse(md.ColK, out DateTime aDateTime))
isFirstRow = false; // this must be a header row, skip md.ETA = aDateTime;
continue;
} }
} }
md.ColK = md.ETA.ToString();
}
if (!reader.IsDBNull(11)) md.ColL = ReadFieldAsString(reader, 11); if (!reader.IsDBNull(11)) md.ColL = ReadFieldAsString(reader, 11);
if (!reader.IsDBNull(12)) md.ColM = ReadFieldAsString(reader, 12); if (!reader.IsDBNull(12)) md.ColM = ReadFieldAsString(reader, 12);
if (!reader.IsDBNull(13)) md.Remark = ReadFieldAsString(reader, 13); if (!reader.IsDBNull(13)) md.Remark = ReadFieldAsString(reader, 13);
@ -304,7 +352,6 @@ namespace ENI2.Controls
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error); 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) if (importData.Count > 0)
{ {
busyControl.BusyState = Util.UIHelper.BusyStateEnum.BUSY; busyControl.BusyState = Util.UIHelper.BusyStateEnum.BUSY;
@ -314,24 +361,18 @@ namespace ENI2.Controls
{ {
if (this.maerskDataList.Contains(md)) 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)); 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; foundData.Status = MaerskData.MDStatus.UPDATED;
} }
else else
{ {
md.Status = MaerskData.MDStatus.ID;
if (!md.ColM.IsNullOrEmpty()) if (!md.ColM.IsNullOrEmpty())
{ {
md.MessageCore = await DBManagerAsync.LoadCoreByVisitIdAsync(md.ColM); md.MessageCore = await DBManagerAsync.LoadCoreByVisitIdAsync(md.ColM);
} }
else this.UpdateStatus(md);
{
md.Status = MaerskData.MDStatus.NO_ID;
if (md.ETA.HasValue && md.ETA.Value.IsNextXDays(3))
md.Status = MaerskData.MDStatus.NO_ID_AND_DUE;
}
maerskDataList.Add(md); maerskDataList.Add(md);
} }
} }
@ -371,6 +412,8 @@ namespace ENI2.Controls
} }
} }
/*
private async void buttonSave_Click(object sender, RoutedEventArgs e) private async void buttonSave_Click(object sender, RoutedEventArgs e)
{ {
busyControl.BusyState = Util.UIHelper.BusyStateEnum.BUSY; busyControl.BusyState = Util.UIHelper.BusyStateEnum.BUSY;
@ -387,6 +430,8 @@ namespace ENI2.Controls
busyControl.BusyState = Util.UIHelper.BusyStateEnum.NEUTRAL; busyControl.BusyState = Util.UIHelper.BusyStateEnum.NEUTRAL;
} }
*/
private async void buttonRequestIds_Click(object sender, RoutedEventArgs e) private async void buttonRequestIds_Click(object sender, RoutedEventArgs e)
{ {
// find all entries from now until 3 days into the future and track parallel requests // 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> <MinimumRequiredVersion>5.4.0.0</MinimumRequiredVersion>
<CreateWebPageOnPublish>true</CreateWebPageOnPublish> <CreateWebPageOnPublish>true</CreateWebPageOnPublish>
<WebPage>publish.html</WebPage> <WebPage>publish.html</WebPage>
<ApplicationRevision>3</ApplicationRevision> <ApplicationRevision>5</ApplicationRevision>
<ApplicationVersion>7.9.0.%2a</ApplicationVersion> <ApplicationVersion>7.9.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust> <UseApplicationTrust>false</UseApplicationTrust>
<CreateDesktopShortcut>true</CreateDesktopShortcut> <CreateDesktopShortcut>true</CreateDesktopShortcut>

View File

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