| | 1 | = Функции, процедури и тригери = |
| | 2 | |
| | 3 | == Функции == |
| | 4 | |
| | 5 | === `fn_available_rooms` === |
| | 6 | |
| | 7 | {{{#!sql |
| | 8 | SELECT * FROM fn_available_rooms(hotel_name, p_check_in, p_check_out); |
| | 9 | }}} |
| | 10 | |
| | 11 | * '''Цел:''' Ги враќа сите слободни соби во даден хотел за даден временски период. |
| | 12 | |
| | 13 | ---- |
| | 14 | |
| | 15 | === `fn_estimate_cost` === |
| | 16 | |
| | 17 | {{{#!sql |
| | 18 | SELECT * FROM fn_estimate_cost(p_room_id, p_check_in, p_check_out); |
| | 19 | }}} |
| | 20 | |
| | 21 | * '''Цел:''' Пресметува проценета цена на престој (соба * ноќи), без притоа да создава резервација. |
| | 22 | |
| | 23 | ---- |
| | 24 | |
| | 25 | == Процедури == |
| | 26 | |
| | 27 | === `pr_book_pet_stay` === |
| | 28 | |
| | 29 | {{{#!sql |
| | 30 | CALL pr_book_pet_stay(p_pet_id, p_employee_id, p_room_id, p_check_in, p_check_out); |
| | 31 | }}} |
| | 32 | |
| | 33 | * '''Цел:''' Креира резервација и истовремено ѝ доделува соба. |
| | 34 | * '''Валидации:''' Датумот на заминување мора да е по датумот на пристигнување и собата мора да е слободна за бараниот период (се исфрлаат `cancelled`/`no-show` резервации). Статусот автоматски се поставува на `confirmed`. |
| | 35 | |
| | 36 | ---- |
| | 37 | |
| | 38 | === `sp_complete_finished_reservations` === |
| | 39 | |
| | 40 | {{{#!sql |
| | 41 | CALL sp_complete_finished_reservations(); |
| | 42 | }}} |
| | 43 | |
| | 44 | * '''Цел:''' Batch-задача која ги обележува како `completed` сите резервации чиј `check_out_date` веќе поминал, а сè уште не се `completed`/`cancelled`/`no-show`. |
| | 45 | * '''Забелешка:''' Процедурата не се активира автоматски со промена на податок, туку мора да биде повикана рачно или од некој сервис. |
| | 46 | |
| | 47 | ---- |
| | 48 | |
| | 49 | === `pr_cancel_reservation` === |
| | 50 | |
| | 51 | {{{#!sql |
| | 52 | CALL pr_cancel_reservation(p_reservation_id); |
| | 53 | }}} |
| | 54 | |
| | 55 | * '''Цел:''' Ја откажува резервацијата и сите нејзини закажани услуги во едно повикување. |
| | 56 | |
| | 57 | ---- |
| | 58 | |
| | 59 | === `pr_add_service_to_reservation` === |
| | 60 | |
| | 61 | {{{#!sql |
| | 62 | CALL pr_add_service_to_reservation(p_reservation_id, p_service_id, p_date, p_time); |
| | 63 | }}} |
| | 64 | |
| | 65 | * '''Цел:''' Додава услуга на постоечка резервација. |
| | 66 | * '''Валидации:''' Резервацијата мора да постои и да не е `cancelled`/`no-show` и датумот на услугата не смее да е во минатото. |
| | 67 | |
| | 68 | ---- |
| | 69 | |
| | 70 | === `pr_extend_reservation` === |
| | 71 | |
| | 72 | {{{#!sql |
| | 73 | CALL pr_extend_reservation(p_reservation_id, p_new_check_out); |
| | 74 | }}} |
| | 75 | |
| | 76 | * '''Цел:''' Продолжува постоечки престој со нов, подоцнежен `check_out_date`. |
| | 77 | * '''Валидации:''' Резервацијата не смее да е `cancelled`/`no-show`/`completed`, новиот датум мора да е подоцна од стариот, собата мора да е слободна за додадените ноќи (сопствениот опсег на резервацијата се исклучува од проверката). |
| | 78 | * '''Забелешка:''' Преку `UPDATE RoomReservation` автоматски ги активира `trg_sync_date_status` и `trg_update_cost_on_roomreservation`. |
| | 79 | |
| | 80 | ---- |
| | 81 | |
| | 82 | == Тригери == |
| | 83 | |
| | 84 | === `trg_sync_date_status` === |
| | 85 | |
| | 86 | * '''Функција:''' `fn_sync_date_status()` |
| | 87 | * '''Се активира:''' `AFTER INSERT OR UPDATE OR DELETE ON RoomReservation` |
| | 88 | * '''Цел:''' Ја одржува табелата `Date` синхронизирана со реалните резервации, така што `vw_available_rooms` секогаш прикажува точни, живи податоци. При бришење или промена го ослободува стариот опсег на датуми (`status_id = 2`, available), при внес или промена го означува новиот опсег како зафатен (`status_id = 1`, occupied). |
| | 89 | |
| | 90 | ---- |
| | 91 | |
| | 92 | === `trg_reservation_status_guard` === |
| | 93 | |
| | 94 | * '''Функција:''' `fn_reservation_status_guard()` |
| | 95 | * '''Се активира:''' `BEFORE UPDATE ON Reservation` |
| | 96 | * '''Цел:''' Спречува невалидни промини на статус на резервација (пр. од `completed` назад во `pending`). Дозволени промини: `pending -> confirmed | cancelled`, `confirmed -> completed | cancelled | no-show`. Останатите статуси се терминални и не можат да се променуваат. Невалиден обид фрла `EXCEPTION`. |
| | 97 | |
| | 98 | ---- |
| | 99 | |
| | 100 | === `trg_update_cost_on_roomreservation` / `trg_update_cost_on_servicereservation` === |
| | 101 | |
| | 102 | * '''Функција:''' `fn_update_reservation_cost()` |
| | 103 | * '''Се активираат:''' `AFTER INSERT OR UPDATE OR DELETE` на `RoomReservation` и `ServiceReservation` |
| | 104 | * '''Цел:''' Автоматски го прекалкулира `Reservation.total_cost` секогаш кога ќе се промени собата, или ќе се додаде или отстрани услуга. Откажаните услуги (`status = cancelled`) не влегуваат во сметката. |