Przejdź do głównej zawartości

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}";
}
}