diff --git a/src/components/bookings/BookingModal.tsx b/src/components/bookings/BookingModal.tsx index 0936d30..fe5074c 100644 --- a/src/components/bookings/BookingModal.tsx +++ b/src/components/bookings/BookingModal.tsx @@ -1,5 +1,5 @@ import { useState, useLayoutEffect, useRef, useEffect } from 'react' -import { format, addDays } from 'date-fns' +import { format, addDays, parseISO } from 'date-fns' import { Star, Banknote, CreditCard, AlertCircle, Map, Plus, Trash2, Tag, Minus, BedDouble, Tv2, Send, Loader2, CheckCircle2, Clock, CalendarDays, User, Phone } from 'lucide-react' import { MOCK_DISCOUNTS } from '../../pages/DiscountsPage' import type { Discount } from '../../pages/DiscountsPage' @@ -332,15 +332,18 @@ export function BookingModal({ open, draft, rooms, bookings = [], onClose, onSav const hourlyHours = Math.max(0, endHour - startHour) // Calculate room cost: sum per-night prices from availability overrides, fall back to baseRate + const nightCount = Math.floor(nights) const roomNightlyTotal = (() => { - if (!room || !form.checkIn || !form.checkOut || nights <= 0) return 0 + if (!room || !form.checkIn || nightCount <= 0) return 0 const catId = room.categoryId const catOverrides = catId ? priceOverrides?.[catId] : undefined - if (!catOverrides) return (room.baseRate ?? 0) * nights + const fallback = room.baseRate ?? 0 + if (!catOverrides) return fallback * nightCount let sum = 0 - for (let i = 0; i < nights; i++) { - const d = format(addDays(new Date(form.checkIn), i), 'yyyy-MM-dd') - sum += catOverrides[d] ?? room.baseRate ?? 0 + for (let i = 0; i < nightCount; i++) { + const d = format(addDays(parseISO(form.checkIn), i), 'yyyy-MM-dd') + const p = catOverrides[d] + sum += (typeof p === 'number' && isFinite(p)) ? p : fallback } return sum })() @@ -1289,7 +1292,7 @@ export function BookingModal({ open, draft, rooms, bookings = [], onClose, onSav
{isHourly && room.allowHourly ? `${hourlyHours} ч × ${(room.hourlyRate ?? 0).toLocaleString('ru-RU')} ₽` - : `${nights} ${nights === 1 ? 'ночь' : nights < 5 ? 'ночи' : 'ночей'} × ${room.baseRate.toLocaleString('ru-RU')} ₽` + : `${nightCount} ${nightCount === 1 ? 'ночь' : nightCount < 5 ? 'ночи' : 'ночей'} · ${roomNightlyTotal.toLocaleString('ru-RU')} ₽` } {discountAmount > 0 && ` − ${discountAmount.toLocaleString('ru-RU')} ₽`}