bot upgraded

This commit is contained in:
2024-12-07 11:17:31 +09:00
parent e1c2ddbdb9
commit 66cf6ae940
8 changed files with 381 additions and 36 deletions

View File

@@ -1,7 +1,7 @@
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update
from telegram.ext import ContextTypes from telegram.ext import ContextTypes
from users.models import User from users.models import User
from hotels.models import Hotel, UserHotel from hotels.models import Hotel, UserHotel, Reservation
from users.models import NotificationSettings from users.models import NotificationSettings
from asgiref.sync import sync_to_async from asgiref.sync import sync_to_async
import smtplib import smtplib
@@ -9,7 +9,9 @@ from hotels.models import PMSIntegrationLog
import requests import requests
from email.mime.text import MIMEText from email.mime.text import MIMEText
from django.core.mail import send_mail from django.core.mail import send_mail
from datetime import datetime from datetime import datetime, timedelta
from fpdf import FPDF
import os
# --- Вспомогательные функции --- # --- Вспомогательные функции ---
async def get_user_from_chat_id(chat_id): async def get_user_from_chat_id(chat_id):
@@ -78,9 +80,15 @@ async def manage_hotels(update: Update, context: ContextTypes.DEFAULT_TYPE):
async def handle_button_click(update: Update, context: ContextTypes.DEFAULT_TYPE): async def handle_button_click(update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Обработчик всех нажатий кнопок""" """Обработчик всех нажатий кнопок"""
query = update.callback_query query = update.callback_query
print(f"Обработчик кнопок: Получен callback_data = {query.data}") await query.answer()
if query.data == "manage_hotels": if query.data == "stats":
await statistics(update, context) # Добавляем вызов функции для обработки статистики
elif query.data.startswith("stats_hotel_"):
await stats_select_period(update, context)
elif query.data.startswith("stats_period_"):
await generate_statistics(update, context)
elif query.data == "manage_hotels":
await manage_hotels(update, context) await manage_hotels(update, context)
elif query.data.startswith("hotel_"): elif query.data.startswith("hotel_"):
await hotel_actions(update, context) await hotel_actions(update, context)
@@ -100,7 +108,6 @@ async def handle_button_click(update: Update, context: ContextTypes.DEFAULT_TYPE
await set_notification_time(update, context) await set_notification_time(update, context)
elif query.data == "current_settings": elif query.data == "current_settings":
await show_current_settings(update, context) await show_current_settings(update, context)
else: else:
print(f"Неизвестный callback_data: {query.data}") print(f"Неизвестный callback_data: {query.data}")
await query.edit_message_text("Команда не распознана.") await query.edit_message_text("Команда не распознана.")
@@ -433,3 +440,136 @@ async def check_pms_integration(update: Update, context: ContextTypes.DEFAULT_TY
message=str(e), message=str(e),
) )
await query.edit_message_text(f"Произошла ошибка: {str(e)}") await query.edit_message_text(f"Произошла ошибка: {str(e)}")
async def get_hotels_for_user(user_id):
"""Получение отелей, связанных с пользователем."""
user = await sync_to_async(User.objects.filter(chat_id=user_id).first)()
if not user:
return []
return await sync_to_async(list)(
Hotel.objects.filter(userhotel__user=user).distinct()
)
async def get_reservations(hotel_id, start_date=None, end_date=None):
"""Получение статистики бронирований по отелю."""
query = Reservation.objects.filter(hotel_id=hotel_id)
if start_date:
query = query.filter(check_in__gte=start_date)
if end_date:
query = query.filter(check_out__lte=end_date)
return await sync_to_async(list)(query)
def generate_pdf_report(hotel_name, reservations, start_date, end_date):
"""Генерация PDF отчета."""
pdf = FPDF()
pdf.add_page()
# Подключение шрифта, поддерживающего кириллицу
font_path = os.path.join("fonts", "OpenSans-Regular.ttf")
print(f'\n\n\nПуть к шрифту: {font_path}\n\n\n') # Укажите путь к шрифту DejaVuSans.ttf
if not os.path.exists(font_path):
raise FileNotFoundError("Шрифт OpenSans-Regular.ttf не найден. Убедитесь, что он находится в папке 'fonts'.")
pdf.add_font("DejaVu", "", font_path, uni=True)
pdf.set_font("DejaVu", size=12)
# Заголовки
title = f"Отчет по заселениям: {hotel_name}"
period = (
f"Период: {start_date.strftime('%d.%m.%Y')} - {end_date.strftime('%d.%m.%Y')}"
if start_date and end_date
else "Период: Все время"
)
pdf.cell(200, 10, txt=title, ln=True, align="C")
pdf.cell(200, 10, txt=period, ln=True, align="C")
pdf.ln(10)
# Заголовки таблицы
pdf.set_font("DejaVu", size=10)
pdf.cell(40, 10, "Дата заезда", border=1)
pdf.cell(40, 10, "Дата выезда", border=1)
pdf.cell(30, 10, "Номер", border=1)
pdf.cell(50, 10, "Тип комнаты", border=1)
pdf.cell(30, 10, "Цена", border=1)
pdf.ln()
# Добавление данных
for res in reservations:
guests = ", ".join([guest.name for guest in res.guests.all()])
pdf.cell(40, 10, res.check_in.strftime('%d.%m.%Y'), border=1)
pdf.cell(40, 10, res.check_out.strftime('%d.%m.%Y'), border=1)
pdf.cell(30, 10, res.room_number, border=1)
pdf.cell(50, 10, res.room_type, border=1)
pdf.cell(30, 10, f"{res.price}", border=1)
pdf.ln()
pdf.multi_cell(200, 10, f"Гости: {guests}")
# Сохранение файла
file_path = os.path.join("reports", f"{hotel_name}_report.pdf")
os.makedirs(os.path.dirname(file_path), exist_ok=True)
pdf.output(file_path)
return file_path
# --- Обработчики ---
async def statistics(update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Вывод списка отелей для статистики."""
query = update.callback_query
user_id = query.from_user.id
await query.answer()
hotels = await get_hotels_for_user(user_id)
if not hotels:
await query.edit_message_text("У вас нет доступных отелей для статистики.")
return
keyboard = [[InlineKeyboardButton(hotel.name, callback_data=f"stats_hotel_{hotel.id}")] for hotel in hotels]
reply_markup = InlineKeyboardMarkup(keyboard)
await query.edit_message_text("Выберите отель:", reply_markup=reply_markup)
async def stats_select_period(update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Выбор периода времени для статистики."""
query = update.callback_query
await query.answer()
hotel_id = int(query.data.split("_")[2])
context.user_data["selected_hotel"] = hotel_id
keyboard = [
[InlineKeyboardButton("Неделя", callback_data="stats_period_week")],
[InlineKeyboardButton("Месяц", callback_data="stats_period_month")],
[InlineKeyboardButton("Все время", callback_data="stats_period_all")],
]
reply_markup = InlineKeyboardMarkup(keyboard)
await query.edit_message_text("Выберите период времени:", reply_markup=reply_markup)
async def generate_statistics(update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Генерация и отправка статистики."""
query = update.callback_query
await query.answer()
hotel_id = context.user_data["selected_hotel"]
period = query.data.split("_")[2]
now = datetime.now()
if period == "week":
start_date = now - timedelta(days=7)
end_date = now
elif period == "month":
start_date = now - timedelta(days=30)
end_date = now
else:
start_date = None
end_date = None
reservations = await get_reservations(hotel_id, start_date, end_date)
hotel = await sync_to_async(Hotel.objects.get)(id=hotel_id)
file_path = generate_pdf_report(hotel.name, reservations, start_date, end_date)
# Отправляем PDF файл пользователю
with open(file_path, "rb") as file:
await query.message.reply_document(document=file, filename=os.path.basename(file_path))

Binary file not shown.

View File

@@ -25,6 +25,9 @@ from bot.handlers import (
handle_notification_time, handle_notification_time,
schedule_notifications, schedule_notifications,
show_current_settings, show_current_settings,
statistics,
generate_statistics,
stats_select_period,
) )
# Настройка Django окружения # Настройка Django окружения
@@ -53,6 +56,9 @@ async def start_bot(application):
application.add_handler(CallbackQueryHandler(delete_hotel, pattern="^delete_hotel_")) application.add_handler(CallbackQueryHandler(delete_hotel, pattern="^delete_hotel_"))
application.add_handler(CallbackQueryHandler(check_pms, pattern="^check_pms_")) application.add_handler(CallbackQueryHandler(check_pms, pattern="^check_pms_"))
application.add_handler(CallbackQueryHandler(setup_rooms, pattern="^setup_rooms_")) application.add_handler(CallbackQueryHandler(setup_rooms, pattern="^setup_rooms_"))
application.add_handler(CallbackQueryHandler(statistics, pattern="^stats$"))
application.add_handler(CallbackQueryHandler(stats_select_period, pattern="^stats_hotel_"))
application.add_handler(CallbackQueryHandler(generate_statistics, pattern="^stats_period_"))
# Регистрация обработчиков текстовых сообщений # Регистрация обработчиков текстовых сообщений
print("Регистрация обработчиков текстовых сообщений...") print("Регистрация обработчиков текстовых сообщений...")

View File

@@ -1,6 +1,17 @@
from django.contrib import admin from django.contrib import admin
from .models import Hotel, UserHotel, APIConfiguration, APIRequestLog, PMSConfiguration, PMSIntegrationLog
from django import forms from django import forms
from .models import (
Hotel,
UserHotel,
APIConfiguration,
APIRequestLog,
PMSConfiguration,
PMSIntegrationLog,
Reservation,
Guest
)
# Custom form for Hotel to filter APIConfiguration
class HotelForm(forms.ModelForm): class HotelForm(forms.ModelForm):
class Meta: class Meta:
model = Hotel model = Hotel
@@ -8,49 +19,72 @@ class HotelForm(forms.ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
# Исключаем API, которые уже связаны с другими отелями # Exclude APIs already linked to another hotel
used_apis = Hotel.objects.exclude(api__isnull=True).values_list('api', flat=True) used_apis = Hotel.objects.exclude(api__isnull=True).values_list('api', flat=True)
self.fields['api'].queryset = APIConfiguration.objects.exclude(id__in=used_apis) self.fields['api'].queryset = APIConfiguration.objects.exclude(id__in=used_apis)
class HotelAdmin(admin.ModelAdmin): class HotelAdmin(admin.ModelAdmin):
form = HotelForm form = HotelForm
list_display = ('name', 'api', 'created_at', 'pms') list_display = ('name', 'api', 'created_at', 'pms')
search_fields = ('name',) search_fields = ('name',)
list_filter = ('pms', 'created_at')
ordering = ('-created_at',)
admin.site.register(Hotel, HotelAdmin) admin.site.register(Hotel, HotelAdmin)
@admin.register(UserHotel) @admin.register(UserHotel)
class UserHotelAdmin(admin.ModelAdmin): class UserHotelAdmin(admin.ModelAdmin):
list_display = ('user', 'hotel') list_display = ('user', 'hotel')
search_fields = ('user', 'hotel') search_fields = ('user__username', 'hotel__name')
list_filter = ('hotel',) list_filter = ('hotel',)
ordering = ('-hotel',) ordering = ('-hotel',)
@admin.register(APIConfiguration) @admin.register(APIConfiguration)
class ApiConfigurationAdmin(admin.ModelAdmin): class ApiConfigurationAdmin(admin.ModelAdmin):
list_display = ('name', 'url', 'token', 'username', 'password') list_display = ('name', 'url', 'token', 'username', 'password', 'last_updated')
search_fields = ('name', 'url', 'token', 'username', 'password') search_fields = ('name', 'url', 'token', 'username')
list_filter = ('name', 'url', 'token', 'username', 'password') list_filter = ('last_updated',)
ordering = ('-name',) ordering = ('-last_updated',)
@admin.register(APIRequestLog) @admin.register(APIRequestLog)
class ApiRequestLogAdmin(admin.ModelAdmin): class ApiRequestLogAdmin(admin.ModelAdmin):
list_display = ('api', 'request_time', 'response_status', 'response_data') list_display = ('api', 'request_time', 'response_status', 'response_data')
search_fields = ('api', 'request_time', 'response_status', 'response_data') search_fields = ('api__name', 'request_time', 'response_status')
list_filter = ('api', 'request_time', 'response_status', 'response_data') list_filter = ('api', 'response_status', 'request_time')
ordering = ('-api',) ordering = ('-request_time',)
@admin.register(PMSConfiguration) @admin.register(PMSConfiguration)
class PMSConfigurationAdmin(admin.ModelAdmin): class PMSConfigurationAdmin(admin.ModelAdmin):
list_display = ('name', 'parser_settings', 'description') list_display = ('name', 'parser_settings', 'description', 'created_at')
search_fields = ('name', 'description')
list_filter = ('created_at',)
ordering = ('-created_at',)
@admin.register(PMSIntegrationLog) @admin.register(PMSIntegrationLog)
class PMSIntegreationLogAdmin(admin.ModelAdmin): class PMSIntegrationLogAdmin(admin.ModelAdmin):
list_display = ('hotel', 'checked_at', 'status', 'message') list_display = ('hotel', 'checked_at', 'status', 'message')
search_fields = ('hotel', 'checked_at', 'status', 'message') search_fields = ('hotel__name', 'status', 'message')
list_filter = ('hotel', 'checked_at', 'status', 'message') list_filter = ('status', 'checked_at')
ordering = ('-checked_at',) ordering = ('-checked_at',)
@admin.register(Reservation)
class ReservationAdmin(admin.ModelAdmin):
list_display = ('reservation_id', 'hotel', 'room_number', 'room_type', 'check_in', 'check_out', 'status', 'price', 'discount')
search_fields = ('reservation_id', 'hotel__name', 'room_number', 'room_type', 'status')
list_filter = ('status', 'check_in', 'check_out')
ordering = ('-check_in',)
@admin.register(Guest)
class GuestAdmin(admin.ModelAdmin):
list_display = ('reservation', 'name', 'birthdate', 'phone', 'email')
search_fields = ('reservation__reservation_id', 'name', 'phone', 'email')
list_filter = ('reservation',)
ordering = ('-reservation',)

View File

@@ -0,0 +1,33 @@
import json
import pandas as pd
# Load the JSON file
file_path = '../../modules/analyzed_9.json'
with open(file_path, 'r', encoding='utf-8') as file:
data = json.load(file)
# Process the data into a structured format
reservations = []
for booking in data:
for guest in booking.get("guests", []):
reservations.append({
"Reservation ID": booking.get("id"),
"Hotel Name": booking.get("hotelName"),
"Room Number": booking.get("roomNumber"),
"Room Type": booking.get("roomTypeName"),
"Check-in": booking.get("from"),
"Check-out": booking.get("until"),
"Status": booking.get("checkInStatus"),
"Price": booking.get("reservationPrice"),
"Discount": booking.get("discount"),
"Guest Name": f"{guest.get('lastName', '')} {guest.get('firstName', '')} {guest.get('middleName', '')}".strip(),
"Guest Birthdate": guest.get("birthDate"),
"Guest Phone": guest.get("phone"),
"Guest Email": guest.get("email"),
})
# Convert to DataFrame for better visualization
df_reservations = pd.DataFrame(reservations)
# Display the structured data
import ace_tools as tools; tools.display_dataframe_to_user(name="Structured Reservations Data", dataframe=df_reservations)

View File

@@ -0,0 +1,48 @@
# Generated by Django 5.1.4 on 2024-12-07 00:35
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('hotels', '0010_apirequestlog_hotels_apir_api_id_686bb0_idx_and_more'),
]
operations = [
migrations.CreateModel(
name='Reservation',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('reservation_id', models.BigIntegerField(unique=True, verbose_name='ID бронирования')),
('room_number', models.CharField(max_length=50, verbose_name='Номер комнаты')),
('room_type', models.CharField(max_length=255, verbose_name='Тип комнаты')),
('check_in', models.DateTimeField(verbose_name='Дата заезда')),
('check_out', models.DateTimeField(verbose_name='Дата выезда')),
('status', models.CharField(max_length=50, verbose_name='Статус')),
('price', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='Цена')),
('discount', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='Скидка')),
('hotel', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='hotels.hotel', verbose_name='Отель')),
],
options={
'verbose_name': 'Бронирование',
'verbose_name_plural': 'Бронирования',
},
),
migrations.CreateModel(
name='Guest',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=255, verbose_name='Имя гостя')),
('birthdate', models.DateField(blank=True, null=True, verbose_name='Дата рождения')),
('phone', models.CharField(blank=True, max_length=50, null=True, verbose_name='Телефон')),
('email', models.EmailField(blank=True, max_length=254, null=True, verbose_name='Email')),
('reservation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='guests', to='hotels.reservation', verbose_name='Бронирование')),
],
options={
'verbose_name': 'Гость',
'verbose_name_plural': 'Гости',
},
),
]

