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.ext import ContextTypes
from users.models import User
from hotels.models import Hotel, UserHotel
from hotels.models import Hotel, UserHotel, Reservation
from users.models import NotificationSettings
from asgiref.sync import sync_to_async
import smtplib
@@ -9,7 +9,9 @@ from hotels.models import PMSIntegrationLog
import requests
from email.mime.text import MIMEText
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):
@@ -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):
"""Обработчик всех нажатий кнопок"""
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)
elif query.data.startswith("hotel_"):
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)
elif query.data == "current_settings":
await show_current_settings(update, context)
else:
print(f"Неизвестный callback_data: {query.data}")
await query.edit_message_text("Команда не распознана.")
@@ -433,3 +440,136 @@ async def check_pms_integration(update: Update, context: ContextTypes.DEFAULT_TY
message=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,
schedule_notifications,
show_current_settings,
statistics,
generate_statistics,
stats_select_period,
)
# Настройка Django окружения
@@ -53,6 +56,9 @@ async def start_bot(application):
application.add_handler(CallbackQueryHandler(delete_hotel, pattern="^delete_hotel_"))
application.add_handler(CallbackQueryHandler(check_pms, pattern="^check_pms_"))
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("Регистрация обработчиков текстовых сообщений...")

View File

@@ -1,6 +1,17 @@
from django.contrib import admin
from .models import Hotel, UserHotel, APIConfiguration, APIRequestLog, PMSConfiguration, PMSIntegrationLog
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 Meta:
model = Hotel
@@ -8,49 +19,72 @@ class HotelForm(forms.ModelForm):
def __init__(self, *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)
self.fields['api'].queryset = APIConfiguration.objects.exclude(id__in=used_apis)
class HotelAdmin(admin.ModelAdmin):
form = HotelForm
list_display = ('name', 'api', 'created_at', 'pms')
search_fields = ('name',)
list_filter = ('pms', 'created_at')
ordering = ('-created_at',)
admin.site.register(Hotel, HotelAdmin)
@admin.register(UserHotel)
class UserHotelAdmin(admin.ModelAdmin):
list_display = ('user', 'hotel')
search_fields = ('user', 'hotel')
search_fields = ('user__username', 'hotel__name')
list_filter = ('hotel',)
ordering = ('-hotel',)
@admin.register(APIConfiguration)
class ApiConfigurationAdmin(admin.ModelAdmin):
list_display = ('name', 'url', 'token', 'username', 'password')
search_fields = ('name', 'url', 'token', 'username', 'password')
list_filter = ('name', 'url', 'token', 'username', 'password')
ordering = ('-name',)
list_display = ('name', 'url', 'token', 'username', 'password', 'last_updated')
search_fields = ('name', 'url', 'token', 'username')
list_filter = ('last_updated',)
ordering = ('-last_updated',)
@admin.register(APIRequestLog)
class ApiRequestLogAdmin(admin.ModelAdmin):
list_display = ('api', 'request_time', 'response_status', 'response_data')
search_fields = ('api', 'request_time', 'response_status', 'response_data')
list_filter = ('api', 'request_time', 'response_status', 'response_data')
ordering = ('-api',)
search_fields = ('api__name', 'request_time', 'response_status')
list_filter = ('api', 'response_status', 'request_time')
ordering = ('-request_time',)
@admin.register(PMSConfiguration)
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)
class PMSIntegreationLogAdmin(admin.ModelAdmin):
class PMSIntegrationLogAdmin(admin.ModelAdmin):
list_display = ('hotel', 'checked_at', 'status', 'message')
search_fields = ('hotel', 'checked_at', 'status', 'message')
list_filter = ('hotel', 'checked_at', 'status', 'message')
search_fields = ('hotel__name', 'status', 'message')
list_filter = ('status', '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

@@ -31,6 +31,7 @@ class APIConfiguration(models.Model):
verbose_name = "Конфигурация API"
verbose_name_plural = "Конфигурации API"
class Hotel(models.Model):
name = models.CharField(max_length=255, verbose_name="Название отеля")
api = models.OneToOneField(
@@ -51,13 +52,16 @@ class Hotel(models.Model):
verbose_name = "Отель"
verbose_name_plural = "Отели"
class PMSIntegrationLog(models.Model):
hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE, verbose_name="Отель")
checked_at = models.DateTimeField(auto_now_add=True, verbose_name="Время проверки")
status = models.CharField(max_length=50, verbose_name="Статус", choices=[('success', 'Успех'), ('error', 'Ошибка')])
message = models.TextField(verbose_name="Сообщение", blank=True, null=True)
def __str__(self):
return f"{self.hotel.name} - {self.status} - {self.checked_at}"
class Meta:
verbose_name = "Журнал интеграции PMS"
verbose_name_plural = "Журналы интеграции PMS"
@@ -79,9 +83,6 @@ class UserHotel(models.Model):
verbose_name = "Пользователь отеля"
verbose_name_plural = "Пользователи отелей"
from django.db import models
class APIRequestLog(models.Model):
api = models.ForeignKey(APIConfiguration, on_delete=models.CASCADE, verbose_name="API")
@@ -91,6 +92,7 @@ class APIRequestLog(models.Model):
def __str__(self):
return f"{self.api.name} - {self.request_time}"
class Meta:
verbose_name = "Журнал запросов API"
verbose_name_plural = "Журналы запросов API"
@@ -99,5 +101,36 @@ class APIRequestLog(models.Model):
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);