Files
hotell777_260507/config/index.js
2026-05-11 16:31:22 +05:00

160 lines
6.1 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const ROOM_TYPES = {
economy: { id: '2x-местный', name: '2x-местный', pricePerGuest: 1500 },
standard: { id: '3х-местный', name: '3х-местный', pricePerGuest: 2000 },
family: { id: 'Семейный', name: 'Семейный', pricePerGuest: 3000 },
vip: { id: 'Люкс', name: 'Люкс', pricePerGuest: 4500 }
};
const FURNITURE_TYPES = [
{ id: 'double_bed', name: 'Двуспальная кровать' },
{ id: 'single_beds', name: 'Односпальные кровати' },
{ id: 'sofa', name: 'Диван' },
{ id: 'wardrobe', name: 'Шкаф' },
{ id: 'table', name: 'Стол' },
{ id: 'chairs', name: 'Стулья' },
{ id: 'nightstands', name: 'Прикроватные тумбочки' },
{ id: 'hanger', name: 'Вешалка' },
{ id: 'mirror', name: 'Зеркало' }
];
const AMENITY_TYPES = [
{ id: 'has_ac', name: 'Кондиционер', icon: 'snowflake' },
{ id: 'has_tv', name: 'Телевизор', icon: 'tv' },
{ id: 'has_fridge', name: 'Холодильник', icon: 'sink' },
{ id: 'has_wifi', name: 'Wi-Fi интернет', icon: 'wifi' },
{ id: 'has_kettle', name: 'Электрический чайник', icon: 'mug-hot' },
{ id: 'has_hairdryer', name: 'Фен', icon: 'wind' },
{ id: 'has_shower', name: 'Душ в номере', icon: 'shower' },
{ id: 'has_sea_view', name: 'Вид на море', icon: 'water' }
];
const BOOKING_STATUSES = {
NEW: 'новая',
PAID: 'оплачена',
RESERVED: 'зарезервирована',
CHECKED_IN: 'заселена',
CHECKED_OUT: 'выехала',
CANCELLED: 'отменена'
};
const DEFAULT_ROOMS = [
{
type: ROOM_TYPES.economy.id,
name: '2x-местный',
description: 'Уютный номер на двоих с одной или двумя кроватями. Идеально для пары или друзей. Кондиционер, TV, холодильник, Wi-Fi.',
rooms_count: 15,
area_sqm: 20,
furniture: ['double_bed', 'wardrobe', 'chairs', 'nightstands', 'hanger', 'mirror'],
amenities: ['has_ac', 'has_tv', 'has_fridge', 'has_wifi', 'has_kettle'],
floors: [1, 2, 3],
max_guests: 2,
price_per_night: 1500,
image_path: 'img/1faae356b-9f79-489d-8165-c37a47b82040.webp',
extra_beds: 15,
extra_bed_price: 1000
},
{
type: ROOM_TYPES.standard.id,
name: '3х-местный',
description: 'Комфортный трёхместный номер с односпальными или двуспальной кроватью. Просторный и светлый с видом на море.',
rooms_count: 8,
area_sqm: 20,
furniture: ['single_beds', 'double_bed', 'table', 'wardrobe', 'chairs', 'nightstands', 'hanger', 'mirror'],
amenities: ['has_ac', 'has_tv', 'has_fridge', 'has_wifi', 'has_kettle', 'has_sea_view'],
floors: [1, 2, 3],
max_guests: 3,
price_per_night: 2000,
image_path: 'img/1006bc9be-64c6-43e3-9625-1a862d04930c.webp',
extra_beds: 0,
extra_bed_price: 0
},
{
type: ROOM_TYPES.family.id,
name: 'Семейный',
description: 'Просторный двухкомнатный номер для семьи до 4 человек. Две спальни с двуспальными кроватями. Возможны дополнительные места.',
rooms_count: 4,
area_sqm: 40,
furniture: ['double_bed', 'wardrobe', 'chairs', 'nightstands', 'hanger', 'mirror'],
amenities: ['has_ac', 'has_tv', 'has_fridge', 'has_wifi', 'has_kettle', 'has_hairdryer'],
floors: [2],
max_guests: 4,
price_per_night: 3000,
image_path: 'img/1eae46658-cfca-4b65-82f0-e5868af5541b.webp',
extra_beds: 15,
extra_bed_price: 1000
},
{
type: ROOM_TYPES.vip.id,
name: 'Люкс',
description: 'Элегантный двухкомнатный люкс с двуспальной кроватью, гостиной зоной и великолепным видом на море. Премиум-комфорт.',
rooms_count: 3,
area_sqm: 50,
furniture: ['double_bed', 'sofa', 'wardrobe', 'chairs', 'nightstands', 'hanger', 'mirror'],
amenities: ['has_ac', 'has_tv', 'has_fridge', 'has_wifi', 'has_kettle', 'has_hairdryer', 'has_shower', 'has_sea_view'],
floors: [2],
max_guests: 4,
price_per_night: 4500,
image_path: 'img/1eae46658-cfca-4b65-82f0-e5868af5541b.webp',
extra_beds: 0,
extra_bed_price: 0
}
];
const ROOM_PRICES = {
[ROOM_TYPES.economy.id]: ROOM_TYPES.economy.pricePerGuest,
[ROOM_TYPES.standard.id]: ROOM_TYPES.standard.pricePerGuest,
[ROOM_TYPES.family.id]: ROOM_TYPES.family.pricePerGuest,
[ROOM_TYPES.vip.id]: ROOM_TYPES.vip.pricePerGuest
};
const STATUS_LIST = [
BOOKING_STATUSES.NEW,
BOOKING_STATUSES.PAID,
BOOKING_STATUSES.RESERVED,
BOOKING_STATUSES.CHECKED_IN,
BOOKING_STATUSES.CHECKED_OUT,
BOOKING_STATUSES.CANCELLED
];
const ROOM_TYPE_LIST = [
ROOM_TYPES.economy.id,
ROOM_TYPES.standard.id,
ROOM_TYPES.family.id,
ROOM_TYPES.vip.id
];
function getRoomPrice(roomType) {
return ROOM_PRICES[roomType] || 0;
}
function calculateNights(checkin, checkout) {
const ci = new Date(checkin);
const co = new Date(checkout);
return Math.ceil((co - ci) / (1000 * 60 * 60 * 24));
}
function calculateBasePrice(roomType, checkin, checkout) {
const pricePerNight = getRoomPrice(roomType);
const nights = calculateNights(checkin, checkout);
return pricePerNight * nights;
}
function getRoomBasePriceByType(type) {
const room = DEFAULT_ROOMS.find(r => r.type === type);
return room ? room.price_per_night : 0;
}
module.exports = {
ROOM_TYPES,
FURNITURE_TYPES,
AMENITY_TYPES,
BOOKING_STATUSES,
DEFAULT_ROOMS,
ROOM_PRICES,
STATUS_LIST,
ROOM_TYPE_LIST,
getRoomPrice,
getRoomBasePriceByType,
calculateNights,
calculateBasePrice
};