// 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 /// /// Copied from models clunky I know /// [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, } /// /// Custom participant flags /// [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 } }