View File

@@ -30,7 +30,8 @@ class APIConfiguration(models.Model):
class Meta: class Meta:
verbose_name = "Конфигурация API" verbose_name = "Конфигурация API"
verbose_name_plural = "Конфигурации API" verbose_name_plural = "Конфигурации API"
class Hotel(models.Model): class Hotel(models.Model):
name = models.CharField(max_length=255, verbose_name="Название отеля") name = models.CharField(max_length=255, verbose_name="Название отеля")
api = models.OneToOneField( api = models.OneToOneField(
@@ -50,14 +51,17 @@ class Hotel(models.Model):
class Meta: class Meta:
verbose_name = "Отель" verbose_name = "Отель"
verbose_name_plural = "Отели" verbose_name_plural = "Отели"
class PMSIntegrationLog(models.Model): class PMSIntegrationLog(models.Model):
hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE, verbose_name="Отель") hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE, verbose_name="Отель")
checked_at = models.DateTimeField(auto_now_add=True, verbose_name="Время проверки") checked_at = models.DateTimeField(auto_now_add=True, verbose_name="Время проверки")
status = models.CharField(max_length=50, verbose_name="Статус", choices=[('success', 'Успех'), ('error', 'Ошибка')]) status = models.CharField(max_length=50, verbose_name="Статус", choices=[('success', 'Успех'), ('error', 'Ошибка')])
message = models.TextField(verbose_name="Сообщение", blank=True, null=True) message = models.TextField(verbose_name="Сообщение", blank=True, null=True)
def __str__(self): def __str__(self):
return f"{self.hotel.name} - {self.status} - {self.checked_at}" return f"{self.hotel.name} - {self.status} - {self.checked_at}"
class Meta: class Meta:
verbose_name = "Журнал интеграции PMS" verbose_name = "Журнал интеграции PMS"
verbose_name_plural = "Журналы интеграции PMS" verbose_name_plural = "Журналы интеграции PMS"
@@ -66,21 +70,18 @@ class PMSIntegrationLog(models.Model):
models.Index(fields=['checked_at']), models.Index(fields=['checked_at']),
models.Index(fields=['status']), models.Index(fields=['status']),
] ]
class UserHotel(models.Model): class UserHotel(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="Пользователь") user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="Пользователь")
hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE, verbose_name="Отель") hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE, verbose_name="Отель")
def __str__(self): def __str__(self):
return f"{self.user.username} - {self.hotel.name}" return f"{self.user.username} - {self.hotel.name}"
class Meta: class Meta:
verbose_name = "Пользователь отеля" verbose_name = "Пользователь отеля"
verbose_name_plural = "Пользователи отелей" verbose_name_plural = "Пользователи отелей"
from django.db import models
class APIRequestLog(models.Model): class APIRequestLog(models.Model):
@@ -91,6 +92,7 @@ class APIRequestLog(models.Model):
def __str__(self): def __str__(self):
return f"{self.api.name} - {self.request_time}" return f"{self.api.name} - {self.request_time}"
class Meta: class Meta:
verbose_name = "Журнал запросов API" verbose_name = "Журнал запросов API"
verbose_name_plural = "Журналы запросов API" verbose_name_plural = "Журналы запросов API"
@@ -98,6 +100,37 @@ class APIRequestLog(models.Model):
models.Index(fields=['api']), models.Index(fields=['api']),
models.Index(fields=['request_time']), models.Index(fields=['request_time']),
] ]
from django.db import models
class Reservation(models.Model):
hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE, verbose_name="Отель")
reservation_id = models.BigIntegerField(unique=True, verbose_name="ID бронирования")
room_number = models.CharField(max_length=50, verbose_name="Номер комнаты")
room_type = models.CharField(max_length=255, verbose_name="Тип комнаты")
check_in = models.DateTimeField(verbose_name="Дата заезда")
check_out = models.DateTimeField(verbose_name="Дата выезда")
status = models.CharField(max_length=50, verbose_name="Статус")
price = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True, verbose_name="Цена")
discount = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True, verbose_name="Скидка")
def __str__(self):
return f"Бронирование {self.reservation_id} - {self.hotel.name}"
class Meta:
verbose_name = "Бронирование"
verbose_name_plural = "Бронирования"
class Guest(models.Model):
reservation = models.ForeignKey(Reservation, on_delete=models.CASCADE, related_name="guests", verbose_name="Бронирование")
name = models.CharField(max_length=255, verbose_name="Имя гостя")
birthdate = models.DateField(null=True, blank=True, verbose_name="Дата рождения")
phone = models.CharField(max_length=50, null=True, blank=True, verbose_name="Телефон")
email = models.EmailField(null=True, blank=True, verbose_name="Email")
def __str__(self):
return self.name
class Meta:
verbose_name = "Гость"
verbose_name_plural = "Гости"

