using DatenDB; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Deckungsbeitrag.AA_Klassen { public enum RegRhythmen { Unbekannt = 0, Wöchentlich = 7, ZweiWöchentlich = 14, Monatlich = 28, Halbjährlich = 182 } [Flags] public enum Liefertage { None = 0, Monday = 1 << 1, // 2 Tuesday = 1 << 2, // 4 Wednesday = 1 << 3, // 8 Thursday = 1 << 4, // 16 Friday = 1 << 5 // 32 } // Vordefinierte Rhythmen als Kombinationen public static class Lieferrhythmen { public static RegRhythmen Rhythmus { get; set; } public static Liefertage Unbekannt => Liefertage.None; public static Liefertage WoechentlichMo => Liefertage.Monday; public static Liefertage WoechentlichDi => Liefertage.Tuesday; public static Liefertage WoechentlichMi => Liefertage.Wednesday; public static Liefertage WoechentlichDo => Liefertage.Thursday; public static Liefertage WoechentlichFr => Liefertage.Friday; public static Liefertage ZweimalMoDo => Liefertage.Monday | Liefertage.Thursday; public static Liefertage ZweimalDiFr => Liefertage.Tuesday | Liefertage.Friday; public static Liefertage DreimalMoMiFr => Liefertage.Monday | Liefertage.Wednesday | Liefertage.Friday; public static Liefertage ViermalMoDiDoFr => Liefertage.Monday | Liefertage.Tuesday | Liefertage.Thursday | Liefertage.Friday; public static Liefertage TaeglichMoFr => Liefertage.Monday | Liefertage.Tuesday | Liefertage.Wednesday | Liefertage.Thursday | Liefertage.Friday; // Dictionary als statische Eigenschaft public static readonly Dictionary AnzeigeNamen = new Dictionary() { { "Kein Rhythmus", Unbekannt }, { "1x Mo", WoechentlichMo }, { "1x Di", WoechentlichDi }, { "1x Mi", WoechentlichMi }, { "1x Do", WoechentlichDo }, { "1x Fr", WoechentlichFr }, { "2x Mo/Do", ZweimalMoDo }, { "2x Di/Fr", ZweimalDiFr }, { "3x Mo/Mi/Fr", DreimalMoMiFr }, { "4x Mo/Di/Do/Fr", ViermalMoDiDoFr }, { "Täglich Mo-Fr", TaeglichMoFr }, }; private static readonly Dictionary RhythmusAnzeige = AnzeigeNamen .ToDictionary(kvp => kvp.Value, kvp => kvp.Key); public static int GetMaxClonesNet48(this Liefertage liefertage) { int count = 0; uint flag = (uint)liefertage; while (flag != 0) { count++; flag &= flag - 1; // rechtes Bit löschen } return count; } public static string GetAnzeigeText(this Liefertage rhythmus) { return RhythmusAnzeige.TryGetValue(rhythmus, out string text) ? text : "Unbekannt"; } } }