System rezerwacji pokoi WordPress

Klient: Ośrodek Wypoczynkowy nad morzem
Zakres: autorska wtyczka WordPress – rezerwacje online, kalendarz obłożenia, płatności, panel gościa
Technologie: WordPress, PHP, JavaScript, polskie bramki płatności

System rezerwacji pokoi dla ośrodka wypoczynkowego nad morzem

Wyzwanie

Ośrodek nad morzem sprzedaje noclegi tak, jak robi to większość obiektów tej wielkości: przez telefon, maila i portale pośredniczące, które pobierają prowizję od każdej rezerwacji. Kalendarz obłożenia żył w zeszycie albo w arkuszu, a odpowiedź na pytanie „czy jest wolne w drugim tygodniu lipca” wymagała przejrzenia wszystkiego ręcznie.

Gotowe wtyczki rezerwacyjne nie rozwiązywały problemu, bo nie odwzorowują struktury takiego obiektu:

  • Pokój to nie jeden byt, tylko dwa. Gość wybiera kategorię („Lux”), ale zajmuje konkretny numer. Kategoria Lux to kilkanaście pokoi o różnej pojemności – trzy-, cztero- i pięcioosobowych.
  • Cena zależy od liczby gości, nie od pokoju. Ten sam pokój kosztuje inaczej dla trzech, a inaczej dla czterech osób, i inaczej w każdym sezonie.
  • Doba wyjazdu nie blokuje terminu. Gość wyjeżdżający rano i przyjeżdżający po południu dzielą tę samą datę – system musi to rozumieć, bo inaczej ośrodek traci noclegi.
  • Zaliczka zamiast pełnej płatności. W tej branży standardem jest przedpłata części kwoty, a reszta na miejscu.

Rozwiązanie

Zbudowaliśmy wtyczkę odwzorowującą rzeczywistą strukturę ośrodka, w której panel WordPress zastąpił zeszyt i arkusz, a rezerwacja bezpośrednia stała się realną alternatywą dla portali z prowizją.

Na system złożyło się sześć modułów:

Struktura pokoi na dwóch poziomach

W panelu definiuje się kategorie, a wewnątrz nich grupy fizycznych numerów - z konfiguracją łóżek, pojemnością i własnym cennikiem sezonowym rozpisanym na liczbę gości. Dodanie kolejnego pokoju to jeden wiersz, nie nowa podstrona.

Kalendarz obłożenia w panelu

Każdy fizyczny numer pokoju to osobny wiersz, a rezerwacje są blokami rozciągniętymi na cały zakres pobytu, z nazwiskiem gościa. Obsługa widzi cały ośrodek na jednym ekranie i pracuje bez opuszczania kalendarza: kliknięcie wolnego dnia otwiera formularz nowej rezerwacji z podpowiedzianą datą i automatycznie wyliczoną ceną, kliknięcie bloku otwiera edycję, a prawy przycisk zmienia status od razu.

Rezerwacja krok po kroku

Gość wybiera daty, widzi wyłącznie faktycznie dostępne pokoje z ceną przeliczoną dla swojej liczby osób i przechodzi przez pięcioetapowy formularz zakończony płatnością.

Płatności dopasowane do branży

Trzy polskie bramki online oraz przelew tradycyjny, a do tego opcja zaliczki - gość płaci ustaloną część kwoty, a system pilnuje, ile zostało do zapłaty na miejscu.

Konto gościa bez zakładania konta

Przy pierwszej rezerwacji powstaje profil, a gość dostaje mailem link do ustawienia hasła. W panelu widzi historię pobytów, status płatności i może napisać wiadomość do ośrodka.
				
					// wolny pokój to nie taki, na którym nie ma rezerwacji,
// tylko taki, na którym żadna nie ZACHODZI na wybrany zakres

private function wolne_numery($grupa, $przyjazd, $wyjazd) {

    $zajete = $this->db->get_col($this->db->prepare(
        "SELECT nr_pokoju FROM {$this->tabela}
          WHERE status IN ('potwierdzona', 'oplacona')
            AND data_od < %s
            AND data_do > %s",

        // ostre nierówności, nie <= i >= —
        // dzień wyjazdu jednego gościa może być
        // dniem przyjazdu następnego
        $wyjazd, $przyjazd
    ));

    return array_diff($grupa->numery, $zajete);
}

/* ceny sezonowe per liczba gości, blokady terminów,
   obsługa zaliczek i panel gościa — poza kadrem */
				
			

Co było trudne

Rozróżnienie kategorii od zasobu. Cała logika dostępności opiera się na fizycznych numerach, a gość nigdy ich nie wybiera. System musi więc sprawdzić, czy w wybranej kategorii został choć jeden wolny pokój o odpowiedniej pojemności, i dopiero wtedy pokazać ofertę.

Kolizje zakresów dat. Wolny pokój to nie taki, na którym nie ma rezerwacji, tylko taki, na którym żadna rezerwacja nie zachodzi na wybrany przedział. Różnica jest subtelna i decyduje o tym, czy dzień wyjazdu jednego gościa może być dniem przyjazdu następnego.

Ominięcie kreatora stron. Strona rezerwacji dostała własny szablon, niezależny od kreatora używanego w reszcie serwisu. Przy formularzu, w którym cena i dostępność przeliczają się na żywo, pełna kontrola nad kodem jest ważniejsza niż wygoda edycji.

Rozjazd stref czasowych. Linki do ustawienia hasła wygasały natychmiast po wygenerowaniu, bo aplikacja i baza danych liczyły czas inaczej. To klasyczna pułapka, która nie ujawnia się w testach lokalnych i którą widać dopiero na serwerze produkcyjnym.

Efekt

Rezerwacje bezpośrednie bez prowizji

ośrodek zatrzymuje całą kwotę.

Kalendarz obłożenia w jednym miejscu

dostępny także z telefonu.

Mniej pracy przy obsłudze

gość rezerwuje sam, o dowolnej porze, a rezerwacje telefoniczne obsługa wpisuje w tym samym kalendarzu.

Zero podwójnych rezerwacji

dostępność liczona na poziomie konkretnego pokoju.

Pełna samodzielność

ceny, sezony, pokoje i blokady terminów w rękach właściciela.

Podsumowanie

Portale rezerwacyjne są wygodne, ale ich prowizja to stały podatek od każdego gościa. Własny system rezerwacyjny zwraca się wtedy, gdy zaczyna przejmować choćby część tego ruchu - a przy obiekcie działającym sezonowo dzieje się to szybciej, niż większość właścicieli zakłada.

Prowadzisz ośrodek, pensjonat albo apartamenty i chcesz przyjmować rezerwacje bezpośrednio? Sprawdzimy, czy to się u Ciebie opłaci.