diff --git a/CocktailWeb/GeneralSettings.cs b/CocktailWeb/GeneralSettings.cs index dd1bfe2..34af356 100644 --- a/CocktailWeb/GeneralSettings.cs +++ b/CocktailWeb/GeneralSettings.cs @@ -2,8 +2,8 @@ { public class GeneralSettings { - public int MaxAllowedUploadSizeInMB { get; set; } = 10; + public string ImageUploadDir { get; set; } = "images"; public string SerialPort { get; set; } = "COM5"; diff --git a/CocktailWeb/Pages/CocktailView.razor b/CocktailWeb/Pages/CocktailView.razor index 144f853..9fe1ad2 100644 --- a/CocktailWeb/Pages/CocktailView.razor +++ b/CocktailWeb/Pages/CocktailView.razor @@ -31,15 +31,30 @@ else
Stärke
-
- - - - - - - -
+ @if (!UseNewIntensityCalc) + { +
+ + + + + + + +
+ } + else + { +
+ + + + + + + +
+ }

@if (ErrorMessage != null) @@ -48,12 +63,12 @@ else @ErrorMessage } - @if(CocktailCode != null) + @if (CocktailCode != null) { - } + } @@ -120,6 +135,8 @@ else private int DrinkIntensity = 0; + private bool UseNewIntensityCalc = false; + private string? ErrorMessage; private string? CocktailCode; @@ -181,6 +198,9 @@ else } + /// + /// Erstellt den für die Arduino-Steuerung erforderlichen Code + /// private void CreateCocktailCode() { CocktailCode = null; @@ -196,50 +216,93 @@ else if (Filler.Type == Filler.FillerType.Pump) { line = $"P{Filler.Pos}={Zutat.Menge}"; - } else if (Filler.Type == Filler.FillerType.Pourer) + } + 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()); + lines.Add("ZIEL"); + CocktailCode = String.Join("\r\n", lines.ToArray()); } /// - /// Setzt die Alkoholintensität + /// Setzt die Alkoholintensität und berechnet die Mengen für ModifiedCocktail entsprechend neu /// /// Zugabe/Abzug von Alkohol in Prozent private void SetIntensity(int intensity) { DrinkIntensity = intensity; - if (ModifiedCocktail != null && SelectedCocktail != null) + if (ModifiedCocktail == null || SelectedCocktail == null) return; + + foreach (CocktailFlasche cf in ModifiedCocktail.Cocktailflaschen) { - - foreach (CocktailFlasche cf in ModifiedCocktail.Cocktailflaschen) + int OriginalMenge = SelectedCocktail.Cocktailflaschen.First(scf => scf.Id == cf.Id).Menge; + if (cf.Flasche.Alkoholisch) { - 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); - } + 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) + else { - cf.Menge = (int)((float)cf.Menge / AktGesMenge * OrigMenge); + 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); + } + } + + + // ToDo: Ggf. noch Rundungsfehler drin oder wirklich noch grobe Fehler in der Mathematik.. Gesamtmenge passt irgendwie nicht. + /// + /// Ändert die Alkoholintensität basierend auf den Prozentwerten anstatt der Menge + /// + /// Intensitätslevel (z.B. -1, 0, 1,2 ...) + private void SetIntensityPercentual(int intensitylevel) + { + DrinkIntensity = intensitylevel; + if (ModifiedCocktail == null || SelectedCocktail == null) return; + int DivideParts = 4; // Gibt an, in wieviele Teile die nicht-alkoholische Gesamtmenge aufgeteilt wird. Sollte mindestens 1 oder 2 mehr als das Max.Intensitätslevel sein + float IncreasePerLevel_pct; // Gibt an, um welchen Anteil in % die alkoholischen Getränke steigen. + + float SumAlcoholic_ml = SelectedCocktail.Cocktailflaschen.Where(cf => cf.Flasche.Alkoholisch).Sum(cf => cf.Menge); // Summe in ml der Alkoholhaltigen Zutaten + float SumNonAlcoholic_ml = SelectedCocktail.Cocktailflaschen.Where(cf => !cf.Flasche.Alkoholisch).Sum(cf => cf.Menge); // Summe in ml der Alkoholfreien Zutaten + float SumTotal = SumAlcoholic_ml + SumNonAlcoholic_ml; + float SumAlcoholic_pct = SumAlcoholic_ml / SumTotal * 100; //Prozentwert an alkoholhaltigen Zutaten + float SumNonAlcoholic_pct = SumNonAlcoholic_ml / SumTotal * 100; //Prozentwert an alkoholhaltigen Zutaten + float SumBasis_ml = intensitylevel >= 0 ? SumNonAlcoholic_ml : SumAlcoholic_ml; // Wenn Intensität > 0, dann ist Summenbasis nichtalkoholisch, ansonsten alkoholisch + if (intensitylevel >= 0) + { + /// Wenn alkoholhaltiges 30% ausmacht, teilen wir den Rest (alkoholfreis, 70%) durch die o.g. DivideParts, damit wir wissen um wieviel Prozent pro Stufe wir erhöhen können + IncreasePerLevel_pct = SumNonAlcoholic_pct / DivideParts; + } + else + { + // Cocktail abschwächen, daher teilen wir in die andere Richtung auf + IncreasePerLevel_pct = SumAlcoholic_pct / DivideParts; + } + + + foreach (CocktailFlasche cf in ModifiedCocktail.Cocktailflaschen) + { + float OrigMenge = SelectedCocktail.Cocktailflaschen.First(f => f.Id == cf.Id).Menge; + // Herausfinden, wieviel Prozent die Zutat in ihrem Bereich (Alkoholisch/Nichtalkoholisch) ausmacht + float ZutatIncrease_pct = IncreasePerLevel_pct / SumBasis_ml * cf.Menge; + float ZutatMenge_pct = (float)OrigMenge / SumTotal * 100; + // Neue Menge in Prozent: ZutatMenge_pct + ZutatIncrease_pct + if (!cf.Flasche.Alkoholisch ^ intensitylevel < 0 ) + { + ZutatIncrease_pct *= -1; + } + cf.Menge = (int)Math.Round(OrigMenge / ZutatMenge_pct * (ZutatMenge_pct + (ZutatIncrease_pct * intensitylevel)), 0, MidpointRounding.AwayFromZero); + } } diff --git a/CocktailWeb/Notizen.txt b/CocktailWeb/_Docs/Notizen.txt similarity index 100% rename from CocktailWeb/Notizen.txt rename to CocktailWeb/_Docs/Notizen.txt diff --git a/CocktailWeb/_Docs/ProzentualeVerteilung.xlsx b/CocktailWeb/_Docs/ProzentualeVerteilung.xlsx new file mode 100644 index 0000000..3dd2e09 Binary files /dev/null and b/CocktailWeb/_Docs/ProzentualeVerteilung.xlsx differ