BookingModal: replace guestName with FIO+phone fields, remove passport tab
- Add lastName/firstName/middleName/phone fields to booking form - Remove 'Документы гостя' tab entirely from BookingModal - Auto-parse existing guestName into FIO parts when editing - Add guestPhone to Booking type and propagate through CalendarPage/BookingsPage API calls - Add middle_name to guests table (migration 011) - Update guests backend route to include middle_name in all queries - Add middleName to GuestApiType in api.ts - Fix selectAcGuest in BookingDetailPanel to also fill middle_name - Auto-open guest form pre-filled with booking FIO when no guests exist - Add passport series+number lookup in BookingDetailPanel guest form Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -5,7 +5,7 @@ type SlugParam = { Params: { slug: string } }
|
||||
type SlugIdParam = { Params: { slug: string; id: string } }
|
||||
|
||||
const GUEST_FIELDS = `
|
||||
g.id, g.hotel_id, g.first_name, g.last_name, g.email, g.phone,
|
||||
g.id, g.hotel_id, g.first_name, g.last_name, g.middle_name, g.email, g.phone,
|
||||
g.passport, g.passport_series, g.passport_number,
|
||||
g.birth_date, g.nationality, g.gender, g.city, g.notes, g.tags,
|
||||
g.loyalty_tier, g.loyalty_points, g.rating,
|
||||
@@ -111,7 +111,7 @@ const guests: FastifyPluginAsync = async (fastify) => {
|
||||
// ── POST /api/hotels/:slug/guests ────────────────────────────────────────────
|
||||
// Creates a new guest or returns existing one if passport matches
|
||||
fastify.post<SlugParam & { Body: {
|
||||
first_name: string; last_name: string
|
||||
first_name: string; last_name: string; middle_name?: string
|
||||
email?: string; phone?: string
|
||||
passport?: string; passport_series?: string; passport_number?: string
|
||||
birth_date?: string; nationality?: string; gender?: string; city?: string
|
||||
@@ -138,14 +138,15 @@ const guests: FastifyPluginAsync = async (fastify) => {
|
||||
if (existing.length > 0) {
|
||||
const { rows: [updated] } = await db.query(
|
||||
`UPDATE guests SET
|
||||
first_name = COALESCE($3, first_name),
|
||||
last_name = COALESCE($4, last_name),
|
||||
email = COALESCE($5, email),
|
||||
phone = COALESCE($6, phone),
|
||||
updated_at = NOW()
|
||||
first_name = COALESCE($3, first_name),
|
||||
last_name = COALESCE($4, last_name),
|
||||
middle_name = COALESCE($5, middle_name),
|
||||
email = COALESCE($6, email),
|
||||
phone = COALESCE($7, phone),
|
||||
updated_at = NOW()
|
||||
WHERE id = $1 AND hotel_id = $2
|
||||
RETURNING *`,
|
||||
[existing[0].id, hotelId, b.first_name || null, b.last_name || null, b.email || null, b.phone || null],
|
||||
[existing[0].id, hotelId, b.first_name || null, b.last_name || null, b.middle_name || null, b.email || null, b.phone || null],
|
||||
)
|
||||
return reply.code(200).send(updated)
|
||||
}
|
||||
@@ -153,13 +154,13 @@ const guests: FastifyPluginAsync = async (fastify) => {
|
||||
|
||||
const { rows: [guest] } = await db.query(
|
||||
`INSERT INTO guests
|
||||
(hotel_id, first_name, last_name, email, phone,
|
||||
(hotel_id, first_name, last_name, middle_name, email, phone,
|
||||
passport, passport_series, passport_number,
|
||||
birth_date, nationality, gender, city, notes, tags, rating)
|
||||
VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15)
|
||||
VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16)
|
||||
RETURNING *`,
|
||||
[
|
||||
hotelId, b.first_name, b.last_name,
|
||||
hotelId, b.first_name, b.last_name, b.middle_name ?? null,
|
||||
b.email ?? null, b.phone ?? null,
|
||||
b.passport ?? null, b.passport_series ?? null, b.passport_number ?? null,
|
||||
b.birth_date ?? null, b.nationality ?? null, b.gender ?? null, b.city ?? null,
|
||||
@@ -172,7 +173,7 @@ const guests: FastifyPluginAsync = async (fastify) => {
|
||||
|
||||
// ── PATCH /api/hotels/:slug/guests/:id ──────────────────────────────────────
|
||||
fastify.patch<SlugIdParam & { Body: Partial<{
|
||||
first_name: string; last_name: string
|
||||
first_name: string; last_name: string; middle_name: string
|
||||
email: string; phone: string
|
||||
passport: string; passport_series: string; passport_number: string
|
||||
birth_date: string; nationality: string; gender: string; city: string
|
||||
@@ -198,6 +199,7 @@ const guests: FastifyPluginAsync = async (fastify) => {
|
||||
}
|
||||
add('first_name', b.first_name)
|
||||
add('last_name', b.last_name)
|
||||
add('middle_name', b.middle_name)
|
||||
add('email', b.email)
|
||||
add('phone', b.phone)
|
||||
add('passport', b.passport)
|
||||
|
||||
Reference in New Issue
Block a user