175 lines
5.4 KiB
C#
175 lines
5.4 KiB
C#
// Copyright (c) 2023 schick Informatik
|
|
// Description: some helpers
|
|
//
|
|
|
|
using BreCalClient.misc.Model;
|
|
using System;
|
|
using System.ComponentModel;
|
|
|
|
namespace BreCalClient
|
|
{
|
|
public static class Extensions
|
|
{
|
|
|
|
#region Enum
|
|
|
|
/// <summary>
|
|
/// Copied from models clunky I know
|
|
/// </summary>
|
|
[Flags]
|
|
public enum ParticipantType
|
|
{
|
|
[Description("not assigned")]
|
|
NONE = 0,
|
|
[Description("BSMD")]
|
|
BSMD = 1,
|
|
[Description("Terminal")]
|
|
TERMINAL = 2,
|
|
[Description("Flusslotsen")]
|
|
PILOT = 4,
|
|
[Description("Agentur")]
|
|
AGENCY = 8,
|
|
[Description("Festmacher")]
|
|
MOORING = 16,
|
|
[Description("Hafenamt")]
|
|
PORT_ADMINISTRATION = 32,
|
|
[Description("Schlepper")]
|
|
TUG = 64,
|
|
}
|
|
|
|
/// <summary>
|
|
/// Custom participant flags
|
|
/// </summary>
|
|
[Flags]
|
|
public enum ParticipantFlag
|
|
{
|
|
[Description("allow BSMD initial info")]
|
|
ALLOW_BSMD = 1,
|
|
}
|
|
|
|
public enum SortOrder
|
|
{
|
|
SHIP_NAME,
|
|
ETA_ETD,
|
|
MODIFIED
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region public helper
|
|
|
|
public static bool IsTooFar(this DateTime datetime)
|
|
{
|
|
return datetime > DateTime.Now.AddYears(1);
|
|
}
|
|
|
|
public static bool IsTooFar(this DateTime? datetime)
|
|
{
|
|
if (datetime == null) return false;
|
|
return datetime > DateTime.Now.AddYears(1);
|
|
}
|
|
|
|
public static bool IsTooOld(this DateTime? datetime)
|
|
{
|
|
if (datetime == null) return false;
|
|
{
|
|
return datetime < DateTime.Now.AddDays(-1);
|
|
}
|
|
}
|
|
|
|
public static bool IsTypeFlagSet(this Participant participant, ParticipantType flag)
|
|
{
|
|
return (participant.Type & (uint)flag) != 0;
|
|
}
|
|
|
|
public static bool IsFlagSet(this Participant participant, ParticipantFlag flag)
|
|
{
|
|
return (participant.Flags & (uint)flag) != 0;
|
|
}
|
|
|
|
public static string Truncate(this string value, int maxLength)
|
|
{
|
|
if (string.IsNullOrEmpty(value)) return value;
|
|
return value.Length <= maxLength ? value : value[..maxLength];
|
|
}
|
|
|
|
public static string TruncateDots(this string value, int maxLength)
|
|
{
|
|
if(string.IsNullOrEmpty(value)) return value;
|
|
if (value.Length <= maxLength) return value;
|
|
if (value.Length > (maxLength + 1))
|
|
{
|
|
int i = maxLength - 2;
|
|
for (; (i > 0) && !(char.IsWhiteSpace(value[i])); i--) ; // try to put the "..." at a word break
|
|
return value.Substring(0, i) + " ...";
|
|
}
|
|
return value[..maxLength];
|
|
}
|
|
|
|
public static string DisplayTime(this Times times, bool isArrival)
|
|
{
|
|
if (isArrival)
|
|
{
|
|
if(times.ParticipantType == (int) ParticipantType.TERMINAL)
|
|
{
|
|
if(times.OperationsStart.HasValue)
|
|
{
|
|
string result = times.OperationsStart.Value.ToString("dd.MM.yyyy HH:mm");
|
|
if (times.EtaIntervalEnd.HasValue) result = times.OperationsStart.Value.ToString("d.M. HH:mm") + " - " + times.EtaIntervalEnd.Value.ToString("d.M. HH:mm");
|
|
return result;
|
|
}
|
|
else
|
|
{
|
|
return "- / -";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(times.EtaBerth.HasValue)
|
|
{
|
|
string result = times.EtaBerth.Value.ToString("dd.MM.yyyy HH:mm");
|
|
if (times.EtaIntervalEnd.HasValue) result = times.EtaBerth.Value.ToString("d.M. HH:mm") + " - " + times.EtaIntervalEnd.Value.ToString("d.M. HH:mm");
|
|
return result;
|
|
}
|
|
else
|
|
{
|
|
return "- / -";
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (times.ParticipantType == (int)ParticipantType.TERMINAL)
|
|
{
|
|
if(times.OperationsEnd.HasValue)
|
|
{
|
|
string result = times.OperationsEnd.Value.ToString("dd.MM.yyyy HH:mm");
|
|
if (times.EtdIntervalEnd.HasValue) result = times.OperationsEnd.Value.ToString("d.M. HH:mm") + " - " + times.EtdIntervalEnd.Value.ToString("d.M. HH:mm");
|
|
return result;
|
|
}
|
|
else
|
|
{
|
|
return "- / -";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(times.EtdBerth.HasValue)
|
|
{
|
|
string result = times.EtdBerth.Value.ToString("dd.MM.yyyy HH:mm");
|
|
if (times.EtdIntervalEnd.HasValue) result = times.EtdBerth.Value.ToString("d.M. HH:mm") + " - " + times.EtdIntervalEnd.Value.ToString("d.M. HH:mm");
|
|
return result;
|
|
}
|
|
else
|
|
{
|
|
return "- / -";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
}
|