feat: настройки оплаты — способы оплаты + контроль при заселении

- Миграция 064: таблица hotel_payment_methods, поле require_payment_checkin
- Бэкенд: CRUD /api/hotels/:slug/payment-methods, /api/hotels/:slug/payment-settings
- PaymentSettingsPage (/settings/payments): управление способами оплаты
  (название, валюта, тип, активность, сортировка), контроль при заселении (нет/мягкий/жёсткий)
- BookingDetailPanel: динамические методы оплаты вместо захардкоженных
- Кнопка «Заселить»: hard — заблокирована при балансе > 0; soft — предупреждение с выбором

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-06 16:12:38 +03:00
parent 45a8cf7c10
commit f94d4723d5
8 changed files with 632 additions and 24 deletions

View File

@@ -0,0 +1,23 @@
-- Hotel payment methods (configurable per hotel)
CREATE TABLE hotel_payment_methods (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
hotel_id UUID NOT NULL REFERENCES hotels(id) ON DELETE CASCADE,
name TEXT NOT NULL,
currency TEXT NOT NULL DEFAULT 'RUB',
type TEXT NOT NULL DEFAULT 'cash', -- cash, card, transfer, other
is_active BOOLEAN NOT NULL DEFAULT true,
sort_order INTEGER NOT NULL DEFAULT 0
);
-- Require payment on check-in: none | soft | hard
ALTER TABLE hotels ADD COLUMN IF NOT EXISTS require_payment_checkin TEXT NOT NULL DEFAULT 'none';
-- Seed default payment methods for existing hotels
INSERT INTO hotel_payment_methods (hotel_id, name, currency, type, sort_order)
SELECT id, 'Наличные', 'RUB', 'cash', 0 FROM hotels;
INSERT INTO hotel_payment_methods (hotel_id, name, currency, type, sort_order)
SELECT id, 'Банковская карта', 'RUB', 'card', 1 FROM hotels;
INSERT INTO hotel_payment_methods (hotel_id, name, currency, type, sort_order)
SELECT id, 'Перевод (СБП)', 'RUB', 'transfer', 2 FROM hotels;