diff --git a/src/components/bookings/BookingModal.tsx b/src/components/bookings/BookingModal.tsx
index 1e3874b..aee0496 100644
--- a/src/components/bookings/BookingModal.tsx
+++ b/src/components/bookings/BookingModal.tsx
@@ -112,6 +112,8 @@ export function BookingModal({ open, draft, rooms, bookings = [], onClose, onSav
const [rentalPhone, setRentalPhone] = useState('')
const [rentalNotes, setRentalNotes] = useState('')
const [rentalSaving, setRentalSaving] = useState(false)
+ const [rentalPayMethod, setRentalPayMethod] = useState<'cash' | 'terminal' | null>(null)
+ const [rentalPaidAmount, setRentalPaidAmount] = useState(0)
// Rental guest autocomplete
const [rentalShowSugg, setRentalShowSugg] = useState(false)
const [rentalDbResults, setRentalDbResults] = useState<{ id: string; firstName: string; lastName: string; middleName: string | null; phone: string | null }[]>([])
@@ -218,7 +220,7 @@ export function BookingModal({ open, draft, rooms, bookings = [], onClose, onSav
guestPhone: rentalPhone.trim(),
notes: rentalNotes.trim() || undefined,
totalAmount: rentalTotal,
- paidAmount: 0,
+ paidAmount: rentalPaidAmount,
status: 'confirmed',
})
onClose()
@@ -464,124 +466,127 @@ export function BookingModal({ open, draft, rooms, bookings = [], onClose, onSav
{/* ── RENTAL FORM ── */}
{bookingType === 'rental' && rentalObj && (
-
- {/* Object picker */}
- {rentalObjects && rentalObjects.length > 1 && (
-
-
-
- {rentalObjects.map(o => (
-
- ))}
-
-
- )}
- {rentalObjects?.length === 1 && (
-
-
{rentalObj.icon}
-
-
{rentalObj.name}
-
{rentalObj.pricePerHour} ₽/ч · {rentalObj.pricePerDay} ₽/день
-
-
- )}
+
- {/* Date */}
-
-
-
setRentalDate(e.target.value)}
- />
+ {/* ── LEFT: объект + дата + время ── */}
+
+
+ {/* Object picker */}
+ {rentalObjects && rentalObjects.length > 1 && (
+
+
+
+ {rentalObjects.map(o => (
+
+ ))}
+
+
+ )}
+ {rentalObjects?.length === 1 && (
+
+
{rentalObj.icon}
+
+
{rentalObj.name}
+
{rentalObj.pricePerHour} ₽/ч · {rentalObj.pricePerDay} ₽/день
+
+
+ )}
+
+ {/* Date */}
+
+
+ setRentalDate(e.target.value)} />
+
+
+ {/* Full day / time */}
+ {rentalHasFullDay ? (
+
+
+
Объект уже забронирован на весь день
+
+ ) : (
+ <>
+
+
+ Весь день
+ {rentalHasTimed && Есть частичные брони}
+
+
+ {!rentalIsFullDay && (
+ rentalNoSlots ? (
+
+
+
Все слоты на этот день заняты
+
+ ) : (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+ )}
+ >
+ )}
- {/* Full day / time */}
- {rentalHasFullDay ? (
-
-
-
Объект уже забронирован на весь день
-
- ) : (
- <>
-
-
- Весь день
- {rentalHasTimed && Есть частичные брони}
-
-
- {!rentalIsFullDay && (
- rentalNoSlots ? (
-
-
-
Все слоты на этот день заняты
-
- ) : (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- )
- )}
- >
- )}
+ {/* ── RIGHT: гость + оплата ── */}
+
- {/* Guest */}
-
+ {/* Guest */}
-
setRentalShowSugg(true)}
onChange={e => {
@@ -616,7 +621,7 @@ export function BookingModal({ open, draft, rooms, bookings = [], onClose, onSav
))}
{rentalDbResults
- .filter(g => !rentalFiltered.some(b => b.guestName === `${g.lastName} ${g.firstName}`))
+ .filter(g => !rentalFiltered.some(b => b.guestName.startsWith(g.lastName)))
.map(g => (
@@ -633,6 +638,8 @@ export function BookingModal({ open, draft, rooms, bookings = [], onClose, onSav
)}
+
+ {/* Phone */}
-
-
-
-
-
- {rentalHours > 0 && (
-
-
- Итого: {rentalTotal.toLocaleString('ru-RU')} ₽
-
- ({rentalIsFullDay ? 'весь день' : `${rentalHours} ч × ${rentalObj.pricePerHour} ₽`})
-
-
+ {/* Notes */}
+
+
+
- )}
+
+ {/* Payment + Total */}
+ {rentalHours > 0 && (
+
+ {/* Итого */}
+
+
+ {rentalIsFullDay ? 'Весь день' : `${rentalHours} ч × ${rentalObj.pricePerHour.toLocaleString('ru-RU')} ₽`}
+
+
+ {rentalTotal.toLocaleString('ru-RU')} ₽
+
+
+ {/* Способ оплаты */}
+
+
Внесение оплаты
+
+
+
+
+
+ {/* Оплачено */}
+ {rentalPayMethod && (
+
+
+ setRentalPaidAmount(Math.min(rentalTotal, Math.max(0, parseInt(e.target.value) || 0)))}
+ />
+
+
+ )}
+ {rentalPayMethod && rentalPaidAmount > 0 && rentalPaidAmount < rentalTotal && (
+
+ Долг: {(rentalTotal - rentalPaidAmount).toLocaleString('ru-RU')} ₽
+
+ )}
+
+ )}
+
+
)}