Programm_Wirl/AA-Klassen/Lieferrhythmus.cs

75 lines
2.5 KiB
C#

using DatenDB;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Deckungsbeitrag.AA_Klassen
{
[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 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<string, Liefertage> AnzeigeNamen = new Dictionary<string, Liefertage>()
{
{ "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<Liefertage, string> 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";
}
}
}