--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database
-- Voor dbuser invullen: - indien script voor 1 klant is: 'AADS' (de klantcode, zoals vermeld in fac_version_cust)
--                       - script is voor meerdere klanten: 'AAXX' (de groepcode, zoals vermeld in fac_version_group)
--                       - script is voor meerdere klanten met naam volgens een bepaald patroon: '^AA|^ASMS|^GULU|^NMMS|^RABO|^ZKHM'
-- Ook als het script gedraaid wordt voor de verkeerde cust wordt er een logfile gemaakt.
-- (dit in tegenstelling tot sample_xxxx.sql)

DEFINE thisfile = 'HERO.SQL'
DEFINE dbuser   = 'HERO'

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


CREATE OR REPLACE PACKAGE HERO
AS

  FUNCTION getfirststartdate(p_startdatum IN DATE, p_refdatum IN DATE, p_cyclus IN NUMBER) 
           RETURN DATE;
  
  
END;
/

CREATE OR REPLACE PACKAGE BODY HERO
AS
   
   FUNCTION getfirststartdate(p_startdatum IN DATE, p_refdatum IN DATE, p_cyclus IN NUMBER) 
            RETURN DATE
   AS
    v_startdatum DATE;
   BEGIN
        IF (p_startdatum<p_refdatum AND p_cyclus>0) 
        THEN        
          v_startdatum := ADD_MONTHS(p_startdatum, p_cyclus*12);
    
          IF (v_startdatum<p_refdatum)
            THEN
                v_startdatum:=hero.getfirststartdate(v_startdatum, p_refdatum, p_cyclus);
            END IF;
        ELSE
                v_startdatum:=p_startdatum;    
          END IF;
            
      RETURN v_startdatum;
     
   END;  
      
    
END;
/


------ payload begin ------

---- IMPORTS -------

-- IMPORT MJOB OPrognose 

-- MJOB elementen import van O-Prognose XML Object export
CREATE OR REPLACE PROCEDURE hero_import_mjobelementen (p_import_key IN NUMBER)
IS
   c_delim                         VARCHAR2 (2) := fac.import_delimiter(p_import_key);
   v_newline                       fac_imp_file.fac_imp_file_line%TYPE;    -- Input line
   v_errormsg                      VARCHAR2 (1000);
   v_errorhint                     VARCHAR2 (1000);
   oracle_err_num                  NUMBER;
   oracle_err_mes                  VARCHAR2 (200);
   header_is_valid                 NUMBER;
   v_count_tot                     NUMBER (10);
   v_count_import                  NUMBER (10);
   v_ongeldig                      NUMBER (1);
   v_aanduiding                    VARCHAR (400);
   v_dummy                         VARCHAR  (255);
   v_ins_kenmerk_key1              VARCHAR2 (255);
   v_ins_kenmerk_key2              VARCHAR2 (255);
   v_ins_kenmerk_key3              VARCHAR2 (255);
   v_ins_kenmerk_key4              VARCHAR2 (255);
   v_ins_kenmerk_key5              VARCHAR2 (255);
   v_ins_kenmerk_key6              VARCHAR2 (255);
   v_ins_kenmerk_key7              VARCHAR2 (255);
   v_ins_kenmerk_key8              VARCHAR2 (255);
   v_ins_kenmerk_key9              VARCHAR2 (255);
   v_ins_kenmerk_key10             VARCHAR2 (255);
   v_ins_kenmerk_key11             VARCHAR2 (255);
   v_ins_kenmerk_key12             VARCHAR2 (255);
   v_ins_kenmerk_key13             VARCHAR2 (255);
   v_ins_kenmerk_key14             VARCHAR2 (255);
   v_ins_kenmerk_key15             VARCHAR2 (255);
   v_ins_kenmerk_key16             VARCHAR2 (255);
   v_ins_kenmerk_key17             VARCHAR2 (255);
   v_ins_kenmerk_key18             VARCHAR2 (255);
   v_ins_kenmerk_key19             VARCHAR2 (255);
   v_ins_kenmerk_key20             VARCHAR2 (255);
   -- De importvelden
   v_ins_discipline_omschrijving   VARCHAR2 (255);                      -- C60
   v_ins_discipline_kostensoort    VARCHAR2 (255);                       --C60
   v_ins_srtgroep_omschrijving     VARCHAR2 (255);                      -- C60
   v_ins_srtdeel_code              VARCHAR2 (255);                      -- C10
   v_ins_srtdeel_omschrijving      VARCHAR2 (255);                     -- C100
   v_ins_deel_omschrijving         VARCHAR2 (255);                      -- C60
   v_ins_deel_opmerking            VARCHAR2 (1000);                    -- C320
   v_ins_deel_externnr             VARCHAR2 (255);                      -- C60
   v_alg_locatie_code              VARCHAR2 (255);                      -- C10
   v_alg_gebouw_code               VARCHAR2 (255);                      -- C12
   v_oprognose_gebouw_code         VARCHAR2 (255);
   v_alg_verdieping_volgnr         VARCHAR2 (255);                       -- N3
   v_alg_ruimte_nr                 VARCHAR2 (255);                      -- C20

   v_ins_kenmerkwaarde1            VARCHAR2 (4053);
   v_ins_kenmerkwaarde2            VARCHAR2 (4053);
   v_ins_kenmerkwaarde3            VARCHAR2 (4053);
   v_ins_kenmerkwaarde4            VARCHAR2 (4053);
   v_ins_kenmerkwaarde5            VARCHAR2 (4053);
   v_ins_kenmerkwaarde6            VARCHAR2 (4053);
   v_ins_kenmerkwaarde7            VARCHAR2 (4053);
   v_ins_kenmerkwaarde8            VARCHAR2 (4053);
   v_ins_kenmerkwaarde9            VARCHAR2 (4053);
   v_ins_kenmerkwaarde10           VARCHAR2 (4053);
   v_ins_kenmerkwaarde11           VARCHAR2 (4053);
   v_ins_kenmerkwaarde12           VARCHAR2 (4053);
   v_ins_kenmerkwaarde13           VARCHAR2 (4053);
   v_ins_kenmerkwaarde14           VARCHAR2 (4053);
   v_ins_kenmerkwaarde15           VARCHAR2 (4053);
   v_ins_kenmerkwaarde16           VARCHAR2 (4053);
   v_ins_kenmerkwaarde17           VARCHAR2 (4053);
   v_ins_kenmerkwaarde18           VARCHAR2 (4053);
   v_ins_kenmerkwaarde19           VARCHAR2 (4053);
   v_ins_kenmerkwaarde20           VARCHAR2 (4053);
   v_ins_deel_aanmaak              VARCHAR2 (255);                      -- DATE
   v_ins_deel_aanmaak_d            DATE;
   v_ins_deel_vervaldatum          VARCHAR2 (255);                      -- DATE
   v_ins_deel_vervaldatum_d        DATE;
   v_ins_deel_aantal               VARCHAR2 (255);                      -- N8,2
   v_ins_deel_aantal_n             NUMBER(8, 2);
   v_file_index                    NUMBER;

   v_alg_gebouw_key                NUMBER;
   v_alg_verdieping_key            NUMBER;
   v_alg_ruimte_key                NUMBER;
   v_ins_deel_key                  NUMBER;
   v_ins_srtdeel_key               NUMBER;
   v_ins_srtgroep_key              NUMBER;
   v_ins_discipline_key            NUMBER;
   v_ins_deel_volgnr               NUMBER;
   -- Overige velden:
   CURSOR c1
   IS
        SELECT   *
          FROM   fac_imp_file
         WHERE   fac_import_key = p_import_key
      ORDER BY   fac_imp_file_index;

    CURSOR c IS
          SELECT *
            FROM fac_imp_ins
        ORDER BY alg_gebouw_code, ins_deel_omschrijving;

   -- Controleer tijdens import-fase alleen op het bestaan van een kenmerk met de meegegeven omschrijving of kenmerk key.
   -- De omschrijving (header van kolom) kan de omschrijving zijn van het kenmerksoort of het kenmerk.
   -- De omschrijving van het kenmerksoort kan namelijk overruled worden door de omschrijving van het kenmerk.
   -- Daarnaast kan hetzelfde kenmerk vaker voorkomen voor verschillende groepen.
   -- Of het kenmerksoort/kenmerk wel is gedefinieerd voor de betreffende
   -- object-discipline/groep/soort, volgt pas tijdens de update-fase)!
   --
   -- p_kw is bijvoorbeeld 'Parkeercode', 'Parkeercode|3', 234 of 234|3 waarbij de tweede en laatste in groep 3 zitten
   -- het resultaat is NULL (als niet gevonden) of Parkeercode|3 of 234|3 voor kenmer_key 234 in groep 3
   -- Als geen groep is meegegeven dan wordt 'Parkeercode|0' opgeleverd (de default groep)
   FUNCTION bepaal_kenmerk (p_kw IN VARCHAR)
      RETURN VARCHAR
   IS
      v_kenmerk_key        NUMBER;
      v_kenmerk_groep      NUMBER;
      v_kw                 VARCHAR(250);
   BEGIN
      v_kenmerk_groep := 0;
      v_kw := p_kw;
      IF INSTR (v_kw, '|') > 1
      THEN
        v_kenmerk_groep := SUBSTR (v_kw, INSTR (v_kw, '|') + 1);
        v_kw := SUBSTR (v_kw, 1, INSTR (v_kw, '|') - 1);
      END IF;

      IF fac.safe_to_number (v_kw) IS NULL
      THEN                -- kenmerkwaarde is alfanumeriek (dus omschrijving)!
         SELECT MIN(k.ins_kenmerk_key)
           INTO v_kenmerk_key
           FROM ins_v_aanwezigkenmerk k,
                ins_v_aanwezigsrtkenmerk sk
          WHERE k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
            AND k.ins_kenmerk_groep = v_kenmerk_groep
            AND COALESCE(UPPER(k.ins_kenmerk_omschrijving), sk.ins_srtkenmerk_upper) = UPPER(v_kw)
            AND sk.ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V');
      ELSE                -- kenmerkwaarde is numeriek (dus key)!
         SELECT k.ins_kenmerk_key
           INTO v_kenmerk_key
           FROM ins_v_aanwezigkenmerk k,
                ins_v_aanwezigsrtkenmerk sk
          WHERE k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
            AND k.ins_kenmerk_groep = v_kenmerk_groep
            AND k.ins_kenmerk_key = fac.safe_to_number (v_kw)
            AND sk.ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V');
      END IF;

      IF v_kenmerk_key IS NULL
      THEN
         RETURN NULL;
      ELSE
         -- Er is een kenmerksoort of kenmerk aanwezig met de omschrijving/kenmerk_key (v_kw)
         RETURN v_kw || '|' || TO_CHAR(v_kenmerk_groep);
      END IF;
   EXCEPTION
      WHEN NO_DATA_FOUND
      THEN
         IF p_kw IS NULL OR UPPER (p_kw) LIKE 'KENMERK%'
         THEN
            RETURN NULL;
         ELSE
            fac.imp_writelog (p_import_key,
                              'W',
                              'Fout bij bepalen kenmerk [' || p_kw || ']',
                              'Bestaat niet of type ongeldig');
            COMMIT;
            RETURN NULL;
         END IF;
   END;

BEGIN
   -- Eerst opruiming
   DELETE FROM   fac_imp_ins;

   COMMIT;

   v_count_tot := 0;
   v_count_import := 0;
   header_is_valid := 0;

   FOR rec1 IN c1
   LOOP
      BEGIN
         v_newline := rec1.fac_imp_file_line;
         v_file_index := rec1.fac_imp_file_index;
         v_errormsg := 'Fout bij opvragen importregel';
         v_aanduiding := '';
         v_ongeldig := 0;
         -- Lees alle veldwaarden
         fac.imp_getfield (v_newline, c_delim, v_oprognose_gebouw_code);      -- Objectcode
         fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_code);     -- Componentcode
         fac.imp_getfield (v_newline, c_delim, v_ins_deel_externnr);    -- Element-ID
         fac.imp_getfield (v_newline, c_delim, v_ins_deel_opmerking);   -- Component omschrijving
