diff --git a/CocktailWeb/Pages/CocktailView.razor b/CocktailWeb/Pages/CocktailView.razor index 74ce6f5..144f853 100644 --- a/CocktailWeb/Pages/CocktailView.razor +++ b/CocktailWeb/Pages/CocktailView.razor @@ -17,46 +17,95 @@ @if (SelectedCocktail == null) {

Cocktail konnte nicht gefunden werden

+ } else { -
-
-
- ... +
+
+
+
+
+
Einstellungen
+

+

+ Stärke +
+
+ + + + + + + +
+

+ + @if (ErrorMessage != null) + { + + } + @if(CocktailCode != null) + { + + } + +
+
-
-
-
@SelectedCocktail.Name
-

-

Zutaten:
-
    - @foreach (var Zutat in SelectedCocktail.Cocktailflaschen.OrderBy(f => f.Reihenfolge)) - { - @if (MaschinenFiller != null && MaschinenFiller.Exists(f => f.Flasche == Zutat.Flasche)) - { -
  • @Zutat.Flasche?.Name (@Zutat.Menge ml)
  • +
+
+
+
+ ... +
+
+
+
@SelectedCocktail.Name
+

+

Rezept:
+ + @{ + int i = 1; } - else + @foreach (var Zutat in SelectedCocktail.Cocktailflaschen.OrderBy(f => f.Reihenfolge)) { - @* Zutat nicht in MaschinenFiller gefunden - Daher ist Maschine nicht damit bestückt*@ -
  • @Zutat.Flasche?.Name (@Zutat.Menge ml) (nicht geladen)
  • + + + + + @if (DrinkIntensity != 0) + { + + + } + + + i++; } - } - -

    + + + + + @if (DrinkIntensity != 0) + { + + + } + + +
    @i.@Zutat.Flasche?.Name@Zutat.Menge ml=>@ModifiedCocktail?.Cocktailflaschen.First(cf => cf.FlascheID == Zutat.FlascheID).Menge ml@(ZutatInMaschine(Zutat) ? "" : "fehlt")
    Gesamt@SelectedCocktail.Cocktailflaschen.Sum(cf => cf.Menge) ml=>@ModifiedCocktail?.Cocktailflaschen.Sum(cf => cf.Menge) ml
    +

    +
    - - @if (ValideMische) - { - - } else - { - - } } @@ -65,21 +114,133 @@ else public string? CocktailId { get; set; } private DbDataContext? _DataContext; private Cocktail? SelectedCocktail; + private Cocktail? ModifiedCocktail; private List? MaschinenFiller; + //private List ModifiedCocktailRecipe = new(); - private bool ValideMische = true; + private int DrinkIntensity = 0; + + private string? ErrorMessage; + private string? CocktailCode; protected override async Task OnInitializedAsync() { int id = Convert.ToInt32(CocktailId); + //Staerke_Off.Add(); + _DataContext ??= await DataContextFactory.CreateDbContextAsync(); if (_DataContext != null) { SelectedCocktail = _DataContext.Cocktails.Include(c => c.Cocktailflaschen).ThenInclude(cf => cf.Flasche).Single(c => c.Id == id); + ModifiedCocktail = _DataContext.Cocktails.Include(c => c.Cocktailflaschen).ThenInclude(cf => cf.Flasche).AsNoTracking().Single(c => c.Id == id); MaschinenFiller = _DataContext.Fillers.Include(f => f.Flasche).OrderBy(f => f.Pos).ToList(); } + // if (SelectedCocktail != null) + // { + // foreach (CocktailFlasche cf in SelectedCocktail.Cocktailflaschen) + // { + // ModifiedCocktailRecipe.Add(new CocktailFlasche() { + // Flasche = cf.Flasche, + // Menge = cf.Menge + // }); + // } + // } + + } + + private bool ZutatInMaschine(CocktailFlasche zutat) + { + return (MaschinenFiller != null && MaschinenFiller.Exists(f => f.Flasche == zutat.Flasche)); + } + + /// + /// Prüft, ob der Cocktail gesendet werden kann + /// + /// + private bool IsValid() + { + ErrorMessage = null; + if (ModifiedCocktail == null || MaschinenFiller == null) + { + ErrorMessage = "Cocktail nicht gefunden."; + return false; + } + if (ModifiedCocktail.Cocktailflaschen.Count == 0) + { + ErrorMessage = "Der Cocktail enthält keine Zutaten"; + return false; + } + if (!ModifiedCocktail.Cocktailflaschen.All(cf => MaschinenFiller.Any(mf => mf.Flasche?.Id == cf.FlascheID))) + { + ErrorMessage = "Es sind nicht alle Zutaten in der Cocktailmaschine geladen!"; + return false; + } + return true; + } + + + private void CreateCocktailCode() + { + CocktailCode = null; + if (!IsValid() || ModifiedCocktail == null || MaschinenFiller == null) return; + + List lines = new(); + lines.Add("START"); + + @foreach (CocktailFlasche Zutat in ModifiedCocktail.Cocktailflaschen.OrderBy(f => f.Reihenfolge)) + { + string line = ""; + Filler Filler = MaschinenFiller.First(mf => mf.Flasche?.Id == Zutat.FlascheID); + if (Filler.Type == Filler.FillerType.Pump) + { + line = $"P{Filler.Pos}={Zutat.Menge}"; + } else if (Filler.Type == Filler.FillerType.Pourer) + { + line = $"F{Filler.Pos}={Zutat.Menge}"; + } + lines.Add(line); + } + + lines.Add("ZIEL"); + CocktailCode = String.Join("\r\n", lines.ToArray()); + } + + /// + /// Setzt die Alkoholintensität + /// + /// Zugabe/Abzug von Alkohol in Prozent + private void SetIntensity(int intensity) + { + DrinkIntensity = intensity; + if (ModifiedCocktail != null && SelectedCocktail != null) + { + + foreach (CocktailFlasche cf in ModifiedCocktail.Cocktailflaschen) + { + int OriginalMenge = SelectedCocktail.Cocktailflaschen.First(scf => scf.FlascheID == cf.FlascheID).Menge; + if (cf.Flasche.Alkoholisch) + { + cf.Menge = OriginalMenge + (OriginalMenge * intensity / 100); + } + else + { + cf.Menge = OriginalMenge - (OriginalMenge * intensity / 100); + } + } + + // Durch das anteilige Umrechnen ändert sich die Gesamtmenge, daher passen wir die Mengen nochmal an + int AktGesMenge = ModifiedCocktail.Cocktailflaschen.Sum(cf => cf.Menge); + int OrigMenge = SelectedCocktail.Cocktailflaschen.Sum(cf => cf.Menge); + foreach (CocktailFlasche cf in ModifiedCocktail.Cocktailflaschen) + { + cf.Menge = (int)((float)cf.Menge / AktGesMenge * OrigMenge); + } + + } + + } }