-- C:\Radni\pra_rec_plan_iud.pkb -- -- Generated for Oracle 10g on Tue Oct 29 10:14:23 2024 by Server Generator 6.5.96.5.6 PROMPT Creating Package Body 'PRA_REC_PLAN_IUD' CREATE OR REPLACE PACKAGE BODY PRA_REC_PLAN_IUD IS /* pra_rec_plan_iud */ PROCEDURE PUNI_RECPLPOKSPOK (RECPLPOK_ID_P IN TREC_PLPOK_SPOK.RECPLPOK_ID%TYPE ,RECSPOK_ID_P IN TREC_PLPOK_SPOK.RECSPOK_ID%TYPE ,MS_ID_P IN TREC_PLPOK_SPOK.MS_ID%TYPE ,PLANIRANO_P IN TREC_PLPOK_SPOK.PLANIRANO%TYPE ); /* PRA_REC_PLAN_IUD */ PROCEDURE KOPIRAJ_RECPLPOK (RECPLPOK_ID_P IN TREC_PLPOKAZATELJA.ID%TYPE ,SO_ID_2_P IN TREC_PLPOKAZATELJA.SO_ID%TYPE ,DAT_POC_2_P IN TREC_PLPOKAZATELJA.DATUM%TYPE ,DAT_ZAV_2_P IN TREC_PLPOKAZATELJA.DATUM%TYPE ,OZN_SO_OTVOREN_2_P IN TREC_PLPOKAZATELJA.OZN_SO_OTVOREN%TYPE ,OZN_IZRACUNATI_P IN NUMBER ,DAT_ZAV_3_P IN TREC_PLPOKAZATELJA.DATUM%TYPE ) IS /* Kopiraj plan pokazatelja uspješnosti u plan pokazatelja uspješnosti za odabrani SO i razdoblje Kopiraju se samo zaglavlja i stavke koje ne postoje, ono što postoji se ne mijenja Ako je ozn_izracunati_p = -1 onda se najprije kreiraju stavke iz plana i kapaciteta, nakon toga se kopiraju preostale stavke Ako DAT_POC_2_P = DAT_ZAV_2_P i upisan je DAT_ZAV_3_P onda se prilikom računanja iz g.plana razdoblje zbraja u dan */ datum_l DATE; datum1_l DATE; CURSOR recplpok_c ( so_id_k trec_plpokazatelja.so_id%TYPE, datum_k trec_plpokazatelja.datum%TYPE) IS SELECT id FROM trec_plpokazatelja WHERE so_id = so_id_k AND datum = datum_k; recplpok_id_2_l trec_plpokazatelja.id%TYPE; ozn_so_otvoren_2_l trec_plpokazatelja.ozn_so_otvoren%TYPE; recspok_id_l trec_plpok_spok.recspok_id%TYPE; recspok_id_dva_l trec_plpok_spok.recspok_id%TYPE; planirano_l trec_plpok_spok.planirano%TYPE; br_redaka_l NUMBER; BEGIN IF pra_zmp_zaj.centar = 0 THEN /* tablice trec_plpokazatelja i trec_plpok_spok su replikacijske i mogu se kopirati samo na centru */ RETURN; END IF; IF (recplpok_id_p IS NULL AND ozn_izracunati_p = 0) --ako je recplpok_id_p = NULL znači da se radi samo o izračunu bez kopiranja OR so_id_2_p IS NULL OR dat_poc_2_p IS NULL OR dat_zav_2_p IS NULL OR ozn_so_otvoren_2_p IS NULL OR ozn_izracunati_p IS NULL THEN RETURN; END IF; datum_l := dat_poc_2_p; WHILE datum_l <= dat_zav_2_p LOOP recplpok_id_2_l := NULL; OPEN recplpok_c (so_id_2_p, datum_l); FETCH recplpok_c INTO recplpok_id_2_l; CLOSE recplpok_c; IF recplpok_id_2_l IS NULL THEN -- puni zaglavlje recplpok_id_2_l := pra_zmp_zaj.i3_sekvenca (NULL); INSERT INTO trec_plpokazatelja ( id, so_id, datum, ozn_so_otvoren) VALUES ( recplpok_id_2_l, so_id_2_p, datum_l, ozn_so_otvoren_2_p); END IF; /* Ako je ozn_izracunati_p = -1 onda se najprije kreiraju stavke iz plana i kapaciteta (preuzeto iz bm_rec3050), nakon toga se kopiraju preostale stavke */ IF ozn_izracunati_p = -1 THEN IF DAT_POC_2_P <> DAT_ZAV_2_P OR DAT_ZAV_3_P IS NULL THEN -- puni se po danu -- 11100 Količina SJ recspok_id_l := NULL; planirano_l := 0; pra_rec_s2.provjeri_recspok ('11100', recspok_id_l); SELECT COUNT (id) INTO planirano_l FROM m_sj WHERE so_id = so_id_2_p AND datum_l >= dat_valjan AND (datum_l < dat_ponisten OR dat_ponisten IS NULL); puni_recplpokspok (recplpok_id_2_l, recspok_id_l, NULL, planirano_l); -- 11300 Količina SJ (radna) recspok_id_l := NULL; pra_rec_s2.provjeri_recspok ('11300', recspok_id_l); planirano_l := planirano_l * ozn_so_otvoren_2_p * -1; puni_recplpokspok (recplpok_id_2_l, recspok_id_l, NULL, planirano_l); -- 11200 Broj postelja recspok_id_l := NULL; planirano_l := 0; pra_rec_s2.provjeri_recspok ('11200', recspok_id_l); SELECT SUM (br_opostelja) INTO planirano_l FROM m_sj WHERE so_id = so_id_2_p AND datum_l >= dat_valjan AND (datum_l < dat_ponisten OR dat_ponisten IS NULL); puni_recplpokspok (recplpok_id_2_l, recspok_id_l, NULL, planirano_l); -- 11400 Broj postelja (radni) recspok_id_l := NULL; pra_rec_s2.provjeri_recspok ('11400', recspok_id_l); planirano_l := planirano_l * ozn_so_otvoren_2_p * -1; puni_recplpokspok (recplpok_id_2_l, recspok_id_l, NULL, planirano_l); -- 14101 Količina zauzetih SJ recspok_id_l := NULL; pra_rec_s2.provjeri_recspok ('14101', recspok_id_l); -- 14201 Broj noćenja recspok_id_dva_l := NULL; pra_rec_s2.provjeri_recspok ('14201', recspok_id_dva_l); FOR recplgpro_c IN (SELECT ms_id, kol_sj planirano, br_osoba planirano_dva FROM trec_plgprodaje WHERE so_id = so_id_2_p AND datum = datum_l ) LOOP puni_recplpokspok (recplpok_id_2_l, recspok_id_l, recplgpro_c.ms_id, recplgpro_c.planirano); puni_recplpokspok (recplpok_id_2_l, recspok_id_dva_l, recplgpro_c.ms_id, recplgpro_c.planirano_dva); END LOOP; ELSE -- puni se iz razdoblja dat_poc_2_p-dat_zav_3_p u dan dat_poc_2_p datum1_l := zmp_zaj.set_dates (dat_poc_2_p, dat_zav_3_p); -- 11100 Količina SJ recspok_id_l := NULL; planirano_l := 0; pra_rec_s2.provjeri_recspok ('11100', recspok_id_l); SELECT COUNT (id) INTO planirano_l FROM m_sj, v_zmp_kalendar kal WHERE so_id = so_id_2_p AND kal.datum >= dat_valjan AND (kal.datum < dat_ponisten OR dat_ponisten IS NULL); puni_recplpokspok (recplpok_id_2_l, recspok_id_l, NULL, planirano_l); -- 11300 Količina SJ (radna) recspok_id_l := NULL; pra_rec_s2.provjeri_recspok ('11300', recspok_id_l); planirano_l := planirano_l * ozn_so_otvoren_2_p * -1; puni_recplpokspok (recplpok_id_2_l, recspok_id_l, NULL, planirano_l); -- 11200 Broj postelja recspok_id_l := NULL; planirano_l := 0; pra_rec_s2.provjeri_recspok ('11200', recspok_id_l); SELECT SUM (br_opostelja) INTO planirano_l FROM m_sj, v_zmp_kalendar kal WHERE so_id = so_id_2_p AND kal.datum >= dat_valjan AND (kal.datum < dat_ponisten OR dat_ponisten IS NULL); puni_recplpokspok (recplpok_id_2_l, recspok_id_l, NULL, planirano_l); -- 11400 Broj postelja (radni) recspok_id_l := NULL; pra_rec_s2.provjeri_recspok ('11400', recspok_id_l); planirano_l := planirano_l * ozn_so_otvoren_2_p * -1; puni_recplpokspok (recplpok_id_2_l, recspok_id_l, NULL, planirano_l); -- 14101 Količina zauzetih SJ recspok_id_l := NULL; pra_rec_s2.provjeri_recspok ('14101', recspok_id_l); -- 14201 Broj noćenja recspok_id_dva_l := NULL; pra_rec_s2.provjeri_recspok ('14201', recspok_id_dva_l); FOR recplgpro_c IN (SELECT ms_id, SUM (kol_sj) planirano, SUM (br_osoba) planirano_dva FROM trec_plgprodaje WHERE so_id = so_id_2_p AND datum BETWEEN DAT_POC_2_P AND DAT_ZAV_3_P GROUP BY ms_id ) LOOP puni_recplpokspok (recplpok_id_2_l, recspok_id_l, recplgpro_c.ms_id, recplgpro_c.planirano); puni_recplpokspok (recplpok_id_2_l, recspok_id_dva_l, recplgpro_c.ms_id, recplgpro_c.planirano_dva); END LOOP; END IF; END IF; -- kraj izračuna -- kopiranje IF recplpok_id_p IS NOT NULL THEN FOR recplpokspok_c IN ( SELECT recspok_id, ms_id, planirano FROM trec_plpok_spok WHERE recplpok_id = recplpok_id_p) LOOP puni_recplpokspok (recplpok_id_2_l, recplpokspok_c.recspok_id, recplpokspok_c.ms_id, recplpokspok_c.planirano); END LOOP; END IF; datum_l := datum_l + 1; END LOOP; COMMIT; END; /* pra_rec_plan_iud */ PROCEDURE PUNI_RECPLPOKSPOK (RECPLPOK_ID_P IN TREC_PLPOK_SPOK.RECPLPOK_ID%TYPE ,RECSPOK_ID_P IN TREC_PLPOK_SPOK.RECSPOK_ID%TYPE ,MS_ID_P IN TREC_PLPOK_SPOK.MS_ID%TYPE ,PLANIRANO_P IN TREC_PLPOK_SPOK.PLANIRANO%TYPE ) IS /* Upiši stavke plana pokazatelja ako ne postoje */ CURSOR recplpokspok_c IS SELECT 1 FROM trec_plpok_spok WHERE recplpok_id = recplpok_id_p AND recspok_id = recspok_id_p AND NVL (ms_id, 0) = NVL (ms_id_p, 0); nebitno_l NUMBER; BEGIN OPEN recplpokspok_c; FETCH recplpokspok_c INTO nebitno_l; IF recplpokspok_c%NOTFOUND THEN INSERT INTO trec_plpok_spok ( recplpok_id, recspok_id, ms_id, planirano) VALUES ( recplpok_id_p, recspok_id_p, ms_id_p, NVL (planirano_p, 0)); END IF; CLOSE recplpokspok_c; EXCEPTION WHEN OTHERS THEN IF recplpokspok_c%ISOPEN THEN CLOSE recplpokspok_c; END IF; RAISE; END; END PRA_REC_PLAN_IUD; / SHOW ERROR