#ifdef  BEZ // 03-11-2000 PF
/*  $Revision$
 *  $Id$
 */

CREATE_TRIGGER(bez_t_bez_afspraak_B_IU)
BEFORE INSERT OR UPDATE ON bez_afspraak
FOR EACH ROW
DECLARE dummy NUMBER;
BEGIN
   UPDATE_PRIMARY_KEY(bez_afspraak_key,bez_s_bez_afspraak_key);

   dummy := :new.bez_afspraak_key;

   IF :new.bez_afspraak_contact_key IS NULL AND :new.prs_perslid_key IS NOT NULL THEN
        :new.bez_afspraak_contact_key := :new.prs_perslid_key;
   END IF;

   IF :new.bez_afspraak_host_key IS NULL AND :new.bez_afspraak_gastheer IS NULL THEN
      BEGIN
        IF fac.getsetting ('vis_afspraak_host_uses_keys') = 1 THEN
           :new.bez_afspraak_host_key := :new.bez_afspraak_contact_key;
        ELSE
           BEGIN
              SELECT SUBSTR(prs_perslid_naam_full,1,50)
              INTO :new.bez_afspraak_gastheer
              FROM prs_v_perslid_fullnames_all
              WHERE prs_perslid_key=:new.bez_afspraak_contact_key;
           EXCEPTION
              WHEN OTHERS THEN
                :new.bez_afspraak_gastheer := '*';
           END;
        END IF;
      END;
   END IF;
   IF :new.bez_afspraak_host_key IS NOT NULL THEN
        SELECT SUBSTR(prs_perslid_naam_full,1,50)
        INTO :new.bez_afspraak_gastheer FROM prs_v_perslid_fullnames_all
        WHERE prs_perslid_key=:new.bez_afspraak_host_key;
   END IF;
   IF :new.alg_onrgoed_keys IS NOT NULL THEN
      BEGIN
         SELECT SUBSTR (alg_plaatsaanduiding, 1, 30)
           INTO :NEW.bez_afspraak_ruimte
           FROM alg_v_plaatsaanduiding_all
          WHERE alg_onroerendgoed_keys = :NEW.alg_onrgoed_keys AND alg_onroerendgoed_type <> 'L';
      EXCEPTION
         WHEN OTHERS
         THEN
            :NEW.bez_afspraak_ruimte := SUBSTR ('*' || :NEW.bez_afspraak_ruimte, 1, 30);
      END;
    END IF;
END;
/

CREATE_TRIGGER(bez_t_bez_afspraak_d)
   AFTER DELETE
   ON bez_afspraak
   FOR EACH ROW
BEGIN
   DELETE FROM bez_bezoekers WHERE bez_afspraak_key=:OLD.bez_afspraak_key;
END;
/

CREATE_TRIGGER(bez_t_bez_bezoekers_B_IU)
BEFORE INSERT OR UPDATE ON bez_bezoekers
FOR EACH ROW
BEGIN
   UPDATE_PRIMARY_KEY(bez_bezoekers_key,bez_s_bez_bezoekers_key);
END;
/

CREATE_TRIGGER(bez_t_bez_actie_B_IU)
BEFORE INSERT OR UPDATE ON bez_actie
FOR EACH ROW
BEGIN
   UPDATE_PRIMARY_KEY(bez_actie_key,bez_s_bez_actie_key);
END;
/

CREATE_TRIGGER(bez_t_notificatie_afspraak_d)
   AFTER DELETE
   ON bez_afspraak
   FOR EACH ROW
BEGIN
   fac.clrnotifications('BEZMUT', :OLD.bez_afspraak_key);
   fac.clrnotifications('BEZUPD', :OLD.bez_afspraak_key);
   fac.clrnotifications('BEZMAI', :OLD.bez_afspraak_key);
END;
/
CREATE_TRIGGER(bez_t_notificatie_bezoekers_d)
   AFTER DELETE
   ON bez_bezoekers
   FOR EACH ROW
BEGIN
   fac.clrnotifications('BEZDO%', :OLD.bez_bezoekers_key);
   fac.clrnotifications('BEZOU%', :OLD.bez_bezoekers_key);
   fac.clrnotifications('BEZBAD', :OLD.bez_bezoekers_key);
END;
/