View File

@@ -0,0 +1,51 @@
INSERT INTO hotels_Reservation (reservation_id, hotel_id, room_number, room_type, check_in, check_out, status, price, discount) VALUES (11005387, 1, '2406', 'junior suite bsv', '2024-12-05T15:00:00', '2024-12-08T12:00:00', 'Ожидание', 34734, -10374);
INSERT INTO hotels_Reservation (reservation_id, hotel_id, room_number, room_type, check_in, check_out, status, price, discount) VALUES (11121622, 1, '2304', 'junior suite bsv', '2024-12-06T15:00:00', '2024-12-09T12:00:00', 'Ожидание', 29523, -5208);
INSERT INTO hotels_Reservation (reservation_id, hotel_id, room_number, room_type, check_in, check_out, status, price, discount) VALUES (11121623, 1, '2406', 'junior suite bsv', '2024-12-06T15:00:00', '2024-12-09T12:00:00', 'Ожидание', 29523, -5208);
INSERT INTO hotels_Reservation (reservation_id, hotel_id, room_number, room_type, check_in, check_out, status, price, discount) VALUES (11121624, 1, '2409', 'junior suite bsv', '2024-12-06T15:00:00', '2024-12-09T12:00:00', 'Ожидание', 29523, -5208);
INSERT INTO hotels_Reservation (reservation_id, hotel_id, room_number, room_type, check_in, check_out, status, price, discount) VALUES (11121625, 1, '2404', 'junior suite bsv', '2024-12-06T15:00:00', '2024-12-09T12:00:00', 'Ожидание', 3, -34728);
INSERT INTO hotels_Reservation (reservation_id, hotel_id, room_number, room_type, check_in, check_out, status, price, discount) VALUES (11121626, 1, '2308', 'junior suite bsv', '2024-12-06T15:00:00', '2024-12-09T12:00:00', 'Ожидание', 29523, -5208);
INSERT INTO hotels_Reservation (reservation_id, hotel_id, room_number, room_type, check_in, check_out, status, price, discount) VALUES (11121627, 1, '2309', 'junior suite bsv', '2024-12-06T15:00:00', '2024-12-09T12:00:00', 'Ожидание', 29523, -5208);
INSERT INTO hotels_Reservation (reservation_id, hotel_id, room_number, room_type, check_in, check_out, status, price, discount) VALUES (11209172, 1, '2306', 'junior suite bsv', '2024-12-06T14:23:19', '2024-12-07T11:00:00', 'Заселен', 16431, 0);
INSERT INTO hotels_Reservation (reservation_id, hotel_id, room_number, room_type, check_in, check_out, status, price, discount) VALUES (11340869, 1, '2209', 'junior suite bsv', '2024-12-06T15:00:00', '2024-12-07T12:00:00', 'Ожидание', 10500, 0);
INSERT INTO hotels_Reservation (reservation_id, hotel_id, room_number, room_type, check_in, check_out, status, price, discount) VALUES (11343896, 1, '2206', 'junior suite bsv', '2024-12-06T15:00:00', '2024-12-08T10:00:00', 'Ожидание', 20690, -5172);
INSERT INTO hotels_Reservation (reservation_id, hotel_id, room_number, room_type, check_in, check_out, status, price, discount) VALUES (11403309, 1, '2406', 'junior suite bsv', '2024-12-06T13:16:33', '2024-12-07T12:00:00', 'Заселен', 0, 0);
INSERT INTO hotels_Reservation (reservation_id, hotel_id, room_number, room_type, check_in, check_out, status, price, discount) VALUES (11405187, 1, '2304', 'junior suite bsv', '2024-12-06T15:20:06', '2024-12-08T12:00:00', 'Заселен', 0, -28000);
INSERT INTO hotels_Reservation (reservation_id, hotel_id, room_number, room_type, check_in, check_out, status, price, discount) VALUES (11405986, 1, '2410', 'junior suite bsv', '2024-12-06T12:34:55', '2024-12-08T12:00:00', 'Заселен', 0, 0);
INSERT INTO hotels_Reservation (reservation_id, hotel_id, room_number, room_type, check_in, check_out, status, price, discount) VALUES (11408982, 1, '2404', 'junior suite bsv', '2024-12-06T16:05:19', '2024-12-07T12:00:00', 'Заселен', 0, 0);
INSERT INTO hotels_Reservation (reservation_id, hotel_id, room_number, room_type, check_in, check_out, status, price, discount) VALUES (11409769, 1, '2208', 'junior suite bsv', '2024-12-06T17:29:51', '2024-12-08T12:00:00', 'Заселен', 0, -21000);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11005387, 'СЕЛИНА ЕВГЕНИЯ МИХАЙЛОВНА', '1982-06-04T00:00:00', '+7 (928) 2254744', NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11005387, 'ШАБАНОВ ДМИТРИЙ ВИКТОРОВИЧ', '1972-01-24T00:00:00', NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11121622, 'БЕЛОКОНЬ ГРУППА РЕТРИТ', NULL, NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11121622, 'Гость', NULL, NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11121623, 'БЕЛОКОНЬ ГРУППА РЕТРИТ', NULL, NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11121623, 'МУХТАРОВА АМИНА ЭЛЬМАНОВНА', '2018-02-17T00:00:00', NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11121624, 'БЕЛОКОНЬ ГРУППА РЕТРИТ', NULL, NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11121624, 'МУХТАРОВА АМИНА ЭЛЬМАНОВНА', '2018-02-17T00:00:00', NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11121625, 'БЕЛОКОНЬ ЕЛЕНА ГЕОРГИЕВНА', '1974-08-19T00:00:00', '+7 (918) 6233319', NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11121625, 'Гость', NULL, NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11121626, 'БЕЛОКОНЬ ГРУППА РЕТРИТ', NULL, NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11121626, 'Гость', NULL, NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11121627, 'БЕЛОКОНЬ ГРУППА РЕТРИТ', NULL, NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11121627, 'Гость', NULL, NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11209172, 'ДИХНОВА ВИКТОРИЯ ВИКТОРОВНА', '1978-02-03T00:00:00', '+7 (918) 1110311', 'v.dihnova@yandex.ru');
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11209172, 'Козинец Валерия Витальевна', NULL, NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11209172, 'КОЗИНЕЦ ОЛЬГА СЕРГЕЕВНА', '1998-06-17T00:00:00', '+7 (918) 2855055', 'o.5285666@mail.ru');
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11209172, 'Дихнов Иван Дмитриевич', '2010-11-13T00:00:00', NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11340869, 'Мушкина Дарья Борисовна', NULL, '89181747504', NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11340869, 'Мушкин Максим Артурович', NULL, NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11343896, 'ТАТУЛЬЯН НАТАЛИЯ ЮРЬЕВНА', '1973-06-23T00:00:00', '89184548909', NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11343896, 'ТАТУЛЬЯН ВЛАДИМИР КИРКОРОВИЧ', '1965-12-06T00:00:00', NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11403309, 'МИТЮРИНА НЕЛЛИ АЛЕКСЕЕВНА', '1978-03-27T00:00:00', NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11403309, 'МИТЮРИН ДМИТРИЙ ИВАНОВИЧ', '1980-09-27T00:00:00', '+7 (918) 0467706', NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11405187, 'Сливинский Александр Федорович', '1988-10-03T00:00:00', '89023742025', NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11405187, 'Сливинский Дмитрий Александрович', '2016-07-14T00:00:00', NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11405187, 'СЛИВИНСКАЯ ЕЛЕНА ПЕТРОВНА', '1986-07-26T00:00:00', NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11405187, 'Сливинская Анна Александровна', '2021-06-17T00:00:00', NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11405986, 'ПОПОВА НАТАЛЬЯ ЛЕОНИДОВНА', '1978-12-08T00:00:00', '89183460333', NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11405986, 'ПОПОВ ЕВГЕНИЙ СЕРГЕЕВИЧ', '1975-01-31T00:00:00', NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11408982, 'УВАРОВА АННА СЕРГЕЕВНА', '1988-07-19T00:00:00', '+7 (928) 2959868', NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11408982, 'УВАРОВ ИВАН ДМИТРИЕВИЧ', '2024-07-24T00:00:00', NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11408982, 'УВАРОВ ДМИТРИЙ МИХАЙЛОВИЧ', '1975-04-05T00:00:00', NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11408982, 'УВАРОВА АЛИСА ДМИТРИЕВНА', '2017-06-13T00:00:00', NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11409769, 'ДОНЕЦ ВЛАДИСЛАВ ЮРЬЕВИЧ', '1987-01-11T00:00:00', NULL, NULL);
INSERT INTO hotels_Guest (reservation_id, name, birthdate, phone, email) VALUES (11409769, 'ДОНЕЦ ЕЛЕНА ВИКТОРОВНА', '1987-01-03T00:00:00', NULL, NULL);