-- D:\_radni\a0_irn\z003882_book_out\pra_trec_odrzavanje.pkb
--
-- Generated for Oracle 10g on Thu Jul 25  13:18:50 2024 by Server Generator 6.5.96.5.6
 

PROMPT Creating Package Body 'PRA_TREC_ODRZAVANJE'
CREATE OR REPLACE PACKAGE BODY PRA_TREC_ODRZAVANJE IS

/* pra_trec_odrzavanje */
PROCEDURE PROVJERI_RAZDOBLJE
 (ID_P IN trec_odrzavanje.id%TYPE
 ,SJ_ID_P IN TREC_ODRZAVANJE.SJ_ID%TYPE
 ,ZMPPROS_ID_P IN mzmp_prostori.id%TYPE
 ,DAT_POC_P IN TREC_ODRZAVANJE.DAT_POC%TYPE
 ,DAT_ZAV_P IN TREC_ODRZAVANJE.DAT_ZAV%TYPE
 )
 IS
/*
Razdoblja u kojima je SJ/prostor izvan upotrebe/u kvaru/raspolo�iv(a) ne mogu se preklapati.
*/
  br_redaka_l NUMBER;
BEGIN
  IF id_p IS NULL
    OR (sj_id_p IS NULL AND zmppros_id_p IS NULL)
    OR dat_poc_p IS NULL
    OR dat_zav_p IS NULL
  THEN
    RETURN;
  END IF;
  SELECT COUNT (rowid) INTO br_redaka_l
    FROM trec_odrzavanje
   WHERE id <> id_p
     AND NVL (sj_id, 0) = NVL (sj_id_p, 0)
     AND NVL (zmppros_id, 0) = NVL (zmppros_id_p, 0)
     AND dat_poc < dat_zav_p
     AND dat_zav > dat_poc_p
     AND oznaka = 'V'; -- IRN 1678
  IF br_redaka_l > 0 THEN
    -- Razdoblja zapisa o odr�avanju SJ/prostora ne smiju se preklapati.
    pra_rec_zaj.vrati_poruku (-20027);
  END IF;
END;
/* pra_trec_odrzavanje */
PROCEDURE PROVJERI_SLOBODNU_SJ
 (SJ_ID_P IN TREC_ODRZAVANJE.SJ_ID%TYPE
 ,DAT_POC_P IN TREC_ODRZAVANJE.DAT_POC%TYPE
 ,DAT_ZAV_P IN TREC_ODRZAVANJE.DAT_ZAV%TYPE
 ,OZN_I_P IN trec_odrzavanje.ozn_i%TYPE
 )
 IS
--
  br_redaka_l NUMBER;
BEGIN
  IF sj_id_p IS NULL
    OR dat_poc_p IS NULL
    OR dat_zav_p IS NULL
    OR ozn_i_p IS NULL
    OR ozn_i_p <> 3 -- 3 = izvan upotrebe
  THEN
    RETURN;
  END IF;

  SELECT COUNT (ROWID) INTO br_redaka_l
    FROM i_statusisj
   WHERE sj_id = sj_id_p
     AND datum BETWEEN dat_poc_p AND dat_zav_p - 1 -- IRN 2168
     AND (ozn_u = -1 OR ozn_r > 0 OR ozn_z > 0);
  IF br_redaka_l > 0 THEN
    -- Smje�tajna jedinica izvan upotrebe mo�e biti samo slobodna SJ.
    pra_rec_zaj.vrati_poruku (-20095);
  END IF;
END;
/* pra_trec_odrzavanje */
PROCEDURE DODAJ_STATUSSJ_I
 (SJ_ID_P IN I_STATUSISJ.SJ_ID%TYPE
 ,DAT_DOLASKA_P IN I_STATUSISJ.DATUM%TYPE
 ,DAT_ODLASKA_P IN I_STATUSISJ.DATUM%TYPE
 ,OZN_I_P IN trec_odrzavanje.ozn_i%TYPE
 )
 IS
/*
Postavi i_statusisj.ozn_i na 2 = u kvaru ili 3 = izvan upotrebe, te i_statusisj.ozn_domacice1 na 5 = prljava.
*/
  CURSOR stsj_c (datum_k i_statusisj.datum%TYPE) IS
    SELECT ozn_i
      FROM i_statusisj
     WHERE sj_id = sj_id_p
       AND datum = datum_k
       FOR UPDATE OF ozn_i NOWAIT;
  datum_l i_statusisj.datum%TYPE;
  ozn_i_l i_statusisj.ozn_i%TYPE;
