Показ относительного количества модификаторов
С учетом значения настройки IRestaurant.DisplayRelativeNumberOfModifiers
в iikoFront рассчитывается количество порций модификатора в строковом виде, которое отображается на UI.
Например, у блюда есть модификатор Сметана, входящий в группу модификаторов. Для данного модификатора выполняется:
- количество зависит от количества основного блюда
- модификатор является бесплатным
- количество модификатора по умолчанию равно 3
Тогда при IRestaurant.DisplayRelativeNumberOfModifiers
равном true
отобразится:
- +2 Сметана, если увеличить количество модификатора на 2
- - Сметана, если уменьшаем количество на 1
При IRestaurant.DisplayRelativeNumberOfModifiers
равном false
отобразится абсолютное количество модификатора у блюда:
- х5 Сметана, если увеличить количество модификатора на 2
- х2 Сметана, если уменьшить на 1
Для удобства разработчиков плагинов и возможности перенести логику к себе на UI, приведем пример получения строки количества модификаторов здесь.
Метод CalculateModifierAmountString принимает
decimal modifierAmount
— количество порций модификатора,int defaultAmount
— количество порций модификатора по умолчанию,bool hideIfDefaultAmount
— настроено ли для данного группового модификатора “Скрывать, если количество по умолчанию”,bool isPaid
— является ли модификатор платным,bool isAmountIndependentOfParentAmount
— настроено ли для данного модификатора “Количество не зависит от количества блюда”.
И в результате возвращает строку вида <знак><число>
, которую нужно отобразить на UI рядом с названием модификатора, чтобы пользователь увидел на экране <знак><число> <имя модификатора>
.
public static string CalculateModifierAmountString(decimal modifierAmount, int defaultAmount, bool hideIfDefaultAmount, bool isPaid, bool isAmountIndependentOfParentAmount)
{
// Настройка способа отображения количества групповых модификаторов блюда.
var showDeltaAmount = PluginContext.Operations.GetHostRestaurant().DisplayRelativeNumberOfModifiers;
// Если включена опция "Количество не зависит от количества блюда", то всегда пишем "+N".
if (isAmountIndependentOfParentAmount)
return $"+{modifierAmount}";
// Если модификатор платный или показываем абсолютное количество модификаторов, то пишем "×N".
const string charX = "\u00D7";
var multiplyAmountString = $"{charX}{modifierAmount}";
if (isPaid || !showDeltaAmount)
return multiplyAmountString;
// Показываем относительное количество модификаторов.
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}";
}
}