CREATE_TRIGGER(bez_t_bez_kenmerk_b_iu)
BEFORE INSERT OR UPDATE ON bez_kenmerk
FOR EACH ROW
BEGIN
   UPDATE_PRIMARY_KEY(bez_kenmerk_key, bez_s_bez_kenmerk_key);
   UPDATE_UPPER(bez_kenmerk_omschrijving, bez_kenmerk_upper,bez_kenmerk);
   IF (:new.bez_kenmerk_verwijder IS NOT NULL AND :old.bez_kenmerk_verwijder IS NULL AND
       :new.bez_kenmerk_systeem = 1)
   THEN
      APPLICATION_ERROR(-20003, 'ALG_M238');
   END IF;

   IF (:new.bez_kenmerk_kenmerktype IN ('C','N'))
   AND :new.bez_kenmerk_lengte IS NULL
   THEN
      APPLICATION_ERROR(-20000, 'ALG_C_ALG_KENMERK_LENGTE');
   END IF;
   IF :new.bez_kenmerk_kenmerktype = 'N'
   AND :new.bez_kenmerk_lengte > 20
   THEN
      :new.bez_kenmerk_lengte := 20;
   END IF;

   IF :new.bez_kenmerk_kenmerktype = 'N' AND :old.bez_kenmerk_key IS NOT NULL
   THEN
     -- An existing property of type N
     IF :old.bez_kenmerk_nmin <> :new.bez_kenmerk_nmin OR
       (:old.bez_kenmerk_nmin IS NULL AND :new.bez_kenmerk_nmin IS NOT NULL)
     THEN
       DECLARE
         Dummy CHAR;
       BEGIN
         SELECT 'X'
           INTO Dummy
           FROM bez_kenmerkwaarde
          WHERE FAC.SAFE_TO_NUMBER(bez_kenmerkwaarde_waarde) < :new.bez_kenmerk_nmin
            AND bez_kenmerk_key = :old.bez_kenmerk_key;
           raise_application_error(-20000, 'BEZ_C_BEZ_KENMERK_MIN');
       EXCEPTION
         WHEN NO_DATA_FOUND
           THEN NULL;
         WHEN TOO_MANY_ROWS THEN
           BEGIN
               raise_application_error(-20000, 'BEZ_C_BEZ_KENMERK_MIN');
           END;
       END;
     END IF;

     IF :old.bez_kenmerk_nmax <> :new.bez_kenmerk_nmax OR
       (:old.bez_kenmerk_nmax IS NULL AND :new.bez_kenmerk_nmax IS NOT NULL)
     THEN
       DECLARE
         Dummy CHAR;
       BEGIN
         SELECT 'X'
           INTO Dummy
           FROM bez_kenmerkwaarde
          WHERE FAC.SAFE_TO_NUMBER(bez_kenmerkwaarde_waarde) > :new.bez_kenmerk_nmax
            AND bez_kenmerk_key = :old.bez_kenmerk_key;
           raise_application_error(-20000, 'BEZ_C_BEZ_KENMERK_MAX');
       EXCEPTION
         WHEN NO_DATA_FOUND
           THEN NULL;
         WHEN TOO_MANY_ROWS THEN
           BEGIN
               raise_application_error(-20000, 'BEZ_C_BEZ_KENMERK_MIN');
           END;
       END;
     END IF;
   END IF;
   UPDATE_AANMAAKDATUM(bez_kenmerk, bez_kenmerk_aanmaak);
END;
/

