--
-- $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 = 'STER.SQL'
DEFINE dbuser   = 'STER'

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

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

CREATE OR REPLACE PACKAGE STER
AS

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

CREATE OR REPLACE PACKAGE BODY STER
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:=ster.getfirststartdate(v_startdatum, p_refdatum, p_cyclus);
	   	 	END IF;
	    ELSE
				v_startdatum:=p_startdatum;    
		  END IF;
   	 		
   	  RETURN v_startdatum;
   	 
   END;         
      
    
      
   
    
    
END;
/




-- IMPORTS

CREATE OR REPLACE PROCEDURE STER_IMPORT_YOUFORCE (p_import_key IN NUMBER)
IS

BEGIN
	NULL;
END;
/

CREATE OR REPLACE PROCEDURE STER_UPDATE_YOUFORCE (p_import_key IN NUMBER)
IS

		CURSOR c
		IS
			SELECT 	fac_imp_csv_index file_index,
							FAC_IMP_CSV_COL01 prs_perslid_nr,
                            FAC_IMP_CSV_COL02 prs_perslid_email,
							FAC_IMP_CSV_COL03 prs_kostenplaats_code,
							FAC_IMP_CSV_COL04 dienstverband_code,
							FAC_IMP_CSV_COL05 budgethouder_nr,
                            FAC_IMP_CSV_COL06 budgethouder_email,
							FAC_IMP_CSV_COL07 uren
			  from fac_imp_csv
			 WHERE fac_import_key = p_import_key
			 ORDER BY fac_imp_csv_index;

		CURSOR aut(v_kostenplaats_nr IN VARCHAR2)
		IS 
			SELECT fac.safe_to_number(SUBSTR(fud.fac_usrdata_code,1,INSTR(fud.fac_usrdata_code,'-')-1)) fac_groep_key
				FROM fac_usrdata fud , fac_usrtab fut
		 	 WHERE     UPPER(fut.fac_usrtab_naam)='AUTH_MATRI_RO'
						 AND fut.fac_usrtab_verwijder IS NULL
						 AND fud.fac_usrtab_key = fut.fac_usrtab_key
						 AND fud.fac_usrdata_verwijder IS NULL
						 AND SUBSTR(fud.fac_usrdata_code,INSTR(fud.fac_usrdata_code,'-')+1)=v_kostenplaats_nr;


		v_errormsg                      VARCHAR2 (1000);
    v_errorhint                     VARCHAR2 (1000);
    v_aanduiding                     VARCHAR2 (1000);
    oracle_err_num                  NUMBER;
    oracle_err_mes                  VARCHAR2 (200);
    v_file_index									NUMBER;
    
    v_afdeling_key								NUMBER;
    v_afd_verantw_key							NUMBER;
    v_perslid_key									NUMBER;
    v_prs_kostenplaats_key                      NUMBER;
    v_kpn_budgethouder_key				NUMBER;
    v_budgethouder_key						NUMBER;
    v_count												NUMBER;
    v_primary_kostcode						VARCHAR2(12);
    v_youforce_excl						VARCHAR2(1);
    
