diff --git a/src/pages/AdminPromocodeCreate.tsx b/src/pages/AdminPromocodeCreate.tsx index f24c39a..56f703c 100644 --- a/src/pages/AdminPromocodeCreate.tsx +++ b/src/pages/AdminPromocodeCreate.tsx @@ -87,8 +87,15 @@ export default function AdminPromocodeCreate() { setMode(data.type); } else { setMode('bonus_set'); - setIncludeBalance(data.type === 'balance' || data.type === 'balance_and_days'); - setIncludeDays(data.type === 'subscription_days' || data.type === 'balance_and_days'); + // Галочки поднимаем по ЗНАЧЕНИЯМ, а не по типу. С появлением трафика + // balance_and_days перестал означать «есть и баланс, и дни»: этот тип + // теперь у любого набора с трафиком, в том числе с нулевым балансом и + // нулём дней. По типу такой код открывался бы с двумя чужими галочками + // на нулях, валидация требовала бы «больше 0», и Сохранить не работало + // бы, пока админ их не снимет, — а подсказка толкает вместо этого + // вписать сумму и молча добавить коду бонус, которого в нём не было. + setIncludeBalance(data.type === 'balance' || (data.balance_bonus_rubles || 0) > 0); + setIncludeDays(data.type === 'subscription_days' || (data.subscription_days || 0) > 0); // Промогруппа комбинируется с любым составом (bэкенд назначает её // независимо от типа), поэтому чекбокс — по факту наличия группы setIncludeGroup(data.type === 'promo_group' || !!data.promo_group_id); diff --git a/src/pages/AdminPromocodes.tsx b/src/pages/AdminPromocodes.tsx index 924dc29..d4bb5e1 100644 --- a/src/pages/AdminPromocodes.tsx +++ b/src/pages/AdminPromocodes.tsx @@ -196,16 +196,27 @@ export default function AdminPromocodes() { {/* Info line */}
- {(promo.type === 'balance' || promo.type === 'balance_and_days') && ( - - +{promo.balance_bonus_rubles} {t('admin.promocodes.form.rub')} - - )} + {/* Составляющие показываем по значению, а не по типу: + balance_and_days теперь стоит и у набора, где баланса + или дней нет вовсе, — иначе в списке висело бы «+0 ₽ + +0 дн.» у кода, который на самом деле раздаёт трафик. */} + {(promo.type === 'balance' || promo.type === 'balance_and_days') && + promo.balance_bonus_rubles > 0 && ( + + +{promo.balance_bonus_rubles} {t('admin.promocodes.form.rub')} + + )} {(promo.type === 'subscription_days' || promo.type === 'trial_subscription' || - promo.type === 'balance_and_days') && ( + promo.type === 'balance_and_days') && + promo.subscription_days > 0 && ( + + +{promo.subscription_days} {t('admin.promocodes.form.days')} + + )} + {promo.type === 'balance_and_days' && (promo.traffic_gb || 0) > 0 && ( - +{promo.subscription_days} {t('admin.promocodes.form.days')} + +{promo.traffic_gb} {t('admin.promocodes.form.gb')} )} {promo.type === 'discount' && (