--         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde1);   -- Opmerkingen//
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde2);   -- Fabrikant
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde3);   -- Kenmerken
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde4);   -- Type
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde5);   -- Cap
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde6);   -- Eenheid Cap
         fac.imp_getfield (v_newline, c_delim, v_ins_deel_aantal);      -- Aantal
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde7);   -- Eenheid aantal
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde8);   -- Bouwjaar
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde9);   -- Foto
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde10);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde11);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde12);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde13);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde14);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde15);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde16);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde17);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde18);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde19);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde20);

         v_aanduiding :=
               '['
            || v_alg_gebouw_code
            || '|'
            || v_ins_deel_externnr
            || '|'
            || v_ins_srtdeel_code
            || '] ';

         -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
         -- de juiste kolomkop. Ik controleer daarbij alle NIET-kenmerk kolommen!
         -- Ik negeer alles totdat ik een geldige header ben gepasseerd.
         IF (header_is_valid = 0)
         THEN
            IF UPPER (v_oprognose_gebouw_code) = 'GEBOUW_CODE'
               AND UPPER (v_ins_srtdeel_code) = 'SRTDEEL_CODE'
               AND UPPER (v_ins_deel_externnr) = 'DEEL_EXTERNNR'
               AND UPPER (v_ins_deel_opmerking) = 'DEEL_OPMERKING'
               AND UPPER (v_ins_kenmerkwaarde2) = 'FABRIKANT'
               AND UPPER (v_ins_kenmerkwaarde3) = 'OPMERKINGEN'
               AND UPPER (v_ins_kenmerkwaarde4) = 'TYPE'
               AND UPPER (v_ins_kenmerkwaarde5) = 'CAP'
               AND UPPER (v_ins_kenmerkwaarde6) = 'EENHEID CAP'
               AND UPPER (v_ins_deel_aantal) = 'DEEL_AANTAL'
               AND UPPER (v_ins_kenmerkwaarde7) = 'EENHEID AANTAL'
               AND UPPER (v_ins_kenmerkwaarde8) = 'BOUWJAAR'
               AND UPPER (v_ins_kenmerkwaarde9) = 'FOTO'
            THEN
               v_ins_kenmerk_key1  := bepaal_kenmerk (v_ins_kenmerkwaarde1);
               v_ins_kenmerk_key2  := bepaal_kenmerk (v_ins_kenmerkwaarde2);
               v_ins_kenmerk_key3  := bepaal_kenmerk (v_ins_kenmerkwaarde3);
               v_ins_kenmerk_key4  := bepaal_kenmerk (v_ins_kenmerkwaarde4);
               v_ins_kenmerk_key5  := bepaal_kenmerk (v_ins_kenmerkwaarde5);
               v_ins_kenmerk_key6  := bepaal_kenmerk (v_ins_kenmerkwaarde6);
               v_ins_kenmerk_key7  := bepaal_kenmerk (v_ins_kenmerkwaarde7);
               v_ins_kenmerk_key8  := bepaal_kenmerk (v_ins_kenmerkwaarde8);
               v_ins_kenmerk_key9  := bepaal_kenmerk (v_ins_kenmerkwaarde9);
               v_ins_kenmerk_key10 := bepaal_kenmerk (v_ins_kenmerkwaarde10);
               v_ins_kenmerk_key11 := bepaal_kenmerk (v_ins_kenmerkwaarde11);
               v_ins_kenmerk_key12 := bepaal_kenmerk (v_ins_kenmerkwaarde12);
               v_ins_kenmerk_key13 := bepaal_kenmerk (v_ins_kenmerkwaarde13);
               v_ins_kenmerk_key14 := bepaal_kenmerk (v_ins_kenmerkwaarde14);
               v_ins_kenmerk_key15 := bepaal_kenmerk (v_ins_kenmerkwaarde15);
               v_ins_kenmerk_key16 := bepaal_kenmerk (v_ins_kenmerkwaarde16);
               v_ins_kenmerk_key17 := bepaal_kenmerk (v_ins_kenmerkwaarde17);
               v_ins_kenmerk_key18 := bepaal_kenmerk (v_ins_kenmerkwaarde18);
               v_ins_kenmerk_key19 := bepaal_kenmerk (v_ins_kenmerkwaarde19);
               v_ins_kenmerk_key20 := bepaal_kenmerk (v_ins_kenmerkwaarde20);

               header_is_valid := 1;
            ELSE
               IF rec1.fac_imp_file_index = 1
               THEN

                  fac.imp_writelog (p_import_key,
                                    'E',
                                    'Ongeldige header aangetroffen:',
                                    'GEBOUW_CODE: ' || UPPER (v_oprognose_gebouw_code) || CHR(10) ||
                                    'SRTDEEL_CODE: ' || UPPER (v_ins_srtdeel_code) || CHR(10) ||
                                    'DEEL_EXTERNNR: ' || UPPER (v_ins_deel_externnr) || CHR(10) ||
                                    'DEEL_OPMERKING: ' || UPPER (v_ins_deel_opmerking) || CHR(10) ||
                                    'FABRIKANT: ' || UPPER (v_ins_kenmerkwaarde2) || CHR(10) ||
                                    'OPMERKINGEN: ' || UPPER (v_ins_kenmerkwaarde3) || CHR(10) ||
                                    'TYPE: ' || UPPER (v_ins_kenmerkwaarde4) || CHR(10) ||
                                    'CAP: ' || UPPER (v_ins_kenmerkwaarde5) || CHR(10) ||
                                    'EENHEID CAP: ' || UPPER (v_ins_kenmerkwaarde6) || CHR(10) ||
                                    'DEEL_AANTAL: ' || UPPER (v_ins_deel_aantal) || CHR(10) ||
                                    'EENHEID AANTAL: ' || UPPER (v_ins_kenmerkwaarde7) || CHR(10) ||
                                    'BOUWJAAR: ' || UPPER (v_ins_kenmerkwaarde8) || CHR(10) ||
                                    'FOTO: ' || UPPER (v_ins_kenmerkwaarde9));
                END IF;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            -- Controleer alle veldwaarden

            v_errormsg := 'Gebouwcode kan niet gevonden worden';
            v_oprognose_gebouw_code := TRIM (v_oprognose_gebouw_code);

            SELECT alg_gebouw_key, alg_gebouw_code, alg_locatie_code
              INTO v_alg_gebouw_key, v_alg_gebouw_code, v_alg_locatie_code
              FROM alg_gebouw g, alg_locatie l, alg_onrgoedkenmerk aok, alg_kenmerk ak
             WHERE g.alg_locatie_key = l.alg_locatie_key
               AND alg_gebouw_verwijder IS NULL
               AND aok.alg_onrgoed_key = g.alg_gebouw_key
               AND aok.alg_onrgoed_niveau='G'
               AND ak.alg_kenmerk_key = aok.alg_kenmerk_key
               AND ak.alg_kenmerk_code='OPROGNOSE_CODE'
               AND UPPER(aok.alg_onrgoedkenmerk_waarde) = UPPER(v_oprognose_gebouw_code);

            v_alg_verdieping_volgnr := 0;
            BEGIN
               SELECT alg_verdieping_key
                 INTO v_alg_verdieping_key
                 FROM alg_verdieping
                WHERE alg_verdieping_verwijder IS NULL
                  AND alg_gebouw_key = v_alg_gebouw_key
                  AND alg_verdieping_volgnr = 0;
            EXCEPTION WHEN NO_DATA_FOUND
            THEN
               INSERT INTO alg_verdieping (alg_gebouw_key, alg_verdieping_volgnr, alg_verdieping_omschrijving, alg_verdieping_code)
                      VALUES (v_alg_gebouw_key, 0, 'Begane grond', '0')
                      RETURNING alg_verdieping_key INTO v_alg_verdieping_key;
               fac.imp_writelog (p_import_key, 'I', v_aanduiding, 'Verdieping aangemaakt');
            END;

            v_alg_ruimte_nr := '_';
            BEGIN
               SELECT alg_ruimte_key
                 INTO v_alg_ruimte_key
                 FROM alg_ruimte
                WHERE alg_ruimte_verwijder IS NULL
                  AND alg_verdieping_key = v_alg_verdieping_key
                  AND alg_ruimte_nr = '_';
            EXCEPTION WHEN NO_DATA_FOUND
            THEN
               INSERT INTO alg_ruimte (alg_verdieping_key, alg_ruimte_nr, alg_ruimte_omschrijving)
                      VALUES (v_alg_verdieping_key, '_', 'MJOP ruimte')
                      RETURNING alg_ruimte_key INTO v_alg_ruimte_key;
               fac.imp_writelog (p_import_key, 'I', v_aanduiding, 'Ruimte aangemaakt');
            END;
            --

            v_errormsg := 'Bepaal objectsoort';
           
            BEGIN
               v_ins_srtdeel_code := TRIM(v_ins_srtdeel_code);
               SELECT ins_srtdeel_omschrijving, ins_srtdeel_key, ins_srtgroep_key
                 INTO v_ins_srtdeel_omschrijving, v_ins_srtdeel_key, v_ins_srtgroep_key
                 FROM ins_srtdeel
                WHERE ins_srtdeel_verwijder IS NULL
                  AND ins_srtdeel_code = SUBSTR(v_ins_srtdeel_code,1,4);

               v_errormsg := 'Bepaal objectgroep';
               SELECT ins_srtgroep_omschrijving, ins_discipline_key
                 INTO v_ins_srtgroep_omschrijving, v_ins_discipline_key
                 FROM ins_srtgroep
                WHERE ins_srtgroep_key = v_ins_srtgroep_key;

               v_errormsg := 'Bepaal discipline';
               SELECT ins_discipline_omschrijving
                 INTO v_ins_discipline_omschrijving
                 FROM ins_discipline
                WHERE ins_discipline_key = v_ins_discipline_key;

            EXCEPTION WHEN NO_DATA_FOUND
            THEN
               v_errormsg := 'Nieuwe NL/SfB code';
               v_ins_discipline_omschrijving := 'MJOB';
               v_ins_srtdeel_omschrijving := SUBSTR(v_ins_srtdeel_code,1,4) || '-Onbekend';
               BEGIN
                  SELECT ins_srtgroep_omschrijving
                    INTO v_ins_srtgroep_omschrijving
                    FROM ins_v_srtgroep_gegevens
                   WHERE ins_discipline_omschrijving = 'MJOB'
                     AND SUBSTR(v_ins_srtdeel_code, 1, 2) = SUBSTR(ins_srtgroep_omschrijving, 1,2);

               EXCEPTION WHEN NO_DATA_FOUND
               THEN
                  v_ins_srtgroep_omschrijving := SUBSTR(v_ins_srtdeel_code, 1, 2) || '-Onbekend';
               END;
            END;

            BEGIN
               v_errormsg := 'Bepaal object id - Kijk of het externnr bestaat';
               SELECT d.ins_deel_omschrijving
                 INTO v_ins_deel_omschrijving
                 FROM ins_v_deel_gegevens dg, ins_deel d
                WHERE dg.ins_deel_key = d.ins_deel_key
                  AND dg.alg_gebouw_upper = v_alg_gebouw_code
                  AND d.ins_deel_externnr = v_ins_deel_externnr;

            EXCEPTION WHEN NO_DATA_FOUND
            THEN
               v_ins_deel_omschrijving := NULL;
            END;

            IF v_ins_deel_omschrijving IS NULL
            THEN
               v_errormsg := 'Bepaal object id - maak een nieuw nummer aan';
               SELECT MAX(FAC.safe_to_number(SUBSTR(ins_deel_omschrijving, INSTR(ins_deel_omschrijving, '-')+1, 100)))
                 INTO v_ins_deel_volgnr
                 FROM ins_v_deel_gegevens
                WHERE ins_discipline_omschrijving = 'MJOB'
                  AND ins_deel_omschrijving LIKE v_ins_srtdeel_code || '%';

               IF v_ins_deel_volgnr IS NULL
               THEN
                  v_ins_deel_volgnr := 0;
               END IF;

