- Скидка: −{discountAmount.toLocaleString('ru-RU')} ₽ - {isFreeStay ? ' (бесплатное проживание)' : discountType === 'percent' ? ` (${discountValue}%)` : ''} + −{discountAmount.toLocaleString('ru-RU')} ₽ + {selectedDiscount.note ? ` · ${selectedDiscount.note}` : ''}
)}+ Цены и тарифы +
+Управление
-
+
Скидка активна
+ ++ Справочник скидок — выбирается при создании бронирования +
+{s.label}
+{s.value}
++ При создании бронирования менеджер выбирает скидку из этого справочника. + Скидка применяется к стоимости проживания. Активные скидки отображаются в выпадающем списке. +
+
+ {discount.code}
+
+
+ {TARGET_META[discount.target].label}
+
+ {!discount.isActive && (
+ Неактивна
+ )}
+ {discount.note}
+ )} ++ {discount.value === 100 ? 'Бесплатно' : `−${discount.value}${discount.valueType === 'percent' ? '%' : ' ₽'}`} +
+«{delTarget.name}» будет удалена из справочника.
++ Погодные правила применяются автоматически при подключении к API прогноза погоды (OpenWeather) +
++ Пример: база 5 000 ₽ → +{form.modifierValue}% + = {Math.round(5000 * (1 + form.modifierValue / 100)).toLocaleString('ru-RU')} ₽ +
+При конфликте — выше приоритет побеждает
+{format(day, 'd')}
++ {price.toLocaleString('ru-RU')} +
+ {mod !== 0 && ( +0 ? 'text-red-600 dark:text-red-400' : 'text-blue-600 dark:text-blue-400' + )}> + {mod > 0 ? `+${mod}` : mod}% +
+ )} ++ Правила автоматического изменения цен по дням, сезонам и погоде +
++ Правила применяются к базовой цене номера. При нескольких совпадающих правилах суммируются все надбавки/скидки. + Правило с более высоким приоритетом перекрывает остальные при конфликте. +
++ {rule.type === 'weekend' && rule.weekdays && ( + `Дни: ${rule.weekdays.map(d => WEEKDAY_LABELS[d]).join(', ')}` + )} + {['holiday','season','custom'].includes(rule.type) && rule.dateFrom && ( + `${rule.dateFrom} — ${rule.dateTo}` + )} + {rule.type === 'weather' && rule.weatherTypes && ( + `Погода: ${rule.weatherTypes.join(', ')}` + )} + {' · '} Приоритет: {rule.priority} +
+Интеграция с погодой
++ Правила типа «Погода» применяются автоматически при подключении OpenWeather API в настройках. + Прогноз загружается на 7 дней вперёд и обновляется каждые 6 часов. +
+ +«{delTarget.name}» будет удалён.
++ Личный кабинет гостя (превью) +
+Добро пожаловать,
+{guest.name.split(' ')[0]}
+Уровень
+{level.name}
+Накопленные баллы
+{guest.points.toLocaleString('ru-RU')}
++ ≈ {Math.round(guest.points * settings.pointValue).toLocaleString('ru-RU')} ₽ к оплате +
+{p.label}
++ Гость получает ссылку на личный кабинет по email после первого бронирования. + Доступ — без пароля, по magic link. +
++ Уровни, бонусные баллы, личный кабинет гостя +
+{s.label}
+{s.value}
+{item.label}
+ {editSettings ? ( +{item.desc}
+ )} +| Гость | +Уровень | +Баллы | +Потрачено | +
|---|---|---|---|
|
+
+
+
+
+ {g.name.split(' ').map(p => p[0]).join('').slice(0, 2)}
+
+
+ {g.name}
+ |
+ {levelBadge(g.level)} | ++ + {g.points.toLocaleString('ru-RU')} + + | ++ + {g.totalSpent.toLocaleString('ru-RU')} ₽ + + | +
{item.text}
++ В будущих версиях баллы будут работать во всех отелях сети HotelSync — единая программа для всего бренда. +
++ Плановые и внеплановые перерывы в обслуживании номеров и услуг +
+{s.label}
+{s.value}
++ {active.length} активных перерыва +
++ Недоступные объекты автоматически блокируются в календаре бронирований и на странице доступности. +
+{record.reason}
+ {record.notes && ( +{record.notes}
+ )} +«{delTarget.targetLabel} — {delTarget.reason}» будет удалена.
++ Пример: {sampleBase.toLocaleString('ru-RU')} + {modifier > 0 ? '+' : ''}{modifier.toLocaleString('ru-RU')} = {effectivePrice.toLocaleString('ru-RU')} ₽/ночь +
+ )} +Тариф активен
+Гости смогут выбрать этот тариф при бронировании
++ Создайте тарифные планы для разных условий проживания +
+{s.label}
+{s.value}
++ Тарифы применяются при создании бронирования — гость или менеджер выбирает подходящий план. + Надбавка или скидка рассчитывается относительно базовой цены номера автоматически. +
+{tariff.description || mp.description}
+ + {/* Inclusions */} +0 ? 'text-amber-600 dark:text-amber-400' + : tariff.modifierValue < 0 ? 'text-emerald-600 dark:text-emerald-400' + : 'text-slate-500', + )}> + {modLabel} +
+к базовой цене
++ «{deleteTarget.name}» будет удалён. Это не затронет уже созданные бронирования. +
+