CREATE_TRIGGER(bez_t_bez_kenmerkwaarde_b_iu)
BEFORE INSERT OR UPDATE ON bez_kenmerkwaarde
FOR EACH ROW
BEGIN
   UPDATE_AANMAAKDATUM(bez_kenmerkwaarde, bez_kenmerkwaarde_aanmaak);
   /*
   ** Controleer eerst of de ingevulde waarde goed is.
   */
   IF (:new.bez_kenmerkwaarde_waarde <> :old.bez_kenmerkwaarde_waarde
     OR :old.bez_kenmerkwaarde_waarde IS NULL
     OR :new.bez_kenmerkwaarde_waarde IS NULL)
   AND :new.bez_bezoekers_key IS NOT NULL
   THEN
      DECLARE
         KenmerkOmschr   bez_kenmerk.bez_kenmerk_omschrijving%TYPE;
         KenmerkType     bez_kenmerk.bez_kenmerk_kenmerktype%TYPE;
         KenmerkLengte   bez_kenmerk.bez_kenmerk_lengte%TYPE;
         KenmerkDec      bez_kenmerk.bez_kenmerk_dec%TYPE;
         KenmerkNMin     bez_kenmerk.bez_kenmerk_nmin%TYPE;
         KenmerkNMax     bez_kenmerk.bez_kenmerk_nmax%TYPE;
         NumberWaarde    NUMBER(25,5);
         FormatMask      VARCHAR2(60);
         KenmerkWaarde   bez_kenmerkwaarde.bez_kenmerkwaarde_waarde%TYPE;
      BEGIN
         KenmerkWaarde := :new.bez_kenmerkwaarde_waarde;
         BEGIN
            SELECT bez_kenmerk_omschrijving
            ,      bez_kenmerk_kenmerktype
            ,      bez_kenmerk_lengte
            ,      bez_kenmerk_dec
            ,      bez_kenmerk_nmin
            ,      bez_kenmerk_nmax
            INTO   KenmerkOmschr
            ,      KenmerkType
            ,      KenmerkLengte
            ,      KenmerkDec
            ,      KenmerkNMin
            ,      KenmerkNMax
            FROM   bez_kenmerk
            WHERE  bez_kenmerk_key = :new.bez_kenmerk_key;
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN APPLICATION_ERROR_GOTO(-20000,'INS_R_INS_KENMERK_KEY1');
         END;

         /* Kijk welk KenmerkType gebruikt wordt.
         ** Aan de hand daarvan moet een controle uitgevoerd worden.
         **/
         IF   KenmerkType = 'C'
         /*
         ** Char
         */
         THEN
            /*
            ** Controleer of de lengte te groot of goed is
            */
            IF LENGTH(KenmerkWaarde) > KenmerkLengte
            THEN
               APPLICATION_ERROR_GOTO(-20004, 'ALG_M232,'|| KenmerkOmschr ||','
                                                    || TO_CHAR(KenmerkLengte));
            END IF;
         ELSIF KenmerkType = 'N'
         /*
         ** Number
         */
         THEN
            /*
            ** Controleer of er een numerieke waarde ingevuld is
            */
            IF KenmerkDec IS NULL OR KenmerkDec = 0
            THEN
               FormatMask := RPAD('9', KenmerkLengte, '9');
            ELSE
               FormatMask := RPAD('9', KenmerkLengte - KenmerkDec, '9')
                                ||'D'||RPAD('9', KenmerkDec, '9');
            END IF;
            /*
            ** Controleer of er een numerieke waarde ingevuld is
            */
            BEGIN
               NumberWaarde := TO_NUMBER(KenmerkWaarde);
            EXCEPTION
               WHEN OTHERS
               THEN FormatMask := REPLACE(FormatMask, '9', '#');
                    FormatMask := REPLACE(FormatMask, '0', '#');
                    FormatMask := REPLACE(FormatMask, 'D', '.');
                    RAISE_APPLICATION_ERROR(-20004,'ALG_M233,'|| KenmerkOmschr ||','
                                                              || FormatMask);
            END;
            /*
            ** Controleer of de waarde binnen NMin en NMax ligt
            */
            IF (   (KenmerkNMin IS NOT NULL AND NumberWaarde < KenmerkNMin)
                OR (KenmerkNMax IS NOT NULL AND NumberWaarde > KenmerkNMax))
            THEN
               APPLICATION_ERROR_GOTO(-20004, 'ALG_M234,'|| KenmerkOmschr       ||','
                                                    || TO_CHAR(KenmerkNMin)||','
                                                    || TO_CHAR(KenmerkNMax));
            ELSE
               /*
               **  Controleer of de waarde aan het formaat voldoet
               */
               KenmerkWaarde := LTRIM(NUMBER_TO_CHAR(NumberWaarde, FormatMask));
               IF INSTR2(KenmerkWaarde, '#') <> 0
               THEN
                  FormatMask := REPLACE(FormatMask, '9', '#');
                  FormatMask := REPLACE(FormatMask, '0', '#');
                  FormatMask := REPLACE(FormatMask, 'D', '.');
                  APPLICATION_ERROR_GOTO(-20004,'ALG_M233,'|| KenmerkOmschr ||','
                                                      || FormatMask);
               END IF;
            END IF;
            /*
            ** Zet de geconverteerde waarde terug
            */
            :new.bez_kenmerkwaarde_waarde := KenmerkWaarde;
         ELSIF KenmerkType = 'D'
         /*
         ** Datum
         */
         THEN
            KenmerkWaarde := DATE_TO_CHAR(_TO_DATE2(KenmerkWaarde,'DD-MM-YY'),'DD-MM-YYYY');
            /*
            ** Zet de geconverteerde waarde terug
            */
            :new.bez_kenmerkwaarde_waarde := KenmerkWaarde;
         END IF;
      END;
      UPDATE_PRIMARY_KEY(bez_kenmerkwaarde_key, bez_s_bez_kenmerkwaarde_key);
   END IF;
END;
/

REGISTERRUN('$Id$')

#endif  // BEZ