BEGIN
  IF sj_id_p IS NULL OR ozn_i_p NOT IN (2, 3) THEN
    RETURN;
  END IF;
  datum_l := dat_dolaska_p;
  WHILE datum_l < dat_odlaska_p LOOP
    OPEN stsj_c (datum_l);
    FETCH stsj_c INTO ozn_i_l;
    IF stsj_c%FOUND THEN
      IF ozn_i_l >= ozn_i_p THEN
        -- Smje�tajna jedinica je u kvaru ili izvan upotrebe (#0).
        pra_rec_zaj.vrati_poruku (-20362, ozn_i_l);
      ELSE
        UPDATE i_statusisj
           SET ozn_i = ozn_i_p,
               ozn_domacice1 = 5
         WHERE CURRENT OF stsj_c;
      END IF;
    ELSE
      INSERT INTO i_statusisj (
          sj_id, gost_id, datum,
          ozn_i, ozn_u, ozn_r, ozn_z, ozn_domacice1)
        VALUES (
          sj_id_p, NULL, datum_l,
          ozn_i_p, 0, 0, 0, 5);
    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;
    RAISE;
END;
/* pra_trec_odrzavanje */
PROCEDURE ODUZMI_STATUSSJ_I
 (SJ_ID_P IN I_STATUSISJ.SJ_ID%TYPE
 ,DAT_DOLASKA_P IN I_STATUSISJ.DATUM%TYPE
 ,DAT_ODLASKA_P IN I_STATUSISJ.DATUM%TYPE
 ,OZN_I_P IN trec_odrzavanje.ozn_i%TYPE
 )
 IS
-- postavi i_statusi.ozn_i sa 2 = u kvaru ili 3 = izvan upotrebe na 1 = raspolo�iva
  CURSOR stsj_c (datum_k i_statusisj.datum%TYPE) IS
    SELECT ozn_i
      FROM i_statusisj
     WHERE sj_id = sj_id_p
       AND datum = datum_k
       FOR UPDATE OF ozn_i NOWAIT;
  datum_l i_statusisj.datum%TYPE;
  ozn_i_l i_statusisj.ozn_i%TYPE;
BEGIN
  IF sj_id_p IS NULL OR ozn_i_p NOT IN (2, 3) THEN
    RETURN;
  END IF;
  datum_l := dat_dolaska_p;
  WHILE datum_l < dat_odlaska_p LOOP
    OPEN stsj_c (datum_l);
    FETCH stsj_c INTO ozn_i_l;
    IF stsj_c%FOUND THEN
      IF ozn_i_l = ozn_i_p THEN
        UPDATE i_statusisj
           SET ozn_i = 1
         WHERE CURRENT OF stsj_c;
      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;
    RAISE;
END;
/* pra_trec_odrzavanje */
PROCEDURE PROVJERI_DODAJ_ODUZMI
 (NOVI_DAT_POC_P IN TREC_ODRZAVANJE.DAT_POC%TYPE
 ,NOVI_DAT_ZAV_P IN TREC_ODRZAVANJE.DAT_ZAV%TYPE
 ,STARI_DAT_POC_P IN TREC_ODRZAVANJE.DAT_POC%TYPE
 ,STARI_DAT_ZAV_P IN TREC_ODRZAVANJE.DAT_ZAV%TYPE
 ,NOVI_SJ_ID_P IN TREC_ODRZAVANJE.SJ_ID%TYPE
 ,STARI_SJ_ID_P IN TREC_ODRZAVANJE.SJ_ID%TYPE
 ,NEW_OZN_I_P IN trec_odrzavanje.ozn_i%TYPE
 ,OLD_OZN_I_P IN trec_odrzavanje.ozn_i%TYPE
 ,CENTAR_P IN VARCHAR2
 ,VRSTA_P IN VARCHAR2
 )
 IS
-- vrsta_p: 1 provjeri, 2 oduzmi, 3 dodaj, 4 oduzmi centar, 5 dodaj centar
  datum_l i_statusisj.datum%TYPE;
  naredba_l VARCHAR2(4000);
BEGIN

  IF vrsta_p IN (1, 3, 5) THEN
    datum_l := novi_dat_poc_p - 1;
  ELSIF vrsta_p IN (2, 4) THEN
    datum_l := stari_dat_poc_p - 1;
  END IF;

  LOOP
    datum_l := datum_l + 1;
    IF (vrsta_p IN (1, 3, 5) AND datum_l = novi_dat_zav_p)
      OR (vrsta_p IN (2, 4) AND datum_l = stari_dat_zav_p)
    THEN
      EXIT;
    END IF;

    IF vrsta_p = 1 AND datum_l NOT BETWEEN stari_dat_poc_p AND stari_dat_zav_p - 1 THEN
      pra_trec_odrzavanje.provjeri_slobodnu_sj (novi_sj_id_p, datum_l, datum_l + 1, new_ozn_i_p);
    ELSIF vrsta_p = 2 AND datum_l NOT BETWEEN novi_dat_poc_p AND novi_dat_zav_p - 1 THEN
      pra_trec_odrzavanje.oduzmi_statussj_i (stari_sj_id_p, datum_l, datum_l + 1, old_ozn_i_p);
    ELSIF vrsta_p = 3 AND datum_l NOT BETWEEN stari_dat_poc_p AND stari_dat_zav_p - 1 THEN
      pra_trec_odrzavanje.dodaj_statussj_i (novi_sj_id_p, datum_l, datum_l + 1, new_ozn_i_p);
    ELSIF vrsta_p = 4 AND datum_l NOT BETWEEN novi_dat_poc_p AND novi_dat_zav_p - 1 AND old_ozn_i_p = 3 THEN
      naredba_l :=
       'BEGIN
          pra_trec_odrzavanje.oduzmi_statussj_i@' || centar_p || ' (:sj_id , :dat_poc, :dat_zav, :ozn_i);
        END;';
      EXECUTE IMMEDIATE naredba_l USING stari_sj_id_p, datum_l, datum_l + 1, old_ozn_i_p;
    ELSIF vrsta_p = 5 AND datum_l NOT BETWEEN stari_dat_poc_p AND stari_dat_zav_p - 1 AND new_ozn_i_p = 3 THEN
      naredba_l :=
       'BEGIN
          pra_trec_odrzavanje.dodaj_statussj_i@' || centar_p || ' (:sj_id , :dat_poc, :dat_zav, :ozn_i);
        END;';
      EXECUTE IMMEDIATE naredba_l USING novi_sj_id_p, datum_l, datum_l + 1, new_ozn_i_p;
    END IF;
  END LOOP;
END;
/* pra_trec_odrzavanje */
PROCEDURE VRATI_ZMPPROS_OZN_I_OBJEKT
 (ZMPPROS_ID_P IN NUMBER
 ,DAT_POC_P IN DATE
 ,DAT_ZAV_P IN DATE
 ,RECODR_ZMPPROS_ID_P IN OUT NUMBER
 ,RECODR_DAT_POC_P IN OUT DATE
 ,RECODR_DAT_ZAV_P IN OUT DATE
 ,RECODR_OZN_I_P IN OUT NUMBER
 )
 IS
--
  CURSOR recodr_c IS
    SELECT zmppros_id, dat_poc, dat_zav, ozn_i
      FROM trec_odrzavanje
     WHERE zmppros_id IN (
           -- promatrani i njemu nadre�eni prostori
           SELECT id FROM mzmp_prostori START WITH id = zmppros_id_p CONNECT BY PRIOR zmppros_id = id)
       AND ozn_i IN (2, 3)
       AND dat_zav > dat_poc_p
       AND dat_poc < dat_zav_p
       AND oznaka = 'V' -- IRN 1678
     ORDER BY dat_poc;
BEGIN
  IF zmppros_id_p IS NULL OR dat_poc_p IS NULL OR dat_zav_p IS NULL THEN
    RETURN;
  END IF;
  OPEN recodr_c;
  FETCH recodr_c INTO recodr_zmppros_id_p, recodr_dat_poc_p, recodr_dat_zav_p, recodr_ozn_i_p;
  CLOSE recodr_c;
END;
/* pra_trec_odrzavanje */
PROCEDURE VRATI_ZMPPROS_OZN_I_CENTAR
 (ZMPOJR_ID_P IN NUMBER
 ,ZMPPROS_ID_P IN NUMBER
 ,DAT_POC_P IN DATE
 ,DAT_ZAV_P IN DATE
 ,RECODR_ZMPPROS_ID_P IN OUT NUMBER
 ,RECODR_DAT_POC_P IN OUT DATE
 ,RECODR_DAT_ZAV_P IN OUT DATE
 ,RECODR_OZN_I_P IN OUT NUMBER
 )
 IS
--
  cvor_l VARCHAR2(41) := pra_zmp_s.metcvor_sifra_ojr (zmpojr_id_p);
  naredba_l VARCHAR2(2000);
BEGIN
  IF zmpojr_id_p IS NULL OR zmppros_id_p IS NULL OR dat_poc_p IS NULL OR dat_zav_p IS NULL THEN
    RETURN;
  END IF;
  IF cvor_l IS NOT NULL THEN
    cvor_l := '@' || cvor_l;
  END IF;
  naredba_l :=
    'BEGIN ' ||
    '  pra_trec_odrzavanje.vrati_zmppros_ozn_i_objekt<CVOR> (' ||
    '    :zmppros_id_p, :dat_poc_p, :dat_zav_p, :recodr_zmppros_id_p, :recodr_dat_poc_p, :recodr_dat_zav_p, :recodr_ozn_i_p); ' ||
    'END;';
  EXECUTE IMMEDIATE REPLACE (naredba_l, '<CVOR>', cvor_l)
    USING zmppros_id_p, dat_poc_p, dat_zav_p,
          IN OUT recodr_zmppros_id_p, IN OUT recodr_dat_poc_p, IN OUT recodr_dat_zav_p, IN OUT recodr_ozn_i_p;
END;
/* pra_trec_odrzavanje */
PROCEDURE VRATI_ZMPPROS_OZN_I
 (ZMPOJR_ID_P IN NUMBER
 ,ZMPPROS_ID_P IN NUMBER
 ,DAT_POC_P IN DATE
 ,DAT_ZAV_P IN DATE
 ,RECODR_ZMPPROS_ID_P IN OUT NUMBER
 ,RECODR_DAT_POC_P IN OUT DATE
 ,RECODR_DAT_ZAV_P IN OUT DATE
 ,RECODR_OZN_I_P IN OUT NUMBER
 )
 IS
--
  podcentar_l VARCHAR2(41) := pra_rec_s3.metcvor_sifra_podcentar;
  naredba_l VARCHAR2(2000);
BEGIN
  IF zmpojr_id_p IS NULL OR zmppros_id_p IS NULL OR dat_poc_p IS NULL OR dat_zav_p IS NULL THEN
    RETURN;
  END IF;

  IF pra_zmp_s.zmpojr_tekuceg_cvora (zmpojr_id_p) THEN
    pra_trec_odrzavanje.vrati_zmppros_ozn_i_objekt (
      zmppros_id_p, dat_poc_p, dat_zav_p, recodr_zmppros_id_p, recodr_dat_poc_p, recodr_dat_zav_p, recodr_ozn_i_p);
  ELSE
    naredba_l :=
      'BEGIN ' ||
      '  pra_trec_odrzavanje.vrati_zmppros_ozn_i_centar<CVOR> (' ||
      '    :zmpojr_id_p, :zmppros_id_p, :dat_poc_p, :dat_zav_p, :recodr_zmppros_id_p, :recodr_dat_poc_p, :recodr_dat_zav_p, :recodr_ozn_i_p); ' ||
      'END;';
    EXECUTE IMMEDIATE REPLACE (naredba_l, '<CVOR>', podcentar_l)
      USING zmpojr_id_p, zmppros_id_p, dat_poc_p, dat_zav_p,
            IN OUT recodr_zmppros_id_p, IN OUT recodr_dat_poc_p, IN OUT recodr_dat_zav_p, IN OUT recodr_ozn_i_p;
  END IF;
END;
/* pra_trec_odrzavanje */
PROCEDURE PROVJERI_SLOBODAN_ZMPPROS1
 (ZMPPROS_ID_P IN trec_odrzavanje.zmppros_id%TYPE
 ,DAT_POC_P IN trec_odrzavanje.dat_poc%TYPE
 ,DAT_ZAV_P IN trec_odrzavanje.dat_zav%TYPE
 )
 IS
--
  CURSOR recrez2_c IS
    SELECT recrez2.rbr || '-' || oj.sifra || '-' || recrez2.god_poslovna
      FROM trec_rez2_pros recrez2, m_oj oj
     WHERE recrez2.zmpojr_id = oj.id
       AND recrez2.oznaka = 'V'
       AND recrez2.zmppros_id IN (
           -- promatrani i njemu podre�eni prostori
           SELECT id FROM mzmp_prostori START WITH id = zmppros_id_p CONNECT BY PRIOR id = zmppros_id)
       AND recrez2.sat_poc < dat_zav_p
       AND recrez2.sat_zav > dat_poc_p
     ORDER BY recrez2.god_poslovna DESC, oj.sifra, recrez2.rbr DESC;

  CURSOR ponpros_c IS
    SELECT pon.rbr || '-' || pon.god_poslovna
      FROM t_pon_pros ponpros, t_pon_ojr ponojr, t_ponude pon
     WHERE ponpros.ponojr_id = ponojr.id
       AND ponojr.pon_id = pon.id
       AND pon.oznaka NOT IN ('P')
       AND ponpros.zmppros_id IN (
           -- promatrani i njemu podre�eni prostori
           SELECT id FROM mzmp_prostori START WITH id = zmppros_id_p CONNECT BY PRIOR id = zmppros_id)
       AND ponpros.sat_poc < dat_zav_p
       AND ponpros.sat_zav > dat_poc_p
     ORDER BY pon.god_poslovna DESC, pon.rbr DESC;

  opis_l VARCHAR2(40);
BEGIN

  IF zmppros_id_p IS NULL
    OR dat_poc_p IS NULL
    OR dat_zav_p IS NULL
  THEN
    RETURN;
  END IF;

  OPEN recrez2_c;
  FETCH recrez2_c INTO opis_l;
  IF recrez2_c%FOUND THEN
    CLOSE recrez2_c;
    -- Prostor nije slobodan (#0 #1)!
    pra_zmp_zaj.vrati_poruku (-20087, pra_zmp_zaj.poruka ('REC', 'REC_RECREZ2'), opis_l);
  END IF;
  CLOSE recrez2_c;

  OPEN ponpros_c;
  FETCH ponpros_c INTO opis_l;
  IF ponpros_c%FOUND THEN
    CLOSE ponpros_c;
    -- Prostor nije slobodan (#0 #1)!
    pra_zmp_zaj.vrati_poruku (-20087, pra_zmp_zaj.poruka ('REC', 'REC_PON'), opis_l);
  END IF;
  CLOSE ponpros_c;

END;
/* pra_trec_odrzavanje */
PROCEDURE PROVJERI_SLOBODAN_ZMPPROS
 (ZMPPROS_ID_P IN trec_odrzavanje.zmppros_id%TYPE
 ,OZN_I_P IN trec_odrzavanje.ozn_i%TYPE
 ,NEW_DAT_POC_P IN trec_odrzavanje.dat_poc%TYPE
 ,NEW_DAT_ZAV_P IN trec_odrzavanje.dat_zav%TYPE
 ,OLD_DAT_POC_P IN trec_odrzavanje.dat_poc%TYPE
 ,OLD_DAT_ZAV_P IN trec_odrzavanje.dat_zav%TYPE
 )
 IS
/*
samo slobodan prostor mo�e biti prostor izvan upotrebe
slobodan = nevezan za valjanu rezervaciju i/ili ponudu
*/
BEGIN
  IF zmppros_id_p IS NULL
    OR ozn_i_p NOT IN (3) -- izvan upotrebe
    OR new_dat_poc_p IS NULL
    OR new_dat_zav_p IS NULL
    OR new_dat_poc_p = new_dat_zav_p
  THEN
    RETURN;
  END IF;

  IF INSERTING THEN
    pra_trec_odrzavanje.provjeri_slobodan_zmppros1 (zmppros_id_p, new_dat_poc_p, new_dat_zav_p);
  END IF;

  IF UPDATING THEN
    -- podrazumijeva se kako nije dopu�teno promijeniti niti zmppros_id niti ozn_i
    IF old_dat_poc_p IS NULL
      OR old_dat_zav_p IS NULL
      OR (new_dat_poc_p >= old_dat_poc_p AND new_dat_zav_p <= old_dat_zav_p)
    THEN
      -- novo razdoblje je unutar starog razdoblja, pa provjera nije potrebna
      RETURN;
    END IF;
    IF new_dat_poc_p < old_dat_poc_p THEN
      pra_trec_odrzavanje.provjeri_slobodan_zmppros1 (zmppros_id_p, new_dat_poc_p, old_dat_poc_p);
    END IF;
    IF new_dat_zav_p > old_dat_zav_p THEN
      pra_trec_odrzavanje.provjeri_slobodan_zmppros1 (zmppros_id_p, old_dat_zav_p, new_dat_zav_p);
    END IF;
  END IF;

END;
/* pra_trec_odrzavanje */
FUNCTION BR_TELEFONA
 (TCOSER_ID_P IN trec_odrzavanje.tcoser_id%TYPE
 ,SJ_ID_P IN trec_odrzavanje.sj_id%TYPE
 ,ZMPPROS_ID_P IN trec_odrzavanje.zmppros_id%TYPE
 )
 RETURN mrec_gdje_ojr.br_telefona%TYPE
 IS
-- IRN 1678; broj telefona grupe djelatnika promatranog servisa u OJR promatrane SJ ili prostora
  br_telefona_l mrec_gdje_ojr.br_telefona%TYPE;
BEGIN
  IF tcoser_id_p IS NULL
    OR (sj_id_p IS NULL AND zmppros_id_p IS NULL)
  THEN
    RETURN (NULL);
  END IF;

  SELECT MIN (br_telefona) INTO br_telefona_l
    FROM mrec_gdje_ojr
   WHERE tcogdje_id = (SELECT tcogdje_id FROM mtco_servisi WHERE id = tcoser_id_p)
     AND zmpojr_id = (
         SELECT so.ojr_id FROM m_sj sj, m_so so WHERE sj.id = sj_id_p AND sj.so_id = so.id
         UNION
         SELECT pra_zmp_s.oj_zmpojr_id (oj_id) FROM mzmp_prostori WHERE id = zmppros_id_p);

  RETURN (br_telefona_l);

END;
/* pra_trec_odrzavanje */
PROCEDURE PUNI_OZN_PORUKE
 (OZNAKA_P IN trec_odrzavanje.oznaka%TYPE
 ,TCOSER_ID_P IN trec_odrzavanje.tcoser_id%TYPE
 ,SAT_ZAV_P IN trec_odrzavanje.sat_zav%TYPE
 ,SJ_ID_P IN trec_odrzavanje.sj_id%TYPE
 ,ZMPPROS_ID_P IN trec_odrzavanje.zmppros_id%TYPE
 ,OZN_PORUKE_P IN OUT trec_odrzavanje.ozn_poruke%TYPE
 )
 IS
/*
IRN 1678
Ako je zapis valjan i vezan za servis koji nije obavljen i ako postoji telefon u OJR
postavi oznaku na 10 = treba slati poruku
*/
BEGIN
  IF oznaka_p = 'V'
    AND tcoser_id_p IS NOT NULL
    AND sat_zav_p IS NULL
    AND NVL (ozn_poruke_p, 0) = 0 -- ne treba slati poruku
    AND pra_trec_odrzavanje.br_telefona (tcoser_id_p, sj_id_p, zmppros_id_p) IS NOT NULL
  THEN
    ozn_poruke_p := 10;
  END IF;
  IF ozn_poruke_p IS NULL THEN
    ozn_poruke_p := 0; -- ne treba slati poruku
  END IF;
END;
/* pra_trec_odrzavanje */
PROCEDURE AZU_RECBOOKCH_IU
 (SJ_ID_P IN I_STATUSISJ.SJ_ID%TYPE
 ,DAT_POC_P IN trec_odrzavanje.dat_poc%type
 ,DAT_ZAV_P IN trec_odrzavanje.dat_zav%type
 ,KOL_SJ_P IN i_booking.kol_sj%type
 )
 IS
/*
a�uriraj irec_book_change pod ozn_sprodaje = 1 (poziva se ako je ozn_i = 3 = izvan upotrebe �to utje�e na kapacitet) 
*/
  CURSOR sj_c IS
    SELECT so_id, vsj_id FROM m_sj WHERE id = sj_id_p;

  so_id_l m_so.id%TYPE;
  vsj_id_l s_vsj.id%TYPE;
  datum_l i_statusisj.datum%TYPE;
  ozn_i_l i_statusisj.ozn_i%TYPE;
BEGIN
  IF sj_id_p IS NULL OR dat_poc_p IS NULL OR dat_zav_p IS NULL THEN
    RETURN;
  END IF;
  OPEN sj_c;
  FETCH sj_c INTO so_id_l, vsj_id_l;
  IF sj_c%FOUND THEN
    datum_l := dat_poc_p;
    WHILE datum_l < dat_zav_p LOOP
      INSERT INTO irec_book_change (so_id, vsj_id, datum, ozn_sprodaje, kol_sj)
        VALUES  (so_id_l, vsj_id_l, datum_l, '1', kol_sj_p);
      datum_l := datum_l + 1;
    END LOOP;
  END IF;
  CLOSE sj_c;
EXCEPTION
  WHEN OTHERS THEN
    IF sj_c%ISOPEN THEN
      CLOSE sj_c;
    END IF;
END;

END PRA_TREC_ODRZAVANJE;
/
SHOW ERROR