@page "/cocktails/{CocktailId}" @using CocktailWeb.Data @using Microsoft.AspNetCore.Components.Sections @using Microsoft.EntityFrameworkCore @inject IDbContextFactory DataContextFactory; Zurück @if (SelectedCocktail == null) {

Cocktail konnte nicht gefunden werden

} else {
Einstellungen

Stärke

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

Rezept:
@{ int i = 1; } @foreach (var Zutat in SelectedCocktail.Cocktailflaschen.OrderBy(f => f.Reihenfolge)) { @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

} @code { [Parameter] public string? CocktailId { get; set; } private DbDataContext? _DataContext; private Cocktail? SelectedCocktail; private Cocktail? ModifiedCocktail; private List? MaschinenFiller; //private List ModifiedCocktailRecipe = new(); 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); } } } }