--               v_ins_deel_omschrijving := v_ins_srtdeel_code || LPAD(v_ins_deel_volgnr + 1, 3, '0');
               v_ins_deel_omschrijving := v_ins_srtdeel_code||'-'||v_ins_deel_externnr;
            END IF;

            v_errormsg := 'Objectopmerking ongeldig';
            v_ins_deel_opmerking := TRIM (v_ins_deel_opmerking);

            IF LENGTH (v_ins_deel_opmerking) > 320
            THEN
               v_ins_deel_opmerking := SUBSTR (v_ins_deel_opmerking, 1, 320);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Objectopmerking wordt afgebroken tot ['
                  || v_ins_deel_opmerking
                  || ']'
               );
            END IF;

            --
            v_errormsg := 'Aantal ongeldig; maximale grootte 999999.99';
            v_ins_deel_aantal := TRIM (v_ins_deel_aantal);
            v_ins_deel_aantal := REPLACE (v_ins_deel_aantal, ',', '.');
            v_ins_deel_aantal_n := NULL;

            IF (v_ins_deel_aantal IS NOT NULL AND fac.getSetting('ins_explode_objects') = 0)
            THEN
               IF (fac.safe_to_number (v_ins_deel_aantal) IS NULL)
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog (p_import_key,
                                    'W',
                                    v_aanduiding || v_errormsg,
                                    'Regel wordt overgeslagen!');
               ELSE
                v_ins_deel_aantal_n := fac.safe_to_number (v_ins_deel_aantal);
               END IF;
            ELSE
              v_ins_deel_aantal_n := 1;
            END IF;

            --
            v_errorhint := 'Bepaling registratiedatum';
            v_ins_kenmerkwaarde8 := TRIM(v_ins_kenmerkwaarde8);
            IF v_ins_kenmerkwaarde8 IS NOT NULL AND LENGTH(v_ins_kenmerkwaarde8) = 4
            THEN
               v_ins_deel_aanmaak := '01-01-' || TRIM(v_ins_kenmerkwaarde8);
               v_ins_deel_aanmaak_d := TO_DATE(v_ins_deel_aanmaak, 'dd-mm-yyyy');
            END IF;

            -- De rest alleen ff trimmen.
            v_ins_kenmerkwaarde1 := TRIM (v_ins_kenmerkwaarde1);
            v_ins_kenmerkwaarde2 := TRIM (v_ins_kenmerkwaarde2);
            v_ins_kenmerkwaarde3 := TRIM (v_ins_kenmerkwaarde3);
            v_ins_kenmerkwaarde4 := TRIM (v_ins_kenmerkwaarde4);
            v_ins_kenmerkwaarde5 := TRIM (v_ins_kenmerkwaarde5);
            v_ins_kenmerkwaarde6 := TRIM (v_ins_kenmerkwaarde6);
            v_ins_kenmerkwaarde7 := TRIM (v_ins_kenmerkwaarde7);
            v_ins_kenmerkwaarde8 := TRIM (v_ins_kenmerkwaarde8);
            v_ins_kenmerkwaarde9 := TRIM (v_ins_kenmerkwaarde9);
            v_ins_kenmerkwaarde10 := TRIM (v_ins_kenmerkwaarde10);
            v_ins_kenmerkwaarde11 := TRIM (v_ins_kenmerkwaarde11);
            v_ins_kenmerkwaarde12 := TRIM (v_ins_kenmerkwaarde12);
            v_ins_kenmerkwaarde13 := TRIM (v_ins_kenmerkwaarde13);
            v_ins_kenmerkwaarde14 := TRIM (v_ins_kenmerkwaarde14);
            v_ins_kenmerkwaarde15 := TRIM (v_ins_kenmerkwaarde15);
            v_ins_kenmerkwaarde16 := TRIM (v_ins_kenmerkwaarde16);
            v_ins_kenmerkwaarde17 := TRIM (v_ins_kenmerkwaarde17);
            v_ins_kenmerkwaarde18 := TRIM (v_ins_kenmerkwaarde18);
            v_ins_kenmerkwaarde19 := TRIM (v_ins_kenmerkwaarde19);
            v_ins_kenmerkwaarde20 := TRIM (v_ins_kenmerkwaarde20);

            -- Insert geformatteerde import record
            IF v_ongeldig = 0
            THEN
               BEGIN
                  v_errormsg := 'Fout bij wegschrijven importregel';

                  -- Als uit kenmerkheader een geldige kenmerksoort-key volgt,
                  -- dan is kenmerkwaarde<n> gevuld met <key>=<waarde>; zoniet,
                  -- dan is kenmerkwaarde<n> gevuld met <waarde>!
                  -- NB. Een NULL-waarde resulteert NIET in het wissen van een
                  --     kenmerkveld (bijwerken kan wel, maar wissen dus niet)!
                  INSERT INTO fac_imp_ins (
                                               ins_discipline_omschrijving,
                                               ins_discipline_kostensoort,
                                               ins_srtgroep_omschrijving,
                                               ins_srtdeel_code,
                                               ins_srtdeel_omschrijving,
                                               ins_deel_omschrijving,
                                               ins_deel_opmerking,
                                               alg_locatie_code,
                                               alg_gebouw_code,
                                               alg_verdieping_volgnr,
                                               alg_ruimte_nr,
                                               ins_kenmerkwaarde1,
                                               ins_kenmerkwaarde2,
                                               ins_kenmerkwaarde3,
                                               ins_kenmerkwaarde4,
                                               ins_kenmerkwaarde5,
                                               ins_kenmerkwaarde6,
                                               ins_kenmerkwaarde7,
                                               ins_kenmerkwaarde8,
                                               ins_kenmerkwaarde9,
                                               ins_kenmerkwaarde10,
                                               ins_kenmerkwaarde11,
                                               ins_kenmerkwaarde12,
                                               ins_kenmerkwaarde13,
                                               ins_kenmerkwaarde14,
                                               ins_kenmerkwaarde15,
                                               ins_kenmerkwaarde16,
                                               ins_kenmerkwaarde17,
                                               ins_kenmerkwaarde18,
                                               ins_kenmerkwaarde19,
                                               ins_kenmerkwaarde20,
                                               ins_deel_aanmaak,
                                               ins_deel_aantal,
                                               ins_deel_externnr
                             )
                    VALUES   (
                                 v_ins_discipline_omschrijving,
                                 v_ins_discipline_kostensoort,
                                 v_ins_srtgroep_omschrijving,
                                 SUBSTR(v_ins_srtdeel_code,1,4),
                                 v_ins_srtdeel_omschrijving,
                                 v_ins_deel_omschrijving,
                                 v_ins_deel_opmerking,
                                 v_alg_locatie_code,
                                 v_alg_gebouw_code,
                                 v_alg_verdieping_volgnr,
                                 v_alg_ruimte_nr,
                                 DECODE (v_ins_kenmerk_key1, NULL, v_ins_kenmerkwaarde1, DECODE(v_ins_kenmerk_key1, NULL, NULL, TO_CHAR (v_ins_kenmerk_key1) || '=' || SUBSTR (v_ins_kenmerkwaarde1, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key2, NULL, v_ins_kenmerkwaarde2, DECODE(v_ins_kenmerk_key2, NULL, NULL, TO_CHAR (v_ins_kenmerk_key2) || '=' || SUBSTR (v_ins_kenmerkwaarde2, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key3, NULL, v_ins_kenmerkwaarde3, DECODE(v_ins_kenmerk_key3, NULL, NULL, TO_CHAR (v_ins_kenmerk_key3) || '=' || SUBSTR (v_ins_kenmerkwaarde3, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key4, NULL, v_ins_kenmerkwaarde4, DECODE(v_ins_kenmerk_key4, NULL, NULL, TO_CHAR (v_ins_kenmerk_key4) || '=' || SUBSTR (v_ins_kenmerkwaarde4, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key5, NULL, v_ins_kenmerkwaarde5, DECODE(v_ins_kenmerk_key5, NULL, NULL, TO_CHAR (v_ins_kenmerk_key5) || '=' || SUBSTR (v_ins_kenmerkwaarde5, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key6, NULL, v_ins_kenmerkwaarde6, DECODE(v_ins_kenmerk_key6, NULL, NULL, TO_CHAR (v_ins_kenmerk_key6) || '=' || SUBSTR (v_ins_kenmerkwaarde6, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key7, NULL, v_ins_kenmerkwaarde7, DECODE(v_ins_kenmerk_key7, NULL, NULL, TO_CHAR (v_ins_kenmerk_key7) || '=' || SUBSTR (v_ins_kenmerkwaarde7, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key8, NULL, v_ins_kenmerkwaarde8, DECODE(v_ins_kenmerk_key8, NULL, NULL, TO_CHAR (v_ins_kenmerk_key8) || '=' || SUBSTR (v_ins_kenmerkwaarde8, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key9, NULL, v_ins_kenmerkwaarde9, DECODE(v_ins_kenmerk_key9, NULL, NULL, TO_CHAR (v_ins_kenmerk_key9) || '=' || SUBSTR (v_ins_kenmerkwaarde9, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key10, NULL, v_ins_kenmerkwaarde10, DECODE(v_ins_kenmerk_key10, NULL, NULL, TO_CHAR (v_ins_kenmerk_key10) || '=' || SUBSTR (v_ins_kenmerkwaarde10, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key11, NULL, v_ins_kenmerkwaarde11, DECODE(v_ins_kenmerk_key11, NULL, NULL, TO_CHAR (v_ins_kenmerk_key11) || '=' || SUBSTR (v_ins_kenmerkwaarde11, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key12, NULL, v_ins_kenmerkwaarde12, DECODE(v_ins_kenmerk_key12, NULL, NULL, TO_CHAR (v_ins_kenmerk_key12) || '=' || SUBSTR (v_ins_kenmerkwaarde12, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key13, NULL, v_ins_kenmerkwaarde13, DECODE(v_ins_kenmerk_key13, NULL, NULL, TO_CHAR (v_ins_kenmerk_key13) || '=' || SUBSTR (v_ins_kenmerkwaarde13, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key14, NULL, v_ins_kenmerkwaarde14, DECODE(v_ins_kenmerk_key14, NULL, NULL, TO_CHAR (v_ins_kenmerk_key14) || '=' || SUBSTR (v_ins_kenmerkwaarde14, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key15, NULL, v_ins_kenmerkwaarde15, DECODE(v_ins_kenmerk_key15, NULL, NULL, TO_CHAR (v_ins_kenmerk_key15) || '=' || SUBSTR (v_ins_kenmerkwaarde15, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key16, NULL, v_ins_kenmerkwaarde16, DECODE(v_ins_kenmerk_key16, NULL, NULL, TO_CHAR (v_ins_kenmerk_key16) || '=' || SUBSTR (v_ins_kenmerkwaarde16, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key17, NULL, v_ins_kenmerkwaarde17, DECODE(v_ins_kenmerk_key17, NULL, NULL, TO_CHAR (v_ins_kenmerk_key17) || '=' || SUBSTR (v_ins_kenmerkwaarde17, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key18, NULL, v_ins_kenmerkwaarde18, DECODE(v_ins_kenmerk_key18, NULL, NULL, TO_CHAR (v_ins_kenmerk_key18) || '=' || SUBSTR (v_ins_kenmerkwaarde18, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key19, NULL, v_ins_kenmerkwaarde19, DECODE(v_ins_kenmerk_key19, NULL, NULL, TO_CHAR (v_ins_kenmerk_key19) || '=' || SUBSTR (v_ins_kenmerkwaarde19, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key20, NULL, v_ins_kenmerkwaarde20, DECODE(v_ins_kenmerk_key20, NULL, NULL, TO_CHAR (v_ins_kenmerk_key20) || '=' || SUBSTR (v_ins_kenmerkwaarde20, 1, 3900))),
                                 v_ins_deel_aanmaak_d,
                                 v_ins_deel_aantal_n,
                                 v_ins_deel_externnr
                             );

                  COMMIT;
                  v_count_import := v_count_import + 1;
               END;

            END IF;
         END IF;
      EXCEPTION
         WHEN OTHERS
         THEN
            oracle_err_num := SQLCODE;
            oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
            v_errormsg :=
                  v_errormsg
               || ' ORACLE (error '
               || oracle_err_num
               || '/'
               || oracle_err_mes
               || ')';
            fac.imp_writelog (p_import_key,
                              'W',
                              v_aanduiding || v_errormsg,
                              '');
            COMMIT;
      END;
   END LOOP;

   

   IF (header_is_valid = 1)
   THEN
      fac.imp_writelog (
         p_import_key,
         'S',
         'Objecten/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'Objecten/aantal ongeldige niet ingelezen importregels: '
         || TO_CHAR (v_count_tot - v_count_import),
         ''
      );
   END IF;

   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg :=
            v_errormsg
         || ' ORACLE (error '
         || oracle_err_num
         || '/'
         || oracle_err_mes
         || ')';
      fac.imp_writelog (p_import_key,
                        'E',
                        v_aanduiding || v_errormsg,
                        'Inleesproces objecten afgebroken! regel:' || v_file_index);
END;
/

CREATE OR REPLACE PROCEDURE hero_update_mjobelementen (
    p_import_key   IN NUMBER)
IS
    v_aanduiding                    VARCHAR (400);
    v_kenmerk_foto                  NUMBER;
BEGIN
   fac_update_ins (p_import_key);
   BEGIN
      v_aanduiding:='Ophalen oprognose kenmerk key is mislukt';
      SELECT i.ins_kenmerk_key 
        INTO v_kenmerk_foto
        FROM ins_kenmerk i
       where     i.ins_kenmerk_code='OPROGNOSE_FOTO'
             AND i.ins_kenmerk_verwijder IS NULL;
             
      UPDATE ins_deel i 
         SET i.ins_deel_image = (SELECT ins_kenmerkdeel_waarde 
                                   FROM ins_kenmerkdeel 
                                  WHERE     ins_deel_key=i.ins_deel_key 
                                        AND ins_kenmerk_key=v_kenmerk_foto) 
       WHERE i.ins_deel_key IN (SELECT ins_deel_key 
                                  FROM ins_kenmerkdeel 
                                 WHERE ins_kenmerk_key=v_kenmerk_foto);
 
  EXCEPTION
  WHEN NO_DATA_FOUND THEN
      fac.imp_writelog (p_import_key,
                        'W',
                        v_aanduiding,
                        'Afbeelding objecten updaten !');  
  END;
  
END;
/
-- EINE MJOB Elementen Import
CREATE OR REPLACE PROCEDURE hero_import_mjobtaken (p_import_key IN NUMBER)
IS
   c_delim                         VARCHAR2 (2) := fac.import_delimiter(p_import_key);
   v_newline                       fac_imp_file.fac_imp_file_line%TYPE;    -- Input line
   v_errormsg                      VARCHAR2 (1000);
   v_errorhint                     VARCHAR2 (1000);
   oracle_err_num                  NUMBER;
   oracle_err_mes                  VARCHAR2 (200);
   header_is_valid                 NUMBER;
   v_count_tot                     NUMBER (10);
   v_count_import                  NUMBER (10);
   v_ongeldig                      NUMBER (1);
   v_aanduiding                    VARCHAR (400);
   v_dummy                         VARCHAR  (255);
   v_oprognose_gebouw_code          VARCHAR2 (255);
   v_alg_gebouw_code                VARCHAR2 (255);                      --VARCHAR2(12),
   v_alg_locatie_code                VARCHAR2 (255);                      --VARCHAR2(12),
   v_ins_deel_externnr              VARCHAR2 (255);                      --VARCHAR2(256),
   v_ins_deel_omschrijving          VARCHAR2 (255);                      --VARCHAR2(60),
   v_ins_srtcontrole_omschrijving   VARCHAR2 (255);                      --VARCHAR2(60),
   v_ins_srtcontrole_level          VARCHAR2 (255);                      --NUMBER(3),
   v_ins_srtcontroledl_xcp_materia  VARCHAR2 (255);                      --NUMBER(9,2),
   v_ins_srtcontroledl_xcp_aantal   VARCHAR2 (255);                      --NUMBER(8,2),  
   v_ins_srtcontroledl_xcp_startdat VARCHAR2 (255);                      --DATE,
   v_ins_srtcontroledl_xcp_periode  VARCHAR2 (255);                      --NUMBER(6,2)
   v_ins_srtcontroledl_xcp_perc     VARCHAR2 (255);                      --NUMBER(3)
   v_ins_srtcontroledl_xcp_eenh     VARCHAR2 (255);
   v_ins_srtcontrole_btw            VARCHAR2 (255);
   
   v_file_index                    NUMBER;

   CURSOR c1
   IS
        SELECT   *
          FROM   fac_imp_file
         WHERE   fac_import_key = p_import_key
      ORDER BY   fac_imp_file_index;

BEGIN
   -- Eerst opruiming


   v_count_tot := 0;
   v_count_import := 0;
   header_is_valid := 0;

   FOR rec1 IN c1
   LOOP
      BEGIN
         v_newline := rec1.fac_imp_file_line;
         v_file_index := rec1.fac_imp_file_index;
         v_errormsg := 'Fout bij opvragen importregel';
         v_aanduiding := '';
         v_ongeldig := 0;
         -- Lees alle veldwaarden

         fac.imp_getfield (v_newline, c_delim, v_oprognose_gebouw_code);
         fac.imp_getfield (v_newline, c_delim, v_ins_deel_externnr);
         fac.imp_getfield (v_newline, c_delim, v_ins_deel_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_ins_srtcontrole_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_ins_srtcontroledl_xcp_materia);
         fac.imp_getfield (v_newline, c_delim, v_ins_srtcontroledl_xcp_aantal);
         fac.imp_getfield (v_newline, c_delim, v_ins_srtcontrole_level);
         fac.imp_getfield (v_newline, c_delim, v_ins_srtcontroledl_xcp_startdat);
         fac.imp_getfield (v_newline, c_delim, v_ins_srtcontroledl_xcp_periode);
         fac.imp_getfield (v_newline, c_delim, v_ins_srtcontroledl_xcp_perc);
         fac.imp_getfield (v_newline, c_delim, v_ins_srtcontroledl_xcp_eenh);         
         fac.imp_getfield (v_newline, c_delim, v_ins_srtcontrole_btw);

         v_aanduiding :=
               '['
            || v_alg_gebouw_code
            || '|'
            || v_ins_deel_externnr
            || '|'
            || v_ins_deel_omschrijving
            || '|'
            || v_ins_srtcontrole_omschrijving
            || '] ';

         -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
         -- de juiste kolomkop. Ik controleer daarbij alle NIET-kenmerk kolommen!
         -- Ik negeer alles totdat ik een geldige header ben gepasseerd.
         IF (header_is_valid = 0)
         THEN
            IF UPPER (v_oprognose_gebouw_code) = 'GEBOUW_CODE'
               AND UPPER (v_ins_deel_externnr) = 'DEEL_EXTERNNR'
               AND UPPER (v_ins_deel_omschrijving) = 'DEEL_OMSCHRIJVING'
               AND UPPER (v_ins_srtcontrole_omschrijving) = 'SRTCONTROLE_OMSCHRIJVING'
               AND UPPER (v_ins_srtcontroledl_xcp_materia) = 'SRTCONTROLEDL_XCP_MATERIA'
               AND UPPER (v_ins_srtcontroledl_xcp_aantal) = 'SRTCONTROLEDL_XCP_AANTAL'
               AND UPPER (v_ins_srtcontrole_level) = 'SRTCONTROLE_LEVEL'
               AND UPPER (v_ins_srtcontroledl_xcp_startdat) = 'SRTCONTROLE_STARTJAAR'
               AND UPPER (v_ins_srtcontroledl_xcp_periode) = 'SRTCONTROLE_PERIODE'
               AND UPPER (v_ins_srtcontroledl_xcp_perc) = 'SRTCONTROLE_PERCENTAGE'
               AND UPPER (v_ins_srtcontroledl_xcp_eenh) = 'SRTCONTROLE_EENHEID'
               AND UPPER (v_ins_srtcontrole_btw) = 'SRTCONTROLE_BTW'
            THEN
               header_is_valid := 1;
            ELSE
               IF rec1.fac_imp_file_index = 1
               THEN

                  fac.imp_writelog (p_import_key,
                                    'E',
                                    'Ongeldige header aangetroffen:',
                                    'GEBOUW_CODE: ' || UPPER (v_oprognose_gebouw_code) || CHR(10) ||
                                    'DEEL_EXTERNNR: ' || UPPER (v_ins_deel_externnr) || CHR(10) ||
                                    'DEEL_OMSCHRIJVING: ' || UPPER (v_ins_deel_omschrijving) || CHR(10) ||
                                    'SRTCONTROLE_OMSCHRIJVING: ' || UPPER (v_ins_srtcontrole_omschrijving) || CHR(10) ||
                                    'SRTCONTROLEDL_XCP_MATERIA: ' || UPPER (v_ins_srtcontroledl_xcp_materia) || CHR(10) ||
                                    'SRTCONTROLEDL_XCP_AANTAL: ' || UPPER (v_ins_srtcontroledl_xcp_aantal) || CHR(10) ||
                                    'SRTCONTROLE_LEVEL: ' || UPPER (v_ins_srtcontrole_level) || CHR(10) ||
                                    'SRTCONTROLE_STARTJAAR: ' || UPPER (v_ins_srtcontroledl_xcp_startdat) || CHR(10) ||
                                    'SRTCONTROLE_PERIODE: ' || UPPER (v_ins_srtcontroledl_xcp_periode) || CHR(10) ||
                                    'SRTCONTROLE_PERCENTAGE: ' || UPPER (v_ins_srtcontroledl_xcp_perc));
                END IF;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            -- Controleer alle veldwaarden

            v_errormsg := 'Gebouwcode kan niet gevonden worden';
            v_oprognose_gebouw_code := TRIM (v_oprognose_gebouw_code);

            BEGIN
               SELECT g.alg_gebouw_code, l.alg_locatie_code
                 INTO v_alg_gebouw_code, v_alg_locatie_code
                 FROM alg_gebouw g, alg_onrgoedkenmerk aok, alg_kenmerk ak, alg_locatie l
                WHERE     g.alg_gebouw_verwijder IS NULL
                      AND aok.alg_onrgoed_key = g.alg_gebouw_key
                      AND aok.alg_onrgoed_niveau='G'
                      AND ak.alg_kenmerk_key = aok.alg_kenmerk_key
                      AND ak.alg_kenmerk_code='OPROGNOSE_CODE'
                      AND UPPER(aok.alg_onrgoedkenmerk_waarde) = UPPER(v_oprognose_gebouw_code)
                      AND l.alg_locatie_key=g.alg_locatie_key;
                      
            EXCEPTION WHEN NO_DATA_FOUND
            THEN
               fac.imp_writelog (
                  p_import_key,
                  'E',
                  v_aanduiding || v_errormsg,
                     'Gebouw is niet gevonden'
               );
               v_ongeldig := 1;
            END;

            
            v_errormsg := 'Object externnr kan niet gevonden worden';
            v_ins_deel_externnr := TRIM (v_ins_deel_externnr);
            IF v_ins_deel_externnr IS NOT NULL
            THEN
               BEGIN
                  SELECT 1
                    INTO v_dummy
                    FROM ins_v_deel_gegevens dg, ins_deel d
                   WHERE dg.ins_deel_key = d.ins_deel_key
                     AND UPPER(d.ins_deel_externnr) = UPPER(v_ins_deel_externnr)
                     AND dg.alg_gebouw_upper = UPPER(v_alg_gebouw_code);
               EXCEPTION WHEN NO_DATA_FOUND
               THEN
                  fac.imp_writelog (
                     p_import_key,
                     'E',
                     v_aanduiding || v_errormsg,
                        'Object is niet gevonden op extern id '
                  );
                  v_ongeldig := 1;
               END;
            END IF;

            v_errormsg := 'Controle op kosten';
            IF FAC.safe_to_number(v_ins_srtcontroledl_xcp_materia) IS NULL
            THEN
               fac.imp_writelog (
                  p_import_key,
                  'E',
                  v_aanduiding || v_errormsg,''
               );
               v_ongeldig := 1;
            END IF;

            v_errormsg := 'Controle op aantal';
            IF v_ins_srtcontroledl_xcp_aantal IS NOT NULL AND FAC.safe_to_number(v_ins_srtcontroledl_xcp_aantal) IS NULL
            THEN
               fac.imp_writelog (
                  p_import_key,
                  'E',
                  v_aanduiding || v_errormsg,''
               );
               v_ongeldig := 1;
            END IF;

            v_errormsg := 'Controle op startjaar';
            IF v_ins_srtcontroledl_xcp_startdat IS NOT NULL AND FAC.safe_to_date('01-01-' || v_ins_srtcontroledl_xcp_startdat, 'dd-mm-yyyy') IS NULL
            THEN
               fac.imp_writelog (
                  p_import_key,
                  'E',
                  v_aanduiding || v_errormsg,''
               );
               v_ongeldig := 1;
            END IF;

            v_errormsg := 'Controle op periode';
            IF v_ins_srtcontroledl_xcp_periode IS NOT NULL AND FAC.safe_to_number(v_ins_srtcontroledl_xcp_periode) IS NULL
            THEN
               fac.imp_writelog (
                  p_import_key,
                  'E',
                  v_aanduiding || v_errormsg,''
               );
               v_ongeldig := 1;
            END IF;

            v_errormsg := 'Controle op percentage';
            IF v_ins_srtcontroledl_xcp_perc IS NOT NULL AND FAC.safe_to_number(v_ins_srtcontroledl_xcp_perc) IS NULL
            THEN
               fac.imp_writelog (
                  p_import_key,
                  'E',
                  v_aanduiding || v_errormsg,''
               );
               v_ongeldig := 1;
            END IF;

            -- Insert geformatteerde import record
            IF v_ongeldig = 0
            THEN
               BEGIN
                  v_errormsg := 'Fout bij wegschrijven importregel';

                  -- Als uit kenmerkheader een geldige kenmerksoort-key volgt,
                  -- dan is kenmerkwaarde<n> gevuld met <key>=<waarde>; zoniet,
                  -- dan is kenmerkwaarde<n> gevuld met <waarde>!
                  -- NB. Een NULL-waarde resulteert NIET in het wissen van een
                  --     kenmerkveld (bijwerken kan wel, maar wissen dus niet)!                 
                  
                 
                  INSERT INTO fac_imp_csv (FAC_IMPORT_KEY,
                                           fac_imp_csv_index,
                                           fac_imp_csv_col01,
                                           fac_imp_csv_col02,
                                           fac_imp_csv_col03,
                                           fac_imp_csv_col04,
                                           fac_imp_csv_col05,
                                           fac_imp_csv_col06,
                                           fac_imp_csv_col07,
                                           fac_imp_csv_col08,
                                           fac_imp_csv_col09,
                                           fac_imp_csv_col10,
                                           fac_imp_csv_col11,
                                           fac_imp_csv_col12,
                                           fac_imp_csv_col13)
                    VALUES  ( p_import_key,
                              v_file_index,
                              SUBSTR(v_alg_gebouw_code,1,12),
                              SUBSTR(v_ins_deel_externnr,1,256),
                              SUBSTR(v_ins_deel_omschrijving,1,60),
                              SUBSTR(v_ins_srtcontrole_omschrijving,1,60),
                              FAC.safe_to_number(v_ins_srtcontrole_level),
                              FAC.safe_to_number(v_ins_srtcontroledl_xcp_materia),   -- de prijs m,oet per stuk zijn.
                              FAC.safe_to_number(v_ins_srtcontroledl_xcp_aantal),
                              '01-01-' || v_ins_srtcontroledl_xcp_startdat,
                              v_ins_srtcontroledl_xcp_periode,
                              FAC.safe_to_number(v_ins_srtcontroledl_xcp_perc),
                              v_ins_srtcontroledl_xcp_eenh,
                              SUBSTR(v_alg_locatie_code,1,12),
                              v_ins_srtcontrole_btw);

                  COMMIT;
                  v_count_import := v_count_import + 1;
               END;

            END IF;
         END IF;
      EXCEPTION
         WHEN OTHERS
         THEN
            oracle_err_num := SQLCODE;
            oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
            v_errormsg :=
                  v_errormsg
               || ' ORACLE (error '
               || oracle_err_num
               || '/'
               || oracle_err_mes
               || ')';
            fac.imp_writelog (p_import_key,
                              'W',
                              v_aanduiding || v_errormsg,
                              '');
            COMMIT;
      END;
   END LOOP;

   IF (header_is_valid = 1)
   THEN
      fac.imp_writelog (
         p_import_key,
         'S',
         'Taken/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'Taken/aantal ongeldige niet ingelezen importregels: '
         || TO_CHAR (v_count_tot - v_count_import),
         ''
      );
   END IF;

   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg :=
            v_errormsg
         || ' ORACLE (error '
         || oracle_err_num
         || '/'
         || oracle_err_mes
         || ')';
      fac.imp_writelog (p_import_key,
                        'E',
                        v_aanduiding || v_errormsg,
                        'Inleesproces taken afgebroken! regel:' || v_file_index);
END hero_import_mjobtaken;
/


CREATE OR REPLACE PROCEDURE hero_update_mjobtaken (
    p_import_key   IN NUMBER)
IS

   CURSOR c IS
    SELECT  fac_imp_csv_col01 alg_gebouw_code,
            fac_imp_csv_col02 ins_deel_externnr,
            fac_imp_csv_col03 ins_deel_omschrijving,
            fac_imp_csv_col04 ins_srtcontrole_omschrijving,
            fac_imp_csv_col05 ins_srtcontrole_level,
            fac_imp_csv_col06 ins_srtcontroledl_xcp_materia,
            fac_imp_csv_col07 ins_srtcontroledl_xcp_aantal,
            fac_imp_csv_col08 ins_srtcontroledl_xcp_startdat,
            fac_imp_csv_col09 ins_srtcontroledl_xcp_periode,
            fac_imp_csv_col10 ins_srtcontroledl_xcp_perc,
            fac_imp_csv_col11 ins_srtcontroledl_xcp_eenh,
            fac_imp_csv_col12 alg_locatie_code,
            fac_imp_csv_col13 ins_srtcontrole_btw
      FROM  fac_imp_csv
     WHERE  fac_import_key=p_import_key;

   v_errormsg                       VARCHAR2 (1000);
   v_errorhint                      VARCHAR2 (1000);
   oracle_err_num                   NUMBER;
   oracle_err_mes                   VARCHAR2 (200);
   v_count_tot                      NUMBER (10);
   v_count_import                   NUMBER (10);
   v_ongeldig                       NUMBER (1);
   v_aanduiding                     VARCHAR (400);
   v_ins_deel_key                   NUMBER;
   v_ins_deel_aantal                NUMBER;
   v_ins_srtdeel_key                NUMBER;
   v_ins_srtcontrole_key            NUMBER;
   v_ins_srtcontroledl_xcp_key      NUMBER;
   v_ctr_discipline_key             NUMBER;
   v_alg_gebouw_key                 NUMBER;
   v_ins_srtdeel_code               INS_SRTDEEL.INS_SRTDEEL_CODE%TYPE;
   v_ins_deel_eenheid               VARCHAR2(30);
   v_ins_srtcontroledl_xcp_startdat DATE;
   v_ins_srtcontroledl_xcp_aantal   NUMBER; 
   v_ins_srtcontroledl_xcp_perc     NUMBER;
   v_srtcontrole_btw_key            NUMBER;
   v_refdate                        DATE;

BEGIN
   SELECT MIN(ctr_ins_discipline_key)
     INTO v_ctr_discipline_key
     FROM ctr_disc_params
    WHERE ctr_disc_params_ismjob = 1;

   -- controleer op verwijderde records
   FOR rec IN c
   LOOP
      BEGIN
         v_ins_deel_key := NULL;
         v_aanduiding := rec.alg_gebouw_code || '|' || rec.ins_deel_omschrijving  || '|' || rec.ins_deel_externnr  || '|' || rec.ins_srtcontrole_omschrijving;
         v_errormsg := 'Gebouwcode kan niet gevonden worden';

         BEGIN
            SELECT g.alg_gebouw_key 
              INTO v_alg_gebouw_key
              FROM alg_gebouw g, alg_locatie l
             WHERE alg_gebouw_verwijder IS NULL
               AND UPPER(alg_gebouw_code) = rec.alg_gebouw_code
               AND l.alg_locatie_key=g.alg_locatie_key
               AND l.alg_locatie_code=rec.alg_locatie_code;
         EXCEPTION WHEN NO_DATA_FOUND
         THEN
            fac.imp_writelog (
               p_import_key,
               'E',
               v_aanduiding || v_errormsg,
                  'Gebouw is niet gevonden'
            );
         END;

         v_errormsg := 'Objectid kan niet gevonden worden';
         IF rec.ins_deel_omschrijving IS NOT NULL
         THEN
            BEGIN
               SELECT  dg.ins_deel_key,
                       sd.ins_srtdeel_key,
                       sd.ins_srtdeel_code,
                       dg.ins_deel_aantal,
                       ken.ins_kenmerkdeel_waarde
                  INTO v_ins_deel_key, v_ins_srtdeel_key, v_ins_srtdeel_code, v_ins_deel_aantal, v_ins_deel_eenheid    
                  FROM ins_v_deel_gegevens  dg,
                       ins_srtdeel          sd,                       
                       (SELECT ikd.ins_deel_key, ikd.ins_kenmerkdeel_waarde
                          FROM ins_kenmerkdeel ikd, ins_kenmerk ik
                         WHERE     ikd.ins_kenmerk_key = ik.ins_kenmerk_key
                               AND ik.ins_kenmerk_code = 'MJOB_EENHEID_AANTAL'
                               AND ikd.ins_kenmerkdeel_verwijder IS NULL) ken
                WHERE      dg.ins_srtdeel_key = sd.ins_srtdeel_key
                       AND UPPER(dg.ins_deel_omschrijving) = UPPER(rec.ins_deel_omschrijving)
                       AND ken.ins_deel_key(+) = dg.ins_deel_key
                       AND dg.alg_gebouw_key = v_alg_gebouw_key;
                       
            EXCEPTION WHEN NO_DATA_FOUND
            THEN
               fac.imp_writelog (
                  p_import_key,
                  'E',
                  v_aanduiding || v_errormsg,
                     'Object is niet gevonden op id '
               );
               v_ongeldig := 1;
            END;
         END IF;

         v_errormsg := 'Object externnr kan niet gevonden worden';
         IF rec.ins_deel_externnr IS NOT NULL AND v_ins_deel_key IS NULL
         THEN
            BEGIN
               SELECT d.ins_deel_key, sd.ins_srtdeel_key, sd.ins_srtdeel_code, d.ins_deel_aantal
                 INTO v_ins_deel_key, v_ins_srtdeel_key, v_ins_srtdeel_code, v_ins_deel_aantal
                 FROM ins_v_deel_gegevens dg, ins_deel d, ins_srtdeel sd
                WHERE dg.ins_deel_key = d.ins_deel_key
                  AND d.ins_srtdeel_key = sd.ins_srtdeel_key
                  AND UPPER(d.ins_deel_externnr) = UPPER(rec.ins_deel_externnr)
                  AND dg.alg_gebouw_key = v_alg_gebouw_key;
            EXCEPTION WHEN NO_DATA_FOUND
            THEN
               fac.imp_writelog (
                  p_import_key,
                  'E',
                  v_aanduiding || v_errormsg,
                     'Object is niet gevonden op extern id '
               );
               v_ongeldig := 1;
            END;
         END IF;

         BEGIN
              SELECT btw.fin_btwtabelwaarde_key 
                INTO v_srtcontrole_btw_key
                FROM fin_btwtabel bt, 
                     fin_btwtabelwaarde btw
               WHERE     bt.fin_btwtabel_omschrijving='NL standaard'
                     AND btw.fin_btwtabel_key = bt.fin_btwtabel_key
                     AND btw.fin_btwtabelwaarde_code=rec.ins_srtcontrole_btw
                     AND btw.fin_btwtabelwaarde_verwijder IS NULL; 
         
         EXCEPTION
         WHEN NO_DATA_FOUND            
         THEN
            v_srtcontrole_btw_key:=NULL;
         END;

         -- kijk of de srtcontrole al bestaat
         v_errormsg := 'Kijk of de taak al bestaat';
         BEGIN
            SELECT ins_srtcontrole_key
              INTO v_ins_srtcontrole_key
              FROM ins_srtcontrole
             WHERE ins_srtinstallatie_key = v_ins_srtdeel_key
               AND ins_srtcontrole_niveau = 'S'
               AND ins_srtcontrole_omschrijving = SUBSTR(v_ins_srtdeel_code || ' - ' || rec.ins_srtcontrole_omschrijving, 1, 60)
               AND ctr_discipline_key = v_ctr_discipline_key;

            UPDATE ins_srtcontrole
               SET ins_srtcontrole_level = rec.ins_srtcontrole_level,
                   fin_btwtabelwaarde_key= v_srtcontrole_btw_key
             WHERE ins_srtcontrole_key = v_ins_srtcontrole_key;

         EXCEPTION WHEN NO_DATA_FOUND
         THEN
             v_errormsg := 'Aanmaken nieuwe taak';
            INSERT INTO ins_srtcontrole (ins_srtinstallatie_key,
                                         ins_srtcontrole_niveau,
                                         ins_srtcontrole_omschrijving,
                                         ctr_discipline_key,
                                         ins_srtcontrole_periode,
                                         ins_srtcontrole_eenheid,
                                         ins_srtcontrole_level,
                                         ins_srtcontrole_materiaal,
                                         ins_srtcontrole_percentage,
                                         fin_btwtabelwaarde_key)
                  VALUES (v_ins_srtdeel_key,
                          'S',
                         SUBSTR(v_ins_srtdeel_code || ' - ' || rec.ins_srtcontrole_omschrijving, 1, 60),
                         v_ctr_discipline_key,
                         0,    -- periode wordt in het xcp record opgegeven
                         4,    -- standaard jaar voor MJOB
                         rec.ins_srtcontrole_level,
                         0,    -- kosten worden in het xcp record vermeld.
                         100,
                         v_srtcontrole_btw_key)
             RETURNING ins_srtcontrole_key INTO v_ins_srtcontrole_key;
         END;
        
        v_ins_srtcontroledl_xcp_perc:=FAC.safe_to_number(rec.ins_srtcontroledl_xcp_perc)*100;       
                
        IF v_ins_srtcontroledl_xcp_perc>100 THEN
            v_ins_srtcontroledl_xcp_perc:=100;        
        END IF;
        
        IF v_ins_srtcontroledl_xcp_perc < 100 THEN
            v_ins_srtcontroledl_xcp_aantal:=NULL;
        ELSE
            IF rec.ins_srtcontroledl_xcp_aantal <> v_ins_deel_aantal THEN
                v_ins_srtcontroledl_xcp_aantal:=FAC.safe_to_number(rec.ins_srtcontroledl_xcp_aantal);
            ELSE
                v_ins_srtcontroledl_xcp_aantal:=NULL;            
            END IF;    
            
        END IF;
        
        
           -- wat is het aantal op de taak (in de oprognose staat een hvh_reken die we hier gebruiken ipv de ins_deel_aantal)
        -- v_ins_srtcontroledl_xcp_aantal := FAC.safe_to_number(rec.ins_srtcontroledl_xcp_aantal);
    --    IF (v_ins_srtcontroledl_xcp_aantal=1 AND v_ins_deel_aantal>1) 
     --    THEN
     --         v_ins_srtcontroledl_xcp_aantal:= v_ins_deel_aantal;
     --    END IF;  
         
         

         -- Ophalen freeze jaar en eerst stardatum          
         v_ins_srtcontroledl_xcp_startdat:=FAC.safe_to_date(rec.ins_srtcontroledl_xcp_startdat, 'dd-mm-yyyy');
         v_refdate := FAC.safe_to_date('01-01-'||fac.getsetting('mjb_start_year'),'DD-MM-YYYY');
            
         IF (v_ins_srtcontroledl_xcp_startdat<=v_refdate) 
         THEN
                v_ins_srtcontroledl_xcp_startdat := hero.getfirststartdate(v_ins_srtcontroledl_xcp_startdat, v_refdate,rec.ins_srtcontroledl_xcp_periode);
         END IF;        
            
         
         
         -- kijk of de taak uitzondering al bestaat
         
         v_errormsg := 'Kijk of de XCP taak al bestaat';
         BEGIN
            
                                    
            SELECT ins_srtcontroledl_xcp_key
              INTO v_ins_srtcontroledl_xcp_key
              FROM ins_srtcontroledl_xcp
             WHERE ins_deel_key = v_ins_deel_key
               AND ins_srtcontrole_key = v_ins_srtcontrole_key;

            UPDATE ins_srtcontroledl_xcp
               SET ins_srtcontroledl_xcp_periode = FAC.safe_to_number(rec.ins_srtcontroledl_xcp_periode),
                   ins_srtcontroledl_xcp_aantal = v_ins_srtcontroledl_xcp_aantal,
                   ins_srtcontroledl_xcp_materia = FAC.safe_to_number(rec.ins_srtcontroledl_xcp_materia),
                   ins_srtcontroledl_xcp_perc =  v_ins_srtcontroledl_xcp_perc,
                   ins_srtcontroledl_xcp_startdat = v_ins_srtcontroledl_xcp_startdat
             WHERE ins_srtcontroledl_xcp_key = v_ins_srtcontroledl_xcp_key;

         EXCEPTION WHEN NO_DATA_FOUND
         THEN
             v_errormsg := 'Aanmaken nieuwe taak uitzondering ';
            INSERT INTO ins_srtcontroledl_xcp (ins_deel_key,
                                               ins_srtcontrole_key,
                                               ins_srtcontroledl_xcp_periode,
                                               ins_srtcontroledl_xcp_aantal,
                                               ins_srtcontroledl_xcp_materia,
                                               ins_srtcontroledl_xcp_perc,
                                               ins_srtcontroledl_xcp_startdat,
                                               ins_srtcontroledl_xcp_aanteh)
                  VALUES (v_ins_deel_key,
                          v_ins_srtcontrole_key,
                          FAC.safe_to_number(rec.ins_srtcontroledl_xcp_periode),
                          v_ins_srtcontroledl_xcp_aantal,
                          FAC.safe_to_number(rec.ins_srtcontroledl_xcp_materia),
                          v_ins_srtcontroledl_xcp_perc,
                          v_ins_srtcontroledl_xcp_startdat,
                          rec.ins_srtcontroledl_xcp_eenh)
             RETURNING ins_srtcontroledl_xcp_key INTO v_ins_srtcontroledl_xcp_key;
         END;
         
         -- Moeten we nu kijken welke XCP taken er zijn aangemaakt en of deze al afgerond hadden moeten zijn zodat ze niet worden doorgeschoven naar het volgene jaar ?
         
         
          
          
          
          

         fac.imp_writelog (p_import_key, 'I', v_aanduiding || 'Taak is aangemaakt: ' || v_aanduiding, '');
         COMMIT;

         -- TODO moeten we ook taken gaan verwijderen?

      EXCEPTION
         WHEN OTHERS
         THEN
            oracle_err_num := SQLCODE;
            oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
            v_errormsg :=
                  v_errormsg
               || ' ORACLE (error '
               || oracle_err_num
               || '/'
               || oracle_err_mes
               || ')';
            fac.imp_writelog (p_import_key,
                              'E',
                              v_aanduiding || v_errormsg,
                              '');
            COMMIT;
      END;
   END LOOP;

END;
/

-- EIND MJOB Taken

-- Import AFAS personen

--"Roepnaam";"Voorletters";"Voorvoegsel";"Achternaam";"Persnr.";"Afdnr.";"Functie";"Email";"Telefoon";"Mobiel";"Loginnaam";"KP";"Kostenplaats";"CL";"Cluster";"OE";"OE omschrijving"

CREATE OR REPLACE PROCEDURE HERO_IMPORT_AFAS_PERSONEN(p_import_key   IN NUMBER)
AS
  CURSOR c1 IS
  SELECT     fac_imp_csv_col01  prs_voornaam,
             fac_imp_csv_col02  prs_voorletters,
             fac_imp_csv_col03  prs_tussenvoegsel,
             fac_imp_csv_col04  prs_achternaam,
             fac_imp_csv_col05  prs_perslid_nr,
             fac_imp_csv_col06  prs_afdl_naam,
             fac_imp_csv_col07  prs_functie,
             fac_imp_csv_col08  prs_email,
             fac_imp_csv_col09  prs_telefoon,
             fac_imp_csv_col10  prs_mobiel,
             fac_imp_csv_col11  prs_loginnaam,
             fac_imp_csv_col12  prs_kostenplaats_code,
             fac_imp_csv_col13  prs_kostenplaats_omsc,
             fac_imp_csv_col14  prs_cluster_code,
             fac_imp_csv_col15  prs_cluster_naam,
             fac_imp_csv_col16  prs_OE_code,
             fac_imp_csv_col17  prs_OE_omsch
      FROM fac_imp_csv
      WHERE fac_import_key=p_import_key
   ORDER BY fac_imp_csv_key;

   v_errormsg            VARCHAR2 (1000);
   v_errorhint           VARCHAR2 (1000);
   v_aanduiding          VARCHAR2 (1000);
   oracle_err_num        NUMBER;
   oracle_err_mes        VARCHAR2 (200);
   v_count               NUMBER;

   v_afdelingnaam         VARCHAR2(20);
   v_afd_count            NUMBER;
   v_srtperslid_omschrijving VARCHAR2(60);
   
   v_cluster_code_key      NUMBER;
   v_cluster_omsch_key     NUMBER;
   v_OE_Code_key           NUMBER;
   v_OE_omsch_key          NUMBER;
   
BEGIN
    v_count:=0;

    DELETE FROM fac_imp_perslid;
    
   BEGIN 
       SELECT prs_kenmerk_key 
         INTO v_cluster_code_key
         FROM prs_kenmerk 
        WHERE     prs_kenmerk_code='CLUSTER_CODE'
              AND prs_kenmerk_niveau='P' 
              AND prs_kenmerk_verwijder IS NULL;
   EXCEPTION
   WHEN NO_DATA_FOUND THEN
      v_cluster_code_key:=NULL;
   END;   
   BEGIN 
       SELECT prs_kenmerk_key 
         INTO v_cluster_omsch_key
         FROM prs_kenmerk 
        WHERE     prs_kenmerk_code='CLUSTER_OMSCH'
              AND prs_kenmerk_niveau='P' 
              AND prs_kenmerk_verwijder IS NULL;
   EXCEPTION
   WHEN NO_DATA_FOUND THEN
      v_cluster_omsch_key:=NULL;
   END;   
   
   BEGIN 
       SELECT prs_kenmerk_key 
         INTO v_OE_Code_key
         FROM prs_kenmerk 
        WHERE     prs_kenmerk_code='OE_CODE'
              AND prs_kenmerk_niveau='P' 
              AND prs_kenmerk_verwijder IS NULL;
   EXCEPTION
   WHEN NO_DATA_FOUND THEN
      v_OE_code_key:=NULL;
   END;   
   
   BEGIN 
       SELECT prs_kenmerk_key 
         INTO v_OE_Omsch_key
         FROM prs_kenmerk 
        WHERE     prs_kenmerk_code='OE_OMSCH'
              AND prs_kenmerk_niveau='P' 
              AND prs_kenmerk_verwijder IS NULL;
   EXCEPTION
   WHEN NO_DATA_FOUND THEN
      v_OE_Omsch_key:=NULL;
   END;   

    FOR rec IN c1
    LOOP
      IF v_count>0 THEN
       -- ALs een per op niveau 9 zit heeft de


        -- controleren of de afdeling wel beschikbaar is anders onder Onbekend zetten
        SELECT COUNT(*) 
          INTO v_afd_count
          FROM prs_afdeling
         WHERE UPPER(prs_afdeling_naam)=UPPER(rec.prs_afdl_naam)
         AND prs_afdeling_verwijder IS NULL;

        IF v_afd_count=0 THEN
          v_afdelingnaam :='Onbekend';
        ELSE
          v_afdelingnaam := rec.prs_afdl_naam;
        END IF;

        IF rec.prs_functie IS NULL
        THEN
            v_srtperslid_omschrijving:='Onbekend';
        ELSE
            v_srtperslid_omschrijving:= rec.prs_functie;
        END IF;


        INSERT INTO fac_imp_perslid(fac_import_key,
                                       prs_afdeling_naam,
                                       prs_perslid_voornaam,
                                       prs_perslid_voorletters,
                                       prs_perslid_tussenvoegsel,
                                       prs_perslid_naam,
                                       prs_perslid_email,
                                       prs_perslid_telefoonnr,
                                       prs_perslid_mobiel,
                                       prs_srtperslid_omschrijving,
                                       prs_perslid_oslogin,
                                       prs_perslid_nr,                                     
                                       prs_kenmerk1,
                                       prs_kenmerk2,
                                       prs_kenmerk3,
                                       prs_kenmerk4)
                                VALUES(p_import_key,
                                       v_afdelingnaam,
                                       rec.prs_voornaam,
                                       rec.prs_voorletters,
                                       rec.prs_tussenvoegsel,
                                       rec.prs_achternaam,                                    
                                       rec.prs_email,
                                       rec.prs_telefoon,
                                       rec.prs_mobiel,
                                       v_srtperslid_omschrijving,                                    
                                       rec.prs_email,
                                       rec.prs_perslid_nr,                                       
                                       DECODE(v_cluster_code_key,  NULL, rec.prs_cluster_code,  TO_CHAR(v_cluster_code_key)  || '=' || SUBSTR(rec.prs_cluster_code,  1, 3980)),
                                       DECODE(v_cluster_omsch_key,  NULL, rec.prs_cluster_naam,  TO_CHAR(v_cluster_omsch_key)  || '=' || SUBSTR(rec.prs_cluster_naam,  1, 3980)),
                                       DECODE(v_OE_code_key,  NULL, rec.prs_OE_code,  TO_CHAR(v_OE_code_key)  || '=' || SUBSTR(rec.prs_OE_code,  1, 3980)),
                                       DECODE(v_OE_omsch_key,  NULL, rec.prs_OE_omsch,  TO_CHAR(v_OE_omsch_key)  || '=' || SUBSTR(rec.prs_OE_omsch,  1, 3980))
                                       );
                                       
      END IF;
      v_count:=v_count+1;
    END LOOP;
    DELETE FROM fac_imp_csv where fac_import_key=p_import_key;
EXCEPTION

  WHEN OTHERS
           THEN
              v_errorhint := v_errormsg || ' - ' || v_aanduiding;
              oracle_err_num := SQLCODE;
              oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
              v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes;
              fac.imp_writelog (p_import_key,
                                'E',
                                v_errormsg,
                                v_errorhint);

END;
/

CREATE OR REPLACE PROCEDURE HERO_UPDATE_AFAS_PERSONEN(p_import_key   IN NUMBER)
AS

   -- Afdeling is het cluster, alle locatie onder dat cluster ophalen en werkoplek toewijzen
   -- clusetr manager, aclustermanaer vve, assistent clusetr manager
   CURSOR p_werkplek
   IS 
      SELECT p.prs_perslid_key,                         
             pf.prs_perslid_naam_friendly
        FROM fac_imp_perslid  i,
             prs_perslid      p,
             prs_v_perslid_fullnames pf             
       WHERE     i.prs_srtperslid_omschrijving IN ('Clustermanager','Clusterassistent','Clustermanager VVE')
             AND UPPER (p.prs_perslid_oslogin) = UPPER (i.prs_perslid_oslogin)
             AND pf.prs_perslid_key = p.prs_perslid_key             
             AND p.prs_perslid_verwijder IS NULL;
   
   CURSOR p_gebouw(p_perslid_key IN NUMBER)
   IS 
      SELECT r.alg_ruimte_key, prs_perslid_key
        FROM alg_district  d,
             alg_locatie   l,
             alg_gebouw    g,
             alg_verdieping v,
             alg_ruimte      r,
             prs_perslid    p,
             prs_kenmerklink pkl,
             prs_kenmerk pk
       WHERE     p.prs_perslid_key = p_perslid_key
             AND pk.prs_kenmerk_code='CLUSTER_OMSCH'
             AND pkl.prs_kenmerk_key = pk.prs_kenmerk_key
             AND pkl.prs_link_key=p.prs_perslid_key
             AND d.alg_district_upper = UPPER(pkl.prs_kenmerklink_waarde)
             AND d.alg_district_verwijder is NULL
             AND l.alg_district_key = d.alg_district_key
             AND l.alg_locatie_verwijder is NULL
             AND g.alg_locatie_key = l.alg_locatie_key
             AND g.alg_gebouw_verwijder is NULL
             AND v.alg_gebouw_key = g.alg_gebouw_key
             AND V.alg_verdieping_verwijder IS NULL
             and r.alg_verdieping_key = v.alg_verdieping_key
             AND r.alg_ruimte_nr='_WP'
             AND r.alg_ruimte_verwijder IS NULL;
      
   CURSOR waarnm
   IS     
      SELECT r.alg_ruimte_key, prs_perslid_key
        FROM alg_district  d,
             alg_locatie   l,
             alg_gebouw    g,
             alg_verdieping v,             alg_ruimte      r,
             prs_perslid    p,
             prs_kenmerklink pkl,
             prs_kenmerk pk
       WHERE      pk.prs_kenmerk_code='CLUSTER_WAARN'
             AND pk.prs_kenmerk_verwijder IS NULL
             AND pkl.prs_kenmerk_key = pk.prs_kenmerk_key
             AND pkl.PRS_KENMERKLINK_VERWIJDER IS NULL
             AND pkl.prs_link_key=p.prs_perslid_key            
             AND p.prs_perslid_verwijder IS NULL
             AND d.alg_district_key = fac.safe_to_number(pkl.prs_kenmerklink_waarde)
             AND d.alg_district_verwijder is NULL
             AND l.alg_district_key = d.alg_district_key
             AND l.alg_locatie_verwijder is NULL
             AND g.alg_locatie_key = l.alg_locatie_key
             AND g.alg_gebouw_verwijder is NULL
             AND v.alg_gebouw_key = g.alg_gebouw_key
             AND V.alg_verdieping_verwijder IS NULL
             and r.alg_verdieping_key = v.alg_verdieping_key
             AND r.alg_ruimte_nr='_WP'
             AND r.alg_ruimte_verwijder IS NULL;
             
       
   CURSOR p_kostenplaats(p_perslid_key IN NUMBER)
   IS 
      SELECT aok.ALG_ONRGOEDKENMERK_WAARDE prs_kostenplaats_key, 
             p.prs_perslid_key
        FROM alg_district  d,
             alg_locatie   l,             
             prs_perslid    p,
             prs_kenmerklink pkl,
             prs_kenmerk pk,
             alg_onrgoedkenmerk aok,
             alg_kenmerk ak
       WHERE     p.prs_perslid_key = p_perslid_key
             AND pk.prs_kenmerk_code='CLUSTER_OMSCH'
             AND pkl.prs_kenmerk_key = pk.prs_kenmerk_key
             AND pkl.prs_link_key=p.prs_perslid_key
             AND d.alg_district_upper = UPPER(pkl.prs_kenmerklink_waarde)
             AND d.alg_district_verwijder is NULL
             AND l.alg_district_key = d.alg_district_key
             AND l.alg_locatie_verwijder is NULL
             AND aok.ALG_ONRGOED_KEY = l.ALG_LOCATIE_KEY
             AND aok.ALG_ONRGOED_NIVEAU='L'
             AND ak.ALG_KENMERK_KEY = aok.ALG_KENMERK_KEY
             AND ak.ALG_KENMERK_OMSCHRIJVING like '%kostenplaats'
             AND p.prs_perslid_key NOT IN (SELECT prs_perslid_key 
                                             from prs_perslidkostenplaats pkp 
                                            where     pkp.PRS_PERSLID_KEY = p.PRS_PERSLID_KEY 
                                                  AND pkp.PRS_KOSTENPLAATS_KEY = aok.ALG_ONRGOEDKENMERK_WAARDE 
                                                  AND pkp.PRS_PERSLIDKOSTENPLAATS_BOEKEN=1);

      
   CURSOR p_del        
  IS
     SELECT p.prs_perslid_key
       FROM prs_perslid p
      WHERE     p.prs_perslid_verwijder IS NULL
            AND SUBSTR(p.prs_perslid_oslogin,0,1)<>'_'
            AND p.prs_perslid_nr IS NOT NULL 
            AND p.prs_perslid_nr NOT IN (SELECT prs_perslid_nr
                                          FROM fac_imp_perslid);

  

  v_errormsg            VARCHAR2 (1000);
  v_errorhint           VARCHAR2 (1000);
  v_aanduiding          VARCHAR2 (1000);
  oracle_err_num        NUMBER;
  oracle_err_mes        VARCHAR2 (200);

  v_date 					DATE;
  v_defaultgroep 			NUMBER:=1;
  v_count 					NUMBER;
  v_aanwezig				NUMBER;
  v_auth_groep_key			NUMBER;
BEGIN

	  -- Hebben we wel een gevuld bestand binnen gekregen
		SELECT COUNT(*)
      INTO v_count
      FROM fac_imp_perslid;

		 SELECT COUNT(*)+1    -- Zodat v_aanwezig nooit 0 kan zijn, 1 extra is voor de gebruik niet erg
		   INTO v_aanwezig
       FROM prs_perslid p
      WHERE     p.prs_perslid_nr IS NOT NULL 
            AND p.prs_perslid_verwijder IS NULL;


		IF (v_count/v_aanwezig) > 0.85  -- we gaan uit van minimaal 85% aanwezig  in import file
		THEN
				v_errormsg := 'Fout bij update van personen.';
			    prs.update_perslid (p_import_key, 'NR', 'A', 1);


			    v_errormsg := 'Fout bij verwijderen van personen.';
			    FOR rec IN p_del
			    LOOP
			      prs.delete_perslid (p_import_key, rec.prs_perslid_key);
			    END LOOP;



			    COMMIT;

      END IF;
      
      BEGIN
         SELECT f.FAC_GROEP_KEY 
           INTO v_auth_groep_key
           FROM FAC_GROEP f
          WHERE f.fac_groep_upper='CLUSTERMANAGERS';
      EXCEPTION
      WHEN NO_DATA_FOUND THEN
         v_auth_groep_key:=-1;
      END;
      
      
      
      -- Toewijzen aan werkplek op locatie
      -- En toewijzen aan autoristaie groep
      v_count:=0;
      FOR rec IN p_werkplek
              LOOP
                  BEGIN
                       FOR rec_geb IN p_gebouw(rec.prs_perslid_key)
                       LOOP
                           fac.imp_writelog (
                                            p_import_key,
                                            'I',
                                            'PERLSID :'||rec_geb.prs_perslid_key||'-Ruimte:'||rec_geb.alg_ruimte_key,'');
                           prs.movetoruimte (rec_geb.prs_perslid_key,
                                             rec_geb.alg_ruimte_key,
                                        '',
                                        1);
                       END LOOP;                 
                      SELECT COUNT(*) 
                        INTO v_count
                        FROM fac_gebruikersgroep 
                       WHERE     fac_groep_key=v_auth_groep_key 
                             AND prs_perslid_key=rec.prs_perslid_key 
                             AND (   fac_gebruikersgroep_vervaldatum IS NULL 
                                  OR fac_gebruikersgroep_vervaldatum> SYSDATE);                      
                                        
                      IF v_count<1 AND v_auth_groep_key>0
                      THEN                      
                      -- Voeg toe aan autorisatie groep Clustermanagers
                        INSERT INTO fac_gebruikersgroep(fac_groep_key, prs_perslid_key) 
                             VALUES(v_auth_groep_key, rec.prs_perslid_key);
                        fac.imp_writelog (
                                            p_import_key,
                                            'S',
                                            'Toegevoegd aan autorisatie groep Clustermanagers :'||rec.prs_perslid_naam_friendly,'');
                      END IF;
                      FOR rec_kpn IN p_kostenplaats(rec.prs_perslid_key)
                      LOOP
                         INSERT INTO prs_perslidkostenplaats(prs_perslid_key,
                                            prs_kostenplaats_key,
                                            prs_perslidkostenplaats_boeken,
                                            prs_perslidkostenplaats_inzage,
                                            prs_perslidkostenplaats_aanmk)
                                     VALUES(rec.prs_perslid_key,
                                            rec_kpn.prs_kostenplaats_key,
                                            1,
                                            0,
                                            SYSDATE);
                      END LOOP;
                      
                  END;
      END LOOP;
      
      FOR rec_wnm IN waarnm
      LOOP
          fac.imp_writelog (p_import_key,                                            
                            'I',
                            'PERLSID :'||rec_wnm.prs_perslid_key||'-Ruimte:'||rec_wnm.alg_ruimte_key,'');
          prs.movetoruimte (rec_wnm.prs_perslid_key,
                            rec_wnm.alg_ruimte_key,
                            '',
                            1);
      END LOOP;
      
      
      
      
EXCEPTION

  WHEN OTHERS
           THEN
              v_errorhint := v_errormsg || ' - ' || v_aanduiding;
              oracle_err_num := SQLCODE;
              oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
              v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes;
              fac.imp_writelog (p_import_key,
                                'E',
                                v_errormsg,
                                v_errorhint);

END;
/

--Eeinde Import Afas personen



--- EINDE IMPORTS -------



-- Lijst van Clustermanagers (tbv domeinview)
CREATE OR REPLACE VIEW hero_v_personenlijst_loc
(
    PRS_PERSLID_KEY,
    NAAM,
    PERSONEELSNUMMER,
    EMAIL,
    PRS_PERSLID_VERWIJDER
)
AS
    SELECT
          p.prs_perslid_key,
          CASE WHEN p.prs_perslid_tussenvoegsel IS NULL
               THEN p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam || ' (' || sp.prs_srtperslid_omschrijving || ')' 
               ELSE p.prs_perslid_voornaam || ' ' || p.prs_perslid_tussenvoegsel || ' ' || p.prs_perslid_naam || ' (' || sp.prs_srtperslid_omschrijving || ')'
               END
           naam,
          p.prs_perslid_nr,
          p.prs_perslid_email,
          p.prs_perslid_verwijder
     FROM prs_perslid    p,
          prs_srtperslid sp,
          prs_v_afdeling a,
          prs_bedrijf    b
    WHERE     p.prs_afdeling_key = a.prs_afdeling_key
          AND a.prs_bedrijf_key = b.prs_bedrijf_key  
          AND b.prs_bedrijf_key = 61  --  bedrijfs_key HERO
          AND p.prs_srtperslid_key = sp.prs_srtperslid_key
          AND sp.prs_srtperslid_key=  41     --- CLUSTERMANAGER (key A=81, P=41)
          AND p.prs_perslid_verwijder IS NULL
    ORDER BY sp.prs_srtperslid_omschrijving, 
             p.prs_perslid_voornaam, 
             p.prs_perslid_naam;

-- Lijst van Regiomanagers (tbv domeinview)
CREATE OR REPLACE VIEW HERO_V_REGIOMANAGERS
(
    PRS_PERSLID_KEY,
    NAAM,
    PERSONEELSNUMMER,
    EMAIL,
    PRS_PERSLID_VERWIJDER
)
AS
    SELECT
         p.prs_perslid_key,
         CASE WHEN p.prs_perslid_tussenvoegsel IS NULL
              THEN p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam || ' (' || sp.prs_srtperslid_omschrijving || ')' 
              ELSE p.prs_perslid_voornaam || ' ' || p.prs_perslid_tussenvoegsel || ' ' || p.prs_perslid_naam || ' (' || sp.prs_srtperslid_omschrijving || ')'
              END
         naam,
         p.prs_perslid_nr,
         p.prs_perslid_email,
         p.prs_perslid_verwijder
    FROM prs_perslid    p,
         prs_srtperslid sp,
         prs_v_afdeling a,
         prs_bedrijf    b
   WHERE     p.prs_afdeling_key = a.prs_afdeling_key
         AND a.prs_bedrijf_key = b.prs_bedrijf_key  
         AND b.prs_bedrijf_key = 61  --  bedrijfs_key HERO
         AND p.prs_srtperslid_key = sp.prs_srtperslid_key
         AND sp.prs_srtperslid_key = 161     --- REGIOMANAGER (A=key 63 P=161)
         AND p.prs_perslid_verwijder IS NULL
    ORDER BY sp.prs_srtperslid_omschrijving, 
             p.prs_perslid_voornaam, 
             p.prs_perslid_naam;

CREATE OR REPLACE VIEW HERO_V_VERHUURDERS
(
    PRS_BEDRIJF_KEY,
    PRS_BEDRIJF_NAAM    
)
AS
   SELECT
         b.prs_bedrijf_key,
         b.prs_bedrijf_naam
    FROM prs_bedrijf    b,
         PRS_KENMERK k,
         prs_kenmerklink kl
   WHERE     k.prs_kenmerk_code='VERHUURDER'
         AND k.prs_kenmerk_niveau='B'
         AND k.prs_kenmerk_key = kl.prs_kenmerk_key
         AND kl.prs_link_key=b.prs_bedrijf_key
         AND b.prs_bedrijf_verwijder is null;


-- Basis rapport van AEG voor BVB

CREATE OR REPLACE HERO_V_rap_mjob_begroyong_verplichting
AS
   SELECT dsc.ins_deelsrtcontrole_freezedate,
          TO_CHAR (ins_deelsrtcontrole_freezedate, 'YYYY')                                    freezejaar,
          sg.ins_srtgroep_omschrijving                                                        groep,
          sd.ins_srtdeel_omschrijving                                                         objectsoort,
          d.ins_deel_omschrijving                                                             object,
          d.ins_deel_key                                                                      object_key,
          sc.ins_srtcontrole_omschrijving                                                     taak,
          cd.ins_discipline_omschrijving                                                      taakcategorie,
          dsc.ins_deelsrtcontrole_freezecost                                                  begroting,
          ROUND ((dsc.ins_deelsrtcontrole_freezecost / mc.begroting) * mc.verplichting, 2)    verplichting,
          mo.mld_melding_key                                                                  melding
     FROM ins_deelsrtcontrole  dsc,
          ins_deel             d,
          ins_srtdeel          sd,
          ins_srtgroep         sg,
          ins_srtcontrole      sc,
          ctr_discipline       cd,
          mld_melding_object   mo,
          (SELECT m.mld_melding_key,
                  (SELECT SUM (mld_opdr_kosten)
                     FROM mld_opdr o
                    WHERE o.mld_melding_key = m.mld_melding_key)                          verplichting,
                  (SELECT SUM (ins_deelsrtcontrole_freezecost)
                     FROM mld_melding_object mo, ins_deelsrtcontrole dsc
                    WHERE     m.mld_melding_key = mo.mld_melding_key
                          AND mo.ins_deelsrtcontrole_key = dsc.ins_deelsrtcontrole_key)   begroting
             FROM mld_melding m) mc
    WHERE     dsc.ins_deel_key = d.ins_deel_key
          AND d.ins_deel_verwijder IS NULL
          AND d.ins_srtdeel_key = sd.ins_srtdeel_key
          AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
          AND sg.ins_discipline_key = 121                                                                        -- MJOB A=121
          AND dsc.ins_srtcontrole_key = sc.ins_srtcontrole_key
          AND sc.ctr_discipline_key = cd.ins_discipline_key
          AND dsc.ins_deelsrtcontrole_key = mo.ins_deelsrtcontrole_key(+)
          AND mo.mld_melding_key = mc.mld_melding_key(+)
          AND dsc.ins_deelsrtcontrole_status IN (2,
                                                 3,
                                                 4,
                                                 5,
                                                 6)-- 2;Gestart/In behandeling 3;Ter uitvoering 5;Afgemeld/Gereed gemeld; 6;Afgerond


CREATE OR REPLACE VIEW HERO_V_OBJECT_MLD_QR
(
    INS_DEEL_OMSC,
    LOCATIE_CODE,
    FCLT_F_LOCATIE,
    FCLT_F_GEBOUW,
    FCLT_F_PLAATS,
    RUIMTENR,
    NAAM,
    FCLT_F_DISCIPLINE,
    FCLT_F_OBJECTGROEP,
    FCLT_F_OBJECTSOORT,
    FCLT_F_IDENTIFICATIE,
    FCLT_F_BOOKMARK,
    INS_DEEL_KEY,
    INS_SRTDEEL_KEY,
    [REDACTED],
    [REDACTED],
    INS_ALG_RUIMTE_TYPE,
    INS_ALG_RUIMTE_KEY,
    BOOKMARK_ID,
    GEKOPPELD_AAN
)
AS
  SELECT i.ins_deel_omschrijving
               hide_f_sort,
           l.alg_locatie_code,
           l.alg_locatie_code || ' ' || l.alg_locatie_omschrijving
               fclt_f_locatie,
           o.alg_gebouw_omschrijving
               fclt_f_gebouw,
           SUBSTR (o.alg_plaatsaanduiding, 13)
               fclt_f_plaats,
           o.alg_ruimte_nr,
           NULL
               prs_perslid_naam,
           d.ins_discipline_omschrijving
               fclt_f_discipline,
           g.ins_srtgroep_omschrijving
               fclt_f_objectgroep,
           s.ins_srtdeel_omschrijving
               fclt_f_objectsoort,
           i.ins_deel_omschrijving
               fclt_f_identificatie,
           b.fac_bookmark_naam
               fclt_f_bookmark,
           i.ins_deel_key,
           s.ins_srtdeel_key,
           i.ins_discipline_key
               fclt_3d_discipline_key,
           l.alg_locatie_key
               fclt_3d_locatie_key,
           i.ins_alg_ruimte_type,
           i.ins_alg_ruimte_key,
           b.fac_bookmark_id
               hide_f_bookmark_id,
           'Ruimte'
      FROM ins_deel             i,
           ins_v_alg_overzicht  o,
           ins_srtdeel          s,
           ins_srtgroep         g,
           ins_discipline       d,
           alg_locatie          l,
           fac_bookmark         b
     WHERE     UPPER (b.fac_bookmark_naam) IN ('QR_OBJECT_MELDING')
           AND COALESCE (b.fac_bookmark_expire, SYSDATE + 1) > SYSDATE
           AND ins_deel_verwijder IS NULL
           AND COALESCE (i.ins_deel_vervaldatum, SYSDATE + 1) > SYSDATE
           AND i.ins_deel_module = 'INS'
           AND i.ins_deel_parent_key IS NULL
           AND s.ins_srtdeel_key = i.ins_srtdeel_key
           AND g.ins_srtgroep_key = s.ins_srtgroep_key
           AND d.ins_discipline_key = g.ins_discipline_key
           AND o.alg_onroerendgoed_keys =
               COALESCE (i.ins_alg_ruimte_key_org, i.ins_alg_ruimte_key)
           AND o.alg_onroerendgoed_type =
               COALESCE (i.ins_alg_ruimte_type_org, i.ins_alg_ruimte_type)
           AND COALESCE (i.ins_alg_ruimte_type_org, i.ins_alg_ruimte_type) IN
                   ('T', 'R', 'W')
           AND o.alg_locatie_key = i.ins_alg_locatie_key
           AND l.alg_locatie_key = i.ins_alg_locatie_key;


CREATE OR REPLACE VIEW HERO_V_FAC_TAKEN_OVERZICHT
(
   ins_deel_key,
   ins_deel_omschrijving,
   ins_srtgroep_omschrijving,
   ins_srtdeel_omschrijving,
   locatie_code,
   ins_srtcontrole_omschrijving,
   ins_deelsrtcontrole_key,
   ins_deelsrtcontrole_datum,
   ins_deelsrtcontrole_opmerking,
   ins_deelsrtcontrole_status,
   ins_controlemode_success,
   mld_melding_key,
   mld_stdmelding_omschrijving,
   mld_melding_onderwerp
)
AS
   SELECT i.ins_deel_key, 
          i.ins_deel_omschrijving,
          i.ins_srtgroep_omschrijving,
          i.ins_srtdeel_omschrijving,
          (SELECT alg_locatie_code
             FROM alg_locatie
            WHERE alg_locatie_key = i.alg_locatie_key)    locatie_code,
          isc.ins_srtcontrole_omschrijving,
          idsc.ins_deelsrtcontrole_key,
          idsc.ins_deelsrtcontrole_datum,       
          idsc.ins_deelsrtcontrole_opmerking,
          DECODE (idsc.ins_deelsrtcontrole_status,0,'Ingepland', 2,'Gestart/In behandeling', 3,'Ter uitvoering', 5,'Afgemeld/Gereed gemeld', 6 ,'Afgerond') idsc_status,
          DECODE(im.ins_controlemode_success,0,'Niet succesvol',1,'Succesvol') ins_controlemode_success,
          m.mld_melding_key,
          sm.mld_stdmelding_omschrijving,
          m.mld_melding_onderwerp
     FROM ins_deelsrtcontrole  idsc,
          ins_controlemode im,
          ins_srtcontrole      isc,
          ins_v_deel_gegevens  i,
          mld_melding          m,
          mld_melding_object   mmo,
          mld_stdmelding       sm
    WHERE     i.ins_deel_key = idsc.ins_deel_key
          AND idsc.ins_deelsrtcontrole_status <> 6
          AND im.ins_controlemode_key = idsc.ins_controlemode_key
          AND isc.ctr_discipline_key <> 122
          AND isc.ins_srtcontrole_key = idsc.ins_srtcontrole_key
          AND mmo.ins_deelsrtcontrole_key(+) = idsc.ins_deelsrtcontrole_key
          AND m.mld_melding_key(+) = mmo.mld_melding_key
          AND sm.mld_stdmelding_key(+) = m.mld_stdmelding_key;



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

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

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