Wyświetlanie względnej ilości modyfikatorów
Uwzględniając wartość ustawienia IRestaurant.DisplayRelativeNumberOfModifiers w Syrve POS, obliczana jest liczba porcji modyfikatora w formie tekstowej, która jest wyświetlana w interfejsie użytkownika.
Na przykład danie ma modyfikator Śmietana, który jest uwzględniony w grupie modyfikatorów. Dla tego modyfikatora obowiązuje:
- ilość zależy od ilości dania głównego
- modyfikator jest darmowy
- domyślna ilość modyfikatora to 3
Wtedy jeśli IRestaurant.DisplayRelativeNumberOfModifiers jest true, zostanie wyświetlone:
- +2 Śmietana, jeśli zwiększymy ilość modyfikatora o 2
- - Śmietana, jeśli zmniejszymy ilość o 1
Jeśli IRestaurant.DisplayRelativeNumberOfModifiers jest false, wyświetlana będzie bezwzględna ilość modyfikatora w daniu:
- x5 Śmietana, jeśli zwiększymy ilość modyfikatora o 2
- x2 Śmietana, jeśli zmniejszymy ilość o 1
Dla wygody twórców wtyczek i możliwości przeniesienia logiki do ich UI, oto przykład jak uzyskać linię z liczbą modyfikatorów.
Metoda CalculateModifierAmountString przyjmuje
decimal modifierAmount— ilość porcji modyfikatora,int defaultAmount— domyślna ilość porcji modyfikatora,bool hideIfDefaultAmount— ukryj, jeśli ilość jest domyślna,bool isPaid— czy modyfikator jest płatny,bool isAmountIndependentOfParentAmount— czy ustawiono „Ilość niezależna od ilości dania” dla tego modyfikatora.
W rezultacie zwraca linię w formacie <znak><liczba>, która ma być wyświetlana w UI obok nazwy modyfikatora, aby użytkownik widział na ekranie <znak><liczba> <nazwa modyfikatora>.
public static string CalculateModifierAmountString(decimal modifierAmount, int defaultAmount, bool hideIfDefaultAmount, bool isPaid, bool isAmountIndependentOfParentAmount)
{
// Ustaw metodę wyświetlania ilości modyfikatorów grupy dania.
var showDeltaAmount = PluginContext.Operations.GetHostRestaurant().DisplayRelativeNumberOfModifiers;
// Jeśli opcja "Ilość niezależna od ilości dania" jest włączona, zawsze piszemy "+N".
if (isAmountIndependentOfParentAmount)
return $"+{modifierAmount}";
// Jeśli modyfikator jest płatny lub pokazujemy bezwzględną liczbę modyfikatorów, piszemy "×N".
const string charX = "\u00D7";
var multiplyAmountString = $"{charX}{modifierAmount}";
if (isPaid || !showDeltaAmount)
return multiplyAmountString;
// Pokazuje względną ilość modyfikatorów.
var deltaAmount = modifierAmount - defaultAmount;
switch (deltaAmount)
{
case 1:
return "+";
case -1:
return "-";
case 0 when hideIfDefaultAmount:
return string.Empty;
case 0:
return multiplyAmountString;
default:
return $"{deltaAmount:+#;-#;0}";
}
}