PROMPT Creating Package Body 'PRA_T_GOSTI' CREATE OR REPLACE PACKAGE BODY PRA_T_GOSTI IS PROCEDURE AZURIRAJ_KGOST_PRITZ_ID_P (GOST_ID_P IN T_GOSTI.ID%TYPE ) IS /* Ažuriraj vezu T_KGOSTIJU i L_PRIJEPISI_TZ kod promjene podataka u T_GOSTI. 11.06.2002. G.J. Dodana LOOP petlja. */ pritz_id_p_l t_kgostiju.pritz_id_p%TYPE; CURSOR kgost_c IS SELECT pritz_id_p FROM t_kgostiju WHERE gost_id = gost_id_p AND oznaka = 'V' FOR UPDATE OF pritz_id_p; BEGIN OPEN kgost_c; LOOP FETCH kgost_c INTO pritz_id_p_l; EXIT WHEN kgost_c%NOTFOUND; IF pritz_id_p_l IS NOT NULL THEN UPDATE t_kgostiju SET pritz_id_p = NULL WHERE CURRENT OF kgost_c; END IF; END LOOP; CLOSE kgost_c; END; PROCEDURE AZURIRAJ_BOOKING_STATUSSJ (GOST_ID_P IN T_GOSTI.ID%TYPE ,REZVSJ_ID_P IN T_REZ_VSJ.ID%TYPE ,OLD_SJ_ID_P IN T_GOSTI.SJ_ID%TYPE ,OLD_DAT_DOLASKA_U_SJ_P IN T_GOSTI.DAT_DOLASKA_U_SJ%TYPE ,OLD_DAT_ODLASKA_P IN T_GOSTI.DAT_ODLASKA%TYPE ,OLD_MS_ID_P IN T_GOSTI.MS_ID%TYPE ,OLD_AGE_ID_P IN T_GOSTI.AGE_ID%TYPE ,OLD_PONSO_ID_P IN T_GOSTI.PONSO_ID%TYPE ,OLD_RECVPRO_ID_P IN T_GOSTI.RECVPRO_ID%TYPE ,NEW_SJ_ID_P IN T_GOSTI.SJ_ID%TYPE ,NEW_DAT_DOLASKA_U_SJ_P IN T_GOSTI.DAT_DOLASKA_U_SJ%TYPE ,NEW_DAT_ODLASKA_P IN T_GOSTI.DAT_ODLASKA%TYPE ,NEW_MS_ID_P IN T_GOSTI.MS_ID%TYPE ,NEW_AGE_ID_P IN T_GOSTI.AGE_ID%TYPE ,NEW_PONSO_ID_P IN T_GOSTI.PONSO_ID%TYPE ,NEW_RECVPRO_ID_P IN T_GOSTI.RECVPRO_ID%TYPE ) IS /* Ažuriranje bookinga za stupanj prodaje O i statusa SJ. OGRANIČENJE(!): Ažuriranje radimo samo za SJ u kojoj gost trenutno boravi i od kada (dat_dolaska_u_sj). Budući se ažuriranje bookinga radi preko statusa niti booking se ne ažurira prije tog dana. */ BEGIN IF new_sj_id_p <> old_sj_id_p /* kod seljenja se podrazumjeva da su se mijenjali samo podaci sj_id i dat_dolaska_u_sj i da vrijedi old_dat_dolaska_u_sj <= new_dat_dolaska_u_sj <= dat_odlaska */ THEN /* briši booking i status za dio boravka u staroj SJ */ pra_t_gosti.oduzmi_booking_statussj ( old_ms_id_p, old_age_id_p, old_ponso_id_p, old_recvpro_id_p, 'O', new_dat_dolaska_u_sj_p, old_dat_odlaska_p, old_sj_id_p, gost_id_p, rezvsj_id_p); /* upiši booking i status za dio boravka u novoj SJ */ pra_t_gosti.dodaj_booking_statussj ( new_ms_id_p, new_age_id_p, new_ponso_id_p, new_recvpro_id_p, 'O', new_dat_dolaska_u_sj_p, new_dat_odlaska_p, new_sj_id_p, gost_id_p, rezvsj_id_p); /* ažuriraj booking i status SJ za preostale goste u staroj SJ */ pra_t_gosti.dodaj_booking_stsj_ost_gosti ( old_sj_id_p, new_dat_dolaska_u_sj_p, old_dat_odlaska_p, 'O'); ELSIF new_ms_id_p <> old_ms_id_p OR NVL (new_age_id_p, 0) <> NVL (old_age_id_p, 0) -- 27.02.2003. G.J. OR NVL (new_ponso_id_p, 0) <> NVL (old_ponso_id_p, 0) OR NVL (new_recvpro_id_p, 0) <> NVL (old_recvpro_id_p, 0) OR new_dat_dolaska_u_sj_p >= old_dat_odlaska_p OR new_dat_odlaska_p < old_dat_dolaska_u_sj_p THEN /* Ako se mijenjalo nešto iz ključa bookinga ili statusa ili se stari i novi boravak ne preklapaju, briše se booking i status za stari boravak i upisuje za novi boravak */ pra_t_gosti.oduzmi_booking_statussj ( old_ms_id_p, old_age_id_p, old_ponso_id_p, old_recvpro_id_p, 'O', old_dat_dolaska_u_sj_p, old_dat_odlaska_p, old_sj_id_p, gost_id_p, rezvsj_id_p); pra_t_gosti.dodaj_booking_statussj ( new_ms_id_p, new_age_id_p, new_ponso_id_p, new_recvpro_id_p, 'O', new_dat_dolaska_u_sj_p, new_dat_odlaska_p, new_sj_id_p, gost_id_p, rezvsj_id_p); /* ažuriraj booking i status sj za preostale goste za stari boravak */ pra_t_gosti.dodaj_booking_stsj_ost_gosti ( old_sj_id_p, old_dat_dolaska_u_sj_p, old_dat_odlaska_p, 'O'); ELSE /* produžavanje boravka na strani dolaska */ IF new_dat_dolaska_u_sj_p < old_dat_dolaska_u_sj_p THEN pra_t_gosti.dodaj_booking_statussj ( new_ms_id_p, new_age_id_p, new_ponso_id_p, new_recvpro_id_p, 'O', new_dat_dolaska_u_sj_p, old_dat_dolaska_u_sj_p, new_sj_id_p, gost_id_p, rezvsj_id_p); /* skraćivanje boravka na strani dolaska */ ELSIF new_dat_dolaska_u_sj_p > old_dat_dolaska_u_sj_p THEN pra_t_gosti.oduzmi_booking_statussj ( old_ms_id_p, old_age_id_p, old_ponso_id_p, old_recvpro_id_p, 'O', old_dat_dolaska_u_sj_p, new_dat_dolaska_u_sj_p, old_sj_id_p, gost_id_p, rezvsj_id_p); /* booking i status sj za preostale goste u skraćenju */ pra_t_gosti.dodaj_booking_stsj_ost_gosti ( old_sj_id_p, old_dat_dolaska_u_sj_p, new_dat_dolaska_u_sj_p, 'O'); END IF; /* produžavanje boravka na strani odlaska */ IF new_dat_odlaska_p > old_dat_odlaska_p THEN pra_t_gosti.dodaj_booking_statussj ( new_ms_id_p, new_age_id_p, new_ponso_id_p, new_recvpro_id_p, 'O', old_dat_odlaska_p, new_dat_odlaska_p, new_sj_id_p, gost_id_p, rezvsj_id_p); /* skraćivanje boravka na strani odlaska */ ELSIF new_dat_odlaska_p < old_dat_odlaska_p THEN pra_t_gosti.oduzmi_booking_statussj ( old_ms_id_p, old_age_id_p, old_ponso_id_p, old_recvpro_id_p, 'O', new_dat_odlaska_p, old_dat_odlaska_p, old_sj_id_p, gost_id_p, rezvsj_id_p); /* booking i status sj za preostale goste u skraćenju */ pra_t_gosti.dodaj_booking_stsj_ost_gosti ( old_sj_id_p, new_dat_odlaska_p, old_dat_odlaska_p, 'O'); END IF; END IF; END; PROCEDURE DODAJ_BOOKING_Y_KOLSJZ (GOST_ID_P IN T_GOSTI.ID%TYPE ,REZVSJ_ID_P IN T_GOSTI.REZVSJ_ID%TYPE ,RECREZSJ_ID_P IN T_GOSTI.RECREZSJ_ID%TYPE ,SJ_ID_P IN T_GOSTI.SJ_ID%TYPE ) IS /* Ažuriranje bookinga Y (ostvareni F) */ broj_l NUMBER; so_id_l i_booking.so_id%TYPE; ms_id_l i_booking.ms_id%TYPE; age_id_l i_booking.age_id%TYPE; ponso_id_l i_booking.ponso_id%TYPE; recvpro_id_l i_booking.recvpro_id%TYPE; dat_dolaska_l i_booking.datum%TYPE; dat_odlaska_l i_booking.datum%TYPE; vsj_id1_l i_booking.vsj_id%TYPE; kol_sj1_l t_rez_vsj.kol_sj%TYPE; br_osoba1_l t_rez_vsj.br_osoba%TYPE; vsj_id2_l i_booking.vsj_id%TYPE; kol_sj2_l t_rez_vsj.kol_sj%TYPE; br_osoba2_l t_rez_vsj.br_osoba%TYPE; rezvsj_vsj_id_l i_booking.vsj_id%TYPE; rezvsj_kol_sj_l t_rez_vsj.kol_sj%TYPE; rezvsj_kol_sjz_l t_rez_vsj.kol_sjz%TYPE; rezvsj_br_osoba_l t_rez_vsj.br_osoba%TYPE; rezvsj_br_osobaz_l t_rez_vsj.br_osobaz%TYPE; recrezsj_vsj_id_l i_booking.vsj_id%TYPE; recrezsj_br_osoba_l t_rez_vsj.br_osoba%TYPE; recrezsj_br_osobaz_l t_rez_vsj.br_osobaz%TYPE; rezvsj_rezvsj_vsj_id_l t_rez_vsj.vsj_id%TYPE; -- treba za provjeru da li je vsj sastavljena rezvsj_sj_id_l t_rez_vsj.sj_id%TYPE; -- treba sj iz rezvsj kada je vsj sastavljena CURSOR c IS SELECT rez.so_id, rez.ms_id, rez.age_id, rez.ponso_id, rez.recvpro_id, rez.dat_dolaska, rez.dat_odlaska, NVL (sj.vsj_id, rezvsj.vsj_id) rezvsj_vsj_id, rezvsj.vsj_id rezvsj_rezvsj_vsj_id, rezvsj.kol_sj rezvsj_kol_sj, rezvsj.kol_sjZ rezvsj_kol_sjZ, rezvsj.br_osoba rezvsj_br_osoba, rezvsj.br_osobaZ rezvsj_br_osobaZ, rezvsj.sj_id rezvsj_sj_id, recrezsj.vsj_id recrezsj_vsj_id, recrezsj.br_osoba recrezsj_br_osoba, recrezsj.br_osobaZ recrezsj_br_osobaZ FROM t_rezervacije rez, t_rez_vsj rezvsj, m_sj sj, (SELECT rezvsj_id, vsj_id, br_osoba, br_osobaz FROM trec_rez_sj recrezsj, m_sj sj WHERE recrezsj.sj_id = sj.id AND recrezsj.id = recrezsj_id_p) recrezsj WHERE rezvsj.id = rezvsj_id_p AND rezvsj.sj_id = sj.id (+) AND rezvsj.id = recrezsj.rezvsj_id (+) AND rez.id = rezvsj.rez_id ORDER BY NVL (recrezsj.rezvsj_id, 0) DESC -- rezultat može dati najviše jedan redak pa ne znam ćemu služi order by ; BEGIN IF rezvsj_id_p IS NULL THEN RETURN; END IF; -- da li je u tu SJ po toj rezvsj već čekiran koji gost SELECT COUNT (ROWID) INTO broj_l FROM t_gosti WHERE rezvsj_id = rezvsj_id_p AND sj_id = sj_id_p AND id <> gost_id_p; OPEN c; FETCH c INTO so_id_l, ms_id_l, age_id_l, ponso_id_l, recvpro_id_l, dat_dolaska_l, dat_odlaska_l, rezvsj_vsj_id_l, rezvsj_rezvsj_vsj_id_l, rezvsj_kol_sj_l, rezvsj_kol_sjZ_l, rezvsj_br_osoba_l, rezvsj_br_osobaZ_l, rezvsj_sj_id_l, recrezsj_vsj_id_l, recrezsj_br_osoba_l, recrezsj_br_osobaZ_l; CLOSE c; IF pra_zmp_s.vsj_je_sastavljena (rezvsj_rezvsj_vsj_id_l) = -1 THEN rezvsj_kol_sj_l := pra_zmp_s.kol_sj_vsjs (rezvsj_rezvsj_vsj_id_l); -- za sastavljenu usporediti kol_sj_vsjs ILI ĆEMO U REZVSJ UPISATI UKUPNU KOLIČINU SJ A POKAZIVATI 1 END IF; IF NVL (broj_l, 0) = 0 THEN -- PRVI gost u SJ za REZVSJ_ID UPDATE t_rez_vsj -- ažurira kol_sjz i br_osobaz u t_rez_vsj SET kol_sjz = NVL (kol_sjz, 0) + 1, br_osobaz = NVL (br_osobaz, 0) + 1 WHERE id = rezvsj_id_p; -- ažurira Y do kol_sjz, br_osobaz, treba odrediti vsj, kol_sj i br_osoba za ažuriranje Y-a -- priprema kol_sj za Y -- pretpostavka da je za sastavljenu uvijek upisana sj u rezvsj i postoje recrezsj IF rezvsj_kol_sj_l > NVL (rezvsj_kol_sjZ_l, 0) THEN -- još ima kol_sj za koje treba kreirati Y IF recrezsj_vsj_id_l IS NOT NULL AND NVL (recrezsj_br_osobaZ_l, 0) = 0 THEN -- prvi gost u recrezsj azurira Y za vsj iz recrezsj vsj_id1_l := recrezsj_vsj_id_l; kol_sj1_l := 1; ELSE -- ako gost nije vezan na recrezsj ili gost koji nije prvi u recrezsj (ali je prvi u toj sj po rezvsj) treba ažurirati Y za rezvsj_id -- ako je vsj sastavljena onda u rezvsj_vsj_id piše vsj od sastavljene sj i ažuriranje ide preko nje (ne preko vsjs) vsj_id2_l := rezvsj_vsj_id_l; kol_sj2_l := 1; END IF; ELSE -- kol_sj je sva iskorištena, Y se ne smije povećavati -- ako je recrezsj.vsj <> rezvsj.vsj prvi gost u recrezsj mora povećati Y za recrezsj_vsj, zato se smanji za rezvsj_vsj IF recrezsj_vsj_id_l IS NOT NULL AND NVL (recrezsj_br_osobaZ_l, 0) = 0 AND recrezsj_vsj_id_l <> rezvsj_vsj_id_l THEN vsj_id1_l := recrezsj_vsj_id_l; kol_sj1_l := 1; vsj_id2_l := rezvsj_vsj_id_l; kol_sj2_l := -1; END IF; END IF; ELSE -- ostali gosti u SJ UPDATE t_rez_vsj -- ažuriraju samo br_osobaz u t_rez_vsj SET br_osobaz = NVL (br_osobaz, 0) + 1 WHERE id = rezvsj_id_p; -- Y; prvi gost u RECREZSJ mora ažurirati Y za recrezsj_vsj i to umanjiti na rezvsj_vsj ako su vsj različite IF recrezsj_vsj_id_l IS NOT NULL AND NVL (recrezsj_br_osobaZ_l, 0) = 0 AND recrezsj_vsj_id_l <> rezvsj_vsj_id_l THEN vsj_id1_l := recrezsj_vsj_id_l; kol_sj1_l := 1; vsj_id2_l := rezvsj_vsj_id_l; kol_sj2_l := -1; END IF; END IF; -- priprema br_osoba za Y IF rezvsj_br_osoba_l > NVL (rezvsj_br_osobaZ_l, 0) THEN IF recrezsj_vsj_id_l IS NOT NULL AND recrezsj_br_osoba_l > NVL (recrezsj_br_osobaZ_l, 0) THEN vsj_id1_l := recrezsj_vsj_id_l; br_osoba1_l := 1; ELSE vsj_id2_l := rezvsj_vsj_id_l; br_osoba2_l := 1; END IF; ELSE IF recrezsj_vsj_id_l IS NOT NULL AND recrezsj_br_osoba_l > NVL (recrezsj_br_osobaZ_l, 0) AND recrezsj_vsj_id_l <> rezvsj_vsj_id_l THEN vsj_id1_l := recrezsj_vsj_id_l; br_osoba1_l := 1; vsj_id2_l := rezvsj_vsj_id_l; br_osoba2_l := -1; END IF; END IF; -- booking Y IF vsj_id1_l IS NOT NULL THEN pra_rec_book.azuriraj_booking_razdoblje ( so_id_l, ms_id_l, age_id_l, vsj_id1_l, dat_dolaska_l, dat_odlaska_l, 'Y', NVL (kol_sj1_l, 0), NVL (br_osoba1_l, 0), NULL, ponso_id_l, recvpro_id_l); END IF; IF vsj_id2_l IS NOT NULL THEN pra_rec_book.azuriraj_booking_razdoblje ( so_id_l, ms_id_l, age_id_l, vsj_id2_l, dat_dolaska_l, dat_odlaska_l, 'Y', NVL (kol_sj2_l, 0), NVL (br_osoba2_l, 0), NULL, ponso_id_l, recvpro_id_l); END IF; -- svaki gost čekiran u recrezsj povećava br_osobaz u recrezsj IF recrezsj_id_p IS NOT NULL THEN UPDATE trec_rez_sj SET br_osobaz = NVL (br_osobaz, 0) + 1 WHERE id = recrezsj_id_p; END IF; EXCEPTION WHEN OTHERS THEN RAISE; END; PROCEDURE DODAJ_BOOKING_STATUSSJ (MS_ID_P IN I_BOOKING.MS_ID%TYPE ,AGE_ID_P IN I_BOOKING.AGE_ID%TYPE ,PONSO_ID_P IN I_BOOKING.PONSO_ID%TYPE ,RECVPRO_ID_P IN I_BOOKING.RECVPRO_ID%TYPE ,OZN_SPRODAJE_P IN I_BOOKING.OZN_SPRODAJE%TYPE ,DAT_POC_P IN I_BOOKING.DATUM%TYPE ,DAT_ZAV_P IN I_BOOKING.DATUM%TYPE ,SJ_ID_P IN T_GOSTI.SJ_ID%TYPE ,GOST_ID_P IN T_GOSTI.ID%TYPE ,REZVSJ_ID_P IN T_REZ_VSJ.ID%TYPE ) IS /* Ažuriranje bookinga (Ostvareno) i statusa SJ (Zauzeto) kod smještaja gosta */ CURSOR stsj_c (datum_k i_statusisj.datum%TYPE) IS SELECT ozn_z, gost_id FROM i_statusisj WHERE sj_id = sj_id_p AND datum = datum_k FOR UPDATE OF ozn_z, gost_id, ozn_domacice1 NOWAIT; CURSOR recvpro_id_pon_c (ponso_id_k t_pon_so.id%TYPE) IS SELECT pon.ms_id, pon.age_id, pon.recvpro_id, DECODE (pon.ozn_book, '3', 'C', '5', 'W', '0') ozn_sprodaje FROM t_ponude pon, t_pon_ojr ponojr, t_pon_so ponso WHERE ponso.id = ponso_id_p AND ponso.ponojr_id = ponojr.id AND ponojr.pon_id = pon.id; ms_id_pon_l i_booking.ms_id%TYPE; age_id_pon_l i_booking.age_id%TYPE; recvpro_id_pon_l i_booking.recvpro_id%TYPE; ozn_sprodaje_l i_booking.ozn_sprodaje%TYPE; ozn_z_l i_statusisj.ozn_z%TYPE; so_id_l i_booking.so_id%TYPE; datum_l i_booking.datum%TYPE; vsj_id_l i_booking.vsj_id%TYPE; gost_id_l t_gosti.id%TYPE; BEGIN SELECT so_id, vsj_id INTO so_id_l, vsj_id_l FROM m_sj WHERE id = sj_id_p; IF rezvsj_id_p IS NULL AND ponso_id_p IS NOT NULL THEN OPEN recvpro_id_pon_c (ponso_id_p); FETCH recvpro_id_pon_c INTO ms_id_pon_l, age_id_pon_l, recvpro_id_pon_l, ozn_sprodaje_l; CLOSE recvpro_id_pon_c; END IF; -- ažuriranje X kod smještaja gosta u zakupljenu SJ pra_t_gosti.azuriraj_booking_x_gost ( gost_id_p, so_id_l, sj_id_p, dat_poc_p, dat_zav_p, 1, NULL); datum_l := dat_poc_p; WHILE datum_l < dat_zav_p LOOP OPEN stsj_c (datum_l); FETCH stsj_c INTO ozn_z_l, gost_id_l; IF stsj_c%FOUND THEN IF gost_id_l IS NULL THEN /* ako ta SJ nije ažurirala kol_sj u bookingu, treba povećati kol_sj i br_osoba */ UPDATE i_statusisj SET ozn_Z = ozn_Z + 1, gost_id = gost_id_p, ozn_domacice1 = 5 -- prljava WHERE CURRENT OF stsj_c; pra_rec_book.azuriraj_booking_razdoblje ( so_id_l, ms_id_p, age_id_p, vsj_id_l, datum_l, datum_l + 1, ozn_sprodaje_p, '1', '1', NULL, ponso_id_p, recvpro_id_p); IF rezvsj_id_p IS NULL AND ponso_id_p IS NOT NULL AND ozn_sprodaje_l IN ( 'C', 'W') THEN pra_rec_book.azuriraj_booking_razdoblje ( so_id_l, ms_id_pon_l, age_id_pon_l, vsj_id_l, datum_l, datum_l + 1, ozn_sprodaje_l, -- C/Z '1', '1', NULL, ponso_id_p, recvpro_id_pon_l); END IF; ELSE /* booking je ažuriran sa kol_sj, treba povećati samo br_osoba */ UPDATE i_statusisj SET ozn_Z = ozn_Z + 1, ozn_domacice1 = 5 -- prljava WHERE CURRENT OF stsj_c; pra_rec_book.azuriraj_booking_razdoblje ( so_id_l, ms_id_p, age_id_p, vsj_id_l, datum_l, datum_l + 1, ozn_sprodaje_p, '0', '1', NULL, ponso_id_p, recvpro_id_p); IF rezvsj_id_p IS NULL AND ponso_id_p IS NOT NULL AND ozn_sprodaje_l IN ( 'C', 'W') THEN pra_rec_book.azuriraj_booking_razdoblje ( so_id_l, ms_id_pon_l, age_id_pon_l, vsj_id_l, datum_l, datum_l + 1, ozn_sprodaje_l, -- C/Z '0', '1', NULL, ponso_id_p, recvpro_id_pon_l); END IF; END IF; ELSE /* Ako redak u I_STATUSISJ ne postoji treba ga ubaciti i treba ažurirati booking 23.03.2004. G.J. i_statusisj.ozn_domacice1 postavlja se na 5 = prljava */ INSERT INTO i_statusisj ( sj_id, gost_id, datum, ozn_i, ozn_u, ozn_r, ozn_z, ozn_domacice1) VALUES ( sj_id_p, gost_id_p, datum_l, 1, 0, 0, 1, 5); -- ozn_i = raspoloživa, ozn_domacice1 = prljava pra_rec_book.azuriraj_booking_razdoblje ( so_id_l, ms_id_p, age_id_p, vsj_id_l, datum_l, datum_l + 1, ozn_sprodaje_p, '1', '1', NULL, ponso_id_p, recvpro_id_p); IF rezvsj_id_p IS NULL AND ponso_id_p IS NOT NULL AND ozn_sprodaje_l IN ( 'C', 'W') THEN pra_rec_book.azuriraj_booking_razdoblje ( so_id_l, ms_id_pon_l, age_id_pon_l, vsj_id_l, datum_l, datum_l + 1, ozn_sprodaje_l, -- C/Z '1', '1', NULL, ponso_id_p, recvpro_id_pon_l); END IF; END IF; CLOSE stsj_c; datum_l := datum_l + 1; END LOOP; EXCEPTION WHEN OTHERS THEN IF stsj_c%ISOPEN THEN CLOSE stsj_c; END IF; IF recvpro_id_pon_c%ISOPEN THEN CLOSE recvpro_id_pon_c; END IF; RAISE; END; PROCEDURE DODAJ_BOOKING_STSJ_OST_GOSTI (SJ_ID_P IN T_GOSTI.SJ_ID%TYPE ,DAT_POC_P IN T_GOSTI.DAT_DOLASKA%TYPE ,DAT_ZAV_P IN T_GOSTI.DAT_ODLASKA%TYPE ,OZN_SPRODAJE_P IN I_BOOKING.OZN_SPRODAJE%TYPE ) IS /* 06.09.99, Milena Povećavanje bookinga (povećati kol_sj, br_osoba je ažuriran od prije) i povezivanje statusa sa slijedećim gostom/gostima u SJ nakon odlaska gosta koji je prije odlaska ažurirao booking za tu SJ ("sljedeći" gost u SJ se mora čitati u Statement trigeru da ne dođe do mutiranja) */ CURSOR stsj_c (datum_k i_statusisj.datum%TYPE) IS SELECT gost_id FROM i_statusisj WHERE sj_id = sj_id_p AND datum = datum_k FOR UPDATE OF gost_id, ozn_domacice1 NOWAIT; stsj_gost_id_l t_gosti.id%TYPE; CURSOR gost_c (dat_poc_k t_gosti.dat_dolaska%TYPE) IS SELECT id, rezvsj_id, ms_id, age_id, ponso_id, recvpro_id, dat_dolaska_u_sj, dat_odlaska FROM t_gosti WHERE sj_id = sj_id_p AND dat_dolaska_u_sj <= dat_zav_p AND dat_odlaska > dat_poc_k ORDER BY id; gost_c_l gost_c%ROWTYPE; CURSOR recvpro_id_pon_c (ponso_id_k t_pon_so.id%TYPE) IS SELECT pon.ms_id, pon.age_id, pon.recvpro_id, DECODE (pon.ozn_book, '3', 'C', '5', 'W', '0') ozn_sprodaje FROM t_ponude pon, t_pon_ojr ponojr, t_pon_so ponso WHERE ponso.id = ponso_id_k AND ponso.ponojr_id = ponojr.id AND ponojr.pon_id = pon.id; ms_id_pon_l i_booking.ms_id%TYPE; age_id_pon_l i_booking.age_id%TYPE; recvpro_id_pon_l i_booking.recvpro_id%TYPE; ozn_sprodaje_l i_booking.ozn_sprodaje%TYPE; so_id_l i_booking.so_id%TYPE; vsj_id_l i_booking.vsj_id%TYPE; dat_poc_l i_booking.datum%TYPE; dat_zav_l i_booking.datum%TYPE; dat_stsj_l i_booking.datum%TYPE; BEGIN SELECT so_id, vsj_id INTO so_id_l, vsj_id_l FROM m_sj WHERE id = sj_id_p; dat_poc_l := dat_poc_p; /* prva petlja ide po gostima koji su u toj SJ i borave u tom razdoblju */ WHILE dat_poc_l < dat_zav_p LOOP OPEN gost_c (dat_poc_l); FETCH gost_c INTO gost_c_l; IF gost_c%FOUND THEN /* gost je nađen, određuju se datumi za ažuriranje bookinga */ IF gost_c_l.dat_dolaska_u_sj > dat_poc_l THEN dat_poc_l := gost_c_l.dat_dolaska_u_sj; END IF; IF gost_c_l.dat_odlaska < dat_zav_p THEN dat_zav_l := gost_c_l.dat_odlaska; ELSE dat_zav_l := dat_zav_p; END IF; dat_stsj_l := dat_poc_l; IF gost_c_l.rezvsj_id IS NULL AND gost_c_l.ponso_id IS NOT NULL THEN -- gost nije vezan na rezervaciju ali je na ponudu pa treba ažurirati C/W prema podacima iz ponude OPEN recvpro_id_pon_c (gost_c_l.ponso_id); FETCH recvpro_id_pon_c INTO ms_id_pon_l, age_id_pon_l, recvpro_id_pon_l, ozn_sprodaje_l; CLOSE recvpro_id_pon_c; END IF; /* druga petlja ažurira booking za boravak jednog gosta */ WHILE dat_stsj_l < dat_zav_l LOOP OPEN stsj_c (dat_stsj_l); FETCH stsj_c INTO stsj_gost_id_l; IF stsj_c%FOUND THEN IF stsj_gost_id_l IS NULL THEN /* booking se ažurira ako za taj dan već nije ažuriran i upisuje se veza u I_STATUSISJ */ UPDATE i_statusisj SET gost_id = gost_c_l.id, ozn_domacice1 = 5 -- prljava WHERE CURRENT OF stsj_c; pra_rec_book.azuriraj_booking_razdoblje ( so_id_l, gost_c_l.ms_id, gost_c_l.age_id, vsj_id_l, dat_stsj_l, dat_stsj_l + 1, ozn_sprodaje_p, '1', -- povećati kol_sj '0', -- br_osoba ne treba povećati NULL, gost_c_l.ponso_id, gost_c_l.recvpro_id); IF gost_c_l.rezvsj_id IS NULL AND gost_c_l.ponso_id IS NOT NULL AND ozn_sprodaje_l in ('C', 'W') THEN -- gost nije vezan na rezervaciju ali je na ponudu pa treba ažurirati C prema podacima iz ponude ako se radi o prihvaćeni ponudi ili FZ pra_rec_book.azuriraj_booking_razdoblje ( so_id_l, ms_id_pon_l, age_id_pon_l, vsj_id_l, dat_stsj_l, dat_stsj_l + 1, ozn_sprodaje_l, -- C/W, '1', -- povećati kol_sj '0', -- br_osoba ne treba povećati NULL, gost_c_l.ponso_id, recvpro_id_pon_l); END IF; END IF; ELSE /* Ako statusa nema, negdje se desila greška i treba to zapisati u PROMJENE */ pra_rec.puni_promjene_t ( -- IRN 2997 '9002', gost_c_l.id || '; ' || sj_id_p || '; ' || TO_CHAR (dat_stsj_l, 'DD.MM.RRRR'), 0); END IF; CLOSE stsj_c; dat_stsj_l := dat_stsj_l + 1; END LOOP; /* IRN 1817; MK 28.08.2012 dat_zav_l u ovoj petlji nije bio obrađen pa se mora obraditi za sljedećeg gosta -- dat_poc_l := dat_zav_l + 1; */ dat_poc_l := dat_zav_l; ELSE /* nema ni jednog gosta više u tom razdoblju */ dat_poc_l := dat_zav_p; END IF; CLOSE gost_c; END LOOP; EXCEPTION WHEN OTHERS THEN IF stsj_c%ISOPEN THEN CLOSE stsj_c; END IF; IF gost_c%ISOPEN THEN CLOSE gost_c; END IF; IF recvpro_id_pon_c%ISOPEN THEN CLOSE recvpro_id_pon_c; END IF; RAISE; END; PROCEDURE ODUZMI_BOOKING_STATUSSJ (MS_ID_P IN I_BOOKING.MS_ID%TYPE ,AGE_ID_P IN I_BOOKING.AGE_ID%TYPE ,PONSO_ID_P IN I_BOOKING.PONSO_ID%TYPE ,RECVPRO_ID_P IN I_BOOKING.RECVPRO_ID%TYPE ,OZN_SPRODAJE_P IN I_BOOKING.OZN_SPRODAJE%TYPE ,DAT_POC_P IN I_BOOKING.DATUM%TYPE ,DAT_ZAV_P IN I_BOOKING.DATUM%TYPE ,SJ_ID_P IN T_GOSTI.SJ_ID%TYPE ,GOST_ID_P IN T_GOSTI.ID%TYPE ,REZVSJ_ID_P IN T_REZ_VSJ.ID%TYPE ) IS /* Umanjivanje bookinga kod promjene podataka o smještenom gostu: Skidanje statusa SJ ZAUZETA Skidanje bookinga OSTVARENO ako je taj gost povećao booking Ako taj gost nije povećao booking ipak treba umanjiti br_osoba */ CURSOR stsj_c (datum_k i_statusisj.datum%TYPE) IS SELECT ozn_z, gost_id FROM i_statusisj WHERE sj_id = sj_id_p AND datum = datum_k FOR UPDATE OF ozn_z, gost_id NOWAIT; CURSOR recvpro_id_pon_c (ponso_id_k t_pon_so.id%TYPE) IS SELECT pon.ms_id, pon.age_id, pon.recvpro_id, DECODE (pon.ozn_book, '3', 'C', '5', 'W', '0') ozn_sprodaje FROM t_ponude pon, t_pon_ojr ponojr, t_pon_so ponso WHERE ponso.id = ponso_id_p AND ponso.ponojr_id = ponojr.id AND ponojr.pon_id = pon.id; ms_id_pon_l i_booking.ms_id%TYPE; age_id_pon_l i_booking.age_id%TYPE; recvpro_id_pon_l i_booking.recvpro_id%TYPE; ozn_sprodaje_l i_booking.ozn_sprodaje%TYPE; ozn_z_l i_statusisj.ozn_z%TYPE; gost_id_l t_gosti.id%TYPE; so_id_l i_booking.so_id%TYPE; vsj_id_l i_booking.vsj_id%TYPE; datum_l i_booking.datum%TYPE; BEGIN SELECT so_id, vsj_id INTO so_id_l, vsj_id_l FROM m_sj WHERE id = sj_id_p; IF rezvsj_id_p IS NULL AND ponso_id_p IS NOT NULL THEN OPEN recvpro_id_pon_c (ponso_id_p); FETCH recvpro_id_pon_c INTO ms_id_pon_l, age_id_pon_l, recvpro_id_pon_l, ozn_sprodaje_l; CLOSE recvpro_id_pon_c; END IF; -- ažuriranje X kod smještaja gosta u zakupljenu SJ pra_t_gosti.azuriraj_booking_x_gost ( gost_id_p, so_id_l, sj_id_p, dat_poc_p, dat_zav_p, -1, NULL); datum_l := dat_poc_p; WHILE datum_l < dat_zav_p LOOP OPEN stsj_c (datum_l); FETCH stsj_c INTO ozn_z_l, gost_id_l; IF stsj_c%FOUND THEN IF gost_id_l = gost_id_p THEN /* gost koji je ažurirao booking */ UPDATE i_statusisj SET ozn_Z = ozn_Z - 1, gost_id = NULL WHERE CURRENT OF stsj_c; pra_rec_book.azuriraj_booking_razdoblje ( so_id_l, ms_id_p, age_id_p, vsj_id_l, datum_l, datum_l + 1, ozn_sprodaje_p, '-1', '-1', NULL, ponso_id_p, recvpro_id_p); IF rezvsj_id_p IS NULL AND ponso_id_p IS NOT NULL AND ozn_sprodaje_l IN ( 'C', 'W') THEN pra_rec_book.azuriraj_booking_razdoblje ( so_id_l, ms_id_pon_l, age_id_pon_l, vsj_id_l, datum_l, datum_l + 1, ozn_sprodaje_l, -- C/Z '-1', '-1', NULL, ponso_id_p, recvpro_id_pon_l); END IF; ELSE /* gost koji nije ažurirao kol_sj u bookingu ali je ipak ažurirao br_osoba */ UPDATE i_statusisj SET ozn_Z = ozn_Z - 1 WHERE CURRENT OF stsj_c; pra_rec_book.azuriraj_booking_razdoblje ( so_id_l, ms_id_p, age_id_p, vsj_id_l, datum_l, datum_l + 1, ozn_sprodaje_p, '0', '-1', NULL, ponso_id_p, recvpro_id_p); IF rezvsj_id_p IS NULL AND ponso_id_p IS NOT NULL AND ozn_sprodaje_l IN ( 'C', 'W') THEN pra_rec_book.azuriraj_booking_razdoblje ( so_id_l, ms_id_pon_l, age_id_pon_l, vsj_id_l, datum_l, datum_l + 1, ozn_sprodaje_l, -- C/Z '0', '-1', NULL, ponso_id_p, recvpro_id_pon_l); END IF; END IF; ELSE /* Ako statusa nema, negdje se desila greška i treba to zapisati u PROMJENE */ pra_rec.puni_promjene_t ( -- IRN 2997 '9002', gost_id_p || '; ' || sj_id_p || '; ' || TO_CHAR (datum_l, 'DD.MM.RRRR'), 0); END IF; CLOSE stsj_c; datum_l := datum_l + 1; END LOOP; EXCEPTION WHEN OTHERS THEN IF stsj_c%ISOPEN THEN CLOSE stsj_c; END IF; IF recvpro_id_pon_c%ISOPEN THEN CLOSE recvpro_id_pon_c; END IF; RAISE; END; PROCEDURE PROVJERI_VKNJIGA_ZEM_GOST (GOST_ID_P IN T_KGOSTIJU.GOST_ID%TYPE ,ZEM_GOSTA_ID_P IN T_GOSTI.ZEM_ID%TYPE ) IS /* U knjigu domaćih gostiju može biti prijavljen samo gost sa domaćim državljanstvom. U knjigu stranih gostiju može biti prijavljen samo gost koji nema domaće državljanstvo. 11.06.2002. G.J. Dodana FOR petlja. */ zem_dom_id_l s_zemlje.id%TYPE; BEGIN IF gost_id_p IS NULL OR zem_gosta_id_p IS NULL THEN RETURN; END IF; /* Domaća zemlja */ SELECT id INTO zem_dom_id_l FROM s_zemlje WHERE sifra_2a = pra_rec_zaj.vrijednost_parametra ('0002'); FOR kgost IN ( SELECT ozn_vknjiga FROM t_kgostiju WHERE gost_id = gost_id_p AND oznaka = 'V') LOOP IF (kgost.ozn_vknjiga = '1' AND zem_gosta_id_p <> zem_dom_id_l) OR (kgost.ozn_vknjiga = '0' AND zem_gosta_id_p = zem_dom_id_l) THEN pra_rec_zaj.vrati_poruku (-20214); END IF; END LOOP; END; PROCEDURE PROVJERI_VALJANOST_REZERVACIJE (REZVSJ_ID_STARI_P IN T_REZ_VSJ.ID%TYPE ,REZVSJ_ID_NOVI_P IN T_REZ_VSJ.ID%TYPE ) IS /* Gosta se ne može vezati na poništenu rezervaciju. */ oznaka_l t_rezervacije.oznaka%TYPE; ozn_vstorna_l t_rezervacije.ozn_vstorna%TYPE; rez_id_l t_rezervacije.id%TYPE; BEGIN IF rezvsj_id_novi_p IS NULL OR NVL (rezvsj_id_stari_p, 0) = NVL (rezvsj_id_novi_p, 0) THEN RETURN; END IF; SELECT rez_id INTO rez_id_l FROM t_rez_vsj WHERE id = rezvsj_id_novi_p; SELECT oznaka, ozn_vstorna INTO oznaka_l, ozn_vstorna_l FROM t_rezervacije WHERE id = rez_id_l; IF oznaka_l IN ('P') OR ozn_vstorna_l IS NOT NULL THEN pra_rec_zaj.vrati_poruku (-20200); END IF; END; PROCEDURE PROVJERI_DATUM_DOLASKA (ID_P IN T_GOSTI.ID%TYPE ,DAT_DOLASKA_P IN T_GOSTI.DAT_DOLASKA%TYPE ,DAT_DOLASKA_OLD_P IN DATE := 'null' ) IS /* Datum rođenja, ako je poznat, ne može biti veći od datuma dolaska gosta. Datum ulaska u zemlju, ako je poznat, ne može biti veći od datuma dolaska gosta. Datum dolaska se ne može promijeniti ako postoji valjana prijava poslana u eVisitor */ domzem_l szmp_parametri.vrijednost%TYPE := pra_zmp_zaj.zmppar_vrijednost ('ZMP', '0002'); -- IRN 2785 BEGIN IF dat_dolaska_p IS NULL THEN RETURN; END IF; FOR kgost IN ( SELECT dat_rodjenja, dat_ulaska, pritz2p_id FROM t_kgostiju WHERE gost_id = id_p AND oznaka = 'V') LOOP IF kgost.dat_rodjenja IS NOT NULL THEN IF dat_dolaska_p <= kgost.dat_rodjenja THEN pra_rec_zaj.vrati_poruku (-20040); END IF; END IF; IF kgost.dat_ulaska IS NOT NULL THEN IF dat_dolaska_p < kgost.dat_ulaska THEN pra_rec_zaj.vrati_poruku (-20043); END IF; END IF; IF kgost.pritz2p_id IS NOT NULL THEN IF (domzem_l = 'HR' AND dat_dolaska_p <> NVL (dat_dolaska_old_p, dat_dolaska_p) OR domzem_l = 'SI' AND TO_CHAR (dat_dolaska_p, 'rrrr') <> TO_CHAR (NVL (dat_dolaska_old_p, dat_dolaska_p), 'rrrr')) -- IRN 2785 THEN pra_rec_zaj.vrati_poruku (-20590); END IF; END IF; END LOOP; END; PROCEDURE PROVJERI_DATUM_ODLASKA (ID_P IN T_GOSTI.ID%TYPE ,DAT_ODLASKA_P IN T_GOSTI.DAT_ODLASKA%TYPE ) IS /* Datum dopuštenog boravka u zemlji, ako je poznat, ne može biti manji od datuma odlaska gosta. 16.08.1999. M.K. U SELECT dodan uvjet oznaka = 'V' 11.06.2002. G.J. Dodana FOR petlja. */ BEGIN IF id_p IS NULL OR dat_odlaska_p IS NULL THEN RETURN; END IF; FOR kgost IN ( SELECT dat_boravka FROM t_kgostiju WHERE gost_id = id_p AND oznaka = 'V') LOOP IF kgost.dat_boravka IS NOT NULL THEN IF kgost.dat_boravka < dat_odlaska_p THEN pra_rec_zaj.vrati_poruku (-20045); END IF; END IF; END LOOP; END; PROCEDURE PROVJERI_GOSTI_REZ (REZVSJ_ID_P IN T_GOSTI.REZVSJ_ID%TYPE ,AGE_ID_P IN T_GOSTI.AGE_ID%TYPE ,MS_ID_P IN T_GOSTI.MS_ID%TYPE ) IS /* Ako je gost 'nastao' iz rezervacije onda su im MS i AGE jednaki i ne mogu se mijenjati. */ age_id_l t_rezervacije.age_id%TYPE; ms_id_l t_rezervacije.ms_id%TYPE; BEGIN IF rezvsj_id_p IS NULL OR ms_id_p IS NULL THEN RETURN; END IF; SELECT rez.age_id, rez.ms_id INTO age_id_l, ms_id_l FROM t_rezervacije rez, t_rez_vsj rezvsj WHERE rezvsj.id = rezvsj_id_p AND rezvsj.rez_id = rez.id; IF NVL (age_id_l, 0) <> NVL (age_id_p, 0) OR ms_id_l <> ms_id_p THEN pra_rec_zaj.vrati_poruku (-20049); END IF; END; PROCEDURE PROVJERI_BROJ_RESTORANA (ID_SJ_P IN M_SJ.ID%TYPE ,BR_RESTORANA_P IN T_GOSTI.BR_RESTORANA%TYPE ) IS /* Broj restorana mora biti manji ili jednak ukupnom broju restorana smještajnog objekta. */ so_id_l m_so.id%TYPE; kol_restorana_l m_so.kol_restorana%TYPE; BEGIN IF id_sj_p IS NULL OR br_restorana_p IS NULL THEN RETURN; END IF; SELECT so_id INTO so_id_l FROM m_sj WHERE id = id_sj_p; SELECT kol_restorana INTO kol_restorana_l FROM m_so WHERE id = so_id_l; IF br_restorana_p > kol_restorana_l THEN pra_rec_zaj.vrati_poruku (-20067); END IF; END; PROCEDURE PROVJERI_REZGOST_REZVSJ (REZGOST_ID_P IN T_REZ_GOST.ID%TYPE ,REZVSJ_ID_P IN T_REZ_VSJ.ID%TYPE ) IS -- rezvsj_id_l t_rez_vsj.id%TYPE; BEGIN IF rezgost_id_p IS NULL THEN RETURN; END IF; SELECT rezvsj_id INTO rezvsj_id_l FROM t_rez_gost WHERE id = rezgost_id_p; IF rezvsj_id_p = rezvsj_id_l THEN NULL; ELSE -- Ako gost pripada T_REZ_GOST onda pripada i T_REZ_VSJ. pra_rec_zaj.vrati_poruku (-20108); END IF; END; PROCEDURE ZABRANI_IZMJENU_GOSTA (GOST_REC_OLD_P IN T_GOSTI%ROWTYPE ,GOST_REC_NEW_P IN T_GOSTI%ROWTYPE ) IS -- zabrani izmjenu podataka ako je gost odjavljen dat_null_l DATE := TO_DATE ('01.01.1800', 'DD.MM.RRRR'); naz_null_l VARCHAR2(1) := '¤'; BEGIN IF gost_rec_old_p.ozn_prisutnosti IN ('O') AND (NVL (gost_rec_old_p.sj_id, 0) <> NVL (gost_rec_new_p.sj_id, 0) OR NVL (gost_rec_old_p.zem_id, 0) <> NVL (gost_rec_new_p.zem_id, 0) OR NVL (gost_rec_old_p.ms_id, 0) <> NVL (gost_rec_new_p.ms_id, 0) OR NVL (gost_rec_old_p.age_id, 0) <> NVL (gost_rec_new_p.age_id, 0) OR NVL (gost_rec_old_p.rezvsj_id, 0) <> NVL (gost_rec_new_p.rezvsj_id, 0) OR NVL (gost_rec_old_p.rezgost_id, 0) <> NVL (gost_rec_new_p.rezgost_id, 0) -- recagost_id -- može se mijenjati. OR NVL (gost_rec_old_p.cje_id, 0) <> NVL (gost_rec_new_p.cje_id, 0) OR NVL (gost_rec_old_p.vsj_id, 0) <> NVL (gost_rec_new_p.vsj_id, 0) OR NVL (gost_rec_old_p.jez_id, 0) <> NVL (gost_rec_new_p.jez_id, 0) OR NVL (gost_rec_old_p.ptvvprog_id, 0) <> NVL (gost_rec_new_p.ptvvprog_id, 0) OR NVL (gost_rec_old_p.recvpro_id, 0) <> NVL (gost_rec_new_p.recvpro_id, 0) -- god_poslovna -- UK -- rbr -- UK OR NVL (gost_rec_old_p.ozn_valjanosti, naz_null_l) <> NVL (gost_rec_new_p.ozn_valjanosti, naz_null_l) OR NVL (gost_rec_old_p.ozn_prisutnosti, naz_null_l) <> NVL (gost_rec_new_p.ozn_prisutnosti, naz_null_l) OR NVL (gost_rec_old_p.titula, naz_null_l) <> NVL (gost_rec_new_p.titula, naz_null_l) OR NVL (gost_rec_old_p.ime, naz_null_l) <> NVL (gost_rec_new_p.ime, naz_null_l) OR NVL (gost_rec_old_p.prezime, naz_null_l) <> NVL (gost_rec_new_p.prezime, naz_null_l) OR NVL (gost_rec_old_p.dat_dolaska, dat_null_l) <> NVL (gost_rec_new_p.dat_dolaska, dat_null_l) OR NVL (gost_rec_old_p.dat_odlaska, dat_null_l) <> NVL (gost_rec_new_p.dat_odlaska, dat_null_l) OR NVL (gost_rec_old_p.dat_dolaska_u_sj, dat_null_l) <> NVL (gost_rec_new_p.dat_dolaska_u_sj, dat_null_l) -- br_uputnice -- može se mijenjati OR NVL (gost_rec_old_p.ozn_platitelj, -2) <> NVL (gost_rec_new_p.ozn_platitelj, -2) OR NVL (gost_rec_old_p.ozn_gratis, -2) <> NVL (gost_rec_new_p.ozn_gratis, -2) OR NVL (gost_rec_old_p.br_restorana, naz_null_l) <> NVL (gost_rec_new_p.br_restorana, naz_null_l) OR NVL (gost_rec_old_p.ozn_dprivole, -2) <> NVL (gost_rec_new_p.ozn_dprivole, -2) -- IRN 3275 OR NVL (gost_rec_old_p.zakkor_id, 0) <> NVL (gost_rec_new_p.zakkor_id, 0) -- IRN 3275 OR NVL (gost_rec_old_p.ozn_rnk, -2) <> NVL (gost_rec_new_p.ozn_rnk, -2) OR NVL (gost_rec_old_p.br_kartice, naz_null_l) <> NVL (gost_rec_new_p.br_kartice, naz_null_l) OR NVL (gost_rec_old_p.ozn_ptv1, -2) <> NVL (gost_rec_new_p.ozn_ptv1, -2) OR NVL (gost_rec_old_p.ozn_ptv2, -2) <> NVL (gost_rec_new_p.ozn_ptv2, -2) OR NVL (gost_rec_old_p.ozn_ptv3, -2) <> NVL (gost_rec_new_p.ozn_ptv3, -2) -- napomena -- može se mijenjati OR NVL (gost_rec_old_p.recrezsj_id, 0) <> NVL (gost_rec_new_p.recrezsj_id, 0) -- ozn_vip -- može se mijenjati OR NVL (gost_rec_old_p.izn_kreditnog_limita, 0) <> NVL (gost_rec_new_p.izn_kreditnog_limita, 0) OR NVL (gost_rec_old_p.ponso_id, 0) <> NVL (gost_rec_new_p.ponso_id, 0) OR NVL (gost_rec_old_p.sat_odjave, dat_null_l) <> NVL (gost_rec_new_p.sat_odjave, dat_null_l) OR NVL (gost_rec_old_p.korisnik_odjave, naz_null_l) <> NVL (gost_rec_new_p.korisnik_odjave, naz_null_l) -- IRN 3928 OR NVL (gost_rec_old_p.sat_odlaska, dat_null_l) <> NVL (gost_rec_new_p.sat_odlaska, dat_null_l) OR NVL (gost_rec_old_p.barcode, naz_null_l) <> NVL (gost_rec_new_p.barcode, naz_null_l) OR NVL (gost_rec_old_p.ozn_brisano, -2) <> NVL (gost_rec_new_p.ozn_brisano, -2) OR gost_rec_old_p.ozn_fiktivni <> gost_rec_new_p.ozn_fiktivni OR NVL (gost_rec_old_p.napomena2, naz_null_l) <> NVL (gost_rec_new_p.napomena2, naz_null_l) ) THEN -- Podaci o odjavljenom gostu ne mogu se mijenjati. pra_rec_zaj.vrati_poruku (-20059); END IF; END; PROCEDURE IZRADI_VSZAH (REC_GOST_P IN tab_t_gosti.gost_rec_type ) IS /* Kod prijave prvog gosta u SJ, kod odjave zadnjeg gosta iz SJ i kod seljenja gostiju (zadnjeg) iz SJ (prvog) u SJ treba izraditi zahtjeve prema vanjskim sustavima. 18.12.2006. G.J. Kod prijave/odjave svakog gosta izradi zahtjeve prema TC: 76 i 77. Kod promjene SJ izradi zahtjev 51, a kod promjene podataka o gostu zahtjev 52. 13.02.2007. G.J. Kod seljenja zadnjeg gosta iz SJ izradi zahtjev 58 Preseli postavke telefona. 26.04.2007. G.J. Kod prijave/odjave svakog gosta izradi zahtjeve prema Pay-TV sustavu: 11 Check In i 12 Check Out. Kod promjene SJ izradi zahtjev 17 Room Change, a kod promjene podataka o gostu zahtjev 16 Guest Information Change. 24.08.2007. G.J. izrada zahtjeva prema sustavu za Internetski pristup Kod prijave (seljenja) prvog gosta u SJ izraditi zahtjev Enable1. Kod odjave (seljenja) zadnjeg gosta iz SJ izraditi zahtjev Disable. Kod odjave svakog gosta iz SJ izraditi zahtjev Check Out. 02.05.2011. IRN 1488 Kod prijave i promjene podataka o gostu izraditi IP zahtjev 24 Guest Info. 31.05.2012. IRN 1774 Kod prijave prvog gosta u SJ izraditi TC zahtjev 78 Prijava prvog gosta u SJ, a kod odjave zadnjeg gosta iz SJ izraditi TC zahtjev 79 Odjava zadnjeg gosta iz SJ. 20.3.2016. IRN 2500 Poziv pra_rec3.puni_ptvzah zamijenjen sa pra_rec_ptv.puni_ptvzah, a pra_rec3.postoji_ptvtv sa pra_rec_ptv.postoji_ptvtv. 13.02.2017. IRN 2678 Čitanje broja kartice programa vjernosti (tloy_kartice.broj umjesto trec_agostiju.br_loy_kartice). 01.03.2020. IRN 3309 Brisan dio na temu "izrada zahtjeva prema sustavu za internetski pristup". 12.12.2023. IRN 3759 Dodan poziv procedure pra_rec_iud4.post2mdm. */ br_redaka_l NUMBER; br_redaka_new_l NUMBER; rec_tcozah_l ttco_zahtjevi%ROWTYPE; rec_ptvzah_l tptv_zahtjevi%ROWTYPE; ozn_da_l NUMBER; -- 31.07.2007. G.J. -- 31.05.2007. G.J. CURSOR recgost2_c (gost_id_k t_gosti.id%TYPE) IS SELECT share_flag FROM trec_gosti2 WHERE id = gost_id_k; share_flag_l trec_gosti2.share_flag%TYPE; BEGIN IF rec_gost_p.gost_id IS NULL OR rec_gost_p.sj_id_new IS NULL OR rec_gost_p.ozn_prisutnosti_new IS NULL THEN RETURN; END IF; /* Prijava gosta */ IF rec_gost_p.ozn_prisutnosti_new IN ('P') AND rec_gost_p.ozn_prisutnosti_old IS NULL AND rec_gost_p.sj_id_old IS NULL THEN SELECT COUNT (1) INTO br_redaka_l FROM t_gosti WHERE sj_id = rec_gost_p.sj_id_new AND ozn_prisutnosti = 'P' AND id <> rec_gost_p.gost_id; OPEN recgost2_c (rec_gost_p.gost_id); FETCH recgost2_c INTO share_flag_l; CLOSE recgost2_c; -- 76 Prijavi gosta rec_tcozah_l := NULL; rec_tcozah_l.tcovpor_id := pra_rec_tco.tcovpor_id (76); rec_tcozah_l.gost_id := rec_gost_p.gost_id; rec_tcozah_l.share_flag := share_flag_l; pra_rec_tco_iud.insert_tcozah_sj (rec_gost_p.sj_id_new, rec_tcozah_l); -- Pay-TV 11 Check In rec_ptvzah_l := NULL; rec_ptvzah_l.gost_id := rec_gost_p.gost_id; rec_ptvzah_l.share_flag := share_flag_l; pra_rec_ptv.puni_ptvzah (11, rec_gost_p.sj_id_new, rec_ptvzah_l); IF br_redaka_l = 0 THEN -- dopusti vanjsku liniju ozn_da_l := -1; pra_rec_tco_iud.puni_tcozah ('0008', rec_gost_p.sj_id_new, 1, 0, ozn_da_l, ozn_da_l, ozn_da_l); -- IRN 1774; TC 78 Prijava prvog gosta u SJ rec_tcozah_l := NULL; rec_tcozah_l.tcovpor_id := pra_rec_tco.tcovpor_id (78); rec_tcozah_l.gost_id := rec_gost_p.gost_id; rec_tcozah_l.share_flag := share_flag_l; pra_rec_tco_iud.insert_tcozah_sj (rec_gost_p.sj_id_new, rec_tcozah_l); END IF; RETURN; END IF; /* Odjava gosta */ IF rec_gost_p.ozn_prisutnosti_new IN ('O') AND rec_gost_p.ozn_prisutnosti_old IN ('P') THEN SELECT COUNT (1) INTO br_redaka_l FROM t_gosti WHERE sj_id = rec_gost_p.sj_id_old AND ozn_prisutnosti = 'P' AND id <> rec_gost_p.gost_id; OPEN recgost2_c (rec_gost_p.gost_id); FETCH recgost2_c INTO share_flag_l; CLOSE recgost2_c; -- 77 Odjavi gosta rec_tcozah_l := NULL; rec_tcozah_l.tcovpor_id := pra_rec_tco.tcovpor_id (77); rec_tcozah_l.gost_id := rec_gost_p.gost_id; IF share_flag_l = 0 THEN /* 11.05.2007. G.J. Gost koji je imao share flag postavljen na Ne treba biti tako i odjavljen. */ rec_tcozah_l.share_flag := share_flag_l; ELSE IF br_redaka_l = 0 THEN rec_tcozah_l.share_flag := 0; ELSE rec_tcozah_l.share_flag := -1; END IF; END IF; pra_rec_tco_iud.insert_tcozah_sj (rec_gost_p.sj_id_old, rec_tcozah_l); -- Pay-TV 12 Check Out rec_ptvzah_l := NULL; rec_ptvzah_l.gost_id := rec_gost_p.gost_id; IF br_redaka_l = 0 THEN rec_ptvzah_l.share_flag := 0; ELSE rec_ptvzah_l.share_flag := -1; END IF; pra_rec_ptv.puni_ptvzah (12, rec_gost_p.sj_id_old, rec_ptvzah_l); IF br_redaka_l = 0 THEN -- zabrani vanjsku liniju ozn_da_l := -1; pra_rec_tco_iud.puni_tcozah ('0009', rec_gost_p.sj_id_old, 4, 0, ozn_da_l, ozn_da_l, ozn_da_l); -- IRN 1774; TC 79 Odjava zadnjeg gosta iz SJ rec_tcozah_l := NULL; rec_tcozah_l.tcovpor_id := pra_rec_tco.tcovpor_id (79); rec_tcozah_l.gost_id := rec_gost_p.gost_id; rec_tcozah_l.share_flag := share_flag_l; pra_rec_tco_iud.insert_tcozah_sj (rec_gost_p.sj_id_old, rec_tcozah_l); pra_rec_iud4.post2mdm (rec_gost_p.sj_id_old); -- IRN 3759 END IF; IF rec_gost_p.sj_id_old <> rec_gost_p.sj_id_new THEN SELECT COUNT (1) INTO br_redaka_l FROM t_gosti WHERE sj_id = rec_gost_p.sj_id_new AND ozn_prisutnosti = 'P' AND id <> rec_gost_p.gost_id; IF br_redaka_l = 0 THEN -- zabrani vanjsku liniju ozn_da_l := -1; pra_rec_tco_iud.puni_tcozah ('0009', rec_gost_p.sj_id_new, 4, 0, ozn_da_l, ozn_da_l, ozn_da_l); END IF; END IF; RETURN; END IF; /* Seljenje gosta */ IF rec_gost_p.ozn_prisutnosti_new IN ('P') AND rec_gost_p.ozn_prisutnosti_old IN ('P') AND rec_gost_p.sj_id_old <> rec_gost_p.sj_id_new THEN SELECT COUNT (1) INTO br_redaka_l FROM t_gosti WHERE sj_id = rec_gost_p.sj_id_old AND ozn_prisutnosti = 'P' AND id <> rec_gost_p.gost_id; OPEN recgost2_c (rec_gost_p.gost_id); FETCH recgost2_c INTO share_flag_l; CLOSE recgost2_c; -- 51 Guest Room Change rec_tcozah_l := NULL; rec_tcozah_l.tcovpor_id := pra_rec_tco.tcovpor_id (51); rec_tcozah_l.gost_id := rec_gost_p.gost_id; IF share_flag_l = 0 THEN /* 11.05.2007. G.J. Gost koji je imao share flag postavljen na Ne treba biti tako i preseljen. */ rec_tcozah_l.share_flag_old := share_flag_l; ELSE IF br_redaka_l = 0 THEN rec_tcozah_l.share_flag_old := 0; ELSE rec_tcozah_l.share_flag_old := -1; END IF; END IF; SELECT COUNT (1) INTO br_redaka_new_l FROM t_gosti WHERE sj_id = rec_gost_p.sj_id_new AND ozn_prisutnosti = 'P' AND id <> rec_gost_p.gost_id; IF br_redaka_new_l = 0 THEN rec_tcozah_l.share_flag := 0; ELSE rec_tcozah_l.share_flag := -1; END IF; FOR tcotel_old_c IN ( SELECT id FROM mtco_telefoni WHERE sj_id = rec_gost_p.sj_id_old) LOOP rec_tcozah_l.tcotel_id_old := tcotel_old_c.id; pra_rec_tco_iud.insert_tcozah_sj (rec_gost_p.sj_id_new, rec_tcozah_l); END LOOP; -- Pay-TV 17 Room Change rec_ptvzah_l := NULL; rec_ptvzah_l.gost_id := rec_gost_p.gost_id; IF br_redaka_l = 0 THEN rec_ptvzah_l.share_flag_old := 0; ELSE rec_ptvzah_l.share_flag_old := -1; END IF; IF br_redaka_new_l = 0 THEN rec_ptvzah_l.share_flag := 0; ELSE rec_ptvzah_l.share_flag := -1; END IF; IF pra_rec_ptv.postoji_ptvtv (rec_gost_p.sj_id_old, 17) = -1 AND pra_rec_ptv.postoji_ptvtv (rec_gost_p.sj_id_new, 17) = -1 THEN -- i u staroj i u novoj SJ postoji TV uređaj koji podržava poruku 17 Room Change FOR ptvtv_old_c IN ( SELECT id FROM mptv_tv WHERE sj_id = rec_gost_p.sj_id_old) LOOP rec_ptvzah_l.ptvtv_id_old := ptvtv_old_c.id; pra_rec_ptv.puni_ptvzah (17, rec_gost_p.sj_id_new, rec_ptvzah_l); END LOOP; ELSE -- Pay-TV 12 Check Out rec_ptvzah_l := NULL; rec_ptvzah_l.gost_id := rec_gost_p.gost_id; IF br_redaka_l = 0 THEN rec_ptvzah_l.share_flag := 0; ELSE rec_ptvzah_l.share_flag := -1; END IF; pra_rec_ptv.puni_ptvzah (12, rec_gost_p.sj_id_old, rec_ptvzah_l); -- Pay-TV 11 Check In rec_ptvzah_l := NULL; rec_ptvzah_l.gost_id := rec_gost_p.gost_id; IF br_redaka_new_l = 0 THEN rec_tcozah_l.share_flag := 0; ELSE rec_tcozah_l.share_flag := -1; END IF; pra_rec_ptv.puni_ptvzah (11, rec_gost_p.sj_id_new, rec_ptvzah_l); END IF; IF br_redaka_l = 0 THEN -- zadnji gost u staroj SJ -- 58 Preseli postavke telefona, 13.02.2007. G.J. rec_tcozah_l := NULL; rec_tcozah_l.tcovpor_id := pra_rec_tco.tcovpor_id (58); FOR tcotel_old_c IN ( SELECT id FROM mtco_telefoni WHERE sj_id = rec_gost_p.sj_id_old) LOOP rec_tcozah_l.tcotel_id_old := tcotel_old_c.id; pra_rec_tco_iud.insert_tcozah_sj (rec_gost_p.sj_id_new, rec_tcozah_l); END LOOP; -- IRN 1774; TC 79 Odjava zadnjeg gosta iz SJ rec_tcozah_l := NULL; rec_tcozah_l.tcovpor_id := pra_rec_tco.tcovpor_id (79); rec_tcozah_l.gost_id := rec_gost_p.gost_id; rec_tcozah_l.share_flag := share_flag_l; pra_rec_tco_iud.insert_tcozah_sj (rec_gost_p.sj_id_old, rec_tcozah_l); IF pra_rec_tco.tcovtcvpor_prioritet (pra_rec_tco.tcovpor_id (58)) IS NULL THEN -- centrala NE podržava poruku 58 Preseli postavke telefona -- zabrani vanjsku liniju ozn_da_l := -1; pra_rec_tco_iud.puni_tcozah ('0009', rec_gost_p.sj_id_old, 4, 0, ozn_da_l, ozn_da_l, ozn_da_l); END IF; pra_rec_iud4.post2mdm (rec_gost_p.sj_id_old); -- IRN 3759 END IF; IF br_redaka_new_l = 0 THEN -- prvi gost u novoj SJ -- IRN 1774; TC 78 Prijava prvog gosta u SJ rec_tcozah_l := NULL; rec_tcozah_l.tcovpor_id := pra_rec_tco.tcovpor_id (78); rec_tcozah_l.gost_id := rec_gost_p.gost_id; rec_tcozah_l.share_flag := share_flag_l; pra_rec_tco_iud.insert_tcozah_sj (rec_gost_p.sj_id_new, rec_tcozah_l); -- dopusti vanjsku liniju ozn_da_l := -1; pra_rec_tco_iud.puni_tcozah ('0008', rec_gost_p.sj_id_new, 1, 0, ozn_da_l, ozn_da_l, ozn_da_l); END IF; END IF; -- Ostale promjene podataka o gostu IF UPDATING AND rec_gost_p.ozn_prisutnosti_new IN ('P') AND ( NVL (rec_gost_p.jez_id_new, 0) <> NVL (rec_gost_p.jez_id_old, 0) OR rec_gost_p.ime_new <> rec_gost_p.ime_old OR rec_gost_p.prezime_new <> rec_gost_p.prezime_old OR rec_gost_p.zem_id_new <> rec_gost_p.zem_id_old ) THEN -- 52 Guest Info Change rec_tcozah_l := NULL; rec_tcozah_l.tcovpor_id := pra_rec_tco.tcovpor_id (52); rec_tcozah_l.gost_id := rec_gost_p.gost_id; pra_rec_tco_iud.insert_tcozah_sj (rec_gost_p.sj_id_new, rec_tcozah_l); END IF; -- Pay-TV Ostale promjene podataka o gostu IF UPDATING AND rec_gost_p.ozn_prisutnosti_new IN ('P') AND ( NVL (rec_gost_p.jez_id_new, 0) <> NVL (rec_gost_p.jez_id_old, 0) OR rec_gost_p.ime_new <> rec_gost_p.ime_old OR rec_gost_p.prezime_new <> rec_gost_p.prezime_old OR NVL (rec_gost_p.ozn_ptv1_new, 1) <> NVL (rec_gost_p.ozn_ptv1_old, 1) OR NVL (rec_gost_p.ozn_ptv2_new, 1) <> NVL (rec_gost_p.ozn_ptv2_old, 1) OR rec_gost_p.zem_id_new <> rec_gost_p.zem_id_old ) THEN -- Pay-TV 16 Guest Information Change rec_ptvzah_l := NULL; rec_ptvzah_l.gost_id := rec_gost_p.gost_id; pra_rec_ptv.puni_ptvzah (16, rec_gost_p.sj_id_new, rec_ptvzah_l); END IF; -- Pay-TV 18 Room Equipment Status IF UPDATING AND rec_gost_p.ozn_prisutnosti_new IN ('P') AND NVL (rec_gost_p.ptvvprog_id_new, 0) <> NVL (rec_gost_p.ptvvprog_id_old, 0) THEN -- Pay-TV 18 Room Equipment Status rec_ptvzah_l := NULL; rec_ptvzah_l.gost_id := rec_gost_p.gost_id; pra_rec_ptv.puni_ptvzah (18, rec_gost_p.sj_id_new, rec_ptvzah_l); END IF; END; PROCEDURE POPRAVI_BOOKING_STATUSSJ (SO_ID_P IN I_BOOKING.SO_ID%TYPE ,DATUM_P IN I_BOOKING.DATUM%TYPE ) IS /* popravak bookinga Ostvareno i statusa sj Zauzeto za zadani SO i datum veći od sistemskog */ BEGIN IF datum_p < TRUNC (SYSDATE) THEN RETURN; END IF; /* brisanje bookinga O */ UPDATE i_booking SET kol_sj = 0, br_osoba = 0 WHERE so_id = so_id_p AND datum >= datum_p AND ozn_sprodaje = 'O'; /* brisanje statusa SJ Z 23.03.2004. G.J. i_statusisj.ozn_domacice1 postavlja se 2 = čista */ UPDATE i_statusisj SET ozn_Z = 0, gost_id = NULL, ozn_domacice1 = 2 WHERE datum >= datum_p AND sj_id IN ( SELECT id FROM m_sj WHERE so_id = so_id_p); /* za svakog gosta koji boravi na zadani datum i kasnije zove se ista procedura kao kod upisa gosta s time da ažuriranje radi od datuma_p nadalje */ FOR gost IN ( SELECT * FROM t_gosti WHERE dat_odlaska > datum_p AND dat_dolaska_u_sj <= datum_p -- u biti nepotrebno AND sj_id IN ( SELECT id FROM m_sj WHERE so_id = so_id_p)) LOOP pra_t_gosti.dodaj_booking_statussj ( gost.ms_id, gost.age_id, gost.ponso_id, gost.recvpro_id, 'O', datum_p, gost.dat_odlaska, gost.sj_id, gost.id, gost.rezvsj_id); END LOOP; COMMIT; END; PROCEDURE UPISI_PROMJENU_DAT_DOLASKA (GOD_POSLOVNA_P IN T_GOSTI.GOD_POSLOVNA%TYPE ,RBR_P IN T_GOSTI.RBR%TYPE ,PREZIME_P IN T_GOSTI.PREZIME%TYPE ,IME_P IN T_GOSTI.IME%TYPE ,OLD_DAT_DOLASKA_P IN T_GOSTI.DAT_DOLASKA%TYPE ,NEW_DAT_DOLASKA_P IN T_GOSTI.DAT_DOLASKA%TYPE ) IS /* upisati u lrec_promjene promjenu datuma dolaska gosta (0006) */ BEGIN IF god_poslovna_p IS NULL OR rbr_p IS NULL OR prezime_p IS NULL OR ime_p IS NULL OR old_dat_dolaska_p IS NULL OR new_dat_dolaska_p IS NULL THEN RETURN; END IF; IF old_dat_dolaska_p <> new_dat_dolaska_p THEN pra_rec.puni_promjene_t ( -- IRN 2997 '0006', god_poslovna_p || '; ' || rbr_p || '; ' || ime_p || '; ' || prezime_p || '; ' || TO_CHAR (old_dat_dolaska_p, 'DD.MM.RRRR') || '; ' || TO_CHAR (new_dat_dolaska_p, 'DD.MM.RRRR'), 0); END IF; END; PROCEDURE UPISI_SELIDBU (GOD_POSLOVNA_P IN T_GOSTI.GOD_POSLOVNA%TYPE ,RBR_P IN T_GOSTI.RBR%TYPE ,PREZIME_P IN T_GOSTI.PREZIME%TYPE ,IME_P IN T_GOSTI.IME%TYPE ,OLD_SJ_ID_P IN T_GOSTI.SJ_ID%TYPE ,NEW_SJ_ID_P IN T_GOSTI.SJ_ID%TYPE ) IS /* upisati u lrec_promjene selidbu gosta */ old_so_sifra_l m_so.sifra%TYPE; new_so_sifra_l m_so.sifra%TYPE; old_sj_broj_l m_sj.broj%TYPE; new_sj_broj_l m_sj.broj%TYPE; BEGIN IF god_poslovna_p IS NULL OR rbr_p IS NULL OR prezime_p IS NULL OR ime_p IS NULL OR old_sj_id_p IS NULL OR new_sj_id_p IS NULL THEN RETURN; END IF; IF old_sj_id_p <> new_sj_id_p THEN SELECT so.sifra, sj.broj INTO old_so_sifra_l, old_sj_broj_l FROM m_so so, m_sj sj WHERE sj.so_id = so.id AND sj.id = old_sj_id_p; SELECT so.sifra, sj.broj INTO new_so_sifra_l, new_sj_broj_l FROM m_so so, m_sj sj WHERE sj.so_id = so.id AND sj.id = new_sj_id_p; pra_rec.puni_promjene_t ( -- IRN 2997 '0002', god_poslovna_p || '; ' || rbr_p || '; ' || ime_p || '; ' || prezime_p || '; ' || old_so_sifra_l || '; ' || old_sj_broj_l || '; ' || new_so_sifra_l || '; ' || new_sj_broj_l, 0); END IF; END; FUNCTION JEZ_ID (ZEM_ID_P IN T_GOSTI.ZEM_ID%TYPE ,JEZ_ID_P IN T_GOSTI.JEZ_ID%TYPE ) RETURN t_gosti.jez_id%TYPE IS -- jez_id_l t_gosti.jez_id%TYPE; CURSOR zem_c IS SELECT jez_id FROM s_zemlje WHERE id = zem_id_p; BEGIN IF jez_id_p IS NOT NULL OR zem_id_p IS NULL THEN RETURN (jez_id_p); END IF; OPEN zem_c; FETCH zem_c INTO jez_id_l; CLOSE zem_c; RETURN (jez_id_l); END; PROCEDURE AZURIRAJ_BOOKING_X_GOST (GOST_ID_P IN T_GOSTI.ID%TYPE ,SO_ID_P IN M_SO.ID%TYPE ,SJ_ID_P IN M_SJ.ID%TYPE ,DAT_POC_P IN I_BOOKING.DATUM%TYPE ,DAT_ZAV_P IN I_BOOKING.DATUM%TYPE ,KOL_SJ_P IN I_BOOKING.KOL_SJ%TYPE ,CIJENA_SJ_P IN I_BOOKING.CIJENA_SJ%TYPE ) IS /* 22.08.2002, Milena Ažuriranje bookinga X (koji umanjuje B iz zakupa) kod smještaja prvog gosta u zakupljenu SJ odnosno seljenja zadnjeg gosta iz zakupljene SJ */ datum_l i_booking.datum%TYPE; ms_id_l i_booking.ms_id%TYPE; age_id_l i_booking.age_id%TYPE; vsj_id_l i_booking.vsj_id%TYPE; br_osoba_l i_booking.br_osoba%TYPE; nebitno_l NUMBER; broj_l NUMBER; CURSOR zaksj_c (datum_k i_booking.datum%TYPE) IS SELECT ms_id, age_id FROM t_zakup zak, t_zak_sj zaksj WHERE zaksj.zak_id = zak.id AND zak.dat_poc <= datum_k AND zak.dat_zav > datum_k AND zak.ozn_B = -1 AND zak.oznaka = 'V' AND zaksj.sj_id = sj_id_p; CURSOR book_c ( ms_id_k i_booking.ms_id%TYPE, age_id_k i_booking.age_id%TYPE, vsj_id_k i_booking.vsj_id%TYPE, datum_k i_booking.datum%TYPE) IS SELECT 1 FROM i_booking WHERE so_id = so_id_p AND ms_id = ms_id_k AND NVL (age_id, 0) = NVL (age_id_k, 0) AND ponso_id IS NULL AND vsj_id = vsj_id_k AND datum = datum_k AND ozn_sprodaje = 'X' AND recvpro_id IS NULL -- MK 30.11.2011, da se ne bi ažurirao X booking za neku vrstu programa koji je nastao po nekoj rezervaciji FOR UPDATE OF kol_sj NOWAIT; BEGIN IF pra_rec_s.postoji_zakupb_za_sj (sj_id_p, dat_poc_p, dat_zav_p) = -1 THEN SELECT br_opostelja, vsj_id INTO br_osoba_l, vsj_id_l FROM m_sj WHERE id = sj_id_p; datum_l := dat_poc_p; WHILE datum_l < dat_zav_p LOOP SELECT COUNT (ROWID) INTO broj_l FROM t_gosti WHERE sj_id = sj_id_p AND id <> gost_id_p AND dat_dolaska_u_sj <= datum_l AND dat_odlaska > datum_l; IF NVL (broj_l, 0) = 0 THEN OPEN zaksj_c (datum_l); FETCH zaksj_c INTO ms_id_l, age_id_l; IF zaksj_c%FOUND THEN OPEN book_c (ms_id_l, age_id_l, vsj_id_l, datum_l); FETCH book_c INTO nebitno_l; IF book_c%FOUND THEN UPDATE i_booking SET kol_sj = kol_sj + kol_sj_p, br_osoba = NVL (br_osoba, 0) + NVL (kol_sj_p * br_osoba_l, 0), cijena_sj = NVL (cijena_sj_p, cijena_sj) WHERE CURRENT OF book_c; ELSE INSERT INTO i_booking ( so_id, ms_id, age_id, vsj_id, datum, ozn_sprodaje, kol_sj, br_osoba, cijena_sj) VALUES ( so_id_p, ms_id_l, age_id_l, vsj_id_l, datum_l, 'X', kol_sj_p, kol_sj_p * br_osoba_l, cijena_sj_p); END IF; CLOSE book_c; END IF; CLOSE zaksj_c; END IF; datum_l := datum_l + 1; END LOOP; END IF; EXCEPTION WHEN OTHERS THEN IF zaksj_c%ISOPEN THEN CLOSE zaksj_c; END IF; IF book_c%ISOPEN THEN CLOSE book_c; END IF; RAISE; END; PROCEDURE AZURIRAJ_KGOST_RECPRIMUP2_ID (GOST_ID_P T_GOSTI.ID%TYPE ) IS /* Ažuriraj vezu T_KGOSTIJU i LREC_PRIJEPISI_MUP kod promjene podataka u T_GOSTI. */ recprimup2_id_l t_kgostiju.recprimup2_id%TYPE; CURSOR kgost_c IS SELECT recprimup2_id FROM t_kgostiju WHERE gost_id = gost_id_p AND oznaka = 'V' FOR UPDATE OF recprimup2_id; BEGIN OPEN kgost_c; LOOP FETCH kgost_c INTO recprimup2_id_l; EXIT WHEN kgost_c%NOTFOUND; IF recprimup2_id_l IS NOT NULL THEN UPDATE t_kgostiju SET recprimup2_id = NULL WHERE CURRENT OF kgost_c; END IF; END LOOP; CLOSE kgost_c; END; PROCEDURE INSERT_RECGOSTBOR (GOST_ID_P IN TREC_GOST_BORAVCI.GOST_ID%TYPE ,SJ_ID_P IN TREC_GOST_BORAVCI.SJ_ID%TYPE ,DAT_POC_P IN TREC_GOST_BORAVCI.DAT_POC%TYPE ,DAT_ZAV_P IN TREC_GOST_BORAVCI.DAT_ZAV%TYPE ) IS BEGIN INSERT INTO trec_gost_boravci (gost_id, sj_id, dat_poc, dat_zav) VALUES (gost_id_p, sj_id_p, dat_poc_p, dat_zav_p); END; PROCEDURE AZURIRAJ_RECGOSTBOR (GOST_ID_P IN TREC_GOST_BORAVCI.GOST_ID%TYPE ,SJ_ID_OLD_P IN TREC_GOST_BORAVCI.SJ_ID%TYPE ,SJ_ID_NEW_P IN TREC_GOST_BORAVCI.SJ_ID%TYPE ,DAT_DOLASKA_OLD_P IN T_GOSTI.DAT_DOLASKA%TYPE ,DAT_DOLASKA_NEW_P IN T_GOSTI.DAT_DOLASKA%TYPE ,DAT_DOLASKA_U_SJ_P IN T_GOSTI.DAT_DOLASKA_U_SJ%TYPE ,DAT_ODLASKA_OLD_P IN T_GOSTI.DAT_ODLASKA%TYPE ,DAT_ODLASKA_NEW_P IN T_GOSTI.DAT_ODLASKA%TYPE ) IS /* ažuriraj boravak gosta kod promjene SJ, datuma dolaska ili odlaska. Iz FO je moguća samo jedna izmjena odjednom pa se vjerovatno neće desiti da je mijenjano više podataka odjednom ali je ovom procedurom sve pokriveno. Najprije se mijenjaju boravci prema datumima pa onda zbog SJ. */ BEGIN -- promjena SAMO dat_odlaska -- skraćivanje IF dat_odlaska_old_p > dat_odlaska_new_p THEN FOR recgostbor IN ( SELECT id, sj_id, dat_poc, dat_zav FROM trec_gost_boravci WHERE gost_id = gost_id_p ) LOOP -- brisati buduće boravke što je u stvari nepotrebno jer će se u tom slučaju buniti gost_dat_dol_sj_odl_ck IF recgostbor.dat_poc > dat_odlaska_new_p THEN DELETE FROM trec_gost_boravci WHERE id = recgostbor.id; ELSE -- tekući boravak skratiti IF recgostbor.dat_zav > dat_odlaska_new_p THEN UPDATE trec_gost_boravci SET dat_zav = dat_odlaska_new_p WHERE id = recgostbor.id; END IF; END IF; END LOOP; END IF; -- produžavanje - zadnji boravak (onaj sa najvećim od) produžiti IF dat_odlaska_old_p < dat_odlaska_new_p THEN FOR recgostbor IN ( SELECT max (id) id FROM trec_gost_boravci WHERE gost_id = gost_id_p ) LOOP UPDATE trec_gost_boravci SET dat_zav = dat_odlaska_new_p WHERE id = recgostbor.id; END LOOP; END IF; -- promjena SAMO dat_dolaska -- pomicati dolazak unatrag = produžiti prvi boravak (onaj sa najmanjim id) IF dat_dolaska_old_p > dat_dolaska_new_p THEN FOR recgostbor IN ( SELECT MIN (id) id FROM trec_gost_boravci WHERE gost_id = gost_id_p ) LOOP UPDATE trec_gost_boravci SET dat_poc = dat_dolaska_new_p WHERE id = recgostbor.id; END LOOP; END IF; -- pomicati dolazak unaprijed - skraćivanje IF dat_dolaska_old_p < dat_dolaska_new_p THEN FOR recgostbor IN ( SELECT id, sj_id, dat_poc, dat_zav FROM trec_gost_boravci WHERE gost_id = gost_id_p ) LOOP -- brisati stare boravke IF recgostbor.dat_zav < dat_dolaska_new_p THEN DELETE FROM trec_gost_boravci WHERE id = recgostbor.id; ELSE -- tekući boravak skratiti IF recgostbor.dat_poc < dat_dolaska_new_p THEN UPDATE trec_gost_boravci SET dat_poc = dat_dolaska_new_p WHERE id = recgostbor.id; END IF; END IF; END LOOP; END IF; -- promjena SJ IF sj_id_old_p <> sj_id_new_p AND dat_dolaska_u_sj_p BETWEEN dat_dolaska_new_p AND dat_odlaska_new_p THEN FOR recgostbor IN ( SELECT id, sj_id, dat_poc, dat_zav FROM trec_gost_boravci WHERE gost_id = gost_id_p ) LOOP -- brisati postojeće buduće boravke IF recgostbor.dat_poc > dat_dolaska_u_sj_p THEN DELETE FROM trec_gost_boravci WHERE id = recgostbor.id; ELSE -- tekući boravak skratiti ako je potrebno IF recgostbor.dat_zav > dat_dolaska_u_sj_p THEN UPDATE trec_gost_boravci SET dat_zav = dat_dolaska_u_sj_p WHERE id = recgostbor.id; END IF; END IF; END LOOP; -- dodati novi boravak pra_t_gosti.insert_recgostbor (gost_id_p, sj_id_new_p, dat_dolaska_u_sj_p, dat_odlaska_new_p); END IF; END; PROCEDURE PROVJERI_RAZDOBLJE (ID_P IN T_GOSTI.ID%TYPE ,RECAGOST_ID_P IN T_GOSTI.RECAGOST_ID%TYPE ,DAT_DOLASKA_P IN T_GOSTI.DAT_DOLASKA%TYPE ,DAT_ODLASKA_P IN T_GOSTI.DAT_ODLASKA%TYPE ) IS /* Razdoblja boravka gosta iz arhive gostiju ne mogu se preklapati. */ CURSOR gost_c IS SELECT rbr, dat_dolaska, dat_odlaska FROM t_gosti WHERE id <> NVL (id_p, -1) AND NVL (recagost_id, -1) = recagost_id_p AND dat_dolaska <= dat_odlaska_p AND dat_odlaska >= dat_dolaska_p; gost_c_l gost_c%ROWTYPE; BEGIN IF recagost_id_p IS NULL OR dat_dolaska_p IS NULL OR dat_odlaska_p IS NULL THEN RETURN; END IF; OPEN gost_c; LOOP FETCH gost_c INTO gost_c_l; EXIT WHEN gost_c%NOTFOUND; IF dat_dolaska_p >= gost_c_l.dat_odlaska OR dat_odlaska_p <= gost_c_l.dat_dolaska THEN NULL; ELSE CLOSE gost_c; pra_rec_zaj.vrati_poruku (-20442, gost_c_l.rbr); END IF; END LOOP; CLOSE gost_c; END; PROCEDURE PROVJERI_RECREZSJ_REZVSJ (RECREZSJ_ID_P IN T_GOSTI.RECREZSJ_ID%TYPE ,REZVSJ_ID_P IN T_GOSTI.REZVSJ_ID%TYPE ) IS -- rezvsj_id_l t_rez_vsj.id%TYPE; BEGIN IF recrezsj_id_p IS NULL THEN RETURN; END IF; SELECT rezvsj_id INTO rezvsj_id_l FROM trec_rez_sj WHERE id = recrezsj_id_p; IF rezvsj_id_p = rezvsj_id_l THEN NULL; ELSE -- Ako gost pripada TREC_REZ_SJ onda pripada i T_REZ_VSJ. pra_rec_zaj.vrati_poruku (-20449); END IF; END; PROCEDURE AZURIRAJ_RECREZSJ_BR_OSOBAZ (RECREZSJ_ID_P IN T_GOSTI.RECREZSJ_ID%TYPE ) IS BEGIN IF recrezsj_id_p IS NULL THEN RETURN; END IF; UPDATE trec_rez_sj SET br_osobaz = NVL (br_osobaz, 0) + 1 WHERE id = recrezsj_id_p; END; PROCEDURE AZURIRAJ_RECGOST2_SHARE_FLAG (GOST_REC_P IN tab_t_gosti.gost_rec_type ) IS -- share_flag_l trec_gosti2.share_flag%TYPE; BEGIN IF gost_rec_p.gost_id IS NULL OR gost_rec_p.sj_id_new IS NULL OR gost_rec_p.ozn_prisutnosti_new IS NULL THEN RETURN; END IF; SELECT DECODE (COUNT (ROWID), 0, 0, -1) INTO share_flag_l FROM t_gosti WHERE ozn_prisutnosti = 'P' AND sj_id = gost_rec_p.sj_id_new AND id <> gost_rec_p.gost_id; IF INSERTING AND gost_rec_p.ozn_prisutnosti_new IN ('P') THEN INSERT INTO trec_gosti2 ( id, share_flag) VALUES ( gost_rec_p.gost_id, share_flag_l); END IF; END; PROCEDURE UPISI_PROMJENU_DRZAVLJANSTVA (GOD_POSLOVNA_P IN T_GOSTI.GOD_POSLOVNA%TYPE ,RBR_P IN T_GOSTI.RBR%TYPE ,OLD_ZEM_ID_P IN S_ZEMLJE.ID%TYPE ,NEW_ZEM_ID_P IN S_ZEMLJE.ID%TYPE ) IS /* upisati u lrec_promjene promjenu drzavljanstva gosta (0024) */ zem_sifra2a_old_l s_zemlje.sifra_2a%TYPE; zem_sifra2a_new_l s_zemlje.sifra_2a%TYPE; zem_sifra2a_dom_l szmp_parametri.vrijednost%TYPE; zem_ozn_mup_old_l NUMBER; zem_ozn_mup_new_l NUMBER; BEGIN IF god_poslovna_p IS NULL OR rbr_p IS NULL OR old_zem_id_p IS NULL OR new_zem_id_p IS NULL THEN RETURN; END IF; IF old_zem_id_p <> new_zem_id_p THEN zem_sifra2a_dom_l := pra_zmp_zaj.vrijednost_parametra ('0002'); SELECT sifra_2a, ozn_mup INTO zem_sifra2a_old_l, zem_ozn_mup_old_l FROM s_zemlje WHERE id = old_zem_id_p; SELECT sifra_2a, ozn_mup INTO zem_sifra2a_new_l, zem_ozn_mup_new_l FROM s_zemlje WHERE id = new_zem_id_p; IF (zem_sifra2a_old_l <> zem_sifra2a_dom_l AND zem_sifra2a_new_l <> zem_sifra2a_dom_l) AND zem_ozn_mup_old_l <> zem_ozn_mup_new_l THEN pra_rec.puni_promjene_t ( -- IRN 2997 '0024', god_poslovna_p || '; ' || rbr_p || '; ' || zem_sifra2a_old_l || '; ' || zem_sifra2a_new_l, 0); END IF; END IF; END; PROCEDURE AZURIRAJ_KGOST_PRITZ2I_ID (GOST_ID_P IN t_gosti.id%TYPE ) IS -- IRN 2436; ažuriraj vezu T_KGOSTIJU i L_PRIJEPISI_TZ kod promjene podataka u T_GOSTI. pritz2i_id_l t_kgostiju.pritz2i_id%TYPE; CURSOR kgost_c IS SELECT pritz2i_id FROM t_kgostiju WHERE gost_id = gost_id_p AND oznaka = 'V' AND pritz2o_id IS NULL FOR UPDATE OF pritz2i_id; BEGIN OPEN kgost_c; LOOP FETCH kgost_c INTO pritz2i_id_l; EXIT WHEN kgost_c%NOTFOUND; IF pritz2i_id_l IS NOT NULL THEN UPDATE t_kgostiju SET pritz2i_id = NULL WHERE CURRENT OF kgost_c; END IF; END LOOP; CLOSE kgost_c; END; PROCEDURE UPISI_PROMJENU_DAT_ODLASKA (GOD_POSLOVNA_P IN T_GOSTI.GOD_POSLOVNA%TYPE ,RBR_P IN T_GOSTI.RBR%TYPE ,PREZIME_P IN T_GOSTI.PREZIME%TYPE ,IME_P IN T_GOSTI.IME%TYPE ,OLD_DAT_ODLASKA_P IN T_GOSTI.DAT_ODLASKA%TYPE ,NEW_DAT_ODLASKA_P IN T_GOSTI.DAT_ODLASKA%TYPE ) IS /* upisati u lrec_promjene promjenu datuma odlaska gosta (0026) */ BEGIN IF god_poslovna_p IS NULL OR rbr_p IS NULL OR prezime_p IS NULL OR ime_p IS NULL OR old_dat_odlaska_p IS NULL OR new_dat_odlaska_p IS NULL THEN RETURN; END IF; IF old_dat_odlaska_p <> new_dat_odlaska_p THEN pra_rec.puni_promjene_t ( -- IRN 2997 '0026', god_poslovna_p || '; ' || rbr_p || '; ' || ime_p || '; ' || prezime_p || '; ' || TO_CHAR (old_dat_odlaska_p, 'DD.MM.RRRR') || '; ' || TO_CHAR (new_dat_odlaska_p, 'DD.MM.RRRR'), 0); END IF; END; PROCEDURE PONISTI_KGOST_BRISANO (GOST_ID_P IN T_GOSTI.ID%TYPE ) IS BEGIN UPDATE t_kgostiju SET oznaka = 'P' WHERE gost_id = gost_id_p AND oznaka = 'V'; END; PROCEDURE AZURIRAJ_KGOST_SAT_ODLASKA (GOST_ID_P IN t_gosti.id%TYPE ) IS -- rec1187_l szmp_parametri.vrijednost%TYPE := LOWER (pra_zmp_zaj.zmppar_vrijednost ('REC', '1187')); CURSOR kgost_c IS SELECT sat_dolaska FROM t_kgostiju WHERE gost_id = gost_id_p AND oznaka = 'V' AND pritz2o_id IS NULL FOR UPDATE OF sat_odlaska; sat_dolaska_l t_kgostiju.sat_dolaska%TYPE; sat_odlaska_l t_kgostiju.sat_odlaska%TYPE; BEGIN OPEN kgost_c; LOOP FETCH kgost_c INTO sat_dolaska_l; EXIT WHEN kgost_c%NOTFOUND; IF rec1187_l = 'nebitno' THEN -- sat dolaska + 1 minuta sat_odlaska_l := sat_dolaska_l + 1 / (24 * 60); ELSE -- veći od (sat_dolaska + 1 min) ili (sat_odl iz parametra) sat_odlaska_l := GREATEST ( sat_dolaska_l + 1 / (24 * 60), TO_DATE (TO_CHAR (sat_dolaska_l, 'dd.mm.rrrr') || ' ' || rec1187_l || ':00', 'dd.mm.rrrr hh24:mi')); END IF; UPDATE t_kgostiju SET sat_odlaska = sat_odlaska_l WHERE CURRENT OF kgost_c; END LOOP; CLOSE kgost_c; END; PROCEDURE PROVJERI_FIKTIVNI_U_SJ (GOST_ID_P IN T_GOSTI.ID%TYPE ,DAT_POC_P IN T_GOSTI.DAT_DOLASKA%TYPE ,DAT_ZAV_P IN T_GOSTI.DAT_ODLASKA%TYPE ,SJ_ID_P IN T_GOSTI.SJ_ID%TYPE ,OZN_FIKTIVNI_P IN T_GOSTI.OZN_FIKTIVNI%TYPE ) IS -- CURSOR gost_c (ozn_fiktivni_k IN NUMBER := NULL) IS SELECT COUNT (ROWID) FROM t_gosti WHERE ozn_prisutnosti = 'P' AND dat_odlaska > dat_poc_p AND dat_dolaska < dat_zav_p AND sj_id = sj_id_p AND NVL(ozn_brisano, 0) = 0 AND ozn_fiktivni = NVL(ozn_fiktivni_k, ozn_fiktivni) AND id <> gost_id_p; br_redaka_l NUMBER(5); BEGIN IF ozn_fiktivni_p = -1 THEN OPEN gost_c; FETCH gost_c INTO br_redaka_l; IF br_redaka_l > 0 THEN CLOSE gost_c; -- U SJ postoji fiktivni gost. pra_rec_zaj.vrati_poruku (-20635); END IF; CLOSE gost_c; ELSE OPEN gost_c (-1); FETCH gost_c INTO br_redaka_l; IF br_redaka_l > 0 THEN CLOSE gost_c; -- U SJ postoji fiktivni gost. pra_rec_zaj.vrati_poruku (-20635); END IF; CLOSE gost_c; END IF; END; PROCEDURE AZURIRAJ_KGOST_PRITZ2O_ID (GOST_ID_P IN t_gosti.id%TYPE ) IS -- IRN 2785; ažuriraj vezu T_KGOSTIJU i L_PRIJEPISI_TZ kod odjave gosta u Sloveniji. pritz2i_id_l t_kgostiju.pritz2i_id%TYPE; CURSOR kgost_c IS SELECT pritz2i_id FROM t_kgostiju WHERE gost_id = gost_id_p AND oznaka = 'V' FOR UPDATE OF pritz2o_id; BEGIN OPEN kgost_c; LOOP FETCH kgost_c INTO pritz2i_id_l; EXIT WHEN kgost_c%NOTFOUND; UPDATE t_kgostiju SET pritz2o_id = pritz2i_id_l WHERE CURRENT OF kgost_c; END LOOP; CLOSE kgost_c; END; PROCEDURE UPISI_PROMJENU_RECAGOST_ID (GOD_POSLOVNA_P IN t_gosti.god_poslovna%TYPE ,RBR_P IN t_gosti.rbr%TYPE ,IME_P IN t_gosti.ime%TYPE ,PREZIME_P IN t_gosti.prezime%TYPE ,RECAGOST_ID_OLD_P IN t_gosti.recagost_id%TYPE ,RECAGOST_ID_NEW_P IN t_gosti.recagost_id%TYPE ) IS -- IRN 2997; upisati u lrec_promjene promjenu recagost_id recagost_rbr_old_l trec_agostiju.rbr%TYPE; recagost_rbr_new_l trec_agostiju.rbr%TYPE; BEGIN IF god_poslovna_p IS NULL OR rbr_p IS NULL OR ime_p IS NULL OR prezime_p IS NULL OR NVL (recagost_id_old_p, 0) = NVL (recagost_id_new_p, 0) THEN RETURN; END IF; IF recagost_id_old_p IS NOT NULL THEN SELECT rbr INTO recagost_rbr_old_l FROM trec_agostiju WHERE id = recagost_id_old_p; END IF; IF recagost_id_new_p IS NOT NULL THEN SELECT rbr INTO recagost_rbr_new_l FROM trec_agostiju WHERE id = recagost_id_new_p; END IF; pra_rec.puni_promjene_t ( -- IRN 2997 '0027', god_poslovna_p || '; ' || rbr_p || '; ' || ime_p || '; ' || prezime_p || '; ' || recagost_rbr_old_l || '; ' || recagost_rbr_new_l, 0); END; PROCEDURE PROVJERI_RAZDOBLJE_ZAKKOR (ID_P IN t_gosti.id%TYPE ,ZAKKOR_ID_P IN t_gosti.zakkor_id%TYPE ,DAT_DOLASKA_P IN t_gosti.dat_dolaska%TYPE ,DAT_ODLASKA_P IN t_gosti.dat_odlaska%TYPE ) IS /* Razdoblja boravka gosta korisnika ugovora o zakupu ne mogu se preklapati. */ CURSOR gost0_c IS -- IRN 3381 SELECT zakkor.ime || ' ' || zakkor.prezime AS zakkor_naziv, gost.ime || ' ' || gost.prezime AS gost_naziv, gost.rbr AS gost_rbr FROM t_gosti gost, t_zak_korisnici zakkor WHERE gost.id <> NVL (id_p, -1) AND gost.zakkor_id = zakkor.id AND zakkor.id = zakkor_id_p AND gost.ozn_prisutnosti = 'P'; gost0_c_l gost0_c%ROWTYPE; CURSOR gost_c IS SELECT rbr, dat_dolaska, dat_odlaska FROM t_gosti WHERE id <> NVL (id_p, -1) AND NVL (zakkor_id, -1) = zakkor_id_p AND dat_dolaska <= dat_odlaska_p AND dat_odlaska >= dat_dolaska_p; gost_c_l gost_c%ROWTYPE; BEGIN IF zakkor_id_p IS NULL OR dat_dolaska_p IS NULL OR dat_odlaska_p IS NULL THEN RETURN; END IF; IF INSERTING THEN -- IRN 3381 OPEN gost0_c; FETCH gost0_c INTO gost0_c_l; IF gost0_c%FOUND THEN CLOSE gost0_c; -- Korisnik ugovora o zakupu #0 već je prijavljen pod imenom #1 (#2). pra_rec_zaj.vrati_poruku (-20657, gost0_c_l.zakkor_naziv, gost0_c_l.gost_naziv, gost0_c_l.gost_rbr); END IF; CLOSE gost0_c; END IF; OPEN gost_c; LOOP FETCH gost_c INTO gost_c_l; EXIT WHEN gost_c%NOTFOUND; IF dat_dolaska_p >= gost_c_l.dat_odlaska OR dat_odlaska_p <= gost_c_l.dat_dolaska THEN NULL; ELSE CLOSE gost_c; -- Razdoblja boravka gosta korisnika ugovora o zakupu ne mogu se preklapati (#0)! pra_rec_zaj.vrati_poruku (-20651, gost_c_l.rbr); END IF; END LOOP; CLOSE gost_c; END; PROCEDURE PROVJERI_ZASTICENU_SJ (SJ_ID_P IN t_gosti.sj_id%TYPE ,REZVSJ_ID_P IN t_gosti.rezvsj_id%TYPE ,DAT_DOLASKA_P IN t_gosti.dat_dolaska%TYPE ,DAT_ODLASKA_P IN t_gosti.dat_odlaska%TYPE ) IS -- IRN 3678; zabrani prijavu/seljenje gosta u zaštićenu SJ CURSOR rezsj_c IS SELECT sj.broj AS sj_broj, rez.god_poslovna || '-' || rez.rbr AS rez_rbr, TO_CHAR (rez.dat_odlaska, 'DD.MM.RRRR') AS dat_odlaska FROM t_rez_vsj rezvsj, t_rezervacije rez, m_sj sj WHERE rezvsj.sj_id = sj.id AND sj.id = sj_id_p AND rezvsj.ozn_fiksna_sj = -1 AND rezvsj.rez_id = rez.id AND rez.oznaka = 'V' AND rez.ozn_vstorna IS NULL AND rez.dat_dolaska < dat_odlaska_p AND rez.dat_odlaska > dat_dolaska_p AND rezvsj.br_osoba > NVL (rezvsj.br_osobaz, 0) -- IRN 3713; neiskorištena AND rezvsj.id <> NVL (rezvsj_id_p, 0) UNION ALL SELECT sj.broj, rez.god_poslovna || '-' || rez.rbr, TO_CHAR (rez.dat_odlaska, 'DD.MM.RRRR') FROM trec_rez_sj recrezsj, t_rez_vsj rezvsj, t_rezervacije rez, m_sj sj WHERE recrezsj.sj_id = sj.id AND sj.id = sj_id_p AND recrezsj.ozn_fiksna_sj = -1 AND recrezsj.rezvsj_id = rezvsj.id AND rezvsj.rez_id = rez.id AND rez.oznaka = 'V' AND rez.ozn_vstorna IS NULL AND rez.dat_dolaska < dat_odlaska_p AND rez.dat_odlaska > dat_dolaska_p AND recrezsj.br_osoba > NVL (recrezsj.br_osobaz, 0) -- IRN 3713; neiskorištena AND rezvsj.id <> NVL (rezvsj_id_p, 0); rezsj_c_l rezsj_c%ROWTYPE; BEGIN IF sj_id_p IS NULL -- OR rezvsj_id_p IS NULL -- gost ne mora biti vezan za rezervaciju OR dat_dolaska_p IS NULL OR dat_odlaska_p IS NULL THEN RETURN; END IF; OPEN rezsj_c; FETCH rezsj_c INTO rezsj_c_l; IF rezsj_c%FOUND THEN CLOSE rezsj_c; -- Smještajna jedinica #0 zaštićena je u rezervaciji #1 do #2. pra_rec_zaj.vrati_poruku (-20659, rezsj_c_l.sj_broj, rezsj_c_l.rez_rbr, rezsj_c_l.dat_odlaska); END IF; CLOSE rezsj_c; END; PROCEDURE PUNI_KGOST (ZAPIS_P IN tab_t_gosti.gost_rec_type ) IS -- IRN 3972; puni knjigu gostiju iz pretprijave; poziva se iz AIS_T_GOSTI CURSOR rezgost_c IS SELECT rezgost.vpisp_id, rezgost.posr_id, rezgost.zemr_id, rezgost.zem_id, rezgost.br_pisprave, rezgost.dat_rodjenja, rezgost.naz_mjrodj, rezgost.ozn_spola, rezgost.naz_ulice, rezgost.naz_mjesta, rezgost.reg_vozila, rezgost.br_telefona, NVL (rezgost.email, rez.email) AS email, ms.ozn_recagost FROM t_rez_gost rezgost, t_rez_vsj rezvsj, t_rezervacije rez, m_msegmenti ms WHERE rezgost.id = zapis_p.rezgost_id AND rezgost.rezvsj_id = rezvsj.id AND rezvsj.rez_id = rez.id AND rez.ms_id = ms.id -- BIR_T_GOSTI provjerava rez.ms_id = gost.ms_id AND rezgost.sc_korisnik IS NOT NULL; -- obavljena je pretprijava rezgost_c_l rezgost_c%ROWTYPE; kgost_row_l t_kgostiju%ROWTYPE; so_naz_grada_l m_so.naz_grada%TYPE; so_naz_mjesta_l m_so.naz_mjesta%TYPE; zemr_sifra_2a_l s_zemlje.sifra_2a%TYPE; zem_sifra_2a_l s_zemlje.sifra_2a%TYPE; dob_l NUMBER; vplabp_sifra_l s_vplabp_tz.sifra%TYPE; br_redaka_l NUMBER; rec_param_1185_l szmp_parametri.vrijednost%TYPE; BEGIN IF zapis_p.gost_id IS NULL OR zapis_p.rezgost_id IS NULL OR zapis_p.sj_id_new IS NULL OR zapis_p.dat_dolaska_new IS NULL OR zapis_p.dat_odlaska_new IS NULL THEN RETURN; END IF; -- Check In; Nakon spremanja podataka automatski upisati podatke iz pretprijave (Pre-Check-in) u knjigu gostiju da ili ne. IF pra_rec_zaj.vrijednost_parametra ('1233') = 'da' THEN NULL; ELSE RETURN; END IF; OPEN rezgost_c; FETCH rezgost_c INTO rezgost_c_l; IF rezgost_c%NOTFOUND THEN CLOSE rezgost_c; RETURN; END IF; CLOSE rezgost_c; -- id -- puni BIR SELECT so.knjm_id, UPPER (so.naz_grada), UPPER (so.naz_mjesta) INTO kgost_row_l.knjm_id, so_naz_grada_l, so_naz_mjesta_l FROM m_sj sj, m_so so WHERE sj.id = zapis_p.sj_id_new AND sj.so_id = so.id; kgost_row_l.gost_id := zapis_p.gost_id; kgost_row_l.vpisp_id := rezgost_c_l.vpisp_id; kgost_row_l.posr_id := rezgost_c_l.posr_id; kgost_row_l.zemr_id := rezgost_c_l.zemr_id; -- vplabp_id -- puni se nakon punjenja naz_pboravista -- gpri_id, vviz_id, pos_id, reg_id kgost_row_l.zem_id := rezgost_c_l.zem_id; -- pritz_id_p, pritz_id_o, recprimup1_id, recprimup2_id -- god_poslovna -- puni BIR -- REC param 1170 Knjiga gostiju za domaće i strane goste vodi se: 1 = zajedno ili 2 = odvojeno IF pra_rec_zaj.vrijednost_parametra ('1170') = '1' THEN kgost_row_l.ozn_vknjiga := '2'; -- zajednička knjiga ELSE -- Provjerite vrijednost #0 parametra #1! pra_zmp_zaj.vrati_poruku_zaj ('ZMP', -20100, 'REC', '1170'); END IF; -- rbr -- puni BIR kgost_row_l.oznaka := 'V'; kgost_row_l.br_pisprave := rezgost_c_l.br_pisprave; -- naz_mjpisp kgost_row_l.ozn_datrodj := 'P'; -- poznat kgost_row_l.dat_rodjenja := rezgost_c_l.dat_rodjenja; SELECT sifra_2a INTO zemr_sifra_2a_l FROM s_zemlje WHERE id = kgost_row_l.zemr_id; IF zemr_sifra_2a_l = 'HR' THEN NULL; -- mjesto rođenja ne upisuje se via Self-Check-in pa nije provjereno na eVisitor mjesta ELSE kgost_row_l.naz_mjrodj := rezgost_c_l.naz_mjrodj; END IF; kgost_row_l.ozn_spola := rezgost_c_l.ozn_spola; -- dat_ulaska, dat_boravka kgost_row_l.naz_ulice := rezgost_c_l.naz_ulice; kgost_row_l.naz_mjesta := rezgost_c_l.naz_mjesta; -- naz_regije, br_vize, naz_mjvize SELECT sifra_2a INTO zem_sifra_2a_l FROM s_zemlje WHERE id = kgost_row_l.zem_id; IF zem_sifra_2a_l = 'HR' THEN kgost_row_l.naz_pboravista := rezgost_c_l.naz_mjesta; END IF; -- puni vplabp_id dob_l := pra_rec_s3.dob (kgost_row_l.dat_rodjenja, zapis_p.dat_dolaska_new); /* kada budemo imali kupce MISH izvan HR onda ovdje trebamo dodati ispitivanje je li domaća zemlja = HR */ IF dob_l BETWEEN 0 AND 11 THEN vplabp_sifra_l := 'A'; ELSIF dob_l BETWEEN 12 AND 17 THEN vplabp_sifra_l := 'J'; ELSE vplabp_sifra_l := 'N'; END IF; IF zem_sifra_2a_l = 'HR' AND UPPER (kgost_row_l.naz_pboravista) IN (so_naz_grada_l, so_naz_mjesta_l) AND vplabp_sifra_l IN ('J', 'N') THEN vplabp_sifra_l := 'L'; END IF; SELECT MIN (id) INTO kgost_row_l.vplabp_id FROM s_vplabp_tz WHERE sifra = vplabp_sifra_l; -- KRAJ puni vplabp_id kgost_row_l.reg_vozila := rezgost_c_l.reg_vozila; kgost_row_l.br_telefona := rezgost_c_l.br_telefona; -- br_telefaksa kgost_row_l.email := rezgost_c_l.email; IF kgost_row_l.email IS NOT NULL THEN SELECT COUNT (1) INTO br_redaka_l FROM t_gosti gost, t_kgostiju kgost WHERE kgost.gost_id = gost.id AND kgost.oznaka = 'V' AND gost.ozn_prisutnosti = 'P' AND LOWER (kgost.email) = LOWER (kgost_row_l.email); IF br_redaka_l > 0 THEN -- isprazni email jer postoji prisutan gost s jednakom e-adresom kgost_row_l.email := NULL; END IF; END IF; -- www, naz_poduzeca, ozn_kontakt, napomena -- unos_korisnik, unos_dat, izmjena_dat, izmjena_korisnik -- puni BIR -- ozn_kontakt_telefon, ozn_kontakt_telefaks, ozn_kontakt_email -- pritz2p_id, pritz2o_id, pritz2i_id -- tzid -- puni BIR -- dob kgost_row_l.ozn_recagost := rezgost_c_l.ozn_recagost; kgost_row_l.ozn_brisano := 0; kgost_row_l.sat_dolaska := SYSDATE; -- REC param 1185 Uobičajeni sat odlaska od 0 do 24 ili nebitno. rec_param_1185_l := pra_rec_zaj.vrijednost_parametra ('1185'); IF rec_param_1185_l = 'nebitno' THEN rec_param_1185_l := '10'; END IF; kgost_row_l.sat_odlaska := TO_DATE (TO_CHAR (zapis_p.dat_odlaska_new, 'DD.MM.RRRR') || ' ' || rec_param_1185_l || ':00', 'DD.MM.RRRR HH24:MI'); INSERT INTO t_kgostiju VALUES kgost_row_l; EXCEPTION WHEN OTHERS THEN -- Neuspio upis podataka iz pretprijave u knjigu gostiju (poslovna godina; redni broj gosta; ime gosta; prezime gosta; greška) pra_rec.puni_promjene ('0045', SUBSTR (zapis_p.god_poslovna || '; ' || zapis_p.rbr || '; ' || zapis_p.ime_new || '; ' || zapis_p.prezime_new || '; ' || SQLERRM, 1, 2000), 0); END; END PRA_T_GOSTI; / SHOW ERROR