BEGIN
	  
	  -- OPhalen alle regels uit de fac_imp_csv
	  -- loop
	  -- Controleer of p[ersoon met personeelsnr kolom bestaat
	  v_count:=0;
	  FOR rec IN c
	  LOOP
            v_youforce_excl:='0';
	  		IF UPPER(rec.prs_perslid_nr) <> 'PERSOONSNUMMER' AND
					 UPPER(rec.prs_kostenplaats_code) <> 'KOSTENPLAATS'	  		
				THEN
	  			v_file_index:=rec.file_index;
				  v_aanduiding := 'Persoon kan niet gevonden worden op basis van personeels nr'|| rec.prs_perslid_nr;
				  BEGIN
				  	SELECT p.prs_perslid_key,
                           COALESCE((SELECT pkl.prs_kenmerklink_waarde from prs_kenmerklink pkl, prs_kenmerk pk
                                      WHERE     pk.prs_kenmerk_code='YOUFORCE_EXCLUDE'
                                            AND pkl.prs_kenmerk_key=pkl.prs_kenmerk_key
                                            AND pkl.prs_link_key=p.prs_perslid_key
                                            AND pk.prs_kenmerk_niveau='P'
                                            AND pk.prs_kenmerk_verwijder IS NULL),'0') youforce_excl	                    
						  INTO v_perslid_key, 
                               v_youforce_excl
							FROM prs_perslid p
						 WHERE     p.PRS_perslid_NR=rec.prs_perslid_nr 
						       AND p.prs_perslid_verwijder IS NULL;
										
					EXCEPTION 
					WHEN NO_DATA_FOUND
					THEN
                        v_perslid_key:=-1;
                        
					END;
                    IF v_perslid_key=-1 THEN    
                        BEGIN
                            v_aanduiding := 'Persoon kan niet gevonden worden op basis van personeels nr'|| rec.prs_perslid_nr||' of email '||rec.prs_perslid_email;
                            SELECT p.prs_perslid_key,
                                  COALESCE((SELECT pkl.prs_kenmerklink_waarde from prs_kenmerklink pkl, prs_kenmerk pk
                                             WHERE     pk.prs_kenmerk_code='YOUFORCE_EXCLUDE'
                                                   AND pkl.prs_kenmerk_key=pkl.prs_kenmerk_key
                                                   AND pkl.prs_link_key=p.prs_perslid_key
                                                   AND pk.prs_kenmerk_niveau='P'
                                                   AND pk.prs_kenmerk_verwijder IS NULL),'0') youforce_excl	                    
						  INTO v_perslid_key, 
                               v_youforce_excl
                              FROM prs_perslid p
						     WHERE     UPPER(p.prs_perslid_email)=UPPER(rec.prs_perslid_email)
						           AND p.prs_perslid_verwijder IS NULL;
                        EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                            
                            fac.imp_writelog (
			                  p_import_key,
			                  'W',
			                  v_aanduiding || v_errormsg,
			                     'Persoon niet gevonden');
                        END;
					END IF;
					-- Maar nu moeten we de afdeling hebben met het maximaal aantal uren
					BEGIN
							v_primary_kostcode:=NULL;
							v_aanduiding := 'Max aantal uren ophalen gaat fout bij personeels nr'|| rec.prs_perslid_nr;
							SELECT fac_imp_csv_col03
							  INTO v_primary_kostcode
							  from (
					 				   SELECT fac_imp_csv_col03 						
							         FROM fac_imp_csv 
							        WHERE     fac_import_key=p_import_key 
							              AND fac_imp_csv_col01=rec.prs_perslid_nr
					            ORDER BY fac_imp_csv_col07 DESC
					           ) WHERE rownum=1;
					EXCEPTION
					WHEN NO_DATA_FOUND
					THEN
							fac.imp_writelog (
			                  p_import_key,
			                  'W',
			                  v_aanduiding || v_errormsg,
			                     'Persoon niet gevonden');
					END;
					
				  -- als niet dan fout loggen
				  -- chcek of afdeling kolom2 bestaat via de kostenplaats
				  BEGIN
				  	v_aanduiding := 'Kostenplaats/Afdeling kan niet gevonden worden op basis van kostenplaats code'|| rec.prs_kostenplaats_code;
				  	SELECT a.prs_afdeling_key, a.prs_perslid_key_verantw, COALESCE(k.prs_perslid_key,-1), k.prs_kostenplaats_key
						  INTO v_afdeling_key, v_afd_verantw_key, v_kpn_budgethouder_key, v_prs_kostenplaats_key
							FROM prs_kostenplaats k, prs_afdeling a
						 WHERE      k.prs_kostenplaats_nr=COALESCE(v_primary_kostcode,rec.prs_kostenplaats_code)
										AND k.prs_kostenplaats_verwijder IS NULL 
										AND a.prs_kostenplaats_key = k.prs_kostenplaats_key
										AND a.prs_afdeling_verwijder IS NULL;

						
										
						IF (rec.budgethouder_nr IS NOT NULL)
						THEN																			
                            BEGIN
                                v_aanduiding := 'Budgethouder kan niet gevonden worden op basis van budgethouder personeelssnr : '|| rec.budgethouder_nr;
                                SELECT p.prs_perslid_key 
                                    INTO v_budgethouder_key 
                                    FROM prs_perslid p 
                                 where       p.prs_perslid_nr=rec.budgethouder_nr  
                                         AND p.prs_perslid_verwijder IS NULL 
                                         AND p.prs_perslid_inactief IS NULL OR TRUNC(p.prs_perslid_inactief) > TRUNC(SYSDATE);
                            EXCEPTION
                            WHEN NO_DATA_FOUND THEN
                                v_budgethouder_key:=-1;
                            END;

                            IF v_budgethouder_key=-1 THEN
                                BEGIN
                                    v_aanduiding := 'Budgethouder kan niet gevonden worden op basis van budgethouder personeelssnr : '|| rec.budgethouder_nr ||' en email adres '||rec.budgethouder_email;
                                    SELECT p.prs_perslid_key 
                                        INTO v_budgethouder_key 
                                        FROM prs_perslid p 
                                     where       UPPER(p.prs_perslid_email)=UPPER(rec.budgethouder_email)  
                                             AND p.prs_perslid_verwijder IS NULL 
                                             AND p.prs_perslid_inactief IS NULL OR TRUNC(p.prs_perslid_inactief) > TRUNC(SYSDATE);
                                EXCEPTION
                                WHEN NO_DATA_FOUND THEN
                                    v_budgethouder_key:=-1;
                                    fac.imp_writelog (
                                            p_import_key,
                                                        'W',
                                                        v_aanduiding || v_errormsg,
                                                         'Budgethouder niet gevonden');
                                    
                                END;
							END IF;
                            
                            
							IF v_budgethouder_key <> -1 AND (v_kpn_budgethouder_key=-1 OR v_budgethouder_key<>v_kpn_budgethouder_key)
							THEN
								UPDATE prs_kostenplaats 
								   SET prs_perslid_key=v_budgethouder_key  
								 WHERE prs_kostenplaats_key= v_prs_kostenplaats_key;
							END IF;	
							
							IF v_budgethouder_key<>-1 AND v_budgethouder_key<>v_afd_verantw_key
							THEN
								UPDATE prs_afdeling 
								   SET prs_perslid_key_verantw=v_budgethouder_key  
								 WHERE prs_afdeling_key= v_afdeling_key;
							END IF;
							 
						END IF;				
						
						
						--
						-- Moeten we de persoon ook nog een werkplek geven op de locatei vnd e afdelingen waar ze ondervalt
						
						
					EXCEPTION 
					WHEN NO_DATA_FOUND
					THEN
						fac.imp_writelog (
			                  p_import_key,
			                  'W',
			                  v_aanduiding || v_errormsg,
			                     'Kostenplaats/afdeling niet gevonden');
					END;
					
					
					-- ALs ik v_perslid_key heb en een v_afdeling_key en youforce_excl =0 update dan prs_perslid met de afdeling_key,
					IF v_perslid_key>0 AND v_afdeling_key>0 AND v_youforce_excl='0'
					THEN
								v_count:=v_count+1;
								UPDATE prs_perslid 
								   set prs_afdeling_key=v_afdeling_key
								 WHERE prs_perslid_key=v_perslid_key;
								
					END IF;
					
					FOR rec_aut IN aut(v_primary_kostcode)
					LOOP
                      SELECT COUNT(*)
                        INTO v_count
                                      FROM fac_gebruikersgroep
                                     WHERE     fac_groep_key = rec_aut.fac_groep_key 
                             AND prs_perslid_key = v_perslid_key;
                  
                        IF v_count=0 AND v_perslid_key >0 THEN
                             v_aanduiding := 'Fout bij toevoegen persoon '||v_perslid_key||' aan autorisatiegroep'|| rec_aut.fac_groep_key;
                             INSERT INTO fac_gebruikersgroep(fac_groep_key,
                                                             prs_perslid_key) 
                                                      VALUES(rec_aut.fac_groep_key,
                                                             v_perslid_key);
                                                      
                        END IF;	
					END LOOP;
						
					
			END IF;		
		END LOOP;
		
		fac.imp_writelog (p_import_key,
			                  'I',
			                  'Er zijn '||v_count||' personen geupdate',
			                     'Update info');
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;
/


-- MJOB elementen import van O-Prognose XML Object export
CREATE OR REPLACE PROCEDURE ster_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);
         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'
            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_alg_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));
                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
             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 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 = v_ins_srtdeel_code;

               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 := v_ins_srtdeel_code || '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,
                                 v_ins_srtdeel_code,
                                 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;

    -- We gaan nu de nummering van de objecten aanpassen. Ze hebben allemaal het hoogste bestaande nummer + 1 meegekregen.
    --v_alg_gebouw_code := 'Leeg'; Niet gebruiken bij STER want we lezen 1 gebouw per keer in.
--    v_ins_srtdeel_code := 'Leeg';
--
--    FOR rec IN c
--    LOOP
--        BEGIN
--            IF    rec.alg_gebouw_code <> v_alg_gebouw_code
--               OR rec.ins_srtdeel_code <> v_ins_srtdeel_code
--            THEN
--                v_ins_deel_volgnr :=
--                    FAC.safe_to_number (
--                        SUBSTR (rec.ins_deel_omschrijving, INSTR (rec.ins_deel_omschrijving, '-', 1) + 1, 100));
--                v_alg_gebouw_code := rec.alg_gebouw_code;
--                v_ins_srtdeel_code := rec.ins_srtdeel_code;
--            ELSE
--                v_ins_deel_volgnr := v_ins_deel_volgnr + 1;
--
--                UPDATE fac_imp_ins
--                   SET ins_deel_omschrijving =
--                              rec.ins_srtdeel_code
--                           || LPAD (v_ins_deel_volgnr, 3, '0')
--                 WHERE     ins_deel_externnr = rec.ins_deel_externnr
--                       AND alg_gebouw_code = v_alg_gebouw_code;
--            END IF;
--        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 ster_import_mjobelementen;
/

CREATE OR REPLACE PROCEDURE ster_update_mjobelementen (
    p_import_key   IN NUMBER)
IS

BEGIN
   fac_update_ins (p_import_key);
END;
/
-- EINE MJOB Elementen Import

CREATE OR REPLACE PROCEDURE ster_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_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_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);

         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'
            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
                 INTO v_alg_gebouw_code
                 FROM alg_gebouw g, alg_onrgoedkenmerk aok
                WHERE     g.alg_gebouw_verwijder IS NULL
                      AND aok.alg_onrgoed_key = g.alg_gebouw_key
                      AND aok.alg_onrgoed_niveau='G'
                      AND UPPER(aok.alg_onrgoedkenmerk_waarde) = UPPER(v_oprognose_gebouw_code);
            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 := 'Objectid kan niet gevonden worden';
            v_ins_deel_omschrijving := TRIM (v_ins_deel_omschrijving);
            IF v_ins_deel_omschrijving IS NOT NULL
            THEN
               BEGIN
                  SELECT 1
                    INTO v_dummy
                    FROM ins_v_deel_gegevens
                   WHERE UPPER(ins_deel_omschrijving) = UPPER(v_ins_deel_omschrijving)
                     AND 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 id '
                  );
                  v_ongeldig := 1;
               END;
            END IF;

            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)
                    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));

                  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 ster_import_mjobtaken;
/


CREATE OR REPLACE PROCEDURE ster_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
      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_srtcontroledl_xcp_startdat DATE;
   v_ins_srtcontroledl_xcp_aantal   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 alg_gebouw_key
              INTO v_alg_gebouw_key
              FROM alg_gebouw g
             WHERE alg_gebouw_verwijder IS NULL
               AND UPPER(alg_gebouw_code) = rec.alg_gebouw_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
                 INTO v_ins_deel_key, v_ins_srtdeel_key, v_ins_srtdeel_code, v_ins_deel_aantal
                 FROM ins_v_deel_gegevens dg, ins_srtdeel sd
                WHERE dg.ins_srtdeel_key = sd.ins_srtdeel_key
                  AND UPPER(dg.ins_deel_omschrijving) = UPPER(rec.ins_deel_omschrijving)
                  AND dg.alg_gebouw_upper = UPPER(rec.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 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_upper = UPPER(rec.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;

         -- 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
             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)
                  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)
             RETURNING ins_srtcontrole_key INTO v_ins_srtcontrole_key;
         END;
         
         -- 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 := ster.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 = FAC.safe_to_number(rec.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)
                  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),
                          FAC.safe_to_number(rec.ins_srtcontroledl_xcp_perc),
                          v_ins_srtcontroledl_xcp_startdat)
             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

-- Rapportage Views
CREATE OR REPLACE VIEW STER_V_MOB_MLD_NOTES
AS
		SELECT distinct m.mld_melding_key, 
           COALESCE(m.mld_melding_onderwerp,
                    (SELECT msm.mld_stdmelding_omschrijving 
                       FROM mld_stdmelding msm 
                      WHERE msm.mld_stdmelding_key=m.mld_stdmelding_key)) onderwerp,
           ms.mld_statuses_omschrijving status,
					 (SELECT TO_CHAR(MAX(mld_melding_note_aanmaak),'DD-MM-YYYY HH24:MI')
					    FROM mld_melding_note 
					   where mld_melding_key=m.mld_melding_key 
				  GROUP BY mld_melding_key)||'-'||
				   (SELECT *
	 				    FROM (SELECT mn.mld_melding_note_omschrijving||' ('||p.prs_perslid_naam_friendly||')' 
					            FROM mld_melding_note mn , prs_v_perslid_fullnames p
					           WHERE     mn.mld_melding_key=m.mld_melding_key 
					                 AND p.PRS_PERSLID_KEY = mn.PRS_PERSLID_KEY
					        ORDER BY mn.mld_melding_note_aanmaak desc)
					   WHERE ROWNUM = 1)  laatste_notitie
		 FROM mld_melding m, 
		      mld_melding_note mo, 
		      mld_statuses ms 
		WHERE     m.mld_melding_key = mo.mld_melding_key(+)
					AND ms.mld_statuses_key=m.mld_melding_status
					AND m.mld_melding_status IN (2,3,4,7) 
					ORDER BY mld_melding_key;

-- Lijst met meerdaagse uitleenbare objecten en status
CREATE OR REPLACE VIEW STER_V_UITLEENLIJST
(
  ins_deel_key,
  discipline,
  groep,
  soort,
  omschrijving,
  opmerking,
  uitgeleend,
  status,
  mld_url
)
AS
      SELECT i.ins_deel_key,
             id.ins_discipline_omschrijving,
             ig.ins_srtgroep_omschrijving,
             isd.ins_srtdeel_omschrijving,
             i.ins_deel_omschrijving,
             i.ins_deel_opmerking,
             DECODE (i.ins_alg_ruimte_key_org, NULL, 'Nee', 'Ja')    uigeleend,
             DECODE ((SELECT COUNT (*)
                    FROM mld_melding m, mld_melding_object mmo
                   WHERE     m.mld_stdmelding_key = msm.mld_stdmelding_key
                         AND mmo.mld_melding_key = m.mld_melding_key
                         AND mmo.ins_deel_key = i.ins_deel_key
                         AND m.mld_melding_status in (2,3,4)),1,'Gereserveerd', 'Beschikbaar') status,
              'appl/mld/mld_melding.asp?urole=fe'||CHR(38)||'mld_defaultstdmelding='||msm.mld_stdmelding_key||CHR(38)||'ins_key='||i.INS_DEEL_KEY mld_url           
        FROM ins_deel        i,
             ins_discipline  id,
             ins_srtgroep    ig,
             ins_srtdeel     isd,
             mld_stdmelding msm 
       WHERE     isd.ins_srtdeel_uitleenbaar = 1
             AND isd.ins_srtdeel_key = i.ins_srtdeel_key
             AND id.ins_discipline_key = ig.ins_discipline_key
             AND ig.ins_srtgroep_key = isd.ins_srtgroep_key
             AND msm.mld_stdmelding_code='RESERVEER';



--
-- Looplijst Cateraar
--
CREATE OR REPLACE VIEW ster_v_cat_reserveringincl
(
   key,
   nummer,
   res_omschrijving,
   invoerdatum,
   datum,
   gastheer,
   contact,
   gastheer_email,
   gastheer_telefoon,
   contact_email,
   contact_telefoon,
   invoerder,
   kostensoortgroep,
   kostensoort,
   kpn,
   kpn_omschrijving,
   kpn_extern,
   [REDACTED],
   divisie_naam,
   divisie_omschrijving,
   fclt_3d_afdeling_key,
   afdeling_code,
   afdeling_omschrijving,
   regio_omschrijving,
   district_omschijving,
   fclt_3d_locatie_key,
   locatie,
   locatie_omschrijving,
   locatie_plaats,
   gebouw,
   verdieping,
   ruimte,
   opstelling,
   capaciteit,
   no_show,
   mandaat,
   personeelsnr,
   [REDACTED],
   catalogus_key,
   catalogus,
   reserveerbare_ruimte,
   bezoekers,
   van,
   tot,
   duur,
   status,
   bostatus,
   activiteit,
   srtactiviteit_key,
   activiteitsoort,
   opmerking,
   voorziening_discipline_key,
   voorziening_type,
   voorziening_catalogus,
   leverancier,
   voorziening_product_key,
   voorziening_product,
   voorziening_totaalprijs,
   voorziening_totaalprijsex,
   voorziening_van,
   voorziening_tot,
   voorziening_aantal,
   voorziening_prijs,
   voorziening_opmerking,
   res_notitie
)
AS
   SELECT rrr.res_rsv_ruimte_key,
          res.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr,
          rrr.res_rsv_ruimte_omschrijving,
          COALESCE (rrr.res_rsv_ruimte_aanmaak, voorz.van),
          rrr.res_rsv_ruimte_van,
          (SELECT prs_perslid_naam_full
             FROM prs_v_perslid_fullnames_all pf
            WHERE pf.prs_perslid_key = rrr.res_rsv_ruimte_host_key),
          (SELECT prs_perslid_naam_full
             FROM prs_v_perslid_fullnames_all pf
            WHERE pf.prs_perslid_key = rrr.res_rsv_ruimte_contact_key),
          (SELECT ph.prs_perslid_email
             FROM prs_perslid ph
            WHERE ph.prs_perslid_key = rrr.res_rsv_ruimte_host_key),
          (SELECT ph.prs_perslid_telefoonnr
             FROM prs_perslid ph
            WHERE ph.prs_perslid_key = rrr.res_rsv_ruimte_host_key),
          (SELECT pc.prs_perslid_email
             FROM prs_perslid pc
            WHERE pc.prs_perslid_key = rrr.res_rsv_ruimte_contact_key),
          (SELECT pc.prs_perslid_telefoonnr
             FROM prs_perslid pc
            WHERE pc.prs_perslid_key = rrr.res_rsv_ruimte_contact_key),
          (SELECT pf.prs_perslid_naam_full
             FROM fac_tracking tr, fac_srtnotificatie str, prs_v_perslid_fullnames_all pf
            WHERE     tr.prs_perslid_key = pf.prs_perslid_key
                  AND str.fac_srtnotificatie_code = 'RESNEW'
                  AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key
                  AND tr.fac_tracking_refkey = rrr.res_rsv_ruimte_key),
          (SELECT ksg.prs_kostensoortgrp_oms
             FROM prs_kostensoortgrp ksg, prs_kostensoort ks
            WHERE ksg.prs_kostensoortgrp_key = ks.prs_kostensoortgrp_key
                  AND ks.prs_kostensoort_key =
                        (SELECT disc.prs_kostensoort_key
                           FROM res_discipline disc
                          WHERE disc.ins_discipline_key =
                                   COALESCE (
                                      voorz.ins_discipline_key,
                                      (SELECT ins_discipline_key
                                         FROM ins_tab_discipline d,
                                              res_ruimte_opstelling ro,
                                              res_ruimte rr
                                        WHERE rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                                              AND ro.res_ruimte_key = rr.res_ruimte_key
                                              AND rr.res_discipline_key = d.ins_discipline_key))))
             kostensoortgroep,
          (SELECT ks.prs_kostensoort_oms
             FROM prs_kostensoort ks
            WHERE ks.prs_kostensoort_key =
                     (SELECT disc.prs_kostensoort_key
                        FROM res_discipline disc
                       WHERE disc.ins_discipline_key =
                                COALESCE (
                                   voorz.ins_discipline_key,
                                   (SELECT ins_discipline_key
                                      FROM ins_tab_discipline d,
                                           res_ruimte_opstelling ro,
                                           res_ruimte rr
                                     WHERE     rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                                           AND ro.res_ruimte_key = rr.res_ruimte_key
                                           AND rr.res_discipline_key = d.ins_discipline_key))))
             kostensoort,
          k.prs_kostenplaats_nr,
          k.prs_kostenplaats_omschrijving,
          k.prs_kostenplaats_extern,
          an.prs_afdeling_key,
          an.prs_afdeling_naam,
          an.prs_afdeling_omschrijving,
          a.prs_afdeling_key,
          a.prs_afdeling_naam,
          a.prs_afdeling_omschrijving,
          (SELECT rg.alg_regio_omschrijving
             FROM alg_regio rg,
                  alg_district d,
                  alg_locatie l,
                  alg_gebouw g,
                  alg_verdieping v,
                  alg_ruimte r
            WHERE     rg.alg_regio_key = d.alg_regio_key
                  AND d.alg_district_key = l.alg_district_key
                  AND l.alg_locatie_key = g.alg_locatie_key
                  AND g.alg_gebouw_key = v.alg_gebouw_key
                  AND v.alg_verdieping_key = r.alg_verdieping_key
                  AND r.alg_ruimte_key = r2a.alg_ruimte_key),
          (SELECT d.alg_district_omschrijving
             FROM alg_district d,
                  alg_locatie l,
                  alg_gebouw g,
                  alg_verdieping v,
                  alg_ruimte r
            WHERE     d.alg_district_key = l.alg_district_key
                  AND l.alg_locatie_key = g.alg_locatie_key
                  AND g.alg_gebouw_key = v.alg_gebouw_key
                  AND v.alg_verdieping_key = r.alg_verdieping_key
                  AND r.alg_ruimte_key = r2a.alg_ruimte_key),
          (SELECT l.alg_locatie_key
             FROM alg_locatie l,
                  alg_gebouw g,
                  alg_verdieping v,
                  alg_ruimte r
            WHERE     l.alg_locatie_key = g.alg_locatie_key
                  AND g.alg_gebouw_key = v.alg_gebouw_key
                  AND v.alg_verdieping_key = r.alg_verdieping_key
                  AND r.alg_ruimte_key = r2a.alg_ruimte_key),
          (SELECT alg_locatie_code
             FROM alg_locatie l,
                  alg_gebouw g,
                  alg_verdieping v,
                  alg_ruimte r
            WHERE     l.alg_locatie_key = g.alg_locatie_key
                  AND g.alg_gebouw_key = v.alg_gebouw_key
                  AND v.alg_verdieping_key = r.alg_verdieping_key
                  AND r.alg_ruimte_key = r2a.alg_ruimte_key),
          (SELECT alg_locatie_omschrijving
             FROM alg_locatie l,
                  alg_gebouw g,
                  alg_verdieping v,
                  alg_ruimte r
            WHERE     l.alg_locatie_key = g.alg_locatie_key
                  AND g.alg_gebouw_key = v.alg_gebouw_key
                  AND v.alg_verdieping_key = r.alg_verdieping_key
                  AND r.alg_ruimte_key = r2a.alg_ruimte_key),
          (SELECT alg_locatie_plaats
             FROM alg_locatie l,
                  alg_gebouw g,
                  alg_verdieping v,
                  alg_ruimte r
            WHERE     l.alg_locatie_key = g.alg_locatie_key
                  AND g.alg_gebouw_key = v.alg_gebouw_key
                  AND v.alg_verdieping_key = r.alg_verdieping_key
                  AND r.alg_ruimte_key = r2a.alg_ruimte_key),
          (SELECT alg_gebouw_naam
             FROM alg_gebouw g, alg_verdieping v, alg_ruimte r
            WHERE     g.alg_gebouw_key = v.alg_gebouw_key
                  AND v.alg_verdieping_key = r.alg_verdieping_key
                  AND r.alg_ruimte_key = r2a.alg_ruimte_key),
          (SELECT alg_verdieping_code
             FROM alg_verdieping v, alg_ruimte r
            WHERE v.alg_verdieping_key = r.alg_verdieping_key
                  AND r.alg_ruimte_key = r2a.alg_ruimte_key),
          r2a.ruimte_nr,
          r2a.opstelling,
          r2a.capaciteit,
          rrr.res_rsv_ruimte_noshow,
          NVL ( (SELECT pr.fac_profiel_limiet
                   FROM fac_profiel pr
                  WHERE p.fac_profiel_key = pr.fac_profiel_key), 0),
          prs_perslid_nr,
          COALESCE (
             voorz.ins_discipline_key,
             (SELECT ins_discipline_key
                FROM ins_tab_discipline d, res_ruimte_opstelling ro, res_ruimte rr
               WHERE     rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                     AND ro.res_ruimte_key = rr.res_ruimte_key
                     AND rr.res_discipline_key = d.ins_discipline_key)),
          (SELECT ins_discipline_key
             FROM ins_tab_discipline d, res_ruimte_opstelling ro, res_ruimte rr
            WHERE     rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                  AND ro.res_ruimte_key = rr.res_ruimte_key
                  AND rr.res_discipline_key = d.ins_discipline_key),
          (SELECT ins_discipline_omschrijving
             FROM ins_tab_discipline d, res_ruimte_opstelling ro, res_ruimte rr
            WHERE     rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                  AND ro.res_ruimte_key = rr.res_ruimte_key
                  AND rr.res_discipline_key = d.ins_discipline_key),
          DECODE (rrr.alg_ruimte_key, NULL, 'Ja', 'Nee'),
          rrr.res_rsv_ruimte_bezoekers,
          rrr.res_rsv_ruimte_van,
          rrr.res_rsv_ruimte_tot,
          COALESCE ( (rrr.res_rsv_ruimte_tot - rrr.res_rsv_ruimte_van) * 24, 0),
          (SELECT res_status_fo_omschrijving
             FROM res_status_fo rs
            WHERE rs.res_status_fo_key = rrr.res_status_fo_key),
          (SELECT res_status_bo_omschrijving
             FROM res_status_bo rs
            WHERE rs.res_status_bo_key = rrr.res_status_bo_key),
          ra.res_activiteit_omschrijving,
          rsa.res_srtactiviteit_key,
          rsa.res_srtactiviteit_omschrijving,
          rrr.res_rsv_ruimte_opmerking,
          voorz.ins_discipline_key,
          voorz.vtype,
          voorz.catalogus,
          (SELECT prs_bedrijf_naam
             FROM res_disc_params rdp, prs_bedrijf b
            WHERE     rdp.prs_bedrijf_key = b.prs_bedrijf_key
                  AND rdp.res_ins_discipline_key = voorz.ins_discipline_key),
          voorz.product_key,
          voorz.product,
          voorz.totaalprijs,
          voorz.totaalprijs_ex,
          TO_CHAR (voorz.van, 'hh24:mi'),
          TO_CHAR (voorz.tot, 'hh24:mi'),
          voorz.aantal,
          ROUND(voorz.prijs,2),
          (SELECT rk.res_kenmerkartikel_waarde
             FROM res_kenmerkartikel rk
            WHERE rk.res_rsv_artikel_key=voorz.rrr_dl_art_key
              AND rk.res_kenmerkartikel_verwijder IS NULL) voorz_opm,
          (SELECT rkw.res_kenmerkreservering_waarde 
             FROM res_kenmerk rk, res_srtkenmerk rsk, res_kenmerkwaarde rkw
            WHERE rk.res_srtkenmerk_key = rsk.res_srtkenmerk_key
                and rsk.res_srtkenmerk_code='NOTES'
                AND rk.res_activiteit_key=ra.res_activiteit_key
                AND rkw.res_kenmerk_key = rk.res_kenmerk_key
                AND rkw.res_rsv_ruimte_key=rrr.res_rsv_ruimte_key
                AND rk.res_kenmerk_verwijder IS NULL) res_notitie    
     FROM res_v_aanwezigrsv_ruimte rrr,
          res_activiteit ra,
          res_srtactiviteit rsa,
          res_reservering res,
          prs_kostenplaats k,
          prs_perslid p,
          prs_afdeling a,
          prs_afdeling an,
          prs_v_afdeling_boom ab,
          (  SELECT res_rsv_ruimte_key,
                    MAX (o.res_opstelling_omschrijving) opstelling,
                    MAX (ro.res_ruimte_opstel_bezoekers) capaciteit,
                    MAX (ra.alg_ruimte_key) alg_ruimte_key,
                    MAX (rr.res_ruimte_nr) ruimte_nr
               FROM res_rsv_ruimte r,
                    res_ruimte_opstelling ro,
                    res_opstelling o,
                    res_ruimte rr,
                    res_alg_ruimte ra
              WHERE     r.res_rsv_ruimte_verwijder IS NULL
                    AND r.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                    AND ro.res_ruimte_key = rr.res_ruimte_key
                    AND ro.res_opstelling_key = o.res_opstelling_key
                    AND rr.res_ruimte_key = ra.res_ruimte_key
           GROUP BY res_rsv_ruimte_key
           UNION ALL
           SELECT res_rsv_ruimte_key,
                  '' opstelling,
                  NULL capaciteit,
                  rrr.alg_ruimte_key,
                  r.alg_ruimte_nr
             FROM res_rsv_ruimte rrr, alg_ruimte r
            WHERE rrr.alg_ruimte_key IS NOT NULL AND r.alg_ruimte_key = rrr.alg_ruimte_key) r2a,
          (SELECT rrd.res_rsv_ruimte_key res_rsv_ruimte_key,
                  null rrr_dl_art_key,
                  rd.res_deel_key product_key,
                  rd.res_deel_omschrijving product,
                  DECODE (
                     rd.res_deel_prijs_vast,
                     1,
                     NVL (rrd.res_rsv_deel_prijs, rd.res_deel_prijs),
                       (rrd.res_rsv_deel_tot - rrd.res_rsv_deel_van)
                     * 24
                     * NVL (rrd.res_rsv_deel_prijs, rd.res_deel_prijs))
                     totaalprijs,
                  NULL totaalprijs_ex,
                  rrd.res_rsv_deel_van van,
                  rrd.res_rsv_deel_tot tot,
                  (rrd.res_rsv_deel_tot - rrd.res_rsv_deel_van) * 24 aantal,
                  NVL (rrd.res_rsv_deel_prijs, rd.res_deel_prijs) prijs,
                  c.ins_discipline_key ins_discipline_key,
                  c.ins_discipline_omschrijving catalogus,
                  'object' vtype
             FROM res_v_aanwezigrsv_deel rrd,
                  res_deel rd,
                  ins_deel d,
                  ins_tab_discipline c
            WHERE     rrd.res_deel_key = rd.res_deel_key
                  AND d.ins_deel_key = rd.res_ins_deel_key
                  AND rrd.res_rsv_ruimte_key IS NOT NULL
                  AND c.ins_discipline_key = rd.res_discipline_key
           UNION ALL
           SELECT rra.res_rsv_ruimte_key res_rsv_ruimte_key,
                  rra.res_rsv_artikel_key rrr_dl_art_key,
                  ra.res_artikel_key product_key,
                  COALESCE(rra.res_rsv_artikel_omschrijving,ra.res_artikel_omschrijving) product,
                  NVL (rra.res_rsv_artikel_prijs, rra.res_rsv_artikel_aantal * res_artikel_prijs)
                     totaalprijs,
                  NVL (rra.res_rsv_artikel_prijs/(1+NVL(res_artikel_btw/100,0)), rra.res_rsv_artikel_aantal * res_artikel_prijs/(1+NVL(res_artikel_btw/100,0)))
                     totaalprijs_ex,
                  rra.res_rsv_artikel_levering van,
                  NULL tot,
                  rra.res_rsv_artikel_aantal aantal,
                  NVL (rra.res_rsv_artikel_prijs / rra.res_rsv_artikel_aantal, res_artikel_prijs)
                     prijs,
                  c.ins_discipline_key ins_discipline_key,
                  c.ins_discipline_omschrijving catalogus,
                  'consumable' vtype
             FROM res_v_aanwezigrsv_artikel rra, res_artikel ra, ins_tab_discipline c
            WHERE rra.res_artikel_key = ra.res_artikel_key
                  AND ra.res_discipline_key = c.ins_discipline_key) voorz
    WHERE     rrr.res_reservering_key = res.res_reservering_key
          AND rrr.res_rsv_ruimte_key = r2a.res_rsv_ruimte_key(+)
          AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
          AND rrr.res_rsv_ruimte_key = voorz.res_rsv_ruimte_key
          AND rrr.res_activiteit_key = ra.res_activiteit_key
          AND ra.res_srtactiviteit_key = rsa.res_srtactiviteit_key
          AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
          AND p.prs_afdeling_key = a.prs_afdeling_key
          AND p.prs_afdeling_key = ab.prs_afdeling_key
          AND ab.prs_afdeling_key1 = an.prs_afdeling_key
          AND (rrr.res_ruimte_opstel_key IS NOT NULL OR voorz.res_rsv_ruimte_key IS NOT NULL)
          AND rrr.res_rsv_ruimte_van >= TO_DATE ('01-01-2010', 'DD-MM-YYYY');


CREATE OR REPLACE VIEW STER_V_MELDING_BEHANDELTEAM
AS
		SELECT m.mld_melding_key,
          l.alg_locatie_omschrijving
       || '-'
       || a.alg_gebouw_naam
       || ' '
       || a.alg_ruimte_nr                                      locatie,
       m.mld_melding_onderwerp                                 onderwerp,
       TO_CHAR (SUBSTR (m.mld_melding_omschrijving, 1, 50))    omschrijving,
       vg.ins_discipline_omschrijving                          behandelteam,
       p.prs_perslid_naam_friendly                             aanvrager,
       ms.mld_statuses_omschrijving														 status
  FROM mld_melding                   m,
       mld_discipline                vg,
       alg_v_onroerendgoed_gegevens  a,
       alg_locatie                   l,
       prs_v_perslid_fullnames       p,
       mld_statuses                  ms
 WHERE     m.mld_melding_status = ms.mld_statuses_key
       AND ms.mld_statuses_omschrijving IN ('Nieuw', 'In behandeling')
       AND vg.ins_discipline_key(+) = m.mld_ins_discipline_key
       AND a.alg_onroerendgoed_keys(+) = m.mld_alg_onroerendgoed_keys
       AND l.alg_locatie_key = a.alg_locatie_key
       AND p.prs_perslid_key = m.prs_perslid_key;

CREATE OR REPLACE VIEW STER_V_NOTI_RES_REMINDER
(
  key,
  code,
  sender,
  receiver,
  text,
  xkey,
  xemail,
  xmobile
)
AS
    SELECT rrr.res_rsv_ruimte_key key,
           'CUST01' code,
           NULL sender,
           rrr.res_rsv_ruimte_contact_key receiver,
           'Herinnering van je reservering '||rrr.res_reservering_key||'/'||rrr.RES_RSV_RUIMTE_VOLGNR||' op '||TO_CHAR(rrr.res_rsv_ruimte_van,'DD-MM-YYYY')||' om '||TO_CHAR(rrr.res_rsv_ruimte_van,'HH24:MI') text,
           NULL xkey,
           NULL xemail,
           NULL xmobile
      FROM res_rsv_ruimte rrr
     WHERE     FAC.count_Work_Days (SYSDATE, rrr.res_rsv_ruimte_van) = 2
           AND FAC.count_Work_Days (rrr.res_rsv_ruimte_aanmaak, SYSDATE) >= 0 -- als kort van te voren (2 dagen) aangemaakt dan sturen we geen noti
           AND rrr.res_activiteit_key IN (170,171)  -- Alleen reservering uit Outlook
           AND rrr.res_rsv_ruimte_verwijder IS NULL
           AND NOT EXISTS
                   (SELECT 1
                      FROM fac_tracking t
                     WHERE     t.fac_srtnotificatie_key = 228
                           AND t.fac_tracking_refkey = rrr.res_rsv_ruimte_key
                           AND t.fac_tracking_oms LIKE '%CUST01%');

CREATE OR REPLACE VIEW STER_V_CATERING_NOTI
(
   xkey,
   key,
   code,
   sender,
   receiver,
   text,   
   xemail,
   xmobile
)
AS 
         SELECT distinct rrr.res_rsv_ruimte_key xkey,
                rrr.res_reservering_key key,
                'CUST03' code,
                NULL  sender,
                NULL  receiver,
                'Catering voor reservering '||res_reservering_key||'/'||rrr.res_rsv_ruimte_volgnr||' is nieuw of gewijzigd.' text,
                'catering@sterkhuis.nl' xemail,
                NULL xmobile
           FROM res_rsv_ruimte                rrr,
                res_rsv_artikel               rra,
                res_artikel                   ra,                
                fac_notificatie_job           fnj
          WHERE     rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                AND ra.res_artikel_key = rra.res_artikel_key 
                AND rrr.res_status_fo_key=2
                AND rrr.res_rsv_ruimte_verwijder IS NULL
                AND rrr.res_rsv_ruimte_dirtlevel=0
                AND fnj.fac_notificatie_job_view='STER_V_CATERING_NOTI'
                AND COALESCE(rra.res_rsv_artikel_mutatie, rra.res_rsv_artikel_aanmaak) > COALESCE(fnj.fac_notificatie_job_lastrun, SYSDATE)
         UNION
         SELECT distinct rrr.res_rsv_ruimte_key xkey,
                   rrr.res_reservering_key key,
                   'CUST03' code,
                   NULL  sender,
                   NULL  receiver,
                   'Reservering '||res_reservering_key||'/'||rrr.res_rsv_ruimte_volgnr||' met catering is verwijderd.' text,
                   'catering@sterkhuis.nl' xemail,
                   NULL xmobile
           FROM res_rsv_ruimte                rrr,
                res_rsv_artikel               rra,
                res_artikel                   ra,                
                fac_notificatie_job           fnj
          WHERE     rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                AND ra.res_artikel_key = rra.res_artikel_key             
                AND rrr.res_rsv_ruimte_verwijder IS NOT NULL
                AND rrr.res_rsv_ruimte_dirtlevel=0
                AND fnj.fac_notificatie_job_view='STER_V_CATERING_NOTI'
                AND rrr.res_rsv_ruimte_verwijder > COALESCE(fnj.fac_notificatie_job_lastrun, SYSDATE)
         UNION
         SELECT distinct rrr.res_rsv_ruimte_key xkey,
                rrr.res_reservering_key key,
                'CUST03' code,
                NULL  sender,
                NULL  receiver,
                'Catering artikel bij '||res_reservering_key||'/'||rrr.res_rsv_ruimte_volgnr||' is verwijderd.' text,
                'catering@sterkhuis.nl' xemail,
                NULL xmobile                
           FROM res_rsv_ruimte                rrr,
                res_rsv_artikel               rra,
                res_artikel                   ra,                
                fac_notificatie_job           fnj
         WHERE     rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key 
                AND ra.res_artikel_key = rra.res_artikel_key             
                AND rrr.res_status_fo_key=2
                AND rrr.res_rsv_ruimte_verwijder IS NULL
                AND rrr.res_rsv_ruimte_dirtlevel=0
                AND fnj.fac_notificatie_job_view='STER_V_CATERING_NOTI'
                AND COALESCE(fnj.fac_notificatie_job_lastrun, SYSDATE) < (SELECT MIN(fac_tracking_datum) 
                                                                            FROM fac_tracking 
                                                                           WHERE     fac_tracking_refkey=rrr.res_rsv_ruimte_key 
                                                                                 AND UPPER(fac_tracking_oms) like '%ARTIKEL%VERWIJDERD'); 
         




------ 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

