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)
{
@CocktailCode
- }
+ }
@@ -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