--
-- $Id$
--
-- Aanpassingen om DB44c (prod) naar de DB44d te brengen
-- Merk op dat de recreate er nog bij komt die de DB-version bijwerkt
--
-- MOET OOK ZIJN/WORDEN OPGENOMEN IN DB43TO44d.src !!!

DEFINE thisfile = 'DB44cto44d_3.sql'
DEFINE dbuser   = '*'

SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusterr NEW_VALUE fcltcusterr NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust('&dbuser') AS fcltcusterr FROM DUAL;
WHENEVER SQLERROR CONTINUE;
PROMPT &fcltcusterr
SET DEFINE OFF

------ payload begin ------
-- /////////////////////////////////////////////////////////////////////////////////////////// FCLT#77314

-- Drop trigger om res_rsv_ruimte-records aan te kunnen passen in bo_status = 6
DROP TRIGGER res_t_res_rsv_ruimte_B_IU;

-- Strip de timestamp (ook maar voor verwijderde records)
UPDATE res_rsv_ruimte
   SET res_rsv_ruimte_externnr =
           SUBSTR (res_rsv_ruimte_externnr, 1, LENGTH (res_rsv_ruimte_externnr) - 14)
 WHERE     res_rsv_ruimte_externnr IS NOT NULL
       AND res_rsv_ruimte_externnr NOT LIKE '##iCalUId##%'
       AND REGEXP_LIKE (res_rsv_ruimte_externnr, '\|\d{13}$');

-- Verwijder de dubbelen op een nette manier die niet de Outlook koppeling aftrapt
UPDATE res_rsv_ruimte
   SET res_rsv_ruimte_externnr = NULL
     , res_rsv_ruimte_verwijder = SYSDATE
 WHERE res_rsv_ruimte_externnr IS NOT NULL
   AND res_rsv_ruimte_verwijder IS NULL
   AND res_rsv_ruimte_key NOT IN (  SELECT MIN (res_rsv_ruimte_key)
                                      FROM res_rsv_ruimte
                                     WHERE res_rsv_ruimte_externnr IS NOT NULL
                                       AND res_rsv_ruimte_verwijder IS NULL
                                  GROUP BY res_rsv_ruimte_externnr);

-- Voeg de nieuwe unieke index toe
CREATE UNIQUE INDEX res_i_res_rsv_ruimte18
    ON res_rsv_ruimte (CASE
                           WHEN res_rsv_ruimte_verwijder IS NULL
                           THEN
                               res_rsv_ruimte_externnr
                           ELSE
                               NULL
                       END);

-- En voeg trigger weer toe
CREATE OR REPLACE TRIGGER res_t_res_rsv_ruimte_B_IU
BEFORE INSERT OR UPDATE ON res_rsv_ruimte
FOR EACH ROW
BEGIN
  IF :old.res_status_bo_key=6 THEN raise_application_error(-20001, 'Reserveringsgegevens '||:new.res_rsv_ruimte_key||'/'||:new.res_rsv_ruimte_volgnr||' zijn verwerkt; wijzigen is niet meer toegestaan.'); END IF;
  BEGIN IF :new.res_rsv_ruimte_verwijder IS NOT NULL OR (:new.res_rsv_ruimte_verwijder IS NULL AND :old.res_rsv_ruimte_verwijder IS NOT NULL) THEN UPDATE res_rsv_artikel SET res_rsv_artikel_verwijder = :new.res_rsv_ruimte_verwijder WHERE res_rsv_artikel.res_rsv_ruimte_key = :new.res_rsv_ruimte_key AND res_rsv_artikel.res_rsv_artikel_verwijder IS NULL; END IF; END;
  BEGIN IF :new.res_rsv_ruimte_verwijder IS NOT NULL OR (:new.res_rsv_ruimte_verwijder IS NULL AND :old.res_rsv_ruimte_verwijder IS NOT NULL) THEN UPDATE res_rsv_deel SET res_rsv_deel_verwijder = :new.res_rsv_ruimte_verwijder WHERE res_rsv_deel.res_rsv_ruimte_key = :new.res_rsv_ruimte_key AND res_rsv_deel.res_rsv_deel_verwijder IS NULL; END IF; END;
  BEGIN IF :new.res_rsv_ruimte_verwijder IS NOT NULL THEN DELETE FROM bez_afspraak WHERE bez_afspraak.res_rsv_ruimte_key = :new.res_rsv_ruimte_key; END IF; END;
  BEGIN IF :new.res_rsv_ruimte_host_key <> :old.res_rsv_ruimte_host_key THEN UPDATE bez_afspraak set bez_afspraak_host_key = :new.res_rsv_ruimte_host_key WHERE res_rsv_ruimte_key = :new.res_rsv_ruimte_key AND bez_afspraak_host_key IS NOT NULL; END IF; END;
  BEGIN IF :new.res_rsv_ruimte_contact_key <> :old.res_rsv_ruimte_contact_key THEN UPDATE bez_afspraak set bez_afspraak_contact_key= :new.res_rsv_ruimte_contact_key WHERE res_rsv_ruimte_key =:new.res_rsv_ruimte_key; END IF; END;
END;
/

------ payload end   ------

SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 1); END;
/

COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile