--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database

DEFINE thisfile = 'CONN.SQL'
DEFINE dbuser   = 'CONN'

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 FORCE VIEW conn_v_bes_diesel
(
   aanvraagnr,
   aantal,
   omschrijving,
   fclt_d_datum,
   fclt_f_afleveradres
)
AS
   SELECT   b.bes_bestelling_key,
            bi.bes_bestelling_item_aantal,
            d.bes_srtdeel_omschrijving,
            TO_CHAR (b.bes_bestelling_leverdatum, 'dd-mm-yyyy'),
            a.mld_adres_naam
     FROM   mld_adres a, bes_discipline d, bes_srtgroep g, bes_srtdeel d, bes_bestelling_item bi, bes_bestelling b
    WHERE       d.ins_discipline_key = g.ins_discipline_key
            AND g.bes_srtgroep_key = d.bes_srtgroep_key
            AND bi.bes_srtdeel_key = d.bes_srtdeel_key
            AND bi.bes_bestelling_key = b.bes_bestelling_key
            AND d.ins_discipline_key = 1442
            AND b.mld_adres_key_lev = a.mld_adres_key
            AND b.bes_bestelling_status <> 1;

--CONN#12801
CREATE OR REPLACE VIEW conn_v_gebruikers_groep_email (fclt_groep,
                                                      fclt_naam,
                                                      email
                                                     )
AS
   SELECT g.fac_groep_omschrijving, prs_perslid_naam_full, prs_perslid_email
     FROM fac_gebruikersgroep gg,
          prs_perslid p,
          prs_v_perslid_fullnames_all pf,
          fac_groep g
    WHERE p.prs_perslid_key = gg.prs_perslid_key
      AND p.prs_perslid_key = pf.prs_perslid_key
      AND gg.fac_groep_key = g.fac_groep_key;


--CONN#791
CREATE OR REPLACE VIEW conn_v_halte_gegevens (fclt_f_concessies,
                                              haltecode,
                                              plaatsnaam,
                                              haltenaam,
                                              infobusstation,
                                              infohalte,
                                              passerendelijnen
                                             )
AS
   SELECT (SELECT ud.fac_usrdata_omschr
             FROM fac_usrdata ud, ins_kenmerkdeel kd
            WHERE ud.fac_usrdata_key = kd.ins_kenmerkdeel_waarde
              AND kd.ins_kenmerkdeel_verwijder IS NULL
              AND kd.ins_deel_key = d.ins_deel_key
              AND kd.ins_kenmerk_key = 562) concessies,
          (SELECT ins_kenmerkdeel_waarde
             FROM ins_kenmerkdeel kd
            WHERE kd.ins_kenmerkdeel_verwijder IS NULL
              AND kd.ins_deel_key = d.ins_deel_key
              AND kd.ins_kenmerk_key = 501) haltecode,
          (SELECT ins_kenmerkdeel_waarde
             FROM ins_kenmerkdeel kd
            WHERE kd.ins_kenmerkdeel_verwijder IS NULL
              AND kd.ins_deel_key = d.ins_deel_key
              AND kd.ins_kenmerk_key = 502) plaatsnaam,
          (SELECT ins_kenmerkdeel_waarde
             FROM ins_kenmerkdeel kd
            WHERE kd.ins_kenmerkdeel_verwijder IS NULL
              AND kd.ins_deel_key = d.ins_deel_key
              AND kd.ins_kenmerk_key = 504) haltenaam,
             (SELECT ud.fac_usrdata_omschr
                FROM fac_usrdata ud, ins_kenmerkdeel kd
               WHERE ud.fac_usrdata_key =
                                      kd.ins_kenmerkdeel_waarde
                 AND kd.ins_kenmerkdeel_verwijder IS NULL
                 AND kd.ins_deel_key = d.ins_deel_key
                 AND kd.ins_kenmerk_key = 509)
          || ' , '
          || (SELECT ud.fac_usrdata_omschr
                FROM fac_usrdata ud, ins_kenmerkdeel kd
               WHERE ud.fac_usrdata_key = kd.ins_kenmerkdeel_waarde
                 AND kd.ins_kenmerkdeel_verwijder IS NULL
                 AND kd.ins_deel_key = d.ins_deel_key
                 AND kd.ins_kenmerk_key = 510)
          || ' , '
          || (SELECT ud.fac_usrdata_omschr
                FROM fac_usrdata ud, ins_kenmerkdeel kd
               WHERE ud.fac_usrdata_key = kd.ins_kenmerkdeel_waarde
                 AND kd.ins_kenmerkdeel_verwijder IS NULL
                 AND kd.ins_deel_key = d.ins_deel_key
                 AND kd.ins_kenmerk_key = 511)
          || ' , '
          || (SELECT ud.fac_usrdata_omschr
                FROM fac_usrdata ud, ins_kenmerkdeel kd
               WHERE ud.fac_usrdata_key = kd.ins_kenmerkdeel_waarde
                 AND kd.ins_kenmerkdeel_verwijder IS NULL
                 AND kd.ins_deel_key = d.ins_deel_key
                 AND kd.ins_kenmerk_key = 512)
          || ' , '
          || (SELECT ud.fac_usrdata_omschr
                FROM fac_usrdata ud, ins_kenmerkdeel kd
               WHERE ud.fac_usrdata_key = kd.ins_kenmerkdeel_waarde
                 AND kd.ins_kenmerkdeel_verwijder IS NULL
                 AND kd.ins_deel_key = d.ins_deel_key
                 AND kd.ins_kenmerk_key = 513)
          || ' , '
          || (SELECT ud.fac_usrdata_omschr
                FROM fac_usrdata ud, ins_kenmerkdeel kd
               WHERE ud.fac_usrdata_key = kd.ins_kenmerkdeel_waarde
                 AND kd.ins_kenmerkdeel_verwijder IS NULL
                 AND kd.ins_deel_key = d.ins_deel_key
                 AND kd.ins_kenmerk_key = 514) infopaneelbus,
             (SELECT ud.fac_usrdata_omschr
                FROM fac_usrdata ud, ins_kenmerkdeel kd
               WHERE ud.fac_usrdata_key =
                                    kd.ins_kenmerkdeel_waarde
                 AND kd.ins_kenmerkdeel_verwijder IS NULL
                 AND kd.ins_deel_key = d.ins_deel_key
                 AND kd.ins_kenmerk_key = 516)
          || ' , '
          || (SELECT ud.fac_usrdata_omschr
                FROM fac_usrdata ud, ins_kenmerkdeel kd
               WHERE ud.fac_usrdata_key = kd.ins_kenmerkdeel_waarde
                 AND kd.ins_kenmerkdeel_verwijder IS NULL
                 AND kd.ins_deel_key = d.ins_deel_key
                 AND kd.ins_kenmerk_key = 517)
          || ' , '
          || (SELECT ud.fac_usrdata_omschr
                FROM fac_usrdata ud, ins_kenmerkdeel kd
               WHERE ud.fac_usrdata_key = kd.ins_kenmerkdeel_waarde
                 AND kd.ins_kenmerkdeel_verwijder IS NULL
                 AND kd.ins_deel_key = d.ins_deel_key
                 AND kd.ins_kenmerk_key = 518)
          || ' , '
          || (SELECT ud.fac_usrdata_omschr
                FROM fac_usrdata ud, ins_kenmerkdeel kd
               WHERE ud.fac_usrdata_key = kd.ins_kenmerkdeel_waarde
                 AND kd.ins_kenmerkdeel_verwijder IS NULL
                 AND kd.ins_deel_key = d.ins_deel_key
                 AND kd.ins_kenmerk_key = 519)
          || ' , '
          || (SELECT ud.fac_usrdata_omschr
                FROM fac_usrdata ud, ins_kenmerkdeel kd
               WHERE ud.fac_usrdata_key = kd.ins_kenmerkdeel_waarde
                 AND kd.ins_kenmerkdeel_verwijder IS NULL
                 AND kd.ins_deel_key = d.ins_deel_key
                 AND kd.ins_kenmerk_key = 520)
          || ' , '
          || (SELECT ud.fac_usrdata_omschr
                FROM fac_usrdata ud, ins_kenmerkdeel kd
               WHERE ud.fac_usrdata_key = kd.ins_kenmerkdeel_waarde
                 AND kd.ins_kenmerkdeel_verwijder IS NULL
                 AND kd.ins_deel_key = d.ins_deel_key
                 AND kd.ins_kenmerk_key = 521) infopaneelhalte,
          (SELECT ins_kenmerkdeel_waarde
             FROM ins_kenmerkdeel kd
            WHERE kd.ins_kenmerkdeel_verwijder IS NULL
              AND kd.ins_deel_key = d.ins_deel_key
              AND kd.ins_kenmerk_key = 601) passerendelijnen
     FROM ins_deel d
    WHERE ins_srtdeel_key = 43401 AND ins_deel_verwijder IS NULL;





-- CONN#435
CREATE OR REPLACE VIEW CONN_V_LEV_SCHOONMAAK
(PRS_BEDRIJF_KEY, PRS_BEDRIJF_NAAM)
AS
SELECT DISTINCT prs_bedrijf.PRS_BEDRIJF_KEY,prs_bedrijf.PRS_BEDRIJF_NAAM
FROM prs_bedrijf, prs_bedrijfdienstlocatie
WHERE prs_bedrijf.prs_bedrijf_verwijder IS NULL
  AND prs_bedrijf.prs_bedrijf_key = prs_bedrijfdienstlocatie.prs_bedrijf_key
  AND prs_bedrijfdienstlocatie.prs_dienst_key = 129 ;



/* Formatted on 2006/09/01 16:21 (Formatter Plus v4.8.5) */
CREATE OR REPLACE VIEW conn_v_bedrijf_gegevens
AS
   SELECT b.prs_bedrijf_key, prs_bedrijf_naam, prs_bedrijf_naam_upper,
          prs_bedrijf_post_adres, prs_bedrijf_post_postcode,
          prs_bedrijf_post_plaats, prs_bedrijf_bezoek_adres,
          prs_bedrijf_bezoek_postcode, prs_bedrijf_bezoek_plaats,
          prs_bedrijf_telefoon, prs_bedrijf_fax, prs_bedrijf_contact_persoon,
          prs_bedrijf_contact_telefoon, prs_bedrijf_contact_fax,
          prs_bedrijf_opmerking, prs_bedrijf_uurloon, prs_leverancier_nr,
          prs_overeenkomst_nr, prs_overeenkomst_datum, prs_bedrijf_aanmaak,
          prs_bedrijf_verwijder, prs_bedrijf_leverancier,
          prs_bedrijf_uitvoerende, prs_bedrijf_contract, prs_bedrijf_email,
          a.prs_bedrijfadres_xsl, a.prs_bedrijfadres_url, prs_bedrijf_image_loc,
          prs_bedrijf_details_loc, mld_adres_key_lev, mld_adres_key_fac,
          prs_bedrijf_bezoek_land, prs_bedrijf_post_land,
          prs_bedrijf_telefoon2, prs_bedrijf_opmerking2, prs_bedrijf_intern,
          prs_bedrijf_huurder, prs_bedrijf_ingids,
          SUBSTR (b.prs_leverancier_nr,
                  INSTR (b.prs_leverancier_nr, '/') + 1
                 ) huurdernr,
          SUBSTR (b.prs_leverancier_nr,
                  1,
                  INSTR (b.prs_leverancier_nr, '/') - 1
                 ) budgetcode
     FROM prs_bedrijf b
        , prs_bedrijfadres a
    WHERE b.prs_bedrijf_key = a.prs_bedrijf_key
      AND a.prs_bedrijfadres_type = 'B'
      AND b.prs_bedrijf_verwijder IS NULL;



--
-- CONN#460
--
CREATE OR REPLACE PACKAGE CONN_RAP AS
  -- PACKAGES voor de Connexxion specifieke rapportages
  TYPE t_cursor IS REF CURSOR;
  FUNCTION FindNearestSampleValue(p_ins_deel_key IN NUMBER,p_ins_kenmerk_key IN NUMBER ,p_sample_date IN DATE) RETURN NUMBER;
  FUNCTION FindNearestSampleDate(p_ins_deel_key IN NUMBER,p_ins_kenmerk_key IN NUMBER ,p_sample_date IN DATE) RETURN DATE;
  PROCEDURE conn_p_verbruik (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
  PROCEDURE conn_p_bes_div_cat (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
 END;
/

CREATE OR REPLACE PACKAGE BODY CONN_RAP AS
  --
  -- Algemene procedures en functies.
  --
  --
  FUNCTION FindNearestSampleDate(p_ins_deel_key IN NUMBER
                            ,p_ins_kenmerk_key IN NUMBER
                            ,p_sample_date IN DATE
                            ) RETURN DATE IS
    v_waarde DATE;
  BEGIN
    SELECT waarde
	  INTO v_waarde
      FROM (
	      SELECT ins_kenmerkdeel_aanmaak waarde
            FROM ins_kenmerkdeel skd
           WHERE skd.ins_kenmerk_key = p_ins_kenmerk_key
             AND skd.ins_deel_key = p_ins_deel_key
	       ORDER BY ABS(p_sample_date - skd.INS_KENMERKDEEL_AANMAAK)
		   )
     WHERE ROWNUM = 1;
    RETURN v_waarde;
  END;
  --
  FUNCTION FindNearestSampleValue(p_ins_deel_key IN NUMBER
                            ,p_ins_kenmerk_key IN NUMBER
                            ,p_sample_date IN DATE
                            ) RETURN NUMBER IS
    v_waarde NUMBER;
  BEGIN
    SELECT FAC.safe_to_number(waarde)
	  INTO v_waarde
      FROM (
	      SELECT ins_kenmerkdeel_waarde waarde
            FROM ins_kenmerkdeel skd
           WHERE skd.ins_kenmerk_key = p_ins_kenmerk_key
             AND skd.ins_deel_key = p_ins_deel_key
	       ORDER BY ABS(p_sample_date - skd.INS_KENMERKDEEL_AANMAAK)
		   )
     WHERE ROWNUM = 1;
    RETURN v_waarde;
  END;
  --
  PROCEDURE conn_p_verbruik (user_key IN NUMBER
                            ,p_datum_van IN VARCHAR2, -- Let wel: formaat '13-05-2005'
                             p_datum_tot IN VARCHAR2,
                             p_cursor OUT t_cursor) AS
    v_datum_van  DATE;
    v_datum_tot  DATE;
	v_alg_level_read NUMBER;
  BEGIN
    v_datum_van := fac.safe_to_date(p_datum_van, 'dd-mm-yyyy');
    v_datum_tot := fac.safe_to_date(p_datum_tot, 'dd-mm-yyyy');

    SELECT MIN(fac_gebruiker_alg_level_read)
      INTO v_alg_level_read
      FROM fac_v_webgebruiker
     WHERE prs_perslid_key = user_key
       AND fac_functie_key = 242; -- WEB_OBJUSE

    IF v_alg_level_read = -1 THEN

      OPEN p_cursor FOR
        SELECT alg_locatie_code code,
		       alg_locatie_omschrijving naam,
			   ins_deel_omschrijving meter,
			   FindNearestSampleValue(res.ins_deel_key ,res.ins_kenmerk_key, v_datum_tot) -
               FindNearestSampleValue(res.ins_deel_key ,res.ins_kenmerk_key, v_datum_van) verbruik,
               to_char(FindNearestSampleDate(res.ins_deel_key ,res.ins_kenmerk_key, v_datum_van),'dd-mm-yyyy hh24:mi') begin_datum,
			   FindNearestSampleValue(res.ins_deel_key ,res.ins_kenmerk_key, v_datum_van) begin_waarde,
			   to_char(FindNearestSampleDate(res.ins_deel_key ,res.ins_kenmerk_key, v_datum_tot),'dd-mm-yyyy hh24:mi') eind_datum,
			   FindNearestSampleValue(res.ins_deel_key ,res.ins_kenmerk_key, v_datum_tot) eind_waarde
          FROM (
		      SELECT DISTINCT
			         d.ins_deel_key,
					 k.ins_kenmerk_key,
					 ins_deel_omschrijving,
					 alg_locatie_key,
					 alg_locatie_omschrijving,
					 alg_locatie_code
	            FROM ins_v_aanwezigsrtdeel sd,
                     ins_v_aanwezigdeel d,
                     ins_kenmerkdeel kd,
                     ins_kenmerk k,
                     ins_srtkenmerk sk,
                     alg_locatie l
               WHERE sd.ins_srtdeel_key = d.ins_srtdeel_key
                AND d.ins_deel_key = kd.ins_deel_key
                AND d.ins_alg_locatie_key = l.alg_locatie_key
                AND kd.ins_kenmerk_key = k.ins_kenmerk_key
                AND k.ins_kenmerk_verwijder IS NULL
                AND k.ins_kenmerk_meetwaarde = 1
                AND sk.INS_SRTKENMERK_KENMERKTYPE = 'N'
                AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
			    ) res
	      ORDER BY code;
    ELSE -- We moeten echte autorisatie controleren
      OPEN p_cursor FOR
        SELECT alg_locatie_code code,
		       alg_locatie_omschrijving naam,
			   ins_deel_omschrijving meter,
			   FindNearestSampleValue(res.ins_deel_key ,res.ins_kenmerk_key, v_datum_tot) -
                  FindNearestSampleValue(res.ins_deel_key ,res.ins_kenmerk_key, v_datum_van) verbruik,
			   to_char(FindNearestSampleDate(res.ins_deel_key ,res.ins_kenmerk_key, v_datum_van),'dd-mm-yyyy hh24:mi') begin_datum,
			   FindNearestSampleValue(res.ins_deel_key ,res.ins_kenmerk_key, v_datum_van) begin_waarde,
			   to_char(FindNearestSampleDate(res.ins_deel_key ,res.ins_kenmerk_key, v_datum_tot),'dd-mm-yyyy hh24:mi') eind_datum,
			   FindNearestSampleValue(res.ins_deel_key ,res.ins_kenmerk_key, v_datum_tot) eind_waarde
          FROM (
		    SELECT DISTINCT
			       d.ins_deel_key,
				   k.ins_kenmerk_key,
				   ins_deel_omschrijving,
				   alg_locatie_key,
				   alg_locatie_omschrijving,
				   alg_locatie_code
	          FROM ins_v_aanwezigsrtdeel sd,
                   ins_v_aanwezigdeel d,
                   ins_kenmerkdeel kd,
                   ins_kenmerk k,
                   ins_srtkenmerk sk,
	        	   alg_locatie l
             WHERE sd.ins_srtdeel_key = d.ins_srtdeel_key
               AND d.ins_deel_key = kd.ins_deel_key
	           AND d.INS_ALG_LOCATIE_KEY = l.alg_locatie_key
               AND kd.ins_kenmerk_key = k.ins_kenmerk_key
               AND k.ins_kenmerk_verwijder IS NULL
               AND k.ins_kenmerk_volgnummer >= 100
               AND sk.INS_SRTKENMERK_KENMERKTYPE = 'N'
               AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
	           AND alg_locatie_key IN (
			       SELECT alg_locatie_key
				     FROM fac_v_my_locations
					WHERE PRS_PERSLID_KEY = user_key
					  AND niveau = v_alg_level_read
					      )
                ) res
	       ORDER BY code;
	END IF;
  END;
  --
  PROCEDURE conn_p_bes_div_cat ( user_key IN NUMBER,
                                 p_datum_van IN VARCHAR2, -- Let wel: formaat '01-01-2015'
                                 p_datum_tot IN VARCHAR2,
                                 p_cursor OUT t_cursor) AS
  BEGIN

    OPEN p_cursor FOR
      SELECT   a.prs_afdeling_parent_oms divisie,
               dis.ins_discipline_omschrijving catalogus,
               COUNT (b.bes_bestelling_key) aantal_aanvragen,
               SUM (COALESCE (boi.bes_bestelopdr_item_prijs, 0) * bi.bes_bestelling_item_aantal
                   ) totaalbedrag
          FROM BES_BESTELLING b,
               BES_BESTELLING_ITEM bi,
               bes_srtDEEL sd,
               bes_srtGROEP sg,
               INS_TAB_DISCIPLINE dis,
               bes_bestelopdr_item boi,
               (SELECT p.prs_perslid_key,
                       a.prs_afdeling_omschrijving prs_afdeling_parent_oms
                  FROM prs_v_afdeling_boom ab, PRS_AFDELING a, PRS_PERSLID p
                 WHERE ab.prs_afdeling_key1 = a.prs_afdeling_key
                   AND p.prs_afdeling_key = ab.prs_afdeling_key) a
         WHERE bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
           AND b.bes_bestelling_datum >= Fac.safe_to_date(p_datum_van, 'dd-mm-yyyy')
           AND b.bes_bestelling_datum < Fac.safe_to_date(p_datum_tot, 'dd-mm-yyyy')
           AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
           AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
           AND sg.ins_discipline_key = dis.ins_discipline_key
           AND b.bes_bestelling_status <> 1
           AND bi.bes_bestelling_key = b.bes_bestelling_key
           AND b.bes_bestelling_module = 'BES'
           AND a.prs_perslid_key = b.prs_perslid_key
      GROUP BY a.prs_afdeling_parent_oms, dis.ins_discipline_omschrijving
      ORDER BY 1,2;

  END;
  --
END;
/

show errors;

--
-- CONN #451
--
/* Formatted on 11-6-2010 16:45:48 (QP5 v5.136.908.31019) */
CREATE OR REPLACE FORCE VIEW conn_v_bestelopdr_gegevens
(
   hide_f_opdracht,
   datum,
   fclt_f_opdrnr,
   fclt_f_naam,
   telefoon,
   fclt_f_status
)
AS
   SELECT   DISTINCT bo.bes_bestelopdr_key,
                     TO_CHAR (b.bes_bestelling_datum, 'DD-MM-YYYY'),
                     TO_CHAR (bo.bes_bestelopdr_key),
                     (SELECT   pf.prs_perslid_naam_full
                        FROM   prs_v_perslid_fullnames pf
                       WHERE   pf.prs_perslid_key = b.prs_perslid_key),
                     (SELECT   P.PRS_PERSLID_TELEFOONNR
                        FROM   prs_perslid p
                       WHERE   p.prs_perslid_key = b.prs_perslid_key),
                     bos.bes_bestelopdrstatuses_omschr
     FROM   bes_bestelling b,
            bes_bestelling_item bi,
            bes_bestelopdr bo,
            bes_bestelopdrstatuses bos,
            bes_bestelopdr_item boi
    WHERE       bes_bestelopdr_status IN (4, 5, 6, 7)
            AND bi.bes_bestelling_key = b.bes_bestelling_key
            AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
            AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key
            AND bo.bes_bestelopdr_status = bos.bes_bestelopdrstatuses_key;

--
-- CONN#321
--


/* Formatted on 18-1-2010 16:02:12 (QP5 v5.136.908.31019) */
CREATE OR REPLACE FORCE VIEW conn_v_besteller_z_kostenpl
(
   naam,
   afdeling,
   profiel
)
AS
   SELECT   pf.prs_perslid_naam_full, a.prs_afdeling_omschrijving, f.fac_profiel_omschrijving
     FROM   prs_v_aanwezigperslid p, prs_afdeling a, prs_v_perslid_fullnames pf, fac_profiel f
    WHERE       p.fac_profiel_key = f.fac_profiel_key
            AND p.prs_perslid_key = pf.prs_perslid_key
            AND p.prs_afdeling_key = a.prs_afdeling_key
            AND a.prs_kostenplaats_key IS NULL;



CREATE OR REPLACE VIEW conn_v_huurders_kostenplaats (fclt_f_naam,
                                                     fclt_f_kostenplaats
                                                    )
AS
   SELECT prs_bedrijf_naam AS naam,
          prs_leverancier_nr AS kostenplaats
     FROM prs_v_aanwezigbedrijf;




--
-- CONN#415 CONN#496
--
CREATE OR REPLACE VIEW CONN_V_LOCATIE_BEDRIJVEN
(FCLT_F_LOCATIE, ADRES, POSTCODE, PLAATS, BEDRIJF,
 DIENST, TELEFOONNR, STORINGSNR)
AS
SELECT l.ALG_LOCATIE_CODE
      ,l.ALG_LOCATIE_ADRES
	  ,l.ALG_LOCATIE_POSTCODE
	  ,l.ALG_LOCATIE_PLAATS
	  ,substr(b.PRS_BEDRIJF_NAAM,1,decode(instr(b.PRS_BEDRIJF_NAAM,' _ LEV'),0,60,instr(b.PRS_BEDRIJF_NAAM,' _ LEV')))
	  ,d.PRS_DIENST_OMSCHRIJVING
	  ,b.PRS_BEDRIJF_TELEFOON
	  ,b.PRS_BEDRIJF_TELEFOON2
FROM PRS_BEDRIJFDIENSTLOCATIE bdl
    ,ALG_V_AANWEZIGLOCATIE l
	,PRS_DIENST d
	,PRS_V_AANWEZIGBEDRIJF b
where bdl.PRS_BEDRIJF_KEY = b.PRS_BEDRIJF_KEY
and bdl.ALG_LOCATIE_KEY = l.ALG_LOCATIE_KEY
and bdl.PRS_DIENST_KEY = d.PRS_DIENST_KEY
order by 1,5;







/* Formatted on 28-11-2011 10:49:26 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW conn_v_perslid_z_logwwmail
(
   naam,
   nummer,
   login,
   wachtwoord,
   email
)
AS
   SELECT   pf.prs_perslid_naam_full,
            p.prs_perslid_nr,
            p.prs_perslid_oslogin,
            '*****',
            p.prs_perslid_email
     FROM   prs_perslid p, prs_v_perslid_fullnames pf
    WHERE   pf.prs_perslid_key = p.prs_perslid_key
            AND (p.prs_perslid_oslogin IS NULL OR p.prs_perslid_wachtwoord_hash IS NULL OR p.prs_perslid_email IS NULL);

--insert into fac_usrrap (FAC_USRRAP_OMSCHRIJVING, FAC_USRRAP_VIEW_NAME, FAC_USRRAP_INFO) values
--  ('Personen zonder login..', 'CONN_V_PERSLID_Z_LOGWWMAIL', 'Personen waarbij geen login, wachtwoord of e-mail adres ingevuld is.');
--




create or replace view conn_v_bedrijf_zonder_nummer as
select * from prs_v_aanwezigbedrijf where prs_leverancier_nr is null
and prs_bedrijf_intern is null;



create or replace view CONN_RAP_OPDR_OPMERKINGEN AS
select alg_locatie_omschrijving fclt_f_locatie
      ,sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.MLD_OPDR_BEDRIJFOPDR_VOLGNR  opdrachtnummer
      ,TO_CHAR(o.mLD_OPDR_DATUMBEGIN, 'dd-mm-yyyy') datum
      ,prs_bedrijf_naam leverancier
      ,mld_kenmerkopdr_waarde opmerking
from   mld_opdr o
      ,MLD_V_AANWEZIGKENMERKOPDR ko
      ,mld_melding m
      ,mld_stdmelding std
      ,alg_locatie l
      ,mld_discipline md
      ,ins_srtdiscipline sd
      ,prs_bedrijf b
where  o.mld_opdr_key = ko.mld_opdr_key
and    ko.MLD_KENMERK_KEY = 75
and    o.MLD_TYPEOPDR_KEY = 5
and    m.mld_melding_key = o.mld_melding_key
and    m.mld_alg_locatie_key = l.alg_locatie_key
AND    m.mld_stdmelding_key = std.mld_stdmelding_key
AND    md.ins_discipline_key = std.mld_ins_discipline_key
AND    sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key
and    b.prs_bedrijf_key(+) = o.MLD_UITVOERENDE_KEYS order by 1;




-- *
-- *  FAC_V_WEB_AUTORISATIE view
-- *
CREATE OR REPLACE VIEW FAC_V_WEB_AUTORISATIE
(BEDRIJF, FCLT_F_BUSINESS_UNIT, FCLT_F_NAAM, FCLT_F_USERID, FCLT_F_GROEP)
AS
SELECT B.prs_bedrijf_naam as BEDRIJF
,      AD.prs_afdeling_omschrijving as FCLT_F_BUSINESS_UNIT
,      PF.prs_perslid_naam_full as FCLT_F_NAAM
,		 P.PRS_PERSLID_OSLOGIN as FCLT_F_USERID
,      GR.fac_groep_upper as FCLT_F_GROEP
  FROM PRS_V_AANWEZIGPERSLID P
,      PRS_AFDELING AD
,      PRS_V_AFDELING_BOOM AB
,      PRS_BEDRIJF B
,      FAC_GEBRUIKERSGROEP GG
,      FAC_GROEP GR
,      PRS_V_PERSLID_FULLNAMES PF
 WHERE GG.fac_groep_key=GR.fac_groep_key
   AND P.prs_perslid_key=GG.prs_perslid_key
   AND P.prs_afdeling_key = AB.prs_afdeling_key
   AND AB.prs_bedrijf_key = B.prs_bedrijf_key
   AND AB.prs_afdeling_key1 = AD.prs_afdeling_key
   AND PF.prs_perslid_key = p.prs_perslid_key;


-- *
-- *  CONN_V_FIATEURS view (in 4.81 CONN_FIATERING)
-- *
CREATE OR REPLACE VIEW CONN_V_FIATEURS
(
   PERSOON,
   PROFIEL,
   KOSTENPLAATSHOUDER,
   KOSTENPLAATSGROEPHOUDER
)
AS
     SELECT   p.prs_perslid_naam
              || DECODE (p.prs_perslid_voorletters,
                         NULL, '',
                         ', ' || p.prs_perslid_voorletters)
              || DECODE (p.prs_perslid_voornaam,
                         NULL, '',
                         ' (' || p.prs_perslid_voornaam || ')')
                 Persoon,
              f.fac_profiel_omschrijving,
              p2.prs_perslid_naam
              || DECODE (p2.prs_perslid_voorletters,
                         NULL, '',
                         ', ' || p2.prs_perslid_voorletters)
              || DECODE (p2.prs_perslid_voornaam,
                         NULL, '',
                         ' (' || p2.prs_perslid_voornaam || ')')
                 Budgethouder,
              p3.prs_perslid_naam
              || DECODE (p3.prs_perslid_voorletters,
                         NULL, '',
                         ', ' || p3.prs_perslid_voorletters)
              || DECODE (p3.prs_perslid_voornaam,
                         NULL, '',
                         ' (' || p3.prs_perslid_voornaam || ')')
                 Budgetgroephouder
       FROM   prs_perslid p,
              fac_profiel f,
              prs_afdeling a,
              prs_kostenplaats k,
              prs_perslid p2,
              prs_kostenplaatsgrp g,
              prs_perslid p3
      WHERE       f.fac_profiel_key(+) = p.fac_profiel_key
              AND a.prs_afdeling_key(+) = p.prs_afdeling_key
              AND a.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
              AND p2.prs_perslid_key(+) = k.prs_perslid_key
              AND k.prs_kostenplaatsgrp_key = g.prs_kostenplaatsgrp_key(+)
              AND p3.prs_perslid_key(+) = g.prs_perslid_key
              AND prs_kostenplaats_verwijder IS NULL
              AND p.prs_perslid_verwijder IS NULL
   ORDER BY   1,
              2,
              3,
              4;






/* Formatted on 2006/06/16 10:17 (Formatter Plus v4.8.5) */
/* Formatted on 11-6-2010 17:32:44 (QP5 v5.136.908.31019) */
CREATE OR REPLACE FORCE VIEW conn_v_ppi1
(
   aanvraagnummer,
   fclt_f_maand,
   besteller,
   afdeling,
   artikelnummer,
   omschrijving,
   aantal,
   prijs,
   fclt_3d_afdeling_key
)
AS
   SELECT   b.bes_bestelling_key,
            TO_CHAR (b.bes_bestelling_datum, 'YYMM'),
               p.prs_perslid_naam
            || '  '
            || NVL (p.prs_perslid_voorletters, '')
            || '  '
            || NVL (p.prs_perslid_voornaam, ''),
            a.prs_afdeling_naam,
            s.bes_srtdeel_nr,
            s.bes_srtdeel_omschrijving,
            TO_CHAR (i.bes_bestelling_item_aantal, '99999990'),
            TO_CHAR (i.bes_bestelling_item_prijs, '99999990D00'),
            a.prs_afdeling_key
     FROM   bes_bestelling b,
            bes_bestelling_item i,
            prs_perslid p,
            prs_afdeling a,
            bes_srtdeel s,
            bes_srtgroep g,
            ins_tab_discipline d
    WHERE       b.bes_bestelling_key = i.bes_bestelling_key
            AND b.prs_perslid_key = p.prs_perslid_key
            AND p.prs_afdeling_key = a.prs_afdeling_key
            AND i.bes_srtdeel_key = s.bes_srtdeel_key
            AND s.bes_srtgroep_key = g.bes_srtgroep_key
            AND g.ins_discipline_key = d.ins_discipline_key
            AND d.ins_discipline_key = 21;

CREATE OR REPLACE VIEW CONN_V_PPI1_TOT
(FCLT_F_MAAND, AANTAL, TOTAALBEDRAG)
AS
SELECT
       FCLT_F_Maand
      ,SUM(TO_NUMBER(Aantal, '999999D99', 'nls_numeric_characters = ''.,'''))
      ,SUM(TO_NUMBER(Aantal, '999999D99', 'nls_numeric_characters = ''.,''') * TO_NUMBER(prijs, '999999D99', 'nls_numeric_characters = ''.,'''))
FROM   CONN_V_PPI1
GROUP BY FCLT_F_Maand;

/* Formatted on 11-6-2010 17:37:17 (QP5 v5.136.908.31019) */
CREATE OR REPLACE FORCE VIEW conn_v_ppi2_all
(
   opdrachtnummer,
   fclt_f_maand,
   besteller,
   afdeling,
   totaalbedrag,
   bes_bestelopdr_datum,
   bes_bestelopdr_leverdatum,
   prs_afdeling_key
)
AS
   SELECT   bo.bes_bestelopdr_key,
            TO_CHAR (bo.bes_bestelopdr_datum, 'YYMM'),
               pp.prs_perslid_naam
            || '  '
            || NVL (pp.prs_perslid_voorletters, '')
            || '  '
            || NVL (pp.prs_perslid_voornaam, ''),
            ad.prs_afdeling_naam,
            boi.bes_bestelopdr_item_prijs * bi.bes_bestelling_item_aantal,
            bo.bes_bestelopdr_datum,
            bo.bes_bestelopdr_leverdatum,
            ad.prs_afdeling_key
     FROM   bes_bestelling bb,
            bes_bestelling_item bi,
            bes_bestelopdr bo,
            bes_bestelopdr_item boi,
            prs_perslid pp,
            prs_afdeling ad
    WHERE       bb.bes_bestelling_key = bi.bes_bestelling_key
            AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
            AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key
            AND bo.prs_perslid_key = pp.prs_perslid_key
            AND pp.prs_afdeling_key = ad.prs_afdeling_key;


/* Formatted on 11-6-2010 17:38:36 (QP5 v5.136.908.31019) */
CREATE OR REPLACE FORCE VIEW conn_v_ppi2_subset
(
   opdrachtnummer,
   fclt_f_maand,
   besteller,
   afdeling,
   totaalbedrag,
   prs_afdeling_key
)
AS
   SELECT   opdrachtnummer,
            fclt_f_maand,
            besteller,
            afdeling,
            totaalbedrag,
            prs_afdeling_key
     FROM   conn_v_ppi2_all
    WHERE   ( (bes_bestelopdr_leverdatum > fac.datumtijdplusuitvoertijd (bes_bestelopdr_datum, 4, 'DAGEN'))
             OR (bes_bestelopdr_leverdatum IS NULL
                 AND SYSDATE > fac.datumtijdplusuitvoertijd (bes_bestelopdr_datum, 4, 'DAGEN')));

CREATE OR REPLACE VIEW CONN_V_PPI2
(OPDRACHTNUMMER, FCLT_F_MAAND, BESTELLER, AFDELING, TOTAALBEDRAG,
 FCLT_3D_AFDELING_KEY)
AS
SELECT
       Opdrachtnummer,
       FCLT_F_Maand,
       Besteller,
       Afdeling,
       TO_CHAR(SUM(Totaalbedrag),'99999990D00'),
       PRS_AFDELING_KEY
FROM   CONN_V_PPI2_SUBSET
GROUP BY Opdrachtnummer,FCLT_F_Maand,Besteller,Afdeling,PRS_AFDELING_KEY;


CREATE OR REPLACE VIEW CONN_V_PPI2_TOT
(FCLT_F_MAAND, AANTAL, TOTAAL)
AS
SELECT FCLT_F_Maand, SUM(Aantal) Aantal, SUM(Totaal) Totaal
FROM
(
 SELECT FCLT_F_Maand, COUNT(Opdrachtnummer) Aantal, 0 Totaal
 FROM (SELECT FCLT_F_Maand, Opdrachtnummer
       FROM CONN_V_PPI2 A
       GROUP BY FCLT_F_Maand, Opdrachtnummer)
 GROUP BY FCLT_F_Maand
UNION
 SELECT FCLT_F_Maand, 0, COUNT(Opdrachtnummer)
 FROM (SELECT FCLT_F_Maand, Opdrachtnummer
       FROM CONN_V_PPI2_ALL B
       GROUP BY FCLT_F_Maand, Opdrachtnummer)
 GROUP BY FCLT_F_Maand
)
GROUP BY FCLT_F_Maand;

/* Formatted on 28-11-2011 10:47:34 (QP5 v5.136.908.31019) */
CREATE OR REPLACE FORCE VIEW conn_v_ppi3_all
(
   aanvraagnummer,
   fclt_f_maand,
   besteller,
   afdeling,
   fiatteur,
   status,
   aantal,
   prijs,
   totaalbedrag,
   bes_bestelling_datum,
   bes_bestelling_afgewezen,
   bes_bestelling_geaccepteerd,
   prs_afdeling_key
)
AS
   SELECT   b.bes_bestelling_key,
            TO_CHAR (b.bes_bestelling_datum, 'YYMM'),
               p.prs_perslid_naam
            || '  '
            || NVL (p.prs_perslid_voorletters, '')
            || '  '
            || NVL (p.prs_perslid_voornaam, ''),
            a.prs_afdeling_naam,
               p2.prs_perslid_naam
            || '  '
            || NVL (p2.prs_perslid_voorletters, '')
            || '  '
            || NVL (p2.prs_perslid_voornaam, ''),
            bs.bes_bestellingstatuses_omschr,
            i.bes_bestelling_item_aantal,
            i.bes_bestelling_item_prijs,
            i.bes_bestelling_item_aantal * i.bes_bestelling_item_prijs,
            b.bes_bestelling_datum,
            fac.gettrackingdate ('BESREJ', b.bes_bestelling_key),
            fac.gettrackingdate ('BESACP', b.bes_bestelling_key),
            a.prs_afdeling_key
     FROM   bes_bestelling b,
            bes_bestelling_item i,
            prs_perslid p,
            prs_afdeling a,
            prs_perslid p2,
            bes_bestellingstatuses bs
    WHERE       b.bes_bestelling_key = i.bes_bestelling_key
            AND b.prs_perslid_key = p.prs_perslid_key
            AND p.prs_afdeling_key = a.prs_afdeling_key
            AND b.bes_bestelling_status = bs.bes_bestellingstatuses_key
            AND b.bes_bestelling_fiat_user IS NOT NULL                           -- Dus alleen "fiatteringsbestellingen"
            AND b.bes_bestelling_fiat_user = p2.prs_perslid_key;

/* Formatted on 11-6-2010 17:51:26 (QP5 v5.136.908.31019) */
CREATE OR REPLACE FORCE VIEW conn_v_ppi3_subset
(
   aanvraagnummer,
   fclt_f_maand,
   besteller,
   afdeling,
   fiatteur,
   status,
   aantal,
   prijs,
   totaalbedrag,
   bes_bestelling_datum,
   bes_bestelling_afgewezen,
   bes_bestelling_geaccepteerd,
   prs_afdeling_key
)
AS
   SELECT   aanvraagnummer,
            fclt_f_maand,
            besteller,
            afdeling,
            fiatteur,
            status,
            aantal,
            prijs,
            totaalbedrag,
            bes_bestelling_datum,
            bes_bestelling_afgewezen,
            bes_bestelling_geaccepteerd,
            prs_afdeling_key
     FROM   conn_v_ppi3_all
    WHERE   ( (fac.datumtijdplusuitvoertijd (bes_bestelling_datum, 3, 'DAGEN') <
                  bes_bestelling_afgewezen)
             OR (fac.datumtijdplusuitvoertijd (bes_bestelling_datum, 3, 'DAGEN') <
                    bes_bestelling_geaccepteerd)
             OR (    bes_bestelling_afgewezen IS NULL
                 AND bes_bestelling_geaccepteerd IS NULL
                 AND fac.datumtijdplusuitvoertijd (bes_bestelling_datum, 3, 'DAGEN') < SYSDATE));

CREATE OR REPLACE VIEW CONN_V_PPI3_TOT
(FCLT_F_MAAND, TOTAAL, TELAAT)
AS
SELECT fclt_f_maand, SUM(totaal) Totaal,SUM(totaal)-SUM(optijd) Telaat
FROM
(
 SELECT FCLT_F_Maand, COUNT(*) Totaal, 0 Optijd
 FROM (SELECT FCLT_F_Maand, aanvraagnummer
       FROM CONN_V_PPI3_ALL A
       GROUP BY FCLT_F_Maand, aanvraagnummer)
 GROUP BY FCLT_F_Maand
UNION
 SELECT FCLT_F_Maand, 0, COUNT(*)
 FROM (SELECT FCLT_F_Maand, aanvraagnummer
       FROM CONN_V_PPI3_SUBSET A
       GROUP BY FCLT_F_Maand, aanvraagnummer)
 GROUP BY FCLT_F_Maand
)
GROUP BY FCLT_F_Maand;


/* Formatted on 2006/06/16 10:24 (Formatter Plus v4.8.5) */
CREATE OR REPLACE VIEW conn_v_ppi5_all (opdrachtnummer, fclt_f_maand, opmerking, prs_afdeling_key)
AS
   SELECT bo.bes_bestelopdr_key, TO_CHAR (bo.bes_bestelopdr_datum, 'YYMM'), bo.bes_bestelopdr_delivery_opmerk,
          p.prs_afdeling_key
     FROM bes_bestelling bb, bes_bestelling_item bi, bes_bestelopdr bo, bes_bestelopdr_item boi, prs_perslid p
    WHERE bb.bes_bestelling_key = bi.bes_bestelling_key
      AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
      AND bb.prs_perslid_key = p.prs_perslid_key
      AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key;

/* Formatted on 2006/06/16 10:22 (Formatter Plus v4.8.5) */
CREATE OR REPLACE VIEW conn_v_ppi5 (opdrachtnummer, fclt_f_maand, opmerking, fclt_3d_prs_afdeling_key)
AS
   SELECT DISTINCT bo.bes_bestelopdr_key, TO_CHAR (bo.bes_bestelopdr_datum, 'YYMM'), bo.bes_bestelopdr_delivery_opmerk,
                   p.prs_afdeling_key
              FROM bes_bestelling bb, bes_bestelling_item bi, bes_bestelopdr bo, bes_bestelopdr_item boi, prs_perslid p
             WHERE bb.bes_bestelling_key = bi.bes_bestelling_key
               AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
               AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key
               AND bb.prs_perslid_key = p.prs_perslid_key
               AND bes_bestelopdr_delivery_opmerk IS NOT NULL;

CREATE OR REPLACE VIEW CONN_V_PPI5_TOT
(FCLT_F_MAAND, AANTAL, TOTAAL)
AS
SELECT fclt_f_maand, SUM(Aantal) Aantal, SUM(Totaal) Totaal
FROM
(
SELECT FCLT_F_Maand, COUNT(*) Aantal, 0 Totaal
FROM (SELECT FCLT_F_Maand, opdrachtnummer
FROM CONN_V_PPI5 A
GROUP BY FCLT_F_Maand, opdrachtnummer)
GROUP BY FCLT_F_Maand
UNION
SELECT FCLT_F_Maand, 0, COUNT(*)
FROM (SELECT FCLT_F_Maand, opdrachtnummer
FROM CONN_V_PPI5_ALL A
GROUP BY FCLT_F_Maand, opdrachtnummer)
GROUP BY FCLT_F_Maand
)
GROUP BY FCLT_F_Maand;

/* Formatted on 11-6-2010 17:56:01 (QP5 v5.136.908.31019) */
CREATE OR REPLACE FORCE VIEW conn_v_ppi_overzicht
(
   ppi,
   fclt_f_maand,
   aantal,
   totaal
)
AS
   SELECT   'PPI1 - Bestelling artikelen Luxe catalogus per maand',
            fclt_f_maand,
            TO_CHAR (aantal),
            TO_CHAR (totaalbedrag, '99999990D00')
     FROM   conn_v_ppi1_tot
   UNION
   SELECT   'PPI2 - Juistheid "afmelding" ontvangsten per maand', fclt_f_maand, TO_CHAR (aantal), TO_CHAR (totaal)
     FROM   conn_v_ppi2_tot
   UNION
   SELECT   'PPI3 - Tijd tussen aanvraag en fiattering per maand', fclt_f_maand, TO_CHAR (telaat), TO_CHAR (totaal)
     FROM   conn_v_ppi3_tot
   UNION
   SELECT   'PPI5 - Niet tevreden ontvangers per maand', fclt_f_maand, TO_CHAR (aantal), TO_CHAR (totaal)
     FROM   conn_v_ppi5_tot;




-- *
-- *  CONN_V_DELETED_LOC_GEG view
-- *  Overzicht verwijderde locaties (CONN#188)
-- *
CREATE OR REPLACE VIEW CONN_V_DELETED_LOC_GEG
(FCLT_F_LOCATIE_CODE, OMSCHRIJVING, BEZOEK_ADRES,
 BEZOEK_PLAATS, VERWIJDERDATUM, UITBEHEER, DISTRICT)
AS
SELECT   l.alg_locatie_code,
         l.alg_locatie_omschrijving,
         l.alg_locatie_adres,
         l.alg_locatie_plaats,
         l.alg_locatie_verwijder,
		 (SELECT aok.alg_onrgoedkenmerk_waarde from alg_onrgoedkenmerk aok
		    WHERE alg_onrgoed_key = l.alg_locatie_key
			  AND alg_kenmerk_key = 22),
         d.alg_district_omschrijving
    FROM alg_locatie l,
         alg_district d
   WHERE d.alg_district_key(+) = l.alg_district_key
     AND (l.alg_locatie_verwijder IS NOT NULL
	     OR
		 l.alg_locatie_key IN (
		   SELECT alg_onrgoed_key from alg_onrgoedkenmerk aok
		    WHERE alg_onrgoed_niveau = 'L'
			  AND alg_kenmerk_key = 22))
ORDER BY l.alg_locatie_upper ASC;

commit;


create or replace view CONN_V_PRS_INDIENST (FCLT_F_MAAND, FCLT_F_NAAM, NUMMER, INDIENST, FCLT_F_AFDELING) as
select TO_CHAR(p.prs_perslid_ingangsdatum, 'YYMM'),
       pf.prs_perslid_naam_full,
       p.prs_perslid_nr,
	   TO_CHAR(p.prs_perslid_ingangsdatum, 'DD-MM-YYYY'),
	   a.prs_afdeling_naam1
from prs_v_afdeling a,
	 prs_v_aanwezigperslid p,
	 prs_v_perslid_fullnames pf
where p.prs_afdeling_key = a.prs_afdeling_key
  and pf.prs_perslid_key = p.prs_perslid_key
  and p.prs_perslid_ingangsdatum IS NOT NULL;

create or replace view CONN_V_PRS_UITDIENST (FCLT_F_MAAND, FCLT_F_NAAM, NUMMER, UITDIENST, FCLT_F_AFDELING) as
select TO_CHAR(p.prs_perslid_einddatum, 'YYMM'),
       pf.prs_perslid_naam_full,
       p.prs_perslid_nr,
	   TO_CHAR(p.prs_perslid_einddatum, 'DD-MM-YYYY'),
	   a.prs_afdeling_naam1
from prs_v_afdeling a,
	 prs_v_aanwezigperslid p,
	 prs_v_perslid_fullnames pf
where p.prs_afdeling_key = a.prs_afdeling_key
  and pf.prs_perslid_key = p.prs_perslid_key
  and p.prs_perslid_einddatum IS NOT NULL;


--///////////////////////////////////////////VERVALLEN/////////////////////////////////////BEGIN?
CREATE OR REPLACE VIEW CONN_V_OPDR AS
select 	std.MLD_INS_DISCIPLINE_KEY
				,o.*
from 		mld_opdr o, mld_melding m, mld_stdmelding std
where 	m.mld_stdmelding_key = std.mld_stdmelding_key
  and   o.mld_melding_key = m.mld_melding_key;
/

CREATE OR REPLACE VIEW CONN_V_OPDR_IB AS
select 	o.*
from 		CONN_V_OPDR o
where 	o.MLD_INS_DISCIPLINE_KEY = 562;
/

CREATE OR REPLACE VIEW CONN_V_OPDR_OVERIG AS
select 	o.*
from 		CONN_V_OPDR o
where 	o.MLD_INS_DISCIPLINE_KEY <> 562;
/


CREATE OR REPLACE VIEW CONN_V_MLD_VERPLICHTING_OFF
(OPDRACHT, LOCATIE, BEDRIJF, DATUM, OFFERTE_STATUS, BEDRAG, EIGENAAR)
AS
select  (select ins_srtdiscipline_prefix from ins_srtdiscipline sd, ins_tab_discipline d, mld_stdmelding std, mld_melding m where
    m.mld_stdmelding_key = std.mld_stdmelding_key
  and std.mld_ins_discipline_key = d.ins_discipline_key
	and d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
	and m.mld_melding_key = o.mld_melding_key) ||  o.mld_melding_key ||'/' || o.MLD_OPDR_BEDRIJFOPDR_VOLGNR
, (select alg_locatie_code
    from alg_locatie l, mld_melding m
    where l.alg_locatie_key = m.mld_alg_locatie_key
      and o.mld_melding_key = m.mld_melding_key) as locatie
, (select prs_bedrijf_naam from prs_bedrijf where prs_bedrijf_key = o.MLD_UITVOERENDE_KEYS) as bedrijf
, (select TO_CHAR(MLD_OPDR_DATUMBEGIN, 'DD-MM-YYYY') from mld_opdr where mld_melding_key = o.mld_melding_key and rownum = 1) as OpdrDatum
, ud.FAC_USRDATA_OMSCHR
, TO_CHAR(nvl(bed.MLD_KENMERKOPDR_WAARDE,0),'9999990D00') as Openstaand
, (select fd.fac_usrdata_omschr
    from fac_usrdata fd, MLD_V_AANWEZIGKENMERKOPDR gb, mld_opdr opdr
    where gb.mld_opdr_key = opdr.mld_opdr_key
      and gb.mld_kenmerk_key = 83
      and opdr.mld_uitvoerende_keys = o.MLD_UITVOERENDE_KEYS
      and gb.mld_kenmerkopdr_waarde = fd.fac_usrdata_key
      and rownum = 1) as Eigenaar
from mld_opdr o, MLD_V_AANWEZIGKENMERKOPDR ko, fac_usrdata ud, MLD_V_AANWEZIGKENMERKOPDR bed
     where o.MLD_TYPEOPDR_KEY = 66
       and o.mld_opdr_key = ko.mld_opdr_key(+)
       and ko.MLD_KENMERK_KEY(+) = 74
	   and ud.fac_usrdata_key(+) = ko.mld_kenmerkopdr_waarde
	   and bed.mld_kenmerk_key(+) = 449
	   and o.mld_opdr_key = bed.mld_opdr_key(+)
       and o.mld_statusopdr_key = 5;


CREATE OR REPLACE VIEW CONN_V_MLD_VERPLICHTING
(DATUM, FCLT_F_SOORT, OPDRACHT, LOCATIE, BEDRIJF,
 EIGENAAR, OPDRACHT_BEDRAG, FACTUUR_BEDRAG)
AS
SELECT TO_CHAR (mld_opdr_datumbegin, 'DD-MM-YYYY') datum,
       (SELECT ins_srtdiscipline_prefix
          FROM ins_srtdiscipline sd,
               ins_tab_discipline d,
               mld_stdmelding std,
               mld_melding m
         WHERE m.mld_stdmelding_key = std.mld_stdmelding_key
           AND std.mld_ins_discipline_key = d.ins_discipline_key
           AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
           AND o.mld_melding_key = m.mld_melding_key) soort,
       opdracht,
       (SELECT alg_locatie_code
          FROM alg_locatie l, mld_melding m
         WHERE l.alg_locatie_key = m.mld_alg_locatie_key
           AND o.mld_melding_key = m.mld_melding_key) AS locatie,
       (SELECT prs_bedrijf_naam
          FROM prs_bedrijf
         WHERE prs_bedrijf_key = mld_uitvoerende_keys) AS bedrijf,
       (SELECT fd.fac_usrdata_omschr
          FROM fac_usrdata fd, mld_v_aanwezigkenmerkopdr gb
         WHERE gb.mld_opdr_key = o.mld_opdr_key
           AND gb.mld_kenmerk_key = 83
           AND gb.mld_kenmerkopdr_waarde = fd.fac_usrdata_key) AS eigenaar,
       mld_opdr_kosten opdrachtkosten, fr_bedrag factuurbedrag
  FROM (SELECT    o.mld_melding_key
               || '/'
               || o.mld_opdr_bedrijfopdr_volgnr opdracht,
               mld_opdr_datumbegin, mld_uitvoerende_keys, mld_melding_key,
               o.mld_opdr_key, mld_opdr_kosten,
               NVL (fin_factuurregel_totaal + fr.fin_factuurregel_btw,
                    0
                   ) fr_bedrag
          FROM fin_factuur f, fin_factuurregel fr, mld_opdr o
         WHERE fr.fin_factuur_key(+) = f.fin_factuur_key
           AND o.mld_opdr_key = f.mld_opdr_key(+)
           AND o.mld_statusopdr_key <> 7
           AND o.mld_typeopdr_key = 5) o
 WHERE mld_opdr_kosten - fr_bedrag > 2500;


CREATE OR REPLACE VIEW CONN_V_MLD_VERPLICHTING_FIAT
(OPDRACHT, LOCATIE, FIATTEUR, DATUM, OFFERTE_STATUS, BEDRAG, EIGENAAR)
AS
select  (select ins_srtdiscipline_prefix from ins_srtdiscipline sd, ins_tab_discipline d, mld_stdmelding std, mld_melding m where
    m.mld_stdmelding_key = std.mld_stdmelding_key
  and std.mld_ins_discipline_key = d.ins_discipline_key
	and d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
	and m.mld_melding_key = o.mld_melding_key) ||  o.mld_melding_key ||'/' || o.MLD_OPDR_BEDRIJFOPDR_VOLGNR
, (select alg_locatie_code
    from alg_locatie l, mld_melding m
    where l.alg_locatie_key = m.mld_alg_locatie_key
      and o.mld_melding_key = m.mld_melding_key) as locatie
, NVL((select prs_bedrijf_naam from prs_bedrijf where prs_bedrijf_key = o.MLD_UITVOERENDE_KEYS),
      (select prs_perslid_naam from prs_perslid where prs_perslid_key = o.MLD_UITVOERENDE_KEYS)) as bedrijf
, (select TO_CHAR(MLD_OPDR_DATUMBEGIN,'DD-MM-YYYY') from mld_opdr where mld_melding_key = o.mld_melding_key) as OpdrDatum
, ud.FAC_USRDATA_OMSCHR
, TO_CHAR(nvl(bed.MLD_KENMERKOPDR_WAARDE,0),'9999990D00') as Openstaand
, (select fd.fac_usrdata_omschr
    from fac_usrdata fd, MLD_V_AANWEZIGKENMERKOPDR gb, mld_opdr opdr
    where gb.mld_opdr_key = opdr.mld_opdr_key
      and gb.mld_kenmerk_key = 83
      and opdr.mld_uitvoerende_keys = o.MLD_UITVOERENDE_KEYS
      and gb.mld_kenmerkopdr_waarde = fd.fac_usrdata_key
      and rownum = 1) as Eigenaar
from mld_opdr o, MLD_V_AANWEZIGKENMERKOPDR ko , fac_usrdata ud, MLD_V_AANWEZIGKENMERKOPDR bed
     where o.MLD_TYPEOPDR_KEY = 65
       and o.mld_opdr_key = ko.mld_opdr_key(+)
       and ko.MLD_KENMERK_KEY(+) = 69
	   and ud.fac_usrdata_key(+) = ko.mld_kenmerkopdr_waarde
	   and bed.mld_kenmerk_key(+) = 445
	   and o.mld_opdr_key = bed.mld_opdr_key(+)
       and o.mld_statusopdr_key = 5;


CREATE OR REPLACE VIEW conn_rap_tekeningen
AS
   SELECT alg_locatie_code AS fclt_f_locatie, alg_gebouw_code,
          alg_verdieping_omschrijving, cad_tekening_type,
          cad_tekening_filenaam
     FROM cad_tekening, alg_locatie, alg_gebouw, alg_verdieping AVG
    WHERE cad_tekening.alg_verdieping_key = AVG.alg_verdieping_key
      AND alg_locatie.alg_locatie_key = alg_gebouw.alg_locatie_key
      AND AVG.alg_gebouw_key = alg_gebouw.alg_gebouw_key
   UNION
   SELECT alg_locatie_code AS fclt_f_locatie, '', '', cad_tekening_type,
          cad_tekening_filenaam
     FROM cad_tekening, alg_locatie
    WHERE cad_tekening.alg_verdieping_key = NULL
      AND alg_locatie.alg_locatie_key = cad_tekening.alg_locatie_key;

CREATE OR REPLACE VIEW CONN_V_RAP_GROEPLEDEN
(NAAM, FCLT_F_LOGIN, FCLT_F_DIVISIE, REGIO, FCLT_F_GROEP, AANTAL_RECHTEN)
AS
SELECT p.prs_perslid_naam, p.prs_perslid_oslogin, a1.prs_afdeling_omschrijving, a2.prs_afdeling_omschrijving,
          gr.fac_groep_omschrijving, TO_CHAR(count(*))
     FROM fac_gebruikersgroep gg,
          prs_v_aanwezigperslid p,
          prs_afdeling a1,
          prs_afdeling a2,
          prs_v_afdeling_boom ab,
          fac_groep gr,
          fac_groeprechten grr
    WHERE p.prs_perslid_key = gg.prs_perslid_key
      AND p.prs_afdeling_key = ab.prs_afdeling_key
      AND ab.prs_afdeling_key1 = a1.prs_afdeling_key
      AND ab.prs_afdeling_key2 = a2.prs_afdeling_key
      AND gg.fac_groep_key = gr.fac_groep_key
      AND gr.FAC_GROEP_KEY = grr.fac_groep_key
    GROUP BY p.prs_perslid_naam, p.prs_perslid_oslogin,
          gr.fac_groep_omschrijving, a1.prs_afdeling_omschrijving, a2.prs_afdeling_omschrijving;

-- CONN#546
CREATE OR REPLACE VIEW conn_v_contracten_gegevens (contractnr,
                                                   externnr,
                                                   fclt_f_bedrijf,
                                                   ingangsdatum,
                                                   einddatum,
                                                   bedrag
                                                  )
AS
   SELECT TO_CHAR (c.cnt_contract_key) contractnr,
          c.cnt_contract_nummer externnr,
          NVL (b.prs_bedrijf_naam, afd2.prs_afdeling_naam) fclt_f_bedrijf,
          TO_CHAR (c.cnt_contract_looptijd_van, 'DD-MM-YYYY') ingangsdatum,
          TO_CHAR (c.cnt_contract_looptijd_tot, 'DD-MM-YYYY') einddatum,
          kc.cnt_kenmerkcontract_waarde bedrag
     FROM prs_v_aanwezigbedrijf b,
          cnt_v_aanwezigcontract c,
          prs_v_aanwezigafdeling afd,
          prs_v_aanwezigafdeling afd2,
          cnt_disc_params cdp,
          (SELECT cnt_contract_key, cnt_kenmerkcontract_waarde
             FROM cnt_kenmerkcontract kc, cnt_kenmerk k
            WHERE kc.cnt_kenmerk_key = k.cnt_kenmerk_key
              AND k.cnt_srtkenmerk_key = 24
              AND kc.cnt_kenmerkcontract_verwijder IS NULL) kc
    WHERE b.prs_bedrijf_key(+) = c.cnt_prs_bedrijf_key
      AND cdp.cnt_ins_discipline_key = c.ins_discipline_key
      AND cdp.cnt_srtcontract_type <> 2
      AND c.cnt_prs_afdeling_key = afd2.prs_afdeling_key(+)
      AND afd.prs_afdeling_key = c.prs_afdeling_key_eig
      AND c.cnt_contract_key = kc.cnt_contract_key(+)
      AND SYSDATE BETWEEN c.cnt_contract_looptijd_van
                      AND c.cnt_contract_looptijd_tot + 1;


/* Formatted on 2005/09/13 14:07 (Formatter Plus v4.8.5) */
CREATE OR REPLACE VIEW conn_v_rcontracten_gegevens (fclt_f_locatie,
                                                    OBJECT,
                                                    externnr,
                                                    beschrijving,
                                                    einddatum,
                                                    uitvoerder,
                                                    contractnemer,
                                                    betalingsvoorwaarden,
                                                    totaal_pj,
                                                    facturatietermijn,
                                                    dienstverlening_afroep,
                                                    dienstverlening_periodiek,
                                                    responsetijden,
                                                    afspraken
                                                   )
AS
   SELECT NVL (l.alg_locatie_omschrijving, g.alg_locatie_omschrijving) fclt_f_locatie,
          sd.ins_srtdeel_omschrijving OBJECT, c.cnt_contract_nummer externnr, c.cnt_contract_omschrijving beschrijving,
          c.cnt_contract_looptijd_tot einddatum, b.prs_bedrijf_naam uitvoerder,
          (SELECT prs_bedrijf_naam
             FROM prs_v_contractbedrijf
            WHERE prs_bedrijf_key =
                     (SELECT fac.safe_to_number (cnt_kenmerkcontract_waarde)
                        FROM cnt_kenmerkcontract k
                       WHERE k.cnt_kenmerk_key = 141
                         AND k.cnt_contract_key = c.cnt_contract_key
                         AND cnt_kenmerkcontract_verwijder IS NULL)) contractnemer,
          (SELECT cnt_kenmerkcontract_waarde
             FROM cnt_kenmerkcontract k
            WHERE k.cnt_kenmerk_key = 143
              AND k.cnt_contract_key = c.cnt_contract_key
              AND cnt_kenmerkcontract_verwijder IS NULL) betalingsvoorwaarden,
          (SELECT cnt_kenmerkcontract_waarde
             FROM cnt_kenmerkcontract k
            WHERE k.cnt_kenmerk_key = 144
              AND k.cnt_contract_key = c.cnt_contract_key
              AND cnt_kenmerkcontract_verwijder IS NULL) totaal_pj,
          (SELECT fac_usrdata_omschr
             FROM fac_usrdata
            WHERE fac_usrdata_key =
                     (SELECT fac.safe_to_number (cnt_kenmerkcontract_waarde)
                        FROM cnt_kenmerkcontract k
                       WHERE k.cnt_kenmerk_key = 145
                         AND k.cnt_contract_key = c.cnt_contract_key
                         AND cnt_kenmerkcontract_verwijder IS NULL)) facturatietermijn,
          (SELECT fac_usrdata_omschr
             FROM fac_usrdata
            WHERE fac_usrdata_key =
                     (SELECT fac.safe_to_number (cnt_kenmerkcontract_waarde)
                        FROM cnt_kenmerkcontract k
                       WHERE k.cnt_kenmerk_key = 146
                         AND k.cnt_contract_key = c.cnt_contract_key
                         AND cnt_kenmerkcontract_verwijder IS NULL)) dienstverlening_afroep,
          (SELECT fac_usrdata_omschr
             FROM fac_usrdata
            WHERE fac_usrdata_key =
                     (SELECT fac.safe_to_number (cnt_kenmerkcontract_waarde)
                        FROM cnt_kenmerkcontract k
                       WHERE k.cnt_kenmerk_key = 147
                         AND k.cnt_contract_key = c.cnt_contract_key
                         AND cnt_kenmerkcontract_verwijder IS NULL)) dienstverlening_periodiek,
          (SELECT cnt_kenmerkcontract_waarde
             FROM cnt_kenmerkcontract k
            WHERE k.cnt_kenmerk_key = 149
              AND k.cnt_contract_key = c.cnt_contract_key
              AND cnt_kenmerkcontract_verwijder IS NULL) responsetijden,
          (SELECT cnt_kenmerkcontract_waarde
             FROM cnt_kenmerkcontract k
            WHERE k.cnt_kenmerk_key = 161
              AND k.cnt_contract_key = c.cnt_contract_key
              AND cnt_kenmerkcontract_verwijder IS NULL) afspraken
     FROM cnt_v_aanwezigcontract_plaats cp,
          (SELECT g2.alg_gebouw_key, l2.alg_locatie_omschrijving
             FROM alg_gebouw g2, alg_locatie l2
            WHERE g2.alg_locatie_key = l2.alg_locatie_key) g,
          alg_locatie l,
          cnt_contract c,
          cnt_contract_object co,
          prs_bedrijf b,
          ins_srtdeel sd,
          cnt_disc_params cdp
    WHERE cp.cnt_alg_plaats_key = g.alg_gebouw_key(+)
      AND cp.cnt_alg_plaats_key = l.alg_locatie_key(+)
      AND cp.cnt_alg_plaats_code IN ('L', 'G')
      AND cp.cnt_contract_key = c.cnt_contract_key
      AND co.cnt_contract_key = c.cnt_contract_key
      AND c.ins_discipline_key = cdp.cnt_ins_discipline_key
      AND cdp.cnt_srtcontract_type = 3
      AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
      AND co.cnt_ins_srtdeel_key = sd.ins_srtdeel_key;







-- CONN#581
CREATE OR REPLACE VIEW conn_v_bedrijf
AS
   SELECT b.prs_bedrijf_naam fclt_f_Bedrijfsnaam,
          b.prs_leverancier_nr fclt_f_Leveranciersnummer, b.prs_bedrijf_email,
          a.prs_bedrijfadres_url, a.prs_bedrijfadres_xsl
     FROM prs_bedrijf b
        , prs_bedrijfadres a
    WHERE b.prs_bedrijf_key = a.prs_bedrijf_key
      AND a.prs_bedrijfadres_type = 'B'
      AND b.prs_bedrijf_verwijder IS NULL;
/


--CONN#599/CONN#14138
/* Formatted on 11-6-2010 16:57:33 (QP5 v5.136.908.31019) */
CREATE OR REPLACE FORCE VIEW conn_v_opdr_doorloop
(
   nr,
   fclt_f_maand,
   fclt_f_locatie,
   gemeld,
   uitgegeven,
   reactietijd,
   afgemeld,
   doorlooptijd
)
AS
   SELECT   o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr,
            TO_CHAR (fac.gettrackingdate ('ORDNEW', o.mld_opdr_key), 'yymm'),
            (SELECT   alg_locatie_code
               FROM   alg_locatie l, mld_melding m
              WHERE   o.mld_melding_key = m.mld_melding_key AND m.mld_alg_locatie_key = l.alg_locatie_key),
            m.mld_melding_datum,
            fac.gettrackingdate ('ORDNEW', o.mld_opdr_key),
            TRUNC (fac.gettrackingdate ('ORDNEW', o.mld_opdr_key)) - TRUNC (m.mld_melding_datum),
            NVL (fac.gettrackingdate ('ORDAFM', o.mld_opdr_key), TO_DATE ('29991231', 'yyyymmdd')),
            TRUNC (NVL (fac.gettrackingdate ('ORDAFM', o.mld_opdr_key), TO_DATE ('29991231', 'yyyymmdd')))
            - TRUNC (fac.gettrackingdate ('ORDNEW', o.mld_opdr_key))
     FROM   mld_opdr o, mld_melding m, mld_stdmelding std
    WHERE   o.mld_melding_key = m.mld_melding_key
      AND   m.mld_stdmelding_key = std.mld_stdmelding_key
      AND   std.mld_ins_discipline_key = 163;




-- CONN#656
CREATE OR REPLACE PACKAGE CONN_HALTES AS


 FUNCTION get_halte_key
            (p_haltecode          IN VARCHAR2
            ,p_kenmerk_key        IN NUMBER
            ) return NUMBER;

 FUNCTION verwerk_halte
            (p_HALTECODE          IN VARCHAR2
            ,p_HALTENAAM          IN VARCHAR2
            ,p_PLAATSNAAM         IN VARCHAR2
            ,p_PLACECODE          IN VARCHAR2
            ,p_ZONE               IN VARCHAR2
            ,p_X_COORDINAAT       IN VARCHAR2
            ,p_Y_COORDINAAT       IN VARCHAR2
            ,p_LIJNNUMMER         IN VARCHAR2
            ) return NUMBER;


END CONN_HALTES;
/

CREATE OR REPLACE PACKAGE BODY CONN_HALTES AS

 FUNCTION get_halte_key
            (p_haltecode          IN VARCHAR2
            ,p_kenmerk_key        IN NUMBER
            ) return NUMBER
 IS

  v_result  NUMBER(10);
  v_count   NUMBER(10);

 BEGIN

  -- Init
  v_result := 0;

  select  count(*)
  into    v_count
  from    ins_deel
  where   ins_deel_verwijder is null
  and     substr(ins_deel_upper,2,8) = UPPER(p_haltecode);

  IF (v_count = 1) THEN

    select  ins_deel_key
    into    v_result
    from    ins_deel
    where   ins_deel_verwijder is null
    and     substr(ins_deel_upper,2,8) = UPPER(p_haltecode);

  ELSE

    select  count(*)
    into    v_count
    FROM    ins_deel d, ins_kenmerkdeel kd
    WHERE   d.ins_deel_key = kd.ins_deel_key
    AND     kd.ins_kenmerk_key = p_kenmerk_key
    AND     UPPER(kd.ins_kenmerkdeel_waarde) = UPPER(p_haltecode)
    AND     ins_kenmerkdeel_verwijder is null;

    IF (v_count = 1) THEN

      select  d.ins_deel_key
      into    v_result
      FROM    ins_deel d, ins_kenmerkdeel kd
      WHERE   d.ins_deel_key = kd.ins_deel_key
      AND     kd.ins_kenmerk_key = p_kenmerk_key
      AND     UPPER(kd.ins_kenmerkdeel_waarde) = UPPER(p_haltecode)
      AND     ins_kenmerkdeel_verwijder is null;

    END IF;

  END IF;

  RETURN v_result;

  EXCEPTION WHEN OTHERS THEN

    RETURN -1;

 END get_halte_key;


 FUNCTION verwerk_halte
            (p_HALTECODE          IN VARCHAR2
            ,p_HALTENAAM          IN VARCHAR2
            ,p_PLAATSNAAM         IN VARCHAR2
            ,p_PLACECODE          IN VARCHAR2
            ,p_ZONE               IN VARCHAR2
            ,p_X_COORDINAAT       IN VARCHAR2
            ,p_Y_COORDINAAT       IN VARCHAR2
            ,p_LIJNNUMMER         IN VARCHAR2
            ) return NUMBER
 IS

    v_DEEL_OMSCHRIJVING         VARCHAR2(30);
    v_HALTENAAM                 VARCHAR2(40);
    v_HALTECODE                 VARCHAR2(8);
    v_PLAATSNAAM                VARCHAR2(30);
    v_PLACECODE                 VARCHAR2(10);
    v_ZONE                      VARCHAR2(10);
    v_X_COORDINAAT              VARCHAR2(10);
    v_Y_COORDINAAT              VARCHAR2(10);
    v_LIJNNUMMER                VARCHAR2(200);

    ORACLE_err_num              NUMBER;
    ORACLE_err_mes              VARCHAR2(100);
    v_result  									NUMBER(10);
    v_errormsg                  VARCHAR2(1000);
    v_import_row                VARCHAR2(1000);
    v_count                     NUMBER(10);
    v_terreinsector_key         NUMBER(10);
    v_ins_deel_key              NUMBER(10);

    c_error_result              NUMBER(10) := -1;

    -- Constanten: diversen
    c_srtdeel_key                 INTEGER             := 43401; -- Halte
    c_srtdeel_module              VARCHAR2 (3)        := 'INS';
    c_locatie_key_onbekend        INTEGER             := 3123;
    c_ruimte_type                 VARCHAR2 (1)        := 'T';
    c_halte_prefix                VARCHAR2 (1)        := 'H';

    -- Constanten: kenmerken key's
    c_halte_code                  INTEGER             := 501;
    c_zone_kenmerk_key            INTEGER             := 503;
    c_place_kenmerk_key           INTEGER             := 541;
    c_plaatsnaam_kenmerk_key      INTEGER             := 502;
    c_haltenaam_kenmerk_key       INTEGER             := 504;
    c_Lijnnummer1_kenmerk_key     INTEGER             := 601;

 BEGIN

    -- INIT
    v_result        := c_error_result;
    v_errormsg      := 'INIT';
    v_import_row    := p_HALTECODE||'|'||p_HALTENAAM||'|'||p_PLAATSNAAM||'|'||p_PLACECODE||'|'||p_ZONE||'|'||p_X_COORDINAAT||'|'||p_Y_COORDINAAT||'|'||p_LIJNNUMMER;
    v_terreinsector_key := -1;

    v_HALTENAAM         := substr(p_HALTENAAM,1,40);
    v_HALTECODE         := substr(p_HALTECODE,1,8);
    v_PLAATSNAAM        := substr(p_PLAATSNAAM,1,30);
    v_PLACECODE         := substr(p_PLACECODE,1,10);
    v_ZONE              := substr(p_ZONE,1,4);
    v_X_COORDINAAT      := substr(p_X_COORDINAAT,1,6);
    v_Y_COORDINAAT      := substr(p_Y_COORDINAAT,1,6);
    v_LIJNNUMMER        := substr(p_LIJNNUMMER,1,200);
    v_DEEL_OMSCHRIJVING := substr(c_halte_prefix||v_HALTECODE||' '||v_HALTENAAM,1,30);

    -- controleer of de haltecode wel 8 posities is. Anders gaan we testdata importeren.
    IF length(v_haltecode) <> 8 THEN
      RETURN c_error_result;
    END IF;

    select  get_halte_key(v_HALTECODE,c_halte_code)
    into    v_ins_deel_key
    from    dual;

    IF (v_ins_deel_key <= 0) THEN

        -- alg_terrein
        v_errormsg := '-- Terrein zoeken';
        select  count(*)
        into    v_count
        from    alg_terreinsector
        where   alg_terreinsector_verwijder is null
        and     alg_terreinsector_upper = upper(substr(v_PLAATSNAAM,1,10))
        and		alg_locatie_key = c_locatie_key_onbekend;

        IF (v_count = 0) THEN

            v_errormsg := '-- Nieuwe key voor alg_terrein ophalen ';

            SELECT alg_s_alg_onroerendgoed_keys.NEXTVAL
            INTO v_terreinsector_key
            FROM DUAL;

            v_errormsg := '-- alg_terrein toevoegen ';

            INSERT INTO alg_terreinsector
            (alg_locatie_key
            ,alg_terreinsector_code
            ,alg_terreinsector_naam)
            VALUES
            (c_locatie_key_onbekend
            ,SUBSTR(v_PLAATSNAAM,1,10)
            ,SUBSTR(v_PLAATSNAAM,1,30));

        END IF;

        v_errormsg := '-- Terrein zoeken (2)';
        select  alg_terreinsector_key
        into    v_terreinsector_key
        from    alg_terreinsector
        where   alg_terreinsector_verwijder is null
        and     alg_terreinsector_upper = upper(substr(v_PLAATSNAAM,1,10))
        and		alg_locatie_key = c_locatie_key_onbekend;

        SELECT  ins_s_ins_inst_keys.NEXTVAL
        INTO    v_ins_deel_key
        FROM    DUAL;

        v_errormsg := '-- Toevoegen halte ';

        insert into INS_DEEL
        (ins_deel_key
        ,ins_srtdeel_key
        ,ins_deel_module
        ,ins_alg_ruimte_key
        ,ins_alg_ruimte_type
        ,ins_deel_omschrijving
        , ins_deel_x
        , ins_deel_y)
        values
        (v_ins_deel_key
        ,c_srtdeel_key
        ,c_srtdeel_module
        ,v_terreinsector_key
        ,c_ruimte_type
        ,v_DEEL_OMSCHRIJVING
        ,Fac.safe_to_number(v_X_COORDINAAT)
        ,Fac.safe_to_number(v_Y_COORDINAAT));

    ELSE

      v_errormsg := '-- Update bestaande halte ';

      update  ins_deel
      set     ins_deel_omschrijving = v_DEEL_OMSCHRIJVING
      where   ins_deel_key = v_ins_deel_key;

    END IF;

    v_result := v_ins_deel_key;

    v_errormsg := '-- Verwijder eventueel bestaande flexibele kenmerken die relevant zijn voor de koppeling';

    DELETE
    FROM    ins_kenmerkdeel
    WHERE   ins_deel_key = v_ins_deel_key
    AND     ins_kenmerk_key in (c_halte_code,c_zone_kenmerk_key,c_place_kenmerk_key,c_plaatsnaam_kenmerk_key,c_haltenaam_kenmerk_key,c_Lijnnummer1_kenmerk_key);


    -- c_halte_code
    v_errormsg := '--C-- flexprops Halte code toevoegen met kenmerk_key = <'||to_char(c_Halte_code)||'> en deel_key = <'||to_char(v_ins_deel_key)||'> en v_HALTECODE = <'||substr(v_HALTECODE,1,8)||'>';
    IF v_HALTECODE IS NOT NULL THEN

      INSERT INTO ins_kenmerkdeel
      (      ins_kenmerk_key
      ,      ins_deel_Key
      ,      ins_kenmerkdeel_waarde)
      VALUES(c_Halte_code
      ,      v_ins_deel_key
      ,      substr(v_HALTECODE,1,8));

    END IF;


    -- c_zone_kenmerk_key
    v_errormsg := '--N-- flexprops Zone toevoegen';
    IF v_ZONE IS NOT NULL THEN

      INSERT INTO ins_kenmerkdeel
      (      ins_kenmerk_key
      ,      ins_deel_Key
      ,      ins_kenmerkdeel_waarde)
      VALUES(c_zone_kenmerk_key
      ,      v_ins_deel_key
      ,      v_ZONE);

    END IF;


    -- c_place_kenmerk_key
    v_errormsg := '--C-- flexprops Placecode toevoegen';
    IF v_PLACECODE IS NOT NULL THEN

      INSERT INTO ins_kenmerkdeel
      (      ins_kenmerk_key
      ,      ins_deel_Key
      ,      ins_kenmerkdeel_waarde)
      VALUES(c_place_kenmerk_key
      ,      v_ins_deel_key
      ,      v_PLACECODE);

    END IF;


    -- c_plaatsnaam_kenmerk_key
    v_errormsg := '--C-- flexprops Plaatsnaam toevoegen';
    IF v_PLAATSNAAM IS NOT NULL THEN

      INSERT INTO ins_kenmerkdeel
      (      ins_kenmerk_key
      ,      ins_deel_Key
      ,      ins_kenmerkdeel_waarde)
      VALUES(c_plaatsnaam_kenmerk_key
      ,      v_ins_deel_key
      ,      v_PLAATSNAAM);

    END IF;


    -- c_haltenaam_kenmerk_key
    v_errormsg := '--N-- flexprops Haltenaam toevoegen';
    IF v_HALTENAAM IS NOT NULL THEN

      INSERT INTO ins_kenmerkdeel
      (      ins_kenmerk_key
      ,      ins_deel_Key
      ,      ins_kenmerkdeel_waarde)
      VALUES(c_haltenaam_kenmerk_key
      ,      v_ins_deel_key
      ,      v_HALTENAAM);

    END IF;



    -- c_Lijnnummer1_kenmerk_key
    v_errormsg := '--N-- flexprops passerende lijnen toevoegen';
    IF v_LIJNNUMMER IS NOT NULL THEN

      INSERT INTO ins_kenmerkdeel
      (      ins_kenmerk_key
      ,      ins_deel_Key
      ,      ins_kenmerkdeel_waarde)
      VALUES(c_Lijnnummer1_kenmerk_key
      ,      v_ins_deel_key
      ,      v_LIJNNUMMER);

    END IF;

	RETURN v_result;

    EXCEPTION WHEN OTHERS THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg := v_errormsg || '   ' ||
         '(ORACLE error ' || to_char(oracle_err_num) || '/' || oracle_err_mes
         || ')';
      fac.imp_writelog ('VERWERK_HALTE',
                        'E',
                        v_errormsg,
                        v_import_row
                       );

			RETURN c_error_result;

 END verwerk_halte;

END CONN_HALTES;
/



CREATE OR REPLACE VIEW conn_v_rap_chalte_import AS
SELECT 	imp_log_omschrijving melding, TO_CHAR(imp_log_datum,'DD-MM-YYYY') datum_import, imp_log_hint importregel
FROM imp_log
WHERE imp_log_applicatie = 'VERWERK_HALTE'
ORDER BY imp_log_datum DESC;
/

--//////////////////////////////////////////////////////////////////////////////////CONN#668
-- Somewhat under construction
-- gewijzigde export op basis van gen_export agv FIN module.
-- Schrijft opdrachtgegevens naar file van opdrachten waarvan facturen zijn gefiatteerd
-- Er worden 2 files gegenereerd, voor Coda en voor Navision, welke regel waarin komt
-- wordt bepaald aan de hand van de eerste letter van de kostensoort.
--
-- TODO:
-- post-importzaken: AV verklaren van meldingen etc??
-- Voor facturen/deelfacturen wordt het totaalfactuurbedrag vereist in de exportfile,
-- om aan te kunnen geven dat er betaald kan worden. Dit factuurtotaal wordt berekend
-- door de som van alle facturen met hetzelfde factuurnummer en van dezelfde leverancier
-- te nemen, ongeacht de fiatteringsstatus. Dit is waarschijnlijk het bedrag inclusief BTW (?).

-- Tabellen voor de exporteren van factuurgegevens (naar C=Coda en N=Navision)
CREATE OR REPLACE VIEW CONN_V_EXP_BES
(ORDERNR, FACTUURNR, LEVERANCIERSNR, FACTUURDATUM, BOEKINGSDATUM,
 SPREIDENOVER, KOSTENSOORT, FACREGELOMS, LOCATIENR, BUDGETCODE,
 HUURDERNR, AANTAL, PRIJS, VERDEELPERIODE, BTWTYPE,
 TOTAAL, KLANTNR, EIGENAAR, FIN_FACTUUR_KEY)
AS
SELECT      TO_CHAR (bo.bes_bestelopdr_key) OrderNr,
            f.fin_factuur_nr FactNr,
            b.prs_leverancier_nr LeverancNr,
            TO_CHAR (f.fin_factuur_datum, 'YYYYMMDD') FactDatum,
            '' BoekDatum,
            '' SpreidenOver,
            COALESCE(kfr.prs_kostensoort_oms, ks.prs_kostensoort_oms, kst.prs_kostensoort_oms) KostenSoort,
            fr.fin_factuurregel_omschrijving Omschrijving,
            fr.fin_factuurregel_referentie KostenPlaats,
            (SELECT SUBSTR(k.prs_kostenplaats_nr, 1 ,INSTR(k.prs_kostenplaats_nr, '/', 1, 1)-1)
               FROM dual) BudgetCode,
            (SELECT SUBSTR(k.prs_kostenplaats_nr, INSTR(k.prs_kostenplaats_nr, '/', 1, 1)+1)
               FROM dual) Huurder,
            SUM(boi.bes_bestelopdr_item_aantal) Aantal,
            fr.fin_factuurregel_totaal KostPrijs, --SUM(boi.bes_bestelopdr_item_prijs) KostPrijs,
            COALESCE (fin_factuur_boekmaand, TO_CHAR (f.fin_factuur_datum, 'YYYY-MM')) VerdeelPeriode,
            DECODE (fr.fin_factuurregel_totaal,
                    0, '0',
                    DECODE (ROUND(100*fr.fin_factuurregel_btw/fr.fin_factuurregel_totaal), 19, '2',6,'1','0')
                   ) BTWtype,
            (f.fin_factuur_totaal + f.fin_factuur_totaal_BTW) TotBedrFactuur,
            f.fin_factuur_debiteur_nr OnsKlantNr,
            'FB' Bedrijf,
            f.fin_factuur_key
       FROM bes_bestelopdr bo,
            prs_bedrijf b,
            bes_bestelling bes,
            bes_bestelopdr_item boi,
            bes_bestelling_item bi,
            prs_kostenplaats k,
            fin_factuur f,
            fin_factuurregel fr,
            prs_kostensoort kfr,
            prs_kostensoort ks,
            bes_srtdeel isd,
            bes_srtgroep isg,
            ins_tab_discipline itd,
            prs_kostensoort kst
      WHERE b.prs_bedrijf_key = bo.prs_bedrijf_key
        AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
        AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
        AND bes.bes_bestelling_key = bi.bes_bestelling_key
        AND k.prs_kostenplaats_key = bes.prs_kostenplaats_key
        AND f.prs_kostensoort_key = ks.prs_kostensoort_key(+)
        AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key
        AND f.fin_factuur_statuses_key = 6
        AND f.fin_factuur_key = fr.fin_factuur_key
        AND fr.prs_kostensoort_key = kfr.prs_kostensoort_key(+)
        AND kst.prs_kostensoort_key = itd.prs_kostensoort_key
        AND itd.ins_discipline_key = isg.ins_discipline_key
        AND isg.bes_srtgroep_key = isd.bes_srtgroep_key
        AND isd.bes_srtdeel_key = bi.bes_srtdeel_key
   GROUP BY TO_CHAR (bo.bes_bestelopdr_key),
            f.fin_factuur_nr,
            b.prs_leverancier_nr,
            TO_CHAR (f.fin_factuur_datum, 'YYYYMMDD'),
            COALESCE(kfr.prs_kostensoort_oms, ks.prs_kostensoort_oms, kst.prs_kostensoort_oms),
            fr.fin_factuurregel_omschrijving,
            fr.fin_factuurregel_referentie,
            k.prs_kostenplaats_nr,
            fr.fin_factuurregel_totaal,
            COALESCE (fin_factuur_boekmaand, TO_CHAR (f.fin_factuur_datum, 'YYYY-MM')),
            DECODE (ROUND(100*fr.fin_factuurregel_btw/fr.fin_factuurregel_totaal), 19, '2',6,'1','0'),
            f.fin_factuur_totaal_btw,
            f.fin_factuur_totaal,
            f.fin_factuur_debiteur_nr,
            f.fin_factuur_key;


CREATE OR REPLACE VIEW CONN_V_EXP_CNT
(ORDERNR, FACTUURNR, LEVERANCIERSNR, FACTUURDATUM, BOEKINGSDATUM,
 SPREIDENOVER, KOSTENSOORT, FACREGELOMS, LOCATIENR, BUDGETCODE,
 HUURDERNR, AANTAL, PRIJS, VERDEELPERIODE, BTWTYPE,
 TOTAAL, KLANTNR, EIGENAAR, FIN_FACTUUR_KEY)
AS
SELECT    'C' || c.cnt_contract_nummer_intern opdrachtnr,
          f.fin_factuur_nr FactNr,
          b.prs_leverancier_nr LeverancNr,
          TO_CHAR (f.fin_factuur_datum, 'YYYYMMDD') FactDatum,
          '' BoekDatum,
          '' SpreidenOver,
          COALESCE(kfr.prs_kostensoort_oms, ks.prs_kostensoort_oms, kst.prs_kostensoort_oms) KostenSoort,
          fr.fin_factuurregel_omschrijving Omschrijving,
          fr.fin_factuurregel_referentie KostenPlaats,
          (SELECT SUBSTR(k.prs_kostenplaats_nr, 1 ,INSTR(k.prs_kostenplaats_nr, '/', 1, 1)-1)
             FROM dual) BudgetCode,
          '' Huurder,
          1 Aantal,
          fr.fin_factuurregel_totaal KostPrijs, --SUM(boi.bes_bestelopdr_item_prijs) KostPrijs,
          COALESCE (fin_factuur_boekmaand, TO_CHAR (f.fin_factuur_datum, 'YYYY-MM')) VerdeelPeriode,
          DECODE (fr.fin_factuurregel_totaal,
                  0, '0',
                  DECODE (ROUND(100*fr.fin_factuurregel_btw/fr.fin_factuurregel_totaal), 19, '2',6,'1','0')
                 ) BTWtype,
          (f.fin_factuur_totaal + f.fin_factuur_totaal_BTW) TotBedrFactuur,
          f.fin_factuur_debiteur_nr OnsKlantNr,
          'FB' Bedrijf,
          f.fin_factuur_key
     FROM prs_bedrijf b,
          cnt_contract c,
          prs_kostenplaats k,
          prs_kostensoort ks,
          prs_kostensoort kst,
          fin_factuur f,
          fin_factuurregel fr,
          prs_kostensoort kfr
    WHERE f.cnt_contract_key = c.cnt_contract_key
      AND b.prs_bedrijf_key = c.cnt_prs_bedrijf_key
      AND c.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
      AND c.prs_kostensoort_key = kst.prs_kostensoort_key(+)
      AND f.prs_kostensoort_key = ks.prs_kostensoort_key(+)
      AND fr.fin_factuur_key = f.fin_factuur_key
      AND fr.prs_kostensoort_key = kfr.prs_kostensoort_key(+)
      AND f.fin_factuur_statuses_key = 6;


CREATE OR REPLACE VIEW CONN_V_EXP_MLD
(ORDERNR, FACTUURNR, LEVERANCIERSNR, FACTUURDATUM, BOEKINGSDATUM,
 SPREIDENOVER, KOSTENSOORT, FACREGELOMS, LOCATIENR, BUDGETCODE,
 HUURDERNR, AANTAL, PRIJS, VERDEELPERIODE, BTWTYPE,
 TOTAAL, KLANTNR, EIGENAAR, FIN_FACTUUR_KEY, PRS_KOSTENPLAATS_MODULE, PRS_KOSTENPLAATS_NR)
AS
SELECT    sdi.ins_srtdiscipline_prefix || o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr opdrachtnr,
          f.fin_factuur_nr FactNr,
          b.prs_leverancier_nr LeverancNr,
          TO_CHAR (f.fin_factuur_datum, 'YYYYMMDD') FactDatum,
          '' BoekDatum,  -- mld_kenmerk_key = 131 , wordt niet meer gebruikt
          '' SpreidenOver,
          COALESCE(kfr.prs_kostensoort_oms, ks.prs_kostensoort_oms,
              COALESCE((SELECT prs_kostensoort_oms
                     FROM prs_kostensoort kst
                    WHERE kst.prs_kostensoort_key = stdm.prs_kostensoort_key),
                  (SELECT kst.prs_kostensoort_oms
                     FROM prs_kostensoort kst
                    WHERE kst.prs_kostensoort_key = di.prs_kostensoort_key))) KostenSoort,
          fr.fin_factuurregel_omschrijving Omschrijving,
          fr.fin_factuurregel_referentie KostenPlaats,
          (SELECT SUBSTR(k.prs_kostenplaats_nr, 1 ,INSTR(k.prs_kostenplaats_nr, '/', 1, 1)-1)
             FROM dual) BudgetCode,
          DECODE(mld_kosten_klant, 1, (SELECT SUBSTR(k.prs_kostenplaats_nr, INSTR(k.prs_kostenplaats_nr, '/', 1, 1)+1)
             FROM dual), '') Huurder,
          1 Aantal,
          fr.fin_factuurregel_totaal KostPrijs,
          COALESCE (fin_factuur_boekmaand, TO_CHAR (f.fin_factuur_datum, 'YYYY-MM')) VerdeelPeriode,
          DECODE (fr.fin_factuurregel_totaal,
                  0, '0',
                  DECODE (ROUND(100*fr.fin_factuurregel_btw/fr.fin_factuurregel_totaal), 19, '2',6,'1','0')
                 ) BTWtype,
          (f.fin_factuur_totaal + f.fin_factuur_totaal_BTW) TotBedrFactuur,
          f.fin_factuur_debiteur_nr OnsKlantNr,
          (SELECT fud.fac_usrdata_omschr
             FROM mld_kenmerkopdr v,
                 fac_usrdata fud
           WHERE v.mld_kenmerkopdr_waarde = fud.fac_usrdata_key
             AND v.mld_opdr_key = o.mld_opdr_key
             AND v.mld_kenmerk_key = 83) Bedrijf,
          f.fin_factuur_key,
          prs_kostenplaats_module,
          prs_kostenplaats_nr
     FROM mld_opdr o,
          prs_bedrijf b,
          mld_melding m,
          prs_kostenplaats k,
          fin_factuur f,
          fin_factuurregel fr,
          prs_kostensoort kfr,
          alg_locatie l,
          mld_stdmelding stdm,
          ins_tab_discipline di,
          ins_srtdiscipline sdi,
          prs_kostensoort ks
    WHERE b.prs_bedrijf_key = o.mld_uitvoerende_keys
      AND o.mld_melding_key = m.mld_melding_key
      AND k.prs_kostenplaats_key = o.prs_kostenplaats_key
      AND m.mld_alg_locatie_key = l.alg_locatie_key
      AND f.mld_opdr_key = o.mld_opdr_key
      AND f.fin_factuur_key = fr.fin_factuur_key
      AND fr.prs_kostensoort_key = kfr.prs_kostensoort_key(+)
      AND m.mld_stdmelding_key = stdm.mld_stdmelding_key
      AND di.ins_discipline_key = stdm.mld_ins_discipline_key
      AND sdi.ins_srtdiscipline_key = di.ins_srtdiscipline_key
      AND f.prs_kostensoort_key = ks.prs_kostensoort_key(+)
      AND f.fin_factuur_statuses_key = 6
ORDER BY 1, 2;



-- Procedure voor de import van facturen (van leverancier of basware)
CREATE OR REPLACE PROCEDURE conn_import_factuur (
   p_import_key IN NUMBER
)
AS
   v_newline          fac_imp_file.fac_imp_file_line%TYPE;                        -- Input line
   v_field              VARCHAR2 (100);
   v_fielddelimitor     VARCHAR2 (1);
   v_errormsg           VARCHAR (200);
   oracle_err_num       NUMBER;
   oracle_err_mes       VARCHAR2 (200);
   header_is_valid      NUMBER;
   -- De velden op de eerste regel
   v_totbedrfact        VARCHAR2 (100);
   v_totbedrfactvalue   VARCHAR2 (100);
   -- De importvelden
   v_empty              VARCHAR2 (100);
   v_onsklantnr            VARCHAR2 (100);
   v_ordernr            VARCHAR2 (100);
   v_leveranciernr      VARCHAR2 (100);
   v_factuurnr          VARCHAR2 (100);
   v_factuurdatum       VARCHAR2 (100);
   v_aantal             VARCHAR2 (100);
   v_kostprijs          VARCHAR2 (100);
   v_btw                VARCHAR2 (100);
   v_btw_bedrag         VARCHAR2 (100);
   v_docid              VARCHAR2 (100);
   v_locatie            VARCHAR2 (100);
   v_afleverdatum       VARCHAR2 (100);
   v_omschrijving       VARCHAR2 (100);
   v_check_dec_sign     NUMBER(5,2);

   CURSOR cfactuur
   IS
   SELECT *
        FROM    fac_imp_file
       WHERE    fac_import_key = p_import_key
       ORDER BY FAC_IMP_FILE_INDEX;

   v_rec cfactuur%rowtype;

BEGIN
   -- Init
   v_fielddelimitor := ';';
   header_is_valid := 0;

   DELETE FROM conn_imp_factuur;

   -- check the client decimal settings
   -- we do not convert the , to a . if the client decimal separator is a ,
   SELECT FAC.SAFE_TO_NUMBER('2,5')
     INTO v_check_dec_sign
     FROM DUAL;

	fac.imp_writelog (p_import_key, 'S',
	                  'Cxx factuurimport $Revision$', '');

   OPEN cfactuur;
   IF cfactuur%ISOPEN THEN
     LOOP
       BEGIN
         FETCH cfactuur INTO v_rec;
         EXIT WHEN cfactuur%NOTFOUND;

         v_newline := v_rec.fac_imp_file_line;

         fac.imp_getfield (v_newline, v_fielddelimitor, v_leveranciernr);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_factuurnr);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_factuurdatum);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_empty);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_ordernr);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_locatie);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_afleverdatum);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_omschrijving);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_aantal);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_kostprijs);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_btw_bedrag);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_btw);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_docid);

         IF v_check_dec_sign IS NULL THEN
           v_kostprijs  := REPLACE (SUBSTR (v_kostprijs, 1, 11), ',', '.');
           v_btw_bedrag := REPLACE (SUBSTR (v_btw_bedrag, 1, 11), ',', '.');
           v_aantal     := REPLACE (SUBSTR (v_aantal, 1, 11), ',', '.');
         ELSE
           v_kostprijs  := SUBSTR (v_kostprijs, 1, 11);
           v_btw_bedrag := SUBSTR (v_btw_bedrag, 1, 11);
           v_aantal     := SUBSTR (v_aantal, 1, 11);
         END IF;

         -- CONN#17357 en CONN#16819:
         -- Voorkom invalid number error door een '-' in btw_bedrag
         IF ( TRIM(v_btw_bedrag) = '-' )
         THEN
            v_btw_bedrag := '0';
         	fac.imp_writelog (p_import_key, 'I',
         	                  'BTW-bedrag ''-'' vervangen door ''0''',
         	                  SUBSTR (v_ordernr, 1, 13)||' / '||SUBSTR (v_factuurnr, 1, 10) );
         END IF;

         INSERT INTO conn_imp_factuur
                     (debiteurnr,
                      ordernr,
                      leveranciernr,
                      factuurnr,
                      factuurdatum,
                      aantal,
                      kostprijs,
                      btw,
                      btw_bedrag,
                      locatie,
                      afleverdatum,
                      omschrijving,
                      docid
                     )
              VALUES (SUBSTR (v_onsklantnr, 1, 30),
                      SUBSTR (v_ordernr, 1, 13),
                      UPPER(SUBSTR (v_leveranciernr, 1, 10)),
                      SUBSTR (v_factuurnr, 1, 10),
                      SUBSTR (v_factuurdatum, 1, 8),
                      SUBSTR (v_aantal, 1, 10),
                      v_kostprijs,
                      SUBSTR (v_btw, 1, 2),
                      v_btw_bedrag,
                      SUBSTR (v_locatie, 1, 4),
                      SUBSTR (v_afleverdatum, 1, 8),
                      SUBSTR (v_omschrijving, 1, 60),
                      SUBSTR (v_docid, 1, 100)
                     );

         COMMIT;
       END;
     END LOOP;
   END IF;

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

CREATE OR REPLACE PROCEDURE conn_update_factuur (p_import_key IN NUMBER)
AS
   CURSOR congeldig
   IS
      SELECT ordernr, factuurnr,
             aantal, kostprijs, btw, btw_bedrag,
             locatie, omschrijving
        FROM conn_imp_factuur
       WHERE    fac.safe_to_number(aantal) IS NULL
             OR fac.safe_to_number(kostprijs) IS NULL
             OR fac.safe_to_number(btw) IS NULL
             OR fac.safe_to_number(btw_bedrag) IS NULL;

   CURSOR cfactuur
   IS
        SELECT   RTRIM (LTRIM (ordernr)) ordernr,
                 leveranciernr,
                 factuurnr,
                 factuurdatum,
                 SUM (kostprijs) totaal,
                 SUM (btw_bedrag) totaal_btw,
                 btw,
                 SUBSTR (factuurdatum, 5, 4) fjaar,
                 SUBSTR (factuurdatum, 3, 2) fmaand,
                 SUBSTR (factuurdatum, 1, 2) fdag,
                 debiteurnr,                                                               -- wordt nog niets mee gedaan
                 SUM (aantal) aantal,
                 locatie,
                 SUBSTR (afleverdatum, 5, 4) ajaar, -- afleverdatum nodig om opdrachtnummer bij bestelopdrachten te achterhalen indien ordernr niet is meegegeven
                 SUBSTR (afleverdatum, 3, 2) amaand,
                 SUBSTR (afleverdatum, 1, 2) adag,
                 omschrijving,
                 SUM (btw_bedrag) btw_bedrag
          FROM   conn_imp_factuur
      GROUP BY   ordernr,
                 leveranciernr,
                 factuurnr,
                 factuurdatum,
                 btw,
                 factuurdatum,
                 debiteurnr,
                 locatie,
                 omschrijving,
                 afleverdatum
      ORDER BY   ordernr, btw DESC;

   c_i NUMBER;
   c_teller NUMBER;
   c_index NUMBER;
   c_factuurregel NUMBER;
   c_fac_type VARCHAR2 (1);
   c_prefix VARCHAR2 (3);
   c_ordernr_index NUMBER;
   c_ordernr_s1 VARCHAR2 (20);
   c_ordernr_s2 VARCHAR2 (20);
   c_ordernr_t VARCHAR2 (40);
   c_old_ordernr VARCHAR2 (20);
   c_write_ordernr VARCHAR2 (20);
   c_bestelopdr_id VARCHAR2 (20);
   c_totaal NUMBER;
   c_fact_totaal NUMBER;
   c_factuur_totaal NUMBER;
   c_factuur_btw NUMBER;
   c_find BOOLEAN;
   c_find_ordernr BOOLEAN;
   c_mld_opdr_key NUMBER (10);
   c_cnt_contract_key NUMBER (10);
   c_bes_bestelopdr_key NUMBER (10);
   c_prs_bedrijf_naam VARCHAR2 (100);
   c_opmerking VARCHAR2 (150);
   v_desc VARCHAR2(100);
   v_errormsg VARCHAR (200);
   oracle_err_mes VARCHAR2 (150);
   dummy VARCHAR2 (1);
   v_count NUMBER;
BEGIN
   c_old_ordernr := '';
   c_teller := 0;

   -- CONN#17357 en CONN#16819:
   -- Voorkom invalid number error voor ongeldige getallen (specifiek een '-' in btw_bedrag)
   -- 1) Zijn er fouten?
   SELECT COUNT (*)
     INTO v_count
     FROM conn_imp_factuur
    WHERE    fac.safe_to_number (aantal) IS NULL
          OR fac.safe_to_number (kostprijs) IS NULL
          OR fac.safe_to_number (btw) IS NULL
          OR fac.safe_to_number (btw_bedrag) IS NULL;

   -- 2a) Rapporteer 'invalid numbers' en beëindig import
   IF (v_count > 0)
   THEN
      fac.imp_writelog (p_import_key, 'E',
                        'Ongeldig importbestand; import wordt afgebroken.', 'Corrigeer de genoemde fouten.');

      FOR rco IN congeldig
      LOOP
         v_desc := rco.ordernr||' / '||rco.factuurnr;
         IF ( COALESCE(fac.safe_to_number(rco.kostprijs),  -1) = -1 )
         THEN
            fac.imp_writelog (p_import_key, 'E', 'Ongeldige kostprijs ['||rco.kostprijs||']', v_desc);
         END IF;
         IF ( COALESCE(fac.safe_to_number(rco.btw_bedrag), -1) = -1 )
         THEN
            fac.imp_writelog (p_import_key, 'E', 'Ongeldig BTW-bedrag ['||rco.btw_bedrag||']', v_desc);
         END IF;
         IF ( COALESCE(fac.safe_to_number(rco.aantal),     -1) = -1 )
         THEN
            fac.imp_writelog (p_import_key, 'E', 'Ongeldig aantal artikelen ['||rco.aantal||']', v_desc);
         END IF;
         IF ( COALESCE(fac.safe_to_number(rco.btw),        -1) = -1 )
         THEN
            fac.imp_writelog (p_import_key, 'E', 'Ongeldig BTW-percentage ['||rco.btw||']', v_desc);
         END IF;
      END LOOP;

   -- 2b) Geen 'invalid numbers' --> import!
   ELSE
      -- Facturen
      FOR rc IN cfactuur
      LOOP
         IF rc.ordernr = c_old_ordernr
         THEN
            -- voeg alleen nieuwe factuurregel toe die een andere BTW waarde heeft
            -- waarde van c_index is nog steeds actueel
            c_factuurregel := c_factuurregel + 1;

            BEGIN
               INSERT INTO fin_factuurregel (
                                                fin_factuur_key,
                                                fin_factuurregel_nr,
                                                fin_factuurregel_totaal,
                                                fin_factuurregel_btw,
                                                fin_factuurregel_omschrijving,
                                                fin_factuurregel_referentie
                          )
                 VALUES   (c_index, c_factuurregel, rc.totaal, rc.totaal_btw, rc.omschrijving, rc.locatie
                          );

               COMMIT;
               fac.imp_writelog (p_import_key,
                                 'I',
                                 'Factuurregel ' || c_factuurregel || ' toegevoegd aan factuur ' || c_index,
                                 rc.ordernr || ' / ' || rc.factuurnr
                                );
            EXCEPTION
               WHEN OTHERS
               THEN
                  oracle_err_mes := SUBSTR (SQLERRM, 1, 150);
                  v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
                  fac.imp_writelog (p_import_key,
                                    'E',
                                    'Factuur(regel) kan niet toegevoegd worden ' || v_errormsg,
                                    rc.ordernr || '/' || rc.factuurnr
                                   );
            END;

            c_teller := c_teller + 1;
         ELSE
            c_old_ordernr := rc.ordernr;
            c_factuurregel := 1;
            c_ordernr_index := INSTR (rc.ordernr, '/');
            c_totaal := 0;
            c_mld_opdr_key := NULL;
            c_cnt_contract_key := NULL;
            c_bes_bestelopdr_key := NULL;

            IF c_ordernr_index = 0
            THEN
               c_ordernr_s1 := rc.ordernr;
               c_ordernr_s2 := '';
            ELSE
               c_ordernr_s1 := SUBSTR (rc.ordernr, 1, c_ordernr_index - 1);
               c_ordernr_s2 := SUBSTR (rc.ordernr, c_ordernr_index + 1);
            END IF;

            c_find := FALSE;
            c_find_ordernr := FALSE;
            c_fac_type := '';
            c_prefix := '';

            IF (LENGTH (rc.ordernr) > 0)
            THEN
               c_prefix := SUBSTR (rc.ordernr, 1, 1);

               IF ( ( (ASCII (SUBSTR (c_prefix, 1, 1)) >= 65 AND ASCII (SUBSTR (c_prefix, 1, 1)) <= 90)
                     OR (ASCII(SUBSTR (c_prefix, 1, 1)) >= 97 AND ASCII (SUBSTR (c_prefix, 1, 1)) <= 122))
                   AND ASCII (SUBSTR (c_prefix, 1, 1)) != 67
                   AND ASCII (SUBSTR (c_prefix, 1, 1)) != 99)
               THEN
                  c_fac_type := 'O';                                                                  -- Opdracht (Melding)
               ELSIF (ASCII (SUBSTR (c_prefix, 1, 1)) >= 48 AND ASCII (SUBSTR (c_prefix, 1, 1)) <= 57)
               THEN
                  c_fac_type := 'B';                                                                          -- Bestelling
               ELSIF (ASCII (SUBSTR (c_prefix, 1, 1)) = 67 OR ASCII (SUBSTR (c_prefix, 1, 1)) = 99)
               THEN
                  c_fac_type := 'C';                                                                            -- Contract
               ELSE
                  fac.imp_writelog (p_import_key,
                                    'I',
                                    'Kan type van factuur niet bepalen ',
                                    rc.ordernr || ' / ' || rc.factuurnr
                                   );
               END IF;
            ELSE
               BEGIN
                  -- Probeer opdrachtnummer te achterhalen bij bestelopdrachten
                  -- met hetzelfde leveranciersnummer, locatie, afleverdatum en aantal
                  SELECT   bo.bes_bestelopdr_id
                    INTO   c_bestelopdr_id
                    FROM   bes_bestelopdr bo,
                           bes_bestelopdr_item boi,
                           bes_bestelling_item bbi,
                           bes_bestelling bb,
                           mld_adres ma,
                           alg_locatie l,
                           prs_bedrijf b
                   WHERE       bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
                           AND boi.bes_bestelopdr_item_key = bbi.bes_bestelopdr_item_key
                           AND bbi.bes_bestelling_key = bb.bes_bestelling_key
                           AND boi.bes_bestelopdr_item_aantal = rc.aantal
                           AND bb.bes_bestelling_leverdatum =
                                 TO_DATE (rc.ajaar || '-' || rc.amaand || '-' || rc.adag || ' 00:00',
                                          'YYYY-MM-DD HH24:MI'
                                         )
                           AND bo.mld_adres_key_lev = ma.mld_adres_key
                           AND ma.alg_locatie_key = l.alg_locatie_key
                           AND l.alg_locatie_code = rc.locatie
                           AND bo.prs_bedrijf_key = b.prs_bedrijf_key
                           AND b.prs_leverancier_nr = rc.leveranciernr;

                  c_find_ordernr := TRUE;
               EXCEPTION
                  WHEN NO_DATA_FOUND
                  THEN
                     oracle_err_mes := SUBSTR (SQLERRM, 1, 150);
                     v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
                     fac.imp_writelog (
                        p_import_key,
                        'I',
                        'Kan het bestelopdrachtnummer (OrderNr) niet vinden ' || v_errormsg,
                           '?/'
                        || rc.factuurnr
                        || '/'
                        || rc.aantal
                        || '/'
                        || rc.ajaar
                        || '-'
                        || rc.amaand
                        || '-'
                        || rc.adag
                        || '/'
                        || rc.locatie
                        || '/'
                        || rc.leveranciernr
                     );
                     c_find_ordernr := FALSE;
               END;

               IF c_find_ordernr
               THEN
                  c_ordernr_index := INSTR (c_bestelopdr_id, '/');
                  c_totaal := 0;

                  IF c_ordernr_index = 0
                  THEN
                     c_ordernr_s1 := c_bestelopdr_id;
                     c_ordernr_s2 := '';
                  ELSE
                     c_ordernr_s1 := SUBSTR (c_bestelopdr_id, 1, c_ordernr_index - 1);
                     c_ordernr_s2 := SUBSTR (c_bestelopdr_id, c_ordernr_index + 1);
                  END IF;

                  c_fac_type := 'B';
               END IF;
            END IF;

            IF c_fac_type = 'O'
            THEN
               IF (c_ordernr_index != 0
                   AND (ASCII (SUBSTR (c_prefix, 1, 1)) >= 48 AND ASCII (SUBSTR (c_prefix, 1, 1)) <= 57))
               -- Er is geen prefix maar het is wel een opdracht
               -- Afgedwongen door /
               THEN
                  -- c_ordernr_s2 bevat al het gedeelte na de /
                  -- c_ordernr_s1 bevat geen prefix
                  c_find := TRUE;
               ELSE
                  c_i := 1;

                  LOOP
                     IF (ASCII (SUBSTR (c_ordernr_s1, c_i, 1)) >= 48 AND ASCII (SUBSTR (c_ordernr_s1, c_i, 1)) <= 57)
                     THEN
                        c_find := TRUE;
                     ELSE
                        c_i := c_i + 1;
                     END IF;

                     EXIT WHEN (c_find OR c_i > LENGTH (c_ordernr_s1));
                  END LOOP;

                  IF c_find
                  THEN
                     c_ordernr_s1 := SUBSTR (c_ordernr_s1, c_i);
                  ELSE
                     fac.imp_writelog (p_import_key,
                                       'I',
                                       'Kan OrderNr niet bepalen ',
                                       rc.ordernr || ' / ' || rc.factuurnr
                                      );
                  END IF;
               END IF;
            ELSIF c_fac_type = 'C'
            THEN
               -- haal prefix 'C' of 'c' eraf
               c_ordernr_s1 := SUBSTR (c_ordernr_s1, 2);
               c_find := TRUE;
            ELSIF c_fac_type = 'B'
            THEN
               -- geen prefix aanwezig, c_ordernr_s1 is goed
               c_find := TRUE;
            END IF;

            -- c_ordernr_s1 bevat ordernummer
            -- c_ordernr_s2 bevat volgnummer van de opdracht bij meldingen
            -- Bij bestellingen en contracten is deze waarde leeg

            -- Vind mld_opdr_key met mld_melding_key
            IF c_fac_type = 'O'
            THEN
               c_cnt_contract_key := NULL;
               c_bes_bestelopdr_key := NULL;

               BEGIN
                  SELECT   o.mld_opdr_key
                    INTO   c_mld_opdr_key
                    FROM   mld_opdr o
                   WHERE   o.mld_melding_key = c_ordernr_s1 AND mld_opdr_bedrijfopdr_volgnr = c_ordernr_s2;
               EXCEPTION
                  WHEN NO_DATA_FOUND
                  THEN
                     oracle_err_mes := SUBSTR (SQLERRM, 1, 150);
                     v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
                     fac.imp_writelog (p_import_key,
                                       'I',
                                       'Kan de melding referentie niet vinden ' || v_errormsg,
                                       rc.ordernr || '/' || rc.factuurnr
                                      );
                     c_find := FALSE;
               END;
            ELSIF c_fac_type = 'C'
            THEN
               -- bestaat het contract wel?
               BEGIN
                  SELECT   cnt_contract_key
                    INTO   c_cnt_contract_key
                    FROM   cnt_contract
                   WHERE   cnt_contract_key = c_ordernr_s1;
               EXCEPTION
                  WHEN OTHERS
                  THEN
                     c_cnt_contract_key := NULL;
                     c_find := FALSE;
               END;

               c_bes_bestelopdr_key := NULL;
               c_mld_opdr_key := NULL;
            ELSIF c_fac_type = 'B'
            THEN
               c_cnt_contract_key := NULL;

               -- vind de bestelopdracht key?
               BEGIN
                  IF c_ordernr_s2 IS NULL
                  THEN
                     c_ordernr_t := c_ordernr_s1;
                  ELSE
                     c_ordernr_t := c_ordernr_s1 || '/' || c_ordernr_s2;
                  END IF;

                  SELECT   bes_bestelopdr_key
                    INTO   c_bes_bestelopdr_key
                    FROM   bes_bestelopdr
                   WHERE   bes_bestelopdr_id = c_ordernr_t;
               EXCEPTION
                  WHEN OTHERS
                  THEN
                     c_bes_bestelopdr_key := NULL;
                     c_find := FALSE;
               END;

               c_mld_opdr_key := NULL;
            END IF;

            --  CONN#12074 ook facturen die niet gelinkt kunnen worden moeten ingelezen worden.
            --   IF (    (c_fac_type = 'B' OR c_fac_type = 'C' OR c_fac_type = 'O')
            --       AND c_find
            --      )
            --   THEN
            c_opmerking := '';

            IF NOT c_find
            THEN
               BEGIN
                  SELECT   prs_bedrijf_naam
                    INTO   c_prs_bedrijf_naam
                    FROM   prs_bedrijf
                   WHERE   prs_leverancier_nr = rc.leveranciernr;

                  c_opmerking := 'Leverancier: ' || c_prs_bedrijf_naam || ' Ontvangen ordernummer: ' || rc.ordernr;
               EXCEPTION
                  WHEN NO_DATA_FOUND
                  THEN
                     c_opmerking := 'Leverancier: onbekend' || ' Ontvangen ordernummer: ' || rc.ordernr;
               END;
            END IF;

            BEGIN
               SELECT   fin_s_fin_factuur_key.NEXTVAL INTO c_index FROM DUAL;

               SELECT   SUM (kostprijs) totaal, SUM (btw_bedrag) totaal_btw
                 INTO   c_factuur_totaal, c_factuur_btw
                 FROM   conn_imp_factuur
                WHERE   LTRIM (RTRIM (ordernr)) = rc.ordernr;

               INSERT INTO fin_factuur (
                                           fin_factuur_key,
                                           fin_factuur_totaal,
                                           fin_factuur_totaal_btw,
                                           mld_opdr_key,
                                           cnt_contract_key,
                                           bes_bestelopdr_key,
                                           prs_perslid_key_user,
                                           fin_factuur_datum,
                                           fin_factuur_opmerking,
                                           fin_factuur_statuses_key,
                                           fin_factuur_nr,
                                           fin_factuur_boekmaand,
                                           fin_factuur_debiteur_nr,
                                           prs_kostensoort_key
                          )
                 VALUES   (
                              c_index,
                              c_factuur_totaal,
                              c_factuur_btw,
                              c_mld_opdr_key,
                              c_cnt_contract_key,
                              c_bes_bestelopdr_key,
                              1042,                                                                   -- Martin Hanemaaijer
                              TO_DATE (rc.fjaar || '-' || rc.fmaand || '-' || rc.fdag || ' 00:00', 'YYYY-MM-DD HH24:MI'),
                              'Ge¿mporteerde factuur ' || c_opmerking,
                              2,
                              rc.factuurnr,
                              rc.fjaar || '-' || rc.fmaand,
                              rc.debiteurnr,
                              NULL
                          );

               COMMIT;


               INSERT INTO fin_factuurregel (
                                                fin_factuur_key,
                                                fin_factuurregel_nr,
                                                fin_factuurregel_totaal,
                                                fin_factuurregel_btw,
                                                fin_factuurregel_omschrijving,
                                                fin_factuurregel_referentie
                          )
                 VALUES   (c_index, c_factuurregel,                                               -- Zal hier altijd 1 zijn
                                                   rc.totaal, rc.totaal_btw, rc.omschrijving, rc.locatie
                          );

               COMMIT;

               IF c_find_ordernr
               THEN
                  c_write_ordernr := c_bestelopdr_id;
               ELSE
                  c_write_ordernr := rc.ordernr;
               END IF;

               fac.imp_writelog (p_import_key,
                                 'I',
                                 'Factuur ' || c_index || ' toegevoegd met factuurregel ' || c_factuurregel,
                                 c_write_ordernr || ' / ' || rc.factuurnr
                                );
            EXCEPTION
               WHEN OTHERS
               THEN
                  oracle_err_mes := SUBSTR (SQLERRM, 1, 150);
                  v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
                  fac.imp_writelog (p_import_key,
                                    'E',
                                    'Factuur(regel) kan niet toegevoegd worden ' || v_errormsg,
                                    rc.ordernr || '/' || rc.factuurnr
                                   );
            END;

            --  END IF;

            c_teller := c_teller + 1;
         END IF;
      END LOOP;

      -- Facturen
      -- Welke bestelling kan afgemeld worden. (Alleen bestellingen kunnen automatisch afgemeld worden)
      FOR rc IN cfactuur
      LOOP
         c_fac_type := '';
         c_prefix := '';
         c_find_ordernr := FALSE;

         IF (LENGTH (rc.ordernr) > 0)
         THEN
            c_prefix := SUBSTR (rc.ordernr, 1, 1);

            IF ( ( ( (ASCII (SUBSTR (c_prefix, 1, 1)) >= 65 AND ASCII (SUBSTR (c_prefix, 1, 1)) <= 90)
                    OR (ASCII(SUBSTR (c_prefix, 1, 1)) >= 97 AND ASCII (SUBSTR (c_prefix, 1, 1)) <= 122))
                  AND ASCII (SUBSTR (c_prefix, 1, 1)) != 67
                  AND ASCII (SUBSTR (c_prefix, 1, 1)) != 99))
            THEN
               c_fac_type := 'O';                                                                     -- Opdracht (Melidng)
            ELSIF (ASCII (SUBSTR (c_prefix, 1, 1)) >= 48 AND ASCII (SUBSTR (c_prefix, 1, 1)) <= 57)
            THEN
               c_fac_type := 'B';                                                                             -- Bestelling
               c_bestelopdr_id := rc.ordernr;
            ELSIF (ASCII (SUBSTR (c_prefix, 1, 1)) = 67 OR ASCII (SUBSTR (c_prefix, 1, 1)) = 99)
            THEN
               c_fac_type := 'C';                                                                               -- Contract
            ELSE
               fac.imp_writelog (p_import_key,
                                 'E',
                                 'Kan type van factuur niet bepalen ',
                                 rc.ordernr || ' / ' || rc.factuurnr
                                );
            END IF;
         ELSE
            BEGIN
               -- Probeer opdrachtnummer te achterhalen bij bestelopdrachten
               -- met hetzelfde leveranciersnummer, locatie, afleverdatum en aantal
               SELECT   bo.bes_bestelopdr_id
                 INTO   c_bestelopdr_id
                 FROM   bes_bestelopdr bo,
                        bes_bestelopdr_item boi,
                        bes_bestelling_item bbi,
                        bes_bestelling bb,
                        mld_adres ma,
                        alg_locatie l,
                        prs_bedrijf b
                WHERE       bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
                        AND boi.bes_bestelopdr_item_key = bbi.bes_bestelopdr_item_key
                        AND bbi.bes_bestelling_key = bb.bes_bestelling_key
                        AND boi.bes_bestelopdr_item_aantal = rc.aantal
                        AND bb.bes_bestelling_leverdatum =
                              TO_DATE (rc.ajaar || '-' || rc.amaand || '-' || rc.adag || ' 00:00', 'YYYY-MM-DD HH24:MI')
                        AND bo.mld_adres_key_lev = ma.mld_adres_key
                        AND ma.alg_locatie_key = l.alg_locatie_key
                        AND l.alg_locatie_code = rc.locatie
                        AND bo.prs_bedrijf_key = b.prs_bedrijf_key
                        AND b.prs_leverancier_nr = rc.leveranciernr;

               c_find_ordernr := TRUE;
            EXCEPTION
               WHEN NO_DATA_FOUND
               THEN
                  oracle_err_mes := SUBSTR (SQLERRM, 1, 150);
                  v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
                  fac.imp_writelog (
                     p_import_key,
                     'E',
                     'Kan het bestelopdrachtnummer (OrderNr) niet vinden ' || v_errormsg,
                        '?/'
                     || rc.factuurnr
                     || '/'
                     || rc.aantal
                     || '/'
                     || rc.ajaar
                     || '-'
                     || rc.amaand
                     || '-'
                     || rc.adag
                     || '/'
                     || rc.locatie
                     || '/'
                     || rc.leveranciernr
                  );
                  c_find_ordernr := FALSE;
            END;

            IF c_find_ordernr
            THEN
               c_fac_type := 'B';
            END IF;
         END IF;

         IF c_fac_type = 'B'
         THEN
            SELECT   SUM (boi.bes_bestelopdr_item_prijs * boi.bes_bestelopdr_item_aantal)
              INTO   c_totaal
              FROM   bes_bestelopdr b, bes_bestelopdr_item boi
             WHERE   boi.bes_bestelopdr_key = b.bes_bestelopdr_key AND b.bes_bestelopdr_id = c_bestelopdr_id;

            SELECT   MAX (fin_factuur_key)
              INTO   c_index
              FROM   fin_factuur f, bes_bestelopdr bo
             WHERE   bo.bes_bestelopdr_key = f.bes_bestelopdr_key AND bo.bes_bestelopdr_id = c_bestelopdr_id;

            SELECT   SUM (fr.fin_factuurregel_totaal)
              INTO   c_fact_totaal
              FROM   fin_factuur f, fin_factuurregel fr, bes_bestelopdr b
             WHERE       f.bes_bestelopdr_key = b.bes_bestelopdr_key
                     AND f.fin_factuur_key = fr.fin_factuur_key
                     AND b.bes_bestelopdr_id = c_bestelopdr_id;

            IF c_totaal = c_fact_totaal                                                              --c_totaal = rc.totaal
            THEN
               BEGIN
                  SELECT   ''
                    INTO   dummy
                    FROM   fin_factuur
                   WHERE   fin_factuur_key = c_index
                           AND (mld_opdr_key IS NOT NULL OR cnt_contract_key IS NOT NULL OR bes_bestelopdr_key IS NOT NULL);

                  UPDATE   fin_factuur
                     SET   fin_factuur_statuses_key = 6
                   WHERE   fin_factuur_key = c_index;

                  fac.trackaction ('FINFOK', c_index, NULL, NULL, NULL);

                  fac.imp_writelog (p_import_key,
                                    'I',
                                    'Factuur ' || c_index || ' status op afgemeld gezet ',
                                    c_bestelopdr_id || ' / ' || rc.factuurnr
                                   );
               EXCEPTION
                  WHEN NO_DATA_FOUND
                  THEN
                     NULL;
               END;
            END IF;
         END IF;

         COMMIT;
      END LOOP;
   END IF; -- invalid numbers
END;
/

-- CONN#756 view tbv b-ware ( view wordt niet door facilitor gebruikt)
CREATE OR REPLACE VIEW CXX_CRED_BWIPEXP
  ("CMPCODE", "CODE", "NAME", "ADD1", "ADD2", "TERMS", "ACNUM", "ACREF",
   "CFVALUE", "STARTYEAR", "STARTPERIOD", "ENDYEAR", "ENDPERIOD")
AS
SELECT 'FB-01'
     , PRS_LEVERANCIER_NR
     , PRS_BEDRIJF_NAAM
     , PRS_BEDRIJF_POST_ADRES
     , PRS_BEDRIJF_POST_POSTCODE || '/' || PRS_BEDRIJF_POST_PLAATS
     , '-'   --betalingstermijn
     , DECODE (UPPER(SUBSTR(PRS_LEVERANCIER_NR,1,1)),
                    'C', SUBSTR(PRS_LEVERANCIER_NR,2) ,
                    (SELECT PRS_KENMERKLINK_WAARDE
                       FROM PRS_KENMERKLINK WHERE PRS_KENMERK_KEY = 1180
                        AND PRS_LINK_KEY = PRS_BEDRIJF_KEY))   --bankrekeningnummer
     , '-'
     , '1431100'
     , '0'
     , '0'
     , '0'
     , '0'
  FROM PRS_V_AANWEZIGBEDRIJF
 WHERE PRS_BEDRIJF_INTERN IS NULL
   AND NVL(PRS_BEDRIJF_HUURDER,0) <> 1
   AND ( UPPER(PRS_LEVERANCIER_NR) LIKE 'C%'
      OR UPPER(PRS_LEVERANCIER_NR) LIKE 'LEV%');

commit;



-- HALTEWERK-rapportage/doorbelastingsoverzicht (CONN#3661)
CREATE OR REPLACE VIEW conn_v_haltewerk
(fclt_d_dag, fclt_f_opdrachtgever, fclt_f_plaats, fclt_f_halte, fclt_f_medewerker, fclt_f_activiteit,
 diversen, bestede_tijd, materiaal_bedrag, kilometers)
AS
SELECT   TO_CHAR(dw.mld_deelwerk_datum, 'dd-mm-yyyy') dag,
         opdrachtgever,
         ts.alg_terreinsector_code plaats,
         haltecode || ' ' || haltenaam halte,
         pf.prs_perslid_naam_full medewerker,
         activiteit,
         dw.mld_deelwerk_opmerking,
         SUM(dw.mld_deelwerk_duur) bestede_tijd,
         SUM(materiaal_bedrag),
         SUM(dw.mld_deelwerk_km)
    FROM (SELECT kd.ins_deel_key kd1, kd.ins_kenmerkdeel_waarde haltecode
            FROM ins_kenmerkdeel kd
           WHERE kd.ins_kenmerk_key = 501),
         (SELECT kd.ins_deel_key kd2, kd.ins_kenmerkdeel_waarde haltenaam
            FROM ins_kenmerkdeel kd
           WHERE kd.ins_kenmerk_key = 504),
         (SELECT dw.mld_deelwerk_key dw1, ud.fac_usrdata_omschr opdrachtgever
            FROM mld_deelwerk dw,
                 fac_usrdata ud
           WHERE dw.fac_usrdata_key_opdrachtgever = ud.fac_usrdata_key),
         (SELECT dwa dw2, activiteit, materiaal_bedrag
            FROM (SELECT dw.mld_deelwerk_key dwa, ud.fac_usrdata_omschr activiteit
                    FROM mld_deelwerk dw,
                         fac_usrdata ud
                   WHERE dw.fac_usrdata_key_activiteit = ud.fac_usrdata_key
                     AND ud.fac_usrdata_verwijder IS NULL) a
               LEFT JOIN
                 (SELECT dwm.mld_deelwerk_key dwb, SUM(dwm.mld_deelwerkmateriaal_aantal * ud.fac_usrdata_prijs) materiaal_bedrag
                    FROM mld_deelwerkmateriaal dwm,
                         fac_usrdata ud
                   WHERE dwm.fac_usrdata_key_materiaal = ud.fac_usrdata_key
                     AND ud.fac_usrdata_verwijder IS NULL
                GROUP BY dwm.mld_deelwerk_key) b
              ON a.dwa = b.dwb),
         mld_deelwerk dw,
         ins_deel d,
         alg_terreinsector ts,
         prs_v_perslid_fullnames pf
   WHERE dw.ins_deel_key = d.ins_deel_key
     AND d.ins_alg_ruimte_key = ts.alg_terreinsector_key
     AND dw.prs_perslid_key = pf.prs_perslid_key
     AND dw.ins_deel_key = kd1
     AND dw.ins_deel_key = kd2
     AND dw.mld_deelwerk_key = dw1
     AND dw.mld_deelwerk_key = dw2
GROUP BY TO_CHAR(dw.mld_deelwerk_datum, 'YYYYMM'),
         TO_CHAR(dw.mld_deelwerk_datum, 'dd-mm-yyyy'),
         opdrachtgever,
         ts.alg_terreinsector_code,
         haltecode || ' ' || haltenaam,
         pf.prs_perslid_naam_full,
         activiteit,
         dw.mld_deelwerk_opmerking
ORDER BY dag, opdrachtgever, plaats, halte, medewerker, activiteit;


-- HALTEWERK-rapportage/Materiaaloverzicht (CONN#13730)
CREATE OR REPLACE VIEW CONN_V_HALTEMATERIAAL
(FCLT_D_DAG, FCLT_F_OPDRACHTGEVER, FCLT_F_PLAATS, FCLT_F_HALTE,
 FCLT_F_MEDEWERKER, FCLT_F_ACTIVITEIT, DIVERSEN, BESTEDE_TIJD, MATERIAAL_BEDRAG,
 KILOMETERS, MATERIAAL, AANTAL)
AS
SELECT   TO_CHAR(dw.mld_deelwerk_datum, 'dd-mm-yyyy') dag,
         opdrachtgever,
         ts.alg_terreinsector_code plaats,
         haltecode || ' ' || haltenaam halte,
         pf.prs_perslid_naam_full medewerker,
         activiteit,
         dw.mld_deelwerk_opmerking,
         TO_CHAR(SUM(dw.mld_deelwerk_duur)) bestede_tijd,  -- geen totaal tijd laten zien
         SUM(materiaal_bedrag),
         TO_CHAR(CASE SUM(dw.mld_deelwerk_km)
                 WHEN 0
                 THEN NULL
                 ELSE SUM(dw.mld_deelwerk_km)
                 END) kilometers,  -- geen totaal kilometers laten zien, en geen 0 km laten zien per regel
         materiaal_omschrijving,
         materiaal_aantal
    FROM (SELECT kd.ins_deel_key kd1, kd.ins_kenmerkdeel_waarde haltecode
            FROM ins_kenmerkdeel kd
           WHERE kd.ins_kenmerk_key = 501),
         (SELECT kd.ins_deel_key kd2, kd.ins_kenmerkdeel_waarde haltenaam
            FROM ins_kenmerkdeel kd
           WHERE kd.ins_kenmerk_key = 504),
         (SELECT dw.mld_deelwerk_key dw1, ud.fac_usrdata_omschr opdrachtgever
            FROM mld_deelwerk dw,
                 fac_usrdata ud
           WHERE dw.fac_usrdata_key_opdrachtgever = ud.fac_usrdata_key),
         (SELECT dwa dw2, activiteit, materiaal_bedrag, materiaal_omschrijving, materiaal_aantal
            FROM (SELECT dw.mld_deelwerk_key dwa, ud.fac_usrdata_omschr activiteit
                    FROM mld_deelwerk dw,
                         fac_usrdata ud
                   WHERE dw.fac_usrdata_key_activiteit = ud.fac_usrdata_key) a
               LEFT JOIN
                 (SELECT dwm.mld_deelwerk_key dwb,
                         SUM(dwm.mld_deelwerkmateriaal_aantal * ud.fac_usrdata_prijs) materiaal_bedrag,
                         ud.fac_usrdata_omschr materiaal_omschrijving,
                         dwm.mld_deelwerkmateriaal_aantal materiaal_aantal
                    FROM mld_deelwerkmateriaal dwm,
                         fac_usrdata ud
                   WHERE dwm.fac_usrdata_key_materiaal = ud.fac_usrdata_key
                GROUP BY dwm.mld_deelwerk_key,
                         ud.fac_usrdata_omschr,
                         dwm.mld_deelwerkmateriaal_aantal) b
              ON a.dwa = b.dwb),
         mld_deelwerk dw,
         ins_deel d,
         alg_terreinsector ts,
         prs_v_perslid_fullnames pf
   WHERE dw.ins_deel_key = d.ins_deel_key
     AND d.ins_alg_ruimte_key = ts.alg_terreinsector_key
     AND dw.prs_perslid_key = pf.prs_perslid_key
     AND dw.ins_deel_key = kd1
     AND dw.ins_deel_key = kd2
     AND dw.mld_deelwerk_key = dw1
     AND dw.mld_deelwerk_key = dw2
GROUP BY TO_CHAR(dw.mld_deelwerk_datum, 'YYYYMM'),
         TO_CHAR(dw.mld_deelwerk_datum, 'dd-mm-yyyy'),
         opdrachtgever,
         ts.alg_terreinsector_code,
         haltecode || ' ' || haltenaam,
         pf.prs_perslid_naam_full,
         activiteit,
         dw.mld_deelwerk_opmerking,
         materiaal_omschrijving,
         materiaal_aantal
ORDER BY dag, opdrachtgever, plaats, halte, medewerker, activiteit;
/

--
-- notificatie job om bestellers en melders een herinnering te sturen zodat
-- ze de opdracht of bestelling afmelden.
-- De herinneringmail wordt x dagen na het aanmaken van de bestelopdracht en y
-- dagen na de einddatum van de opdracht naar de melder/besteller verzonden.
-- De waarden van x en y zijn te configureren bij de catatogus en bij de vakgroep
-- als 'Aantal dagen tbv. herinnering'
CREATE OR REPLACE VIEW conn_v_noti_bestelling_opdr (
   code,
   sender,
   receiver,
   text,
   key,
   xkey
   )
AS
   SELECT DISTINCT
          'BES2MA',
          NULL,
          b.prs_perslid_key,
             'U wordt verzocht uw bestelling met nummer '
          || bo.bes_bestelopdr_id
          || ' af te melden in Facilitor.',
          bo.bes_bestelopdr_key,
          NULL
   FROM bes_bestelling b,
        bes_bestelling_item bi,
        bes_bestelopdr_item boi,
        bes_srtdeel sd,
        bes_srtgroep sg,
        bes_disc_params dp,
        bes_bestelopdr bo
   WHERE     bes_bestelling_status = 5
         AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
         AND b.bes_bestelling_key = bi.bes_bestelling_key
         AND TRUNC (bes_bestelopdr_datum + dp.bes_disc_params_noti_dagen) =
               TRUNC (SYSDATE)
         AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
         AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
         AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
         AND sg.ins_discipline_key = dp.bes_ins_discipline_key
         AND dp.bes_disc_params_noti_dagen IS NOT NULL
   UNION ALL
   SELECT DISTINCT
          'ORDMAI',
          NULL,
          m.prs_perslid_key,
             'U wordt verzocht uw opdracht met nummer '
          || o.mld_melding_key
          || '/'
          || o.mld_opdr_bedrijfopdr_volgnr
          || ' af te melden in Facilitor.',
          o.mld_opdr_key,
          NULL
   FROM mld_opdr o, mld_melding m, mld_stdmelding std, mld_disc_params md
   WHERE     o.mld_melding_key = m.mld_melding_key
         AND m.mld_stdmelding_key = std.mld_stdmelding_key
         AND std.mld_ins_discipline_key = md.mld_ins_discipline_key
         AND (o.mld_statusopdr_key = 5 OR o.mld_statusopdr_key = 8)
         AND mld_disc_params_noti_dagen IS NOT NULL
         AND TRUNC (o.mld_opdr_einddatum + md.mld_disc_params_noti_dagen) =
               TRUNC (SYSDATE);


-- CONN#12661: Notificatie op basis van meterstandverantwoordelijke per locatie
-- View voor kenmerk "Meterstanden verantwoordelijke"
/* Formatted on 11-6-2010 16:49:27 (QP5 v5.136.908.31019) */
CREATE OR REPLACE FORCE VIEW conn_v_meterstanden_verantw
(
   prs_perslid_key,
   verantwoordelijke
)
AS
     SELECT   w.prs_perslid_key,
                 p.prs_perslid_naam
              || DECODE (NVL (p.prs_perslid_voorletters, ''), '', '', ', ' || p.prs_perslid_voorletters)
              || DECODE (NVL (p.prs_perslid_tussenvoegsel, ''), '', '', ' ' || p.prs_perslid_tussenvoegsel)
              || DECODE (NVL (p.prs_perslid_voornaam, ''), '', '', ' (' || p.prs_perslid_voornaam || ')')
                 naam
       FROM   fac_v_webgebruiker w, prs_v_aanwezigperslid p
      WHERE       w.prs_perslid_key = p.prs_perslid_key
              AND w.fac_functie_key = (SELECT   fac_functie_key
                                         FROM   fac_functie
                                        WHERE   fac_functie_code = 'WEB_INSUSE')
              AND w.ins_discipline_key = (SELECT   itd.ins_discipline_key
                                                FROM   ins_tab_discipline itd
                                               WHERE   itd.ins_discipline_omschrijving = 'Verbruiksregistratie')
   ORDER BY   p.prs_perslid_upper;

-- View notificatiejob
/* Formatted on 20-10-2011 13:44:45 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW conn_v_noti_meterstreminder
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey
)
AS
     SELECT   'OBJINF',
              NULL,
              meterstanden_verantwoordelijke,
                 'U wordt verzocht de meterstanden van locatie '
              || alg_locatie_omschrijving
              || ' in te voeren in Facilitor.',
              alg_locatie_key,
              NULL
       FROM   (  SELECT   l.alg_locatie_key,
                          COUNT (l.alg_locatie_omschrijving) aantal_objecten,
                          l.alg_locatie_omschrijving,
                          (SELECT   alg_onrgoedkenmerk_waarde
                             FROM   alg_locatie l, alg_onrgoedkenmerk ogk
                            WHERE       l.alg_locatie_key = ogk.alg_onrgoed_key
                                    AND ogk.alg_onrgoed_niveau = 'L'
                                    AND l.alg_locatie_key = d.ins_alg_locatie_key
                                    AND ogk.alg_kenmerk_key = 1280) -- Meterstandverantwoordelijke
                             meterstanden_verantwoordelijke,
                             COUNT((SELECT 'buiten'
                                FROM ins_v_aanwezigkenmerkdeel akd
                               WHERE akd.ins_deel_key = d.ins_deel_key
                                 AND akd.ins_kenmerk_key = sk.ins_kenmerk_key
                                 AND akd.ins_kenmerkdeel_aanmaak NOT
                                BETWEEN   TRUNC(SYSDATE, 'MM') - 10
                                    AND   TRUNC(SYSDATE, 'MM') + 14)) buiten,
                             COUNT((SELECT 'binnen'
                                FROM ins_v_aanwezigkenmerkdeel akd
                               WHERE akd.ins_deel_key = d.ins_deel_key
                                 AND akd.ins_kenmerk_key = sk.ins_kenmerk_key
                                 AND akd.ins_kenmerkdeel_aanmaak
                                BETWEEN   TRUNC(SYSDATE, 'MM') - 10
                                    AND   TRUNC(SYSDATE, 'MM') + 14)) binnen
                   FROM   ins_v_srtdeel_kenmerk sk,
                          ins_v_aanwezigdeel d,
                          ins_srtdeel sd,
                          alg_locatie l
                  WHERE       sk.ins_srtdeel_key = sd.ins_srtdeel_key
                          AND d.ins_srtdeel_key = sd.ins_srtdeel_key
                          AND d.ins_alg_locatie_key = l.alg_locatie_key
                          AND sk.ins_kenmerk_meetwaarde = 1
                          AND sk.ins_srtkenmerk_kenmerktype = 'N'
                          AND (SELECT   alg_onrgoedkenmerk_waarde
                                 FROM   alg_locatie l, alg_onrgoedkenmerk ogk
                                WHERE   l.alg_locatie_key = ogk.alg_onrgoed_key
                                        AND ogk.alg_onrgoed_niveau = 'L'
                                        AND l.alg_locatie_key =
                                              d.ins_alg_locatie_key
                                        AND ogk.alg_kenmerk_key = 1280) IS NOT NULL -- Meterstandverantwoordelijke
               GROUP BY   l.alg_locatie_omschrijving,
                          d.ins_alg_locatie_key,
                          alg_locatie_key) t1
      WHERE   (t1.binnen = 0 AND t1.buiten > 0)
              OR (t1.aantal_objecten > (t1.binnen + t1.buiten)) -- Indien er nog geen waarde is ingevuld dan altijd melding
   ORDER BY   2;


--------------------------
--
-- Afmeldprocedures voor bestellingen en opdrachten
--
--------------------------
CREATE OR REPLACE PROCEDURE CONN_EXPORT_AFM_BESTEL (p_applname   IN VARCHAR2,
                                                    p_applrun    IN VARCHAR2,
                                                    p_filedir    IN VARCHAR2,
                                                    p_filename   IN VARCHAR2
                                                   )
AS
   CURSOR c1
   IS
      SELECT DISTINCT bi.bes_bestelling_key, bes_bestelling_item_key
      FROM bes_bestelling_item bi,
           bes_bestelling b,
           bes_srtdeel sd,
           bes_srtgroep sg,
           bes_disc_params bdp
      WHERE bi.bes_bestelling_key = b.bes_bestelling_key
            AND bes_bestelling_datum <
                  SYSDATE - bdp.bes_disc_params_noti_dagen - 14
            AND bes_bestelling_status IN (3, 4, 5)  -- (gefiatteerd, geaccepteerd, besteld)
            AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
            AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
            AND sg.ins_discipline_key = bdp.bes_ins_discipline_key
            AND bdp.bes_disc_params_noti_dagen IS NOT NULL;

   CURSOR c2 (p_bes_bestelling_item_key IN number
   )
   IS
      SELECT DISTINCT
             bo.bes_bestelopdr_key,
             boi.bes_bestelopdr_item_key,
             bes_bestelling_item_key,
             bes_bestelopdr_id
      FROM bes_bestelopdr bo, bes_bestelopdr_item boi, bes_bestelling_item bi
      WHERE     bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
            AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key
            AND bi.bes_bestelling_item_key = p_bes_bestelling_item_key;

   rec1             c1%ROWTYPE;
   rec2             c2%ROWTYPE;
   v_errormsg       VARCHAR2 (200);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);

BEGIN
   FOR rec1 IN c1
   LOOP
      BEGIN
         FOR rec2 IN c2 (rec1.bes_bestelling_item_key)
         LOOP
            BEGIN
               UPDATE bes_bestelopdr_item b
               SET bes_bestelopdr_item_aantalontv   =
                      bes_bestelopdr_item_aantal,
                   bes_bestelopdr_item_ontvangen   = SYSDATE
               WHERE bes_bestelopdr_item_key = rec2.bes_bestelopdr_item_key;

               BEGIN
                  bes.updatebestelopdrstatus (rec2.bes_bestelopdr_key, 1042);
               END;

            EXCEPTION
               WHEN OTHERS
               THEN
                  oracle_err_num   := SQLCODE;
                  oracle_err_mes   := SUBSTR (SQLERRM, 1, 100);
                  v_errormsg       := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
                  fac.writelog (p_applname, 'E', v_errormsg, 'Bestelopdracht:'|| rec2.bes_bestelopdr_id);
            END;
         END LOOP;

         DBMS_OUTPUT.put_line ('rec1 item: ' || rec1.bes_bestelling_item_key);

         UPDATE bes_bestelling_item
         SET bes_bestelling_item_aantalontv    = bes_bestelling_item_aantal
         WHERE bes_bestelling_item_key = rec1.bes_bestelling_item_key;

         UPDATE bes_bestelling_item bi
         SET bes_bestelling_item_status    = 6  -- geleverd
         WHERE COALESCE (bi.bes_bestelling_item_aantal, 0) =
                  COALESCE (bi.bes_bestelling_item_aantalontv, 0)
               AND bes_bestelling_item_status = 5;  -- besteld

         BEGIN
            bes.updatebestellingstatus (rec1.bes_bestelling_key, 1042);
         END;
      EXCEPTION
         WHEN OTHERS
         THEN
            oracle_err_num   := SQLCODE;
            oracle_err_mes   := SUBSTR (SQLERRM, 1, 100);
            v_errormsg       := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
            fac.writelog (p_applname, 'E', v_errormsg, 'Bestelling:'|| rec1.bes_bestelling_key);
      END;
   END LOOP;

   COMMIT;
END;
/


CREATE OR REPLACE PROCEDURE CONN_EXPORT_AFM_OPDRACHT (p_applname   IN VARCHAR2,
                                                      p_applrun    IN VARCHAR2,
                                                      p_filedir    IN VARCHAR2,
                                                      p_filename   IN VARCHAR2
                                                     )
AS
   CURSOR c_opdr
   IS
      SELECT mld_opdr_key, mld_opdr_bedrijfopdr_volgnr, o.mld_melding_key
      FROM mld_opdr o, mld_melding m, mld_stdmelding std, mld_disc_params dp
      WHERE mld_statusopdr_key = 5 -- uitgegeven
        AND m.mld_stdmelding_key = std.mld_stdmelding_key
        AND std.mld_ins_discipline_key = dp.mld_ins_discipline_key
        AND o.mld_melding_key = m.mld_melding_key
        AND o.mld_opdr_datumbegin < SYSDATE - dp.mld_disc_params_noti_dagen - 14;

   CURSOR c_melding
   IS
      SELECT DISTINCT m.mld_melding_key
      FROM mld_melding m, mld_opdr o, fac_tracking t, fac_srtnotificatie sn
      WHERE o.mld_melding_key = m.mld_melding_key
        AND o.mld_opdr_key = t.fac_tracking_refkey
        AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
        AND sn.fac_srtnotificatie_code = 'ORDAFM'
        AND trunc(t.fac_tracking_datum) = trunc(sysdate)
        AND NOT EXISTS (SELECT m.mld_melding_key
                        FROM mld_opdr op
                        WHERE op.mld_statusopdr_key = 5 -- uitgegeven
                          AND m.mld_melding_key = op.mld_melding_key);

   rec1             c_opdr%ROWTYPE;
   rec2             c_melding%ROWTYPE;
   v_errormsg       VARCHAR2 (200);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);

BEGIN
   FOR rec1 IN c_opdr
   LOOP
      BEGIN
         mld.setopdrachtstatus(rec1.mld_opdr_key, 6, 1024);  -- status afgemeld , user mhanemaa
            EXCEPTION
               WHEN OTHERS
               THEN
                  oracle_err_num   := SQLCODE;
                  oracle_err_mes   := SUBSTR (SQLERRM, 1, 100);
                  v_errormsg       := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
                  fac.writelog (p_applname, 'E', v_errormsg, 'Opdracht:'|| rec1.mld_melding_key || '/' || rec1.mld_opdr_bedrijfopdr_volgnr);
            END;
         END LOOP;


    FOR rec2 IN c_melding
   LOOP
      BEGIN
         mld.setmeldingstatus(rec2.mld_melding_key, 5, 1024);  -- status afgemeld , user mhanemaa
            EXCEPTION
               WHEN OTHERS
               THEN
                  oracle_err_num   := SQLCODE;
                  oracle_err_mes   := SUBSTR (SQLERRM, 1, 100);
                  v_errormsg       := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
                  fac.writelog (p_applname, 'E', v_errormsg, 'Melding:'|| rec2.mld_melding_key);
            END;
         END LOOP;



   COMMIT;
END;
/




CREATE OR REPLACE VIEW conn_v_imp_log (fclt_f_applicatie,
                                       datum,
                                       fclt_f_status,
                                       omschrijving,
                                       hint
                                      )
AS
   SELECT imp_log_applicatie, to_char(imp_log_datum, 'yyyymmdd hh24miss'), imp_log_status,
          imp_log_omschrijving, imp_log_hint
     FROM imp_log;




CREATE OR REPLACE VIEW conn_v_rap_gebouw_verplichting
AS
SELECT l.alg_locatie_code fclt_f_locatiecode, l.alg_locatie_plaats fclt_f_plaats, v.fclt_f_gebouwcode,
       v.fclt_f_verplichting, v.item, v.fclt_3d_locatie_key
  FROM alg_v_rap_gebouw_verplichting v, alg_locatie l
 WHERE v.fclt_3d_locatie_key = l.alg_locatie_key;
/


-- Bevat CUST01- en CUST02-reminder naar beheerder verantwoordelijk voor de
-- keuring van betreffende objecten (Gebouwobjecten vs. Gereedschappen).
-- CUST01: wekelijks mbt. over 4 tot 5 weken te keuren objecten!
-- CUST02: wekelijks mbt. objecten waarvan keuringsdatum is verstreken!
/* Formatted on 2-12-2011 14:24:24 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW CONN_V_NOTI_KEURINGREMINDER
(
   code,
   sender,
   receiver,
   text,
   KEY,
   par1,
   par2,
   xkey
)
AS
   SELECT   sn.fac_srtnotificatie_code code,
            NULL sender,
            fac.safe_to_number (ok.alg_onrgoedkenmerk_waarde) receiver,
            REPLACE (
               REPLACE (
                  sn.fac_srtnotificatie_oms,
                  '##SRTGROEP##',
                  DECODE (x.min_srtgroep_oms,
                          x.max_srtgroep_oms, x.min_srtgroep_oms,
                          x.min_srtgroep_oms || ', ...')
               ),
               '##AANTAL##',
               x.aantal
            )
               subject,
            x.dummy_deel_key,                                  -- Dummy key!!!
            NULL,
            NULL,
            NULL
     FROM   (  SELECT   o.alg_locatie_key,
                        DECODE (o.ins_discipline_key,
                                101, 1320,  -- Gebouwobjecten -> 1320-verantw.
                                341, 1320,  -- Gebouwobjecten -> 1320-verantw.
                                1841, 1320, -- Gebouwobjecten -> 1320-verantw.
                                1881, 1320, -- Gebouwobjecten -> 1320-verantw.
                                1340)       -- Gereedschappen -> 1340-verantw.
                           verantwoordelijke,
                        MIN (o.ins_srtgroep_omschrijving) min_srtgroep_oms,
                        MAX (o.ins_srtgroep_omschrijving) max_srtgroep_oms,
                        MIN (o.ins_deel_key) dummy_deel_key,
                        COUNT (DISTINCT o.ins_deel_key) aantal
                 FROM            (SELECT   scs.ins_srtinstallatie_key
                                              ins_srtdeel_key,
                                           scs.ins_srtcontrole_key,
                                           scs.ins_srtcontrole_omschrijving,
                                           scs.ins_srtcontrole_periode
                                    FROM   ins_srtcontrole scs
                                   WHERE   scs.ins_srtcontrole_niveau = 'S'
                                  UNION ALL
                                  SELECT   sd.ins_srtdeel_key,
                                           scg.ins_srtcontrole_key,
                                           scg.ins_srtcontrole_omschrijving,
                                           scg.ins_srtcontrole_periode
                                    FROM   ins_srtcontrole scg, ins_srtdeel sd
                                   WHERE   scg.ins_srtcontrole_niveau = 'G'
                                           AND scg.ins_srtinstallatie_key =
                                                 sd.ins_srtgroep_key
                                  UNION ALL
                                  SELECT   sd.ins_srtdeel_key,
                                           scd.ins_srtcontrole_key,
                                           scd.ins_srtcontrole_omschrijving,
                                           scd.ins_srtcontrole_periode
                                    FROM   ins_srtcontrole scd,
                                           ins_srtgroep sg,
                                           ins_srtdeel sd
                                   WHERE   scd.ins_srtcontrole_niveau = 'D'
                                           AND scd.ins_srtinstallatie_key =
                                                 sg.ins_discipline_key
                                           AND sg.ins_srtgroep_key =
                                                 sd.ins_srtgroep_key) cso -- ControleSoortObjecten
                              LEFT JOIN
                                 (SELECT   d.ins_deel_key,
                                           d.ins_deel_aanmaak,
                                           sd.ins_srtdeel_key,
                                           sg.ins_srtgroep_omschrijving,
                                           td.ins_discipline_key,
                                           td.ins_discipline_omschrijving,
                                           l.alg_locatie_key
                                    FROM   ins_v_aanwezigdeel d,
                                           ins_srtdeel sd,
                                           ins_srtgroep sg,
                                           ins_tab_discipline td,
                                           alg_locatie l
                                   WHERE   d.ins_srtdeel_key =
                                              sd.ins_srtdeel_key
                                           AND sd.ins_srtgroep_key =
                                                 sg.ins_srtgroep_key
                                           AND sg.ins_discipline_key =
                                                 td.ins_discipline_key
                                           AND d.ins_alg_locatie_key =
                                                 l.alg_locatie_key(+)) o -- Objecten
                              ON cso.ins_srtdeel_key = o.ins_srtdeel_key
                           LEFT JOIN
                              (SELECT   ins_deel_key,
                                        ins_kenmerkdeel_waarde afgekeurd
                                 FROM   ins_v_aanwezigkenmerkdeel kd,
                                        ins_kenmerk k
                                WHERE   kd.ins_kenmerk_key = k.ins_kenmerk_key
                                        AND k.ins_srtkenmerk_key = 1466) oa -- ObjectAfgekeurd
                           ON o.ins_deel_key = oa.ins_deel_key
                        LEFT JOIN
                           (SELECT   dsc.ins_deel_key,
                                     dsc.ins_srtcontrole_key,
                                     dsc.ins_deelsrtcontrole_datum,
                                     dsc.ins_deelsrtcontrole_opmerking
                              FROM   ins_deelsrtcontrole dsc
                             WHERE   dsc.ins_deelsrtcontrole_datum =
                                        (SELECT   MAX (
                                                     ins_deelsrtcontrole_datum
                                                  )
                                           FROM   ins_deelsrtcontrole
                                          WHERE   ins_deel_key =
                                                     dsc.ins_deel_key
                                                  AND ins_srtcontrole_key =
                                                        dsc.ins_srtcontrole_key))
                           olc                        -- ObjectLaatsteControle
                        ON o.ins_deel_key = olc.ins_deel_key
                           AND cso.ins_srtcontrole_key =
                                 olc.ins_srtcontrole_key
                WHERE   (oa.afgekeurd IS NULL OR oa.afgekeurd = 130)  -- 'Nee'
                        AND COALESCE (olc.ins_deelsrtcontrole_datum,
                                      o.ins_deel_aanmaak)
                           + cso.ins_srtcontrole_periode BETWEEN TRUNC(SYSDATE
                                                                       + 28)
                                                             AND  TRUNC(SYSDATE
                                                                        + 35)
             GROUP BY   o.alg_locatie_key,
                        DECODE (o.ins_discipline_key,
                                101, 1320,  -- Gebouwobjecten -> 1320-verantw.
                                341, 1320,  -- Gebouwobjecten -> 1320-verantw.
                                1841, 1320, -- Gebouwobjecten -> 1320-verantw.
                                1881, 1320, -- Gebouwobjecten -> 1320-verantw.
                                1340)) x,   -- Gereedschappen -> 1340-verantw.
            alg_v_aanwezigonrgoedkenmerk ok,
            fac_srtnotificatie sn
    WHERE       x.alg_locatie_key = ok.alg_onrgoed_key
            AND x.verantwoordelijke = ok.alg_kenmerk_key
            AND ok.alg_onrgoed_niveau = 'L'
            AND sn.fac_srtnotificatie_code = 'CUST01'
   UNION ALL
   SELECT   sn.fac_srtnotificatie_code code,
            NULL sender,
            fac.safe_to_number (ok.alg_onrgoedkenmerk_waarde) receiver,
            REPLACE (
               REPLACE (
                  sn.fac_srtnotificatie_oms,
                  '##SRTGROEP##',
                  DECODE (x.min_srtgroep_oms,
                          x.max_srtgroep_oms, x.min_srtgroep_oms,
                          x.min_srtgroep_oms || ', ...')
               ),
               '##AANTAL##',
               x.aantal
            )
               subject,
            x.dummy_deel_key,                                  -- Dummy key!!!
            NULL,
            NULL,
            NULL
     FROM   (  SELECT   o.alg_locatie_key,
                        DECODE (o.ins_discipline_key,
                                101, 1320,  -- Gebouwobjecten -> 1320-verantw.
                                341, 1320,  -- Gebouwobjecten -> 1320-verantw.
                                1841, 1320, -- Gebouwobjecten -> 1320-verantw.
                                1881, 1320, -- Gebouwobjecten -> 1320-verantw.
                                1340)       -- Gereedschappen -> 1340-verantw.
                           verantwoordelijke,
                        MIN (o.ins_srtgroep_omschrijving) min_srtgroep_oms,
                        MAX (o.ins_srtgroep_omschrijving) max_srtgroep_oms,
                        MIN (o.ins_deel_key) dummy_deel_key,
                        COUNT (DISTINCT o.ins_deel_key) aantal
                 FROM            (SELECT   scs.ins_srtinstallatie_key
                                              ins_srtdeel_key,
                                           scs.ins_srtcontrole_key,
                                           scs.ins_srtcontrole_omschrijving,
                                           scs.ins_srtcontrole_periode
                                    FROM   ins_srtcontrole scs
                                   WHERE   scs.ins_srtcontrole_niveau = 'S'
                                  UNION ALL
                                  SELECT   sd.ins_srtdeel_key,
                                           scg.ins_srtcontrole_key,
                                           scg.ins_srtcontrole_omschrijving,
                                           scg.ins_srtcontrole_periode
                                    FROM   ins_srtcontrole scg, ins_srtdeel sd
                                   WHERE   scg.ins_srtcontrole_niveau = 'G'
                                           AND scg.ins_srtinstallatie_key =
                                                 sd.ins_srtgroep_key
                                  UNION ALL
                                  SELECT   sd.ins_srtdeel_key,
                                           scd.ins_srtcontrole_key,
                                           scd.ins_srtcontrole_omschrijving,
                                           scd.ins_srtcontrole_periode
                                    FROM   ins_srtcontrole scd,
                                           ins_srtgroep sg,
                                           ins_srtdeel sd
                                   WHERE   scd.ins_srtcontrole_niveau = 'D'
                                           AND scd.ins_srtinstallatie_key =
                                                 sg.ins_discipline_key
                                           AND sg.ins_srtgroep_key =
                                                 sd.ins_srtgroep_key) cso -- ControleSoortObjecten
                              LEFT JOIN
                                 (SELECT   d.ins_deel_key,
                                           d.ins_deel_aanmaak,
                                           sd.ins_srtdeel_key,
                                           sg.ins_srtgroep_omschrijving,
                                           td.ins_discipline_key,
                                           td.ins_discipline_omschrijving,
                                           l.alg_locatie_key
                                    FROM   ins_v_aanwezigdeel d,
                                           ins_srtdeel sd,
                                           ins_srtgroep sg,
                                           ins_tab_discipline td,
                                           alg_locatie l
                                   WHERE   d.ins_srtdeel_key =
                                              sd.ins_srtdeel_key
                                           AND sd.ins_srtgroep_key =
                                                 sg.ins_srtgroep_key
                                           AND sg.ins_discipline_key =
                                                 td.ins_discipline_key
                                           AND d.ins_alg_locatie_key =
                                                 l.alg_locatie_key(+)) o -- Objecten
                              ON cso.ins_srtdeel_key = o.ins_srtdeel_key
                           LEFT JOIN
                              (SELECT   ins_deel_key,
                                        ins_kenmerkdeel_waarde afgekeurd
                                 FROM   ins_v_aanwezigkenmerkdeel kd,
                                        ins_kenmerk k
                                WHERE   kd.ins_kenmerk_key = k.ins_kenmerk_key
                                        AND k.ins_srtkenmerk_key = 1466) oa -- ObjectAfgekeurd
                           ON o.ins_deel_key = oa.ins_deel_key
                        LEFT JOIN
                           (SELECT   dsc.ins_deel_key,
                                     dsc.ins_srtcontrole_key,
                                     dsc.ins_deelsrtcontrole_datum,
                                     dsc.ins_deelsrtcontrole_opmerking
                              FROM   ins_deelsrtcontrole dsc
                             WHERE   dsc.ins_deelsrtcontrole_datum =
                                        (SELECT   MAX (
                                                     ins_deelsrtcontrole_datum
                                                  )
                                           FROM   ins_deelsrtcontrole
                                          WHERE   ins_deel_key =
                                                     dsc.ins_deel_key
                                                  AND ins_srtcontrole_key =
                                                        dsc.ins_srtcontrole_key))
                           olc                        -- ObjectLaatsteControle
                        ON o.ins_deel_key = olc.ins_deel_key
                           AND cso.ins_srtcontrole_key =
                                 olc.ins_srtcontrole_key
                WHERE   (oa.afgekeurd IS NULL OR oa.afgekeurd = 130)  -- 'Nee'
                        AND COALESCE (olc.ins_deelsrtcontrole_datum,
                                      o.ins_deel_aanmaak)
                           + cso.ins_srtcontrole_periode < TRUNC (SYSDATE)
             GROUP BY   o.alg_locatie_key,
                        DECODE (o.ins_discipline_key,
                                101, 1320,  -- Gebouwobjecten -> 1320-verantw.
                                341, 1320,  -- Gebouwobjecten -> 1320-verantw.
                                1841, 1320, -- Gebouwobjecten -> 1320-verantw.
                                1881, 1320, -- Gebouwobjecten -> 1320-verantw.
                                1340)) x,   -- Gereedschappen -> 1340-verantw.
            alg_v_aanwezigonrgoedkenmerk ok,
            fac_srtnotificatie sn
    WHERE       x.alg_locatie_key = ok.alg_onrgoed_key
            AND x.verantwoordelijke = ok.alg_kenmerk_key
            AND ok.alg_onrgoed_niveau = 'L'
            AND sn.fac_srtnotificatie_code = 'CUST02';



CREATE OR REPLACE VIEW conn_v_rap_kostenkwartaal (fclt_f_locatie_code,
                                                  fclt_f_locatie_omschrijving,
                                                  fclt_f_jaar,
                                                  fclt_f_kwartaal,
                                                  fclt_f_soort_melding,
                                                  aantal,
                                                  werkelijke_kosten
                                                 )
AS
   SELECT   c21, c20, c30, c31, c32, COUNT (c0), SUM (c27)
       FROM (SELECT DISTINCT m.mld_melding_key c0,
                             alg_locatie_code c21,
                             alg_locatie_omschrijving c20,
                             COALESCE
                                     ((SELECT SUM (f.fin_factuur_totaal)
                                         FROM fin_factuur f, mld_opdr o2
                                        WHERE f.mld_opdr_key = o2.mld_opdr_key
                                          AND o2.mld_melding_key =
                                                             m.mld_melding_key),
                                      0
                                     ) c27,
                             TO_CHAR (mld_melding_datum, 'yyyy') c30,
                             TO_CHAR ( (TRUNC (  TO_NUMBER
                                                  (TO_CHAR (mld_melding_datum,
                                                            'mm'
                                                           )
                                                  )
                                       / 4
                                      )
                               )
                             + 1) c31,
                             mld_stdmelding_omschrijving c32
                        FROM mld_melding m, mld_discipline md, alg_locatie l, mld_stdmelding st
                       WHERE m.mld_alg_locatie_key = l.alg_locatie_key
                         AND m.mld_stdmelding_key = st.mld_stdmelding_key
                         AND st.mld_ins_discipline_key = md.ins_discipline_key
                         AND md.ins_srtdiscipline_key = 1)
   GROUP BY c20, c21, c30, c31, c32
   ORDER BY 1, 2, 3 DESC;

/* Formatted on 28-11-2011 10:52:17 (QP5 v5.136.908.31019) */
CREATE OR REPLACE FORCE VIEW conn_v_rap_tsnkleding
(
   fclt_f_besteller,
   fclt_f_bestemd_voor,
   fclt_f_naam_drager,
   fclt_d_besteldatum,
   item,
   aantal_besteleenheden,
   prijs,
   kostenplaats
)
AS
   SELECT   pf.prs_perslid_naam_full besteller,
            (SELECT   pp.prs_perslid_naam_full
               FROM   bes_kenmerkbestell v, bes_kenmerk k, bes_srtkenmerk sk, prs_v_perslid_fullnames_all pp
              WHERE       v.bes_bestelling_key = b.bes_bestelling_key
                      AND v.bes_kenmerk_key = k.bes_kenmerk_key
                      AND k.bes_srtkenmerk_key = sk.bes_srtkenmerk_key
                      AND v.bes_kenmerkbestell_waarde = pp.prs_perslid_key
                      AND sk.bes_srtkenmerk_key = 161)
               bestemd_voor,
            (SELECT   v.bes_kenmerkbestell_waarde waarde
               FROM   bes_kenmerkbestell v, bes_kenmerk k, bes_srtkenmerk sk
              WHERE       v.bes_bestelling_key = b.bes_bestelling_key
                      AND v.bes_kenmerk_key = k.bes_kenmerk_key
                      AND k.bes_srtkenmerk_key = sk.bes_srtkenmerk_key
                      AND sk.bes_srtkenmerk_key = 65)
               naam_drager,
            TO_CHAR (bes_bestelling_datum, 'DD-MM-YYYY'),
            COALESCE (isd.bes_srtdeel_nr, '') || ' ' || isd.bes_srtdeel_omschrijving item,
            i.bes_bestelling_item_aantal,
            i.bes_bestelling_item_aantal * bi.bes_bestelopdr_item_prijs prijs,
            pk.prs_kostenplaats_nr
     FROM   bes_bestelling b,
            prs_v_perslid_fullnames_all pf,
            bes_bestelling_item i,
            bes_srtdeel isd,
            bes_srtgroep isg,
            bes_discipline bd,
            mld_adres a,
            bes_bestelopdr_item bi,
            prs_kostenplaats pk
    WHERE       pf.prs_perslid_key = b.prs_perslid_key
            AND b.bes_bestelling_key = i.bes_bestelling_key
            AND i.bes_srtdeel_key = isd.bes_srtdeel_key
            AND isd.bes_srtgroep_key = isg.bes_srtgroep_key
            AND isg.ins_discipline_key = bd.ins_discipline_key
            AND bd.ins_discipline_key = 1901
            AND i.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key(+)
            AND b.mld_adres_key_lev = a.mld_adres_key(+)
            AND b.prs_kostenplaats_key = pk.prs_kostenplaats_key;

CREATE OR REPLACE FORCE VIEW conn_v_rap_tourskleding
(
   fclt_f_besteller,
   fclt_f_bestemd_voor,
   fclt_f_naam_drager,
   fclt_d_besteldatum,
   item,
   aantal_besteleenheden,
   prijs,
   kostenplaats
)
AS
   SELECT   pf.prs_perslid_naam_full besteller,
            (SELECT   pp.prs_perslid_naam_full
               FROM   bes_kenmerkbestell v, bes_kenmerk k, bes_srtkenmerk sk, prs_v_perslid_fullnames_all pp
              WHERE       v.bes_bestelling_key = b.bes_bestelling_key
                      AND v.bes_kenmerk_key = k.bes_kenmerk_key
                      AND k.bes_srtkenmerk_key = sk.bes_srtkenmerk_key
                      AND v.bes_kenmerkbestell_waarde = pp.prs_perslid_key
                      AND sk.bes_srtkenmerk_key = 161)
               bestemd_voor,
            (SELECT   v.bes_kenmerkbestell_waarde waarde
               FROM   bes_kenmerkbestell v, bes_kenmerk k, bes_srtkenmerk sk
              WHERE       v.bes_bestelling_key = b.bes_bestelling_key
                      AND v.bes_kenmerk_key = k.bes_kenmerk_key
                      AND k.bes_srtkenmerk_key = sk.bes_srtkenmerk_key
                      AND sk.bes_srtkenmerk_key = 65)
               naam_drager,
            TO_CHAR (bes_bestelling_datum, 'DD-MM-YYYY'),
            COALESCE (isd.bes_srtdeel_nr, '') || ' ' || isd.bes_srtdeel_omschrijving item,
            i.bes_bestelling_item_aantal,
            i.bes_bestelling_item_aantal * bi.bes_bestelopdr_item_prijs prijs,
            pk.prs_kostenplaats_nr
     FROM   bes_bestelling b,
            prs_v_perslid_fullnames_all pf,
            bes_bestelling_item i,
            bes_srtdeel isd,
            bes_srtgroep isg,
            bes_discipline bd,
            mld_adres a,
            bes_bestelopdr_item bi,
            prs_kostenplaats pk
    WHERE       pf.prs_perslid_key = b.prs_perslid_key
            AND b.bes_bestelling_key = i.bes_bestelling_key
            AND i.bes_srtdeel_key = isd.bes_srtdeel_key
            AND isd.bes_srtgroep_key = isg.bes_srtgroep_key
            AND isg.ins_discipline_key = bd.ins_discipline_key
            AND bd.ins_discipline_key = 2221
            AND i.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key(+)
            AND b.mld_adres_key_lev = a.mld_adres_key(+)
            AND b.prs_kostenplaats_key = pk.prs_kostenplaats_key;

/* Formatted on 23-1-2009 15:08:32 (QP5 v5.115.810.9015) */
-- TSN Initial Hokatex kleding
CREATE OR REPLACE VIEW CONN_V_RAP_TSN_HOK_KLEDING
(
   FCLT_F_BESTELLER,
   FCLT_F_BESTEMD_VOOR,
   FCLT_F_NAAM_DRAGER,
   FCLT_D_BESTELDATUM,
   ITEM,
   AANTAL_BESTELEENHEDEN,
   RUILING,
   TOENAME,
   AFNAME,
   KOSTENPLAATS
)
AS
   SELECT   pf.prs_perslid_naam_full besteller,
            (SELECT   pp.prs_perslid_naam_full
               FROM   bes_kenmerkbestell v,
                      bes_kenmerk k,
                      bes_srtkenmerk sk,
                      prs_v_perslid_fullnames_all pp
              WHERE       v.bes_bestelling_key = b.bes_bestelling_key
                      AND v.bes_kenmerk_key = k.bes_kenmerk_key
                      AND k.bes_srtkenmerk_key = sk.bes_srtkenmerk_key
                      AND v.bes_kenmerkbestell_waarde = pp.prs_perslid_key
                      AND sk.bes_srtkenmerk_key = 161)
               bestemd_voor,
            (SELECT   v.bes_kenmerkbestell_waarde waarde
               FROM   bes_kenmerkbestell v, bes_kenmerk k, bes_srtkenmerk sk
              WHERE       v.bes_bestelling_key = b.bes_bestelling_key
                      AND v.bes_kenmerk_key = k.bes_kenmerk_key
                      AND k.bes_srtkenmerk_key = sk.bes_srtkenmerk_key
                      AND sk.bes_srtkenmerk_key = 65)
               naam_drager,
               TO_CHAR(bes_bestelling_datum,'DD-MM-YYYY'),
               COALESCE (isd.bes_srtdeel_nr, '')
            || ' '
            || isd.bes_srtdeel_omschrijving
               item,
            i.bes_bestelling_item_aantal,
            (SELECT   ud.fac_usrdata_omschr
               FROM   bes_kenmerkbestell v, bes_kenmerk k, bes_srtkenmerk sk, fac_usrdata ud
              WHERE       v.bes_bestelling_key = b.bes_bestelling_key
                      AND v.bes_kenmerk_key = k.bes_kenmerk_key
                      AND k.bes_srtkenmerk_key = sk.bes_srtkenmerk_key
                      AND v.bes_kenmerkbestell_waarde = ud.fac_usrdata_key
                      AND sk.bes_srtkenmerk_key = 523)
               ruiling,
            (SELECT   ud.fac_usrdata_omschr
               FROM   bes_kenmerkbestell v, bes_kenmerk k, bes_srtkenmerk sk, fac_usrdata ud
              WHERE       v.bes_bestelling_key = b.bes_bestelling_key
                      AND v.bes_kenmerk_key = k.bes_kenmerk_key
                      AND k.bes_srtkenmerk_key = sk.bes_srtkenmerk_key
                      AND v.bes_kenmerkbestell_waarde = ud.fac_usrdata_key
                      AND sk.bes_srtkenmerk_key = 526)
               toename,
            (SELECT   ud.fac_usrdata_omschr
               FROM   bes_kenmerkbestell v, bes_kenmerk k, bes_srtkenmerk sk, fac_usrdata ud
              WHERE       v.bes_bestelling_key = b.bes_bestelling_key
                      AND v.bes_kenmerk_key = k.bes_kenmerk_key
                      AND k.bes_srtkenmerk_key = sk.bes_srtkenmerk_key
                      AND v.bes_kenmerkbestell_waarde = ud.fac_usrdata_key
                      AND sk.bes_srtkenmerk_key = 527)
               afname,
            pk.prs_kostenplaats_nr
     FROM   bes_bestelling b,
            prs_v_perslid_fullnames_all pf,
            bes_bestelling_item i,
            bes_srtdeel isd,
            bes_srtgroep isg,
            bes_discipline bd,
            mld_adres a,
            bes_bestelopdr_item bi,
            prs_kostenplaats pk
    WHERE       pf.prs_perslid_key = b.prs_perslid_key
            AND b.bes_bestelling_key = i.bes_bestelling_key
            AND i.bes_srtdeel_key = isd.bes_srtdeel_key
            AND isd.bes_srtgroep_key = isg.bes_srtgroep_key
            AND isg.ins_discipline_key = bd.ins_discipline_key
            AND bd.ins_discipline_key = 2181
            AND i.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key(+)
            AND b.mld_adres_key_lev = a.mld_adres_key(+)
            AND b.prs_kostenplaats_key = pk.prs_kostenplaats_key;

-- Eerste opzet
/* Formatted on 25-3-2010 9:46:31 (QP5 v5.136.908.31019) */
CREATE OR REPLACE FORCE VIEW conn_v_businessobjects
(
   fin_factuur_nr,
   fin_factuur_datum,
   fin_factuur_boekmaand,
   fin_factuur_totaal,
   fin_factuur_totaal_btw,
   fin_factuur_incl,
   fin_factuur_debiteur_nr,
   fin_factuur_opmerking,
   fin_factuur_statuses_omschr,
   prs_kostensoort_oms,
   prs_kostensoort_refcode,
   reftype,
   nummer,
   volgnr,
   prs_kostenplaats_nr,
   prs_leverancier_nr
)
AS
   SELECT   f.fin_factuur_nr,
            fin_factuur_datum,
            fin_factuur_boekmaand,
            fin_factuur_totaal,
            fin_factuur_totaal_btw,
            fin_factuur_totaal + fin_factuur_totaal_btw fin_factuur_incl,
            fin_factuur_debiteur_nr,
            f.fin_factuur_opmerking,
            s.fin_factuur_statuses_omschr,
            k.prs_kostensoort_oms,
            k.prs_kostensoort_refcode,
            'O' reftype,
            sd.ins_srtdiscipline_prefix || TO_CHAR (m.mld_melding_key) referentienummer,
            o.mld_opdr_bedrijfopdr_volgnr volgnr,
            kp.prs_kostenplaats_nr,
            b.prs_leverancier_nr
     FROM   fin_factuur f,
            mld_opdr o,
            mld_melding m,
            fin_factuur_statuses s,
            prs_kostensoort k,
            prs_kostenplaats kp,
            prs_bedrijf b,
            mld_stdmelding stdm,
            ins_tab_discipline d,
            ins_srtdiscipline sd
    WHERE       f.mld_opdr_key = o.mld_opdr_key
            AND o.mld_melding_key = m.mld_melding_key
            AND m.mld_stdmelding_key = stdm.mld_stdmelding_key
            AND stdm.mld_ins_discipline_key = d.ins_discipline_key
            AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
            AND f.fin_factuur_statuses_key = s.fin_factuur_statuses_key
            AND f.prs_kostensoort_key = k.prs_kostensoort_key(+)
            AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
            AND o.mld_uitvoerende_keys = b.prs_bedrijf_key(+)
   UNION ALL
   SELECT   f.fin_factuur_nr,
            fin_factuur_datum,
            fin_factuur_boekmaand,
            fin_factuur_totaal,
            fin_factuur_totaal_btw,
            fin_factuur_totaal + fin_factuur_totaal_btw fin_factuur_incl,
            fin_factuur_debiteur_nr,
            f.fin_factuur_opmerking,
            s.fin_factuur_statuses_omschr,
            k.prs_kostensoort_oms,
            k.prs_kostensoort_refcode,
            'B' reftype,
            bo.bes_bestelopdr_id referentienummer,
            1 volgnr,
            kp.prs_kostenplaats_nr,
            b.prs_leverancier_nr
     FROM   fin_factuur f,
            bes_bestelopdr bo,
            fin_factuur_statuses s,
            prs_kostensoort k,
            prs_kostenplaats kp,
            prs_bedrijf b,
            bes_bestelling ba,
            bes_bestelling_item bai,
            bes_bestelopdr_item boi
    WHERE       f.bes_bestelopdr_key = bo.bes_bestelopdr_key
            AND f.fin_factuur_statuses_key = s.fin_factuur_statuses_key
            AND f.prs_kostensoort_key = k.prs_kostensoort_key
            AND bai.bes_bestelling_key = ba.bes_bestelling_key
            AND bai.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
            AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
            AND ba.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
            AND bo.prs_bedrijf_key = b.prs_bedrijf_key(+)
   UNION ALL
   SELECT   f.fin_factuur_nr,
            fin_factuur_datum,
            fin_factuur_boekmaand,
            fin_factuur_totaal,
            fin_factuur_totaal_btw,
            fin_factuur_totaal + fin_factuur_totaal_btw fin_factuur_incl,
            fin_factuur_debiteur_nr,
            f.fin_factuur_opmerking,
            s.fin_factuur_statuses_omschr,
            k.prs_kostensoort_oms,
            k.prs_kostensoort_refcode,
            'C' reftype,
            'C'||TO_CHAR (c.cnt_contract_nummer_intern) referentienummer,
            1 volgnr,
            kp.prs_kostenplaats_nr,
            b.prs_leverancier_nr
     FROM   fin_factuur f,
            cnt_contract c,
            fin_factuur_statuses s,
            prs_kostensoort k,
            prs_kostenplaats kp,
            prs_bedrijf b
    WHERE       f.cnt_contract_key = c.cnt_contract_key
            AND f.fin_factuur_statuses_key = s.fin_factuur_statuses_key
            AND f.prs_kostensoort_key = k.prs_kostensoort_key
            AND c.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
            AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key(+);

--CONN#20077
CREATE OR REPLACE VIEW conn_v_pgb_uitnutting
(
   fclt_f_Catalogus,
   fclt_f_Besteller,
   Bestellimiet,
   Besteld_tav_pgb
)
AS
  SELECT   bd.ins_discipline_omschrijving Catalogus,
           pf.prs_perslid_naam_full Besteller,
           fp.fac_profiel_limiet Limiet,
           SUM (
              (bb.bes_bestelling_item_aantal * bb.bes_bestelling_item_prijs)
           )
              totaal
    FROM   bes_discipline bd,
           bes_disc_params bdp,
           bes_srtgroep bsg,
           bes_srtdeel bsd,
           bes_bestelling_item bb,
           bes_bestelling b,
           prs_perslid p,
           prs_v_perslid_fullnames pf,
           fac_profiel fp
   WHERE       bdp.bes_ins_discipline_key = bd.ins_discipline_key
           AND bsg.ins_discipline_key = bd.ins_discipline_key
           AND bsd.bes_srtgroep_key = bsg.bes_srtgroep_key
           AND b.bes_bestelling_key = bb.bes_bestelling_key
           AND bb.bes_srtdeel_key = bsd.bes_srtdeel_key
           AND bd.ins_discipline_verwijder IS NULL
           AND bdp.bes_disc_params_pgb = 1               -- PGB moet aan staan
           AND p.prs_perslid_key = b.prs_perslid_key
           AND TO_CHAR (bes_bestelling_datum, 'YYYY') =
                 TO_CHAR (SYSDATE, 'YYYY')
           AND fp.fac_profiel_key = p.fac_profiel_key
           AND b.bes_bestelling_status IN (3, 5, 6, 7)
           -- Gefiateerd, Besteld, Geleverd, Verwerkt
           AND pf.prs_perslid_key = p.prs_perslid_key
GROUP BY   bd.ins_discipline_omschrijving, pf.prs_perslid_naam_full, fp.fac_profiel_limiet
ORDER BY   1, 2;


--CONN#20985
/* Formatted on 8-7-2011 11:22:44 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW conn_v_rap_bes_artikel_expimp
(
   fclt_f_catalogusnaam,
   artikelbedrijf,
   catalogusaanmaak,
   artikelnummer,
   artikelgroepomschrijving,
   artikelomschrijving,
   artikelprijs,
   artikeleenheid,
   artikelimage,
   artikelveelvoud,
   artikelbtw,
   artikelvervaldatum,
   artikelinkoopprijs,
   artikelminimum
)
AS
   SELECT   td.ins_discipline_omschrijving,
            b.prs_bedrijf_naam,
            TO_CHAR (td.ins_discipline_aanmaak, 'yyyymmdd'),
            sd.bes_srtdeel_nr,
            sg.bes_srtgroep_omschrijving,
            sd.bes_srtdeel_omschrijving,
            TO_CHAR (bes.getsrtdeelprijs(sd.bes_srtdeel_key, NULL)),
            sd.bes_srtdeel_eenheid,
            sd.bes_srtdeel_image,
            TO_CHAR (sd.bes_srtdeel_veelvoud),
            TO_CHAR (COALESCE (sd.bes_srtdeel_btw, 0)),
            TO_CHAR (
               COALESCE (sd.bes_srtdeel_vervaldatum,
                         TO_DATE ('31-12-2099', 'dd-mm-yyyy')),
               'yyyymmdd'
            ),
            TO_CHAR (bes.getsrtdeelinkprijs(sd.bes_srtdeel_key, NULL)),
            NULL
     FROM   ins_tab_discipline td,
            bes_srtgroep sg,
            bes_srtdeel sd,
            prs_bedrijf b
    WHERE       td.ins_discipline_module = 'BES'
            AND td.ins_discipline_verwijder IS NULL
            AND td.ins_discipline_key = sg.ins_discipline_key
            AND sg.bes_srtgroep_verwijder IS NULL
            AND sg.bes_srtgroep_key = sd.bes_srtgroep_key
            AND sd.bes_srtdeel_verwijder IS NULL
            AND sd.prs_bedrijf_key = b.prs_bedrijf_key;

/* Formatted on 3-2-2012 9:48:48 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW conn_v_rap_inspectieobj_expimp
(
   fclt_f_locatiecode,
   ruimte,
   fclt_f_discipline,
   fclt_f_groep,
   fclt_f_objectsoort,
   object_id,
   fclt_f_merk,
   fclt_f_type,
   fclt_f_hoogte_cm,
   fclt_f_belasting_kg,
   fclt_f_bereik_nm_bar,
   fclt_f_voltage,
   fclt_f_apkplicht,
   fclt_f_keuring_categorie,
   fclt_f_contract_nr,                                      -- Per CONN#22359!
   fclt_f_leverancier,
   fclt_f_soortcontrole,
   periode,
   controle_gepland,
   controle_laatste,
   controledatum,
   controleopmerking,
   fclt_f_afgekeurd
)
AS
   SELECT   x.alg_locatie_code,
            COALESCE (z1.alg_ruimte_nr, z2.alg_ruimte_nr),
            x.ins_discipline_omschrijving,
            x.ins_srtgroep_omschrijving,
            x.ins_srtdeel_omschrijving,
            x.ins_deel_omschrijving,
            REPLACE (k1.merk, CHR (13) || CHR (10), ' '),
            REPLACE (k2.TYPE, CHR (13) || CHR (10), ' '),
            k3.hoogte,
            k4.belasting,
            k5.bereik,
            k6.voltage,
            k7.apkplicht,
            k8.categorie,
            COALESCE (lev_onderhd.cnt_contract_nummer_intern,
                      lev_onderst.cnt_contract_nummer_intern)
               contract_nr,
            COALESCE (lev_onderhd.prs_bedrijf_naam,
                      lev_onderst.prs_bedrijf_naam)
               leverancier,
            csd.ins_srtcontrole_omschrijving,
            TO_CHAR (csd.ins_srtcontrole_periode),
            DECODE (
               y.ins_deelsrtcontrole_datum,
               NULL,
               TO_CHAR (x.ins_deel_aanmaak + csd.ins_srtcontrole_periode,
                        'dd-mm-yyyy'),
               TO_CHAR (
                  y.ins_deelsrtcontrole_datum + csd.ins_srtcontrole_periode,
                  'dd-mm-yyyy'
               )
            ),
            DECODE (y.ins_deelsrtcontrole_datum,
                    NULL, TO_CHAR (x.ins_deel_aanmaak, 'dd-mm-yyyy'),
                    TO_CHAR (y.ins_deelsrtcontrole_datum, 'dd-mm-yyyy')),
            NULL controledatum,
            NULL controlopmerking,
            k9.afgekeurd
     FROM                                                (SELECT   scs.ins_srtinstallatie_key
                                                                      ins_srtdeel_key,
                                                                   scs.ins_srtcontrole_key,
                                                                   scs.ins_srtcontrole_omschrijving,
                                                                   scs.ins_srtcontrole_periode
                                                            FROM   ins_srtcontrole scs
                                                           WHERE   scs.ins_srtcontrole_niveau =
                                                                      'S'
                                                          UNION ALL
                                                          SELECT   sd.ins_srtdeel_key,
                                                                   scg.ins_srtcontrole_key,
                                                                   scg.ins_srtcontrole_omschrijving,
                                                                   scg.ins_srtcontrole_periode
                                                            FROM   ins_srtcontrole scg,
                                                                   ins_srtdeel sd
                                                           WHERE   scg.ins_srtcontrole_niveau =
                                                                      'G'
                                                                   AND scg.ins_srtinstallatie_key =
                                                                         sd.ins_srtgroep_key
                                                          UNION ALL
                                                          SELECT   sd.ins_srtdeel_key,
                                                                   scd.ins_srtcontrole_key,
                                                                   scd.ins_srtcontrole_omschrijving,
                                                                   scd.ins_srtcontrole_periode
                                                            FROM   ins_srtcontrole scd,
                                                                   ins_srtgroep sg,
                                                                   ins_srtdeel sd
                                                           WHERE   scd.ins_srtcontrole_niveau =
                                                                      'D'
                                                                   AND scd.ins_srtinstallatie_key =
                                                                         sg.ins_discipline_key
                                                                   AND sg.ins_srtgroep_key =
                                                                         sd.ins_srtgroep_key)
                                                         csd
                                                      LEFT JOIN
                                                         (SELECT   d.ins_deel_key,
                                                                   d.ins_deel_aanmaak,
                                                                   d.ins_deel_omschrijving,
                                                                   d.ins_alg_ruimte_key,
                                                                   d.ins_alg_ruimte_type,
                                                                   sd.ins_srtdeel_key,
                                                                   sd.ins_srtdeel_code,
                                                                   sd.ins_srtdeel_omschrijving,
                                                                   sg.ins_srtgroep_omschrijving,
                                                                   td.ins_discipline_omschrijving,
                                                                   l.alg_locatie_key,
                                                                   l.alg_locatie_code
                                                            FROM   ins_v_aanwezigdeel d,
                                                                   ins_srtdeel sd,
                                                                   ins_srtgroep sg,
                                                                   ins_tab_discipline td,
                                                                   alg_locatie l
                                                           WHERE   d.ins_srtdeel_key =
                                                                      sd.ins_srtdeel_key
                                                                   AND sd.ins_srtgroep_key =
                                                                         sg.ins_srtgroep_key
                                                                   AND sg.ins_discipline_key =
                                                                         td.ins_discipline_key
                                                                   AND d.ins_alg_locatie_key =
                                                                         l.alg_locatie_key(+))
                                                         x
                                                      ON csd.ins_srtdeel_key =
                                                            x.ins_srtdeel_key
                                                   LEFT JOIN
                                                      (SELECT   DISTINCT
                                                                co.cnt_ins_deel_key,
                                                                c.cnt_contract_nummer_intern,
                                                                b.prs_bedrijf_naam
                                                         FROM   cnt_contract_object co,
                                                                cnt_contract c,
                                                                ins_tab_discipline cd,
                                                                prs_bedrijf b
                                                        WHERE   co.cnt_contract_object_verwijder IS NULL
                                                                AND co.cnt_ins_deel_key IS NOT NULL
                                                                AND co.cnt_contract_key =
                                                                      c.cnt_contract_key
                                                                AND c.cnt_contract_looptijd_tot >=
                                                                      TRUNC (
                                                                         ADD_MONTHS (
                                                                            SYSDATE,
                                                                            -12
                                                                         ),
                                                                         'YYYY'
                                                                      )
                                                                AND c.ins_discipline_key =
                                                                      cd.ins_discipline_key
                                                                AND cd.ins_discipline_verwijder IS NULL
                                                                AND c.cnt_prs_bedrijf_key =
                                                                      b.prs_bedrijf_key)
                                                      lev_onderhd
                                                   ON x.ins_deel_key =
                                                         lev_onderhd.cnt_ins_deel_key
                                                LEFT JOIN
                                                   (SELECT   DISTINCT
                                                             co.cnt_ins_srtdeel_key,
                                                             g.alg_locatie_key,
                                                             c.cnt_contract_nummer_intern,
                                                             b.prs_bedrijf_naam
                                                      FROM   cnt_contract_object co,
                                                             cnt_contract c,
                                                             ins_tab_discipline cd,
                                                             cnt_contract_plaats cp,
                                                             alg_gebouw g,
                                                             prs_bedrijf b
                                                     WHERE   co.cnt_contract_object_verwijder IS NULL
                                                             AND co.cnt_ins_srtdeel_key IS NOT NULL
                                                             AND co.cnt_contract_key =
                                                                   c.cnt_contract_key
                                                             AND c.cnt_contract_looptijd_tot >=
                                                                   TRUNC (
                                                                      ADD_MONTHS (
                                                                         SYSDATE,
                                                                         -12
                                                                      ),
                                                                      'YYYY'
                                                                   )
                                                             AND c.ins_discipline_key =
                                                                   cd.ins_discipline_key
                                                             AND cd.ins_discipline_verwijder IS NULL
                                                             AND c.cnt_contract_key =
                                                                   cp.cnt_contract_key
                                                             AND ( (cp.cnt_alg_plaats_code =
                                                                       'G'
                                                                    AND cp.cnt_alg_plaats_key =
                                                                          g.alg_gebouw_key)
                                                                  OR (cp.cnt_alg_plaats_code =
                                                                         'L'
                                                                      AND cp.cnt_alg_plaats_key =
                                                                            g.alg_locatie_key))
                                                             AND c.cnt_prs_bedrijf_key =
                                                                   b.prs_bedrijf_key)
                                                   lev_onderst
                                                ON x.ins_srtdeel_key =
                                                      lev_onderst.cnt_ins_srtdeel_key
                                                   AND x.alg_locatie_key =
                                                         lev_onderst.alg_locatie_key
                                             LEFT JOIN
                                                (SELECT   ins_deel_key,
                                                          ins_kenmerkdeel_waarde
                                                             merk
                                                   FROM   ins_v_aanwezigkenmerkdeel kd,
                                                          ins_kenmerk k
                                                  WHERE   kd.ins_kenmerk_key =
                                                             k.ins_kenmerk_key
                                                          AND k.ins_srtkenmerk_key =
                                                                42) k1
                                             ON x.ins_deel_key =
                                                   k1.ins_deel_key
                                          LEFT JOIN
                                             (SELECT   ins_deel_key,
                                                       ins_kenmerkdeel_waarde
                                                          TYPE
                                                FROM   ins_v_aanwezigkenmerkdeel kd,
                                                       ins_kenmerk k
                                               WHERE   kd.ins_kenmerk_key =
                                                          k.ins_kenmerk_key
                                                       AND k.ins_srtkenmerk_key =
                                                             41) k2
                                          ON x.ins_deel_key = k2.ins_deel_key
                                       LEFT JOIN
                                          (SELECT   ins_deel_key,
                                                    ins_kenmerkdeel_waarde
                                                       hoogte
                                             FROM   ins_v_aanwezigkenmerkdeel kd,
                                                    ins_kenmerk k
                                            WHERE   kd.ins_kenmerk_key =
                                                       k.ins_kenmerk_key
                                                    AND k.ins_srtkenmerk_key =
                                                          1461) k3
                                       ON x.ins_deel_key = k3.ins_deel_key
                                    LEFT JOIN
                                       (SELECT   ins_deel_key,
                                                 ins_kenmerkdeel_waarde
                                                    belasting
                                          FROM   ins_v_aanwezigkenmerkdeel kd,
                                                 ins_kenmerk k
                                         WHERE   kd.ins_kenmerk_key =
                                                    k.ins_kenmerk_key
                                                 AND k.ins_srtkenmerk_key =
                                                       1462) k4
                                    ON x.ins_deel_key = k4.ins_deel_key
                                 LEFT JOIN
                                    (SELECT   ins_deel_key,
                                              ins_kenmerkdeel_waarde bereik
                                       FROM   ins_v_aanwezigkenmerkdeel kd,
                                              ins_kenmerk k
                                      WHERE   kd.ins_kenmerk_key =
                                                 k.ins_kenmerk_key
                                              AND k.ins_srtkenmerk_key = 1463)
                                    k5
                                 ON x.ins_deel_key = k5.ins_deel_key
                              LEFT JOIN
                                 (SELECT   ins_deel_key,
                                           ins_kenmerkdeel_waarde voltage
                                    FROM   ins_v_aanwezigkenmerkdeel kd,
                                           ins_kenmerk k
                                   WHERE   kd.ins_kenmerk_key =
                                              k.ins_kenmerk_key
                                           AND k.ins_srtkenmerk_key = 1464)
                                 k6
                              ON x.ins_deel_key = k6.ins_deel_key
                           LEFT JOIN
                              (SELECT   ins_deel_key,
                                        DECODE (ins_kenmerkdeel_waarde,
                                                '129', 'JA',
                                                'NEE')
                                           apkplicht
                                 FROM   ins_v_aanwezigkenmerkdeel kd,
                                        ins_kenmerk k
                                WHERE   kd.ins_kenmerk_key =
                                           k.ins_kenmerk_key
                                        AND k.ins_srtkenmerk_key = 1465) k7
                           ON x.ins_deel_key = k7.ins_deel_key
                        LEFT JOIN
                           (SELECT   ins_deel_key,
                                     ins_kenmerkdeel_waarde categorie
                              FROM   ins_v_aanwezigkenmerkdeel kd,
                                     ins_kenmerk k
                             WHERE   kd.ins_kenmerk_key = k.ins_kenmerk_key
                                     AND k.ins_srtkenmerk_key = 1467) k8
                        ON x.ins_deel_key = k8.ins_deel_key
                     LEFT JOIN
                        (SELECT   ins_deel_key,
                                  DECODE (ins_kenmerkdeel_waarde,
                                          '129', 'JA',
                                          'NEE')
                                     afgekeurd
                           FROM   ins_v_aanwezigkenmerkdeel kd, ins_kenmerk k
                          WHERE   kd.ins_kenmerk_key = k.ins_kenmerk_key
                                  AND k.ins_srtkenmerk_key = 1466) k9
                     ON x.ins_deel_key = k9.ins_deel_key
                  LEFT JOIN
                     (SELECT   dsc.ins_deel_key,
                               dsc.ins_srtcontrole_key,
                               dsc.ins_deelsrtcontrole_datum,
                               dsc.ins_deelsrtcontrole_opmerking
                        FROM   ins_deelsrtcontrole dsc
                       WHERE   dsc.ins_deelsrtcontrole_datum =
                                  (SELECT   MAX (ins_deelsrtcontrole_datum)
                                     FROM   ins_deelsrtcontrole
                                    WHERE   ins_deel_key = dsc.ins_deel_key
                                            AND ins_srtcontrole_key =
                                                  dsc.ins_srtcontrole_key)) y
                  ON x.ins_deel_key = y.ins_deel_key
                     AND csd.ins_srtcontrole_key = y.ins_srtcontrole_key
               LEFT JOIN
                  (SELECT   r.alg_ruimte_key,
                            'R' alg_ruimte_type,
                            r.alg_ruimte_nr
                     FROM   alg_ruimte r
                    WHERE   r.alg_ruimte_key = r.alg_ruimte_key) z1
               ON x.ins_alg_ruimte_key = z1.alg_ruimte_key
                  AND x.ins_alg_ruimte_type = z1.alg_ruimte_type
            LEFT JOIN
               (SELECT   wp.prs_werkplek_key,
                         'W' alg_ruimte_type,
                         r.alg_ruimte_nr
                  FROM   prs_werkplek wp, alg_ruimte r
                 WHERE   wp.prs_alg_ruimte_key = r.alg_ruimte_key) z2
            ON x.ins_alg_ruimte_key = z2.prs_werkplek_key
               AND x.ins_alg_ruimte_type = z2.alg_ruimte_type;

/* Formatted on 1-2-2012 14:45:54 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE conn_import_inspectieobj (
   p_import_key IN NUMBER
)
IS
   c_delim                         VARCHAR2 (1) := ';';
   v_newline                       VARCHAR2 (1000);              -- Input line
   v_errormsg                      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 (200);
   -- De importvelden:
   v_alg_locatie_code              VARCHAR2 (255);                      -- C10
   v_alg_ruimte_nr                 VARCHAR2 (255);                      -- C10
   v_ins_discipline_omschrijving   VARCHAR2 (255);                      -- C30
   v_ins_srtgroep_omschrijving     VARCHAR2 (255);                      -- C60
   v_ins_srtdeel_omschrijving      VARCHAR2 (255);                     -- C100
   v_ins_deel_omschrijving         VARCHAR2 (255);                      -- C60
   v_merk                          VARCHAR2 (255);                      -- C60
   v_type                          VARCHAR2 (255);                      -- C60
   v_hoogte                        VARCHAR2 (255);                      -- C60
   v_belasting                     VARCHAR2 (255);                      -- C60
   v_bereik                        VARCHAR2 (255);                      -- C60
   v_voltage                       VARCHAR2 (255);                      -- C60
   v_apkplicht                     VARCHAR2 (255);                      -- C60
   v_categorie                     VARCHAR2 (255);                      -- C60
   v_cnt_contract_nummer_intern    VARCHAR2 (255);                      -- C30
   v_prs_bedrijf_naam              VARCHAR2 (255);                      -- C60
   v_ins_srtcontrole_oms           VARCHAR2 (255);                      -- C60
   x_periode                       VARCHAR2 (255);                       -- N4
   x_controle_gepland              VARCHAR2 (255);                     -- DATE
   x_controle_laatste              VARCHAR2 (255);                     -- DATE
   v_ins_controle_datum            VARCHAR2 (255);                     -- DATE
   v_ins_controle_opm              VARCHAR2 (1024);                    -- C500
   v_afgekeurd                     VARCHAR2 (255);                      -- C60
   -- Overig:
   v_ins_controle_datum_d          DATE;                               -- DATE

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

   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_errormsg := 'Fout bij opvragen importregel';
         v_aanduiding := '';
         v_ongeldig := 0;
         -- Lees alle veldwaarden
         fac.imp_getfield (v_newline, c_delim, v_alg_locatie_code);
         fac.imp_getfield (v_newline, c_delim, v_alg_ruimte_nr);
         fac.imp_getfield (v_newline, c_delim, v_ins_discipline_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_ins_srtgroep_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_ins_deel_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_merk);
         fac.imp_getfield (v_newline, c_delim, v_type);
         fac.imp_getfield (v_newline, c_delim, v_hoogte);
         fac.imp_getfield (v_newline, c_delim, v_belasting);
         fac.imp_getfield (v_newline, c_delim, v_bereik);
         fac.imp_getfield (v_newline, c_delim, v_voltage);
         fac.imp_getfield (v_newline, c_delim, v_apkplicht);
         fac.imp_getfield (v_newline, c_delim, v_categorie);
         fac.imp_getfield (v_newline, c_delim, v_cnt_contract_nummer_intern);
         fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_naam);
         fac.imp_getfield (v_newline, c_delim, v_ins_srtcontrole_oms);
         fac.imp_getfield (v_newline, c_delim, x_periode);
         fac.imp_getfield (v_newline, c_delim, x_controle_gepland);
         fac.imp_getfield (v_newline, c_delim, x_controle_laatste);
         fac.imp_getfield (v_newline, c_delim, v_ins_controle_datum);
         fac.imp_getfield (v_newline, c_delim, v_ins_controle_opm);
         fac.imp_getfield (v_newline, c_delim, v_afgekeurd);

         v_aanduiding :=
               '['
            || v_ins_discipline_omschrijving
            || '|'
            || v_ins_srtgroep_omschrijving
            || '|'
            || v_ins_srtdeel_omschrijving
            || '|'
            || v_ins_deel_omschrijving
            || '] ';

         -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
         -- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
         -- Ik negeer alles totdat ik een geldige header ben gepasseerd.
         IF (header_is_valid = 0)
         THEN
            IF     UPPER (v_alg_locatie_code) = 'LOCATIECODE'
               AND UPPER (v_alg_ruimte_nr) = 'RUIMTE'
               AND UPPER (v_ins_discipline_omschrijving) = 'DISCIPLINE'
               AND UPPER (v_ins_srtgroep_omschrijving) = 'GROEP'
               AND UPPER (v_ins_srtdeel_omschrijving) = 'OBJECTSOORT'
               AND UPPER (v_ins_deel_omschrijving) = 'OBJECT_ID'
               AND UPPER (v_merk) = 'MERK'
               AND UPPER (v_type) = 'TYPE'
               AND UPPER (v_hoogte) = 'HOOGTE_CM'
               AND UPPER (v_belasting) = 'BELASTING_KG'
               AND UPPER (v_bereik) = 'BEREIK_NM_BAR'
               AND UPPER (v_voltage) = 'VOLTAGE'
               AND UPPER (v_apkplicht) = 'APKPLICHT'
               AND UPPER (v_categorie) = 'KEURING_CATEGORIE'
               AND UPPER (v_prs_bedrijf_naam) = 'LEVERANCIER'
               AND UPPER (v_cnt_contract_nummer_intern) = 'CONTRACT_NR' -- Per CONN#22359!
               AND UPPER (v_ins_srtcontrole_oms) = 'SOORTCONTROLE'
               AND UPPER (x_periode) = 'PERIODE'
               AND UPPER (x_controle_gepland) = 'CONTROLE_GEPLAND'
               AND UPPER (x_controle_laatste) = 'CONTROLE_LAATSTE'
               AND UPPER (v_ins_controle_datum) = 'CONTROLEDATUM'
               AND UPPER (v_ins_controle_opm) = 'CONTROLEOPMERKING'
               AND UPPER (v_afgekeurd) = 'AFGEKEURD'
            THEN
               header_is_valid := 1;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            -- Controleer alle veldwaarden
            v_errormsg := 'Locatiecode ongeldig';
            v_alg_locatie_code := TRIM (v_alg_locatie_code);

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

            --
            v_errormsg := 'Ruimte ongeldig';
            v_alg_ruimte_nr := TRIM (v_alg_ruimte_nr);

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

            --
            v_errormsg := 'Disciplineomschrijving ongeldig';
            v_ins_discipline_omschrijving :=
               TRIM (v_ins_discipline_omschrijving);

            IF LENGTH (v_ins_discipline_omschrijving) > 30
            THEN
               v_ins_discipline_omschrijving :=
                  SUBSTR (TRIM (v_ins_discipline_omschrijving), 1, 30);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Disciplineomschrijving wordt afgebroken tot ['
                  || v_ins_discipline_omschrijving
                  || ']'
               );
            END IF;

            --
            v_errormsg := 'Groepsoortomschrijving ongeldig';
            v_ins_srtgroep_omschrijving := TRIM (v_ins_srtgroep_omschrijving);

            IF LENGTH (v_ins_srtgroep_omschrijving) > 60
            THEN
               v_ins_srtgroep_omschrijving :=
                  SUBSTR (TRIM (v_ins_srtgroep_omschrijving), 1, 60);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Groepsoortomschrijving wordt afgebroken tot ['
                  || v_ins_srtgroep_omschrijving
                  || ']'
               );
            END IF;

            -- VERVALLEN 'Objectsoortcode'

            --
            v_errormsg := 'Objectsoortomschrijving ongeldig';
            v_ins_srtdeel_omschrijving := TRIM (v_ins_srtdeel_omschrijving);

            IF LENGTH (v_ins_srtdeel_omschrijving) > 100
            THEN
               v_ins_srtdeel_omschrijving :=
                  SUBSTR (TRIM (v_ins_srtdeel_omschrijving), 1, 100);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Objectsoortomschrijving wordt afgebroken tot ['
                  || v_ins_srtdeel_omschrijving
                  || ']'
               );
            END IF;

            --
            v_errormsg := 'Objectomschrijving ongeldig';
            v_ins_deel_omschrijving := TRIM (v_ins_deel_omschrijving);

            IF LENGTH (v_ins_deel_omschrijving) > 60
            THEN
               v_ins_deel_omschrijving :=
                  SUBSTR (TRIM (v_ins_deel_omschrijving), 1, 60);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Objectomschrijving wordt afgebroken tot ['
                  || v_ins_deel_omschrijving
                  || ']'
               );
            END IF;

            --
            v_errormsg := 'Merk ongeldig';
            v_merk := TRIM (v_merk);

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

            --
            v_errormsg := 'Type ongeldig';
            v_type := TRIM (v_type);

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

            --
            v_errormsg := 'Hoogte ongeldig';
            v_hoogte := TRIM (v_hoogte);

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

            --
            v_errormsg := 'Belasting ongeldig';
            v_belasting := TRIM (v_belasting);

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

            --
            v_errormsg := 'Bereik ongeldig';
            v_bereik := TRIM (v_bereik);

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

            --
            v_errormsg := 'Voltage ongeldig';
            v_voltage := TRIM (v_voltage);

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

            --
            v_errormsg := 'APK-plicht ongeldig';
            v_apkplicht := TRIM (v_apkplicht);

            IF LENGTH (v_apkplicht) > 60
            THEN
               v_apkplicht := SUBSTR (v_apkplicht, 1, 60);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                  'APK-plicht wordt afgebroken tot [' || v_apkplicht || ']'
               );
            END IF;

            --
            v_errormsg := 'Categorie ongeldig';
            v_categorie := TRIM (v_categorie);

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

            --
            v_errormsg := 'Contractnummer ongeldig';
            v_cnt_contract_nummer_intern :=
               TRIM (v_cnt_contract_nummer_intern);

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

            --
            v_errormsg := 'Leverancier ongeldig';
            v_prs_bedrijf_naam := TRIM (v_prs_bedrijf_naam);

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

            --
            v_errormsg := 'Soort controle ongeldig';
            v_ins_srtcontrole_oms := TRIM (v_ins_srtcontrole_oms);

            IF LENGTH (v_ins_srtcontrole_oms) > 60
            THEN
               v_ins_srtcontrole_oms := SUBSTR (v_ins_srtcontrole_oms, 1, 60);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Soort controle wordt afgebroken tot ['
                  || v_ins_srtcontrole_oms
                  || ']'
               );
            END IF;

            -- Skip 'Periode'
            -- Skip 'Controle gepland'
            -- Skip 'Controle laatste'

            --
            v_errormsg := 'Controledatum ongeldig';
            v_ins_controle_datum := TRIM (v_ins_controle_datum);
            v_ins_controle_datum_d := NULL;

            IF (v_ins_controle_datum IS NOT NULL)
            THEN
               IF (fac.safe_to_date (v_ins_controle_datum, 'dd-mm-yyyy') IS NULL)
               THEN
                  fac.imp_writelog (p_import_key,
                                    'W',
                                    v_aanduiding || v_errormsg,
                                    'Controledatum wordt genegeerd');
               ELSE
                  v_ins_controle_datum_d :=
                     fac.safe_to_date (v_ins_controle_datum, 'dd-mm-yyyy');
               END IF;
            END IF;

            --
            v_errormsg := 'Controleopmerking ongeldig';
            v_ins_controle_opm := TRIM (v_ins_controle_opm);

            IF LENGTH (v_ins_controle_opm) > 500
            THEN
               v_ins_controle_opm := SUBSTR (v_ins_controle_opm, 1, 500);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                  'Controleopmerking wordt afgekapt op 500 posities'
               );
            END IF;

            --
            v_errormsg := 'Afgekeurd ongeldig';
            v_afgekeurd := TRIM (v_afgekeurd);

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

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

                  INSERT INTO conn_imp_inspectieobj (
                                                        alg_locatie_code,
                                                        alg_ruimte_nr,
                                                        ins_discipline_omschrijving,
                                                        ins_srtgroep_omschrijving,
                                                        --ins_srtdeel_code, -- VERVALLEN
                                                        ins_srtdeel_omschrijving,
                                                        ins_deel_omschrijving,
                                                        merk,
                                                        TYPE,
                                                        hoogte,
                                                        belasting,
                                                        bereik,
                                                        voltage,
                                                        apkplicht,
                                                        categorie,
                                                        cnt_contract_nummer_intern,
                                                        prs_bedrijf_naam,
                                                        ins_srtcontrole_omschrijving,
                                                        ins_deelsrtcontrole_datum,
                                                        ins_deelsrtcontrole_opmerking,
                                                        afgekeurd
                             )
                    VALUES   (v_alg_locatie_code,
                              v_alg_ruimte_nr,
                              v_ins_discipline_omschrijving,
                              v_ins_srtgroep_omschrijving,
                              --v_ins_srtdeel_code, -- VERVALLEN
                              v_ins_srtdeel_omschrijving,
                              v_ins_deel_omschrijving,
                              v_merk,
                              v_type,
                              v_hoogte,
                              v_belasting,
                              v_bereik,
                              v_voltage,
                              v_apkplicht,
                              v_categorie,
                              v_cnt_contract_nummer_intern,
                              v_prs_bedrijf_naam,
                              v_ins_srtcontrole_oms,
                              v_ins_controle_datum_d,
                              v_ins_controle_opm,
                              v_afgekeurd);

                  COMMIT;
                  v_count_import := v_count_import + 1;
               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 IF;
         END IF;
      END;
   END LOOP;

   IF (header_is_valid = 0)
   THEN
      fac.imp_writelog (p_import_key,
                        'E',
                        'Ongeldig importbestand',
                        'Geen header of header niet volgens specificatie!');
   ELSE
      fac.imp_writelog (
         p_import_key,
         'S',
         'Inspectieobjecten/aantal ingelezen importregels: '
         || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'Inspectieobjecten/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 inspectieobjecten afgebroken!');
END conn_import_inspectieobj;
/

/* Formatted on 3-2-2012 11:18:55 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE conn_update_inspectieobj (
   p_import_key IN NUMBER
)
AS
   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);

   -- SUBPROC
   PROCEDURE add_insdiscipline (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
           SELECT   UPPER (ins_discipline_omschrijving) ins_discipline_upper,
                    MAX (ins_discipline_omschrijving)
                       ins_discipline_omschrijving
             FROM   conn_imp_inspectieobj
         GROUP BY   UPPER (ins_discipline_omschrijving);

      v_errormsg         VARCHAR2 (1024);
      v_discipline_key   NUMBER (10);
      ccount             NUMBER (10);
      oracle_err_num     NUMBER;
      oracle_err_mes     VARCHAR2 (200);
      v_count_tot        NUMBER (10);
      v_count_update     NUMBER (10);
   BEGIN
      v_count_tot := 0;
      v_count_update := 0;

      FOR rec IN c1
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_errormsg :=
                  'Fout bij toevoegen INS-discipline ['
               || rec.ins_discipline_omschrijving
               || ']';

            SELECT   COUNT ( * )
              INTO   ccount
              FROM   ins_tab_discipline
             WHERE   ins_discipline_verwijder IS NULL
                     AND ins_discipline_module = 'INS'
                     AND UPPER (TRIM (ins_discipline_omschrijving)) =
                           UPPER (TRIM (rec.ins_discipline_omschrijving));

            IF ccount = 0
            THEN
               INSERT INTO ins_tab_discipline (ins_discipline_module,
                                               ins_discipline_omschrijving,
                                               ins_discipline_min_level,
                                               ins_discipline_kpnverplicht)
                  VALUES   ('INS',
                            rec.ins_discipline_omschrijving,
                            1,
                            0)
               RETURNING   ins_discipline_key      INTO   v_discipline_key;

               INSERT INTO ins_disc_params (
                                               ins_discipline_key,
                                               ins_disc_params_type
                          )
                 VALUES   (v_discipline_key, 0);

               COMMIT;
               v_count_update := v_count_update + 1;
            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_errormsg,
                                 '');
               COMMIT;
         END;
      END LOOP;

      fac.imp_writelog (
         p_import_key,
         'S',
         'INS-Disciplines/aantal ingelezen: ' || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'INS-Disciplines/aantal toegevoegd: ' || TO_CHAR (v_count_update),
         ''
      );
      COMMIT;
   END;

   -- SUBPROC
   PROCEDURE add_srtgroep (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
           SELECT   UPPER (ins_discipline_omschrijving) ins_discipline_upper,
                    UPPER (ins_srtgroep_omschrijving) ins_srtgroep_upper,
                    MAX (ins_discipline_omschrijving)
                       ins_discipline_omschrijving,
                    MAX (ins_srtgroep_omschrijving) ins_srtgroep_omschrijving
             FROM   conn_imp_inspectieobj
         GROUP BY   UPPER (ins_discipline_omschrijving),
                    UPPER (ins_srtgroep_omschrijving);

      v_errormsg         VARCHAR2 (1024);
      v_discipline_key   NUMBER (10);
      ccount             NUMBER (10);
      oracle_err_num     NUMBER;
      oracle_err_mes     VARCHAR2 (200);
      v_count_tot        NUMBER (10);
      v_count_update     NUMBER (10);
   BEGIN
      v_count_tot := 0;
      v_count_update := 0;

      FOR rec IN c1
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_errormsg :=
                  'Fout bij bepalen INS-discipline ['
               || rec.ins_discipline_omschrijving
               || ']';

            SELECT   ins_discipline_key
              INTO   v_discipline_key
              FROM   ins_tab_discipline
             WHERE   ins_discipline_verwijder IS NULL
                     AND ins_discipline_module = 'INS'
                     AND UPPER (TRIM (ins_discipline_omschrijving)) =
                           UPPER (TRIM (rec.ins_discipline_omschrijving));

            v_errormsg :=
                  'Fout bij toevoegen INS-groepsoort ['
               || rec.ins_srtgroep_omschrijving
               || ']';

            SELECT   COUNT ( * )
              INTO   ccount
              FROM   ins_srtgroep
             WHERE   ins_srtgroep_verwijder IS NULL
                     AND ins_discipline_key = v_discipline_key
                     AND UPPER (TRIM (ins_srtgroep_omschrijving)) =
                           UPPER (TRIM (rec.ins_srtgroep_omschrijving));

            IF ccount = 0
            THEN
               INSERT INTO ins_srtgroep (
                                            ins_discipline_key,
                                            ins_srtgroep_module,
                                            ins_srtgroep_omschrijving
                          )
                 VALUES   (
                              v_discipline_key,
                              'INS',
                              rec.ins_srtgroep_omschrijving
                          );

               COMMIT;
               v_count_update := v_count_update + 1;
            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_errormsg,
                                 '');
               COMMIT;
         END;
      END LOOP;

      fac.imp_writelog (
         p_import_key,
         'S',
         'INS-Groepsoorten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'INS-Groepsoorten/aantal toegevoegd: ' || TO_CHAR (v_count_update),
         ''
      );
      COMMIT;
   END;

   -- SUBPROC
   PROCEDURE add_srtdeel (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
           SELECT   UPPER (ins_discipline_omschrijving) ins_discipline_upper,
                    UPPER (ins_srtgroep_omschrijving) ins_srtgroep_upper,
                    UPPER (ins_srtdeel_omschrijving) ins_srtdeel_upper,
                    MAX(UPPER(   SUBSTR (ins_srtgroep_omschrijving, 1, 2)
                              || '-'
                              || SUBSTR (ins_srtdeel_omschrijving, 1, 2)))
                       new_srtdeel_code_upper,
                    MAX (ins_discipline_omschrijving)
                       ins_discipline_omschrijving,
                    MAX (ins_srtgroep_omschrijving) ins_srtgroep_omschrijving,
                    MAX (ins_srtdeel_omschrijving) ins_srtdeel_omschrijving
             FROM   conn_imp_inspectieobj
         GROUP BY   UPPER (ins_discipline_omschrijving),
                    UPPER (ins_srtgroep_omschrijving),
                    UPPER (ins_srtdeel_omschrijving);

      v_errormsg         VARCHAR2 (1024);
      v_discipline_key   NUMBER (10);
      v_srtgroep_key     NUMBER (10);
      ccount             NUMBER (10);
      oracle_err_num     NUMBER;
      oracle_err_mes     VARCHAR2 (200);
      v_count_tot        NUMBER (10);
      v_count_update     NUMBER (10);
   BEGIN
      v_count_tot := 0;
      v_count_update := 0;

      FOR rec IN c1
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_errormsg :=
                  'Fout bij bepalen INS-discipline ['
               || rec.ins_discipline_omschrijving
               || ']';

            SELECT   ins_discipline_key
              INTO   v_discipline_key
              FROM   ins_tab_discipline
             WHERE   ins_discipline_verwijder IS NULL
                     AND ins_discipline_module = 'INS'
                     AND UPPER (TRIM (ins_discipline_omschrijving)) =
                           UPPER (TRIM (rec.ins_discipline_omschrijving));

            v_errormsg :=
                  'Fout bij bepalen INS-groepsoort ['
               || rec.ins_srtgroep_omschrijving
               || ']';

            SELECT   ins_srtgroep_key
              INTO   v_srtgroep_key
              FROM   ins_srtgroep
             WHERE       ins_srtgroep_verwijder IS NULL
                     AND ins_srtgroep_module = 'INS'
                     AND ins_discipline_key = v_discipline_key
                     AND UPPER (TRIM (ins_srtgroep_omschrijving)) =
                           UPPER (TRIM (rec.ins_srtgroep_omschrijving));

            v_errormsg :=
                  'Fout bij toevoegen INS-objectsoort ['
               || rec.ins_srtdeel_omschrijving
               || ']';

            SELECT   COUNT ( * )
              INTO   ccount
              FROM   ins_srtdeel
             WHERE       ins_srtdeel_verwijder IS NULL
                     AND ins_srtdeel_module = 'INS'
                     AND ins_srtgroep_key = v_srtgroep_key
                     AND UPPER (TRIM (ins_srtdeel_omschrijving)) =
                           UPPER (TRIM (rec.ins_srtdeel_omschrijving));

            IF ccount = 0
            THEN
               -- Binding 17 betekent ruimtegebonden of persoonsgebonden???
               INSERT INTO ins_srtdeel (ins_srtgroep_key,
                                        ins_srtdeel_module,
                                        ins_srtdeel_code,
                                        ins_srtdeel_omschrijving,
                                        ins_srtdeel_binding)
                 VALUES   (v_srtgroep_key,
                           'INS',
                           rec.new_srtdeel_code_upper,
                           rec.ins_srtdeel_omschrijving,
                           17);

               COMMIT;
               v_count_update := v_count_update + 1;
            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_errormsg,
                                 '');
               COMMIT;
         END;
      END LOOP;

      fac.imp_writelog (
         p_import_key,
         'S',
         'INS-Objectsoorten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'INS-Objectsoorten/aantal toegevoegd: ' || TO_CHAR (v_count_update),
         ''
      );
      COMMIT;
   END;

   -- SUBPROC
   PROCEDURE add_deelinspectie (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
         SELECT   obj.ins_discipline_omschrijving,
                  obj.ins_srtgroep_omschrijving,
                  obj.ins_srtdeel_omschrijving,
                  obj.ins_deel_omschrijving,
                  obj.merk,
                  obj.TYPE,
                  obj.hoogte,
                  obj.belasting,
                  obj.bereik,
                  obj.voltage,
                  DECODE (UPPER (obj.apkplicht), 'JA', 129, 'NEE', 130, -1)
                     apkplicht,
                  obj.categorie,
                  obj.alg_locatie_code,
                  obj.alg_ruimte_nr, -- CONN#21887/Relevant igv. nieuwe objecten!
                  obj.cnt_contract_nummer_intern,
                  obj.ins_srtcontrole_omschrijving,
                  obj.ins_deelsrtcontrole_datum,
                  DECODE (
                     COALESCE (cb.prs_bedrijf_naam, obj.prs_bedrijf_naam),
                     NULL,
                     obj.ins_deelsrtcontrole_opmerking,
                        COALESCE (cb.prs_bedrijf_naam, obj.prs_bedrijf_naam)
                     || ':'
                     || CHR (13)
                     || CHR (10)
                     || COALESCE (obj.ins_deelsrtcontrole_opmerking, '-')
                  )
                     ins_deelsrtcontrole_opmerking,
                  DECODE (UPPER (obj.afgekeurd), 'JA', 129, 'NEE', 130, -1)
                     afgekeurd,
                  cb.cnt_contract_key
           FROM      (SELECT   ins_discipline_omschrijving,
                               ins_srtgroep_omschrijving,
                               ins_srtdeel_omschrijving,
                               ins_deel_omschrijving,
                               merk,
                               TYPE,
                               hoogte,
                               belasting,
                               bereik,
                               voltage,
                               apkplicht,
                               categorie,
                               alg_locatie_code,
                               alg_ruimte_nr, -- CONN#21887/Relevant igv. nieuwe objecten!
                               cnt_contract_nummer_intern,  -- Per CONN#22359!
                               prs_bedrijf_naam,
                               ins_srtcontrole_omschrijving,
                               ins_deelsrtcontrole_datum,
                               ins_deelsrtcontrole_opmerking,
                               afgekeurd
                        FROM   conn_imp_inspectieobj) obj
                  LEFT JOIN
                     (SELECT   c.cnt_contract_nummer_intern,
                               b.prs_bedrijf_naam,
                               c.cnt_contract_key
                        FROM   cnt_contract c,
                               ins_tab_discipline td,
                               cnt_disc_params dp,
                               prs_bedrijf b
                       WHERE   c.cnt_contract_verwijder IS NULL
                               AND c.ins_discipline_key =
                                     td.ins_discipline_key
                               AND td.ins_discipline_verwijder IS NULL
                               AND td.ins_discipline_key =
                                     dp.cnt_ins_discipline_key
                               AND dp.cnt_srtcontract_type = 3 -- Ondersteuning/Support
                               AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key)
                     cb
                  ON obj.cnt_contract_nummer_intern =
                        cb.cnt_contract_nummer_intern;

      v_errormsg           VARCHAR2 (1024);
      c_ruimte_nr          VARCHAR2 (10) := 'WERKPLAATS';
      c_srtruimte_key      NUMBER (10) := 1;
      c_merk_srtkey        NUMBER (10) := 42;
      c_type_srtkey        NUMBER (10) := 41;
      c_hoogte_srtkey      NUMBER (10) := 1461;
      c_belasting_srtkey   NUMBER (10) := 1462;
      c_bereik_srtkey      NUMBER (10) := 1463;
      c_voltage_srtkey     NUMBER (10) := 1464;
      c_apkplicht_srtkey   NUMBER (10) := 1465;
      c_categorie_srtkey   NUMBER (10) := 1467;
      c_afgekeurd_srtkey   NUMBER (10) := 1466;
      c_controle_periode   NUMBER (10) := 365;
      v_discipline_key     NUMBER (10);
      v_srtgroep_key       NUMBER (10);
      v_srtdeel_key        NUMBER (10);
      v_locatie_key        NUMBER (10);
      v_deel_key           NUMBER (10);
      v_deel_oms           VARCHAR2 (60);
      v_gebouw_key         NUMBER (10);
      v_verdieping_key     NUMBER (10);
      v_ruimte_key         NUMBER (10);
      v_kenmerk_key        NUMBER (10);
      v_kenmerkdeel_key    NUMBER (10);
      v_srtcontrole_id     VARCHAR2 (20);
      v_controlemode_key   NUMBER (10);
      ccount               NUMBER (10);
      oracle_err_num       NUMBER;
      oracle_err_mes       VARCHAR2 (200);
      v_count_tot          NUMBER (10);
      v_count_oupdate      NUMBER (10);
      v_count_cupdate      NUMBER (10);
      v_aanduiding         VARCHAR (200);
   BEGIN
      v_count_tot := 0;
      v_count_oupdate := 0;
      v_count_cupdate := 0;
      v_aanduiding := '';

      FOR rec IN c1
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_aanduiding :=
                  '['
               || rec.ins_discipline_omschrijving
               || '|'
               || rec.ins_srtgroep_omschrijving
               || '|'
               || rec.ins_srtdeel_omschrijving
               || '|'
               || rec.ins_deel_omschrijving
               || '] ';
            v_errormsg := 'Fout bij bepalen INS-discipline';

            SELECT   ins_discipline_key
              INTO   v_discipline_key
              FROM   ins_discipline
             WHERE   ins_discipline_verwijder IS NULL
                     AND ins_discipline_module = 'INS'
                     AND UPPER (TRIM (ins_discipline_omschrijving)) =
                           UPPER (TRIM (rec.ins_discipline_omschrijving));

            v_errormsg := 'Fout bij bepalen INS-groepsoort';

            SELECT   ins_srtgroep_key
              INTO   v_srtgroep_key
              FROM   ins_srtgroep
             WHERE       ins_srtgroep_verwijder IS NULL
                     AND ins_srtgroep_module = 'INS'
                     AND ins_discipline_key = v_discipline_key
                     AND UPPER (TRIM (ins_srtgroep_omschrijving)) =
                           UPPER (TRIM (rec.ins_srtgroep_omschrijving));

            v_errormsg := 'Fout bij bepalen INS-objectsoort';

            SELECT   ins_srtdeel_key
              INTO   v_srtdeel_key
              FROM   ins_srtdeel
             WHERE       ins_srtdeel_verwijder IS NULL
                     AND ins_srtdeel_module = 'INS'
                     AND ins_srtgroep_key = v_srtgroep_key
                     AND UPPER (TRIM (ins_srtdeel_omschrijving)) =
                           UPPER (TRIM (rec.ins_srtdeel_omschrijving));

            v_errormsg :=
               'Fout bij bepalen locatie [' || rec.alg_locatie_code || ']';

            SELECT   alg_locatie_key
              INTO   v_locatie_key
              FROM   alg_locatie
             WHERE   alg_locatie_verwijder IS NULL
                     AND UPPER (TRIM (alg_locatie_code)) =
                           UPPER (TRIM (rec.alg_locatie_code));

            -- Ruimtegebonden objecten hebben een unieke ID binnen de locatie
            v_errormsg := 'Fout bij bepalen INS-object';

            SELECT   COUNT ( * )
              INTO   ccount
              FROM   ins_deel d
             WHERE       ins_deel_verwijder IS NULL
                     AND ins_deel_module = 'INS'
                     AND ins_srtdeel_key = v_srtdeel_key
                     AND ins_alg_locatie_key = v_locatie_key
                     AND ins_deel_upper = UPPER (rec.ins_deel_omschrijving);

            IF ccount > 0                  -- Object bestaat reeds op locatie!
            THEN
               SELECT   MAX (d.ins_deel_key)
                 INTO   v_deel_key
                 FROM   ins_deel d
                WHERE       ins_deel_verwijder IS NULL
                        AND ins_deel_module = 'INS'
                        AND ins_srtdeel_key = v_srtdeel_key
                        AND ins_alg_locatie_key = v_locatie_key
                        AND ins_deel_upper =
                              UPPER (rec.ins_deel_omschrijving);
            ELSE         -- Object bestaat nog niet op locatie, dus toevoegen!
               v_errormsg := 'Fout bij bepalen default ID';

               SELECT   INS.GET_DESCRIPTION ('LPN_INS_DEEL',
                                             NULL,
                                             ins_srtdeel_code_upper)
                 INTO   v_deel_oms
                 FROM   ins_srtdeel
                WHERE   ins_srtdeel_key = v_srtdeel_key;

               v_errormsg := 'Fout bij bepalen gewenste ruimte';

               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   alg_v_aanwezigruimte r,
                        alg_verdieping v,
                        alg_gebouw g
                WHERE       r.alg_ruimte_upper_nr = UPPER (rec.alg_ruimte_nr)
                        AND r.alg_verdieping_key = v.alg_verdieping_key
                        AND v.alg_gebouw_key = g.alg_gebouw_key
                        AND g.alg_locatie_key = v_locatie_key;

               IF ccount > 0           -- rec.alg_ruimte_nr bekend op locatie!
               THEN
                  SELECT   MAX (r.alg_ruimte_key)
                    INTO   v_ruimte_key
                    FROM   alg_v_aanwezigruimte r,
                           alg_verdieping v,
                           alg_gebouw g
                   WHERE       r.alg_ruimte_upper_nr = rec.alg_ruimte_nr
                           AND r.alg_verdieping_key = v.alg_verdieping_key
                           AND v.alg_gebouw_key = g.alg_gebouw_key
                           AND g.alg_locatie_key = v_locatie_key;
               ELSE -- rec.alg_ruimte_nr onbekend op locatie, c_ruimte_nr ook?
                  v_errormsg := 'Fout bij bepalen default ruimte';

                  SELECT   COUNT ( * )
                    INTO   ccount
                    FROM   alg_v_aanwezigruimte r,
                           alg_verdieping v,
                           alg_gebouw g
                   WHERE       r.alg_ruimte_upper_nr = c_ruimte_nr
                           AND r.alg_verdieping_key = v.alg_verdieping_key
                           AND v.alg_gebouw_key = g.alg_gebouw_key
                           AND g.alg_locatie_key = v_locatie_key;

                  IF ccount > 0              -- c_ruimte_nr bekend op locatie!
                  THEN
                     SELECT   MAX (r.alg_ruimte_key)
                       INTO   v_ruimte_key
                       FROM   alg_v_aanwezigruimte r,
                              alg_verdieping v,
                              alg_gebouw g
                      WHERE       r.alg_ruimte_upper_nr = c_ruimte_nr
                              AND r.alg_verdieping_key = v.alg_verdieping_key
                              AND v.alg_gebouw_key = g.alg_gebouw_key
                              AND g.alg_locatie_key = v_locatie_key;
                  ELSE   -- c_ruimte_nr nog onbekend op locatie, dan aanmaken!
                     v_errormsg := 'Fout bij bepalen default gebouw';

                     SELECT   MIN (g.alg_gebouw_key)
                       INTO   v_gebouw_key
                       FROM   alg_v_aanweziggebouw g
                      WHERE   g.alg_locatie_key = v_locatie_key;

                     v_errormsg := 'Fout bij bepalen default verdieping';

                     SELECT   v.alg_verdieping_key
                       INTO   v_verdieping_key
                       FROM   alg_v_aanwezigverdieping v
                      WHERE   v.alg_gebouw_key = v_gebouw_key
                              AND alg_verdieping_volgnr =
                                    (SELECT   MIN (alg_verdieping_volgnr)
                                       FROM   alg_v_aanwezigverdieping
                                      WHERE   alg_gebouw_key =
                                                 v.alg_gebouw_key);

                     v_errormsg := 'Fout bij toevoegen default ruimte';

                     INSERT INTO alg_ruimte (
                                                alg_verdieping_key,
                                                alg_srtruimte_key,
                                                alg_ruimte_nr
                                 )
                        VALUES   (
                                     v_verdieping_key,
                                     c_srtruimte_key,
                                     c_ruimte_nr
                                 )
                     RETURNING   alg_ruimte_key      INTO   v_ruimte_key;
                  END IF;
               END IF;

               v_errormsg := 'Fout bij toevoegen INS-object';

               INSERT INTO ins_deel (ins_discipline_key,
                                     ins_srtdeel_key,
                                     ins_deel_module,
                                     ins_deel_omschrijving,
                                     ins_alg_ruimte_key,
                                     ins_alg_ruimte_type,
                                     ins_alg_locatie_key)
                  VALUES   (v_discipline_key,
                            v_srtdeel_key,
                            'INS',
                            COALESCE (rec.ins_deel_omschrijving, v_deel_oms),
                            v_ruimte_key,
                            'R',
                            v_locatie_key)
               RETURNING   ins_deel_key      INTO   v_deel_key;

               COMMIT;

               v_count_oupdate := v_count_oupdate + 1;
            END IF;

            -- MERK toevoegen; huidige merk NOOIT gewijzigd via import!
            IF rec.merk IS NOT NULL AND UPPER (rec.merk) != 'NVT'
            THEN
               v_errormsg := 'Fout bij bepalen merk-kenmerk';

               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   ins_v_aanwezigkenmerk k
                WHERE   k.ins_srtkenmerk_key = c_merk_srtkey
                        AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                               AND k.ins_kenmerk_niveau = 'S')
                             OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                 AND k.ins_kenmerk_niveau = 'G')
                             OR (k.ins_srtinstallatie_key = v_discipline_key
                                 AND k.ins_kenmerk_niveau = 'D'));

               IF ccount = 0            -- Kenmerk bestaat niet; dan aanmaken!
               THEN
                  v_errormsg := 'Fout bij toevoegen merk-kenmerk';

                  INSERT INTO ins_kenmerk (ins_srtkenmerk_key,
                                           ins_srtinstallatie_key,
                                           ins_kenmerk_niveau,
                                           ins_kenmerk_volgnummer)
                     VALUES   (c_merk_srtkey,
                               v_srtdeel_key,
                               'S',
                               100)
                  RETURNING   ins_kenmerk_key      INTO   v_kenmerk_key;

                  fac.imp_writelog (
                     p_import_key,
                     'I',
                     'INS-Objecten/Merk-kenmerk toegevoegd voor: '
                     || rec.ins_srtdeel_omschrijving,
                     ''
                  );
                  COMMIT;
               ELSE
                  SELECT   k.ins_kenmerk_key
                    INTO   v_kenmerk_key
                    FROM   ins_v_aanwezigkenmerk k
                   WHERE   k.ins_srtkenmerk_key = c_merk_srtkey
                           AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                                  AND k.ins_kenmerk_niveau = 'S')
                                OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                    AND k.ins_kenmerk_niveau = 'G')
                                OR (k.ins_srtinstallatie_key =
                                       v_discipline_key
                                    AND k.ins_kenmerk_niveau = 'D'));
               END IF;

               v_errormsg := 'Fout bij bepalen huidige merk';

               SELECT   COUNT ( * ), MAX (ins_kenmerkdeel_key)
                 INTO   ccount, v_kenmerkdeel_key
                 FROM   ins_v_aanwezigkenmerkdeel
                WHERE   ins_deel_key = v_deel_key
                        AND ins_kenmerk_key = v_kenmerk_key;

               IF ccount = 0
               THEN
                  v_errormsg := 'Fout bij toevoegen merk';

                  INSERT INTO ins_kenmerkdeel (
                                                  ins_deel_key,
                                                  ins_kenmerk_key,
                                                  ins_kenmerkdeel_waarde
                             )
                    VALUES   (v_deel_key, v_kenmerk_key, rec.merk);

                  COMMIT;
               --ELSE
               --   v_errormsg := 'Fout bij wijzigen merk';

               --   UPDATE   ins_kenmerkdeel
               --      SET   ins_kenmerkdeel_waarde = rec.merk
               --    WHERE   ins_kenmerkdeel_key = v_kenmerkdeel_key;

               --   COMMIT;
               END IF;
            END IF;

            -- TYPE toevoegen; huidige waarde NOOIT gewijzigd via import!
            IF rec.TYPE IS NOT NULL AND UPPER (rec.TYPE) != 'NVT'
            THEN
               v_errormsg := 'Fout bij bepalen type-kenmerk';

               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   ins_v_aanwezigkenmerk k
                WHERE   k.ins_srtkenmerk_key = c_type_srtkey
                        AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                               AND k.ins_kenmerk_niveau = 'S')
                             OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                 AND k.ins_kenmerk_niveau = 'G')
                             OR (k.ins_srtinstallatie_key = v_discipline_key
                                 AND k.ins_kenmerk_niveau = 'D'));

               IF ccount = 0            -- Kenmerk bestaat niet; dan aanmaken!
               THEN
                  v_errormsg := 'Fout bij toevoegen type-kenmerk';

                  INSERT INTO ins_kenmerk (ins_srtkenmerk_key,
                                           ins_srtinstallatie_key,
                                           ins_kenmerk_niveau,
                                           ins_kenmerk_volgnummer)
                     VALUES   (c_type_srtkey,
                               v_srtdeel_key,
                               'S',
                               105)
                  RETURNING   ins_kenmerk_key      INTO   v_kenmerk_key;

                  fac.imp_writelog (
                     p_import_key,
                     'I',
                     'INS-Objecten/Type-kenmerk toegevoegd voor: '
                     || rec.ins_srtdeel_omschrijving,
                     ''
                  );
                  COMMIT;
               ELSE
                  SELECT   k.ins_kenmerk_key
                    INTO   v_kenmerk_key
                    FROM   ins_v_aanwezigkenmerk k
                   WHERE   k.ins_srtkenmerk_key = c_type_srtkey
                           AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                                  AND k.ins_kenmerk_niveau = 'S')
                                OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                    AND k.ins_kenmerk_niveau = 'G')
                                OR (k.ins_srtinstallatie_key =
                                       v_discipline_key
                                    AND k.ins_kenmerk_niveau = 'D'));
               END IF;

               v_errormsg := 'Fout bij bepalen huidige type';

               SELECT   COUNT ( * ), MAX (ins_kenmerkdeel_key)
                 INTO   ccount, v_kenmerkdeel_key
                 FROM   ins_v_aanwezigkenmerkdeel
                WHERE   ins_deel_key = v_deel_key
                        AND ins_kenmerk_key = v_kenmerk_key;

               IF ccount = 0
               THEN
                  v_errormsg := 'Fout bij toevoegen type';

                  INSERT INTO ins_kenmerkdeel (
                                                  ins_deel_key,
                                                  ins_kenmerk_key,
                                                  ins_kenmerkdeel_waarde
                             )
                    VALUES   (v_deel_key, v_kenmerk_key, rec.TYPE);

                  COMMIT;
               --ELSE
               --   v_errormsg := 'Fout bij wijzigen type';

               --   UPDATE   ins_kenmerkdeel
               --      SET   ins_kenmerkdeel_waarde = rec.type
               --    WHERE   ins_kenmerkdeel_key = v_kenmerkdeel_key;

               --   COMMIT;
               END IF;
            END IF;

            -- HOOGTE toevoegen; huidige waarde NOOIT gewijzigd via import!
            IF rec.hoogte IS NOT NULL AND UPPER (rec.hoogte) != 'NVT'
            THEN
               v_errormsg := 'Fout bij bepalen hoogte-kenmerk';

               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   ins_v_aanwezigkenmerk k
                WHERE   k.ins_srtkenmerk_key = c_hoogte_srtkey
                        AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                               AND k.ins_kenmerk_niveau = 'S')
                             OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                 AND k.ins_kenmerk_niveau = 'G')
                             OR (k.ins_srtinstallatie_key = v_discipline_key
                                 AND k.ins_kenmerk_niveau = 'D'));

               IF ccount = 0            -- Kenmerk bestaat niet; dan aanmaken!
               THEN
                  v_errormsg := 'Fout bij toevoegen hoogte-kenmerk';

                  INSERT INTO ins_kenmerk (ins_srtkenmerk_key,
                                           ins_srtinstallatie_key,
                                           ins_kenmerk_niveau,
                                           ins_kenmerk_volgnummer)
                     VALUES   (c_hoogte_srtkey,
                               v_srtdeel_key,
                               'S',
                               110)
                  RETURNING   ins_kenmerk_key      INTO   v_kenmerk_key;

                  fac.imp_writelog (
                     p_import_key,
                     'I',
                     'INS-Objecten/Hoogte-kenmerk toegevoegd voor: '
                     || rec.ins_srtdeel_omschrijving,
                     ''
                  );
                  COMMIT;
               ELSE
                  SELECT   k.ins_kenmerk_key
                    INTO   v_kenmerk_key
                    FROM   ins_v_aanwezigkenmerk k
                   WHERE   k.ins_srtkenmerk_key = c_hoogte_srtkey
                           AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                                  AND k.ins_kenmerk_niveau = 'S')
                                OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                    AND k.ins_kenmerk_niveau = 'G')
                                OR (k.ins_srtinstallatie_key =
                                       v_discipline_key
                                    AND k.ins_kenmerk_niveau = 'D'));
               END IF;

               v_errormsg := 'Fout bij bepalen huidige hoogte';

               SELECT   COUNT ( * ), MAX (ins_kenmerkdeel_key)
                 INTO   ccount, v_kenmerkdeel_key
                 FROM   ins_v_aanwezigkenmerkdeel
                WHERE   ins_deel_key = v_deel_key
                        AND ins_kenmerk_key = v_kenmerk_key;

               IF ccount = 0
               THEN
                  v_errormsg := 'Fout bij toevoegen hoogte';

                  INSERT INTO ins_kenmerkdeel (
                                                  ins_deel_key,
                                                  ins_kenmerk_key,
                                                  ins_kenmerkdeel_waarde
                             )
                    VALUES   (v_deel_key, v_kenmerk_key, rec.hoogte);

                  COMMIT;
               --ELSE
               --   v_errormsg := 'Fout bij wijzigen hoogte';

               --   UPDATE   ins_kenmerkdeel
               --      SET   ins_kenmerkdeel_waarde = rec.hoogte
               --    WHERE   ins_kenmerkdeel_key = v_kenmerkdeel_key;

               --   COMMIT;
               END IF;
            END IF;

            -- BELASTING toevoegen; huidige waarde NOOIT gewijzigd via import!
            IF rec.belasting IS NOT NULL AND UPPER (rec.belasting) != 'NVT'
            THEN
               v_errormsg := 'Fout bij bepalen belasting-kenmerk';

               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   ins_v_aanwezigkenmerk k
                WHERE   k.ins_srtkenmerk_key = c_belasting_srtkey
                        AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                               AND k.ins_kenmerk_niveau = 'S')
                             OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                 AND k.ins_kenmerk_niveau = 'G')
                             OR (k.ins_srtinstallatie_key = v_discipline_key
                                 AND k.ins_kenmerk_niveau = 'D'));

               IF ccount = 0            -- Kenmerk bestaat niet; dan aanmaken!
               THEN
                  v_errormsg := 'Fout bij toevoegen belasting-kenmerk';

                  INSERT INTO ins_kenmerk (ins_srtkenmerk_key,
                                           ins_srtinstallatie_key,
                                           ins_kenmerk_niveau,
                                           ins_kenmerk_volgnummer)
                     VALUES   (c_belasting_srtkey,
                               v_srtdeel_key,
                               'S',
                               112)
                  RETURNING   ins_kenmerk_key      INTO   v_kenmerk_key;

                  fac.imp_writelog (
                     p_import_key,
                     'I',
                     'INS-Objecten/Belasting-kenmerk toegevoegd voor: '
                     || rec.ins_srtdeel_omschrijving,
                     ''
                  );
                  COMMIT;
               ELSE
                  SELECT   k.ins_kenmerk_key
                    INTO   v_kenmerk_key
                    FROM   ins_v_aanwezigkenmerk k
                   WHERE   k.ins_srtkenmerk_key = c_belasting_srtkey
                           AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                                  AND k.ins_kenmerk_niveau = 'S')
                                OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                    AND k.ins_kenmerk_niveau = 'G')
                                OR (k.ins_srtinstallatie_key =
                                       v_discipline_key
                                    AND k.ins_kenmerk_niveau = 'D'));
               END IF;

               v_errormsg := 'Fout bij bepalen huidige belasting';

               SELECT   COUNT ( * ), MAX (ins_kenmerkdeel_key)
                 INTO   ccount, v_kenmerkdeel_key
                 FROM   ins_v_aanwezigkenmerkdeel
                WHERE   ins_deel_key = v_deel_key
                        AND ins_kenmerk_key = v_kenmerk_key;

               IF ccount = 0
               THEN
                  v_errormsg := 'Fout bij toevoegen belasting';

                  INSERT INTO ins_kenmerkdeel (
                                                  ins_deel_key,
                                                  ins_kenmerk_key,
                                                  ins_kenmerkdeel_waarde
                             )
                    VALUES   (v_deel_key, v_kenmerk_key, rec.belasting);

                  COMMIT;
               --ELSE
               --   v_errormsg := 'Fout bij wijzigen belasting';

               --   UPDATE   ins_kenmerkdeel
               --      SET   ins_kenmerkdeel_waarde = rec.belasting
               --    WHERE   ins_kenmerkdeel_key = v_kenmerkdeel_key;

               --   COMMIT;
               END IF;
            END IF;

            -- BEREIK toevoegen; huidige waarde NOOIT gewijzigd via import!
            IF rec.bereik IS NOT NULL AND UPPER (rec.bereik) != 'NVT'
            THEN
               v_errormsg := 'Fout bij bepalen bereik-kenmerk';

               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   ins_v_aanwezigkenmerk k
                WHERE   k.ins_srtkenmerk_key = c_bereik_srtkey
                        AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                               AND k.ins_kenmerk_niveau = 'S')
                             OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                 AND k.ins_kenmerk_niveau = 'G')
                             OR (k.ins_srtinstallatie_key = v_discipline_key
                                 AND k.ins_kenmerk_niveau = 'D'));

               IF ccount = 0            -- Kenmerk bestaat niet; dan aanmaken!
               THEN
                  v_errormsg := 'Fout bij toevoegen bereik-kenmerk';

                  INSERT INTO ins_kenmerk (ins_srtkenmerk_key,
                                           ins_srtinstallatie_key,
                                           ins_kenmerk_niveau,
                                           ins_kenmerk_volgnummer)
                     VALUES   (c_bereik_srtkey,
                               v_srtdeel_key,
                               'S',
                               114)
                  RETURNING   ins_kenmerk_key      INTO   v_kenmerk_key;

                  fac.imp_writelog (
                     p_import_key,
                     'I',
                     'INS-Objecten/Bereik-kenmerk toegevoegd voor: '
                     || rec.ins_srtdeel_omschrijving,
                     ''
                  );
                  COMMIT;
               ELSE
                  SELECT   k.ins_kenmerk_key
                    INTO   v_kenmerk_key
                    FROM   ins_v_aanwezigkenmerk k
                   WHERE   k.ins_srtkenmerk_key = c_bereik_srtkey
                           AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                                  AND k.ins_kenmerk_niveau = 'S')
                                OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                    AND k.ins_kenmerk_niveau = 'G')
                                OR (k.ins_srtinstallatie_key =
                                       v_discipline_key
                                    AND k.ins_kenmerk_niveau = 'D'));
               END IF;

               v_errormsg := 'Fout bij bepalen huidige bereik';

               SELECT   COUNT ( * ), MAX (ins_kenmerkdeel_key)
                 INTO   ccount, v_kenmerkdeel_key
                 FROM   ins_v_aanwezigkenmerkdeel
                WHERE   ins_deel_key = v_deel_key
                        AND ins_kenmerk_key = v_kenmerk_key;

               IF ccount = 0
               THEN
                  v_errormsg := 'Fout bij toevoegen bereik';

                  INSERT INTO ins_kenmerkdeel (
                                                  ins_deel_key,
                                                  ins_kenmerk_key,
                                                  ins_kenmerkdeel_waarde
                             )
                    VALUES   (v_deel_key, v_kenmerk_key, rec.bereik);

                  COMMIT;
               --ELSE
               --   v_errormsg := 'Fout bij wijzigen bereik';

               --   UPDATE   ins_kenmerkdeel
               --      SET   ins_kenmerkdeel_waarde = rec.bereik
               --    WHERE   ins_kenmerkdeel_key = v_kenmerkdeel_key;

               --   COMMIT;
               END IF;
            END IF;

            -- VOLTAGE toevoegen; huidige waarde NOOIT gewijzigd via import!
            IF rec.voltage IS NOT NULL AND UPPER (rec.voltage) != 'NVT'
            THEN
               v_errormsg := 'Fout bij bepalen voltage-kenmerk';

               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   ins_v_aanwezigkenmerk k
                WHERE   k.ins_srtkenmerk_key = c_voltage_srtkey
                        AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                               AND k.ins_kenmerk_niveau = 'S')
                             OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                 AND k.ins_kenmerk_niveau = 'G')
                             OR (k.ins_srtinstallatie_key = v_discipline_key
                                 AND k.ins_kenmerk_niveau = 'D'));

               IF ccount = 0            -- Kenmerk bestaat niet; dan aanmaken!
               THEN
                  v_errormsg := 'Fout bij toevoegen voltage-kenmerk';

                  INSERT INTO ins_kenmerk (ins_srtkenmerk_key,
                                           ins_srtinstallatie_key,
                                           ins_kenmerk_niveau,
                                           ins_kenmerk_volgnummer)
                     VALUES   (c_voltage_srtkey,
                               v_srtdeel_key,
                               'S',
                               116)
                  RETURNING   ins_kenmerk_key      INTO   v_kenmerk_key;

                  fac.imp_writelog (
                     p_import_key,
                     'I',
                     'INS-Objecten/Voltage-kenmerk toegevoegd voor: '
                     || rec.ins_srtdeel_omschrijving,
                     ''
                  );
                  COMMIT;
               ELSE
                  SELECT   k.ins_kenmerk_key
                    INTO   v_kenmerk_key
                    FROM   ins_v_aanwezigkenmerk k
                   WHERE   k.ins_srtkenmerk_key = c_voltage_srtkey
                           AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                                  AND k.ins_kenmerk_niveau = 'S')
                                OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                    AND k.ins_kenmerk_niveau = 'G')
                                OR (k.ins_srtinstallatie_key =
                                       v_discipline_key
                                    AND k.ins_kenmerk_niveau = 'D'));
               END IF;

               v_errormsg := 'Fout bij bepalen huidige voltage';

               SELECT   COUNT ( * ), MAX (ins_kenmerkdeel_key)
                 INTO   ccount, v_kenmerkdeel_key
                 FROM   ins_v_aanwezigkenmerkdeel
                WHERE   ins_deel_key = v_deel_key
                        AND ins_kenmerk_key = v_kenmerk_key;

               IF ccount = 0
               THEN
                  v_errormsg := 'Fout bij toevoegen voltage';

                  INSERT INTO ins_kenmerkdeel (
                                                  ins_deel_key,
                                                  ins_kenmerk_key,
                                                  ins_kenmerkdeel_waarde
                             )
                    VALUES   (v_deel_key, v_kenmerk_key, rec.voltage);

                  COMMIT;
               --ELSE
               --   v_errormsg := 'Fout bij wijzigen voltage';

               --   UPDATE   ins_kenmerkdeel
               --      SET   ins_kenmerkdeel_waarde = rec.voltage
               --    WHERE   ins_kenmerkdeel_key = v_kenmerkdeel_key;

               --   COMMIT;
               END IF;
            END IF;

            -- APK toevoegen; huidige waarde NOOIT gewijzigd via import!
            IF rec.apkplicht IS NOT NULL AND UPPER (rec.apkplicht) != -1
            THEN
               v_errormsg := 'Fout bij bepalen APK-kenmerk';

               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   ins_v_aanwezigkenmerk k
                WHERE   k.ins_srtkenmerk_key = c_apkplicht_srtkey
                        AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                               AND k.ins_kenmerk_niveau = 'S')
                             OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                 AND k.ins_kenmerk_niveau = 'G')
                             OR (k.ins_srtinstallatie_key = v_discipline_key
                                 AND k.ins_kenmerk_niveau = 'D'));

               IF ccount = 0            -- Kenmerk bestaat niet; dan aanmaken!
               THEN
                  v_errormsg := 'Fout bij toevoegen APK-kenmerk';

                  INSERT INTO ins_kenmerk (ins_srtkenmerk_key,
                                           ins_srtinstallatie_key,
                                           ins_kenmerk_niveau,
                                           ins_kenmerk_volgnummer)
                     VALUES   (c_apkplicht_srtkey,
                               v_srtdeel_key,
                               'S',
                               118)
                  RETURNING   ins_kenmerk_key      INTO   v_kenmerk_key;

                  fac.imp_writelog (
                     p_import_key,
                     'I',
                     'INS-Objecten/APK-kenmerk toegevoegd voor: '
                     || rec.ins_srtdeel_omschrijving,
                     ''
                  );
                  COMMIT;
               ELSE
                  SELECT   k.ins_kenmerk_key
                    INTO   v_kenmerk_key
                    FROM   ins_v_aanwezigkenmerk k
                   WHERE   k.ins_srtkenmerk_key = c_apkplicht_srtkey
                           AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                                  AND k.ins_kenmerk_niveau = 'S')
                                OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                    AND k.ins_kenmerk_niveau = 'G')
                                OR (k.ins_srtinstallatie_key =
                                       v_discipline_key
                                    AND k.ins_kenmerk_niveau = 'D'));
               END IF;

               v_errormsg := 'Fout bij bepalen huidige APK';

               SELECT   COUNT ( * ), MAX (ins_kenmerkdeel_key)
                 INTO   ccount, v_kenmerkdeel_key
                 FROM   ins_v_aanwezigkenmerkdeel
                WHERE   ins_deel_key = v_deel_key
                        AND ins_kenmerk_key = v_kenmerk_key;

               IF ccount = 0
               THEN
                  v_errormsg := 'Fout bij toevoegen APK';

                  INSERT INTO ins_kenmerkdeel (
                                                  ins_deel_key,
                                                  ins_kenmerk_key,
                                                  ins_kenmerkdeel_waarde
                             )
                    VALUES   (v_deel_key, v_kenmerk_key, rec.apkplicht);

                  COMMIT;
               --ELSE
               --   v_errormsg := 'Fout bij wijzigen APK';

               --   UPDATE   ins_kenmerkdeel
               --      SET   ins_kenmerkdeel_waarde = rec.apkplicht
               --    WHERE   ins_kenmerkdeel_key = v_kenmerkdeel_key;

               --   COMMIT;
               END IF;
            END IF;

            -- CATEGORIE toevoegen; huidige waarde NOOIT gewijzigd via import!
            IF rec.categorie IS NOT NULL AND UPPER (rec.categorie) != 'NVT'
            THEN
               v_errormsg := 'Fout bij bepalen categorie-kenmerk';

               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   ins_v_aanwezigkenmerk k
                WHERE   k.ins_srtkenmerk_key = c_categorie_srtkey
                        AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                               AND k.ins_kenmerk_niveau = 'S')
                             OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                 AND k.ins_kenmerk_niveau = 'G')
                             OR (k.ins_srtinstallatie_key = v_discipline_key
                                 AND k.ins_kenmerk_niveau = 'D'));

               IF ccount = 0            -- Kenmerk bestaat niet; dan aanmaken!
               THEN
                  v_errormsg := 'Fout bij toevoegen categorie-kenmerk';

                  INSERT INTO ins_kenmerk (ins_srtkenmerk_key,
                                           ins_srtinstallatie_key,
                                           ins_kenmerk_niveau,
                                           ins_kenmerk_volgnummer)
                     VALUES   (c_categorie_srtkey,
                               v_srtdeel_key,
                               'S',
                               120)
                  RETURNING   ins_kenmerk_key      INTO   v_kenmerk_key;

                  fac.imp_writelog (
                     p_import_key,
                     'I',
                     'INS-Objecten/Categorie-kenmerk toegevoegd voor: '
                     || rec.ins_srtdeel_omschrijving,
                     ''
                  );
                  COMMIT;
               ELSE
                  SELECT   k.ins_kenmerk_key
                    INTO   v_kenmerk_key
                    FROM   ins_v_aanwezigkenmerk k
                   WHERE   k.ins_srtkenmerk_key = c_categorie_srtkey
                           AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                                  AND k.ins_kenmerk_niveau = 'S')
                                OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                    AND k.ins_kenmerk_niveau = 'G')
                                OR (k.ins_srtinstallatie_key =
                                       v_discipline_key
                                    AND k.ins_kenmerk_niveau = 'D'));
               END IF;

               v_errormsg := 'Fout bij bepalen huidige categorie';

               SELECT   COUNT ( * ), MAX (ins_kenmerkdeel_key)
                 INTO   ccount, v_kenmerkdeel_key
                 FROM   ins_v_aanwezigkenmerkdeel
                WHERE   ins_deel_key = v_deel_key
                        AND ins_kenmerk_key = v_kenmerk_key;

               IF ccount = 0
               THEN
                  v_errormsg := 'Fout bij toevoegen categorie';

                  INSERT INTO ins_kenmerkdeel (
                                                  ins_deel_key,
                                                  ins_kenmerk_key,
                                                  ins_kenmerkdeel_waarde
                             )
                    VALUES   (v_deel_key, v_kenmerk_key, rec.categorie);

                  COMMIT;
               --ELSE
               --   v_errormsg := 'Fout bij wijzigen categorie';

               --   UPDATE   ins_kenmerkdeel
               --      SET   ins_kenmerkdeel_waarde = rec.categorie
               --    WHERE   ins_kenmerkdeel_key = v_kenmerkdeel_key;

               --   COMMIT;
               END IF;
            END IF;

            -- AFGEKEURD toevoegen; huidige waarde NOOIT gewijzigd via import!
            IF rec.afgekeurd IS NOT NULL AND UPPER (rec.afgekeurd) != -1
            THEN
               v_errormsg := 'Fout bij bepalen afgekeurd-kenmerk';

               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   ins_v_aanwezigkenmerk k
                WHERE   k.ins_srtkenmerk_key = c_afgekeurd_srtkey
                        AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                               AND k.ins_kenmerk_niveau = 'S')
                             OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                 AND k.ins_kenmerk_niveau = 'G')
                             OR (k.ins_srtinstallatie_key = v_discipline_key
                                 AND k.ins_kenmerk_niveau = 'D'));

               IF ccount = 0            -- Kenmerk bestaat niet; dan aanmaken!
               THEN
                  v_errormsg := 'Fout bij toevoegen afgekeurd-kenmerk';

                  INSERT INTO ins_kenmerk (ins_srtkenmerk_key,
                                           ins_srtinstallatie_key,
                                           ins_kenmerk_niveau,
                                           ins_kenmerk_volgnummer)
                     VALUES   (c_afgekeurd_srtkey,
                               v_srtdeel_key,
                               'S',
                               122)
                  RETURNING   ins_kenmerk_key      INTO   v_kenmerk_key;

                  fac.imp_writelog (
                     p_import_key,
                     'I',
                     'INS-Objecten/afgekeurd-kenmerk toegevoegd voor: '
                     || rec.ins_srtdeel_omschrijving,
                     ''
                  );
                  COMMIT;
               ELSE
                  SELECT   k.ins_kenmerk_key
                    INTO   v_kenmerk_key
                    FROM   ins_v_aanwezigkenmerk k
                   WHERE   k.ins_srtkenmerk_key = c_afgekeurd_srtkey
                           AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                                  AND k.ins_kenmerk_niveau = 'S')
                                OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                    AND k.ins_kenmerk_niveau = 'G')
                                OR (k.ins_srtinstallatie_key =
                                       v_discipline_key
                                    AND k.ins_kenmerk_niveau = 'D'));
               END IF;

               v_errormsg := 'Fout bij bepalen huidige afgekeurd';

               SELECT   COUNT ( * ), MAX (ins_kenmerkdeel_key)
                 INTO   ccount, v_kenmerkdeel_key
                 FROM   ins_v_aanwezigkenmerkdeel
                WHERE   ins_deel_key = v_deel_key
                        AND ins_kenmerk_key = v_kenmerk_key;

               IF ccount = 0
               THEN
                  v_errormsg := 'Fout bij toevoegen afgekeurd';

                  INSERT INTO ins_kenmerkdeel (
                                                  ins_deel_key,
                                                  ins_kenmerk_key,
                                                  ins_kenmerkdeel_waarde
                             )
                    VALUES   (v_deel_key, v_kenmerk_key, rec.afgekeurd);

                  COMMIT;
               --ELSE
               --   v_errormsg := 'Fout bij wijzigen afgekeurd';

               --   UPDATE   ins_kenmerkdeel
               --      SET   ins_kenmerkdeel_waarde = rec.afgekeurd
               --    WHERE   ins_kenmerkdeel_key = v_kenmerkdeel_key;

               --   COMMIT;
               END IF;
            END IF;

            -- Toevoegen controle; gebruik [a] de meest specifieke soort en
            -- [b] de minst recente mode!
            v_errormsg := 'Fout bij bepalen soort controle';

            SELECT   COUNT ( * )
              INTO   ccount
              FROM   ins_srtcontrole sc
             WHERE   UPPER (TRIM (sc.ins_srtcontrole_omschrijving)) =
                        UPPER (TRIM (rec.ins_srtcontrole_omschrijving))
                     AND ( (sc.ins_srtinstallatie_key = v_srtdeel_key
                            AND sc.ins_srtcontrole_niveau = 'S')
                          OR (sc.ins_srtinstallatie_key = v_srtgroep_key
                              AND sc.ins_srtcontrole_niveau = 'G')
                          OR (sc.ins_srtinstallatie_key = v_discipline_key
                              AND sc.ins_srtcontrole_niveau = 'D'));

            IF ccount = 0
            THEN
               v_errormsg := 'Fout bij toevoegen soort controle';

               INSERT INTO ins_srtcontrole (ins_srtinstallatie_key,
                                            ins_srtcontrole_niveau,
                                            ins_srtcontrole_omschrijving,
                                            ins_srtcontrole_periode)
                  VALUES   (v_srtdeel_key,
                            'S',
                            SUBSTR (rec.ins_srtcontrole_omschrijving, 1, 60),
                            c_controle_periode)           -- Default een jaar!
               RETURNING   ins_srtcontrole_key      INTO   v_srtcontrole_id;

               v_srtcontrole_id := 'S' || v_srtcontrole_id;

               fac.imp_writelog (
                  p_import_key,
                  'I',
                     'INS-Objecten/soort controle toegevoegd: '
                  || SUBSTR (rec.ins_srtcontrole_omschrijving, 1, 60)
                  || ' voor '
                  || rec.ins_srtdeel_omschrijving,
                  ''
               );
               COMMIT;
            ELSE
               SELECT   MAX(sc.ins_srtcontrole_niveau
                            || TO_CHAR (sc.ins_srtcontrole_key))
                 INTO   v_srtcontrole_id
                 FROM   ins_srtcontrole sc
                WHERE   UPPER (TRIM (sc.ins_srtcontrole_omschrijving)) =
                           UPPER (TRIM (rec.ins_srtcontrole_omschrijving))
                        AND ( (sc.ins_srtinstallatie_key = v_srtdeel_key
                               AND sc.ins_srtcontrole_niveau = 'S')
                             OR (sc.ins_srtinstallatie_key = v_srtgroep_key
                                 AND sc.ins_srtcontrole_niveau = 'G')
                             OR (sc.ins_srtinstallatie_key = v_discipline_key
                                 AND sc.ins_srtcontrole_niveau = 'D'));
            END IF;

            IF rec.ins_deelsrtcontrole_datum IS NOT NULL
            THEN
               v_errormsg := 'Fout bij bepalen controle mode';

               SELECT   MIN (ins_controlemode_key)
                 INTO   v_controlemode_key
                 FROM   ins_controlemode;

               v_errormsg := 'Fout bij toevoegen controle';

               INSERT INTO ins_deelsrtcontrole (
                                                   ins_deel_key,
                                                   ins_srtcontrole_key,
                                                   ins_deelsrtcontrole_datum,
                                                   ins_controlemode_key,
                                                   ins_deelsrtcontrole_opmerking
                          )
                 VALUES   (v_deel_key,
                           fac.safe_to_number (SUBSTR (v_srtcontrole_id, 2)),
                           rec.ins_deelsrtcontrole_datum,
                           v_controlemode_key,
                           rec.ins_deelsrtcontrole_opmerking);

               COMMIT;

               v_count_cupdate := v_count_cupdate + 1;
            END IF;

            -- Uitbreiden contract-plaats-scope als contractnummer voorkomt in
            -- importbestand (ie. cnt_contract_key kon worden bepaald) en deze
            -- relatie nog niet bestaat!
            IF (rec.cnt_contract_key IS NOT NULL)
            THEN
               v_errormsg := 'Fout bij bepalen contract-plaats-relatie';

               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   cnt_contract_plaats
                WHERE       cnt_contract_plaats_verwijder IS NULL
                        AND cnt_contract_key = rec.cnt_contract_key
                        AND cnt_alg_plaats_key = v_locatie_key
                        AND cnt_alg_plaats_code = 'L';

               IF ccount = 0
               THEN
                  v_errormsg := 'Fout bij toevoegen contract-plaats-scope';

                  INSERT INTO cnt_contract_plaats (
                                                      cnt_contract_key,
                                                      cnt_alg_plaats_key,
                                                      cnt_alg_plaats_code
                             )
                    VALUES   (rec.cnt_contract_key, v_locatie_key, 'L');

                  fac.imp_writelog (
                     p_import_key,
                     'I',
                        'INS-Objecten/plaats-contractscope uitgebreid: '
                     || rec.cnt_contract_nummer_intern
                     || ' plus '
                     || rec.ins_srtdeel_omschrijving,
                     ''
                  );
                  COMMIT;
               END IF;
            END IF;

            -- Uitbreiden contract-object-scope als contractnummer voorkomt in
            -- importbestand (ie. cnt_contract_key kon worden bepaald) en deze
            -- relatie nog niet bestaat!
            IF (rec.cnt_contract_key IS NOT NULL)
            THEN
               v_errormsg := 'Fout bij bepalen contract-object-relatie';

               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   cnt_contract_object
                WHERE       cnt_contract_object_verwijder IS NULL
                        AND cnt_contract_key = rec.cnt_contract_key
                        AND cnt_ins_srtdeel_key = v_srtdeel_key;

               IF ccount = 0
               THEN
                  v_errormsg := 'Fout bij toevoegen contract-object-scope';

                  INSERT INTO cnt_contract_object (
                                                      cnt_contract_key,
                                                      cnt_ins_srtdeel_key
                             )
                    VALUES   (rec.cnt_contract_key, v_srtdeel_key);

                  fac.imp_writelog (
                     p_import_key,
                     'I',
                        'INS-Objecten/object-contractscope uitgebreid: '
                     || rec.cnt_contract_nummer_intern
                     || ' plus '
                     || rec.ins_srtdeel_omschrijving,
                     ''
                  );
                  COMMIT;
               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;

      fac.imp_writelog (
         p_import_key,
         'S',
         'INS-Objecten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'INS-Objecten/aantal toegevoegd: ' || TO_CHAR (v_count_oupdate),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'INS-Controles/aantal toegevoegd: ' || TO_CHAR (v_count_cupdate),
         ''
      );
      COMMIT;
   END;
-- MAIN
BEGIN
   add_insdiscipline (p_import_key);
   add_srtgroep (p_import_key);
   add_srtdeel (p_import_key);
   add_deelinspectie (p_import_key);
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_errormsg,
                        'Importproces inspectieobjecten afgebroken!');
END conn_update_inspectieobj;
/

/* Formatted on 9-3-2012 17:37:17 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW conn_v_rap_keurobjecten_expimp
(
   fclt_f_locatiecode,
   ruimte,
   fclt_f_discipline,
   fclt_f_objectsoort,
   object_id,
   fclt_f_merk,
   fclt_f_keuring_categorie,
   fclt_f_contract_nr,
   fclt_f_leverancier,
   fclt_f_soortcontrole,
   --periode,
   --controle_gepland,
   --controle_laatste,
   controledatum,
   controleopmerking,
   fclt_f_afgekeurd
)
AS
   SELECT   x.alg_locatie_code,
            COALESCE (z1.alg_ruimte_nr, z2.alg_ruimte_nr),
            x.ins_discipline_omschrijving,
            x.ins_srtdeel_omschrijving,
            x.ins_deel_omschrijving,
            REPLACE (k1.merk, CHR (13) || CHR (10), ' '),
            k2.categorie,
            COALESCE (lev_onderhd.cnt_contract_nummer_intern,
                      lev_onderst.cnt_contract_nummer_intern)
               contract_nr,
            COALESCE (lev_onderhd.prs_bedrijf_naam,
                      lev_onderst.prs_bedrijf_naam)
               leverancier,
            csd.ins_srtcontrole_omschrijving,
            --TO_CHAR (csd.ins_srtcontrole_periode),
            --DECODE (
            --   y.ins_deelsrtcontrole_datum,
            --   NULL,
            --   TO_CHAR (x.ins_deel_aanmaak + csd.ins_srtcontrole_periode,
            --            'dd-mm-yyyy'),
            --   TO_CHAR (
            --      y.ins_deelsrtcontrole_datum + csd.ins_srtcontrole_periode,
            --      'dd-mm-yyyy'
            --   )
            --),
            --DECODE (y.ins_deelsrtcontrole_datum,
            --        NULL, TO_CHAR (x.ins_deel_aanmaak, 'dd-mm-yyyy'),
            --        TO_CHAR (y.ins_deelsrtcontrole_datum, 'dd-mm-yyyy')),
            NULL controledatum,
            NULL controlopmerking,
            k3.afgekeurd
     FROM                              (SELECT   scs.ins_srtinstallatie_key
                                                    ins_srtdeel_key,
                                                 scs.ins_srtcontrole_key,
                                                 scs.ins_srtcontrole_omschrijving,
                                                 scs.ins_srtcontrole_periode
                                          FROM   ins_srtcontrole scs
                                         WHERE   scs.ins_srtcontrole_niveau =
                                                    'S'
                                        UNION ALL
                                        SELECT   sd.ins_srtdeel_key,
                                                 scg.ins_srtcontrole_key,
                                                 scg.ins_srtcontrole_omschrijving,
                                                 scg.ins_srtcontrole_periode
                                          FROM   ins_srtcontrole scg,
                                                 ins_srtdeel sd
                                         WHERE   scg.ins_srtcontrole_niveau =
                                                    'G'
                                                 AND scg.ins_srtinstallatie_key =
                                                       sd.ins_srtgroep_key
                                        UNION ALL
                                        SELECT   sd.ins_srtdeel_key,
                                                 scd.ins_srtcontrole_key,
                                                 scd.ins_srtcontrole_omschrijving,
                                                 scd.ins_srtcontrole_periode
                                          FROM   ins_srtcontrole scd,
                                                 ins_srtgroep sg,
                                                 ins_srtdeel sd
                                         WHERE   scd.ins_srtcontrole_niveau =
                                                    'D'
                                                 AND scd.ins_srtinstallatie_key =
                                                       sg.ins_discipline_key
                                                 AND sg.ins_srtgroep_key =
                                                       sd.ins_srtgroep_key)
                                       csd
                                    LEFT JOIN
                                       (SELECT   d.ins_deel_key,
                                                 d.ins_deel_aanmaak,
                                                 d.ins_deel_omschrijving,
                                                 d.ins_alg_ruimte_key,
                                                 d.ins_alg_ruimte_type,
                                                 sd.ins_srtdeel_key,
                                                 sd.ins_srtdeel_code,
                                                 sd.ins_srtdeel_omschrijving,
                                                 sg.ins_srtgroep_omschrijving,
                                                 td.ins_discipline_omschrijving,
                                                 l.alg_locatie_key,
                                                 l.alg_locatie_code
                                          FROM   ins_v_aanwezigdeel d,
                                                 ins_srtdeel sd,
                                                 ins_srtgroep sg,
                                                 ins_tab_discipline td,
                                                 alg_locatie l
                                         WHERE   d.ins_srtdeel_key =
                                                    sd.ins_srtdeel_key
                                                 AND sd.ins_srtgroep_key =
                                                       sg.ins_srtgroep_key
                                                 AND sg.ins_discipline_key =
                                                       td.ins_discipline_key
                                                 AND d.ins_alg_locatie_key =
                                                       l.alg_locatie_key(+))
                                       x
                                    ON csd.ins_srtdeel_key =
                                          x.ins_srtdeel_key
                                 LEFT JOIN
                                    (SELECT   DISTINCT
                                              co.cnt_ins_deel_key,
                                              c.cnt_contract_nummer_intern,
                                              b.prs_bedrijf_naam
                                       FROM   cnt_contract_object co,
                                              cnt_contract c,
                                              ins_tab_discipline cd,
                                              prs_bedrijf b
                                      WHERE   co.cnt_contract_object_verwijder IS NULL
                                              AND co.cnt_ins_deel_key IS NOT NULL
                                              AND co.cnt_contract_key =
                                                    c.cnt_contract_key
                                              AND c.cnt_contract_looptijd_tot >=
                                                    TRUNC (
                                                       ADD_MONTHS (SYSDATE,
                                                                   -12),
                                                       'YYYY'
                                                    )
                                              AND c.ins_discipline_key =
                                                    cd.ins_discipline_key
                                              AND cd.ins_discipline_verwijder IS NULL
                                              AND c.cnt_prs_bedrijf_key =
                                                    b.prs_bedrijf_key)
                                    lev_onderhd
                                 ON x.ins_deel_key =
                                       lev_onderhd.cnt_ins_deel_key
                              LEFT JOIN
                                 (SELECT   DISTINCT
                                           co.cnt_ins_srtdeel_key,
                                           g.alg_locatie_key,
                                           c.cnt_contract_nummer_intern,
                                           b.prs_bedrijf_naam
                                    FROM   cnt_contract_object co,
                                           cnt_contract c,
                                           ins_tab_discipline cd,
                                           cnt_contract_plaats cp,
                                           alg_gebouw g,
                                           prs_bedrijf b
                                   WHERE   co.cnt_contract_object_verwijder IS NULL
                                           AND co.cnt_ins_srtdeel_key IS NOT NULL
                                           AND co.cnt_contract_key =
                                                 c.cnt_contract_key
                                           AND c.cnt_contract_looptijd_tot >=
                                                 TRUNC (
                                                    ADD_MONTHS (SYSDATE, -12),
                                                    'YYYY'
                                                 )
                                           AND c.ins_discipline_key =
                                                 cd.ins_discipline_key
                                           AND cd.ins_discipline_verwijder IS NULL
                                           AND c.cnt_contract_key =
                                                 cp.cnt_contract_key
                                           AND ( (cp.cnt_alg_plaats_code =
                                                     'G'
                                                  AND cp.cnt_alg_plaats_key =
                                                        g.alg_gebouw_key)
                                                OR (cp.cnt_alg_plaats_code =
                                                       'L'
                                                    AND cp.cnt_alg_plaats_key =
                                                          g.alg_locatie_key))
                                           AND c.cnt_prs_bedrijf_key =
                                                 b.prs_bedrijf_key)
                                 lev_onderst
                              ON x.ins_srtdeel_key =
                                    lev_onderst.cnt_ins_srtdeel_key
                                 AND x.alg_locatie_key =
                                       lev_onderst.alg_locatie_key
                           LEFT JOIN
                              (SELECT   ins_deel_key,
                                        ins_kenmerkdeel_waarde merk
                                 FROM   ins_v_aanwezigkenmerkdeel kd,
                                        ins_kenmerk k
                                WHERE   kd.ins_kenmerk_key =
                                           k.ins_kenmerk_key
                                        AND k.ins_srtkenmerk_key = 42) k1
                           ON x.ins_deel_key = k1.ins_deel_key
                        LEFT JOIN
                           (SELECT   ins_deel_key,
                                     ins_kenmerkdeel_waarde categorie
                              FROM   ins_v_aanwezigkenmerkdeel kd,
                                     ins_kenmerk k
                             WHERE   kd.ins_kenmerk_key = k.ins_kenmerk_key
                                     AND k.ins_srtkenmerk_key = 1467) k2
                        ON x.ins_deel_key = k2.ins_deel_key
                     LEFT JOIN
                        (SELECT   ins_deel_key,
                                  DECODE (ins_kenmerkdeel_waarde,
                                          '129', 'JA',
                                          'NEE')
                                     afgekeurd
                           FROM   ins_v_aanwezigkenmerkdeel kd, ins_kenmerk k
                          WHERE   kd.ins_kenmerk_key = k.ins_kenmerk_key
                                  AND k.ins_srtkenmerk_key = 1466) k3
                     ON x.ins_deel_key = k3.ins_deel_key
                  LEFT JOIN
                     (SELECT   dsc.ins_deel_key,
                               dsc.ins_srtcontrole_key,
                               dsc.ins_deelsrtcontrole_datum,
                               dsc.ins_deelsrtcontrole_opmerking
                        FROM   ins_deelsrtcontrole dsc
                       WHERE   dsc.ins_deelsrtcontrole_datum =
                                  (SELECT   MAX (ins_deelsrtcontrole_datum)
                                     FROM   ins_deelsrtcontrole
                                    WHERE   ins_deel_key = dsc.ins_deel_key
                                            AND ins_srtcontrole_key =
                                                  dsc.ins_srtcontrole_key)) y
                  ON x.ins_deel_key = y.ins_deel_key
                     AND csd.ins_srtcontrole_key = y.ins_srtcontrole_key
               LEFT JOIN
                  (SELECT   r.alg_ruimte_key,
                            'R' alg_ruimte_type,
                            r.alg_ruimte_nr
                     FROM   alg_ruimte r
                    WHERE   r.alg_ruimte_key = r.alg_ruimte_key) z1
               ON x.ins_alg_ruimte_key = z1.alg_ruimte_key
                  AND x.ins_alg_ruimte_type = z1.alg_ruimte_type
            LEFT JOIN
               (SELECT   wp.prs_werkplek_key,
                         'W' alg_ruimte_type,
                         r.alg_ruimte_nr
                  FROM   prs_werkplek wp, alg_ruimte r
                 WHERE   wp.prs_alg_ruimte_key = r.alg_ruimte_key) z2
            ON x.ins_alg_ruimte_key = z2.prs_werkplek_key
               AND x.ins_alg_ruimte_type = z2.alg_ruimte_type;

/* Formatted on 1-2-2012 14:45:54 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE conn_import_keurobjecten (
   p_import_key IN NUMBER
)
IS
   c_delim                         VARCHAR2 (1) := ';';
   v_newline                       VARCHAR2 (1000);              -- Input line
   v_errormsg                      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 (200);
   -- De importvelden:
   v_alg_locatie_code              VARCHAR2 (255);                      -- C10
   x_alg_ruimte_nr                 VARCHAR2 (255);                      -- C10
   x_ins_discipline_omschrijving   VARCHAR2 (255);                      -- C30
   x_ins_srtdeel_omschrijving      VARCHAR2 (255);                     -- C100
   v_ins_deel_omschrijving         VARCHAR2 (255);                      -- C60
   x_merk                          VARCHAR2 (255);                      -- C60
   x_categorie                     VARCHAR2 (255);                      -- C60
   v_cnt_contract_nummer_intern    VARCHAR2 (255);                      -- C30
   v_prs_bedrijf_naam              VARCHAR2 (255);                      -- C60
   v_ins_srtcontrole_oms           VARCHAR2 (255);                      -- C60
   v_ins_controle_datum            VARCHAR2 (255);                     -- DATE
   v_ins_controle_opm              VARCHAR2 (1024);                    -- C500
   v_afgekeurd                     VARCHAR2 (255);                      -- C60
   -- Overig:
   v_ins_controle_datum_d          DATE;                               -- DATE

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

   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_errormsg := 'Fout bij opvragen importregel';
         v_aanduiding := '';
         v_ongeldig := 0;
         -- Lees alle veldwaarden
         fac.imp_getfield (v_newline, c_delim, v_alg_locatie_code);
         fac.imp_getfield (v_newline, c_delim, x_alg_ruimte_nr);
         fac.imp_getfield (v_newline, c_delim, x_ins_discipline_omschrijving);
         fac.imp_getfield (v_newline, c_delim, x_ins_srtdeel_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_ins_deel_omschrijving);
         fac.imp_getfield (v_newline, c_delim, x_merk);
         fac.imp_getfield (v_newline, c_delim, x_categorie);
         fac.imp_getfield (v_newline, c_delim, v_cnt_contract_nummer_intern);
         fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_naam);
         fac.imp_getfield (v_newline, c_delim, v_ins_srtcontrole_oms);
         fac.imp_getfield (v_newline, c_delim, v_ins_controle_datum);
         fac.imp_getfield (v_newline, c_delim, v_ins_controle_opm);
         fac.imp_getfield (v_newline, c_delim, v_afgekeurd);

         v_aanduiding :=
               '['
            || x_ins_discipline_omschrijving
            || '|'
            || x_ins_srtdeel_omschrijving
            || '|'
            || v_ins_deel_omschrijving
            || '] ';

         -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
         -- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
         -- Ik negeer alles totdat ik een geldige header ben gepasseerd.
         IF (header_is_valid = 0)
         THEN
            IF     UPPER (v_alg_locatie_code) = 'LOCATIECODE'
               AND UPPER (x_alg_ruimte_nr) = 'RUIMTE'
               AND UPPER (x_ins_discipline_omschrijving) = 'DISCIPLINE'
               AND UPPER (x_ins_srtdeel_omschrijving) = 'OBJECTSOORT'
               AND UPPER (v_ins_deel_omschrijving) = 'OBJECT_ID'
               AND UPPER (x_merk) = 'MERK'
               AND UPPER (x_categorie) = 'KEURING_CATEGORIE'
               AND UPPER (v_prs_bedrijf_naam) = 'LEVERANCIER'
               AND UPPER (v_cnt_contract_nummer_intern) = 'CONTRACT_NR' -- Per CONN#22359!
               AND UPPER (v_ins_srtcontrole_oms) = 'SOORTCONTROLE'
               AND UPPER (v_ins_controle_datum) = 'CONTROLEDATUM'
               AND UPPER (v_ins_controle_opm) = 'CONTROLEOPMERKING'
               AND UPPER (v_afgekeurd) = 'AFGEKEURD'
            THEN
               header_is_valid := 1;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            -- Controleer alle veldwaarden
            v_errormsg := 'Locatiecode ongeldig';
            v_alg_locatie_code := TRIM (v_alg_locatie_code);

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

            -- Skip 'Ruimte'
            -- Skip 'Discipline'
            -- Skip 'Objectsoort'

            --
            v_errormsg := 'Objectomschrijving ongeldig';
            v_ins_deel_omschrijving := TRIM (v_ins_deel_omschrijving);

            IF LENGTH (v_ins_deel_omschrijving) > 60
            THEN
               v_ins_deel_omschrijving :=
                  SUBSTR (TRIM (v_ins_deel_omschrijving), 1, 60);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Objectomschrijving wordt afgebroken tot ['
                  || v_ins_deel_omschrijving
                  || ']'
               );
            END IF;

            -- Skip 'Merk'
            -- Skip 'Categorie'

            --
            v_errormsg := 'Contractnummer ongeldig';
            v_cnt_contract_nummer_intern :=
               TRIM (v_cnt_contract_nummer_intern);

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

            --
            v_errormsg := 'Leverancier ongeldig';
            v_prs_bedrijf_naam := TRIM (v_prs_bedrijf_naam);

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

            --
            v_errormsg := 'Soort controle ongeldig';
            v_ins_srtcontrole_oms := TRIM (v_ins_srtcontrole_oms);

            IF LENGTH (v_ins_srtcontrole_oms) > 60
            THEN
               v_ins_srtcontrole_oms := SUBSTR (v_ins_srtcontrole_oms, 1, 60);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Soort controle wordt afgebroken tot ['
                  || v_ins_srtcontrole_oms
                  || ']'
               );
            END IF;

            --
            v_errormsg := 'Controledatum ongeldig';
            v_ins_controle_datum := TRIM (v_ins_controle_datum);
            v_ins_controle_datum_d := NULL;

            IF (v_ins_controle_datum IS NOT NULL)
            THEN
               IF (fac.safe_to_date (v_ins_controle_datum, 'dd-mm-yyyy') IS NULL)
               THEN
                  fac.imp_writelog (p_import_key,
                                    'W',
                                    v_aanduiding || v_errormsg,
                                    'Controledatum wordt genegeerd');
               ELSE
                  v_ins_controle_datum_d :=
                     fac.safe_to_date (v_ins_controle_datum, 'dd-mm-yyyy');
               END IF;
            END IF;

            --
            v_errormsg := 'Controleopmerking ongeldig';
            v_ins_controle_opm := TRIM (v_ins_controle_opm);

            IF LENGTH (v_ins_controle_opm) > 500
            THEN
               v_ins_controle_opm := SUBSTR (v_ins_controle_opm, 1, 500);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                  'Controleopmerking wordt afgekapt op 500 posities'
               );
            END IF;

            --
            v_errormsg := 'Afgekeurd ongeldig';
            v_afgekeurd := TRIM (v_afgekeurd);

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

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

                  INSERT INTO conn_imp_keurobjecten (
                                                        alg_locatie_code,
                                                        ins_deel_omschrijving,
                                                        cnt_contract_nummer_intern,
                                                        prs_bedrijf_naam,
                                                        ins_srtcontrole_omschrijving,
                                                        ins_deelsrtcontrole_datum,
                                                        ins_deelsrtcontrole_opmerking,
                                                        afgekeurd
                             )
                    VALUES   (v_alg_locatie_code,
                              v_ins_deel_omschrijving,
                              v_cnt_contract_nummer_intern,
                              v_prs_bedrijf_naam,
                              v_ins_srtcontrole_oms,
                              v_ins_controle_datum_d,
                              v_ins_controle_opm,
                              v_afgekeurd);

                  COMMIT;
                  v_count_import := v_count_import + 1;
               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 IF;
         END IF;
      END;
   END LOOP;

   IF (header_is_valid = 0)
   THEN
      fac.imp_writelog (p_import_key,
                        'E',
                        'Ongeldig importbestand',
                        'Geen header of header niet volgens specificatie!');
   ELSE
      fac.imp_writelog (
         p_import_key,
         'S',
         'keurobjecten/aantal ingelezen importregels: '
         || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'keurobjecten/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 keurobjecten afgebroken!');
END conn_import_keurobjecten;
/

/* Formatted on 14-3-2012 17:24:48 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE conn_update_keurobjecten (p_import_key IN NUMBER)
AS
   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);

   -- SUBPROC
   PROCEDURE add_deelinspectie (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
         SELECT   obj.ins_deel_omschrijving,
                  obj.alg_locatie_code,
                  obj.cnt_contract_nummer_intern,
                  obj.ins_srtcontrole_omschrijving,
                  obj.ins_deelsrtcontrole_datum,
                  DECODE (
                     COALESCE (cb.prs_bedrijf_naam, obj.prs_bedrijf_naam),
                     NULL,
                     obj.ins_deelsrtcontrole_opmerking,
                        COALESCE (cb.prs_bedrijf_naam, obj.prs_bedrijf_naam)
                     || ':'
                     || CHR (13)
                     || CHR (10)
                     || COALESCE (obj.ins_deelsrtcontrole_opmerking, '-')
                  )
                     ins_deelsrtcontrole_opmerking,
                  DECODE (UPPER (obj.afgekeurd), 'JA', 129, 'NEE', 130, -1)
                     afgekeurd
           FROM      (SELECT   ins_deel_omschrijving,
                               alg_locatie_code,
                               cnt_contract_nummer_intern,  -- Per CONN#22359!
                               prs_bedrijf_naam,
                               ins_srtcontrole_omschrijving,
                               ins_deelsrtcontrole_datum,
                               ins_deelsrtcontrole_opmerking,
                               afgekeurd
                        FROM   conn_imp_keurobjecten) obj
                  LEFT JOIN
                     (SELECT   c.cnt_contract_nummer_intern,
                               b.prs_bedrijf_naam,
                               c.cnt_contract_key
                        FROM   cnt_contract c,
                               ins_tab_discipline td,
                               cnt_disc_params dp,
                               prs_bedrijf b
                       WHERE   c.cnt_contract_verwijder IS NULL
                               AND c.ins_discipline_key =
                                     td.ins_discipline_key
                               AND td.ins_discipline_verwijder IS NULL
                               AND td.ins_discipline_key =
                                     dp.cnt_ins_discipline_key
                               AND dp.cnt_srtcontract_type = 3 -- Ondersteuning/Support
                               AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key)
                     cb
                  ON obj.cnt_contract_nummer_intern =
                        cb.cnt_contract_nummer_intern;

      v_errormsg           VARCHAR2 (1024);
      c_afgekeurd_srtkey   NUMBER (10) := 1466;
      v_locatie_key        NUMBER (10);
      v_deel_key           NUMBER (10);
      v_srtdeel_key        NUMBER (10);
      v_srtdeel_oms        VARCHAR2 (100);
      v_srtgroep_key       NUMBER (10);
      v_discipline_key     NUMBER (10);
      v_kenmerk_key        NUMBER (10);
      v_kenmerkdeel_key    NUMBER (10);
      v_srtcontrole_id     VARCHAR2 (20);
      v_controlemode_key   NUMBER (10);
      ccount               NUMBER (10);
      oracle_err_num       NUMBER;
      oracle_err_mes       VARCHAR2 (200);
      v_count_tot          NUMBER (10);
      v_count_cupdate      NUMBER (10);
      v_aanduiding         VARCHAR (200);
   BEGIN
      v_count_tot := 0;
      v_count_cupdate := 0;
      v_aanduiding := '';

      FOR rec IN c1
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_aanduiding :=
                  '['
               || rec.alg_locatie_code
               || '|'
               || rec.ins_deel_omschrijving
               || '|'
               || rec.cnt_contract_nummer_intern
               || '|'
               || rec.ins_srtcontrole_omschrijving
               || '] ';
            v_errormsg :=
               'Fout bij bepalen locatie [' || rec.alg_locatie_code || ']';

            SELECT   alg_locatie_key
              INTO   v_locatie_key
              FROM   alg_locatie
             WHERE   alg_locatie_verwijder IS NULL
                     AND UPPER (TRIM (alg_locatie_code)) =
                           UPPER (TRIM (rec.alg_locatie_code));

            -- Ruimtegebonden objecten hebben een unieke ID binnen de locatie
            v_errormsg := 'Fout bij bepalen INS-object';

            SELECT   d.ins_deel_key,
                     sd.ins_srtdeel_key,
                     sd.ins_srtdeel_omschrijving,
                     sg.ins_srtgroep_key,
                     sg.ins_discipline_key
              INTO   v_deel_key,
                     v_srtdeel_key,
                     v_srtdeel_oms,
                     v_srtgroep_key,
                     v_discipline_key
              FROM   ins_deel d, ins_srtdeel sd, ins_srtgroep sg
             WHERE       d.ins_deel_verwijder IS NULL
                     AND d.ins_deel_module = 'INS'
                     AND d.ins_deel_upper = UPPER (rec.ins_deel_omschrijving)
                     AND d.ins_alg_locatie_key = v_locatie_key
                     AND d.ins_srtdeel_key = sd.ins_srtdeel_key
                     AND sd.ins_srtgroep_key = sg.ins_srtgroep_key;

            -- AFGEKEURD toevoegen of wijzigen!
            IF rec.afgekeurd IS NOT NULL AND UPPER (rec.afgekeurd) != -1
            THEN
               v_errormsg := 'Fout bij bepalen afgekeurd-kenmerk';

               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   ins_v_aanwezigkenmerk k
                WHERE   k.ins_srtkenmerk_key = c_afgekeurd_srtkey
                        AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                               AND k.ins_kenmerk_niveau = 'S')
                             OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                 AND k.ins_kenmerk_niveau = 'G')
                             OR (k.ins_srtinstallatie_key = v_discipline_key
                                 AND k.ins_kenmerk_niveau = 'D'));

               IF ccount = 0            -- Kenmerk bestaat niet; dan aanmaken!
               THEN
                  v_errormsg := 'Fout bij toevoegen afgekeurd-kenmerk';

                  INSERT INTO ins_kenmerk (ins_srtkenmerk_key,
                                           ins_srtinstallatie_key,
                                           ins_kenmerk_niveau,
                                           ins_kenmerk_volgnummer)
                     VALUES   (c_afgekeurd_srtkey,
                               v_srtdeel_key,
                               'S',
                               122)
                  RETURNING   ins_kenmerk_key      INTO   v_kenmerk_key;

                  fac.imp_writelog (
                     p_import_key,
                     'I',
                     'INS-Objecten/afgekeurd-kenmerk toegevoegd voor: '
                     || v_srtdeel_oms,
                     ''
                  );
                  COMMIT;
               ELSE
                  SELECT   k.ins_kenmerk_key
                    INTO   v_kenmerk_key
                    FROM   ins_v_aanwezigkenmerk k
                   WHERE   k.ins_srtkenmerk_key = c_afgekeurd_srtkey
                           AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                                  AND k.ins_kenmerk_niveau = 'S')
                                OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                    AND k.ins_kenmerk_niveau = 'G')
                                OR (k.ins_srtinstallatie_key =
                                       v_discipline_key
                                    AND k.ins_kenmerk_niveau = 'D'));
               END IF;

               v_errormsg := 'Fout bij bepalen huidige afgekeurd';

               SELECT   COUNT ( * ), MAX (ins_kenmerkdeel_key)
                 INTO   ccount, v_kenmerkdeel_key
                 FROM   ins_v_aanwezigkenmerkdeel
                WHERE   ins_deel_key = v_deel_key
                        AND ins_kenmerk_key = v_kenmerk_key;

               IF ccount = 0
               THEN
                  v_errormsg := 'Fout bij toevoegen afgekeurd';

                  INSERT INTO ins_kenmerkdeel (
                                                  ins_deel_key,
                                                  ins_kenmerk_key,
                                                  ins_kenmerkdeel_waarde
                             )
                    VALUES   (v_deel_key, v_kenmerk_key, rec.afgekeurd);

                  COMMIT;
               ELSE
                  v_errormsg := 'Fout bij wijzigen afgekeurd';

                  UPDATE   ins_kenmerkdeel
                     SET   ins_kenmerkdeel_waarde = rec.afgekeurd
                   WHERE   ins_kenmerkdeel_key = v_kenmerkdeel_key;

                  COMMIT;
               END IF;
            END IF;

            -- Toevoegen controle; gebruik [a] de meest specifieke soort en
            -- [b] de minst recente mode!
            v_errormsg := 'Fout bij bepalen soort controle';

            SELECT   MAX(sc.ins_srtcontrole_niveau
                         || TO_CHAR (sc.ins_srtcontrole_key))
              INTO   v_srtcontrole_id
              FROM   ins_srtcontrole sc
             WHERE   UPPER (TRIM (sc.ins_srtcontrole_omschrijving)) =
                        UPPER (TRIM (rec.ins_srtcontrole_omschrijving))
                     AND ( (sc.ins_srtinstallatie_key = v_srtdeel_key
                            AND sc.ins_srtcontrole_niveau = 'S')
                          OR (sc.ins_srtinstallatie_key = v_srtgroep_key
                              AND sc.ins_srtcontrole_niveau = 'G')
                          OR (sc.ins_srtinstallatie_key = v_discipline_key
                              AND sc.ins_srtcontrole_niveau = 'D'));

            IF rec.ins_deelsrtcontrole_datum IS NOT NULL
            THEN
               v_errormsg := 'Fout bij bepalen controle mode';

               SELECT   MIN (ins_controlemode_key)
                 INTO   v_controlemode_key
                 FROM   ins_controlemode;

               v_errormsg := 'Fout bij toevoegen controle';

               INSERT INTO ins_deelsrtcontrole (
                                                   ins_deel_key,
                                                   ins_srtcontrole_key,
                                                   ins_deelsrtcontrole_datum,
                                                   ins_controlemode_key,
                                                   ins_deelsrtcontrole_opmerking
                          )
                 VALUES   (v_deel_key,
                           fac.safe_to_number (SUBSTR (v_srtcontrole_id, 2)),
                           rec.ins_deelsrtcontrole_datum,
                           v_controlemode_key,
                           rec.ins_deelsrtcontrole_opmerking);

               COMMIT;

               v_count_cupdate := v_count_cupdate + 1;
            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;

      fac.imp_writelog (
         p_import_key,
         'S',
         'INS-Objecten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'INS-Controles/aantal toegevoegd: ' || TO_CHAR (v_count_cupdate),
         ''
      );
      COMMIT;
   END;
-- MAIN
BEGIN
   add_deelinspectie (p_import_key);
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_errormsg,
                        'Importproces keurobjecten afgebroken!');
END conn_update_keurobjecten;
/





/* Formatted on 9-7-2013 17:18:18 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW conn_v_locatiekenmerken
AS
SELECT   fac.safe_to_number (SUBSTR (x.kenmerk_id, 4)) alg_kenmerk_key,
         x.vnr,
         kw.alg_onrgoed_key,
         kw.waarde
  FROM      (  SELECT   SUBSTR ('000' || TO_CHAR (k1.alg_kenmerk_volgnr), -3)
                        || TO_CHAR (k1.alg_kenmerk_key)
                           kenmerk_id,
                        COUNT ( * ) vnr
                 FROM   (SELECT   *
                           FROM   alg_kenmerk
                          WHERE   alg_kenmerk_verwijder IS NULL
                                  AND alg_kenmerk_niveau = 'L'
                                  AND alg_kenmerk_kenmerktype IN
                                           ('C', 'D', 'N', 'R', 'S')) k1,
                        (SELECT   *
                           FROM   alg_kenmerk
                          WHERE   alg_kenmerk_verwijder IS NULL
                                  AND alg_kenmerk_niveau = 'L'
                                  AND alg_kenmerk_kenmerktype IN
                                           ('C', 'D', 'N', 'R', 'S')) k2
                WHERE   SUBSTR ('000' || TO_CHAR (k1.alg_kenmerk_volgnr), -3)
                        || TO_CHAR (k1.alg_kenmerk_key) >=
                           SUBSTR ('000' || TO_CHAR (k2.alg_kenmerk_volgnr),
                                   -3)
                           || TO_CHAR (k2.alg_kenmerk_key)
             GROUP BY   SUBSTR ('000' || TO_CHAR (k1.alg_kenmerk_volgnr), -3)
                        || TO_CHAR (k1.alg_kenmerk_key)) x
         LEFT JOIN
            (SELECT   ok.alg_onrgoed_key,
                      ok.alg_kenmerk_key,
                      DECODE (
                         k.alg_kenmerk_kenmerktype,
                         'R',
                         fac.getdomeinwaarde (k.fac_kenmerkdomein_key,
                                              ok.alg_onrgoedkenmerk_waarde),
                         'S',
                         fac.getdomeinwaarde (k.fac_kenmerkdomein_key,
                                              ok.alg_onrgoedkenmerk_waarde),
                         ok.alg_onrgoedkenmerk_waarde
                      )
                         waarde
               FROM   alg_kenmerk k, alg_v_aanwezigonrgoedkenmerk ok
              WHERE   k.alg_kenmerk_verwijder IS NULL
                      AND k.alg_kenmerk_niveau = 'L'
                      AND k.alg_kenmerk_kenmerktype IN
                               ('C', 'D', 'N', 'R', 'S')
                      AND k.alg_kenmerk_key = ok.alg_kenmerk_key) kw
         ON fac.safe_to_number (SUBSTR (x.kenmerk_id, 4)) =
               kw.alg_kenmerk_key;

/* Formatted on 11-7-2013 16:06:26 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW conn_v_rap_onrgoed1_expimp
(
   hide_f_result_order,
   fclt_f_regio_omschrijving,
   fclt_f_district_omschrijving,
   fclt_f_locatiecode,
   locatieomschrijving,
   fclt_f_gebouwcode,
   gebouwomschrijving,
   fclt_f_gebouwfunctie,
   contactpersoon,
   telefoonnummer,
   bezoekadres,
   postcode1,
   plaats1,
   land1,
   postadres,
   postcode2,
   plaats2,
   land2,
   kenmerk1,
   kenmerk2,
   kenmerk3,
   kenmerk4,
   kenmerk5,
   kenmerk6,
   kenmerk7,
   kenmerk8,
   kenmerk9,
   kenmerk10
)
AS
   SELECT   0,
            'regio_omschrijving' regio_omschrijving,
            'district_omschrijving' district_omschrijving,
            'locatie_code' locatiecode,
            'locatieomschrijving' locatieomschrijving,
            'gebouwcode' gebouwcode,
            'gebouwomschrijving' gebouwomschrijving,
            'gebouwfunctie' gebouwfunctie,
            'contactpersoon' contactpersoon,
            'telefoonnummer' telefoonnummer,
            'bezoekadres' bezoekadres,
            'postcode1' postcode1,
            'plaats1' plaats1,
            'land1' land1,
            'postadres' postadres,
            'postcode2' postcode2,
            'plaats2' plaats2,
            'land2' land2,
            TO_CHAR ( (SELECT   MAX (alg_kenmerk_key)
                         FROM   conn_v_locatiekenmerken
                        WHERE   vnr = 1))
               kenmerk1,
            TO_CHAR ( (SELECT   MAX (alg_kenmerk_key)
                         FROM   conn_v_locatiekenmerken
                        WHERE   vnr = 2))
               kenmerk2,
            TO_CHAR ( (SELECT   MAX (alg_kenmerk_key)
                         FROM   conn_v_locatiekenmerken
                        WHERE   vnr = 3))
               kenmerk3,
            TO_CHAR ( (SELECT   MAX (alg_kenmerk_key)
                         FROM   conn_v_locatiekenmerken
                        WHERE   vnr = 4))
               kenmerk4,
            TO_CHAR ( (SELECT   MAX (alg_kenmerk_key)
                         FROM   conn_v_locatiekenmerken
                        WHERE   vnr = 5))
               kenmerk5,
            TO_CHAR ( (SELECT   MAX (alg_kenmerk_key)
                         FROM   conn_v_locatiekenmerken
                        WHERE   vnr = 6))
               kenmerk6,
            TO_CHAR ( (SELECT   MAX (alg_kenmerk_key)
                         FROM   conn_v_locatiekenmerken
                        WHERE   vnr = 7))
               kenmerk7,
            TO_CHAR ( (SELECT   MAX (alg_kenmerk_key)
                         FROM   conn_v_locatiekenmerken
                        WHERE   vnr = 8))
               kenmerk8,
            TO_CHAR ( (SELECT   MAX (alg_kenmerk_key)
                         FROM   conn_v_locatiekenmerken
                        WHERE   vnr = 9))
               kenmerk9,
            TO_CHAR ( (SELECT   MAX (alg_kenmerk_key)
                         FROM   conn_v_locatiekenmerken
                        WHERE   vnr = 10))
               kenmerk10
     FROM   DUAL
   UNION ALL
   SELECT   1,
            x.alg_regio_omschrijving regio_omschrijving,
            x.alg_district_omschrijving district_omschrijving,
            x.alg_locatie_code locatiecode,
            x.alg_locatie_omschrijving locatieomschrijving,
            x.alg_gebouw_code gebouwcode,
            x.alg_gebouw_naam gebouwomschrijving,
            x.alg_srtgebouw_omschrijving gebouwfunctie,
            x.alg_locatie_verantw contactpersoon,
            x.alg_locatie_verantw_tel telefoonnummer,
            x.alg_locatie_adres bezoekadres,
            x.alg_locatie_postcode postcode1,
            x.alg_locatie_plaats plaats1,
            x.alg_locatie_land land1,
            x.alg_locatie_post_adres postadres,
            x.alg_locatie_post_postcode postcode2,
            x.alg_locatie_post_plaats plaats2,
            x.alg_locatie_post_land land2,
            k1.waarde kenmerk1,
            k2.waarde kenmerk2,
            k3.waarde kenmerk3,
            k4.waarde kenmerk4,
            k5.waarde kenmerk5,
            k6.waarde kenmerk6,
            k7.waarde kenmerk7,
            k8.waarde kenmerk8,
            k9.waarde kenmerk9,
            k10.waarde kenmerk10
     FROM                                 (SELECT   l.alg_locatie_key,
                                                    r.alg_regio_omschrijving,
                                                    d.alg_district_omschrijving,
                                                    l.alg_locatie_code,
                                                    l.alg_locatie_omschrijving,
                                                    g.alg_gebouw_code,
                                                    g.alg_gebouw_naam,
                                                    sg.alg_srtgebouw_omschrijving,
                                                    l.alg_locatie_verantw,
                                                    l.alg_locatie_verantw_tel,
                                                    l.alg_locatie_adres,
                                                    l.alg_locatie_postcode,
                                                    l.alg_locatie_plaats,
                                                    l.alg_locatie_land,
                                                    l.alg_locatie_post_adres,
                                                    l.alg_locatie_post_postcode,
                                                    l.alg_locatie_post_plaats,
                                                    l.alg_locatie_post_land
                                             FROM   alg_v_aanwezigregio r,
                                                    alg_v_aanwezigdistrict d,
                                                    alg_v_aanweziglocatie l,
                                                    alg_v_aanweziggebouw g,
                                                    alg_v_aanwezigsrtgebouw sg
                                            WHERE   r.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_srtgebouw_key =
                                                          sg.alg_srtgebouw_key(+))
                                          x
                                       LEFT JOIN
                                          conn_v_locatiekenmerken k1
                                       ON x.alg_locatie_key =
                                             k1.alg_onrgoed_key
                                          AND k1.vnr = 1
                                    LEFT JOIN
                                       conn_v_locatiekenmerken k2
                                    ON x.alg_locatie_key = k2.alg_onrgoed_key
                                       AND k2.vnr = 2
                                 LEFT JOIN
                                    conn_v_locatiekenmerken k3
                                 ON x.alg_locatie_key = k3.alg_onrgoed_key
                                    AND k3.vnr = 3
                              LEFT JOIN
                                 conn_v_locatiekenmerken k4
                              ON x.alg_locatie_key = k4.alg_onrgoed_key
                                 AND k4.vnr = 4
                           LEFT JOIN
                              conn_v_locatiekenmerken k5
                           ON x.alg_locatie_key = k5.alg_onrgoed_key
                              AND k5.vnr = 5
                        LEFT JOIN
                           conn_v_locatiekenmerken k6
                        ON x.alg_locatie_key = k6.alg_onrgoed_key
                           AND k6.vnr = 6
                     LEFT JOIN
                        conn_v_locatiekenmerken k7
                     ON x.alg_locatie_key = k7.alg_onrgoed_key AND k7.vnr = 7
                  LEFT JOIN
                     conn_v_locatiekenmerken k8
                  ON x.alg_locatie_key = k8.alg_onrgoed_key AND k8.vnr = 8
               LEFT JOIN
                  conn_v_locatiekenmerken k9
               ON x.alg_locatie_key = k9.alg_onrgoed_key AND k9.vnr = 9
            LEFT JOIN
               conn_v_locatiekenmerken k10
            ON x.alg_locatie_key = k10.alg_onrgoed_key AND k10.vnr = 10;

/* Formatted on 9-7-2013 10:22:36 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE conn_import_onrgoed1 (p_import_key IN NUMBER)
AS
   c_delim                    VARCHAR2 (1) := ';';
   v_newline                  VARCHAR2 (1000);                   -- Input line
   v_errormsg                 VARCHAR2 (1000);
   oracle_err_num             NUMBER;
   oracle_err_mes             VARCHAR2 (200);
   header_is_valid            NUMBER;
   v_count_tot                NUMBER (10);
   v_count_imp                NUMBER (10);
   v_ongeldig                 NUMBER (1);
   v_aanduiding               VARCHAR2 (200);
   v_alg_kenmerk_key1         VARCHAR2 (255);
   v_alg_kenmerk_key2         VARCHAR2 (255);
   v_alg_kenmerk_key3         VARCHAR2 (255);
   v_alg_kenmerk_key4         VARCHAR2 (255);
   v_alg_kenmerk_key5         VARCHAR2 (255);
   v_alg_kenmerk_key6         VARCHAR2 (255);
   v_alg_kenmerk_key7         VARCHAR2 (255);
   v_alg_kenmerk_key8         VARCHAR2 (255);
   v_alg_kenmerk_key9         VARCHAR2 (255);
   v_alg_kenmerk_key10        VARCHAR2 (255);
   -- De importvelden:
   v_regio_omschrijving       VARCHAR2 (255);                            -- 30
   v_district_omschrijving    VARCHAR2 (255);                            -- 30
   v_locatie_code             VARCHAR2 (255);                            -- 10
   v_locatie_omschrijving     VARCHAR2 (255);                            -- 30
   v_gebouw_code              VARCHAR2 (255);                            -- 10
   v_gebouw_naam              VARCHAR2 (255);                            -- 30
   v_srtgebouw_omschrijving   VARCHAR2 (255);                            -- 30
   v_locatie_verantw          VARCHAR2 (255);                            -- 30
   v_locatie_verantw_tel      VARCHAR2 (255);                            -- 15
   v_locatie_adres            VARCHAR2 (255);                            -- 35
   v_locatie_postcode         VARCHAR2 (255);                            -- 12
   v_locatie_plaats           VARCHAR2 (255);                            -- 30
   v_locatie_land             VARCHAR2 (255);                            -- 30
   v_locatie_post_adres       VARCHAR2 (255);                            -- 35
   v_locatie_post_postcode    VARCHAR2 (255);                            -- 12
   v_locatie_post_plaats      VARCHAR2 (255);                            -- 30
   v_locatie_post_land        VARCHAR2 (255);                            -- 30
   v_alg_kenmerkwaarde1       VARCHAR2 (255);
   v_alg_kenmerkwaarde2       VARCHAR2 (255);
   v_alg_kenmerkwaarde3       VARCHAR2 (255);
   v_alg_kenmerkwaarde4       VARCHAR2 (255);
   v_alg_kenmerkwaarde5       VARCHAR2 (255);
   v_alg_kenmerkwaarde6       VARCHAR2 (255);
   v_alg_kenmerkwaarde7       VARCHAR2 (255);
   v_alg_kenmerkwaarde8       VARCHAR2 (255);
   v_alg_kenmerkwaarde9       VARCHAR2 (255);
   v_alg_kenmerkwaarde10      VARCHAR2 (255);

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

   -- Controleer tijdens import-fase alleen op (uniek) bestaan van kenmerk (of
   -- deze is gedefinieerd voor gebouw/locatie, volgt tijdens de update-fase)!
   FUNCTION bepaal_kenmerk_key (ok IN VARCHAR)
      RETURN NUMBER
   IS
      v_kenmerk_key   NUMBER;
   BEGIN
      IF fac.safe_to_number (ok) IS NULL
      THEN                -- Kenmerkwaarde is alfanumeriek (dus omschrijving)!
         SELECT   alg_kenmerk_key
           INTO   v_kenmerk_key
           FROM   alg_kenmerk
          WHERE       alg_kenmerk_verwijder IS NULL
                  AND alg_kenmerk_niveau IN ('L', 'G')
                  AND alg_kenmerk_upper = UPPER (ok)
                  AND alg_kenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S');
      ELSE                             -- Kenmerkwaarde is numeriek (dus key)!
         SELECT   alg_kenmerk_key
           INTO   v_kenmerk_key
           FROM   alg_kenmerk
          WHERE       alg_kenmerk_verwijder IS NULL
                  AND alg_kenmerk_niveau IN ('L', 'G')
                  AND alg_kenmerk_key = fac.safe_to_number (ok)
                  AND alg_kenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S');
      END IF;

      RETURN v_kenmerk_key;
   EXCEPTION
      WHEN NO_DATA_FOUND
      THEN
         IF ok IS NULL OR UPPER (ok) LIKE 'KENMERK%'
         THEN
            RETURN NULL;
         ELSE
            fac.imp_writelog (p_import_key,
                              'W',
                              'Fout bij bepalen kenmerk [' || ok || ']',
                              'Bestaat niet of type ongeldig');
            COMMIT;
            RETURN NULL;
         END IF;
      WHEN OTHERS
      THEN
         fac.imp_writelog (p_import_key,
                           'W',
                           'Fout bij bepalen kenmerk [' || ok || ']',
                           'Kan kenmerk niet 1-duidig bepalen');
         COMMIT;
         RETURN NULL;
   END;
BEGIN
   -- Eerst opruiming
   DELETE FROM   conn_imp_onrgoed1;

   COMMIT;

   v_count_tot := 0;
   v_count_imp := 0;
   header_is_valid := 0;

   FOR rec1 IN c1
   LOOP
      BEGIN
         v_errormsg := 'Fout FETCH importregel';

         v_newline := rec1.fac_imp_file_line;
         v_errormsg := 'Fout bij opvragen importregel';
         v_aanduiding := '';
         v_ongeldig := 0;
         -- Lees alle veldwaarden
         fac.imp_getfield (v_newline, c_delim, v_regio_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_district_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_locatie_code);
         fac.imp_getfield (v_newline, c_delim, v_locatie_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_gebouw_code);
         fac.imp_getfield (v_newline, c_delim, v_gebouw_naam);
         fac.imp_getfield (v_newline, c_delim, v_srtgebouw_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_locatie_verantw);
         fac.imp_getfield (v_newline, c_delim, v_locatie_verantw_tel);
         fac.imp_getfield (v_newline, c_delim, v_locatie_adres);
         fac.imp_getfield (v_newline, c_delim, v_locatie_postcode);
         fac.imp_getfield (v_newline, c_delim, v_locatie_plaats);
         fac.imp_getfield (v_newline, c_delim, v_locatie_land);
         fac.imp_getfield (v_newline, c_delim, v_locatie_post_adres);
         fac.imp_getfield (v_newline, c_delim, v_locatie_post_postcode);
         fac.imp_getfield (v_newline, c_delim, v_locatie_post_plaats);
         fac.imp_getfield (v_newline, c_delim, v_locatie_post_land);
         fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde1);
         fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde2);
         fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde3);
         fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde4);
         fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde5);
         fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde6);
         fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde7);
         fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde8);
         fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde9);
         fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde10);

         v_aanduiding := '[' || v_locatie_code || '|' || v_gebouw_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_regio_omschrijving) LIKE 'REGIO%'
               AND UPPER (v_district_omschrijving) LIKE 'DISTRICT%'
               AND UPPER (v_locatie_code) = 'LOCATIECODE'
               AND UPPER (v_gebouw_code) = 'GEBOUWCODE'
               AND UPPER (v_locatie_adres) = 'BEZOEKADRES'
               AND UPPER (v_locatie_post_adres) = 'POSTADRES'
               AND UPPER (v_locatie_post_land) LIKE 'LAND%'
            THEN
               v_alg_kenmerk_key1 := bepaal_kenmerk_key (v_alg_kenmerkwaarde1);
               v_alg_kenmerk_key2 := bepaal_kenmerk_key (v_alg_kenmerkwaarde2);
               v_alg_kenmerk_key3 := bepaal_kenmerk_key (v_alg_kenmerkwaarde3);
               v_alg_kenmerk_key4 := bepaal_kenmerk_key (v_alg_kenmerkwaarde4);
               v_alg_kenmerk_key5 := bepaal_kenmerk_key (v_alg_kenmerkwaarde5);
               v_alg_kenmerk_key6 := bepaal_kenmerk_key (v_alg_kenmerkwaarde6);
               v_alg_kenmerk_key7 := bepaal_kenmerk_key (v_alg_kenmerkwaarde7);
               v_alg_kenmerk_key8 := bepaal_kenmerk_key (v_alg_kenmerkwaarde8);
               v_alg_kenmerk_key9 := bepaal_kenmerk_key (v_alg_kenmerkwaarde9);
               v_alg_kenmerk_key10 :=
                  bepaal_kenmerk_key (v_alg_kenmerkwaarde10);

               header_is_valid := 1;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;

            -- Controleer alle veldwaarden
            v_errormsg := 'Regio-omschrijving leeg of te lang';
            v_regio_omschrijving := TRIM (v_regio_omschrijving);

            IF v_regio_omschrijving IS NULL
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errormsg,
                                 'Regel overgeslagen');
            ELSIF LENGTH (v_regio_omschrijving) > 30
            THEN
               v_regio_omschrijving := SUBSTR (v_regio_omschrijving, 1, 30);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Regio-omschrijving afgebroken tot ['
                  || v_regio_omschrijving
                  || ']'
               );
            END IF;

            --
            v_errormsg := 'District-omschrijving leeg of te lang';
            v_district_omschrijving := TRIM (v_district_omschrijving);

            IF v_district_omschrijving IS NULL
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errormsg,
                                 'Regel overgeslagen');
            ELSIF LENGTH (v_district_omschrijving) > 30
            THEN
               v_district_omschrijving :=
                  SUBSTR (v_district_omschrijving, 1, 30);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'District-omschrijving afgebroken tot ['
                  || v_district_omschrijving
                  || ']'
               );
            END IF;

            --
            v_errormsg := 'Locatiecode leeg of te lang';
            v_locatie_code := TRIM (v_locatie_code);

            IF v_locatie_code IS NULL OR LENGTH (v_locatie_code) > 10
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errormsg,
                                 'Regel overgeslagen');
            END IF;

            --
            v_errormsg := 'Locatie-omschrijving leeg of te lang';
            v_locatie_omschrijving := TRIM (v_locatie_omschrijving);

            IF v_locatie_omschrijving IS NULL
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errormsg,
                                 'Regel overgeslagen');
            ELSIF LENGTH (v_locatie_omschrijving) > 30
            THEN
               v_locatie_omschrijving :=
                  SUBSTR (v_locatie_omschrijving, 1, 30);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Locatie-omschrijving afgebroken tot ['
                  || v_locatie_omschrijving
                  || ']'
               );
            END IF;

            --
            v_errormsg := 'Gebouwcode leeg of te lang';
            v_gebouw_code := TRIM (v_gebouw_code);

            IF v_gebouw_code IS NULL OR LENGTH (v_gebouw_code) > 12
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errormsg,
                                 'Regel overgeslagen');
            END IF;

            --
            v_errormsg := 'Gebouwnaam leeg of te lang';
            v_gebouw_naam := TRIM (v_gebouw_naam);

            IF v_gebouw_naam IS NULL
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errormsg,
                                 'Regel overgeslagen');
            ELSIF LENGTH (v_gebouw_naam) > 30
            THEN
               v_gebouw_naam := SUBSTR (v_gebouw_naam, 1, 30);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                  'Gebouwnaam afgebroken tot [' || v_gebouw_naam || ']'
               );
            END IF;

            --
            v_errormsg := 'Gebouwfunctie te lang';
            v_srtgebouw_omschrijving := TRIM (v_srtgebouw_omschrijving);

            IF LENGTH (v_srtgebouw_omschrijving) > 30
            THEN
               v_srtgebouw_omschrijving :=
                  SUBSTR (v_srtgebouw_omschrijving, 1, 30);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Gebouwfunctie afgebroken tot ['
                  || v_srtgebouw_omschrijving
                  || ']'
               );
            END IF;

            --
            v_errormsg := 'Naam te lang (contactpersoon)';
            v_locatie_verantw := TRIM (v_locatie_verantw);

            IF LENGTH (v_locatie_verantw) > 30
            THEN
               v_locatie_verantw := SUBSTR (v_locatie_verantw, 1, 30);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                  'Naam afgebroken tot [' || v_locatie_verantw || ']'
               );
            END IF;

            --
            v_errormsg := 'Telefoonnummer te lang (contactpersoon)';
            v_locatie_verantw_tel := TRIM (v_locatie_verantw_tel);

            IF LENGTH (v_locatie_verantw_tel) > 15
            THEN
               v_locatie_verantw_tel := SUBSTR (v_locatie_verantw_tel, 1, 15);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Telefoonnummer afgebroken tot ['
                  || v_locatie_verantw_tel
                  || ']'
               );
            END IF;

            --
            v_errormsg := 'Adres te lang (bezoekadres)';
            v_locatie_adres := TRIM (v_locatie_adres);

            IF LENGTH (v_locatie_adres) > 35
            THEN
               v_locatie_adres := SUBSTR (v_locatie_adres, 1, 35);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                  'Adres afgebroken tot ]' || v_locatie_adres || ']'
               );
            END IF;

            --
            v_errormsg := 'Postcode te lang (bezoekadres)';
            v_locatie_postcode := TRIM (v_locatie_postcode);

            IF LENGTH (v_locatie_postcode) > 12
            THEN
               v_locatie_postcode := SUBSTR (v_locatie_postcode, 1, 12);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                  'Postcode afgebroken tot [' || v_locatie_postcode || ']'
               );
            END IF;

            --
            v_errormsg := 'Plaatsnaam te lang (bezoekadres)';
            v_locatie_plaats := TRIM (v_locatie_plaats);

            IF LENGTH (v_locatie_plaats) > 30
            THEN
               v_locatie_plaats := SUBSTR (v_locatie_plaats, 1, 30);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                  'Plaatsnaam afgebroken tot [' || v_locatie_plaats || ']'
               );
            END IF;

            --
            v_errormsg := 'Landnaam te lang (bezoekadres)';
            v_locatie_land := TRIM (v_locatie_land);

            IF LENGTH (v_locatie_land) > 30
            THEN
               v_locatie_land := SUBSTR (v_locatie_land, 1, 30);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                  'Landnaam afgebroken tot [' || v_locatie_land || ']'
               );
            END IF;

            --
            v_errormsg := 'Adres te lang (postadres)';
            v_locatie_post_adres := TRIM (v_locatie_post_adres);

            IF LENGTH (v_locatie_post_adres) > 35
            THEN
               v_locatie_post_adres := SUBSTR (v_locatie_post_adres, 1, 35);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                  'Adres afgebroken tot [' || v_locatie_post_adres || ']'
               );
            END IF;

            --
            v_errormsg := 'Postcode te lang (postadres)';
            v_locatie_post_postcode := TRIM (v_locatie_post_postcode);

            IF LENGTH (v_locatie_post_postcode) > 12
            THEN
               v_locatie_post_postcode :=
                  SUBSTR (v_locatie_post_postcode, 1, 12);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Postcode afgebroken tot ['
                  || v_locatie_post_postcode
                  || ']'
               );
            END IF;

            --
            v_errormsg := 'Plaatsnaam te lang (postadres)';
            v_locatie_post_plaats := TRIM (v_locatie_post_plaats);

            IF LENGTH (v_locatie_post_plaats) > 30
            THEN
               v_locatie_post_plaats := SUBSTR (v_locatie_post_plaats, 1, 30);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Plaatsnaam afgebroken tot ['
                  || v_locatie_post_plaats
                  || ']'
               );
            END IF;

            --
            v_errormsg := 'Landnaam te lang (postadres)';
            v_locatie_post_land := TRIM (v_locatie_post_land);

            IF LENGTH (v_locatie_post_land) > 30
            THEN
               v_locatie_post_land := SUBSTR (v_locatie_post_land, 1, 30);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                  'Landnaam afgebroken tot [' || v_locatie_post_land || ']'
               );
            END IF;

            -- De rest alleen ff trimmen.
            v_alg_kenmerkwaarde1 := TRIM (v_alg_kenmerkwaarde1);
            v_alg_kenmerkwaarde2 := TRIM (v_alg_kenmerkwaarde2);
            v_alg_kenmerkwaarde3 := TRIM (v_alg_kenmerkwaarde3);
            v_alg_kenmerkwaarde4 := TRIM (v_alg_kenmerkwaarde4);
            v_alg_kenmerkwaarde5 := TRIM (v_alg_kenmerkwaarde5);
            v_alg_kenmerkwaarde6 := TRIM (v_alg_kenmerkwaarde6);
            v_alg_kenmerkwaarde7 := TRIM (v_alg_kenmerkwaarde7);
            v_alg_kenmerkwaarde8 := TRIM (v_alg_kenmerkwaarde8);
            v_alg_kenmerkwaarde9 := TRIM (v_alg_kenmerkwaarde9);
            v_alg_kenmerkwaarde10 := TRIM (v_alg_kenmerkwaarde10);

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

                  INSERT INTO conn_imp_onrgoed1 (
                                                    alg_regio_omschrijving,
                                                    alg_district_omschrijving,
                                                    alg_locatie_code,
                                                    alg_locatie_omschrijving,
                                                    alg_gebouw_code,
                                                    alg_gebouw_naam,
                                                    alg_srtgebouw_omschrijving,
                                                    alg_locatie_verantw,
                                                    alg_locatie_verantw_tel,
                                                    alg_locatie_adres,
                                                    alg_locatie_postcode,
                                                    alg_locatie_plaats,
                                                    alg_locatie_land,
                                                    alg_locatie_post_adres,
                                                    alg_locatie_post_postcode,
                                                    alg_locatie_post_plaats,
                                                    alg_locatie_post_land,
                                                    alg_kenmerkwaarde1,
                                                    alg_kenmerkwaarde2,
                                                    alg_kenmerkwaarde3,
                                                    alg_kenmerkwaarde4,
                                                    alg_kenmerkwaarde5,
                                                    alg_kenmerkwaarde6,
                                                    alg_kenmerkwaarde7,
                                                    alg_kenmerkwaarde8,
                                                    alg_kenmerkwaarde9,
                                                    alg_kenmerkwaarde10
                             )
                    VALUES   (
                                 v_regio_omschrijving,
                                 v_district_omschrijving,
                                 v_locatie_code,
                                 v_locatie_omschrijving,
                                 v_gebouw_code,
                                 v_gebouw_naam,
                                 v_srtgebouw_omschrijving,
                                 v_locatie_verantw,
                                 v_locatie_verantw_tel,
                                 v_locatie_adres,
                                 v_locatie_postcode,
                                 v_locatie_plaats,
                                 v_locatie_land,
                                 v_locatie_post_adres,
                                 v_locatie_post_postcode,
                                 v_locatie_post_plaats,
                                 v_locatie_post_land,
                                 DECODE (
                                    v_alg_kenmerk_key1,
                                    NULL,
                                    v_alg_kenmerkwaarde1,
                                       TO_CHAR (v_alg_kenmerk_key1)
                                    || '='
                                    || SUBSTR (v_alg_kenmerkwaarde1, 1, 200)
                                 ),
                                 DECODE (
                                    v_alg_kenmerk_key2,
                                    NULL,
                                    v_alg_kenmerkwaarde2,
                                       TO_CHAR (v_alg_kenmerk_key2)
                                    || '='
                                    || SUBSTR (v_alg_kenmerkwaarde2, 1, 200)
                                 ),
                                 DECODE (
                                    v_alg_kenmerk_key3,
                                    NULL,
                                    v_alg_kenmerkwaarde3,
                                       TO_CHAR (v_alg_kenmerk_key3)
                                    || '='
                                    || SUBSTR (v_alg_kenmerkwaarde3, 1, 200)
                                 ),
                                 DECODE (
                                    v_alg_kenmerk_key4,
                                    NULL,
                                    v_alg_kenmerkwaarde4,
                                       TO_CHAR (v_alg_kenmerk_key4)
                                    || '='
                                    || SUBSTR (v_alg_kenmerkwaarde4, 1, 200)
                                 ),
                                 DECODE (
                                    v_alg_kenmerk_key5,
                                    NULL,
                                    v_alg_kenmerkwaarde5,
                                       TO_CHAR (v_alg_kenmerk_key5)
                                    || '='
                                    || SUBSTR (v_alg_kenmerkwaarde5, 1, 200)
                                 ),
                                 DECODE (
                                    v_alg_kenmerk_key6,
                                    NULL,
                                    v_alg_kenmerkwaarde6,
                                       TO_CHAR (v_alg_kenmerk_key6)
                                    || '='
                                    || SUBSTR (v_alg_kenmerkwaarde6, 1, 200)
                                 ),
                                 DECODE (
                                    v_alg_kenmerk_key7,
                                    NULL,
                                    v_alg_kenmerkwaarde7,
                                       TO_CHAR (v_alg_kenmerk_key7)
                                    || '='
                                    || SUBSTR (v_alg_kenmerkwaarde7, 1, 200)
                                 ),
                                 DECODE (
                                    v_alg_kenmerk_key8,
                                    NULL,
                                    v_alg_kenmerkwaarde8,
                                       TO_CHAR (v_alg_kenmerk_key8)
                                    || '='
                                    || SUBSTR (v_alg_kenmerkwaarde8, 1, 200)
                                 ),
                                 DECODE (
                                    v_alg_kenmerk_key9,
                                    NULL,
                                    v_alg_kenmerkwaarde9,
                                       TO_CHAR (v_alg_kenmerk_key9)
                                    || '='
                                    || SUBSTR (v_alg_kenmerkwaarde9, 1, 200)
                                 ),
                                 DECODE (
                                    v_alg_kenmerk_key10,
                                    NULL,
                                    v_alg_kenmerkwaarde10,
                                       TO_CHAR (v_alg_kenmerk_key10)
                                    || '='
                                    || SUBSTR (v_alg_kenmerkwaarde10, 1, 200)
                                 )
                             );

                  COMMIT;
                  v_count_imp := v_count_imp + 1;
               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 IF;
         END IF;
      END;
   END LOOP;

   IF (header_is_valid = 0)
   THEN
      fac.imp_writelog (p_import_key,
                        'E',
                        'Ongeldig importbestand',
                        'Geen header of header niet volgens specificatie!');
   ELSE
      fac.imp_writelog (
         p_import_key,
         'S',
         'Locatie-Gebouw/#ingelezen regels: ' || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'Locatie-Gebouw/#ongeldige niet ingelezen importregels: '
         || TO_CHAR (v_count_tot - v_count_imp),
         ''
      );
   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 locaties/gebouwen afgebroken!');
END conn_import_onrgoed1;
/

/* Formatted on 9-7-2013 11:48:12 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE conn_update_onrgoed1 (p_import_key IN NUMBER)
IS
   v_errormsg        VARCHAR2 (1000) := '-';
   oracle_err_num    NUMBER;
   oracle_err_mes    VARCHAR2 (200);
   v_aanduiding      VARCHAR2 (200);
   v_count_tot       NUMBER (10);
   v_count_new       NUMBER (10);
   v_count_upd       NUMBER (10);
   v_count           NUMBER (10);
   v_regio_key       NUMBER (10);
   v_district_key    NUMBER (10);
   v_locatie_key     NUMBER (10);
   v_srtgebouw_key   NUMBER (10);
   v_gebouw_key      NUMBER (10);
   v_srtnoti_code    VARCHAR2 (6);

   CURSOR cRegio                                   -- Regioomschrijving uniek!
   IS
        SELECT   MIN (alg_regio_omschrijving) alg_regio_omschrijving
          FROM   conn_imp_onrgoed1
      GROUP BY   UPPER (alg_regio_omschrijving)
      ORDER BY   1;

   CURSOR cDistrict                -- Districtomschrijving uniek binnen regio!
   IS
        SELECT   MIN (alg_regio_omschrijving) alg_regio_omschrijving,
                 MIN (alg_district_omschrijving) alg_district_omschrijving
          FROM   conn_imp_onrgoed1
      GROUP BY   UPPER (alg_regio_omschrijving),
                 UPPER (alg_district_omschrijving)
      ORDER BY   1, 2;

   CURSOR cLocatie                   -- Locatiecode uniek (omschrijving niet)!
   IS
        SELECT   MIN (alg_regio_omschrijving) alg_regio_omschrijving,
                 MIN (alg_district_omschrijving) alg_district_omschrijving,
                 MIN (alg_locatie_code) alg_locatie_code,
                 MIN (alg_locatie_omschrijving) alg_locatie_omschrijving,
                 MIN (alg_locatie_verantw) alg_locatie_verantw,
                 MIN (alg_locatie_verantw_tel) alg_locatie_verantw_tel,
                 MIN (alg_locatie_adres) alg_locatie_adres,
                 MIN (alg_locatie_postcode) alg_locatie_postcode,
                 MIN (alg_locatie_plaats) alg_locatie_plaats,
                 MIN (alg_locatie_land) alg_locatie_land,
                 MIN (alg_locatie_post_adres) alg_locatie_post_adres,
                 MIN (alg_locatie_post_postcode) alg_locatie_post_postcode,
                 MIN (alg_locatie_post_plaats) alg_locatie_post_plaats,
                 MIN (alg_locatie_post_land) alg_locatie_post_land,
                 MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde1, 1, INSTR (alg_kenmerkwaarde1, '=') - 1))) kenmerk_key1,
                 MIN(SUBSTR (alg_kenmerkwaarde1, INSTR (alg_kenmerkwaarde1, '=') + 1)) waarde1,
                 MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde2, 1, INSTR (alg_kenmerkwaarde2, '=') - 1))) kenmerk_key2,
                 MIN(SUBSTR (alg_kenmerkwaarde2, INSTR (alg_kenmerkwaarde2, '=') + 1)) waarde2,
                 MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde3, 1, INSTR (alg_kenmerkwaarde3, '=') - 1))) kenmerk_key3,
                 MIN(SUBSTR (alg_kenmerkwaarde3, INSTR (alg_kenmerkwaarde3, '=') + 1)) waarde3,
                 MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde4, 1, INSTR (alg_kenmerkwaarde4, '=') - 1))) kenmerk_key4,
                 MIN(SUBSTR (alg_kenmerkwaarde4, INSTR (alg_kenmerkwaarde4, '=') + 1)) waarde4,
                 MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde5, 1, INSTR (alg_kenmerkwaarde5, '=') - 1))) kenmerk_key5,
                 MIN(SUBSTR (alg_kenmerkwaarde5, INSTR (alg_kenmerkwaarde5, '=') + 1)) waarde5,
                 MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde6, 1, INSTR (alg_kenmerkwaarde6, '=') - 1))) kenmerk_key6,
                 MIN(SUBSTR (alg_kenmerkwaarde6, INSTR (alg_kenmerkwaarde6, '=') + 1)) waarde6,
                 MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde7, 1, INSTR (alg_kenmerkwaarde7, '=') - 1))) kenmerk_key7,
                 MIN(SUBSTR (alg_kenmerkwaarde7, INSTR (alg_kenmerkwaarde7, '=') + 1)) waarde7,
                 MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde8, 1, INSTR (alg_kenmerkwaarde8, '=') - 1))) kenmerk_key8,
                 MIN(SUBSTR (alg_kenmerkwaarde8, INSTR (alg_kenmerkwaarde8, '=') + 1)) waarde8,
                 MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde9, 1, INSTR (alg_kenmerkwaarde9, '=') - 1))) kenmerk_key9,
                 MIN(SUBSTR (alg_kenmerkwaarde9, INSTR (alg_kenmerkwaarde9, '=') + 1)) waarde9,
                 MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde10, 1, INSTR (alg_kenmerkwaarde10, '=') - 1))) kenmerk_key10,
                 MIN(SUBSTR (alg_kenmerkwaarde10, INSTR (alg_kenmerkwaarde10, '=') + 1)) waarde10
          FROM   conn_imp_onrgoed1
      GROUP BY   UPPER (alg_regio_omschrijving),
                 UPPER (alg_district_omschrijving),
                 UPPER (alg_locatie_code)
      ORDER BY   1, 2, 3;

   CURSOR cSrtGebouw                                   -- Gebouwfunctie uniek!
   IS
        SELECT   MIN (alg_srtgebouw_omschrijving) alg_srtgebouw_omschrijving
          FROM   conn_imp_onrgoed1
         WHERE   alg_srtgebouw_omschrijving IS NOT NULL
      GROUP BY   UPPER (alg_srtgebouw_omschrijving)
      ORDER BY   1;

   CURSOR cGebouw              -- Gebouwcode uniek binnen locatie (naam niet)!
   IS
        SELECT   MIN (alg_regio_omschrijving) alg_regio_omschrijving,
                 MIN (alg_district_omschrijving) alg_district_omschrijving,
                 MIN (alg_locatie_code) alg_locatie_code,
                 MIN (alg_gebouw_code) alg_gebouw_code,
                 MIN (alg_gebouw_naam) alg_gebouw_naam,
                 MIN (alg_srtgebouw_omschrijving) alg_srtgebouw_omschrijving,
                 MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde1, 1, INSTR (alg_kenmerkwaarde1, '=') - 1))) kenmerk_key1,
                 MIN(SUBSTR (alg_kenmerkwaarde1, INSTR (alg_kenmerkwaarde1, '=') + 1)) waarde1,
                 MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde2, 1, INSTR (alg_kenmerkwaarde2, '=') - 1))) kenmerk_key2,
                 MIN(SUBSTR (alg_kenmerkwaarde2, INSTR (alg_kenmerkwaarde2, '=') + 1)) waarde2,
                 MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde3, 1, INSTR (alg_kenmerkwaarde3, '=') - 1))) kenmerk_key3,
                 MIN(SUBSTR (alg_kenmerkwaarde3, INSTR (alg_kenmerkwaarde3, '=') + 1)) waarde3,
                 MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde4, 1, INSTR (alg_kenmerkwaarde4, '=') - 1))) kenmerk_key4,
                 MIN(SUBSTR (alg_kenmerkwaarde4, INSTR (alg_kenmerkwaarde4, '=') + 1)) waarde4,
                 MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde5, 1, INSTR (alg_kenmerkwaarde5, '=') - 1))) kenmerk_key5,
                 MIN(SUBSTR (alg_kenmerkwaarde5, INSTR (alg_kenmerkwaarde5, '=') + 1)) waarde5,
                 MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde6, 1, INSTR (alg_kenmerkwaarde6, '=') - 1))) kenmerk_key6,
                 MIN(SUBSTR (alg_kenmerkwaarde6, INSTR (alg_kenmerkwaarde6, '=') + 1)) waarde6,
                 MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde7, 1, INSTR (alg_kenmerkwaarde7, '=') - 1))) kenmerk_key7,
                 MIN(SUBSTR (alg_kenmerkwaarde7, INSTR (alg_kenmerkwaarde7, '=') + 1)) waarde7,
                 MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde8, 1, INSTR (alg_kenmerkwaarde8, '=') - 1))) kenmerk_key8,
                 MIN(SUBSTR (alg_kenmerkwaarde8, INSTR (alg_kenmerkwaarde8, '=') + 1)) waarde8,
                 MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde9, 1, INSTR (alg_kenmerkwaarde9, '=') - 1))) kenmerk_key9,
                 MIN(SUBSTR (alg_kenmerkwaarde9, INSTR (alg_kenmerkwaarde9, '=') + 1)) waarde9,
                 MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde10, 1, INSTR (alg_kenmerkwaarde10, '=') - 1))) kenmerk_key10,
                 MIN(SUBSTR (alg_kenmerkwaarde10, INSTR (alg_kenmerkwaarde10, '=') + 1)) waarde10
          FROM   conn_imp_onrgoed1
      GROUP BY   UPPER (alg_regio_omschrijving),
                 UPPER (alg_district_omschrijving),
                 UPPER (alg_locatie_code),
                 UPPER (alg_gebouw_code)
      ORDER BY   1, 2, 3, 4;

   -- SUBPROC
   PROCEDURE upsert_algkenmerk (p_alg_key       IN NUMBER,
                                p_alg_niv       IN VARCHAR2,
                                p_kenmerk_key   IN NUMBER,
                                p_waarde        IN VARCHAR2)
   AS
      v_kenmerk_niveau       VARCHAR2 (1);
      v_kenmerk_type         VARCHAR2 (1);
      ccount                 NUMBER;
      v_waarde               VARCHAR2 (255);
      v_objectnaam           VARCHAR2 (30);
      v_kolomnaam            VARCHAR2 (30);
      v_kolomtxt             VARCHAR2 (30);
      sql_stmt               VARCHAR2 (1000);
      v_onrgoedkenmerk_key   NUMBER;
   BEGIN
      IF p_kenmerk_key IS NOT NULL AND p_waarde IS NOT NULL
      THEN
         v_errormsg := 'Fout bij bepalen kenmerk [' || p_kenmerk_key || ']';

         SELECT   alg_kenmerk_niveau, alg_kenmerk_kenmerktype
           INTO   v_kenmerk_niveau, v_kenmerk_type
           FROM   alg_kenmerk
          WHERE       alg_kenmerk_verwijder IS NULL
                  AND alg_kenmerk_key = p_kenmerk_key
                  AND alg_kenmerk_niveau IN ('L', 'G');

         IF (v_kenmerk_niveau = p_alg_niv)    -- Alleen op juiste niveau doen!
         THEN
            IF v_kenmerk_type IN ('R', 'S')
            THEN
               v_errormsg := 'Fout bij bepalen eigen tabel';

               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   alg_kenmerk k, fac_kenmerkdomein d
                WHERE       k.alg_kenmerk_key = p_kenmerk_key
                        AND k.alg_kenmerk_niveau = p_alg_niv
                        AND k.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
                        AND d.fac_usrtab_key IS NOT NULL;

               v_errormsg :=
                  'Fout bij bepalen nieuwe waarde [' || p_waarde || ']';

               IF ccount = 1
               THEN                                             -- Eigen tabel
                  SELECT   TO_CHAR (ud.fac_usrdata_key)
                    INTO   v_waarde
                    FROM   alg_kenmerk k,
                           fac_kenmerkdomein d,
                           fac_v_aanwezigusrdata ud
                   WHERE   k.alg_kenmerk_key = p_kenmerk_key
                           AND k.alg_kenmerk_niveau = p_alg_niv
                           AND k.fac_kenmerkdomein_key =
                                 d.fac_kenmerkdomein_key
                           AND d.fac_usrtab_key = ud.fac_usrtab_key
                           AND UPPER (TRIM (ud.fac_usrdata_omschr)) =
                                 UPPER (p_waarde);
               ELSE                                    -- FACILITOR view/tabel
                  SELECT   d.fac_kenmerkdomein_objectnaam,
                           d.fac_kenmerkdomein_kolomnaam,
                           d.fac_kenmerkdomein_kolomtxt
                    INTO   v_objectnaam, v_kolomnaam, v_kolomtxt
                    FROM   alg_kenmerk k, fac_kenmerkdomein d
                   WHERE   k.alg_kenmerk_key = p_kenmerk_key
                           AND k.alg_kenmerk_niveau = p_alg_niv
                           AND k.fac_kenmerkdomein_key =
                                 d.fac_kenmerkdomein_key
                           AND d.fac_usrtab_key IS NULL;

                  sql_stmt :=
                        'SELECT MAX ('
                     || v_kolomnaam
                     || ') FROM '
                     || v_objectnaam
                     || ' WHERE UPPER (TRIM ('
                     || v_kolomtxt
                     || ')) = UPPER ('''
                     || p_waarde
                     || ''')';

                  EXECUTE IMMEDIATE sql_stmt INTO   v_waarde;
               END IF;
            ELSE                               -- C(haracter)/D(ate)/N(umeric)
               v_waarde := p_waarde;
            END IF;

            v_errormsg := 'Fout bij bepalen huidige waarde';

            SELECT   COUNT ( * ), MAX (alg_onrgoedkenmerk_key)
              INTO   ccount, v_onrgoedkenmerk_key
              FROM   alg_v_aanwezigonrgoedkenmerk
             WHERE       alg_onrgoed_key = p_alg_key
                     AND alg_onrgoed_niveau = p_alg_niv
                     AND alg_kenmerk_key = p_kenmerk_key;

            IF ccount = 0
            THEN
               v_errormsg := 'Fout bij toevoegen waarde [' || v_waarde || ']';

               INSERT INTO alg_onrgoedkenmerk (alg_onrgoed_key,
                                               alg_onrgoed_niveau,
                                               alg_kenmerk_key,
                                               alg_onrgoedkenmerk_waarde)
                 VALUES   (p_alg_key,
                           p_alg_niv,
                           p_kenmerk_key,
                           v_waarde);
            ELSE
               v_errormsg := 'Fout bij bijwerken waarde [' || v_waarde || ']';

               UPDATE   alg_onrgoedkenmerk
                  SET   alg_onrgoedkenmerk_waarde = v_waarde
                WHERE   alg_onrgoedkenmerk_key = v_onrgoedkenmerk_key;
            END IF;
         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,
                           'upsert_algkenmerk');
   END;
BEGIN
   -- ***********
   -- ***REGIO***
   -- ***********
   v_count_tot := 0;
   v_count_new := 0;

   FOR recRegio IN cRegio
   LOOP
      BEGIN
         v_count_tot := v_count_tot + 1;
         v_aanduiding := '[' || recRegio.alg_regio_omschrijving || '] ';
         v_errormsg := 'Fout bij toevoegen regio';

         SELECT   COUNT ( * )
           INTO   v_count
           FROM   alg_v_aanwezigregio
          WHERE   TRIM (alg_regio_upper) =
                     UPPER (recRegio.alg_regio_omschrijving);

         IF (v_count = 0)
         THEN
            INSERT INTO alg_regio (alg_regio_omschrijving)
              VALUES   (recRegio.alg_regio_omschrijving);

            v_count_new := v_count_new + 1;
         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,
                              '');
      END;
   END LOOP;

   fac.imp_writelog (p_import_key,
                     'S',
                     'Regio/#ingelezen: ' || TO_CHAR (v_count_tot),
                     '');
   fac.imp_writelog (p_import_key,
                     'S',
                     'Regio/#toegevoegd: ' || TO_CHAR (v_count_new),
                     '');
   COMMIT;

   -- **************
   -- ***DISTRICT***
   -- **************
   v_count_tot := 0;
   v_count_new := 0;

   FOR recDistrict IN cDistrict
   LOOP
      BEGIN
         v_count_tot := v_count_tot + 1;
         v_aanduiding :=
               '['
            || recDistrict.alg_regio_omschrijving
            || '|'
            || recDistrict.alg_district_omschrijving
            || '] ';
         v_errormsg := 'Fout bij bepalen regio';

         SELECT   alg_regio_key
           INTO   v_regio_key
           FROM   alg_v_aanwezigregio
          WHERE   alg_regio_upper =
                     UPPER (recDistrict.alg_regio_omschrijving);

         v_errormsg := 'Fout bij toevoegen district';

         SELECT   COUNT ( * )
           INTO   v_count
           FROM   alg_v_aanwezigdistrict
          WHERE   alg_regio_key = v_regio_key
                  AND TRIM (alg_district_upper) =
                        UPPER (recDistrict.alg_district_omschrijving);

         IF (v_count = 0)
         THEN
            INSERT INTO alg_district (
                                         alg_regio_key,
                                         alg_district_omschrijving
                       )
              VALUES   (v_regio_key, recDistrict.alg_district_omschrijving);

            v_count_new := v_count_new + 1;
         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,
                              '');
      END;
   END LOOP;

   fac.imp_writelog (p_import_key,
                     'S',
                     'District/#ingelezen: ' || TO_CHAR (v_count_tot),
                     '');
   fac.imp_writelog (p_import_key,
                     'S',
                     'District/#toegevoegd: ' || TO_CHAR (v_count_new),
                     '');
   COMMIT;

   -- **************
   -- ***LOCATIE****
   -- **************
   v_count_tot := 0;
   v_count_new := 0;
   v_count_upd := 0;

   FOR recLocatie IN cLocatie
   LOOP
      BEGIN
         v_count_tot := v_count_tot + 1;
         v_aanduiding :=
               '['
            || recLocatie.alg_regio_omschrijving
            || '|'
            || recLocatie.alg_district_omschrijving
            || '|'
            || recLocatie.alg_locatie_code
            || '] ';
         v_errormsg := 'Fout bij bepalen regio';

         SELECT   alg_regio_key
           INTO   v_regio_key
           FROM   alg_v_aanwezigregio
          WHERE   alg_regio_upper = UPPER (recLocatie.alg_regio_omschrijving);

         v_errormsg := 'Fout bij bepalen district';

         SELECT   alg_district_key
           INTO   v_district_key
           FROM   alg_v_aanwezigdistrict
          WHERE   alg_regio_key = v_regio_key
                  AND TRIM (alg_district_upper) =
                        UPPER (recLocatie.alg_district_omschrijving);

         v_errormsg := 'Fout bij toevoegen locatie';

         SELECT   COUNT ( * )
           INTO   v_count
           FROM   alg_v_aanweziglocatie
          WHERE   alg_district_key = v_district_key
                  AND UPPER (alg_locatie_code) =
                        UPPER (recLocatie.alg_locatie_code);

         IF (v_count = 0)
         THEN
            INSERT INTO alg_locatie (alg_district_key,
                                     alg_locatie_code,
                                     alg_locatie_omschrijving,
                                     alg_locatie_verantw,
                                     alg_locatie_verantw_tel,
                                     alg_locatie_adres,
                                     alg_locatie_postcode,
                                     alg_locatie_plaats,
                                     alg_locatie_land,
                                     alg_locatie_post_adres,
                                     alg_locatie_post_postcode,
                                     alg_locatie_post_plaats,
                                     alg_locatie_post_land)
               VALUES   (v_district_key,
                         recLocatie.alg_locatie_code,
                         recLocatie.alg_locatie_omschrijving,
                         recLocatie.alg_locatie_verantw,
                         recLocatie.alg_locatie_verantw_tel,
                         recLocatie.alg_locatie_adres,
                         recLocatie.alg_locatie_postcode,
                         recLocatie.alg_locatie_plaats,
                         recLocatie.alg_locatie_land,
                         recLocatie.alg_locatie_post_adres,
                         recLocatie.alg_locatie_post_postcode,
                         recLocatie.alg_locatie_post_plaats,
                         recLocatie.alg_locatie_post_land)
            RETURNING   alg_locatie_key      INTO   v_locatie_key;

            v_srtnoti_code := 'ALGLNE';
            v_count_new := v_count_new + 1;
         ELSE                                             -- bijwerken object!
            v_errormsg := 'Fout bij bepalen locatie';

            SELECT   alg_locatie_key
              INTO   v_locatie_key
              FROM   alg_v_aanweziglocatie
             WHERE   UPPER (TRIM (alg_locatie_code)) =
                        UPPER (recLocatie.alg_locatie_code);

            v_srtnoti_code := 'ALGLUP';
            v_count_upd := v_count_upd + 1;
         END IF;

         -- NULL-waarden resulteren NIET in het wissen van kenmerkvelden
         -- (bijwerken kan wel, maar wissen dus niet)!
         upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key1, recLocatie.waarde1);
         upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key2, recLocatie.waarde2);
         upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key3, recLocatie.waarde3);
         upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key4, recLocatie.waarde4);
         upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key5, recLocatie.waarde5);
         upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key6, recLocatie.waarde6);
         upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key7, recLocatie.waarde7);
         upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key8, recLocatie.waarde8);
         upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key9, recLocatie.waarde9);
         upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key10, recLocatie.waarde10);

         fac.trackaction (v_srtnoti_code, v_locatie_key, NULL, NULL, NULL);
         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,
                              'W',
                              v_aanduiding || v_errormsg,
                              '');
            COMMIT;
      END;
   END LOOP;

   fac.imp_writelog (p_import_key,
                     'S',
                     'Locatie/#ingelezen: ' || TO_CHAR (v_count_tot),
                     '');
   fac.imp_writelog (p_import_key,
                     'S',
                     'Locatie/#toegevoegd: ' || TO_CHAR (v_count_new),
                     '');
   fac.imp_writelog (p_import_key,
                     'S',
                     'Locatie/#bijgewerkt: ' || TO_CHAR (v_count_upd),
                     '');
   COMMIT;

   -- ********************
   -- ***GEBOUWFUNCTIE****
   -- ********************
   v_count_tot := 0;
   v_count_new := 0;

   FOR recSrtGebouw IN cSrtGebouw
   LOOP
      BEGIN
         v_count_tot := v_count_tot + 1;
         v_aanduiding :=
            '[' || recSrtGebouw.alg_srtgebouw_omschrijving || '] ';
         v_errormsg := 'Fout bij toevoegen gebouwfunctie';

         SELECT   COUNT ( * )
           INTO   v_count
           FROM   alg_v_aanwezigsrtgebouw
          WHERE   TRIM (alg_srtgebouw_upper) =
                     UPPER (recSrtGebouw.alg_srtgebouw_omschrijving);

         IF (v_count = 0)
         THEN
            INSERT INTO alg_srtgebouw (alg_srtgebouw_omschrijving)
              VALUES   (recSrtGebouw.alg_srtgebouw_omschrijving);

            v_count_new := v_count_new + 1;
         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,
                              '');
      END;
   END LOOP;

   fac.imp_writelog (p_import_key,
                     'S',
                     'Gebouwfunctie/#ingelezen: ' || TO_CHAR (v_count_tot),
                     '');
   fac.imp_writelog (p_import_key,
                     'S',
                     'Gebouwfunctie/#toegevoegd: ' || TO_CHAR (v_count_new),
                     '');
   COMMIT;

   -- ************
   -- ***GEBOUW***
   -- ************
   v_count_tot := 0;
   v_count_new := 0;
   v_count_upd := 0;

   FOR recGebouw IN cGebouw
   LOOP
      BEGIN
         v_count_tot := v_count_tot + 1;
         v_aanduiding :=
               '['
            || recGebouw.alg_regio_omschrijving
            || '|'
            || recGebouw.alg_district_omschrijving
            || '|'
            || recGebouw.alg_locatie_code
            || '|'
            || recGebouw.alg_gebouw_code
            || '] ';
         v_errormsg := 'Fout bij bepalen regio';

         SELECT   alg_regio_key
           INTO   v_regio_key
           FROM   alg_v_aanwezigregio
          WHERE   alg_regio_upper = UPPER (recGebouw.alg_regio_omschrijving);

         v_errormsg := 'Fout bij bepalen district';

         SELECT   alg_district_key
           INTO   v_district_key
           FROM   alg_v_aanwezigdistrict
          WHERE   alg_regio_key = v_regio_key
                  AND TRIM (alg_district_upper) =
                        UPPER (recGebouw.alg_district_omschrijving);

         v_errormsg := 'Fout bij bepalen locatie';

         SELECT   alg_locatie_key
           INTO   v_locatie_key
           FROM   alg_v_aanweziglocatie
          WHERE   alg_district_key = v_district_key
                  AND UPPER (TRIM (alg_locatie_code)) =
                        UPPER (recGebouw.alg_locatie_code);

         IF (recGebouw.alg_srtgebouw_omschrijving IS NOT NULL)
         THEN
            v_errormsg := 'Fout bij bepalen gebouwfunctie';

            SELECT   alg_srtgebouw_key
              INTO   v_srtgebouw_key
              FROM   alg_v_aanwezigsrtgebouw
             WHERE   TRIM (alg_srtgebouw_upper) =
                        UPPER (recGebouw.alg_srtgebouw_omschrijving);
         END IF;

         v_errormsg := 'Fout bij toevoegen gebouw';

         SELECT   COUNT ( * )
           INTO   v_count
           FROM   alg_v_aanweziggebouw
          WHERE   alg_locatie_key = v_locatie_key
                  AND UPPER (TRIM (alg_gebouw_code)) =
                        UPPER (recGebouw.alg_gebouw_code);

         IF (v_count = 0)
         THEN
            INSERT INTO alg_gebouw (alg_locatie_key,
                                    alg_gebouw_code,
                                    alg_gebouw_naam,
                                    alg_srtgebouw_key)
               VALUES   (v_locatie_key,
                         recGebouw.alg_gebouw_code,
                         recGebouw.alg_gebouw_naam,
                         v_srtgebouw_key)
            RETURNING   alg_gebouw_key      INTO   v_gebouw_key;

            v_srtnoti_code := 'ALGGNE';
            v_count_new := v_count_new + 1;
         ELSE                                             -- bijwerken object!
            v_errormsg := 'Fout bij bepalen gebouw';

            SELECT   alg_gebouw_key
              INTO   v_gebouw_key
              FROM   alg_v_aanweziggebouw
             WHERE   alg_locatie_key = v_locatie_key
                     AND UPPER (TRIM (alg_gebouw_code)) =
                           UPPER (recGebouw.alg_gebouw_code);

            v_srtnoti_code := 'ALGGUP';
            v_count_upd := v_count_upd + 1;
         END IF;

         -- NULL-waarden resulteren NIET in het wissen van kenmerkvelden
         -- (bijwerken kan wel, maar wissen dus niet)!
         upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key1, recGebouw.waarde1);
         upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key2, recGebouw.waarde2);
         upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key3, recGebouw.waarde3);
         upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key4, recGebouw.waarde4);
         upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key5, recGebouw.waarde5);
         upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key6, recGebouw.waarde6);
         upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key7, recGebouw.waarde7);
         upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key8, recGebouw.waarde8);
         upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key9, recGebouw.waarde9);
         upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key10, recGebouw.waarde10);

         fac.trackaction (v_srtnoti_code, v_gebouw_key, NULL, NULL, NULL);
         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,
                              'W',
                              v_aanduiding || v_errormsg,
                              '');
         COMMIT;
      END;
   END LOOP;

   fac.imp_writelog (p_import_key,
                     'S',
                     'Gebouw/#ingelezen: ' || TO_CHAR (v_count_tot),
                     '');
   fac.imp_writelog (p_import_key,
                     'S',
                     'Gebouw/#toegevoegd: ' || TO_CHAR (v_count_new),
                     '');
   fac.imp_writelog (p_import_key,
                     'S',
                     'Gebouw/#bijgewerkt: ' || TO_CHAR (v_count_upd),
                     '');
   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_errormsg,
                        'Importproces locaties/gebouwen afgebroken!');
END conn_update_onrgoed1;
/

-- BASW-export; eporteer de afgemelde opdrachten (sinds de laatste keer) en
-- markeer deze vervolgens als 'ORDAFM-doorgezet' (= hidden kenmerk)!
/* Formatted on 26-4-2012 11:32:24 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW conn_v_export_ordafm_xml (RESULT, result_order)
AS
   SELECT   fac_rapport_regel, fac_rapport_volgnr
     FROM   fac_rapport
    WHERE   fac_rapport_node = SUBSTR ('ORDAFM_XML', 1, 12);

/* Formatted on 27-4-2012 15:12:24 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE conn_select_ordafm_xml (p_applname   IN VARCHAR2,
                                                    p_applrun    IN VARCHAR2)
AS
   -- Cursor loopt over een tijdelijke tabel met daarin opgebouwd alle gegevens
   -- van de te exporteren afgemelde Uitvoering-opdrachten (opdrachttype = 5).
   CURSOR c1
   IS
        SELECT   opdr.mld_opdr_key,
                 opdr.mld_kenmerk_key,
                 opdr.mld_key || '/' || opdr.volgnr opdrachtnr,
                 TO_CHAR (ordafdm.fac_tracking_datum, 'dd-mm-yyyy hh24:mi:ss')
                    afmelddatum
          FROM      (SELECT   o.mld_opdr_key,
                              k.mld_kenmerk_key,
                              o.mld_melding_key mld_key,
                              o.mld_opdr_bedrijfopdr_volgnr volgnr
                       FROM   mld_opdr o, mld_kenmerk k
                      WHERE       o.mld_statusopdr_key = 6         -- Afgemeld
                              AND o.mld_typeopdr_key = 5         -- Uitvoering
                              AND o.mld_typeopdr_key = k.mld_typeopdr_key
                              AND k.mld_srtkenmerk_key = 1111
                              AND NOT EXISTS
                                    (SELECT   1
                                       FROM   mld_kenmerkopdr ko, mld_kenmerk k
                                      WHERE   ko.mld_opdr_key = o.mld_opdr_key
                                              AND ko.mld_kenmerk_key =
                                                    k.mld_kenmerk_key
                                              AND k.mld_srtkenmerk_key = 1111))
                    opdr
                 LEFT JOIN
                    fac_tracking ordafdm
                 ON opdr.mld_opdr_key = ordafdm.fac_tracking_refkey
                    AND ordafdm.fac_srtnotificatie_key = 26
      ORDER BY   1, 2;

   c_ordafm2bw_srtkenmerk_key   NUMBER (10) := 1111; -- Aangemaakt met CONN52!
   v_errormsg                   VARCHAR2 (1000);
   oracle_err_num               NUMBER;
   oracle_err_mes               VARCHAR2 (200);
   v_rownr                      NUMBER;
   v_count                      NUMBER;

   PROCEDURE add_row (p_regel IN VARCHAR2)
   AS
   BEGIN
      INSERT INTO fac_rapport (
                                  fac_rapport_node,
                                  fac_rapport_volgnr,
                                  fac_rapport_regel
                 )
        VALUES   (SUBSTR (p_applname, 1, 12), v_rownr, p_regel);

      v_rownr := v_rownr + 1;
   END;

   PROCEDURE add_element (p_tag IN VARCHAR2, p_value IN VARCHAR2)
   AS
   BEGIN
      add_row(   '<'
              || p_tag
              || '>'
              || xml.char_to_html (p_value)
              || '</'
              || p_tag
              || '>');
   END;
BEGIN
   v_rownr := 0;

   DELETE   fac_rapport
    WHERE   fac_rapport_node = SUBSTR (p_applname, 1, 12);

   COMMIT;

   SELECT   COUNT ( * )
     INTO   v_count
     FROM   mld_opdr o
    WHERE   mld_statusopdr_key = 6                                 -- Afgemeld
                                  AND o.mld_typeopdr_key = 5     -- Uitvoering
            AND NOT EXISTS
                  (SELECT   1
                     FROM   mld_kenmerkopdr ko, mld_kenmerk k
                    WHERE   ko.mld_opdr_key = o.mld_opdr_key
                            AND ko.mld_kenmerk_key = k.mld_kenmerk_key
                            AND k.mld_srtkenmerk_key =
                                  c_ordafm2bw_srtkenmerk_key);

   IF (v_count > 0)
   THEN
      -- header
      add_row (
         '<?xml version="1.0" encoding="windows-1252" standalone="yes"?>'
      );
      add_row ('<basware>');
      add_row ('<opdrachtlijst>');

      FOR rec IN c1
      LOOP
         BEGIN
            add_row(   '<opdracht key='
                    || CHR (34)
                    || rec.opdrachtnr
                    || CHR (34)
                    || '>');
            add_element ('afmelddatum', rec.afmelddatum);
            add_row ('</opdracht>');

            -- Markeer opdracht als 'ORDAFM-doorgezet'!
            INSERT INTO mld_kenmerkopdr (
                                            mld_opdr_key,
                                            mld_kenmerk_key,
                                            mld_kenmerkopdr_waarde
                       )
              VALUES   (rec.mld_opdr_key, rec.mld_kenmerk_key, '1');

            COMMIT;
         END;
      END LOOP;

      add_row ('</opdrachtlijst>');
      add_row ('</basware>');
   END IF;

   fac.writelog (p_applname,
                 'S',
                 'Aantal opdrachten afgemeld: ' || TO_CHAR (v_count),
                 '');
   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg :=
         'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.writelog (p_applname,
                    'E',
                    'ORDAFM_XML-export afgebroken!',
                    v_errormsg);
      COMMIT;
END;
/

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